@budibase/pro 3.17.3 → 3.17.4

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.
@@ -6,6 +6,11 @@ import { LLMConfigOptions, ResponseFormat } from "@budibase/types";
6
6
  import openai from "openai";
7
7
  import { Readable } from "node:stream";
8
8
  export type OpenAIModel = "gpt-4o-mini" | "gpt-4o" | "gpt-4" | "gpt-4-turbo" | "gpt-3.5-turbo" | "gpt-5" | "gpt-5-mini" | "gpt-5-nano";
9
+ export declare enum GPT_5_MODELS {
10
+ GPT_5_MINI = "gpt-5-mini",
11
+ GPT_5 = "gpt-5",
12
+ GPT_5_NANO = "gpt-5-nano"
13
+ }
9
14
  export declare function parseResponseFormat(responseFormat?: ResponseFormat): openai.ResponseFormatText | openai.ResponseFormatJSONObject | openai.ResponseFormatJSONSchema | undefined;
10
15
  export declare class OpenAI extends LLM {
11
16
  protected client: OpenAIClient;
package/dist/index.js CHANGED
@@ -1,14 +1,14 @@
1
- "use strict";var UI=Object.create;var Na=Object.defineProperty;var qI=Object.getOwnPropertyDescriptor;var DI=Object.getOwnPropertyNames;var NI=Object.getPrototypeOf,BI=Object.prototype.hasOwnProperty;var u=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),w=(e,t)=>{for(var r in t)Na(e,r,{get:t[r],enumerable:!0})},Fu=(e,t,r,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of DI(t))!BI.call(e,n)&&n!==r&&Na(e,n,{get:()=>t[n],enumerable:!(a=qI(t,n))||a.enumerable});return e};var P=(e,t,r)=>(r=e!=null?UI(NI(e)):{},Fu(t||!e||!e.__esModule?Na(r,"default",{value:e,enumerable:!0}):r,e)),MI=e=>Fu(Na({},"__esModule",{value:!0}),e);var Za=u((s0,vp)=>{"use strict";function DS(e,t){for(var r=-1,a=t.length,n=e.length;++r<a;)e[n+r]=t[r];return e}vp.exports=DS});var Oo=u((i0,_p)=>{"use strict";var NS=typeof global=="object"&&global&&global.Object===Object&&global;_p.exports=NS});var pe=u((u0,xp)=>{"use strict";var BS=Oo(),MS=typeof self=="object"&&self&&self.Object===Object&&self,kS=BS||MS||Function("return this")();xp.exports=kS});var xt=u((p0,Cp)=>{"use strict";var GS=pe(),FS=GS.Symbol;Cp.exports=FS});var Up=u((c0,Pp)=>{"use strict";var Op=xt(),Lp=Object.prototype,QS=Lp.hasOwnProperty,jS=Lp.toString,zr=Op?Op.toStringTag:void 0;function WS(e){var t=QS.call(e,zr),r=e[zr];try{e[zr]=void 0;var a=!0}catch{}var n=jS.call(e);return a&&(t?e[zr]=r:delete e[zr]),n}Pp.exports=WS});var Dp=u((l0,qp)=>{"use strict";var $S=Object.prototype,KS=$S.toString;function VS(e){return KS.call(e)}qp.exports=VS});var gt=u((d0,Mp)=>{"use strict";var Np=xt(),YS=Up(),HS=Dp(),zS="[object Null]",JS="[object Undefined]",Bp=Np?Np.toStringTag:void 0;function XS(e){return e==null?e===void 0?JS:zS:Bp&&Bp in Object(e)?YS(e):HS(e)}Mp.exports=XS});var be=u((f0,kp)=>{"use strict";function ZS(e){return e!=null&&typeof e=="object"}kp.exports=ZS});var Fp=u((m0,Gp)=>{"use strict";var ew=gt(),tw=be(),rw="[object Arguments]";function aw(e){return tw(e)&&ew(e)==rw}Gp.exports=aw});var Jr=u((g0,Wp)=>{"use strict";var Qp=Fp(),nw=be(),jp=Object.prototype,ow=jp.hasOwnProperty,sw=jp.propertyIsEnumerable,iw=Qp(function(){return arguments}())?Qp:function(e){return nw(e)&&ow.call(e,"callee")&&!sw.call(e,"callee")};Wp.exports=iw});var se=u((y0,$p)=>{"use strict";var uw=Array.isArray;$p.exports=uw});var Hp=u((h0,Yp)=>{"use strict";var Kp=xt(),pw=Jr(),cw=se(),Vp=Kp?Kp.isConcatSpreadable:void 0;function lw(e){return cw(e)||pw(e)||!!(Vp&&e&&e[Vp])}Yp.exports=lw});var Lo=u((A0,Jp)=>{"use strict";var dw=Za(),fw=Hp();function zp(e,t,r,a,n){var o=-1,s=e.length;for(r||(r=fw),n||(n=[]);++o<s;){var i=e[o];t>0&&r(i)?t>1?zp(i,t-1,r,a,n):dw(n,i):a||(n[n.length]=i)}return n}Jp.exports=zp});var Xr=u((b0,Xp)=>{"use strict";function mw(e){return e}Xp.exports=mw});var en=u((I0,Zp)=>{"use strict";function gw(e,t,r){switch(r.length){case 0:return e.call(t);case 1:return e.call(t,r[0]);case 2:return e.call(t,r[0],r[1]);case 3:return e.call(t,r[0],r[1],r[2])}return e.apply(t,r)}Zp.exports=gw});var Po=u((S0,tc)=>{"use strict";var yw=en(),ec=Math.max;function hw(e,t,r){return t=ec(t===void 0?e.length-1:t,0),function(){for(var a=arguments,n=-1,o=ec(a.length-t,0),s=Array(o);++n<o;)s[n]=a[t+n];n=-1;for(var i=Array(t+1);++n<t;)i[n]=a[n];return i[t]=r(s),yw(e,this,i)}}tc.exports=hw});var ac=u((w0,rc)=>{"use strict";function Aw(e){return function(){return e}}rc.exports=Aw});var xe=u((T0,nc)=>{"use strict";function bw(e){var t=typeof e;return e!=null&&(t=="object"||t=="function")}nc.exports=bw});var Zr=u((E0,oc)=>{"use strict";var Iw=gt(),Sw=xe(),ww="[object AsyncFunction]",Tw="[object Function]",Ew="[object GeneratorFunction]",Rw="[object Proxy]";function vw(e){if(!Sw(e))return!1;var t=Iw(e);return t==Tw||t==Ew||t==ww||t==Rw}oc.exports=vw});var ic=u((R0,sc)=>{"use strict";var _w=pe(),xw=_w["__core-js_shared__"];sc.exports=xw});var cc=u((v0,pc)=>{"use strict";var Uo=ic(),uc=function(){var e=/[^.]+$/.exec(Uo&&Uo.keys&&Uo.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}();function Cw(e){return!!uc&&uc in e}pc.exports=Cw});var qo=u((_0,lc)=>{"use strict";var Ow=Function.prototype,Lw=Ow.toString;function Pw(e){if(e!=null){try{return Lw.call(e)}catch{}try{return e+""}catch{}}return""}lc.exports=Pw});var fc=u((x0,dc)=>{"use strict";var Uw=Zr(),qw=cc(),Dw=xe(),Nw=qo(),Bw=/[\\^$.*+?()[\]{}|]/g,Mw=/^\[object .+?Constructor\]$/,kw=Function.prototype,Gw=Object.prototype,Fw=kw.toString,Qw=Gw.hasOwnProperty,jw=RegExp("^"+Fw.call(Qw).replace(Bw,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function Ww(e){if(!Dw(e)||qw(e))return!1;var t=Uw(e)?jw:Mw;return t.test(Nw(e))}dc.exports=Ww});var gc=u((C0,mc)=>{"use strict";function $w(e,t){return e?.[t]}mc.exports=$w});var yt=u((O0,yc)=>{"use strict";var Kw=fc(),Vw=gc();function Yw(e,t){var r=Vw(e,t);return Kw(r)?r:void 0}yc.exports=Yw});var Do=u((L0,hc)=>{"use strict";var Hw=yt(),zw=function(){try{var e=Hw(Object,"defineProperty");return e({},"",{}),e}catch{}}();hc.exports=zw});var Ic=u((P0,bc)=>{"use strict";var Jw=ac(),Ac=Do(),Xw=Xr(),Zw=Ac?function(e,t){return Ac(e,"toString",{configurable:!0,enumerable:!1,value:Jw(t),writable:!0})}:Xw;bc.exports=Zw});var No=u((U0,Sc)=>{"use strict";var eT=800,tT=16,rT=Date.now;function aT(e){var t=0,r=0;return function(){var a=rT(),n=tT-(a-r);if(r=a,n>0){if(++t>=eT)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}Sc.exports=aT});var tn=u((q0,wc)=>{"use strict";var nT=Ic(),oT=No(),sT=oT(nT);wc.exports=sT});var Bo=u((D0,Tc)=>{"use strict";var iT=Xr(),uT=Po(),pT=tn();function cT(e,t){return pT(uT(e,t,iT),e+"")}Tc.exports=cT});var ea=u((N0,Ec)=>{"use strict";var lT=yt(),dT=lT(Object,"create");Ec.exports=dT});var _c=u((B0,vc)=>{"use strict";var Rc=ea();function fT(){this.__data__=Rc?Rc(null):{},this.size=0}vc.exports=fT});var Cc=u((M0,xc)=>{"use strict";function mT(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}xc.exports=mT});var Lc=u((k0,Oc)=>{"use strict";var gT=ea(),yT="__lodash_hash_undefined__",hT=Object.prototype,AT=hT.hasOwnProperty;function bT(e){var t=this.__data__;if(gT){var r=t[e];return r===yT?void 0:r}return AT.call(t,e)?t[e]:void 0}Oc.exports=bT});var Uc=u((G0,Pc)=>{"use strict";var IT=ea(),ST=Object.prototype,wT=ST.hasOwnProperty;function TT(e){var t=this.__data__;return IT?t[e]!==void 0:wT.call(t,e)}Pc.exports=TT});var Dc=u((F0,qc)=>{"use strict";var ET=ea(),RT="__lodash_hash_undefined__";function vT(e,t){var r=this.__data__;return this.size+=this.has(e)?0:1,r[e]=ET&&t===void 0?RT:t,this}qc.exports=vT});var Bc=u((Q0,Nc)=>{"use strict";var _T=_c(),xT=Cc(),CT=Lc(),OT=Uc(),LT=Dc();function Ht(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t<r;){var a=e[t];this.set(a[0],a[1])}}Ht.prototype.clear=_T;Ht.prototype.delete=xT;Ht.prototype.get=CT;Ht.prototype.has=OT;Ht.prototype.set=LT;Nc.exports=Ht});var kc=u((j0,Mc)=>{"use strict";function PT(){this.__data__=[],this.size=0}Mc.exports=PT});var zt=u((W0,Gc)=>{"use strict";function UT(e,t){return e===t||e!==e&&t!==t}Gc.exports=UT});var ta=u(($0,Fc)=>{"use strict";var qT=zt();function DT(e,t){for(var r=e.length;r--;)if(qT(e[r][0],t))return r;return-1}Fc.exports=DT});var jc=u((K0,Qc)=>{"use strict";var NT=ta(),BT=Array.prototype,MT=BT.splice;function kT(e){var t=this.__data__,r=NT(t,e);if(r<0)return!1;var a=t.length-1;return r==a?t.pop():MT.call(t,r,1),--this.size,!0}Qc.exports=kT});var $c=u((V0,Wc)=>{"use strict";var GT=ta();function FT(e){var t=this.__data__,r=GT(t,e);return r<0?void 0:t[r][1]}Wc.exports=FT});var Vc=u((Y0,Kc)=>{"use strict";var QT=ta();function jT(e){return QT(this.__data__,e)>-1}Kc.exports=jT});var Hc=u((H0,Yc)=>{"use strict";var WT=ta();function $T(e,t){var r=this.__data__,a=WT(r,e);return a<0?(++this.size,r.push([e,t])):r[a][1]=t,this}Yc.exports=$T});var ra=u((z0,zc)=>{"use strict";var KT=kc(),VT=jc(),YT=$c(),HT=Vc(),zT=Hc();function Jt(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t<r;){var a=e[t];this.set(a[0],a[1])}}Jt.prototype.clear=KT;Jt.prototype.delete=VT;Jt.prototype.get=YT;Jt.prototype.has=HT;Jt.prototype.set=zT;zc.exports=Jt});var rn=u((J0,Jc)=>{"use strict";var JT=yt(),XT=pe(),ZT=JT(XT,"Map");Jc.exports=ZT});var el=u((X0,Zc)=>{"use strict";var Xc=Bc(),eE=ra(),tE=rn();function rE(){this.size=0,this.__data__={hash:new Xc,map:new(tE||eE),string:new Xc}}Zc.exports=rE});var rl=u((Z0,tl)=>{"use strict";function aE(e){var t=typeof e;return t=="string"||t=="number"||t=="symbol"||t=="boolean"?e!=="__proto__":e===null}tl.exports=aE});var aa=u((eF,al)=>{"use strict";var nE=rl();function oE(e,t){var r=e.__data__;return nE(t)?r[typeof t=="string"?"string":"hash"]:r.map}al.exports=oE});var ol=u((tF,nl)=>{"use strict";var sE=aa();function iE(e){var t=sE(this,e).delete(e);return this.size-=t?1:0,t}nl.exports=iE});var il=u((rF,sl)=>{"use strict";var uE=aa();function pE(e){return uE(this,e).get(e)}sl.exports=pE});var pl=u((aF,ul)=>{"use strict";var cE=aa();function lE(e){return cE(this,e).has(e)}ul.exports=lE});var ll=u((nF,cl)=>{"use strict";var dE=aa();function fE(e,t){var r=dE(this,e),a=r.size;return r.set(e,t),this.size+=r.size==a?0:1,this}cl.exports=fE});var an=u((oF,dl)=>{"use strict";var mE=el(),gE=ol(),yE=il(),hE=pl(),AE=ll();function Xt(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t<r;){var a=e[t];this.set(a[0],a[1])}}Xt.prototype.clear=mE;Xt.prototype.delete=gE;Xt.prototype.get=yE;Xt.prototype.has=hE;Xt.prototype.set=AE;dl.exports=Xt});var ml=u((sF,fl)=>{"use strict";var bE="__lodash_hash_undefined__";function IE(e){return this.__data__.set(e,bE),this}fl.exports=IE});var yl=u((iF,gl)=>{"use strict";function SE(e){return this.__data__.has(e)}gl.exports=SE});var Mo=u((uF,hl)=>{"use strict";var wE=an(),TE=ml(),EE=yl();function nn(e){var t=-1,r=e==null?0:e.length;for(this.__data__=new wE;++t<r;)this.add(e[t])}nn.prototype.add=nn.prototype.push=TE;nn.prototype.has=EE;hl.exports=nn});var bl=u((pF,Al)=>{"use strict";function RE(e,t,r,a){for(var n=e.length,o=r+(a?1:-1);a?o--:++o<n;)if(t(e[o],o,e))return o;return-1}Al.exports=RE});var Sl=u((cF,Il)=>{"use strict";function vE(e){return e!==e}Il.exports=vE});var Tl=u((lF,wl)=>{"use strict";function _E(e,t,r){for(var a=r-1,n=e.length;++a<n;)if(e[a]===t)return a;return-1}wl.exports=_E});var Rl=u((dF,El)=>{"use strict";var xE=bl(),CE=Sl(),OE=Tl();function LE(e,t,r){return t===t?OE(e,t,r):xE(e,CE,r)}El.exports=LE});var ko=u((fF,vl)=>{"use strict";var PE=Rl();function UE(e,t){var r=e==null?0:e.length;return!!r&&PE(e,t,0)>-1}vl.exports=UE});var xl=u((mF,_l)=>{"use strict";function qE(e,t,r){for(var a=-1,n=e==null?0:e.length;++a<n;)if(r(t,e[a]))return!0;return!1}_l.exports=qE});var Go=u((gF,Cl)=>{"use strict";function DE(e,t){return e.has(t)}Cl.exports=DE});var Fo=u((yF,Ol)=>{"use strict";var NE=yt(),BE=pe(),ME=NE(BE,"Set");Ol.exports=ME});var Qo=u((hF,Ll)=>{"use strict";function kE(){}Ll.exports=kE});var on=u((AF,Pl)=>{"use strict";function GE(e){var t=-1,r=Array(e.size);return e.forEach(function(a){r[++t]=a}),r}Pl.exports=GE});var ql=u((bF,Ul)=>{"use strict";var jo=Fo(),FE=Qo(),QE=on(),jE=1/0,WE=jo&&1/QE(new jo([,-0]))[1]==jE?function(e){return new jo(e)}:FE;Ul.exports=WE});var Nl=u((IF,Dl)=>{"use strict";var $E=Mo(),KE=ko(),VE=xl(),YE=Go(),HE=ql(),zE=on(),JE=200;function XE(e,t,r){var a=-1,n=KE,o=e.length,s=!0,i=[],p=i;if(r)s=!1,n=VE;else if(o>=JE){var f=t?null:HE(e);if(f)return zE(f);s=!1,n=YE,p=new $E}else p=t?[]:i;e:for(;++a<o;){var m=e[a],g=t?t(m):m;if(m=r||m!==0?m:0,s&&g===g){for(var y=p.length;y--;)if(p[y]===g)continue e;t&&p.push(g),i.push(m)}else n(p,g,r)||(p!==i&&p.push(g),i.push(m))}return i}Dl.exports=XE});var sn=u((SF,Bl)=>{"use strict";var ZE=9007199254740991;function eR(e){return typeof e=="number"&&e>-1&&e%1==0&&e<=ZE}Bl.exports=eR});var Zt=u((wF,Ml)=>{"use strict";var tR=Zr(),rR=sn();function aR(e){return e!=null&&rR(e.length)&&!tR(e)}Ml.exports=aR});var Wo=u((TF,kl)=>{"use strict";var nR=Zt(),oR=be();function sR(e){return oR(e)&&nR(e)}kl.exports=sR});var Fl=u((EF,Gl)=>{"use strict";var iR=Lo(),uR=Bo(),pR=Nl(),cR=Wo(),lR=uR(function(e){return pR(iR(e,1,cR,!0))});Gl.exports=lR});var jl=u((RF,Ql)=>{"use strict";var dR=ra();function fR(){this.__data__=new dR,this.size=0}Ql.exports=fR});var $l=u((vF,Wl)=>{"use strict";function mR(e){var t=this.__data__,r=t.delete(e);return this.size=t.size,r}Wl.exports=mR});var Vl=u((_F,Kl)=>{"use strict";function gR(e){return this.__data__.get(e)}Kl.exports=gR});var Hl=u((xF,Yl)=>{"use strict";function yR(e){return this.__data__.has(e)}Yl.exports=yR});var Jl=u((CF,zl)=>{"use strict";var hR=ra(),AR=rn(),bR=an(),IR=200;function SR(e,t){var r=this.__data__;if(r instanceof hR){var a=r.__data__;if(!AR||a.length<IR-1)return a.push([e,t]),this.size=++r.size,this;r=this.__data__=new bR(a)}return r.set(e,t),this.size=r.size,this}zl.exports=SR});var na=u((OF,Xl)=>{"use strict";var wR=ra(),TR=jl(),ER=$l(),RR=Vl(),vR=Hl(),_R=Jl();function er(e){var t=this.__data__=new wR(e);this.size=t.size}er.prototype.clear=TR;er.prototype.delete=ER;er.prototype.get=RR;er.prototype.has=vR;er.prototype.set=_R;Xl.exports=er});var oa=u((LF,ed)=>{"use strict";var Zl=Do();function xR(e,t,r){t=="__proto__"&&Zl?Zl(e,t,{configurable:!0,enumerable:!0,value:r,writable:!0}):e[t]=r}ed.exports=xR});var $o=u((PF,td)=>{"use strict";var CR=oa(),OR=zt();function LR(e,t,r){(r!==void 0&&!OR(e[t],r)||r===void 0&&!(t in e))&&CR(e,t,r)}td.exports=LR});var ad=u((UF,rd)=>{"use strict";function PR(e){return function(t,r,a){for(var n=-1,o=Object(t),s=a(t),i=s.length;i--;){var p=s[e?i:++n];if(r(o[p],p,o)===!1)break}return t}}rd.exports=PR});var Ko=u((qF,nd)=>{"use strict";var UR=ad(),qR=UR();nd.exports=qR});var Vo=u((sa,tr)=>{"use strict";var DR=pe(),ud=typeof sa=="object"&&sa&&!sa.nodeType&&sa,od=ud&&typeof tr=="object"&&tr&&!tr.nodeType&&tr,NR=od&&od.exports===ud,sd=NR?DR.Buffer:void 0,id=sd?sd.allocUnsafe:void 0;function BR(e,t){if(t)return e.slice();var r=e.length,a=id?id(r):new e.constructor(r);return e.copy(a),a}tr.exports=BR});var Yo=u((DF,pd)=>{"use strict";var MR=pe(),kR=MR.Uint8Array;pd.exports=kR});var un=u((NF,ld)=>{"use strict";var cd=Yo();function GR(e){var t=new e.constructor(e.byteLength);return new cd(t).set(new cd(e)),t}ld.exports=GR});var Ho=u((BF,dd)=>{"use strict";var FR=un();function QR(e,t){var r=t?FR(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.length)}dd.exports=QR});var rr=u((MF,fd)=>{"use strict";function jR(e,t){var r=-1,a=e.length;for(t||(t=Array(a));++r<a;)t[r]=e[r];return t}fd.exports=jR});var ia=u((kF,gd)=>{"use strict";var WR=xe(),md=Object.create,$R=function(){function e(){}return function(t){if(!WR(t))return{};if(md)return md(t);e.prototype=t;var r=new e;return e.prototype=void 0,r}}();gd.exports=$R});var zo=u((GF,yd)=>{"use strict";function KR(e,t){return function(r){return e(t(r))}}yd.exports=KR});var pn=u((FF,hd)=>{"use strict";var VR=zo(),YR=VR(Object.getPrototypeOf,Object);hd.exports=YR});var cn=u((QF,Ad)=>{"use strict";var HR=Object.prototype;function zR(e){var t=e&&e.constructor,r=typeof t=="function"&&t.prototype||HR;return e===r}Ad.exports=zR});var Jo=u((jF,bd)=>{"use strict";var JR=ia(),XR=pn(),ZR=cn();function ev(e){return typeof e.constructor=="function"&&!ZR(e)?JR(XR(e)):{}}bd.exports=ev});var Sd=u((WF,Id)=>{"use strict";function tv(){return!1}Id.exports=tv});var pa=u((ua,ar)=>{"use strict";var rv=pe(),av=Sd(),Ed=typeof ua=="object"&&ua&&!ua.nodeType&&ua,wd=Ed&&typeof ar=="object"&&ar&&!ar.nodeType&&ar,nv=wd&&wd.exports===Ed,Td=nv?rv.Buffer:void 0,ov=Td?Td.isBuffer:void 0,sv=ov||av;ar.exports=sv});var Xo=u(($F,vd)=>{"use strict";var iv=gt(),uv=pn(),pv=be(),cv="[object Object]",lv=Function.prototype,dv=Object.prototype,Rd=lv.toString,fv=dv.hasOwnProperty,mv=Rd.call(Object);function gv(e){if(!pv(e)||iv(e)!=cv)return!1;var t=uv(e);if(t===null)return!0;var r=fv.call(t,"constructor")&&t.constructor;return typeof r=="function"&&r instanceof r&&Rd.call(r)==mv}vd.exports=gv});var xd=u((KF,_d)=>{"use strict";var yv=gt(),hv=sn(),Av=be(),bv="[object Arguments]",Iv="[object Array]",Sv="[object Boolean]",wv="[object Date]",Tv="[object Error]",Ev="[object Function]",Rv="[object Map]",vv="[object Number]",_v="[object Object]",xv="[object RegExp]",Cv="[object Set]",Ov="[object String]",Lv="[object WeakMap]",Pv="[object ArrayBuffer]",Uv="[object DataView]",qv="[object Float32Array]",Dv="[object Float64Array]",Nv="[object Int8Array]",Bv="[object Int16Array]",Mv="[object Int32Array]",kv="[object Uint8Array]",Gv="[object Uint8ClampedArray]",Fv="[object Uint16Array]",Qv="[object Uint32Array]",B={};B[qv]=B[Dv]=B[Nv]=B[Bv]=B[Mv]=B[kv]=B[Gv]=B[Fv]=B[Qv]=!0;B[bv]=B[Iv]=B[Pv]=B[Sv]=B[Uv]=B[wv]=B[Tv]=B[Ev]=B[Rv]=B[vv]=B[_v]=B[xv]=B[Cv]=B[Ov]=B[Lv]=!1;function jv(e){return Av(e)&&hv(e.length)&&!!B[yv(e)]}_d.exports=jv});var ln=u((VF,Cd)=>{"use strict";function Wv(e){return function(t){return e(t)}}Cd.exports=Wv});var dn=u((ca,nr)=>{"use strict";var $v=Oo(),Od=typeof ca=="object"&&ca&&!ca.nodeType&&ca,la=Od&&typeof nr=="object"&&nr&&!nr.nodeType&&nr,Kv=la&&la.exports===Od,Zo=Kv&&$v.process,Vv=function(){try{var e=la&&la.require&&la.require("util").types;return e||Zo&&Zo.binding&&Zo.binding("util")}catch{}}();nr.exports=Vv});var fn=u((YF,Ud)=>{"use strict";var Yv=xd(),Hv=ln(),Ld=dn(),Pd=Ld&&Ld.isTypedArray,zv=Pd?Hv(Pd):Yv;Ud.exports=zv});var es=u((HF,qd)=>{"use strict";function Jv(e,t){if(!(t==="constructor"&&typeof e[t]=="function")&&t!="__proto__")return e[t]}qd.exports=Jv});var ts=u((zF,Dd)=>{"use strict";var Xv=oa(),Zv=zt(),e_=Object.prototype,t_=e_.hasOwnProperty;function r_(e,t,r){var a=e[t];(!(t_.call(e,t)&&Zv(a,r))||r===void 0&&!(t in e))&&Xv(e,t,r)}Dd.exports=r_});var or=u((JF,Nd)=>{"use strict";var a_=ts(),n_=oa();function o_(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?n_(r,i,p):a_(r,i,p)}return r}Nd.exports=o_});var Md=u((XF,Bd)=>{"use strict";function s_(e,t){for(var r=-1,a=Array(e);++r<e;)a[r]=t(r);return a}Bd.exports=s_});var da=u((ZF,kd)=>{"use strict";var i_=9007199254740991,u_=/^(?:0|[1-9]\d*)$/;function p_(e,t){var r=typeof e;return t=t??i_,!!t&&(r=="number"||r!="symbol"&&u_.test(e))&&e>-1&&e%1==0&&e<t}kd.exports=p_});var rs=u((e1,Gd)=>{"use strict";var c_=Md(),l_=Jr(),d_=se(),f_=pa(),m_=da(),g_=fn(),y_=Object.prototype,h_=y_.hasOwnProperty;function A_(e,t){var r=d_(e),a=!r&&l_(e),n=!r&&!a&&f_(e),o=!r&&!a&&!n&&g_(e),s=r||a||n||o,i=s?c_(e.length,String):[],p=i.length;for(var f in e)(t||h_.call(e,f))&&!(s&&(f=="length"||n&&(f=="offset"||f=="parent")||o&&(f=="buffer"||f=="byteLength"||f=="byteOffset")||m_(f,p)))&&i.push(f);return i}Gd.exports=A_});var Qd=u((t1,Fd)=>{"use strict";function b_(e){var t=[];if(e!=null)for(var r in Object(e))t.push(r);return t}Fd.exports=b_});var Wd=u((r1,jd)=>{"use strict";var I_=xe(),S_=cn(),w_=Qd(),T_=Object.prototype,E_=T_.hasOwnProperty;function R_(e){if(!I_(e))return w_(e);var t=S_(e),r=[];for(var a in e)a=="constructor"&&(t||!E_.call(e,a))||r.push(a);return r}jd.exports=R_});var sr=u((a1,$d)=>{"use strict";var v_=rs(),__=Wd(),x_=Zt();function C_(e){return x_(e)?v_(e,!0):__(e)}$d.exports=C_});var Vd=u((n1,Kd)=>{"use strict";var O_=or(),L_=sr();function P_(e){return O_(e,L_(e))}Kd.exports=P_});var Zd=u((o1,Xd)=>{"use strict";var Yd=$o(),U_=Vo(),q_=Ho(),D_=rr(),N_=Jo(),Hd=Jr(),zd=se(),B_=Wo(),M_=pa(),k_=Zr(),G_=xe(),F_=Xo(),Q_=fn(),Jd=es(),j_=Vd();function W_(e,t,r,a,n,o,s){var i=Jd(e,r),p=Jd(t,r),f=s.get(p);if(f){Yd(e,r,f);return}var m=o?o(i,p,r+"",e,t,s):void 0,g=m===void 0;if(g){var y=zd(p),I=!y&&M_(p),C=!y&&!I&&Q_(p);m=p,y||I||C?zd(i)?m=i:B_(i)?m=D_(i):I?(g=!1,m=U_(p,!0)):C?(g=!1,m=q_(p,!0)):m=[]:F_(p)||Hd(p)?(m=i,Hd(i)?m=j_(i):(!G_(i)||k_(i))&&(m=N_(p))):g=!1}g&&(s.set(p,m),n(m,p,a,o,s),s.delete(p)),Yd(e,r,m)}Xd.exports=W_});var rf=u((s1,tf)=>{"use strict";var $_=na(),K_=$o(),V_=Ko(),Y_=Zd(),H_=xe(),z_=sr(),J_=es();function ef(e,t,r,a,n){e!==t&&V_(t,function(o,s){if(n||(n=new $_),H_(o))Y_(e,t,s,r,ef,a,n);else{var i=a?a(J_(e,s),o,s+"",e,t,n):void 0;i===void 0&&(i=o),K_(e,s,i)}},z_)}tf.exports=ef});var nf=u((i1,af)=>{"use strict";var X_=zt(),Z_=Zt(),ex=da(),tx=xe();function rx(e,t,r){if(!tx(r))return!1;var a=typeof t;return(a=="number"?Z_(r)&&ex(t,r.length):a=="string"&&t in r)?X_(r[t],e):!1}af.exports=rx});var sf=u((u1,of)=>{"use strict";var ax=Bo(),nx=nf();function ox(e){return ax(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&&nx(r[0],r[1],s)&&(o=n<3?void 0:o,n=1),t=Object(t);++a<n;){var i=r[a];i&&e(t,i,a,o)}return t})}of.exports=ox});var as=u((p1,uf)=>{"use strict";var sx=rf(),ix=sf(),ux=ix(function(e,t,r){sx(e,t,r)});uf.exports=ux});var lm=u(ge=>{"use strict";ge.aliasToReal={each:"forEach",eachRight:"forEachRight",entries:"toPairs",entriesIn:"toPairsIn",extend:"assignIn",extendAll:"assignInAll",extendAllWith:"assignInAllWith",extendWith:"assignInWith",first:"head",conforms:"conformsTo",matches:"isMatch",property:"get",__:"placeholder",F:"stubFalse",T:"stubTrue",all:"every",allPass:"overEvery",always:"constant",any:"some",anyPass:"overSome",apply:"spread",assoc:"set",assocPath:"set",complement:"negate",compose:"flowRight",contains:"includes",dissoc:"unset",dissocPath:"unset",dropLast:"dropRight",dropLastWhile:"dropRightWhile",equals:"isEqual",identical:"eq",indexBy:"keyBy",init:"initial",invertObj:"invert",juxt:"over",omitAll:"omit",nAry:"ary",path:"get",pathEq:"matchesProperty",pathOr:"getOr",paths:"at",pickAll:"pick",pipe:"flow",pluck:"map",prop:"get",propEq:"matchesProperty",propOr:"getOr",props:"at",symmetricDifference:"xor",symmetricDifferenceBy:"xorBy",symmetricDifferenceWith:"xorWith",takeLast:"takeRight",takeLastWhile:"takeRightWhile",unapply:"rest",unnest:"flatten",useWith:"overArgs",where:"conformsTo",whereEq:"isMatch",zipObj:"zipObject"};ge.aryMethod={1:["assignAll","assignInAll","attempt","castArray","ceil","create","curry","curryRight","defaultsAll","defaultsDeepAll","floor","flow","flowRight","fromPairs","invert","iteratee","memoize","method","mergeAll","methodOf","mixin","nthArg","over","overEvery","overSome","rest","reverse","round","runInContext","spread","template","trim","trimEnd","trimStart","uniqueId","words","zipAll"],2:["add","after","ary","assign","assignAllWith","assignIn","assignInAllWith","at","before","bind","bindAll","bindKey","chunk","cloneDeepWith","cloneWith","concat","conformsTo","countBy","curryN","curryRightN","debounce","defaults","defaultsDeep","defaultTo","delay","difference","divide","drop","dropRight","dropRightWhile","dropWhile","endsWith","eq","every","filter","find","findIndex","findKey","findLast","findLastIndex","findLastKey","flatMap","flatMapDeep","flattenDepth","forEach","forEachRight","forIn","forInRight","forOwn","forOwnRight","get","groupBy","gt","gte","has","hasIn","includes","indexOf","intersection","invertBy","invoke","invokeMap","isEqual","isMatch","join","keyBy","lastIndexOf","lt","lte","map","mapKeys","mapValues","matchesProperty","maxBy","meanBy","merge","mergeAllWith","minBy","multiply","nth","omit","omitBy","overArgs","pad","padEnd","padStart","parseInt","partial","partialRight","partition","pick","pickBy","propertyOf","pull","pullAll","pullAt","random","range","rangeRight","rearg","reject","remove","repeat","restFrom","result","sampleSize","some","sortBy","sortedIndex","sortedIndexOf","sortedLastIndex","sortedLastIndexOf","sortedUniqBy","split","spreadFrom","startsWith","subtract","sumBy","take","takeRight","takeRightWhile","takeWhile","tap","throttle","thru","times","trimChars","trimCharsEnd","trimCharsStart","truncate","union","uniqBy","uniqWith","unset","unzipWith","without","wrap","xor","zip","zipObject","zipObjectDeep"],3:["assignInWith","assignWith","clamp","differenceBy","differenceWith","findFrom","findIndexFrom","findLastFrom","findLastIndexFrom","getOr","includesFrom","indexOfFrom","inRange","intersectionBy","intersectionWith","invokeArgs","invokeArgsMap","isEqualWith","isMatchWith","flatMapDepth","lastIndexOfFrom","mergeWith","orderBy","padChars","padCharsEnd","padCharsStart","pullAllBy","pullAllWith","rangeStep","rangeStepRight","reduce","reduceRight","replace","set","slice","sortedIndexBy","sortedLastIndexBy","transform","unionBy","unionWith","update","xorBy","xorWith","zipWith"],4:["fill","setWith","updateWith"]};ge.aryRearg={2:[1,0],3:[2,0,1],4:[3,2,0,1]};ge.iterateeAry={dropRightWhile:1,dropWhile:1,every:1,filter:1,find:1,findFrom:1,findIndex:1,findIndexFrom:1,findKey:1,findLast:1,findLastFrom:1,findLastIndex:1,findLastIndexFrom:1,findLastKey:1,flatMap:1,flatMapDeep:1,flatMapDepth:1,forEach:1,forEachRight:1,forIn:1,forInRight:1,forOwn:1,forOwnRight:1,map:1,mapKeys:1,mapValues:1,partition:1,reduce:2,reduceRight:2,reject:1,remove:1,some:1,takeRightWhile:1,takeWhile:1,times:1,transform:2};ge.iterateeRearg={mapKeys:[1],reduceRight:[1,0]};ge.methodRearg={assignInAllWith:[1,0],assignInWith:[1,2,0],assignAllWith:[1,0],assignWith:[1,2,0],differenceBy:[1,2,0],differenceWith:[1,2,0],getOr:[2,1,0],intersectionBy:[1,2,0],intersectionWith:[1,2,0],isEqualWith:[1,2,0],isMatchWith:[2,1,0],mergeAllWith:[1,0],mergeWith:[1,2,0],padChars:[2,1,0],padCharsEnd:[2,1,0],padCharsStart:[2,1,0],pullAllBy:[2,1,0],pullAllWith:[2,1,0],rangeStep:[1,2,0],rangeStepRight:[1,2,0],setWith:[3,1,2,0],sortedIndexBy:[2,1,0],sortedLastIndexBy:[2,1,0],unionBy:[1,2,0],unionWith:[1,2,0],updateWith:[3,1,2,0],xorBy:[1,2,0],xorWith:[1,2,0],zipWith:[1,2,0]};ge.methodSpread={assignAll:{start:0},assignAllWith:{start:0},assignInAll:{start:0},assignInAllWith:{start:0},defaultsAll:{start:0},defaultsDeepAll:{start:0},invokeArgs:{start:2},invokeArgsMap:{start:2},mergeAll:{start:0},mergeAllWith:{start:0},partial:{start:1},partialRight:{start:1},without:{start:1},zipAll:{start:0}};ge.mutate={array:{fill:!0,pull:!0,pullAll:!0,pullAllBy:!0,pullAllWith:!0,pullAt:!0,remove:!0,reverse:!0},object:{assign:!0,assignAll:!0,assignAllWith:!0,assignIn:!0,assignInAll:!0,assignInAllWith:!0,assignInWith:!0,assignWith:!0,defaults:!0,defaultsAll:!0,defaultsDeep:!0,defaultsDeepAll:!0,merge:!0,mergeAll:!0,mergeAllWith:!0,mergeWith:!0},set:{set:!0,setWith:!0,unset:!0,update:!0,updateWith:!0}};ge.realToAlias=function(){var e=Object.prototype.hasOwnProperty,t=ge.aliasToReal,r={};for(var a in t){var n=t[a];e.call(r,n)?r[n].push(a):r[n]=[a]}return r}();ge.remap={assignAll:"assign",assignAllWith:"assignWith",assignInAll:"assignIn",assignInAllWith:"assignInWith",curryN:"curry",curryRightN:"curryRight",defaultsAll:"defaults",defaultsDeepAll:"defaultsDeep",findFrom:"find",findIndexFrom:"findIndex",findLastFrom:"findLast",findLastIndexFrom:"findLastIndex",getOr:"get",includesFrom:"includes",indexOfFrom:"indexOf",invokeArgs:"invoke",invokeArgsMap:"invokeMap",lastIndexOfFrom:"lastIndexOf",mergeAll:"merge",mergeAllWith:"mergeWith",padChars:"pad",padCharsEnd:"padEnd",padCharsStart:"padStart",propertyOf:"get",rangeStep:"range",rangeStepRight:"rangeRight",restFrom:"rest",spreadFrom:"spread",trimChars:"trim",trimCharsEnd:"trimEnd",trimCharsStart:"trimStart",zipAll:"zip"};ge.skipFixed={castArray:!0,flow:!0,flowRight:!0,iteratee:!0,mixin:!0,rearg:!0,runInContext:!0};ge.skipRearg={add:!0,assign:!0,assignIn:!0,bind:!0,bindKey:!0,concat:!0,difference:!0,divide:!0,eq:!0,gt:!0,gte:!0,isEqual:!0,lt:!0,lte:!0,matchesProperty:!0,merge:!0,multiply:!0,overArgs:!0,partial:!0,partialRight:!0,propertyOf:!0,random:!0,range:!0,rangeRight:!0,subtract:!0,zip:!0,zipObject:!0,zipObjectDeep:!0}});var Xs=u((qj,dm)=>{"use strict";dm.exports={}});var ym=u((Dj,gm)=>{"use strict";var X=lm(),$C=Xs(),fm=Array.prototype.push;function KC(e,t){return t==2?function(r,a){return e.apply(void 0,arguments)}:function(r){return e.apply(void 0,arguments)}}function Zs(e,t){return t==2?function(r,a){return e(r,a)}:function(r){return e(r)}}function mm(e){for(var t=e?e.length:0,r=Array(t);t--;)r[t]=e[t];return r}function VC(e){return function(t){return e({},t)}}function YC(e,t){return function(){for(var r=arguments.length,a=r-1,n=Array(r);r--;)n[r]=arguments[r];var o=n[t],s=n.slice(0,t);return o&&fm.apply(s,o),t!=a&&fm.apply(s,n.slice(t+1)),e.apply(this,s)}}function ei(e,t){return function(){var r=arguments.length;if(r){for(var a=Array(r);r--;)a[r]=arguments[r];var n=a[0]=t.apply(void 0,a);return e.apply(void 0,a),n}}}function ti(e,t,r,a){var n=typeof t=="function",o=t===Object(t);if(o&&(a=r,r=t,t=void 0),r==null)throw new TypeError;a||(a={});var s={cap:"cap"in a?a.cap:!0,curry:"curry"in a?a.curry:!0,fixed:"fixed"in a?a.fixed:!0,immutable:"immutable"in a?a.immutable:!0,rearg:"rearg"in a?a.rearg:!0},i=n?r:$C,p="curry"in a&&a.curry,f="fixed"in a&&a.fixed,m="rearg"in a&&a.rearg,g=n?r.runInContext():void 0,y=n?r:{ary:e.ary,assign:e.assign,clone:e.clone,curry:e.curry,forEach:e.forEach,isArray:e.isArray,isError:e.isError,isFunction:e.isFunction,isWeakMap:e.isWeakMap,iteratee:e.iteratee,keys:e.keys,rearg:e.rearg,toInteger:e.toInteger,toPath:e.toPath},I=y.ary,C=y.assign,_=y.clone,v=y.curry,R=y.forEach,U=y.isArray,qe=y.isError,Ee=y.isFunction,ct=y.isWeakMap,Qt=y.keys,Ir=y.rearg,Sr=y.toInteger,EI=y.toPath,qu=Qt(X.aryMethod),RI={castArray:function(S){return function(){var h=arguments[0];return U(h)?S(mm(h)):S.apply(void 0,arguments)}},iteratee:function(S){return function(){var h=arguments[0],b=arguments[1],E=S(h,b),O=E.length;return s.cap&&typeof b=="number"?(b=b>2?b-2:1,O&&O<=b?E:Zs(E,b)):E}},mixin:function(S){return function(h){var b=this;if(!Ee(b))return S(b,Object(h));var E=[];return R(Qt(h),function(O){Ee(h[O])&&E.push([O,b.prototype[O]])}),S(b,Object(h)),R(E,function(O){var ie=O[1];Ee(ie)?b.prototype[O[0]]=ie:delete b.prototype[O[0]]}),b}},nthArg:function(S){return function(h){var b=h<0?1:Sr(h)+1;return v(S(h),b)}},rearg:function(S){return function(h,b){var E=b?b.length:0;return v(S(h,b),E)}},runInContext:function(S){return function(h){return ti(e,S(h),a)}}};function vI(S,h){if(s.cap){var b=X.iterateeRearg[S];if(b)return LI(h,b);var E=!n&&X.iterateeAry[S];if(E)return OI(h,E)}return h}function _I(S,h,b){return p||s.curry&&b>1?v(h,b):h}function Du(S,h,b){if(s.fixed&&(f||!X.skipFixed[S])){var E=X.methodSpread[S],O=E&&E.start;return O===void 0?I(h,b):YC(h,O)}return h}function Nu(S,h,b){return s.rearg&&b>1&&(m||!X.skipRearg[S])?Ir(h,X.methodRearg[S]||X.aryRearg[b]):h}function xI(S,h){h=EI(h);for(var b=-1,E=h.length,O=E-1,ie=_(Object(S)),Qe=ie;Qe!=null&&++b<E;){var Re=h[b],je=Qe[Re];je!=null&&!(Ee(je)||qe(je)||ct(je))&&(Qe[Re]=_(b==O?je:Object(je))),Qe=Qe[Re]}return ie}function CI(S){return he.runInContext.convert(S)(void 0)}function Bu(S,h){var b=X.aliasToReal[S]||S,E=X.remap[b]||b,O=a;return function(ie){var Qe=n?g:y,Re=n?g[E]:h,je=C(C({},O),ie);return ti(Qe,b,Re,je)}}function OI(S,h){return Mu(S,function(b){return typeof b=="function"?Zs(b,h):b})}function LI(S,h){return Mu(S,function(b){var E=h.length;return KC(Ir(Zs(b,E),h),E)})}function Mu(S,h){return function(){var b=arguments.length;if(!b)return S();for(var E=Array(b);b--;)E[b]=arguments[b];var O=s.rearg?0:b-1;return E[O]=h(E[O]),S.apply(void 0,E)}}function ku(S,h,b){var E,O=X.aliasToReal[S]||S,ie=h,Qe=RI[O];return Qe?ie=Qe(h):s.immutable&&(X.mutate.array[O]?ie=ei(h,mm):X.mutate.object[O]?ie=ei(h,VC(h)):X.mutate.set[O]&&(ie=ei(h,xI))),R(qu,function(Re){return R(X.aryMethod[Re],function(je){if(O==je){var Gu=X.methodSpread[O],PI=Gu&&Gu.afterRearg;return E=PI?Du(O,Nu(O,ie,Re),Re):Nu(O,Du(O,ie,Re),Re),E=vI(O,E),E=_I(O,E,Re),!1}}),!E}),E||(E=ie),E==h&&(E=p?v(E,1):function(){return h.apply(this,arguments)}),E.convert=Bu(O,h),E.placeholder=h.placeholder=b,E}if(!o)return ku(t,r,i);var he=r,wr=[];return R(qu,function(S){R(X.aryMethod[S],function(h){var b=he[X.remap[h]||h];b&&wr.push([h,ku(h,b,he)])})}),R(Qt(he),function(S){var h=he[S];if(typeof h=="function"){for(var b=wr.length;b--;)if(wr[b][0]==S)return;h.convert=Bu(S,h),wr.push([S,h])}}),R(wr,function(S){he[S[0]]=S[1]}),he.convert=CI,he.placeholder=he,R(Qt(he),function(S){R(X.realToAlias[S]||[],function(h){he[h]=he[S]})}),he}gm.exports=ti});var ri=u((Nj,hm)=>{"use strict";var HC=yt(),zC=pe(),JC=HC(zC,"WeakMap");hm.exports=JC});var ai=u((Bj,bm)=>{"use strict";var Am=ri(),XC=Am&&new Am;bm.exports=XC});var ni=u((Mj,Sm)=>{"use strict";var ZC=Xr(),Im=ai(),eO=Im?function(e,t){return Im.set(e,t),e}:ZC;Sm.exports=eO});var Ta=u((kj,wm)=>{"use strict";var tO=ia(),rO=xe();function aO(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=tO(e.prototype),a=e.apply(r,t);return rO(a)?a:r}}wm.exports=aO});var Em=u((Gj,Tm)=>{"use strict";var nO=Ta(),oO=pe(),sO=1;function iO(e,t,r){var a=t&sO,n=nO(e);function o(){var s=this&&this!==oO&&this instanceof o?n:e;return s.apply(a?r:this,arguments)}return o}Tm.exports=iO});var oi=u((Fj,Rm)=>{"use strict";var uO=Math.max;function pO(e,t,r,a){for(var n=-1,o=e.length,s=r.length,i=-1,p=t.length,f=uO(o-s,0),m=Array(p+f),g=!a;++i<p;)m[i]=t[i];for(;++n<s;)(g||n<o)&&(m[r[n]]=e[n]);for(;f--;)m[i++]=e[n++];return m}Rm.exports=pO});var si=u((Qj,vm)=>{"use strict";var cO=Math.max;function lO(e,t,r,a){for(var n=-1,o=e.length,s=-1,i=r.length,p=-1,f=t.length,m=cO(o-i,0),g=Array(m+f),y=!a;++n<m;)g[n]=e[n];for(var I=n;++p<f;)g[I+p]=t[p];for(;++s<i;)(y||n<o)&&(g[I+r[s]]=e[n++]);return g}vm.exports=lO});var xm=u((jj,_m)=>{"use strict";function dO(e,t){for(var r=e.length,a=0;r--;)e[r]===t&&++a;return a}_m.exports=dO});var Dn=u((Wj,Cm)=>{"use strict";function fO(){}Cm.exports=fO});var Bn=u(($j,Om)=>{"use strict";var mO=ia(),gO=Dn(),yO=4294967295;function Nn(e){this.__wrapped__=e,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=yO,this.__views__=[]}Nn.prototype=mO(gO.prototype);Nn.prototype.constructor=Nn;Om.exports=Nn});var ii=u((Kj,Pm)=>{"use strict";var Lm=ai(),hO=Qo(),AO=Lm?function(e){return Lm.get(e)}:hO;Pm.exports=AO});var qm=u((Vj,Um)=>{"use strict";var bO={};Um.exports=bO});var Bm=u((Yj,Nm)=>{"use strict";var Dm=qm(),IO=Object.prototype,SO=IO.hasOwnProperty;function wO(e){for(var t=e.name+"",r=Dm[t],a=SO.call(Dm,t)?r.length:0;a--;){var n=r[a],o=n.func;if(o==null||o==e)return n.name}return t}Nm.exports=wO});var ui=u((Hj,Mm)=>{"use strict";var TO=ia(),EO=Dn();function Mn(e,t){this.__wrapped__=e,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=void 0}Mn.prototype=TO(EO.prototype);Mn.prototype.constructor=Mn;Mm.exports=Mn});var Gm=u((zj,km)=>{"use strict";var RO=Bn(),vO=ui(),_O=rr();function xO(e){if(e instanceof RO)return e.clone();var t=new vO(e.__wrapped__,e.__chain__);return t.__actions__=_O(e.__actions__),t.__index__=e.__index__,t.__values__=e.__values__,t}km.exports=xO});var jm=u((Jj,Qm)=>{"use strict";var CO=Bn(),Fm=ui(),OO=Dn(),LO=se(),PO=be(),UO=Gm(),qO=Object.prototype,DO=qO.hasOwnProperty;function kn(e){if(PO(e)&&!LO(e)&&!(e instanceof CO)){if(e instanceof Fm)return e;if(DO.call(e,"__wrapped__"))return UO(e)}return new Fm(e)}kn.prototype=OO.prototype;kn.prototype.constructor=kn;Qm.exports=kn});var $m=u((Xj,Wm)=>{"use strict";var NO=Bn(),BO=ii(),MO=Bm(),kO=jm();function GO(e){var t=MO(e),r=kO[t];if(typeof r!="function"||!(t in NO.prototype))return!1;if(e===r)return!0;var a=BO(r);return!!a&&e===a[0]}Wm.exports=GO});var pi=u((Zj,Km)=>{"use strict";var FO=ni(),QO=No(),jO=QO(FO);Km.exports=jO});var Ym=u((eW,Vm)=>{"use strict";var WO=/\{\n\/\* \[wrapped with (.+)\] \*/,$O=/,? & /;function KO(e){var t=e.match(WO);return t?t[1].split($O):[]}Vm.exports=KO});var zm=u((tW,Hm)=>{"use strict";var VO=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/;function YO(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(VO,`{
1
+ "use strict";var qI=Object.create;var Na=Object.defineProperty;var DI=Object.getOwnPropertyDescriptor;var NI=Object.getOwnPropertyNames;var BI=Object.getPrototypeOf,MI=Object.prototype.hasOwnProperty;var u=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),w=(e,t)=>{for(var r in t)Na(e,r,{get:t[r],enumerable:!0})},Fu=(e,t,r,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of NI(t))!MI.call(e,n)&&n!==r&&Na(e,n,{get:()=>t[n],enumerable:!(a=DI(t,n))||a.enumerable});return e};var P=(e,t,r)=>(r=e!=null?qI(BI(e)):{},Fu(t||!e||!e.__esModule?Na(r,"default",{value:e,enumerable:!0}):r,e)),kI=e=>Fu(Na({},"__esModule",{value:!0}),e);var Za=u((i0,vp)=>{"use strict";function NS(e,t){for(var r=-1,a=t.length,n=e.length;++r<a;)e[n+r]=t[r];return e}vp.exports=NS});var Oo=u((u0,_p)=>{"use strict";var BS=typeof global=="object"&&global&&global.Object===Object&&global;_p.exports=BS});var pe=u((p0,xp)=>{"use strict";var MS=Oo(),kS=typeof self=="object"&&self&&self.Object===Object&&self,GS=MS||kS||Function("return this")();xp.exports=GS});var xt=u((c0,Cp)=>{"use strict";var FS=pe(),jS=FS.Symbol;Cp.exports=jS});var Up=u((l0,Pp)=>{"use strict";var Op=xt(),Lp=Object.prototype,QS=Lp.hasOwnProperty,WS=Lp.toString,zr=Op?Op.toStringTag:void 0;function $S(e){var t=QS.call(e,zr),r=e[zr];try{e[zr]=void 0;var a=!0}catch{}var n=WS.call(e);return a&&(t?e[zr]=r:delete e[zr]),n}Pp.exports=$S});var Dp=u((d0,qp)=>{"use strict";var KS=Object.prototype,VS=KS.toString;function YS(e){return VS.call(e)}qp.exports=YS});var gt=u((f0,Mp)=>{"use strict";var Np=xt(),HS=Up(),zS=Dp(),JS="[object Null]",XS="[object Undefined]",Bp=Np?Np.toStringTag:void 0;function ZS(e){return e==null?e===void 0?XS:JS:Bp&&Bp in Object(e)?HS(e):zS(e)}Mp.exports=ZS});var be=u((m0,kp)=>{"use strict";function ew(e){return e!=null&&typeof e=="object"}kp.exports=ew});var Fp=u((g0,Gp)=>{"use strict";var tw=gt(),rw=be(),aw="[object Arguments]";function nw(e){return rw(e)&&tw(e)==aw}Gp.exports=nw});var Jr=u((y0,Wp)=>{"use strict";var jp=Fp(),ow=be(),Qp=Object.prototype,sw=Qp.hasOwnProperty,iw=Qp.propertyIsEnumerable,uw=jp(function(){return arguments}())?jp:function(e){return ow(e)&&sw.call(e,"callee")&&!iw.call(e,"callee")};Wp.exports=uw});var se=u((h0,$p)=>{"use strict";var pw=Array.isArray;$p.exports=pw});var Hp=u((A0,Yp)=>{"use strict";var Kp=xt(),cw=Jr(),lw=se(),Vp=Kp?Kp.isConcatSpreadable:void 0;function dw(e){return lw(e)||cw(e)||!!(Vp&&e&&e[Vp])}Yp.exports=dw});var Lo=u((b0,Jp)=>{"use strict";var fw=Za(),mw=Hp();function zp(e,t,r,a,n){var o=-1,s=e.length;for(r||(r=mw),n||(n=[]);++o<s;){var i=e[o];t>0&&r(i)?t>1?zp(i,t-1,r,a,n):fw(n,i):a||(n[n.length]=i)}return n}Jp.exports=zp});var Xr=u((I0,Xp)=>{"use strict";function gw(e){return e}Xp.exports=gw});var en=u((S0,Zp)=>{"use strict";function yw(e,t,r){switch(r.length){case 0:return e.call(t);case 1:return e.call(t,r[0]);case 2:return e.call(t,r[0],r[1]);case 3:return e.call(t,r[0],r[1],r[2])}return e.apply(t,r)}Zp.exports=yw});var Po=u((w0,tc)=>{"use strict";var hw=en(),ec=Math.max;function Aw(e,t,r){return t=ec(t===void 0?e.length-1:t,0),function(){for(var a=arguments,n=-1,o=ec(a.length-t,0),s=Array(o);++n<o;)s[n]=a[t+n];n=-1;for(var i=Array(t+1);++n<t;)i[n]=a[n];return i[t]=r(s),hw(e,this,i)}}tc.exports=Aw});var ac=u((T0,rc)=>{"use strict";function bw(e){return function(){return e}}rc.exports=bw});var xe=u((E0,nc)=>{"use strict";function Iw(e){var t=typeof e;return e!=null&&(t=="object"||t=="function")}nc.exports=Iw});var Zr=u((R0,oc)=>{"use strict";var Sw=gt(),ww=xe(),Tw="[object AsyncFunction]",Ew="[object Function]",Rw="[object GeneratorFunction]",vw="[object Proxy]";function _w(e){if(!ww(e))return!1;var t=Sw(e);return t==Ew||t==Rw||t==Tw||t==vw}oc.exports=_w});var ic=u((v0,sc)=>{"use strict";var xw=pe(),Cw=xw["__core-js_shared__"];sc.exports=Cw});var cc=u((_0,pc)=>{"use strict";var Uo=ic(),uc=function(){var e=/[^.]+$/.exec(Uo&&Uo.keys&&Uo.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}();function Ow(e){return!!uc&&uc in e}pc.exports=Ow});var qo=u((x0,lc)=>{"use strict";var Lw=Function.prototype,Pw=Lw.toString;function Uw(e){if(e!=null){try{return Pw.call(e)}catch{}try{return e+""}catch{}}return""}lc.exports=Uw});var fc=u((C0,dc)=>{"use strict";var qw=Zr(),Dw=cc(),Nw=xe(),Bw=qo(),Mw=/[\\^$.*+?()[\]{}|]/g,kw=/^\[object .+?Constructor\]$/,Gw=Function.prototype,Fw=Object.prototype,jw=Gw.toString,Qw=Fw.hasOwnProperty,Ww=RegExp("^"+jw.call(Qw).replace(Mw,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function $w(e){if(!Nw(e)||Dw(e))return!1;var t=qw(e)?Ww:kw;return t.test(Bw(e))}dc.exports=$w});var gc=u((O0,mc)=>{"use strict";function Kw(e,t){return e?.[t]}mc.exports=Kw});var yt=u((L0,yc)=>{"use strict";var Vw=fc(),Yw=gc();function Hw(e,t){var r=Yw(e,t);return Vw(r)?r:void 0}yc.exports=Hw});var Do=u((P0,hc)=>{"use strict";var zw=yt(),Jw=function(){try{var e=zw(Object,"defineProperty");return e({},"",{}),e}catch{}}();hc.exports=Jw});var Ic=u((U0,bc)=>{"use strict";var Xw=ac(),Ac=Do(),Zw=Xr(),eT=Ac?function(e,t){return Ac(e,"toString",{configurable:!0,enumerable:!1,value:Xw(t),writable:!0})}:Zw;bc.exports=eT});var No=u((q0,Sc)=>{"use strict";var tT=800,rT=16,aT=Date.now;function nT(e){var t=0,r=0;return function(){var a=aT(),n=rT-(a-r);if(r=a,n>0){if(++t>=tT)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}Sc.exports=nT});var tn=u((D0,wc)=>{"use strict";var oT=Ic(),sT=No(),iT=sT(oT);wc.exports=iT});var Bo=u((N0,Tc)=>{"use strict";var uT=Xr(),pT=Po(),cT=tn();function lT(e,t){return cT(pT(e,t,uT),e+"")}Tc.exports=lT});var ea=u((B0,Ec)=>{"use strict";var dT=yt(),fT=dT(Object,"create");Ec.exports=fT});var _c=u((M0,vc)=>{"use strict";var Rc=ea();function mT(){this.__data__=Rc?Rc(null):{},this.size=0}vc.exports=mT});var Cc=u((k0,xc)=>{"use strict";function gT(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}xc.exports=gT});var Lc=u((G0,Oc)=>{"use strict";var yT=ea(),hT="__lodash_hash_undefined__",AT=Object.prototype,bT=AT.hasOwnProperty;function IT(e){var t=this.__data__;if(yT){var r=t[e];return r===hT?void 0:r}return bT.call(t,e)?t[e]:void 0}Oc.exports=IT});var Uc=u((F0,Pc)=>{"use strict";var ST=ea(),wT=Object.prototype,TT=wT.hasOwnProperty;function ET(e){var t=this.__data__;return ST?t[e]!==void 0:TT.call(t,e)}Pc.exports=ET});var Dc=u((j0,qc)=>{"use strict";var RT=ea(),vT="__lodash_hash_undefined__";function _T(e,t){var r=this.__data__;return this.size+=this.has(e)?0:1,r[e]=RT&&t===void 0?vT:t,this}qc.exports=_T});var Bc=u((Q0,Nc)=>{"use strict";var xT=_c(),CT=Cc(),OT=Lc(),LT=Uc(),PT=Dc();function Ht(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t<r;){var a=e[t];this.set(a[0],a[1])}}Ht.prototype.clear=xT;Ht.prototype.delete=CT;Ht.prototype.get=OT;Ht.prototype.has=LT;Ht.prototype.set=PT;Nc.exports=Ht});var kc=u((W0,Mc)=>{"use strict";function UT(){this.__data__=[],this.size=0}Mc.exports=UT});var zt=u(($0,Gc)=>{"use strict";function qT(e,t){return e===t||e!==e&&t!==t}Gc.exports=qT});var ta=u((K0,Fc)=>{"use strict";var DT=zt();function NT(e,t){for(var r=e.length;r--;)if(DT(e[r][0],t))return r;return-1}Fc.exports=NT});var Qc=u((V0,jc)=>{"use strict";var BT=ta(),MT=Array.prototype,kT=MT.splice;function GT(e){var t=this.__data__,r=BT(t,e);if(r<0)return!1;var a=t.length-1;return r==a?t.pop():kT.call(t,r,1),--this.size,!0}jc.exports=GT});var $c=u((Y0,Wc)=>{"use strict";var FT=ta();function jT(e){var t=this.__data__,r=FT(t,e);return r<0?void 0:t[r][1]}Wc.exports=jT});var Vc=u((H0,Kc)=>{"use strict";var QT=ta();function WT(e){return QT(this.__data__,e)>-1}Kc.exports=WT});var Hc=u((z0,Yc)=>{"use strict";var $T=ta();function KT(e,t){var r=this.__data__,a=$T(r,e);return a<0?(++this.size,r.push([e,t])):r[a][1]=t,this}Yc.exports=KT});var ra=u((J0,zc)=>{"use strict";var VT=kc(),YT=Qc(),HT=$c(),zT=Vc(),JT=Hc();function Jt(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t<r;){var a=e[t];this.set(a[0],a[1])}}Jt.prototype.clear=VT;Jt.prototype.delete=YT;Jt.prototype.get=HT;Jt.prototype.has=zT;Jt.prototype.set=JT;zc.exports=Jt});var rn=u((X0,Jc)=>{"use strict";var XT=yt(),ZT=pe(),eE=XT(ZT,"Map");Jc.exports=eE});var el=u((Z0,Zc)=>{"use strict";var Xc=Bc(),tE=ra(),rE=rn();function aE(){this.size=0,this.__data__={hash:new Xc,map:new(rE||tE),string:new Xc}}Zc.exports=aE});var rl=u((eF,tl)=>{"use strict";function nE(e){var t=typeof e;return t=="string"||t=="number"||t=="symbol"||t=="boolean"?e!=="__proto__":e===null}tl.exports=nE});var aa=u((tF,al)=>{"use strict";var oE=rl();function sE(e,t){var r=e.__data__;return oE(t)?r[typeof t=="string"?"string":"hash"]:r.map}al.exports=sE});var ol=u((rF,nl)=>{"use strict";var iE=aa();function uE(e){var t=iE(this,e).delete(e);return this.size-=t?1:0,t}nl.exports=uE});var il=u((aF,sl)=>{"use strict";var pE=aa();function cE(e){return pE(this,e).get(e)}sl.exports=cE});var pl=u((nF,ul)=>{"use strict";var lE=aa();function dE(e){return lE(this,e).has(e)}ul.exports=dE});var ll=u((oF,cl)=>{"use strict";var fE=aa();function mE(e,t){var r=fE(this,e),a=r.size;return r.set(e,t),this.size+=r.size==a?0:1,this}cl.exports=mE});var an=u((sF,dl)=>{"use strict";var gE=el(),yE=ol(),hE=il(),AE=pl(),bE=ll();function Xt(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t<r;){var a=e[t];this.set(a[0],a[1])}}Xt.prototype.clear=gE;Xt.prototype.delete=yE;Xt.prototype.get=hE;Xt.prototype.has=AE;Xt.prototype.set=bE;dl.exports=Xt});var ml=u((iF,fl)=>{"use strict";var IE="__lodash_hash_undefined__";function SE(e){return this.__data__.set(e,IE),this}fl.exports=SE});var yl=u((uF,gl)=>{"use strict";function wE(e){return this.__data__.has(e)}gl.exports=wE});var Mo=u((pF,hl)=>{"use strict";var TE=an(),EE=ml(),RE=yl();function nn(e){var t=-1,r=e==null?0:e.length;for(this.__data__=new TE;++t<r;)this.add(e[t])}nn.prototype.add=nn.prototype.push=EE;nn.prototype.has=RE;hl.exports=nn});var bl=u((cF,Al)=>{"use strict";function vE(e,t,r,a){for(var n=e.length,o=r+(a?1:-1);a?o--:++o<n;)if(t(e[o],o,e))return o;return-1}Al.exports=vE});var Sl=u((lF,Il)=>{"use strict";function _E(e){return e!==e}Il.exports=_E});var Tl=u((dF,wl)=>{"use strict";function xE(e,t,r){for(var a=r-1,n=e.length;++a<n;)if(e[a]===t)return a;return-1}wl.exports=xE});var Rl=u((fF,El)=>{"use strict";var CE=bl(),OE=Sl(),LE=Tl();function PE(e,t,r){return t===t?LE(e,t,r):CE(e,OE,r)}El.exports=PE});var ko=u((mF,vl)=>{"use strict";var UE=Rl();function qE(e,t){var r=e==null?0:e.length;return!!r&&UE(e,t,0)>-1}vl.exports=qE});var xl=u((gF,_l)=>{"use strict";function DE(e,t,r){for(var a=-1,n=e==null?0:e.length;++a<n;)if(r(t,e[a]))return!0;return!1}_l.exports=DE});var Go=u((yF,Cl)=>{"use strict";function NE(e,t){return e.has(t)}Cl.exports=NE});var Fo=u((hF,Ol)=>{"use strict";var BE=yt(),ME=pe(),kE=BE(ME,"Set");Ol.exports=kE});var jo=u((AF,Ll)=>{"use strict";function GE(){}Ll.exports=GE});var on=u((bF,Pl)=>{"use strict";function FE(e){var t=-1,r=Array(e.size);return e.forEach(function(a){r[++t]=a}),r}Pl.exports=FE});var ql=u((IF,Ul)=>{"use strict";var Qo=Fo(),jE=jo(),QE=on(),WE=1/0,$E=Qo&&1/QE(new Qo([,-0]))[1]==WE?function(e){return new Qo(e)}:jE;Ul.exports=$E});var Nl=u((SF,Dl)=>{"use strict";var KE=Mo(),VE=ko(),YE=xl(),HE=Go(),zE=ql(),JE=on(),XE=200;function ZE(e,t,r){var a=-1,n=VE,o=e.length,s=!0,i=[],p=i;if(r)s=!1,n=YE;else if(o>=XE){var f=t?null:zE(e);if(f)return JE(f);s=!1,n=HE,p=new KE}else p=t?[]:i;e:for(;++a<o;){var m=e[a],g=t?t(m):m;if(m=r||m!==0?m:0,s&&g===g){for(var y=p.length;y--;)if(p[y]===g)continue e;t&&p.push(g),i.push(m)}else n(p,g,r)||(p!==i&&p.push(g),i.push(m))}return i}Dl.exports=ZE});var sn=u((wF,Bl)=>{"use strict";var eR=9007199254740991;function tR(e){return typeof e=="number"&&e>-1&&e%1==0&&e<=eR}Bl.exports=tR});var Zt=u((TF,Ml)=>{"use strict";var rR=Zr(),aR=sn();function nR(e){return e!=null&&aR(e.length)&&!rR(e)}Ml.exports=nR});var Wo=u((EF,kl)=>{"use strict";var oR=Zt(),sR=be();function iR(e){return sR(e)&&oR(e)}kl.exports=iR});var Fl=u((RF,Gl)=>{"use strict";var uR=Lo(),pR=Bo(),cR=Nl(),lR=Wo(),dR=pR(function(e){return cR(uR(e,1,lR,!0))});Gl.exports=dR});var Ql=u((vF,jl)=>{"use strict";var fR=ra();function mR(){this.__data__=new fR,this.size=0}jl.exports=mR});var $l=u((_F,Wl)=>{"use strict";function gR(e){var t=this.__data__,r=t.delete(e);return this.size=t.size,r}Wl.exports=gR});var Vl=u((xF,Kl)=>{"use strict";function yR(e){return this.__data__.get(e)}Kl.exports=yR});var Hl=u((CF,Yl)=>{"use strict";function hR(e){return this.__data__.has(e)}Yl.exports=hR});var Jl=u((OF,zl)=>{"use strict";var AR=ra(),bR=rn(),IR=an(),SR=200;function wR(e,t){var r=this.__data__;if(r instanceof AR){var a=r.__data__;if(!bR||a.length<SR-1)return a.push([e,t]),this.size=++r.size,this;r=this.__data__=new IR(a)}return r.set(e,t),this.size=r.size,this}zl.exports=wR});var na=u((LF,Xl)=>{"use strict";var TR=ra(),ER=Ql(),RR=$l(),vR=Vl(),_R=Hl(),xR=Jl();function er(e){var t=this.__data__=new TR(e);this.size=t.size}er.prototype.clear=ER;er.prototype.delete=RR;er.prototype.get=vR;er.prototype.has=_R;er.prototype.set=xR;Xl.exports=er});var oa=u((PF,ed)=>{"use strict";var Zl=Do();function CR(e,t,r){t=="__proto__"&&Zl?Zl(e,t,{configurable:!0,enumerable:!0,value:r,writable:!0}):e[t]=r}ed.exports=CR});var $o=u((UF,td)=>{"use strict";var OR=oa(),LR=zt();function PR(e,t,r){(r!==void 0&&!LR(e[t],r)||r===void 0&&!(t in e))&&OR(e,t,r)}td.exports=PR});var ad=u((qF,rd)=>{"use strict";function UR(e){return function(t,r,a){for(var n=-1,o=Object(t),s=a(t),i=s.length;i--;){var p=s[e?i:++n];if(r(o[p],p,o)===!1)break}return t}}rd.exports=UR});var Ko=u((DF,nd)=>{"use strict";var qR=ad(),DR=qR();nd.exports=DR});var Vo=u((sa,tr)=>{"use strict";var NR=pe(),ud=typeof sa=="object"&&sa&&!sa.nodeType&&sa,od=ud&&typeof tr=="object"&&tr&&!tr.nodeType&&tr,BR=od&&od.exports===ud,sd=BR?NR.Buffer:void 0,id=sd?sd.allocUnsafe:void 0;function MR(e,t){if(t)return e.slice();var r=e.length,a=id?id(r):new e.constructor(r);return e.copy(a),a}tr.exports=MR});var Yo=u((NF,pd)=>{"use strict";var kR=pe(),GR=kR.Uint8Array;pd.exports=GR});var un=u((BF,ld)=>{"use strict";var cd=Yo();function FR(e){var t=new e.constructor(e.byteLength);return new cd(t).set(new cd(e)),t}ld.exports=FR});var Ho=u((MF,dd)=>{"use strict";var jR=un();function QR(e,t){var r=t?jR(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.length)}dd.exports=QR});var rr=u((kF,fd)=>{"use strict";function WR(e,t){var r=-1,a=e.length;for(t||(t=Array(a));++r<a;)t[r]=e[r];return t}fd.exports=WR});var ia=u((GF,gd)=>{"use strict";var $R=xe(),md=Object.create,KR=function(){function e(){}return function(t){if(!$R(t))return{};if(md)return md(t);e.prototype=t;var r=new e;return e.prototype=void 0,r}}();gd.exports=KR});var zo=u((FF,yd)=>{"use strict";function VR(e,t){return function(r){return e(t(r))}}yd.exports=VR});var pn=u((jF,hd)=>{"use strict";var YR=zo(),HR=YR(Object.getPrototypeOf,Object);hd.exports=HR});var cn=u((QF,Ad)=>{"use strict";var zR=Object.prototype;function JR(e){var t=e&&e.constructor,r=typeof t=="function"&&t.prototype||zR;return e===r}Ad.exports=JR});var Jo=u((WF,bd)=>{"use strict";var XR=ia(),ZR=pn(),ev=cn();function tv(e){return typeof e.constructor=="function"&&!ev(e)?XR(ZR(e)):{}}bd.exports=tv});var Sd=u(($F,Id)=>{"use strict";function rv(){return!1}Id.exports=rv});var pa=u((ua,ar)=>{"use strict";var av=pe(),nv=Sd(),Ed=typeof ua=="object"&&ua&&!ua.nodeType&&ua,wd=Ed&&typeof ar=="object"&&ar&&!ar.nodeType&&ar,ov=wd&&wd.exports===Ed,Td=ov?av.Buffer:void 0,sv=Td?Td.isBuffer:void 0,iv=sv||nv;ar.exports=iv});var Xo=u((KF,vd)=>{"use strict";var uv=gt(),pv=pn(),cv=be(),lv="[object Object]",dv=Function.prototype,fv=Object.prototype,Rd=dv.toString,mv=fv.hasOwnProperty,gv=Rd.call(Object);function yv(e){if(!cv(e)||uv(e)!=lv)return!1;var t=pv(e);if(t===null)return!0;var r=mv.call(t,"constructor")&&t.constructor;return typeof r=="function"&&r instanceof r&&Rd.call(r)==gv}vd.exports=yv});var xd=u((VF,_d)=>{"use strict";var hv=gt(),Av=sn(),bv=be(),Iv="[object Arguments]",Sv="[object Array]",wv="[object Boolean]",Tv="[object Date]",Ev="[object Error]",Rv="[object Function]",vv="[object Map]",_v="[object Number]",xv="[object Object]",Cv="[object RegExp]",Ov="[object Set]",Lv="[object String]",Pv="[object WeakMap]",Uv="[object ArrayBuffer]",qv="[object DataView]",Dv="[object Float32Array]",Nv="[object Float64Array]",Bv="[object Int8Array]",Mv="[object Int16Array]",kv="[object Int32Array]",Gv="[object Uint8Array]",Fv="[object Uint8ClampedArray]",jv="[object Uint16Array]",Qv="[object Uint32Array]",B={};B[Dv]=B[Nv]=B[Bv]=B[Mv]=B[kv]=B[Gv]=B[Fv]=B[jv]=B[Qv]=!0;B[Iv]=B[Sv]=B[Uv]=B[wv]=B[qv]=B[Tv]=B[Ev]=B[Rv]=B[vv]=B[_v]=B[xv]=B[Cv]=B[Ov]=B[Lv]=B[Pv]=!1;function Wv(e){return bv(e)&&Av(e.length)&&!!B[hv(e)]}_d.exports=Wv});var ln=u((YF,Cd)=>{"use strict";function $v(e){return function(t){return e(t)}}Cd.exports=$v});var dn=u((ca,nr)=>{"use strict";var Kv=Oo(),Od=typeof ca=="object"&&ca&&!ca.nodeType&&ca,la=Od&&typeof nr=="object"&&nr&&!nr.nodeType&&nr,Vv=la&&la.exports===Od,Zo=Vv&&Kv.process,Yv=function(){try{var e=la&&la.require&&la.require("util").types;return e||Zo&&Zo.binding&&Zo.binding("util")}catch{}}();nr.exports=Yv});var fn=u((HF,Ud)=>{"use strict";var Hv=xd(),zv=ln(),Ld=dn(),Pd=Ld&&Ld.isTypedArray,Jv=Pd?zv(Pd):Hv;Ud.exports=Jv});var es=u((zF,qd)=>{"use strict";function Xv(e,t){if(!(t==="constructor"&&typeof e[t]=="function")&&t!="__proto__")return e[t]}qd.exports=Xv});var ts=u((JF,Dd)=>{"use strict";var Zv=oa(),e_=zt(),t_=Object.prototype,r_=t_.hasOwnProperty;function a_(e,t,r){var a=e[t];(!(r_.call(e,t)&&e_(a,r))||r===void 0&&!(t in e))&&Zv(e,t,r)}Dd.exports=a_});var or=u((XF,Nd)=>{"use strict";var n_=ts(),o_=oa();function s_(e,t,r,a){var n=!r;r||(r={});for(var o=-1,s=t.length;++o<s;){var i=t[o],p=a?a(r[i],e[i],i,r,e):void 0;p===void 0&&(p=e[i]),n?o_(r,i,p):n_(r,i,p)}return r}Nd.exports=s_});var Md=u((ZF,Bd)=>{"use strict";function i_(e,t){for(var r=-1,a=Array(e);++r<e;)a[r]=t(r);return a}Bd.exports=i_});var da=u((e1,kd)=>{"use strict";var u_=9007199254740991,p_=/^(?:0|[1-9]\d*)$/;function c_(e,t){var r=typeof e;return t=t??u_,!!t&&(r=="number"||r!="symbol"&&p_.test(e))&&e>-1&&e%1==0&&e<t}kd.exports=c_});var rs=u((t1,Gd)=>{"use strict";var l_=Md(),d_=Jr(),f_=se(),m_=pa(),g_=da(),y_=fn(),h_=Object.prototype,A_=h_.hasOwnProperty;function b_(e,t){var r=f_(e),a=!r&&d_(e),n=!r&&!a&&m_(e),o=!r&&!a&&!n&&y_(e),s=r||a||n||o,i=s?l_(e.length,String):[],p=i.length;for(var f in e)(t||A_.call(e,f))&&!(s&&(f=="length"||n&&(f=="offset"||f=="parent")||o&&(f=="buffer"||f=="byteLength"||f=="byteOffset")||g_(f,p)))&&i.push(f);return i}Gd.exports=b_});var jd=u((r1,Fd)=>{"use strict";function I_(e){var t=[];if(e!=null)for(var r in Object(e))t.push(r);return t}Fd.exports=I_});var Wd=u((a1,Qd)=>{"use strict";var S_=xe(),w_=cn(),T_=jd(),E_=Object.prototype,R_=E_.hasOwnProperty;function v_(e){if(!S_(e))return T_(e);var t=w_(e),r=[];for(var a in e)a=="constructor"&&(t||!R_.call(e,a))||r.push(a);return r}Qd.exports=v_});var sr=u((n1,$d)=>{"use strict";var __=rs(),x_=Wd(),C_=Zt();function O_(e){return C_(e)?__(e,!0):x_(e)}$d.exports=O_});var Vd=u((o1,Kd)=>{"use strict";var L_=or(),P_=sr();function U_(e){return L_(e,P_(e))}Kd.exports=U_});var Zd=u((s1,Xd)=>{"use strict";var Yd=$o(),q_=Vo(),D_=Ho(),N_=rr(),B_=Jo(),Hd=Jr(),zd=se(),M_=Wo(),k_=pa(),G_=Zr(),F_=xe(),j_=Xo(),Q_=fn(),Jd=es(),W_=Vd();function $_(e,t,r,a,n,o,s){var i=Jd(e,r),p=Jd(t,r),f=s.get(p);if(f){Yd(e,r,f);return}var m=o?o(i,p,r+"",e,t,s):void 0,g=m===void 0;if(g){var y=zd(p),I=!y&&k_(p),C=!y&&!I&&Q_(p);m=p,y||I||C?zd(i)?m=i:M_(i)?m=N_(i):I?(g=!1,m=q_(p,!0)):C?(g=!1,m=D_(p,!0)):m=[]:j_(p)||Hd(p)?(m=i,Hd(i)?m=W_(i):(!F_(i)||G_(i))&&(m=B_(p))):g=!1}g&&(s.set(p,m),n(m,p,a,o,s),s.delete(p)),Yd(e,r,m)}Xd.exports=$_});var rf=u((i1,tf)=>{"use strict";var K_=na(),V_=$o(),Y_=Ko(),H_=Zd(),z_=xe(),J_=sr(),X_=es();function ef(e,t,r,a,n){e!==t&&Y_(t,function(o,s){if(n||(n=new K_),z_(o))H_(e,t,s,r,ef,a,n);else{var i=a?a(X_(e,s),o,s+"",e,t,n):void 0;i===void 0&&(i=o),V_(e,s,i)}},J_)}tf.exports=ef});var nf=u((u1,af)=>{"use strict";var Z_=zt(),ex=Zt(),tx=da(),rx=xe();function ax(e,t,r){if(!rx(r))return!1;var a=typeof t;return(a=="number"?ex(r)&&tx(t,r.length):a=="string"&&t in r)?Z_(r[t],e):!1}af.exports=ax});var sf=u((p1,of)=>{"use strict";var nx=Bo(),ox=nf();function sx(e){return nx(function(t,r){var a=-1,n=r.length,o=n>1?r[n-1]:void 0,s=n>2?r[2]:void 0;for(o=e.length>3&&typeof o=="function"?(n--,o):void 0,s&&ox(r[0],r[1],s)&&(o=n<3?void 0:o,n=1),t=Object(t);++a<n;){var i=r[a];i&&e(t,i,a,o)}return t})}of.exports=sx});var as=u((c1,uf)=>{"use strict";var ix=rf(),ux=sf(),px=ux(function(e,t,r){ix(e,t,r)});uf.exports=px});var lm=u(ge=>{"use strict";ge.aliasToReal={each:"forEach",eachRight:"forEachRight",entries:"toPairs",entriesIn:"toPairsIn",extend:"assignIn",extendAll:"assignInAll",extendAllWith:"assignInAllWith",extendWith:"assignInWith",first:"head",conforms:"conformsTo",matches:"isMatch",property:"get",__:"placeholder",F:"stubFalse",T:"stubTrue",all:"every",allPass:"overEvery",always:"constant",any:"some",anyPass:"overSome",apply:"spread",assoc:"set",assocPath:"set",complement:"negate",compose:"flowRight",contains:"includes",dissoc:"unset",dissocPath:"unset",dropLast:"dropRight",dropLastWhile:"dropRightWhile",equals:"isEqual",identical:"eq",indexBy:"keyBy",init:"initial",invertObj:"invert",juxt:"over",omitAll:"omit",nAry:"ary",path:"get",pathEq:"matchesProperty",pathOr:"getOr",paths:"at",pickAll:"pick",pipe:"flow",pluck:"map",prop:"get",propEq:"matchesProperty",propOr:"getOr",props:"at",symmetricDifference:"xor",symmetricDifferenceBy:"xorBy",symmetricDifferenceWith:"xorWith",takeLast:"takeRight",takeLastWhile:"takeRightWhile",unapply:"rest",unnest:"flatten",useWith:"overArgs",where:"conformsTo",whereEq:"isMatch",zipObj:"zipObject"};ge.aryMethod={1:["assignAll","assignInAll","attempt","castArray","ceil","create","curry","curryRight","defaultsAll","defaultsDeepAll","floor","flow","flowRight","fromPairs","invert","iteratee","memoize","method","mergeAll","methodOf","mixin","nthArg","over","overEvery","overSome","rest","reverse","round","runInContext","spread","template","trim","trimEnd","trimStart","uniqueId","words","zipAll"],2:["add","after","ary","assign","assignAllWith","assignIn","assignInAllWith","at","before","bind","bindAll","bindKey","chunk","cloneDeepWith","cloneWith","concat","conformsTo","countBy","curryN","curryRightN","debounce","defaults","defaultsDeep","defaultTo","delay","difference","divide","drop","dropRight","dropRightWhile","dropWhile","endsWith","eq","every","filter","find","findIndex","findKey","findLast","findLastIndex","findLastKey","flatMap","flatMapDeep","flattenDepth","forEach","forEachRight","forIn","forInRight","forOwn","forOwnRight","get","groupBy","gt","gte","has","hasIn","includes","indexOf","intersection","invertBy","invoke","invokeMap","isEqual","isMatch","join","keyBy","lastIndexOf","lt","lte","map","mapKeys","mapValues","matchesProperty","maxBy","meanBy","merge","mergeAllWith","minBy","multiply","nth","omit","omitBy","overArgs","pad","padEnd","padStart","parseInt","partial","partialRight","partition","pick","pickBy","propertyOf","pull","pullAll","pullAt","random","range","rangeRight","rearg","reject","remove","repeat","restFrom","result","sampleSize","some","sortBy","sortedIndex","sortedIndexOf","sortedLastIndex","sortedLastIndexOf","sortedUniqBy","split","spreadFrom","startsWith","subtract","sumBy","take","takeRight","takeRightWhile","takeWhile","tap","throttle","thru","times","trimChars","trimCharsEnd","trimCharsStart","truncate","union","uniqBy","uniqWith","unset","unzipWith","without","wrap","xor","zip","zipObject","zipObjectDeep"],3:["assignInWith","assignWith","clamp","differenceBy","differenceWith","findFrom","findIndexFrom","findLastFrom","findLastIndexFrom","getOr","includesFrom","indexOfFrom","inRange","intersectionBy","intersectionWith","invokeArgs","invokeArgsMap","isEqualWith","isMatchWith","flatMapDepth","lastIndexOfFrom","mergeWith","orderBy","padChars","padCharsEnd","padCharsStart","pullAllBy","pullAllWith","rangeStep","rangeStepRight","reduce","reduceRight","replace","set","slice","sortedIndexBy","sortedLastIndexBy","transform","unionBy","unionWith","update","xorBy","xorWith","zipWith"],4:["fill","setWith","updateWith"]};ge.aryRearg={2:[1,0],3:[2,0,1],4:[3,2,0,1]};ge.iterateeAry={dropRightWhile:1,dropWhile:1,every:1,filter:1,find:1,findFrom:1,findIndex:1,findIndexFrom:1,findKey:1,findLast:1,findLastFrom:1,findLastIndex:1,findLastIndexFrom:1,findLastKey:1,flatMap:1,flatMapDeep:1,flatMapDepth:1,forEach:1,forEachRight:1,forIn:1,forInRight:1,forOwn:1,forOwnRight:1,map:1,mapKeys:1,mapValues:1,partition:1,reduce:2,reduceRight:2,reject:1,remove:1,some:1,takeRightWhile:1,takeWhile:1,times:1,transform:2};ge.iterateeRearg={mapKeys:[1],reduceRight:[1,0]};ge.methodRearg={assignInAllWith:[1,0],assignInWith:[1,2,0],assignAllWith:[1,0],assignWith:[1,2,0],differenceBy:[1,2,0],differenceWith:[1,2,0],getOr:[2,1,0],intersectionBy:[1,2,0],intersectionWith:[1,2,0],isEqualWith:[1,2,0],isMatchWith:[2,1,0],mergeAllWith:[1,0],mergeWith:[1,2,0],padChars:[2,1,0],padCharsEnd:[2,1,0],padCharsStart:[2,1,0],pullAllBy:[2,1,0],pullAllWith:[2,1,0],rangeStep:[1,2,0],rangeStepRight:[1,2,0],setWith:[3,1,2,0],sortedIndexBy:[2,1,0],sortedLastIndexBy:[2,1,0],unionBy:[1,2,0],unionWith:[1,2,0],updateWith:[3,1,2,0],xorBy:[1,2,0],xorWith:[1,2,0],zipWith:[1,2,0]};ge.methodSpread={assignAll:{start:0},assignAllWith:{start:0},assignInAll:{start:0},assignInAllWith:{start:0},defaultsAll:{start:0},defaultsDeepAll:{start:0},invokeArgs:{start:2},invokeArgsMap:{start:2},mergeAll:{start:0},mergeAllWith:{start:0},partial:{start:1},partialRight:{start:1},without:{start:1},zipAll:{start:0}};ge.mutate={array:{fill:!0,pull:!0,pullAll:!0,pullAllBy:!0,pullAllWith:!0,pullAt:!0,remove:!0,reverse:!0},object:{assign:!0,assignAll:!0,assignAllWith:!0,assignIn:!0,assignInAll:!0,assignInAllWith:!0,assignInWith:!0,assignWith:!0,defaults:!0,defaultsAll:!0,defaultsDeep:!0,defaultsDeepAll:!0,merge:!0,mergeAll:!0,mergeAllWith:!0,mergeWith:!0},set:{set:!0,setWith:!0,unset:!0,update:!0,updateWith:!0}};ge.realToAlias=function(){var e=Object.prototype.hasOwnProperty,t=ge.aliasToReal,r={};for(var a in t){var n=t[a];e.call(r,n)?r[n].push(a):r[n]=[a]}return r}();ge.remap={assignAll:"assign",assignAllWith:"assignWith",assignInAll:"assignIn",assignInAllWith:"assignInWith",curryN:"curry",curryRightN:"curryRight",defaultsAll:"defaults",defaultsDeepAll:"defaultsDeep",findFrom:"find",findIndexFrom:"findIndex",findLastFrom:"findLast",findLastIndexFrom:"findLastIndex",getOr:"get",includesFrom:"includes",indexOfFrom:"indexOf",invokeArgs:"invoke",invokeArgsMap:"invokeMap",lastIndexOfFrom:"lastIndexOf",mergeAll:"merge",mergeAllWith:"mergeWith",padChars:"pad",padCharsEnd:"padEnd",padCharsStart:"padStart",propertyOf:"get",rangeStep:"range",rangeStepRight:"rangeRight",restFrom:"rest",spreadFrom:"spread",trimChars:"trim",trimCharsEnd:"trimEnd",trimCharsStart:"trimStart",zipAll:"zip"};ge.skipFixed={castArray:!0,flow:!0,flowRight:!0,iteratee:!0,mixin:!0,rearg:!0,runInContext:!0};ge.skipRearg={add:!0,assign:!0,assignIn:!0,bind:!0,bindKey:!0,concat:!0,difference:!0,divide:!0,eq:!0,gt:!0,gte:!0,isEqual:!0,lt:!0,lte:!0,matchesProperty:!0,merge:!0,multiply:!0,overArgs:!0,partial:!0,partialRight:!0,propertyOf:!0,random:!0,range:!0,rangeRight:!0,subtract:!0,zip:!0,zipObject:!0,zipObjectDeep:!0}});var Xs=u((DQ,dm)=>{"use strict";dm.exports={}});var ym=u((NQ,gm)=>{"use strict";var X=lm(),KC=Xs(),fm=Array.prototype.push;function VC(e,t){return t==2?function(r,a){return e.apply(void 0,arguments)}:function(r){return e.apply(void 0,arguments)}}function Zs(e,t){return t==2?function(r,a){return e(r,a)}:function(r){return e(r)}}function mm(e){for(var t=e?e.length:0,r=Array(t);t--;)r[t]=e[t];return r}function YC(e){return function(t){return e({},t)}}function HC(e,t){return function(){for(var r=arguments.length,a=r-1,n=Array(r);r--;)n[r]=arguments[r];var o=n[t],s=n.slice(0,t);return o&&fm.apply(s,o),t!=a&&fm.apply(s,n.slice(t+1)),e.apply(this,s)}}function ei(e,t){return function(){var r=arguments.length;if(r){for(var a=Array(r);r--;)a[r]=arguments[r];var n=a[0]=t.apply(void 0,a);return e.apply(void 0,a),n}}}function ti(e,t,r,a){var n=typeof t=="function",o=t===Object(t);if(o&&(a=r,r=t,t=void 0),r==null)throw new TypeError;a||(a={});var s={cap:"cap"in a?a.cap:!0,curry:"curry"in a?a.curry:!0,fixed:"fixed"in a?a.fixed:!0,immutable:"immutable"in a?a.immutable:!0,rearg:"rearg"in a?a.rearg:!0},i=n?r:KC,p="curry"in a&&a.curry,f="fixed"in a&&a.fixed,m="rearg"in a&&a.rearg,g=n?r.runInContext():void 0,y=n?r:{ary:e.ary,assign:e.assign,clone:e.clone,curry:e.curry,forEach:e.forEach,isArray:e.isArray,isError:e.isError,isFunction:e.isFunction,isWeakMap:e.isWeakMap,iteratee:e.iteratee,keys:e.keys,rearg:e.rearg,toInteger:e.toInteger,toPath:e.toPath},I=y.ary,C=y.assign,_=y.clone,v=y.curry,R=y.forEach,U=y.isArray,qe=y.isError,Ee=y.isFunction,ct=y.isWeakMap,jt=y.keys,Ir=y.rearg,Sr=y.toInteger,RI=y.toPath,qu=jt(X.aryMethod),vI={castArray:function(S){return function(){var h=arguments[0];return U(h)?S(mm(h)):S.apply(void 0,arguments)}},iteratee:function(S){return function(){var h=arguments[0],b=arguments[1],E=S(h,b),O=E.length;return s.cap&&typeof b=="number"?(b=b>2?b-2:1,O&&O<=b?E:Zs(E,b)):E}},mixin:function(S){return function(h){var b=this;if(!Ee(b))return S(b,Object(h));var E=[];return R(jt(h),function(O){Ee(h[O])&&E.push([O,b.prototype[O]])}),S(b,Object(h)),R(E,function(O){var ie=O[1];Ee(ie)?b.prototype[O[0]]=ie:delete b.prototype[O[0]]}),b}},nthArg:function(S){return function(h){var b=h<0?1:Sr(h)+1;return v(S(h),b)}},rearg:function(S){return function(h,b){var E=b?b.length:0;return v(S(h,b),E)}},runInContext:function(S){return function(h){return ti(e,S(h),a)}}};function _I(S,h){if(s.cap){var b=X.iterateeRearg[S];if(b)return PI(h,b);var E=!n&&X.iterateeAry[S];if(E)return LI(h,E)}return h}function xI(S,h,b){return p||s.curry&&b>1?v(h,b):h}function Du(S,h,b){if(s.fixed&&(f||!X.skipFixed[S])){var E=X.methodSpread[S],O=E&&E.start;return O===void 0?I(h,b):HC(h,O)}return h}function Nu(S,h,b){return s.rearg&&b>1&&(m||!X.skipRearg[S])?Ir(h,X.methodRearg[S]||X.aryRearg[b]):h}function CI(S,h){h=RI(h);for(var b=-1,E=h.length,O=E-1,ie=_(Object(S)),je=ie;je!=null&&++b<E;){var Re=h[b],Qe=je[Re];Qe!=null&&!(Ee(Qe)||qe(Qe)||ct(Qe))&&(je[Re]=_(b==O?Qe:Object(Qe))),je=je[Re]}return ie}function OI(S){return he.runInContext.convert(S)(void 0)}function Bu(S,h){var b=X.aliasToReal[S]||S,E=X.remap[b]||b,O=a;return function(ie){var je=n?g:y,Re=n?g[E]:h,Qe=C(C({},O),ie);return ti(je,b,Re,Qe)}}function LI(S,h){return Mu(S,function(b){return typeof b=="function"?Zs(b,h):b})}function PI(S,h){return Mu(S,function(b){var E=h.length;return VC(Ir(Zs(b,E),h),E)})}function Mu(S,h){return function(){var b=arguments.length;if(!b)return S();for(var E=Array(b);b--;)E[b]=arguments[b];var O=s.rearg?0:b-1;return E[O]=h(E[O]),S.apply(void 0,E)}}function ku(S,h,b){var E,O=X.aliasToReal[S]||S,ie=h,je=vI[O];return je?ie=je(h):s.immutable&&(X.mutate.array[O]?ie=ei(h,mm):X.mutate.object[O]?ie=ei(h,YC(h)):X.mutate.set[O]&&(ie=ei(h,CI))),R(qu,function(Re){return R(X.aryMethod[Re],function(Qe){if(O==Qe){var Gu=X.methodSpread[O],UI=Gu&&Gu.afterRearg;return E=UI?Du(O,Nu(O,ie,Re),Re):Nu(O,Du(O,ie,Re),Re),E=_I(O,E),E=xI(O,E,Re),!1}}),!E}),E||(E=ie),E==h&&(E=p?v(E,1):function(){return h.apply(this,arguments)}),E.convert=Bu(O,h),E.placeholder=h.placeholder=b,E}if(!o)return ku(t,r,i);var he=r,wr=[];return R(qu,function(S){R(X.aryMethod[S],function(h){var b=he[X.remap[h]||h];b&&wr.push([h,ku(h,b,he)])})}),R(jt(he),function(S){var h=he[S];if(typeof h=="function"){for(var b=wr.length;b--;)if(wr[b][0]==S)return;h.convert=Bu(S,h),wr.push([S,h])}}),R(wr,function(S){he[S[0]]=S[1]}),he.convert=OI,he.placeholder=he,R(jt(he),function(S){R(X.realToAlias[S]||[],function(h){he[h]=he[S]})}),he}gm.exports=ti});var ri=u((BQ,hm)=>{"use strict";var zC=yt(),JC=pe(),XC=zC(JC,"WeakMap");hm.exports=XC});var ai=u((MQ,bm)=>{"use strict";var Am=ri(),ZC=Am&&new Am;bm.exports=ZC});var ni=u((kQ,Sm)=>{"use strict";var eO=Xr(),Im=ai(),tO=Im?function(e,t){return Im.set(e,t),e}:eO;Sm.exports=tO});var Ta=u((GQ,wm)=>{"use strict";var rO=ia(),aO=xe();function nO(e){return function(){var t=arguments;switch(t.length){case 0:return new e;case 1:return new e(t[0]);case 2:return new e(t[0],t[1]);case 3:return new e(t[0],t[1],t[2]);case 4:return new e(t[0],t[1],t[2],t[3]);case 5:return new e(t[0],t[1],t[2],t[3],t[4]);case 6:return new e(t[0],t[1],t[2],t[3],t[4],t[5]);case 7:return new e(t[0],t[1],t[2],t[3],t[4],t[5],t[6])}var r=rO(e.prototype),a=e.apply(r,t);return aO(a)?a:r}}wm.exports=nO});var Em=u((FQ,Tm)=>{"use strict";var oO=Ta(),sO=pe(),iO=1;function uO(e,t,r){var a=t&iO,n=oO(e);function o(){var s=this&&this!==sO&&this instanceof o?n:e;return s.apply(a?r:this,arguments)}return o}Tm.exports=uO});var oi=u((jQ,Rm)=>{"use strict";var pO=Math.max;function cO(e,t,r,a){for(var n=-1,o=e.length,s=r.length,i=-1,p=t.length,f=pO(o-s,0),m=Array(p+f),g=!a;++i<p;)m[i]=t[i];for(;++n<s;)(g||n<o)&&(m[r[n]]=e[n]);for(;f--;)m[i++]=e[n++];return m}Rm.exports=cO});var si=u((QQ,vm)=>{"use strict";var lO=Math.max;function dO(e,t,r,a){for(var n=-1,o=e.length,s=-1,i=r.length,p=-1,f=t.length,m=lO(o-i,0),g=Array(m+f),y=!a;++n<m;)g[n]=e[n];for(var I=n;++p<f;)g[I+p]=t[p];for(;++s<i;)(y||n<o)&&(g[I+r[s]]=e[n++]);return g}vm.exports=dO});var xm=u((WQ,_m)=>{"use strict";function fO(e,t){for(var r=e.length,a=0;r--;)e[r]===t&&++a;return a}_m.exports=fO});var Dn=u(($Q,Cm)=>{"use strict";function mO(){}Cm.exports=mO});var Bn=u((KQ,Om)=>{"use strict";var gO=ia(),yO=Dn(),hO=4294967295;function Nn(e){this.__wrapped__=e,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=hO,this.__views__=[]}Nn.prototype=gO(yO.prototype);Nn.prototype.constructor=Nn;Om.exports=Nn});var ii=u((VQ,Pm)=>{"use strict";var Lm=ai(),AO=jo(),bO=Lm?function(e){return Lm.get(e)}:AO;Pm.exports=bO});var qm=u((YQ,Um)=>{"use strict";var IO={};Um.exports=IO});var Bm=u((HQ,Nm)=>{"use strict";var Dm=qm(),SO=Object.prototype,wO=SO.hasOwnProperty;function TO(e){for(var t=e.name+"",r=Dm[t],a=wO.call(Dm,t)?r.length:0;a--;){var n=r[a],o=n.func;if(o==null||o==e)return n.name}return t}Nm.exports=TO});var ui=u((zQ,Mm)=>{"use strict";var EO=ia(),RO=Dn();function Mn(e,t){this.__wrapped__=e,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=void 0}Mn.prototype=EO(RO.prototype);Mn.prototype.constructor=Mn;Mm.exports=Mn});var Gm=u((JQ,km)=>{"use strict";var vO=Bn(),_O=ui(),xO=rr();function CO(e){if(e instanceof vO)return e.clone();var t=new _O(e.__wrapped__,e.__chain__);return t.__actions__=xO(e.__actions__),t.__index__=e.__index__,t.__values__=e.__values__,t}km.exports=CO});var Qm=u((XQ,jm)=>{"use strict";var OO=Bn(),Fm=ui(),LO=Dn(),PO=se(),UO=be(),qO=Gm(),DO=Object.prototype,NO=DO.hasOwnProperty;function kn(e){if(UO(e)&&!PO(e)&&!(e instanceof OO)){if(e instanceof Fm)return e;if(NO.call(e,"__wrapped__"))return qO(e)}return new Fm(e)}kn.prototype=LO.prototype;kn.prototype.constructor=kn;jm.exports=kn});var $m=u((ZQ,Wm)=>{"use strict";var BO=Bn(),MO=ii(),kO=Bm(),GO=Qm();function FO(e){var t=kO(e),r=GO[t];if(typeof r!="function"||!(t in BO.prototype))return!1;if(e===r)return!0;var a=MO(r);return!!a&&e===a[0]}Wm.exports=FO});var pi=u((eW,Km)=>{"use strict";var jO=ni(),QO=No(),WO=QO(jO);Km.exports=WO});var Ym=u((tW,Vm)=>{"use strict";var $O=/\{\n\/\* \[wrapped with (.+)\] \*/,KO=/,? & /;function VO(e){var t=e.match($O);return t?t[1].split(KO):[]}Vm.exports=VO});var zm=u((rW,Hm)=>{"use strict";var YO=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/;function HO(e,t){var r=t.length;if(!r)return e;var a=r-1;return t[a]=(r>1?"& ":"")+t[a],t=t.join(r>2?", ":" "),e.replace(YO,`{
2
2
  /* [wrapped with `+t+`] */
3
- `)}Hm.exports=YO});var Gn=u((rW,Jm)=>{"use strict";function HO(e,t){for(var r=-1,a=e==null?0:e.length;++r<a&&t(e[r],r,e)!==!1;);return e}Jm.exports=HO});var Zm=u((aW,Xm)=>{"use strict";var zO=Gn(),JO=ko(),XO=1,ZO=2,eL=8,tL=16,rL=32,aL=64,nL=128,oL=256,sL=512,iL=[["ary",nL],["bind",XO],["bindKey",ZO],["curry",eL],["curryRight",tL],["flip",sL],["partial",rL],["partialRight",aL],["rearg",oL]];function uL(e,t){return zO(iL,function(r){var a="_."+r[0];t&r[1]&&!JO(e,a)&&e.push(a)}),e.sort()}Xm.exports=uL});var ci=u((nW,eg)=>{"use strict";var pL=Ym(),cL=zm(),lL=tn(),dL=Zm();function fL(e,t,r){var a=t+"";return lL(e,cL(a,dL(pL(a),r)))}eg.exports=fL});var li=u((oW,ag)=>{"use strict";var mL=$m(),gL=pi(),yL=ci(),hL=1,AL=2,bL=4,IL=8,tg=32,rg=64;function SL(e,t,r,a,n,o,s,i,p,f){var m=t&IL,g=m?s:void 0,y=m?void 0:s,I=m?o:void 0,C=m?void 0:o;t|=m?tg:rg,t&=~(m?rg:tg),t&bL||(t&=~(hL|AL));var _=[e,t,n,I,g,C,y,i,p,f],v=r.apply(void 0,_);return mL(e)&&gL(v,_),v.placeholder=a,yL(v,e,t)}ag.exports=SL});var di=u((sW,ng)=>{"use strict";function wL(e){var t=e;return t.placeholder}ng.exports=wL});var sg=u((iW,og)=>{"use strict";var TL=rr(),EL=da(),RL=Math.min;function vL(e,t){for(var r=e.length,a=RL(t.length,r),n=TL(e);a--;){var o=t[a];e[a]=EL(o,r)?n[o]:void 0}return e}og.exports=vL});var Fn=u((uW,ug)=>{"use strict";var ig="__lodash_placeholder__";function _L(e,t){for(var r=-1,a=e.length,n=0,o=[];++r<a;){var s=e[r];(s===t||s===ig)&&(e[r]=ig,o[n++]=r)}return o}ug.exports=_L});var fi=u((pW,lg)=>{"use strict";var xL=oi(),CL=si(),OL=xm(),pg=Ta(),LL=li(),PL=di(),UL=sg(),qL=Fn(),DL=pe(),NL=1,BL=2,ML=8,kL=16,GL=128,FL=512;function cg(e,t,r,a,n,o,s,i,p,f){var m=t&GL,g=t&NL,y=t&BL,I=t&(ML|kL),C=t&FL,_=y?void 0:pg(e);function v(){for(var R=arguments.length,U=Array(R),qe=R;qe--;)U[qe]=arguments[qe];if(I)var Ee=PL(v),ct=OL(U,Ee);if(a&&(U=xL(U,a,n,I)),o&&(U=CL(U,o,s,I)),R-=ct,I&&R<f){var Qt=qL(U,Ee);return LL(e,t,cg,v.placeholder,r,U,Qt,i,p,f-R)}var Ir=g?r:this,Sr=y?Ir[e]:e;return R=U.length,i?U=UL(U,i):C&&R>1&&U.reverse(),m&&p<R&&(U.length=p),this&&this!==DL&&this instanceof v&&(Sr=_||pg(Sr)),Sr.apply(Ir,U)}return v}lg.exports=cg});var fg=u((cW,dg)=>{"use strict";var QL=en(),jL=Ta(),WL=fi(),$L=li(),KL=di(),VL=Fn(),YL=pe();function HL(e,t,r){var a=jL(e);function n(){for(var o=arguments.length,s=Array(o),i=o,p=KL(n);i--;)s[i]=arguments[i];var f=o<3&&s[0]!==p&&s[o-1]!==p?[]:VL(s,p);if(o-=f.length,o<r)return $L(e,t,WL,n.placeholder,void 0,s,f,void 0,void 0,r-o);var m=this&&this!==YL&&this instanceof n?a:e;return QL(m,this,s)}return n}dg.exports=HL});var gg=u((lW,mg)=>{"use strict";var zL=en(),JL=Ta(),XL=pe(),ZL=1;function eP(e,t,r,a){var n=t&ZL,o=JL(e);function s(){for(var i=-1,p=arguments.length,f=-1,m=a.length,g=Array(m+p),y=this&&this!==XL&&this instanceof s?o:e;++f<m;)g[f]=a[f];for(;p--;)g[f++]=arguments[++i];return zL(y,n?r:this,g)}return s}mg.exports=eP});var Sg=u((dW,Ig)=>{"use strict";var tP=oi(),rP=si(),yg=Fn(),hg="__lodash_placeholder__",mi=1,aP=2,nP=4,Ag=8,Ea=128,bg=256,oP=Math.min;function sP(e,t){var r=e[1],a=t[1],n=r|a,o=n<(mi|aP|Ea),s=a==Ea&&r==Ag||a==Ea&&r==bg&&e[7].length<=t[8]||a==(Ea|bg)&&t[7].length<=t[8]&&r==Ag;if(!(o||s))return e;a&mi&&(e[2]=t[2],n|=r&mi?0:nP);var i=t[3];if(i){var p=e[3];e[3]=p?tP(p,i,t[4]):i,e[4]=p?yg(e[3],hg):t[4]}return i=t[5],i&&(p=e[5],e[5]=p?rP(p,i,t[6]):i,e[6]=p?yg(e[5],hg):t[6]),i=t[7],i&&(e[7]=i),a&Ea&&(e[8]=e[8]==null?t[8]:oP(e[8],t[8])),e[9]==null&&(e[9]=t[9]),e[0]=t[0],e[1]=n,e}Ig.exports=sP});var Tg=u((fW,wg)=>{"use strict";var iP=/\s/;function uP(e){for(var t=e.length;t--&&iP.test(e.charAt(t)););return t}wg.exports=uP});var Rg=u((mW,Eg)=>{"use strict";var pP=Tg(),cP=/^\s+/;function lP(e){return e&&e.slice(0,pP(e)+1).replace(cP,"")}Eg.exports=lP});var mr=u((gW,vg)=>{"use strict";var dP=gt(),fP=be(),mP="[object Symbol]";function gP(e){return typeof e=="symbol"||fP(e)&&dP(e)==mP}vg.exports=gP});var Og=u((yW,Cg)=>{"use strict";var yP=Rg(),_g=xe(),hP=mr(),xg=0/0,AP=/^[-+]0x[0-9a-f]+$/i,bP=/^0b[01]+$/i,IP=/^0o[0-7]+$/i,SP=parseInt;function wP(e){if(typeof e=="number")return e;if(hP(e))return xg;if(_g(e)){var t=typeof e.valueOf=="function"?e.valueOf():e;e=_g(t)?t+"":t}if(typeof e!="string")return e===0?e:+e;e=yP(e);var r=bP.test(e);return r||IP.test(e)?SP(e.slice(2),r?2:8):AP.test(e)?xg:+e}Cg.exports=wP});var Ug=u((hW,Pg)=>{"use strict";var TP=Og(),Lg=1/0,EP=17976931348623157e292;function RP(e){if(!e)return e===0?e:0;if(e=TP(e),e===Lg||e===-Lg){var t=e<0?-1:1;return t*EP}return e===e?e:0}Pg.exports=RP});var gi=u((AW,qg)=>{"use strict";var vP=Ug();function _P(e){var t=vP(e),r=t%1;return t===t?r?t-r:t:0}qg.exports=_P});var Qn=u((bW,kg)=>{"use strict";var xP=ni(),CP=Em(),OP=fg(),LP=fi(),PP=gg(),UP=ii(),qP=Sg(),DP=pi(),NP=ci(),Dg=gi(),BP="Expected a function",Ng=1,MP=2,yi=8,hi=16,Ai=32,Bg=64,Mg=Math.max;function kP(e,t,r,a,n,o,s,i){var p=t&MP;if(!p&&typeof e!="function")throw new TypeError(BP);var f=a?a.length:0;if(f||(t&=~(Ai|Bg),a=n=void 0),s=s===void 0?s:Mg(Dg(s),0),i=i===void 0?i:Dg(i),f-=n?n.length:0,t&Bg){var m=a,g=n;a=n=void 0}var y=p?void 0:UP(e),I=[e,t,r,a,n,m,g,o,s,i];if(y&&qP(I,y),e=I[0],t=I[1],r=I[2],a=I[3],n=I[4],i=I[9]=I[9]===void 0?p?0:e.length:Mg(I[9]-f,0),!i&&t&(yi|hi)&&(t&=~(yi|hi)),!t||t==Ng)var C=CP(e,t,r);else t==yi||t==hi?C=OP(e,t,i):(t==Ai||t==(Ng|Ai))&&!n.length?C=PP(e,t,r,a):C=LP.apply(void 0,I);var _=y?xP:DP;return NP(_(C,I),e,t)}kg.exports=kP});var Fg=u((IW,Gg)=>{"use strict";var GP=Qn(),FP=128;function QP(e,t,r){return t=r?void 0:t,t=e&&t==null?e.length:t,GP(e,FP,void 0,void 0,void 0,void 0,t)}Gg.exports=QP});var jg=u((SW,Qg)=>{"use strict";var jP=zo(),WP=jP(Object.keys,Object);Qg.exports=WP});var bi=u((wW,Wg)=>{"use strict";var $P=cn(),KP=jg(),VP=Object.prototype,YP=VP.hasOwnProperty;function HP(e){if(!$P(e))return KP(e);var t=[];for(var r in Object(e))YP.call(e,r)&&r!="constructor"&&t.push(r);return t}Wg.exports=HP});var gr=u((TW,$g)=>{"use strict";var zP=rs(),JP=bi(),XP=Zt();function ZP(e){return XP(e)?zP(e):JP(e)}$g.exports=ZP});var Ii=u((EW,Kg)=>{"use strict";var eU=or(),tU=gr();function rU(e,t){return e&&eU(t,tU(t),e)}Kg.exports=rU});var Yg=u((RW,Vg)=>{"use strict";var aU=or(),nU=sr();function oU(e,t){return e&&aU(t,nU(t),e)}Vg.exports=oU});var zg=u((vW,Hg)=>{"use strict";function sU(e,t){for(var r=-1,a=e==null?0:e.length,n=0,o=[];++r<a;){var s=e[r];t(s,r,e)&&(o[n++]=s)}return o}Hg.exports=sU});var Si=u((_W,Jg)=>{"use strict";function iU(){return[]}Jg.exports=iU});var jn=u((xW,Zg)=>{"use strict";var uU=zg(),pU=Si(),cU=Object.prototype,lU=cU.propertyIsEnumerable,Xg=Object.getOwnPropertySymbols,dU=Xg?function(e){return e==null?[]:(e=Object(e),uU(Xg(e),function(t){return lU.call(e,t)}))}:pU;Zg.exports=dU});var ty=u((CW,ey)=>{"use strict";var fU=or(),mU=jn();function gU(e,t){return fU(e,mU(e),t)}ey.exports=gU});var wi=u((OW,ry)=>{"use strict";var yU=Za(),hU=pn(),AU=jn(),bU=Si(),IU=Object.getOwnPropertySymbols,SU=IU?function(e){for(var t=[];e;)yU(t,AU(e)),e=hU(e);return t}:bU;ry.exports=SU});var ny=u((LW,ay)=>{"use strict";var wU=or(),TU=wi();function EU(e,t){return wU(e,TU(e),t)}ay.exports=EU});var Ti=u((PW,oy)=>{"use strict";var RU=Za(),vU=se();function _U(e,t,r){var a=t(e);return vU(e)?a:RU(a,r(e))}oy.exports=_U});var Ei=u((UW,sy)=>{"use strict";var xU=Ti(),CU=jn(),OU=gr();function LU(e){return xU(e,OU,CU)}sy.exports=LU});var uy=u((qW,iy)=>{"use strict";var PU=Ti(),UU=wi(),qU=sr();function DU(e){return PU(e,qU,UU)}iy.exports=DU});var cy=u((DW,py)=>{"use strict";var NU=yt(),BU=pe(),MU=NU(BU,"DataView");py.exports=MU});var dy=u((NW,ly)=>{"use strict";var kU=yt(),GU=pe(),FU=kU(GU,"Promise");ly.exports=FU});var hr=u((BW,by)=>{"use strict";var Ri=cy(),vi=rn(),_i=dy(),xi=Fo(),Ci=ri(),Ay=gt(),yr=qo(),fy="[object Map]",QU="[object Object]",my="[object Promise]",gy="[object Set]",yy="[object WeakMap]",hy="[object DataView]",jU=yr(Ri),WU=yr(vi),$U=yr(_i),KU=yr(xi),VU=yr(Ci),Nt=Ay;(Ri&&Nt(new Ri(new ArrayBuffer(1)))!=hy||vi&&Nt(new vi)!=fy||_i&&Nt(_i.resolve())!=my||xi&&Nt(new xi)!=gy||Ci&&Nt(new Ci)!=yy)&&(Nt=function(e){var t=Ay(e),r=t==QU?e.constructor:void 0,a=r?yr(r):"";if(a)switch(a){case jU:return hy;case WU:return fy;case $U:return my;case KU:return gy;case VU:return yy}return t});by.exports=Nt});var Sy=u((MW,Iy)=>{"use strict";var YU=Object.prototype,HU=YU.hasOwnProperty;function zU(e){var t=e.length,r=new e.constructor(t);return t&&typeof e[0]=="string"&&HU.call(e,"index")&&(r.index=e.index,r.input=e.input),r}Iy.exports=zU});var Ty=u((kW,wy)=>{"use strict";var JU=un();function XU(e,t){var r=t?JU(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.byteLength)}wy.exports=XU});var Ry=u((GW,Ey)=>{"use strict";var ZU=/\w*$/;function eq(e){var t=new e.constructor(e.source,ZU.exec(e));return t.lastIndex=e.lastIndex,t}Ey.exports=eq});var Oy=u((FW,Cy)=>{"use strict";var vy=xt(),_y=vy?vy.prototype:void 0,xy=_y?_y.valueOf:void 0;function tq(e){return xy?Object(xy.call(e)):{}}Cy.exports=tq});var Py=u((QW,Ly)=>{"use strict";var rq=un(),aq=Ty(),nq=Ry(),oq=Oy(),sq=Ho(),iq="[object Boolean]",uq="[object Date]",pq="[object Map]",cq="[object Number]",lq="[object RegExp]",dq="[object Set]",fq="[object String]",mq="[object Symbol]",gq="[object ArrayBuffer]",yq="[object DataView]",hq="[object Float32Array]",Aq="[object Float64Array]",bq="[object Int8Array]",Iq="[object Int16Array]",Sq="[object Int32Array]",wq="[object Uint8Array]",Tq="[object Uint8ClampedArray]",Eq="[object Uint16Array]",Rq="[object Uint32Array]";function vq(e,t,r){var a=e.constructor;switch(t){case gq:return rq(e);case iq:case uq:return new a(+e);case yq:return aq(e,r);case hq:case Aq:case bq:case Iq:case Sq:case wq:case Tq:case Eq:case Rq:return sq(e,r);case pq:return new a;case cq:case fq:return new a(e);case lq:return nq(e);case dq:return new a;case mq:return oq(e)}}Ly.exports=vq});var qy=u((jW,Uy)=>{"use strict";var _q=hr(),xq=be(),Cq="[object Map]";function Oq(e){return xq(e)&&_q(e)==Cq}Uy.exports=Oq});var My=u((WW,By)=>{"use strict";var Lq=qy(),Pq=ln(),Dy=dn(),Ny=Dy&&Dy.isMap,Uq=Ny?Pq(Ny):Lq;By.exports=Uq});var Gy=u(($W,ky)=>{"use strict";var qq=hr(),Dq=be(),Nq="[object Set]";function Bq(e){return Dq(e)&&qq(e)==Nq}ky.exports=Bq});var Wy=u((KW,jy)=>{"use strict";var Mq=Gy(),kq=ln(),Fy=dn(),Qy=Fy&&Fy.isSet,Gq=Qy?kq(Qy):Mq;jy.exports=Gq});var Oi=u((VW,Yy)=>{"use strict";var Fq=na(),Qq=Gn(),jq=ts(),Wq=Ii(),$q=Yg(),Kq=Vo(),Vq=rr(),Yq=ty(),Hq=ny(),zq=Ei(),Jq=uy(),Xq=hr(),Zq=Sy(),eD=Py(),tD=Jo(),rD=se(),aD=pa(),nD=My(),oD=xe(),sD=Wy(),iD=gr(),uD=sr(),pD=1,cD=2,lD=4,$y="[object Arguments]",dD="[object Array]",fD="[object Boolean]",mD="[object Date]",gD="[object Error]",Ky="[object Function]",yD="[object GeneratorFunction]",hD="[object Map]",AD="[object Number]",Vy="[object Object]",bD="[object RegExp]",ID="[object Set]",SD="[object String]",wD="[object Symbol]",TD="[object WeakMap]",ED="[object ArrayBuffer]",RD="[object DataView]",vD="[object Float32Array]",_D="[object Float64Array]",xD="[object Int8Array]",CD="[object Int16Array]",OD="[object Int32Array]",LD="[object Uint8Array]",PD="[object Uint8ClampedArray]",UD="[object Uint16Array]",qD="[object Uint32Array]",N={};N[$y]=N[dD]=N[ED]=N[RD]=N[fD]=N[mD]=N[vD]=N[_D]=N[xD]=N[CD]=N[OD]=N[hD]=N[AD]=N[Vy]=N[bD]=N[ID]=N[SD]=N[wD]=N[LD]=N[PD]=N[UD]=N[qD]=!0;N[gD]=N[Ky]=N[TD]=!1;function Wn(e,t,r,a,n,o){var s,i=t&pD,p=t&cD,f=t&lD;if(r&&(s=n?r(e,a,n,o):r(e)),s!==void 0)return s;if(!oD(e))return e;var m=rD(e);if(m){if(s=Zq(e),!i)return Vq(e,s)}else{var g=Xq(e),y=g==Ky||g==yD;if(aD(e))return Kq(e,i);if(g==Vy||g==$y||y&&!n){if(s=p||y?{}:tD(e),!i)return p?Hq(e,$q(s,e)):Yq(e,Wq(s,e))}else{if(!N[g])return n?e:{};s=eD(e,g,i)}}o||(o=new Fq);var I=o.get(e);if(I)return I;o.set(e,s),sD(e)?e.forEach(function(v){s.add(Wn(v,t,r,v,e,o))}):nD(e)&&e.forEach(function(v,R){s.set(R,Wn(v,t,r,R,e,o))});var C=f?p?Jq:zq:p?uD:iD,_=m?void 0:C(e);return Qq(_||e,function(v,R){_&&(R=v,v=e[R]),jq(s,R,Wn(v,t,r,R,e,o))}),s}Yy.exports=Wn});var zy=u((YW,Hy)=>{"use strict";var DD=Oi(),ND=4;function BD(e){return DD(e,ND)}Hy.exports=BD});var Xy=u((HW,Jy)=>{"use strict";var MD=Qn(),kD=8;function Li(e,t,r){t=r?void 0:t;var a=MD(e,kD,void 0,void 0,void 0,void 0,void 0,t);return a.placeholder=Li.placeholder,a}Li.placeholder={};Jy.exports=Li});var eh=u((zW,Zy)=>{"use strict";var GD=gt(),FD=be(),QD=Xo(),jD="[object DOMException]",WD="[object Error]";function $D(e){if(!FD(e))return!1;var t=GD(e);return t==WD||t==jD||typeof e.message=="string"&&typeof e.name=="string"&&!QD(e)}Zy.exports=$D});var rh=u((JW,th)=>{"use strict";var KD=hr(),VD=be(),YD="[object WeakMap]";function HD(e){return VD(e)&&KD(e)==YD}th.exports=HD});var nh=u((XW,ah)=>{"use strict";function zD(e,t){for(var r=-1,a=e==null?0:e.length;++r<a;)if(t(e[r],r,e))return!0;return!1}ah.exports=zD});var Pi=u((ZW,oh)=>{"use strict";var JD=Mo(),XD=nh(),ZD=Go(),eN=1,tN=2;function rN(e,t,r,a,n,o){var s=r&eN,i=e.length,p=t.length;if(i!=p&&!(s&&p>i))return!1;var f=o.get(e),m=o.get(t);if(f&&m)return f==t&&m==e;var g=-1,y=!0,I=r&tN?new JD:void 0;for(o.set(e,t),o.set(t,e);++g<i;){var C=e[g],_=t[g];if(a)var v=s?a(_,C,g,t,e,o):a(C,_,g,e,t,o);if(v!==void 0){if(v)continue;y=!1;break}if(I){if(!XD(t,function(R,U){if(!ZD(I,U)&&(C===R||n(C,R,r,a,o)))return I.push(U)})){y=!1;break}}else if(!(C===_||n(C,_,r,a,o))){y=!1;break}}return o.delete(e),o.delete(t),y}oh.exports=rN});var ih=u((e$,sh)=>{"use strict";function aN(e){var t=-1,r=Array(e.size);return e.forEach(function(a,n){r[++t]=[n,a]}),r}sh.exports=aN});var dh=u((t$,lh)=>{"use strict";var uh=xt(),ph=Yo(),nN=zt(),oN=Pi(),sN=ih(),iN=on(),uN=1,pN=2,cN="[object Boolean]",lN="[object Date]",dN="[object Error]",fN="[object Map]",mN="[object Number]",gN="[object RegExp]",yN="[object Set]",hN="[object String]",AN="[object Symbol]",bN="[object ArrayBuffer]",IN="[object DataView]",ch=uh?uh.prototype:void 0,Ui=ch?ch.valueOf:void 0;function SN(e,t,r,a,n,o,s){switch(r){case IN:if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case bN:return!(e.byteLength!=t.byteLength||!o(new ph(e),new ph(t)));case cN:case lN:case mN:return nN(+e,+t);case dN:return e.name==t.name&&e.message==t.message;case gN:case hN:return e==t+"";case fN:var i=sN;case yN:var p=a&uN;if(i||(i=iN),e.size!=t.size&&!p)return!1;var f=s.get(e);if(f)return f==t;a|=pN,s.set(e,t);var m=oN(i(e),i(t),a,n,o,s);return s.delete(e),m;case AN:if(Ui)return Ui.call(e)==Ui.call(t)}return!1}lh.exports=SN});var gh=u((r$,mh)=>{"use strict";var fh=Ei(),wN=1,TN=Object.prototype,EN=TN.hasOwnProperty;function RN(e,t,r,a,n,o){var s=r&wN,i=fh(e),p=i.length,f=fh(t),m=f.length;if(p!=m&&!s)return!1;for(var g=p;g--;){var y=i[g];if(!(s?y in t:EN.call(t,y)))return!1}var I=o.get(e),C=o.get(t);if(I&&C)return I==t&&C==e;var _=!0;o.set(e,t),o.set(t,e);for(var v=s;++g<p;){y=i[g];var R=e[y],U=t[y];if(a)var qe=s?a(U,R,y,t,e,o):a(R,U,y,e,t,o);if(!(qe===void 0?R===U||n(R,U,r,a,o):qe)){_=!1;break}v||(v=y=="constructor")}if(_&&!v){var Ee=e.constructor,ct=t.constructor;Ee!=ct&&"constructor"in e&&"constructor"in t&&!(typeof Ee=="function"&&Ee instanceof Ee&&typeof ct=="function"&&ct instanceof ct)&&(_=!1)}return o.delete(e),o.delete(t),_}mh.exports=RN});var Th=u((a$,wh)=>{"use strict";var qi=na(),vN=Pi(),_N=dh(),xN=gh(),yh=hr(),hh=se(),Ah=pa(),CN=fn(),ON=1,bh="[object Arguments]",Ih="[object Array]",$n="[object Object]",LN=Object.prototype,Sh=LN.hasOwnProperty;function PN(e,t,r,a,n,o){var s=hh(e),i=hh(t),p=s?Ih:yh(e),f=i?Ih:yh(t);p=p==bh?$n:p,f=f==bh?$n:f;var m=p==$n,g=f==$n,y=p==f;if(y&&Ah(e)){if(!Ah(t))return!1;s=!0,m=!1}if(y&&!m)return o||(o=new qi),s||CN(e)?vN(e,t,r,a,n,o):_N(e,t,p,r,a,n,o);if(!(r&ON)){var I=m&&Sh.call(e,"__wrapped__"),C=g&&Sh.call(t,"__wrapped__");if(I||C){var _=I?e.value():e,v=C?t.value():t;return o||(o=new qi),n(_,v,r,a,o)}}return y?(o||(o=new qi),xN(e,t,r,a,n,o)):!1}wh.exports=PN});var Di=u((n$,vh)=>{"use strict";var UN=Th(),Eh=be();function Rh(e,t,r,a,n){return e===t?!0:e==null||t==null||!Eh(e)&&!Eh(t)?e!==e&&t!==t:UN(e,t,r,a,Rh,n)}vh.exports=Rh});var xh=u((o$,_h)=>{"use strict";var qN=na(),DN=Di(),NN=1,BN=2;function MN(e,t,r,a){var n=r.length,o=n,s=!a;if(e==null)return!o;for(e=Object(e);n--;){var i=r[n];if(s&&i[2]?i[1]!==e[i[0]]:!(i[0]in e))return!1}for(;++n<o;){i=r[n];var p=i[0],f=e[p],m=i[1];if(s&&i[2]){if(f===void 0&&!(p in e))return!1}else{var g=new qN;if(a)var y=a(f,m,p,e,t,g);if(!(y===void 0?DN(m,f,NN|BN,a,g):y))return!1}}return!0}_h.exports=MN});var Ni=u((s$,Ch)=>{"use strict";var kN=xe();function GN(e){return e===e&&!kN(e)}Ch.exports=GN});var Lh=u((i$,Oh)=>{"use strict";var FN=Ni(),QN=gr();function jN(e){for(var t=QN(e),r=t.length;r--;){var a=t[r],n=e[a];t[r]=[a,n,FN(n)]}return t}Oh.exports=jN});var Bi=u((u$,Ph)=>{"use strict";function WN(e,t){return function(r){return r==null?!1:r[e]===t&&(t!==void 0||e in Object(r))}}Ph.exports=WN});var qh=u((p$,Uh)=>{"use strict";var $N=xh(),KN=Lh(),VN=Bi();function YN(e){var t=KN(e);return t.length==1&&t[0][2]?VN(t[0][0],t[0][1]):function(r){return r===e||$N(r,e,t)}}Uh.exports=YN});var Kn=u((c$,Dh)=>{"use strict";var HN=se(),zN=mr(),JN=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,XN=/^\w*$/;function ZN(e,t){if(HN(e))return!1;var r=typeof e;return r=="number"||r=="symbol"||r=="boolean"||e==null||zN(e)?!0:XN.test(e)||!JN.test(e)||t!=null&&e in Object(t)}Dh.exports=ZN});var Mh=u((l$,Bh)=>{"use strict";var Nh=an(),eB="Expected a function";function Mi(e,t){if(typeof e!="function"||t!=null&&typeof t!="function")throw new TypeError(eB);var r=function(){var a=arguments,n=t?t.apply(this,a):a[0],o=r.cache;if(o.has(n))return o.get(n);var s=e.apply(this,a);return r.cache=o.set(n,s)||o,s};return r.cache=new(Mi.Cache||Nh),r}Mi.Cache=Nh;Bh.exports=Mi});var Gh=u((d$,kh)=>{"use strict";var tB=Mh(),rB=500;function aB(e){var t=tB(e,function(a){return r.size===rB&&r.clear(),a}),r=t.cache;return t}kh.exports=aB});var ki=u((f$,Fh)=>{"use strict";var nB=Gh(),oB=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,sB=/\\(\\)?/g,iB=nB(function(e){var t=[];return e.charCodeAt(0)===46&&t.push(""),e.replace(oB,function(r,a,n,o){t.push(n?o.replace(sB,"$1"):a||r)}),t});Fh.exports=iB});var Gi=u((m$,Qh)=>{"use strict";function uB(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}Qh.exports=uB});var Yh=u((g$,Vh)=>{"use strict";var jh=xt(),pB=Gi(),cB=se(),lB=mr(),dB=1/0,Wh=jh?jh.prototype:void 0,$h=Wh?Wh.toString:void 0;function Kh(e){if(typeof e=="string")return e;if(cB(e))return pB(e,Kh)+"";if(lB(e))return $h?$h.call(e):"";var t=e+"";return t=="0"&&1/e==-dB?"-0":t}Vh.exports=Kh});var Fi=u((y$,Hh)=>{"use strict";var fB=Yh();function mB(e){return e==null?"":fB(e)}Hh.exports=mB});var Qi=u((h$,zh)=>{"use strict";var gB=se(),yB=Kn(),hB=ki(),AB=Fi();function bB(e,t){return gB(e)?e:yB(e,t)?[e]:hB(AB(e))}zh.exports=bB});var Ar=u((A$,Jh)=>{"use strict";var IB=mr(),SB=1/0;function wB(e){if(typeof e=="string"||IB(e))return e;var t=e+"";return t=="0"&&1/e==-SB?"-0":t}Jh.exports=wB});var ji=u((b$,Xh)=>{"use strict";var TB=Qi(),EB=Ar();function RB(e,t){t=TB(t,e);for(var r=0,a=t.length;e!=null&&r<a;)e=e[EB(t[r++])];return r&&r==a?e:void 0}Xh.exports=RB});var eA=u((I$,Zh)=>{"use strict";var vB=ji();function _B(e,t,r){var a=e==null?void 0:vB(e,t);return a===void 0?r:a}Zh.exports=_B});var rA=u((S$,tA)=>{"use strict";function xB(e,t){return e!=null&&t in Object(e)}tA.exports=xB});var nA=u((w$,aA)=>{"use strict";var CB=Qi(),OB=Jr(),LB=se(),PB=da(),UB=sn(),qB=Ar();function DB(e,t,r){t=CB(t,e);for(var a=-1,n=t.length,o=!1;++a<n;){var s=qB(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&&UB(n)&&PB(s,n)&&(LB(e)||OB(e)))}aA.exports=DB});var sA=u((T$,oA)=>{"use strict";var NB=rA(),BB=nA();function MB(e,t){return e!=null&&BB(e,t,NB)}oA.exports=MB});var uA=u((E$,iA)=>{"use strict";var kB=Di(),GB=eA(),FB=sA(),QB=Kn(),jB=Ni(),WB=Bi(),$B=Ar(),KB=1,VB=2;function YB(e,t){return QB(e)&&jB(t)?WB($B(e),t):function(r){var a=GB(r,e);return a===void 0&&a===t?FB(r,e):kB(t,a,KB|VB)}}iA.exports=YB});var cA=u((R$,pA)=>{"use strict";function HB(e){return function(t){return t?.[e]}}pA.exports=HB});var dA=u((v$,lA)=>{"use strict";var zB=ji();function JB(e){return function(t){return zB(t,e)}}lA.exports=JB});var mA=u((_$,fA)=>{"use strict";var XB=cA(),ZB=dA(),eM=Kn(),tM=Ar();function rM(e){return eM(e)?XB(tM(e)):ZB(e)}fA.exports=rM});var Wi=u((x$,gA)=>{"use strict";var aM=qh(),nM=uA(),oM=Xr(),sM=se(),iM=mA();function uM(e){return typeof e=="function"?e:e==null?oM:typeof e=="object"?sM(e)?nM(e[0],e[1]):aM(e):iM(e)}gA.exports=uM});var hA=u((C$,yA)=>{"use strict";var pM=Oi(),cM=Wi(),lM=1;function dM(e){return cM(typeof e=="function"?e:pM(e,lM))}yA.exports=dM});var bA=u((O$,AA)=>{"use strict";var fM=Lo();function mM(e){var t=e==null?0:e.length;return t?fM(e,1):[]}AA.exports=mM});var SA=u((L$,IA)=>{"use strict";var gM=bA(),yM=Po(),hM=tn();function AM(e){return hM(yM(e,void 0,gM),e+"")}IA.exports=AM});var TA=u((P$,wA)=>{"use strict";var bM=Qn(),IM=SA(),SM=256,wM=IM(function(e,t){return bM(e,SM,void 0,void 0,void 0,t)});wA.exports=wM});var RA=u((U$,EA)=>{"use strict";var TM=Gi(),EM=rr(),RM=se(),vM=mr(),_M=ki(),xM=Ar(),CM=Fi();function OM(e){return RM(e)?TM(e,xM):vM(e)?[e]:EM(_M(CM(e)))}EA.exports=OM});var _A=u((q$,vA)=>{"use strict";vA.exports={ary:Fg(),assign:Ii(),clone:zy(),curry:Xy(),forEach:Gn(),isArray:se(),isError:eh(),isFunction:Zr(),isWeakMap:rh(),iteratee:hA(),keys:bi(),rearg:TA(),toInteger:gi(),toPath:RA()}});var CA=u((D$,xA)=>{"use strict";var LM=ym(),PM=_A();function UM(e,t,r){return LM(PM,e,t,r)}xA.exports=UM});var $i=u((N$,LA)=>{"use strict";var qM=CA(),OA=qM("merge",as());OA.placeholder=Xs();LA.exports=OA});var qb=u((LK,Ub)=>{"use strict";function ek(e,t,r,a){for(var n=-1,o=e==null?0:e.length;++n<o;){var s=e[n];t(a,s,r(s),e)}return a}Ub.exports=ek});var Nb=u((PK,Db)=>{"use strict";var tk=Ko(),rk=gr();function ak(e,t){return e&&tk(e,t,rk)}Db.exports=ak});var Mb=u((UK,Bb)=>{"use strict";var nk=Zt();function ok(e,t){return function(r,a){if(r==null)return r;if(!nk(r))return e(r,a);for(var n=r.length,o=t?n:-1,s=Object(r);(t?o--:++o<n)&&a(s[o],o,s)!==!1;);return r}}Bb.exports=ok});var Gb=u((qK,kb)=>{"use strict";var sk=Nb(),ik=Mb(),uk=ik(sk);kb.exports=uk});var Qb=u((DK,Fb)=>{"use strict";var pk=Gb();function ck(e,t,r,a){return pk(e,function(n,o,s){t(a,n,r(n),s)}),a}Fb.exports=ck});var Wb=u((NK,jb)=>{"use strict";var lk=qb(),dk=Qb(),fk=Wi(),mk=se();function gk(e,t){return function(r,a){var n=mk(r)?lk:dk,o=t?t():{};return n(r,e,fk(a,2),o)}}jb.exports=gk});var Kb=u((BK,$b)=>{"use strict";var yk=oa(),hk=Wb(),Ak=Object.prototype,bk=Ak.hasOwnProperty,Ik=hk(function(e,t,r){bk.call(e,r)?e[r].push(t):yk(e,r,[t])});$b.exports=Ik});var Wk={};w(Wk,{Method:()=>uo,ai:()=>Uu,api:()=>iu,auditLogs:()=>It,automations:()=>Cn,backups:()=>Se,branding:()=>bn,constants:()=>$r,environmentVariables:()=>Je,features:()=>Me,groups:()=>j,init:()=>cm,licensing:()=>Ve,logger:()=>Bt,mappers:()=>Y,middleware:()=>Xi,plugins:()=>On,publicApi:()=>Un,quotas:()=>ze,scimGroups:()=>br,scimUsers:()=>ye,sdk:()=>Vi,users:()=>nt,utils:()=>Yt});module.exports=MI(Wk);var uo=(o=>(o.POST="POST",o.GET="GET",o.PATCH="PATCH",o.DELETE="DELETE",o.PUT="PUT",o))(uo||{});var Vi={};w(Vi,{ai:()=>Is,auditLogs:()=>It,automations:()=>Cn,backups:()=>Se,branding:()=>bn,environmentVariables:()=>Je,features:()=>Me,groups:()=>j,init:()=>cm,licensing:()=>Ve,logger:()=>Bt,plugins:()=>On,publicApi:()=>Un,quotas:()=>ze,scimGroups:()=>br,scimUsers:()=>ye,users:()=>nt,utils:()=>Yt});var bn={};w(bn,{getBrandingConfig:()=>Ox});var Me={};w(Me,{checkBackups:()=>ce,checkFeature:()=>hn,checkFeatures:()=>ms,checkSCIM:()=>As,isAppBuildersEnabled:()=>Pt,isAuditLogsEnabled:()=>An,isBackupsEnabled:()=>gs,isBrandingEnabled:()=>ys,isEnforceableSSO:()=>Tf,isExpandedPublicApiEnabled:()=>rt,isPWAEnabled:()=>Tx,isPkceOidcEnabled:()=>Rx,isRecaptchaEnabled:()=>Ex,isSSOEnforced:()=>vx,isSyncAutomationsEnabled:()=>Sx,isTriggerAutomationRunEnabled:()=>wx,isUserGroupsEnabled:()=>hs,isViewPermissionEnabled:()=>_x,isViewReadonlyColumnsEnabled:()=>xx});var te=require("@budibase/types"),tt=require("@budibase/backend-core");var Ve={};w(Ve,{cache:()=>Ne,client:()=>mt,features:()=>Ja,getFreeLicense:()=>ls,getLicense:()=>ps,getLicenseFromKey:()=>cs,keys:()=>fs,offline:()=>mn,quotas:()=>Xa});var Ne={};w(Ne,{getCachedLicense:()=>Sf,invalidate:()=>wf,refresh:()=>Ct});var Ba=require("@budibase/backend-core"),Tr,kI=async()=>{Tr=await Ba.RedisClient.init(Ba.redis.utils.Databases.LICENSES)},GI=async()=>{Tr&&await Tr.finish()};process.on("exit",async()=>{await GI()});var po=async()=>(Tr||await kI(),Tr);var mt={};w(mt,{activateLicenseKey:()=>vo,getLicense:()=>Kt,getLicenseFromKey:()=>Ro,triggerQuota:()=>RS});var Qu=P(require("node-fetch"));var ju=require("@budibase/backend-core"),co=require("dd-trace"),Wu=require("dd-trace/ext/formats"),lo=class{constructor(t){this.apiCall=t=>async(r="",a={})=>await co.tracer.trace(`api.${t}`,async n=>{n.setTag("url",r);let o={...a.headers};o["Content-Type"]||(o["Content-Type"]="application/json",o.Accept="application/json");let s=o["Content-Type"]==="application/json";ju.logging.correlation.setHeader(o),co.tracer.inject(n,Wu.HTTP_HEADERS,o);let i={method:t,body:s?JSON.stringify(a.body):a.body,headers:o,credentials:"include"};return(0,Qu.default)(`${this.host}${r}`,i)});this.post=this.apiCall("POST");this.get=this.apiCall("GET");this.patch=this.apiCall("PATCH");this.del=this.apiCall("DELETE");this.put=this.apiCall("PUT");this.host=t}},fo=lo;var Ya=require("@budibase/types"),L=require("@budibase/backend-core");var We={};w(We,{bustCache:()=>yo,getCurrentUsageValues:()=>Xu,getQuotaUsage:()=>Et,setAllUsage:()=>Ao,setAppUsageValue:()=>ho,setUsage:()=>Hu,setUsagePerApp:()=>zu,utils:()=>_r});var ue=require("@budibase/types"),fe=require("@budibase/backend-core");var _r={};w(_r,{generateBaseQuotaUsage:()=>ka,generateNewMonthlyQuotas:()=>vr,generateNewQuotaUsage:()=>go,getBreakdownName:()=>Fa,getCurrentMonthString:()=>lt,getQuotaDocId:()=>Rr,setCurrentMonth:()=>Ga,setQuotaReset:()=>mo});var H=require("@budibase/types"),Er=require("@budibase/backend-core"),Ma=require("@budibase/shared-core"),Rr=()=>Er.context.isSelfHostUsingCloud()?`quota_usage_${Er.context.getTenantId()}`:Er.db.StaticDatabases.GLOBAL.docs.usageQuota,$u=()=>{let e=new Date;return new Date(e.getFullYear(),e.getMonth()+1,1).toISOString()},mo=e=>{e.quotaReset=$u()},lt=()=>{let e=new Date,t=e.getMonth()+1,r=e.getFullYear();return`${t}-${r}`},ka=()=>({usageQuota:{[H.StaticQuotaName.APPS]:0,[H.StaticQuotaName.ROWS]:0,[H.StaticQuotaName.PLUGINS]:0,[H.StaticQuotaName.USERS]:0,[H.StaticQuotaName.CREATORS]:0,[H.StaticQuotaName.USER_GROUPS]:0,[H.StaticQuotaName.AI_CUSTOM_CONFIGS]:0,triggers:{}},monthly:{[lt()]:vr()}}),go=()=>{let e={_id:Rr(),quotaReset:$u(),...ka(),apps:{}};return Ga(e),e},vr=()=>({[H.MonthlyQuotaName.QUERIES]:0,[H.MonthlyQuotaName.AUTOMATIONS]:0,[H.MonthlyQuotaName.BUDIBASE_AI_CREDITS]:0,[H.MonthlyQuotaName.ACTIONS]:0,triggers:{}}),Ga=e=>{let t=lt();e.monthly||(e.monthly={}),e.monthly[t]||(e.monthly[t]=vr()),e.monthly.current=e.monthly[t]},Fa=(e,t)=>{if(!(!t||!e))switch(e){case H.MonthlyQuotaName.AUTOMATIONS:return H.BreakdownQuotaName.AUTOMATIONS;case H.MonthlyQuotaName.QUERIES:return(0,Ma.isTableIdOrExternalTableId)(t)?H.BreakdownQuotaName.ROW_QUERIES:(0,Ma.isDatasourceOrDatasourcePlusId)(t)?H.BreakdownQuotaName.DATASOURCE_QUERIES:void 0}};var Ku=fe.Duration.fromSeconds(60).toMs(),{Writethrough:Vu}=fe.cache.writethrough;function QI(e){return delete e.usageLimits,delete e.usageQuota.automationRuns,delete e.usageQuota.emails,delete e.usageQuota.storage,delete e.usageQuota.views,delete e.usageQuota.publishedApps,delete e.usageQuota.developers,e}var Qa=()=>fe.tenancy.isSelfHostUsingCloud()?new Vu(fe.tenancy.getSelfHostCloudDB(),Ku):new Vu(fe.tenancy.getGlobalDB(),Ku);async function yo(e=0){let r=Qa(),a=Rr(),n=await r.tryGet(a);n&&n._rev&&await r.remove(a,n._rev).catch(async o=>{if(e<1)return await yo(e+1);throw o})}var Et=async()=>{let e=Qa(),t=await e.tryGet(Rr());if(!t){t=go();let{rev:r}=await e.put(t);t._rev=r}return Ga(t),mo(t),QI(t)},Hu=async(e,t,r)=>Ao({name:t,type:r,values:{total:e}}),zu=async(e,t,r)=>{let a=Qa(),n=await Et(),o=Object.values(e).reduce((i,p)=>i+p,0);for(let[i,p]of Object.entries(e))n=Ju(n,t,r,{total:o,app:p},{appId:i});let s=await a.put(n);return n._rev=s.rev,n},jI=(e,t,r,a)=>{let n=Fa(t,r);if(!n||!a?.breakdown)return e;e.breakdown||(e.breakdown={}),e.breakdown[n]||(e.breakdown[n]={parent:t,values:{}});let o=e.breakdown[n];return o.values[r]=a.breakdown,e},ho=(e,t,r,a={},n)=>{let o;try{o=fe.db.getProdAppID(a?.appId||fe.context.getAppId())}catch{}if(!o||!n.app||!ue.APP_QUOTA_NAMES.includes(t))return e;e.apps?.[o]||(e.apps={...e.apps,[o]:ka()});let s=e.apps[o];switch(r){case ue.QuotaUsageType.STATIC:s.usageQuota[t]=n.app;break;case ue.QuotaUsageType.MONTHLY:{let i=lt(),p=t,f=s.monthly[i];f||(s.monthly[i]=vr(),f=s.monthly[i]),f[p]=n.app,ue.BREAKDOWN_QUOTA_NAMES.includes(p)&&a?.id&&(f=jI(f,p,a.id,n));break}}return e},Yu=(e,t,r,a)=>{if(!ue.APP_QUOTA_NAMES.includes(r))return{};let n;try{n=fe.db.getProdAppID(fe.context.getAppId())}catch{}if(!n||!e.apps||!e.apps[n])return{app:0};let o=e.apps[n];switch(t){case ue.QuotaUsageType.STATIC:if(o.usageQuota?.[r])return{app:o.usageQuota[r]};break;case ue.QuotaUsageType.MONTHLY:{let s=lt(),i=r;if(!o.monthly?.[s]?.[i])break;let p=o.monthly[s],f=p[i],m,g=Fa(i,a);return g&&a&&p.breakdown?.[g]&&(m=p.breakdown[g]?.values[a]),{app:f,breakdown:m||0}}}return{app:0}},WI=(e,t,r)=>{t.usageQuota.triggers||(t.usageQuota.triggers={}),r&&(t.usageQuota.triggers[e]=r)},$I=(e,t,r,a)=>{r.monthly[t].triggers||(r.monthly[t].triggers={}),a&&(r.monthly[t].triggers[e]=a)},Ju=(e,t,r,a,n={})=>{if(r===ue.QuotaUsageType.STATIC)t=t,e.usageQuota[t]=a.total,WI(t,e,a.triggers);else if(r===ue.QuotaUsageType.MONTHLY){t=t;let o=lt();e.monthly[o][t]=a.total,$I(t,o,e,a.triggers)}else throw new Error(`Invalid usage type: ${r}`);return ho(e,t,r,n,a)},Ao=async e=>{let t=Array.isArray(e)?e:[e],r=Qa(),a=await Et();for(let o of t)a=Ju(a,o.name,o.type,o.values,o.opts);let n=await r.put(a,0);return a._rev=n.rev,a},Xu=async(e,t,r)=>{let a=await Et(),n=0,o={};switch(e){case ue.QuotaUsageType.STATIC:if(a.usageQuota[t]){let s=t;n=a.usageQuota[s],o=Yu(a,e,t,r)}break;case ue.QuotaUsageType.MONTHLY:{let s=lt(),i=t;a.monthly[s][i]&&(n=a.monthly[s][i],o=Yu(a,e,t,r));break}default:throw new Error(`Invalid usage type: ${e}`)}return ue.APP_QUOTA_NAMES.includes(t)&&!(o.app||o.breakdown)&&(o.app=o.app||0,o.breakdown=o.breakdown||0),{total:n,app:o.app,breakdown:o.breakdown}};var ve={};w(ve,{destroy:()=>YI,get:()=>bo,save:()=>VI});var dt=require("@budibase/backend-core"),KI=()=>({_id:dt.StaticDatabases.GLOBAL.docs.licenseInfo}),VI=async e=>{let t=await bo();t={...t,...e};let a=await dt.tenancy.getGlobalDB().put(t);return t._rev=a.rev,t},bo=async()=>{let e=dt.tenancy.getGlobalDB();try{return await e.get(dt.StaticDatabases.GLOBAL.docs.licenseInfo)}catch(t){if(t.status===404)return KI();throw t}},YI=async()=>{let e=dt.tenancy.getGlobalDB(),t=await bo();t&&t._rev&&await e.remove(dt.StaticDatabases.GLOBAL.docs.licenseInfo,t._rev)};var M={};w(M,{bulkSave:()=>sS,destroy:()=>iS,fetch:()=>rS,generateUserGroupID:()=>eS,get:()=>aS,getBulk:()=>nS,getByName:()=>Io,getGroupUsers:()=>Wa,getGroupUsersParams:()=>ap,getUserGroupsParams:()=>rp,save:()=>oS});var q=require("@budibase/backend-core");var De=require("@budibase/types"),jt=require("@budibase/backend-core");async function Zu(){let e=jt.sql.designDoc.base("type");e.sql.tables={[De.AUDIT_LOG_TYPE]:{fields:{appId:De.SQLiteType.TEXT,event:De.SQLiteType.TEXT,userId:De.SQLiteType.TEXT,timestamp:De.SQLiteType.TEXT,metadata:De.SQLiteType.TEXT,name:De.SQLiteType.TEXT,type:De.SQLiteType.TEXT,fallback:De.SQLiteType.TEXT}}};let t=jt.context.getAuditLogsDB(),r;try{r=await t.get(jt.SQLITE_DESIGN_DOC_ID),r={...r,...e}}catch(a){if(a.status===404)r=e;else throw a}await t.put(r)}var ja=require("@budibase/backend-core"),{ViewName:HI,SEPARATOR:zI,DocumentType:JI,createView:XI}=ja.db,ZI=JI.USER+zI;async function ep(){let e=ja.tenancy.getGlobalDB(),t=`function(doc) {
4
- if (doc._id.startsWith("${ZI}") && Array.isArray(doc.userGroups)) {
3
+ `)}Hm.exports=HO});var Gn=u((aW,Jm)=>{"use strict";function zO(e,t){for(var r=-1,a=e==null?0:e.length;++r<a&&t(e[r],r,e)!==!1;);return e}Jm.exports=zO});var Zm=u((nW,Xm)=>{"use strict";var JO=Gn(),XO=ko(),ZO=1,eL=2,tL=8,rL=16,aL=32,nL=64,oL=128,sL=256,iL=512,uL=[["ary",oL],["bind",ZO],["bindKey",eL],["curry",tL],["curryRight",rL],["flip",iL],["partial",aL],["partialRight",nL],["rearg",sL]];function pL(e,t){return JO(uL,function(r){var a="_."+r[0];t&r[1]&&!XO(e,a)&&e.push(a)}),e.sort()}Xm.exports=pL});var ci=u((oW,eg)=>{"use strict";var cL=Ym(),lL=zm(),dL=tn(),fL=Zm();function mL(e,t,r){var a=t+"";return dL(e,lL(a,fL(cL(a),r)))}eg.exports=mL});var li=u((sW,ag)=>{"use strict";var gL=$m(),yL=pi(),hL=ci(),AL=1,bL=2,IL=4,SL=8,tg=32,rg=64;function wL(e,t,r,a,n,o,s,i,p,f){var m=t&SL,g=m?s:void 0,y=m?void 0:s,I=m?o:void 0,C=m?void 0:o;t|=m?tg:rg,t&=~(m?rg:tg),t&IL||(t&=~(AL|bL));var _=[e,t,n,I,g,C,y,i,p,f],v=r.apply(void 0,_);return gL(e)&&yL(v,_),v.placeholder=a,hL(v,e,t)}ag.exports=wL});var di=u((iW,ng)=>{"use strict";function TL(e){var t=e;return t.placeholder}ng.exports=TL});var sg=u((uW,og)=>{"use strict";var EL=rr(),RL=da(),vL=Math.min;function _L(e,t){for(var r=e.length,a=vL(t.length,r),n=EL(e);a--;){var o=t[a];e[a]=RL(o,r)?n[o]:void 0}return e}og.exports=_L});var Fn=u((pW,ug)=>{"use strict";var ig="__lodash_placeholder__";function xL(e,t){for(var r=-1,a=e.length,n=0,o=[];++r<a;){var s=e[r];(s===t||s===ig)&&(e[r]=ig,o[n++]=r)}return o}ug.exports=xL});var fi=u((cW,lg)=>{"use strict";var CL=oi(),OL=si(),LL=xm(),pg=Ta(),PL=li(),UL=di(),qL=sg(),DL=Fn(),NL=pe(),BL=1,ML=2,kL=8,GL=16,FL=128,jL=512;function cg(e,t,r,a,n,o,s,i,p,f){var m=t&FL,g=t&BL,y=t&ML,I=t&(kL|GL),C=t&jL,_=y?void 0:pg(e);function v(){for(var R=arguments.length,U=Array(R),qe=R;qe--;)U[qe]=arguments[qe];if(I)var Ee=UL(v),ct=LL(U,Ee);if(a&&(U=CL(U,a,n,I)),o&&(U=OL(U,o,s,I)),R-=ct,I&&R<f){var jt=DL(U,Ee);return PL(e,t,cg,v.placeholder,r,U,jt,i,p,f-R)}var Ir=g?r:this,Sr=y?Ir[e]:e;return R=U.length,i?U=qL(U,i):C&&R>1&&U.reverse(),m&&p<R&&(U.length=p),this&&this!==NL&&this instanceof v&&(Sr=_||pg(Sr)),Sr.apply(Ir,U)}return v}lg.exports=cg});var fg=u((lW,dg)=>{"use strict";var QL=en(),WL=Ta(),$L=fi(),KL=li(),VL=di(),YL=Fn(),HL=pe();function zL(e,t,r){var a=WL(e);function n(){for(var o=arguments.length,s=Array(o),i=o,p=VL(n);i--;)s[i]=arguments[i];var f=o<3&&s[0]!==p&&s[o-1]!==p?[]:YL(s,p);if(o-=f.length,o<r)return KL(e,t,$L,n.placeholder,void 0,s,f,void 0,void 0,r-o);var m=this&&this!==HL&&this instanceof n?a:e;return QL(m,this,s)}return n}dg.exports=zL});var gg=u((dW,mg)=>{"use strict";var JL=en(),XL=Ta(),ZL=pe(),eP=1;function tP(e,t,r,a){var n=t&eP,o=XL(e);function s(){for(var i=-1,p=arguments.length,f=-1,m=a.length,g=Array(m+p),y=this&&this!==ZL&&this instanceof s?o:e;++f<m;)g[f]=a[f];for(;p--;)g[f++]=arguments[++i];return JL(y,n?r:this,g)}return s}mg.exports=tP});var Sg=u((fW,Ig)=>{"use strict";var rP=oi(),aP=si(),yg=Fn(),hg="__lodash_placeholder__",mi=1,nP=2,oP=4,Ag=8,Ea=128,bg=256,sP=Math.min;function iP(e,t){var r=e[1],a=t[1],n=r|a,o=n<(mi|nP|Ea),s=a==Ea&&r==Ag||a==Ea&&r==bg&&e[7].length<=t[8]||a==(Ea|bg)&&t[7].length<=t[8]&&r==Ag;if(!(o||s))return e;a&mi&&(e[2]=t[2],n|=r&mi?0:oP);var i=t[3];if(i){var p=e[3];e[3]=p?rP(p,i,t[4]):i,e[4]=p?yg(e[3],hg):t[4]}return i=t[5],i&&(p=e[5],e[5]=p?aP(p,i,t[6]):i,e[6]=p?yg(e[5],hg):t[6]),i=t[7],i&&(e[7]=i),a&Ea&&(e[8]=e[8]==null?t[8]:sP(e[8],t[8])),e[9]==null&&(e[9]=t[9]),e[0]=t[0],e[1]=n,e}Ig.exports=iP});var Tg=u((mW,wg)=>{"use strict";var uP=/\s/;function pP(e){for(var t=e.length;t--&&uP.test(e.charAt(t)););return t}wg.exports=pP});var Rg=u((gW,Eg)=>{"use strict";var cP=Tg(),lP=/^\s+/;function dP(e){return e&&e.slice(0,cP(e)+1).replace(lP,"")}Eg.exports=dP});var mr=u((yW,vg)=>{"use strict";var fP=gt(),mP=be(),gP="[object Symbol]";function yP(e){return typeof e=="symbol"||mP(e)&&fP(e)==gP}vg.exports=yP});var Og=u((hW,Cg)=>{"use strict";var hP=Rg(),_g=xe(),AP=mr(),xg=0/0,bP=/^[-+]0x[0-9a-f]+$/i,IP=/^0b[01]+$/i,SP=/^0o[0-7]+$/i,wP=parseInt;function TP(e){if(typeof e=="number")return e;if(AP(e))return xg;if(_g(e)){var t=typeof e.valueOf=="function"?e.valueOf():e;e=_g(t)?t+"":t}if(typeof e!="string")return e===0?e:+e;e=hP(e);var r=IP.test(e);return r||SP.test(e)?wP(e.slice(2),r?2:8):bP.test(e)?xg:+e}Cg.exports=TP});var Ug=u((AW,Pg)=>{"use strict";var EP=Og(),Lg=1/0,RP=17976931348623157e292;function vP(e){if(!e)return e===0?e:0;if(e=EP(e),e===Lg||e===-Lg){var t=e<0?-1:1;return t*RP}return e===e?e:0}Pg.exports=vP});var gi=u((bW,qg)=>{"use strict";var _P=Ug();function xP(e){var t=_P(e),r=t%1;return t===t?r?t-r:t:0}qg.exports=xP});var jn=u((IW,kg)=>{"use strict";var CP=ni(),OP=Em(),LP=fg(),PP=fi(),UP=gg(),qP=ii(),DP=Sg(),NP=pi(),BP=ci(),Dg=gi(),MP="Expected a function",Ng=1,kP=2,yi=8,hi=16,Ai=32,Bg=64,Mg=Math.max;function GP(e,t,r,a,n,o,s,i){var p=t&kP;if(!p&&typeof e!="function")throw new TypeError(MP);var f=a?a.length:0;if(f||(t&=~(Ai|Bg),a=n=void 0),s=s===void 0?s:Mg(Dg(s),0),i=i===void 0?i:Dg(i),f-=n?n.length:0,t&Bg){var m=a,g=n;a=n=void 0}var y=p?void 0:qP(e),I=[e,t,r,a,n,m,g,o,s,i];if(y&&DP(I,y),e=I[0],t=I[1],r=I[2],a=I[3],n=I[4],i=I[9]=I[9]===void 0?p?0:e.length:Mg(I[9]-f,0),!i&&t&(yi|hi)&&(t&=~(yi|hi)),!t||t==Ng)var C=OP(e,t,r);else t==yi||t==hi?C=LP(e,t,i):(t==Ai||t==(Ng|Ai))&&!n.length?C=UP(e,t,r,a):C=PP.apply(void 0,I);var _=y?CP:NP;return BP(_(C,I),e,t)}kg.exports=GP});var Fg=u((SW,Gg)=>{"use strict";var FP=jn(),jP=128;function QP(e,t,r){return t=r?void 0:t,t=e&&t==null?e.length:t,FP(e,jP,void 0,void 0,void 0,void 0,t)}Gg.exports=QP});var Qg=u((wW,jg)=>{"use strict";var WP=zo(),$P=WP(Object.keys,Object);jg.exports=$P});var bi=u((TW,Wg)=>{"use strict";var KP=cn(),VP=Qg(),YP=Object.prototype,HP=YP.hasOwnProperty;function zP(e){if(!KP(e))return VP(e);var t=[];for(var r in Object(e))HP.call(e,r)&&r!="constructor"&&t.push(r);return t}Wg.exports=zP});var gr=u((EW,$g)=>{"use strict";var JP=rs(),XP=bi(),ZP=Zt();function eU(e){return ZP(e)?JP(e):XP(e)}$g.exports=eU});var Ii=u((RW,Kg)=>{"use strict";var tU=or(),rU=gr();function aU(e,t){return e&&tU(t,rU(t),e)}Kg.exports=aU});var Yg=u((vW,Vg)=>{"use strict";var nU=or(),oU=sr();function sU(e,t){return e&&nU(t,oU(t),e)}Vg.exports=sU});var zg=u((_W,Hg)=>{"use strict";function iU(e,t){for(var r=-1,a=e==null?0:e.length,n=0,o=[];++r<a;){var s=e[r];t(s,r,e)&&(o[n++]=s)}return o}Hg.exports=iU});var Si=u((xW,Jg)=>{"use strict";function uU(){return[]}Jg.exports=uU});var Qn=u((CW,Zg)=>{"use strict";var pU=zg(),cU=Si(),lU=Object.prototype,dU=lU.propertyIsEnumerable,Xg=Object.getOwnPropertySymbols,fU=Xg?function(e){return e==null?[]:(e=Object(e),pU(Xg(e),function(t){return dU.call(e,t)}))}:cU;Zg.exports=fU});var ty=u((OW,ey)=>{"use strict";var mU=or(),gU=Qn();function yU(e,t){return mU(e,gU(e),t)}ey.exports=yU});var wi=u((LW,ry)=>{"use strict";var hU=Za(),AU=pn(),bU=Qn(),IU=Si(),SU=Object.getOwnPropertySymbols,wU=SU?function(e){for(var t=[];e;)hU(t,bU(e)),e=AU(e);return t}:IU;ry.exports=wU});var ny=u((PW,ay)=>{"use strict";var TU=or(),EU=wi();function RU(e,t){return TU(e,EU(e),t)}ay.exports=RU});var Ti=u((UW,oy)=>{"use strict";var vU=Za(),_U=se();function xU(e,t,r){var a=t(e);return _U(e)?a:vU(a,r(e))}oy.exports=xU});var Ei=u((qW,sy)=>{"use strict";var CU=Ti(),OU=Qn(),LU=gr();function PU(e){return CU(e,LU,OU)}sy.exports=PU});var uy=u((DW,iy)=>{"use strict";var UU=Ti(),qU=wi(),DU=sr();function NU(e){return UU(e,DU,qU)}iy.exports=NU});var cy=u((NW,py)=>{"use strict";var BU=yt(),MU=pe(),kU=BU(MU,"DataView");py.exports=kU});var dy=u((BW,ly)=>{"use strict";var GU=yt(),FU=pe(),jU=GU(FU,"Promise");ly.exports=jU});var hr=u((MW,by)=>{"use strict";var Ri=cy(),vi=rn(),_i=dy(),xi=Fo(),Ci=ri(),Ay=gt(),yr=qo(),fy="[object Map]",QU="[object Object]",my="[object Promise]",gy="[object Set]",yy="[object WeakMap]",hy="[object DataView]",WU=yr(Ri),$U=yr(vi),KU=yr(_i),VU=yr(xi),YU=yr(Ci),Nt=Ay;(Ri&&Nt(new Ri(new ArrayBuffer(1)))!=hy||vi&&Nt(new vi)!=fy||_i&&Nt(_i.resolve())!=my||xi&&Nt(new xi)!=gy||Ci&&Nt(new Ci)!=yy)&&(Nt=function(e){var t=Ay(e),r=t==QU?e.constructor:void 0,a=r?yr(r):"";if(a)switch(a){case WU:return hy;case $U:return fy;case KU:return my;case VU:return gy;case YU:return yy}return t});by.exports=Nt});var Sy=u((kW,Iy)=>{"use strict";var HU=Object.prototype,zU=HU.hasOwnProperty;function JU(e){var t=e.length,r=new e.constructor(t);return t&&typeof e[0]=="string"&&zU.call(e,"index")&&(r.index=e.index,r.input=e.input),r}Iy.exports=JU});var Ty=u((GW,wy)=>{"use strict";var XU=un();function ZU(e,t){var r=t?XU(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.byteLength)}wy.exports=ZU});var Ry=u((FW,Ey)=>{"use strict";var eq=/\w*$/;function tq(e){var t=new e.constructor(e.source,eq.exec(e));return t.lastIndex=e.lastIndex,t}Ey.exports=tq});var Oy=u((jW,Cy)=>{"use strict";var vy=xt(),_y=vy?vy.prototype:void 0,xy=_y?_y.valueOf:void 0;function rq(e){return xy?Object(xy.call(e)):{}}Cy.exports=rq});var Py=u((QW,Ly)=>{"use strict";var aq=un(),nq=Ty(),oq=Ry(),sq=Oy(),iq=Ho(),uq="[object Boolean]",pq="[object Date]",cq="[object Map]",lq="[object Number]",dq="[object RegExp]",fq="[object Set]",mq="[object String]",gq="[object Symbol]",yq="[object ArrayBuffer]",hq="[object DataView]",Aq="[object Float32Array]",bq="[object Float64Array]",Iq="[object Int8Array]",Sq="[object Int16Array]",wq="[object Int32Array]",Tq="[object Uint8Array]",Eq="[object Uint8ClampedArray]",Rq="[object Uint16Array]",vq="[object Uint32Array]";function _q(e,t,r){var a=e.constructor;switch(t){case yq:return aq(e);case uq:case pq:return new a(+e);case hq:return nq(e,r);case Aq:case bq:case Iq:case Sq:case wq:case Tq:case Eq:case Rq:case vq:return iq(e,r);case cq:return new a;case lq:case mq:return new a(e);case dq:return oq(e);case fq:return new a;case gq:return sq(e)}}Ly.exports=_q});var qy=u((WW,Uy)=>{"use strict";var xq=hr(),Cq=be(),Oq="[object Map]";function Lq(e){return Cq(e)&&xq(e)==Oq}Uy.exports=Lq});var My=u(($W,By)=>{"use strict";var Pq=qy(),Uq=ln(),Dy=dn(),Ny=Dy&&Dy.isMap,qq=Ny?Uq(Ny):Pq;By.exports=qq});var Gy=u((KW,ky)=>{"use strict";var Dq=hr(),Nq=be(),Bq="[object Set]";function Mq(e){return Nq(e)&&Dq(e)==Bq}ky.exports=Mq});var Wy=u((VW,Qy)=>{"use strict";var kq=Gy(),Gq=ln(),Fy=dn(),jy=Fy&&Fy.isSet,Fq=jy?Gq(jy):kq;Qy.exports=Fq});var Oi=u((YW,Yy)=>{"use strict";var jq=na(),Qq=Gn(),Wq=ts(),$q=Ii(),Kq=Yg(),Vq=Vo(),Yq=rr(),Hq=ty(),zq=ny(),Jq=Ei(),Xq=uy(),Zq=hr(),eD=Sy(),tD=Py(),rD=Jo(),aD=se(),nD=pa(),oD=My(),sD=xe(),iD=Wy(),uD=gr(),pD=sr(),cD=1,lD=2,dD=4,$y="[object Arguments]",fD="[object Array]",mD="[object Boolean]",gD="[object Date]",yD="[object Error]",Ky="[object Function]",hD="[object GeneratorFunction]",AD="[object Map]",bD="[object Number]",Vy="[object Object]",ID="[object RegExp]",SD="[object Set]",wD="[object String]",TD="[object Symbol]",ED="[object WeakMap]",RD="[object ArrayBuffer]",vD="[object DataView]",_D="[object Float32Array]",xD="[object Float64Array]",CD="[object Int8Array]",OD="[object Int16Array]",LD="[object Int32Array]",PD="[object Uint8Array]",UD="[object Uint8ClampedArray]",qD="[object Uint16Array]",DD="[object Uint32Array]",N={};N[$y]=N[fD]=N[RD]=N[vD]=N[mD]=N[gD]=N[_D]=N[xD]=N[CD]=N[OD]=N[LD]=N[AD]=N[bD]=N[Vy]=N[ID]=N[SD]=N[wD]=N[TD]=N[PD]=N[UD]=N[qD]=N[DD]=!0;N[yD]=N[Ky]=N[ED]=!1;function Wn(e,t,r,a,n,o){var s,i=t&cD,p=t&lD,f=t&dD;if(r&&(s=n?r(e,a,n,o):r(e)),s!==void 0)return s;if(!sD(e))return e;var m=aD(e);if(m){if(s=eD(e),!i)return Yq(e,s)}else{var g=Zq(e),y=g==Ky||g==hD;if(nD(e))return Vq(e,i);if(g==Vy||g==$y||y&&!n){if(s=p||y?{}:rD(e),!i)return p?zq(e,Kq(s,e)):Hq(e,$q(s,e))}else{if(!N[g])return n?e:{};s=tD(e,g,i)}}o||(o=new jq);var I=o.get(e);if(I)return I;o.set(e,s),iD(e)?e.forEach(function(v){s.add(Wn(v,t,r,v,e,o))}):oD(e)&&e.forEach(function(v,R){s.set(R,Wn(v,t,r,R,e,o))});var C=f?p?Xq:Jq:p?pD:uD,_=m?void 0:C(e);return Qq(_||e,function(v,R){_&&(R=v,v=e[R]),Wq(s,R,Wn(v,t,r,R,e,o))}),s}Yy.exports=Wn});var zy=u((HW,Hy)=>{"use strict";var ND=Oi(),BD=4;function MD(e){return ND(e,BD)}Hy.exports=MD});var Xy=u((zW,Jy)=>{"use strict";var kD=jn(),GD=8;function Li(e,t,r){t=r?void 0:t;var a=kD(e,GD,void 0,void 0,void 0,void 0,void 0,t);return a.placeholder=Li.placeholder,a}Li.placeholder={};Jy.exports=Li});var eh=u((JW,Zy)=>{"use strict";var FD=gt(),jD=be(),QD=Xo(),WD="[object DOMException]",$D="[object Error]";function KD(e){if(!jD(e))return!1;var t=FD(e);return t==$D||t==WD||typeof e.message=="string"&&typeof e.name=="string"&&!QD(e)}Zy.exports=KD});var rh=u((XW,th)=>{"use strict";var VD=hr(),YD=be(),HD="[object WeakMap]";function zD(e){return YD(e)&&VD(e)==HD}th.exports=zD});var nh=u((ZW,ah)=>{"use strict";function JD(e,t){for(var r=-1,a=e==null?0:e.length;++r<a;)if(t(e[r],r,e))return!0;return!1}ah.exports=JD});var Pi=u((e$,oh)=>{"use strict";var XD=Mo(),ZD=nh(),eN=Go(),tN=1,rN=2;function aN(e,t,r,a,n,o){var s=r&tN,i=e.length,p=t.length;if(i!=p&&!(s&&p>i))return!1;var f=o.get(e),m=o.get(t);if(f&&m)return f==t&&m==e;var g=-1,y=!0,I=r&rN?new XD:void 0;for(o.set(e,t),o.set(t,e);++g<i;){var C=e[g],_=t[g];if(a)var v=s?a(_,C,g,t,e,o):a(C,_,g,e,t,o);if(v!==void 0){if(v)continue;y=!1;break}if(I){if(!ZD(t,function(R,U){if(!eN(I,U)&&(C===R||n(C,R,r,a,o)))return I.push(U)})){y=!1;break}}else if(!(C===_||n(C,_,r,a,o))){y=!1;break}}return o.delete(e),o.delete(t),y}oh.exports=aN});var ih=u((t$,sh)=>{"use strict";function nN(e){var t=-1,r=Array(e.size);return e.forEach(function(a,n){r[++t]=[n,a]}),r}sh.exports=nN});var dh=u((r$,lh)=>{"use strict";var uh=xt(),ph=Yo(),oN=zt(),sN=Pi(),iN=ih(),uN=on(),pN=1,cN=2,lN="[object Boolean]",dN="[object Date]",fN="[object Error]",mN="[object Map]",gN="[object Number]",yN="[object RegExp]",hN="[object Set]",AN="[object String]",bN="[object Symbol]",IN="[object ArrayBuffer]",SN="[object DataView]",ch=uh?uh.prototype:void 0,Ui=ch?ch.valueOf:void 0;function wN(e,t,r,a,n,o,s){switch(r){case SN:if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case IN:return!(e.byteLength!=t.byteLength||!o(new ph(e),new ph(t)));case lN:case dN:case gN:return oN(+e,+t);case fN:return e.name==t.name&&e.message==t.message;case yN:case AN:return e==t+"";case mN:var i=iN;case hN:var p=a&pN;if(i||(i=uN),e.size!=t.size&&!p)return!1;var f=s.get(e);if(f)return f==t;a|=cN,s.set(e,t);var m=sN(i(e),i(t),a,n,o,s);return s.delete(e),m;case bN:if(Ui)return Ui.call(e)==Ui.call(t)}return!1}lh.exports=wN});var gh=u((a$,mh)=>{"use strict";var fh=Ei(),TN=1,EN=Object.prototype,RN=EN.hasOwnProperty;function vN(e,t,r,a,n,o){var s=r&TN,i=fh(e),p=i.length,f=fh(t),m=f.length;if(p!=m&&!s)return!1;for(var g=p;g--;){var y=i[g];if(!(s?y in t:RN.call(t,y)))return!1}var I=o.get(e),C=o.get(t);if(I&&C)return I==t&&C==e;var _=!0;o.set(e,t),o.set(t,e);for(var v=s;++g<p;){y=i[g];var R=e[y],U=t[y];if(a)var qe=s?a(U,R,y,t,e,o):a(R,U,y,e,t,o);if(!(qe===void 0?R===U||n(R,U,r,a,o):qe)){_=!1;break}v||(v=y=="constructor")}if(_&&!v){var Ee=e.constructor,ct=t.constructor;Ee!=ct&&"constructor"in e&&"constructor"in t&&!(typeof Ee=="function"&&Ee instanceof Ee&&typeof ct=="function"&&ct instanceof ct)&&(_=!1)}return o.delete(e),o.delete(t),_}mh.exports=vN});var Th=u((n$,wh)=>{"use strict";var qi=na(),_N=Pi(),xN=dh(),CN=gh(),yh=hr(),hh=se(),Ah=pa(),ON=fn(),LN=1,bh="[object Arguments]",Ih="[object Array]",$n="[object Object]",PN=Object.prototype,Sh=PN.hasOwnProperty;function UN(e,t,r,a,n,o){var s=hh(e),i=hh(t),p=s?Ih:yh(e),f=i?Ih:yh(t);p=p==bh?$n:p,f=f==bh?$n:f;var m=p==$n,g=f==$n,y=p==f;if(y&&Ah(e)){if(!Ah(t))return!1;s=!0,m=!1}if(y&&!m)return o||(o=new qi),s||ON(e)?_N(e,t,r,a,n,o):xN(e,t,p,r,a,n,o);if(!(r&LN)){var I=m&&Sh.call(e,"__wrapped__"),C=g&&Sh.call(t,"__wrapped__");if(I||C){var _=I?e.value():e,v=C?t.value():t;return o||(o=new qi),n(_,v,r,a,o)}}return y?(o||(o=new qi),CN(e,t,r,a,n,o)):!1}wh.exports=UN});var Di=u((o$,vh)=>{"use strict";var qN=Th(),Eh=be();function Rh(e,t,r,a,n){return e===t?!0:e==null||t==null||!Eh(e)&&!Eh(t)?e!==e&&t!==t:qN(e,t,r,a,Rh,n)}vh.exports=Rh});var xh=u((s$,_h)=>{"use strict";var DN=na(),NN=Di(),BN=1,MN=2;function kN(e,t,r,a){var n=r.length,o=n,s=!a;if(e==null)return!o;for(e=Object(e);n--;){var i=r[n];if(s&&i[2]?i[1]!==e[i[0]]:!(i[0]in e))return!1}for(;++n<o;){i=r[n];var p=i[0],f=e[p],m=i[1];if(s&&i[2]){if(f===void 0&&!(p in e))return!1}else{var g=new DN;if(a)var y=a(f,m,p,e,t,g);if(!(y===void 0?NN(m,f,BN|MN,a,g):y))return!1}}return!0}_h.exports=kN});var Ni=u((i$,Ch)=>{"use strict";var GN=xe();function FN(e){return e===e&&!GN(e)}Ch.exports=FN});var Lh=u((u$,Oh)=>{"use strict";var jN=Ni(),QN=gr();function WN(e){for(var t=QN(e),r=t.length;r--;){var a=t[r],n=e[a];t[r]=[a,n,jN(n)]}return t}Oh.exports=WN});var Bi=u((p$,Ph)=>{"use strict";function $N(e,t){return function(r){return r==null?!1:r[e]===t&&(t!==void 0||e in Object(r))}}Ph.exports=$N});var qh=u((c$,Uh)=>{"use strict";var KN=xh(),VN=Lh(),YN=Bi();function HN(e){var t=VN(e);return t.length==1&&t[0][2]?YN(t[0][0],t[0][1]):function(r){return r===e||KN(r,e,t)}}Uh.exports=HN});var Kn=u((l$,Dh)=>{"use strict";var zN=se(),JN=mr(),XN=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,ZN=/^\w*$/;function eB(e,t){if(zN(e))return!1;var r=typeof e;return r=="number"||r=="symbol"||r=="boolean"||e==null||JN(e)?!0:ZN.test(e)||!XN.test(e)||t!=null&&e in Object(t)}Dh.exports=eB});var Mh=u((d$,Bh)=>{"use strict";var Nh=an(),tB="Expected a function";function Mi(e,t){if(typeof e!="function"||t!=null&&typeof t!="function")throw new TypeError(tB);var r=function(){var a=arguments,n=t?t.apply(this,a):a[0],o=r.cache;if(o.has(n))return o.get(n);var s=e.apply(this,a);return r.cache=o.set(n,s)||o,s};return r.cache=new(Mi.Cache||Nh),r}Mi.Cache=Nh;Bh.exports=Mi});var Gh=u((f$,kh)=>{"use strict";var rB=Mh(),aB=500;function nB(e){var t=rB(e,function(a){return r.size===aB&&r.clear(),a}),r=t.cache;return t}kh.exports=nB});var ki=u((m$,Fh)=>{"use strict";var oB=Gh(),sB=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,iB=/\\(\\)?/g,uB=oB(function(e){var t=[];return e.charCodeAt(0)===46&&t.push(""),e.replace(sB,function(r,a,n,o){t.push(n?o.replace(iB,"$1"):a||r)}),t});Fh.exports=uB});var Gi=u((g$,jh)=>{"use strict";function pB(e,t){for(var r=-1,a=e==null?0:e.length,n=Array(a);++r<a;)n[r]=t(e[r],r,e);return n}jh.exports=pB});var Yh=u((y$,Vh)=>{"use strict";var Qh=xt(),cB=Gi(),lB=se(),dB=mr(),fB=1/0,Wh=Qh?Qh.prototype:void 0,$h=Wh?Wh.toString:void 0;function Kh(e){if(typeof e=="string")return e;if(lB(e))return cB(e,Kh)+"";if(dB(e))return $h?$h.call(e):"";var t=e+"";return t=="0"&&1/e==-fB?"-0":t}Vh.exports=Kh});var Fi=u((h$,Hh)=>{"use strict";var mB=Yh();function gB(e){return e==null?"":mB(e)}Hh.exports=gB});var ji=u((A$,zh)=>{"use strict";var yB=se(),hB=Kn(),AB=ki(),bB=Fi();function IB(e,t){return yB(e)?e:hB(e,t)?[e]:AB(bB(e))}zh.exports=IB});var Ar=u((b$,Jh)=>{"use strict";var SB=mr(),wB=1/0;function TB(e){if(typeof e=="string"||SB(e))return e;var t=e+"";return t=="0"&&1/e==-wB?"-0":t}Jh.exports=TB});var Qi=u((I$,Xh)=>{"use strict";var EB=ji(),RB=Ar();function vB(e,t){t=EB(t,e);for(var r=0,a=t.length;e!=null&&r<a;)e=e[RB(t[r++])];return r&&r==a?e:void 0}Xh.exports=vB});var eA=u((S$,Zh)=>{"use strict";var _B=Qi();function xB(e,t,r){var a=e==null?void 0:_B(e,t);return a===void 0?r:a}Zh.exports=xB});var rA=u((w$,tA)=>{"use strict";function CB(e,t){return e!=null&&t in Object(e)}tA.exports=CB});var nA=u((T$,aA)=>{"use strict";var OB=ji(),LB=Jr(),PB=se(),UB=da(),qB=sn(),DB=Ar();function NB(e,t,r){t=OB(t,e);for(var a=-1,n=t.length,o=!1;++a<n;){var s=DB(t[a]);if(!(o=e!=null&&r(e,s)))break;e=e[s]}return o||++a!=n?o:(n=e==null?0:e.length,!!n&&qB(n)&&UB(s,n)&&(PB(e)||LB(e)))}aA.exports=NB});var sA=u((E$,oA)=>{"use strict";var BB=rA(),MB=nA();function kB(e,t){return e!=null&&MB(e,t,BB)}oA.exports=kB});var uA=u((R$,iA)=>{"use strict";var GB=Di(),FB=eA(),jB=sA(),QB=Kn(),WB=Ni(),$B=Bi(),KB=Ar(),VB=1,YB=2;function HB(e,t){return QB(e)&&WB(t)?$B(KB(e),t):function(r){var a=FB(r,e);return a===void 0&&a===t?jB(r,e):GB(t,a,VB|YB)}}iA.exports=HB});var cA=u((v$,pA)=>{"use strict";function zB(e){return function(t){return t?.[e]}}pA.exports=zB});var dA=u((_$,lA)=>{"use strict";var JB=Qi();function XB(e){return function(t){return JB(t,e)}}lA.exports=XB});var mA=u((x$,fA)=>{"use strict";var ZB=cA(),eM=dA(),tM=Kn(),rM=Ar();function aM(e){return tM(e)?ZB(rM(e)):eM(e)}fA.exports=aM});var Wi=u((C$,gA)=>{"use strict";var nM=qh(),oM=uA(),sM=Xr(),iM=se(),uM=mA();function pM(e){return typeof e=="function"?e:e==null?sM:typeof e=="object"?iM(e)?oM(e[0],e[1]):nM(e):uM(e)}gA.exports=pM});var hA=u((O$,yA)=>{"use strict";var cM=Oi(),lM=Wi(),dM=1;function fM(e){return lM(typeof e=="function"?e:cM(e,dM))}yA.exports=fM});var bA=u((L$,AA)=>{"use strict";var mM=Lo();function gM(e){var t=e==null?0:e.length;return t?mM(e,1):[]}AA.exports=gM});var SA=u((P$,IA)=>{"use strict";var yM=bA(),hM=Po(),AM=tn();function bM(e){return AM(hM(e,void 0,yM),e+"")}IA.exports=bM});var TA=u((U$,wA)=>{"use strict";var IM=jn(),SM=SA(),wM=256,TM=SM(function(e,t){return IM(e,wM,void 0,void 0,void 0,t)});wA.exports=TM});var RA=u((q$,EA)=>{"use strict";var EM=Gi(),RM=rr(),vM=se(),_M=mr(),xM=ki(),CM=Ar(),OM=Fi();function LM(e){return vM(e)?EM(e,CM):_M(e)?[e]:RM(xM(OM(e)))}EA.exports=LM});var _A=u((D$,vA)=>{"use strict";vA.exports={ary:Fg(),assign:Ii(),clone:zy(),curry:Xy(),forEach:Gn(),isArray:se(),isError:eh(),isFunction:Zr(),isWeakMap:rh(),iteratee:hA(),keys:bi(),rearg:TA(),toInteger:gi(),toPath:RA()}});var CA=u((N$,xA)=>{"use strict";var PM=ym(),UM=_A();function qM(e,t,r){return PM(UM,e,t,r)}xA.exports=qM});var $i=u((B$,LA)=>{"use strict";var DM=CA(),OA=DM("merge",as());OA.placeholder=Xs();LA.exports=OA});var qb=u((PK,Ub)=>{"use strict";function tk(e,t,r,a){for(var n=-1,o=e==null?0:e.length;++n<o;){var s=e[n];t(a,s,r(s),e)}return a}Ub.exports=tk});var Nb=u((UK,Db)=>{"use strict";var rk=Ko(),ak=gr();function nk(e,t){return e&&rk(e,t,ak)}Db.exports=nk});var Mb=u((qK,Bb)=>{"use strict";var ok=Zt();function sk(e,t){return function(r,a){if(r==null)return r;if(!ok(r))return e(r,a);for(var n=r.length,o=t?n:-1,s=Object(r);(t?o--:++o<n)&&a(s[o],o,s)!==!1;);return r}}Bb.exports=sk});var Gb=u((DK,kb)=>{"use strict";var ik=Nb(),uk=Mb(),pk=uk(ik);kb.exports=pk});var jb=u((NK,Fb)=>{"use strict";var ck=Gb();function lk(e,t,r,a){return ck(e,function(n,o,s){t(a,n,r(n),s)}),a}Fb.exports=lk});var Wb=u((BK,Qb)=>{"use strict";var dk=qb(),fk=jb(),mk=Wi(),gk=se();function yk(e,t){return function(r,a){var n=gk(r)?dk:fk,o=t?t():{};return n(r,e,mk(a,2),o)}}Qb.exports=yk});var Kb=u((MK,$b)=>{"use strict";var hk=oa(),Ak=Wb(),bk=Object.prototype,Ik=bk.hasOwnProperty,Sk=Ak(function(e,t,r){Ik.call(e,r)?e[r].push(t):hk(e,r,[t])});$b.exports=Sk});var $k={};w($k,{Method:()=>uo,ai:()=>Uu,api:()=>iu,auditLogs:()=>It,automations:()=>Cn,backups:()=>Se,branding:()=>bn,constants:()=>$r,environmentVariables:()=>Je,features:()=>Me,groups:()=>Q,init:()=>cm,licensing:()=>Ve,logger:()=>Bt,mappers:()=>Y,middleware:()=>Xi,plugins:()=>On,publicApi:()=>Un,quotas:()=>ze,scimGroups:()=>br,scimUsers:()=>ye,sdk:()=>Vi,users:()=>nt,utils:()=>Yt});module.exports=kI($k);var uo=(o=>(o.POST="POST",o.GET="GET",o.PATCH="PATCH",o.DELETE="DELETE",o.PUT="PUT",o))(uo||{});var Vi={};w(Vi,{ai:()=>Is,auditLogs:()=>It,automations:()=>Cn,backups:()=>Se,branding:()=>bn,environmentVariables:()=>Je,features:()=>Me,groups:()=>Q,init:()=>cm,licensing:()=>Ve,logger:()=>Bt,plugins:()=>On,publicApi:()=>Un,quotas:()=>ze,scimGroups:()=>br,scimUsers:()=>ye,users:()=>nt,utils:()=>Yt});var bn={};w(bn,{getBrandingConfig:()=>Lx});var Me={};w(Me,{checkBackups:()=>ce,checkFeature:()=>hn,checkFeatures:()=>ms,checkSCIM:()=>As,isAppBuildersEnabled:()=>Pt,isAuditLogsEnabled:()=>An,isBackupsEnabled:()=>gs,isBrandingEnabled:()=>ys,isEnforceableSSO:()=>Tf,isExpandedPublicApiEnabled:()=>rt,isPWAEnabled:()=>Ex,isPkceOidcEnabled:()=>vx,isRecaptchaEnabled:()=>Rx,isSSOEnforced:()=>_x,isSyncAutomationsEnabled:()=>wx,isTriggerAutomationRunEnabled:()=>Tx,isUserGroupsEnabled:()=>hs,isViewPermissionEnabled:()=>xx,isViewReadonlyColumnsEnabled:()=>Cx});var te=require("@budibase/types"),tt=require("@budibase/backend-core");var Ve={};w(Ve,{cache:()=>Ne,client:()=>mt,features:()=>Ja,getFreeLicense:()=>ls,getLicense:()=>ps,getLicenseFromKey:()=>cs,keys:()=>fs,offline:()=>mn,quotas:()=>Xa});var Ne={};w(Ne,{getCachedLicense:()=>Sf,invalidate:()=>wf,refresh:()=>Ct});var Ba=require("@budibase/backend-core"),Tr,GI=async()=>{Tr=await Ba.RedisClient.init(Ba.redis.utils.Databases.LICENSES)},FI=async()=>{Tr&&await Tr.finish()};process.on("exit",async()=>{await FI()});var po=async()=>(Tr||await GI(),Tr);var mt={};w(mt,{activateLicenseKey:()=>vo,getLicense:()=>Kt,getLicenseFromKey:()=>Ro,triggerQuota:()=>vS});var ju=P(require("node-fetch"));var Qu=require("@budibase/backend-core"),co=require("dd-trace"),Wu=require("dd-trace/ext/formats"),lo=class{constructor(t){this.apiCall=t=>async(r="",a={})=>await co.tracer.trace(`api.${t}`,async n=>{n.setTag("url",r);let o={...a.headers};o["Content-Type"]||(o["Content-Type"]="application/json",o.Accept="application/json");let s=o["Content-Type"]==="application/json";Qu.logging.correlation.setHeader(o),co.tracer.inject(n,Wu.HTTP_HEADERS,o);let i={method:t,body:s?JSON.stringify(a.body):a.body,headers:o,credentials:"include"};return(0,ju.default)(`${this.host}${r}`,i)});this.post=this.apiCall("POST");this.get=this.apiCall("GET");this.patch=this.apiCall("PATCH");this.del=this.apiCall("DELETE");this.put=this.apiCall("PUT");this.host=t}},fo=lo;var Ya=require("@budibase/types"),L=require("@budibase/backend-core");var We={};w(We,{bustCache:()=>yo,getCurrentUsageValues:()=>Xu,getQuotaUsage:()=>Et,setAllUsage:()=>Ao,setAppUsageValue:()=>ho,setUsage:()=>Hu,setUsagePerApp:()=>zu,utils:()=>_r});var ue=require("@budibase/types"),fe=require("@budibase/backend-core");var _r={};w(_r,{generateBaseQuotaUsage:()=>ka,generateNewMonthlyQuotas:()=>vr,generateNewQuotaUsage:()=>go,getBreakdownName:()=>Fa,getCurrentMonthString:()=>lt,getQuotaDocId:()=>Rr,setCurrentMonth:()=>Ga,setQuotaReset:()=>mo});var H=require("@budibase/types"),Er=require("@budibase/backend-core"),Ma=require("@budibase/shared-core"),Rr=()=>Er.context.isSelfHostUsingCloud()?`quota_usage_${Er.context.getTenantId()}`:Er.db.StaticDatabases.GLOBAL.docs.usageQuota,$u=()=>{let e=new Date;return new Date(e.getFullYear(),e.getMonth()+1,1).toISOString()},mo=e=>{e.quotaReset=$u()},lt=()=>{let e=new Date,t=e.getMonth()+1,r=e.getFullYear();return`${t}-${r}`},ka=()=>({usageQuota:{[H.StaticQuotaName.APPS]:0,[H.StaticQuotaName.ROWS]:0,[H.StaticQuotaName.PLUGINS]:0,[H.StaticQuotaName.USERS]:0,[H.StaticQuotaName.CREATORS]:0,[H.StaticQuotaName.USER_GROUPS]:0,[H.StaticQuotaName.AI_CUSTOM_CONFIGS]:0,triggers:{}},monthly:{[lt()]:vr()}}),go=()=>{let e={_id:Rr(),quotaReset:$u(),...ka(),apps:{}};return Ga(e),e},vr=()=>({[H.MonthlyQuotaName.QUERIES]:0,[H.MonthlyQuotaName.AUTOMATIONS]:0,[H.MonthlyQuotaName.BUDIBASE_AI_CREDITS]:0,[H.MonthlyQuotaName.ACTIONS]:0,triggers:{}}),Ga=e=>{let t=lt();e.monthly||(e.monthly={}),e.monthly[t]||(e.monthly[t]=vr()),e.monthly.current=e.monthly[t]},Fa=(e,t)=>{if(!(!t||!e))switch(e){case H.MonthlyQuotaName.AUTOMATIONS:return H.BreakdownQuotaName.AUTOMATIONS;case H.MonthlyQuotaName.QUERIES:return(0,Ma.isTableIdOrExternalTableId)(t)?H.BreakdownQuotaName.ROW_QUERIES:(0,Ma.isDatasourceOrDatasourcePlusId)(t)?H.BreakdownQuotaName.DATASOURCE_QUERIES:void 0}};var Ku=fe.Duration.fromSeconds(60).toMs(),{Writethrough:Vu}=fe.cache.writethrough;function QI(e){return delete e.usageLimits,delete e.usageQuota.automationRuns,delete e.usageQuota.emails,delete e.usageQuota.storage,delete e.usageQuota.views,delete e.usageQuota.publishedApps,delete e.usageQuota.developers,e}var ja=()=>fe.tenancy.isSelfHostUsingCloud()?new Vu(fe.tenancy.getSelfHostCloudDB(),Ku):new Vu(fe.tenancy.getGlobalDB(),Ku);async function yo(e=0){let r=ja(),a=Rr(),n=await r.tryGet(a);n&&n._rev&&await r.remove(a,n._rev).catch(async o=>{if(e<1)return await yo(e+1);throw o})}var Et=async()=>{let e=ja(),t=await e.tryGet(Rr());if(!t){t=go();let{rev:r}=await e.put(t);t._rev=r}return Ga(t),mo(t),QI(t)},Hu=async(e,t,r)=>Ao({name:t,type:r,values:{total:e}}),zu=async(e,t,r)=>{let a=ja(),n=await Et(),o=Object.values(e).reduce((i,p)=>i+p,0);for(let[i,p]of Object.entries(e))n=Ju(n,t,r,{total:o,app:p},{appId:i});let s=await a.put(n);return n._rev=s.rev,n},WI=(e,t,r,a)=>{let n=Fa(t,r);if(!n||!a?.breakdown)return e;e.breakdown||(e.breakdown={}),e.breakdown[n]||(e.breakdown[n]={parent:t,values:{}});let o=e.breakdown[n];return o.values[r]=a.breakdown,e},ho=(e,t,r,a={},n)=>{let o;try{o=fe.db.getProdAppID(a?.appId||fe.context.getAppId())}catch{}if(!o||!n.app||!ue.APP_QUOTA_NAMES.includes(t))return e;e.apps?.[o]||(e.apps={...e.apps,[o]:ka()});let s=e.apps[o];switch(r){case ue.QuotaUsageType.STATIC:s.usageQuota[t]=n.app;break;case ue.QuotaUsageType.MONTHLY:{let i=lt(),p=t,f=s.monthly[i];f||(s.monthly[i]=vr(),f=s.monthly[i]),f[p]=n.app,ue.BREAKDOWN_QUOTA_NAMES.includes(p)&&a?.id&&(f=WI(f,p,a.id,n));break}}return e},Yu=(e,t,r,a)=>{if(!ue.APP_QUOTA_NAMES.includes(r))return{};let n;try{n=fe.db.getProdAppID(fe.context.getAppId())}catch{}if(!n||!e.apps||!e.apps[n])return{app:0};let o=e.apps[n];switch(t){case ue.QuotaUsageType.STATIC:if(o.usageQuota?.[r])return{app:o.usageQuota[r]};break;case ue.QuotaUsageType.MONTHLY:{let s=lt(),i=r;if(!o.monthly?.[s]?.[i])break;let p=o.monthly[s],f=p[i],m,g=Fa(i,a);return g&&a&&p.breakdown?.[g]&&(m=p.breakdown[g]?.values[a]),{app:f,breakdown:m||0}}}return{app:0}},$I=(e,t,r)=>{t.usageQuota.triggers||(t.usageQuota.triggers={}),r&&(t.usageQuota.triggers[e]=r)},KI=(e,t,r,a)=>{r.monthly[t].triggers||(r.monthly[t].triggers={}),a&&(r.monthly[t].triggers[e]=a)},Ju=(e,t,r,a,n={})=>{if(r===ue.QuotaUsageType.STATIC)t=t,e.usageQuota[t]=a.total,$I(t,e,a.triggers);else if(r===ue.QuotaUsageType.MONTHLY){t=t;let o=lt();e.monthly[o][t]=a.total,KI(t,o,e,a.triggers)}else throw new Error(`Invalid usage type: ${r}`);return ho(e,t,r,n,a)},Ao=async e=>{let t=Array.isArray(e)?e:[e],r=ja(),a=await Et();for(let o of t)a=Ju(a,o.name,o.type,o.values,o.opts);let n=await r.put(a,0);return a._rev=n.rev,a},Xu=async(e,t,r)=>{let a=await Et(),n=0,o={};switch(e){case ue.QuotaUsageType.STATIC:if(a.usageQuota[t]){let s=t;n=a.usageQuota[s],o=Yu(a,e,t,r)}break;case ue.QuotaUsageType.MONTHLY:{let s=lt(),i=t;a.monthly[s][i]&&(n=a.monthly[s][i],o=Yu(a,e,t,r));break}default:throw new Error(`Invalid usage type: ${e}`)}return ue.APP_QUOTA_NAMES.includes(t)&&!(o.app||o.breakdown)&&(o.app=o.app||0,o.breakdown=o.breakdown||0),{total:n,app:o.app,breakdown:o.breakdown}};var ve={};w(ve,{destroy:()=>HI,get:()=>bo,save:()=>YI});var dt=require("@budibase/backend-core"),VI=()=>({_id:dt.StaticDatabases.GLOBAL.docs.licenseInfo}),YI=async e=>{let t=await bo();t={...t,...e};let a=await dt.tenancy.getGlobalDB().put(t);return t._rev=a.rev,t},bo=async()=>{let e=dt.tenancy.getGlobalDB();try{return await e.get(dt.StaticDatabases.GLOBAL.docs.licenseInfo)}catch(t){if(t.status===404)return VI();throw t}},HI=async()=>{let e=dt.tenancy.getGlobalDB(),t=await bo();t&&t._rev&&await e.remove(dt.StaticDatabases.GLOBAL.docs.licenseInfo,t._rev)};var M={};w(M,{bulkSave:()=>iS,destroy:()=>uS,fetch:()=>aS,generateUserGroupID:()=>tS,get:()=>nS,getBulk:()=>oS,getByName:()=>Io,getGroupUsers:()=>Wa,getGroupUsersParams:()=>ap,getUserGroupsParams:()=>rp,save:()=>sS});var q=require("@budibase/backend-core");var De=require("@budibase/types"),Qt=require("@budibase/backend-core");async function Zu(){let e=Qt.sql.designDoc.base("type");e.sql.tables={[De.AUDIT_LOG_TYPE]:{fields:{appId:De.SQLiteType.TEXT,event:De.SQLiteType.TEXT,userId:De.SQLiteType.TEXT,timestamp:De.SQLiteType.TEXT,metadata:De.SQLiteType.TEXT,name:De.SQLiteType.TEXT,type:De.SQLiteType.TEXT,fallback:De.SQLiteType.TEXT}}};let t=Qt.context.getAuditLogsDB(),r;try{r=await t.get(Qt.SQLITE_DESIGN_DOC_ID),r={...r,...e}}catch(a){if(a.status===404)r=e;else throw a}await t.put(r)}var Qa=require("@budibase/backend-core"),{ViewName:zI,SEPARATOR:JI,DocumentType:XI,createView:ZI}=Qa.db,eS=XI.USER+JI;async function ep(){let e=Qa.tenancy.getGlobalDB(),t=`function(doc) {
4
+ if (doc._id.startsWith("${eS}") && Array.isArray(doc.userGroups)) {
5
5
  for (let groupId of doc.userGroups) {
6
6
  emit("g_" + groupId, { email: doc.email, userId: doc._id })
7
7
  emit("e_" + groupId + doc.email, { email: doc.email, userId: doc._id })
8
8
  }
9
9
  }
10
- }`;await XI(e,t,HI.USER_BY_GROUP)}var tp=`${q.DocumentType.GROUP}${q.SEPARATOR}`,xr=async()=>(await q.db.getAllApps({dev:!0,efficient:!0,idsOnly:!0})).map(t=>q.db.getProdAppID(t));function rp(e,t={}){e||(e="");let r=e?.startsWith(q.DocumentType.GROUP)?"":tp;return{...t,startkey:`${r}${e}`,endkey:`${r}${e}${q.UNICODE_MAX}`}}function ap(e,t={}){e||(e="");let{emailSearch:r,bookmark:a,...n}=t;return r?{...n,startkey:`e_${e}${a||r}`,endkey:`e_${e}${r}${q.UNICODE_MAX}`}:{...t,startkey:`g_${e}`,endkey:`g_${e}${q.UNICODE_MAX}`,startkey_docid:a}}function eS(){return`${tp}${q.utils.newid()}`}async function Wa(e,t){let r=q.tenancy.getGlobalDB();return(await q.db.queryView(q.db.ViewName.USER_BY_GROUP,ap(e,t),r,ep,{arrayResponse:!0})).map(n=>({_id:n.userId,email:n.email}))||[]}async function Cr(e,t){return e.users=await Wa(e._id),e.roles&&(e.roles=Object.fromEntries(Object.entries(e.roles).filter(([r])=>t.includes(r)))),e}async function tS(e){let r=(await Cr(e,await xr())).users?.map(o=>o._id),a=await q.users.bulkGetGlobalUsersById(r),n=[];for(let o of a){if(!o.userGroups)continue;let s=o.userGroups.length;o.userGroups=o.userGroups.filter(i=>i!==e._id),o.userGroups.length!==s&&n.push(o)}n.length&&await q.users.bulkUpdateGlobalUsers(n)}async function np(){return(await q.tenancy.getGlobalDB().allDocs(rp(null,{include_docs:!0}))).rows.map(t=>t.doc)}async function rS(){let[e,t]=await Promise.all([np(),xr()]),r=[];for(let a of e)r.push(Cr(a,t));return await Promise.all(r)}async function aS(e){let t=q.tenancy.getGlobalDB(),[r,a]=await Promise.all([t.get(e),xr()]);return await Cr(r,a)}async function nS(e,t={enriched:!0}){let r=q.tenancy.getGlobalDB(),[a,n]=await Promise.all([r.getMultiple(e,{allowMissing:!0}),xr()]);if(t?.enriched){let o=[];for(let s of a)o.push(Cr(s,n));return await Promise.all(o)}else return a}async function oS(e){return await q.tenancy.getGlobalDB().put(e)}async function sS(e){return await q.tenancy.getGlobalDB().bulkDocs(e)}async function iS(e,t){let r=q.tenancy.getGlobalDB(),a=await r.get(e),n=await r.remove(e,t);return await tS(a),n}async function Io(e){let t=e.toLowerCase(),[r,a]=await Promise.all([np(),xr()]),n=r.find(o=>o.name.toLowerCase()===t);if(n)return await Cr(n,a)}var _e={};w(_e,{deleteAppBackupMetadata:()=>IS,fetchAppBackups:()=>hS,generateAppBackupID:()=>Ap,getAppBackupMetadata:()=>SS,oldestBackupDate:()=>yp,storeAppBackupMetadata:()=>AS,updateAppBackupMetadata:()=>bS});var Q=require("@budibase/backend-core"),gp=require("@budibase/types");function Or(e,t){let r=e.rows.map(n=>n.doc?n.doc:n);if(!t?.paginate)return{data:r,hasNextPage:!1};let a=r.length>t?.pageSize;return{data:r.slice(0,t?.pageSize),hasNextPage:a,nextPage:a?e.rows[t?.pageSize]?.key:void 0}}var Wt=require("@budibase/backend-core"),{ViewName:sp,AutomationViewMode:So,SEPARATOR:$e,DocumentType:ip,createView:up}=Wt.db,uS=ip.AUTOMATION_LOG+$e,op=ip.APP_BACKUP+$e;async function pp(){let e=Wt.context.getProdAppDB(),t=`function(doc) {
11
- if (doc._id.startsWith("${uS}")) {
10
+ }`;await ZI(e,t,zI.USER_BY_GROUP)}var tp=`${q.DocumentType.GROUP}${q.SEPARATOR}`,xr=async()=>(await q.db.getAllApps({dev:!0,efficient:!0,idsOnly:!0})).map(t=>q.db.getProdAppID(t));function rp(e,t={}){e||(e="");let r=e?.startsWith(q.DocumentType.GROUP)?"":tp;return{...t,startkey:`${r}${e}`,endkey:`${r}${e}${q.UNICODE_MAX}`}}function ap(e,t={}){e||(e="");let{emailSearch:r,bookmark:a,...n}=t;return r?{...n,startkey:`e_${e}${a||r}`,endkey:`e_${e}${r}${q.UNICODE_MAX}`}:{...t,startkey:`g_${e}`,endkey:`g_${e}${q.UNICODE_MAX}`,startkey_docid:a}}function tS(){return`${tp}${q.utils.newid()}`}async function Wa(e,t){let r=q.tenancy.getGlobalDB();return(await q.db.queryView(q.db.ViewName.USER_BY_GROUP,ap(e,t),r,ep,{arrayResponse:!0})).map(n=>({_id:n.userId,email:n.email}))||[]}async function Cr(e,t){return e.users=await Wa(e._id),e.roles&&(e.roles=Object.fromEntries(Object.entries(e.roles).filter(([r])=>t.includes(r)))),e}async function rS(e){let r=(await Cr(e,await xr())).users?.map(o=>o._id),a=await q.users.bulkGetGlobalUsersById(r),n=[];for(let o of a){if(!o.userGroups)continue;let s=o.userGroups.length;o.userGroups=o.userGroups.filter(i=>i!==e._id),o.userGroups.length!==s&&n.push(o)}n.length&&await q.users.bulkUpdateGlobalUsers(n)}async function np(){return(await q.tenancy.getGlobalDB().allDocs(rp(null,{include_docs:!0}))).rows.map(t=>t.doc)}async function aS(){let[e,t]=await Promise.all([np(),xr()]),r=[];for(let a of e)r.push(Cr(a,t));return await Promise.all(r)}async function nS(e){let t=q.tenancy.getGlobalDB(),[r,a]=await Promise.all([t.get(e),xr()]);return await Cr(r,a)}async function oS(e,t={enriched:!0}){let r=q.tenancy.getGlobalDB(),[a,n]=await Promise.all([r.getMultiple(e,{allowMissing:!0}),xr()]);if(t?.enriched){let o=[];for(let s of a)o.push(Cr(s,n));return await Promise.all(o)}else return a}async function sS(e){return await q.tenancy.getGlobalDB().put(e)}async function iS(e){return await q.tenancy.getGlobalDB().bulkDocs(e)}async function uS(e,t){let r=q.tenancy.getGlobalDB(),a=await r.get(e),n=await r.remove(e,t);return await rS(a),n}async function Io(e){let t=e.toLowerCase(),[r,a]=await Promise.all([np(),xr()]),n=r.find(o=>o.name.toLowerCase()===t);if(n)return await Cr(n,a)}var _e={};w(_e,{deleteAppBackupMetadata:()=>SS,fetchAppBackups:()=>AS,generateAppBackupID:()=>Ap,getAppBackupMetadata:()=>wS,oldestBackupDate:()=>yp,storeAppBackupMetadata:()=>bS,updateAppBackupMetadata:()=>IS});var j=require("@budibase/backend-core"),gp=require("@budibase/types");function Or(e,t){let r=e.rows.map(n=>n.doc?n.doc:n);if(!t?.paginate)return{data:r,hasNextPage:!1};let a=r.length>t?.pageSize;return{data:r.slice(0,t?.pageSize),hasNextPage:a,nextPage:a?e.rows[t?.pageSize]?.key:void 0}}var Wt=require("@budibase/backend-core"),{ViewName:sp,AutomationViewMode:So,SEPARATOR:$e,DocumentType:ip,createView:up}=Wt.db,pS=ip.AUTOMATION_LOG+$e,op=ip.APP_BACKUP+$e;async function pp(){let e=Wt.context.getProdAppDB(),t=`function(doc) {
11
+ if (doc._id.startsWith("${pS}")) {
12
12
  let autoId = doc.automationId + "${$e}"
13
13
  let status = doc.status + "${$e}"
14
14
  let autoKey = "${So.AUTOMATION}${$e}" + autoId + doc.createdAt
@@ -25,7 +25,7 @@
25
25
  full += doc.type.toLowerCase() + "${$e}"
26
26
  emit("${op}" + full + doc.timestamp)
27
27
  }
28
- }`;await up(e,t,sp.APP_BACKUP_BY_TRIGGER)}var mp=require("@budibase/types");var $r={};w($r,{GENERIC_PAGE_SIZE:()=>Ke,auditLogs:()=>$t,licenses:()=>Ae,quotas:()=>et,versions:()=>Wr});var Ae={};w(Ae,{CLOUD_FREE_LICENSE:()=>cS,SELF_FREE_LICENSE:()=>wo,UNLIMITED:()=>F,UNLIMITED_LICENSE:()=>lS});var ft=require("@budibase/types");var et={};w(et,{UNLIMITED:()=>pS,actions:()=>Gr,appBackupRetentionDays:()=>Qr,apps:()=>Pr,automationLogRetentionDays:()=>Fr,automations:()=>Mr,budibaseAICredits:()=>kr,creators:()=>qr,customAIConfigurations:()=>jr,plugins:()=>Nr,queries:()=>Br,rows:()=>Lr,userGroups:()=>Dr,users:()=>Ur});var oe=require("@budibase/types"),pS=-1,Lr=e=>({[oe.StaticQuotaName.ROWS]:{name:"Rows",value:e,triggers:[90,100]}}),Pr=e=>({[oe.StaticQuotaName.APPS]:{name:"Apps",value:e,triggers:[100]}}),Ur=e=>({[oe.StaticQuotaName.USERS]:{name:"Users",value:e,triggers:[80,100]}}),qr=e=>({[oe.StaticQuotaName.CREATORS]:{name:"Creators",value:e,triggers:[]}}),Dr=e=>({[oe.StaticQuotaName.USER_GROUPS]:{name:"User Groups",value:e,triggers:[80,100]}}),Nr=e=>({[oe.StaticQuotaName.PLUGINS]:{name:"Plugins",value:e,triggers:[90,100]}}),Br=e=>({[oe.MonthlyQuotaName.QUERIES]:{name:"Queries",value:e,triggers:[]}}),Mr=e=>({[oe.MonthlyQuotaName.AUTOMATIONS]:{name:"Automations",value:e,triggers:[80,90,100]}}),kr=e=>({[oe.MonthlyQuotaName.BUDIBASE_AI_CREDITS]:{name:"Budibase AI Credits",value:e,triggers:[80,90,100]}}),Gr=e=>({[oe.MonthlyQuotaName.ACTIONS]:{name:"Actions",value:e,triggers:[80,90,100]}}),Fr=e=>({[oe.ConstantQuotaName.AUTOMATION_LOG_RETENTION_DAYS]:{name:"Automation Logs",value:e,triggers:[]}}),Qr=e=>({[oe.ConstantQuotaName.APP_BACKUPS_RETENTION_DAYS]:{name:"App Backups",value:e,triggers:[]}}),jr=e=>({[oe.StaticQuotaName.AI_CUSTOM_CONFIGS]:{name:"Custom AI Configuration",value:e,triggers:[]}});var F=-1,cS={features:[],quotas:{usage:{monthly:{...Br(F),...Mr(200),...kr(5e4),...Gr(F)},static:{...Pr(F),...Lr(2e3),...Ur(5),...qr(5),...Dr(0),...Nr(10),...jr(0)}},constant:{...Fr(1),...Qr(0)}},plan:{type:ft.PlanType.FREE,usesInvoicing:!1,model:ft.PlanModel.PER_USER}},wo={features:[],quotas:{usage:{monthly:{...Br(F),...Mr(F),...kr(5e4),...Gr(F)},static:{...Lr(F),...Pr(F),...Ur(20),...qr(F),...Dr(0),...Nr(10),...jr(0)}},constant:{...Fr(1),...Qr(0)}},plan:{type:ft.PlanType.FREE,usesInvoicing:!1,model:ft.PlanModel.PER_USER}},lS={features:[],quotas:{usage:{monthly:{...Br(F),...Mr(F),...kr(F),...Gr(F)},static:{...Pr(F),...Lr(F),...Ur(F),...qr(F),...Dr(F),...Nr(F),...jr(F)}},constant:{...Fr(F),...Qr(F)}},plan:{type:ft.PlanType.FREE,usesInvoicing:!1,model:ft.PlanModel.PER_USER}};var Wr={};w(Wr,{getLicenseVersion:()=>dS,getProVersion:()=>dp});var Rt=require("@budibase/backend-core"),$a=P(require("fs")),lp=P(require("path")),dS=()=>{if(Rt.env.isDev()){let e="dev-version.txt",t=lp.default.join(Rt.objectStore.budibaseTempDir(),e);if($a.default.existsSync(t))return $a.default.readFileSync(t,"utf8");{let r=Rt.utils.newid();return $a.default.writeFileSync(t,r),r}}else return dp()},dp=()=>{let e=Rt.env.VERSION;if(!e)throw new Error("No budibase pro version was specified");return e};var $t={};w($t,{searchTable:()=>fS});var vt=require("@budibase/types"),fp=require("@budibase/backend-core");function fS(){return{type:"table",sourceType:vt.TableSourceType.INTERNAL,name:vt.AUDIT_LOG_TYPE,sourceId:fp.SQS_DATASOURCE_INTERNAL,primary:["_id"],schema:{metadata:{name:"metadata",type:vt.FieldType.JSON},fallback:{name:"fallback",type:vt.FieldType.JSON}}}}var Ke=9;var mS=new Date(864e13).toISOString(),gS=1e3*60*60*24;async function Ka(e){let r=(await Ne.getCachedLicense()).quotas?.[mp.QuotaType.CONSTANT]?.[e]?.value||0;return r===Ae.UNLIMITED?new Date(mS).toISOString():new Date(new Date().getTime()-gS*r).toISOString()}async function yp(){return Ka(gp.ConstantQuotaName.APP_BACKUPS_RETENTION_DAYS)}var To=`${Q.db.DocumentType.APP_BACKUP}${Q.db.SEPARATOR}`;async function yS(e,t,r={}){let a=await yp(),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:`${To}${o}${Q.db.UNICODE_MAX}`,endkey:`${To}${s}`}}async function hp(e,t){try{let r=Q.db.getQueryIndex(Q.db.ViewName.APP_BACKUP_BY_TRIGGER);return await e.query(r,t)}catch(r){if(r!=null&&r.error==="not_found")return await cp(),hp(e,t);throw r}}function Ap(e,t){return`${To}${e}${Q.db.SEPARATOR}${t}`}async function hS(e,t={}){let r=Q.tenancy.getGlobalDB(),a,n=t.limit||9,o=await yS(e,t,{include_docs:!0,limit:n+1});t.page&&(o.startkey=t.page),!t.trigger||!t.type?a=await r.allDocs(o):a=await hp(r,o);let s=Or(a,{paginate:t.paginate,pageSize:n}),i=[...new Set(s.data.filter(f=>f.createdBy).map(f=>f.createdBy))],p=await Q.users.bulkGetGlobalUsersById(i,{cleanup:!0});for(let f of p)for(let m of s.data)f?._id===m.createdBy&&(m.createdBy=f);return s}async function AS(e,t={}){let r=Q.tenancy.getGlobalDB(),a=Q.db.getProdAppID(e.appId),n=Ap(a,e.timestamp),o={...e,_id:n,appId:a,name:e.name};return o._id=t.docId||o._id,o._rev=t.docRev||o._rev,t.filename&&(o.filename=t.filename),e.createdBy&&(o.createdBy=Q.db.getGlobalIDFromUserMetadataID(e.createdBy)),await r.put(o)}async function bS(e,t){let r=Q.tenancy.getGlobalDB(),a=await r.get(e);return a.name=t,await r.put(a)}async function IS(e){let t=Q.tenancy.getGlobalDB(),r=await t.get(e);await t.remove(r._id,r._rev)}async function SS(e){return await Q.tenancy.getGlobalDB().get(e)}var _t={};w(_t,{get:()=>TS,getCacheEnvVarID:()=>Sp,getEnvVarID:()=>Va,update:()=>ES});var Be=require("@budibase/backend-core"),Ip=P(require("lru-cache")),wS=1e3,bp=new Ip.default({max:wS});function Va(){return Be.StaticDatabases.GLOBAL.docs.environmentVariables}function Sp(e){return`${Be.tenancy.getTenantId()}/${Va()}/${e||""}`}async function TS(){let e=Va(),t=Be.tenancy.getGlobalDB(),r,a=!1;try{r=await t.get(e)}catch(i){if(i.status==404)a=!0;else throw i}let n=Sp(r?._rev),o=bp.get(n);if(o)return o;let s;return!a&&r?s={...r,variables:JSON.parse(Be.encryption.decrypt(r.variables,Be.encryption.SecretOption.ENCRYPTION))}:s={_id:e,variables:{}},bp.set(n,s),s}async function ES(e){let t=Va();return await Be.tenancy.getGlobalDB().put({_id:e._id||t,_rev:e._rev||void 0,variables:Be.encryption.encrypt(JSON.stringify(e.variables),Be.encryption.SecretOption.ENCRYPTION)})}var Eo=require("dd-trace"),Ha=new fo(L.env.INTERNAL_ACCOUNT_PORTAL_URL),za=async e=>{try{let t=await e.json();if(t.message)return t.message}catch{}try{let t=await e.text();if(t)return t}catch{}},wp=async e=>{let t,r;if(L.env.SELF_HOSTED){if(t=await ve.get(),!t.licenseKey)return;r={[L.constants.Header.LICENSE_KEY]:t.licenseKey}}else{let a=L.tenancy.getTenantId();r={[L.constants.Header.API_KEY]:L.env.ACCOUNT_PORTAL_API_KEY,[L.constants.Header.TENANT_ID]:a}}return e(r)},Tp=async()=>await Eo.tracer.trace("_getLicense",async()=>await wp(async e=>{let t=await We.getQuotaUsage();if(t.usageQuota.users==null){let i=await L.users.getUserCount();console.info(`Syncing user count quota to ${i}`),t.usageQuota.users=i,await We.setUsage(i,Ya.StaticQuotaName.USERS,Ya.QuotaUsageType.STATIC)}let r=await L.installation.getInstallFromDB(),a=L.tenancy.getTenantId(),n=await L.events.identification.getUniqueTenantId(a),o=Wr.getProVersion(),s={quotaUsage:t,tenantId:a,install:{id:r.installId,tenantId:n,version:o}};try{let i=await Ha.post("/api/license",{headers:{...e},body:s});if(i.status===404||i.status===403)return;if(i.status!==200){let p=await za(i);throw new L.HTTPError(`Error getting license: ${p}`,i.status)}return i.json()}catch(i){if(L.env.DISABLE_ACCOUNT_PORTAL)return;throw i}}));L.env.isJest()&&(Tp=jest.fn());var Kt=Tp;async function Ro(e){return await Eo.tracer.trace("getLicenseFromKey",async t=>{let r;if(!L.env.ACCOUNT_PORTAL_API_KEY)throw new Error("getLicenseFromKey requires ACCOUNT_PORTAL_API_KEY to be set");try{r=await Ha.get(`/api/license/${e}`,{headers:{[L.constants.Header.API_KEY]:L.env.ACCOUNT_PORTAL_API_KEY}})}catch(a){if(L.env.DISABLE_ACCOUNT_PORTAL)return;throw a}if(r.status===404||r.status===403){t.addTags({licenseFound:!1});return}if(r.status!==200){let a=await za(r);throw new L.HTTPError(`Error getting license: ${a}`,r.status)}return r.json()})}var RS=e=>wp(async t=>{let r=await Ha.post("/api/license/usage/triggered",{headers:{...t},body:e});if(r.status!==200){let a=await za(r);L.logging.logAlert(`Error triggering quota usage: ${a}`)}}),vo=async e=>{let t=await L.installation.getInstall(),r={installVersion:t.version,installId:t.installId},a=await Ha.post("/api/license/activate",{headers:{[L.constants.Header.LICENSE_KEY]:e},body:r});if(a.status===403)throw new L.HTTPError("Invalid license key",400);if(a.status===409)throw new L.HTTPError("License key has already been activated",409);if(a.status!==200){let n=await za(a);throw new L.HTTPError(`Error activating license key: ${n}`,a.status)}return a.json()};var us=require("@budibase/backend-core");var mn={};w(mn,{activateOfflineLicenseToken:()=>px,deleteOfflineLicenseToken:()=>cx,dev:()=>ma,enrichLicense:()=>gf,getIdentifier:()=>ns,getIdentifierBase64:()=>lx,getIdentifierFromBase64:()=>dx,getOfflineLicense:()=>os,getOfflineLicenseToken:()=>df,signing:()=>Yr,verifyExpiry:()=>ff,verifyInstallation:()=>mf});var Yr={};w(Yr,{sign:()=>_S,verifyLicenseToken:()=>Vr});var _o=P(require("jsonwebtoken")),vS=`-----BEGIN PUBLIC KEY-----
28
+ }`;await up(e,t,sp.APP_BACKUP_BY_TRIGGER)}var mp=require("@budibase/types");var $r={};w($r,{GENERIC_PAGE_SIZE:()=>Ke,auditLogs:()=>$t,licenses:()=>Ae,quotas:()=>et,versions:()=>Wr});var Ae={};w(Ae,{CLOUD_FREE_LICENSE:()=>lS,SELF_FREE_LICENSE:()=>wo,UNLIMITED:()=>F,UNLIMITED_LICENSE:()=>dS});var ft=require("@budibase/types");var et={};w(et,{UNLIMITED:()=>cS,actions:()=>Gr,appBackupRetentionDays:()=>jr,apps:()=>Pr,automationLogRetentionDays:()=>Fr,automations:()=>Mr,budibaseAICredits:()=>kr,creators:()=>qr,customAIConfigurations:()=>Qr,plugins:()=>Nr,queries:()=>Br,rows:()=>Lr,userGroups:()=>Dr,users:()=>Ur});var oe=require("@budibase/types"),cS=-1,Lr=e=>({[oe.StaticQuotaName.ROWS]:{name:"Rows",value:e,triggers:[90,100]}}),Pr=e=>({[oe.StaticQuotaName.APPS]:{name:"Apps",value:e,triggers:[100]}}),Ur=e=>({[oe.StaticQuotaName.USERS]:{name:"Users",value:e,triggers:[80,100]}}),qr=e=>({[oe.StaticQuotaName.CREATORS]:{name:"Creators",value:e,triggers:[]}}),Dr=e=>({[oe.StaticQuotaName.USER_GROUPS]:{name:"User Groups",value:e,triggers:[80,100]}}),Nr=e=>({[oe.StaticQuotaName.PLUGINS]:{name:"Plugins",value:e,triggers:[90,100]}}),Br=e=>({[oe.MonthlyQuotaName.QUERIES]:{name:"Queries",value:e,triggers:[]}}),Mr=e=>({[oe.MonthlyQuotaName.AUTOMATIONS]:{name:"Automations",value:e,triggers:[80,90,100]}}),kr=e=>({[oe.MonthlyQuotaName.BUDIBASE_AI_CREDITS]:{name:"Budibase AI Credits",value:e,triggers:[80,90,100]}}),Gr=e=>({[oe.MonthlyQuotaName.ACTIONS]:{name:"Actions",value:e,triggers:[80,90,100]}}),Fr=e=>({[oe.ConstantQuotaName.AUTOMATION_LOG_RETENTION_DAYS]:{name:"Automation Logs",value:e,triggers:[]}}),jr=e=>({[oe.ConstantQuotaName.APP_BACKUPS_RETENTION_DAYS]:{name:"App Backups",value:e,triggers:[]}}),Qr=e=>({[oe.StaticQuotaName.AI_CUSTOM_CONFIGS]:{name:"Custom AI Configuration",value:e,triggers:[]}});var F=-1,lS={features:[],quotas:{usage:{monthly:{...Br(F),...Mr(200),...kr(5e4),...Gr(F)},static:{...Pr(F),...Lr(2e3),...Ur(5),...qr(5),...Dr(0),...Nr(10),...Qr(0)}},constant:{...Fr(1),...jr(0)}},plan:{type:ft.PlanType.FREE,usesInvoicing:!1,model:ft.PlanModel.PER_USER}},wo={features:[],quotas:{usage:{monthly:{...Br(F),...Mr(F),...kr(5e4),...Gr(F)},static:{...Lr(F),...Pr(F),...Ur(20),...qr(F),...Dr(0),...Nr(10),...Qr(0)}},constant:{...Fr(1),...jr(0)}},plan:{type:ft.PlanType.FREE,usesInvoicing:!1,model:ft.PlanModel.PER_USER}},dS={features:[],quotas:{usage:{monthly:{...Br(F),...Mr(F),...kr(F),...Gr(F)},static:{...Pr(F),...Lr(F),...Ur(F),...qr(F),...Dr(F),...Nr(F),...Qr(F)}},constant:{...Fr(F),...jr(F)}},plan:{type:ft.PlanType.FREE,usesInvoicing:!1,model:ft.PlanModel.PER_USER}};var Wr={};w(Wr,{getLicenseVersion:()=>fS,getProVersion:()=>dp});var Rt=require("@budibase/backend-core"),$a=P(require("fs")),lp=P(require("path")),fS=()=>{if(Rt.env.isDev()){let e="dev-version.txt",t=lp.default.join(Rt.objectStore.budibaseTempDir(),e);if($a.default.existsSync(t))return $a.default.readFileSync(t,"utf8");{let r=Rt.utils.newid();return $a.default.writeFileSync(t,r),r}}else return dp()},dp=()=>{let e=Rt.env.VERSION;if(!e)throw new Error("No budibase pro version was specified");return e};var $t={};w($t,{searchTable:()=>mS});var vt=require("@budibase/types"),fp=require("@budibase/backend-core");function mS(){return{type:"table",sourceType:vt.TableSourceType.INTERNAL,name:vt.AUDIT_LOG_TYPE,sourceId:fp.SQS_DATASOURCE_INTERNAL,primary:["_id"],schema:{metadata:{name:"metadata",type:vt.FieldType.JSON},fallback:{name:"fallback",type:vt.FieldType.JSON}}}}var Ke=9;var gS=new Date(864e13).toISOString(),yS=1e3*60*60*24;async function Ka(e){let r=(await Ne.getCachedLicense()).quotas?.[mp.QuotaType.CONSTANT]?.[e]?.value||0;return r===Ae.UNLIMITED?new Date(gS).toISOString():new Date(new Date().getTime()-yS*r).toISOString()}async function yp(){return Ka(gp.ConstantQuotaName.APP_BACKUPS_RETENTION_DAYS)}var To=`${j.db.DocumentType.APP_BACKUP}${j.db.SEPARATOR}`;async function hS(e,t,r={}){let a=await yp(),n=j.db.getProdAppID(e),o=n,s=n;if(t.trigger&&t.type){let i=`${j.db.SEPARATOR}${t.trigger}`;i+=`${j.db.SEPARATOR}${t.type}`,o+=i,s+=i}return(!t.startDate||t.startDate<a)&&(t.startDate=a),t.startDate&&(s+=`${j.db.SEPARATOR}${t.startDate}`),t.endDate&&(o+=`${j.db.SEPARATOR}${t.endDate}`),{...r,descending:!0,startkey:`${To}${o}${j.db.UNICODE_MAX}`,endkey:`${To}${s}`}}async function hp(e,t){try{let r=j.db.getQueryIndex(j.db.ViewName.APP_BACKUP_BY_TRIGGER);return await e.query(r,t)}catch(r){if(r!=null&&r.error==="not_found")return await cp(),hp(e,t);throw r}}function Ap(e,t){return`${To}${e}${j.db.SEPARATOR}${t}`}async function AS(e,t={}){let r=j.tenancy.getGlobalDB(),a,n=t.limit||9,o=await hS(e,t,{include_docs:!0,limit:n+1});t.page&&(o.startkey=t.page),!t.trigger||!t.type?a=await r.allDocs(o):a=await hp(r,o);let s=Or(a,{paginate:t.paginate,pageSize:n}),i=[...new Set(s.data.filter(f=>f.createdBy).map(f=>f.createdBy))],p=await j.users.bulkGetGlobalUsersById(i,{cleanup:!0});for(let f of p)for(let m of s.data)f?._id===m.createdBy&&(m.createdBy=f);return s}async function bS(e,t={}){let r=j.tenancy.getGlobalDB(),a=j.db.getProdAppID(e.appId),n=Ap(a,e.timestamp),o={...e,_id:n,appId:a,name:e.name};return o._id=t.docId||o._id,o._rev=t.docRev||o._rev,t.filename&&(o.filename=t.filename),e.createdBy&&(o.createdBy=j.db.getGlobalIDFromUserMetadataID(e.createdBy)),await r.put(o)}async function IS(e,t){let r=j.tenancy.getGlobalDB(),a=await r.get(e);return a.name=t,await r.put(a)}async function SS(e){let t=j.tenancy.getGlobalDB(),r=await t.get(e);await t.remove(r._id,r._rev)}async function wS(e){return await j.tenancy.getGlobalDB().get(e)}var _t={};w(_t,{get:()=>ES,getCacheEnvVarID:()=>Sp,getEnvVarID:()=>Va,update:()=>RS});var Be=require("@budibase/backend-core"),Ip=P(require("lru-cache")),TS=1e3,bp=new Ip.default({max:TS});function Va(){return Be.StaticDatabases.GLOBAL.docs.environmentVariables}function Sp(e){return`${Be.tenancy.getTenantId()}/${Va()}/${e||""}`}async function ES(){let e=Va(),t=Be.tenancy.getGlobalDB(),r,a=!1;try{r=await t.get(e)}catch(i){if(i.status==404)a=!0;else throw i}let n=Sp(r?._rev),o=bp.get(n);if(o)return o;let s;return!a&&r?s={...r,variables:JSON.parse(Be.encryption.decrypt(r.variables,Be.encryption.SecretOption.ENCRYPTION))}:s={_id:e,variables:{}},bp.set(n,s),s}async function RS(e){let t=Va();return await Be.tenancy.getGlobalDB().put({_id:e._id||t,_rev:e._rev||void 0,variables:Be.encryption.encrypt(JSON.stringify(e.variables),Be.encryption.SecretOption.ENCRYPTION)})}var Eo=require("dd-trace"),Ha=new fo(L.env.INTERNAL_ACCOUNT_PORTAL_URL),za=async e=>{try{let t=await e.json();if(t.message)return t.message}catch{}try{let t=await e.text();if(t)return t}catch{}},wp=async e=>{let t,r;if(L.env.SELF_HOSTED){if(t=await ve.get(),!t.licenseKey)return;r={[L.constants.Header.LICENSE_KEY]:t.licenseKey}}else{let a=L.tenancy.getTenantId();r={[L.constants.Header.API_KEY]:L.env.ACCOUNT_PORTAL_API_KEY,[L.constants.Header.TENANT_ID]:a}}return e(r)},Tp=async()=>await Eo.tracer.trace("_getLicense",async()=>await wp(async e=>{let t=await We.getQuotaUsage();if(t.usageQuota.users==null){let i=await L.users.getUserCount();console.info(`Syncing user count quota to ${i}`),t.usageQuota.users=i,await We.setUsage(i,Ya.StaticQuotaName.USERS,Ya.QuotaUsageType.STATIC)}let r=await L.installation.getInstallFromDB(),a=L.tenancy.getTenantId(),n=await L.events.identification.getUniqueTenantId(a),o=Wr.getProVersion(),s={quotaUsage:t,tenantId:a,install:{id:r.installId,tenantId:n,version:o}};try{let i=await Ha.post("/api/license",{headers:{...e},body:s});if(i.status===404||i.status===403)return;if(i.status!==200){let p=await za(i);throw new L.HTTPError(`Error getting license: ${p}`,i.status)}return i.json()}catch(i){if(L.env.DISABLE_ACCOUNT_PORTAL)return;throw i}}));L.env.isJest()&&(Tp=jest.fn());var Kt=Tp;async function Ro(e){return await Eo.tracer.trace("getLicenseFromKey",async t=>{let r;if(!L.env.ACCOUNT_PORTAL_API_KEY)throw new Error("getLicenseFromKey requires ACCOUNT_PORTAL_API_KEY to be set");try{r=await Ha.get(`/api/license/${e}`,{headers:{[L.constants.Header.API_KEY]:L.env.ACCOUNT_PORTAL_API_KEY}})}catch(a){if(L.env.DISABLE_ACCOUNT_PORTAL)return;throw a}if(r.status===404||r.status===403){t.addTags({licenseFound:!1});return}if(r.status!==200){let a=await za(r);throw new L.HTTPError(`Error getting license: ${a}`,r.status)}return r.json()})}var vS=e=>wp(async t=>{let r=await Ha.post("/api/license/usage/triggered",{headers:{...t},body:e});if(r.status!==200){let a=await za(r);L.logging.logAlert(`Error triggering quota usage: ${a}`)}}),vo=async e=>{let t=await L.installation.getInstall(),r={installVersion:t.version,installId:t.installId},a=await Ha.post("/api/license/activate",{headers:{[L.constants.Header.LICENSE_KEY]:e},body:r});if(a.status===403)throw new L.HTTPError("Invalid license key",400);if(a.status===409)throw new L.HTTPError("License key has already been activated",409);if(a.status!==200){let n=await za(a);throw new L.HTTPError(`Error activating license key: ${n}`,a.status)}return a.json()};var us=require("@budibase/backend-core");var mn={};w(mn,{activateOfflineLicenseToken:()=>cx,deleteOfflineLicenseToken:()=>lx,dev:()=>ma,enrichLicense:()=>gf,getIdentifier:()=>ns,getIdentifierBase64:()=>dx,getIdentifierFromBase64:()=>fx,getOfflineLicense:()=>os,getOfflineLicenseToken:()=>df,signing:()=>Yr,verifyExpiry:()=>ff,verifyInstallation:()=>mf});var Yr={};w(Yr,{sign:()=>xS,verifyLicenseToken:()=>Vr});var _o=P(require("jsonwebtoken")),_S=`-----BEGIN PUBLIC KEY-----
29
29
  MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvz3jePLCFBXZ19c8Dpkv
30
30
  XtSgOhKFOcvQdo/LV0KJRUzQWDPWuO4ILtBtnqhjtIzZH4CH0qCYBet5L6Qr4CM1
31
31
  l2HXiAD1Q2rlHNW9wDaYyKb1F5f+v4RyqCAyzlkwRdksmkLeECTboojNnmRCrE3C
@@ -34,19 +34,19 @@ l2HXiAD1Q2rlHNW9wDaYyKb1F5f+v4RyqCAyzlkwRdksmkLeECTboojNnmRCrE3C
34
34
  d/o3ZWE1TTj1zYwlCLN5qRKr3hU8nC3xEYNEbkB9SfTRaOq9Q7P8WmfLkoCPm3pR
35
35
  mwIDAQAB
36
36
  -----END PUBLIC KEY-----
37
- `;function Vr(e){return _o.default.verify(e,vS,{algorithms:["RS256"]})}function _S(e,t){return _o.default.sign(t,e,{encoding:"utf-8",algorithm:"RS256"})}var Ja={};w(Ja,{getFeatures:()=>xo});var c=require("@budibase/types");var xS={[c.PlanType.FREE]:[...Ae.SELF_FREE_LICENSE.features],[c.PlanType.PREMIUM]:void 0,[c.PlanType.PREMIUM_PLUS]:[c.Feature.APP_BACKUPS,c.Feature.BRANDING,c.Feature.SYNC_AUTOMATIONS,c.Feature.APP_BUILDERS,c.Feature.VIEW_PERMISSIONS,c.Feature.TRIGGER_AUTOMATION_RUN,c.Feature.VIEW_READONLY_COLUMNS,c.Feature.AI_CUSTOM_CONFIGS,c.Feature.PDF,c.Feature.BUDIBASE_AI],[c.PlanType.PREMIUM_PLUS_TRIAL]:[c.Feature.APP_BACKUPS,c.Feature.BRANDING,c.Feature.SYNC_AUTOMATIONS,c.Feature.APP_BUILDERS,c.Feature.VIEW_PERMISSIONS,c.Feature.TRIGGER_AUTOMATION_RUN,c.Feature.VIEW_READONLY_COLUMNS,c.Feature.AI_CUSTOM_CONFIGS,c.Feature.PDF,c.Feature.BUDIBASE_AI],[c.PlanType.PRO]:[c.Feature.USER_GROUPS,c.Feature.APP_BACKUPS],[c.PlanType.TEAM]:[c.Feature.USER_GROUPS,c.Feature.APP_BACKUPS],[c.PlanType.BUSINESS]:[c.Feature.USER_GROUPS,c.Feature.APP_BACKUPS,c.Feature.ENVIRONMENT_VARIABLES,c.Feature.AUDIT_LOGS,c.Feature.BRANDING,c.Feature.SYNC_AUTOMATIONS,c.Feature.APP_BUILDERS,c.Feature.EXPANDED_PUBLIC_API,c.Feature.VIEW_PERMISSIONS,c.Feature.PDF,c.Feature.BUDIBASE_AI],[c.PlanType.ENTERPRISE_BASIC]:[c.Feature.USER_GROUPS,c.Feature.APP_BACKUPS,c.Feature.ENVIRONMENT_VARIABLES,c.Feature.ENFORCEABLE_SSO,c.Feature.AUDIT_LOGS,c.Feature.BRANDING,c.Feature.SYNC_AUTOMATIONS,c.Feature.OFFLINE,c.Feature.APP_BUILDERS,c.Feature.EXPANDED_PUBLIC_API,c.Feature.VIEW_PERMISSIONS,c.Feature.TRIGGER_AUTOMATION_RUN,c.Feature.SCIM,c.Feature.VIEW_READONLY_COLUMNS,c.Feature.AI_CUSTOM_CONFIGS,c.Feature.PWA,c.Feature.CUSTOM_APP_SCRIPTS,c.Feature.PDF,c.Feature.BUDIBASE_AI,c.Feature.RECAPTCHA,c.Feature.PKCE_OIDC],[c.PlanType.ENTERPRISE_BASIC_TRIAL]:[c.Feature.USER_GROUPS,c.Feature.APP_BACKUPS,c.Feature.ENVIRONMENT_VARIABLES,c.Feature.ENFORCEABLE_SSO,c.Feature.BRANDING,c.Feature.SYNC_AUTOMATIONS,c.Feature.APP_BUILDERS,c.Feature.EXPANDED_PUBLIC_API,c.Feature.VIEW_PERMISSIONS,c.Feature.TRIGGER_AUTOMATION_RUN,c.Feature.SCIM,c.Feature.VIEW_READONLY_COLUMNS,c.Feature.AI_CUSTOM_CONFIGS,c.Feature.PWA,c.Feature.CUSTOM_APP_SCRIPTS,c.Feature.PDF,c.Feature.BUDIBASE_AI,c.Feature.RECAPTCHA,c.Feature.PKCE_OIDC],[c.PlanType.ENTERPRISE]:[c.Feature.USER_GROUPS,c.Feature.APP_BACKUPS,c.Feature.ENVIRONMENT_VARIABLES,c.Feature.ENFORCEABLE_SSO,c.Feature.AUDIT_LOGS,c.Feature.BRANDING,c.Feature.SYNC_AUTOMATIONS,c.Feature.OFFLINE,c.Feature.APP_BUILDERS,c.Feature.EXPANDED_PUBLIC_API,c.Feature.VIEW_PERMISSIONS,c.Feature.TRIGGER_AUTOMATION_RUN,c.Feature.SCIM,c.Feature.VIEW_READONLY_COLUMNS,c.Feature.AI_CUSTOM_CONFIGS,c.Feature.PWA,c.Feature.CUSTOM_APP_SCRIPTS,c.Feature.PDF,c.Feature.BUDIBASE_AI,c.Feature.RECAPTCHA,c.Feature.PKCE_OIDC]},CS={[c.PlanType.FREE]:[...Ae.CLOUD_FREE_LICENSE.features],[c.PlanType.PREMIUM]:[c.Feature.APP_BACKUPS,c.Feature.BRANDING,c.Feature.APP_BUILDERS,c.Feature.VIEW_PERMISSIONS,c.Feature.PDF],[c.PlanType.PREMIUM_PLUS]:[c.Feature.APP_BACKUPS,c.Feature.BRANDING,c.Feature.SYNC_AUTOMATIONS,c.Feature.APP_BUILDERS,c.Feature.VIEW_PERMISSIONS,c.Feature.TRIGGER_AUTOMATION_RUN,c.Feature.VIEW_READONLY_COLUMNS,c.Feature.BUDIBASE_AI,c.Feature.PDF],[c.PlanType.PREMIUM_PLUS_TRIAL]:[c.Feature.APP_BACKUPS,c.Feature.BRANDING,c.Feature.SYNC_AUTOMATIONS,c.Feature.APP_BUILDERS,c.Feature.VIEW_PERMISSIONS,c.Feature.TRIGGER_AUTOMATION_RUN,c.Feature.VIEW_READONLY_COLUMNS,c.Feature.BUDIBASE_AI,c.Feature.PDF],[c.PlanType.PRO]:[c.Feature.USER_GROUPS,c.Feature.APP_BACKUPS,c.Feature.BRANDING],[c.PlanType.TEAM]:[c.Feature.USER_GROUPS,c.Feature.APP_BACKUPS,c.Feature.BRANDING],[c.PlanType.BUSINESS]:[c.Feature.USER_GROUPS,c.Feature.APP_BACKUPS,c.Feature.ENVIRONMENT_VARIABLES,c.Feature.AUDIT_LOGS,c.Feature.BRANDING,c.Feature.SYNC_AUTOMATIONS,c.Feature.APP_BUILDERS,c.Feature.EXPANDED_PUBLIC_API,c.Feature.VIEW_PERMISSIONS,c.Feature.BUDIBASE_AI,c.Feature.PDF],[c.PlanType.ENTERPRISE_BASIC]:[c.Feature.USER_GROUPS,c.Feature.APP_BACKUPS,c.Feature.ENVIRONMENT_VARIABLES,c.Feature.ENFORCEABLE_SSO,c.Feature.AUDIT_LOGS,c.Feature.BRANDING,c.Feature.SYNC_AUTOMATIONS,c.Feature.OFFLINE,c.Feature.APP_BUILDERS,c.Feature.EXPANDED_PUBLIC_API,c.Feature.VIEW_PERMISSIONS,c.Feature.TRIGGER_AUTOMATION_RUN,c.Feature.SCIM,c.Feature.VIEW_READONLY_COLUMNS,c.Feature.AI_CUSTOM_CONFIGS,c.Feature.BUDIBASE_AI,c.Feature.PWA,c.Feature.CUSTOM_APP_SCRIPTS,c.Feature.PDF,c.Feature.RECAPTCHA,c.Feature.PKCE_OIDC],[c.PlanType.ENTERPRISE_BASIC_TRIAL]:[c.Feature.USER_GROUPS,c.Feature.APP_BACKUPS,c.Feature.ENVIRONMENT_VARIABLES,c.Feature.ENFORCEABLE_SSO,c.Feature.BRANDING,c.Feature.SYNC_AUTOMATIONS,c.Feature.APP_BUILDERS,c.Feature.EXPANDED_PUBLIC_API,c.Feature.VIEW_PERMISSIONS,c.Feature.TRIGGER_AUTOMATION_RUN,c.Feature.SCIM,c.Feature.VIEW_READONLY_COLUMNS,c.Feature.AI_CUSTOM_CONFIGS,c.Feature.BUDIBASE_AI,c.Feature.PWA,c.Feature.CUSTOM_APP_SCRIPTS,c.Feature.PDF,c.Feature.RECAPTCHA,c.Feature.PKCE_OIDC],[c.PlanType.ENTERPRISE]:[c.Feature.USER_GROUPS,c.Feature.APP_BACKUPS,c.Feature.ENVIRONMENT_VARIABLES,c.Feature.ENFORCEABLE_SSO,c.Feature.AUDIT_LOGS,c.Feature.BRANDING,c.Feature.SYNC_AUTOMATIONS,c.Feature.APP_BUILDERS,c.Feature.EXPANDED_PUBLIC_API,c.Feature.VIEW_PERMISSIONS,c.Feature.TRIGGER_AUTOMATION_RUN,c.Feature.SCIM,c.Feature.VIEW_READONLY_COLUMNS,c.Feature.AI_CUSTOM_CONFIGS,c.Feature.BUDIBASE_AI,c.Feature.PWA,c.Feature.CUSTOM_APP_SCRIPTS,c.Feature.PDF,c.Feature.RECAPTCHA,c.Feature.PKCE_OIDC]};function xo(e,t){let r=[];function a(n){let o=n[t];if(!o)throw new Error(`Features do not exist for planType=${t} and hosting=${e}`);return o}switch(e){case c.Hosting.SELF:r=a(xS);break;case c.Hosting.CLOUD:r=a(CS);break}return r}var Xa={};w(Xa,{UNLIMITED:()=>d,getQuotas:()=>Co});var k=require("@budibase/types");var l=et,Ep=Ae,d=-1,Hr=e=>e*1e6,OS={[k.PlanType.FREE]:{...Ep.CLOUD_FREE_LICENSE.quotas},[k.PlanType.PREMIUM]:{usage:{monthly:{...l.queries(d),...l.automations(1e3),...l.budibaseAICredits(0),...l.actions(d)},static:{...l.rows(1e4),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(0),...l.plugins(d),...l.customAIConfigurations(0)}},constant:{...l.automationLogRetentionDays(7),...l.appBackupRetentionDays(7)}},[k.PlanType.PREMIUM_PLUS]:{usage:{monthly:{...l.queries(d),...l.automations(5e3),...l.budibaseAICredits(Hr(2)),...l.actions(d)},static:{...l.rows(25e3),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(0),...l.plugins(d),...l.customAIConfigurations(1)}},constant:{...l.automationLogRetentionDays(30),...l.appBackupRetentionDays(30)}},[k.PlanType.PREMIUM_PLUS_TRIAL]:{usage:{monthly:{...l.queries(d),...l.automations(5e3),...l.budibaseAICredits(Hr(2)),...l.actions(d)},static:{...l.rows(25e3),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(0),...l.plugins(d),...l.customAIConfigurations(1)}},constant:{...l.automationLogRetentionDays(30),...l.appBackupRetentionDays(30)}},[k.PlanType.PRO]:{usage:{monthly:{...l.queries(d),...l.automations(1e3),...l.budibaseAICredits(0),...l.actions(d)},static:{...l.rows(d),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(5),...l.plugins(d),...l.customAIConfigurations(0)}},constant:{...l.automationLogRetentionDays(7),...l.appBackupRetentionDays(7)}},[k.PlanType.TEAM]:{usage:{monthly:{...l.queries(d),...l.automations(5e3),...l.budibaseAICredits(0),...l.actions(d)},static:{...l.rows(d),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(10),...l.plugins(d),...l.customAIConfigurations(0)}},constant:{...l.automationLogRetentionDays(30),...l.appBackupRetentionDays(90)}},[k.PlanType.BUSINESS]:{usage:{monthly:{...l.queries(d),...l.automations(1e4),...l.budibaseAICredits(0),...l.actions(d)},static:{...l.rows(5e4),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(50),...l.plugins(d),...l.customAIConfigurations(0)}},constant:{...l.automationLogRetentionDays(365),...l.appBackupRetentionDays(365)}},[k.PlanType.ENTERPRISE_BASIC]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(Hr(4)),...l.actions(d)},static:{...l.rows(d),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(d),...l.plugins(d),...l.customAIConfigurations(d)}},constant:{...l.automationLogRetentionDays(d),...l.appBackupRetentionDays(d)}},[k.PlanType.ENTERPRISE_BASIC_TRIAL]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(Hr(4)),...l.actions(d)},static:{...l.rows(d),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(d),...l.plugins(d),...l.customAIConfigurations(d)}},constant:{...l.automationLogRetentionDays(15),...l.appBackupRetentionDays(15)}},[k.PlanType.ENTERPRISE]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(Hr(4)),...l.actions(d)},static:{...l.rows(d),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(d),...l.plugins(d),...l.customAIConfigurations(d)}},constant:{...l.automationLogRetentionDays(d),...l.appBackupRetentionDays(d)}}},LS={[k.PlanType.FREE]:{...Ep.SELF_FREE_LICENSE.quotas},[k.PlanType.PREMIUM]:void 0,[k.PlanType.PREMIUM_PLUS]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(0),...l.actions(d)},static:{...l.rows(d),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(0),...l.plugins(d),...l.customAIConfigurations(1)}},constant:{...l.automationLogRetentionDays(30),...l.appBackupRetentionDays(30)}},[k.PlanType.PREMIUM_PLUS_TRIAL]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(0),...l.actions(d)},static:{...l.rows(d),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(0),...l.plugins(d),...l.customAIConfigurations(1)}},constant:{...l.automationLogRetentionDays(30),...l.appBackupRetentionDays(30)}},[k.PlanType.PRO]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(0),...l.actions(d)},static:{...l.rows(d),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(5),...l.plugins(d),...l.customAIConfigurations(0)}},constant:{...l.automationLogRetentionDays(7),...l.appBackupRetentionDays(7)}},[k.PlanType.TEAM]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(0),...l.actions(d)},static:{...l.rows(d),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(10),...l.plugins(d),...l.customAIConfigurations(0)}},constant:{...l.automationLogRetentionDays(30),...l.appBackupRetentionDays(90)}},[k.PlanType.BUSINESS]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(0),...l.actions(d)},static:{...l.rows(d),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(50),...l.plugins(d),...l.customAIConfigurations(0)}},constant:{...l.automationLogRetentionDays(90),...l.appBackupRetentionDays(365)}},[k.PlanType.ENTERPRISE_BASIC]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(0),...l.actions(d)},static:{...l.rows(d),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(d),...l.plugins(d),...l.customAIConfigurations(d)}},constant:{...l.automationLogRetentionDays(d),...l.appBackupRetentionDays(d)}},[k.PlanType.ENTERPRISE_BASIC_TRIAL]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(0),...l.actions(d)},static:{...l.rows(d),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(d),...l.plugins(d),...l.customAIConfigurations(d)}},constant:{...l.automationLogRetentionDays(15),...l.appBackupRetentionDays(15)}},[k.PlanType.ENTERPRISE]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(0),...l.actions(d)},static:{...l.rows(d),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(d),...l.plugins(d),...l.customAIConfigurations(d)}},constant:{...l.automationLogRetentionDays(d),...l.appBackupRetentionDays(d)}}};function Co(e,t){let r;function a(n){let o=n[t];if(!o)throw new Error(`Quotas do not exist for planType=${t} and hosting=${e}`);return o}switch(e){case k.Hosting.SELF:r=a(LS);break;case k.Hosting.CLOUD:r=a(OS);break}return JSON.parse(JSON.stringify(r))}var Yt={};w(Yt,{appExists:()=>PS,encoding:()=>Vt});var Rp=require("@budibase/backend-core");async function PS(e){return(await Rp.db.getAllApps({all:!0,idsOnly:!0})).includes(e)}var Vt={};w(Vt,{base64ToObject:()=>qS,objectToBase64:()=>US});function US(e){let t=JSON.stringify(e);return Buffer.from(t).toString("base64")}function qS(e){let t=Buffer.from(e,"base64").toString();return JSON.parse(t)}var pf=require("@budibase/types"),ir=require("@budibase/backend-core"),cf=P(Fl()),lf=P(as());async function px(e){await ve.save({offlineLicenseToken:e}),await Ct()}async function cx(){await ve.save({offlineLicenseToken:void 0}),await Ct()}async function df(){return(await ve.get()).offlineLicenseToken}async function ns(){let t=(await ir.installation.getInstall()).installId,r=ir.context.getTenantId(),a=await ir.events.identification.getUniqueTenantId(r);return{installId:t,tenantId:a}}async function lx(){let e=await ns();return Vt.objectToBase64(e)}function dx(e){return Vt.base64ToObject(e)}function ff(e){let t=Date.now(),r=new Date(e.expireAt).getTime();if(t>r)throw new Error(`Offline license has expired. expireAt=${e.expireAt}`)}async function mf(e){let t=await ns();if(e.identifier.installId!==t.installId||e.identifier.tenantId!==t.tenantId)throw new Error("Invalid offline license")}function gf(e){let t=e.plan.type,r=pf.Hosting.SELF,a=xo(r,t),n=Co(r,t);return e.features=(0,cf.default)(e.features,a),e.quotas=(0,lf.default)(e.quotas,n),e}async function os(){try{let e=await df();if(e){let t=await Vr(e);return ff(t),await mf(t),gf(t)}}catch(e){console.error("Error retrieving offline license",e)}}var ma={};w(ma,{deleteDevLicense:()=>hx,getOfflineLicense:()=>gx,writeDevLicenseToDisk:()=>yx});var yf=require("@budibase/backend-core"),is=require("path"),hf=require("os"),Ot=P(require("fs"));var fx=yf.env.isTest()?".budibase-test":".budibase",ss=(0,is.join)((0,hf.tmpdir)(),fx),mx="dev_license.txt",fa=(0,is.join)(ss,mx);if(!Ot.default.existsSync(ss))try{Ot.default.mkdirSync(ss)}catch{}function gx(){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 yx(e){console.log(`Writing license to: ${fa}`),Ot.default.writeFileSync(fa,e,{encoding:"utf-8"})}function hx(){Ot.default.rmSync(fa,{force:!0})}var Af=require("dd-trace"),ps=async()=>await Af.tracer.trace("getLicense",async e=>{if(us.env.OFFLINE_MODE)return e.addTags({offline:!0}),os();let t=await Kt();return t||(e.addTags({offlineFallback:!0}),t=ma.getOfflineLicense()),t}),cs=e=>Ro(e),ls=()=>us.env.SELF_HOSTED?Ae.SELF_FREE_LICENSE:Ae.CLOUD_FREE_LICENSE;var fs={};w(fs,{activateLicenseKey:()=>Ax,deleteLicenseKey:()=>bx,getLicenseKey:()=>gn});var ds=P(require("dd-trace"));async function Ax(e){await vo(e),await ve.save({licenseKey:e}),await Ct()}async function gn(){return await ds.default.trace("getLicenseKey",async e=>{let t=await ve.get();return e.addTags({licenseKey:t.licenseKey}),t.licenseKey})}async function bx(){return await ds.default.trace("deleteLicenseKey",async()=>{await ve.save({licenseKey:void 0}),await Ct()})}var Lt=require("@budibase/backend-core"),yn=P(require("dd-trace")),bf=3600,Ct=async()=>{await wf(),await Sf()},If=async(e,t)=>{let{populateLicense:r=ps,populateFreeLicense:a=ls}=t||{};return await yn.default.trace("getCachedLicense",async n=>{let o=Lt.context.getLicense();if(o)return n.addTags({foundInContext:!0,features:o.features,plan:o.plan,quotas:o.quotas}),o;let s=Lt.tenancy.getTenantId(),i=await po(),p=await i.get(s);return n.addTags({tenantId:s,foundInCache:!!p}),p?(n.addTags({foundInCache:!0,refreshedAt:p.refreshedAt,features:p.features,plan:p.plan,quotas:p.quotas}),p):(p=await yn.default.trace("populateLicense",async()=>await r(s)),n.addTags({populatedLicense:!!p}),p||(p=yn.default.trace("populateFreeLicense",()=>a(e,s)),n.addTags({populatedFreeLicense:!!p})),p.refreshedAt=new Date().toISOString(),n.addTags({refreshedAt:p.refreshedAt,features:p.features,plan:p.plan,quotas:p.quotas,expirySeconds:bf}),await i.store(s,p,bf),p)})};Lt.env.isJest()&&(If=jest.fn());var Sf=If,wf=async()=>{let e=Lt.tenancy.getTenantId();await(await po()).delete(e)};async function re(e,t){Array.isArray(e)||(e=[e]),t||(t=await Ne.getCachedLicense());for(let r of e)if(!t?.features.includes(r))return!1;return!0}async function hn(e,t){if(!await re(e,t))throw new tt.FeatureDisabledError(`${e} is not currently enabled`,e)}async function ms(e,t){if(!await re(e,t)){let r=e.join(", ");throw new tt.FeatureDisabledError(`${r} are not currently enabled`,r)}}function ce(e){return async(...t)=>(await hn(te.Feature.APP_BACKUPS),e(...t))}async function gs(){return re(te.Feature.APP_BACKUPS)}async function ys(){return re(te.Feature.BRANDING)}async function Tf(){return re(te.Feature.ENFORCEABLE_SSO)}async function Sx(){return re(te.Feature.SYNC_AUTOMATIONS)}async function wx(){return re(te.Feature.TRIGGER_AUTOMATION_RUN)}async function Pt(){return re(te.Feature.APP_BUILDERS)}async function An(){return re(te.Feature.AUDIT_LOGS)}async function hs(){return re(te.Feature.USER_GROUPS)}function Tx(){return re(te.Feature.PWA)}function Ex(){return re(te.Feature.RECAPTCHA)}var Rx=()=>re(te.Feature.PKCE_OIDC);async function rt(){return re(te.Feature.EXPANDED_PUBLIC_API)}async function vx(e){if(tt.env.ENABLE_SSO_MAINTENANCE_MODE||!await Tf())return!1;let r;return e?.config?r=e.config:r=await tt.configs.getSettingsConfig(),!!r.isSSOEnforced}var As=async()=>{let e=te.Feature.SCIM,t=await re(e),r=await tt.configs.getSCIMConfig();if(!t||!r?.enabled)throw new tt.FeatureDisabledError(`${e} is not currently enabled`,e);return!0};async function _x(){return re(te.Feature.VIEW_PERMISSIONS)}async function xx(){return re(te.Feature.VIEW_READONLY_COLUMNS)}var Cx={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 Ox(e){return await ys()?{faviconUrl:e.faviconUrl,faviconUrlEtag:e.faviconUrlEtag,emailBrandingEnabled:e.emailBrandingEnabled,testimonialsEnabled:e.testimonialsEnabled,platformTitle:e.platformTitle,loginHeading:e.loginHeading,loginButton:e.loginButton,metaDescription:e.metaDescription,metaImageUrl:e.metaImageUrl,metaTitle:e.metaTitle}:Cx}var Is={};w(Is,{enrichAIConfig:()=>bs});var Ef=require("@budibase/backend-core"),Lx="budibase_ai";async function bs(e){if(Ef.env.SELF_HOSTED)return e;for(let t of Object.values(e.config))if(t.provider==="BudibaseAI")return e;return e.config[Lx]={provider:"BudibaseAI",active:!0,isDefault:Object.keys(e.config).every(t=>!e.config[t].isDefault),defaultModel:process.env.BUDIBASE_AI_DEFAULT_MODEL||"gpt-5-mini",name:"Budibase AI"},e}var ze={};w(ze,{addAction:()=>Nx,addApp:()=>Bx,addAutomation:()=>jx,addGroup:()=>ws,addPlugin:()=>Es,addRow:()=>kx,addRows:()=>Fx,addUsers:()=>wn,bustCache:()=>yo,decrement:()=>at,decrementMany:()=>ga,getCurrentUsageValues:()=>Xu,getLicensedQuota:()=>vf,getQuotaUsage:()=>Et,increment:()=>Ie,incrementBudibaseAICredits:()=>En,incrementMany:()=>qt,removeApp:()=>Mx,removeGroup:()=>Ts,removePlugin:()=>Rs,removeRow:()=>Gx,removeRows:()=>Qx,removeUsers:()=>lr,set:()=>Ss,setAllUsage:()=>Ao,setAppUsageValue:()=>ho,setUsage:()=>Hu,setUsagePerApp:()=>zu,updatePluginCount:()=>vs,updateUsage:()=>ur,usageLimitIsExceeded:()=>Dx,utils:()=>_r});var In=require("@budibase/types");var z=require("@budibase/types");var ke=require("@budibase/backend-core");var Ut=require("dd-trace"),Ie=async(e,t,r)=>await Ut.tracer.trace("quotas.increment",async a=>(a.addTags({name:e,type:t}),await Rf({change:1,name:e,type:t,opts:r}))),qt=e=>Ut.tracer.trace("quotas.incrementMany",async()=>Rf(e)),Rf=async e=>await Ut.tracer.trace("quotas.tryIncrement",async t=>{let r=Array.isArray(e)?e:[e];t.addTags({numActions:r.length}),await ur(r.map(n=>({usageChange:n.change,name:n.name,type:n.type,opts:{dryRun:!0,suppressErrorLog:n.opts?.suppressErrorLog,id:n.opts?.id}})));let a=[];for(let n of r)await Ut.tracer.trace("quotas.incrementMany.fn",async o=>{o.addTags({actionName:n.name,actionType:n.type,actionChange:n.change});let s=n.opts?.fn;s&&a.push(await s())});return await ur(r.map(n=>({usageChange:n.change,name:n.name,type:n.type,opts:{dryRun:!1,valueFn:n.opts?.valueFn,suppressErrorLog:n.opts?.suppressErrorLog,id:n.opts?.id}}))),a[0]}),at=(e,t,r={})=>ur({usageChange:-1,name:e,type:t,opts:r}),ga=e=>{let t=Array.isArray(e)?e:[e];return ur(t.map(r=>({usageChange:-r.change,name:r.name,type:r.type,opts:r.opts})))},Ss=async(e,t,r)=>We.setUsage(r,e,t),Px=(e,t,r)=>{if(e==z.QuotaUsageType.STATIC){let a=r.usageQuota.triggers;return a?a[t]||{}:{}}else{let a=We.utils.getCurrentMonthString(),n=r.monthly[a].triggers;return n?n[t]||{}:{}}},Ux=async(e,t,r,a)=>{try{await ke.locks.doWithLock({type:z.LockType.TRY_ONCE,name:z.LockName.TRIGGER_QUOTA,resource:e,ttl:1e4},async()=>{let n={percentage:r,name:t.name};a&&(n.resetDate=a),await mt.triggerQuota(n)})}catch(n){ke.logging.logAlert("Error triggering quota",n)}},qx=async(e,t,r,a)=>{let n=await Et(),o=e===z.QuotaUsageType.MONTHLY?n.quotaReset:void 0,s=await Px(e,t,n),i=a.triggers,p=r/a.value*100;p>100&&(p=100);for(let[f,m]of i.entries())if(p>=m&&a.value!==et.UNLIMITED){if(!s[m]){s[m]=new Date().toISOString();let y=i[f+1]||100;(!(p>=y)||p===m)&&await Ux(t,a,p,o)}}else s[m]=void 0;return s},ur=async e=>{await Ut.tracer.trace("quotas.updateUsage",async t=>{let r=ke.tenancy.getTenantId(),a=Array.isArray(e)?e:[e];t.addTags({numActions:a.length,tenantId:r});let n,o,s=[],i={},p={},f={},m={};for(let y of a)await Ut.tracer.trace("quotas.updateUsage.action",async I=>{I.addTags({actionName:y.name,actionType:y.type,actionUsageChange:y.usageChange});try{n=ke.context.getAppId()}catch{}if(z.APP_QUOTA_NAMES.includes(y.name)&&!n)throw new Error("App context required for quota update");try{o=await vf(z.QuotaType.USAGE,y.name,y.type),s.push(o);let{total:_,app:v,breakdown:R}=await We.getCurrentUsageValues(y.type,y.name,y.opts?.id);_+=y.usageChange,v!=null&&(v+=y.usageChange),R!=null&&(R+=y.usageChange);let U={};if(y.opts?.dryRun||(U=await qx(y.type,y.name,_,o),m={...m,[y.name]:U}),o.value!==et.UNLIMITED&&_>o.value&&y.usageChange>0)throw new ke.UsageLimitError(`Licensed ${o.name} of ${o.value} has been exceeded`,o.name);if(_=Math.max(0,_),v&&(v=Math.max(0,v)),R&&(R=Math.max(0,R),f={...f,[y.name]:R}),!y.opts?.dryRun){let qe=y.opts?.valueFn;qe&&(_=await qe(),v=_),i={...i,[y.name]:_},p={...p,[y.name]:v}}}catch(_){throw y.opts?.suppressErrorLog||console.error(`Error updating usage quotas for ${y.name}`,_),_}});let g=a.filter(y=>!y.opts?.dryRun).map(y=>({name:y.name,type:y.type,values:{total:i[y.name],app:p[y.name],breakdown:f[y.name],triggers:m[y.name]},opts:{...y.opts,tenantId:r}}));g.length>0&&await We.setAllUsage(g)})},vf=async(e,t,r)=>{let a=await Ne.getCachedLicense();if(!a){let n=ke.tenancy.getTenantId();throw new Error("License not found for tenant id "+n)}if(r&&(0,z.isStaticQuota)(e,r,t))return a.quotas[e][r][t];if(r&&(0,z.isMonthlyQuota)(e,r,t))return a.quotas[e][r][t];if((0,z.isConstantQuota)(e,t))return a.quotas[e][t];throw new Error("Invalid quota type")},Dx=async({name:e,type:t,usageChange:r})=>{try{return await ur({usageChange:r,name:e,type:t,opts:{dryRun:!0}}),!1}catch(a){if(a.code===z.ErrorCode.USAGE_LIMIT_EXCEEDED)return!0;throw a}};var Nx=async e=>Ie(In.MonthlyQuotaName.ACTIONS,In.QuotaUsageType.MONTHLY,{fn:e});var pr=require("@budibase/types"),_f=require("@budibase/backend-core"),xf=async()=>{let e=await _f.db.getAllApps({dev:!0});return e?e.length:0},Bx=async(e,{appId:t}={})=>Ie(pr.StaticQuotaName.APPS,pr.QuotaUsageType.STATIC,{fn:e,valueFn:xf,id:t}),Mx=async({appId:e}={})=>at(pr.StaticQuotaName.APPS,pr.QuotaUsageType.STATIC,{valueFn:xf,id:e});var Ye=require("@budibase/types"),kx=async(e,{tableId:t}={})=>Ie(Ye.StaticQuotaName.ROWS,Ye.QuotaUsageType.STATIC,{fn:e,id:t}),Gx=async({tableId:e}={})=>at(Ye.StaticQuotaName.ROWS,Ye.QuotaUsageType.STATIC,{id:e}),Fx=async(e,t,{tableId:r}={})=>qt({change:e,name:Ye.StaticQuotaName.ROWS,type:Ye.QuotaUsageType.STATIC,opts:{fn:t,id:r}}),Qx=async(e,{tableId:t}={})=>ga({change:e,name:Ye.StaticQuotaName.ROWS,type:Ye.QuotaUsageType.STATIC,opts:{id:t}});var Sn=require("@budibase/types"),jx=async(e,{automationId:t}={})=>Ie(Sn.MonthlyQuotaName.AUTOMATIONS,Sn.QuotaUsageType.MONTHLY,{fn:e,id:t});var cr=require("@budibase/types"),ws=async e=>Ie(cr.StaticQuotaName.USER_GROUPS,cr.QuotaUsageType.STATIC,{fn:e}),Ts=async()=>at(cr.StaticQuotaName.USER_GROUPS,cr.QuotaUsageType.STATIC);var At=require("@budibase/types"),Es=async e=>Ie(At.StaticQuotaName.PLUGINS,At.QuotaUsageType.STATIC,{fn:e}),Rs=async()=>at(At.StaticQuotaName.PLUGINS,At.QuotaUsageType.STATIC),vs=async e=>Ss(At.StaticQuotaName.PLUGINS,At.QuotaUsageType.STATIC,e);var He=require("@budibase/types"),ya=require("@budibase/backend-core");var wn=async(e,t,r)=>{let a=[{change:e,name:He.StaticQuotaName.USERS,type:He.QuotaUsageType.STATIC,opts:{fn:r,valueFn:ya.users.getUserCount}}];t>0&&a.push({change:t,name:He.StaticQuotaName.CREATORS,type:He.QuotaUsageType.STATIC,opts:{valueFn:ya.users.getCreatorCount}});let n=await qt(a);return await Kt(),n},lr=async(e,t)=>{let r=[{change:e,name:He.StaticQuotaName.USERS,type:He.QuotaUsageType.STATIC,opts:{valueFn:ya.users.getUserCount}}];t>0&&r.push({change:t,name:He.StaticQuotaName.CREATORS,type:He.QuotaUsageType.STATIC,opts:{valueFn:ya.users.getCreatorCount}}),await ga(r),await Kt()};var Tn=require("@budibase/types"),En=async e=>qt({change:e,name:Tn.MonthlyQuotaName.BUDIBASE_AI_CREDITS,type:Tn.QuotaUsageType.MONTHLY});var nt={};w(nt,{addAppBuilder:()=>Yx,db:()=>Ce,removeAppBuilder:()=>Hx});var Aa=require("@budibase/backend-core");var j={};w(j,{addAppBuilder:()=>Os,addUsers:()=>vn,adjustGroupCreatorsQuotas:()=>Vx,cleanupApp:()=>Kx,enrichUserRolesFromGroups:()=>$x,fetch:()=>ha,get:()=>bt,getBulk:()=>Df,getGroupBuilderAppIds:()=>qf,getGroupRoleId:()=>Wx,remove:()=>_s,removeAppBuilder:()=>Ls,removeUsers:()=>xs,save:()=>dr,updateGroupApps:()=>Cs});var x=require("@budibase/backend-core");var Cf=require("@budibase/backend-core"),Rn=class extends Cf.HTTPError{constructor(t){super(`Group name "${t}" is unavailable`,409)}};async function Pf(e,t){try{let r=[];for(let i of e)if(i.roles){let p=i.roles[x.db.getProdAppID(t)];p&&r.push(p)}let a=await Promise.all(r.map(async i=>({[i]:await x.roles.roleToNumber(i)}))),n,o,s={};a.forEach(i=>{let[p,f]=Object.entries(i)[0];s[p]={roleId:p,roleNum:f}});for(let{roleId:i,roleNum:p}of Object.values(s))(o===void 0||p>o)&&(o=p,n=i);return n}catch(r){throw x.logging.logAlert(`Error finding higest role for ${e.length} on app ${t}`,r),r}}async function Uf(e,t){return t?t=t.filter(r=>e.includes(r._id)):t=await M.getBulk(e,{enriched:!1}),t}async function qf(e,t){if(!e.userGroups)return[];let r=await Uf(e.userGroups,t?.groups),a=t?.appId?x.db.getProdAppID(t?.appId):null,n=[];for(let o of r){let s=o.builder?.apps;a&&s?.includes(a)?n.push(a):a||(n=n.concat(s||[]))}return[...new Set(n)]}async function Wx(e,t,r){if(!e.userGroups)return null;let a=await Uf(e.userGroups,r?.groups),n=x.db.getProdAppID(t);return e.roles?.[n]?e.roles[n]:(a=a.filter(o=>o?.roles?Object.keys(o.roles).includes(n):!1),await Pf(a,t))}async function $x(e){if(!e||!e.userGroups)return e;let t=await Df(e.userGroups,{enriched:!1}),r=[];for(let n of t)n?.roles&&(r=r.concat(Object.keys(n.roles)));r=[...new Set(r)];for(let n of r)await x.context.doInAppContext(n,async()=>{if(e.roles[n])return;let o=await Pf(t,n);o&&(e.roles[n]=o)});let a=await qf(e,{groups:t});if(a.length&&!e.builder?.global){let n=e.builder?.apps||[];e.builder={apps:n.concat(a)}}return e}async function ha(){return await M.fetch()}async function bt(e){return await M.get(e)}async function Df(e,t={enriched:!0}){return await M.getBulk(e,t)}async function Of(e){if(await M.getByName(e))throw new Rn(e)}async function Lf(e){let t=await M.getGroupUsers(e._id);if(!t.length)return 0;let a=await x.tenancy.getGlobalDB().getMultiple(t.map(o=>o._id));return(await x.userUtils.creatorsInList(a)).filter(o=>o).length}async function dr(e){let t=[],r=!e._id,a=0;if(delete e.users,!e._id)e._id=M.generateUserGroupID(),await Of(e.name),t.push(x.events.group.created(e));else{let o=await M.get(e._id);if(o.name!==e.name&&await Of(e.name),t.push(x.events.group.updated(e)),JSON.stringify(o.roles)!==JSON.stringify(e.roles)){let s=o.users?.length||0,i=0;s>0&&(i=await Lf(o)),Object.values(e.roles).includes("CREATOR")?a=s-i:a=-s,t.push(x.events.group.permissionsEdited(e))}}await Promise.all(t);let n=()=>M.save(e);if(r)return await ws(n);{let o=await n();if(a>0)await wn(0,a);else if(a<0){let s=await Lf(e),i=Math.abs(a)-s;i>0&&await lr(0,i)}return o}}async function _s(e,t){let r;try{r=await M.get(e)}catch{throw new Error("Group not found")}let a=Object.values(r.roles||{}).includes("CREATOR"),n=()=>{};if(a){let s=x.tenancy.getGlobalDB(),i=await M.getGroupUsers(e),f=(await Promise.all(i.map(I=>s.get(I._id)))).map(I=>({...I,userGroups:I.userGroups.filter(C=>C!==e)})),g=(await x.userUtils.creatorsInList(f)).filter(I=>I).length,y=i.length-g;y&&(n=()=>lr(0,y))}let o=await M.destroy(e,t);return await x.events.group.deleted(r),await Ts(),await n(),o}async function vn(e,t){let r=await M.get(e),a=await x.users.bulkGetGlobalUsersById(t),n=[];for(let p of a)p.userGroups||(p.userGroups=[]),p.userGroups.includes(e)||n.push(p);if(!n.length)return n;let o=n.map(p=>({...p,userGroups:[...p?.userGroups||[],e]}));if(await x.users.bulkUpdateGlobalUsers(o),Object.values(r.roles||{}).includes("CREATOR")){let f=(await x.userUtils.creatorsInList(n)).filter(g=>g).length,m=n.length-f;m&&await wn(0,m)}let i=[];for(let p of t)i.push(x.cache.user.invalidateUser(p));return await Promise.all(i),await x.events.group.usersAdded(o.length,r),o}async function xs(e,t){let r=await M.get(e),a=await x.users.bulkGetGlobalUsersById(t),n=[];for(let i of a){if(!i.userGroups||!i.userGroups.includes(e))continue;let p=i.userGroups.indexOf(e);i.userGroups.splice(p,1),n.push(i)}if(await x.users.bulkUpdateGlobalUsers(n),Object.values(r.roles||{}).includes("CREATOR")){let p=(await x.userUtils.creatorsInList(n)).filter(m=>m).length,f=n.length-p;f&&await lr(0,f)}let s=[];for(let i of t)s.push(x.cache.user.invalidateUser(i));return await Promise.all(s),n.length&&await x.events.group.usersDeleted(n.length,r),n}async function Cs(e,t){let r=await bt(e);if(r.roles||(r.roles={}),t.appsToAdd)for(let a of t.appsToAdd)r.roles[a.appId]=a.roleId;if(t.appsToRemove)for(let a of t.appsToRemove)delete r.roles[a.appId];return await dr(r)}async function 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 Pt())throw new Error("Feature not enabled, please check license");let r=x.db.getProdAppID(t),a=await bt(e);a.builder??={apps:[]},a.builder.apps.includes(t)||(a.builder.apps.push(r),await dr(a))}async function Ls(e,t){if(!await Pt())throw new Error("Feature not enabled, please check license");let r=x.db.getProdAppID(t),a=await bt(e);a.builder?.apps.includes(t)&&(a.builder.apps=a.builder.apps.filter(n=>n!==r),await dr(a))}async function Vx(){if(!await hs()){let e=x.tenancy.getGlobalDB(),r=(await ha()||[]).filter(a=>Object.values(a?.roles||{}).includes("CREATOR"));for(let a of r){let n=await M.getGroupUsers(a._id),s=(await Promise.all(n.map(m=>e.get(m._id)))).map(m=>({...m,userGroups:m.userGroups.filter(g=>g!==a._id)})),p=(await x.userUtils.creatorsInList(s)).filter(m=>m).length,f=n.length-p;await M.save({...a,roles:{}}),f&&await lr(0,f)}}}Aa.users.UserDB.init(ze,j,Me);var Ce=Aa.users.UserDB;async function Yx(e,t){if(!await Pt())throw new Error("Feature not enabled, please check license");await Aa.users.addAppBuilder(e,t)}async function Hx(e,t){if(!await Pt())throw new Error("Feature not enabled, please check license");await Aa.users.removeAppBuilder(e,t)}var Cn={};w(Cn,{logs:()=>Ms});var Ms={};w(Ms,{logSearch:()=>nC,oldestLogDate:()=>Qf,storeLog:()=>oC});var Ff=require("@budibase/types"),xn=require("@budibase/backend-core");var _n=require("@budibase/types");var Z=require("@budibase/backend-core");var Nf=require("@budibase/backend-core");async function Bf(e,t){let r,a=5,n=!1,o,s=!0;for(;a>0;a--)try{s?o=await e():o=await exports.randomDelay(e),n=!0;break}catch(i){r=i}return n||Nf.logging.logWarn(`Failed to backoff: ${t}`,r),o}var{SEPARATOR:ot,UNICODE_MAX:zx,DocumentType:Mf,AutomationViewMode:Ps,ViewName:Jx,getQueryIndex:Xx}=Z.db,Zx=new Date(0).toISOString(),eC=100,Us=async()=>Ka(_n.ConstantQuotaName.AUTOMATION_LOG_RETENTION_DAYS);function kf(e,t,{status:r,automationId:a}={},n={}){let o=a?`${a}${ot}`:"",s=r?`${r}${ot}`:"",i;return r&&a?i=`${Ps.ALL}${ot}${s}${o}`:r?i=`${Ps.STATUS}${ot}${s}`:a?i=`${Ps.AUTOMATION}${ot}${o}`:i=`${Mf.AUTOMATION_LOG}${ot}`,{...n,descending:!0,startkey:`${i}${t}${zx}`,endkey:`${i}${e}`}}function tC(e,t,r){return`${Mf.AUTOMATION_LOG}${ot}${e}${ot}${r}${ot}${t}`}async function qs(e,t,r={docs:!0}){let a=Z.context.getProdAppDB();await a.exists()||(a=Z.context.getDevAppDB());let n={status:r.status},o=r?.limit?r.limit:r?.paginate?9+1:void 0,s=kf(e,t,n,{include_docs:r.docs,limit:o});r?.page&&(s.startkey=r.page);let i=await a.allDocs(s);return Or(i,{paginate:r?.paginate,pageSize:9})}async function Ds(e,t,r={}){let a=Z.context.getProdAppDB();await a.exists()||(a=Z.context.getDevAppDB());let n;try{let o={automationId:r?.automationId,status:r?.status},s=kf(e,t,o,{include_docs:!0,limit:9+1});r?.page&&(s.startkey=r.page),n=await a.query(Xx(Jx.AUTOMATION_LOGS),s)}catch(o){if(o!=null&&(o.name==="not_found"||o.error==="not_found"))return await pp(),Ds(e,t,r);throw o}return Or(n,{paginate:!0,pageSize:9})}async function Gf(e,t){let r=Z.context.getProdAppDB(),a=e._id,n=e.name,o=new Date().toISOString(),s=tC(o,t.status,a),i={...t,automationId:a,status:t.status,automationName:n,createdAt:o,_id:s};return await r.put(i),s}async function Ns(e,{clearing:t}={clearing:!1}){let r=Z.context.getProdAppDB();await Bf(async()=>{let a=await r.get(Z.db.DocumentType.APP_METADATA);for(let n of e){let o=n.split(Z.db.SEPARATOR),s=`${o[o.length-3]}${Z.db.SEPARATOR}${o[o.length-2]}`,i={};a.automationErrors&&(i=a.automationErrors),Array.isArray(i[s])||(i[s]=[]);let p=i[s].indexOf(n);t&&p!==-1?i[s].splice(p,1):i[s].push(n),i[s].length===0&&delete i[s],a.automationErrors=i}await r.put(a),await Z.cache.app.invalidateAppMetadata(a.appId,a)},"Failed to update app metadata with automation log error")}async function rC(){let e=await Us();try{return await qs(Zx,e,{docs:!1,paginate:!1,limit:eC})}catch{return{data:[],hasNextPage:!1}}}async function Bs(){let e=Z.context.getProdAppDB();try{let t=await rC();if(!t.data||t.data.length===0)return;let r=t.data.map(n=>({_id:n.id,_rev:n.value.rev,_deleted:!0})),a=t.data.filter(n=>{let o=n.id.split(Z.db.SEPARATOR);return o[o.length-1]===_n.AutomationStatus.ERROR}).map(n=>n.id);await e.bulkDocs(r),a.length&&await Ns(a,{clearing:!0})}catch(t){Z.logging.logAlert(`Failed to cleanup automation log history - Database "${e.name}"`,t)}}var Qf=Us;async function aC(e,t,r,a){let n,o=new Date().toISOString(),s=await Qf();return(!e||e<s)&&(e=s),r||t?n=await Ds(e,o,{automationId:r,status:t,page:a}):n=await qs(e,o,{status:t,page:a,docs:!0,paginate:!0}),n}async function nC(e){return await Bs(),await aC(e.startDate,e.status,e.automationId,e.page)}async function oC(e,t){if(!xn.db.isProdAppID(xn.context.getAppId()))return;let r=await Gf(e,t);t.status===Ff.AutomationStatus.ERROR&&await Ns([r]),await Bs()}var On={};w(On,{checkPluginQuotas:()=>uC,deletePlugin:()=>iC,storePlugin:()=>sC});var Kf=require("@budibase/types"),J=require("@budibase/backend-core");var jf=P(require("fs")),Wf=require("path");function $f(e,t){return jf.default.readFileSync((0,Wf.join)(e,t),"utf8")}async function sC(metadata,directory,source){let db=J.tenancy.getGlobalDB(),version=metadata.package.version,name=metadata.package.name,description=metadata.package.description,hash=metadata.schema.hash,bucketPath=J.objectStore.getPluginS3Dir(name),files=await J.objectStore.uploadDirectory(J.objectStore.ObjectStoreBuckets.PLUGINS,directory,bucketPath),jsFile=files.find(e=>e.name.endsWith(".js")),iconFile=files.find(e=>e.name.endsWith(".svg"));if(!jsFile)throw new Error("Plugin missing .js file.");if(metadata.schema.type===Kf.PluginType.DATASOURCE){let js=$f(directory,jsFile.name);try{eval(js)}catch(e){let t=e?.message?e.message:JSON.stringify(e);throw new Error(`JS invalid: ${t}`)}}let iconFileName=iconFile?iconFile.name:null,pluginId=J.db.generatePluginID(name),rev;try{rev=(await db.get(pluginId))._rev}catch(e){rev=void 0}let doc={_id:pluginId,_rev:rev,...metadata,name,version,hash,description,source};iconFileName&&(doc.iconFileName=iconFileName),source&&(doc={...doc,source});let write=async()=>{let e=await db.put(doc);return await J.events.plugin.imported(doc),{...doc,_rev:e.rev}};return rev?await write():await Es(write)}async function iC(e){let t=J.tenancy.getGlobalDB();try{let r=await t.get(e),a=J.objectStore.getPluginS3Dir(r.name);await J.objectStore.deleteFolder(J.objectStore.ObjectStoreBuckets.PLUGINS,a),await t.remove(e,r._rev),await J.events.plugin.deleted(r),await Rs()}catch(r){let a=r?.message?r?.message:r;throw new Error(`Failed to delete plugin: ${a}`)}}async function uC(){let e=J.tenancy.getGlobalDB();try{let r=(await e.allDocs(J.db.getPluginParams())).rows.length;console.log(`Syncing plugin count: ${r}`),await vs(r)}catch(t){J.logging.logAlert("Unable to retrieve plugins for quota check",t)}}var Je={};w(Je,{fetch:()=>cC,fetchValues:()=>lC,isEncryptionKeyAvailable:()=>pC,isValid:()=>Hf,remove:()=>fC,update:()=>dC});var ba=require("@budibase/types"),Vf=require("@budibase/backend-core");function pC(){return!!Vf.env.ENCRYPTION_KEY}async function cC(){let e=await _t.get();return Object.keys(e.variables)}async function lC(e){let r=(await _t.get()).variables,a={};for(let[n,o]of Object.entries(r))switch(e){case ba.AppEnvironment.DEVELOPMENT:a[n]=o.development;break;case ba.AppEnvironment.PRODUCTION:default:a[n]=o.production;break}return a}async function Yf(e){if(!(await Ve.cache.getCachedLicense()).features.includes(ba.Feature.ENVIRONMENT_VARIABLES))throw new Error("User does not have access to environment variables feature.");let r=await _t.get();r.variables=e(r.variables),await _t.update(r)}async function dC(e,t){if(Hf(e))await Yf(a=>(a[e]=t,a));else throw new Error("Variable name has characters that are not allowed")}async function fC(e){await Yf(t=>(delete t[e],t))}function Hf(e){return/^[a-zA-Z0-9-_]+$/.test(e)}var It={};w(It,{definitions:()=>EC,download:()=>TC,fetch:()=>wC,write:()=>IC});var Pn=require("@budibase/types");var V=require("@budibase/backend-core"),Ge=require("@budibase/types");var zf=require("memorystream"),Jf=new V.sql.Sql(Ge.SqlClient.SQL_LITE);async function mC(e,t,r){let a={operation:Ge.Operation.READ,table:$t.searchTable(),tables:{},paginate:{limit:r||9,page:t},filters:e,resource:{fields:[]},sort:{timestamp:{direction:Ge.SortOrder.DESCENDING,type:Ge.SortType.STRING}}},n=Jf._query(a);if(Array.isArray(n))throw new Error("Cannot execute multiple queries for audit log search");return{sql:n.sql,bindings:n.bindings}}function gC(e){return`${V.DocumentType.AUDIT_LOG}${V.SEPARATOR}${e}${V.SEPARATOR}${V.utils.newid()}`}async function Xf(e){e._id||(e._id=gC(e.timestamp)),e.type||(e.type=Ge.AUDIT_LOG_TYPE);try{let r=await V.context.getAuditLogsDB().put(e);return{...e,_rev:r.rev}}catch(t){V.logging.logAlert("Failed to write audit log",t)}}async function ks(e,t,r){t||(t=1);let a=V.context.getAuditLogsDB();try{let n=9+1,o=await mC(e,t,n),s=$t.searchTable(),i=Jf.convertJsonStringColumns(s,await a.sql(o.sql,o.bindings)),p;i.length>n&&(p=i.pop());let f={rows:i,hasNextPage:!!p};return f.hasNextPage&&(f.bookmark=t+1),f}catch(n){if(n.status===404&&!r?.isRetry)return await yC(),await Zu(),await ks(e,t,{isRetry:!0});throw n}}async function yC(){let e=V.context.getAuditLogsDB(),r=(await e.allDocs(V.db.getDocParams(V.DocumentType.AUDIT_LOG,null,{include_docs:!0}))).rows.map(a=>a.doc).filter(a=>a&&!a.type).map(a=>({...a,type:Ge.AUDIT_LOG_TYPE}));await e.bulkDocs(r)}function Zf(e){let t=V.context.getAuditLogsDB(),r=new zf,a=t.dump(r,{filter:o=>{let s=o;if(!s._id?.startsWith(V.DocumentType.AUDIT_LOG))return!1;let i=!0,p=(f,m)=>{!f||f.length===0||(i=!!(i&&m&&f.includes(m)))};if(p(e.userIds,s.userId),p(e.appIds,s.appId),p(e.events,s.event),(e.startDate||e.endDate)&&(i=i&&s.timestamp>=e.startDate&&s.timestamp<=e.endDate),e.fullSearch){let f=JSON.stringify(o);i=i&&f.includes(e.fullSearch)}return i}}),n=new zf;return r.on("data",o=>{let s=JSON.parse(Buffer.from(o).toString());if(Array.isArray(s.docs)){let i="";for(let p of s.docs)i+=JSON.stringify(p)+`
38
- `;n.write(i)}}),r.on("end",()=>{n.end()}),{promise:a,stream:n}}var me=require("@budibase/backend-core");var Ln=require("@budibase/types"),Ia=require("@budibase/string-templates"),Sa=require("@budibase/backend-core"),AC=Sa.constants.MIN_VALID_DATE.toISOString(),bC=Sa.constants.MAX_VALID_DATE.toISOString();function Gs(e){return(e.startDate||e.endDate)&&(e.startDate=e.startDate||AC,e.endDate=e.endDate||bC),e}async function em(e){Array.isArray(e.appIds)&&(e.appIds=e.appIds.map(a=>Sa.db.getProdAppID(a)));let t={};function r(a,n){n?.length&&(t.oneOf={...t.oneOf,[a]:n})}return r("userId",e.userIds),r("appId",e.appIds),r("event",e.events),e.fullSearch&&(t.fuzzyOr=!0,t.fuzzy={name:e.fullSearch,fallback:e.fullSearch}),(e.startDate||e.endDate)&&(e=Gs(e),t.range={timestamp:{high:e.endDate,low:e.startDate}}),Object.keys(t).length===0&&(t.notEmpty={event:!0}),t}function Fs(e,t,r){let a={_id:e,status:Ln.AuditLogResourceStatus.DELETED};switch(t){case"app":a.name=r?.appName;break;case"user":a.email=r?.email;break}return a}function Qs(e){let t=(0,Ia.findHBSBlocks)(e);for(let r of t){let a=` "${r}"`;e=e.replace(e.includes(a)?a:` ${r}`,""),e=(0,Ia.processStringSync)(e,{})}return e}function tm(e,t){let r=Ln.AuditedEventFriendlyName[e];if(!r)throw new Error("No friendly name found.");let a=(0,Ia.processStringSync)(r,t);return a.includes('""')&&(a=Qs(r)),a}async function IC(e,t,r){if(!await An()||!me.utils.isAudited(e))return;let a=tm(e,t),n=new Date;r?.timestamp&&(n=new Date(r.timestamp));let o={timestamp:n.toISOString(),event:e,name:a,userId:r?.userId||Pn.AuditLogSystemUser,metadata:{...t,...r?.hostInfo}},s={};try{if(r?.appId){o.appId=me.db.getProdAppID(r.appId);let i=await me.cache.app.getAppMetadata(r.appId);"name"in i&&(s.appName=i.name)}if(r?.userId){let i=await me.users.getById(r?.userId);s.email=i.email}}catch(i){me.logging.logAlert("Failed to retrieve fallback information for audit log",i)}return o.fallback=s,await Xf(o)}async function SC(e){let t=e.map(i=>i.userId),a=e.filter(i=>i.appId).map(i=>me.db.getDevAppID(i.appId)),n=await me.users.bulkGetGlobalUsersById([...new Set(t)],{cleanup:!0}),o=await me.db.getAppsByIDs([...new Set(a)]),s=[];for(let i of e){let p=n.find(g=>g?._id===i.userId),f=o.find(g=>me.db.isSameAppID(g?.appId,i.appId)),m={event:i.event,timestamp:i.timestamp,name:i.name,metadata:i.metadata,user:p||Fs(i.userId,"user",i.fallback)};i.appId&&(m.app=f||Fs(i.appId,"app",i.fallback)),s.push(m)}return s}async function wC(e){if(!await An())throw new Error("Audit logs not available - license required.");let t=await em(e);if(typeof e.bookmark=="string")throw new Error("String based bookmark not supported.");let r=await ks(t,e.bookmark);return{hasNextPage:r.hasNextPage,bookmark:r.bookmark,data:await SC(r.rows)}}function TC(e){return e=Gs(e),Zf(e)}function EC(){let e=Object.entries(Pn.AuditedEventFriendlyName).filter(r=>r[1]!=null),t={};for(let r of e)t[r[0]]=Qs(r[1]);return t}var Un={};w(Un,{applications:()=>Vs,roles:()=>$s,users:()=>Ws});var Ws={};w(Ws,{roleCheck:()=>vC});function RC(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 vC(e,t){return await rt()||RC(e,t),e}var $s={};w($s,{assign:()=>_C,unAssign:()=>xC});var wa=require("@budibase/backend-core");async function _C(e,t){if(!await rt())throw new Error("Unable to assign roles - license required.");let r=await Ce.bulkGet(e);for(let a of r){if(t.role&&t.role.roleId){let n=wa.db.getProdAppID(t.role.appId);a.roles[n]=t.role.roleId}if(t.appBuilder){let n=wa.db.getProdAppID(t.appBuilder.appId),o=a.builder?.apps||[];a.builder={apps:o.concat([n])}}t.builder&&(a.builder={global:!0}),t.admin&&(a.admin={global:!0}),a.roles}await Ce.bulkUpdate(r)}async function xC(e,t){if(!await rt())throw new Error("Unable to un-assign roles - license required.");let r=await Ce.bulkGet(e);for(let a of r){if(t.role){let n=wa.db.getProdAppID(t.role?.appId);a.roles[n]===t.role.roleId&&delete a.roles[n]}if(t.appBuilder&&a.builder?.apps){let n=wa.db.getProdAppID(t.appBuilder.appId);a.builder.apps=a.builder.apps.filter(o=>o!==n)}t.builder&&a.builder&&delete a.builder,t.admin&&a.admin&&delete a.admin}}var Vs={};w(Vs,{buildExportFn:()=>OC,buildImportFn:()=>CC});var Ks=require("@budibase/backend-core");function CC(e){return async(t,r)=>{await rt()||t.throw(403,"Endpoint unavailable, license required."),t.request.files?.appExport||t.throw(400,"Must provide app export file for import."),await Ks.context.doInAppContext(t.params.appId,async()=>{await e(t),t.body=void 0,t.status=204,await r()})}}function OC(e){return async(t,r)=>{await rt()||t.throw(403,"Endpoint unavailable, license required.");let{encryptPassword:a,excludeRows:n}=t.request.body;await Ks.context.doInAppContext(t.params.appId,async()=>{t.request.body={encryptPassword:a,excludeRows:n},t.query.appId=t.params.appId,await e(t),await r()})}}var ne=require("@budibase/backend-core"),ae=require("@budibase/types");var Ys=require("@budibase/backend-core"),rm;function am(){rm=new Ys.queue.BudibaseQueue(Ys.queue.JobQueue.APP_BACKUP,{maxStalledCount:3,jobOptions:{attempts:3,removeOnFail:!0,removeOnComplete:!0}})}function Dt(){return rm}var nm=require("path"),om=P(require("fs"));async function Hs(e,t={}){return _e.storeAppBackupMetadata(e,t)}function sm(e){let t=new Date().toISOString();switch(e){case ae.AppBackupStatus.COMPLETE:case ae.AppBackupStatus.FAILED:return{timestamp:t,finishedAt:t};case ae.AppBackupStatus.STARTED:return{timestamp:t,startedAt:t};case ae.AppBackupStatus.PENDING:return{timestamp:t,createdAt:t}}}async function LC(e,t,r,a){let n=await qn(e);return await _e.storeAppBackupMetadata({...n,...sm(t),contents:r,status:t,type:ae.AppBackupType.BACKUP},{filename:a,docId:e})}async function PC(e,t,r){let a=await qn(e);return await _e.storeAppBackupMetadata({...a,...sm(r),status:r,type:ae.AppBackupType.RESTORE,trigger:ae.AppBackupTrigger.MANUAL},{docId:e,docRev:t})}async function qn(e){return _e.getAppBackupMetadata(e)}async function UC(e,t){return _e.updateAppBackupMetadata(e,t)}async function im(e){let t=await _e.getAppBackupMetadata(e);return t.filename&&await ne.objectStore.deleteFile(ne.objectStore.ObjectStoreBuckets.BACKUPS,t.filename),_e.deleteAppBackupMetadata(e)}async function qC(e){let t=[];for(let r of e)try{await im(r),t.push({backupId:r,success:!0})}catch(a){t.push({backupId:r,success:!1,error:a instanceof Error?a.message:"Unknown error"})}return t}async function DC(e,t){return _e.fetchAppBackups(e,t)}async function um(e){let t=await _e.getAppBackupMetadata(e);if(!t.filename)throw new Error("Backup incomplete - cannot download.");let r=await ne.objectStore.getReadStream(ne.objectStore.ObjectStoreBuckets.BACKUPS,t.filename);return{metadata:t,stream:r}}async function NC(e){let{stream:t}=await um(e),r=(0,nm.join)(ne.objectStore.budibaseTempDir(),ne.utils.newid()),a=om.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 BC(e,t,r={}){let a;try{a=await Hs({appId:e,trigger:t,timestamp:new Date().toISOString(),status:ae.AppBackupStatus.PENDING,type:ae.AppBackupType.BACKUP,...r})}catch(n){if(n.status===409)return;throw n}return await Dt().add({docId:a.id,docRev:a.rev,appId:e,export:{trigger:t,...r}}),await ne.events.backup.appBackupTriggered(e,a.id,ae.AppBackupType.BACKUP,t,r?.name),a.id}async function MC(e,t,r,a){let n=await qn(t),o;try{o=await Hs({appId:e,timestamp:new Date().toISOString(),status:ae.AppBackupStatus.PENDING,type:ae.AppBackupType.RESTORE,createdBy:a})}catch(s){if(s?.status===409)return;throw s}return await Dt().add({appId:e,docId:o.id,docRev:o.rev,import:{nameForBackup:r,backupId:t,createdBy:a}}),{restoreId:o.id,metadata:n}}async function kC(e,t,r){let a=ne.db.getProdAppID(e);await ne.context.doInAppContext(a,async()=>{let n=ne.context.getProdAppDB();if(!await n.exists())return;let s=await n.tryGet(ae.DocumentType.APP_METADATA);s&&(s.backupErrors||(s.backupErrors={}),s.backupErrors[t]||(s.backupErrors[t]=[]),s.backupErrors[t].push(r),await n.put(s),await ne.cache.app.invalidateAppMetadata(s.appId,s))})}var GC={isEnabled:gs,triggerAppRestore:ce(MC),triggerAppBackup:ce(BC),getBackupDownloadStream:ce(um),downloadAppBackup:ce(NC),fetchAppBackups:ce(DC),storeAppBackupMetadata:ce(Hs),updateBackupStatus:ce(LC),updateRestoreStatus:ce(PC),getAppBackup:ce(qn),updateAppBackup:ce(UC),deleteAppBackup:ce(im),deleteAppBackups:ce(qC),trackBackupError:ce(kC)},Oe=GC;var Js={};w(Js,{init:()=>zs});var W=require("@budibase/backend-core");var Fe=require("@budibase/types");var fr=P(require("fs"));async function zs(e){Dt().process(async t=>{let r=t.data;try{if(r.export)return console.log("Exporting app backup:",r.appId,r.export.trigger),jC(t,e);if(r.import)return console.log("Importing app backup:",r.appId,r.import.backupId),QC(t,e)}catch(a){W.logging.logAlert(`Failed to perform backup for app ID: ${r.appId}`,a)}})}async function FC(e){await W.db.getDB(e,{skip_setup:!0}).destroy()}async function pm(e,t,r,a){let n=W.db.getDevAppID(r),o=W.db.getProdAppID(r),s=new Date().toISOString(),i=async(p,f)=>{a?.doc?await Oe.updateBackupStatus(a.doc.id,p,f?.contents,f?.filename):await Oe.storeAppBackupMetadata({appId:o,timestamp:s,trigger:e,status:p,name:a?.name,type:Fe.AppBackupType.BACKUP,contents:f?.contents,createdBy:a?.createdBy},{filename:f?.filename})};try{let p=await a.processing.exportAppFn(n,{tar:!0}),f=await a.processing.statsFn(n),m=`${o}/backup-${s}.tar.gz`,g=W.objectStore.ObjectStoreBuckets.BACKUPS,y=fr.default.createReadStream(p);await W.objectStore.streamUpload({bucket:g,filename:m,stream:y,extra:{type:"application/gzip",metadata:{name:a?.name,trigger:e,timestamp:s,appId:o}}}),await i(Fe.AppBackupStatus.COMPLETE,{filename:m,contents:f}),fr.default.existsSync(p)&&fr.default.rmSync(p)}catch(p){W.logging.logAlert("App backup error",p),await i(Fe.AppBackupStatus.FAILED);let f=a?.doc?.id||`backup-${s}`,m=p instanceof Error?p.message:String(p);await Oe.trackBackupError(o,f,`Backup export failed: ${m}`)}}async function QC(e,t){let r=e.data,a=r.appId,n=r.import.backupId,o=r.import.nameForBackup,s=r.import.createdBy,i=W.tenancy.getTenantIDFromAppID(a);return W.tenancy.doInTenant(i,async()=>{let p=W.db.getDevAppID(a),f=`${p}_temp_${Date.now()}`,{rev:m}=await Oe.updateRestoreStatus(r.docId,r.docRev,Fe.AppBackupStatus.STARTED);await pm(Fe.AppBackupTrigger.RESTORING,i,a,{processing:t,createdBy:s,name:o});let g=await Oe.downloadAppBackup(n),y=Fe.AppBackupStatus.COMPLETE;try{await t.importAppFn(f,W.db.getDB(f),{file:{type:"application/gzip",path:g},key:g}),await FC(p),await new W.db.Replication({source:f,target:p}).replicate()}catch(I){W.logging.logAlert("App restore error",I),y=Fe.AppBackupStatus.FAILED;let C=I instanceof Error?I.message:String(I);await Oe.trackBackupError(a,n,`Backup restore failed: ${C}`)}finally{try{await W.db.getDB(f,{skip_setup:!0}).destroy()}catch{}}await Oe.updateRestoreStatus(r.docId,m,y),fr.default.existsSync(g)&&fr.default.rmSync(g,{force:!0})})}async function jC(e,t){let r=e.data,a=r.appId,n=r.export.trigger,o=r.export.name,s=W.tenancy.getTenantIDFromAppID(a);await W.tenancy.doInTenant(s,async()=>{try{let{rev:i}=await Oe.updateBackupStatus(r.docId,Fe.AppBackupStatus.STARTED);return pm(n,s,a,{processing:t,doc:{id:r.docId,rev:i},name:o})}catch(i){W.logging.logAlert("App backup error",i);let p=i instanceof Error?i.message:String(i);await Oe.trackBackupError(a,r.docId,`Backup export failed: ${p}`)}})}var WC=async e=>{am(),await zs(e.processing)},Se={...Oe,processing:Js,init:WC,getBackupQueue:Dt};var cm=async e=>{e.backups&&await Se.init(e.backups)};var ye={};w(ye,{create:()=>BM,find:()=>NM,get:()=>DM,remove:()=>kM,update:()=>MM});var PA=P($i()),st=require("@budibase/backend-core");var UA=require("@budibase/types");async function DM(e){let t=st.tenancy.getGlobalDB(),r=new st.db.QueryBuilder(t.name,UA.SearchIndex.USER);r.setIndexBuilder(st.db.searchIndexes.createUserIndex),r.setLimit(e.pageSize),r.addEqual("scimInfo.isSync",!0);for(let[n,o]of Object.entries(e.filters?.equal??{}))r.addEqual(n,o);r.setSort("_id"),r.setSkip(e.skip);let a=await r.run();return{users:a.rows,total:a.totalRows}}async function NM(e){return await st.users.getById(e)}async function BM(e){let t=await Ce.getUserByEmail(e.email);if(t){if(t.scimInfo?.isSync)throw new st.HTTPError("User is already synched",409);e={...t,scimInfo:(0,PA.default)(t.scimInfo,e.scimInfo),password:void 0,firstName:e.firstName,lastName:e.lastName,updatedAt:e.updatedAt}}return await Ce.save(e,{requirePassword:!1})}async function MM(e,t){return await Ce.save(e,{requirePassword:!1,allowChangingEmail:t?.allowChangingEmail})}async function kM(e){return await Ce.destroy(e)}var br={};w(br,{create:()=>GM});var qA=P($i());var DA=require("@budibase/backend-core");async function GM(e){let t=await Io(e.name),r;if(!t)r=(await j.save(e)).id;else{if(t.scimInfo?.isSync)throw new DA.HTTPError("Group is already synched",409);r=t._id,t.users&&(await j.removeUsers(r,t.users.map(n=>n._id)),delete t.users),t.scimInfo=(0,qA.default)(t.scimInfo,e.scimInfo),await j.save(t)}return await j.get(r)}var Bt={};w(Bt,{logRequest:()=>FM,logResponse:()=>QM});var Ki=require("@budibase/backend-core");async function FM(e){Ki.logging.logWarn("SCIM request log",e)}async function QM(e){Ki.logging.logWarn("SCIM response error",e)}var Xi={};w(Xi,{doInScimContext:()=>Yi,feature:()=>$,internalGroupOnly:()=>_a,licenseAuth:()=>MA,licensing:()=>NA,requireSCIM:()=>Hi,scimGroupOnly:()=>va,scimUserOnly:()=>Ra});var St=require("@budibase/backend-core");var Vn=require("@budibase/types"),jM=(e={checkUsersLimit:!0})=>async(t,r)=>{if((e.licensingCheck?e.licensingCheck:()=>!!t.user)(t)){if(St.env.SELF_HOSTED&&St.env.DEFAULT_LICENSE)return t.user.license=wo,r();t.user.license=await Ve.cache.getCachedLicense(t,{populateLicense:e.populateLicense,populateFreeLicense:e.populateFreeLicense}),e.checkUsersLimit&&(St.utils.isServingApp(t)||St.utils.isServingBuilder(t)||St.utils.isServingBuilderPreview(t)||St.utils.isPublicApiRequest(t))&&await ze.usageLimitIsExceeded({name:Vn.StaticQuotaName.USERS,type:Vn.QuotaUsageType.STATIC,usageChange:0})}return r()},NA=jM;var $={};w($,{requireFeature:()=>WM,requireFeatures:()=>$M});var WM=e=>async(t,r)=>{await hn(e),await r()},$M=(...e)=>async(t,r)=>{await ms(e),await r()};var Yn=require("@budibase/backend-core");var Yi=async(e,t)=>(Yn.env.DISABLE_SCIM_CALLS||await Bt.logRequest({...e.request.toJSON(),body:e.request.body}),await Yn.context.doInScimContext(async()=>{let r=await t();return await Bt.logResponse({...e.response.toJSON(),body:e.response.body}),r}));var Hi=async(e,t)=>{await As(),await t()};var BA=require("@budibase/backend-core");var Ra=e=>zi(BA.users.getById,e,!0),va=e=>zi(M.get,e,!0),_a=e=>zi(M.get,e,!1);function zi(e,t,r){return async(a,n)=>{let o=a.params[t];return typeof o!="string"&&a.throw(404),!!(await e(o)).scimInfo?.isSync!==r&&a.throw(404),n()}}var xa=require("@budibase/backend-core");var Ji=require("dd-trace");async function MA(e,t){await Ji.tracer.trace("licenseAuth",async r=>{let a=e.request.headers[xa.constants.Header.LICENSE_KEY];Array.isArray(a)&&(a=a[0]),r.addTags({licenseKey:a}),a||e.throw(403,"License key not provided");let n=await cs(a);n||(r.addTags({licenseFound:!1}),e.throw(403,"License not found or invalid")),n.tenantId||e.throw(403,"License does not have a tenant ID"),Ji.tracer.setUser({id:"anonymous",tenantId:n.tenantId}),await xa.context.doInSelfHostTenantUsingCloud(n.tenantId,async()=>{await xa.context.doInLicenseContext(n,async()=>{await t()})})})}var iu={};w(iu,{appBackups:()=>vb,auditLogs:()=>yb,environmentVariables:()=>ib,groups:()=>XA,scim:()=>rI,users:()=>iI});var kA=require("@budibase/backend-core");async function GA(e){let t=e.request.body;if(t.name=t.name.trim(),delete t.roles,t._id){let a=await bt(t._id);t.roles=a.roles,t.scimInfo=a.scimInfo}let r=await dr(t);e.body={_id:r.id,_rev:r.rev}}async function FA(e){let t=e.params.groupId,r=e.request.body.add,a=e.request.body.remove;(r&&!Array.isArray(r)||a&&!Array.isArray(a))&&e.throw(400,"Must supply a list of users to add or to remove");let n,o;r&&(n=await vn(t,r)),a&&(o=await xs(t,a)),e.body={added:n,removed:o}}async function QA(e){let t=e.params.groupId,r=e.request.body.add,a=e.request.body.remove;(r&&!Array.isArray(r)||a&&!Array.isArray(a))&&e.throw(400,"Must supply a list of objects, with appId and roleId to add or remove"),e.body=await Cs(t,{appsToAdd:r,appsToRemove:a})}async function jA(e){e.body={data:await ha()}}async function WA(e){let{groupId:t,rev:r}=e.params;try{await _s(t,r),e.body={message:"Group deleted successfully"}}catch(a){e.throw(a.status,a)}}async function $A(e){try{e.body=await bt(e.params.groupId)}catch(t){e.throw(t.status,t)}}async function KA(e){let{pageSize:t=10,bookmark:r,emailSearch:a}=e.request.query,n=e.params.groupId,o={limit:t+1},s=await Wa(n,{...o,emailSearch:a,bookmark:r}),i=a?s[t]?.email:s[t]?._id,p=!!i;e.body={users:s.slice(0,t),bookmark:i,hasNextPage:p}}async function VA(e){let{groupId:t,appId:r}=e.params;await Os(t,r),e.body={message:"Group app builder access updated."}}async function YA(e){let{groupId:t,appId:r}=e.params;await Ls(t,r),e.body={message:"group app builder access removed."}}async function HA(e){let{groupId:t}=e.params,{csvContent:r}=e.request.body;(r===void 0||r.trim().length===0)&&e.throw(400,"CSV is empty");let a=await kA.csv.jsonFromCsvString(r,{allowSingleColumn:!0});(!a||a.length===0)&&e.throw(400,"CSV file is invalid");let o=Object.keys(a[0]).find(g=>/^(email|e-mail|email address|mail|e_mail)$/i.test(g.trim()));o||e.throw(400,"CSV file must contain an email column");let s=Array.from(new Set(a.map(g=>g[o]).filter(g=>g&&typeof g=="string"&&g.trim().length>0).map(g=>g.trim())));s.length===0&&e.throw(400,"No valid email addresses found in CSV");try{await bt(t)}catch(g){if(g.status===404)e.throw(404,"Group not found");else throw g}let i=[],p=[],f=[],m=await Promise.all(s.map(g=>Ce.getUserByEmail(g)));for(let g of s){let y=m.find(I=>I?.email===g);y?(i.push({_id:y._id,email:y.email}),f.push(y._id)):p.push({email:g,reason:"User not found"})}f.length>0&&await vn(t,f),e.body={added:i,skipped:p}}var zA=P(require("@koa/router")),le=P(require("joi"));var we=require("@budibase/types"),Le=require("@budibase/backend-core"),JA=new zA.default;function VM(){return Le.auth.joiValidator.body(le.default.object({_id:le.default.string().optional(),_rev:le.default.string().optional(),color:le.default.string().required(),icon:le.default.string().required(),name:le.default.string().trim().required().max(50),role:le.default.string().optional(),users:le.default.array().optional(),apps:le.default.array().optional(),roles:le.default.object().optional(),createdAt:le.default.string().optional(),updatedAt:le.default.string().optional()}).required())}JA.post("/api/global/groups",Le.auth.adminOnly,$.requireFeature(we.Feature.USER_GROUPS),VM(),GA).get("/api/global/groups",$.requireFeature(we.Feature.USER_GROUPS),jA).delete("/api/global/groups/:groupId/:rev",$.requireFeature(we.Feature.USER_GROUPS),Le.auth.adminOnly,_a("groupId"),WA).get("/api/global/groups/:groupId",$.requireFeature(we.Feature.USER_GROUPS),Le.auth.builderOrAdmin,$A).get("/api/global/groups/:groupId/users",$.requireFeature(we.Feature.USER_GROUPS),Le.auth.builderOrAdmin,KA).post("/api/global/groups/:groupId/users",Le.auth.adminOnly,$.requireFeature(we.Feature.USER_GROUPS),_a("groupId"),FA).post("/api/global/groups/:groupId/users/bulk",Le.auth.adminOnly,$.requireFeature(we.Feature.USER_GROUPS),_a("groupId"),Le.auth.joiValidator.body(le.default.object({csvContent:le.default.string().required()}).required()),HA).post("/api/global/groups/:groupId/apps",Le.auth.builderOrAdmin,$.requireFeature(we.Feature.USER_GROUPS),QA).post("/api/global/groups/:groupId/app/:appId/builder",Le.auth.builderOrAdmin,$.requireFeatures(we.Feature.USER_GROUPS,we.Feature.APP_BUILDERS),VA).delete("/api/global/groups/:groupId/app/:appId/builder",Le.auth.builderOrAdmin,$.requireFeatures(we.Feature.USER_GROUPS,we.Feature.APP_BUILDERS),YA);var XA=JA;var Zi=require("@budibase/types");var eu=require("@budibase/backend-core");async function ZA(e){e.body={encryptionKeyAvailable:Je.isEncryptionKeyAvailable()}}async function eb(e){e.body={variables:await Je.fetch()}}async function tb(e){let{name:t,production:r,development:a}=e.request.body;await Je.update(t,{production:r,development:a});let n=[Zi.AppEnvironment.PRODUCTION];r!==a&&n.push(Zi.AppEnvironment.DEVELOPMENT),await eu.events.environmentVariable.created(t,n),e.body={message:`Environment variable "${t}" created.`}}async function rb(e){let{production:t,development:r}=e.request.body,a=e.params.varName;await Je.update(a,{production:t,development:r}),e.body={message:`Environment variable "${a}" updated.`}}async function ab(e){let t=e.params.varName;await Je.remove(t),await eu.events.environmentVariable.deleted(t),e.body={message:`Environment variable "${t}" deleted.`}}var Mt=require("@budibase/backend-core"),ob=P(require("@koa/router")),Ca=P(require("joi")),sb=new ob.default;function nb(){return Mt.auth.joiValidator.body(Ca.default.object({name:Ca.default.string().optional(),production:Ca.default.string().required(),development:Ca.default.string().required()}))}sb.get("/api/env/variables/status",Mt.auth.builderOrAdmin,ZA).get("/api/env/variables",Mt.auth.builderOrAdmin,eb).post("/api/env/variables",Mt.auth.builderOrAdmin,nb(),tb).patch("/api/env/variables/:varName",Mt.auth.builderOrAdmin,nb(),rb).delete("/api/env/variables/:varName",Mt.auth.builderOrAdmin,ab);var ib=sb;var tu=require("@budibase/backend-core");async function ub(e){let t=e.request.body,r=await It.fetch(t);await tu.events.auditLog.filtered(t),e.body=r}async function pb(e){let t=e.request.body,{stream:r}=It.download(t);await tu.events.auditLog.downloaded(t),e.attachment(`audit-logs-${Date.now()}.log`),e.body=r}async function cb(e){e.body={events:It.definitions()}}var fb=require("@budibase/types"),kt=require("@budibase/backend-core"),mb=P(require("@koa/router")),Pe=P(require("joi"));function lb(){return kt.auth.joiValidator.body(Pe.default.object({userIds:Pe.default.array().items(Pe.default.string()).optional(),appIds:Pe.default.array().items(Pe.default.string()).optional(),events:Pe.default.array().items(Pe.default.string().valid(...Object.values(fb.Event))).optional(),startDate:Pe.default.string().optional().allow(""),endDate:Pe.default.string().optional().allow(""),fullSearch:Pe.default.string().optional().allow(""),bookmark:Pe.default.number()}))}var gb=new mb.default;gb.post("/api/global/auditlogs/search",kt.auth.adminOnly,lb(),ub).get("/api/global/auditlogs/download",kt.auth.adminOnly,kt.middleware.querystringToBody,lb(),pb).get("/api/global/auditlogs/definitions",kt.auth.adminOnly,cb);var yb=gb;var ru=require("@budibase/types");var Hn=require("@budibase/backend-core");async function Gt(e,t){t||e.throw(400,"App ID missing"),await Yt.appExists(t)||e.throw(400,`Provided app ID: ${t} - is invalid.`)}async function hb(e){let t=e.params.appId;await Gt(e,t);let r=e.request.body,a=e.user?._id,n=await Se.triggerAppBackup(t,ru.AppBackupTrigger.MANUAL,{name:r.name,createdBy:a});n||e.throw(500,"Unable to start backup."),e.body={backupId:n,message:"Backup triggered - process starting."}}async function Ab(e){let t=e.params.appId;await Gt(e,t);let r=e.params.backupId,a=e.request.body.name,n=await Se.triggerAppRestore(t,r,a,e.user?._id);n||e.throw(500,"Unable to start restore."),await Hn.events.backup.appBackupRestored(n.metadata),e.body={restoredId:n?.restoreId,message:"Restore triggered - process starting."}}async function bb(e){let t=e.params.appId;await Gt(e,t);let r=e.params.backupId;await Se.deleteAppBackup(r),e.body={message:"Backup deleted successfully."}}async function Ib(e){let t=Hn.context.getAppId();await Gt(e,t);let{backupIds:r}=e.request.body;(!Array.isArray(r)||r.length===0)&&e.throw(400,"backupIds must be a non-empty array");let a=await Se.deleteAppBackups(r),n=a.filter(s=>s.success).length,o=a.length-n;e.body={message:`${n} backups deleted successfully${o>0?`, ${o} failed`:""}.`,results:a,successCount:n,failureCount:o}}async function Sb(e){let t=e.params.appId;await Gt(e,t);let r=e.request.body;r?.trigger&&(r.trigger=r.trigger.toLowerCase(),Object.values(ru.AppBackupTrigger).includes(r.trigger)||e.throw(400,"Provided trigger is not a valid option.")),e.body=await Se.fetchAppBackups(t,{paginate:!0,...r})}async function wb(e){let t=e.params.appId;await Gt(e,t);let r=e.params.backupId,a=e.request.body;e.body=await Se.updateAppBackup(r,a.name)}async function Tb(e){let t=e.params.appId;await Gt(e,t);let r=e.params.backupId,{metadata:a,stream:n}=await Se.getBackupDownloadStream(r);e.attachment(`backup-${a.timestamp}.tar.gz`),e.body=n}var Eb=P(require("@koa/router")),Ft=P(require("joi")),zn=require("@budibase/types"),it=require("@budibase/backend-core"),Rb=new Eb.default;function JM(){return it.auth.joiValidator.body(Ft.default.object({trigger:Ft.default.string().valid(...Object.values(zn.AppBackupTrigger)),type:Ft.default.string().valid(...Object.values(zn.AppBackupType)),startDate:Ft.default.date(),endDate:Ft.default.date(),page:Ft.default.string()}))}Rb.post("/api/apps/:appId/backups",it.auth.builderOrAdmin,hb).post("/api/apps/:appId/backups/search",it.auth.builderOrAdmin,JM(),Sb).get("/api/apps/:appId/backups/:backupId/file",it.auth.builderOrAdmin,Tb).patch("/api/apps/:appId/backups/:backupId",it.auth.builderOrAdmin,wb).delete("/api/apps/:appId/backups/:backupId",it.auth.builderOrAdmin,bb).delete("/api/apps/:appId/backups",it.auth.builderOrAdmin,Ib).post("/api/apps/:appId/backups/:backupId/import",it.auth.builderOrAdmin,Ab);var vb=Rb;var tI=P(require("@koa/router"));var Jn=require("scim-patch");var xb=require("@budibase/backend-core");function _b(e,t){let r=e.request.query[t];if(r!==void 0)return+r}var Cb=async e=>{let t=_b(e,"pageSize")??20,r=_b(e,"startIndex"),a;e.request.query.filter&&(a=Y.user.userFilters(e.request.query.filter));let n=await ye.get({pageSize:t,skip:r,filters:a});e.body={schemas:["urn:ietf:params:scim:api:messages:2.0:ListResponse"],totalResults:n.total,Resources:n.users.map(Y.user.toScimUserResponse),startIndex:(r||0)+1,itemsPerPage:t}},Ob=async e=>{let{id:t}=e.params;typeof t!="string"&&e.throw(404);let r=await ye.find(t);e.body=Y.user.toScimUserResponse(r)},Lb=async e=>{let t=Y.user.fromScimUser(e.request.body);try{let r=await ye.create(t);e.body=Y.user.toScimUserResponse(r)}catch(r){throw r instanceof xb.EmailUnavailableError&&e.throw(409,"Email already in use"),r}};function XM(e){let t=e.Operations.find(r=>(r.op==="Replace"||r.op==="replace")&&r.path==="active");return t?t.value===!1||t.value?.toLowerCase?.()==="false":!1}var Pb=async e=>{let t=await ye.find(e.params.id);t||e.throw(404);let r=Y.user.toScimUserResponse(t),a=e.request.body;try{(0,Jn.patchBodyValidation)(a)}catch{}if(XM(a))return au(e);let n;try{n=(0,Jn.scimPatch)(r,a.Operations)}catch{}n||e.throw(500);let o=Y.user.fromScimUser(n);await ye.update(o,{allowChangingEmail:!0}),e.body=Y.user.toScimUserResponse(o)},au=async e=>{let{id:t}=e.params;typeof t!="string"&&e.throw(404),await ye.remove(t),e.status=204};var Vb=P(Kb()),Yb=require("@budibase/shared-core"),Xn=require("scim-patch");var Zn=require("scim2-parse-filter");function Hb(e,t){for(let r of t.split(","))delete e[r]}var zb=async e=>{let r=(await j.fetch()).filter(o=>o.scimInfo?.isSync).map(Y.group.toScimGroupResponse),{filter:a,excludedAttributes:n}=e.request.query;if(a){let o=(0,Zn.filter)((0,Zn.parse)(a));r=r.filter(o)}n&&r.forEach(o=>{Hb(o,n)}),e.body={schemas:["urn:ietf:params:scim:api:messages:2.0:ListResponse"],totalResults:r.length,Resources:r,startIndex:1,itemsPerPage:r.length}},Jb=async e=>{let t=Y.group.fromScimGroup(e.request.body),r=await br.create(t);e.body=Y.group.toScimGroupResponse(r)},Xb=async e=>{let{id:t}=e.params,r=await j.get(t),a=Y.group.toScimGroupResponse(r),{excludedAttributes:n}=e.request.query;n&&Hb(a,n),e.body=a},Zb=async e=>{let{id:t}=e.params,r=await j.get(t);await j.remove(t,r._rev),e.status=204},eI=async e=>{let{id:t}=e.params,r=await j.get(t),a=Y.group.toScimGroupResponse(r),n=e.request.body;try{(0,Xn.patchBodyValidation)(n)}catch{e.throw(400)}let{true:o,false:s}=(0,Vb.default)(n.Operations,i=>i.path==="members");if(s?.length){let i=(0,Xn.scimPatch)(a,s);i||e.throw(500);let p={...Y.group.fromScimGroup(i),_rev:r._rev};await j.save(p)}if(o?.length){let i=[],p=[];for(let{op:f,value:m}of o)switch(f){case"add":case"Add":for(let g of m)i.push(await ye.find(g.value));break;case"remove":case"Remove":for(let g of m)p.push(await ye.find(g.value));break;case"replace":case"Replace":throw new Error("Replacing members is not allowed");default:Yb.utils.unreachable(f)}i.length&&await 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"),Te=new tI.default({prefix:"/api/global/scim/v2"});Te.use(Hi);Te.use(Yi);Te.get("/users",Cb);Te.get("/users/:id",Ra("id"),Ob);Te.post("/users",Lb);Te.patch("/users/:id",Ra("id"),Pb);Te.delete("/users/:id",Ra("id"),au);Te.get("/groups",zb);Te.post("/groups",$.requireFeature(Oa.Feature.USER_GROUPS),Jb);Te.get("/groups/:id",$.requireFeature(Oa.Feature.USER_GROUPS),va("id"),Xb);Te.delete("/groups/:id",$.requireFeature(Oa.Feature.USER_GROUPS),va("id"),Zb);Te.patch("/groups/:id",$.requireFeature(Oa.Feature.USER_GROUPS),va("id"),eI);var rI=Te;var oI=P(require("@koa/router"));var nu=require("@budibase/backend-core");async function aI(e){let{userId:t,appId:r}=e.params,a=await nt.db.getUser(t);if(nu.users.isGlobalBuilder(a)){e.body={message:"User already admin - no permissions updated."};return}await nt.addAppBuilder(a,r),e.body={message:`User "${a.email}" app builder access updated.`}}async function nI(e){let{userId:t,appId:r}=e.params,a=await nt.db.getUser(t);if(nu.users.isGlobalBuilder(a)){e.body={message:"User already admin - no permissions removed."};return}await nt.removeAppBuilder(a,r),e.body={message:`User "${a.email}" app builder access removed.`}}var ou=require("@budibase/types"),su=require("@budibase/backend-core"),sI=new oI.default;sI.post("/api/global/users/:userId/app/:appId/builder",su.auth.builderOrAdmin,$.requireFeatures(ou.Feature.APP_BUILDERS),aI).delete("/api/global/users/:userId/app/:appId/builder",su.auth.builderOrAdmin,$.requireFeatures(ou.Feature.APP_BUILDERS),nI);var iI=sI;var Y={};w(Y,{group:()=>pu,user:()=>uu});var uu={};w(uu,{fromScimUser:()=>_k,toScimUserResponse:()=>Ek,userFilters:()=>xk});var eo=require("@budibase/types"),uI=require("scim2-parse-filter"),pI=require("@budibase/backend-core"),cI=require("@budibase/shared-core"),{unreachable:Tk}=cI.utils,Ek=e=>{let{isSync:t,roles:r,...a}=e.scimInfo||{},n={...a,schemas:["urn:ietf:params:scim:schemas:core:2.0:User"],id:e._id,meta:{resourceType:"User",created:new Date(e.createdAt),lastModified:new Date(e.updatedAt)},active:e.status===eo.UserStatus.ACTIVE};return(e.firstName||e.lastName)&&(n.name={formatted:[e.firstName,e.lastName].filter(o=>o).join(" "),familyName:e.lastName,givenName:e.firstName}),n},Rk=e=>!!e?.id;function vk(e){if(pI.utils.validEmail(e.userName))return e.userName;if(e.emails)return e.emails.find(t=>t.primary)?.value||e.emails[0]?.value}var _k=e=>{let t=Rk(e)?e:void 0,r=vk(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:Tk(e.active)}let n,o;return e.name?.givenName?(n=e.name?.givenName,o=e.name?.familyName):n=e.displayName,{tenantId:"",_id:t?.id,userId:t?.id,email:r,firstName:n,lastName:o,scimInfo:{...e,isSync:!0},roles:{},status:a?eo.UserStatus.ACTIVE:eo.UserStatus.INACTIVE,createdAt:t?.meta.created.getTime(),updatedAt:t?.meta.lastModified.toISOString()}},xk=e=>{let t={equal:{}},r=(0,uI.parse)(e);function a(n){switch(n.op){case"eq":{let o=n.attrPath,s;switch(o){case"emails.value":s="email";break;default:s=`scimInfo.${o}`}t.equal[s]=n.compValue;break}case"and":for(let o of n.filters)a(o);break;default:console.warn("Filter not handled",{filter:n})}}return a(r),t};var pu={};w(pu,{fromScimGroup:()=>Lk,toScimGroupResponse:()=>Ck});var Ck=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}))}),Ok=e=>!!e?.id,Lk=e=>{let t=Ok(e)?e:void 0;return{_id:t?.id,name:e.displayName,scimInfo:{externalId:e.externalId,isSync:!0},icon:"UserGroup",color:"var(--spectrum-global-color-blue-600)",createdAt:t?.meta.created.getTime(),updatedAt:t?.meta.lastModified.toISOString()}};var Uu={};w(Uu,{LLM:()=>Xe,LLMRequest:()=>K,TableGeneration:()=>Pu,agentHistoryTitleSystemPrompt:()=>Qk,agentSystemPrompt:()=>Fk,aiColumnSchemas:()=>Ou,aiTableResponseToTableSchema:()=>vu,appendAIColumns:()=>_u,classifyText:()=>du,cleanData:()=>fu,extractFileData:()=>Bk,generateAIColumns:()=>Eu,generateCode:()=>Gk,generateCronExpression:()=>mu,generateData:()=>Ru,generateJs:()=>Au,generateSQL:()=>kk,generateTables:()=>Tu,generationStructure:()=>Cu,getLLM:()=>Ua,getLLMConfig:()=>wu,getLLMOrThrow:()=>II,normalizeContentType:()=>cu,parseResponseFormat:()=>ro,sanitiseToolName:()=>Pk,searchWeb:()=>hu,sentimentAnalysis:()=>yu,summarizeText:()=>to,tableDataStructuredOutput:()=>Lu,translate:()=>gu});var La=require("@budibase/types");function Pk(e){if(e.length>64)throw new Error("Tool name must be under 64 characters long");return e.replace(/[^a-zA-Z0-9_-]/g,"_")}function cu(e){return e?e.includes("/")?e:{[La.SupportedFileType.PDF]:"application/pdf",[La.SupportedFileType.JPG]:"image/jpeg",[La.SupportedFileType.JPEG]:"image/jpeg",[La.SupportedFileType.PNG]:"image/png"}[e.toLowerCase()]||"application/octet-stream":"application/octet-stream"}var io=require("@budibase/types");var Ze=require("@budibase/backend-core"),yI=require("@budibase/types");var ao=P(require("openai"));var wt=require("@budibase/types");var lI=require("@budibase/shared-core");var Tt=P(require("dd-trace"));function lu(e,t){return t.map(r=>e[r]).join(" ")}var Xe=class{constructor({model:t,apiKey:r,maxTokens:a}){this._model=t,this._apiKey=r,this._maxTokens=a??parseInt(process.env.BUDIBASE_AI_MAX_PROMPT_TOKENS||"1000")}get model(){return this._model}get apiKey(){return this._apiKey}get maxTokens(){return this._maxTokens}async prompt(t){return await Tt.default.trace("prompt",async()=>{let r=typeof t=="string"?new K().addUserMessage(t):t,{messages:a,tokensUsed:n}=await Tt.default.trace("chatCompletion",()=>this.chatCompletion(r));return!a||a.length===0?{message:"",tokensUsed:n}:{message:a[a.length-1].content||"",tokensUsed:n}})}async chat(t){return await Tt.default.trace("chat",async()=>await this.chatCompletion(t))}async*chatStream(t){yield*this.chatCompletionStream(t)}async summarizeText(t){return Tt.default.trace("summarizeText",()=>this.prompt(to(t)))}async generateCronExpression(t){return Tt.default.trace("generateCronExpression",()=>this.prompt(mu(t)))}async operation(t,r){return Tt.default.trace("operation",a=>{a.addTags({operation:t.operation,rowId:r.id});let n=this.promptForOperation(t,r);return this.prompt(n)})}promptForOperation(t,r){let{operation:a,column:n,columns:o,language:s,categories:i,prompt:p}=t;switch(a){case wt.AIOperationEnum.SUMMARISE_TEXT:return to(lu(r,o));case wt.AIOperationEnum.CLEAN_DATA:return fu(r[n]);case wt.AIOperationEnum.TRANSLATE:return gu(r[n],s);case wt.AIOperationEnum.CATEGORISE_TEXT:if(!i)throw Error("No categories provided for categorise text operation. Please provide categories.");return du(lu(r,o),i.split(","));case wt.AIOperationEnum.SENTIMENT_ANALYSIS:return yu(r[n]);case wt.AIOperationEnum.PROMPT:return p;case wt.AIOperationEnum.SEARCH_WEB:return hu(lu(r,o));default:throw lI.utils.unreachable(a)}}async generateJs(t,r){return await Tt.default.trace("generateJs",async()=>{let{bindings:a=[],snippets:n=[]}=r||{};return await this.prompt(Au(a,n).addUserMessage(t))})}};var fI=require("@budibase/types"),bu=require("openai/helpers/zod");function ro(e){if(e)return e==="text"?{type:"text"}:e==="json"?{type:"json_object"}:e}function dI(e){if(!e)return 0;let t=e.prompt_tokens;return e.completion_tokens*3+t}var Ue=class extends Xe{constructor(r){super(r);this.client=this.getClient(r)}getClient(r){if(!r.apiKey)throw new Error("No OpenAI API key found");return new ao.default({apiKey:r.apiKey})}async uploadFile(r,a,n){let o=cu(n);if(fI.ImageContentTypes.includes(o.toLowerCase())){let p;if(Buffer.isBuffer(r))p=r;else{let m=[];for await(let g of r)m.push(g);p=Buffer.concat(m)}let f=p.toString("base64");return`data:${o};base64,${f}`}let s=await(0,ao.toFile)(r,a);return(await this.client.files.create({file:s,purpose:"assistants"})).id}async chatCompletion(r){let a={model:this.model,messages:r.messages,max_completion_tokens:this._maxTokens,response_format:ro(r.format),reasoning_effort:"minimal",verbosity:"low"};r.tools&&r.tools.length>0&&(a.tool_choice="auto",a.tools=r.tools.map(bu.zodFunction));let n=await this.client.chat.completions.create(a),o=n?.choices?.[0]?.message;if(o?.tool_calls){r.addMessage(o);let s=[];for(let i of o.tool_calls){if(i.type!=="function"||!i.function){console.warn(`[OPENAI TOOL WARN] Unsupported tool call type: ${i.type}`);continue}let p=i.function.name,f=r.findTool(p);if(!f)throw new Error(`Tool ${p} not found in prompt tools`);let m=JSON.parse(i.function.arguments);s.push(f.handler(m).then(g=>({role:"tool",tool_call_id:i.id,content:g})).catch(g=>(console.error(`[OPENAI TOOL ERROR] Tool ${p} failed in OpenAI handler:`,g),{role:"tool",tool_call_id:i.id,content:`Error: ${g.message}`})))}return r.addMessages(await Promise.all(s)),this.chatCompletion(r)}else{if(o?.content)return{messages:[...r.messages,{role:o.role,content:o.content}],tokensUsed:dI(n.usage)};throw new Error("No response found")}}async*chatCompletionStream(r){let a={model:this.model,messages:r.messages,max_tokens:this.maxTokens,response_format:ro(r.format),stream:!0};r.tools&&r.tools.length>0&&(a.tool_choice="auto",a.tools=r.tools.map(bu.zodFunction));try{let n=await this.client.chat.completions.create(a),o=null,s="",i=null;for await(let f of n){let m=f?.choices?.[0]?.delta;if(m){if(m.content&&(s+=m.content,yield{type:"content",content:m.content}),m.tool_calls&&m.tool_calls.length>0){let g=m.tool_calls[0];g.id?(o={id:g.id,name:g.function?.name||"",arguments:g.function?.arguments||""},yield{type:"tool_call_start",toolCall:{id:o.id,name:o.name,arguments:o.arguments}}):o&&g.function?.arguments&&(o.arguments+=g.function.arguments,yield{type:"tool_call_start",toolCall:{id:o.id,name:o.name,arguments:o.arguments}})}f.usage&&(i=f.usage)}}let p=i?dI(i):0;if(o){r.addMessage({role:"assistant",content:"",tool_calls:[{id:o.id,type:"function",function:{name:o.name,arguments:o.arguments}}]});let f=r.findTool(o.name);if(f)try{let m=JSON.parse(o.arguments),g=await f.handler(m);yield{type:"tool_call_result",toolResult:{id:o.id,result:g}},r.addMessage({role:"tool",tool_call_id:o.id,content:g}),yield*this.chatCompletionStream(r);return}catch(m){yield{type:"tool_call_result",toolResult:{id:o.id,result:`Error: ${m.message}`,error:m.message}},r.addMessage({role:"tool",tool_call_id:o.id,content:`Error: ${m.message}`}),yield*this.chatCompletionStream(r);return}else{let m=`Tool '${o.name}' not found`;yield{type:"tool_call_result",toolResult:{id:o.id,result:m,error:m}},r.addMessage({role:"tool",tool_call_id:o.id,content:m}),yield*this.chatCompletionStream(r);return}}s&&r.addMessage({role:"assistant",content:s}),yield{type:"done",messages:r.messages,tokensUsed:p}}catch(n){yield{type:"error",content:n.message}}}};var ee=require("@budibase/backend-core"),mI=require("@budibase/types");var Iu=require("dd-trace"),no=class extends Xe{async prompt(t){let r=await super.prompt(t);return r.tokensUsed&&await En(r.tokensUsed),r}async chat(t){let r=await super.chat(t);return r.tokensUsed&&await En(r.tokensUsed),r}async uploadFile(t,r,a){return ee.env.SELF_HOSTED?this.uploadFileSelfHost(t,r,a):this.uploadFileCloud(t,r,a)}async uploadFileCloud(t,r,a){return new Ue({apiKey:ee.env.OPENAI_API_KEY,model:this.model,max_completion_tokens:this.maxTokens}).uploadFile(t,r,a)}async uploadFileSelfHost(t,r,a){let n;if(Buffer.isBuffer(t))n=t;else{let p=[];for await(let f of t)p.push(f);n=Buffer.concat(p)}let o=n.toString("base64");if(a&&mI.ImageContentTypes.includes(a.toLowerCase()))return`data:image/jpeg;base64,${o}`;if(!ee.env.BUDICLOUD_URL)throw new Error("No Budibase URL found");if(!this._apiKey){let p=await gn();if(!p)throw new Error("No license key found");this._apiKey=p}let s=await fetch(`${ee.env.BUDICLOUD_URL}/api/ai/upload-file`,{method:"POST",headers:{"Content-Type":"application/json",[ee.constants.Header.LICENSE_KEY]:this._apiKey},body:JSON.stringify({data:o,filename:r,contentType:a})});if(!s.ok)throw await ee.HTTPError.fromResponse(s);return(await s.json()).fileId}async chatCompletion(t){return ee.env.SELF_HOSTED?this.chatCompletionSelfHost(t):this.chatCompletionCloud(t)}async chatCompletionCloud(t){return await Iu.tracer.trace("chatCompletionCloud",async()=>await new Ue({apiKey:ee.env.OPENAI_API_KEY,model:this.model,max_completion_tokens:this.maxTokens}).chatCompletion(t))}async chatCompletionSelfHost(t){return await Iu.tracer.trace("chatCompletionSelfHost",async r=>{if(!ee.env.BUDICLOUD_URL)throw new Error("No Budibase URL found");if(r.addTags({budicloudUrl:ee.env.BUDICLOUD_URL}),!this._apiKey){let o=await gn();if(!o)throw new Error("No license key found");this._apiKey=o,r.addTags({licenseKey:this._apiKey})}let a={messages:t.messages,format:t.format,useTools:t.tools.length>0},n=await fetch(`${ee.env.BUDICLOUD_URL}/api/ai/chat`,{method:"POST",headers:{"Content-Type":"application/json",[ee.constants.Header.LICENSE_KEY]:this._apiKey},body:JSON.stringify(a)});if(!n.ok)throw await ee.HTTPError.fromResponse(n);return await n.json()})}async*chatCompletionStream(t){ee.env.SELF_HOSTED?yield*this.chatCompletionStreamSelfHost(t):yield*this.chatCompletionStreamCloud(t)}async*chatCompletionStreamCloud(t){yield*new Ue({apiKey:ee.env.OPENAI_API_KEY,model:this.model,max_completion_tokens:this.maxTokens}).chatCompletionStream(t)}async*chatCompletionStreamSelfHost(t){try{let r=await this.chatCompletionSelfHost(t);if(r.messages.length>0){let a=r.messages[r.messages.length-1];a.content&&(yield{type:"content",content:a.content})}yield{type:"done",messages:r.messages,tokensUsed:r.tokensUsed}}catch(r){yield{type:"error",content:r.message}}}};var Pa=require("dd-trace");var Su=P(require("@anthropic-ai/sdk"));function Uk(e){if(!e)return 0;let t=e.input_tokens;return e.output_tokens*3+t}var oo=class extends Xe{constructor(r){super(r);this.client=new Su.default({apiKey:r.apiKey})}firstTextBlock(r){for(let a of r.content)if(a.type==="text")return a.text}async uploadFile(r,a,n){throw new Error("File upload not supported for this LLM provider")}async chatCompletion(r){try{let a=await this.client.messages.create({model:this.model,messages:r.messages.map(({content:o})=>{if(o==null)return{role:"user",content:""};if(typeof o=="string")return{role:"user",content:o};let s="";for(let i of o)i.type==="text"?s+=i.text:["image_url","input_audio","file"].includes(i.type);return{role:"user",content:s}}),max_tokens:this.maxTokens}),n=this.firstTextBlock(a)||"";return{messages:[...r.messages,{role:"assistant",content:n}],tokensUsed:Uk(a.usage)}}catch(a){throw a instanceof Su.default.APIError&&console.error(`Anthropic Prompt failed with error ${a.name} and status: ${a.status}`),a}}async*chatCompletionStream(r){try{let a=await this.chatCompletion(r);if(a.messages.length>0){let n=a.messages[a.messages.length-1];n.content&&(yield{type:"content",content:n.content})}yield{type:"done",messages:a.messages,tokensUsed:a.tokensUsed}}catch(a){yield{type:"error",content:a.message}}}};var hI=require("zod"),AI=require("openai/helpers/zod");var gI=require("openai"),so=class extends Ue{getClient(t){if(!t.apiKey)throw new Error("No Azure OpenAI API key found");if(!t.model)throw new Error("No Azure OpenAI model specified");return new gI.AzureOpenAI({apiKey:t.apiKey,apiVersion:"2024-10-01-preview",baseURL:t.baseUrl})}};var bI="gpt-5-mini",qk={OpenAI:Ue,TogetherAI:Ue,AzureOpenAI:so,Custom:Ue,Anthropic:oo,BudibaseAI:no};async function Dk(){return await Pa.tracer.trace("getAIConfig",async e=>{let t={type:yI.ConfigType.AI,config:{}};if(!Ze.context.isSelfHostUsingCloud()){let a=await Ze.configs.getAIConfig();a&&(t=a)}await bs(t);let r=Object.values(t.config).find(a=>a.active&&a.isDefault);if(!r){e.addTags({enabled:!1,reason:"no provider found"});return}return e.addTags({enabled:!0}),{provider:r.provider,model:r.defaultModel||bI,apiKey:r.apiKey,baseUrl:r.baseUrl}})}async function Nk(){return Pa.tracer.trace("getSelfHostOpenAIKeyConfig",e=>{if(!Ze.env.SELF_HOSTED){e.addTags({enabled:!1,reason:"not self host"});return}if(!Ze.env.OPENAI_API_KEY){e.addTags({enabled:!1,reason:"no OPENAI_API_KEY"});return}return e.addTags({enabled:!0}),{provider:"OpenAI",model:bI,apiKey:Ze.env.OPENAI_API_KEY}})}async function wu(){return Pa.tracer.trace("getLLMConfig",async()=>await Dk()||await Nk())}async function Ua(e){return await Pa.tracer.trace("getLLM",async t=>{let{model:r,maxTokens:a}=e||{},n=await wu();if(!n){t.addTags({enabled:!1,reason:"no config found"});return}r&&(n.model=r),a&&(n.maxTokens=a);let o=qk[n.provider];if(!o){t.addTags({enabled:!1,reason:"no provider found",provider:n.provider});return}return new o(n)})}async function II(){let e=await Ua();if(!e)throw new Ze.HTTPError("No available LLM configurations",500);return e}var K=class e{constructor(){this.messages=[];this.tools=[]}addTool(t){return this.tools.push(t),this}addTools(t){return this.tools.push(...t),this}findTool(t){return this.tools.find(r=>r.name===t)}withFormat(t){return t instanceof hI.z.ZodType?this.format=(0,AI.zodResponseFormat)(t,"key"):this.format=t,this}addMessage(t){return this.messages.push(t),this}addMessages(t){return this.messages.push(...t),this}addUserMessage(t){return this.messages.push({role:"user",content:t}),this}addSystemMessage(t){return this.messages.push({role:"system",content:t}),this}static fromRequest(t){let r=new e;return t.messages&&r.addMessages(t.messages),t.format&&r.withFormat(t.format),r}};var ut=require("zod");function to(e,t){let r=`Summarize this text:
37
+ `;function Vr(e){return _o.default.verify(e,_S,{algorithms:["RS256"]})}function xS(e,t){return _o.default.sign(t,e,{encoding:"utf-8",algorithm:"RS256"})}var Ja={};w(Ja,{getFeatures:()=>xo});var c=require("@budibase/types");var CS={[c.PlanType.FREE]:[...Ae.SELF_FREE_LICENSE.features],[c.PlanType.PREMIUM]:void 0,[c.PlanType.PREMIUM_PLUS]:[c.Feature.APP_BACKUPS,c.Feature.BRANDING,c.Feature.SYNC_AUTOMATIONS,c.Feature.APP_BUILDERS,c.Feature.VIEW_PERMISSIONS,c.Feature.TRIGGER_AUTOMATION_RUN,c.Feature.VIEW_READONLY_COLUMNS,c.Feature.AI_CUSTOM_CONFIGS,c.Feature.PDF,c.Feature.BUDIBASE_AI],[c.PlanType.PREMIUM_PLUS_TRIAL]:[c.Feature.APP_BACKUPS,c.Feature.BRANDING,c.Feature.SYNC_AUTOMATIONS,c.Feature.APP_BUILDERS,c.Feature.VIEW_PERMISSIONS,c.Feature.TRIGGER_AUTOMATION_RUN,c.Feature.VIEW_READONLY_COLUMNS,c.Feature.AI_CUSTOM_CONFIGS,c.Feature.PDF,c.Feature.BUDIBASE_AI],[c.PlanType.PRO]:[c.Feature.USER_GROUPS,c.Feature.APP_BACKUPS],[c.PlanType.TEAM]:[c.Feature.USER_GROUPS,c.Feature.APP_BACKUPS],[c.PlanType.BUSINESS]:[c.Feature.USER_GROUPS,c.Feature.APP_BACKUPS,c.Feature.ENVIRONMENT_VARIABLES,c.Feature.AUDIT_LOGS,c.Feature.BRANDING,c.Feature.SYNC_AUTOMATIONS,c.Feature.APP_BUILDERS,c.Feature.EXPANDED_PUBLIC_API,c.Feature.VIEW_PERMISSIONS,c.Feature.PDF,c.Feature.BUDIBASE_AI],[c.PlanType.ENTERPRISE_BASIC]:[c.Feature.USER_GROUPS,c.Feature.APP_BACKUPS,c.Feature.ENVIRONMENT_VARIABLES,c.Feature.ENFORCEABLE_SSO,c.Feature.AUDIT_LOGS,c.Feature.BRANDING,c.Feature.SYNC_AUTOMATIONS,c.Feature.OFFLINE,c.Feature.APP_BUILDERS,c.Feature.EXPANDED_PUBLIC_API,c.Feature.VIEW_PERMISSIONS,c.Feature.TRIGGER_AUTOMATION_RUN,c.Feature.SCIM,c.Feature.VIEW_READONLY_COLUMNS,c.Feature.AI_CUSTOM_CONFIGS,c.Feature.PWA,c.Feature.CUSTOM_APP_SCRIPTS,c.Feature.PDF,c.Feature.BUDIBASE_AI,c.Feature.RECAPTCHA,c.Feature.PKCE_OIDC],[c.PlanType.ENTERPRISE_BASIC_TRIAL]:[c.Feature.USER_GROUPS,c.Feature.APP_BACKUPS,c.Feature.ENVIRONMENT_VARIABLES,c.Feature.ENFORCEABLE_SSO,c.Feature.BRANDING,c.Feature.SYNC_AUTOMATIONS,c.Feature.APP_BUILDERS,c.Feature.EXPANDED_PUBLIC_API,c.Feature.VIEW_PERMISSIONS,c.Feature.TRIGGER_AUTOMATION_RUN,c.Feature.SCIM,c.Feature.VIEW_READONLY_COLUMNS,c.Feature.AI_CUSTOM_CONFIGS,c.Feature.PWA,c.Feature.CUSTOM_APP_SCRIPTS,c.Feature.PDF,c.Feature.BUDIBASE_AI,c.Feature.RECAPTCHA,c.Feature.PKCE_OIDC],[c.PlanType.ENTERPRISE]:[c.Feature.USER_GROUPS,c.Feature.APP_BACKUPS,c.Feature.ENVIRONMENT_VARIABLES,c.Feature.ENFORCEABLE_SSO,c.Feature.AUDIT_LOGS,c.Feature.BRANDING,c.Feature.SYNC_AUTOMATIONS,c.Feature.OFFLINE,c.Feature.APP_BUILDERS,c.Feature.EXPANDED_PUBLIC_API,c.Feature.VIEW_PERMISSIONS,c.Feature.TRIGGER_AUTOMATION_RUN,c.Feature.SCIM,c.Feature.VIEW_READONLY_COLUMNS,c.Feature.AI_CUSTOM_CONFIGS,c.Feature.PWA,c.Feature.CUSTOM_APP_SCRIPTS,c.Feature.PDF,c.Feature.BUDIBASE_AI,c.Feature.RECAPTCHA,c.Feature.PKCE_OIDC]},OS={[c.PlanType.FREE]:[...Ae.CLOUD_FREE_LICENSE.features],[c.PlanType.PREMIUM]:[c.Feature.APP_BACKUPS,c.Feature.BRANDING,c.Feature.APP_BUILDERS,c.Feature.VIEW_PERMISSIONS,c.Feature.PDF],[c.PlanType.PREMIUM_PLUS]:[c.Feature.APP_BACKUPS,c.Feature.BRANDING,c.Feature.SYNC_AUTOMATIONS,c.Feature.APP_BUILDERS,c.Feature.VIEW_PERMISSIONS,c.Feature.TRIGGER_AUTOMATION_RUN,c.Feature.VIEW_READONLY_COLUMNS,c.Feature.BUDIBASE_AI,c.Feature.PDF],[c.PlanType.PREMIUM_PLUS_TRIAL]:[c.Feature.APP_BACKUPS,c.Feature.BRANDING,c.Feature.SYNC_AUTOMATIONS,c.Feature.APP_BUILDERS,c.Feature.VIEW_PERMISSIONS,c.Feature.TRIGGER_AUTOMATION_RUN,c.Feature.VIEW_READONLY_COLUMNS,c.Feature.BUDIBASE_AI,c.Feature.PDF],[c.PlanType.PRO]:[c.Feature.USER_GROUPS,c.Feature.APP_BACKUPS,c.Feature.BRANDING],[c.PlanType.TEAM]:[c.Feature.USER_GROUPS,c.Feature.APP_BACKUPS,c.Feature.BRANDING],[c.PlanType.BUSINESS]:[c.Feature.USER_GROUPS,c.Feature.APP_BACKUPS,c.Feature.ENVIRONMENT_VARIABLES,c.Feature.AUDIT_LOGS,c.Feature.BRANDING,c.Feature.SYNC_AUTOMATIONS,c.Feature.APP_BUILDERS,c.Feature.EXPANDED_PUBLIC_API,c.Feature.VIEW_PERMISSIONS,c.Feature.BUDIBASE_AI,c.Feature.PDF],[c.PlanType.ENTERPRISE_BASIC]:[c.Feature.USER_GROUPS,c.Feature.APP_BACKUPS,c.Feature.ENVIRONMENT_VARIABLES,c.Feature.ENFORCEABLE_SSO,c.Feature.AUDIT_LOGS,c.Feature.BRANDING,c.Feature.SYNC_AUTOMATIONS,c.Feature.OFFLINE,c.Feature.APP_BUILDERS,c.Feature.EXPANDED_PUBLIC_API,c.Feature.VIEW_PERMISSIONS,c.Feature.TRIGGER_AUTOMATION_RUN,c.Feature.SCIM,c.Feature.VIEW_READONLY_COLUMNS,c.Feature.AI_CUSTOM_CONFIGS,c.Feature.BUDIBASE_AI,c.Feature.PWA,c.Feature.CUSTOM_APP_SCRIPTS,c.Feature.PDF,c.Feature.RECAPTCHA,c.Feature.PKCE_OIDC],[c.PlanType.ENTERPRISE_BASIC_TRIAL]:[c.Feature.USER_GROUPS,c.Feature.APP_BACKUPS,c.Feature.ENVIRONMENT_VARIABLES,c.Feature.ENFORCEABLE_SSO,c.Feature.BRANDING,c.Feature.SYNC_AUTOMATIONS,c.Feature.APP_BUILDERS,c.Feature.EXPANDED_PUBLIC_API,c.Feature.VIEW_PERMISSIONS,c.Feature.TRIGGER_AUTOMATION_RUN,c.Feature.SCIM,c.Feature.VIEW_READONLY_COLUMNS,c.Feature.AI_CUSTOM_CONFIGS,c.Feature.BUDIBASE_AI,c.Feature.PWA,c.Feature.CUSTOM_APP_SCRIPTS,c.Feature.PDF,c.Feature.RECAPTCHA,c.Feature.PKCE_OIDC],[c.PlanType.ENTERPRISE]:[c.Feature.USER_GROUPS,c.Feature.APP_BACKUPS,c.Feature.ENVIRONMENT_VARIABLES,c.Feature.ENFORCEABLE_SSO,c.Feature.AUDIT_LOGS,c.Feature.BRANDING,c.Feature.SYNC_AUTOMATIONS,c.Feature.APP_BUILDERS,c.Feature.EXPANDED_PUBLIC_API,c.Feature.VIEW_PERMISSIONS,c.Feature.TRIGGER_AUTOMATION_RUN,c.Feature.SCIM,c.Feature.VIEW_READONLY_COLUMNS,c.Feature.AI_CUSTOM_CONFIGS,c.Feature.BUDIBASE_AI,c.Feature.PWA,c.Feature.CUSTOM_APP_SCRIPTS,c.Feature.PDF,c.Feature.RECAPTCHA,c.Feature.PKCE_OIDC]};function xo(e,t){let r=[];function a(n){let o=n[t];if(!o)throw new Error(`Features do not exist for planType=${t} and hosting=${e}`);return o}switch(e){case c.Hosting.SELF:r=a(CS);break;case c.Hosting.CLOUD:r=a(OS);break}return r}var Xa={};w(Xa,{UNLIMITED:()=>d,getQuotas:()=>Co});var k=require("@budibase/types");var l=et,Ep=Ae,d=-1,Hr=e=>e*1e6,LS={[k.PlanType.FREE]:{...Ep.CLOUD_FREE_LICENSE.quotas},[k.PlanType.PREMIUM]:{usage:{monthly:{...l.queries(d),...l.automations(1e3),...l.budibaseAICredits(0),...l.actions(d)},static:{...l.rows(1e4),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(0),...l.plugins(d),...l.customAIConfigurations(0)}},constant:{...l.automationLogRetentionDays(7),...l.appBackupRetentionDays(7)}},[k.PlanType.PREMIUM_PLUS]:{usage:{monthly:{...l.queries(d),...l.automations(5e3),...l.budibaseAICredits(Hr(2)),...l.actions(d)},static:{...l.rows(25e3),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(0),...l.plugins(d),...l.customAIConfigurations(1)}},constant:{...l.automationLogRetentionDays(30),...l.appBackupRetentionDays(30)}},[k.PlanType.PREMIUM_PLUS_TRIAL]:{usage:{monthly:{...l.queries(d),...l.automations(5e3),...l.budibaseAICredits(Hr(2)),...l.actions(d)},static:{...l.rows(25e3),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(0),...l.plugins(d),...l.customAIConfigurations(1)}},constant:{...l.automationLogRetentionDays(30),...l.appBackupRetentionDays(30)}},[k.PlanType.PRO]:{usage:{monthly:{...l.queries(d),...l.automations(1e3),...l.budibaseAICredits(0),...l.actions(d)},static:{...l.rows(d),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(5),...l.plugins(d),...l.customAIConfigurations(0)}},constant:{...l.automationLogRetentionDays(7),...l.appBackupRetentionDays(7)}},[k.PlanType.TEAM]:{usage:{monthly:{...l.queries(d),...l.automations(5e3),...l.budibaseAICredits(0),...l.actions(d)},static:{...l.rows(d),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(10),...l.plugins(d),...l.customAIConfigurations(0)}},constant:{...l.automationLogRetentionDays(30),...l.appBackupRetentionDays(90)}},[k.PlanType.BUSINESS]:{usage:{monthly:{...l.queries(d),...l.automations(1e4),...l.budibaseAICredits(0),...l.actions(d)},static:{...l.rows(5e4),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(50),...l.plugins(d),...l.customAIConfigurations(0)}},constant:{...l.automationLogRetentionDays(365),...l.appBackupRetentionDays(365)}},[k.PlanType.ENTERPRISE_BASIC]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(Hr(4)),...l.actions(d)},static:{...l.rows(d),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(d),...l.plugins(d),...l.customAIConfigurations(d)}},constant:{...l.automationLogRetentionDays(d),...l.appBackupRetentionDays(d)}},[k.PlanType.ENTERPRISE_BASIC_TRIAL]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(Hr(4)),...l.actions(d)},static:{...l.rows(d),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(d),...l.plugins(d),...l.customAIConfigurations(d)}},constant:{...l.automationLogRetentionDays(15),...l.appBackupRetentionDays(15)}},[k.PlanType.ENTERPRISE]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(Hr(4)),...l.actions(d)},static:{...l.rows(d),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(d),...l.plugins(d),...l.customAIConfigurations(d)}},constant:{...l.automationLogRetentionDays(d),...l.appBackupRetentionDays(d)}}},PS={[k.PlanType.FREE]:{...Ep.SELF_FREE_LICENSE.quotas},[k.PlanType.PREMIUM]:void 0,[k.PlanType.PREMIUM_PLUS]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(0),...l.actions(d)},static:{...l.rows(d),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(0),...l.plugins(d),...l.customAIConfigurations(1)}},constant:{...l.automationLogRetentionDays(30),...l.appBackupRetentionDays(30)}},[k.PlanType.PREMIUM_PLUS_TRIAL]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(0),...l.actions(d)},static:{...l.rows(d),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(0),...l.plugins(d),...l.customAIConfigurations(1)}},constant:{...l.automationLogRetentionDays(30),...l.appBackupRetentionDays(30)}},[k.PlanType.PRO]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(0),...l.actions(d)},static:{...l.rows(d),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(5),...l.plugins(d),...l.customAIConfigurations(0)}},constant:{...l.automationLogRetentionDays(7),...l.appBackupRetentionDays(7)}},[k.PlanType.TEAM]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(0),...l.actions(d)},static:{...l.rows(d),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(10),...l.plugins(d),...l.customAIConfigurations(0)}},constant:{...l.automationLogRetentionDays(30),...l.appBackupRetentionDays(90)}},[k.PlanType.BUSINESS]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(0),...l.actions(d)},static:{...l.rows(d),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(50),...l.plugins(d),...l.customAIConfigurations(0)}},constant:{...l.automationLogRetentionDays(90),...l.appBackupRetentionDays(365)}},[k.PlanType.ENTERPRISE_BASIC]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(0),...l.actions(d)},static:{...l.rows(d),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(d),...l.plugins(d),...l.customAIConfigurations(d)}},constant:{...l.automationLogRetentionDays(d),...l.appBackupRetentionDays(d)}},[k.PlanType.ENTERPRISE_BASIC_TRIAL]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(0),...l.actions(d)},static:{...l.rows(d),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(d),...l.plugins(d),...l.customAIConfigurations(d)}},constant:{...l.automationLogRetentionDays(15),...l.appBackupRetentionDays(15)}},[k.PlanType.ENTERPRISE]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(0),...l.actions(d)},static:{...l.rows(d),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(d),...l.plugins(d),...l.customAIConfigurations(d)}},constant:{...l.automationLogRetentionDays(d),...l.appBackupRetentionDays(d)}}};function Co(e,t){let r;function a(n){let o=n[t];if(!o)throw new Error(`Quotas do not exist for planType=${t} and hosting=${e}`);return o}switch(e){case k.Hosting.SELF:r=a(PS);break;case k.Hosting.CLOUD:r=a(LS);break}return JSON.parse(JSON.stringify(r))}var Yt={};w(Yt,{appExists:()=>US,encoding:()=>Vt});var Rp=require("@budibase/backend-core");async function US(e){return(await Rp.db.getAllApps({all:!0,idsOnly:!0})).includes(e)}var Vt={};w(Vt,{base64ToObject:()=>DS,objectToBase64:()=>qS});function qS(e){let t=JSON.stringify(e);return Buffer.from(t).toString("base64")}function DS(e){let t=Buffer.from(e,"base64").toString();return JSON.parse(t)}var pf=require("@budibase/types"),ir=require("@budibase/backend-core"),cf=P(Fl()),lf=P(as());async function cx(e){await ve.save({offlineLicenseToken:e}),await Ct()}async function lx(){await ve.save({offlineLicenseToken:void 0}),await Ct()}async function df(){return(await ve.get()).offlineLicenseToken}async function ns(){let t=(await ir.installation.getInstall()).installId,r=ir.context.getTenantId(),a=await ir.events.identification.getUniqueTenantId(r);return{installId:t,tenantId:a}}async function dx(){let e=await ns();return Vt.objectToBase64(e)}function fx(e){return Vt.base64ToObject(e)}function ff(e){let t=Date.now(),r=new Date(e.expireAt).getTime();if(t>r)throw new Error(`Offline license has expired. expireAt=${e.expireAt}`)}async function mf(e){let t=await ns();if(e.identifier.installId!==t.installId||e.identifier.tenantId!==t.tenantId)throw new Error("Invalid offline license")}function gf(e){let t=e.plan.type,r=pf.Hosting.SELF,a=xo(r,t),n=Co(r,t);return e.features=(0,cf.default)(e.features,a),e.quotas=(0,lf.default)(e.quotas,n),e}async function os(){try{let e=await df();if(e){let t=await Vr(e);return ff(t),await mf(t),gf(t)}}catch(e){console.error("Error retrieving offline license",e)}}var ma={};w(ma,{deleteDevLicense:()=>Ax,getOfflineLicense:()=>yx,writeDevLicenseToDisk:()=>hx});var yf=require("@budibase/backend-core"),is=require("path"),hf=require("os"),Ot=P(require("fs"));var mx=yf.env.isTest()?".budibase-test":".budibase",ss=(0,is.join)((0,hf.tmpdir)(),mx),gx="dev_license.txt",fa=(0,is.join)(ss,gx);if(!Ot.default.existsSync(ss))try{Ot.default.mkdirSync(ss)}catch{}function yx(){try{if(Ot.default.existsSync(fa)){let e=Ot.default.readFileSync(fa,{encoding:"utf-8"});return Vr(e)}}catch(e){console.error("Error retrieving offline license from disk",e)}}function hx(e){console.log(`Writing license to: ${fa}`),Ot.default.writeFileSync(fa,e,{encoding:"utf-8"})}function Ax(){Ot.default.rmSync(fa,{force:!0})}var Af=require("dd-trace"),ps=async()=>await Af.tracer.trace("getLicense",async e=>{if(us.env.OFFLINE_MODE)return e.addTags({offline:!0}),os();let t=await Kt();return t||(e.addTags({offlineFallback:!0}),t=ma.getOfflineLicense()),t}),cs=e=>Ro(e),ls=()=>us.env.SELF_HOSTED?Ae.SELF_FREE_LICENSE:Ae.CLOUD_FREE_LICENSE;var fs={};w(fs,{activateLicenseKey:()=>bx,deleteLicenseKey:()=>Ix,getLicenseKey:()=>gn});var ds=P(require("dd-trace"));async function bx(e){await vo(e),await ve.save({licenseKey:e}),await Ct()}async function gn(){return await ds.default.trace("getLicenseKey",async e=>{let t=await ve.get();return e.addTags({licenseKey:t.licenseKey}),t.licenseKey})}async function Ix(){return await ds.default.trace("deleteLicenseKey",async()=>{await ve.save({licenseKey:void 0}),await Ct()})}var Lt=require("@budibase/backend-core"),yn=P(require("dd-trace")),bf=3600,Ct=async()=>{await wf(),await Sf()},If=async(e,t)=>{let{populateLicense:r=ps,populateFreeLicense:a=ls}=t||{};return await yn.default.trace("getCachedLicense",async n=>{let o=Lt.context.getLicense();if(o)return n.addTags({foundInContext:!0,features:o.features,plan:o.plan,quotas:o.quotas}),o;let s=Lt.tenancy.getTenantId(),i=await po(),p=await i.get(s);return n.addTags({tenantId:s,foundInCache:!!p}),p?(n.addTags({foundInCache:!0,refreshedAt:p.refreshedAt,features:p.features,plan:p.plan,quotas:p.quotas}),p):(p=await yn.default.trace("populateLicense",async()=>await r(s)),n.addTags({populatedLicense:!!p}),p||(p=yn.default.trace("populateFreeLicense",()=>a(e,s)),n.addTags({populatedFreeLicense:!!p})),p.refreshedAt=new Date().toISOString(),n.addTags({refreshedAt:p.refreshedAt,features:p.features,plan:p.plan,quotas:p.quotas,expirySeconds:bf}),await i.store(s,p,bf),p)})};Lt.env.isJest()&&(If=jest.fn());var Sf=If,wf=async()=>{let e=Lt.tenancy.getTenantId();await(await po()).delete(e)};async function re(e,t){Array.isArray(e)||(e=[e]),t||(t=await Ne.getCachedLicense());for(let r of e)if(!t?.features.includes(r))return!1;return!0}async function hn(e,t){if(!await re(e,t))throw new tt.FeatureDisabledError(`${e} is not currently enabled`,e)}async function ms(e,t){if(!await re(e,t)){let r=e.join(", ");throw new tt.FeatureDisabledError(`${r} are not currently enabled`,r)}}function ce(e){return async(...t)=>(await hn(te.Feature.APP_BACKUPS),e(...t))}async function gs(){return re(te.Feature.APP_BACKUPS)}async function ys(){return re(te.Feature.BRANDING)}async function Tf(){return re(te.Feature.ENFORCEABLE_SSO)}async function wx(){return re(te.Feature.SYNC_AUTOMATIONS)}async function Tx(){return re(te.Feature.TRIGGER_AUTOMATION_RUN)}async function Pt(){return re(te.Feature.APP_BUILDERS)}async function An(){return re(te.Feature.AUDIT_LOGS)}async function hs(){return re(te.Feature.USER_GROUPS)}function Ex(){return re(te.Feature.PWA)}function Rx(){return re(te.Feature.RECAPTCHA)}var vx=()=>re(te.Feature.PKCE_OIDC);async function rt(){return re(te.Feature.EXPANDED_PUBLIC_API)}async function _x(e){if(tt.env.ENABLE_SSO_MAINTENANCE_MODE||!await Tf())return!1;let r;return e?.config?r=e.config:r=await tt.configs.getSettingsConfig(),!!r.isSSOEnforced}var As=async()=>{let e=te.Feature.SCIM,t=await re(e),r=await tt.configs.getSCIMConfig();if(!t||!r?.enabled)throw new tt.FeatureDisabledError(`${e} is not currently enabled`,e);return!0};async function xx(){return re(te.Feature.VIEW_PERMISSIONS)}async function Cx(){return re(te.Feature.VIEW_READONLY_COLUMNS)}var Ox={faviconUrl:void 0,faviconUrlEtag:void 0,emailBrandingEnabled:!0,testimonialsEnabled:!0,platformTitle:void 0,loginHeading:void 0,loginButton:void 0,metaDescription:void 0,metaImageUrl:void 0,metaTitle:void 0};async function Lx(e){return await ys()?{faviconUrl:e.faviconUrl,faviconUrlEtag:e.faviconUrlEtag,emailBrandingEnabled:e.emailBrandingEnabled,testimonialsEnabled:e.testimonialsEnabled,platformTitle:e.platformTitle,loginHeading:e.loginHeading,loginButton:e.loginButton,metaDescription:e.metaDescription,metaImageUrl:e.metaImageUrl,metaTitle:e.metaTitle}:Ox}var Is={};w(Is,{enrichAIConfig:()=>bs});var Ef=require("@budibase/backend-core"),Px="budibase_ai";async function bs(e){if(Ef.env.SELF_HOSTED)return e;for(let t of Object.values(e.config))if(t.provider==="BudibaseAI")return e;return e.config[Px]={provider:"BudibaseAI",active:!0,isDefault:Object.keys(e.config).every(t=>!e.config[t].isDefault),defaultModel:process.env.BUDIBASE_AI_DEFAULT_MODEL||"gpt-5-mini",name:"Budibase AI"},e}var ze={};w(ze,{addAction:()=>Bx,addApp:()=>Mx,addAutomation:()=>Wx,addGroup:()=>ws,addPlugin:()=>Es,addRow:()=>Gx,addRows:()=>jx,addUsers:()=>wn,bustCache:()=>yo,decrement:()=>at,decrementMany:()=>ga,getCurrentUsageValues:()=>Xu,getLicensedQuota:()=>vf,getQuotaUsage:()=>Et,increment:()=>Ie,incrementBudibaseAICredits:()=>En,incrementMany:()=>qt,removeApp:()=>kx,removeGroup:()=>Ts,removePlugin:()=>Rs,removeRow:()=>Fx,removeRows:()=>Qx,removeUsers:()=>lr,set:()=>Ss,setAllUsage:()=>Ao,setAppUsageValue:()=>ho,setUsage:()=>Hu,setUsagePerApp:()=>zu,updatePluginCount:()=>vs,updateUsage:()=>ur,usageLimitIsExceeded:()=>Nx,utils:()=>_r});var In=require("@budibase/types");var z=require("@budibase/types");var ke=require("@budibase/backend-core");var Ut=require("dd-trace"),Ie=async(e,t,r)=>await Ut.tracer.trace("quotas.increment",async a=>(a.addTags({name:e,type:t}),await Rf({change:1,name:e,type:t,opts:r}))),qt=e=>Ut.tracer.trace("quotas.incrementMany",async()=>Rf(e)),Rf=async e=>await Ut.tracer.trace("quotas.tryIncrement",async t=>{let r=Array.isArray(e)?e:[e];t.addTags({numActions:r.length}),await ur(r.map(n=>({usageChange:n.change,name:n.name,type:n.type,opts:{dryRun:!0,suppressErrorLog:n.opts?.suppressErrorLog,id:n.opts?.id}})));let a=[];for(let n of r)await Ut.tracer.trace("quotas.incrementMany.fn",async o=>{o.addTags({actionName:n.name,actionType:n.type,actionChange:n.change});let s=n.opts?.fn;s&&a.push(await s())});return await ur(r.map(n=>({usageChange:n.change,name:n.name,type:n.type,opts:{dryRun:!1,valueFn:n.opts?.valueFn,suppressErrorLog:n.opts?.suppressErrorLog,id:n.opts?.id}}))),a[0]}),at=(e,t,r={})=>ur({usageChange:-1,name:e,type:t,opts:r}),ga=e=>{let t=Array.isArray(e)?e:[e];return ur(t.map(r=>({usageChange:-r.change,name:r.name,type:r.type,opts:r.opts})))},Ss=async(e,t,r)=>We.setUsage(r,e,t),Ux=(e,t,r)=>{if(e==z.QuotaUsageType.STATIC){let a=r.usageQuota.triggers;return a?a[t]||{}:{}}else{let a=We.utils.getCurrentMonthString(),n=r.monthly[a].triggers;return n?n[t]||{}:{}}},qx=async(e,t,r,a)=>{try{await ke.locks.doWithLock({type:z.LockType.TRY_ONCE,name:z.LockName.TRIGGER_QUOTA,resource:e,ttl:1e4},async()=>{let n={percentage:r,name:t.name};a&&(n.resetDate=a),await mt.triggerQuota(n)})}catch(n){ke.logging.logAlert("Error triggering quota",n)}},Dx=async(e,t,r,a)=>{let n=await Et(),o=e===z.QuotaUsageType.MONTHLY?n.quotaReset:void 0,s=await Ux(e,t,n),i=a.triggers,p=r/a.value*100;p>100&&(p=100);for(let[f,m]of i.entries())if(p>=m&&a.value!==et.UNLIMITED){if(!s[m]){s[m]=new Date().toISOString();let y=i[f+1]||100;(!(p>=y)||p===m)&&await qx(t,a,p,o)}}else s[m]=void 0;return s},ur=async e=>{await Ut.tracer.trace("quotas.updateUsage",async t=>{let r=ke.tenancy.getTenantId(),a=Array.isArray(e)?e:[e];t.addTags({numActions:a.length,tenantId:r});let n,o,s=[],i={},p={},f={},m={};for(let y of a)await Ut.tracer.trace("quotas.updateUsage.action",async I=>{I.addTags({actionName:y.name,actionType:y.type,actionUsageChange:y.usageChange});try{n=ke.context.getAppId()}catch{}if(z.APP_QUOTA_NAMES.includes(y.name)&&!n)throw new Error("App context required for quota update");try{o=await vf(z.QuotaType.USAGE,y.name,y.type),s.push(o);let{total:_,app:v,breakdown:R}=await We.getCurrentUsageValues(y.type,y.name,y.opts?.id);_+=y.usageChange,v!=null&&(v+=y.usageChange),R!=null&&(R+=y.usageChange);let U={};if(y.opts?.dryRun||(U=await Dx(y.type,y.name,_,o),m={...m,[y.name]:U}),o.value!==et.UNLIMITED&&_>o.value&&y.usageChange>0)throw new ke.UsageLimitError(`Licensed ${o.name} of ${o.value} has been exceeded`,o.name);if(_=Math.max(0,_),v&&(v=Math.max(0,v)),R&&(R=Math.max(0,R),f={...f,[y.name]:R}),!y.opts?.dryRun){let qe=y.opts?.valueFn;qe&&(_=await qe(),v=_),i={...i,[y.name]:_},p={...p,[y.name]:v}}}catch(_){throw y.opts?.suppressErrorLog||console.error(`Error updating usage quotas for ${y.name}`,_),_}});let g=a.filter(y=>!y.opts?.dryRun).map(y=>({name:y.name,type:y.type,values:{total:i[y.name],app:p[y.name],breakdown:f[y.name],triggers:m[y.name]},opts:{...y.opts,tenantId:r}}));g.length>0&&await We.setAllUsage(g)})},vf=async(e,t,r)=>{let a=await Ne.getCachedLicense();if(!a){let n=ke.tenancy.getTenantId();throw new Error("License not found for tenant id "+n)}if(r&&(0,z.isStaticQuota)(e,r,t))return a.quotas[e][r][t];if(r&&(0,z.isMonthlyQuota)(e,r,t))return a.quotas[e][r][t];if((0,z.isConstantQuota)(e,t))return a.quotas[e][t];throw new Error("Invalid quota type")},Nx=async({name:e,type:t,usageChange:r})=>{try{return await ur({usageChange:r,name:e,type:t,opts:{dryRun:!0}}),!1}catch(a){if(a.code===z.ErrorCode.USAGE_LIMIT_EXCEEDED)return!0;throw a}};var Bx=async e=>Ie(In.MonthlyQuotaName.ACTIONS,In.QuotaUsageType.MONTHLY,{fn:e});var pr=require("@budibase/types"),_f=require("@budibase/backend-core"),xf=async()=>{let e=await _f.db.getAllApps({dev:!0});return e?e.length:0},Mx=async(e,{appId:t}={})=>Ie(pr.StaticQuotaName.APPS,pr.QuotaUsageType.STATIC,{fn:e,valueFn:xf,id:t}),kx=async({appId:e}={})=>at(pr.StaticQuotaName.APPS,pr.QuotaUsageType.STATIC,{valueFn:xf,id:e});var Ye=require("@budibase/types"),Gx=async(e,{tableId:t}={})=>Ie(Ye.StaticQuotaName.ROWS,Ye.QuotaUsageType.STATIC,{fn:e,id:t}),Fx=async({tableId:e}={})=>at(Ye.StaticQuotaName.ROWS,Ye.QuotaUsageType.STATIC,{id:e}),jx=async(e,t,{tableId:r}={})=>qt({change:e,name:Ye.StaticQuotaName.ROWS,type:Ye.QuotaUsageType.STATIC,opts:{fn:t,id:r}}),Qx=async(e,{tableId:t}={})=>ga({change:e,name:Ye.StaticQuotaName.ROWS,type:Ye.QuotaUsageType.STATIC,opts:{id:t}});var Sn=require("@budibase/types"),Wx=async(e,{automationId:t}={})=>Ie(Sn.MonthlyQuotaName.AUTOMATIONS,Sn.QuotaUsageType.MONTHLY,{fn:e,id:t});var cr=require("@budibase/types"),ws=async e=>Ie(cr.StaticQuotaName.USER_GROUPS,cr.QuotaUsageType.STATIC,{fn:e}),Ts=async()=>at(cr.StaticQuotaName.USER_GROUPS,cr.QuotaUsageType.STATIC);var At=require("@budibase/types"),Es=async e=>Ie(At.StaticQuotaName.PLUGINS,At.QuotaUsageType.STATIC,{fn:e}),Rs=async()=>at(At.StaticQuotaName.PLUGINS,At.QuotaUsageType.STATIC),vs=async e=>Ss(At.StaticQuotaName.PLUGINS,At.QuotaUsageType.STATIC,e);var He=require("@budibase/types"),ya=require("@budibase/backend-core");var wn=async(e,t,r)=>{let a=[{change:e,name:He.StaticQuotaName.USERS,type:He.QuotaUsageType.STATIC,opts:{fn:r,valueFn:ya.users.getUserCount}}];t>0&&a.push({change:t,name:He.StaticQuotaName.CREATORS,type:He.QuotaUsageType.STATIC,opts:{valueFn:ya.users.getCreatorCount}});let n=await qt(a);return await Kt(),n},lr=async(e,t)=>{let r=[{change:e,name:He.StaticQuotaName.USERS,type:He.QuotaUsageType.STATIC,opts:{valueFn:ya.users.getUserCount}}];t>0&&r.push({change:t,name:He.StaticQuotaName.CREATORS,type:He.QuotaUsageType.STATIC,opts:{valueFn:ya.users.getCreatorCount}}),await ga(r),await Kt()};var Tn=require("@budibase/types"),En=async e=>qt({change:e,name:Tn.MonthlyQuotaName.BUDIBASE_AI_CREDITS,type:Tn.QuotaUsageType.MONTHLY});var nt={};w(nt,{addAppBuilder:()=>Hx,db:()=>Ce,removeAppBuilder:()=>zx});var Aa=require("@budibase/backend-core");var Q={};w(Q,{addAppBuilder:()=>Os,addUsers:()=>vn,adjustGroupCreatorsQuotas:()=>Yx,cleanupApp:()=>Vx,enrichUserRolesFromGroups:()=>Kx,fetch:()=>ha,get:()=>bt,getBulk:()=>Df,getGroupBuilderAppIds:()=>qf,getGroupRoleId:()=>$x,remove:()=>_s,removeAppBuilder:()=>Ls,removeUsers:()=>xs,save:()=>dr,updateGroupApps:()=>Cs});var x=require("@budibase/backend-core");var Cf=require("@budibase/backend-core"),Rn=class extends Cf.HTTPError{constructor(t){super(`Group name "${t}" is unavailable`,409)}};async function Pf(e,t){try{let r=[];for(let i of e)if(i.roles){let p=i.roles[x.db.getProdAppID(t)];p&&r.push(p)}let a=await Promise.all(r.map(async i=>({[i]:await x.roles.roleToNumber(i)}))),n,o,s={};a.forEach(i=>{let[p,f]=Object.entries(i)[0];s[p]={roleId:p,roleNum:f}});for(let{roleId:i,roleNum:p}of Object.values(s))(o===void 0||p>o)&&(o=p,n=i);return n}catch(r){throw x.logging.logAlert(`Error finding higest role for ${e.length} on app ${t}`,r),r}}async function Uf(e,t){return t?t=t.filter(r=>e.includes(r._id)):t=await M.getBulk(e,{enriched:!1}),t}async function qf(e,t){if(!e.userGroups)return[];let r=await Uf(e.userGroups,t?.groups),a=t?.appId?x.db.getProdAppID(t?.appId):null,n=[];for(let o of r){let s=o.builder?.apps;a&&s?.includes(a)?n.push(a):a||(n=n.concat(s||[]))}return[...new Set(n)]}async function $x(e,t,r){if(!e.userGroups)return null;let a=await Uf(e.userGroups,r?.groups),n=x.db.getProdAppID(t);return e.roles?.[n]?e.roles[n]:(a=a.filter(o=>o?.roles?Object.keys(o.roles).includes(n):!1),await Pf(a,t))}async function Kx(e){if(!e||!e.userGroups)return e;let t=await Df(e.userGroups,{enriched:!1}),r=[];for(let n of t)n?.roles&&(r=r.concat(Object.keys(n.roles)));r=[...new Set(r)];for(let n of r)await x.context.doInAppContext(n,async()=>{if(e.roles[n])return;let o=await Pf(t,n);o&&(e.roles[n]=o)});let a=await qf(e,{groups:t});if(a.length&&!e.builder?.global){let n=e.builder?.apps||[];e.builder={apps:n.concat(a)}}return e}async function ha(){return await M.fetch()}async function bt(e){return await M.get(e)}async function Df(e,t={enriched:!0}){return await M.getBulk(e,t)}async function Of(e){if(await M.getByName(e))throw new Rn(e)}async function Lf(e){let t=await M.getGroupUsers(e._id);if(!t.length)return 0;let a=await x.tenancy.getGlobalDB().getMultiple(t.map(o=>o._id));return(await x.userUtils.creatorsInList(a)).filter(o=>o).length}async function dr(e){let t=[],r=!e._id,a=0;if(delete e.users,!e._id)e._id=M.generateUserGroupID(),await Of(e.name),t.push(x.events.group.created(e));else{let o=await M.get(e._id);if(o.name!==e.name&&await Of(e.name),t.push(x.events.group.updated(e)),JSON.stringify(o.roles)!==JSON.stringify(e.roles)){let s=o.users?.length||0,i=0;s>0&&(i=await Lf(o)),Object.values(e.roles).includes("CREATOR")?a=s-i:a=-s,t.push(x.events.group.permissionsEdited(e))}}await Promise.all(t);let n=()=>M.save(e);if(r)return await ws(n);{let o=await n();if(a>0)await wn(0,a);else if(a<0){let s=await Lf(e),i=Math.abs(a)-s;i>0&&await lr(0,i)}return o}}async function _s(e,t){let r;try{r=await M.get(e)}catch{throw new Error("Group not found")}let a=Object.values(r.roles||{}).includes("CREATOR"),n=()=>{};if(a){let s=x.tenancy.getGlobalDB(),i=await M.getGroupUsers(e),f=(await Promise.all(i.map(I=>s.get(I._id)))).map(I=>({...I,userGroups:I.userGroups.filter(C=>C!==e)})),g=(await x.userUtils.creatorsInList(f)).filter(I=>I).length,y=i.length-g;y&&(n=()=>lr(0,y))}let o=await M.destroy(e,t);return await x.events.group.deleted(r),await Ts(),await n(),o}async function vn(e,t){let r=await M.get(e),a=await x.users.bulkGetGlobalUsersById(t),n=[];for(let p of a)p.userGroups||(p.userGroups=[]),p.userGroups.includes(e)||n.push(p);if(!n.length)return n;let o=n.map(p=>({...p,userGroups:[...p?.userGroups||[],e]}));if(await x.users.bulkUpdateGlobalUsers(o),Object.values(r.roles||{}).includes("CREATOR")){let f=(await x.userUtils.creatorsInList(n)).filter(g=>g).length,m=n.length-f;m&&await wn(0,m)}let i=[];for(let p of t)i.push(x.cache.user.invalidateUser(p));return await Promise.all(i),await x.events.group.usersAdded(o.length,r),o}async function xs(e,t){let r=await M.get(e),a=await x.users.bulkGetGlobalUsersById(t),n=[];for(let i of a){if(!i.userGroups||!i.userGroups.includes(e))continue;let p=i.userGroups.indexOf(e);i.userGroups.splice(p,1),n.push(i)}if(await x.users.bulkUpdateGlobalUsers(n),Object.values(r.roles||{}).includes("CREATOR")){let p=(await x.userUtils.creatorsInList(n)).filter(m=>m).length,f=n.length-p;f&&await lr(0,f)}let s=[];for(let i of t)s.push(x.cache.user.invalidateUser(i));return await Promise.all(s),n.length&&await x.events.group.usersDeleted(n.length,r),n}async function Cs(e,t){let r=await bt(e);if(r.roles||(r.roles={}),t.appsToAdd)for(let a of t.appsToAdd)r.roles[a.appId]=a.roleId;if(t.appsToRemove)for(let a of t.appsToRemove)delete r.roles[a.appId];return await dr(r)}async function Vx(e){let t=await ha(),r=[];for(let a of t)!a.roles||!a.roles[e]||(delete a.roles[e],r.push(a));return await M.bulkSave(r)}async function Os(e,t){if(!await Pt())throw new Error("Feature not enabled, please check license");let r=x.db.getProdAppID(t),a=await bt(e);a.builder??={apps:[]},a.builder.apps.includes(t)||(a.builder.apps.push(r),await dr(a))}async function Ls(e,t){if(!await Pt())throw new Error("Feature not enabled, please check license");let r=x.db.getProdAppID(t),a=await bt(e);a.builder?.apps.includes(t)&&(a.builder.apps=a.builder.apps.filter(n=>n!==r),await dr(a))}async function Yx(){if(!await hs()){let e=x.tenancy.getGlobalDB(),r=(await ha()||[]).filter(a=>Object.values(a?.roles||{}).includes("CREATOR"));for(let a of r){let n=await M.getGroupUsers(a._id),s=(await Promise.all(n.map(m=>e.get(m._id)))).map(m=>({...m,userGroups:m.userGroups.filter(g=>g!==a._id)})),p=(await x.userUtils.creatorsInList(s)).filter(m=>m).length,f=n.length-p;await M.save({...a,roles:{}}),f&&await lr(0,f)}}}Aa.users.UserDB.init(ze,Q,Me);var Ce=Aa.users.UserDB;async function Hx(e,t){if(!await Pt())throw new Error("Feature not enabled, please check license");await Aa.users.addAppBuilder(e,t)}async function zx(e,t){if(!await Pt())throw new Error("Feature not enabled, please check license");await Aa.users.removeAppBuilder(e,t)}var Cn={};w(Cn,{logs:()=>Ms});var Ms={};w(Ms,{logSearch:()=>oC,oldestLogDate:()=>jf,storeLog:()=>sC});var Ff=require("@budibase/types"),xn=require("@budibase/backend-core");var _n=require("@budibase/types");var Z=require("@budibase/backend-core");var Nf=require("@budibase/backend-core");async function Bf(e,t){let r,a=5,n=!1,o,s=!0;for(;a>0;a--)try{s?o=await e():o=await exports.randomDelay(e),n=!0;break}catch(i){r=i}return n||Nf.logging.logWarn(`Failed to backoff: ${t}`,r),o}var{SEPARATOR:ot,UNICODE_MAX:Jx,DocumentType:Mf,AutomationViewMode:Ps,ViewName:Xx,getQueryIndex:Zx}=Z.db,eC=new Date(0).toISOString(),tC=100,Us=async()=>Ka(_n.ConstantQuotaName.AUTOMATION_LOG_RETENTION_DAYS);function kf(e,t,{status:r,automationId:a}={},n={}){let o=a?`${a}${ot}`:"",s=r?`${r}${ot}`:"",i;return r&&a?i=`${Ps.ALL}${ot}${s}${o}`:r?i=`${Ps.STATUS}${ot}${s}`:a?i=`${Ps.AUTOMATION}${ot}${o}`:i=`${Mf.AUTOMATION_LOG}${ot}`,{...n,descending:!0,startkey:`${i}${t}${Jx}`,endkey:`${i}${e}`}}function rC(e,t,r){return`${Mf.AUTOMATION_LOG}${ot}${e}${ot}${r}${ot}${t}`}async function qs(e,t,r={docs:!0}){let a=Z.context.getProdAppDB();await a.exists()||(a=Z.context.getDevAppDB());let n={status:r.status},o=r?.limit?r.limit:r?.paginate?9+1:void 0,s=kf(e,t,n,{include_docs:r.docs,limit:o});r?.page&&(s.startkey=r.page);let i=await a.allDocs(s);return Or(i,{paginate:r?.paginate,pageSize:9})}async function Ds(e,t,r={}){let a=Z.context.getProdAppDB();await a.exists()||(a=Z.context.getDevAppDB());let n;try{let o={automationId:r?.automationId,status:r?.status},s=kf(e,t,o,{include_docs:!0,limit:9+1});r?.page&&(s.startkey=r.page),n=await a.query(Zx(Xx.AUTOMATION_LOGS),s)}catch(o){if(o!=null&&(o.name==="not_found"||o.error==="not_found"))return await pp(),Ds(e,t,r);throw o}return Or(n,{paginate:!0,pageSize:9})}async function Gf(e,t){let r=Z.context.getProdAppDB(),a=e._id,n=e.name,o=new Date().toISOString(),s=rC(o,t.status,a),i={...t,automationId:a,status:t.status,automationName:n,createdAt:o,_id:s};return await r.put(i),s}async function Ns(e,{clearing:t}={clearing:!1}){let r=Z.context.getProdAppDB();await Bf(async()=>{let a=await r.get(Z.db.DocumentType.APP_METADATA);for(let n of e){let o=n.split(Z.db.SEPARATOR),s=`${o[o.length-3]}${Z.db.SEPARATOR}${o[o.length-2]}`,i={};a.automationErrors&&(i=a.automationErrors),Array.isArray(i[s])||(i[s]=[]);let p=i[s].indexOf(n);t&&p!==-1?i[s].splice(p,1):i[s].push(n),i[s].length===0&&delete i[s],a.automationErrors=i}await r.put(a),await Z.cache.app.invalidateAppMetadata(a.appId,a)},"Failed to update app metadata with automation log error")}async function aC(){let e=await Us();try{return await qs(eC,e,{docs:!1,paginate:!1,limit:tC})}catch{return{data:[],hasNextPage:!1}}}async function Bs(){let e=Z.context.getProdAppDB();try{let t=await aC();if(!t.data||t.data.length===0)return;let r=t.data.map(n=>({_id:n.id,_rev:n.value.rev,_deleted:!0})),a=t.data.filter(n=>{let o=n.id.split(Z.db.SEPARATOR);return o[o.length-1]===_n.AutomationStatus.ERROR}).map(n=>n.id);await e.bulkDocs(r),a.length&&await Ns(a,{clearing:!0})}catch(t){Z.logging.logAlert(`Failed to cleanup automation log history - Database "${e.name}"`,t)}}var jf=Us;async function nC(e,t,r,a){let n,o=new Date().toISOString(),s=await jf();return(!e||e<s)&&(e=s),r||t?n=await Ds(e,o,{automationId:r,status:t,page:a}):n=await qs(e,o,{status:t,page:a,docs:!0,paginate:!0}),n}async function oC(e){return await Bs(),await nC(e.startDate,e.status,e.automationId,e.page)}async function sC(e,t){if(!xn.db.isProdAppID(xn.context.getAppId()))return;let r=await Gf(e,t);t.status===Ff.AutomationStatus.ERROR&&await Ns([r]),await Bs()}var On={};w(On,{checkPluginQuotas:()=>pC,deletePlugin:()=>uC,storePlugin:()=>iC});var Kf=require("@budibase/types"),J=require("@budibase/backend-core");var Qf=P(require("fs")),Wf=require("path");function $f(e,t){return Qf.default.readFileSync((0,Wf.join)(e,t),"utf8")}async function iC(metadata,directory,source){let db=J.tenancy.getGlobalDB(),version=metadata.package.version,name=metadata.package.name,description=metadata.package.description,hash=metadata.schema.hash,bucketPath=J.objectStore.getPluginS3Dir(name),files=await J.objectStore.uploadDirectory(J.objectStore.ObjectStoreBuckets.PLUGINS,directory,bucketPath),jsFile=files.find(e=>e.name.endsWith(".js")),iconFile=files.find(e=>e.name.endsWith(".svg"));if(!jsFile)throw new Error("Plugin missing .js file.");if(metadata.schema.type===Kf.PluginType.DATASOURCE){let js=$f(directory,jsFile.name);try{eval(js)}catch(e){let t=e?.message?e.message:JSON.stringify(e);throw new Error(`JS invalid: ${t}`)}}let iconFileName=iconFile?iconFile.name:null,pluginId=J.db.generatePluginID(name),rev;try{rev=(await db.get(pluginId))._rev}catch(e){rev=void 0}let doc={_id:pluginId,_rev:rev,...metadata,name,version,hash,description,source};iconFileName&&(doc.iconFileName=iconFileName),source&&(doc={...doc,source});let write=async()=>{let e=await db.put(doc);return await J.events.plugin.imported(doc),{...doc,_rev:e.rev}};return rev?await write():await Es(write)}async function uC(e){let t=J.tenancy.getGlobalDB();try{let r=await t.get(e),a=J.objectStore.getPluginS3Dir(r.name);await J.objectStore.deleteFolder(J.objectStore.ObjectStoreBuckets.PLUGINS,a),await t.remove(e,r._rev),await J.events.plugin.deleted(r),await Rs()}catch(r){let a=r?.message?r?.message:r;throw new Error(`Failed to delete plugin: ${a}`)}}async function pC(){let e=J.tenancy.getGlobalDB();try{let r=(await e.allDocs(J.db.getPluginParams())).rows.length;console.log(`Syncing plugin count: ${r}`),await vs(r)}catch(t){J.logging.logAlert("Unable to retrieve plugins for quota check",t)}}var Je={};w(Je,{fetch:()=>lC,fetchValues:()=>dC,isEncryptionKeyAvailable:()=>cC,isValid:()=>Hf,remove:()=>mC,update:()=>fC});var ba=require("@budibase/types"),Vf=require("@budibase/backend-core");function cC(){return!!Vf.env.ENCRYPTION_KEY}async function lC(){let e=await _t.get();return Object.keys(e.variables)}async function dC(e){let r=(await _t.get()).variables,a={};for(let[n,o]of Object.entries(r))switch(e){case ba.AppEnvironment.DEVELOPMENT:a[n]=o.development;break;case ba.AppEnvironment.PRODUCTION:default:a[n]=o.production;break}return a}async function Yf(e){if(!(await Ve.cache.getCachedLicense()).features.includes(ba.Feature.ENVIRONMENT_VARIABLES))throw new Error("User does not have access to environment variables feature.");let r=await _t.get();r.variables=e(r.variables),await _t.update(r)}async function fC(e,t){if(Hf(e))await Yf(a=>(a[e]=t,a));else throw new Error("Variable name has characters that are not allowed")}async function mC(e){await Yf(t=>(delete t[e],t))}function Hf(e){return/^[a-zA-Z0-9-_]+$/.test(e)}var It={};w(It,{definitions:()=>RC,download:()=>EC,fetch:()=>TC,write:()=>SC});var Pn=require("@budibase/types");var V=require("@budibase/backend-core"),Ge=require("@budibase/types");var zf=require("memorystream"),Jf=new V.sql.Sql(Ge.SqlClient.SQL_LITE);async function gC(e,t,r){let a={operation:Ge.Operation.READ,table:$t.searchTable(),tables:{},paginate:{limit:r||9,page:t},filters:e,resource:{fields:[]},sort:{timestamp:{direction:Ge.SortOrder.DESCENDING,type:Ge.SortType.STRING}}},n=Jf._query(a);if(Array.isArray(n))throw new Error("Cannot execute multiple queries for audit log search");return{sql:n.sql,bindings:n.bindings}}function yC(e){return`${V.DocumentType.AUDIT_LOG}${V.SEPARATOR}${e}${V.SEPARATOR}${V.utils.newid()}`}async function Xf(e){e._id||(e._id=yC(e.timestamp)),e.type||(e.type=Ge.AUDIT_LOG_TYPE);try{let r=await V.context.getAuditLogsDB().put(e);return{...e,_rev:r.rev}}catch(t){V.logging.logAlert("Failed to write audit log",t)}}async function ks(e,t,r){t||(t=1);let a=V.context.getAuditLogsDB();try{let n=9+1,o=await gC(e,t,n),s=$t.searchTable(),i=Jf.convertJsonStringColumns(s,await a.sql(o.sql,o.bindings)),p;i.length>n&&(p=i.pop());let f={rows:i,hasNextPage:!!p};return f.hasNextPage&&(f.bookmark=t+1),f}catch(n){if(n.status===404&&!r?.isRetry)return await hC(),await Zu(),await ks(e,t,{isRetry:!0});throw n}}async function hC(){let e=V.context.getAuditLogsDB(),r=(await e.allDocs(V.db.getDocParams(V.DocumentType.AUDIT_LOG,null,{include_docs:!0}))).rows.map(a=>a.doc).filter(a=>a&&!a.type).map(a=>({...a,type:Ge.AUDIT_LOG_TYPE}));await e.bulkDocs(r)}function Zf(e){let t=V.context.getAuditLogsDB(),r=new zf,a=t.dump(r,{filter:o=>{let s=o;if(!s._id?.startsWith(V.DocumentType.AUDIT_LOG))return!1;let i=!0,p=(f,m)=>{!f||f.length===0||(i=!!(i&&m&&f.includes(m)))};if(p(e.userIds,s.userId),p(e.appIds,s.appId),p(e.events,s.event),(e.startDate||e.endDate)&&(i=i&&s.timestamp>=e.startDate&&s.timestamp<=e.endDate),e.fullSearch){let f=JSON.stringify(o);i=i&&f.includes(e.fullSearch)}return i}}),n=new zf;return r.on("data",o=>{let s=JSON.parse(Buffer.from(o).toString());if(Array.isArray(s.docs)){let i="";for(let p of s.docs)i+=JSON.stringify(p)+`
38
+ `;n.write(i)}}),r.on("end",()=>{n.end()}),{promise:a,stream:n}}var me=require("@budibase/backend-core");var Ln=require("@budibase/types"),Ia=require("@budibase/string-templates"),Sa=require("@budibase/backend-core"),bC=Sa.constants.MIN_VALID_DATE.toISOString(),IC=Sa.constants.MAX_VALID_DATE.toISOString();function Gs(e){return(e.startDate||e.endDate)&&(e.startDate=e.startDate||bC,e.endDate=e.endDate||IC),e}async function em(e){Array.isArray(e.appIds)&&(e.appIds=e.appIds.map(a=>Sa.db.getProdAppID(a)));let t={};function r(a,n){n?.length&&(t.oneOf={...t.oneOf,[a]:n})}return r("userId",e.userIds),r("appId",e.appIds),r("event",e.events),e.fullSearch&&(t.fuzzyOr=!0,t.fuzzy={name:e.fullSearch,fallback:e.fullSearch}),(e.startDate||e.endDate)&&(e=Gs(e),t.range={timestamp:{high:e.endDate,low:e.startDate}}),Object.keys(t).length===0&&(t.notEmpty={event:!0}),t}function Fs(e,t,r){let a={_id:e,status:Ln.AuditLogResourceStatus.DELETED};switch(t){case"app":a.name=r?.appName;break;case"user":a.email=r?.email;break}return a}function Qs(e){let t=(0,Ia.findHBSBlocks)(e);for(let r of t){let a=` "${r}"`;e=e.replace(e.includes(a)?a:` ${r}`,""),e=(0,Ia.processStringSync)(e,{})}return e}function tm(e,t){let r=Ln.AuditedEventFriendlyName[e];if(!r)throw new Error("No friendly name found.");let a=(0,Ia.processStringSync)(r,t);return a.includes('""')&&(a=Qs(r)),a}async function SC(e,t,r){if(!await An()||!me.utils.isAudited(e))return;let a=tm(e,t),n=new Date;r?.timestamp&&(n=new Date(r.timestamp));let o={timestamp:n.toISOString(),event:e,name:a,userId:r?.userId||Pn.AuditLogSystemUser,metadata:{...t,...r?.hostInfo}},s={};try{if(r?.appId){o.appId=me.db.getProdAppID(r.appId);let i=await me.cache.app.getAppMetadata(r.appId);"name"in i&&(s.appName=i.name)}if(r?.userId){let i=await me.users.getById(r?.userId);s.email=i.email}}catch(i){me.logging.logAlert("Failed to retrieve fallback information for audit log",i)}return o.fallback=s,await Xf(o)}async function wC(e){let t=e.map(i=>i.userId),a=e.filter(i=>i.appId).map(i=>me.db.getDevAppID(i.appId)),n=await me.users.bulkGetGlobalUsersById([...new Set(t)],{cleanup:!0}),o=await me.db.getAppsByIDs([...new Set(a)]),s=[];for(let i of e){let p=n.find(g=>g?._id===i.userId),f=o.find(g=>me.db.isSameAppID(g?.appId,i.appId)),m={event:i.event,timestamp:i.timestamp,name:i.name,metadata:i.metadata,user:p||Fs(i.userId,"user",i.fallback)};i.appId&&(m.app=f||Fs(i.appId,"app",i.fallback)),s.push(m)}return s}async function TC(e){if(!await An())throw new Error("Audit logs not available - license required.");let t=await em(e);if(typeof e.bookmark=="string")throw new Error("String based bookmark not supported.");let r=await ks(t,e.bookmark);return{hasNextPage:r.hasNextPage,bookmark:r.bookmark,data:await wC(r.rows)}}function EC(e){return e=Gs(e),Zf(e)}function RC(){let e=Object.entries(Pn.AuditedEventFriendlyName).filter(r=>r[1]!=null),t={};for(let r of e)t[r[0]]=Qs(r[1]);return t}var Un={};w(Un,{applications:()=>Vs,roles:()=>$s,users:()=>Ws});var Ws={};w(Ws,{roleCheck:()=>_C});function vC(e,t){let r=e.request.body;return r.builder&&(r.builder=t?.builder||void 0),r.admin&&(r.admin=t?.admin||void 0),r.roles&&(r.roles=t?.roles||{}),e.request.body=r,e}async function _C(e,t){return await rt()||vC(e,t),e}var $s={};w($s,{assign:()=>xC,unAssign:()=>CC});var wa=require("@budibase/backend-core");async function xC(e,t){if(!await rt())throw new Error("Unable to assign roles - license required.");let r=await Ce.bulkGet(e);for(let a of r){if(t.role&&t.role.roleId){let n=wa.db.getProdAppID(t.role.appId);a.roles[n]=t.role.roleId}if(t.appBuilder){let n=wa.db.getProdAppID(t.appBuilder.appId),o=a.builder?.apps||[];a.builder={apps:o.concat([n])}}t.builder&&(a.builder={global:!0}),t.admin&&(a.admin={global:!0}),a.roles}await Ce.bulkUpdate(r)}async function CC(e,t){if(!await rt())throw new Error("Unable to un-assign roles - license required.");let r=await Ce.bulkGet(e);for(let a of r){if(t.role){let n=wa.db.getProdAppID(t.role?.appId);a.roles[n]===t.role.roleId&&delete a.roles[n]}if(t.appBuilder&&a.builder?.apps){let n=wa.db.getProdAppID(t.appBuilder.appId);a.builder.apps=a.builder.apps.filter(o=>o!==n)}t.builder&&a.builder&&delete a.builder,t.admin&&a.admin&&delete a.admin}}var Vs={};w(Vs,{buildExportFn:()=>LC,buildImportFn:()=>OC});var Ks=require("@budibase/backend-core");function OC(e){return async(t,r)=>{await rt()||t.throw(403,"Endpoint unavailable, license required."),t.request.files?.appExport||t.throw(400,"Must provide app export file for import."),await Ks.context.doInAppContext(t.params.appId,async()=>{await e(t),t.body=void 0,t.status=204,await r()})}}function LC(e){return async(t,r)=>{await rt()||t.throw(403,"Endpoint unavailable, license required.");let{encryptPassword:a,excludeRows:n}=t.request.body;await Ks.context.doInAppContext(t.params.appId,async()=>{t.request.body={encryptPassword:a,excludeRows:n},t.query.appId=t.params.appId,await e(t),await r()})}}var ne=require("@budibase/backend-core"),ae=require("@budibase/types");var Ys=require("@budibase/backend-core"),rm;function am(){rm=new Ys.queue.BudibaseQueue(Ys.queue.JobQueue.APP_BACKUP,{maxStalledCount:3,jobOptions:{attempts:3,removeOnFail:!0,removeOnComplete:!0}})}function Dt(){return rm}var nm=require("path"),om=P(require("fs"));async function Hs(e,t={}){return _e.storeAppBackupMetadata(e,t)}function sm(e){let t=new Date().toISOString();switch(e){case ae.AppBackupStatus.COMPLETE:case ae.AppBackupStatus.FAILED:return{timestamp:t,finishedAt:t};case ae.AppBackupStatus.STARTED:return{timestamp:t,startedAt:t};case ae.AppBackupStatus.PENDING:return{timestamp:t,createdAt:t}}}async function PC(e,t,r,a){let n=await qn(e);return await _e.storeAppBackupMetadata({...n,...sm(t),contents:r,status:t,type:ae.AppBackupType.BACKUP},{filename:a,docId:e})}async function UC(e,t,r){let a=await qn(e);return await _e.storeAppBackupMetadata({...a,...sm(r),status:r,type:ae.AppBackupType.RESTORE,trigger:ae.AppBackupTrigger.MANUAL},{docId:e,docRev:t})}async function qn(e){return _e.getAppBackupMetadata(e)}async function qC(e,t){return _e.updateAppBackupMetadata(e,t)}async function im(e){let t=await _e.getAppBackupMetadata(e);return t.filename&&await ne.objectStore.deleteFile(ne.objectStore.ObjectStoreBuckets.BACKUPS,t.filename),_e.deleteAppBackupMetadata(e)}async function DC(e){let t=[];for(let r of e)try{await im(r),t.push({backupId:r,success:!0})}catch(a){t.push({backupId:r,success:!1,error:a instanceof Error?a.message:"Unknown error"})}return t}async function NC(e,t){return _e.fetchAppBackups(e,t)}async function um(e){let t=await _e.getAppBackupMetadata(e);if(!t.filename)throw new Error("Backup incomplete - cannot download.");let r=await ne.objectStore.getReadStream(ne.objectStore.ObjectStoreBuckets.BACKUPS,t.filename);return{metadata:t,stream:r}}async function BC(e){let{stream:t}=await um(e),r=(0,nm.join)(ne.objectStore.budibaseTempDir(),ne.utils.newid()),a=om.default.createWriteStream(r);return new Promise((n,o)=>{t.on("error",o),a.on("error",o),t.pipe(a).on("close",()=>n(r))})}async function MC(e,t,r={}){let a;try{a=await Hs({appId:e,trigger:t,timestamp:new Date().toISOString(),status:ae.AppBackupStatus.PENDING,type:ae.AppBackupType.BACKUP,...r})}catch(n){if(n.status===409)return;throw n}return await Dt().add({docId:a.id,docRev:a.rev,appId:e,export:{trigger:t,...r}}),await ne.events.backup.appBackupTriggered(e,a.id,ae.AppBackupType.BACKUP,t,r?.name),a.id}async function kC(e,t,r,a){let n=await qn(t),o;try{o=await Hs({appId:e,timestamp:new Date().toISOString(),status:ae.AppBackupStatus.PENDING,type:ae.AppBackupType.RESTORE,createdBy:a})}catch(s){if(s?.status===409)return;throw s}return await Dt().add({appId:e,docId:o.id,docRev:o.rev,import:{nameForBackup:r,backupId:t,createdBy:a}}),{restoreId:o.id,metadata:n}}async function GC(e,t,r){let a=ne.db.getProdAppID(e);await ne.context.doInAppContext(a,async()=>{let n=ne.context.getProdAppDB();if(!await n.exists())return;let s=await n.tryGet(ae.DocumentType.APP_METADATA);s&&(s.backupErrors||(s.backupErrors={}),s.backupErrors[t]||(s.backupErrors[t]=[]),s.backupErrors[t].push(r),await n.put(s),await ne.cache.app.invalidateAppMetadata(s.appId,s))})}var FC={isEnabled:gs,triggerAppRestore:ce(kC),triggerAppBackup:ce(MC),getBackupDownloadStream:ce(um),downloadAppBackup:ce(BC),fetchAppBackups:ce(NC),storeAppBackupMetadata:ce(Hs),updateBackupStatus:ce(PC),updateRestoreStatus:ce(UC),getAppBackup:ce(qn),updateAppBackup:ce(qC),deleteAppBackup:ce(im),deleteAppBackups:ce(DC),trackBackupError:ce(GC)},Oe=FC;var Js={};w(Js,{init:()=>zs});var W=require("@budibase/backend-core");var Fe=require("@budibase/types");var fr=P(require("fs"));async function zs(e){Dt().process(async t=>{let r=t.data;try{if(r.export)return console.log("Exporting app backup:",r.appId,r.export.trigger),WC(t,e);if(r.import)return console.log("Importing app backup:",r.appId,r.import.backupId),QC(t,e)}catch(a){W.logging.logAlert(`Failed to perform backup for app ID: ${r.appId}`,a)}})}async function jC(e){await W.db.getDB(e,{skip_setup:!0}).destroy()}async function pm(e,t,r,a){let n=W.db.getDevAppID(r),o=W.db.getProdAppID(r),s=new Date().toISOString(),i=async(p,f)=>{a?.doc?await Oe.updateBackupStatus(a.doc.id,p,f?.contents,f?.filename):await Oe.storeAppBackupMetadata({appId:o,timestamp:s,trigger:e,status:p,name:a?.name,type:Fe.AppBackupType.BACKUP,contents:f?.contents,createdBy:a?.createdBy},{filename:f?.filename})};try{let p=await a.processing.exportAppFn(n,{tar:!0}),f=await a.processing.statsFn(n),m=`${o}/backup-${s}.tar.gz`,g=W.objectStore.ObjectStoreBuckets.BACKUPS,y=fr.default.createReadStream(p);await W.objectStore.streamUpload({bucket:g,filename:m,stream:y,extra:{type:"application/gzip",metadata:{name:a?.name,trigger:e,timestamp:s,appId:o}}}),await i(Fe.AppBackupStatus.COMPLETE,{filename:m,contents:f}),fr.default.existsSync(p)&&fr.default.rmSync(p)}catch(p){W.logging.logAlert("App backup error",p),await i(Fe.AppBackupStatus.FAILED);let f=a?.doc?.id||`backup-${s}`,m=p instanceof Error?p.message:String(p);await Oe.trackBackupError(o,f,`Backup export failed: ${m}`)}}async function QC(e,t){let r=e.data,a=r.appId,n=r.import.backupId,o=r.import.nameForBackup,s=r.import.createdBy,i=W.tenancy.getTenantIDFromAppID(a);return W.tenancy.doInTenant(i,async()=>{let p=W.db.getDevAppID(a),f=`${p}_temp_${Date.now()}`,{rev:m}=await Oe.updateRestoreStatus(r.docId,r.docRev,Fe.AppBackupStatus.STARTED);await pm(Fe.AppBackupTrigger.RESTORING,i,a,{processing:t,createdBy:s,name:o});let g=await Oe.downloadAppBackup(n),y=Fe.AppBackupStatus.COMPLETE;try{await t.importAppFn(f,W.db.getDB(f),{file:{type:"application/gzip",path:g},key:g}),await jC(p),await new W.db.Replication({source:f,target:p}).replicate()}catch(I){W.logging.logAlert("App restore error",I),y=Fe.AppBackupStatus.FAILED;let C=I instanceof Error?I.message:String(I);await Oe.trackBackupError(a,n,`Backup restore failed: ${C}`)}finally{try{await W.db.getDB(f,{skip_setup:!0}).destroy()}catch{}}await Oe.updateRestoreStatus(r.docId,m,y),fr.default.existsSync(g)&&fr.default.rmSync(g,{force:!0})})}async function WC(e,t){let r=e.data,a=r.appId,n=r.export.trigger,o=r.export.name,s=W.tenancy.getTenantIDFromAppID(a);await W.tenancy.doInTenant(s,async()=>{try{let{rev:i}=await Oe.updateBackupStatus(r.docId,Fe.AppBackupStatus.STARTED);return pm(n,s,a,{processing:t,doc:{id:r.docId,rev:i},name:o})}catch(i){W.logging.logAlert("App backup error",i);let p=i instanceof Error?i.message:String(i);await Oe.trackBackupError(a,r.docId,`Backup export failed: ${p}`)}})}var $C=async e=>{am(),await zs(e.processing)},Se={...Oe,processing:Js,init:$C,getBackupQueue:Dt};var cm=async e=>{e.backups&&await Se.init(e.backups)};var ye={};w(ye,{create:()=>MM,find:()=>BM,get:()=>NM,remove:()=>GM,update:()=>kM});var PA=P($i()),st=require("@budibase/backend-core");var UA=require("@budibase/types");async function NM(e){let t=st.tenancy.getGlobalDB(),r=new st.db.QueryBuilder(t.name,UA.SearchIndex.USER);r.setIndexBuilder(st.db.searchIndexes.createUserIndex),r.setLimit(e.pageSize),r.addEqual("scimInfo.isSync",!0);for(let[n,o]of Object.entries(e.filters?.equal??{}))r.addEqual(n,o);r.setSort("_id"),r.setSkip(e.skip);let a=await r.run();return{users:a.rows,total:a.totalRows}}async function BM(e){return await st.users.getById(e)}async function MM(e){let t=await Ce.getUserByEmail(e.email);if(t){if(t.scimInfo?.isSync)throw new st.HTTPError("User is already synched",409);e={...t,scimInfo:(0,PA.default)(t.scimInfo,e.scimInfo),password:void 0,firstName:e.firstName,lastName:e.lastName,updatedAt:e.updatedAt}}return await Ce.save(e,{requirePassword:!1})}async function kM(e,t){return await Ce.save(e,{requirePassword:!1,allowChangingEmail:t?.allowChangingEmail})}async function GM(e){return await Ce.destroy(e)}var br={};w(br,{create:()=>FM});var qA=P($i());var DA=require("@budibase/backend-core");async function FM(e){let t=await Io(e.name),r;if(!t)r=(await Q.save(e)).id;else{if(t.scimInfo?.isSync)throw new DA.HTTPError("Group is already synched",409);r=t._id,t.users&&(await Q.removeUsers(r,t.users.map(n=>n._id)),delete t.users),t.scimInfo=(0,qA.default)(t.scimInfo,e.scimInfo),await Q.save(t)}return await Q.get(r)}var Bt={};w(Bt,{logRequest:()=>jM,logResponse:()=>QM});var Ki=require("@budibase/backend-core");async function jM(e){Ki.logging.logWarn("SCIM request log",e)}async function QM(e){Ki.logging.logWarn("SCIM response error",e)}var Xi={};w(Xi,{doInScimContext:()=>Yi,feature:()=>$,internalGroupOnly:()=>_a,licenseAuth:()=>MA,licensing:()=>NA,requireSCIM:()=>Hi,scimGroupOnly:()=>va,scimUserOnly:()=>Ra});var St=require("@budibase/backend-core");var Vn=require("@budibase/types"),WM=(e={checkUsersLimit:!0})=>async(t,r)=>{if((e.licensingCheck?e.licensingCheck:()=>!!t.user)(t)){if(St.env.SELF_HOSTED&&St.env.DEFAULT_LICENSE)return t.user.license=wo,r();t.user.license=await Ve.cache.getCachedLicense(t,{populateLicense:e.populateLicense,populateFreeLicense:e.populateFreeLicense}),e.checkUsersLimit&&(St.utils.isServingApp(t)||St.utils.isServingBuilder(t)||St.utils.isServingBuilderPreview(t)||St.utils.isPublicApiRequest(t))&&await ze.usageLimitIsExceeded({name:Vn.StaticQuotaName.USERS,type:Vn.QuotaUsageType.STATIC,usageChange:0})}return r()},NA=WM;var $={};w($,{requireFeature:()=>$M,requireFeatures:()=>KM});var $M=e=>async(t,r)=>{await hn(e),await r()},KM=(...e)=>async(t,r)=>{await ms(e),await r()};var Yn=require("@budibase/backend-core");var Yi=async(e,t)=>(Yn.env.DISABLE_SCIM_CALLS||await Bt.logRequest({...e.request.toJSON(),body:e.request.body}),await Yn.context.doInScimContext(async()=>{let r=await t();return await Bt.logResponse({...e.response.toJSON(),body:e.response.body}),r}));var Hi=async(e,t)=>{await As(),await t()};var BA=require("@budibase/backend-core");var Ra=e=>zi(BA.users.getById,e,!0),va=e=>zi(M.get,e,!0),_a=e=>zi(M.get,e,!1);function zi(e,t,r){return async(a,n)=>{let o=a.params[t];return typeof o!="string"&&a.throw(404),!!(await e(o)).scimInfo?.isSync!==r&&a.throw(404),n()}}var xa=require("@budibase/backend-core");var Ji=require("dd-trace");async function MA(e,t){await Ji.tracer.trace("licenseAuth",async r=>{let a=e.request.headers[xa.constants.Header.LICENSE_KEY];Array.isArray(a)&&(a=a[0]),r.addTags({licenseKey:a}),a||e.throw(403,"License key not provided");let n=await cs(a);n||(r.addTags({licenseFound:!1}),e.throw(403,"License not found or invalid")),n.tenantId||e.throw(403,"License does not have a tenant ID"),Ji.tracer.setUser({id:"anonymous",tenantId:n.tenantId}),await xa.context.doInSelfHostTenantUsingCloud(n.tenantId,async()=>{await xa.context.doInLicenseContext(n,async()=>{await t()})})})}var iu={};w(iu,{appBackups:()=>vb,auditLogs:()=>yb,environmentVariables:()=>ib,groups:()=>XA,scim:()=>rI,users:()=>iI});var kA=require("@budibase/backend-core");async function GA(e){let t=e.request.body;if(t.name=t.name.trim(),delete t.roles,t._id){let a=await bt(t._id);t.roles=a.roles,t.scimInfo=a.scimInfo}let r=await dr(t);e.body={_id:r.id,_rev:r.rev}}async function FA(e){let t=e.params.groupId,r=e.request.body.add,a=e.request.body.remove;(r&&!Array.isArray(r)||a&&!Array.isArray(a))&&e.throw(400,"Must supply a list of users to add or to remove");let n,o;r&&(n=await vn(t,r)),a&&(o=await xs(t,a)),e.body={added:n,removed:o}}async function jA(e){let t=e.params.groupId,r=e.request.body.add,a=e.request.body.remove;(r&&!Array.isArray(r)||a&&!Array.isArray(a))&&e.throw(400,"Must supply a list of objects, with appId and roleId to add or remove"),e.body=await Cs(t,{appsToAdd:r,appsToRemove:a})}async function QA(e){e.body={data:await ha()}}async function WA(e){let{groupId:t,rev:r}=e.params;try{await _s(t,r),e.body={message:"Group deleted successfully"}}catch(a){e.throw(a.status,a)}}async function $A(e){try{e.body=await bt(e.params.groupId)}catch(t){e.throw(t.status,t)}}async function KA(e){let{pageSize:t=10,bookmark:r,emailSearch:a}=e.request.query,n=e.params.groupId,o={limit:t+1},s=await Wa(n,{...o,emailSearch:a,bookmark:r}),i=a?s[t]?.email:s[t]?._id,p=!!i;e.body={users:s.slice(0,t),bookmark:i,hasNextPage:p}}async function VA(e){let{groupId:t,appId:r}=e.params;await Os(t,r),e.body={message:"Group app builder access updated."}}async function YA(e){let{groupId:t,appId:r}=e.params;await Ls(t,r),e.body={message:"group app builder access removed."}}async function HA(e){let{groupId:t}=e.params,{csvContent:r}=e.request.body;(r===void 0||r.trim().length===0)&&e.throw(400,"CSV is empty");let a=await kA.csv.jsonFromCsvString(r,{allowSingleColumn:!0});(!a||a.length===0)&&e.throw(400,"CSV file is invalid");let o=Object.keys(a[0]).find(g=>/^(email|e-mail|email address|mail|e_mail)$/i.test(g.trim()));o||e.throw(400,"CSV file must contain an email column");let s=Array.from(new Set(a.map(g=>g[o]).filter(g=>g&&typeof g=="string"&&g.trim().length>0).map(g=>g.trim())));s.length===0&&e.throw(400,"No valid email addresses found in CSV");try{await bt(t)}catch(g){if(g.status===404)e.throw(404,"Group not found");else throw g}let i=[],p=[],f=[],m=await Promise.all(s.map(g=>Ce.getUserByEmail(g)));for(let g of s){let y=m.find(I=>I?.email===g);y?(i.push({_id:y._id,email:y.email}),f.push(y._id)):p.push({email:g,reason:"User not found"})}f.length>0&&await vn(t,f),e.body={added:i,skipped:p}}var zA=P(require("@koa/router")),le=P(require("joi"));var we=require("@budibase/types"),Le=require("@budibase/backend-core"),JA=new zA.default;function YM(){return Le.auth.joiValidator.body(le.default.object({_id:le.default.string().optional(),_rev:le.default.string().optional(),color:le.default.string().required(),icon:le.default.string().required(),name:le.default.string().trim().required().max(50),role:le.default.string().optional(),users:le.default.array().optional(),apps:le.default.array().optional(),roles:le.default.object().optional(),createdAt:le.default.string().optional(),updatedAt:le.default.string().optional()}).required())}JA.post("/api/global/groups",Le.auth.adminOnly,$.requireFeature(we.Feature.USER_GROUPS),YM(),GA).get("/api/global/groups",$.requireFeature(we.Feature.USER_GROUPS),QA).delete("/api/global/groups/:groupId/:rev",$.requireFeature(we.Feature.USER_GROUPS),Le.auth.adminOnly,_a("groupId"),WA).get("/api/global/groups/:groupId",$.requireFeature(we.Feature.USER_GROUPS),Le.auth.builderOrAdmin,$A).get("/api/global/groups/:groupId/users",$.requireFeature(we.Feature.USER_GROUPS),Le.auth.builderOrAdmin,KA).post("/api/global/groups/:groupId/users",Le.auth.adminOnly,$.requireFeature(we.Feature.USER_GROUPS),_a("groupId"),FA).post("/api/global/groups/:groupId/users/bulk",Le.auth.adminOnly,$.requireFeature(we.Feature.USER_GROUPS),_a("groupId"),Le.auth.joiValidator.body(le.default.object({csvContent:le.default.string().required()}).required()),HA).post("/api/global/groups/:groupId/apps",Le.auth.builderOrAdmin,$.requireFeature(we.Feature.USER_GROUPS),jA).post("/api/global/groups/:groupId/app/:appId/builder",Le.auth.builderOrAdmin,$.requireFeatures(we.Feature.USER_GROUPS,we.Feature.APP_BUILDERS),VA).delete("/api/global/groups/:groupId/app/:appId/builder",Le.auth.builderOrAdmin,$.requireFeatures(we.Feature.USER_GROUPS,we.Feature.APP_BUILDERS),YA);var XA=JA;var Zi=require("@budibase/types");var eu=require("@budibase/backend-core");async function ZA(e){e.body={encryptionKeyAvailable:Je.isEncryptionKeyAvailable()}}async function eb(e){e.body={variables:await Je.fetch()}}async function tb(e){let{name:t,production:r,development:a}=e.request.body;await Je.update(t,{production:r,development:a});let n=[Zi.AppEnvironment.PRODUCTION];r!==a&&n.push(Zi.AppEnvironment.DEVELOPMENT),await eu.events.environmentVariable.created(t,n),e.body={message:`Environment variable "${t}" created.`}}async function rb(e){let{production:t,development:r}=e.request.body,a=e.params.varName;await Je.update(a,{production:t,development:r}),e.body={message:`Environment variable "${a}" updated.`}}async function ab(e){let t=e.params.varName;await Je.remove(t),await eu.events.environmentVariable.deleted(t),e.body={message:`Environment variable "${t}" deleted.`}}var Mt=require("@budibase/backend-core"),ob=P(require("@koa/router")),Ca=P(require("joi")),sb=new ob.default;function nb(){return Mt.auth.joiValidator.body(Ca.default.object({name:Ca.default.string().optional(),production:Ca.default.string().required(),development:Ca.default.string().required()}))}sb.get("/api/env/variables/status",Mt.auth.builderOrAdmin,ZA).get("/api/env/variables",Mt.auth.builderOrAdmin,eb).post("/api/env/variables",Mt.auth.builderOrAdmin,nb(),tb).patch("/api/env/variables/:varName",Mt.auth.builderOrAdmin,nb(),rb).delete("/api/env/variables/:varName",Mt.auth.builderOrAdmin,ab);var ib=sb;var tu=require("@budibase/backend-core");async function ub(e){let t=e.request.body,r=await It.fetch(t);await tu.events.auditLog.filtered(t),e.body=r}async function pb(e){let t=e.request.body,{stream:r}=It.download(t);await tu.events.auditLog.downloaded(t),e.attachment(`audit-logs-${Date.now()}.log`),e.body=r}async function cb(e){e.body={events:It.definitions()}}var fb=require("@budibase/types"),kt=require("@budibase/backend-core"),mb=P(require("@koa/router")),Pe=P(require("joi"));function lb(){return kt.auth.joiValidator.body(Pe.default.object({userIds:Pe.default.array().items(Pe.default.string()).optional(),appIds:Pe.default.array().items(Pe.default.string()).optional(),events:Pe.default.array().items(Pe.default.string().valid(...Object.values(fb.Event))).optional(),startDate:Pe.default.string().optional().allow(""),endDate:Pe.default.string().optional().allow(""),fullSearch:Pe.default.string().optional().allow(""),bookmark:Pe.default.number()}))}var gb=new mb.default;gb.post("/api/global/auditlogs/search",kt.auth.adminOnly,lb(),ub).get("/api/global/auditlogs/download",kt.auth.adminOnly,kt.middleware.querystringToBody,lb(),pb).get("/api/global/auditlogs/definitions",kt.auth.adminOnly,cb);var yb=gb;var ru=require("@budibase/types");var Hn=require("@budibase/backend-core");async function Gt(e,t){t||e.throw(400,"App ID missing"),await Yt.appExists(t)||e.throw(400,`Provided app ID: ${t} - is invalid.`)}async function hb(e){let t=e.params.appId;await Gt(e,t);let r=e.request.body,a=e.user?._id,n=await Se.triggerAppBackup(t,ru.AppBackupTrigger.MANUAL,{name:r.name,createdBy:a});n||e.throw(500,"Unable to start backup."),e.body={backupId:n,message:"Backup triggered - process starting."}}async function Ab(e){let t=e.params.appId;await Gt(e,t);let r=e.params.backupId,a=e.request.body.name,n=await Se.triggerAppRestore(t,r,a,e.user?._id);n||e.throw(500,"Unable to start restore."),await Hn.events.backup.appBackupRestored(n.metadata),e.body={restoredId:n?.restoreId,message:"Restore triggered - process starting."}}async function bb(e){let t=e.params.appId;await Gt(e,t);let r=e.params.backupId;await Se.deleteAppBackup(r),e.body={message:"Backup deleted successfully."}}async function Ib(e){let t=Hn.context.getAppId();await Gt(e,t);let{backupIds:r}=e.request.body;(!Array.isArray(r)||r.length===0)&&e.throw(400,"backupIds must be a non-empty array");let a=await Se.deleteAppBackups(r),n=a.filter(s=>s.success).length,o=a.length-n;e.body={message:`${n} backups deleted successfully${o>0?`, ${o} failed`:""}.`,results:a,successCount:n,failureCount:o}}async function Sb(e){let t=e.params.appId;await Gt(e,t);let r=e.request.body;r?.trigger&&(r.trigger=r.trigger.toLowerCase(),Object.values(ru.AppBackupTrigger).includes(r.trigger)||e.throw(400,"Provided trigger is not a valid option.")),e.body=await Se.fetchAppBackups(t,{paginate:!0,...r})}async function wb(e){let t=e.params.appId;await Gt(e,t);let r=e.params.backupId,a=e.request.body;e.body=await Se.updateAppBackup(r,a.name)}async function Tb(e){let t=e.params.appId;await Gt(e,t);let r=e.params.backupId,{metadata:a,stream:n}=await Se.getBackupDownloadStream(r);e.attachment(`backup-${a.timestamp}.tar.gz`),e.body=n}var Eb=P(require("@koa/router")),Ft=P(require("joi")),zn=require("@budibase/types"),it=require("@budibase/backend-core"),Rb=new Eb.default;function XM(){return it.auth.joiValidator.body(Ft.default.object({trigger:Ft.default.string().valid(...Object.values(zn.AppBackupTrigger)),type:Ft.default.string().valid(...Object.values(zn.AppBackupType)),startDate:Ft.default.date(),endDate:Ft.default.date(),page:Ft.default.string()}))}Rb.post("/api/apps/:appId/backups",it.auth.builderOrAdmin,hb).post("/api/apps/:appId/backups/search",it.auth.builderOrAdmin,XM(),Sb).get("/api/apps/:appId/backups/:backupId/file",it.auth.builderOrAdmin,Tb).patch("/api/apps/:appId/backups/:backupId",it.auth.builderOrAdmin,wb).delete("/api/apps/:appId/backups/:backupId",it.auth.builderOrAdmin,bb).delete("/api/apps/:appId/backups",it.auth.builderOrAdmin,Ib).post("/api/apps/:appId/backups/:backupId/import",it.auth.builderOrAdmin,Ab);var vb=Rb;var tI=P(require("@koa/router"));var Jn=require("scim-patch");var xb=require("@budibase/backend-core");function _b(e,t){let r=e.request.query[t];if(r!==void 0)return+r}var Cb=async e=>{let t=_b(e,"pageSize")??20,r=_b(e,"startIndex"),a;e.request.query.filter&&(a=Y.user.userFilters(e.request.query.filter));let n=await ye.get({pageSize:t,skip:r,filters:a});e.body={schemas:["urn:ietf:params:scim:api:messages:2.0:ListResponse"],totalResults:n.total,Resources:n.users.map(Y.user.toScimUserResponse),startIndex:(r||0)+1,itemsPerPage:t}},Ob=async e=>{let{id:t}=e.params;typeof t!="string"&&e.throw(404);let r=await ye.find(t);e.body=Y.user.toScimUserResponse(r)},Lb=async e=>{let t=Y.user.fromScimUser(e.request.body);try{let r=await ye.create(t);e.body=Y.user.toScimUserResponse(r)}catch(r){throw r instanceof xb.EmailUnavailableError&&e.throw(409,"Email already in use"),r}};function ZM(e){let t=e.Operations.find(r=>(r.op==="Replace"||r.op==="replace")&&r.path==="active");return t?t.value===!1||t.value?.toLowerCase?.()==="false":!1}var Pb=async e=>{let t=await ye.find(e.params.id);t||e.throw(404);let r=Y.user.toScimUserResponse(t),a=e.request.body;try{(0,Jn.patchBodyValidation)(a)}catch{}if(ZM(a))return au(e);let n;try{n=(0,Jn.scimPatch)(r,a.Operations)}catch{}n||e.throw(500);let o=Y.user.fromScimUser(n);await ye.update(o,{allowChangingEmail:!0}),e.body=Y.user.toScimUserResponse(o)},au=async e=>{let{id:t}=e.params;typeof t!="string"&&e.throw(404),await ye.remove(t),e.status=204};var Vb=P(Kb()),Yb=require("@budibase/shared-core"),Xn=require("scim-patch");var Zn=require("scim2-parse-filter");function Hb(e,t){for(let r of t.split(","))delete e[r]}var zb=async e=>{let r=(await Q.fetch()).filter(o=>o.scimInfo?.isSync).map(Y.group.toScimGroupResponse),{filter:a,excludedAttributes:n}=e.request.query;if(a){let o=(0,Zn.filter)((0,Zn.parse)(a));r=r.filter(o)}n&&r.forEach(o=>{Hb(o,n)}),e.body={schemas:["urn:ietf:params:scim:api:messages:2.0:ListResponse"],totalResults:r.length,Resources:r,startIndex:1,itemsPerPage:r.length}},Jb=async e=>{let t=Y.group.fromScimGroup(e.request.body),r=await br.create(t);e.body=Y.group.toScimGroupResponse(r)},Xb=async e=>{let{id:t}=e.params,r=await Q.get(t),a=Y.group.toScimGroupResponse(r),{excludedAttributes:n}=e.request.query;n&&Hb(a,n),e.body=a},Zb=async e=>{let{id:t}=e.params,r=await Q.get(t);await Q.remove(t,r._rev),e.status=204},eI=async e=>{let{id:t}=e.params,r=await Q.get(t),a=Y.group.toScimGroupResponse(r),n=e.request.body;try{(0,Xn.patchBodyValidation)(n)}catch{e.throw(400)}let{true:o,false:s}=(0,Vb.default)(n.Operations,i=>i.path==="members");if(s?.length){let i=(0,Xn.scimPatch)(a,s);i||e.throw(500);let p={...Y.group.fromScimGroup(i),_rev:r._rev};await Q.save(p)}if(o?.length){let i=[],p=[];for(let{op:f,value:m}of o)switch(f){case"add":case"Add":for(let g of m)i.push(await ye.find(g.value));break;case"remove":case"Remove":for(let g of m)p.push(await ye.find(g.value));break;case"replace":case"Replace":throw new Error("Replacing members is not allowed");default:Yb.utils.unreachable(f)}i.length&&await Q.addUsers(t,i.map(f=>f._id)),p.length&&await Q.removeUsers(t,p.map(f=>f._id))}e.body=Y.group.toScimGroupResponse(await Q.get(t))};var Oa=require("@budibase/types"),Te=new tI.default({prefix:"/api/global/scim/v2"});Te.use(Hi);Te.use(Yi);Te.get("/users",Cb);Te.get("/users/:id",Ra("id"),Ob);Te.post("/users",Lb);Te.patch("/users/:id",Ra("id"),Pb);Te.delete("/users/:id",Ra("id"),au);Te.get("/groups",zb);Te.post("/groups",$.requireFeature(Oa.Feature.USER_GROUPS),Jb);Te.get("/groups/:id",$.requireFeature(Oa.Feature.USER_GROUPS),va("id"),Xb);Te.delete("/groups/:id",$.requireFeature(Oa.Feature.USER_GROUPS),va("id"),Zb);Te.patch("/groups/:id",$.requireFeature(Oa.Feature.USER_GROUPS),va("id"),eI);var rI=Te;var oI=P(require("@koa/router"));var nu=require("@budibase/backend-core");async function aI(e){let{userId:t,appId:r}=e.params,a=await nt.db.getUser(t);if(nu.users.isGlobalBuilder(a)){e.body={message:"User already admin - no permissions updated."};return}await nt.addAppBuilder(a,r),e.body={message:`User "${a.email}" app builder access updated.`}}async function nI(e){let{userId:t,appId:r}=e.params,a=await nt.db.getUser(t);if(nu.users.isGlobalBuilder(a)){e.body={message:"User already admin - no permissions removed."};return}await nt.removeAppBuilder(a,r),e.body={message:`User "${a.email}" app builder access removed.`}}var ou=require("@budibase/types"),su=require("@budibase/backend-core"),sI=new oI.default;sI.post("/api/global/users/:userId/app/:appId/builder",su.auth.builderOrAdmin,$.requireFeatures(ou.Feature.APP_BUILDERS),aI).delete("/api/global/users/:userId/app/:appId/builder",su.auth.builderOrAdmin,$.requireFeatures(ou.Feature.APP_BUILDERS),nI);var iI=sI;var Y={};w(Y,{group:()=>pu,user:()=>uu});var uu={};w(uu,{fromScimUser:()=>xk,toScimUserResponse:()=>Rk,userFilters:()=>Ck});var eo=require("@budibase/types"),uI=require("scim2-parse-filter"),pI=require("@budibase/backend-core"),cI=require("@budibase/shared-core"),{unreachable:Ek}=cI.utils,Rk=e=>{let{isSync:t,roles:r,...a}=e.scimInfo||{},n={...a,schemas:["urn:ietf:params:scim:schemas:core:2.0:User"],id:e._id,meta:{resourceType:"User",created:new Date(e.createdAt),lastModified:new Date(e.updatedAt)},active:e.status===eo.UserStatus.ACTIVE};return(e.firstName||e.lastName)&&(n.name={formatted:[e.firstName,e.lastName].filter(o=>o).join(" "),familyName:e.lastName,givenName:e.firstName}),n},vk=e=>!!e?.id;function _k(e){if(pI.utils.validEmail(e.userName))return e.userName;if(e.emails)return e.emails.find(t=>t.primary)?.value||e.emails[0]?.value}var xk=e=>{let t=vk(e)?e:void 0,r=_k(e);if(!r)throw new Error("Email is required");let a;switch(e.active){case"True":case"true":case!0:a=!0;break;case"False":case"false":case!1:a=!1;break;default:Ek(e.active)}let n,o;return e.name?.givenName?(n=e.name?.givenName,o=e.name?.familyName):n=e.displayName,{tenantId:"",_id:t?.id,userId:t?.id,email:r,firstName:n,lastName:o,scimInfo:{...e,isSync:!0},roles:{},status:a?eo.UserStatus.ACTIVE:eo.UserStatus.INACTIVE,createdAt:t?.meta.created.getTime(),updatedAt:t?.meta.lastModified.toISOString()}},Ck=e=>{let t={equal:{}},r=(0,uI.parse)(e);function a(n){switch(n.op){case"eq":{let o=n.attrPath,s;switch(o){case"emails.value":s="email";break;default:s=`scimInfo.${o}`}t.equal[s]=n.compValue;break}case"and":for(let o of n.filters)a(o);break;default:console.warn("Filter not handled",{filter:n})}}return a(r),t};var pu={};w(pu,{fromScimGroup:()=>Pk,toScimGroupResponse:()=>Ok});var Ok=e=>({schemas:["urn:ietf:params:scim:schemas:core:2.0:Group"],id:e._id,externalId:e.scimInfo.externalId,meta:{resourceType:"Group",created:new Date(e.createdAt),lastModified:new Date(e.updatedAt)},displayName:e.name,members:e.users?.map(t=>({value:t._id}))}),Lk=e=>!!e?.id,Pk=e=>{let t=Lk(e)?e:void 0;return{_id:t?.id,name:e.displayName,scimInfo:{externalId:e.externalId,isSync:!0},icon:"UserGroup",color:"var(--spectrum-global-color-blue-600)",createdAt:t?.meta.created.getTime(),updatedAt:t?.meta.lastModified.toISOString()}};var Uu={};w(Uu,{LLM:()=>Xe,LLMRequest:()=>K,TableGeneration:()=>Pu,agentHistoryTitleSystemPrompt:()=>Qk,agentSystemPrompt:()=>jk,aiColumnSchemas:()=>Ou,aiTableResponseToTableSchema:()=>vu,appendAIColumns:()=>_u,classifyText:()=>du,cleanData:()=>fu,extractFileData:()=>Mk,generateAIColumns:()=>Eu,generateCode:()=>Fk,generateCronExpression:()=>mu,generateData:()=>Ru,generateJs:()=>Au,generateSQL:()=>Gk,generateTables:()=>Tu,generationStructure:()=>Cu,getLLM:()=>Ua,getLLMConfig:()=>wu,getLLMOrThrow:()=>SI,normalizeContentType:()=>cu,parseResponseFormat:()=>ro,sanitiseToolName:()=>Uk,searchWeb:()=>hu,sentimentAnalysis:()=>yu,summarizeText:()=>to,tableDataStructuredOutput:()=>Lu,translate:()=>gu});var La=require("@budibase/types");function Uk(e){if(e.length>64)throw new Error("Tool name must be under 64 characters long");return e.replace(/[^a-zA-Z0-9_-]/g,"_")}function cu(e){return e?e.includes("/")?e:{[La.SupportedFileType.PDF]:"application/pdf",[La.SupportedFileType.JPG]:"image/jpeg",[La.SupportedFileType.JPEG]:"image/jpeg",[La.SupportedFileType.PNG]:"image/png"}[e.toLowerCase()]||"application/octet-stream":"application/octet-stream"}var io=require("@budibase/types");var Ze=require("@budibase/backend-core"),hI=require("@budibase/types");var ao=P(require("openai"));var wt=require("@budibase/types");var lI=require("@budibase/shared-core");var Tt=P(require("dd-trace"));function lu(e,t){return t.map(r=>e[r]).join(" ")}var Xe=class{constructor({model:t,apiKey:r,maxTokens:a}){this._model=t,this._apiKey=r,this._maxTokens=a??parseInt(process.env.BUDIBASE_AI_MAX_PROMPT_TOKENS||"1000")}get model(){return this._model}get apiKey(){return this._apiKey}get maxTokens(){return this._maxTokens}async prompt(t){return await Tt.default.trace("prompt",async()=>{let r=typeof t=="string"?new K().addUserMessage(t):t,{messages:a,tokensUsed:n}=await Tt.default.trace("chatCompletion",()=>this.chatCompletion(r));return!a||a.length===0?{message:"",tokensUsed:n}:{message:a[a.length-1].content||"",tokensUsed:n}})}async chat(t){return await Tt.default.trace("chat",async()=>await this.chatCompletion(t))}async*chatStream(t){yield*this.chatCompletionStream(t)}async summarizeText(t){return Tt.default.trace("summarizeText",()=>this.prompt(to(t)))}async generateCronExpression(t){return Tt.default.trace("generateCronExpression",()=>this.prompt(mu(t)))}async operation(t,r){return Tt.default.trace("operation",a=>{a.addTags({operation:t.operation,rowId:r.id});let n=this.promptForOperation(t,r);return this.prompt(n)})}promptForOperation(t,r){let{operation:a,column:n,columns:o,language:s,categories:i,prompt:p}=t;switch(a){case wt.AIOperationEnum.SUMMARISE_TEXT:return to(lu(r,o));case wt.AIOperationEnum.CLEAN_DATA:return fu(r[n]);case wt.AIOperationEnum.TRANSLATE:return gu(r[n],s);case wt.AIOperationEnum.CATEGORISE_TEXT:if(!i)throw Error("No categories provided for categorise text operation. Please provide categories.");return du(lu(r,o),i.split(","));case wt.AIOperationEnum.SENTIMENT_ANALYSIS:return yu(r[n]);case wt.AIOperationEnum.PROMPT:return p;case wt.AIOperationEnum.SEARCH_WEB:return hu(lu(r,o));default:throw lI.utils.unreachable(a)}}async generateJs(t,r){return await Tt.default.trace("generateJs",async()=>{let{bindings:a=[],snippets:n=[]}=r||{};return await this.prompt(Au(a,n).addUserMessage(t))})}};var fI=require("@budibase/types"),bu=require("openai/helpers/zod");var mI=(a=>(a.GPT_5_MINI="gpt-5-mini",a.GPT_5="gpt-5",a.GPT_5_NANO="gpt-5-nano",a))(mI||{});function ro(e){if(e)return e==="text"?{type:"text"}:e==="json"?{type:"json_object"}:e}function dI(e){if(!e)return 0;let t=e.prompt_tokens;return e.completion_tokens*3+t}var Ue=class extends Xe{constructor(r){super(r);this.client=this.getClient(r)}getClient(r){if(!r.apiKey)throw new Error("No OpenAI API key found");return new ao.default({apiKey:r.apiKey})}async uploadFile(r,a,n){let o=cu(n);if(fI.ImageContentTypes.includes(o.toLowerCase())){let p;if(Buffer.isBuffer(r))p=r;else{let m=[];for await(let g of r)m.push(g);p=Buffer.concat(m)}let f=p.toString("base64");return`data:${o};base64,${f}`}let s=await(0,ao.toFile)(r,a);return(await this.client.files.create({file:s,purpose:"assistants"})).id}async chatCompletion(r){let a={model:this.model,messages:r.messages,max_completion_tokens:this._maxTokens,response_format:ro(r.format)};Object.values(mI).includes(this.model)&&(a.verbosity="low",a.reasoning_effort="minimal"),r.tools&&r.tools.length>0&&(a.tool_choice="auto",a.tools=r.tools.map(bu.zodFunction));let n=await this.client.chat.completions.create(a),o=n?.choices?.[0]?.message;if(o?.tool_calls){r.addMessage(o);let s=[];for(let i of o.tool_calls){if(i.type!=="function"||!i.function){console.warn(`[OPENAI TOOL WARN] Unsupported tool call type: ${i.type}`);continue}let p=i.function.name,f=r.findTool(p);if(!f)throw new Error(`Tool ${p} not found in prompt tools`);let m=JSON.parse(i.function.arguments);s.push(f.handler(m).then(g=>({role:"tool",tool_call_id:i.id,content:g})).catch(g=>(console.error(`[OPENAI TOOL ERROR] Tool ${p} failed in OpenAI handler:`,g),{role:"tool",tool_call_id:i.id,content:`Error: ${g.message}`})))}return r.addMessages(await Promise.all(s)),this.chatCompletion(r)}else{if(o?.content)return{messages:[...r.messages,{role:o.role,content:o.content}],tokensUsed:dI(n.usage)};throw new Error("No response found")}}async*chatCompletionStream(r){let a={model:this.model,messages:r.messages,max_tokens:this.maxTokens,response_format:ro(r.format),stream:!0};r.tools&&r.tools.length>0&&(a.tool_choice="auto",a.tools=r.tools.map(bu.zodFunction));try{let n=await this.client.chat.completions.create(a),o=null,s="",i=null;for await(let f of n){let m=f?.choices?.[0]?.delta;if(m){if(m.content&&(s+=m.content,yield{type:"content",content:m.content}),m.tool_calls&&m.tool_calls.length>0){let g=m.tool_calls[0];g.id?(o={id:g.id,name:g.function?.name||"",arguments:g.function?.arguments||""},yield{type:"tool_call_start",toolCall:{id:o.id,name:o.name,arguments:o.arguments}}):o&&g.function?.arguments&&(o.arguments+=g.function.arguments,yield{type:"tool_call_start",toolCall:{id:o.id,name:o.name,arguments:o.arguments}})}f.usage&&(i=f.usage)}}let p=i?dI(i):0;if(o){r.addMessage({role:"assistant",content:"",tool_calls:[{id:o.id,type:"function",function:{name:o.name,arguments:o.arguments}}]});let f=r.findTool(o.name);if(f)try{let m=JSON.parse(o.arguments),g=await f.handler(m);yield{type:"tool_call_result",toolResult:{id:o.id,result:g}},r.addMessage({role:"tool",tool_call_id:o.id,content:g}),yield*this.chatCompletionStream(r);return}catch(m){yield{type:"tool_call_result",toolResult:{id:o.id,result:`Error: ${m.message}`,error:m.message}},r.addMessage({role:"tool",tool_call_id:o.id,content:`Error: ${m.message}`}),yield*this.chatCompletionStream(r);return}else{let m=`Tool '${o.name}' not found`;yield{type:"tool_call_result",toolResult:{id:o.id,result:m,error:m}},r.addMessage({role:"tool",tool_call_id:o.id,content:m}),yield*this.chatCompletionStream(r);return}}s&&r.addMessage({role:"assistant",content:s}),yield{type:"done",messages:r.messages,tokensUsed:p}}catch(n){yield{type:"error",content:n.message}}}};var ee=require("@budibase/backend-core"),gI=require("@budibase/types");var Iu=require("dd-trace"),no=class extends Xe{async prompt(t){let r=await super.prompt(t);return r.tokensUsed&&await En(r.tokensUsed),r}async chat(t){let r=await super.chat(t);return r.tokensUsed&&await En(r.tokensUsed),r}async uploadFile(t,r,a){return ee.env.SELF_HOSTED?this.uploadFileSelfHost(t,r,a):this.uploadFileCloud(t,r,a)}async uploadFileCloud(t,r,a){return new Ue({apiKey:ee.env.OPENAI_API_KEY,model:this.model,max_completion_tokens:this.maxTokens}).uploadFile(t,r,a)}async uploadFileSelfHost(t,r,a){let n;if(Buffer.isBuffer(t))n=t;else{let p=[];for await(let f of t)p.push(f);n=Buffer.concat(p)}let o=n.toString("base64");if(a&&gI.ImageContentTypes.includes(a.toLowerCase()))return`data:image/jpeg;base64,${o}`;if(!ee.env.BUDICLOUD_URL)throw new Error("No Budibase URL found");if(!this._apiKey){let p=await gn();if(!p)throw new Error("No license key found");this._apiKey=p}let s=await fetch(`${ee.env.BUDICLOUD_URL}/api/ai/upload-file`,{method:"POST",headers:{"Content-Type":"application/json",[ee.constants.Header.LICENSE_KEY]:this._apiKey},body:JSON.stringify({data:o,filename:r,contentType:a})});if(!s.ok)throw await ee.HTTPError.fromResponse(s);return(await s.json()).fileId}async chatCompletion(t){return ee.env.SELF_HOSTED?this.chatCompletionSelfHost(t):this.chatCompletionCloud(t)}async chatCompletionCloud(t){return await Iu.tracer.trace("chatCompletionCloud",async()=>await new Ue({apiKey:ee.env.OPENAI_API_KEY,model:this.model,max_completion_tokens:this.maxTokens}).chatCompletion(t))}async chatCompletionSelfHost(t){return await Iu.tracer.trace("chatCompletionSelfHost",async r=>{if(!ee.env.BUDICLOUD_URL)throw new Error("No Budibase URL found");if(r.addTags({budicloudUrl:ee.env.BUDICLOUD_URL}),!this._apiKey){let o=await gn();if(!o)throw new Error("No license key found");this._apiKey=o,r.addTags({licenseKey:this._apiKey})}let a={messages:t.messages,format:t.format,useTools:t.tools.length>0},n=await fetch(`${ee.env.BUDICLOUD_URL}/api/ai/chat`,{method:"POST",headers:{"Content-Type":"application/json",[ee.constants.Header.LICENSE_KEY]:this._apiKey},body:JSON.stringify(a)});if(!n.ok)throw await ee.HTTPError.fromResponse(n);return await n.json()})}async*chatCompletionStream(t){ee.env.SELF_HOSTED?yield*this.chatCompletionStreamSelfHost(t):yield*this.chatCompletionStreamCloud(t)}async*chatCompletionStreamCloud(t){yield*new Ue({apiKey:ee.env.OPENAI_API_KEY,model:this.model,max_completion_tokens:this.maxTokens}).chatCompletionStream(t)}async*chatCompletionStreamSelfHost(t){try{let r=await this.chatCompletionSelfHost(t);if(r.messages.length>0){let a=r.messages[r.messages.length-1];a.content&&(yield{type:"content",content:a.content})}yield{type:"done",messages:r.messages,tokensUsed:r.tokensUsed}}catch(r){yield{type:"error",content:r.message}}}};var Pa=require("dd-trace");var Su=P(require("@anthropic-ai/sdk"));function qk(e){if(!e)return 0;let t=e.input_tokens;return e.output_tokens*3+t}var oo=class extends Xe{constructor(r){super(r);this.client=new Su.default({apiKey:r.apiKey})}firstTextBlock(r){for(let a of r.content)if(a.type==="text")return a.text}async uploadFile(r,a,n){throw new Error("File upload not supported for this LLM provider")}async chatCompletion(r){try{let a=await this.client.messages.create({model:this.model,messages:r.messages.map(({content:o})=>{if(o==null)return{role:"user",content:""};if(typeof o=="string")return{role:"user",content:o};let s="";for(let i of o)i.type==="text"?s+=i.text:["image_url","input_audio","file"].includes(i.type);return{role:"user",content:s}}),max_tokens:this.maxTokens}),n=this.firstTextBlock(a)||"";return{messages:[...r.messages,{role:"assistant",content:n}],tokensUsed:qk(a.usage)}}catch(a){throw a instanceof Su.default.APIError&&console.error(`Anthropic Prompt failed with error ${a.name} and status: ${a.status}`),a}}async*chatCompletionStream(r){try{let a=await this.chatCompletion(r);if(a.messages.length>0){let n=a.messages[a.messages.length-1];n.content&&(yield{type:"content",content:n.content})}yield{type:"done",messages:a.messages,tokensUsed:a.tokensUsed}}catch(a){yield{type:"error",content:a.message}}}};var AI=require("zod"),bI=require("openai/helpers/zod");var yI=require("openai"),so=class extends Ue{getClient(t){if(!t.apiKey)throw new Error("No Azure OpenAI API key found");if(!t.model)throw new Error("No Azure OpenAI model specified");return new yI.AzureOpenAI({apiKey:t.apiKey,apiVersion:"2024-10-01-preview",baseURL:t.baseUrl})}};var II="gpt-5-mini",Dk={OpenAI:Ue,TogetherAI:Ue,AzureOpenAI:so,Custom:Ue,Anthropic:oo,BudibaseAI:no};async function Nk(){return await Pa.tracer.trace("getAIConfig",async e=>{let t={type:hI.ConfigType.AI,config:{}};if(!Ze.context.isSelfHostUsingCloud()){let a=await Ze.configs.getAIConfig();a&&(t=a)}await bs(t);let r=Object.values(t.config).find(a=>a.active&&a.isDefault);if(!r){e.addTags({enabled:!1,reason:"no provider found"});return}return e.addTags({enabled:!0}),{provider:r.provider,model:r.defaultModel||II,apiKey:r.apiKey,baseUrl:r.baseUrl}})}async function Bk(){return Pa.tracer.trace("getSelfHostOpenAIKeyConfig",e=>{if(!Ze.env.SELF_HOSTED){e.addTags({enabled:!1,reason:"not self host"});return}if(!Ze.env.OPENAI_API_KEY){e.addTags({enabled:!1,reason:"no OPENAI_API_KEY"});return}return e.addTags({enabled:!0}),{provider:"OpenAI",model:II,apiKey:Ze.env.OPENAI_API_KEY}})}async function wu(){return Pa.tracer.trace("getLLMConfig",async()=>await Nk()||await Bk())}async function Ua(e){return await Pa.tracer.trace("getLLM",async t=>{let{model:r,maxTokens:a}=e||{},n=await wu();if(!n){t.addTags({enabled:!1,reason:"no config found"});return}r&&(n.model=r),a&&(n.maxTokens=a);let o=Dk[n.provider];if(!o){t.addTags({enabled:!1,reason:"no provider found",provider:n.provider});return}return new o(n)})}async function SI(){let e=await Ua();if(!e)throw new Ze.HTTPError("No available LLM configurations",500);return e}var K=class e{constructor(){this.messages=[];this.tools=[]}addTool(t){return this.tools.push(t),this}addTools(t){return this.tools.push(...t),this}findTool(t){return this.tools.find(r=>r.name===t)}withFormat(t){return t instanceof AI.z.ZodType?this.format=(0,bI.zodResponseFormat)(t,"key"):this.format=t,this}addMessage(t){return this.messages.push(t),this}addMessages(t){return this.messages.push(...t),this}addUserMessage(t){return this.messages.push({role:"user",content:t}),this}addSystemMessage(t){return this.messages.push({role:"system",content:t}),this}static fromRequest(t){let r=new e;return t.messages&&r.addMessages(t.messages),t.format&&r.withFormat(t.format),r}};var ut=require("zod");function to(e,t){let r=`Summarize this text:
39
39
  ${e}`,a="";if(t)switch(t){case io.SummariseLength.SHORT:a="In 1-2 concise sentences, ";break;case io.SummariseLength.MEDIUM:a="In 2-3 paragraphs, ";break;case io.SummariseLength.LONG:a="In multiple detailed paragraphs, ";break}return new K().addUserMessage(`${a}${r}.
40
- Only return the summary.`)}function Bk(e,t){let r=["You are a data extraction assistant.","Extract data from the attached document/image that matches the provided schema.","The schema defines the structure where values like 'string', 'number', 'boolean' indicate the expected data types.","Extract all items that match the schema from the document.","Return the data in json format","If no matching data is found, return an empty data array."].join(`
40
+ Only return the summary.`)}function Mk(e,t){let r=["You are a data extraction assistant.","Extract data from the attached document/image that matches the provided schema.","The schema defines the structure where values like 'string', 'number', 'boolean' indicate the expected data types.","Extract all items that match the schema from the document.","Return the data in json format","If no matching data is found, return an empty data array."].join(`
41
41
 
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=Mk(e),s=ut.z.object({data:ut.z.array(o)});return new K().addMessages([{role:"user",content:n}]).withFormat(s)}function Mk(e){let t={};for(let[r,a]of Object.entries(e))if(typeof a=="string")switch(a.toLowerCase()){case"string":t[r]=ut.z.string();break;case"number":t[r]=ut.z.number();break;case"boolean":t[r]=ut.z.boolean();break;default:t[r]=ut.z.string()}else t[r]=ut.z.string();return ut.z.object(t)}function du(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 fu(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 kk(e,t){return new K().addUserMessage(`Given the table schema:
44
+ File ID: ${t}`}],o=kk(e),s=ut.z.object({data:ut.z.array(o)});return new K().addMessages([{role:"user",content:n}]).withFormat(s)}function kk(e){let t={};for(let[r,a]of Object.entries(e))if(typeof a=="string")switch(a.toLowerCase()){case"string":t[r]=ut.z.string();break;case"number":t[r]=ut.z.number();break;case"boolean":t[r]=ut.z.boolean();break;default:t[r]=ut.z.string()}else t[r]=ut.z.string();return ut.z.object(t)}function du(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 fu(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 Gk(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 Gk(e){return new K().addUserMessage(`Generate JavaScript code for the following request:
49
+ Only provide the SQL.`)}function Fk(e){return new K().addUserMessage(`Generate JavaScript code for the following request:
50
50
  ${e}.
51
51
  Only provide the JS and nothing else.`)}function mu(e){return new K().addUserMessage(`Generate a node-cron compatible expression based on the following prompt. Return only the cron expression (without backticks), and if not possible return only 'Error generating cron' with a short explanation:
52
52
  ${e}`)}function gu(e,t){return new K().addUserMessage(`Translate the following text: "${e}" into ${t}. Only return the translation.`)}function yu(e){return new K().addUserMessage(`Return the sentiment of this text: "${e}". Only return the sentiment.`)}function hu(e){return new K().addUserMessage(`Search the web for the following: "${e}". Only return the top results.`)}function Au(e,t){let r="You do not have access to any bindings in this request.";e&&e.length>0&&(r=`The bindings you have access to are:
@@ -155,7 +155,7 @@ You may specify foreignColumnName, but do not create that field manually.
155
155
  `;return new K().addSystemMessage(e)}function Eu(){let e='Given the generated schema, add only one field of type "AI" to relevant tables to add value to the Budibase user.';return new K().addSystemMessage(e)}function Ru(){let e=`
156
156
  For each table, populate the data field with realistic-looking sample records.
157
157
  Avoid placeholder values like "foo" or "bar". Use real names, emails, etc., and ensure values are unique across rows.
158
- `;return new K().addSystemMessage(e)}function Fk(e){return`You are a helpful support agent who uses workflows to resolve user issues efficiently.
158
+ `;return new K().addSystemMessage(e)}function jk(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.
@@ -172,13 +172,13 @@ Avoid placeholder values like "foo" or "bar". Use real names, emails, etc., and
172
172
  ${JSON.stringify(e)}
173
173
  \`\`\``}function Qk(){return`You will be provided with a set of history, a conversation between a user and an AI. Using this
174
174
  information generate a title for the conversation, this should start with a capital letter and MUST be
175
- less than five words.`}var qa=require("@budibase/backend-core"),TI=require("@budibase/shared-core");var pt=require("@budibase/types"),SI=require("@budibase/backend-core");function vu(e){let t=[],r=[];for(let a of e.tables){let n=a.schema.reduce((o,s)=>{if(s.type===pt.FieldType.LINK){if(!r.includes(s.relationshipId)){let i={[pt.RelationshipType.MANY_TO_ONE]:pt.RelationshipType.ONE_TO_MANY,[pt.RelationshipType.ONE_TO_MANY]:pt.RelationshipType.MANY_TO_ONE,[pt.RelationshipType.MANY_TO_MANY]:pt.RelationshipType.MANY_TO_MANY},{reverseFieldName:p,relationshipId:f,...m}=s;o[s.name]={...m,fieldName:p,relationshipType:i[s.relationshipType]},r.push(f)}}else o[s.name]=s;return o},{});t.push({_id:SI.docIds.generateTableID(),name:a.name,primaryDisplay:a.primaryDisplay,schema:n})}return t}function _u(e,t){let r=[];for(let a of e)r.push({...a,schema:{...a.schema,...t[a.name]?.reduce((n,o)=>(n[o.name]=o,n),{})}});return r}var T=require("@budibase/types"),A=require("zod"),de=A.z.object({name:A.z.string().describe("A human readable name for the field. It MUST be alpha-numeric and capitalised.")}),xu=de.extend({type:A.z.literal(T.FieldType.LINK),tableId:A.z.string().describe("This must match one of the generated table names"),reverseFieldName:A.z.string().describe("Only the *name* of the field that will appear in the foreign table. Budibase creates this automatically. Do not define the column yourself."),relationshipId:A.z.string().describe("The ID of the relationship. It must be used in pairs, paring many-to-ones and one-to-manys, or many-to-manys with each other.")}),jk=A.z.array(A.z.union([de.extend({type:A.z.enum([T.FieldType.STRING,T.FieldType.NUMBER,T.FieldType.BOOLEAN,T.FieldType.LONGFORM]),constraints:A.z.object({presence:A.z.boolean()}).optional().nullable()}),xu.extend({relationshipType:A.z.enum([T.RelationshipType.MANY_TO_ONE])}).describe("Many-to-one relationship, where the current table is the 'many' side. Defines the initiating side of the relationship. Only this side should be defined. The reverse column will be created automatically."),xu.extend({relationshipType:A.z.enum([T.RelationshipType.ONE_TO_MANY])}).describe("One-to-many relationship, where the current table is the 'one' side. Defines the initiating side of the relationship. Only this side should be defined. The reverse column will be created automatically."),xu.extend({relationshipType:A.z.enum([T.RelationshipType.MANY_TO_MANY])}).describe("Many to many relationship. Defines the initiating side of the relationship. Only this side should be defined. The reverse column will be created automatically."),de.extend({type:A.z.literal(T.FieldType.OPTIONS),constraints:A.z.object({inclusion:A.z.array(A.z.string()).describe("The options for the field"),presence:A.z.boolean()})}).describe("A single option from closed set of options"),de.extend({type:A.z.literal(T.FieldType.ARRAY),constraints:A.z.object({inclusion:A.z.array(A.z.string()).describe("The options for the field"),presence:A.z.boolean(),type:A.z.literal(T.JsonFieldSubType.ARRAY)}).describe("Multiple selected options from closed set of options")}),de.extend({type:A.z.literal(T.FieldType.FORMULA),formula:A.z.string().describe(`
175
+ less than five words.`}var qa=require("@budibase/backend-core"),EI=require("@budibase/shared-core");var pt=require("@budibase/types"),wI=require("@budibase/backend-core");function vu(e){let t=[],r=[];for(let a of e.tables){let n=a.schema.reduce((o,s)=>{if(s.type===pt.FieldType.LINK){if(!r.includes(s.relationshipId)){let i={[pt.RelationshipType.MANY_TO_ONE]:pt.RelationshipType.ONE_TO_MANY,[pt.RelationshipType.ONE_TO_MANY]:pt.RelationshipType.MANY_TO_ONE,[pt.RelationshipType.MANY_TO_MANY]:pt.RelationshipType.MANY_TO_MANY},{reverseFieldName:p,relationshipId:f,...m}=s;o[s.name]={...m,fieldName:p,relationshipType:i[s.relationshipType]},r.push(f)}}else o[s.name]=s;return o},{});t.push({_id:wI.docIds.generateTableID(),name:a.name,primaryDisplay:a.primaryDisplay,schema:n})}return t}function _u(e,t){let r=[];for(let a of e)r.push({...a,schema:{...a.schema,...t[a.name]?.reduce((n,o)=>(n[o.name]=o,n),{})}});return r}var T=require("@budibase/types"),A=require("zod"),de=A.z.object({name:A.z.string().describe("A human readable name for the field. It MUST be alpha-numeric and capitalised.")}),xu=de.extend({type:A.z.literal(T.FieldType.LINK),tableId:A.z.string().describe("This must match one of the generated table names"),reverseFieldName:A.z.string().describe("Only the *name* of the field that will appear in the foreign table. Budibase creates this automatically. Do not define the column yourself."),relationshipId:A.z.string().describe("The ID of the relationship. It must be used in pairs, paring many-to-ones and one-to-manys, or many-to-manys with each other.")}),Wk=A.z.array(A.z.union([de.extend({type:A.z.enum([T.FieldType.STRING,T.FieldType.NUMBER,T.FieldType.BOOLEAN,T.FieldType.LONGFORM]),constraints:A.z.object({presence:A.z.boolean()}).optional().nullable()}),xu.extend({relationshipType:A.z.enum([T.RelationshipType.MANY_TO_ONE])}).describe("Many-to-one relationship, where the current table is the 'many' side. Defines the initiating side of the relationship. Only this side should be defined. The reverse column will be created automatically."),xu.extend({relationshipType:A.z.enum([T.RelationshipType.ONE_TO_MANY])}).describe("One-to-many relationship, where the current table is the 'one' side. Defines the initiating side of the relationship. Only this side should be defined. The reverse column will be created automatically."),xu.extend({relationshipType:A.z.enum([T.RelationshipType.MANY_TO_MANY])}).describe("Many to many relationship. Defines the initiating side of the relationship. Only this side should be defined. The reverse column will be created automatically."),de.extend({type:A.z.literal(T.FieldType.OPTIONS),constraints:A.z.object({inclusion:A.z.array(A.z.string()).describe("The options for the field"),presence:A.z.boolean()})}).describe("A single option from closed set of options"),de.extend({type:A.z.literal(T.FieldType.ARRAY),constraints:A.z.object({inclusion:A.z.array(A.z.string()).describe("The options for the field"),presence:A.z.boolean(),type:A.z.literal(T.JsonFieldSubType.ARRAY)}).describe("Multiple selected options from closed set of options")}),de.extend({type:A.z.literal(T.FieldType.FORMULA),formula:A.z.string().describe(`
176
176
  A JavaScript expression using only previously defined fields.
177
177
  Reference fields using $("Field name"). Must end with: return ...
178
178
  Example: return $("Score") + $("Weight")
179
- `),responseType:A.z.enum([T.FieldType.STRING,T.FieldType.NUMBER,T.FieldType.BOOLEAN,T.FieldType.DATETIME])}).describe("Define these types after the other types"),de.extend({type:A.z.literal(T.FieldType.DATETIME),ignoreTimezones:A.z.boolean()}).describe("A datetime field, storing date and time"),de.extend({type:A.z.literal(T.FieldType.DATETIME),ignoreTimezones:A.z.boolean(),timeOnly:A.z.literal(!0)}).describe("A time only field"),de.extend({type:A.z.literal(T.FieldType.DATETIME),ignoreTimezones:A.z.boolean(),dateOnly:A.z.literal(!0)}).describe("A date only field"),de.extend({type:A.z.literal(T.FieldType.ATTACHMENT_SINGLE),subtype:A.z.literal(T.AttachmentSubType.IMAGE)}).describe("Single image column"),de.extend({type:A.z.literal(T.FieldType.ATTACHMENT_SINGLE)}).describe("Single attachment column. It stores a single document: pdf, word, etc. Use an appropriate name for the column, like 'Invoice', 'Document', etc."),de.extend({type:A.z.literal(T.FieldType.ATTACHMENTS),subtype:A.z.literal(T.AttachmentSubType.IMAGE)}).describe("Multiple images column. Use an appropiate name for the columns, like 'Gallery', 'Photos', etc."),de.extend({type:A.z.literal(T.FieldType.ATTACHMENTS)}).describe("Multiple attachments column. It might hold different kind of documents mixed up: pdf, txt, etc. Use an appropiate name for the columns, like 'Invoices', 'Documents', 'Attachments', etc.")])),Cu=A.z.object({tables:A.z.array(A.z.object({name:A.z.string(),schema:jk,primaryDisplay:A.z.string().describe("The column will be used as display, so pick the clearer option. This must match EXACTLY one of the created fields names in the schema.")}))});function Ou(e){let t=A.z.object({});for(let r of e){let a=Object.values(r.schema),n=[de.extend({type:A.z.literal(T.FieldType.AI),operation:A.z.literal(T.AIOperationEnum.TRANSLATE),column:A.z.enum(a.filter(o=>[T.FieldType.STRING,T.FieldType.LONGFORM].includes(o.type)).map(o=>o.name)).describe("The columns to translate"),language:A.z.string()}).describe("This column will be autogenerated via AI to translate one column. Use it for reasonable cases, like translating descriptions or similar."),de.extend({type:A.z.literal(T.FieldType.AI),operation:A.z.literal(T.AIOperationEnum.CATEGORISE_TEXT),columns:A.z.array(A.z.enum(a.filter(o=>[T.FieldType.STRING,T.FieldType.LONGFORM,T.FieldType.BOOLEAN,T.FieldType.NUMBER,T.FieldType.DATETIME].includes(o.type)).map(o=>o.name))).describe("The columns to be used as context"),categories:A.z.string().describe("CSV list of categories")}).describe("This column will be autogenerated via AI to categorise a row based on one or many columns.")];a.some(o=>o.type===T.FieldType.LONGFORM)&&n.push(de.extend({type:A.z.literal(T.FieldType.AI),operation:A.z.literal(T.AIOperationEnum.SUMMARISE_TEXT),columns:A.z.array(A.z.enum(a.filter(o=>[T.FieldType.STRING,T.FieldType.LONGFORM].includes(o.type)).map(o=>o.name))).describe("Columns, from the current table, to be passed in the context. Use at least one.")}).describe("This column will be autogenerated via AI to summarise one or many columns.")),t=t.extend({[r.name]:A.z.array(A.z.union(n))})}return t}var G=require("zod"),wI=require("@budibase/shared-core"),D=require("@budibase/types");function Lu(e){let t=G.z.object({});for(let r of e){let a={_id:G.z.string().describe("Unique ID for the row")},n=G.z.union([G.z.literal("https://picsum.photos/600/600").describe("For profile pictures and similar"),G.z.literal("https://picsum.photos/1920/1080").describe("For anything else")]),o=G.z.object({fileName:G.z.string(),extension:G.z.enum([".pdf",".txt"]),content:G.z.string().describe("Random content for the file")});for(let s of Object.values(r.schema)){let{type:i}=s;switch(i){case D.FieldType.STRING:case D.FieldType.LONGFORM:a[s.name]=G.z.string();break;case D.FieldType.NUMBER:case D.FieldType.BIGINT:a[s.name]=G.z.number();break;case D.FieldType.BOOLEAN:a[s.name]=G.z.boolean();break;case D.FieldType.DATETIME:a[s.name]=G.z.string().describe(`ISO datetime. Use realistic dates, based on today's date, ${new Date().toISOString()}`);break;case D.FieldType.ATTACHMENT_SINGLE:s.subtype===D.AttachmentSubType.IMAGE?a[s.name]=n:a[s.name]=o;break;case D.FieldType.ATTACHMENTS:s.subtype===D.AttachmentSubType.IMAGE?a[s.name]=G.z.array(n):a[s.name]=G.z.array(o),a[s.name]=a[s.name].describe("Between 2 and 5 items.");break;case D.FieldType.OPTIONS:a[s.name]=G.z.enum(s.constraints.inclusion);break;case D.FieldType.LINK:{let p=G.z.string().describe(`Match one of the _ids created for table "${s.tableId}"`);s.relationshipType===D.RelationshipType.ONE_TO_MANY?a[s.name]=G.z.array(p).describe("Array with a single item"):s.relationshipType===D.RelationshipType.MANY_TO_MANY&&(a[s.name]=G.z.array(p).describe("Array with a one or many items. You can repeat the same ids between rows"))}break;case D.FieldType.ARRAY:a[s.name]=G.z.array(G.z.enum(s.constraints.inclusion));break;case D.FieldType.AI:case D.FieldType.AUTO:case D.FieldType.SIGNATURE_SINGLE:case D.FieldType.BB_REFERENCE:case D.FieldType.JSON:case D.FieldType.FORMULA:case D.FieldType.INTERNAL:case D.FieldType.BARCODEQR:case D.FieldType.BB_REFERENCE_SINGLE:break;default:throw wI.utils.unreachable(i)}}t=t.extend({[r.name]:G.z.array(G.z.object(a))}).describe(`Each table should include at least a few items (min 3, max 18). The number of items should not be evenly distributed. Instead, follow natural relationships and usage patterns based on the tables nature. For example:
179
+ `),responseType:A.z.enum([T.FieldType.STRING,T.FieldType.NUMBER,T.FieldType.BOOLEAN,T.FieldType.DATETIME])}).describe("Define these types after the other types"),de.extend({type:A.z.literal(T.FieldType.DATETIME),ignoreTimezones:A.z.boolean()}).describe("A datetime field, storing date and time"),de.extend({type:A.z.literal(T.FieldType.DATETIME),ignoreTimezones:A.z.boolean(),timeOnly:A.z.literal(!0)}).describe("A time only field"),de.extend({type:A.z.literal(T.FieldType.DATETIME),ignoreTimezones:A.z.boolean(),dateOnly:A.z.literal(!0)}).describe("A date only field"),de.extend({type:A.z.literal(T.FieldType.ATTACHMENT_SINGLE),subtype:A.z.literal(T.AttachmentSubType.IMAGE)}).describe("Single image column"),de.extend({type:A.z.literal(T.FieldType.ATTACHMENT_SINGLE)}).describe("Single attachment column. It stores a single document: pdf, word, etc. Use an appropriate name for the column, like 'Invoice', 'Document', etc."),de.extend({type:A.z.literal(T.FieldType.ATTACHMENTS),subtype:A.z.literal(T.AttachmentSubType.IMAGE)}).describe("Multiple images column. Use an appropiate name for the columns, like 'Gallery', 'Photos', etc."),de.extend({type:A.z.literal(T.FieldType.ATTACHMENTS)}).describe("Multiple attachments column. It might hold different kind of documents mixed up: pdf, txt, etc. Use an appropiate name for the columns, like 'Invoices', 'Documents', 'Attachments', etc.")])),Cu=A.z.object({tables:A.z.array(A.z.object({name:A.z.string(),schema:Wk,primaryDisplay:A.z.string().describe("The column will be used as display, so pick the clearer option. This must match EXACTLY one of the created fields names in the schema.")}))});function Ou(e){let t=A.z.object({});for(let r of e){let a=Object.values(r.schema),n=[de.extend({type:A.z.literal(T.FieldType.AI),operation:A.z.literal(T.AIOperationEnum.TRANSLATE),column:A.z.enum(a.filter(o=>[T.FieldType.STRING,T.FieldType.LONGFORM].includes(o.type)).map(o=>o.name)).describe("The columns to translate"),language:A.z.string()}).describe("This column will be autogenerated via AI to translate one column. Use it for reasonable cases, like translating descriptions or similar."),de.extend({type:A.z.literal(T.FieldType.AI),operation:A.z.literal(T.AIOperationEnum.CATEGORISE_TEXT),columns:A.z.array(A.z.enum(a.filter(o=>[T.FieldType.STRING,T.FieldType.LONGFORM,T.FieldType.BOOLEAN,T.FieldType.NUMBER,T.FieldType.DATETIME].includes(o.type)).map(o=>o.name))).describe("The columns to be used as context"),categories:A.z.string().describe("CSV list of categories")}).describe("This column will be autogenerated via AI to categorise a row based on one or many columns.")];a.some(o=>o.type===T.FieldType.LONGFORM)&&n.push(de.extend({type:A.z.literal(T.FieldType.AI),operation:A.z.literal(T.AIOperationEnum.SUMMARISE_TEXT),columns:A.z.array(A.z.enum(a.filter(o=>[T.FieldType.STRING,T.FieldType.LONGFORM].includes(o.type)).map(o=>o.name))).describe("Columns, from the current table, to be passed in the context. Use at least one.")}).describe("This column will be autogenerated via AI to summarise one or many columns.")),t=t.extend({[r.name]:A.z.array(A.z.union(n))})}return t}var G=require("zod"),TI=require("@budibase/shared-core"),D=require("@budibase/types");function Lu(e){let t=G.z.object({});for(let r of e){let a={_id:G.z.string().describe("Unique ID for the row")},n=G.z.union([G.z.literal("https://picsum.photos/600/600").describe("For profile pictures and similar"),G.z.literal("https://picsum.photos/1920/1080").describe("For anything else")]),o=G.z.object({fileName:G.z.string(),extension:G.z.enum([".pdf",".txt"]),content:G.z.string().describe("Random content for the file")});for(let s of Object.values(r.schema)){let{type:i}=s;switch(i){case D.FieldType.STRING:case D.FieldType.LONGFORM:a[s.name]=G.z.string();break;case D.FieldType.NUMBER:case D.FieldType.BIGINT:a[s.name]=G.z.number();break;case D.FieldType.BOOLEAN:a[s.name]=G.z.boolean();break;case D.FieldType.DATETIME:a[s.name]=G.z.string().describe(`ISO datetime. Use realistic dates, based on today's date, ${new Date().toISOString()}`);break;case D.FieldType.ATTACHMENT_SINGLE:s.subtype===D.AttachmentSubType.IMAGE?a[s.name]=n:a[s.name]=o;break;case D.FieldType.ATTACHMENTS:s.subtype===D.AttachmentSubType.IMAGE?a[s.name]=G.z.array(n):a[s.name]=G.z.array(o),a[s.name]=a[s.name].describe("Between 2 and 5 items.");break;case D.FieldType.OPTIONS:a[s.name]=G.z.enum(s.constraints.inclusion);break;case D.FieldType.LINK:{let p=G.z.string().describe(`Match one of the _ids created for table "${s.tableId}"`);s.relationshipType===D.RelationshipType.ONE_TO_MANY?a[s.name]=G.z.array(p).describe("Array with a single item"):s.relationshipType===D.RelationshipType.MANY_TO_MANY&&(a[s.name]=G.z.array(p).describe("Array with a one or many items. You can repeat the same ids between rows"))}break;case D.FieldType.ARRAY:a[s.name]=G.z.array(G.z.enum(s.constraints.inclusion));break;case D.FieldType.AI:case D.FieldType.AUTO:case D.FieldType.SIGNATURE_SINGLE:case D.FieldType.BB_REFERENCE:case D.FieldType.JSON:case D.FieldType.FORMULA:case D.FieldType.INTERNAL:case D.FieldType.BARCODEQR:case D.FieldType.BB_REFERENCE_SINGLE:break;default:throw TI.utils.unreachable(i)}}t=t.extend({[r.name]:G.z.array(G.z.object(a))}).describe(`Each table should include at least a few items (min 3, max 18). The number of items should not be evenly distributed. Instead, follow natural relationships and usage patterns based on the tables nature. For example:
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 Da=P(require("dd-trace")),Pu=class e{constructor(t,r){this.llmFunctions={getTableStructure:async t=>Da.default.trace("llm.getTableStructure",async()=>{let r=await this.llm.prompt(Tu().addUserMessage(t).withFormat(Cu));try{let a=JSON.parse(r.message);return vu(a)}catch{throw new qa.HTTPError("Error generating tables",500)}}),generateAIColumns:(t,r)=>Da.default.trace("llm.generateAIColumns",async()=>this.generateAIColumns(t,r)),generateData:async(t,r)=>Da.default.trace("llm.generateData",async()=>{let a=await this.llm.prompt(Ru().addUserMessage(t).withFormat(Lu(r)));try{return JSON.parse(a.message)}catch{throw new qa.HTTPError("Error generating data",500)}})};this.llm=t,this.delegates=r}static async init(t){let r=await Ua({model:"gpt-5-mini",maxTokens:5e3});if(!r)throw new qa.HTTPError("LLM not available",422);return new e(r,t)}async generate(t,r){return Da.default.trace("tableGeneration.generate",async a=>{let n=await this.generateTables(t,r);return a.addTags({table_count:n.length}),n})}async generateTables(t,r){let a=await this.llmFunctions.getTableStructure(t),n=this.llmFunctions.generateAIColumns(t,a).then(i=>this.delegates.generateTablesDelegate(_u(a,i))),o=await this.llmFunctions.generateData(t,a),s=await n;return await this.delegates.generateDataDelegate(o,r,TI.utils.toMap("name",a)),s}async generateAIColumns(t,r){let a=await this.llm.prompt(Eu().addUserMessage(`This is the initial user prompt that generated the given schema:
183
+ 4. In a project management tool, projects might have many tasks, and tasks might have multiple comments.`)}return t}var Da=P(require("dd-trace")),Pu=class e{constructor(t,r){this.llmFunctions={getTableStructure:async t=>Da.default.trace("llm.getTableStructure",async()=>{let r=await this.llm.prompt(Tu().addUserMessage(t).withFormat(Cu));try{let a=JSON.parse(r.message);return vu(a)}catch{throw new qa.HTTPError("Error generating tables",500)}}),generateAIColumns:(t,r)=>Da.default.trace("llm.generateAIColumns",async()=>this.generateAIColumns(t,r)),generateData:async(t,r)=>Da.default.trace("llm.generateData",async()=>{let a=await this.llm.prompt(Ru().addUserMessage(t).withFormat(Lu(r)));try{return JSON.parse(a.message)}catch{throw new qa.HTTPError("Error generating data",500)}})};this.llm=t,this.delegates=r}static async init(t){let r=await Ua({model:"gpt-5-mini",maxTokens:5e3});if(!r)throw new qa.HTTPError("LLM not available",422);return new e(r,t)}async generate(t,r){return Da.default.trace("tableGeneration.generate",async a=>{let n=await this.generateTables(t,r);return a.addTags({table_count:n.length}),n})}async generateTables(t,r){let a=await this.llmFunctions.getTableStructure(t),n=this.llmFunctions.generateAIColumns(t,a).then(i=>this.delegates.generateTablesDelegate(_u(a,i))),o=await this.llmFunctions.generateData(t,a),s=await n;return await this.delegates.generateDataDelegate(o,r,EI.utils.toMap("name",a)),s}async generateAIColumns(t,r){let a=await this.llm.prompt(Eu().addUserMessage(`This is the initial user prompt that generated the given schema:
184
184
  "${t}"`).withFormat(Ou(r)));try{return JSON.parse(a.message)}catch{throw new qa.HTTPError("Error generating columns",500)}}};0&&(module.exports={Method,ai,api,auditLogs,automations,backups,branding,constants,environmentVariables,features,groups,init,licensing,logger,mappers,middleware,plugins,publicApi,quotas,scimGroups,scimUsers,sdk,users,utils});
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "dist"
5
5
  ],
6
6
  "license": "UNLICENSED",
7
- "version": "3.17.3",
7
+ "version": "3.17.4",
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": "72f4f67ee42a1982a0098823568d254386341680"
76
+ "gitHead": "11cc780d92f0778006cf6be8d9452799a3b17b7b"
77
77
  }