@budibase/pro 3.9.1 → 3.9.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1,6 @@
1
1
  export { getLLM, getLLMConfig } from "./llm";
2
+ export * from "./structuredOutputs";
3
+ import { parseResponseFormat } from "./models/openai";
4
+ export declare const openai: {
5
+ parseResponseFormat: typeof parseResponseFormat;
6
+ };
@@ -2,8 +2,10 @@ import OpenAIClient from "openai";
2
2
  import { LLMPromptResponse } from "../../types/ai";
3
3
  import { LLM } from "./base";
4
4
  import { Prompt } from "../prompts";
5
- import { LLMConfigOptions } from "@budibase/types";
5
+ import { LLMConfigOptions, ResponseFormat } from "@budibase/types";
6
+ import openai from "openai";
6
7
  export type OpenAIModel = "gpt-4o-mini" | "gpt-4o" | "gpt-4" | "gpt-4-turbo" | "gpt-3.5-turbo";
8
+ export declare function parseResponseFormat(responseFormat?: ResponseFormat): openai.ResponseFormatText | openai.ResponseFormatJSONObject | openai.ResponseFormatJSONSchema | undefined;
7
9
  export declare class OpenAI extends LLM {
8
10
  private client;
9
11
  constructor({ model, apiKey, measureUsage }: LLMConfigOptions);
@@ -1,7 +1,10 @@
1
- import { ChatCompletionRequest, EnrichedBinding, Message, Snippet } from "@budibase/types";
1
+ import { EnrichedBinding, Snippet, ChatCompletionRequest, Message, ResponseFormat } from "@budibase/types";
2
2
  export declare class Prompt {
3
3
  messages: Message[];
4
+ private _responseFormat?;
4
5
  constructor(messages: Message[]);
6
+ get responseFormat(): ResponseFormat | undefined;
7
+ format(format: ResponseFormat): this;
5
8
  user(content: string): this;
6
9
  system(content: string): this;
7
10
  static user(content: string): Prompt;
@@ -0,0 +1,6 @@
1
+ import { z } from "zod";
2
+ import { StructuredOutput } from "@budibase/types";
3
+ export declare const structuredOutputs: Record<StructuredOutput, {
4
+ key: string;
5
+ validator: z.AnyZodObject;
6
+ }>;
package/dist/index.js CHANGED
@@ -1,31 +1,31 @@
1
- "use strict";var Vb=Object.create;var Rn=Object.defineProperty;var Kb=Object.getOwnPropertyDescriptor;var Yb=Object.getOwnPropertyNames;var Hb=Object.getPrototypeOf,Jb=Object.prototype.hasOwnProperty;var u=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),S=(e,t)=>{for(var r in t)Rn(e,r,{get:t[r],enumerable:!0})},ou=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of Yb(t))!Jb.call(e,a)&&a!==r&&Rn(e,a,{get:()=>t[a],enumerable:!(n=Kb(t,a))||n.enumerable});return e};var C=(e,t,r)=>(r=e!=null?Vb(Hb(e)):{},ou(t||!e||!e.__esModule?Rn(r,"default",{value:e,enumerable:!0}):r,e)),zb=e=>ou(Rn({},"__esModule",{value:!0}),e);var kn=u((g0,ju)=>{"use strict";function YI(e,t){for(var r=-1,n=t.length,a=e.length;++r<n;)e[a+r]=t[r];return e}ju.exports=YI});var so=u((m0,Wu)=>{"use strict";var HI=typeof global=="object"&&global&&global.Object===Object&&global;Wu.exports=HI});var te=u((y0,$u)=>{"use strict";var JI=so(),zI=typeof self=="object"&&self&&self.Object===Object&&self,XI=JI||zI||Function("return this")();$u.exports=XI});var St=u((A0,Vu)=>{"use strict";var ZI=te(),eS=ZI.Symbol;Vu.exports=eS});var Ju=u((h0,Hu)=>{"use strict";var Ku=St(),Yu=Object.prototype,tS=Yu.hasOwnProperty,rS=Yu.toString,Wr=Ku?Ku.toStringTag:void 0;function nS(e){var t=tS.call(e,Wr),r=e[Wr];try{e[Wr]=void 0;var n=!0}catch{}var a=rS.call(e);return n&&(t?e[Wr]=r:delete e[Wr]),a}Hu.exports=nS});var Xu=u((b0,zu)=>{"use strict";var aS=Object.prototype,oS=aS.toString;function sS(e){return oS.call(e)}zu.exports=sS});var st=u((I0,tp)=>{"use strict";var Zu=St(),iS=Ju(),uS=Xu(),pS="[object Null]",cS="[object Undefined]",ep=Zu?Zu.toStringTag:void 0;function lS(e){return e==null?e===void 0?cS:pS:ep&&ep in Object(e)?iS(e):uS(e)}tp.exports=lS});var ce=u((S0,rp)=>{"use strict";function dS(e){return e!=null&&typeof e=="object"}rp.exports=dS});var ap=u((w0,np)=>{"use strict";var fS=st(),gS=ce(),mS="[object Arguments]";function yS(e){return gS(e)&&fS(e)==mS}np.exports=yS});var $r=u((v0,ip)=>{"use strict";var op=ap(),AS=ce(),sp=Object.prototype,hS=sp.hasOwnProperty,bS=sp.propertyIsEnumerable,IS=op(function(){return arguments}())?op:function(e){return AS(e)&&hS.call(e,"callee")&&!bS.call(e,"callee")};ip.exports=IS});var z=u((E0,up)=>{"use strict";var SS=Array.isArray;up.exports=SS});var dp=u((R0,lp)=>{"use strict";var pp=St(),wS=$r(),vS=z(),cp=pp?pp.isConcatSpreadable:void 0;function ES(e){return vS(e)||wS(e)||!!(cp&&e&&e[cp])}lp.exports=ES});var io=u((_0,gp)=>{"use strict";var RS=kn(),_S=dp();function fp(e,t,r,n,a){var o=-1,i=e.length;for(r||(r=_S),a||(a=[]);++o<i;){var s=e[o];t>0&&r(s)?t>1?fp(s,t-1,r,n,a):RS(a,s):n||(a[a.length]=s)}return a}gp.exports=fp});var Vr=u((x0,mp)=>{"use strict";function xS(e){return e}mp.exports=xS});var Fn=u((T0,yp)=>{"use strict";function TS(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)}yp.exports=TS});var uo=u((P0,hp)=>{"use strict";var PS=Fn(),Ap=Math.max;function CS(e,t,r){return t=Ap(t===void 0?e.length-1:t,0),function(){for(var n=arguments,a=-1,o=Ap(n.length-t,0),i=Array(o);++a<o;)i[a]=n[t+a];a=-1;for(var s=Array(t+1);++a<t;)s[a]=n[a];return s[t]=r(i),PS(e,this,s)}}hp.exports=CS});var Ip=u((C0,bp)=>{"use strict";function OS(e){return function(){return e}}bp.exports=OS});var Se=u((O0,Sp)=>{"use strict";function LS(e){var t=typeof e;return e!=null&&(t=="object"||t=="function")}Sp.exports=LS});var Kr=u((L0,wp)=>{"use strict";var qS=st(),US=Se(),DS="[object AsyncFunction]",BS="[object Function]",NS="[object GeneratorFunction]",MS="[object Proxy]";function GS(e){if(!US(e))return!1;var t=qS(e);return t==BS||t==NS||t==DS||t==MS}wp.exports=GS});var Ep=u((q0,vp)=>{"use strict";var kS=te(),FS=kS["__core-js_shared__"];vp.exports=FS});var xp=u((U0,_p)=>{"use strict";var po=Ep(),Rp=function(){var e=/[^.]+$/.exec(po&&po.keys&&po.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}();function QS(e){return!!Rp&&Rp in e}_p.exports=QS});var co=u((D0,Tp)=>{"use strict";var jS=Function.prototype,WS=jS.toString;function $S(e){if(e!=null){try{return WS.call(e)}catch{}try{return e+""}catch{}}return""}Tp.exports=$S});var Cp=u((B0,Pp)=>{"use strict";var VS=Kr(),KS=xp(),YS=Se(),HS=co(),JS=/[\\^$.*+?()[\]{}|]/g,zS=/^\[object .+?Constructor\]$/,XS=Function.prototype,ZS=Object.prototype,ew=XS.toString,tw=ZS.hasOwnProperty,rw=RegExp("^"+ew.call(tw).replace(JS,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function nw(e){if(!YS(e)||KS(e))return!1;var t=VS(e)?rw:zS;return t.test(HS(e))}Pp.exports=nw});var Lp=u((N0,Op)=>{"use strict";function aw(e,t){return e?.[t]}Op.exports=aw});var it=u((M0,qp)=>{"use strict";var ow=Cp(),sw=Lp();function iw(e,t){var r=sw(e,t);return ow(r)?r:void 0}qp.exports=iw});var lo=u((G0,Up)=>{"use strict";var uw=it(),pw=function(){try{var e=uw(Object,"defineProperty");return e({},"",{}),e}catch{}}();Up.exports=pw});var Np=u((k0,Bp)=>{"use strict";var cw=Ip(),Dp=lo(),lw=Vr(),dw=Dp?function(e,t){return Dp(e,"toString",{configurable:!0,enumerable:!1,value:cw(t),writable:!0})}:lw;Bp.exports=dw});var fo=u((F0,Mp)=>{"use strict";var fw=800,gw=16,mw=Date.now;function yw(e){var t=0,r=0;return function(){var n=mw(),a=gw-(n-r);if(r=n,a>0){if(++t>=fw)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}Mp.exports=yw});var Qn=u((Q0,Gp)=>{"use strict";var Aw=Np(),hw=fo(),bw=hw(Aw);Gp.exports=bw});var go=u((j0,kp)=>{"use strict";var Iw=Vr(),Sw=uo(),ww=Qn();function vw(e,t){return ww(Sw(e,t,Iw),e+"")}kp.exports=vw});var Yr=u((W0,Fp)=>{"use strict";var Ew=it(),Rw=Ew(Object,"create");Fp.exports=Rw});var Wp=u(($0,jp)=>{"use strict";var Qp=Yr();function _w(){this.__data__=Qp?Qp(null):{},this.size=0}jp.exports=_w});var Vp=u((V0,$p)=>{"use strict";function xw(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}$p.exports=xw});var Yp=u((K0,Kp)=>{"use strict";var Tw=Yr(),Pw="__lodash_hash_undefined__",Cw=Object.prototype,Ow=Cw.hasOwnProperty;function Lw(e){var t=this.__data__;if(Tw){var r=t[e];return r===Pw?void 0:r}return Ow.call(t,e)?t[e]:void 0}Kp.exports=Lw});var Jp=u((Y0,Hp)=>{"use strict";var qw=Yr(),Uw=Object.prototype,Dw=Uw.hasOwnProperty;function Bw(e){var t=this.__data__;return qw?t[e]!==void 0:Dw.call(t,e)}Hp.exports=Bw});var Xp=u((H0,zp)=>{"use strict";var Nw=Yr(),Mw="__lodash_hash_undefined__";function Gw(e,t){var r=this.__data__;return this.size+=this.has(e)?0:1,r[e]=Nw&&t===void 0?Mw:t,this}zp.exports=Gw});var ec=u((J0,Zp)=>{"use strict";var kw=Wp(),Fw=Vp(),Qw=Yp(),jw=Jp(),Ww=Xp();function $t(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}$t.prototype.clear=kw;$t.prototype.delete=Fw;$t.prototype.get=Qw;$t.prototype.has=jw;$t.prototype.set=Ww;Zp.exports=$t});var rc=u((z0,tc)=>{"use strict";function $w(){this.__data__=[],this.size=0}tc.exports=$w});var Vt=u((X0,nc)=>{"use strict";function Vw(e,t){return e===t||e!==e&&t!==t}nc.exports=Vw});var Hr=u((Z0,ac)=>{"use strict";var Kw=Vt();function Yw(e,t){for(var r=e.length;r--;)if(Kw(e[r][0],t))return r;return-1}ac.exports=Yw});var sc=u((ek,oc)=>{"use strict";var Hw=Hr(),Jw=Array.prototype,zw=Jw.splice;function Xw(e){var t=this.__data__,r=Hw(t,e);if(r<0)return!1;var n=t.length-1;return r==n?t.pop():zw.call(t,r,1),--this.size,!0}oc.exports=Xw});var uc=u((tk,ic)=>{"use strict";var Zw=Hr();function ev(e){var t=this.__data__,r=Zw(t,e);return r<0?void 0:t[r][1]}ic.exports=ev});var cc=u((rk,pc)=>{"use strict";var tv=Hr();function rv(e){return tv(this.__data__,e)>-1}pc.exports=rv});var dc=u((nk,lc)=>{"use strict";var nv=Hr();function av(e,t){var r=this.__data__,n=nv(r,e);return n<0?(++this.size,r.push([e,t])):r[n][1]=t,this}lc.exports=av});var Jr=u((ak,fc)=>{"use strict";var ov=rc(),sv=sc(),iv=uc(),uv=cc(),pv=dc();function Kt(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}Kt.prototype.clear=ov;Kt.prototype.delete=sv;Kt.prototype.get=iv;Kt.prototype.has=uv;Kt.prototype.set=pv;fc.exports=Kt});var jn=u((ok,gc)=>{"use strict";var cv=it(),lv=te(),dv=cv(lv,"Map");gc.exports=dv});var Ac=u((sk,yc)=>{"use strict";var mc=ec(),fv=Jr(),gv=jn();function mv(){this.size=0,this.__data__={hash:new mc,map:new(gv||fv),string:new mc}}yc.exports=mv});var bc=u((ik,hc)=>{"use strict";function yv(e){var t=typeof e;return t=="string"||t=="number"||t=="symbol"||t=="boolean"?e!=="__proto__":e===null}hc.exports=yv});var zr=u((uk,Ic)=>{"use strict";var Av=bc();function hv(e,t){var r=e.__data__;return Av(t)?r[typeof t=="string"?"string":"hash"]:r.map}Ic.exports=hv});var wc=u((pk,Sc)=>{"use strict";var bv=zr();function Iv(e){var t=bv(this,e).delete(e);return this.size-=t?1:0,t}Sc.exports=Iv});var Ec=u((ck,vc)=>{"use strict";var Sv=zr();function wv(e){return Sv(this,e).get(e)}vc.exports=wv});var _c=u((lk,Rc)=>{"use strict";var vv=zr();function Ev(e){return vv(this,e).has(e)}Rc.exports=Ev});var Tc=u((dk,xc)=>{"use strict";var Rv=zr();function _v(e,t){var r=Rv(this,e),n=r.size;return r.set(e,t),this.size+=r.size==n?0:1,this}xc.exports=_v});var Wn=u((fk,Pc)=>{"use strict";var xv=Ac(),Tv=wc(),Pv=Ec(),Cv=_c(),Ov=Tc();function Yt(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}Yt.prototype.clear=xv;Yt.prototype.delete=Tv;Yt.prototype.get=Pv;Yt.prototype.has=Cv;Yt.prototype.set=Ov;Pc.exports=Yt});var Oc=u((gk,Cc)=>{"use strict";var Lv="__lodash_hash_undefined__";function qv(e){return this.__data__.set(e,Lv),this}Cc.exports=qv});var qc=u((mk,Lc)=>{"use strict";function Uv(e){return this.__data__.has(e)}Lc.exports=Uv});var mo=u((yk,Uc)=>{"use strict";var Dv=Wn(),Bv=Oc(),Nv=qc();function $n(e){var t=-1,r=e==null?0:e.length;for(this.__data__=new Dv;++t<r;)this.add(e[t])}$n.prototype.add=$n.prototype.push=Bv;$n.prototype.has=Nv;Uc.exports=$n});var Bc=u((Ak,Dc)=>{"use strict";function Mv(e,t,r,n){for(var a=e.length,o=r+(n?1:-1);n?o--:++o<a;)if(t(e[o],o,e))return o;return-1}Dc.exports=Mv});var Mc=u((hk,Nc)=>{"use strict";function Gv(e){return e!==e}Nc.exports=Gv});var kc=u((bk,Gc)=>{"use strict";function kv(e,t,r){for(var n=r-1,a=e.length;++n<a;)if(e[n]===t)return n;return-1}Gc.exports=kv});var Qc=u((Ik,Fc)=>{"use strict";var Fv=Bc(),Qv=Mc(),jv=kc();function Wv(e,t,r){return t===t?jv(e,t,r):Fv(e,Qv,r)}Fc.exports=Wv});var yo=u((Sk,jc)=>{"use strict";var $v=Qc();function Vv(e,t){var r=e==null?0:e.length;return!!r&&$v(e,t,0)>-1}jc.exports=Vv});var $c=u((wk,Wc)=>{"use strict";function Kv(e,t,r){for(var n=-1,a=e==null?0:e.length;++n<a;)if(r(t,e[n]))return!0;return!1}Wc.exports=Kv});var Ao=u((vk,Vc)=>{"use strict";function Yv(e,t){return e.has(t)}Vc.exports=Yv});var ho=u((Ek,Kc)=>{"use strict";var Hv=it(),Jv=te(),zv=Hv(Jv,"Set");Kc.exports=zv});var bo=u((Rk,Yc)=>{"use strict";function Xv(){}Yc.exports=Xv});var Vn=u((_k,Hc)=>{"use strict";function Zv(e){var t=-1,r=Array(e.size);return e.forEach(function(n){r[++t]=n}),r}Hc.exports=Zv});var zc=u((xk,Jc)=>{"use strict";var Io=ho(),eE=bo(),tE=Vn(),rE=1/0,nE=Io&&1/tE(new Io([,-0]))[1]==rE?function(e){return new Io(e)}:eE;Jc.exports=nE});var Zc=u((Tk,Xc)=>{"use strict";var aE=mo(),oE=yo(),sE=$c(),iE=Ao(),uE=zc(),pE=Vn(),cE=200;function lE(e,t,r){var n=-1,a=oE,o=e.length,i=!0,s=[],c=s;if(r)i=!1,a=sE;else if(o>=cE){var f=t?null:uE(e);if(f)return pE(f);i=!1,a=iE,c=new aE}else c=t?[]:s;e:for(;++n<o;){var m=e[n],g=t?t(m):m;if(m=r||m!==0?m:0,i&&g===g){for(var y=c.length;y--;)if(c[y]===g)continue e;t&&c.push(g),s.push(m)}else a(c,g,r)||(c!==s&&c.push(g),s.push(m))}return s}Xc.exports=lE});var Kn=u((Pk,el)=>{"use strict";var dE=9007199254740991;function fE(e){return typeof e=="number"&&e>-1&&e%1==0&&e<=dE}el.exports=fE});var Ht=u((Ck,tl)=>{"use strict";var gE=Kr(),mE=Kn();function yE(e){return e!=null&&mE(e.length)&&!gE(e)}tl.exports=yE});var So=u((Ok,rl)=>{"use strict";var AE=Ht(),hE=ce();function bE(e){return hE(e)&&AE(e)}rl.exports=bE});var al=u((Lk,nl)=>{"use strict";var IE=io(),SE=go(),wE=Zc(),vE=So(),EE=SE(function(e){return wE(IE(e,1,vE,!0))});nl.exports=EE});var sl=u((qk,ol)=>{"use strict";var RE=Jr();function _E(){this.__data__=new RE,this.size=0}ol.exports=_E});var ul=u((Uk,il)=>{"use strict";function xE(e){var t=this.__data__,r=t.delete(e);return this.size=t.size,r}il.exports=xE});var cl=u((Dk,pl)=>{"use strict";function TE(e){return this.__data__.get(e)}pl.exports=TE});var dl=u((Bk,ll)=>{"use strict";function PE(e){return this.__data__.has(e)}ll.exports=PE});var gl=u((Nk,fl)=>{"use strict";var CE=Jr(),OE=jn(),LE=Wn(),qE=200;function UE(e,t){var r=this.__data__;if(r instanceof CE){var n=r.__data__;if(!OE||n.length<qE-1)return n.push([e,t]),this.size=++r.size,this;r=this.__data__=new LE(n)}return r.set(e,t),this.size=r.size,this}fl.exports=UE});var Xr=u((Mk,ml)=>{"use strict";var DE=Jr(),BE=sl(),NE=ul(),ME=cl(),GE=dl(),kE=gl();function Jt(e){var t=this.__data__=new DE(e);this.size=t.size}Jt.prototype.clear=BE;Jt.prototype.delete=NE;Jt.prototype.get=ME;Jt.prototype.has=GE;Jt.prototype.set=kE;ml.exports=Jt});var Zr=u((Gk,Al)=>{"use strict";var yl=lo();function FE(e,t,r){t=="__proto__"&&yl?yl(e,t,{configurable:!0,enumerable:!0,value:r,writable:!0}):e[t]=r}Al.exports=FE});var wo=u((kk,hl)=>{"use strict";var QE=Zr(),jE=Vt();function WE(e,t,r){(r!==void 0&&!jE(e[t],r)||r===void 0&&!(t in e))&&QE(e,t,r)}hl.exports=WE});var Il=u((Fk,bl)=>{"use strict";function $E(e){return function(t,r,n){for(var a=-1,o=Object(t),i=n(t),s=i.length;s--;){var c=i[e?s:++a];if(r(o[c],c,o)===!1)break}return t}}bl.exports=$E});var vo=u((Qk,Sl)=>{"use strict";var VE=Il(),KE=VE();Sl.exports=KE});var Eo=u((en,zt)=>{"use strict";var YE=te(),Rl=typeof en=="object"&&en&&!en.nodeType&&en,wl=Rl&&typeof zt=="object"&&zt&&!zt.nodeType&&zt,HE=wl&&wl.exports===Rl,vl=HE?YE.Buffer:void 0,El=vl?vl.allocUnsafe:void 0;function JE(e,t){if(t)return e.slice();var r=e.length,n=El?El(r):new e.constructor(r);return e.copy(n),n}zt.exports=JE});var Ro=u((jk,_l)=>{"use strict";var zE=te(),XE=zE.Uint8Array;_l.exports=XE});var Yn=u((Wk,Tl)=>{"use strict";var xl=Ro();function ZE(e){var t=new e.constructor(e.byteLength);return new xl(t).set(new xl(e)),t}Tl.exports=ZE});var _o=u(($k,Pl)=>{"use strict";var eR=Yn();function tR(e,t){var r=t?eR(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.length)}Pl.exports=tR});var Xt=u((Vk,Cl)=>{"use strict";function rR(e,t){var r=-1,n=e.length;for(t||(t=Array(n));++r<n;)t[r]=e[r];return t}Cl.exports=rR});var tn=u((Kk,Ll)=>{"use strict";var nR=Se(),Ol=Object.create,aR=function(){function e(){}return function(t){if(!nR(t))return{};if(Ol)return Ol(t);e.prototype=t;var r=new e;return e.prototype=void 0,r}}();Ll.exports=aR});var xo=u((Yk,ql)=>{"use strict";function oR(e,t){return function(r){return e(t(r))}}ql.exports=oR});var Hn=u((Hk,Ul)=>{"use strict";var sR=xo(),iR=sR(Object.getPrototypeOf,Object);Ul.exports=iR});var Jn=u((Jk,Dl)=>{"use strict";var uR=Object.prototype;function pR(e){var t=e&&e.constructor,r=typeof t=="function"&&t.prototype||uR;return e===r}Dl.exports=pR});var To=u((zk,Bl)=>{"use strict";var cR=tn(),lR=Hn(),dR=Jn();function fR(e){return typeof e.constructor=="function"&&!dR(e)?cR(lR(e)):{}}Bl.exports=fR});var Ml=u((Xk,Nl)=>{"use strict";function gR(){return!1}Nl.exports=gR});var nn=u((rn,Zt)=>{"use strict";var mR=te(),yR=Ml(),Fl=typeof rn=="object"&&rn&&!rn.nodeType&&rn,Gl=Fl&&typeof Zt=="object"&&Zt&&!Zt.nodeType&&Zt,AR=Gl&&Gl.exports===Fl,kl=AR?mR.Buffer:void 0,hR=kl?kl.isBuffer:void 0,bR=hR||yR;Zt.exports=bR});var Po=u((Zk,jl)=>{"use strict";var IR=st(),SR=Hn(),wR=ce(),vR="[object Object]",ER=Function.prototype,RR=Object.prototype,Ql=ER.toString,_R=RR.hasOwnProperty,xR=Ql.call(Object);function TR(e){if(!wR(e)||IR(e)!=vR)return!1;var t=SR(e);if(t===null)return!0;var r=_R.call(t,"constructor")&&t.constructor;return typeof r=="function"&&r instanceof r&&Ql.call(r)==xR}jl.exports=TR});var $l=u((eF,Wl)=>{"use strict";var PR=st(),CR=Kn(),OR=ce(),LR="[object Arguments]",qR="[object Array]",UR="[object Boolean]",DR="[object Date]",BR="[object Error]",NR="[object Function]",MR="[object Map]",GR="[object Number]",kR="[object Object]",FR="[object RegExp]",QR="[object Set]",jR="[object String]",WR="[object WeakMap]",$R="[object ArrayBuffer]",VR="[object DataView]",KR="[object Float32Array]",YR="[object Float64Array]",HR="[object Int8Array]",JR="[object Int16Array]",zR="[object Int32Array]",XR="[object Uint8Array]",ZR="[object Uint8ClampedArray]",e_="[object Uint16Array]",t_="[object Uint32Array]",q={};q[KR]=q[YR]=q[HR]=q[JR]=q[zR]=q[XR]=q[ZR]=q[e_]=q[t_]=!0;q[LR]=q[qR]=q[$R]=q[UR]=q[VR]=q[DR]=q[BR]=q[NR]=q[MR]=q[GR]=q[kR]=q[FR]=q[QR]=q[jR]=q[WR]=!1;function r_(e){return OR(e)&&CR(e.length)&&!!q[PR(e)]}Wl.exports=r_});var zn=u((tF,Vl)=>{"use strict";function n_(e){return function(t){return e(t)}}Vl.exports=n_});var Xn=u((an,er)=>{"use strict";var a_=so(),Kl=typeof an=="object"&&an&&!an.nodeType&&an,on=Kl&&typeof er=="object"&&er&&!er.nodeType&&er,o_=on&&on.exports===Kl,Co=o_&&a_.process,s_=function(){try{var e=on&&on.require&&on.require("util").types;return e||Co&&Co.binding&&Co.binding("util")}catch{}}();er.exports=s_});var Zn=u((rF,Jl)=>{"use strict";var i_=$l(),u_=zn(),Yl=Xn(),Hl=Yl&&Yl.isTypedArray,p_=Hl?u_(Hl):i_;Jl.exports=p_});var Oo=u((nF,zl)=>{"use strict";function c_(e,t){if(!(t==="constructor"&&typeof e[t]=="function")&&t!="__proto__")return e[t]}zl.exports=c_});var Lo=u((aF,Xl)=>{"use strict";var l_=Zr(),d_=Vt(),f_=Object.prototype,g_=f_.hasOwnProperty;function m_(e,t,r){var n=e[t];(!(g_.call(e,t)&&d_(n,r))||r===void 0&&!(t in e))&&l_(e,t,r)}Xl.exports=m_});var tr=u((oF,Zl)=>{"use strict";var y_=Lo(),A_=Zr();function h_(e,t,r,n){var a=!r;r||(r={});for(var o=-1,i=t.length;++o<i;){var s=t[o],c=n?n(r[s],e[s],s,r,e):void 0;c===void 0&&(c=e[s]),a?A_(r,s,c):y_(r,s,c)}return r}Zl.exports=h_});var td=u((sF,ed)=>{"use strict";function b_(e,t){for(var r=-1,n=Array(e);++r<e;)n[r]=t(r);return n}ed.exports=b_});var sn=u((iF,rd)=>{"use strict";var I_=9007199254740991,S_=/^(?:0|[1-9]\d*)$/;function w_(e,t){var r=typeof e;return t=t??I_,!!t&&(r=="number"||r!="symbol"&&S_.test(e))&&e>-1&&e%1==0&&e<t}rd.exports=w_});var qo=u((uF,nd)=>{"use strict";var v_=td(),E_=$r(),R_=z(),__=nn(),x_=sn(),T_=Zn(),P_=Object.prototype,C_=P_.hasOwnProperty;function O_(e,t){var r=R_(e),n=!r&&E_(e),a=!r&&!n&&__(e),o=!r&&!n&&!a&&T_(e),i=r||n||a||o,s=i?v_(e.length,String):[],c=s.length;for(var f in e)(t||C_.call(e,f))&&!(i&&(f=="length"||a&&(f=="offset"||f=="parent")||o&&(f=="buffer"||f=="byteLength"||f=="byteOffset")||x_(f,c)))&&s.push(f);return s}nd.exports=O_});var od=u((pF,ad)=>{"use strict";function L_(e){var t=[];if(e!=null)for(var r in Object(e))t.push(r);return t}ad.exports=L_});var id=u((cF,sd)=>{"use strict";var q_=Se(),U_=Jn(),D_=od(),B_=Object.prototype,N_=B_.hasOwnProperty;function M_(e){if(!q_(e))return D_(e);var t=U_(e),r=[];for(var n in e)n=="constructor"&&(t||!N_.call(e,n))||r.push(n);return r}sd.exports=M_});var rr=u((lF,ud)=>{"use strict";var G_=qo(),k_=id(),F_=Ht();function Q_(e){return F_(e)?G_(e,!0):k_(e)}ud.exports=Q_});var cd=u((dF,pd)=>{"use strict";var j_=tr(),W_=rr();function $_(e){return j_(e,W_(e))}pd.exports=$_});var yd=u((fF,md)=>{"use strict";var ld=wo(),V_=Eo(),K_=_o(),Y_=Xt(),H_=To(),dd=$r(),fd=z(),J_=So(),z_=nn(),X_=Kr(),Z_=Se(),ex=Po(),tx=Zn(),gd=Oo(),rx=cd();function nx(e,t,r,n,a,o,i){var s=gd(e,r),c=gd(t,r),f=i.get(c);if(f){ld(e,r,f);return}var m=o?o(s,c,r+"",e,t,i):void 0,g=m===void 0;if(g){var y=fd(c),h=!y&&z_(c),v=!y&&!h&&tx(c);m=c,y||h||v?fd(s)?m=s:J_(s)?m=Y_(s):h?(g=!1,m=V_(c,!0)):v?(g=!1,m=K_(c,!0)):m=[]:ex(c)||dd(c)?(m=s,dd(s)?m=rx(s):(!Z_(s)||X_(s))&&(m=H_(c))):g=!1}g&&(i.set(c,m),a(m,c,n,o,i),i.delete(c)),ld(e,r,m)}md.exports=nx});var bd=u((gF,hd)=>{"use strict";var ax=Xr(),ox=wo(),sx=vo(),ix=yd(),ux=Se(),px=rr(),cx=Oo();function Ad(e,t,r,n,a){e!==t&&sx(t,function(o,i){if(a||(a=new ax),ux(o))ix(e,t,i,r,Ad,n,a);else{var s=n?n(cx(e,i),o,i+"",e,t,a):void 0;s===void 0&&(s=o),ox(e,i,s)}},px)}hd.exports=Ad});var Sd=u((mF,Id)=>{"use strict";var lx=Vt(),dx=Ht(),fx=sn(),gx=Se();function mx(e,t,r){if(!gx(r))return!1;var n=typeof t;return(n=="number"?dx(r)&&fx(t,r.length):n=="string"&&t in r)?lx(r[t],e):!1}Id.exports=mx});var vd=u((yF,wd)=>{"use strict";var yx=go(),Ax=Sd();function hx(e){return yx(function(t,r){var n=-1,a=r.length,o=a>1?r[a-1]:void 0,i=a>2?r[2]:void 0;for(o=e.length>3&&typeof o=="function"?(a--,o):void 0,i&&Ax(r[0],r[1],i)&&(o=a<3?void 0:o,a=1),t=Object(t);++n<a;){var s=r[n];s&&e(t,s,n,o)}return t})}wd.exports=hx});var Uo=u((AF,Ed)=>{"use strict";var bx=bd(),Ix=vd(),Sx=Ix(function(e,t,r){bx(e,t,r)});Ed.exports=Sx});var Rf=u(oe=>{"use strict";oe.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"};oe.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"]};oe.aryRearg={2:[1,0],3:[2,0,1],4:[3,2,0,1]};oe.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};oe.iterateeRearg={mapKeys:[1],reduceRight:[1,0]};oe.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]};oe.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}};oe.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}};oe.realToAlias=function(){var e=Object.prototype.hasOwnProperty,t=oe.aliasToReal,r={};for(var n in t){var a=t[n];e.call(r,a)?r[a].push(n):r[a]=[n]}return r}();oe.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"};oe.skipFixed={castArray:!0,flow:!0,flowRight:!0,iteratee:!0,mixin:!0,rearg:!0,runInContext:!0};oe.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 Os=u((GQ,_f)=>{"use strict";_f.exports={}});var Cf=u((kQ,Pf)=>{"use strict";var $=Rf(),aP=Os(),xf=Array.prototype.push;function oP(e,t){return t==2?function(r,n){return e.apply(void 0,arguments)}:function(r){return e.apply(void 0,arguments)}}function Ls(e,t){return t==2?function(r,n){return e(r,n)}:function(r){return e(r)}}function Tf(e){for(var t=e?e.length:0,r=Array(t);t--;)r[t]=e[t];return r}function sP(e){return function(t){return e({},t)}}function iP(e,t){return function(){for(var r=arguments.length,n=r-1,a=Array(r);r--;)a[r]=arguments[r];var o=a[t],i=a.slice(0,t);return o&&xf.apply(i,o),t!=n&&xf.apply(i,a.slice(t+1)),e.apply(this,i)}}function qs(e,t){return function(){var r=arguments.length;if(r){for(var n=Array(r);r--;)n[r]=arguments[r];var a=n[0]=t.apply(void 0,n);return e.apply(void 0,n),a}}}function Us(e,t,r,n){var a=typeof t=="function",o=t===Object(t);if(o&&(n=r,r=t,t=void 0),r==null)throw new TypeError;n||(n={});var i={cap:"cap"in n?n.cap:!0,curry:"curry"in n?n.curry:!0,fixed:"fixed"in n?n.fixed:!0,immutable:"immutable"in n?n.immutable:!0,rearg:"rearg"in n?n.rearg:!0},s=a?r:aP,c="curry"in n&&n.curry,f="fixed"in n&&n.fixed,m="rearg"in n&&n.rearg,g=a?r.runInContext():void 0,y=a?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},h=y.ary,v=y.assign,P=y.clone,_=y.curry,E=y.forEach,U=y.isArray,et=y.isError,Ae=y.isFunction,tt=y.isWeakMap,Mt=y.keys,Ar=y.rearg,hr=y.toInteger,Nb=y.toPath,Xi=Mt($.aryMethod),Mb={castArray:function(I){return function(){var A=arguments[0];return U(A)?I(Tf(A)):I.apply(void 0,arguments)}},iteratee:function(I){return function(){var A=arguments[0],b=arguments[1],w=I(A,b),x=w.length;return i.cap&&typeof b=="number"?(b=b>2?b-2:1,x&&x<=b?w:Ls(w,b)):w}},mixin:function(I){return function(A){var b=this;if(!Ae(b))return I(b,Object(A));var w=[];return E(Mt(A),function(x){Ae(A[x])&&w.push([x,b.prototype[x]])}),I(b,Object(A)),E(w,function(x){var X=x[1];Ae(X)?b.prototype[x[0]]=X:delete b.prototype[x[0]]}),b}},nthArg:function(I){return function(A){var b=A<0?1:hr(A)+1;return _(I(A),b)}},rearg:function(I){return function(A,b){var w=b?b.length:0;return _(I(A,b),w)}},runInContext:function(I){return function(A){return Us(e,I(A),n)}}};function Gb(I,A){if(i.cap){var b=$.iterateeRearg[I];if(b)return Wb(A,b);var w=!a&&$.iterateeAry[I];if(w)return jb(A,w)}return A}function kb(I,A,b){return c||i.curry&&b>1?_(A,b):A}function Zi(I,A,b){if(i.fixed&&(f||!$.skipFixed[I])){var w=$.methodSpread[I],x=w&&w.start;return x===void 0?h(A,b):iP(A,x)}return A}function eu(I,A,b){return i.rearg&&b>1&&(m||!$.skipRearg[I])?Ar(A,$.methodRearg[I]||$.aryRearg[b]):A}function Fb(I,A){A=Nb(A);for(var b=-1,w=A.length,x=w-1,X=P(Object(I)),qe=X;qe!=null&&++b<w;){var he=A[b],Ue=qe[he];Ue!=null&&!(Ae(Ue)||et(Ue)||tt(Ue))&&(qe[he]=P(b==x?Ue:Object(Ue))),qe=qe[he]}return X}function Qb(I){return ue.runInContext.convert(I)(void 0)}function tu(I,A){var b=$.aliasToReal[I]||I,w=$.remap[b]||b,x=n;return function(X){var qe=a?g:y,he=a?g[w]:A,Ue=v(v({},x),X);return Us(qe,b,he,Ue)}}function jb(I,A){return ru(I,function(b){return typeof b=="function"?Ls(b,A):b})}function Wb(I,A){return ru(I,function(b){var w=A.length;return oP(Ar(Ls(b,w),A),w)})}function ru(I,A){return function(){var b=arguments.length;if(!b)return I();for(var w=Array(b);b--;)w[b]=arguments[b];var x=i.rearg?0:b-1;return w[x]=A(w[x]),I.apply(void 0,w)}}function nu(I,A,b){var w,x=$.aliasToReal[I]||I,X=A,qe=Mb[x];return qe?X=qe(A):i.immutable&&($.mutate.array[x]?X=qs(A,Tf):$.mutate.object[x]?X=qs(A,sP(A)):$.mutate.set[x]&&(X=qs(A,Fb))),E(Xi,function(he){return E($.aryMethod[he],function(Ue){if(x==Ue){var au=$.methodSpread[x],$b=au&&au.afterRearg;return w=$b?Zi(x,eu(x,X,he),he):eu(x,Zi(x,X,he),he),w=Gb(x,w),w=kb(x,w,he),!1}}),!w}),w||(w=X),w==A&&(w=c?_(w,1):function(){return A.apply(this,arguments)}),w.convert=tu(x,A),w.placeholder=A.placeholder=b,w}if(!o)return nu(t,r,s);var ue=r,br=[];return E(Xi,function(I){E($.aryMethod[I],function(A){var b=ue[$.remap[A]||A];b&&br.push([A,nu(A,b,ue)])})}),E(Mt(ue),function(I){var A=ue[I];if(typeof A=="function"){for(var b=br.length;b--;)if(br[b][0]==I)return;A.convert=tu(I,A),br.push([I,A])}}),E(br,function(I){ue[I[0]]=I[1]}),ue.convert=Qb,ue.placeholder=ue,E(Mt(ue),function(I){E($.realToAlias[I]||[],function(A){ue[A]=ue[I]})}),ue}Pf.exports=Us});var Ds=u((FQ,Of)=>{"use strict";var uP=it(),pP=te(),cP=uP(pP,"WeakMap");Of.exports=cP});var Bs=u((QQ,qf)=>{"use strict";var Lf=Ds(),lP=Lf&&new Lf;qf.exports=lP});var Ns=u((jQ,Df)=>{"use strict";var dP=Vr(),Uf=Bs(),fP=Uf?function(e,t){return Uf.set(e,t),e}:dP;Df.exports=fP});var hn=u((WQ,Bf)=>{"use strict";var gP=tn(),mP=Se();function yP(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=gP(e.prototype),n=e.apply(r,t);return mP(n)?n:r}}Bf.exports=yP});var Mf=u(($Q,Nf)=>{"use strict";var AP=hn(),hP=te(),bP=1;function IP(e,t,r){var n=t&bP,a=AP(e);function o(){var i=this&&this!==hP&&this instanceof o?a:e;return i.apply(n?r:this,arguments)}return o}Nf.exports=IP});var Ms=u((VQ,Gf)=>{"use strict";var SP=Math.max;function wP(e,t,r,n){for(var a=-1,o=e.length,i=r.length,s=-1,c=t.length,f=SP(o-i,0),m=Array(c+f),g=!n;++s<c;)m[s]=t[s];for(;++a<i;)(g||a<o)&&(m[r[a]]=e[a]);for(;f--;)m[s++]=e[a++];return m}Gf.exports=wP});var Gs=u((KQ,kf)=>{"use strict";var vP=Math.max;function EP(e,t,r,n){for(var a=-1,o=e.length,i=-1,s=r.length,c=-1,f=t.length,m=vP(o-s,0),g=Array(m+f),y=!n;++a<m;)g[a]=e[a];for(var h=a;++c<f;)g[h+c]=t[c];for(;++i<s;)(y||a<o)&&(g[h+r[i]]=e[a++]);return g}kf.exports=EP});var Qf=u((YQ,Ff)=>{"use strict";function RP(e,t){for(var r=e.length,n=0;r--;)e[r]===t&&++n;return n}Ff.exports=RP});var ma=u((HQ,jf)=>{"use strict";function _P(){}jf.exports=_P});var Aa=u((JQ,Wf)=>{"use strict";var xP=tn(),TP=ma(),PP=4294967295;function ya(e){this.__wrapped__=e,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=PP,this.__views__=[]}ya.prototype=xP(TP.prototype);ya.prototype.constructor=ya;Wf.exports=ya});var ks=u((zQ,Vf)=>{"use strict";var $f=Bs(),CP=bo(),OP=$f?function(e){return $f.get(e)}:CP;Vf.exports=OP});var Yf=u((XQ,Kf)=>{"use strict";var LP={};Kf.exports=LP});var zf=u((ZQ,Jf)=>{"use strict";var Hf=Yf(),qP=Object.prototype,UP=qP.hasOwnProperty;function DP(e){for(var t=e.name+"",r=Hf[t],n=UP.call(Hf,t)?r.length:0;n--;){var a=r[n],o=a.func;if(o==null||o==e)return a.name}return t}Jf.exports=DP});var Fs=u((ej,Xf)=>{"use strict";var BP=tn(),NP=ma();function ha(e,t){this.__wrapped__=e,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=void 0}ha.prototype=BP(NP.prototype);ha.prototype.constructor=ha;Xf.exports=ha});var eg=u((tj,Zf)=>{"use strict";var MP=Aa(),GP=Fs(),kP=Xt();function FP(e){if(e instanceof MP)return e.clone();var t=new GP(e.__wrapped__,e.__chain__);return t.__actions__=kP(e.__actions__),t.__index__=e.__index__,t.__values__=e.__values__,t}Zf.exports=FP});var ng=u((rj,rg)=>{"use strict";var QP=Aa(),tg=Fs(),jP=ma(),WP=z(),$P=ce(),VP=eg(),KP=Object.prototype,YP=KP.hasOwnProperty;function ba(e){if($P(e)&&!WP(e)&&!(e instanceof QP)){if(e instanceof tg)return e;if(YP.call(e,"__wrapped__"))return VP(e)}return new tg(e)}ba.prototype=jP.prototype;ba.prototype.constructor=ba;rg.exports=ba});var og=u((nj,ag)=>{"use strict";var HP=Aa(),JP=ks(),zP=zf(),XP=ng();function ZP(e){var t=zP(e),r=XP[t];if(typeof r!="function"||!(t in HP.prototype))return!1;if(e===r)return!0;var n=JP(r);return!!n&&e===n[0]}ag.exports=ZP});var Qs=u((aj,sg)=>{"use strict";var eC=Ns(),tC=fo(),rC=tC(eC);sg.exports=rC});var ug=u((oj,ig)=>{"use strict";var nC=/\{\n\/\* \[wrapped with (.+)\] \*/,aC=/,? & /;function oC(e){var t=e.match(nC);return t?t[1].split(aC):[]}ig.exports=oC});var cg=u((sj,pg)=>{"use strict";var sC=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/;function iC(e,t){var r=t.length;if(!r)return e;var n=r-1;return t[n]=(r>1?"& ":"")+t[n],t=t.join(r>2?", ":" "),e.replace(sC,`{
1
+ "use strict";var Jb=Object.create;var _n=Object.defineProperty;var zb=Object.getOwnPropertyDescriptor;var Xb=Object.getOwnPropertyNames;var Zb=Object.getPrototypeOf,eI=Object.prototype.hasOwnProperty;var u=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),S=(e,t)=>{for(var r in t)_n(e,r,{get:t[r],enumerable:!0})},iu=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of Xb(t))!eI.call(e,a)&&a!==r&&_n(e,a,{get:()=>t[a],enumerable:!(n=zb(t,a))||n.enumerable});return e};var C=(e,t,r)=>(r=e!=null?Jb(Zb(e)):{},iu(t||!e||!e.__esModule?_n(r,"default",{value:e,enumerable:!0}):r,e)),tI=e=>iu(_n({},"__esModule",{value:!0}),e);var Fn=u((b0,$u)=>{"use strict";function XI(e,t){for(var r=-1,n=t.length,a=e.length;++r<n;)e[a+r]=t[r];return e}$u.exports=XI});var io=u((I0,Vu)=>{"use strict";var ZI=typeof global=="object"&&global&&global.Object===Object&&global;Vu.exports=ZI});var te=u((S0,Ku)=>{"use strict";var eS=io(),tS=typeof self=="object"&&self&&self.Object===Object&&self,rS=eS||tS||Function("return this")();Ku.exports=rS});var St=u((w0,Hu)=>{"use strict";var nS=te(),aS=nS.Symbol;Hu.exports=aS});var Xu=u((v0,zu)=>{"use strict";var Yu=St(),Ju=Object.prototype,oS=Ju.hasOwnProperty,sS=Ju.toString,Wr=Yu?Yu.toStringTag:void 0;function iS(e){var t=oS.call(e,Wr),r=e[Wr];try{e[Wr]=void 0;var n=!0}catch{}var a=sS.call(e);return n&&(t?e[Wr]=r:delete e[Wr]),a}zu.exports=iS});var ep=u((E0,Zu)=>{"use strict";var uS=Object.prototype,pS=uS.toString;function cS(e){return pS.call(e)}Zu.exports=cS});var st=u((R0,np)=>{"use strict";var tp=St(),lS=Xu(),dS=ep(),fS="[object Null]",gS="[object Undefined]",rp=tp?tp.toStringTag:void 0;function mS(e){return e==null?e===void 0?gS:fS:rp&&rp in Object(e)?lS(e):dS(e)}np.exports=mS});var ce=u((_0,ap)=>{"use strict";function yS(e){return e!=null&&typeof e=="object"}ap.exports=yS});var sp=u((x0,op)=>{"use strict";var AS=st(),hS=ce(),bS="[object Arguments]";function IS(e){return hS(e)&&AS(e)==bS}op.exports=IS});var $r=u((T0,pp)=>{"use strict";var ip=sp(),SS=ce(),up=Object.prototype,wS=up.hasOwnProperty,vS=up.propertyIsEnumerable,ES=ip(function(){return arguments}())?ip:function(e){return SS(e)&&wS.call(e,"callee")&&!vS.call(e,"callee")};pp.exports=ES});var z=u((P0,cp)=>{"use strict";var RS=Array.isArray;cp.exports=RS});var gp=u((C0,fp)=>{"use strict";var lp=St(),_S=$r(),xS=z(),dp=lp?lp.isConcatSpreadable:void 0;function TS(e){return xS(e)||_S(e)||!!(dp&&e&&e[dp])}fp.exports=TS});var uo=u((O0,yp)=>{"use strict";var PS=Fn(),CS=gp();function mp(e,t,r,n,a){var o=-1,i=e.length;for(r||(r=CS),a||(a=[]);++o<i;){var s=e[o];t>0&&r(s)?t>1?mp(s,t-1,r,n,a):PS(a,s):n||(a[a.length]=s)}return a}yp.exports=mp});var Vr=u((L0,Ap)=>{"use strict";function OS(e){return e}Ap.exports=OS});var Qn=u((q0,hp)=>{"use strict";function LS(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)}hp.exports=LS});var po=u((U0,Ip)=>{"use strict";var qS=Qn(),bp=Math.max;function US(e,t,r){return t=bp(t===void 0?e.length-1:t,0),function(){for(var n=arguments,a=-1,o=bp(n.length-t,0),i=Array(o);++a<o;)i[a]=n[t+a];a=-1;for(var s=Array(t+1);++a<t;)s[a]=n[a];return s[t]=r(i),qS(e,this,s)}}Ip.exports=US});var wp=u((D0,Sp)=>{"use strict";function DS(e){return function(){return e}}Sp.exports=DS});var Se=u((B0,vp)=>{"use strict";function BS(e){var t=typeof e;return e!=null&&(t=="object"||t=="function")}vp.exports=BS});var Kr=u((N0,Ep)=>{"use strict";var NS=st(),MS=Se(),GS="[object AsyncFunction]",kS="[object Function]",FS="[object GeneratorFunction]",QS="[object Proxy]";function jS(e){if(!MS(e))return!1;var t=NS(e);return t==kS||t==FS||t==GS||t==QS}Ep.exports=jS});var _p=u((M0,Rp)=>{"use strict";var WS=te(),$S=WS["__core-js_shared__"];Rp.exports=$S});var Pp=u((G0,Tp)=>{"use strict";var co=_p(),xp=function(){var e=/[^.]+$/.exec(co&&co.keys&&co.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}();function VS(e){return!!xp&&xp in e}Tp.exports=VS});var lo=u((k0,Cp)=>{"use strict";var KS=Function.prototype,HS=KS.toString;function YS(e){if(e!=null){try{return HS.call(e)}catch{}try{return e+""}catch{}}return""}Cp.exports=YS});var Lp=u((F0,Op)=>{"use strict";var JS=Kr(),zS=Pp(),XS=Se(),ZS=lo(),ew=/[\\^$.*+?()[\]{}|]/g,tw=/^\[object .+?Constructor\]$/,rw=Function.prototype,nw=Object.prototype,aw=rw.toString,ow=nw.hasOwnProperty,sw=RegExp("^"+aw.call(ow).replace(ew,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function iw(e){if(!XS(e)||zS(e))return!1;var t=JS(e)?sw:tw;return t.test(ZS(e))}Op.exports=iw});var Up=u((Q0,qp)=>{"use strict";function uw(e,t){return e?.[t]}qp.exports=uw});var it=u((j0,Dp)=>{"use strict";var pw=Lp(),cw=Up();function lw(e,t){var r=cw(e,t);return pw(r)?r:void 0}Dp.exports=lw});var fo=u((W0,Bp)=>{"use strict";var dw=it(),fw=function(){try{var e=dw(Object,"defineProperty");return e({},"",{}),e}catch{}}();Bp.exports=fw});var Gp=u(($0,Mp)=>{"use strict";var gw=wp(),Np=fo(),mw=Vr(),yw=Np?function(e,t){return Np(e,"toString",{configurable:!0,enumerable:!1,value:gw(t),writable:!0})}:mw;Mp.exports=yw});var go=u((V0,kp)=>{"use strict";var Aw=800,hw=16,bw=Date.now;function Iw(e){var t=0,r=0;return function(){var n=bw(),a=hw-(n-r);if(r=n,a>0){if(++t>=Aw)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}kp.exports=Iw});var jn=u((K0,Fp)=>{"use strict";var Sw=Gp(),ww=go(),vw=ww(Sw);Fp.exports=vw});var mo=u((H0,Qp)=>{"use strict";var Ew=Vr(),Rw=po(),_w=jn();function xw(e,t){return _w(Rw(e,t,Ew),e+"")}Qp.exports=xw});var Hr=u((Y0,jp)=>{"use strict";var Tw=it(),Pw=Tw(Object,"create");jp.exports=Pw});var Vp=u((J0,$p)=>{"use strict";var Wp=Hr();function Cw(){this.__data__=Wp?Wp(null):{},this.size=0}$p.exports=Cw});var Hp=u((z0,Kp)=>{"use strict";function Ow(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}Kp.exports=Ow});var Jp=u((X0,Yp)=>{"use strict";var Lw=Hr(),qw="__lodash_hash_undefined__",Uw=Object.prototype,Dw=Uw.hasOwnProperty;function Bw(e){var t=this.__data__;if(Lw){var r=t[e];return r===qw?void 0:r}return Dw.call(t,e)?t[e]:void 0}Yp.exports=Bw});var Xp=u((Z0,zp)=>{"use strict";var Nw=Hr(),Mw=Object.prototype,Gw=Mw.hasOwnProperty;function kw(e){var t=this.__data__;return Nw?t[e]!==void 0:Gw.call(t,e)}zp.exports=kw});var ec=u((ek,Zp)=>{"use strict";var Fw=Hr(),Qw="__lodash_hash_undefined__";function jw(e,t){var r=this.__data__;return this.size+=this.has(e)?0:1,r[e]=Fw&&t===void 0?Qw:t,this}Zp.exports=jw});var rc=u((tk,tc)=>{"use strict";var Ww=Vp(),$w=Hp(),Vw=Jp(),Kw=Xp(),Hw=ec();function $t(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}$t.prototype.clear=Ww;$t.prototype.delete=$w;$t.prototype.get=Vw;$t.prototype.has=Kw;$t.prototype.set=Hw;tc.exports=$t});var ac=u((rk,nc)=>{"use strict";function Yw(){this.__data__=[],this.size=0}nc.exports=Yw});var Vt=u((nk,oc)=>{"use strict";function Jw(e,t){return e===t||e!==e&&t!==t}oc.exports=Jw});var Yr=u((ak,sc)=>{"use strict";var zw=Vt();function Xw(e,t){for(var r=e.length;r--;)if(zw(e[r][0],t))return r;return-1}sc.exports=Xw});var uc=u((ok,ic)=>{"use strict";var Zw=Yr(),ev=Array.prototype,tv=ev.splice;function rv(e){var t=this.__data__,r=Zw(t,e);if(r<0)return!1;var n=t.length-1;return r==n?t.pop():tv.call(t,r,1),--this.size,!0}ic.exports=rv});var cc=u((sk,pc)=>{"use strict";var nv=Yr();function av(e){var t=this.__data__,r=nv(t,e);return r<0?void 0:t[r][1]}pc.exports=av});var dc=u((ik,lc)=>{"use strict";var ov=Yr();function sv(e){return ov(this.__data__,e)>-1}lc.exports=sv});var gc=u((uk,fc)=>{"use strict";var iv=Yr();function uv(e,t){var r=this.__data__,n=iv(r,e);return n<0?(++this.size,r.push([e,t])):r[n][1]=t,this}fc.exports=uv});var Jr=u((pk,mc)=>{"use strict";var pv=ac(),cv=uc(),lv=cc(),dv=dc(),fv=gc();function Kt(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}Kt.prototype.clear=pv;Kt.prototype.delete=cv;Kt.prototype.get=lv;Kt.prototype.has=dv;Kt.prototype.set=fv;mc.exports=Kt});var Wn=u((ck,yc)=>{"use strict";var gv=it(),mv=te(),yv=gv(mv,"Map");yc.exports=yv});var bc=u((lk,hc)=>{"use strict";var Ac=rc(),Av=Jr(),hv=Wn();function bv(){this.size=0,this.__data__={hash:new Ac,map:new(hv||Av),string:new Ac}}hc.exports=bv});var Sc=u((dk,Ic)=>{"use strict";function Iv(e){var t=typeof e;return t=="string"||t=="number"||t=="symbol"||t=="boolean"?e!=="__proto__":e===null}Ic.exports=Iv});var zr=u((fk,wc)=>{"use strict";var Sv=Sc();function wv(e,t){var r=e.__data__;return Sv(t)?r[typeof t=="string"?"string":"hash"]:r.map}wc.exports=wv});var Ec=u((gk,vc)=>{"use strict";var vv=zr();function Ev(e){var t=vv(this,e).delete(e);return this.size-=t?1:0,t}vc.exports=Ev});var _c=u((mk,Rc)=>{"use strict";var Rv=zr();function _v(e){return Rv(this,e).get(e)}Rc.exports=_v});var Tc=u((yk,xc)=>{"use strict";var xv=zr();function Tv(e){return xv(this,e).has(e)}xc.exports=Tv});var Cc=u((Ak,Pc)=>{"use strict";var Pv=zr();function Cv(e,t){var r=Pv(this,e),n=r.size;return r.set(e,t),this.size+=r.size==n?0:1,this}Pc.exports=Cv});var $n=u((hk,Oc)=>{"use strict";var Ov=bc(),Lv=Ec(),qv=_c(),Uv=Tc(),Dv=Cc();function Ht(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}Ht.prototype.clear=Ov;Ht.prototype.delete=Lv;Ht.prototype.get=qv;Ht.prototype.has=Uv;Ht.prototype.set=Dv;Oc.exports=Ht});var qc=u((bk,Lc)=>{"use strict";var Bv="__lodash_hash_undefined__";function Nv(e){return this.__data__.set(e,Bv),this}Lc.exports=Nv});var Dc=u((Ik,Uc)=>{"use strict";function Mv(e){return this.__data__.has(e)}Uc.exports=Mv});var yo=u((Sk,Bc)=>{"use strict";var Gv=$n(),kv=qc(),Fv=Dc();function Vn(e){var t=-1,r=e==null?0:e.length;for(this.__data__=new Gv;++t<r;)this.add(e[t])}Vn.prototype.add=Vn.prototype.push=kv;Vn.prototype.has=Fv;Bc.exports=Vn});var Mc=u((wk,Nc)=>{"use strict";function Qv(e,t,r,n){for(var a=e.length,o=r+(n?1:-1);n?o--:++o<a;)if(t(e[o],o,e))return o;return-1}Nc.exports=Qv});var kc=u((vk,Gc)=>{"use strict";function jv(e){return e!==e}Gc.exports=jv});var Qc=u((Ek,Fc)=>{"use strict";function Wv(e,t,r){for(var n=r-1,a=e.length;++n<a;)if(e[n]===t)return n;return-1}Fc.exports=Wv});var Wc=u((Rk,jc)=>{"use strict";var $v=Mc(),Vv=kc(),Kv=Qc();function Hv(e,t,r){return t===t?Kv(e,t,r):$v(e,Vv,r)}jc.exports=Hv});var Ao=u((_k,$c)=>{"use strict";var Yv=Wc();function Jv(e,t){var r=e==null?0:e.length;return!!r&&Yv(e,t,0)>-1}$c.exports=Jv});var Kc=u((xk,Vc)=>{"use strict";function zv(e,t,r){for(var n=-1,a=e==null?0:e.length;++n<a;)if(r(t,e[n]))return!0;return!1}Vc.exports=zv});var ho=u((Tk,Hc)=>{"use strict";function Xv(e,t){return e.has(t)}Hc.exports=Xv});var bo=u((Pk,Yc)=>{"use strict";var Zv=it(),eE=te(),tE=Zv(eE,"Set");Yc.exports=tE});var Io=u((Ck,Jc)=>{"use strict";function rE(){}Jc.exports=rE});var Kn=u((Ok,zc)=>{"use strict";function nE(e){var t=-1,r=Array(e.size);return e.forEach(function(n){r[++t]=n}),r}zc.exports=nE});var Zc=u((Lk,Xc)=>{"use strict";var So=bo(),aE=Io(),oE=Kn(),sE=1/0,iE=So&&1/oE(new So([,-0]))[1]==sE?function(e){return new So(e)}:aE;Xc.exports=iE});var tl=u((qk,el)=>{"use strict";var uE=yo(),pE=Ao(),cE=Kc(),lE=ho(),dE=Zc(),fE=Kn(),gE=200;function mE(e,t,r){var n=-1,a=pE,o=e.length,i=!0,s=[],c=s;if(r)i=!1,a=cE;else if(o>=gE){var f=t?null:dE(e);if(f)return fE(f);i=!1,a=lE,c=new uE}else c=t?[]:s;e:for(;++n<o;){var m=e[n],g=t?t(m):m;if(m=r||m!==0?m:0,i&&g===g){for(var y=c.length;y--;)if(c[y]===g)continue e;t&&c.push(g),s.push(m)}else a(c,g,r)||(c!==s&&c.push(g),s.push(m))}return s}el.exports=mE});var Hn=u((Uk,rl)=>{"use strict";var yE=9007199254740991;function AE(e){return typeof e=="number"&&e>-1&&e%1==0&&e<=yE}rl.exports=AE});var Yt=u((Dk,nl)=>{"use strict";var hE=Kr(),bE=Hn();function IE(e){return e!=null&&bE(e.length)&&!hE(e)}nl.exports=IE});var wo=u((Bk,al)=>{"use strict";var SE=Yt(),wE=ce();function vE(e){return wE(e)&&SE(e)}al.exports=vE});var sl=u((Nk,ol)=>{"use strict";var EE=uo(),RE=mo(),_E=tl(),xE=wo(),TE=RE(function(e){return _E(EE(e,1,xE,!0))});ol.exports=TE});var ul=u((Mk,il)=>{"use strict";var PE=Jr();function CE(){this.__data__=new PE,this.size=0}il.exports=CE});var cl=u((Gk,pl)=>{"use strict";function OE(e){var t=this.__data__,r=t.delete(e);return this.size=t.size,r}pl.exports=OE});var dl=u((kk,ll)=>{"use strict";function LE(e){return this.__data__.get(e)}ll.exports=LE});var gl=u((Fk,fl)=>{"use strict";function qE(e){return this.__data__.has(e)}fl.exports=qE});var yl=u((Qk,ml)=>{"use strict";var UE=Jr(),DE=Wn(),BE=$n(),NE=200;function ME(e,t){var r=this.__data__;if(r instanceof UE){var n=r.__data__;if(!DE||n.length<NE-1)return n.push([e,t]),this.size=++r.size,this;r=this.__data__=new BE(n)}return r.set(e,t),this.size=r.size,this}ml.exports=ME});var Xr=u((jk,Al)=>{"use strict";var GE=Jr(),kE=ul(),FE=cl(),QE=dl(),jE=gl(),WE=yl();function Jt(e){var t=this.__data__=new GE(e);this.size=t.size}Jt.prototype.clear=kE;Jt.prototype.delete=FE;Jt.prototype.get=QE;Jt.prototype.has=jE;Jt.prototype.set=WE;Al.exports=Jt});var Zr=u((Wk,bl)=>{"use strict";var hl=fo();function $E(e,t,r){t=="__proto__"&&hl?hl(e,t,{configurable:!0,enumerable:!0,value:r,writable:!0}):e[t]=r}bl.exports=$E});var vo=u(($k,Il)=>{"use strict";var VE=Zr(),KE=Vt();function HE(e,t,r){(r!==void 0&&!KE(e[t],r)||r===void 0&&!(t in e))&&VE(e,t,r)}Il.exports=HE});var wl=u((Vk,Sl)=>{"use strict";function YE(e){return function(t,r,n){for(var a=-1,o=Object(t),i=n(t),s=i.length;s--;){var c=i[e?s:++a];if(r(o[c],c,o)===!1)break}return t}}Sl.exports=YE});var Eo=u((Kk,vl)=>{"use strict";var JE=wl(),zE=JE();vl.exports=zE});var Ro=u((en,zt)=>{"use strict";var XE=te(),xl=typeof en=="object"&&en&&!en.nodeType&&en,El=xl&&typeof zt=="object"&&zt&&!zt.nodeType&&zt,ZE=El&&El.exports===xl,Rl=ZE?XE.Buffer:void 0,_l=Rl?Rl.allocUnsafe:void 0;function eR(e,t){if(t)return e.slice();var r=e.length,n=_l?_l(r):new e.constructor(r);return e.copy(n),n}zt.exports=eR});var _o=u((Hk,Tl)=>{"use strict";var tR=te(),rR=tR.Uint8Array;Tl.exports=rR});var Yn=u((Yk,Cl)=>{"use strict";var Pl=_o();function nR(e){var t=new e.constructor(e.byteLength);return new Pl(t).set(new Pl(e)),t}Cl.exports=nR});var xo=u((Jk,Ol)=>{"use strict";var aR=Yn();function oR(e,t){var r=t?aR(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.length)}Ol.exports=oR});var Xt=u((zk,Ll)=>{"use strict";function sR(e,t){var r=-1,n=e.length;for(t||(t=Array(n));++r<n;)t[r]=e[r];return t}Ll.exports=sR});var tn=u((Xk,Ul)=>{"use strict";var iR=Se(),ql=Object.create,uR=function(){function e(){}return function(t){if(!iR(t))return{};if(ql)return ql(t);e.prototype=t;var r=new e;return e.prototype=void 0,r}}();Ul.exports=uR});var To=u((Zk,Dl)=>{"use strict";function pR(e,t){return function(r){return e(t(r))}}Dl.exports=pR});var Jn=u((eF,Bl)=>{"use strict";var cR=To(),lR=cR(Object.getPrototypeOf,Object);Bl.exports=lR});var zn=u((tF,Nl)=>{"use strict";var dR=Object.prototype;function fR(e){var t=e&&e.constructor,r=typeof t=="function"&&t.prototype||dR;return e===r}Nl.exports=fR});var Po=u((rF,Ml)=>{"use strict";var gR=tn(),mR=Jn(),yR=zn();function AR(e){return typeof e.constructor=="function"&&!yR(e)?gR(mR(e)):{}}Ml.exports=AR});var kl=u((nF,Gl)=>{"use strict";function hR(){return!1}Gl.exports=hR});var nn=u((rn,Zt)=>{"use strict";var bR=te(),IR=kl(),jl=typeof rn=="object"&&rn&&!rn.nodeType&&rn,Fl=jl&&typeof Zt=="object"&&Zt&&!Zt.nodeType&&Zt,SR=Fl&&Fl.exports===jl,Ql=SR?bR.Buffer:void 0,wR=Ql?Ql.isBuffer:void 0,vR=wR||IR;Zt.exports=vR});var Co=u((aF,$l)=>{"use strict";var ER=st(),RR=Jn(),_R=ce(),xR="[object Object]",TR=Function.prototype,PR=Object.prototype,Wl=TR.toString,CR=PR.hasOwnProperty,OR=Wl.call(Object);function LR(e){if(!_R(e)||ER(e)!=xR)return!1;var t=RR(e);if(t===null)return!0;var r=CR.call(t,"constructor")&&t.constructor;return typeof r=="function"&&r instanceof r&&Wl.call(r)==OR}$l.exports=LR});var Kl=u((oF,Vl)=>{"use strict";var qR=st(),UR=Hn(),DR=ce(),BR="[object Arguments]",NR="[object Array]",MR="[object Boolean]",GR="[object Date]",kR="[object Error]",FR="[object Function]",QR="[object Map]",jR="[object Number]",WR="[object Object]",$R="[object RegExp]",VR="[object Set]",KR="[object String]",HR="[object WeakMap]",YR="[object ArrayBuffer]",JR="[object DataView]",zR="[object Float32Array]",XR="[object Float64Array]",ZR="[object Int8Array]",e_="[object Int16Array]",t_="[object Int32Array]",r_="[object Uint8Array]",n_="[object Uint8ClampedArray]",a_="[object Uint16Array]",o_="[object Uint32Array]",q={};q[zR]=q[XR]=q[ZR]=q[e_]=q[t_]=q[r_]=q[n_]=q[a_]=q[o_]=!0;q[BR]=q[NR]=q[YR]=q[MR]=q[JR]=q[GR]=q[kR]=q[FR]=q[QR]=q[jR]=q[WR]=q[$R]=q[VR]=q[KR]=q[HR]=!1;function s_(e){return DR(e)&&UR(e.length)&&!!q[qR(e)]}Vl.exports=s_});var Xn=u((sF,Hl)=>{"use strict";function i_(e){return function(t){return e(t)}}Hl.exports=i_});var Zn=u((an,er)=>{"use strict";var u_=io(),Yl=typeof an=="object"&&an&&!an.nodeType&&an,on=Yl&&typeof er=="object"&&er&&!er.nodeType&&er,p_=on&&on.exports===Yl,Oo=p_&&u_.process,c_=function(){try{var e=on&&on.require&&on.require("util").types;return e||Oo&&Oo.binding&&Oo.binding("util")}catch{}}();er.exports=c_});var ea=u((iF,Xl)=>{"use strict";var l_=Kl(),d_=Xn(),Jl=Zn(),zl=Jl&&Jl.isTypedArray,f_=zl?d_(zl):l_;Xl.exports=f_});var Lo=u((uF,Zl)=>{"use strict";function g_(e,t){if(!(t==="constructor"&&typeof e[t]=="function")&&t!="__proto__")return e[t]}Zl.exports=g_});var qo=u((pF,ed)=>{"use strict";var m_=Zr(),y_=Vt(),A_=Object.prototype,h_=A_.hasOwnProperty;function b_(e,t,r){var n=e[t];(!(h_.call(e,t)&&y_(n,r))||r===void 0&&!(t in e))&&m_(e,t,r)}ed.exports=b_});var tr=u((cF,td)=>{"use strict";var I_=qo(),S_=Zr();function w_(e,t,r,n){var a=!r;r||(r={});for(var o=-1,i=t.length;++o<i;){var s=t[o],c=n?n(r[s],e[s],s,r,e):void 0;c===void 0&&(c=e[s]),a?S_(r,s,c):I_(r,s,c)}return r}td.exports=w_});var nd=u((lF,rd)=>{"use strict";function v_(e,t){for(var r=-1,n=Array(e);++r<e;)n[r]=t(r);return n}rd.exports=v_});var sn=u((dF,ad)=>{"use strict";var E_=9007199254740991,R_=/^(?:0|[1-9]\d*)$/;function __(e,t){var r=typeof e;return t=t??E_,!!t&&(r=="number"||r!="symbol"&&R_.test(e))&&e>-1&&e%1==0&&e<t}ad.exports=__});var Uo=u((fF,od)=>{"use strict";var x_=nd(),T_=$r(),P_=z(),C_=nn(),O_=sn(),L_=ea(),q_=Object.prototype,U_=q_.hasOwnProperty;function D_(e,t){var r=P_(e),n=!r&&T_(e),a=!r&&!n&&C_(e),o=!r&&!n&&!a&&L_(e),i=r||n||a||o,s=i?x_(e.length,String):[],c=s.length;for(var f in e)(t||U_.call(e,f))&&!(i&&(f=="length"||a&&(f=="offset"||f=="parent")||o&&(f=="buffer"||f=="byteLength"||f=="byteOffset")||O_(f,c)))&&s.push(f);return s}od.exports=D_});var id=u((gF,sd)=>{"use strict";function B_(e){var t=[];if(e!=null)for(var r in Object(e))t.push(r);return t}sd.exports=B_});var pd=u((mF,ud)=>{"use strict";var N_=Se(),M_=zn(),G_=id(),k_=Object.prototype,F_=k_.hasOwnProperty;function Q_(e){if(!N_(e))return G_(e);var t=M_(e),r=[];for(var n in e)n=="constructor"&&(t||!F_.call(e,n))||r.push(n);return r}ud.exports=Q_});var rr=u((yF,cd)=>{"use strict";var j_=Uo(),W_=pd(),$_=Yt();function V_(e){return $_(e)?j_(e,!0):W_(e)}cd.exports=V_});var dd=u((AF,ld)=>{"use strict";var K_=tr(),H_=rr();function Y_(e){return K_(e,H_(e))}ld.exports=Y_});var hd=u((hF,Ad)=>{"use strict";var fd=vo(),J_=Ro(),z_=xo(),X_=Xt(),Z_=Po(),gd=$r(),md=z(),ex=wo(),tx=nn(),rx=Kr(),nx=Se(),ax=Co(),ox=ea(),yd=Lo(),sx=dd();function ix(e,t,r,n,a,o,i){var s=yd(e,r),c=yd(t,r),f=i.get(c);if(f){fd(e,r,f);return}var m=o?o(s,c,r+"",e,t,i):void 0,g=m===void 0;if(g){var y=md(c),h=!y&&tx(c),v=!y&&!h&&ox(c);m=c,y||h||v?md(s)?m=s:ex(s)?m=X_(s):h?(g=!1,m=J_(c,!0)):v?(g=!1,m=z_(c,!0)):m=[]:ax(c)||gd(c)?(m=s,gd(s)?m=sx(s):(!nx(s)||rx(s))&&(m=Z_(c))):g=!1}g&&(i.set(c,m),a(m,c,n,o,i),i.delete(c)),fd(e,r,m)}Ad.exports=ix});var Sd=u((bF,Id)=>{"use strict";var ux=Xr(),px=vo(),cx=Eo(),lx=hd(),dx=Se(),fx=rr(),gx=Lo();function bd(e,t,r,n,a){e!==t&&cx(t,function(o,i){if(a||(a=new ux),dx(o))lx(e,t,i,r,bd,n,a);else{var s=n?n(gx(e,i),o,i+"",e,t,a):void 0;s===void 0&&(s=o),px(e,i,s)}},fx)}Id.exports=bd});var vd=u((IF,wd)=>{"use strict";var mx=Vt(),yx=Yt(),Ax=sn(),hx=Se();function bx(e,t,r){if(!hx(r))return!1;var n=typeof t;return(n=="number"?yx(r)&&Ax(t,r.length):n=="string"&&t in r)?mx(r[t],e):!1}wd.exports=bx});var Rd=u((SF,Ed)=>{"use strict";var Ix=mo(),Sx=vd();function wx(e){return Ix(function(t,r){var n=-1,a=r.length,o=a>1?r[a-1]:void 0,i=a>2?r[2]:void 0;for(o=e.length>3&&typeof o=="function"?(a--,o):void 0,i&&Sx(r[0],r[1],i)&&(o=a<3?void 0:o,a=1),t=Object(t);++n<a;){var s=r[n];s&&e(t,s,n,o)}return t})}Ed.exports=wx});var Do=u((wF,_d)=>{"use strict";var vx=Sd(),Ex=Rd(),Rx=Ex(function(e,t,r){vx(e,t,r)});_d.exports=Rx});var xf=u(oe=>{"use strict";oe.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"};oe.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"]};oe.aryRearg={2:[1,0],3:[2,0,1],4:[3,2,0,1]};oe.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};oe.iterateeRearg={mapKeys:[1],reduceRight:[1,0]};oe.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]};oe.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}};oe.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}};oe.realToAlias=function(){var e=Object.prototype.hasOwnProperty,t=oe.aliasToReal,r={};for(var n in t){var a=t[n];e.call(r,a)?r[a].push(n):r[a]=[n]}return r}();oe.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"};oe.skipFixed={castArray:!0,flow:!0,flowRight:!0,iteratee:!0,mixin:!0,rearg:!0,runInContext:!0};oe.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 Ls=u((WQ,Tf)=>{"use strict";Tf.exports={}});var Lf=u(($Q,Of)=>{"use strict";var $=xf(),uP=Ls(),Pf=Array.prototype.push;function pP(e,t){return t==2?function(r,n){return e.apply(void 0,arguments)}:function(r){return e.apply(void 0,arguments)}}function qs(e,t){return t==2?function(r,n){return e(r,n)}:function(r){return e(r)}}function Cf(e){for(var t=e?e.length:0,r=Array(t);t--;)r[t]=e[t];return r}function cP(e){return function(t){return e({},t)}}function lP(e,t){return function(){for(var r=arguments.length,n=r-1,a=Array(r);r--;)a[r]=arguments[r];var o=a[t],i=a.slice(0,t);return o&&Pf.apply(i,o),t!=n&&Pf.apply(i,a.slice(t+1)),e.apply(this,i)}}function Us(e,t){return function(){var r=arguments.length;if(r){for(var n=Array(r);r--;)n[r]=arguments[r];var a=n[0]=t.apply(void 0,n);return e.apply(void 0,n),a}}}function Ds(e,t,r,n){var a=typeof t=="function",o=t===Object(t);if(o&&(n=r,r=t,t=void 0),r==null)throw new TypeError;n||(n={});var i={cap:"cap"in n?n.cap:!0,curry:"curry"in n?n.curry:!0,fixed:"fixed"in n?n.fixed:!0,immutable:"immutable"in n?n.immutable:!0,rearg:"rearg"in n?n.rearg:!0},s=a?r:uP,c="curry"in n&&n.curry,f="fixed"in n&&n.fixed,m="rearg"in n&&n.rearg,g=a?r.runInContext():void 0,y=a?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},h=y.ary,v=y.assign,P=y.clone,_=y.curry,E=y.forEach,U=y.isArray,et=y.isError,Ae=y.isFunction,tt=y.isWeakMap,Mt=y.keys,Ar=y.rearg,hr=y.toInteger,Fb=y.toPath,eu=Mt($.aryMethod),Qb={castArray:function(I){return function(){var A=arguments[0];return U(A)?I(Cf(A)):I.apply(void 0,arguments)}},iteratee:function(I){return function(){var A=arguments[0],b=arguments[1],w=I(A,b),x=w.length;return i.cap&&typeof b=="number"?(b=b>2?b-2:1,x&&x<=b?w:qs(w,b)):w}},mixin:function(I){return function(A){var b=this;if(!Ae(b))return I(b,Object(A));var w=[];return E(Mt(A),function(x){Ae(A[x])&&w.push([x,b.prototype[x]])}),I(b,Object(A)),E(w,function(x){var X=x[1];Ae(X)?b.prototype[x[0]]=X:delete b.prototype[x[0]]}),b}},nthArg:function(I){return function(A){var b=A<0?1:hr(A)+1;return _(I(A),b)}},rearg:function(I){return function(A,b){var w=b?b.length:0;return _(I(A,b),w)}},runInContext:function(I){return function(A){return Ds(e,I(A),n)}}};function jb(I,A){if(i.cap){var b=$.iterateeRearg[I];if(b)return Hb(A,b);var w=!a&&$.iterateeAry[I];if(w)return Kb(A,w)}return A}function Wb(I,A,b){return c||i.curry&&b>1?_(A,b):A}function tu(I,A,b){if(i.fixed&&(f||!$.skipFixed[I])){var w=$.methodSpread[I],x=w&&w.start;return x===void 0?h(A,b):lP(A,x)}return A}function ru(I,A,b){return i.rearg&&b>1&&(m||!$.skipRearg[I])?Ar(A,$.methodRearg[I]||$.aryRearg[b]):A}function $b(I,A){A=Fb(A);for(var b=-1,w=A.length,x=w-1,X=P(Object(I)),qe=X;qe!=null&&++b<w;){var he=A[b],Ue=qe[he];Ue!=null&&!(Ae(Ue)||et(Ue)||tt(Ue))&&(qe[he]=P(b==x?Ue:Object(Ue))),qe=qe[he]}return X}function Vb(I){return ue.runInContext.convert(I)(void 0)}function nu(I,A){var b=$.aliasToReal[I]||I,w=$.remap[b]||b,x=n;return function(X){var qe=a?g:y,he=a?g[w]:A,Ue=v(v({},x),X);return Ds(qe,b,he,Ue)}}function Kb(I,A){return au(I,function(b){return typeof b=="function"?qs(b,A):b})}function Hb(I,A){return au(I,function(b){var w=A.length;return pP(Ar(qs(b,w),A),w)})}function au(I,A){return function(){var b=arguments.length;if(!b)return I();for(var w=Array(b);b--;)w[b]=arguments[b];var x=i.rearg?0:b-1;return w[x]=A(w[x]),I.apply(void 0,w)}}function ou(I,A,b){var w,x=$.aliasToReal[I]||I,X=A,qe=Qb[x];return qe?X=qe(A):i.immutable&&($.mutate.array[x]?X=Us(A,Cf):$.mutate.object[x]?X=Us(A,cP(A)):$.mutate.set[x]&&(X=Us(A,$b))),E(eu,function(he){return E($.aryMethod[he],function(Ue){if(x==Ue){var su=$.methodSpread[x],Yb=su&&su.afterRearg;return w=Yb?tu(x,ru(x,X,he),he):ru(x,tu(x,X,he),he),w=jb(x,w),w=Wb(x,w,he),!1}}),!w}),w||(w=X),w==A&&(w=c?_(w,1):function(){return A.apply(this,arguments)}),w.convert=nu(x,A),w.placeholder=A.placeholder=b,w}if(!o)return ou(t,r,s);var ue=r,br=[];return E(eu,function(I){E($.aryMethod[I],function(A){var b=ue[$.remap[A]||A];b&&br.push([A,ou(A,b,ue)])})}),E(Mt(ue),function(I){var A=ue[I];if(typeof A=="function"){for(var b=br.length;b--;)if(br[b][0]==I)return;A.convert=nu(I,A),br.push([I,A])}}),E(br,function(I){ue[I[0]]=I[1]}),ue.convert=Vb,ue.placeholder=ue,E(Mt(ue),function(I){E($.realToAlias[I]||[],function(A){ue[A]=ue[I]})}),ue}Of.exports=Ds});var Bs=u((VQ,qf)=>{"use strict";var dP=it(),fP=te(),gP=dP(fP,"WeakMap");qf.exports=gP});var Ns=u((KQ,Df)=>{"use strict";var Uf=Bs(),mP=Uf&&new Uf;Df.exports=mP});var Ms=u((HQ,Nf)=>{"use strict";var yP=Vr(),Bf=Ns(),AP=Bf?function(e,t){return Bf.set(e,t),e}:yP;Nf.exports=AP});var hn=u((YQ,Mf)=>{"use strict";var hP=tn(),bP=Se();function IP(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=hP(e.prototype),n=e.apply(r,t);return bP(n)?n:r}}Mf.exports=IP});var kf=u((JQ,Gf)=>{"use strict";var SP=hn(),wP=te(),vP=1;function EP(e,t,r){var n=t&vP,a=SP(e);function o(){var i=this&&this!==wP&&this instanceof o?a:e;return i.apply(n?r:this,arguments)}return o}Gf.exports=EP});var Gs=u((zQ,Ff)=>{"use strict";var RP=Math.max;function _P(e,t,r,n){for(var a=-1,o=e.length,i=r.length,s=-1,c=t.length,f=RP(o-i,0),m=Array(c+f),g=!n;++s<c;)m[s]=t[s];for(;++a<i;)(g||a<o)&&(m[r[a]]=e[a]);for(;f--;)m[s++]=e[a++];return m}Ff.exports=_P});var ks=u((XQ,Qf)=>{"use strict";var xP=Math.max;function TP(e,t,r,n){for(var a=-1,o=e.length,i=-1,s=r.length,c=-1,f=t.length,m=xP(o-s,0),g=Array(m+f),y=!n;++a<m;)g[a]=e[a];for(var h=a;++c<f;)g[h+c]=t[c];for(;++i<s;)(y||a<o)&&(g[h+r[i]]=e[a++]);return g}Qf.exports=TP});var Wf=u((ZQ,jf)=>{"use strict";function PP(e,t){for(var r=e.length,n=0;r--;)e[r]===t&&++n;return n}jf.exports=PP});var ya=u((ej,$f)=>{"use strict";function CP(){}$f.exports=CP});var ha=u((tj,Vf)=>{"use strict";var OP=tn(),LP=ya(),qP=4294967295;function Aa(e){this.__wrapped__=e,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=qP,this.__views__=[]}Aa.prototype=OP(LP.prototype);Aa.prototype.constructor=Aa;Vf.exports=Aa});var Fs=u((rj,Hf)=>{"use strict";var Kf=Ns(),UP=Io(),DP=Kf?function(e){return Kf.get(e)}:UP;Hf.exports=DP});var Jf=u((nj,Yf)=>{"use strict";var BP={};Yf.exports=BP});var Zf=u((aj,Xf)=>{"use strict";var zf=Jf(),NP=Object.prototype,MP=NP.hasOwnProperty;function GP(e){for(var t=e.name+"",r=zf[t],n=MP.call(zf,t)?r.length:0;n--;){var a=r[n],o=a.func;if(o==null||o==e)return a.name}return t}Xf.exports=GP});var Qs=u((oj,eg)=>{"use strict";var kP=tn(),FP=ya();function ba(e,t){this.__wrapped__=e,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=void 0}ba.prototype=kP(FP.prototype);ba.prototype.constructor=ba;eg.exports=ba});var rg=u((sj,tg)=>{"use strict";var QP=ha(),jP=Qs(),WP=Xt();function $P(e){if(e instanceof QP)return e.clone();var t=new jP(e.__wrapped__,e.__chain__);return t.__actions__=WP(e.__actions__),t.__index__=e.__index__,t.__values__=e.__values__,t}tg.exports=$P});var og=u((ij,ag)=>{"use strict";var VP=ha(),ng=Qs(),KP=ya(),HP=z(),YP=ce(),JP=rg(),zP=Object.prototype,XP=zP.hasOwnProperty;function Ia(e){if(YP(e)&&!HP(e)&&!(e instanceof VP)){if(e instanceof ng)return e;if(XP.call(e,"__wrapped__"))return JP(e)}return new ng(e)}Ia.prototype=KP.prototype;Ia.prototype.constructor=Ia;ag.exports=Ia});var ig=u((uj,sg)=>{"use strict";var ZP=ha(),eC=Fs(),tC=Zf(),rC=og();function nC(e){var t=tC(e),r=rC[t];if(typeof r!="function"||!(t in ZP.prototype))return!1;if(e===r)return!0;var n=eC(r);return!!n&&e===n[0]}sg.exports=nC});var Ws=u((pj,ug)=>{"use strict";var aC=Ms(),oC=go(),sC=oC(aC);ug.exports=sC});var cg=u((cj,pg)=>{"use strict";var iC=/\{\n\/\* \[wrapped with (.+)\] \*/,uC=/,? & /;function pC(e){var t=e.match(iC);return t?t[1].split(uC):[]}pg.exports=pC});var dg=u((lj,lg)=>{"use strict";var cC=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/;function lC(e,t){var r=t.length;if(!r)return e;var n=r-1;return t[n]=(r>1?"& ":"")+t[n],t=t.join(r>2?", ":" "),e.replace(cC,`{
2
2
  /* [wrapped with `+t+`] */
3
- `)}pg.exports=iC});var Ia=u((ij,lg)=>{"use strict";function uC(e,t){for(var r=-1,n=e==null?0:e.length;++r<n&&t(e[r],r,e)!==!1;);return e}lg.exports=uC});var fg=u((uj,dg)=>{"use strict";var pC=Ia(),cC=yo(),lC=1,dC=2,fC=8,gC=16,mC=32,yC=64,AC=128,hC=256,bC=512,IC=[["ary",AC],["bind",lC],["bindKey",dC],["curry",fC],["curryRight",gC],["flip",bC],["partial",mC],["partialRight",yC],["rearg",hC]];function SC(e,t){return pC(IC,function(r){var n="_."+r[0];t&r[1]&&!cC(e,n)&&e.push(n)}),e.sort()}dg.exports=SC});var Ws=u((pj,gg)=>{"use strict";var wC=ug(),vC=cg(),EC=Qn(),RC=fg();function _C(e,t,r){var n=t+"";return EC(e,vC(n,RC(wC(n),r)))}gg.exports=_C});var $s=u((cj,Ag)=>{"use strict";var xC=og(),TC=Qs(),PC=Ws(),CC=1,OC=2,LC=4,qC=8,mg=32,yg=64;function UC(e,t,r,n,a,o,i,s,c,f){var m=t&qC,g=m?i:void 0,y=m?void 0:i,h=m?o:void 0,v=m?void 0:o;t|=m?mg:yg,t&=~(m?yg:mg),t&LC||(t&=~(CC|OC));var P=[e,t,a,h,g,v,y,s,c,f],_=r.apply(void 0,P);return xC(e)&&TC(_,P),_.placeholder=n,PC(_,e,t)}Ag.exports=UC});var Vs=u((lj,hg)=>{"use strict";function DC(e){var t=e;return t.placeholder}hg.exports=DC});var Ig=u((dj,bg)=>{"use strict";var BC=Xt(),NC=sn(),MC=Math.min;function GC(e,t){for(var r=e.length,n=MC(t.length,r),a=BC(e);n--;){var o=t[n];e[n]=NC(o,r)?a[o]:void 0}return e}bg.exports=GC});var Sa=u((fj,wg)=>{"use strict";var Sg="__lodash_placeholder__";function kC(e,t){for(var r=-1,n=e.length,a=0,o=[];++r<n;){var i=e[r];(i===t||i===Sg)&&(e[r]=Sg,o[a++]=r)}return o}wg.exports=kC});var Ks=u((gj,Rg)=>{"use strict";var FC=Ms(),QC=Gs(),jC=Qf(),vg=hn(),WC=$s(),$C=Vs(),VC=Ig(),KC=Sa(),YC=te(),HC=1,JC=2,zC=8,XC=16,ZC=128,eO=512;function Eg(e,t,r,n,a,o,i,s,c,f){var m=t&ZC,g=t&HC,y=t&JC,h=t&(zC|XC),v=t&eO,P=y?void 0:vg(e);function _(){for(var E=arguments.length,U=Array(E),et=E;et--;)U[et]=arguments[et];if(h)var Ae=$C(_),tt=jC(U,Ae);if(n&&(U=FC(U,n,a,h)),o&&(U=QC(U,o,i,h)),E-=tt,h&&E<f){var Mt=KC(U,Ae);return WC(e,t,Eg,_.placeholder,r,U,Mt,s,c,f-E)}var Ar=g?r:this,hr=y?Ar[e]:e;return E=U.length,s?U=VC(U,s):v&&E>1&&U.reverse(),m&&c<E&&(U.length=c),this&&this!==YC&&this instanceof _&&(hr=P||vg(hr)),hr.apply(Ar,U)}return _}Rg.exports=Eg});var xg=u((mj,_g)=>{"use strict";var tO=Fn(),rO=hn(),nO=Ks(),aO=$s(),oO=Vs(),sO=Sa(),iO=te();function uO(e,t,r){var n=rO(e);function a(){for(var o=arguments.length,i=Array(o),s=o,c=oO(a);s--;)i[s]=arguments[s];var f=o<3&&i[0]!==c&&i[o-1]!==c?[]:sO(i,c);if(o-=f.length,o<r)return aO(e,t,nO,a.placeholder,void 0,i,f,void 0,void 0,r-o);var m=this&&this!==iO&&this instanceof a?n:e;return tO(m,this,i)}return a}_g.exports=uO});var Pg=u((yj,Tg)=>{"use strict";var pO=Fn(),cO=hn(),lO=te(),dO=1;function fO(e,t,r,n){var a=t&dO,o=cO(e);function i(){for(var s=-1,c=arguments.length,f=-1,m=n.length,g=Array(m+c),y=this&&this!==lO&&this instanceof i?o:e;++f<m;)g[f]=n[f];for(;c--;)g[f++]=arguments[++s];return pO(y,a?r:this,g)}return i}Tg.exports=fO});var Dg=u((Aj,Ug)=>{"use strict";var gO=Ms(),mO=Gs(),Cg=Sa(),Og="__lodash_placeholder__",Ys=1,yO=2,AO=4,Lg=8,bn=128,qg=256,hO=Math.min;function bO(e,t){var r=e[1],n=t[1],a=r|n,o=a<(Ys|yO|bn),i=n==bn&&r==Lg||n==bn&&r==qg&&e[7].length<=t[8]||n==(bn|qg)&&t[7].length<=t[8]&&r==Lg;if(!(o||i))return e;n&Ys&&(e[2]=t[2],a|=r&Ys?0:AO);var s=t[3];if(s){var c=e[3];e[3]=c?gO(c,s,t[4]):s,e[4]=c?Cg(e[3],Og):t[4]}return s=t[5],s&&(c=e[5],e[5]=c?mO(c,s,t[6]):s,e[6]=c?Cg(e[5],Og):t[6]),s=t[7],s&&(e[7]=s),n&bn&&(e[8]=e[8]==null?t[8]:hO(e[8],t[8])),e[9]==null&&(e[9]=t[9]),e[0]=t[0],e[1]=a,e}Ug.exports=bO});var Ng=u((hj,Bg)=>{"use strict";var IO=/\s/;function SO(e){for(var t=e.length;t--&&IO.test(e.charAt(t)););return t}Bg.exports=SO});var Gg=u((bj,Mg)=>{"use strict";var wO=Ng(),vO=/^\s+/;function EO(e){return e&&e.slice(0,wO(e)+1).replace(vO,"")}Mg.exports=EO});var cr=u((Ij,kg)=>{"use strict";var RO=st(),_O=ce(),xO="[object Symbol]";function TO(e){return typeof e=="symbol"||_O(e)&&RO(e)==xO}kg.exports=TO});var Wg=u((Sj,jg)=>{"use strict";var PO=Gg(),Fg=Se(),CO=cr(),Qg=0/0,OO=/^[-+]0x[0-9a-f]+$/i,LO=/^0b[01]+$/i,qO=/^0o[0-7]+$/i,UO=parseInt;function DO(e){if(typeof e=="number")return e;if(CO(e))return Qg;if(Fg(e)){var t=typeof e.valueOf=="function"?e.valueOf():e;e=Fg(t)?t+"":t}if(typeof e!="string")return e===0?e:+e;e=PO(e);var r=LO.test(e);return r||qO.test(e)?UO(e.slice(2),r?2:8):OO.test(e)?Qg:+e}jg.exports=DO});var Kg=u((wj,Vg)=>{"use strict";var BO=Wg(),$g=1/0,NO=17976931348623157e292;function MO(e){if(!e)return e===0?e:0;if(e=BO(e),e===$g||e===-$g){var t=e<0?-1:1;return t*NO}return e===e?e:0}Vg.exports=MO});var Hs=u((vj,Yg)=>{"use strict";var GO=Kg();function kO(e){var t=GO(e),r=t%1;return t===t?r?t-r:t:0}Yg.exports=kO});var wa=u((Ej,Zg)=>{"use strict";var FO=Ns(),QO=Mf(),jO=xg(),WO=Ks(),$O=Pg(),VO=ks(),KO=Dg(),YO=Qs(),HO=Ws(),Hg=Hs(),JO="Expected a function",Jg=1,zO=2,Js=8,zs=16,Xs=32,zg=64,Xg=Math.max;function XO(e,t,r,n,a,o,i,s){var c=t&zO;if(!c&&typeof e!="function")throw new TypeError(JO);var f=n?n.length:0;if(f||(t&=~(Xs|zg),n=a=void 0),i=i===void 0?i:Xg(Hg(i),0),s=s===void 0?s:Hg(s),f-=a?a.length:0,t&zg){var m=n,g=a;n=a=void 0}var y=c?void 0:VO(e),h=[e,t,r,n,a,m,g,o,i,s];if(y&&KO(h,y),e=h[0],t=h[1],r=h[2],n=h[3],a=h[4],s=h[9]=h[9]===void 0?c?0:e.length:Xg(h[9]-f,0),!s&&t&(Js|zs)&&(t&=~(Js|zs)),!t||t==Jg)var v=QO(e,t,r);else t==Js||t==zs?v=jO(e,t,s):(t==Xs||t==(Jg|Xs))&&!a.length?v=$O(e,t,r,n):v=WO.apply(void 0,h);var P=y?FO:YO;return HO(P(v,h),e,t)}Zg.exports=XO});var tm=u((Rj,em)=>{"use strict";var ZO=wa(),eL=128;function tL(e,t,r){return t=r?void 0:t,t=e&&t==null?e.length:t,ZO(e,eL,void 0,void 0,void 0,void 0,t)}em.exports=tL});var nm=u((_j,rm)=>{"use strict";var rL=xo(),nL=rL(Object.keys,Object);rm.exports=nL});var Zs=u((xj,am)=>{"use strict";var aL=Jn(),oL=nm(),sL=Object.prototype,iL=sL.hasOwnProperty;function uL(e){if(!aL(e))return oL(e);var t=[];for(var r in Object(e))iL.call(e,r)&&r!="constructor"&&t.push(r);return t}am.exports=uL});var lr=u((Tj,om)=>{"use strict";var pL=qo(),cL=Zs(),lL=Ht();function dL(e){return lL(e)?pL(e):cL(e)}om.exports=dL});var ei=u((Pj,sm)=>{"use strict";var fL=tr(),gL=lr();function mL(e,t){return e&&fL(t,gL(t),e)}sm.exports=mL});var um=u((Cj,im)=>{"use strict";var yL=tr(),AL=rr();function hL(e,t){return e&&yL(t,AL(t),e)}im.exports=hL});var cm=u((Oj,pm)=>{"use strict";function bL(e,t){for(var r=-1,n=e==null?0:e.length,a=0,o=[];++r<n;){var i=e[r];t(i,r,e)&&(o[a++]=i)}return o}pm.exports=bL});var ti=u((Lj,lm)=>{"use strict";function IL(){return[]}lm.exports=IL});var va=u((qj,fm)=>{"use strict";var SL=cm(),wL=ti(),vL=Object.prototype,EL=vL.propertyIsEnumerable,dm=Object.getOwnPropertySymbols,RL=dm?function(e){return e==null?[]:(e=Object(e),SL(dm(e),function(t){return EL.call(e,t)}))}:wL;fm.exports=RL});var mm=u((Uj,gm)=>{"use strict";var _L=tr(),xL=va();function TL(e,t){return _L(e,xL(e),t)}gm.exports=TL});var ri=u((Dj,ym)=>{"use strict";var PL=kn(),CL=Hn(),OL=va(),LL=ti(),qL=Object.getOwnPropertySymbols,UL=qL?function(e){for(var t=[];e;)PL(t,OL(e)),e=CL(e);return t}:LL;ym.exports=UL});var hm=u((Bj,Am)=>{"use strict";var DL=tr(),BL=ri();function NL(e,t){return DL(e,BL(e),t)}Am.exports=NL});var ni=u((Nj,bm)=>{"use strict";var ML=kn(),GL=z();function kL(e,t,r){var n=t(e);return GL(e)?n:ML(n,r(e))}bm.exports=kL});var ai=u((Mj,Im)=>{"use strict";var FL=ni(),QL=va(),jL=lr();function WL(e){return FL(e,jL,QL)}Im.exports=WL});var wm=u((Gj,Sm)=>{"use strict";var $L=ni(),VL=ri(),KL=rr();function YL(e){return $L(e,KL,VL)}Sm.exports=YL});var Em=u((kj,vm)=>{"use strict";var HL=it(),JL=te(),zL=HL(JL,"DataView");vm.exports=zL});var _m=u((Fj,Rm)=>{"use strict";var XL=it(),ZL=te(),eq=XL(ZL,"Promise");Rm.exports=eq});var fr=u((Qj,qm)=>{"use strict";var oi=Em(),si=jn(),ii=_m(),ui=ho(),pi=Ds(),Lm=st(),dr=co(),xm="[object Map]",tq="[object Object]",Tm="[object Promise]",Pm="[object Set]",Cm="[object WeakMap]",Om="[object DataView]",rq=dr(oi),nq=dr(si),aq=dr(ii),oq=dr(ui),sq=dr(pi),Ot=Lm;(oi&&Ot(new oi(new ArrayBuffer(1)))!=Om||si&&Ot(new si)!=xm||ii&&Ot(ii.resolve())!=Tm||ui&&Ot(new ui)!=Pm||pi&&Ot(new pi)!=Cm)&&(Ot=function(e){var t=Lm(e),r=t==tq?e.constructor:void 0,n=r?dr(r):"";if(n)switch(n){case rq:return Om;case nq:return xm;case aq:return Tm;case oq:return Pm;case sq:return Cm}return t});qm.exports=Ot});var Dm=u((jj,Um)=>{"use strict";var iq=Object.prototype,uq=iq.hasOwnProperty;function pq(e){var t=e.length,r=new e.constructor(t);return t&&typeof e[0]=="string"&&uq.call(e,"index")&&(r.index=e.index,r.input=e.input),r}Um.exports=pq});var Nm=u((Wj,Bm)=>{"use strict";var cq=Yn();function lq(e,t){var r=t?cq(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.byteLength)}Bm.exports=lq});var Gm=u(($j,Mm)=>{"use strict";var dq=/\w*$/;function fq(e){var t=new e.constructor(e.source,dq.exec(e));return t.lastIndex=e.lastIndex,t}Mm.exports=fq});var Wm=u((Vj,jm)=>{"use strict";var km=St(),Fm=km?km.prototype:void 0,Qm=Fm?Fm.valueOf:void 0;function gq(e){return Qm?Object(Qm.call(e)):{}}jm.exports=gq});var Vm=u((Kj,$m)=>{"use strict";var mq=Yn(),yq=Nm(),Aq=Gm(),hq=Wm(),bq=_o(),Iq="[object Boolean]",Sq="[object Date]",wq="[object Map]",vq="[object Number]",Eq="[object RegExp]",Rq="[object Set]",_q="[object String]",xq="[object Symbol]",Tq="[object ArrayBuffer]",Pq="[object DataView]",Cq="[object Float32Array]",Oq="[object Float64Array]",Lq="[object Int8Array]",qq="[object Int16Array]",Uq="[object Int32Array]",Dq="[object Uint8Array]",Bq="[object Uint8ClampedArray]",Nq="[object Uint16Array]",Mq="[object Uint32Array]";function Gq(e,t,r){var n=e.constructor;switch(t){case Tq:return mq(e);case Iq:case Sq:return new n(+e);case Pq:return yq(e,r);case Cq:case Oq:case Lq:case qq:case Uq:case Dq:case Bq:case Nq:case Mq:return bq(e,r);case wq:return new n;case vq:case _q:return new n(e);case Eq:return Aq(e);case Rq:return new n;case xq:return hq(e)}}$m.exports=Gq});var Ym=u((Yj,Km)=>{"use strict";var kq=fr(),Fq=ce(),Qq="[object Map]";function jq(e){return Fq(e)&&kq(e)==Qq}Km.exports=jq});var Xm=u((Hj,zm)=>{"use strict";var Wq=Ym(),$q=zn(),Hm=Xn(),Jm=Hm&&Hm.isMap,Vq=Jm?$q(Jm):Wq;zm.exports=Vq});var ey=u((Jj,Zm)=>{"use strict";var Kq=fr(),Yq=ce(),Hq="[object Set]";function Jq(e){return Yq(e)&&Kq(e)==Hq}Zm.exports=Jq});var ay=u((zj,ny)=>{"use strict";var zq=ey(),Xq=zn(),ty=Xn(),ry=ty&&ty.isSet,Zq=ry?Xq(ry):zq;ny.exports=Zq});var ci=u((Xj,uy)=>{"use strict";var eU=Xr(),tU=Ia(),rU=Lo(),nU=ei(),aU=um(),oU=Eo(),sU=Xt(),iU=mm(),uU=hm(),pU=ai(),cU=wm(),lU=fr(),dU=Dm(),fU=Vm(),gU=To(),mU=z(),yU=nn(),AU=Xm(),hU=Se(),bU=ay(),IU=lr(),SU=rr(),wU=1,vU=2,EU=4,oy="[object Arguments]",RU="[object Array]",_U="[object Boolean]",xU="[object Date]",TU="[object Error]",sy="[object Function]",PU="[object GeneratorFunction]",CU="[object Map]",OU="[object Number]",iy="[object Object]",LU="[object RegExp]",qU="[object Set]",UU="[object String]",DU="[object Symbol]",BU="[object WeakMap]",NU="[object ArrayBuffer]",MU="[object DataView]",GU="[object Float32Array]",kU="[object Float64Array]",FU="[object Int8Array]",QU="[object Int16Array]",jU="[object Int32Array]",WU="[object Uint8Array]",$U="[object Uint8ClampedArray]",VU="[object Uint16Array]",KU="[object Uint32Array]",O={};O[oy]=O[RU]=O[NU]=O[MU]=O[_U]=O[xU]=O[GU]=O[kU]=O[FU]=O[QU]=O[jU]=O[CU]=O[OU]=O[iy]=O[LU]=O[qU]=O[UU]=O[DU]=O[WU]=O[$U]=O[VU]=O[KU]=!0;O[TU]=O[sy]=O[BU]=!1;function Ea(e,t,r,n,a,o){var i,s=t&wU,c=t&vU,f=t&EU;if(r&&(i=a?r(e,n,a,o):r(e)),i!==void 0)return i;if(!hU(e))return e;var m=mU(e);if(m){if(i=dU(e),!s)return sU(e,i)}else{var g=lU(e),y=g==sy||g==PU;if(yU(e))return oU(e,s);if(g==iy||g==oy||y&&!a){if(i=c||y?{}:gU(e),!s)return c?uU(e,aU(i,e)):iU(e,nU(i,e))}else{if(!O[g])return a?e:{};i=fU(e,g,s)}}o||(o=new eU);var h=o.get(e);if(h)return h;o.set(e,i),bU(e)?e.forEach(function(_){i.add(Ea(_,t,r,_,e,o))}):AU(e)&&e.forEach(function(_,E){i.set(E,Ea(_,t,r,E,e,o))});var v=f?c?cU:pU:c?SU:IU,P=m?void 0:v(e);return tU(P||e,function(_,E){P&&(E=_,_=e[E]),rU(i,E,Ea(_,t,r,E,e,o))}),i}uy.exports=Ea});var cy=u((Zj,py)=>{"use strict";var YU=ci(),HU=4;function JU(e){return YU(e,HU)}py.exports=JU});var dy=u((eW,ly)=>{"use strict";var zU=wa(),XU=8;function li(e,t,r){t=r?void 0:t;var n=zU(e,XU,void 0,void 0,void 0,void 0,void 0,t);return n.placeholder=li.placeholder,n}li.placeholder={};ly.exports=li});var gy=u((tW,fy)=>{"use strict";var ZU=st(),eD=ce(),tD=Po(),rD="[object DOMException]",nD="[object Error]";function aD(e){if(!eD(e))return!1;var t=ZU(e);return t==nD||t==rD||typeof e.message=="string"&&typeof e.name=="string"&&!tD(e)}fy.exports=aD});var yy=u((rW,my)=>{"use strict";var oD=fr(),sD=ce(),iD="[object WeakMap]";function uD(e){return sD(e)&&oD(e)==iD}my.exports=uD});var hy=u((nW,Ay)=>{"use strict";function pD(e,t){for(var r=-1,n=e==null?0:e.length;++r<n;)if(t(e[r],r,e))return!0;return!1}Ay.exports=pD});var di=u((aW,by)=>{"use strict";var cD=mo(),lD=hy(),dD=Ao(),fD=1,gD=2;function mD(e,t,r,n,a,o){var i=r&fD,s=e.length,c=t.length;if(s!=c&&!(i&&c>s))return!1;var f=o.get(e),m=o.get(t);if(f&&m)return f==t&&m==e;var g=-1,y=!0,h=r&gD?new cD:void 0;for(o.set(e,t),o.set(t,e);++g<s;){var v=e[g],P=t[g];if(n)var _=i?n(P,v,g,t,e,o):n(v,P,g,e,t,o);if(_!==void 0){if(_)continue;y=!1;break}if(h){if(!lD(t,function(E,U){if(!dD(h,U)&&(v===E||a(v,E,r,n,o)))return h.push(U)})){y=!1;break}}else if(!(v===P||a(v,P,r,n,o))){y=!1;break}}return o.delete(e),o.delete(t),y}by.exports=mD});var Sy=u((oW,Iy)=>{"use strict";function yD(e){var t=-1,r=Array(e.size);return e.forEach(function(n,a){r[++t]=[a,n]}),r}Iy.exports=yD});var _y=u((sW,Ry)=>{"use strict";var wy=St(),vy=Ro(),AD=Vt(),hD=di(),bD=Sy(),ID=Vn(),SD=1,wD=2,vD="[object Boolean]",ED="[object Date]",RD="[object Error]",_D="[object Map]",xD="[object Number]",TD="[object RegExp]",PD="[object Set]",CD="[object String]",OD="[object Symbol]",LD="[object ArrayBuffer]",qD="[object DataView]",Ey=wy?wy.prototype:void 0,fi=Ey?Ey.valueOf:void 0;function UD(e,t,r,n,a,o,i){switch(r){case qD:if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case LD:return!(e.byteLength!=t.byteLength||!o(new vy(e),new vy(t)));case vD:case ED:case xD:return AD(+e,+t);case RD:return e.name==t.name&&e.message==t.message;case TD:case CD:return e==t+"";case _D:var s=bD;case PD:var c=n&SD;if(s||(s=ID),e.size!=t.size&&!c)return!1;var f=i.get(e);if(f)return f==t;n|=wD,i.set(e,t);var m=hD(s(e),s(t),n,a,o,i);return i.delete(e),m;case OD:if(fi)return fi.call(e)==fi.call(t)}return!1}Ry.exports=UD});var Py=u((iW,Ty)=>{"use strict";var xy=ai(),DD=1,BD=Object.prototype,ND=BD.hasOwnProperty;function MD(e,t,r,n,a,o){var i=r&DD,s=xy(e),c=s.length,f=xy(t),m=f.length;if(c!=m&&!i)return!1;for(var g=c;g--;){var y=s[g];if(!(i?y in t:ND.call(t,y)))return!1}var h=o.get(e),v=o.get(t);if(h&&v)return h==t&&v==e;var P=!0;o.set(e,t),o.set(t,e);for(var _=i;++g<c;){y=s[g];var E=e[y],U=t[y];if(n)var et=i?n(U,E,y,t,e,o):n(E,U,y,e,t,o);if(!(et===void 0?E===U||a(E,U,r,n,o):et)){P=!1;break}_||(_=y=="constructor")}if(P&&!_){var Ae=e.constructor,tt=t.constructor;Ae!=tt&&"constructor"in e&&"constructor"in t&&!(typeof Ae=="function"&&Ae instanceof Ae&&typeof tt=="function"&&tt instanceof tt)&&(P=!1)}return o.delete(e),o.delete(t),P}Ty.exports=MD});var Ny=u((uW,By)=>{"use strict";var gi=Xr(),GD=di(),kD=_y(),FD=Py(),Cy=fr(),Oy=z(),Ly=nn(),QD=Zn(),jD=1,qy="[object Arguments]",Uy="[object Array]",Ra="[object Object]",WD=Object.prototype,Dy=WD.hasOwnProperty;function $D(e,t,r,n,a,o){var i=Oy(e),s=Oy(t),c=i?Uy:Cy(e),f=s?Uy:Cy(t);c=c==qy?Ra:c,f=f==qy?Ra:f;var m=c==Ra,g=f==Ra,y=c==f;if(y&&Ly(e)){if(!Ly(t))return!1;i=!0,m=!1}if(y&&!m)return o||(o=new gi),i||QD(e)?GD(e,t,r,n,a,o):kD(e,t,c,r,n,a,o);if(!(r&jD)){var h=m&&Dy.call(e,"__wrapped__"),v=g&&Dy.call(t,"__wrapped__");if(h||v){var P=h?e.value():e,_=v?t.value():t;return o||(o=new gi),a(P,_,r,n,o)}}return y?(o||(o=new gi),FD(e,t,r,n,a,o)):!1}By.exports=$D});var mi=u((pW,ky)=>{"use strict";var VD=Ny(),My=ce();function Gy(e,t,r,n,a){return e===t?!0:e==null||t==null||!My(e)&&!My(t)?e!==e&&t!==t:VD(e,t,r,n,Gy,a)}ky.exports=Gy});var Qy=u((cW,Fy)=>{"use strict";var KD=Xr(),YD=mi(),HD=1,JD=2;function zD(e,t,r,n){var a=r.length,o=a,i=!n;if(e==null)return!o;for(e=Object(e);a--;){var s=r[a];if(i&&s[2]?s[1]!==e[s[0]]:!(s[0]in e))return!1}for(;++a<o;){s=r[a];var c=s[0],f=e[c],m=s[1];if(i&&s[2]){if(f===void 0&&!(c in e))return!1}else{var g=new KD;if(n)var y=n(f,m,c,e,t,g);if(!(y===void 0?YD(m,f,HD|JD,n,g):y))return!1}}return!0}Fy.exports=zD});var yi=u((lW,jy)=>{"use strict";var XD=Se();function ZD(e){return e===e&&!XD(e)}jy.exports=ZD});var $y=u((dW,Wy)=>{"use strict";var eB=yi(),tB=lr();function rB(e){for(var t=tB(e),r=t.length;r--;){var n=t[r],a=e[n];t[r]=[n,a,eB(a)]}return t}Wy.exports=rB});var Ai=u((fW,Vy)=>{"use strict";function nB(e,t){return function(r){return r==null?!1:r[e]===t&&(t!==void 0||e in Object(r))}}Vy.exports=nB});var Yy=u((gW,Ky)=>{"use strict";var aB=Qy(),oB=$y(),sB=Ai();function iB(e){var t=oB(e);return t.length==1&&t[0][2]?sB(t[0][0],t[0][1]):function(r){return r===e||aB(r,e,t)}}Ky.exports=iB});var _a=u((mW,Hy)=>{"use strict";var uB=z(),pB=cr(),cB=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,lB=/^\w*$/;function dB(e,t){if(uB(e))return!1;var r=typeof e;return r=="number"||r=="symbol"||r=="boolean"||e==null||pB(e)?!0:lB.test(e)||!cB.test(e)||t!=null&&e in Object(t)}Hy.exports=dB});var Xy=u((yW,zy)=>{"use strict";var Jy=Wn(),fB="Expected a function";function hi(e,t){if(typeof e!="function"||t!=null&&typeof t!="function")throw new TypeError(fB);var r=function(){var n=arguments,a=t?t.apply(this,n):n[0],o=r.cache;if(o.has(a))return o.get(a);var i=e.apply(this,n);return r.cache=o.set(a,i)||o,i};return r.cache=new(hi.Cache||Jy),r}hi.Cache=Jy;zy.exports=hi});var eA=u((AW,Zy)=>{"use strict";var gB=Xy(),mB=500;function yB(e){var t=gB(e,function(n){return r.size===mB&&r.clear(),n}),r=t.cache;return t}Zy.exports=yB});var bi=u((hW,tA)=>{"use strict";var AB=eA(),hB=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,bB=/\\(\\)?/g,IB=AB(function(e){var t=[];return e.charCodeAt(0)===46&&t.push(""),e.replace(hB,function(r,n,a,o){t.push(a?o.replace(bB,"$1"):n||r)}),t});tA.exports=IB});var Ii=u((bW,rA)=>{"use strict";function SB(e,t){for(var r=-1,n=e==null?0:e.length,a=Array(n);++r<n;)a[r]=t(e[r],r,e);return a}rA.exports=SB});var uA=u((IW,iA)=>{"use strict";var nA=St(),wB=Ii(),vB=z(),EB=cr(),RB=1/0,aA=nA?nA.prototype:void 0,oA=aA?aA.toString:void 0;function sA(e){if(typeof e=="string")return e;if(vB(e))return wB(e,sA)+"";if(EB(e))return oA?oA.call(e):"";var t=e+"";return t=="0"&&1/e==-RB?"-0":t}iA.exports=sA});var Si=u((SW,pA)=>{"use strict";var _B=uA();function xB(e){return e==null?"":_B(e)}pA.exports=xB});var wi=u((wW,cA)=>{"use strict";var TB=z(),PB=_a(),CB=bi(),OB=Si();function LB(e,t){return TB(e)?e:PB(e,t)?[e]:CB(OB(e))}cA.exports=LB});var gr=u((vW,lA)=>{"use strict";var qB=cr(),UB=1/0;function DB(e){if(typeof e=="string"||qB(e))return e;var t=e+"";return t=="0"&&1/e==-UB?"-0":t}lA.exports=DB});var vi=u((EW,dA)=>{"use strict";var BB=wi(),NB=gr();function MB(e,t){t=BB(t,e);for(var r=0,n=t.length;e!=null&&r<n;)e=e[NB(t[r++])];return r&&r==n?e:void 0}dA.exports=MB});var gA=u((RW,fA)=>{"use strict";var GB=vi();function kB(e,t,r){var n=e==null?void 0:GB(e,t);return n===void 0?r:n}fA.exports=kB});var yA=u((_W,mA)=>{"use strict";function FB(e,t){return e!=null&&t in Object(e)}mA.exports=FB});var hA=u((xW,AA)=>{"use strict";var QB=wi(),jB=$r(),WB=z(),$B=sn(),VB=Kn(),KB=gr();function YB(e,t,r){t=QB(t,e);for(var n=-1,a=t.length,o=!1;++n<a;){var i=KB(t[n]);if(!(o=e!=null&&r(e,i)))break;e=e[i]}return o||++n!=a?o:(a=e==null?0:e.length,!!a&&VB(a)&&$B(i,a)&&(WB(e)||jB(e)))}AA.exports=YB});var IA=u((TW,bA)=>{"use strict";var HB=yA(),JB=hA();function zB(e,t){return e!=null&&JB(e,t,HB)}bA.exports=zB});var wA=u((PW,SA)=>{"use strict";var XB=mi(),ZB=gA(),eN=IA(),tN=_a(),rN=yi(),nN=Ai(),aN=gr(),oN=1,sN=2;function iN(e,t){return tN(e)&&rN(t)?nN(aN(e),t):function(r){var n=ZB(r,e);return n===void 0&&n===t?eN(r,e):XB(t,n,oN|sN)}}SA.exports=iN});var EA=u((CW,vA)=>{"use strict";function uN(e){return function(t){return t?.[e]}}vA.exports=uN});var _A=u((OW,RA)=>{"use strict";var pN=vi();function cN(e){return function(t){return pN(t,e)}}RA.exports=cN});var TA=u((LW,xA)=>{"use strict";var lN=EA(),dN=_A(),fN=_a(),gN=gr();function mN(e){return fN(e)?lN(gN(e)):dN(e)}xA.exports=mN});var Ei=u((qW,PA)=>{"use strict";var yN=Yy(),AN=wA(),hN=Vr(),bN=z(),IN=TA();function SN(e){return typeof e=="function"?e:e==null?hN:typeof e=="object"?bN(e)?AN(e[0],e[1]):yN(e):IN(e)}PA.exports=SN});var OA=u((UW,CA)=>{"use strict";var wN=ci(),vN=Ei(),EN=1;function RN(e){return vN(typeof e=="function"?e:wN(e,EN))}CA.exports=RN});var qA=u((DW,LA)=>{"use strict";var _N=io();function xN(e){var t=e==null?0:e.length;return t?_N(e,1):[]}LA.exports=xN});var DA=u((BW,UA)=>{"use strict";var TN=qA(),PN=uo(),CN=Qn();function ON(e){return CN(PN(e,void 0,TN),e+"")}UA.exports=ON});var NA=u((NW,BA)=>{"use strict";var LN=wa(),qN=DA(),UN=256,DN=qN(function(e,t){return LN(e,UN,void 0,void 0,void 0,t)});BA.exports=DN});var GA=u((MW,MA)=>{"use strict";var BN=Ii(),NN=Xt(),MN=z(),GN=cr(),kN=bi(),FN=gr(),QN=Si();function jN(e){return MN(e)?BN(e,FN):GN(e)?[e]:NN(kN(QN(e)))}MA.exports=jN});var FA=u((GW,kA)=>{"use strict";kA.exports={ary:tm(),assign:ei(),clone:cy(),curry:dy(),forEach:Ia(),isArray:z(),isError:gy(),isFunction:Kr(),isWeakMap:yy(),iteratee:OA(),keys:Zs(),rearg:NA(),toInteger:Hs(),toPath:GA()}});var jA=u((kW,QA)=>{"use strict";var WN=Cf(),$N=FA();function VN(e,t,r){return WN($N,e,t,r)}QA.exports=VN});var Ri=u((FW,$A)=>{"use strict";var KN=jA(),WA=KN("merge",Uo());WA.placeholder=Os();$A.exports=WA});var ob=u((AV,ab)=>{"use strict";function SM(e,t,r,n){for(var a=-1,o=e==null?0:e.length;++a<o;){var i=e[a];t(n,i,r(i),e)}return n}ab.exports=SM});var ib=u((hV,sb)=>{"use strict";var wM=vo(),vM=lr();function EM(e,t){return e&&wM(e,t,vM)}sb.exports=EM});var pb=u((bV,ub)=>{"use strict";var RM=Ht();function _M(e,t){return function(r,n){if(r==null)return r;if(!RM(r))return e(r,n);for(var a=r.length,o=t?a:-1,i=Object(r);(t?o--:++o<a)&&n(i[o],o,i)!==!1;);return r}}ub.exports=_M});var lb=u((IV,cb)=>{"use strict";var xM=ib(),TM=pb(),PM=TM(xM);cb.exports=PM});var gb=u((SV,fb)=>{"use strict";var CM=lb();function OM(e,t,r,n){return CM(e,function(a,o,i){t(n,a,r(a),i)}),n}fb.exports=OM});var yb=u((wV,mb)=>{"use strict";var LM=ob(),qM=gb(),UM=Ei(),DM=z();function BM(e,t){return function(r,n){var a=DM(r)?LM:qM,o=t?t():{};return a(r,e,UM(n,2),o)}}mb.exports=BM});var hb=u((vV,Ab)=>{"use strict";var NM=Zr(),MM=yb(),GM=Object.prototype,kM=GM.hasOwnProperty,FM=MM(function(e,t,r){kM.call(e,r)?e[r].push(t):NM(e,r,[t])});Ab.exports=FM});var ZM={};S(ZM,{Method:()=>ka,ai:()=>Ni,api:()=>Hi,auditLogs:()=>ct,automations:()=>pa,backups:()=>ve,branding:()=>aa,constants:()=>Gr,environmentVariables:()=>je,features:()=>we,groups:()=>M,init:()=>Ef,licensing:()=>Me,logger:()=>Lt,mappers:()=>Q,middleware:()=>Oi,plugins:()=>ca,publicApi:()=>fa,quotas:()=>Fe,scimGroups:()=>mr,scimUsers:()=>se,sdk:()=>xi,users:()=>Je,utils:()=>Wt});module.exports=zb(ZM);var ka=(o=>(o.POST="POST",o.GET="GET",o.PATCH="PATCH",o.DELETE="DELETE",o.PUT="PUT",o))(ka||{});var xi={};S(xi,{ai:()=>zo,auditLogs:()=>ct,automations:()=>pa,backups:()=>ve,branding:()=>aa,environmentVariables:()=>je,features:()=>we,groups:()=>M,init:()=>Ef,licensing:()=>Me,logger:()=>Lt,plugins:()=>ca,publicApi:()=>fa,quotas:()=>Fe,scimGroups:()=>mr,scimUsers:()=>se,users:()=>Je,utils:()=>Wt});var aa={};S(aa,{getBrandingConfig:()=>Fx});var we={};S(we,{checkBackups:()=>le,checkFeature:()=>ra,checkFeatures:()=>$o,checkSCIM:()=>Ho,isAICustomConfigsEnabled:()=>Jo,isAppBuildersEnabled:()=>Rt,isAuditLogsEnabled:()=>na,isBackupsEnabled:()=>Vo,isBrandingEnabled:()=>Ko,isBudibaseAIEnabled:()=>cn,isEnforceableSSO:()=>Md,isExpandedPublicApiEnabled:()=>He,isPWAEnabled:()=>Bx,isSSOEnforced:()=>Nx,isSyncAutomationsEnabled:()=>Ux,isTriggerAutomationRunEnabled:()=>Dx,isUserGroupsEnabled:()=>Yo,isViewPermissionEnabled:()=>Mx,isViewReadonlyColumnsEnabled:()=>Gx});var Y=require("@budibase/types"),Ye=require("@budibase/backend-core");var Me={};S(Me,{cache:()=>xe,client:()=>ot,features:()=>Mn,getFreeLicense:()=>Qo,getLicense:()=>ko,getLicenseFromKey:()=>Fo,keys:()=>Wo,offline:()=>ea,quotas:()=>Gn});var xe={};S(xe,{getCachedLicense:()=>Bd,invalidate:()=>Nd,refresh:()=>wt});var Fa=require("@budibase/backend-core"),Ir,Xb=async()=>{Ir=await new Fa.redis.Client(Fa.redis.utils.Databases.LICENSES).init()},Zb=async()=>{Ir&&await Ir.finish()};process.on("exit",async()=>{await Zb()});var Qa=async()=>(Ir||await Xb(),Ir);var ot={};S(ot,{activateLicenseKey:()=>ro,getLicense:()=>Qt,getLicenseFromKey:()=>to,triggerQuota:()=>MI});var su=C(require("node-fetch"));var iu=require("@budibase/backend-core"),ja=class{constructor(t){this.apiCall=t=>async(r="",n={})=>{n.headers||(n.headers={}),n.headers["Content-Type"]||(n.headers={"Content-Type":"application/json",Accept:"application/json",...n.headers});let a=n.headers["Content-Type"]==="application/json";iu.logging.correlation.setHeader(n.headers);let o={method:t,body:a?JSON.stringify(n.body):n.body,headers:n.headers,credentials:"include"};return(0,su.default)(`${this.host}${r}`,o)};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}},Wa=ja;var Dn=require("@budibase/types"),T=require("@budibase/backend-core");var De={};S(De,{bustCache:()=>Ka,getCurrentUsageValues:()=>mu,getQuotaUsage:()=>At,setAllUsage:()=>Ha,setAppUsageValue:()=>Ya,setUsage:()=>du,setUsagePerApp:()=>fu,utils:()=>vr});var Z=require("@budibase/types"),ne=require("@budibase/backend-core");var vr={};S(vr,{generateBaseQuotaUsage:()=>_n,generateNewMonthlyQuotas:()=>wr,generateNewQuotaUsage:()=>Va,getBreakdownName:()=>Tn,getCurrentMonthString:()=>rt,getQuotaDocId:()=>Sr,setCurrentMonth:()=>xn,setQuotaReset:()=>$a});var V=require("@budibase/types"),yt=require("@budibase/backend-core"),Sr=()=>yt.context.isSelfHostUsingCloud()?`quota_usage_${yt.context.getTenantId()}`:yt.db.StaticDatabases.GLOBAL.docs.usageQuota,uu=()=>{let e=new Date;return new Date(e.getFullYear(),e.getMonth()+1,1).toISOString()},$a=e=>{e.quotaReset=uu()},rt=()=>{let e=new Date,t=e.getMonth()+1,r=e.getFullYear();return`${t}-${r}`},_n=()=>({usageQuota:{[V.StaticQuotaName.APPS]:0,[V.StaticQuotaName.ROWS]:0,[V.StaticQuotaName.PLUGINS]:0,[V.StaticQuotaName.USERS]:0,[V.StaticQuotaName.CREATORS]:0,[V.StaticQuotaName.USER_GROUPS]:0,[V.StaticQuotaName.AI_CUSTOM_CONFIGS]:0,triggers:{}},monthly:{[rt()]:wr()}}),Va=()=>{let e={_id:Sr(),quotaReset:uu(),..._n(),apps:{}};return xn(e),e},wr=()=>({[V.MonthlyQuotaName.QUERIES]:0,[V.MonthlyQuotaName.AUTOMATIONS]:0,[V.MonthlyQuotaName.BUDIBASE_AI_CREDITS]:0,triggers:{}}),xn=e=>{let t=rt();e.monthly||(e.monthly={}),e.monthly[t]||(e.monthly[t]=wr()),e.monthly.current=e.monthly[t]},Tn=(e,t)=>{if(!(!t||!e))switch(e){case V.MonthlyQuotaName.AUTOMATIONS:return V.BreakdownQuotaName.AUTOMATIONS;case V.MonthlyQuotaName.QUERIES:return yt.db.isTableId(t)?V.BreakdownQuotaName.ROW_QUERIES:yt.db.isDatasourceId(t)?V.BreakdownQuotaName.DATASOURCE_QUERIES:void 0}};var pu=ne.Duration.fromSeconds(60).toMs(),{Writethrough:cu}=ne.cache.writethrough;function tI(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 Pn=()=>ne.tenancy.isSelfHostUsingCloud()?new cu(ne.tenancy.getSelfHostCloudDB(),pu):new cu(ne.tenancy.getGlobalDB(),pu);async function Ka(e=0){let r=Pn(),n=Sr(),a=await r.tryGet(n);a&&a._rev&&await r.remove(n,a._rev).catch(async o=>{if(e<1)return await Ka(e+1);throw o})}var At=async()=>{let e=Pn(),t=await e.tryGet(Sr());if(!t){t=Va();let{rev:r}=await e.put(t);t._rev=r}return xn(t),$a(t),tI(t)},du=async(e,t,r)=>Ha({name:t,type:r,values:{total:e}}),fu=async(e,t,r)=>{let n=Pn(),a=await At(),o=Object.values(e).reduce((s,c)=>s+c,0);for(let[s,c]of Object.entries(e))a=gu(a,t,r,{total:o,app:c},{appId:s});let i=await n.put(a);return a._rev=i.rev,a},rI=(e,t,r,n)=>{let a=Tn(t,r);if(!a||!n?.breakdown)return e;e.breakdown||(e.breakdown={}),e.breakdown[a]||(e.breakdown[a]={parent:t,values:{}});let o=e.breakdown[a];return o.values[r]=n.breakdown,e},Ya=(e,t,r,n={},a)=>{let o;try{o=ne.db.getProdAppID(n?.appId||ne.context.getAppId())}catch{}if(!o||!a.app||!Z.APP_QUOTA_NAMES.includes(t))return e;e.apps?.[o]||(e.apps={...e.apps,[o]:_n()});let i=e.apps[o];switch(r){case Z.QuotaUsageType.STATIC:i.usageQuota[t]=a.app;break;case Z.QuotaUsageType.MONTHLY:{let s=rt(),c=t,f=i.monthly[s];f||(i.monthly[s]=wr(),f=i.monthly[s]),f[c]=a.app,Z.BREAKDOWN_QUOTA_NAMES.includes(c)&&n?.id&&(f=rI(f,c,n.id,a));break}}return e},lu=(e,t,r,n)=>{if(!Z.APP_QUOTA_NAMES.includes(r))return{};let a;try{a=ne.db.getProdAppID(ne.context.getAppId())}catch{}if(!a||!e.apps||!e.apps[a])return{app:0};let o=e.apps[a];switch(t){case Z.QuotaUsageType.STATIC:if(o.usageQuota?.[r])return{app:o.usageQuota[r]};break;case Z.QuotaUsageType.MONTHLY:{let i=rt(),s=r;if(!o.monthly?.[i]?.[s])break;let c=o.monthly[i],f=c[s],m,g=Tn(s,n);return g&&n&&c.breakdown?.[g]&&(m=c.breakdown[g]?.values[n]),{app:f,breakdown:m||0}}}return{app:0}},nI=(e,t,r)=>{t.usageQuota.triggers||(t.usageQuota.triggers={}),r&&(t.usageQuota.triggers[e]=r)},aI=(e,t,r,n)=>{r.monthly[t].triggers||(r.monthly[t].triggers={}),n&&(r.monthly[t].triggers[e]=n)},gu=(e,t,r,n,a={})=>{if(r===Z.QuotaUsageType.STATIC)t=t,e.usageQuota[t]=n.total,nI(t,e,n.triggers);else if(r===Z.QuotaUsageType.MONTHLY){t=t;let o=rt();e.monthly[o][t]=n.total,aI(t,o,e,n.triggers)}else throw new Error(`Invalid usage type: ${r}`);return Ya(e,t,r,a,n)},Ha=async e=>{let t=Array.isArray(e)?e:[e],r=Pn(),n=await At();for(let o of t)n=gu(n,o.name,o.type,o.values,o.opts);let a=await r.put(n,0);return n._rev=a.rev,n},mu=async(e,t,r)=>{let n=await At(),a=0,o={};switch(e){case Z.QuotaUsageType.STATIC:if(n.usageQuota[t]){let i=t;a=n.usageQuota[i],o=lu(n,e,t,r)}break;case Z.QuotaUsageType.MONTHLY:{let i=rt(),s=t;n.monthly[i][s]&&(a=n.monthly[i][s],o=lu(n,e,t,r));break}default:throw new Error(`Invalid usage type: ${e}`)}return Z.APP_QUOTA_NAMES.includes(t)&&!(o.app||o.breakdown)&&(o.app=o.app||0,o.breakdown=o.breakdown||0),{total:a,app:o.app,breakdown:o.breakdown}};var be={};S(be,{destroy:()=>iI,get:()=>Ja,save:()=>sI});var nt=require("@budibase/backend-core"),oI=()=>({_id:nt.StaticDatabases.GLOBAL.docs.licenseInfo}),sI=async e=>{let t=await Ja();t={...t,...e};let n=await nt.tenancy.getGlobalDB().put(t);return t._rev=n.rev,t},Ja=async()=>{let e=nt.tenancy.getGlobalDB();try{return await e.get(nt.StaticDatabases.GLOBAL.docs.licenseInfo)}catch(t){if(t.status===404)return oI();throw t}},iI=async()=>{let e=nt.tenancy.getGlobalDB(),t=await Ja();t&&t._rev&&await e.remove(nt.StaticDatabases.GLOBAL.docs.licenseInfo,t._rev)};var D={};S(D,{bulkSave:()=>bI,destroy:()=>II,fetch:()=>mI,generateUserGroupID:()=>fI,get:()=>yI,getBulk:()=>AI,getByName:()=>za,getGroupUsers:()=>On,getGroupUsersParams:()=>Iu,getUserGroupsParams:()=>bu,save:()=>hI});var L=require("@budibase/backend-core");var _e=require("@budibase/types"),Gt=require("@budibase/backend-core");async function yu(){let e=Gt.sql.designDoc.base("type");e.sql.tables={[_e.AUDIT_LOG_TYPE]:{fields:{appId:_e.SQLiteType.TEXT,event:_e.SQLiteType.TEXT,userId:_e.SQLiteType.TEXT,timestamp:_e.SQLiteType.TEXT,metadata:_e.SQLiteType.TEXT,name:_e.SQLiteType.TEXT,type:_e.SQLiteType.TEXT,fallback:_e.SQLiteType.TEXT}}};let t=Gt.context.getAuditLogsDB(),r;try{r=await t.get(Gt.SQLITE_DESIGN_DOC_ID),r={...r,...e}}catch(n){if(n.status===404)r=e;else throw n}await t.put(r)}var Cn=require("@budibase/backend-core"),{ViewName:uI,SEPARATOR:pI,DocumentType:cI,createView:lI}=Cn.db,dI=cI.USER+pI;async function Au(){let e=Cn.tenancy.getGlobalDB(),t=`function(doc) {
4
- if (doc._id.startsWith("${dI}") && Array.isArray(doc.userGroups)) {
3
+ `)}lg.exports=lC});var Sa=u((dj,fg)=>{"use strict";function dC(e,t){for(var r=-1,n=e==null?0:e.length;++r<n&&t(e[r],r,e)!==!1;);return e}fg.exports=dC});var mg=u((fj,gg)=>{"use strict";var fC=Sa(),gC=Ao(),mC=1,yC=2,AC=8,hC=16,bC=32,IC=64,SC=128,wC=256,vC=512,EC=[["ary",SC],["bind",mC],["bindKey",yC],["curry",AC],["curryRight",hC],["flip",vC],["partial",bC],["partialRight",IC],["rearg",wC]];function RC(e,t){return fC(EC,function(r){var n="_."+r[0];t&r[1]&&!gC(e,n)&&e.push(n)}),e.sort()}gg.exports=RC});var $s=u((gj,yg)=>{"use strict";var _C=cg(),xC=dg(),TC=jn(),PC=mg();function CC(e,t,r){var n=t+"";return TC(e,xC(n,PC(_C(n),r)))}yg.exports=CC});var Vs=u((mj,bg)=>{"use strict";var OC=ig(),LC=Ws(),qC=$s(),UC=1,DC=2,BC=4,NC=8,Ag=32,hg=64;function MC(e,t,r,n,a,o,i,s,c,f){var m=t&NC,g=m?i:void 0,y=m?void 0:i,h=m?o:void 0,v=m?void 0:o;t|=m?Ag:hg,t&=~(m?hg:Ag),t&BC||(t&=~(UC|DC));var P=[e,t,a,h,g,v,y,s,c,f],_=r.apply(void 0,P);return OC(e)&&LC(_,P),_.placeholder=n,qC(_,e,t)}bg.exports=MC});var Ks=u((yj,Ig)=>{"use strict";function GC(e){var t=e;return t.placeholder}Ig.exports=GC});var wg=u((Aj,Sg)=>{"use strict";var kC=Xt(),FC=sn(),QC=Math.min;function jC(e,t){for(var r=e.length,n=QC(t.length,r),a=kC(e);n--;){var o=t[n];e[n]=FC(o,r)?a[o]:void 0}return e}Sg.exports=jC});var wa=u((hj,Eg)=>{"use strict";var vg="__lodash_placeholder__";function WC(e,t){for(var r=-1,n=e.length,a=0,o=[];++r<n;){var i=e[r];(i===t||i===vg)&&(e[r]=vg,o[a++]=r)}return o}Eg.exports=WC});var Hs=u((bj,xg)=>{"use strict";var $C=Gs(),VC=ks(),KC=Wf(),Rg=hn(),HC=Vs(),YC=Ks(),JC=wg(),zC=wa(),XC=te(),ZC=1,eO=2,tO=8,rO=16,nO=128,aO=512;function _g(e,t,r,n,a,o,i,s,c,f){var m=t&nO,g=t&ZC,y=t&eO,h=t&(tO|rO),v=t&aO,P=y?void 0:Rg(e);function _(){for(var E=arguments.length,U=Array(E),et=E;et--;)U[et]=arguments[et];if(h)var Ae=YC(_),tt=KC(U,Ae);if(n&&(U=$C(U,n,a,h)),o&&(U=VC(U,o,i,h)),E-=tt,h&&E<f){var Mt=zC(U,Ae);return HC(e,t,_g,_.placeholder,r,U,Mt,s,c,f-E)}var Ar=g?r:this,hr=y?Ar[e]:e;return E=U.length,s?U=JC(U,s):v&&E>1&&U.reverse(),m&&c<E&&(U.length=c),this&&this!==XC&&this instanceof _&&(hr=P||Rg(hr)),hr.apply(Ar,U)}return _}xg.exports=_g});var Pg=u((Ij,Tg)=>{"use strict";var oO=Qn(),sO=hn(),iO=Hs(),uO=Vs(),pO=Ks(),cO=wa(),lO=te();function dO(e,t,r){var n=sO(e);function a(){for(var o=arguments.length,i=Array(o),s=o,c=pO(a);s--;)i[s]=arguments[s];var f=o<3&&i[0]!==c&&i[o-1]!==c?[]:cO(i,c);if(o-=f.length,o<r)return uO(e,t,iO,a.placeholder,void 0,i,f,void 0,void 0,r-o);var m=this&&this!==lO&&this instanceof a?n:e;return oO(m,this,i)}return a}Tg.exports=dO});var Og=u((Sj,Cg)=>{"use strict";var fO=Qn(),gO=hn(),mO=te(),yO=1;function AO(e,t,r,n){var a=t&yO,o=gO(e);function i(){for(var s=-1,c=arguments.length,f=-1,m=n.length,g=Array(m+c),y=this&&this!==mO&&this instanceof i?o:e;++f<m;)g[f]=n[f];for(;c--;)g[f++]=arguments[++s];return fO(y,a?r:this,g)}return i}Cg.exports=AO});var Ng=u((wj,Bg)=>{"use strict";var hO=Gs(),bO=ks(),Lg=wa(),qg="__lodash_placeholder__",Ys=1,IO=2,SO=4,Ug=8,bn=128,Dg=256,wO=Math.min;function vO(e,t){var r=e[1],n=t[1],a=r|n,o=a<(Ys|IO|bn),i=n==bn&&r==Ug||n==bn&&r==Dg&&e[7].length<=t[8]||n==(bn|Dg)&&t[7].length<=t[8]&&r==Ug;if(!(o||i))return e;n&Ys&&(e[2]=t[2],a|=r&Ys?0:SO);var s=t[3];if(s){var c=e[3];e[3]=c?hO(c,s,t[4]):s,e[4]=c?Lg(e[3],qg):t[4]}return s=t[5],s&&(c=e[5],e[5]=c?bO(c,s,t[6]):s,e[6]=c?Lg(e[5],qg):t[6]),s=t[7],s&&(e[7]=s),n&bn&&(e[8]=e[8]==null?t[8]:wO(e[8],t[8])),e[9]==null&&(e[9]=t[9]),e[0]=t[0],e[1]=a,e}Bg.exports=vO});var Gg=u((vj,Mg)=>{"use strict";var EO=/\s/;function RO(e){for(var t=e.length;t--&&EO.test(e.charAt(t)););return t}Mg.exports=RO});var Fg=u((Ej,kg)=>{"use strict";var _O=Gg(),xO=/^\s+/;function TO(e){return e&&e.slice(0,_O(e)+1).replace(xO,"")}kg.exports=TO});var cr=u((Rj,Qg)=>{"use strict";var PO=st(),CO=ce(),OO="[object Symbol]";function LO(e){return typeof e=="symbol"||CO(e)&&PO(e)==OO}Qg.exports=LO});var Vg=u((_j,$g)=>{"use strict";var qO=Fg(),jg=Se(),UO=cr(),Wg=0/0,DO=/^[-+]0x[0-9a-f]+$/i,BO=/^0b[01]+$/i,NO=/^0o[0-7]+$/i,MO=parseInt;function GO(e){if(typeof e=="number")return e;if(UO(e))return Wg;if(jg(e)){var t=typeof e.valueOf=="function"?e.valueOf():e;e=jg(t)?t+"":t}if(typeof e!="string")return e===0?e:+e;e=qO(e);var r=BO.test(e);return r||NO.test(e)?MO(e.slice(2),r?2:8):DO.test(e)?Wg:+e}$g.exports=GO});var Yg=u((xj,Hg)=>{"use strict";var kO=Vg(),Kg=1/0,FO=17976931348623157e292;function QO(e){if(!e)return e===0?e:0;if(e=kO(e),e===Kg||e===-Kg){var t=e<0?-1:1;return t*FO}return e===e?e:0}Hg.exports=QO});var Js=u((Tj,Jg)=>{"use strict";var jO=Yg();function WO(e){var t=jO(e),r=t%1;return t===t?r?t-r:t:0}Jg.exports=WO});var va=u((Pj,tm)=>{"use strict";var $O=Ms(),VO=kf(),KO=Pg(),HO=Hs(),YO=Og(),JO=Fs(),zO=Ng(),XO=Ws(),ZO=$s(),zg=Js(),eL="Expected a function",Xg=1,tL=2,zs=8,Xs=16,Zs=32,Zg=64,em=Math.max;function rL(e,t,r,n,a,o,i,s){var c=t&tL;if(!c&&typeof e!="function")throw new TypeError(eL);var f=n?n.length:0;if(f||(t&=~(Zs|Zg),n=a=void 0),i=i===void 0?i:em(zg(i),0),s=s===void 0?s:zg(s),f-=a?a.length:0,t&Zg){var m=n,g=a;n=a=void 0}var y=c?void 0:JO(e),h=[e,t,r,n,a,m,g,o,i,s];if(y&&zO(h,y),e=h[0],t=h[1],r=h[2],n=h[3],a=h[4],s=h[9]=h[9]===void 0?c?0:e.length:em(h[9]-f,0),!s&&t&(zs|Xs)&&(t&=~(zs|Xs)),!t||t==Xg)var v=VO(e,t,r);else t==zs||t==Xs?v=KO(e,t,s):(t==Zs||t==(Xg|Zs))&&!a.length?v=YO(e,t,r,n):v=HO.apply(void 0,h);var P=y?$O:XO;return ZO(P(v,h),e,t)}tm.exports=rL});var nm=u((Cj,rm)=>{"use strict";var nL=va(),aL=128;function oL(e,t,r){return t=r?void 0:t,t=e&&t==null?e.length:t,nL(e,aL,void 0,void 0,void 0,void 0,t)}rm.exports=oL});var om=u((Oj,am)=>{"use strict";var sL=To(),iL=sL(Object.keys,Object);am.exports=iL});var ei=u((Lj,sm)=>{"use strict";var uL=zn(),pL=om(),cL=Object.prototype,lL=cL.hasOwnProperty;function dL(e){if(!uL(e))return pL(e);var t=[];for(var r in Object(e))lL.call(e,r)&&r!="constructor"&&t.push(r);return t}sm.exports=dL});var lr=u((qj,im)=>{"use strict";var fL=Uo(),gL=ei(),mL=Yt();function yL(e){return mL(e)?fL(e):gL(e)}im.exports=yL});var ti=u((Uj,um)=>{"use strict";var AL=tr(),hL=lr();function bL(e,t){return e&&AL(t,hL(t),e)}um.exports=bL});var cm=u((Dj,pm)=>{"use strict";var IL=tr(),SL=rr();function wL(e,t){return e&&IL(t,SL(t),e)}pm.exports=wL});var dm=u((Bj,lm)=>{"use strict";function vL(e,t){for(var r=-1,n=e==null?0:e.length,a=0,o=[];++r<n;){var i=e[r];t(i,r,e)&&(o[a++]=i)}return o}lm.exports=vL});var ri=u((Nj,fm)=>{"use strict";function EL(){return[]}fm.exports=EL});var Ea=u((Mj,mm)=>{"use strict";var RL=dm(),_L=ri(),xL=Object.prototype,TL=xL.propertyIsEnumerable,gm=Object.getOwnPropertySymbols,PL=gm?function(e){return e==null?[]:(e=Object(e),RL(gm(e),function(t){return TL.call(e,t)}))}:_L;mm.exports=PL});var Am=u((Gj,ym)=>{"use strict";var CL=tr(),OL=Ea();function LL(e,t){return CL(e,OL(e),t)}ym.exports=LL});var ni=u((kj,hm)=>{"use strict";var qL=Fn(),UL=Jn(),DL=Ea(),BL=ri(),NL=Object.getOwnPropertySymbols,ML=NL?function(e){for(var t=[];e;)qL(t,DL(e)),e=UL(e);return t}:BL;hm.exports=ML});var Im=u((Fj,bm)=>{"use strict";var GL=tr(),kL=ni();function FL(e,t){return GL(e,kL(e),t)}bm.exports=FL});var ai=u((Qj,Sm)=>{"use strict";var QL=Fn(),jL=z();function WL(e,t,r){var n=t(e);return jL(e)?n:QL(n,r(e))}Sm.exports=WL});var oi=u((jj,wm)=>{"use strict";var $L=ai(),VL=Ea(),KL=lr();function HL(e){return $L(e,KL,VL)}wm.exports=HL});var Em=u((Wj,vm)=>{"use strict";var YL=ai(),JL=ni(),zL=rr();function XL(e){return YL(e,zL,JL)}vm.exports=XL});var _m=u(($j,Rm)=>{"use strict";var ZL=it(),eq=te(),tq=ZL(eq,"DataView");Rm.exports=tq});var Tm=u((Vj,xm)=>{"use strict";var rq=it(),nq=te(),aq=rq(nq,"Promise");xm.exports=aq});var fr=u((Kj,Dm)=>{"use strict";var si=_m(),ii=Wn(),ui=Tm(),pi=bo(),ci=Bs(),Um=st(),dr=lo(),Pm="[object Map]",oq="[object Object]",Cm="[object Promise]",Om="[object Set]",Lm="[object WeakMap]",qm="[object DataView]",sq=dr(si),iq=dr(ii),uq=dr(ui),pq=dr(pi),cq=dr(ci),Ot=Um;(si&&Ot(new si(new ArrayBuffer(1)))!=qm||ii&&Ot(new ii)!=Pm||ui&&Ot(ui.resolve())!=Cm||pi&&Ot(new pi)!=Om||ci&&Ot(new ci)!=Lm)&&(Ot=function(e){var t=Um(e),r=t==oq?e.constructor:void 0,n=r?dr(r):"";if(n)switch(n){case sq:return qm;case iq:return Pm;case uq:return Cm;case pq:return Om;case cq:return Lm}return t});Dm.exports=Ot});var Nm=u((Hj,Bm)=>{"use strict";var lq=Object.prototype,dq=lq.hasOwnProperty;function fq(e){var t=e.length,r=new e.constructor(t);return t&&typeof e[0]=="string"&&dq.call(e,"index")&&(r.index=e.index,r.input=e.input),r}Bm.exports=fq});var Gm=u((Yj,Mm)=>{"use strict";var gq=Yn();function mq(e,t){var r=t?gq(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.byteLength)}Mm.exports=mq});var Fm=u((Jj,km)=>{"use strict";var yq=/\w*$/;function Aq(e){var t=new e.constructor(e.source,yq.exec(e));return t.lastIndex=e.lastIndex,t}km.exports=Aq});var Vm=u((zj,$m)=>{"use strict";var Qm=St(),jm=Qm?Qm.prototype:void 0,Wm=jm?jm.valueOf:void 0;function hq(e){return Wm?Object(Wm.call(e)):{}}$m.exports=hq});var Hm=u((Xj,Km)=>{"use strict";var bq=Yn(),Iq=Gm(),Sq=Fm(),wq=Vm(),vq=xo(),Eq="[object Boolean]",Rq="[object Date]",_q="[object Map]",xq="[object Number]",Tq="[object RegExp]",Pq="[object Set]",Cq="[object String]",Oq="[object Symbol]",Lq="[object ArrayBuffer]",qq="[object DataView]",Uq="[object Float32Array]",Dq="[object Float64Array]",Bq="[object Int8Array]",Nq="[object Int16Array]",Mq="[object Int32Array]",Gq="[object Uint8Array]",kq="[object Uint8ClampedArray]",Fq="[object Uint16Array]",Qq="[object Uint32Array]";function jq(e,t,r){var n=e.constructor;switch(t){case Lq:return bq(e);case Eq:case Rq:return new n(+e);case qq:return Iq(e,r);case Uq:case Dq:case Bq:case Nq:case Mq:case Gq:case kq:case Fq:case Qq:return vq(e,r);case _q:return new n;case xq:case Cq:return new n(e);case Tq:return Sq(e);case Pq:return new n;case Oq:return wq(e)}}Km.exports=jq});var Jm=u((Zj,Ym)=>{"use strict";var Wq=fr(),$q=ce(),Vq="[object Map]";function Kq(e){return $q(e)&&Wq(e)==Vq}Ym.exports=Kq});var ey=u((eW,Zm)=>{"use strict";var Hq=Jm(),Yq=Xn(),zm=Zn(),Xm=zm&&zm.isMap,Jq=Xm?Yq(Xm):Hq;Zm.exports=Jq});var ry=u((tW,ty)=>{"use strict";var zq=fr(),Xq=ce(),Zq="[object Set]";function eU(e){return Xq(e)&&zq(e)==Zq}ty.exports=eU});var sy=u((rW,oy)=>{"use strict";var tU=ry(),rU=Xn(),ny=Zn(),ay=ny&&ny.isSet,nU=ay?rU(ay):tU;oy.exports=nU});var li=u((nW,cy)=>{"use strict";var aU=Xr(),oU=Sa(),sU=qo(),iU=ti(),uU=cm(),pU=Ro(),cU=Xt(),lU=Am(),dU=Im(),fU=oi(),gU=Em(),mU=fr(),yU=Nm(),AU=Hm(),hU=Po(),bU=z(),IU=nn(),SU=ey(),wU=Se(),vU=sy(),EU=lr(),RU=rr(),_U=1,xU=2,TU=4,iy="[object Arguments]",PU="[object Array]",CU="[object Boolean]",OU="[object Date]",LU="[object Error]",uy="[object Function]",qU="[object GeneratorFunction]",UU="[object Map]",DU="[object Number]",py="[object Object]",BU="[object RegExp]",NU="[object Set]",MU="[object String]",GU="[object Symbol]",kU="[object WeakMap]",FU="[object ArrayBuffer]",QU="[object DataView]",jU="[object Float32Array]",WU="[object Float64Array]",$U="[object Int8Array]",VU="[object Int16Array]",KU="[object Int32Array]",HU="[object Uint8Array]",YU="[object Uint8ClampedArray]",JU="[object Uint16Array]",zU="[object Uint32Array]",O={};O[iy]=O[PU]=O[FU]=O[QU]=O[CU]=O[OU]=O[jU]=O[WU]=O[$U]=O[VU]=O[KU]=O[UU]=O[DU]=O[py]=O[BU]=O[NU]=O[MU]=O[GU]=O[HU]=O[YU]=O[JU]=O[zU]=!0;O[LU]=O[uy]=O[kU]=!1;function Ra(e,t,r,n,a,o){var i,s=t&_U,c=t&xU,f=t&TU;if(r&&(i=a?r(e,n,a,o):r(e)),i!==void 0)return i;if(!wU(e))return e;var m=bU(e);if(m){if(i=yU(e),!s)return cU(e,i)}else{var g=mU(e),y=g==uy||g==qU;if(IU(e))return pU(e,s);if(g==py||g==iy||y&&!a){if(i=c||y?{}:hU(e),!s)return c?dU(e,uU(i,e)):lU(e,iU(i,e))}else{if(!O[g])return a?e:{};i=AU(e,g,s)}}o||(o=new aU);var h=o.get(e);if(h)return h;o.set(e,i),vU(e)?e.forEach(function(_){i.add(Ra(_,t,r,_,e,o))}):SU(e)&&e.forEach(function(_,E){i.set(E,Ra(_,t,r,E,e,o))});var v=f?c?gU:fU:c?RU:EU,P=m?void 0:v(e);return oU(P||e,function(_,E){P&&(E=_,_=e[E]),sU(i,E,Ra(_,t,r,E,e,o))}),i}cy.exports=Ra});var dy=u((aW,ly)=>{"use strict";var XU=li(),ZU=4;function eD(e){return XU(e,ZU)}ly.exports=eD});var gy=u((oW,fy)=>{"use strict";var tD=va(),rD=8;function di(e,t,r){t=r?void 0:t;var n=tD(e,rD,void 0,void 0,void 0,void 0,void 0,t);return n.placeholder=di.placeholder,n}di.placeholder={};fy.exports=di});var yy=u((sW,my)=>{"use strict";var nD=st(),aD=ce(),oD=Co(),sD="[object DOMException]",iD="[object Error]";function uD(e){if(!aD(e))return!1;var t=nD(e);return t==iD||t==sD||typeof e.message=="string"&&typeof e.name=="string"&&!oD(e)}my.exports=uD});var hy=u((iW,Ay)=>{"use strict";var pD=fr(),cD=ce(),lD="[object WeakMap]";function dD(e){return cD(e)&&pD(e)==lD}Ay.exports=dD});var Iy=u((uW,by)=>{"use strict";function fD(e,t){for(var r=-1,n=e==null?0:e.length;++r<n;)if(t(e[r],r,e))return!0;return!1}by.exports=fD});var fi=u((pW,Sy)=>{"use strict";var gD=yo(),mD=Iy(),yD=ho(),AD=1,hD=2;function bD(e,t,r,n,a,o){var i=r&AD,s=e.length,c=t.length;if(s!=c&&!(i&&c>s))return!1;var f=o.get(e),m=o.get(t);if(f&&m)return f==t&&m==e;var g=-1,y=!0,h=r&hD?new gD:void 0;for(o.set(e,t),o.set(t,e);++g<s;){var v=e[g],P=t[g];if(n)var _=i?n(P,v,g,t,e,o):n(v,P,g,e,t,o);if(_!==void 0){if(_)continue;y=!1;break}if(h){if(!mD(t,function(E,U){if(!yD(h,U)&&(v===E||a(v,E,r,n,o)))return h.push(U)})){y=!1;break}}else if(!(v===P||a(v,P,r,n,o))){y=!1;break}}return o.delete(e),o.delete(t),y}Sy.exports=bD});var vy=u((cW,wy)=>{"use strict";function ID(e){var t=-1,r=Array(e.size);return e.forEach(function(n,a){r[++t]=[a,n]}),r}wy.exports=ID});var Ty=u((lW,xy)=>{"use strict";var Ey=St(),Ry=_o(),SD=Vt(),wD=fi(),vD=vy(),ED=Kn(),RD=1,_D=2,xD="[object Boolean]",TD="[object Date]",PD="[object Error]",CD="[object Map]",OD="[object Number]",LD="[object RegExp]",qD="[object Set]",UD="[object String]",DD="[object Symbol]",BD="[object ArrayBuffer]",ND="[object DataView]",_y=Ey?Ey.prototype:void 0,gi=_y?_y.valueOf:void 0;function MD(e,t,r,n,a,o,i){switch(r){case ND:if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case BD:return!(e.byteLength!=t.byteLength||!o(new Ry(e),new Ry(t)));case xD:case TD:case OD:return SD(+e,+t);case PD:return e.name==t.name&&e.message==t.message;case LD:case UD:return e==t+"";case CD:var s=vD;case qD:var c=n&RD;if(s||(s=ED),e.size!=t.size&&!c)return!1;var f=i.get(e);if(f)return f==t;n|=_D,i.set(e,t);var m=wD(s(e),s(t),n,a,o,i);return i.delete(e),m;case DD:if(gi)return gi.call(e)==gi.call(t)}return!1}xy.exports=MD});var Oy=u((dW,Cy)=>{"use strict";var Py=oi(),GD=1,kD=Object.prototype,FD=kD.hasOwnProperty;function QD(e,t,r,n,a,o){var i=r&GD,s=Py(e),c=s.length,f=Py(t),m=f.length;if(c!=m&&!i)return!1;for(var g=c;g--;){var y=s[g];if(!(i?y in t:FD.call(t,y)))return!1}var h=o.get(e),v=o.get(t);if(h&&v)return h==t&&v==e;var P=!0;o.set(e,t),o.set(t,e);for(var _=i;++g<c;){y=s[g];var E=e[y],U=t[y];if(n)var et=i?n(U,E,y,t,e,o):n(E,U,y,e,t,o);if(!(et===void 0?E===U||a(E,U,r,n,o):et)){P=!1;break}_||(_=y=="constructor")}if(P&&!_){var Ae=e.constructor,tt=t.constructor;Ae!=tt&&"constructor"in e&&"constructor"in t&&!(typeof Ae=="function"&&Ae instanceof Ae&&typeof tt=="function"&&tt instanceof tt)&&(P=!1)}return o.delete(e),o.delete(t),P}Cy.exports=QD});var Gy=u((fW,My)=>{"use strict";var mi=Xr(),jD=fi(),WD=Ty(),$D=Oy(),Ly=fr(),qy=z(),Uy=nn(),VD=ea(),KD=1,Dy="[object Arguments]",By="[object Array]",_a="[object Object]",HD=Object.prototype,Ny=HD.hasOwnProperty;function YD(e,t,r,n,a,o){var i=qy(e),s=qy(t),c=i?By:Ly(e),f=s?By:Ly(t);c=c==Dy?_a:c,f=f==Dy?_a:f;var m=c==_a,g=f==_a,y=c==f;if(y&&Uy(e)){if(!Uy(t))return!1;i=!0,m=!1}if(y&&!m)return o||(o=new mi),i||VD(e)?jD(e,t,r,n,a,o):WD(e,t,c,r,n,a,o);if(!(r&KD)){var h=m&&Ny.call(e,"__wrapped__"),v=g&&Ny.call(t,"__wrapped__");if(h||v){var P=h?e.value():e,_=v?t.value():t;return o||(o=new mi),a(P,_,r,n,o)}}return y?(o||(o=new mi),$D(e,t,r,n,a,o)):!1}My.exports=YD});var yi=u((gW,Qy)=>{"use strict";var JD=Gy(),ky=ce();function Fy(e,t,r,n,a){return e===t?!0:e==null||t==null||!ky(e)&&!ky(t)?e!==e&&t!==t:JD(e,t,r,n,Fy,a)}Qy.exports=Fy});var Wy=u((mW,jy)=>{"use strict";var zD=Xr(),XD=yi(),ZD=1,eB=2;function tB(e,t,r,n){var a=r.length,o=a,i=!n;if(e==null)return!o;for(e=Object(e);a--;){var s=r[a];if(i&&s[2]?s[1]!==e[s[0]]:!(s[0]in e))return!1}for(;++a<o;){s=r[a];var c=s[0],f=e[c],m=s[1];if(i&&s[2]){if(f===void 0&&!(c in e))return!1}else{var g=new zD;if(n)var y=n(f,m,c,e,t,g);if(!(y===void 0?XD(m,f,ZD|eB,n,g):y))return!1}}return!0}jy.exports=tB});var Ai=u((yW,$y)=>{"use strict";var rB=Se();function nB(e){return e===e&&!rB(e)}$y.exports=nB});var Ky=u((AW,Vy)=>{"use strict";var aB=Ai(),oB=lr();function sB(e){for(var t=oB(e),r=t.length;r--;){var n=t[r],a=e[n];t[r]=[n,a,aB(a)]}return t}Vy.exports=sB});var hi=u((hW,Hy)=>{"use strict";function iB(e,t){return function(r){return r==null?!1:r[e]===t&&(t!==void 0||e in Object(r))}}Hy.exports=iB});var Jy=u((bW,Yy)=>{"use strict";var uB=Wy(),pB=Ky(),cB=hi();function lB(e){var t=pB(e);return t.length==1&&t[0][2]?cB(t[0][0],t[0][1]):function(r){return r===e||uB(r,e,t)}}Yy.exports=lB});var xa=u((IW,zy)=>{"use strict";var dB=z(),fB=cr(),gB=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,mB=/^\w*$/;function yB(e,t){if(dB(e))return!1;var r=typeof e;return r=="number"||r=="symbol"||r=="boolean"||e==null||fB(e)?!0:mB.test(e)||!gB.test(e)||t!=null&&e in Object(t)}zy.exports=yB});var eA=u((SW,Zy)=>{"use strict";var Xy=$n(),AB="Expected a function";function bi(e,t){if(typeof e!="function"||t!=null&&typeof t!="function")throw new TypeError(AB);var r=function(){var n=arguments,a=t?t.apply(this,n):n[0],o=r.cache;if(o.has(a))return o.get(a);var i=e.apply(this,n);return r.cache=o.set(a,i)||o,i};return r.cache=new(bi.Cache||Xy),r}bi.Cache=Xy;Zy.exports=bi});var rA=u((wW,tA)=>{"use strict";var hB=eA(),bB=500;function IB(e){var t=hB(e,function(n){return r.size===bB&&r.clear(),n}),r=t.cache;return t}tA.exports=IB});var Ii=u((vW,nA)=>{"use strict";var SB=rA(),wB=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,vB=/\\(\\)?/g,EB=SB(function(e){var t=[];return e.charCodeAt(0)===46&&t.push(""),e.replace(wB,function(r,n,a,o){t.push(a?o.replace(vB,"$1"):n||r)}),t});nA.exports=EB});var Si=u((EW,aA)=>{"use strict";function RB(e,t){for(var r=-1,n=e==null?0:e.length,a=Array(n);++r<n;)a[r]=t(e[r],r,e);return a}aA.exports=RB});var cA=u((RW,pA)=>{"use strict";var oA=St(),_B=Si(),xB=z(),TB=cr(),PB=1/0,sA=oA?oA.prototype:void 0,iA=sA?sA.toString:void 0;function uA(e){if(typeof e=="string")return e;if(xB(e))return _B(e,uA)+"";if(TB(e))return iA?iA.call(e):"";var t=e+"";return t=="0"&&1/e==-PB?"-0":t}pA.exports=uA});var wi=u((_W,lA)=>{"use strict";var CB=cA();function OB(e){return e==null?"":CB(e)}lA.exports=OB});var vi=u((xW,dA)=>{"use strict";var LB=z(),qB=xa(),UB=Ii(),DB=wi();function BB(e,t){return LB(e)?e:qB(e,t)?[e]:UB(DB(e))}dA.exports=BB});var gr=u((TW,fA)=>{"use strict";var NB=cr(),MB=1/0;function GB(e){if(typeof e=="string"||NB(e))return e;var t=e+"";return t=="0"&&1/e==-MB?"-0":t}fA.exports=GB});var Ei=u((PW,gA)=>{"use strict";var kB=vi(),FB=gr();function QB(e,t){t=kB(t,e);for(var r=0,n=t.length;e!=null&&r<n;)e=e[FB(t[r++])];return r&&r==n?e:void 0}gA.exports=QB});var yA=u((CW,mA)=>{"use strict";var jB=Ei();function WB(e,t,r){var n=e==null?void 0:jB(e,t);return n===void 0?r:n}mA.exports=WB});var hA=u((OW,AA)=>{"use strict";function $B(e,t){return e!=null&&t in Object(e)}AA.exports=$B});var IA=u((LW,bA)=>{"use strict";var VB=vi(),KB=$r(),HB=z(),YB=sn(),JB=Hn(),zB=gr();function XB(e,t,r){t=VB(t,e);for(var n=-1,a=t.length,o=!1;++n<a;){var i=zB(t[n]);if(!(o=e!=null&&r(e,i)))break;e=e[i]}return o||++n!=a?o:(a=e==null?0:e.length,!!a&&JB(a)&&YB(i,a)&&(HB(e)||KB(e)))}bA.exports=XB});var wA=u((qW,SA)=>{"use strict";var ZB=hA(),eN=IA();function tN(e,t){return e!=null&&eN(e,t,ZB)}SA.exports=tN});var EA=u((UW,vA)=>{"use strict";var rN=yi(),nN=yA(),aN=wA(),oN=xa(),sN=Ai(),iN=hi(),uN=gr(),pN=1,cN=2;function lN(e,t){return oN(e)&&sN(t)?iN(uN(e),t):function(r){var n=nN(r,e);return n===void 0&&n===t?aN(r,e):rN(t,n,pN|cN)}}vA.exports=lN});var _A=u((DW,RA)=>{"use strict";function dN(e){return function(t){return t?.[e]}}RA.exports=dN});var TA=u((BW,xA)=>{"use strict";var fN=Ei();function gN(e){return function(t){return fN(t,e)}}xA.exports=gN});var CA=u((NW,PA)=>{"use strict";var mN=_A(),yN=TA(),AN=xa(),hN=gr();function bN(e){return AN(e)?mN(hN(e)):yN(e)}PA.exports=bN});var Ri=u((MW,OA)=>{"use strict";var IN=Jy(),SN=EA(),wN=Vr(),vN=z(),EN=CA();function RN(e){return typeof e=="function"?e:e==null?wN:typeof e=="object"?vN(e)?SN(e[0],e[1]):IN(e):EN(e)}OA.exports=RN});var qA=u((GW,LA)=>{"use strict";var _N=li(),xN=Ri(),TN=1;function PN(e){return xN(typeof e=="function"?e:_N(e,TN))}LA.exports=PN});var DA=u((kW,UA)=>{"use strict";var CN=uo();function ON(e){var t=e==null?0:e.length;return t?CN(e,1):[]}UA.exports=ON});var NA=u((FW,BA)=>{"use strict";var LN=DA(),qN=po(),UN=jn();function DN(e){return UN(qN(e,void 0,LN),e+"")}BA.exports=DN});var GA=u((QW,MA)=>{"use strict";var BN=va(),NN=NA(),MN=256,GN=NN(function(e,t){return BN(e,MN,void 0,void 0,void 0,t)});MA.exports=GN});var FA=u((jW,kA)=>{"use strict";var kN=Si(),FN=Xt(),QN=z(),jN=cr(),WN=Ii(),$N=gr(),VN=wi();function KN(e){return QN(e)?kN(e,$N):jN(e)?[e]:FN(WN(VN(e)))}kA.exports=KN});var jA=u((WW,QA)=>{"use strict";QA.exports={ary:nm(),assign:ti(),clone:dy(),curry:gy(),forEach:Sa(),isArray:z(),isError:yy(),isFunction:Kr(),isWeakMap:hy(),iteratee:qA(),keys:ei(),rearg:GA(),toInteger:Js(),toPath:FA()}});var $A=u(($W,WA)=>{"use strict";var HN=Lf(),YN=jA();function JN(e,t,r){return HN(YN,e,t,r)}WA.exports=JN});var _i=u((VW,KA)=>{"use strict";var zN=$A(),VA=zN("merge",Do());VA.placeholder=Ls();KA.exports=VA});var pb=u((xV,ub)=>{"use strict";function _M(e,t,r,n){for(var a=-1,o=e==null?0:e.length;++a<o;){var i=e[a];t(n,i,r(i),e)}return n}ub.exports=_M});var lb=u((TV,cb)=>{"use strict";var xM=Eo(),TM=lr();function PM(e,t){return e&&xM(e,t,TM)}cb.exports=PM});var gb=u((PV,fb)=>{"use strict";var CM=Yt();function OM(e,t){return function(r,n){if(r==null)return r;if(!CM(r))return e(r,n);for(var a=r.length,o=t?a:-1,i=Object(r);(t?o--:++o<a)&&n(i[o],o,i)!==!1;);return r}}fb.exports=OM});var yb=u((CV,mb)=>{"use strict";var LM=lb(),qM=gb(),UM=qM(LM);mb.exports=UM});var hb=u((OV,Ab)=>{"use strict";var DM=yb();function BM(e,t,r,n){return DM(e,function(a,o,i){t(n,a,r(a),i)}),n}Ab.exports=BM});var Ib=u((LV,bb)=>{"use strict";var NM=pb(),MM=hb(),GM=Ri(),kM=z();function FM(e,t){return function(r,n){var a=kM(r)?NM:MM,o=t?t():{};return a(r,e,GM(n,2),o)}}bb.exports=FM});var wb=u((qV,Sb)=>{"use strict";var QM=Zr(),jM=Ib(),WM=Object.prototype,$M=WM.hasOwnProperty,VM=jM(function(e,t,r){$M.call(e,r)?e[r].push(t):QM(e,r,[t])});Sb.exports=VM});var aG={};S(aG,{Method:()=>Fa,ai:()=>Gi,api:()=>zi,auditLogs:()=>ct,automations:()=>ca,backups:()=>ve,branding:()=>oa,constants:()=>Gr,environmentVariables:()=>je,features:()=>we,groups:()=>M,init:()=>_f,licensing:()=>Me,logger:()=>Lt,mappers:()=>Q,middleware:()=>Li,plugins:()=>la,publicApi:()=>ga,quotas:()=>Fe,scimGroups:()=>mr,scimUsers:()=>se,sdk:()=>Ti,users:()=>Je,utils:()=>Wt});module.exports=tI(aG);var Fa=(o=>(o.POST="POST",o.GET="GET",o.PATCH="PATCH",o.DELETE="DELETE",o.PUT="PUT",o))(Fa||{});var Ti={};S(Ti,{ai:()=>Xo,auditLogs:()=>ct,automations:()=>ca,backups:()=>ve,branding:()=>oa,environmentVariables:()=>je,features:()=>we,groups:()=>M,init:()=>_f,licensing:()=>Me,logger:()=>Lt,plugins:()=>la,publicApi:()=>ga,quotas:()=>Fe,scimGroups:()=>mr,scimUsers:()=>se,users:()=>Je,utils:()=>Wt});var oa={};S(oa,{getBrandingConfig:()=>$x});var we={};S(we,{checkBackups:()=>le,checkFeature:()=>na,checkFeatures:()=>Vo,checkSCIM:()=>Jo,isAICustomConfigsEnabled:()=>zo,isAppBuildersEnabled:()=>Rt,isAuditLogsEnabled:()=>aa,isBackupsEnabled:()=>Ko,isBrandingEnabled:()=>Ho,isBudibaseAIEnabled:()=>cn,isEnforceableSSO:()=>kd,isExpandedPublicApiEnabled:()=>Ye,isPWAEnabled:()=>kx,isSSOEnforced:()=>Fx,isSyncAutomationsEnabled:()=>Mx,isTriggerAutomationRunEnabled:()=>Gx,isUserGroupsEnabled:()=>Yo,isViewPermissionEnabled:()=>Qx,isViewReadonlyColumnsEnabled:()=>jx});var H=require("@budibase/types"),He=require("@budibase/backend-core");var Me={};S(Me,{cache:()=>xe,client:()=>ot,features:()=>Gn,getFreeLicense:()=>jo,getLicense:()=>Fo,getLicenseFromKey:()=>Qo,keys:()=>$o,offline:()=>ta,quotas:()=>kn});var xe={};S(xe,{getCachedLicense:()=>Md,invalidate:()=>Gd,refresh:()=>wt});var Qa=require("@budibase/backend-core"),Ir,rI=async()=>{Ir=await new Qa.redis.Client(Qa.redis.utils.Databases.LICENSES).init()},nI=async()=>{Ir&&await Ir.finish()};process.on("exit",async()=>{await nI()});var ja=async()=>(Ir||await rI(),Ir);var ot={};S(ot,{activateLicenseKey:()=>no,getLicense:()=>Qt,getLicenseFromKey:()=>ro,triggerQuota:()=>QI});var uu=C(require("node-fetch"));var pu=require("@budibase/backend-core"),Wa=class{constructor(t){this.apiCall=t=>async(r="",n={})=>{n.headers||(n.headers={}),n.headers["Content-Type"]||(n.headers={"Content-Type":"application/json",Accept:"application/json",...n.headers});let a=n.headers["Content-Type"]==="application/json";pu.logging.correlation.setHeader(n.headers);let o={method:t,body:a?JSON.stringify(n.body):n.body,headers:n.headers,credentials:"include"};return(0,uu.default)(`${this.host}${r}`,o)};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}},$a=Wa;var Bn=require("@budibase/types"),T=require("@budibase/backend-core");var De={};S(De,{bustCache:()=>Ha,getCurrentUsageValues:()=>Au,getQuotaUsage:()=>At,setAllUsage:()=>Ja,setAppUsageValue:()=>Ya,setUsage:()=>gu,setUsagePerApp:()=>mu,utils:()=>vr});var Z=require("@budibase/types"),ne=require("@budibase/backend-core");var vr={};S(vr,{generateBaseQuotaUsage:()=>xn,generateNewMonthlyQuotas:()=>wr,generateNewQuotaUsage:()=>Ka,getBreakdownName:()=>Pn,getCurrentMonthString:()=>rt,getQuotaDocId:()=>Sr,setCurrentMonth:()=>Tn,setQuotaReset:()=>Va});var V=require("@budibase/types"),yt=require("@budibase/backend-core"),Sr=()=>yt.context.isSelfHostUsingCloud()?`quota_usage_${yt.context.getTenantId()}`:yt.db.StaticDatabases.GLOBAL.docs.usageQuota,cu=()=>{let e=new Date;return new Date(e.getFullYear(),e.getMonth()+1,1).toISOString()},Va=e=>{e.quotaReset=cu()},rt=()=>{let e=new Date,t=e.getMonth()+1,r=e.getFullYear();return`${t}-${r}`},xn=()=>({usageQuota:{[V.StaticQuotaName.APPS]:0,[V.StaticQuotaName.ROWS]:0,[V.StaticQuotaName.PLUGINS]:0,[V.StaticQuotaName.USERS]:0,[V.StaticQuotaName.CREATORS]:0,[V.StaticQuotaName.USER_GROUPS]:0,[V.StaticQuotaName.AI_CUSTOM_CONFIGS]:0,triggers:{}},monthly:{[rt()]:wr()}}),Ka=()=>{let e={_id:Sr(),quotaReset:cu(),...xn(),apps:{}};return Tn(e),e},wr=()=>({[V.MonthlyQuotaName.QUERIES]:0,[V.MonthlyQuotaName.AUTOMATIONS]:0,[V.MonthlyQuotaName.BUDIBASE_AI_CREDITS]:0,triggers:{}}),Tn=e=>{let t=rt();e.monthly||(e.monthly={}),e.monthly[t]||(e.monthly[t]=wr()),e.monthly.current=e.monthly[t]},Pn=(e,t)=>{if(!(!t||!e))switch(e){case V.MonthlyQuotaName.AUTOMATIONS:return V.BreakdownQuotaName.AUTOMATIONS;case V.MonthlyQuotaName.QUERIES:return yt.db.isTableId(t)?V.BreakdownQuotaName.ROW_QUERIES:yt.db.isDatasourceId(t)?V.BreakdownQuotaName.DATASOURCE_QUERIES:void 0}};var lu=ne.Duration.fromSeconds(60).toMs(),{Writethrough:du}=ne.cache.writethrough;function oI(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 Cn=()=>ne.tenancy.isSelfHostUsingCloud()?new du(ne.tenancy.getSelfHostCloudDB(),lu):new du(ne.tenancy.getGlobalDB(),lu);async function Ha(e=0){let r=Cn(),n=Sr(),a=await r.tryGet(n);a&&a._rev&&await r.remove(n,a._rev).catch(async o=>{if(e<1)return await Ha(e+1);throw o})}var At=async()=>{let e=Cn(),t=await e.tryGet(Sr());if(!t){t=Ka();let{rev:r}=await e.put(t);t._rev=r}return Tn(t),Va(t),oI(t)},gu=async(e,t,r)=>Ja({name:t,type:r,values:{total:e}}),mu=async(e,t,r)=>{let n=Cn(),a=await At(),o=Object.values(e).reduce((s,c)=>s+c,0);for(let[s,c]of Object.entries(e))a=yu(a,t,r,{total:o,app:c},{appId:s});let i=await n.put(a);return a._rev=i.rev,a},sI=(e,t,r,n)=>{let a=Pn(t,r);if(!a||!n?.breakdown)return e;e.breakdown||(e.breakdown={}),e.breakdown[a]||(e.breakdown[a]={parent:t,values:{}});let o=e.breakdown[a];return o.values[r]=n.breakdown,e},Ya=(e,t,r,n={},a)=>{let o;try{o=ne.db.getProdAppID(n?.appId||ne.context.getAppId())}catch{}if(!o||!a.app||!Z.APP_QUOTA_NAMES.includes(t))return e;e.apps?.[o]||(e.apps={...e.apps,[o]:xn()});let i=e.apps[o];switch(r){case Z.QuotaUsageType.STATIC:i.usageQuota[t]=a.app;break;case Z.QuotaUsageType.MONTHLY:{let s=rt(),c=t,f=i.monthly[s];f||(i.monthly[s]=wr(),f=i.monthly[s]),f[c]=a.app,Z.BREAKDOWN_QUOTA_NAMES.includes(c)&&n?.id&&(f=sI(f,c,n.id,a));break}}return e},fu=(e,t,r,n)=>{if(!Z.APP_QUOTA_NAMES.includes(r))return{};let a;try{a=ne.db.getProdAppID(ne.context.getAppId())}catch{}if(!a||!e.apps||!e.apps[a])return{app:0};let o=e.apps[a];switch(t){case Z.QuotaUsageType.STATIC:if(o.usageQuota?.[r])return{app:o.usageQuota[r]};break;case Z.QuotaUsageType.MONTHLY:{let i=rt(),s=r;if(!o.monthly?.[i]?.[s])break;let c=o.monthly[i],f=c[s],m,g=Pn(s,n);return g&&n&&c.breakdown?.[g]&&(m=c.breakdown[g]?.values[n]),{app:f,breakdown:m||0}}}return{app:0}},iI=(e,t,r)=>{t.usageQuota.triggers||(t.usageQuota.triggers={}),r&&(t.usageQuota.triggers[e]=r)},uI=(e,t,r,n)=>{r.monthly[t].triggers||(r.monthly[t].triggers={}),n&&(r.monthly[t].triggers[e]=n)},yu=(e,t,r,n,a={})=>{if(r===Z.QuotaUsageType.STATIC)t=t,e.usageQuota[t]=n.total,iI(t,e,n.triggers);else if(r===Z.QuotaUsageType.MONTHLY){t=t;let o=rt();e.monthly[o][t]=n.total,uI(t,o,e,n.triggers)}else throw new Error(`Invalid usage type: ${r}`);return Ya(e,t,r,a,n)},Ja=async e=>{let t=Array.isArray(e)?e:[e],r=Cn(),n=await At();for(let o of t)n=yu(n,o.name,o.type,o.values,o.opts);let a=await r.put(n,0);return n._rev=a.rev,n},Au=async(e,t,r)=>{let n=await At(),a=0,o={};switch(e){case Z.QuotaUsageType.STATIC:if(n.usageQuota[t]){let i=t;a=n.usageQuota[i],o=fu(n,e,t,r)}break;case Z.QuotaUsageType.MONTHLY:{let i=rt(),s=t;n.monthly[i][s]&&(a=n.monthly[i][s],o=fu(n,e,t,r));break}default:throw new Error(`Invalid usage type: ${e}`)}return Z.APP_QUOTA_NAMES.includes(t)&&!(o.app||o.breakdown)&&(o.app=o.app||0,o.breakdown=o.breakdown||0),{total:a,app:o.app,breakdown:o.breakdown}};var be={};S(be,{destroy:()=>lI,get:()=>za,save:()=>cI});var nt=require("@budibase/backend-core"),pI=()=>({_id:nt.StaticDatabases.GLOBAL.docs.licenseInfo}),cI=async e=>{let t=await za();t={...t,...e};let n=await nt.tenancy.getGlobalDB().put(t);return t._rev=n.rev,t},za=async()=>{let e=nt.tenancy.getGlobalDB();try{return await e.get(nt.StaticDatabases.GLOBAL.docs.licenseInfo)}catch(t){if(t.status===404)return pI();throw t}},lI=async()=>{let e=nt.tenancy.getGlobalDB(),t=await za();t&&t._rev&&await e.remove(nt.StaticDatabases.GLOBAL.docs.licenseInfo,t._rev)};var D={};S(D,{bulkSave:()=>vI,destroy:()=>EI,fetch:()=>bI,generateUserGroupID:()=>AI,get:()=>II,getBulk:()=>SI,getByName:()=>Xa,getGroupUsers:()=>Ln,getGroupUsersParams:()=>wu,getUserGroupsParams:()=>Su,save:()=>wI});var L=require("@budibase/backend-core");var _e=require("@budibase/types"),Gt=require("@budibase/backend-core");async function hu(){let e=Gt.sql.designDoc.base("type");e.sql.tables={[_e.AUDIT_LOG_TYPE]:{fields:{appId:_e.SQLiteType.TEXT,event:_e.SQLiteType.TEXT,userId:_e.SQLiteType.TEXT,timestamp:_e.SQLiteType.TEXT,metadata:_e.SQLiteType.TEXT,name:_e.SQLiteType.TEXT,type:_e.SQLiteType.TEXT,fallback:_e.SQLiteType.TEXT}}};let t=Gt.context.getAuditLogsDB(),r;try{r=await t.get(Gt.SQLITE_DESIGN_DOC_ID),r={...r,...e}}catch(n){if(n.status===404)r=e;else throw n}await t.put(r)}var On=require("@budibase/backend-core"),{ViewName:dI,SEPARATOR:fI,DocumentType:gI,createView:mI}=On.db,yI=gI.USER+fI;async function bu(){let e=On.tenancy.getGlobalDB(),t=`function(doc) {
4
+ if (doc._id.startsWith("${yI}") && 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 lI(e,t,uI.USER_BY_GROUP)}var hu=`${L.DocumentType.GROUP}${L.SEPARATOR}`;function bu(e,t={}){e||(e="");let r=e?.startsWith(L.DocumentType.GROUP)?"":hu;return{...t,startkey:`${r}${e}`,endkey:`${r}${e}${L.UNICODE_MAX}`}}function Iu(e,t={}){e||(e="");let{emailSearch:r,bookmark:n,...a}=t;return r?{...a,startkey:`e_${e}${n||r}`,endkey:`e_${e}${r}${L.UNICODE_MAX}`}:{...t,startkey:`g_${e}`,endkey:`g_${e}${L.UNICODE_MAX}`,startkey_docid:n}}function fI(){return`${hu}${L.utils.newid()}`}async function On(e,t){let r=L.tenancy.getGlobalDB();return(await L.db.queryView(L.db.ViewName.USER_BY_GROUP,Iu(e,t),r,Au,{arrayResponse:!0})).map(a=>({_id:a.userId,email:a.email}))||[]}async function Er(e){return e.users=await On(e._id),e}async function gI(e){let r=(await Er(e)).users?.map(o=>o._id),n=await L.users.bulkGetGlobalUsersById(r),a=[];for(let o of n){if(!o.userGroups)continue;let i=o.userGroups.length;o.userGroups=o.userGroups.filter(s=>s!==e._id),o.userGroups.length!==i&&a.push(o)}a.length&&await L.users.bulkUpdateGlobalUsers(a)}async function Su(){return(await L.tenancy.getGlobalDB().allDocs(bu(null,{include_docs:!0}))).rows.map(t=>t.doc)}async function mI(){let e=await Su(),t=[];for(let r of e)t.push(Er(r));return await Promise.all(t)}async function yI(e){let r=await L.tenancy.getGlobalDB().get(e);return await Er(r)}async function AI(e,t={enriched:!0}){let n=await L.tenancy.getGlobalDB().getMultiple(e,{allowMissing:!0});if(t?.enriched){let a=[];for(let o of n)a.push(Er(o));return await Promise.all(a)}else return n}async function hI(e){return await L.tenancy.getGlobalDB().put(e)}async function bI(e){return await L.tenancy.getGlobalDB().bulkDocs(e)}async function II(e,t){let r=L.tenancy.getGlobalDB(),n=await r.get(e),a=await r.remove(e,t);return await gI(n),a}async function za(e){let t=e.toLowerCase(),n=(await Su()).find(a=>a.name.toLowerCase()===t);if(n)return await Er(n)}var Ie={};S(Ie,{deleteAppBackupMetadata:()=>qI,fetchAppBackups:()=>CI,generateAppBackupID:()=>Du,getAppBackupMetadata:()=>UI,oldestBackupDate:()=>qu,storeAppBackupMetadata:()=>OI,updateAppBackupMetadata:()=>LI});var N=require("@budibase/backend-core"),Lu=require("@budibase/types");function Rr(e,t){let r=e.rows.map(a=>a.doc?a.doc:a);if(!t?.paginate)return{data:r,hasNextPage:!1};let n=r.length>t?.pageSize;return{data:r.slice(0,t?.pageSize),hasNextPage:n,nextPage:n?e.rows[t?.pageSize]?.key:void 0}}var kt=require("@budibase/backend-core"),{ViewName:vu,AutomationViewMode:Xa,SEPARATOR:Be,DocumentType:Eu,createView:Ru}=kt.db,SI=Eu.AUTOMATION_LOG+Be,wu=Eu.APP_BACKUP+Be;async function _u(){let e=kt.context.getProdAppDB(),t=`function(doc) {
11
- if (doc._id.startsWith("${SI}")) {
10
+ }`;await mI(e,t,dI.USER_BY_GROUP)}var Iu=`${L.DocumentType.GROUP}${L.SEPARATOR}`;function Su(e,t={}){e||(e="");let r=e?.startsWith(L.DocumentType.GROUP)?"":Iu;return{...t,startkey:`${r}${e}`,endkey:`${r}${e}${L.UNICODE_MAX}`}}function wu(e,t={}){e||(e="");let{emailSearch:r,bookmark:n,...a}=t;return r?{...a,startkey:`e_${e}${n||r}`,endkey:`e_${e}${r}${L.UNICODE_MAX}`}:{...t,startkey:`g_${e}`,endkey:`g_${e}${L.UNICODE_MAX}`,startkey_docid:n}}function AI(){return`${Iu}${L.utils.newid()}`}async function Ln(e,t){let r=L.tenancy.getGlobalDB();return(await L.db.queryView(L.db.ViewName.USER_BY_GROUP,wu(e,t),r,bu,{arrayResponse:!0})).map(a=>({_id:a.userId,email:a.email}))||[]}async function Er(e){return e.users=await Ln(e._id),e}async function hI(e){let r=(await Er(e)).users?.map(o=>o._id),n=await L.users.bulkGetGlobalUsersById(r),a=[];for(let o of n){if(!o.userGroups)continue;let i=o.userGroups.length;o.userGroups=o.userGroups.filter(s=>s!==e._id),o.userGroups.length!==i&&a.push(o)}a.length&&await L.users.bulkUpdateGlobalUsers(a)}async function vu(){return(await L.tenancy.getGlobalDB().allDocs(Su(null,{include_docs:!0}))).rows.map(t=>t.doc)}async function bI(){let e=await vu(),t=[];for(let r of e)t.push(Er(r));return await Promise.all(t)}async function II(e){let r=await L.tenancy.getGlobalDB().get(e);return await Er(r)}async function SI(e,t={enriched:!0}){let n=await L.tenancy.getGlobalDB().getMultiple(e,{allowMissing:!0});if(t?.enriched){let a=[];for(let o of n)a.push(Er(o));return await Promise.all(a)}else return n}async function wI(e){return await L.tenancy.getGlobalDB().put(e)}async function vI(e){return await L.tenancy.getGlobalDB().bulkDocs(e)}async function EI(e,t){let r=L.tenancy.getGlobalDB(),n=await r.get(e),a=await r.remove(e,t);return await hI(n),a}async function Xa(e){let t=e.toLowerCase(),n=(await vu()).find(a=>a.name.toLowerCase()===t);if(n)return await Er(n)}var Ie={};S(Ie,{deleteAppBackupMetadata:()=>NI,fetchAppBackups:()=>UI,generateAppBackupID:()=>Nu,getAppBackupMetadata:()=>MI,oldestBackupDate:()=>Du,storeAppBackupMetadata:()=>DI,updateAppBackupMetadata:()=>BI});var N=require("@budibase/backend-core"),Uu=require("@budibase/types");function Rr(e,t){let r=e.rows.map(a=>a.doc?a.doc:a);if(!t?.paginate)return{data:r,hasNextPage:!1};let n=r.length>t?.pageSize;return{data:r.slice(0,t?.pageSize),hasNextPage:n,nextPage:n?e.rows[t?.pageSize]?.key:void 0}}var kt=require("@budibase/backend-core"),{ViewName:Ru,AutomationViewMode:Za,SEPARATOR:Be,DocumentType:_u,createView:xu}=kt.db,RI=_u.AUTOMATION_LOG+Be,Eu=_u.APP_BACKUP+Be;async function Tu(){let e=kt.context.getProdAppDB(),t=`function(doc) {
11
+ if (doc._id.startsWith("${RI}")) {
12
12
  let autoId = doc.automationId + "${Be}"
13
13
  let status = doc.status + "${Be}"
14
- let autoKey = "${Xa.AUTOMATION}${Be}" + autoId + doc.createdAt
15
- let statusKey = "${Xa.STATUS}${Be}" + status + doc.createdAt
16
- let allKey = "${Xa.ALL}${Be}" + status + autoId + doc.createdAt
14
+ let autoKey = "${Za.AUTOMATION}${Be}" + autoId + doc.createdAt
15
+ let statusKey = "${Za.STATUS}${Be}" + status + doc.createdAt
16
+ let allKey = "${Za.ALL}${Be}" + status + autoId + doc.createdAt
17
17
  emit(statusKey)
18
18
  emit(autoKey)
19
19
  emit(allKey)
20
20
  }
21
- }`;await Ru(e,t,vu.AUTOMATION_LOGS)}async function xu(){let e=kt.tenancy.getGlobalDB(),t=`function(doc) {
22
- if (doc._id.startsWith("${wu}") && doc.type && doc.trigger) {
21
+ }`;await xu(e,t,Ru.AUTOMATION_LOGS)}async function Pu(){let e=kt.tenancy.getGlobalDB(),t=`function(doc) {
22
+ if (doc._id.startsWith("${Eu}") && doc.type && doc.trigger) {
23
23
  let full = doc.appId + "${Be}"
24
24
  full += doc.trigger.toLowerCase() + "${Be}"
25
25
  full += doc.type.toLowerCase() + "${Be}"
26
- emit("${wu}" + full + doc.timestamp)
26
+ emit("${Eu}" + full + doc.timestamp)
27
27
  }
28
- }`;await Ru(e,t,vu.APP_BACKUP_BY_TRIGGER)}var Ou=require("@budibase/types");var Gr={};S(Gr,{GENERIC_PAGE_SIZE:()=>Ne,auditLogs:()=>Ft,licenses:()=>pe,quotas:()=>Ke,versions:()=>Mr});var pe={};S(pe,{CLOUD_FREE_LICENSE:()=>vI,SELF_FREE_LICENSE:()=>Za,UNLIMITED:()=>k,UNLIMITED_LICENSE:()=>EI});var at=require("@budibase/types");var Ke={};S(Ke,{UNLIMITED:()=>wI,appBackupRetentionDays:()=>Br,apps:()=>xr,automationLogRetentionDays:()=>Dr,automations:()=>qr,budibaseAICredits:()=>Ur,creators:()=>Pr,customAIConfigurations:()=>Nr,plugins:()=>Or,queries:()=>Lr,rows:()=>_r,userGroups:()=>Cr,users:()=>Tr});var ee=require("@budibase/types"),wI=-1,_r=e=>({[ee.StaticQuotaName.ROWS]:{name:"Rows",value:e,triggers:[90,100]}}),xr=e=>({[ee.StaticQuotaName.APPS]:{name:"Apps",value:e,triggers:[100]}}),Tr=e=>({[ee.StaticQuotaName.USERS]:{name:"Users",value:e,triggers:[80,100]}}),Pr=e=>({[ee.StaticQuotaName.CREATORS]:{name:"Creators",value:e,triggers:[]}}),Cr=e=>({[ee.StaticQuotaName.USER_GROUPS]:{name:"User Groups",value:e,triggers:[80,100]}}),Or=e=>({[ee.StaticQuotaName.PLUGINS]:{name:"Plugins",value:e,triggers:[90,100]}}),Lr=e=>({[ee.MonthlyQuotaName.QUERIES]:{name:"Queries",value:e,triggers:[]}}),qr=e=>({[ee.MonthlyQuotaName.AUTOMATIONS]:{name:"Automations",value:e,triggers:[80,90,100]}}),Ur=e=>({[ee.MonthlyQuotaName.BUDIBASE_AI_CREDITS]:{name:"Budibase AI Credits",value:e,triggers:[80,90,100]}}),Dr=e=>({[ee.ConstantQuotaName.AUTOMATION_LOG_RETENTION_DAYS]:{name:"Automation Logs",value:e,triggers:[]}}),Br=e=>({[ee.ConstantQuotaName.APP_BACKUPS_RETENTION_DAYS]:{name:"App Backups",value:e,triggers:[]}}),Nr=e=>({[ee.StaticQuotaName.AI_CUSTOM_CONFIGS]:{name:"Custom AI Configuration",value:e,triggers:[]}});var k=-1,vI={features:[],quotas:{usage:{monthly:{...Lr(k),...qr(200),...Ur(0)},static:{...xr(k),..._r(2e3),...Tr(5),...Pr(5),...Cr(0),...Or(10),...Nr(0)}},constant:{...Dr(1),...Br(0)}},plan:{type:at.PlanType.FREE,usesInvoicing:!1,model:at.PlanModel.PER_USER}},Za={features:[],quotas:{usage:{monthly:{...Lr(k),...qr(k),...Ur(0)},static:{..._r(k),...xr(k),...Tr(20),...Pr(k),...Cr(0),...Or(10),...Nr(0)}},constant:{...Dr(1),...Br(0)}},plan:{type:at.PlanType.FREE,usesInvoicing:!1,model:at.PlanModel.PER_USER}},EI={features:[],quotas:{usage:{monthly:{...Lr(k),...qr(k),...Ur(k)},static:{...xr(k),..._r(k),...Tr(k),...Pr(k),...Cr(k),...Or(k),...Nr(k)}},constant:{...Dr(k),...Br(k)}},plan:{type:at.PlanType.FREE,usesInvoicing:!1,model:at.PlanModel.PER_USER}};var Mr={};S(Mr,{getLicenseVersion:()=>RI,getProVersion:()=>Pu});var ht=require("@budibase/backend-core"),Ln=C(require("fs")),Tu=C(require("path")),RI=()=>{if(ht.env.isDev()){let e="dev-version.txt",t=Tu.default.join(ht.objectStore.budibaseTempDir(),e);if(Ln.default.existsSync(t))return Ln.default.readFileSync(t,"utf8");{let r=ht.utils.newid();return Ln.default.writeFileSync(t,r),r}}else return Pu()},Pu=()=>{let e=ht.env.VERSION;if(!e)throw new Error("No budibase pro version was specified");return e};var Ft={};S(Ft,{searchTable:()=>_I});var bt=require("@budibase/types"),Cu=require("@budibase/backend-core");function _I(){return{type:"table",sourceType:bt.TableSourceType.INTERNAL,name:bt.AUDIT_LOG_TYPE,sourceId:Cu.SQS_DATASOURCE_INTERNAL,primary:["_id"],schema:{metadata:{name:"metadata",type:bt.FieldType.JSON},fallback:{name:"fallback",type:bt.FieldType.JSON}}}}var Ne=9;var xI=new Date(864e13).toISOString(),TI=1e3*60*60*24;async function qn(e){let r=(await xe.getCachedLicense()).quotas?.[Ou.QuotaType.CONSTANT]?.[e]?.value||0;return r===pe.UNLIMITED?new Date(xI).toISOString():new Date(new Date().getTime()-TI*r).toISOString()}async function qu(){return qn(Lu.ConstantQuotaName.APP_BACKUPS_RETENTION_DAYS)}var eo=`${N.db.DocumentType.APP_BACKUP}${N.db.SEPARATOR}`;async function PI(e,t,r={}){let n=await qu(),a=N.db.getProdAppID(e),o=a,i=a;if(t.trigger&&t.type){let s=`${N.db.SEPARATOR}${t.trigger}`;s+=`${N.db.SEPARATOR}${t.type}`,o+=s,i+=s}return(!t.startDate||t.startDate<n)&&(t.startDate=n),t.startDate&&(i+=`${N.db.SEPARATOR}${t.startDate}`),t.endDate&&(o+=`${N.db.SEPARATOR}${t.endDate}`),{...r,descending:!0,startkey:`${eo}${o}${N.db.UNICODE_MAX}`,endkey:`${eo}${i}`}}async function Uu(e,t){try{let r=N.db.getQueryIndex(N.db.ViewName.APP_BACKUP_BY_TRIGGER);return await e.query(r,t)}catch(r){if(r!=null&&r.error==="not_found")return await xu(),Uu(e,t);throw r}}function Du(e,t){return`${eo}${e}${N.db.SEPARATOR}${t}`}async function CI(e,t={}){let r=N.tenancy.getGlobalDB(),n,a=t.limit||9,o=await PI(e,t,{include_docs:!0,limit:a+1});t.page&&(o.startkey=t.page),!t.trigger||!t.type?n=await r.allDocs(o):n=await Uu(r,o);let i=Rr(n,{paginate:t.paginate,pageSize:a}),s=[...new Set(i.data.filter(f=>f.createdBy).map(f=>f.createdBy))],c=await N.users.bulkGetGlobalUsersById(s,{cleanup:!0});for(let f of c)for(let m of i.data)f?._id===m.createdBy&&(m.createdBy=f);return i}async function OI(e,t={}){let r=N.tenancy.getGlobalDB(),n=N.db.getProdAppID(e.appId),a=Du(n,e.timestamp),o={...e,_id:a,appId:n,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=N.db.getGlobalIDFromUserMetadataID(e.createdBy)),await r.put(o)}async function LI(e,t){let r=N.tenancy.getGlobalDB(),n=await r.get(e);return n.name=t,await r.put(n)}async function qI(e){let t=N.tenancy.getGlobalDB(),r=await t.get(e);await t.remove(r._id,r._rev)}async function UI(e){return await N.tenancy.getGlobalDB().get(e)}var It={};S(It,{get:()=>BI,getCacheEnvVarID:()=>Mu,getEnvVarID:()=>Un,update:()=>NI});var Te=require("@budibase/backend-core"),Nu=C(require("lru-cache")),DI=1e3,Bu=new Nu.default({max:DI});function Un(){return Te.StaticDatabases.GLOBAL.docs.environmentVariables}function Mu(e){return`${Te.tenancy.getTenantId()}/${Un()}/${e||""}`}async function BI(){let e=Un(),t=Te.tenancy.getGlobalDB(),r,n=!1;try{r=await t.get(e)}catch(s){if(s.status==404)n=!0;else throw s}let a=Mu(r?._rev),o=Bu.get(a);if(o)return o;let i;return!n&&r?i={...r,variables:JSON.parse(Te.encryption.decrypt(r.variables,Te.encryption.SecretOption.ENCRYPTION))}:i={_id:e,variables:{}},Bu.set(a,i),i}async function NI(e){let t=Un();return await Te.tenancy.getGlobalDB().put({_id:e._id||t,_rev:e._rev||void 0,variables:Te.encryption.encrypt(JSON.stringify(e.variables),Te.encryption.SecretOption.ENCRYPTION)})}var Bn=new Wa(T.env.ACCOUNT_PORTAL_URL),Nn=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{}},Gu=async e=>{let t,r;if(T.env.SELF_HOSTED){if(t=await be.get(),!t.licenseKey)return;r={[T.constants.Header.LICENSE_KEY]:t.licenseKey}}else{let n=T.tenancy.getTenantId();r={[T.constants.Header.API_KEY]:T.env.ACCOUNT_PORTAL_API_KEY,[T.constants.Header.TENANT_ID]:n}}return e(r)},ku=async()=>Gu(async e=>{let t=await De.getQuotaUsage();if(t.usageQuota.users==null){let s=await T.users.getUserCount();console.info(`Syncing user count quota to ${s}`),t.usageQuota.users=s,await De.setUsage(s,Dn.StaticQuotaName.USERS,Dn.QuotaUsageType.STATIC)}let r=await T.installation.getInstallFromDB(),n=T.tenancy.getTenantId(),a=await T.events.identification.getUniqueTenantId(n),o=Mr.getProVersion(),i={quotaUsage:t,tenantId:n,install:{id:r.installId,tenantId:a,version:o}};try{let s=await Bn.post("/api/license",{headers:{...e},body:i});if(s.status===404||s.status===403)return;if(s.status!==200){let c=await Nn(s);throw new T.HTTPError(`Error getting license: ${c}`,s.status)}return s.json()}catch(s){if(T.env.DISABLE_ACCOUNT_PORTAL)return;throw s}});T.env.isJest()&&(ku=jest.fn());var Qt=ku;async function to(e){let t;if(!T.env.INTERNAL_API_KEY)throw new Error("getLicenseFromKey requires INTERNAL_API_KEY to be set");try{t=await Bn.get(`/api/license/${e}`,{headers:{[T.constants.Header.API_KEY]:T.env.INTERNAL_API_KEY}})}catch(r){if(T.env.DISABLE_ACCOUNT_PORTAL)return;throw r}if(!(t.status===404||t.status===403)){if(t.status!==200){let r=await Nn(t);throw new T.HTTPError(`Error getting license: ${r}`,t.status)}return t.json()}}var MI=e=>Gu(async t=>{let r=await Bn.post("/api/license/usage/triggered",{headers:{...t},body:e});if(r.status!==200){let n=await Nn(r);T.logging.logAlert(`Error triggering quota usage: ${n}`)}}),ro=async e=>{let t=await T.installation.getInstall(),r={installVersion:t.version,installId:t.installId},n=await Bn.post("/api/license/activate",{headers:{[T.constants.Header.LICENSE_KEY]:e},body:r});if(n.status===403)throw new T.HTTPError("Invalid license key",400);if(n.status===409)throw new T.HTTPError("License key has already been activated",409);if(n.status!==200){let a=await Nn(n);throw new T.HTTPError(`Error activating license key: ${a}`,n.status)}return n.json()};var Go=require("@budibase/backend-core");var ea={};S(ea,{activateOfflineLicenseToken:()=>wx,deleteOfflineLicenseToken:()=>vx,dev:()=>pn,enrichLicense:()=>Od,getIdentifier:()=>Do,getIdentifierBase64:()=>Ex,getIdentifierFromBase64:()=>Rx,getOfflineLicense:()=>Bo,getOfflineLicenseToken:()=>Td,signing:()=>Qr,verifyExpiry:()=>Pd,verifyInstallation:()=>Cd});var Qr={};S(Qr,{sign:()=>kI,verifyLicenseToken:()=>Fr});var no=C(require("jsonwebtoken")),GI=`-----BEGIN PUBLIC KEY-----
28
+ }`;await xu(e,t,Ru.APP_BACKUP_BY_TRIGGER)}var qu=require("@budibase/types");var Gr={};S(Gr,{GENERIC_PAGE_SIZE:()=>Ne,auditLogs:()=>Ft,licenses:()=>pe,quotas:()=>Ke,versions:()=>Mr});var pe={};S(pe,{CLOUD_FREE_LICENSE:()=>xI,SELF_FREE_LICENSE:()=>eo,UNLIMITED:()=>k,UNLIMITED_LICENSE:()=>TI});var at=require("@budibase/types");var Ke={};S(Ke,{UNLIMITED:()=>_I,appBackupRetentionDays:()=>Br,apps:()=>xr,automationLogRetentionDays:()=>Dr,automations:()=>qr,budibaseAICredits:()=>Ur,creators:()=>Pr,customAIConfigurations:()=>Nr,plugins:()=>Or,queries:()=>Lr,rows:()=>_r,userGroups:()=>Cr,users:()=>Tr});var ee=require("@budibase/types"),_I=-1,_r=e=>({[ee.StaticQuotaName.ROWS]:{name:"Rows",value:e,triggers:[90,100]}}),xr=e=>({[ee.StaticQuotaName.APPS]:{name:"Apps",value:e,triggers:[100]}}),Tr=e=>({[ee.StaticQuotaName.USERS]:{name:"Users",value:e,triggers:[80,100]}}),Pr=e=>({[ee.StaticQuotaName.CREATORS]:{name:"Creators",value:e,triggers:[]}}),Cr=e=>({[ee.StaticQuotaName.USER_GROUPS]:{name:"User Groups",value:e,triggers:[80,100]}}),Or=e=>({[ee.StaticQuotaName.PLUGINS]:{name:"Plugins",value:e,triggers:[90,100]}}),Lr=e=>({[ee.MonthlyQuotaName.QUERIES]:{name:"Queries",value:e,triggers:[]}}),qr=e=>({[ee.MonthlyQuotaName.AUTOMATIONS]:{name:"Automations",value:e,triggers:[80,90,100]}}),Ur=e=>({[ee.MonthlyQuotaName.BUDIBASE_AI_CREDITS]:{name:"Budibase AI Credits",value:e,triggers:[80,90,100]}}),Dr=e=>({[ee.ConstantQuotaName.AUTOMATION_LOG_RETENTION_DAYS]:{name:"Automation Logs",value:e,triggers:[]}}),Br=e=>({[ee.ConstantQuotaName.APP_BACKUPS_RETENTION_DAYS]:{name:"App Backups",value:e,triggers:[]}}),Nr=e=>({[ee.StaticQuotaName.AI_CUSTOM_CONFIGS]:{name:"Custom AI Configuration",value:e,triggers:[]}});var k=-1,xI={features:[],quotas:{usage:{monthly:{...Lr(k),...qr(200),...Ur(0)},static:{...xr(k),..._r(2e3),...Tr(5),...Pr(5),...Cr(0),...Or(10),...Nr(0)}},constant:{...Dr(1),...Br(0)}},plan:{type:at.PlanType.FREE,usesInvoicing:!1,model:at.PlanModel.PER_USER}},eo={features:[],quotas:{usage:{monthly:{...Lr(k),...qr(k),...Ur(0)},static:{..._r(k),...xr(k),...Tr(20),...Pr(k),...Cr(0),...Or(10),...Nr(0)}},constant:{...Dr(1),...Br(0)}},plan:{type:at.PlanType.FREE,usesInvoicing:!1,model:at.PlanModel.PER_USER}},TI={features:[],quotas:{usage:{monthly:{...Lr(k),...qr(k),...Ur(k)},static:{...xr(k),..._r(k),...Tr(k),...Pr(k),...Cr(k),...Or(k),...Nr(k)}},constant:{...Dr(k),...Br(k)}},plan:{type:at.PlanType.FREE,usesInvoicing:!1,model:at.PlanModel.PER_USER}};var Mr={};S(Mr,{getLicenseVersion:()=>PI,getProVersion:()=>Ou});var ht=require("@budibase/backend-core"),qn=C(require("fs")),Cu=C(require("path")),PI=()=>{if(ht.env.isDev()){let e="dev-version.txt",t=Cu.default.join(ht.objectStore.budibaseTempDir(),e);if(qn.default.existsSync(t))return qn.default.readFileSync(t,"utf8");{let r=ht.utils.newid();return qn.default.writeFileSync(t,r),r}}else return Ou()},Ou=()=>{let e=ht.env.VERSION;if(!e)throw new Error("No budibase pro version was specified");return e};var Ft={};S(Ft,{searchTable:()=>CI});var bt=require("@budibase/types"),Lu=require("@budibase/backend-core");function CI(){return{type:"table",sourceType:bt.TableSourceType.INTERNAL,name:bt.AUDIT_LOG_TYPE,sourceId:Lu.SQS_DATASOURCE_INTERNAL,primary:["_id"],schema:{metadata:{name:"metadata",type:bt.FieldType.JSON},fallback:{name:"fallback",type:bt.FieldType.JSON}}}}var Ne=9;var OI=new Date(864e13).toISOString(),LI=1e3*60*60*24;async function Un(e){let r=(await xe.getCachedLicense()).quotas?.[qu.QuotaType.CONSTANT]?.[e]?.value||0;return r===pe.UNLIMITED?new Date(OI).toISOString():new Date(new Date().getTime()-LI*r).toISOString()}async function Du(){return Un(Uu.ConstantQuotaName.APP_BACKUPS_RETENTION_DAYS)}var to=`${N.db.DocumentType.APP_BACKUP}${N.db.SEPARATOR}`;async function qI(e,t,r={}){let n=await Du(),a=N.db.getProdAppID(e),o=a,i=a;if(t.trigger&&t.type){let s=`${N.db.SEPARATOR}${t.trigger}`;s+=`${N.db.SEPARATOR}${t.type}`,o+=s,i+=s}return(!t.startDate||t.startDate<n)&&(t.startDate=n),t.startDate&&(i+=`${N.db.SEPARATOR}${t.startDate}`),t.endDate&&(o+=`${N.db.SEPARATOR}${t.endDate}`),{...r,descending:!0,startkey:`${to}${o}${N.db.UNICODE_MAX}`,endkey:`${to}${i}`}}async function Bu(e,t){try{let r=N.db.getQueryIndex(N.db.ViewName.APP_BACKUP_BY_TRIGGER);return await e.query(r,t)}catch(r){if(r!=null&&r.error==="not_found")return await Pu(),Bu(e,t);throw r}}function Nu(e,t){return`${to}${e}${N.db.SEPARATOR}${t}`}async function UI(e,t={}){let r=N.tenancy.getGlobalDB(),n,a=t.limit||9,o=await qI(e,t,{include_docs:!0,limit:a+1});t.page&&(o.startkey=t.page),!t.trigger||!t.type?n=await r.allDocs(o):n=await Bu(r,o);let i=Rr(n,{paginate:t.paginate,pageSize:a}),s=[...new Set(i.data.filter(f=>f.createdBy).map(f=>f.createdBy))],c=await N.users.bulkGetGlobalUsersById(s,{cleanup:!0});for(let f of c)for(let m of i.data)f?._id===m.createdBy&&(m.createdBy=f);return i}async function DI(e,t={}){let r=N.tenancy.getGlobalDB(),n=N.db.getProdAppID(e.appId),a=Nu(n,e.timestamp),o={...e,_id:a,appId:n,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=N.db.getGlobalIDFromUserMetadataID(e.createdBy)),await r.put(o)}async function BI(e,t){let r=N.tenancy.getGlobalDB(),n=await r.get(e);return n.name=t,await r.put(n)}async function NI(e){let t=N.tenancy.getGlobalDB(),r=await t.get(e);await t.remove(r._id,r._rev)}async function MI(e){return await N.tenancy.getGlobalDB().get(e)}var It={};S(It,{get:()=>kI,getCacheEnvVarID:()=>ku,getEnvVarID:()=>Dn,update:()=>FI});var Te=require("@budibase/backend-core"),Gu=C(require("lru-cache")),GI=1e3,Mu=new Gu.default({max:GI});function Dn(){return Te.StaticDatabases.GLOBAL.docs.environmentVariables}function ku(e){return`${Te.tenancy.getTenantId()}/${Dn()}/${e||""}`}async function kI(){let e=Dn(),t=Te.tenancy.getGlobalDB(),r,n=!1;try{r=await t.get(e)}catch(s){if(s.status==404)n=!0;else throw s}let a=ku(r?._rev),o=Mu.get(a);if(o)return o;let i;return!n&&r?i={...r,variables:JSON.parse(Te.encryption.decrypt(r.variables,Te.encryption.SecretOption.ENCRYPTION))}:i={_id:e,variables:{}},Mu.set(a,i),i}async function FI(e){let t=Dn();return await Te.tenancy.getGlobalDB().put({_id:e._id||t,_rev:e._rev||void 0,variables:Te.encryption.encrypt(JSON.stringify(e.variables),Te.encryption.SecretOption.ENCRYPTION)})}var Nn=new $a(T.env.ACCOUNT_PORTAL_URL),Mn=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{}},Fu=async e=>{let t,r;if(T.env.SELF_HOSTED){if(t=await be.get(),!t.licenseKey)return;r={[T.constants.Header.LICENSE_KEY]:t.licenseKey}}else{let n=T.tenancy.getTenantId();r={[T.constants.Header.API_KEY]:T.env.ACCOUNT_PORTAL_API_KEY,[T.constants.Header.TENANT_ID]:n}}return e(r)},Qu=async()=>Fu(async e=>{let t=await De.getQuotaUsage();if(t.usageQuota.users==null){let s=await T.users.getUserCount();console.info(`Syncing user count quota to ${s}`),t.usageQuota.users=s,await De.setUsage(s,Bn.StaticQuotaName.USERS,Bn.QuotaUsageType.STATIC)}let r=await T.installation.getInstallFromDB(),n=T.tenancy.getTenantId(),a=await T.events.identification.getUniqueTenantId(n),o=Mr.getProVersion(),i={quotaUsage:t,tenantId:n,install:{id:r.installId,tenantId:a,version:o}};try{let s=await Nn.post("/api/license",{headers:{...e},body:i});if(s.status===404||s.status===403)return;if(s.status!==200){let c=await Mn(s);throw new T.HTTPError(`Error getting license: ${c}`,s.status)}return s.json()}catch(s){if(T.env.DISABLE_ACCOUNT_PORTAL)return;throw s}});T.env.isJest()&&(Qu=jest.fn());var Qt=Qu;async function ro(e){let t;if(!T.env.INTERNAL_API_KEY)throw new Error("getLicenseFromKey requires INTERNAL_API_KEY to be set");try{t=await Nn.get(`/api/license/${e}`,{headers:{[T.constants.Header.API_KEY]:T.env.INTERNAL_API_KEY}})}catch(r){if(T.env.DISABLE_ACCOUNT_PORTAL)return;throw r}if(!(t.status===404||t.status===403)){if(t.status!==200){let r=await Mn(t);throw new T.HTTPError(`Error getting license: ${r}`,t.status)}return t.json()}}var QI=e=>Fu(async t=>{let r=await Nn.post("/api/license/usage/triggered",{headers:{...t},body:e});if(r.status!==200){let n=await Mn(r);T.logging.logAlert(`Error triggering quota usage: ${n}`)}}),no=async e=>{let t=await T.installation.getInstall(),r={installVersion:t.version,installId:t.installId},n=await Nn.post("/api/license/activate",{headers:{[T.constants.Header.LICENSE_KEY]:e},body:r});if(n.status===403)throw new T.HTTPError("Invalid license key",400);if(n.status===409)throw new T.HTTPError("License key has already been activated",409);if(n.status!==200){let a=await Mn(n);throw new T.HTTPError(`Error activating license key: ${a}`,n.status)}return n.json()};var ko=require("@budibase/backend-core");var ta={};S(ta,{activateOfflineLicenseToken:()=>_x,deleteOfflineLicenseToken:()=>xx,dev:()=>pn,enrichLicense:()=>qd,getIdentifier:()=>Bo,getIdentifierBase64:()=>Tx,getIdentifierFromBase64:()=>Px,getOfflineLicense:()=>No,getOfflineLicenseToken:()=>Cd,signing:()=>Qr,verifyExpiry:()=>Od,verifyInstallation:()=>Ld});var Qr={};S(Qr,{sign:()=>WI,verifyLicenseToken:()=>Fr});var ao=C(require("jsonwebtoken")),jI=`-----BEGIN PUBLIC KEY-----
29
29
  MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvz3jePLCFBXZ19c8Dpkv
30
30
  XtSgOhKFOcvQdo/LV0KJRUzQWDPWuO4ILtBtnqhjtIzZH4CH0qCYBet5L6Qr4CM1
31
31
  l2HXiAD1Q2rlHNW9wDaYyKb1F5f+v4RyqCAyzlkwRdksmkLeECTboojNnmRCrE3C
@@ -34,11 +34,11 @@ l2HXiAD1Q2rlHNW9wDaYyKb1F5f+v4RyqCAyzlkwRdksmkLeECTboojNnmRCrE3C
34
34
  d/o3ZWE1TTj1zYwlCLN5qRKr3hU8nC3xEYNEbkB9SfTRaOq9Q7P8WmfLkoCPm3pR
35
35
  mwIDAQAB
36
36
  -----END PUBLIC KEY-----
37
- `;function Fr(e){return no.default.verify(e,GI,{algorithms:["RS256"]})}function kI(e,t){return no.default.sign(t,e,{encoding:"utf-8",algorithm:"RS256"})}var Mn={};S(Mn,{getFeatures:()=>ao});var p=require("@budibase/types");var FI={[p.PlanType.FREE]:[...pe.SELF_FREE_LICENSE.features],[p.PlanType.PREMIUM]:void 0,[p.PlanType.PREMIUM_PLUS]:[p.Feature.APP_BACKUPS,p.Feature.BRANDING,p.Feature.SYNC_AUTOMATIONS,p.Feature.APP_BUILDERS,p.Feature.VIEW_PERMISSIONS,p.Feature.TRIGGER_AUTOMATION_RUN,p.Feature.VIEW_READONLY_COLUMNS,p.Feature.AI_CUSTOM_CONFIGS,p.Feature.PDF,p.Feature.BUDIBASE_AI],[p.PlanType.PREMIUM_PLUS_TRIAL]:[p.Feature.APP_BACKUPS,p.Feature.BRANDING,p.Feature.SYNC_AUTOMATIONS,p.Feature.APP_BUILDERS,p.Feature.VIEW_PERMISSIONS,p.Feature.TRIGGER_AUTOMATION_RUN,p.Feature.VIEW_READONLY_COLUMNS,p.Feature.AI_CUSTOM_CONFIGS,p.Feature.PDF,p.Feature.BUDIBASE_AI],[p.PlanType.PRO]:[p.Feature.USER_GROUPS,p.Feature.APP_BACKUPS],[p.PlanType.TEAM]:[p.Feature.USER_GROUPS,p.Feature.APP_BACKUPS],[p.PlanType.BUSINESS]:[p.Feature.USER_GROUPS,p.Feature.APP_BACKUPS,p.Feature.ENVIRONMENT_VARIABLES,p.Feature.AUDIT_LOGS,p.Feature.BRANDING,p.Feature.SYNC_AUTOMATIONS,p.Feature.APP_BUILDERS,p.Feature.EXPANDED_PUBLIC_API,p.Feature.VIEW_PERMISSIONS,p.Feature.PDF,p.Feature.BUDIBASE_AI],[p.PlanType.ENTERPRISE_BASIC]:[p.Feature.USER_GROUPS,p.Feature.APP_BACKUPS,p.Feature.ENVIRONMENT_VARIABLES,p.Feature.ENFORCEABLE_SSO,p.Feature.AUDIT_LOGS,p.Feature.BRANDING,p.Feature.SYNC_AUTOMATIONS,p.Feature.OFFLINE,p.Feature.APP_BUILDERS,p.Feature.EXPANDED_PUBLIC_API,p.Feature.VIEW_PERMISSIONS,p.Feature.TRIGGER_AUTOMATION_RUN,p.Feature.SCIM,p.Feature.VIEW_READONLY_COLUMNS,p.Feature.AI_CUSTOM_CONFIGS,p.Feature.PWA,p.Feature.CUSTOM_APP_SCRIPTS,p.Feature.PDF,p.Feature.BUDIBASE_AI],[p.PlanType.ENTERPRISE_BASIC_TRIAL]:[p.Feature.USER_GROUPS,p.Feature.APP_BACKUPS,p.Feature.ENVIRONMENT_VARIABLES,p.Feature.ENFORCEABLE_SSO,p.Feature.BRANDING,p.Feature.SYNC_AUTOMATIONS,p.Feature.APP_BUILDERS,p.Feature.EXPANDED_PUBLIC_API,p.Feature.VIEW_PERMISSIONS,p.Feature.TRIGGER_AUTOMATION_RUN,p.Feature.SCIM,p.Feature.VIEW_READONLY_COLUMNS,p.Feature.AI_CUSTOM_CONFIGS,p.Feature.PWA,p.Feature.CUSTOM_APP_SCRIPTS,p.Feature.PDF,p.Feature.BUDIBASE_AI],[p.PlanType.ENTERPRISE]:[p.Feature.USER_GROUPS,p.Feature.APP_BACKUPS,p.Feature.ENVIRONMENT_VARIABLES,p.Feature.ENFORCEABLE_SSO,p.Feature.AUDIT_LOGS,p.Feature.BRANDING,p.Feature.SYNC_AUTOMATIONS,p.Feature.OFFLINE,p.Feature.APP_BUILDERS,p.Feature.EXPANDED_PUBLIC_API,p.Feature.VIEW_PERMISSIONS,p.Feature.TRIGGER_AUTOMATION_RUN,p.Feature.SCIM,p.Feature.VIEW_READONLY_COLUMNS,p.Feature.AI_CUSTOM_CONFIGS,p.Feature.PWA,p.Feature.CUSTOM_APP_SCRIPTS,p.Feature.PDF,p.Feature.BUDIBASE_AI]},QI={[p.PlanType.FREE]:[...pe.CLOUD_FREE_LICENSE.features],[p.PlanType.PREMIUM]:[p.Feature.APP_BACKUPS,p.Feature.BRANDING,p.Feature.APP_BUILDERS,p.Feature.VIEW_PERMISSIONS,p.Feature.PDF],[p.PlanType.PREMIUM_PLUS]:[p.Feature.APP_BACKUPS,p.Feature.BRANDING,p.Feature.SYNC_AUTOMATIONS,p.Feature.APP_BUILDERS,p.Feature.VIEW_PERMISSIONS,p.Feature.TRIGGER_AUTOMATION_RUN,p.Feature.VIEW_READONLY_COLUMNS,p.Feature.BUDIBASE_AI,p.Feature.PDF],[p.PlanType.PREMIUM_PLUS_TRIAL]:[p.Feature.APP_BACKUPS,p.Feature.BRANDING,p.Feature.SYNC_AUTOMATIONS,p.Feature.APP_BUILDERS,p.Feature.VIEW_PERMISSIONS,p.Feature.TRIGGER_AUTOMATION_RUN,p.Feature.VIEW_READONLY_COLUMNS,p.Feature.BUDIBASE_AI,p.Feature.PDF],[p.PlanType.PRO]:[p.Feature.USER_GROUPS,p.Feature.APP_BACKUPS,p.Feature.BRANDING],[p.PlanType.TEAM]:[p.Feature.USER_GROUPS,p.Feature.APP_BACKUPS,p.Feature.BRANDING],[p.PlanType.BUSINESS]:[p.Feature.USER_GROUPS,p.Feature.APP_BACKUPS,p.Feature.ENVIRONMENT_VARIABLES,p.Feature.AUDIT_LOGS,p.Feature.BRANDING,p.Feature.SYNC_AUTOMATIONS,p.Feature.APP_BUILDERS,p.Feature.EXPANDED_PUBLIC_API,p.Feature.VIEW_PERMISSIONS,p.Feature.BUDIBASE_AI,p.Feature.PDF],[p.PlanType.ENTERPRISE_BASIC]:[p.Feature.USER_GROUPS,p.Feature.APP_BACKUPS,p.Feature.ENVIRONMENT_VARIABLES,p.Feature.ENFORCEABLE_SSO,p.Feature.AUDIT_LOGS,p.Feature.BRANDING,p.Feature.SYNC_AUTOMATIONS,p.Feature.OFFLINE,p.Feature.APP_BUILDERS,p.Feature.EXPANDED_PUBLIC_API,p.Feature.VIEW_PERMISSIONS,p.Feature.TRIGGER_AUTOMATION_RUN,p.Feature.SCIM,p.Feature.VIEW_READONLY_COLUMNS,p.Feature.AI_CUSTOM_CONFIGS,p.Feature.BUDIBASE_AI,p.Feature.PWA,p.Feature.CUSTOM_APP_SCRIPTS,p.Feature.PDF],[p.PlanType.ENTERPRISE_BASIC_TRIAL]:[p.Feature.USER_GROUPS,p.Feature.APP_BACKUPS,p.Feature.ENVIRONMENT_VARIABLES,p.Feature.ENFORCEABLE_SSO,p.Feature.BRANDING,p.Feature.SYNC_AUTOMATIONS,p.Feature.APP_BUILDERS,p.Feature.EXPANDED_PUBLIC_API,p.Feature.VIEW_PERMISSIONS,p.Feature.TRIGGER_AUTOMATION_RUN,p.Feature.SCIM,p.Feature.VIEW_READONLY_COLUMNS,p.Feature.AI_CUSTOM_CONFIGS,p.Feature.BUDIBASE_AI,p.Feature.PWA,p.Feature.CUSTOM_APP_SCRIPTS,p.Feature.PDF],[p.PlanType.ENTERPRISE]:[p.Feature.USER_GROUPS,p.Feature.APP_BACKUPS,p.Feature.ENVIRONMENT_VARIABLES,p.Feature.ENFORCEABLE_SSO,p.Feature.AUDIT_LOGS,p.Feature.BRANDING,p.Feature.SYNC_AUTOMATIONS,p.Feature.APP_BUILDERS,p.Feature.EXPANDED_PUBLIC_API,p.Feature.VIEW_PERMISSIONS,p.Feature.TRIGGER_AUTOMATION_RUN,p.Feature.SCIM,p.Feature.VIEW_READONLY_COLUMNS,p.Feature.AI_CUSTOM_CONFIGS,p.Feature.BUDIBASE_AI,p.Feature.PWA,p.Feature.CUSTOM_APP_SCRIPTS,p.Feature.PDF]};function ao(e,t){let r=[];function n(a){let o=a[t];if(!o)throw new Error(`Features do not exist for planType=${t} and hosting=${e}`);return o}switch(e){case p.Hosting.SELF:r=n(FI);break;case p.Hosting.CLOUD:r=n(QI);break}return r}var Gn={};S(Gn,{UNLIMITED:()=>d,getQuotas:()=>oo});var B=require("@budibase/types");var l=Ke,Fu=pe,d=-1,jr=e=>e*1e6,jI={[B.PlanType.FREE]:{...Fu.CLOUD_FREE_LICENSE.quotas},[B.PlanType.PREMIUM]:{usage:{monthly:{...l.queries(d),...l.automations(1e3),...l.budibaseAICredits(0)},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)}},[B.PlanType.PREMIUM_PLUS]:{usage:{monthly:{...l.queries(d),...l.automations(5e3),...l.budibaseAICredits(jr(2))},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)}},[B.PlanType.PREMIUM_PLUS_TRIAL]:{usage:{monthly:{...l.queries(d),...l.automations(5e3),...l.budibaseAICredits(jr(2))},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)}},[B.PlanType.PRO]:{usage:{monthly:{...l.queries(d),...l.automations(1e3),...l.budibaseAICredits(0)},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)}},[B.PlanType.TEAM]:{usage:{monthly:{...l.queries(d),...l.automations(5e3),...l.budibaseAICredits(0)},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)}},[B.PlanType.BUSINESS]:{usage:{monthly:{...l.queries(d),...l.automations(1e4),...l.budibaseAICredits(0)},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)}},[B.PlanType.ENTERPRISE_BASIC]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(jr(4))},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)}},[B.PlanType.ENTERPRISE_BASIC_TRIAL]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(jr(4))},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)}},[B.PlanType.ENTERPRISE]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(jr(4))},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)}}},WI={[B.PlanType.FREE]:{...Fu.SELF_FREE_LICENSE.quotas},[B.PlanType.PREMIUM]:void 0,[B.PlanType.PREMIUM_PLUS]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(0)},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)}},[B.PlanType.PREMIUM_PLUS_TRIAL]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(0)},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)}},[B.PlanType.PRO]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(0)},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)}},[B.PlanType.TEAM]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(0)},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)}},[B.PlanType.BUSINESS]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(0)},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)}},[B.PlanType.ENTERPRISE_BASIC]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(0)},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)}},[B.PlanType.ENTERPRISE_BASIC_TRIAL]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(0)},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)}},[B.PlanType.ENTERPRISE]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(0)},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 oo(e,t){let r;function n(a){let o=a[t];if(!o)throw new Error(`Quotas do not exist for planType=${t} and hosting=${e}`);return o}switch(e){case B.Hosting.SELF:r=n(WI);break;case B.Hosting.CLOUD:r=n(jI);break}return JSON.parse(JSON.stringify(r))}var Wt={};S(Wt,{appExists:()=>$I,encoding:()=>jt});var Qu=require("@budibase/backend-core");async function $I(e){return(await Qu.db.getAllApps({all:!0,idsOnly:!0})).includes(e)}var jt={};S(jt,{base64ToObject:()=>KI,objectToBase64:()=>VI});function VI(e){let t=JSON.stringify(e);return Buffer.from(t).toString("base64")}function KI(e){let t=Buffer.from(e,"base64").toString();return JSON.parse(t)}var Rd=require("@budibase/types"),nr=require("@budibase/backend-core"),_d=C(al()),xd=C(Uo());async function wx(e){await be.save({offlineLicenseToken:e}),await wt()}async function vx(){await be.save({offlineLicenseToken:void 0}),await wt()}async function Td(){return(await be.get()).offlineLicenseToken}async function Do(){let t=(await nr.installation.getInstall()).installId,r=nr.context.getTenantId(),n=await nr.events.identification.getUniqueTenantId(r);return{installId:t,tenantId:n}}async function Ex(){let e=await Do();return jt.objectToBase64(e)}function Rx(e){return jt.base64ToObject(e)}function Pd(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 Cd(e){let t=await Do();if(e.identifier.installId!==t.installId||e.identifier.tenantId!==t.tenantId)throw new Error("Invalid offline license")}function Od(e){let t=e.plan.type,r=Rd.Hosting.SELF,n=ao(r,t),a=oo(r,t);return e.features=(0,_d.default)(e.features,n),e.quotas=(0,xd.default)(e.quotas,a),e}async function Bo(){try{let e=await Td();if(e){let t=await Fr(e);return Pd(t),await Cd(t),Od(t)}}catch(e){console.error("Error retrieving offline license",e)}}var pn={};S(pn,{deleteDevLicense:()=>Cx,getOfflineLicense:()=>Tx,writeDevLicenseToDisk:()=>Px});var Ld=require("@budibase/backend-core"),Mo=require("path"),qd=require("os"),vt=C(require("fs"));var _x=Ld.env.isTest()?".budibase-test":".budibase",No=(0,Mo.join)((0,qd.tmpdir)(),_x),xx="dev_license.txt",un=(0,Mo.join)(No,xx);if(!vt.default.existsSync(No))try{vt.default.mkdirSync(No)}catch{}function Tx(){try{if(vt.default.existsSync(un)){let e=vt.default.readFileSync(un,{encoding:"utf-8"});return Fr(e)}}catch(e){console.error("Error retrieving offline license from disk",e)}}function Px(e){console.log(`Writing license to: ${un}`),vt.default.writeFileSync(un,e,{encoding:"utf-8"})}function Cx(){vt.default.rmSync(un,{force:!0})}var ko=async()=>{if(Go.env.OFFLINE_MODE)return Bo();let e=await Qt();return e||(e=pn.getOfflineLicense()),e},Fo=e=>to(e),Qo=()=>Go.env.SELF_HOSTED?pe.SELF_FREE_LICENSE:pe.CLOUD_FREE_LICENSE;var Wo={};S(Wo,{activateLicenseKey:()=>Ox,deleteLicenseKey:()=>Lx,getLicenseKey:()=>jo});async function Ox(e){await ro(e),await be.save({licenseKey:e}),await wt()}async function jo(){return(await be.get()).licenseKey}async function Lx(){await be.save({licenseKey:void 0}),await wt()}var Et=require("@budibase/backend-core"),ta=C(require("dd-trace")),Ud=3600,wt=async()=>{await Nd(),await Bd()},Dd=async(e,t)=>{let{populateLicense:r=ko,populateFreeLicense:n=Qo}=t||{};return await ta.default.trace("getCachedLicense",async a=>{let o=Et.context.getLicense();if(o)return a.addTags({foundInContext:!0,features:o.features,plan:o.plan,quotas:o.quotas}),o;let i=Et.tenancy.getTenantId(),s=await Qa(),c=await s.get(i);return a.addTags({tenantId:i,foundInCache:!!c}),c?(a.addTags({foundInCache:!0,refreshedAt:c.refreshedAt,features:c.features,plan:c.plan,quotas:c.quotas}),c):(c=await ta.default.trace("populateLicense",async()=>await r(i)),a.addTags({populatedLicense:!!c}),c||(c=ta.default.trace("populateFreeLicense",()=>n(e,i)),a.addTags({populatedFreeLicense:!!c})),c.refreshedAt=new Date().toISOString(),a.addTags({refreshedAt:c.refreshedAt,features:c.features,plan:c.plan,quotas:c.quotas,expirySeconds:Ud}),await s.store(i,c,Ud),c)})};Et.env.isJest()&&(Dd=jest.fn());var Bd=Dd,Nd=async()=>{let e=Et.tenancy.getTenantId();await(await Qa()).delete(e)};async function H(e,t){Array.isArray(e)||(e=[e]),t||(t=await xe.getCachedLicense());for(let r of e)if(!t?.features.includes(r))return!1;return!0}async function ra(e,t){if(!await H(e,t))throw new Ye.FeatureDisabledError(`${e} is not currently enabled`,e)}async function $o(e,t){if(!await H(e,t)){let r=e.join(", ");throw new Ye.FeatureDisabledError(`${r} are not currently enabled`,r)}}function le(e){return async(...t)=>(await ra(Y.Feature.APP_BACKUPS),e(...t))}async function Vo(){return H(Y.Feature.APP_BACKUPS)}async function Ko(){return H(Y.Feature.BRANDING)}async function Md(){return H(Y.Feature.ENFORCEABLE_SSO)}async function Ux(){return H(Y.Feature.SYNC_AUTOMATIONS)}async function Dx(){return H(Y.Feature.TRIGGER_AUTOMATION_RUN)}async function Rt(){return H(Y.Feature.APP_BUILDERS)}async function na(){return H(Y.Feature.AUDIT_LOGS)}async function Yo(){return H(Y.Feature.USER_GROUPS)}function Bx(){return H(Y.Feature.PWA)}async function He(){return H(Y.Feature.EXPANDED_PUBLIC_API)}async function Nx(e){if(Ye.env.ENABLE_SSO_MAINTENANCE_MODE||!await Md())return!1;let r;return e?.config?r=e.config:r=await Ye.configs.getSettingsConfig(),!!r.isSSOEnforced}var Ho=async()=>{let e=Y.Feature.SCIM,t=await H(e),r=await Ye.configs.getSCIMConfig();if(!t||!r?.enabled)throw new Ye.FeatureDisabledError(`${e} is not currently enabled`,e);return!0};async function Mx(){return H(Y.Feature.VIEW_PERMISSIONS)}async function Gx(){return H(Y.Feature.VIEW_READONLY_COLUMNS)}async function cn(){return H(Y.Feature.BUDIBASE_AI)}async function Jo(){return H(Y.Feature.AI_CUSTOM_CONFIGS)}var kx={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 Fx(e){return await Ko()?{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}:kx}var zo={};S(zo,{enrichAIConfig:()=>jx});var Qx="budibase_ai";async function jx(e){return await cn()&&(e.config[Qx]={provider:"OpenAI",active:!0,isDefault:Object.keys(e.config).every(t=>!e.config[t].isDefault),isBudibaseAI:!0,defaultModel:process.env.BUDIBASE_AI_DEFAULT_MODEL||"gpt-4o-mini",apiKey:process.env.OPENAI_API_KEY,name:"Budibase AI"}),e}var Fe={};S(Fe,{addApp:()=>Yx,addAutomation:()=>eT,addCustomAIConfig:()=>tT,addGroup:()=>Zo,addPlugin:()=>ts,addRow:()=>Jx,addRows:()=>Xx,addUsers:()=>sa,bustCache:()=>Ka,decrement:()=>Pe,decrementMany:()=>xt,getCurrentUsageValues:()=>mu,getLicensedQuota:()=>kd,getQuotaUsage:()=>At,increment:()=>fe,incrementBudibaseAICredits:()=>as,incrementMany:()=>_t,removeApp:()=>Hx,removeCustomAIConfig:()=>rT,removeCustomAIConfigs:()=>nT,removeGroup:()=>es,removePlugin:()=>rs,removeRow:()=>zx,removeRows:()=>Zx,removeUsers:()=>ir,set:()=>Xo,setAllUsage:()=>Ha,setAppUsageValue:()=>Ya,setUsage:()=>du,setUsagePerApp:()=>fu,updatePluginCount:()=>ns,updateUsage:()=>ar,usageLimitIsExceeded:()=>Kx,utils:()=>vr});var J=require("@budibase/types");var de=require("@budibase/backend-core");var fe=(e,t,r)=>Gd({change:1,name:e,type:t,opts:r}),_t=e=>Gd(e),Gd=async e=>{let t=Array.isArray(e)?e:[e];await ar(t.map(n=>({usageChange:n.change,name:n.name,type:n.type,opts:{dryRun:!0,suppressErrorLog:n.opts?.suppressErrorLog,id:n.opts?.id}})));let r=[];for(let n of t){let a=n.opts?.fn;a&&r.push(await a())}return await ar(t.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}}))),r[0]},Pe=(e,t,r={})=>ar({usageChange:-1,name:e,type:t,opts:r}),xt=e=>{let t=Array.isArray(e)?e:[e];return ar(t.map(r=>({usageChange:-r.change,name:r.name,type:r.type,opts:r.opts})))},Xo=async(e,t,r)=>De.setUsage(r,e,t),Wx=(e,t,r)=>{if(e==J.QuotaUsageType.STATIC){let n=r.usageQuota.triggers;return n?n[t]||{}:{}}else{let n=De.utils.getCurrentMonthString(),a=r.monthly[n].triggers;return a?a[t]||{}:{}}},$x=async(e,t,r,n)=>{try{await de.locks.doWithLock({type:J.LockType.TRY_ONCE,name:J.LockName.TRIGGER_QUOTA,resource:e,ttl:1e4},async()=>{let a={percentage:r,name:t.name};n&&(a.resetDate=n),await ot.triggerQuota(a)})}catch(a){de.logging.logAlert("Error triggering quota",a)}},Vx=async(e,t,r,n)=>{let a=await At(),o=e===J.QuotaUsageType.MONTHLY?a.quotaReset:void 0,i=await Wx(e,t,a),s=n.triggers,c=r/n.value*100;c>100&&(c=100);for(let[f,m]of s.entries())if(c>=m&&n.value!==Ke.UNLIMITED){if(!i[m]){i[m]=new Date().toISOString();let y=s[f+1]||100;(!(c>=y)||c===m)&&await $x(t,n,c,o)}}else i[m]=void 0;return i},ar=async e=>{let t=de.tenancy.getTenantId(),r=Array.isArray(e)?e:[e],n=null,a,o=[],i={},s={},c={},f={};for(let g of r){try{n=de.context.getAppId()}catch{}if(J.APP_QUOTA_NAMES.includes(g.name)&&!n)throw new Error("App context required for quota update");try{a=await kd(J.QuotaType.USAGE,g.name,g.type),o.push(a);let{total:h,app:v,breakdown:P}=await De.getCurrentUsageValues(g.type,g.name,g.opts?.id);h+=g.usageChange,v!=null&&(v+=g.usageChange),P!=null&&(P+=g.usageChange);let _={};if(g.opts?.dryRun||(_=await Vx(g.type,g.name,h,a),f={...f,[g.name]:_}),a.value!==Ke.UNLIMITED&&h>a.value&&g.usageChange>0)throw new de.UsageLimitError(`Licensed ${a.name} of ${a.value} has been exceeded`,a.name);if(h=Math.max(0,h),v&&(v=Math.max(0,v)),P&&(P=Math.max(0,P),c={...c,[g.name]:P}),!g.opts?.dryRun){let E=g.opts?.valueFn;E&&(h=await E(),v=h),i={...i,[g.name]:h},s={...s,[g.name]:v}}}catch(h){throw g.opts?.suppressErrorLog||console.error(`Error updating usage quotas for ${g.name}`,h),h}}let m=r.filter(g=>!g.opts?.dryRun).map(g=>({name:g.name,type:g.type,values:{total:i[g.name],app:s[g.name],breakdown:c[g.name],triggers:f[g.name]},opts:{...g.opts,tenantId:t}}));m.length>0&&await De.setAllUsage(m)},kd=async(e,t,r)=>{let n=await xe.getCachedLicense();if(!n){let a=de.tenancy.getTenantId();throw new Error("License not found for tenant id "+a)}if(r&&(0,J.isStaticQuota)(e,r,t))return n.quotas[e][r][t];if(r&&(0,J.isMonthlyQuota)(e,r,t))return n.quotas[e][r][t];if((0,J.isConstantQuota)(e,t))return n.quotas[e][t];throw new Error("Invalid quota type")},Kx=async(e,t)=>{try{return await ar({usageChange:1,name:e,type:t,opts:{dryRun:!0}}),!1}catch(r){if(r.code===de.ErrorCode.USAGE_LIMIT_EXCEEDED)return!0;throw r}};var or=require("@budibase/types"),Fd=require("@budibase/backend-core"),Qd=async()=>{let e=await Fd.db.getAllApps({dev:!0});return e?e.length:0},Yx=async(e,{appId:t}={})=>fe(or.StaticQuotaName.APPS,or.QuotaUsageType.STATIC,{fn:e,valueFn:Qd,id:t}),Hx=async({appId:e}={})=>Pe(or.StaticQuotaName.APPS,or.QuotaUsageType.STATIC,{valueFn:Qd,id:e});var Ge=require("@budibase/types"),Jx=async(e,{tableId:t}={})=>fe(Ge.StaticQuotaName.ROWS,Ge.QuotaUsageType.STATIC,{fn:e,id:t}),zx=async({tableId:e}={})=>Pe(Ge.StaticQuotaName.ROWS,Ge.QuotaUsageType.STATIC,{id:e}),Xx=async(e,t,{tableId:r}={})=>_t({change:e,name:Ge.StaticQuotaName.ROWS,type:Ge.QuotaUsageType.STATIC,opts:{fn:t,id:r}}),Zx=async(e,{tableId:t}={})=>xt({change:e,name:Ge.StaticQuotaName.ROWS,type:Ge.QuotaUsageType.STATIC,opts:{id:t}});var oa=require("@budibase/types"),eT=async(e,{automationId:t}={})=>fe(oa.MonthlyQuotaName.AUTOMATIONS,oa.QuotaUsageType.MONTHLY,{fn:e,id:t});var sr=require("@budibase/types"),Zo=async e=>fe(sr.StaticQuotaName.USER_GROUPS,sr.QuotaUsageType.STATIC,{fn:e}),es=async()=>Pe(sr.StaticQuotaName.USER_GROUPS,sr.QuotaUsageType.STATIC);var ut=require("@budibase/types"),ts=async e=>fe(ut.StaticQuotaName.PLUGINS,ut.QuotaUsageType.STATIC,{fn:e}),rs=async()=>Pe(ut.StaticQuotaName.PLUGINS,ut.QuotaUsageType.STATIC),ns=async e=>Xo(ut.StaticQuotaName.PLUGINS,ut.QuotaUsageType.STATIC,e);var ke=require("@budibase/types"),ln=require("@budibase/backend-core");var sa=async(e,t,r)=>{let n=[{change:e,name:ke.StaticQuotaName.USERS,type:ke.QuotaUsageType.STATIC,opts:{fn:r,valueFn:ln.users.getUserCount}}];t>0&&n.push({change:t,name:ke.StaticQuotaName.CREATORS,type:ke.QuotaUsageType.STATIC,opts:{valueFn:ln.users.getCreatorCount}});let a=await _t(n);return await Qt(),a},ir=async(e,t)=>{let r=[{change:e,name:ke.StaticQuotaName.USERS,type:ke.QuotaUsageType.STATIC,opts:{valueFn:ln.users.getUserCount}}];t>0&&r.push({change:t,name:ke.StaticQuotaName.CREATORS,type:ke.QuotaUsageType.STATIC,opts:{valueFn:ln.users.getCreatorCount}}),await xt(r),await Qt()};var Ce=require("@budibase/types"),as=async e=>_t({change:e,name:Ce.MonthlyQuotaName.BUDIBASE_AI_CREDITS,type:Ce.QuotaUsageType.MONTHLY}),tT=async()=>fe(Ce.StaticQuotaName.AI_CUSTOM_CONFIGS,Ce.QuotaUsageType.STATIC),rT=async()=>Pe(Ce.StaticQuotaName.AI_CUSTOM_CONFIGS,Ce.QuotaUsageType.STATIC),nT=async e=>xt({change:e,name:Ce.StaticQuotaName.AI_CUSTOM_CONFIGS,type:Ce.QuotaUsageType.STATIC});var Je={};S(Je,{addAppBuilder:()=>uT,db:()=>Qe,removeAppBuilder:()=>pT});var fn=require("@budibase/backend-core");var M={};S(M,{addAppBuilder:()=>ps,addUsers:()=>ss,adjustGroupCreatorsQuotas:()=>iT,cleanupApp:()=>sT,enrichUserRolesFromGroups:()=>oT,fetch:()=>dn,get:()=>Pt,getBulk:()=>Hd,getGroupBuilderAppIds:()=>Yd,getGroupRoleId:()=>aT,remove:()=>os,removeAppBuilder:()=>cs,removeUsers:()=>is,save:()=>ur,updateGroupApps:()=>us});var R=require("@budibase/backend-core");var jd=require("@budibase/backend-core"),ia=class extends jd.HTTPError{constructor(t){super(`Group name "${t}" is unavailable`,409)}};async function Vd(e,t){try{let r=[];for(let s of e)if(s.roles){let c=s.roles[R.db.getProdAppID(t)];c&&r.push(c)}let n=await Promise.all(r.map(async s=>({[s]:await R.roles.roleToNumber(s)}))),a,o,i={};n.forEach(s=>{let[c,f]=Object.entries(s)[0];i[c]={roleId:c,roleNum:f}});for(let{roleId:s,roleNum:c}of Object.values(i))(o===void 0||c>o)&&(o=c,a=s);return a}catch(r){throw R.logging.logAlert(`Error finding higest role for ${e.length} on app ${t}`,r),r}}async function Kd(e,t){return t?t=t.filter(r=>e.includes(r._id)):t=await D.getBulk(e,{enriched:!1}),t}async function Yd(e,t){if(!e.userGroups)return[];let r=await Kd(e.userGroups,t?.groups),n=t?.appId?R.db.getProdAppID(t?.appId):null,a=[];for(let o of r){let i=o.builder?.apps;n&&i?.includes(n)?a.push(n):n||(a=a.concat(i||[]))}return[...new Set(a)]}async function aT(e,t,r){if(!e.userGroups)return null;let n=await Kd(e.userGroups,r?.groups),a=R.db.getProdAppID(t);return e.roles?.[a]?e.roles[a]:(n=n.filter(o=>o?.roles?Object.keys(o.roles).includes(a):!1),await Vd(n,t))}async function oT(e){if(!e||!e.userGroups)return e;let t=await Hd(e.userGroups,{enriched:!1}),r=[];for(let a of t)a?.roles&&(r=r.concat(Object.keys(a.roles)));r=[...new Set(r)];for(let a of r)await R.context.doInAppContext(a,async()=>{if(e.roles[a])return;let o=await Vd(t,a);o&&(e.roles[a]=o)});let n=await Yd(e,{groups:t});if(n.length&&!e.builder?.global){let a=e.builder?.apps||[];e.builder={apps:a.concat(n)}}return e}async function dn(){return await D.fetch()}async function Pt(e){return await D.get(e)}async function Hd(e,t={enriched:!0}){return await D.getBulk(e,t)}async function Wd(e){if(await D.getByName(e))throw new ia(e)}async function $d(e){let t=await D.getGroupUsers(e._id);if(!t.length)return 0;let n=await R.tenancy.getGlobalDB().getMultiple(t.map(o=>o._id));return(await R.userUtils.creatorsInList(n)).filter(o=>o).length}async function ur(e){let t=[],r=!e._id,n=0;if(delete e.users,!e._id)e._id=D.generateUserGroupID(),await Wd(e.name),t.push(R.events.group.created(e));else{let o=await D.get(e._id);if(o.name!==e.name&&await Wd(e.name),t.push(R.events.group.updated(e)),JSON.stringify(o.roles)!==JSON.stringify(e.roles)){let i=o.users?.length||0,s=0;i>0&&(s=await $d(o)),Object.values(e.roles).includes("CREATOR")?n=i-s:n=-i,t.push(R.events.group.permissionsEdited(e))}}await Promise.all(t);let a=()=>D.save(e);if(r)return await Zo(a);{let o=await a();if(n>0)await sa(0,n);else if(n<0){let i=await $d(e),s=Math.abs(n)-i;s>0&&await ir(0,s)}return o}}async function os(e,t){let r;try{r=await D.get(e)}catch{throw new Error("Group not found")}let n=Object.values(r.roles||{}).includes("CREATOR"),a=()=>{};if(n){let i=R.tenancy.getGlobalDB(),s=await D.getGroupUsers(e),f=(await Promise.all(s.map(h=>i.get(h._id)))).map(h=>({...h,userGroups:h.userGroups.filter(v=>v!==e)})),g=(await R.userUtils.creatorsInList(f)).filter(h=>h).length,y=s.length-g;y&&(a=()=>ir(0,y))}let o=await D.destroy(e,t);return await R.events.group.deleted(r),await es(),await a(),o}async function ss(e,t){let r=await D.get(e),n=await R.users.bulkGetGlobalUsersById(t),a=[];for(let c of n)c.userGroups||(c.userGroups=[]),c.userGroups.includes(e)||a.push(c);if(!a.length)return a;let o=a.map(c=>({...c,userGroups:[...c?.userGroups||[],e]}));if(await R.users.bulkUpdateGlobalUsers(o),Object.values(r.roles||{}).includes("CREATOR")){let f=(await R.userUtils.creatorsInList(a)).filter(g=>g).length,m=a.length-f;m&&await sa(0,m)}let s=[];for(let c of t)s.push(R.cache.user.invalidateUser(c));return await Promise.all(s),await R.events.group.usersAdded(o.length,r),o}async function is(e,t){let r=await D.get(e),n=await R.users.bulkGetGlobalUsersById(t),a=[];for(let s of n){if(!s.userGroups||!s.userGroups.includes(e))continue;let c=s.userGroups.indexOf(e);s.userGroups.splice(c,1),a.push(s)}if(await R.users.bulkUpdateGlobalUsers(a),Object.values(r.roles||{}).includes("CREATOR")){let c=(await R.userUtils.creatorsInList(a)).filter(m=>m).length,f=a.length-c;f&&await ir(0,f)}let i=[];for(let s of t)i.push(R.cache.user.invalidateUser(s));return await Promise.all(i),a.length&&await R.events.group.usersDeleted(a.length,r),a}async function us(e,t){let r=await Pt(e);if(r.roles||(r.roles={}),t.appsToAdd)for(let n of t.appsToAdd)r.roles[n.appId]=n.roleId;if(t.appsToRemove)for(let n of t.appsToRemove)delete r.roles[n.appId];return await ur(r)}async function sT(e){let t=await dn(),r=[];for(let n of t)!n.roles||!n.roles[e]||(delete n.roles[e],r.push(n));return await D.bulkSave(r)}async function ps(e,t){if(!await Rt())throw new Error("Feature not enabled, please check license");let r=R.db.getProdAppID(t),n=await Pt(e);n.builder??={apps:[]},n.builder.apps.includes(t)||(n.builder.apps.push(r),await ur(n))}async function cs(e,t){if(!await Rt())throw new Error("Feature not enabled, please check license");let r=R.db.getProdAppID(t),n=await Pt(e);n.builder?.apps.includes(t)&&(n.builder.apps=n.builder.apps.filter(a=>a!==r),await ur(n))}async function iT(){if(!await Yo()){let e=R.tenancy.getGlobalDB(),r=(await dn()||[]).filter(n=>Object.values(n?.roles||{}).includes("CREATOR"));for(let n of r){let a=await D.getGroupUsers(n._id),i=(await Promise.all(a.map(m=>e.get(m._id)))).map(m=>({...m,userGroups:m.userGroups.filter(g=>g!==n._id)})),c=(await R.userUtils.creatorsInList(i)).filter(m=>m).length,f=a.length-c;await D.save({...n,roles:{}}),f&&await ir(0,f)}}}fn.users.UserDB.init(Fe,M,we);var Qe=fn.users.UserDB;async function uT(e,t){if(!await Rt())throw new Error("Feature not enabled, please check license");await fn.users.addAppBuilder(e,t)}async function pT(e,t){if(!await Rt())throw new Error("Feature not enabled, please check license");await fn.users.removeAppBuilder(e,t)}var pa={};S(pa,{logs:()=>hs});var hs={};S(hs,{logSearch:()=>hT,oldestLogDate:()=>rf,storeLog:()=>bT});var tf=require("@budibase/types"),ua=require("@budibase/backend-core");var pt=require("@budibase/types");var K=require("@budibase/backend-core");var Jd=require("@budibase/backend-core");async function zd(e,t){let r,n=5,a=!1,o,i=!0;for(;n>0;n--)try{i?o=await e():o=await exports.randomDelay(e),a=!0;break}catch(s){r=s}return a||Jd.logging.logWarn(`Failed to backoff: ${t}`,r),o}var{SEPARATOR:ze,UNICODE_MAX:cT,DocumentType:Xd,AutomationViewMode:ls,ViewName:lT,getQueryIndex:dT}=K.db,fT=new Date(0).toISOString(),gT=100,ds=async()=>qn(pt.ConstantQuotaName.AUTOMATION_LOG_RETENTION_DAYS);function Zd(e,t,{status:r,automationId:n}={},a={}){let o=n?`${n}${ze}`:"",i=r?`${r}${ze}`:"",s;return r&&n?s=`${ls.ALL}${ze}${i}${o}`:r?s=`${ls.STATUS}${ze}${i}`:n?s=`${ls.AUTOMATION}${ze}${o}`:s=`${Xd.AUTOMATION_LOG}${ze}`,{...a,descending:!0,startkey:`${s}${t}${cT}`,endkey:`${s}${e}`}}function fs(e){let t=pt.AutomationStatus.SUCCESS,r=!0;for(let n of e.steps){let a=n.outputs?.status?.toLowerCase(),o=a==="stopped_error";if(r&&!o){r=!1;continue}if(o){t=pt.AutomationStatus.STOPPED_ERROR;break}else if(n.outputs?.success){if(a==="stopped"){t=pt.AutomationStatus.STOPPED;break}}else{t=pt.AutomationStatus.ERROR;break}}return t}function mT(e,t,r){return`${Xd.AUTOMATION_LOG}${ze}${e}${ze}${r}${ze}${t}`}async function gs(e,t,r={docs:!0}){let n=K.context.getProdAppDB();await n.exists()||(n=K.context.getDevAppDB());let a={status:r.status},o=r?.limit?r.limit:r?.paginate?9+1:void 0,i=Zd(e,t,a,{include_docs:r.docs,limit:o});r?.page&&(i.startkey=r.page);let s=await n.allDocs(i);return Rr(s,{paginate:r?.paginate,pageSize:9})}async function ms(e,t,r={}){let n=K.context.getProdAppDB();await n.exists()||(n=K.context.getDevAppDB());let a;try{let o={automationId:r?.automationId,status:r?.status},i=Zd(e,t,o,{include_docs:!0,limit:9+1});r?.page&&(i.startkey=r.page),a=await n.query(dT(lT.AUTOMATION_LOGS),i)}catch(o){if(o!=null&&(o.name==="not_found"||o.error==="not_found"))return await _u(),ms(e,t,r);throw o}return Rr(a,{paginate:!0,pageSize:9})}async function ef(e,t){let r=K.context.getProdAppDB(),n=e._id,a=e.name,o=fs(t),i=new Date().toISOString(),s=mT(i,o,n),c={...t,automationId:n,status:o,automationName:a,createdAt:i,_id:s};return await r.put(c),s}async function ys(e,{clearing:t}={clearing:!1}){let r=K.context.getProdAppDB();await zd(async()=>{let n=await r.get(K.db.DocumentType.APP_METADATA);for(let a of e){let o=a.split(K.db.SEPARATOR),i=`${o[o.length-3]}${K.db.SEPARATOR}${o[o.length-2]}`,s={};n.automationErrors&&(s=n.automationErrors),Array.isArray(s[i])||(s[i]=[]);let c=s[i].indexOf(a);t&&c!==-1?s[i].splice(c,1):s[i].push(a),s[i].length===0&&delete s[i],n.automationErrors=s}await r.put(n),await K.cache.app.invalidateAppMetadata(n.appId,n)},"Failed to update app metadata with automation log error")}async function yT(){let e=await ds();try{return await gs(fT,e,{docs:!1,paginate:!1,limit:gT})}catch{return{data:[],hasNextPage:!1}}}async function As(){let e=K.context.getProdAppDB();try{let t=await yT();if(!t.data||t.data.length===0)return;let r=t.data.map(a=>({_id:a.id,_rev:a.value.rev,_deleted:!0})),n=t.data.filter(a=>{let o=a.id.split(K.db.SEPARATOR);return o[o.length-1]===pt.AutomationStatus.ERROR}).map(a=>a.id);await e.bulkDocs(r),n.length&&await ys(n,{clearing:!0})}catch(t){K.logging.logAlert(`Failed to cleanup automation log history - Database "${e.name}"`,t)}}var rf=ds;async function AT(e,t,r,n){let a,o=new Date().toISOString(),i=await rf();return(!e||e<i)&&(e=i),r||t?a=await ms(e,o,{automationId:r,status:t,page:n}):a=await gs(e,o,{status:t,page:n,docs:!0,paginate:!0}),a}async function hT(e){return await As(),await AT(e.startDate,e.status,e.automationId,e.page)}async function bT(e,t){if(!ua.db.isProdAppID(ua.context.getAppId()))return;let r=fs(t),n=await ef(e,t);r===tf.AutomationStatus.ERROR&&await ys([n]),await As()}var ca={};S(ca,{checkPluginQuotas:()=>wT,deletePlugin:()=>ST,storePlugin:()=>IT});var sf=require("@budibase/types"),j=require("@budibase/backend-core");var nf=C(require("fs")),af=require("path");function of(e,t){return nf.default.readFileSync((0,af.join)(e,t),"utf8")}async function IT(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===sf.PluginType.DATASOURCE){let js=of(directory,jsFile.name);try{eval(js)}catch(e){let t=e?.message?e.message:JSON.stringify(e);throw new Error(`JS invalid: ${t}`)}}let iconFileName=iconFile?iconFile.name:null,pluginId=j.db.generatePluginID(name),rev;try{rev=(await db.get(pluginId))._rev}catch(e){rev=void 0}let doc={_id:pluginId,_rev:rev,...metadata,name,version,hash,description,source};iconFileName&&(doc.iconFileName=iconFileName),source&&(doc={...doc,source});let write=async()=>{let e=await db.put(doc);return await j.events.plugin.imported(doc),{...doc,_rev:e.rev}};return rev?await write():await ts(write)}async function ST(e){let t=j.tenancy.getGlobalDB();try{let r=await t.get(e),n=j.objectStore.getPluginS3Dir(r.name);await j.objectStore.deleteFolder(j.objectStore.ObjectStoreBuckets.PLUGINS,n),await t.remove(e,r._rev),await j.events.plugin.deleted(r),await rs()}catch(r){let n=r?.message?r?.message:r;throw new Error(`Failed to delete plugin: ${n}`)}}async function wT(){let e=j.tenancy.getGlobalDB();try{let r=(await e.allDocs(j.db.getPluginParams())).rows.length;console.log(`Syncing plugin count: ${r}`),await ns(r)}catch(t){j.logging.logAlert("Unable to retrieve plugins for quota check",t)}}var je={};S(je,{fetch:()=>ET,fetchValues:()=>RT,isEncryptionKeyAvailable:()=>vT,isValid:()=>cf,remove:()=>xT,update:()=>_T});var gn=require("@budibase/types"),uf=require("@budibase/backend-core");function vT(){return!!uf.env.ENCRYPTION_KEY}async function ET(){let e=await It.get();return Object.keys(e.variables)}async function RT(e){let r=(await It.get()).variables,n={};for(let[a,o]of Object.entries(r))switch(e){case gn.AppEnvironment.DEVELOPMENT:n[a]=o.development;break;case gn.AppEnvironment.PRODUCTION:default:n[a]=o.production;break}return n}async function pf(e){if(!(await Me.cache.getCachedLicense()).features.includes(gn.Feature.ENVIRONMENT_VARIABLES))throw new Error("User does not have access to environment variables feature.");let r=await It.get();r.variables=e(r.variables),await It.update(r)}async function _T(e,t){if(cf(e))await pf(n=>(n[e]=t,n));else throw new Error("Variable name has characters that are not allowed")}async function xT(e){await pf(t=>(delete t[e],t))}function cf(e){return/^[a-zA-Z0-9-_]+$/.test(e)}var ct={};S(ct,{definitions:()=>MT,download:()=>NT,fetch:()=>BT,write:()=>UT});var da=require("@budibase/types");var F=require("@budibase/backend-core"),Oe=require("@budibase/types");var lf=require("memorystream"),df=new F.sql.Sql(Oe.SqlClient.SQL_LITE);async function TT(e,t,r){let n={operation:Oe.Operation.READ,table:Ft.searchTable(),tables:{},paginate:{limit:r||9,page:t},filters:e,resource:{fields:[]},sort:{timestamp:{direction:Oe.SortOrder.DESCENDING,type:Oe.SortType.STRING}}},a=df._query(n);if(Array.isArray(a))throw new Error("Cannot execute multiple queries for audit log search");return{sql:a.sql,bindings:a.bindings}}function PT(e){return`${F.DocumentType.AUDIT_LOG}${F.SEPARATOR}${e}${F.SEPARATOR}${F.utils.newid()}`}async function ff(e){e._id||(e._id=PT(e.timestamp)),e.type||(e.type=Oe.AUDIT_LOG_TYPE);try{let r=await F.context.getAuditLogsDB().put(e);return{...e,_rev:r.rev}}catch(t){F.logging.logAlert("Failed to write audit log",t)}}async function bs(e,t,r){t||(t=1);let n=F.context.getAuditLogsDB();try{let a=9+1,o=await TT(e,t,a),i=Ft.searchTable(),s=df.convertJsonStringColumns(i,await n.sql(o.sql,o.bindings)),c;s.length>a&&(c=s.pop());let f={rows:s,hasNextPage:!!c};return f.hasNextPage&&(f.bookmark=t+1),f}catch(a){if(a.status===404&&!r?.isRetry)return await CT(),await yu(),await bs(e,t,{isRetry:!0});throw a}}async function CT(){let e=F.context.getAuditLogsDB(),r=(await e.allDocs(F.db.getDocParams(F.DocumentType.AUDIT_LOG,null,{include_docs:!0}))).rows.map(n=>n.doc).filter(n=>n&&!n.type).map(n=>({...n,type:Oe.AUDIT_LOG_TYPE}));await e.bulkDocs(r)}function gf(e){let t=F.context.getAuditLogsDB(),r=new lf,n=t.dump(r,{filter:o=>{let i=o;if(!i._id?.startsWith(F.DocumentType.AUDIT_LOG))return!1;let s=!0,c=(f,m)=>{!f||f.length===0||(s=!!(s&&m&&f.includes(m)))};if(c(e.userIds,i.userId),c(e.appIds,i.appId),c(e.events,i.event),(e.startDate||e.endDate)&&(s=s&&i.timestamp>=e.startDate&&i.timestamp<=e.endDate),e.fullSearch){let f=JSON.stringify(o);s=s&&f.includes(e.fullSearch)}return s}}),a=new lf;return r.on("data",o=>{let i=JSON.parse(Buffer.from(o).toString());if(Array.isArray(i.docs)){let s="";for(let c of i.docs)s+=JSON.stringify(c)+`
38
- `;a.write(s)}}),r.on("end",()=>{a.end()}),{promise:n,stream:a}}var ae=require("@budibase/backend-core");var la=require("@budibase/types"),mn=require("@budibase/string-templates"),yn=require("@budibase/backend-core"),LT=yn.constants.MIN_VALID_DATE.toISOString(),qT=yn.constants.MAX_VALID_DATE.toISOString();function Is(e){return(e.startDate||e.endDate)&&(e.startDate=e.startDate||LT,e.endDate=e.endDate||qT),e}async function mf(e){Array.isArray(e.appIds)&&(e.appIds=e.appIds.map(n=>yn.db.getProdAppID(n)));let t={};function r(n,a){a?.length&&(t.oneOf={...t.oneOf,[n]:a})}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=Is(e),t.range={timestamp:{high:e.endDate,low:e.startDate}}),Object.keys(t).length===0&&(t.notEmpty={event:!0}),t}function Ss(e,t,r){let n={_id:e,status:la.AuditLogResourceStatus.DELETED};switch(t){case"app":n.name=r?.appName;break;case"user":n.email=r?.email;break}return n}function ws(e){let t=(0,mn.findHBSBlocks)(e);for(let r of t){let n=` "${r}"`;e=e.replace(e.includes(n)?n:` ${r}`,""),e=(0,mn.processStringSync)(e,{})}return e}function yf(e,t){let r=la.AuditedEventFriendlyName[e];if(!r)throw new Error("No friendly name found.");let n=(0,mn.processStringSync)(r,t);return n.includes('""')&&(n=ws(r)),n}async function UT(e,t,r){if(!await na()||!ae.utils.isAudited(e))return;let n=yf(e,t),a=new Date;r?.timestamp&&(a=new Date(r.timestamp));let o={timestamp:a.toISOString(),event:e,name:n,userId:r?.userId||da.AuditLogSystemUser,metadata:{...t,...r?.hostInfo}},i={};try{if(r?.appId){o.appId=ae.db.getProdAppID(r.appId);let s=await ae.cache.app.getAppMetadata(r.appId);"name"in s&&(i.appName=s.name)}if(r?.userId){let s=await ae.users.getById(r?.userId);i.email=s.email}}catch(s){ae.logging.logAlert("Failed to retrieve fallback information for audit log",s)}return o.fallback=i,await ff(o)}async function DT(e){let t=e.map(s=>s.userId),n=e.filter(s=>s.appId).map(s=>ae.db.getDevAppID(s.appId)),a=await ae.users.bulkGetGlobalUsersById([...new Set(t)],{cleanup:!0}),o=await ae.db.getAppsByIDs([...new Set(n)]),i=[];for(let s of e){let c=a.find(g=>g?._id===s.userId),f=o.find(g=>ae.db.isSameAppID(g?.appId,s.appId)),m={event:s.event,timestamp:s.timestamp,name:s.name,metadata:s.metadata,user:c||Ss(s.userId,"user",s.fallback)};s.appId&&(m.app=f||Ss(s.appId,"app",s.fallback)),i.push(m)}return i}async function BT(e){if(!await na())throw new Error("Audit logs not available - license required.");let t=await mf(e);if(typeof e.bookmark=="string")throw new Error("String based bookmark not supported.");let r=await bs(t,e.bookmark);return{hasNextPage:r.hasNextPage,bookmark:r.bookmark,data:await DT(r.rows)}}function NT(e){return e=Is(e),gf(e)}function MT(){let e=Object.entries(da.AuditedEventFriendlyName).filter(r=>r[1]!=null),t={};for(let r of e)t[r[0]]=ws(r[1]);return t}var fa={};S(fa,{applications:()=>_s,roles:()=>Es,users:()=>vs});var vs={};S(vs,{roleCheck:()=>kT});function GT(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 kT(e,t){return await He()||GT(e,t),e}var Es={};S(Es,{assign:()=>FT,unAssign:()=>QT});var An=require("@budibase/backend-core");async function FT(e,t){if(!await He())throw new Error("Unable to assign roles - license required.");let r=await Qe.bulkGet(e);for(let n of r){if(t.role&&t.role.roleId){let a=An.db.getProdAppID(t.role.appId);n.roles[a]=t.role.roleId}if(t.appBuilder){let a=An.db.getProdAppID(t.appBuilder.appId),o=n.builder?.apps||[];n.builder={apps:o.concat([a])}}t.builder&&(n.builder={global:!0}),t.admin&&(n.admin={global:!0}),n.roles}await Qe.bulkUpdate(r)}async function QT(e,t){if(!await He())throw new Error("Unable to un-assign roles - license required.");let r=await Qe.bulkGet(e);for(let n of r){if(t.role){let a=An.db.getProdAppID(t.role?.appId);n.roles[a]===t.role.roleId&&delete n.roles[a]}if(t.appBuilder&&n.builder?.apps){let a=An.db.getProdAppID(t.appBuilder.appId);n.builder.apps=n.builder.apps.filter(o=>o!==a)}t.builder&&n.builder&&delete n.builder,t.admin&&n.admin&&delete n.admin}}var _s={};S(_s,{buildExportFn:()=>WT,buildImportFn:()=>jT});var Rs=require("@budibase/backend-core");function jT(e){return async(t,r)=>{await He()||t.throw(403,"Endpoint unavailable, license required."),t.request.files?.appExport||t.throw(400,"Must provide app export file for import."),await Rs.context.doInAppContext(t.params.appId,async()=>{await e(t),t.body=void 0,t.status=204,await r()})}}function WT(e){return async(t,r)=>{await He()||t.throw(403,"Endpoint unavailable, license required.");let{encryptPassword:n,excludeRows:a}=t.request.body;await Rs.context.doInAppContext(t.params.appId,async()=>{t.request.body={encryptPassword:n,excludeRows:a},t.query.appId=t.params.appId,await e(t),await r()})}}var We=require("@budibase/backend-core"),re=require("@budibase/types");var xs=require("@budibase/backend-core"),Af;function hf(){Af=new xs.queue.BudibaseQueue(xs.queue.JobQueue.APP_BACKUP,{maxStalledCount:3,jobOptions:{attempts:3,removeOnFail:!0,removeOnComplete:!0}})}function Ct(){return Af}var bf=require("path"),If=C(require("fs"));async function Ts(e,t={}){return Ie.storeAppBackupMetadata(e,t)}function Sf(e){let t=new Date().toISOString();switch(e){case re.AppBackupStatus.COMPLETE:case re.AppBackupStatus.FAILED:return{timestamp:t,finishedAt:t};case re.AppBackupStatus.STARTED:return{timestamp:t,startedAt:t};case re.AppBackupStatus.PENDING:return{timestamp:t,createdAt:t}}}async function $T(e,t,r,n){let a=await ga(e);return await Ie.storeAppBackupMetadata({...a,...Sf(t),contents:r,status:t,type:re.AppBackupType.BACKUP},{filename:n,docId:e})}async function VT(e,t,r){let n=await ga(e);return await Ie.storeAppBackupMetadata({...n,...Sf(r),status:r,type:re.AppBackupType.RESTORE,trigger:re.AppBackupTrigger.MANUAL},{docId:e,docRev:t})}async function ga(e){return Ie.getAppBackupMetadata(e)}async function KT(e,t){return Ie.updateAppBackupMetadata(e,t)}async function YT(e){let t=await Ie.getAppBackupMetadata(e);return t.filename&&await We.objectStore.deleteFile(We.objectStore.ObjectStoreBuckets.BACKUPS,t.filename),Ie.deleteAppBackupMetadata(e)}async function HT(e,t){return Ie.fetchAppBackups(e,t)}async function wf(e){let t=await Ie.getAppBackupMetadata(e);if(!t.filename)throw new Error("Backup incomplete - cannot download.");let r=await We.objectStore.getReadStream(We.objectStore.ObjectStoreBuckets.BACKUPS,t.filename);return{metadata:t,stream:r}}async function JT(e){let{stream:t}=await wf(e),r=(0,bf.join)(We.objectStore.budibaseTempDir(),We.utils.newid()),n=If.default.createWriteStream(r);return new Promise((a,o)=>{t.on("error",o),n.on("error",o),t.pipe(n).on("close",()=>a(r))})}async function zT(e,t,r={}){let n;try{n=await Ts({appId:e,trigger:t,timestamp:new Date().toISOString(),status:re.AppBackupStatus.PENDING,type:re.AppBackupType.BACKUP,...r})}catch(a){if(a.status===409)return;throw a}return await Ct().add({docId:n.id,docRev:n.rev,appId:e,export:{trigger:t,...r}}),await We.events.backup.appBackupTriggered(e,n.id,re.AppBackupType.BACKUP,t,r?.name),n.id}async function XT(e,t,r,n){let a=await ga(t),o;try{o=await Ts({appId:e,timestamp:new Date().toISOString(),status:re.AppBackupStatus.PENDING,type:re.AppBackupType.RESTORE,createdBy:n})}catch(i){if(i?.status===409)return;throw i}return await Ct().add({appId:e,docId:o.id,docRev:o.rev,import:{nameForBackup:r,backupId:t,createdBy:n}}),{restoreId:o.id,metadata:a}}var ZT={isEnabled:Vo,triggerAppRestore:le(XT),triggerAppBackup:le(zT),getBackupDownloadStream:le(wf),downloadAppBackup:le(JT),fetchAppBackups:le(HT),storeAppBackupMetadata:le(Ts),updateBackupStatus:le($T),updateRestoreStatus:le(VT),getAppBackup:le(ga),updateAppBackup:le(KT),deleteAppBackup:le(YT)},Xe=ZT;var Cs={};S(Cs,{init:()=>Ps});var W=require("@budibase/backend-core");var Le=require("@budibase/types");var pr=C(require("fs"));async function Ps(e){Ct().process(async t=>{let r=t.data;try{if(r.export)return rP(t,e);if(r.import)return tP(t,e)}catch(n){W.logging.logAlert(`Failed to perform backup for app ID: ${r.appId}`,n)}})}async function eP(e){await W.db.getDB(e,{skip_setup:!0}).destroy()}async function vf(e,t,r,n){let a=W.db.getDevAppID(r),o=W.db.getProdAppID(r),i=new Date().toISOString(),s=async(c,f)=>{n?.doc?await Xe.updateBackupStatus(n.doc.id,c,f?.contents,f?.filename):await Xe.storeAppBackupMetadata({appId:o,timestamp:i,trigger:e,status:c,name:n?.name,type:Le.AppBackupType.BACKUP,contents:f?.contents,createdBy:n?.createdBy},{filename:f?.filename})};try{let c=await n.processing.exportAppFn(a,{tar:!0}),f=await n.processing.statsFn(a),m=`${o}/backup-${i}.tar.gz`,g=W.objectStore.ObjectStoreBuckets.BACKUPS,y=pr.default.createReadStream(c);await W.objectStore.streamUpload({bucket:g,filename:m,stream:y,extra:{type:"application/gzip",metadata:{name:n?.name,trigger:e,timestamp:i,appId:o}}}),await s(Le.AppBackupStatus.COMPLETE,{filename:m,contents:f}),pr.default.existsSync(c)&&pr.default.rmSync(c)}catch(c){W.logging.logAlert("App backup error",c),await s(Le.AppBackupStatus.FAILED)}}async function tP(e,t){let r=e.data,n=r.appId,a=r.import.backupId,o=r.import.nameForBackup,i=r.import.createdBy,s=W.tenancy.getTenantIDFromAppID(n);return W.tenancy.doInTenant(s,async()=>{let c=W.db.getDevAppID(n),{rev:f}=await Xe.updateRestoreStatus(r.docId,r.docRev,Le.AppBackupStatus.STARTED);await vf(Le.AppBackupTrigger.RESTORING,s,n,{processing:t,createdBy:i,name:o});let m=await Xe.downloadAppBackup(a);await eP(c);let g=Le.AppBackupStatus.COMPLETE;try{await t.importAppFn(c,W.db.getDB(c),{file:{type:"application/gzip",path:m},key:m})}catch(y){W.logging.logAlert("App restore error",y),g=Le.AppBackupStatus.FAILED}await Xe.updateRestoreStatus(r.docId,f,g),pr.default.existsSync(m)&&pr.default.rmSync(m,{force:!0})})}async function rP(e,t){let r=e.data,n=r.appId,a=r.export.trigger,o=r.export.name,i=W.tenancy.getTenantIDFromAppID(n);await W.tenancy.doInTenant(i,async()=>{try{let{rev:s}=await Xe.updateBackupStatus(r.docId,Le.AppBackupStatus.STARTED);return vf(a,i,n,{processing:t,doc:{id:r.docId,rev:s},name:o})}catch(s){W.logging.logAlert("App backup error",s)}})}var nP=async e=>{hf(),await Ps(e.processing)},ve={...Xe,processing:Cs,init:nP,getBackupQueue:Ct};var Ef=async e=>{e.backups&&await ve.init(e.backups)};var se={};S(se,{create:()=>JN,find:()=>HN,get:()=>YN,remove:()=>XN,update:()=>zN});var VA=C(Ri()),Ze=require("@budibase/backend-core");var KA=require("@budibase/types");async function YN(e){let t=Ze.tenancy.getGlobalDB(),r=new Ze.db.QueryBuilder(t.name,KA.SearchIndex.USER);r.setIndexBuilder(Ze.db.searchIndexes.createUserIndex),r.setLimit(e.pageSize),r.addEqual("scimInfo.isSync",!0);for(let[a,o]of Object.entries(e.filters?.equal??{}))r.addEqual(a,o);r.setSort("_id"),r.setSkip(e.skip);let n=await r.run();return{users:n.rows,total:n.totalRows}}async function HN(e){return await Ze.users.getById(e)}async function JN(e){let t=await Qe.getUserByEmail(e.email);if(t){if(t.scimInfo?.isSync)throw new Ze.HTTPError("User is already synched",409);e={...t,scimInfo:(0,VA.default)(t.scimInfo,e.scimInfo),password:void 0,firstName:e.firstName,lastName:e.lastName,updatedAt:e.updatedAt}}return await Qe.save(e,{requirePassword:!1})}async function zN(e,t){return await Qe.save(e,{requirePassword:!1,allowChangingEmail:t?.allowChangingEmail})}async function XN(e){return await Qe.destroy(e)}var mr={};S(mr,{create:()=>ZN});var YA=C(Ri());var HA=require("@budibase/backend-core");async function ZN(e){let t=await za(e.name),r;if(!t)r=(await M.save(e)).id;else{if(t.scimInfo?.isSync)throw new HA.HTTPError("Group is already synched",409);r=t._id,t.users&&(await M.removeUsers(r,t.users.map(a=>a._id)),delete t.users),t.scimInfo=(0,YA.default)(t.scimInfo,e.scimInfo),await M.save(t)}return await M.get(r)}var Lt={};S(Lt,{logRequest:()=>eM,logResponse:()=>tM});var _i=require("@budibase/backend-core");async function eM(e){_i.logging.logWarn("SCIM request log",e)}async function tM(e){_i.logging.logWarn("SCIM response error",e)}var Oi={};S(Oi,{doInScimContext:()=>Ti,feature:()=>G,internalGroupOnly:()=>Pa,licensing:()=>JA,requireSCIM:()=>Pi,scimGroupOnly:()=>Sn,scimUserOnly:()=>In});var lt=require("@budibase/backend-core");var xa=require("@budibase/types"),rM=(e={checkUsersLimit:!0})=>async(t,r)=>{if((e.licensingCheck?e.licensingCheck:()=>!!t.user)(t)){if(lt.env.SELF_HOSTED&&lt.env.DEFAULT_LICENSE)return t.user.license=Za,r();t.user.license=await Me.cache.getCachedLicense(t,{populateLicense:e.populateLicense,populateFreeLicense:e.populateFreeLicense}),e.checkUsersLimit&&(lt.utils.isServingApp(t)||lt.utils.isServingBuilder(t)||lt.utils.isServingBuilderPreview(t)||lt.utils.isPublicApiRequest(t))&&await Fe.usageLimitIsExceeded(xa.StaticQuotaName.USERS,xa.QuotaUsageType.STATIC)}return r()},JA=rM;var G={};S(G,{requireFeature:()=>nM,requireFeatures:()=>aM});var nM=e=>async(t,r)=>{await ra(e),await r()},aM=(...e)=>async(t,r)=>{await $o(e),await r()};var Ta=require("@budibase/backend-core");var Ti=async(e,t)=>(Ta.env.DISABLE_SCIM_CALLS||await Lt.logRequest({...e.request.toJSON(),body:e.request.body}),await Ta.context.doInScimContext(async()=>{let r=await t();return await Lt.logResponse({...e.response.toJSON(),body:e.response.body}),r}));var Pi=async(e,t)=>{await Ho(),await t()};var zA=require("@budibase/backend-core");var In=e=>Ci(zA.users.getById,e,!0),Sn=e=>Ci(D.get,e,!0),Pa=e=>Ci(D.get,e,!1);function Ci(e,t,r){return async(n,a)=>{let o=n.params[t];return typeof o!="string"&&n.throw(404),!!(await e(o)).scimInfo?.isSync!==r&&n.throw(404),a()}}var Hi={};S(Hi,{ai:()=>dh,appBackups:()=>zh,auditLogs:()=>Fh,environmentVariables:()=>qh,groups:()=>Eh,scim:()=>Tb,users:()=>qb});var Mi=require("@budibase/types");var Ni={};S(Ni,{getLLM:()=>qa,getLLMConfig:()=>Bi});var ge=require("@budibase/backend-core"),sh=require("@budibase/types");var Ui=C(require("openai"));var dt=require("@budibase/types");var ie=class e{constructor(t){this.messages=t}user(t){return this.messages.push({role:"user",content:t}),this}system(t){return this.messages.push({role:"system",content:t}),this}static user(t){return new e([{role:"user",content:t}])}static system(t){return new e([{role:"system",content:t}])}static fromRequest(t){return new e(t.messages)}};function Li(e){return ie.user(`Summarize this text:
37
+ `;function Fr(e){return ao.default.verify(e,jI,{algorithms:["RS256"]})}function WI(e,t){return ao.default.sign(t,e,{encoding:"utf-8",algorithm:"RS256"})}var Gn={};S(Gn,{getFeatures:()=>oo});var p=require("@budibase/types");var $I={[p.PlanType.FREE]:[...pe.SELF_FREE_LICENSE.features],[p.PlanType.PREMIUM]:void 0,[p.PlanType.PREMIUM_PLUS]:[p.Feature.APP_BACKUPS,p.Feature.BRANDING,p.Feature.SYNC_AUTOMATIONS,p.Feature.APP_BUILDERS,p.Feature.VIEW_PERMISSIONS,p.Feature.TRIGGER_AUTOMATION_RUN,p.Feature.VIEW_READONLY_COLUMNS,p.Feature.AI_CUSTOM_CONFIGS,p.Feature.PDF,p.Feature.BUDIBASE_AI],[p.PlanType.PREMIUM_PLUS_TRIAL]:[p.Feature.APP_BACKUPS,p.Feature.BRANDING,p.Feature.SYNC_AUTOMATIONS,p.Feature.APP_BUILDERS,p.Feature.VIEW_PERMISSIONS,p.Feature.TRIGGER_AUTOMATION_RUN,p.Feature.VIEW_READONLY_COLUMNS,p.Feature.AI_CUSTOM_CONFIGS,p.Feature.PDF,p.Feature.BUDIBASE_AI],[p.PlanType.PRO]:[p.Feature.USER_GROUPS,p.Feature.APP_BACKUPS],[p.PlanType.TEAM]:[p.Feature.USER_GROUPS,p.Feature.APP_BACKUPS],[p.PlanType.BUSINESS]:[p.Feature.USER_GROUPS,p.Feature.APP_BACKUPS,p.Feature.ENVIRONMENT_VARIABLES,p.Feature.AUDIT_LOGS,p.Feature.BRANDING,p.Feature.SYNC_AUTOMATIONS,p.Feature.APP_BUILDERS,p.Feature.EXPANDED_PUBLIC_API,p.Feature.VIEW_PERMISSIONS,p.Feature.PDF,p.Feature.BUDIBASE_AI],[p.PlanType.ENTERPRISE_BASIC]:[p.Feature.USER_GROUPS,p.Feature.APP_BACKUPS,p.Feature.ENVIRONMENT_VARIABLES,p.Feature.ENFORCEABLE_SSO,p.Feature.AUDIT_LOGS,p.Feature.BRANDING,p.Feature.SYNC_AUTOMATIONS,p.Feature.OFFLINE,p.Feature.APP_BUILDERS,p.Feature.EXPANDED_PUBLIC_API,p.Feature.VIEW_PERMISSIONS,p.Feature.TRIGGER_AUTOMATION_RUN,p.Feature.SCIM,p.Feature.VIEW_READONLY_COLUMNS,p.Feature.AI_CUSTOM_CONFIGS,p.Feature.PWA,p.Feature.CUSTOM_APP_SCRIPTS,p.Feature.PDF,p.Feature.BUDIBASE_AI],[p.PlanType.ENTERPRISE_BASIC_TRIAL]:[p.Feature.USER_GROUPS,p.Feature.APP_BACKUPS,p.Feature.ENVIRONMENT_VARIABLES,p.Feature.ENFORCEABLE_SSO,p.Feature.BRANDING,p.Feature.SYNC_AUTOMATIONS,p.Feature.APP_BUILDERS,p.Feature.EXPANDED_PUBLIC_API,p.Feature.VIEW_PERMISSIONS,p.Feature.TRIGGER_AUTOMATION_RUN,p.Feature.SCIM,p.Feature.VIEW_READONLY_COLUMNS,p.Feature.AI_CUSTOM_CONFIGS,p.Feature.PWA,p.Feature.CUSTOM_APP_SCRIPTS,p.Feature.PDF,p.Feature.BUDIBASE_AI],[p.PlanType.ENTERPRISE]:[p.Feature.USER_GROUPS,p.Feature.APP_BACKUPS,p.Feature.ENVIRONMENT_VARIABLES,p.Feature.ENFORCEABLE_SSO,p.Feature.AUDIT_LOGS,p.Feature.BRANDING,p.Feature.SYNC_AUTOMATIONS,p.Feature.OFFLINE,p.Feature.APP_BUILDERS,p.Feature.EXPANDED_PUBLIC_API,p.Feature.VIEW_PERMISSIONS,p.Feature.TRIGGER_AUTOMATION_RUN,p.Feature.SCIM,p.Feature.VIEW_READONLY_COLUMNS,p.Feature.AI_CUSTOM_CONFIGS,p.Feature.PWA,p.Feature.CUSTOM_APP_SCRIPTS,p.Feature.PDF,p.Feature.BUDIBASE_AI]},VI={[p.PlanType.FREE]:[...pe.CLOUD_FREE_LICENSE.features],[p.PlanType.PREMIUM]:[p.Feature.APP_BACKUPS,p.Feature.BRANDING,p.Feature.APP_BUILDERS,p.Feature.VIEW_PERMISSIONS,p.Feature.PDF],[p.PlanType.PREMIUM_PLUS]:[p.Feature.APP_BACKUPS,p.Feature.BRANDING,p.Feature.SYNC_AUTOMATIONS,p.Feature.APP_BUILDERS,p.Feature.VIEW_PERMISSIONS,p.Feature.TRIGGER_AUTOMATION_RUN,p.Feature.VIEW_READONLY_COLUMNS,p.Feature.BUDIBASE_AI,p.Feature.PDF],[p.PlanType.PREMIUM_PLUS_TRIAL]:[p.Feature.APP_BACKUPS,p.Feature.BRANDING,p.Feature.SYNC_AUTOMATIONS,p.Feature.APP_BUILDERS,p.Feature.VIEW_PERMISSIONS,p.Feature.TRIGGER_AUTOMATION_RUN,p.Feature.VIEW_READONLY_COLUMNS,p.Feature.BUDIBASE_AI,p.Feature.PDF],[p.PlanType.PRO]:[p.Feature.USER_GROUPS,p.Feature.APP_BACKUPS,p.Feature.BRANDING],[p.PlanType.TEAM]:[p.Feature.USER_GROUPS,p.Feature.APP_BACKUPS,p.Feature.BRANDING],[p.PlanType.BUSINESS]:[p.Feature.USER_GROUPS,p.Feature.APP_BACKUPS,p.Feature.ENVIRONMENT_VARIABLES,p.Feature.AUDIT_LOGS,p.Feature.BRANDING,p.Feature.SYNC_AUTOMATIONS,p.Feature.APP_BUILDERS,p.Feature.EXPANDED_PUBLIC_API,p.Feature.VIEW_PERMISSIONS,p.Feature.BUDIBASE_AI,p.Feature.PDF],[p.PlanType.ENTERPRISE_BASIC]:[p.Feature.USER_GROUPS,p.Feature.APP_BACKUPS,p.Feature.ENVIRONMENT_VARIABLES,p.Feature.ENFORCEABLE_SSO,p.Feature.AUDIT_LOGS,p.Feature.BRANDING,p.Feature.SYNC_AUTOMATIONS,p.Feature.OFFLINE,p.Feature.APP_BUILDERS,p.Feature.EXPANDED_PUBLIC_API,p.Feature.VIEW_PERMISSIONS,p.Feature.TRIGGER_AUTOMATION_RUN,p.Feature.SCIM,p.Feature.VIEW_READONLY_COLUMNS,p.Feature.AI_CUSTOM_CONFIGS,p.Feature.BUDIBASE_AI,p.Feature.PWA,p.Feature.CUSTOM_APP_SCRIPTS,p.Feature.PDF],[p.PlanType.ENTERPRISE_BASIC_TRIAL]:[p.Feature.USER_GROUPS,p.Feature.APP_BACKUPS,p.Feature.ENVIRONMENT_VARIABLES,p.Feature.ENFORCEABLE_SSO,p.Feature.BRANDING,p.Feature.SYNC_AUTOMATIONS,p.Feature.APP_BUILDERS,p.Feature.EXPANDED_PUBLIC_API,p.Feature.VIEW_PERMISSIONS,p.Feature.TRIGGER_AUTOMATION_RUN,p.Feature.SCIM,p.Feature.VIEW_READONLY_COLUMNS,p.Feature.AI_CUSTOM_CONFIGS,p.Feature.BUDIBASE_AI,p.Feature.PWA,p.Feature.CUSTOM_APP_SCRIPTS,p.Feature.PDF],[p.PlanType.ENTERPRISE]:[p.Feature.USER_GROUPS,p.Feature.APP_BACKUPS,p.Feature.ENVIRONMENT_VARIABLES,p.Feature.ENFORCEABLE_SSO,p.Feature.AUDIT_LOGS,p.Feature.BRANDING,p.Feature.SYNC_AUTOMATIONS,p.Feature.APP_BUILDERS,p.Feature.EXPANDED_PUBLIC_API,p.Feature.VIEW_PERMISSIONS,p.Feature.TRIGGER_AUTOMATION_RUN,p.Feature.SCIM,p.Feature.VIEW_READONLY_COLUMNS,p.Feature.AI_CUSTOM_CONFIGS,p.Feature.BUDIBASE_AI,p.Feature.PWA,p.Feature.CUSTOM_APP_SCRIPTS,p.Feature.PDF]};function oo(e,t){let r=[];function n(a){let o=a[t];if(!o)throw new Error(`Features do not exist for planType=${t} and hosting=${e}`);return o}switch(e){case p.Hosting.SELF:r=n($I);break;case p.Hosting.CLOUD:r=n(VI);break}return r}var kn={};S(kn,{UNLIMITED:()=>d,getQuotas:()=>so});var B=require("@budibase/types");var l=Ke,ju=pe,d=-1,jr=e=>e*1e6,KI={[B.PlanType.FREE]:{...ju.CLOUD_FREE_LICENSE.quotas},[B.PlanType.PREMIUM]:{usage:{monthly:{...l.queries(d),...l.automations(1e3),...l.budibaseAICredits(0)},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)}},[B.PlanType.PREMIUM_PLUS]:{usage:{monthly:{...l.queries(d),...l.automations(5e3),...l.budibaseAICredits(jr(2))},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)}},[B.PlanType.PREMIUM_PLUS_TRIAL]:{usage:{monthly:{...l.queries(d),...l.automations(5e3),...l.budibaseAICredits(jr(2))},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)}},[B.PlanType.PRO]:{usage:{monthly:{...l.queries(d),...l.automations(1e3),...l.budibaseAICredits(0)},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)}},[B.PlanType.TEAM]:{usage:{monthly:{...l.queries(d),...l.automations(5e3),...l.budibaseAICredits(0)},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)}},[B.PlanType.BUSINESS]:{usage:{monthly:{...l.queries(d),...l.automations(1e4),...l.budibaseAICredits(0)},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)}},[B.PlanType.ENTERPRISE_BASIC]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(jr(4))},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)}},[B.PlanType.ENTERPRISE_BASIC_TRIAL]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(jr(4))},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)}},[B.PlanType.ENTERPRISE]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(jr(4))},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)}}},HI={[B.PlanType.FREE]:{...ju.SELF_FREE_LICENSE.quotas},[B.PlanType.PREMIUM]:void 0,[B.PlanType.PREMIUM_PLUS]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(0)},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)}},[B.PlanType.PREMIUM_PLUS_TRIAL]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(0)},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)}},[B.PlanType.PRO]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(0)},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)}},[B.PlanType.TEAM]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(0)},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)}},[B.PlanType.BUSINESS]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(0)},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)}},[B.PlanType.ENTERPRISE_BASIC]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(0)},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)}},[B.PlanType.ENTERPRISE_BASIC_TRIAL]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(0)},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)}},[B.PlanType.ENTERPRISE]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(0)},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 so(e,t){let r;function n(a){let o=a[t];if(!o)throw new Error(`Quotas do not exist for planType=${t} and hosting=${e}`);return o}switch(e){case B.Hosting.SELF:r=n(HI);break;case B.Hosting.CLOUD:r=n(KI);break}return JSON.parse(JSON.stringify(r))}var Wt={};S(Wt,{appExists:()=>YI,encoding:()=>jt});var Wu=require("@budibase/backend-core");async function YI(e){return(await Wu.db.getAllApps({all:!0,idsOnly:!0})).includes(e)}var jt={};S(jt,{base64ToObject:()=>zI,objectToBase64:()=>JI});function JI(e){let t=JSON.stringify(e);return Buffer.from(t).toString("base64")}function zI(e){let t=Buffer.from(e,"base64").toString();return JSON.parse(t)}var xd=require("@budibase/types"),nr=require("@budibase/backend-core"),Td=C(sl()),Pd=C(Do());async function _x(e){await be.save({offlineLicenseToken:e}),await wt()}async function xx(){await be.save({offlineLicenseToken:void 0}),await wt()}async function Cd(){return(await be.get()).offlineLicenseToken}async function Bo(){let t=(await nr.installation.getInstall()).installId,r=nr.context.getTenantId(),n=await nr.events.identification.getUniqueTenantId(r);return{installId:t,tenantId:n}}async function Tx(){let e=await Bo();return jt.objectToBase64(e)}function Px(e){return jt.base64ToObject(e)}function Od(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 Ld(e){let t=await Bo();if(e.identifier.installId!==t.installId||e.identifier.tenantId!==t.tenantId)throw new Error("Invalid offline license")}function qd(e){let t=e.plan.type,r=xd.Hosting.SELF,n=oo(r,t),a=so(r,t);return e.features=(0,Td.default)(e.features,n),e.quotas=(0,Pd.default)(e.quotas,a),e}async function No(){try{let e=await Cd();if(e){let t=await Fr(e);return Od(t),await Ld(t),qd(t)}}catch(e){console.error("Error retrieving offline license",e)}}var pn={};S(pn,{deleteDevLicense:()=>Ux,getOfflineLicense:()=>Lx,writeDevLicenseToDisk:()=>qx});var Ud=require("@budibase/backend-core"),Go=require("path"),Dd=require("os"),vt=C(require("fs"));var Cx=Ud.env.isTest()?".budibase-test":".budibase",Mo=(0,Go.join)((0,Dd.tmpdir)(),Cx),Ox="dev_license.txt",un=(0,Go.join)(Mo,Ox);if(!vt.default.existsSync(Mo))try{vt.default.mkdirSync(Mo)}catch{}function Lx(){try{if(vt.default.existsSync(un)){let e=vt.default.readFileSync(un,{encoding:"utf-8"});return Fr(e)}}catch(e){console.error("Error retrieving offline license from disk",e)}}function qx(e){console.log(`Writing license to: ${un}`),vt.default.writeFileSync(un,e,{encoding:"utf-8"})}function Ux(){vt.default.rmSync(un,{force:!0})}var Fo=async()=>{if(ko.env.OFFLINE_MODE)return No();let e=await Qt();return e||(e=pn.getOfflineLicense()),e},Qo=e=>ro(e),jo=()=>ko.env.SELF_HOSTED?pe.SELF_FREE_LICENSE:pe.CLOUD_FREE_LICENSE;var $o={};S($o,{activateLicenseKey:()=>Dx,deleteLicenseKey:()=>Bx,getLicenseKey:()=>Wo});async function Dx(e){await no(e),await be.save({licenseKey:e}),await wt()}async function Wo(){return(await be.get()).licenseKey}async function Bx(){await be.save({licenseKey:void 0}),await wt()}var Et=require("@budibase/backend-core"),ra=C(require("dd-trace")),Bd=3600,wt=async()=>{await Gd(),await Md()},Nd=async(e,t)=>{let{populateLicense:r=Fo,populateFreeLicense:n=jo}=t||{};return await ra.default.trace("getCachedLicense",async a=>{let o=Et.context.getLicense();if(o)return a.addTags({foundInContext:!0,features:o.features,plan:o.plan,quotas:o.quotas}),o;let i=Et.tenancy.getTenantId(),s=await ja(),c=await s.get(i);return a.addTags({tenantId:i,foundInCache:!!c}),c?(a.addTags({foundInCache:!0,refreshedAt:c.refreshedAt,features:c.features,plan:c.plan,quotas:c.quotas}),c):(c=await ra.default.trace("populateLicense",async()=>await r(i)),a.addTags({populatedLicense:!!c}),c||(c=ra.default.trace("populateFreeLicense",()=>n(e,i)),a.addTags({populatedFreeLicense:!!c})),c.refreshedAt=new Date().toISOString(),a.addTags({refreshedAt:c.refreshedAt,features:c.features,plan:c.plan,quotas:c.quotas,expirySeconds:Bd}),await s.store(i,c,Bd),c)})};Et.env.isJest()&&(Nd=jest.fn());var Md=Nd,Gd=async()=>{let e=Et.tenancy.getTenantId();await(await ja()).delete(e)};async function Y(e,t){Array.isArray(e)||(e=[e]),t||(t=await xe.getCachedLicense());for(let r of e)if(!t?.features.includes(r))return!1;return!0}async function na(e,t){if(!await Y(e,t))throw new He.FeatureDisabledError(`${e} is not currently enabled`,e)}async function Vo(e,t){if(!await Y(e,t)){let r=e.join(", ");throw new He.FeatureDisabledError(`${r} are not currently enabled`,r)}}function le(e){return async(...t)=>(await na(H.Feature.APP_BACKUPS),e(...t))}async function Ko(){return Y(H.Feature.APP_BACKUPS)}async function Ho(){return Y(H.Feature.BRANDING)}async function kd(){return Y(H.Feature.ENFORCEABLE_SSO)}async function Mx(){return Y(H.Feature.SYNC_AUTOMATIONS)}async function Gx(){return Y(H.Feature.TRIGGER_AUTOMATION_RUN)}async function Rt(){return Y(H.Feature.APP_BUILDERS)}async function aa(){return Y(H.Feature.AUDIT_LOGS)}async function Yo(){return Y(H.Feature.USER_GROUPS)}function kx(){return Y(H.Feature.PWA)}async function Ye(){return Y(H.Feature.EXPANDED_PUBLIC_API)}async function Fx(e){if(He.env.ENABLE_SSO_MAINTENANCE_MODE||!await kd())return!1;let r;return e?.config?r=e.config:r=await He.configs.getSettingsConfig(),!!r.isSSOEnforced}var Jo=async()=>{let e=H.Feature.SCIM,t=await Y(e),r=await He.configs.getSCIMConfig();if(!t||!r?.enabled)throw new He.FeatureDisabledError(`${e} is not currently enabled`,e);return!0};async function Qx(){return Y(H.Feature.VIEW_PERMISSIONS)}async function jx(){return Y(H.Feature.VIEW_READONLY_COLUMNS)}async function cn(){return Y(H.Feature.BUDIBASE_AI)}async function zo(){return Y(H.Feature.AI_CUSTOM_CONFIGS)}var Wx={faviconUrl:void 0,faviconUrlEtag:void 0,emailBrandingEnabled:!0,testimonialsEnabled:!0,platformTitle:void 0,loginHeading:void 0,loginButton:void 0,metaDescription:void 0,metaImageUrl:void 0,metaTitle:void 0};async function $x(e){return await Ho()?{faviconUrl:e.faviconUrl,faviconUrlEtag:e.faviconUrlEtag,emailBrandingEnabled:e.emailBrandingEnabled,testimonialsEnabled:e.testimonialsEnabled,platformTitle:e.platformTitle,loginHeading:e.loginHeading,loginButton:e.loginButton,metaDescription:e.metaDescription,metaImageUrl:e.metaImageUrl,metaTitle:e.metaTitle}:Wx}var Xo={};S(Xo,{enrichAIConfig:()=>Kx});var Vx="budibase_ai";async function Kx(e){return await cn()&&(e.config[Vx]={provider:"OpenAI",active:!0,isDefault:Object.keys(e.config).every(t=>!e.config[t].isDefault),isBudibaseAI:!0,defaultModel:process.env.BUDIBASE_AI_DEFAULT_MODEL||"gpt-4o-mini",apiKey:process.env.OPENAI_API_KEY,name:"Budibase AI"}),e}var Fe={};S(Fe,{addApp:()=>Xx,addAutomation:()=>aT,addCustomAIConfig:()=>oT,addGroup:()=>es,addPlugin:()=>rs,addRow:()=>eT,addRows:()=>rT,addUsers:()=>ia,bustCache:()=>Ha,decrement:()=>Pe,decrementMany:()=>xt,getCurrentUsageValues:()=>Au,getLicensedQuota:()=>Qd,getQuotaUsage:()=>At,increment:()=>fe,incrementBudibaseAICredits:()=>os,incrementMany:()=>_t,removeApp:()=>Zx,removeCustomAIConfig:()=>sT,removeCustomAIConfigs:()=>iT,removeGroup:()=>ts,removePlugin:()=>ns,removeRow:()=>tT,removeRows:()=>nT,removeUsers:()=>ir,set:()=>Zo,setAllUsage:()=>Ja,setAppUsageValue:()=>Ya,setUsage:()=>gu,setUsagePerApp:()=>mu,updatePluginCount:()=>as,updateUsage:()=>ar,usageLimitIsExceeded:()=>zx,utils:()=>vr});var J=require("@budibase/types");var de=require("@budibase/backend-core");var fe=(e,t,r)=>Fd({change:1,name:e,type:t,opts:r}),_t=e=>Fd(e),Fd=async e=>{let t=Array.isArray(e)?e:[e];await ar(t.map(n=>({usageChange:n.change,name:n.name,type:n.type,opts:{dryRun:!0,suppressErrorLog:n.opts?.suppressErrorLog,id:n.opts?.id}})));let r=[];for(let n of t){let a=n.opts?.fn;a&&r.push(await a())}return await ar(t.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}}))),r[0]},Pe=(e,t,r={})=>ar({usageChange:-1,name:e,type:t,opts:r}),xt=e=>{let t=Array.isArray(e)?e:[e];return ar(t.map(r=>({usageChange:-r.change,name:r.name,type:r.type,opts:r.opts})))},Zo=async(e,t,r)=>De.setUsage(r,e,t),Hx=(e,t,r)=>{if(e==J.QuotaUsageType.STATIC){let n=r.usageQuota.triggers;return n?n[t]||{}:{}}else{let n=De.utils.getCurrentMonthString(),a=r.monthly[n].triggers;return a?a[t]||{}:{}}},Yx=async(e,t,r,n)=>{try{await de.locks.doWithLock({type:J.LockType.TRY_ONCE,name:J.LockName.TRIGGER_QUOTA,resource:e,ttl:1e4},async()=>{let a={percentage:r,name:t.name};n&&(a.resetDate=n),await ot.triggerQuota(a)})}catch(a){de.logging.logAlert("Error triggering quota",a)}},Jx=async(e,t,r,n)=>{let a=await At(),o=e===J.QuotaUsageType.MONTHLY?a.quotaReset:void 0,i=await Hx(e,t,a),s=n.triggers,c=r/n.value*100;c>100&&(c=100);for(let[f,m]of s.entries())if(c>=m&&n.value!==Ke.UNLIMITED){if(!i[m]){i[m]=new Date().toISOString();let y=s[f+1]||100;(!(c>=y)||c===m)&&await Yx(t,n,c,o)}}else i[m]=void 0;return i},ar=async e=>{let t=de.tenancy.getTenantId(),r=Array.isArray(e)?e:[e],n=null,a,o=[],i={},s={},c={},f={};for(let g of r){try{n=de.context.getAppId()}catch{}if(J.APP_QUOTA_NAMES.includes(g.name)&&!n)throw new Error("App context required for quota update");try{a=await Qd(J.QuotaType.USAGE,g.name,g.type),o.push(a);let{total:h,app:v,breakdown:P}=await De.getCurrentUsageValues(g.type,g.name,g.opts?.id);h+=g.usageChange,v!=null&&(v+=g.usageChange),P!=null&&(P+=g.usageChange);let _={};if(g.opts?.dryRun||(_=await Jx(g.type,g.name,h,a),f={...f,[g.name]:_}),a.value!==Ke.UNLIMITED&&h>a.value&&g.usageChange>0)throw new de.UsageLimitError(`Licensed ${a.name} of ${a.value} has been exceeded`,a.name);if(h=Math.max(0,h),v&&(v=Math.max(0,v)),P&&(P=Math.max(0,P),c={...c,[g.name]:P}),!g.opts?.dryRun){let E=g.opts?.valueFn;E&&(h=await E(),v=h),i={...i,[g.name]:h},s={...s,[g.name]:v}}}catch(h){throw g.opts?.suppressErrorLog||console.error(`Error updating usage quotas for ${g.name}`,h),h}}let m=r.filter(g=>!g.opts?.dryRun).map(g=>({name:g.name,type:g.type,values:{total:i[g.name],app:s[g.name],breakdown:c[g.name],triggers:f[g.name]},opts:{...g.opts,tenantId:t}}));m.length>0&&await De.setAllUsage(m)},Qd=async(e,t,r)=>{let n=await xe.getCachedLicense();if(!n){let a=de.tenancy.getTenantId();throw new Error("License not found for tenant id "+a)}if(r&&(0,J.isStaticQuota)(e,r,t))return n.quotas[e][r][t];if(r&&(0,J.isMonthlyQuota)(e,r,t))return n.quotas[e][r][t];if((0,J.isConstantQuota)(e,t))return n.quotas[e][t];throw new Error("Invalid quota type")},zx=async(e,t)=>{try{return await ar({usageChange:1,name:e,type:t,opts:{dryRun:!0}}),!1}catch(r){if(r.code===de.ErrorCode.USAGE_LIMIT_EXCEEDED)return!0;throw r}};var or=require("@budibase/types"),jd=require("@budibase/backend-core"),Wd=async()=>{let e=await jd.db.getAllApps({dev:!0});return e?e.length:0},Xx=async(e,{appId:t}={})=>fe(or.StaticQuotaName.APPS,or.QuotaUsageType.STATIC,{fn:e,valueFn:Wd,id:t}),Zx=async({appId:e}={})=>Pe(or.StaticQuotaName.APPS,or.QuotaUsageType.STATIC,{valueFn:Wd,id:e});var Ge=require("@budibase/types"),eT=async(e,{tableId:t}={})=>fe(Ge.StaticQuotaName.ROWS,Ge.QuotaUsageType.STATIC,{fn:e,id:t}),tT=async({tableId:e}={})=>Pe(Ge.StaticQuotaName.ROWS,Ge.QuotaUsageType.STATIC,{id:e}),rT=async(e,t,{tableId:r}={})=>_t({change:e,name:Ge.StaticQuotaName.ROWS,type:Ge.QuotaUsageType.STATIC,opts:{fn:t,id:r}}),nT=async(e,{tableId:t}={})=>xt({change:e,name:Ge.StaticQuotaName.ROWS,type:Ge.QuotaUsageType.STATIC,opts:{id:t}});var sa=require("@budibase/types"),aT=async(e,{automationId:t}={})=>fe(sa.MonthlyQuotaName.AUTOMATIONS,sa.QuotaUsageType.MONTHLY,{fn:e,id:t});var sr=require("@budibase/types"),es=async e=>fe(sr.StaticQuotaName.USER_GROUPS,sr.QuotaUsageType.STATIC,{fn:e}),ts=async()=>Pe(sr.StaticQuotaName.USER_GROUPS,sr.QuotaUsageType.STATIC);var ut=require("@budibase/types"),rs=async e=>fe(ut.StaticQuotaName.PLUGINS,ut.QuotaUsageType.STATIC,{fn:e}),ns=async()=>Pe(ut.StaticQuotaName.PLUGINS,ut.QuotaUsageType.STATIC),as=async e=>Zo(ut.StaticQuotaName.PLUGINS,ut.QuotaUsageType.STATIC,e);var ke=require("@budibase/types"),ln=require("@budibase/backend-core");var ia=async(e,t,r)=>{let n=[{change:e,name:ke.StaticQuotaName.USERS,type:ke.QuotaUsageType.STATIC,opts:{fn:r,valueFn:ln.users.getUserCount}}];t>0&&n.push({change:t,name:ke.StaticQuotaName.CREATORS,type:ke.QuotaUsageType.STATIC,opts:{valueFn:ln.users.getCreatorCount}});let a=await _t(n);return await Qt(),a},ir=async(e,t)=>{let r=[{change:e,name:ke.StaticQuotaName.USERS,type:ke.QuotaUsageType.STATIC,opts:{valueFn:ln.users.getUserCount}}];t>0&&r.push({change:t,name:ke.StaticQuotaName.CREATORS,type:ke.QuotaUsageType.STATIC,opts:{valueFn:ln.users.getCreatorCount}}),await xt(r),await Qt()};var Ce=require("@budibase/types"),os=async e=>_t({change:e,name:Ce.MonthlyQuotaName.BUDIBASE_AI_CREDITS,type:Ce.QuotaUsageType.MONTHLY}),oT=async()=>fe(Ce.StaticQuotaName.AI_CUSTOM_CONFIGS,Ce.QuotaUsageType.STATIC),sT=async()=>Pe(Ce.StaticQuotaName.AI_CUSTOM_CONFIGS,Ce.QuotaUsageType.STATIC),iT=async e=>xt({change:e,name:Ce.StaticQuotaName.AI_CUSTOM_CONFIGS,type:Ce.QuotaUsageType.STATIC});var Je={};S(Je,{addAppBuilder:()=>dT,db:()=>Qe,removeAppBuilder:()=>fT});var fn=require("@budibase/backend-core");var M={};S(M,{addAppBuilder:()=>cs,addUsers:()=>is,adjustGroupCreatorsQuotas:()=>lT,cleanupApp:()=>cT,enrichUserRolesFromGroups:()=>pT,fetch:()=>dn,get:()=>Pt,getBulk:()=>zd,getGroupBuilderAppIds:()=>Jd,getGroupRoleId:()=>uT,remove:()=>ss,removeAppBuilder:()=>ls,removeUsers:()=>us,save:()=>ur,updateGroupApps:()=>ps});var R=require("@budibase/backend-core");var $d=require("@budibase/backend-core"),ua=class extends $d.HTTPError{constructor(t){super(`Group name "${t}" is unavailable`,409)}};async function Hd(e,t){try{let r=[];for(let s of e)if(s.roles){let c=s.roles[R.db.getProdAppID(t)];c&&r.push(c)}let n=await Promise.all(r.map(async s=>({[s]:await R.roles.roleToNumber(s)}))),a,o,i={};n.forEach(s=>{let[c,f]=Object.entries(s)[0];i[c]={roleId:c,roleNum:f}});for(let{roleId:s,roleNum:c}of Object.values(i))(o===void 0||c>o)&&(o=c,a=s);return a}catch(r){throw R.logging.logAlert(`Error finding higest role for ${e.length} on app ${t}`,r),r}}async function Yd(e,t){return t?t=t.filter(r=>e.includes(r._id)):t=await D.getBulk(e,{enriched:!1}),t}async function Jd(e,t){if(!e.userGroups)return[];let r=await Yd(e.userGroups,t?.groups),n=t?.appId?R.db.getProdAppID(t?.appId):null,a=[];for(let o of r){let i=o.builder?.apps;n&&i?.includes(n)?a.push(n):n||(a=a.concat(i||[]))}return[...new Set(a)]}async function uT(e,t,r){if(!e.userGroups)return null;let n=await Yd(e.userGroups,r?.groups),a=R.db.getProdAppID(t);return e.roles?.[a]?e.roles[a]:(n=n.filter(o=>o?.roles?Object.keys(o.roles).includes(a):!1),await Hd(n,t))}async function pT(e){if(!e||!e.userGroups)return e;let t=await zd(e.userGroups,{enriched:!1}),r=[];for(let a of t)a?.roles&&(r=r.concat(Object.keys(a.roles)));r=[...new Set(r)];for(let a of r)await R.context.doInAppContext(a,async()=>{if(e.roles[a])return;let o=await Hd(t,a);o&&(e.roles[a]=o)});let n=await Jd(e,{groups:t});if(n.length&&!e.builder?.global){let a=e.builder?.apps||[];e.builder={apps:a.concat(n)}}return e}async function dn(){return await D.fetch()}async function Pt(e){return await D.get(e)}async function zd(e,t={enriched:!0}){return await D.getBulk(e,t)}async function Vd(e){if(await D.getByName(e))throw new ua(e)}async function Kd(e){let t=await D.getGroupUsers(e._id);if(!t.length)return 0;let n=await R.tenancy.getGlobalDB().getMultiple(t.map(o=>o._id));return(await R.userUtils.creatorsInList(n)).filter(o=>o).length}async function ur(e){let t=[],r=!e._id,n=0;if(delete e.users,!e._id)e._id=D.generateUserGroupID(),await Vd(e.name),t.push(R.events.group.created(e));else{let o=await D.get(e._id);if(o.name!==e.name&&await Vd(e.name),t.push(R.events.group.updated(e)),JSON.stringify(o.roles)!==JSON.stringify(e.roles)){let i=o.users?.length||0,s=0;i>0&&(s=await Kd(o)),Object.values(e.roles).includes("CREATOR")?n=i-s:n=-i,t.push(R.events.group.permissionsEdited(e))}}await Promise.all(t);let a=()=>D.save(e);if(r)return await es(a);{let o=await a();if(n>0)await ia(0,n);else if(n<0){let i=await Kd(e),s=Math.abs(n)-i;s>0&&await ir(0,s)}return o}}async function ss(e,t){let r;try{r=await D.get(e)}catch{throw new Error("Group not found")}let n=Object.values(r.roles||{}).includes("CREATOR"),a=()=>{};if(n){let i=R.tenancy.getGlobalDB(),s=await D.getGroupUsers(e),f=(await Promise.all(s.map(h=>i.get(h._id)))).map(h=>({...h,userGroups:h.userGroups.filter(v=>v!==e)})),g=(await R.userUtils.creatorsInList(f)).filter(h=>h).length,y=s.length-g;y&&(a=()=>ir(0,y))}let o=await D.destroy(e,t);return await R.events.group.deleted(r),await ts(),await a(),o}async function is(e,t){let r=await D.get(e),n=await R.users.bulkGetGlobalUsersById(t),a=[];for(let c of n)c.userGroups||(c.userGroups=[]),c.userGroups.includes(e)||a.push(c);if(!a.length)return a;let o=a.map(c=>({...c,userGroups:[...c?.userGroups||[],e]}));if(await R.users.bulkUpdateGlobalUsers(o),Object.values(r.roles||{}).includes("CREATOR")){let f=(await R.userUtils.creatorsInList(a)).filter(g=>g).length,m=a.length-f;m&&await ia(0,m)}let s=[];for(let c of t)s.push(R.cache.user.invalidateUser(c));return await Promise.all(s),await R.events.group.usersAdded(o.length,r),o}async function us(e,t){let r=await D.get(e),n=await R.users.bulkGetGlobalUsersById(t),a=[];for(let s of n){if(!s.userGroups||!s.userGroups.includes(e))continue;let c=s.userGroups.indexOf(e);s.userGroups.splice(c,1),a.push(s)}if(await R.users.bulkUpdateGlobalUsers(a),Object.values(r.roles||{}).includes("CREATOR")){let c=(await R.userUtils.creatorsInList(a)).filter(m=>m).length,f=a.length-c;f&&await ir(0,f)}let i=[];for(let s of t)i.push(R.cache.user.invalidateUser(s));return await Promise.all(i),a.length&&await R.events.group.usersDeleted(a.length,r),a}async function ps(e,t){let r=await Pt(e);if(r.roles||(r.roles={}),t.appsToAdd)for(let n of t.appsToAdd)r.roles[n.appId]=n.roleId;if(t.appsToRemove)for(let n of t.appsToRemove)delete r.roles[n.appId];return await ur(r)}async function cT(e){let t=await dn(),r=[];for(let n of t)!n.roles||!n.roles[e]||(delete n.roles[e],r.push(n));return await D.bulkSave(r)}async function cs(e,t){if(!await Rt())throw new Error("Feature not enabled, please check license");let r=R.db.getProdAppID(t),n=await Pt(e);n.builder??={apps:[]},n.builder.apps.includes(t)||(n.builder.apps.push(r),await ur(n))}async function ls(e,t){if(!await Rt())throw new Error("Feature not enabled, please check license");let r=R.db.getProdAppID(t),n=await Pt(e);n.builder?.apps.includes(t)&&(n.builder.apps=n.builder.apps.filter(a=>a!==r),await ur(n))}async function lT(){if(!await Yo()){let e=R.tenancy.getGlobalDB(),r=(await dn()||[]).filter(n=>Object.values(n?.roles||{}).includes("CREATOR"));for(let n of r){let a=await D.getGroupUsers(n._id),i=(await Promise.all(a.map(m=>e.get(m._id)))).map(m=>({...m,userGroups:m.userGroups.filter(g=>g!==n._id)})),c=(await R.userUtils.creatorsInList(i)).filter(m=>m).length,f=a.length-c;await D.save({...n,roles:{}}),f&&await ir(0,f)}}}fn.users.UserDB.init(Fe,M,we);var Qe=fn.users.UserDB;async function dT(e,t){if(!await Rt())throw new Error("Feature not enabled, please check license");await fn.users.addAppBuilder(e,t)}async function fT(e,t){if(!await Rt())throw new Error("Feature not enabled, please check license");await fn.users.removeAppBuilder(e,t)}var ca={};S(ca,{logs:()=>bs});var bs={};S(bs,{logSearch:()=>wT,oldestLogDate:()=>af,storeLog:()=>vT});var nf=require("@budibase/types"),pa=require("@budibase/backend-core");var pt=require("@budibase/types");var K=require("@budibase/backend-core");var Xd=require("@budibase/backend-core");async function Zd(e,t){let r,n=5,a=!1,o,i=!0;for(;n>0;n--)try{i?o=await e():o=await exports.randomDelay(e),a=!0;break}catch(s){r=s}return a||Xd.logging.logWarn(`Failed to backoff: ${t}`,r),o}var{SEPARATOR:ze,UNICODE_MAX:gT,DocumentType:ef,AutomationViewMode:ds,ViewName:mT,getQueryIndex:yT}=K.db,AT=new Date(0).toISOString(),hT=100,fs=async()=>Un(pt.ConstantQuotaName.AUTOMATION_LOG_RETENTION_DAYS);function tf(e,t,{status:r,automationId:n}={},a={}){let o=n?`${n}${ze}`:"",i=r?`${r}${ze}`:"",s;return r&&n?s=`${ds.ALL}${ze}${i}${o}`:r?s=`${ds.STATUS}${ze}${i}`:n?s=`${ds.AUTOMATION}${ze}${o}`:s=`${ef.AUTOMATION_LOG}${ze}`,{...a,descending:!0,startkey:`${s}${t}${gT}`,endkey:`${s}${e}`}}function gs(e){let t=pt.AutomationStatus.SUCCESS,r=!0;for(let n of e.steps){let a=n.outputs?.status?.toLowerCase(),o=a==="stopped_error";if(r&&!o){r=!1;continue}if(o){t=pt.AutomationStatus.STOPPED_ERROR;break}else if(n.outputs?.success){if(a==="stopped"){t=pt.AutomationStatus.STOPPED;break}}else{t=pt.AutomationStatus.ERROR;break}}return t}function bT(e,t,r){return`${ef.AUTOMATION_LOG}${ze}${e}${ze}${r}${ze}${t}`}async function ms(e,t,r={docs:!0}){let n=K.context.getProdAppDB();await n.exists()||(n=K.context.getDevAppDB());let a={status:r.status},o=r?.limit?r.limit:r?.paginate?9+1:void 0,i=tf(e,t,a,{include_docs:r.docs,limit:o});r?.page&&(i.startkey=r.page);let s=await n.allDocs(i);return Rr(s,{paginate:r?.paginate,pageSize:9})}async function ys(e,t,r={}){let n=K.context.getProdAppDB();await n.exists()||(n=K.context.getDevAppDB());let a;try{let o={automationId:r?.automationId,status:r?.status},i=tf(e,t,o,{include_docs:!0,limit:9+1});r?.page&&(i.startkey=r.page),a=await n.query(yT(mT.AUTOMATION_LOGS),i)}catch(o){if(o!=null&&(o.name==="not_found"||o.error==="not_found"))return await Tu(),ys(e,t,r);throw o}return Rr(a,{paginate:!0,pageSize:9})}async function rf(e,t){let r=K.context.getProdAppDB(),n=e._id,a=e.name,o=gs(t),i=new Date().toISOString(),s=bT(i,o,n),c={...t,automationId:n,status:o,automationName:a,createdAt:i,_id:s};return await r.put(c),s}async function As(e,{clearing:t}={clearing:!1}){let r=K.context.getProdAppDB();await Zd(async()=>{let n=await r.get(K.db.DocumentType.APP_METADATA);for(let a of e){let o=a.split(K.db.SEPARATOR),i=`${o[o.length-3]}${K.db.SEPARATOR}${o[o.length-2]}`,s={};n.automationErrors&&(s=n.automationErrors),Array.isArray(s[i])||(s[i]=[]);let c=s[i].indexOf(a);t&&c!==-1?s[i].splice(c,1):s[i].push(a),s[i].length===0&&delete s[i],n.automationErrors=s}await r.put(n),await K.cache.app.invalidateAppMetadata(n.appId,n)},"Failed to update app metadata with automation log error")}async function IT(){let e=await fs();try{return await ms(AT,e,{docs:!1,paginate:!1,limit:hT})}catch{return{data:[],hasNextPage:!1}}}async function hs(){let e=K.context.getProdAppDB();try{let t=await IT();if(!t.data||t.data.length===0)return;let r=t.data.map(a=>({_id:a.id,_rev:a.value.rev,_deleted:!0})),n=t.data.filter(a=>{let o=a.id.split(K.db.SEPARATOR);return o[o.length-1]===pt.AutomationStatus.ERROR}).map(a=>a.id);await e.bulkDocs(r),n.length&&await As(n,{clearing:!0})}catch(t){K.logging.logAlert(`Failed to cleanup automation log history - Database "${e.name}"`,t)}}var af=fs;async function ST(e,t,r,n){let a,o=new Date().toISOString(),i=await af();return(!e||e<i)&&(e=i),r||t?a=await ys(e,o,{automationId:r,status:t,page:n}):a=await ms(e,o,{status:t,page:n,docs:!0,paginate:!0}),a}async function wT(e){return await hs(),await ST(e.startDate,e.status,e.automationId,e.page)}async function vT(e,t){if(!pa.db.isProdAppID(pa.context.getAppId()))return;let r=gs(t),n=await rf(e,t);r===nf.AutomationStatus.ERROR&&await As([n]),await hs()}var la={};S(la,{checkPluginQuotas:()=>_T,deletePlugin:()=>RT,storePlugin:()=>ET});var pf=require("@budibase/types"),j=require("@budibase/backend-core");var of=C(require("fs")),sf=require("path");function uf(e,t){return of.default.readFileSync((0,sf.join)(e,t),"utf8")}async function ET(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===pf.PluginType.DATASOURCE){let js=uf(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 rs(write)}async function RT(e){let t=j.tenancy.getGlobalDB();try{let r=await t.get(e),n=j.objectStore.getPluginS3Dir(r.name);await j.objectStore.deleteFolder(j.objectStore.ObjectStoreBuckets.PLUGINS,n),await t.remove(e,r._rev),await j.events.plugin.deleted(r),await ns()}catch(r){let n=r?.message?r?.message:r;throw new Error(`Failed to delete plugin: ${n}`)}}async function _T(){let e=j.tenancy.getGlobalDB();try{let r=(await e.allDocs(j.db.getPluginParams())).rows.length;console.log(`Syncing plugin count: ${r}`),await as(r)}catch(t){j.logging.logAlert("Unable to retrieve plugins for quota check",t)}}var je={};S(je,{fetch:()=>TT,fetchValues:()=>PT,isEncryptionKeyAvailable:()=>xT,isValid:()=>df,remove:()=>OT,update:()=>CT});var gn=require("@budibase/types"),cf=require("@budibase/backend-core");function xT(){return!!cf.env.ENCRYPTION_KEY}async function TT(){let e=await It.get();return Object.keys(e.variables)}async function PT(e){let r=(await It.get()).variables,n={};for(let[a,o]of Object.entries(r))switch(e){case gn.AppEnvironment.DEVELOPMENT:n[a]=o.development;break;case gn.AppEnvironment.PRODUCTION:default:n[a]=o.production;break}return n}async function lf(e){if(!(await Me.cache.getCachedLicense()).features.includes(gn.Feature.ENVIRONMENT_VARIABLES))throw new Error("User does not have access to environment variables feature.");let r=await It.get();r.variables=e(r.variables),await It.update(r)}async function CT(e,t){if(df(e))await lf(n=>(n[e]=t,n));else throw new Error("Variable name has characters that are not allowed")}async function OT(e){await lf(t=>(delete t[e],t))}function df(e){return/^[a-zA-Z0-9-_]+$/.test(e)}var ct={};S(ct,{definitions:()=>QT,download:()=>FT,fetch:()=>kT,write:()=>MT});var fa=require("@budibase/types");var F=require("@budibase/backend-core"),Oe=require("@budibase/types");var ff=require("memorystream"),gf=new F.sql.Sql(Oe.SqlClient.SQL_LITE);async function LT(e,t,r){let n={operation:Oe.Operation.READ,table:Ft.searchTable(),tables:{},paginate:{limit:r||9,page:t},filters:e,resource:{fields:[]},sort:{timestamp:{direction:Oe.SortOrder.DESCENDING,type:Oe.SortType.STRING}}},a=gf._query(n);if(Array.isArray(a))throw new Error("Cannot execute multiple queries for audit log search");return{sql:a.sql,bindings:a.bindings}}function qT(e){return`${F.DocumentType.AUDIT_LOG}${F.SEPARATOR}${e}${F.SEPARATOR}${F.utils.newid()}`}async function mf(e){e._id||(e._id=qT(e.timestamp)),e.type||(e.type=Oe.AUDIT_LOG_TYPE);try{let r=await F.context.getAuditLogsDB().put(e);return{...e,_rev:r.rev}}catch(t){F.logging.logAlert("Failed to write audit log",t)}}async function Is(e,t,r){t||(t=1);let n=F.context.getAuditLogsDB();try{let a=9+1,o=await LT(e,t,a),i=Ft.searchTable(),s=gf.convertJsonStringColumns(i,await n.sql(o.sql,o.bindings)),c;s.length>a&&(c=s.pop());let f={rows:s,hasNextPage:!!c};return f.hasNextPage&&(f.bookmark=t+1),f}catch(a){if(a.status===404&&!r?.isRetry)return await UT(),await hu(),await Is(e,t,{isRetry:!0});throw a}}async function UT(){let e=F.context.getAuditLogsDB(),r=(await e.allDocs(F.db.getDocParams(F.DocumentType.AUDIT_LOG,null,{include_docs:!0}))).rows.map(n=>n.doc).filter(n=>n&&!n.type).map(n=>({...n,type:Oe.AUDIT_LOG_TYPE}));await e.bulkDocs(r)}function yf(e){let t=F.context.getAuditLogsDB(),r=new ff,n=t.dump(r,{filter:o=>{let i=o;if(!i._id?.startsWith(F.DocumentType.AUDIT_LOG))return!1;let s=!0,c=(f,m)=>{!f||f.length===0||(s=!!(s&&m&&f.includes(m)))};if(c(e.userIds,i.userId),c(e.appIds,i.appId),c(e.events,i.event),(e.startDate||e.endDate)&&(s=s&&i.timestamp>=e.startDate&&i.timestamp<=e.endDate),e.fullSearch){let f=JSON.stringify(o);s=s&&f.includes(e.fullSearch)}return s}}),a=new ff;return r.on("data",o=>{let i=JSON.parse(Buffer.from(o).toString());if(Array.isArray(i.docs)){let s="";for(let c of i.docs)s+=JSON.stringify(c)+`
38
+ `;a.write(s)}}),r.on("end",()=>{a.end()}),{promise:n,stream:a}}var ae=require("@budibase/backend-core");var da=require("@budibase/types"),mn=require("@budibase/string-templates"),yn=require("@budibase/backend-core"),BT=yn.constants.MIN_VALID_DATE.toISOString(),NT=yn.constants.MAX_VALID_DATE.toISOString();function Ss(e){return(e.startDate||e.endDate)&&(e.startDate=e.startDate||BT,e.endDate=e.endDate||NT),e}async function Af(e){Array.isArray(e.appIds)&&(e.appIds=e.appIds.map(n=>yn.db.getProdAppID(n)));let t={};function r(n,a){a?.length&&(t.oneOf={...t.oneOf,[n]:a})}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=Ss(e),t.range={timestamp:{high:e.endDate,low:e.startDate}}),Object.keys(t).length===0&&(t.notEmpty={event:!0}),t}function ws(e,t,r){let n={_id:e,status:da.AuditLogResourceStatus.DELETED};switch(t){case"app":n.name=r?.appName;break;case"user":n.email=r?.email;break}return n}function vs(e){let t=(0,mn.findHBSBlocks)(e);for(let r of t){let n=` "${r}"`;e=e.replace(e.includes(n)?n:` ${r}`,""),e=(0,mn.processStringSync)(e,{})}return e}function hf(e,t){let r=da.AuditedEventFriendlyName[e];if(!r)throw new Error("No friendly name found.");let n=(0,mn.processStringSync)(r,t);return n.includes('""')&&(n=vs(r)),n}async function MT(e,t,r){if(!await aa()||!ae.utils.isAudited(e))return;let n=hf(e,t),a=new Date;r?.timestamp&&(a=new Date(r.timestamp));let o={timestamp:a.toISOString(),event:e,name:n,userId:r?.userId||fa.AuditLogSystemUser,metadata:{...t,...r?.hostInfo}},i={};try{if(r?.appId){o.appId=ae.db.getProdAppID(r.appId);let s=await ae.cache.app.getAppMetadata(r.appId);"name"in s&&(i.appName=s.name)}if(r?.userId){let s=await ae.users.getById(r?.userId);i.email=s.email}}catch(s){ae.logging.logAlert("Failed to retrieve fallback information for audit log",s)}return o.fallback=i,await mf(o)}async function GT(e){let t=e.map(s=>s.userId),n=e.filter(s=>s.appId).map(s=>ae.db.getDevAppID(s.appId)),a=await ae.users.bulkGetGlobalUsersById([...new Set(t)],{cleanup:!0}),o=await ae.db.getAppsByIDs([...new Set(n)]),i=[];for(let s of e){let c=a.find(g=>g?._id===s.userId),f=o.find(g=>ae.db.isSameAppID(g?.appId,s.appId)),m={event:s.event,timestamp:s.timestamp,name:s.name,metadata:s.metadata,user:c||ws(s.userId,"user",s.fallback)};s.appId&&(m.app=f||ws(s.appId,"app",s.fallback)),i.push(m)}return i}async function kT(e){if(!await aa())throw new Error("Audit logs not available - license required.");let t=await Af(e);if(typeof e.bookmark=="string")throw new Error("String based bookmark not supported.");let r=await Is(t,e.bookmark);return{hasNextPage:r.hasNextPage,bookmark:r.bookmark,data:await GT(r.rows)}}function FT(e){return e=Ss(e),yf(e)}function QT(){let e=Object.entries(fa.AuditedEventFriendlyName).filter(r=>r[1]!=null),t={};for(let r of e)t[r[0]]=vs(r[1]);return t}var ga={};S(ga,{applications:()=>xs,roles:()=>Rs,users:()=>Es});var Es={};S(Es,{roleCheck:()=>WT});function jT(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 WT(e,t){return await Ye()||jT(e,t),e}var Rs={};S(Rs,{assign:()=>$T,unAssign:()=>VT});var An=require("@budibase/backend-core");async function $T(e,t){if(!await Ye())throw new Error("Unable to assign roles - license required.");let r=await Qe.bulkGet(e);for(let n of r){if(t.role&&t.role.roleId){let a=An.db.getProdAppID(t.role.appId);n.roles[a]=t.role.roleId}if(t.appBuilder){let a=An.db.getProdAppID(t.appBuilder.appId),o=n.builder?.apps||[];n.builder={apps:o.concat([a])}}t.builder&&(n.builder={global:!0}),t.admin&&(n.admin={global:!0}),n.roles}await Qe.bulkUpdate(r)}async function VT(e,t){if(!await Ye())throw new Error("Unable to un-assign roles - license required.");let r=await Qe.bulkGet(e);for(let n of r){if(t.role){let a=An.db.getProdAppID(t.role?.appId);n.roles[a]===t.role.roleId&&delete n.roles[a]}if(t.appBuilder&&n.builder?.apps){let a=An.db.getProdAppID(t.appBuilder.appId);n.builder.apps=n.builder.apps.filter(o=>o!==a)}t.builder&&n.builder&&delete n.builder,t.admin&&n.admin&&delete n.admin}}var xs={};S(xs,{buildExportFn:()=>HT,buildImportFn:()=>KT});var _s=require("@budibase/backend-core");function KT(e){return async(t,r)=>{await Ye()||t.throw(403,"Endpoint unavailable, license required."),t.request.files?.appExport||t.throw(400,"Must provide app export file for import."),await _s.context.doInAppContext(t.params.appId,async()=>{await e(t),t.body=void 0,t.status=204,await r()})}}function HT(e){return async(t,r)=>{await Ye()||t.throw(403,"Endpoint unavailable, license required.");let{encryptPassword:n,excludeRows:a}=t.request.body;await _s.context.doInAppContext(t.params.appId,async()=>{t.request.body={encryptPassword:n,excludeRows:a},t.query.appId=t.params.appId,await e(t),await r()})}}var We=require("@budibase/backend-core"),re=require("@budibase/types");var Ts=require("@budibase/backend-core"),bf;function If(){bf=new Ts.queue.BudibaseQueue(Ts.queue.JobQueue.APP_BACKUP,{maxStalledCount:3,jobOptions:{attempts:3,removeOnFail:!0,removeOnComplete:!0}})}function Ct(){return bf}var Sf=require("path"),wf=C(require("fs"));async function Ps(e,t={}){return Ie.storeAppBackupMetadata(e,t)}function vf(e){let t=new Date().toISOString();switch(e){case re.AppBackupStatus.COMPLETE:case re.AppBackupStatus.FAILED:return{timestamp:t,finishedAt:t};case re.AppBackupStatus.STARTED:return{timestamp:t,startedAt:t};case re.AppBackupStatus.PENDING:return{timestamp:t,createdAt:t}}}async function YT(e,t,r,n){let a=await ma(e);return await Ie.storeAppBackupMetadata({...a,...vf(t),contents:r,status:t,type:re.AppBackupType.BACKUP},{filename:n,docId:e})}async function JT(e,t,r){let n=await ma(e);return await Ie.storeAppBackupMetadata({...n,...vf(r),status:r,type:re.AppBackupType.RESTORE,trigger:re.AppBackupTrigger.MANUAL},{docId:e,docRev:t})}async function ma(e){return Ie.getAppBackupMetadata(e)}async function zT(e,t){return Ie.updateAppBackupMetadata(e,t)}async function XT(e){let t=await Ie.getAppBackupMetadata(e);return t.filename&&await We.objectStore.deleteFile(We.objectStore.ObjectStoreBuckets.BACKUPS,t.filename),Ie.deleteAppBackupMetadata(e)}async function ZT(e,t){return Ie.fetchAppBackups(e,t)}async function Ef(e){let t=await Ie.getAppBackupMetadata(e);if(!t.filename)throw new Error("Backup incomplete - cannot download.");let r=await We.objectStore.getReadStream(We.objectStore.ObjectStoreBuckets.BACKUPS,t.filename);return{metadata:t,stream:r}}async function eP(e){let{stream:t}=await Ef(e),r=(0,Sf.join)(We.objectStore.budibaseTempDir(),We.utils.newid()),n=wf.default.createWriteStream(r);return new Promise((a,o)=>{t.on("error",o),n.on("error",o),t.pipe(n).on("close",()=>a(r))})}async function tP(e,t,r={}){let n;try{n=await Ps({appId:e,trigger:t,timestamp:new Date().toISOString(),status:re.AppBackupStatus.PENDING,type:re.AppBackupType.BACKUP,...r})}catch(a){if(a.status===409)return;throw a}return await Ct().add({docId:n.id,docRev:n.rev,appId:e,export:{trigger:t,...r}}),await We.events.backup.appBackupTriggered(e,n.id,re.AppBackupType.BACKUP,t,r?.name),n.id}async function rP(e,t,r,n){let a=await ma(t),o;try{o=await Ps({appId:e,timestamp:new Date().toISOString(),status:re.AppBackupStatus.PENDING,type:re.AppBackupType.RESTORE,createdBy:n})}catch(i){if(i?.status===409)return;throw i}return await Ct().add({appId:e,docId:o.id,docRev:o.rev,import:{nameForBackup:r,backupId:t,createdBy:n}}),{restoreId:o.id,metadata:a}}var nP={isEnabled:Ko,triggerAppRestore:le(rP),triggerAppBackup:le(tP),getBackupDownloadStream:le(Ef),downloadAppBackup:le(eP),fetchAppBackups:le(ZT),storeAppBackupMetadata:le(Ps),updateBackupStatus:le(YT),updateRestoreStatus:le(JT),getAppBackup:le(ma),updateAppBackup:le(zT),deleteAppBackup:le(XT)},Xe=nP;var Os={};S(Os,{init:()=>Cs});var W=require("@budibase/backend-core");var Le=require("@budibase/types");var pr=C(require("fs"));async function Cs(e){Ct().process(async t=>{let r=t.data;try{if(r.export)return sP(t,e);if(r.import)return oP(t,e)}catch(n){W.logging.logAlert(`Failed to perform backup for app ID: ${r.appId}`,n)}})}async function aP(e){await W.db.getDB(e,{skip_setup:!0}).destroy()}async function Rf(e,t,r,n){let a=W.db.getDevAppID(r),o=W.db.getProdAppID(r),i=new Date().toISOString(),s=async(c,f)=>{n?.doc?await Xe.updateBackupStatus(n.doc.id,c,f?.contents,f?.filename):await Xe.storeAppBackupMetadata({appId:o,timestamp:i,trigger:e,status:c,name:n?.name,type:Le.AppBackupType.BACKUP,contents:f?.contents,createdBy:n?.createdBy},{filename:f?.filename})};try{let c=await n.processing.exportAppFn(a,{tar:!0}),f=await n.processing.statsFn(a),m=`${o}/backup-${i}.tar.gz`,g=W.objectStore.ObjectStoreBuckets.BACKUPS,y=pr.default.createReadStream(c);await W.objectStore.streamUpload({bucket:g,filename:m,stream:y,extra:{type:"application/gzip",metadata:{name:n?.name,trigger:e,timestamp:i,appId:o}}}),await s(Le.AppBackupStatus.COMPLETE,{filename:m,contents:f}),pr.default.existsSync(c)&&pr.default.rmSync(c)}catch(c){W.logging.logAlert("App backup error",c),await s(Le.AppBackupStatus.FAILED)}}async function oP(e,t){let r=e.data,n=r.appId,a=r.import.backupId,o=r.import.nameForBackup,i=r.import.createdBy,s=W.tenancy.getTenantIDFromAppID(n);return W.tenancy.doInTenant(s,async()=>{let c=W.db.getDevAppID(n),{rev:f}=await Xe.updateRestoreStatus(r.docId,r.docRev,Le.AppBackupStatus.STARTED);await Rf(Le.AppBackupTrigger.RESTORING,s,n,{processing:t,createdBy:i,name:o});let m=await Xe.downloadAppBackup(a);await aP(c);let g=Le.AppBackupStatus.COMPLETE;try{await t.importAppFn(c,W.db.getDB(c),{file:{type:"application/gzip",path:m},key:m})}catch(y){W.logging.logAlert("App restore error",y),g=Le.AppBackupStatus.FAILED}await Xe.updateRestoreStatus(r.docId,f,g),pr.default.existsSync(m)&&pr.default.rmSync(m,{force:!0})})}async function sP(e,t){let r=e.data,n=r.appId,a=r.export.trigger,o=r.export.name,i=W.tenancy.getTenantIDFromAppID(n);await W.tenancy.doInTenant(i,async()=>{try{let{rev:s}=await Xe.updateBackupStatus(r.docId,Le.AppBackupStatus.STARTED);return Rf(a,i,n,{processing:t,doc:{id:r.docId,rev:s},name:o})}catch(s){W.logging.logAlert("App backup error",s)}})}var iP=async e=>{If(),await Cs(e.processing)},ve={...Xe,processing:Os,init:iP,getBackupQueue:Ct};var _f=async e=>{e.backups&&await ve.init(e.backups)};var se={};S(se,{create:()=>eM,find:()=>ZN,get:()=>XN,remove:()=>rM,update:()=>tM});var HA=C(_i()),Ze=require("@budibase/backend-core");var YA=require("@budibase/types");async function XN(e){let t=Ze.tenancy.getGlobalDB(),r=new Ze.db.QueryBuilder(t.name,YA.SearchIndex.USER);r.setIndexBuilder(Ze.db.searchIndexes.createUserIndex),r.setLimit(e.pageSize),r.addEqual("scimInfo.isSync",!0);for(let[a,o]of Object.entries(e.filters?.equal??{}))r.addEqual(a,o);r.setSort("_id"),r.setSkip(e.skip);let n=await r.run();return{users:n.rows,total:n.totalRows}}async function ZN(e){return await Ze.users.getById(e)}async function eM(e){let t=await Qe.getUserByEmail(e.email);if(t){if(t.scimInfo?.isSync)throw new Ze.HTTPError("User is already synched",409);e={...t,scimInfo:(0,HA.default)(t.scimInfo,e.scimInfo),password:void 0,firstName:e.firstName,lastName:e.lastName,updatedAt:e.updatedAt}}return await Qe.save(e,{requirePassword:!1})}async function tM(e,t){return await Qe.save(e,{requirePassword:!1,allowChangingEmail:t?.allowChangingEmail})}async function rM(e){return await Qe.destroy(e)}var mr={};S(mr,{create:()=>nM});var JA=C(_i());var zA=require("@budibase/backend-core");async function nM(e){let t=await Xa(e.name),r;if(!t)r=(await M.save(e)).id;else{if(t.scimInfo?.isSync)throw new zA.HTTPError("Group is already synched",409);r=t._id,t.users&&(await M.removeUsers(r,t.users.map(a=>a._id)),delete t.users),t.scimInfo=(0,JA.default)(t.scimInfo,e.scimInfo),await M.save(t)}return await M.get(r)}var Lt={};S(Lt,{logRequest:()=>aM,logResponse:()=>oM});var xi=require("@budibase/backend-core");async function aM(e){xi.logging.logWarn("SCIM request log",e)}async function oM(e){xi.logging.logWarn("SCIM response error",e)}var Li={};S(Li,{doInScimContext:()=>Pi,feature:()=>G,internalGroupOnly:()=>Ca,licensing:()=>XA,requireSCIM:()=>Ci,scimGroupOnly:()=>Sn,scimUserOnly:()=>In});var lt=require("@budibase/backend-core");var Ta=require("@budibase/types"),sM=(e={checkUsersLimit:!0})=>async(t,r)=>{if((e.licensingCheck?e.licensingCheck:()=>!!t.user)(t)){if(lt.env.SELF_HOSTED&&lt.env.DEFAULT_LICENSE)return t.user.license=eo,r();t.user.license=await Me.cache.getCachedLicense(t,{populateLicense:e.populateLicense,populateFreeLicense:e.populateFreeLicense}),e.checkUsersLimit&&(lt.utils.isServingApp(t)||lt.utils.isServingBuilder(t)||lt.utils.isServingBuilderPreview(t)||lt.utils.isPublicApiRequest(t))&&await Fe.usageLimitIsExceeded(Ta.StaticQuotaName.USERS,Ta.QuotaUsageType.STATIC)}return r()},XA=sM;var G={};S(G,{requireFeature:()=>iM,requireFeatures:()=>uM});var iM=e=>async(t,r)=>{await na(e),await r()},uM=(...e)=>async(t,r)=>{await Vo(e),await r()};var Pa=require("@budibase/backend-core");var Pi=async(e,t)=>(Pa.env.DISABLE_SCIM_CALLS||await Lt.logRequest({...e.request.toJSON(),body:e.request.body}),await Pa.context.doInScimContext(async()=>{let r=await t();return await Lt.logResponse({...e.response.toJSON(),body:e.response.body}),r}));var Ci=async(e,t)=>{await Jo(),await t()};var ZA=require("@budibase/backend-core");var In=e=>Oi(ZA.users.getById,e,!0),Sn=e=>Oi(D.get,e,!0),Ca=e=>Oi(D.get,e,!1);function Oi(e,t,r){return async(n,a)=>{let o=n.params[t];return typeof o!="string"&&n.throw(404),!!(await e(o)).scimInfo?.isSync!==r&&n.throw(404),a()}}var zi={};S(zi,{ai:()=>yh,appBackups:()=>tb,auditLogs:()=>$h,environmentVariables:()=>Nh,groups:()=>Th,scim:()=>Lb,users:()=>Nb});var ki=require("@budibase/types");var Gi={};S(Gi,{getLLM:()=>Ua,getLLMConfig:()=>Mi,openai:()=>mM,structuredOutputs:()=>wn});var ge=require("@budibase/backend-core"),ch=require("@budibase/types");var Di=C(require("openai"));var dt=require("@budibase/types");var eh=require("@budibase/backend-core");var wn=[];var ie=class e{constructor(t){this.messages=t}get responseFormat(){return this._responseFormat}format(t){if(t!=="text"&&t!=="json"&&!wn[t])throw new eh.HTTPError(`Format "${t}" is not allowed`,400);return this._responseFormat=t,this}user(t){return this.messages.push({role:"user",content:t}),this}system(t){return this.messages.push({role:"system",content:t}),this}static user(t){return new e([{role:"user",content:t}])}static system(t){return new e([{role:"system",content:t}])}static fromRequest(t){let r=new e(t.messages);return t.format&&r.format(t.format),r}};function qi(e){return ie.user(`Summarize this text:
39
39
  ${e}.
40
- Only return the summary.`)}function XA(e,t){return ie.user(`Return the category of this text: "${e}". Based on these categories: ${t.join(", ")}. Only return the category.`)}function ZA(e){return ie.user(`Clean the following string: "${e}". Remove any spelling mistakes or data issues. Only return the cleaned string itself and nothing else.`)}function eh(e){return ie.user(`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:
41
- ${e}`)}function th(e,t){return ie.user(`Translate the following text: "${e}" into ${t}. Only return the translation.`)}function rh(e){return ie.user(`Return the sentiment of this text: "${e}". Only return the sentiment.`)}function nh(e){return ie.user(`Search the web for the following: "${e}". Only return the top results.`)}function ah(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:
40
+ Only return the summary.`)}function th(e,t){return ie.user(`Return the category of this text: "${e}". Based on these categories: ${t.join(", ")}. Only return the category.`)}function rh(e){return ie.user(`Clean the following string: "${e}". Remove any spelling mistakes or data issues. Only return the cleaned string itself and nothing else.`)}function nh(e){return ie.user(`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:
41
+ ${e}`)}function ah(e,t){return ie.user(`Translate the following text: "${e}" into ${t}. Only return the translation.`)}function oh(e){return ie.user(`Return the sentiment of this text: "${e}". Only return the sentiment.`)}function sh(e){return ie.user(`Search the web for the following: "${e}". Only return the top results.`)}function ih(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:
42
42
 
43
43
  ${e.map(({readableBinding:a})=>`- $("${a}")`).join(`
44
44
  `)}`);let n="You do not have access to any snippets in this request.";return t.length>0&&(n=`The snippets you have access to are:
@@ -133,4 +133,4 @@ a variable, it will be provided to you as a binding.
133
133
 
134
134
  ${n}
135
135
 
136
- ${r}`)}var oh=require("@budibase/shared-core");function qi(e,t){return t.map(r=>e[r]).join(" ")}var ft=class{constructor({model:t,apiKey:r,measureUsage:n}){this.model=t,this.apiKey=r,this.measureUsage=n,this.maxTokens=parseInt(process.env.BUDIBASE_AI_MAX_PROMPT_TOKENS||"300")}async prompt(t){typeof t=="string"&&(t=ie.user(t));let r=await this.chatCompletion(t);return this.measureUsage&&r.tokensUsed!==void 0&&r.tokensUsed>0&&await as(r.tokensUsed),r}async summarizeText(t){return this.prompt(Li(t))}async generateCronExpression(t){return this.prompt(eh(t))}async operation(t,r){let n=this.promptForOperation(t,r);return this.prompt(n)}promptForOperation(t,r){let{operation:n,column:a,columns:o,language:i,categories:s,prompt:c}=t;switch(n){case dt.AIOperationEnum.SUMMARISE_TEXT:return Li(qi(r,o));case dt.AIOperationEnum.CLEAN_DATA:return ZA(r[a]);case dt.AIOperationEnum.TRANSLATE:return th(r[a],i);case dt.AIOperationEnum.CATEGORISE_TEXT:if(!s)throw Error("No categories provided for categorise text operation. Please provide categories.");return XA(qi(r,o),s.split(","));case dt.AIOperationEnum.SENTIMENT_ANALYSIS:return rh(r[a]);case dt.AIOperationEnum.PROMPT:return c;case dt.AIOperationEnum.SEARCH_WEB:return nh(qi(r,o));default:throw oh.utils.unreachable(n)}}async generateJs(t,r){let{bindings:n=[],snippets:a=[]}=r||{};return await this.prompt(ah(n,a).user(t))}};var qt=class extends ft{constructor({model:r,apiKey:n,measureUsage:a}){super({model:r,apiKey:n,measureUsage:a});this.client=new Ui.default({apiKey:n})}measureTokenUsage(r){if(!r)return 0;let n=r.prompt_tokens;return r.completion_tokens*3+n}async chatCompletion(r){try{let n=await this.client.chat.completions.create({model:this.model,messages:r.messages,max_tokens:this.maxTokens}),a=this.measureTokenUsage(n.usage);return{message:n.choices[0]?.message.content||void 0,tokensUsed:a}}catch(n){throw n instanceof Ui.default.APIError&&console.error(`OpenAI Prompt failed with error of type ${n.type} and status: ${n.status}:${n.code} - ${n.message}`),n}}};var Di=C(require("@anthropic-ai/sdk"));var Ca=class extends ft{constructor(r){super(r);this.client=new Di.default({apiKey:r.apiKey})}firstTextBlock(r){for(let n of r.content)if(n.type==="text")return n.text}async chatCompletion(r){try{let n=await this.client.messages.create({model:this.model,messages:r.messages.map(({content:o})=>({role:"user",content:o})),max_tokens:this.maxTokens});return{message:this.firstTextBlock(n)}}catch(n){throw n instanceof Di.default.APIError&&console.error(`Anthropic Prompt failed with error ${n.name} and status: ${n.status}`),n}}};var gt=require("@budibase/backend-core"),Oa=class extends ft{constructor(t){if(super(t),!gt.env.SELF_HOSTED)throw new Error("BudibaseAI LLM provider is only for use in self-host environments.");if(!gt.env.BUDICLOUD_URL)throw new Error("BUDICLOUD_URL is not set");if(!this.apiKey)throw new Error("BudibaseAI API key is not set")}async chatCompletion(t){let r=await fetch(`${gt.env.BUDICLOUD_URL}/api/ai/chat`,{method:"POST",headers:{"Content-Type":"application/json",[gt.constants.Header.LICENSE_KEY]:this.apiKey},body:JSON.stringify({messages:t.messages})});if(!r.ok)throw await gt.HTTPError.fromResponse(r);let n=await r.json();return{message:n.message,tokensUsed:n.tokensUsed}}};var Ut=require("dd-trace"),La="gpt-4o-mini",oM={OpenAI:qt,Anthropic:Ca,TogetherAI:qt,AzureOpenAI:qt,Custom:qt,BudibaseAI:Oa};function sM(e){for(let t in e)if(e[t].isDefault)return e[t]}async function iM(){return await Ut.tracer.trace("getAICustomConfig",async e=>{if(!await Jo()){e.addTags({enabled:!1,reason:"feature flag disabled"});return}if(ge.context.isSelfHostUsingCloud()){e.addTags({enabled:!1,reason:"is self host using cloud"});return}let t=await ge.configs.getAIConfig();if(!t){e.addTags({enabled:!1,reason:"no config found"});return}let r=sM(t.config);if(!r){e.addTags({enabled:!1,reason:"no provider found"});return}if(!r.apiKey){e.addTags({enabled:!1,reason:"no api key found"});return}return e.addTags({enabled:!0}),{provider:r.provider,model:r.defaultModel||La,apiKey:r.apiKey,measureUsage:!1}})}function uM(){return Ut.tracer.trace("getSelfHostOpenAIKeyConfig",e=>{if(!ge.env.SELF_HOSTED||!ge.env.OPENAI_API_KEY){e.addTags({enabled:!1,reason:"not self host or no api key"});return}return e.addTags({enabled:!0}),{provider:"OpenAI",model:La,apiKey:ge.env.OPENAI_API_KEY,measureUsage:!1}})}async function pM(){return await Ut.tracer.trace("getBudibaseAIConfig",async e=>{if(!await cn()){e.addTags({enabled:!1,reason:"feature flag disabled"});return}if(!ge.env.OPENAI_API_KEY){e.addTags({enabled:!1,reason:"no api key found"});return}return e.addTags({enabled:!0}),{provider:"OpenAI",apiKey:ge.env.OPENAI_API_KEY,model:La,measureUsage:!0}})}async function cM(){return await Ut.tracer.trace("getSelfHostBudibaseAIConfig",async e=>{if(!await ge.features.isEnabled(sh.FeatureFlag.AI_JS_GENERATION)){e.addTags({enabled:!1,reason:"feature flag disabled"});return}if(ge.context.isSelfHostUsingCloud()){e.addTags({enabled:!1,reason:"is self host using cloud"});return}let t=await jo();if(!t){e.addTags({enabled:!1,reason:"no license key found"});return}return e.addTags({enabled:!0}),{provider:"BudibaseAI",apiKey:t,model:La,measureUsage:!0}})}async function Bi(){return await Ut.tracer.trace("getLLMConfig",async()=>await iM()||uM()||await pM()||await cM())}async function qa(e){return await Ut.tracer.trace("getLLM",async t=>{let r=await Bi();if(!r){t.addTags({enabled:!1,reason:"no config found"});return}e&&(r.model=e);let n=oM[r.provider];if(!n){t.addTags({enabled:!1,reason:"no provider found",provider:r.provider});return}return new n(r)})}var $e=require("@budibase/backend-core");var lM=/```(?:\w+)?\n([\s\S]+?)\n```/;async function Gi(){let e=await qa();if(!e)throw new $e.HTTPError("No available LLM configurations",500);return e}async function ih(e){let t=await Gi(),{prompt:r}=e.request.body,{message:n}=await t.generateCronExpression(r);n?.startsWith("Error generating cron:")?e.throw(400,n):e.body={message:n}}async function uh(e){await $e.features.isEnabled(Mi.FeatureFlag.AI_JS_GENERATION)||e.throw(500,"AI JS generation is disabled");let t=await Gi();await $e.context.ensureSnippetContext();let n=$e.context.getCurrentContext()?.snippets||[],{prompt:a,bindings:o=[]}=e.request.body,i=(await t.generateJs(a,{bindings:o,snippets:n})).message||"",s=i.match(lM);s&&(i=s[1]),e.body={code:i}}async function ph(e){await $e.features.isEnabled(Mi.FeatureFlag.AI_JS_GENERATION)||e.throw(500,"AI JS generation is disabled"),$e.env.SELF_HOSTED&&e.throw(500,"Budibase AI endpoints are not available in self-host");let t=await Gi(),r=ie.fromRequest(e.request.body),{message:n,tokensUsed:a}=await t.prompt(r);e.body={message:n,tokensUsed:a}}var lh=C(require("@koa/router")),ki=require("@budibase/backend-core");var wn=require("@budibase/backend-core");async function ch(e,t){let r=e.request.headers[wn.constants.Header.LICENSE_KEY];Array.isArray(r)&&(r=r[0]),r||e.throw(403,"License key not provided");let n=await Fo(r);n||e.throw(403,"License not found or invalid"),n.tenantId||e.throw(403,"License does not have a tenant ID"),await wn.context.doInSelfHostTenantUsingCloud(n.tenantId,async()=>{await wn.context.doInLicenseContext(n,async()=>{await t()})})}var Ua=new lh.default;Ua.post("/api/ai/cron",ki.auth.builderOrAdmin,ih);Ua.post("/api/ai/js",ki.auth.builderOrAdmin,uh);Ua.post("/api/ai/chat",ch,ph);var dh=Ua;async function fh(e){let t=e.request.body;if(t.name=t.name.trim(),delete t.roles,t._id){let n=await Pt(t._id);t.roles=n.roles,t.scimInfo=n.scimInfo}let r=await ur(t);e.body={_id:r.id,_rev:r.rev}}async function gh(e){let t=e.params.groupId,r=e.request.body.add,n=e.request.body.remove;(r&&!Array.isArray(r)||n&&!Array.isArray(n))&&e.throw(400,"Must supply a list of users to add or to remove");let a,o;r&&(a=await ss(t,r)),n&&(o=await is(t,n)),e.body={added:a,removed:o}}async function mh(e){let t=e.params.groupId,r=e.request.body.add,n=e.request.body.remove;(r&&!Array.isArray(r)||n&&!Array.isArray(n))&&e.throw(400,"Must supply a list of objects, with appId and roleId to add or remove"),e.body=await us(t,{appsToAdd:r,appsToRemove:n})}async function yh(e){e.body={data:await dn()}}async function Ah(e){let{groupId:t,rev:r}=e.params;try{await os(t,r),e.body={message:"Group deleted successfully"}}catch(n){e.throw(n.status,n)}}async function hh(e){try{e.body=await Pt(e.params.groupId)}catch(t){e.throw(t.status,t)}}async function bh(e){let{pageSize:t=10,bookmark:r,emailSearch:n}=e.request.query,a=e.params.groupId,o={limit:t+1},i=await On(a,{...o,emailSearch:n,bookmark:r}),s=n?i[t]?.email:i[t]?._id,c=!!s;e.body={users:i.slice(0,t),bookmark:s,hasNextPage:c}}async function Ih(e){let{groupId:t,appId:r}=e.params;await ps(t,r),e.body={message:"Group app builder access updated."}}async function Sh(e){let{groupId:t,appId:r}=e.params;await cs(t,r),e.body={message:"group app builder access removed."}}var wh=C(require("@koa/router")),me=C(require("joi"));var Ee=require("@budibase/types"),Ve=require("@budibase/backend-core"),vh=new wh.default;function gM(){return Ve.auth.joiValidator.body(me.default.object({_id:me.default.string().optional(),_rev:me.default.string().optional(),color:me.default.string().required(),icon:me.default.string().required(),name:me.default.string().trim().required().max(50),role:me.default.string().optional(),users:me.default.array().optional(),apps:me.default.array().optional(),roles:me.default.object().optional(),createdAt:me.default.string().optional(),updatedAt:me.default.string().optional()}).required())}vh.post("/api/global/groups",Ve.auth.adminOnly,G.requireFeature(Ee.Feature.USER_GROUPS),gM(),fh).get("/api/global/groups",G.requireFeature(Ee.Feature.USER_GROUPS),yh).delete("/api/global/groups/:groupId/:rev",G.requireFeature(Ee.Feature.USER_GROUPS),Ve.auth.adminOnly,Pa("groupId"),Ah).get("/api/global/groups/:groupId",G.requireFeature(Ee.Feature.USER_GROUPS),Ve.auth.builderOrAdmin,hh).get("/api/global/groups/:groupId/users",G.requireFeature(Ee.Feature.USER_GROUPS),Ve.auth.builderOrAdmin,bh).post("/api/global/groups/:groupId/users",Ve.auth.adminOnly,G.requireFeature(Ee.Feature.USER_GROUPS),Pa("groupId"),gh).post("/api/global/groups/:groupId/apps",Ve.auth.builderOrAdmin,G.requireFeature(Ee.Feature.USER_GROUPS),mh).post("/api/global/groups/:groupId/app/:appId/builder",Ve.auth.builderOrAdmin,G.requireFeatures(Ee.Feature.USER_GROUPS,Ee.Feature.APP_BUILDERS),Ih).delete("/api/global/groups/:groupId/app/:appId/builder",Ve.auth.builderOrAdmin,G.requireFeatures(Ee.Feature.USER_GROUPS,Ee.Feature.APP_BUILDERS),Sh);var Eh=vh;var Fi=require("@budibase/types");var Qi=require("@budibase/backend-core");async function Rh(e){e.body={encryptionKeyAvailable:je.isEncryptionKeyAvailable()}}async function _h(e){e.body={variables:await je.fetch()}}async function xh(e){let{name:t,production:r,development:n}=e.request.body;await je.update(t,{production:r,development:n});let a=[Fi.AppEnvironment.PRODUCTION];r!==n&&a.push(Fi.AppEnvironment.DEVELOPMENT),await Qi.events.environmentVariable.created(t,a),e.body={message:`Environment variable "${t}" created.`}}async function Th(e){let{production:t,development:r}=e.request.body,n=e.params.varName;await je.update(n,{production:t,development:r}),e.body={message:`Environment variable "${n}" updated.`}}async function Ph(e){let t=e.params.varName;await je.remove(t),await Qi.events.environmentVariable.deleted(t),e.body={message:`Environment variable "${t}" deleted.`}}var Dt=require("@budibase/backend-core"),Oh=C(require("@koa/router")),vn=C(require("joi")),Lh=new Oh.default;function Ch(){return Dt.auth.joiValidator.body(vn.default.object({name:vn.default.string().optional(),production:vn.default.string().required(),development:vn.default.string().required()}))}Lh.get("/api/env/variables/status",Dt.auth.builderOrAdmin,Rh).get("/api/env/variables",Dt.auth.builderOrAdmin,_h).post("/api/env/variables",Dt.auth.builderOrAdmin,Ch(),xh).patch("/api/env/variables/:varName",Dt.auth.builderOrAdmin,Ch(),Th).delete("/api/env/variables/:varName",Dt.auth.builderOrAdmin,Ph);var qh=Lh;var ji=require("@budibase/backend-core");async function Uh(e){let t=e.request.body,r=await ct.fetch(t);await ji.events.auditLog.filtered(t),e.body=r}async function Dh(e){let t=e.request.body,{stream:r}=ct.download(t);await ji.events.auditLog.downloaded(t),e.attachment(`audit-logs-${Date.now()}.log`),e.body=r}async function Bh(e){e.body={events:ct.definitions()}}var Mh=require("@budibase/types"),Bt=require("@budibase/backend-core"),Gh=C(require("@koa/router")),Re=C(require("joi"));function Nh(){return Bt.auth.joiValidator.body(Re.default.object({userIds:Re.default.array().items(Re.default.string()).optional(),appIds:Re.default.array().items(Re.default.string()).optional(),events:Re.default.array().items(Re.default.string().valid(...Object.values(Mh.Event))).optional(),startDate:Re.default.string().optional().allow(""),endDate:Re.default.string().optional().allow(""),fullSearch:Re.default.string().optional().allow(""),bookmark:Re.default.number()}))}var kh=new Gh.default;kh.post("/api/global/auditlogs/search",Bt.auth.adminOnly,Nh(),Uh).get("/api/global/auditlogs/download",Bt.auth.adminOnly,Bt.middleware.querystringToBody,Nh(),Dh).get("/api/global/auditlogs/definitions",Bt.auth.adminOnly,Bh);var Fh=kh;var Wi=require("@budibase/types");var Qh=require("@budibase/backend-core");async function yr(e,t){await Wt.appExists(t)||e.throw(400,`Provided app ID: ${t} - is invalid.`)}async function jh(e){let t=e.params.appId;await yr(e,t);let r=e.request.body,n=e.user?._id,a=await ve.triggerAppBackup(t,Wi.AppBackupTrigger.MANUAL,{name:r.name,createdBy:n});a||e.throw(500,"Unable to start backup."),e.body={backupId:a,message:"Backup triggered - process starting."}}async function Wh(e){let t=e.params.appId;await yr(e,t);let r=e.params.backupId,n=e.request.body.name,a=await ve.triggerAppRestore(t,r,n,e.user?._id);a||e.throw(500,"Unable to start restore."),await Qh.events.backup.appBackupRestored(a.metadata),e.body={restoredId:a?.restoreId,message:"Restore triggered - process starting."}}async function $h(e){let t=e.params.appId;await yr(e,t);let r=e.params.backupId;await ve.deleteAppBackup(r),e.body={message:"Backup deleted successfully."}}async function Vh(e){let t=e.params.appId;await yr(e,t);let r=e.request.body;r?.trigger&&(r.trigger=r.trigger.toLowerCase(),Object.values(Wi.AppBackupTrigger).includes(r.trigger)||e.throw(400,"Provided trigger is not a valid option.")),e.body=await ve.fetchAppBackups(t,{paginate:!0,...r})}async function Kh(e){let t=e.params.appId;await yr(e,t);let r=e.params.backupId,n=e.request.body;e.body=await ve.updateAppBackup(r,n.name)}async function Yh(e){let t=e.params.appId;await yr(e,t);let r=e.params.backupId,{metadata:n,stream:a}=await ve.getBackupDownloadStream(r);e.attachment(`backup-${n.timestamp}.tar.gz`),e.body=a}var Hh=C(require("@koa/router")),Nt=C(require("joi")),Da=require("@budibase/types"),mt=require("@budibase/backend-core"),Jh=new Hh.default;function hM(){return mt.auth.joiValidator.body(Nt.default.object({trigger:Nt.default.string().valid(...Object.values(Da.AppBackupTrigger)),type:Nt.default.string().valid(...Object.values(Da.AppBackupType)),startDate:Nt.default.date(),endDate:Nt.default.date(),page:Nt.default.string()}))}Jh.post("/api/apps/:appId/backups",mt.auth.builderOrAdmin,jh).post("/api/apps/:appId/backups/search",mt.auth.builderOrAdmin,hM(),Vh).get("/api/apps/:appId/backups/:backupId/file",mt.auth.builderOrAdmin,Yh).patch("/api/apps/:appId/backups/:backupId",mt.auth.builderOrAdmin,Kh).delete("/api/apps/:appId/backups/:backupId",mt.auth.builderOrAdmin,$h).post("/api/apps/:appId/backups/:backupId/import",mt.auth.builderOrAdmin,Wh);var zh=Jh;var xb=C(require("@koa/router"));var Ba=require("scim-patch");var Zh=require("@budibase/backend-core");function Xh(e,t){let r=e.request.query[t];if(r!==void 0)return+r}var eb=async e=>{let t=Xh(e,"pageSize")??20,r=Xh(e,"startIndex"),n;e.request.query.filter&&(n=Q.user.userFilters(e.request.query.filter));let a=await se.get({pageSize:t,skip:r,filters:n});e.body={schemas:["urn:ietf:params:scim:api:messages:2.0:ListResponse"],totalResults:a.total,Resources:a.users.map(Q.user.toScimUserResponse),startIndex:(r||0)+1,itemsPerPage:t}},tb=async e=>{let{id:t}=e.params;typeof t!="string"&&e.throw(404);let r=await se.find(t);e.body=Q.user.toScimUserResponse(r)},rb=async e=>{let t=Q.user.fromScimUser(e.request.body);try{let r=await se.create(t);e.body=Q.user.toScimUserResponse(r)}catch(r){throw r instanceof Zh.EmailUnavailableError&&e.throw(409,"Email already in use"),r}};function bM(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 nb=async e=>{let t=await se.find(e.params.id);t||e.throw(404);let r=Q.user.toScimUserResponse(t),n=e.request.body;try{(0,Ba.patchBodyValidation)(n)}catch{}if(bM(n))return $i(e);let a;try{a=(0,Ba.scimPatch)(r,n.Operations)}catch{}a||e.throw(500);let o=Q.user.fromScimUser(a);await se.update(o,{allowChangingEmail:!0}),e.body=Q.user.toScimUserResponse(o)},$i=async e=>{let{id:t}=e.params;typeof t!="string"&&e.throw(404),await se.remove(t),e.status=204};var bb=C(hb()),Ib=require("@budibase/shared-core"),Na=require("scim-patch");var Ma=require("scim2-parse-filter");function Sb(e,t){for(let r of t.split(","))delete e[r]}var wb=async e=>{let r=(await M.fetch()).filter(o=>o.scimInfo?.isSync).map(Q.group.toScimGroupResponse),{filter:n,excludedAttributes:a}=e.request.query;if(n){let o=(0,Ma.filter)((0,Ma.parse)(n));r=r.filter(o)}a&&r.forEach(o=>{Sb(o,a)}),e.body={schemas:["urn:ietf:params:scim:api:messages:2.0:ListResponse"],totalResults:r.length,Resources:r,startIndex:1,itemsPerPage:r.length}},vb=async e=>{let t=Q.group.fromScimGroup(e.request.body),r=await mr.create(t);e.body=Q.group.toScimGroupResponse(r)},Eb=async e=>{let{id:t}=e.params,r=await M.get(t),n=Q.group.toScimGroupResponse(r),{excludedAttributes:a}=e.request.query;a&&Sb(n,a),e.body=n},Rb=async e=>{let{id:t}=e.params,r=await M.get(t);await M.remove(t,r._rev),e.status=204},_b=async e=>{let{id:t}=e.params,r=await M.get(t),n=Q.group.toScimGroupResponse(r),a=e.request.body;try{(0,Na.patchBodyValidation)(a)}catch{e.throw(400)}let{true:o,false:i}=(0,bb.default)(a.Operations,s=>s.path==="members");if(i?.length){let s=(0,Na.scimPatch)(n,i);s||e.throw(500);let c={...Q.group.fromScimGroup(s),_rev:r._rev};await M.save(c)}if(o?.length){let s=[],c=[];for(let{op:f,value:m}of o)switch(f){case"add":case"Add":for(let g of m)s.push(await se.find(g.value));break;case"remove":case"Remove":for(let g of m)c.push(await se.find(g.value));break;case"replace":case"Replace":throw new Error("Replacing members is not allowed");default:Ib.utils.unreachable(f)}s.length&&await M.addUsers(t,s.map(f=>f._id)),c.length&&await M.removeUsers(t,c.map(f=>f._id))}e.body=Q.group.toScimGroupResponse(await M.get(t))};var En=require("@budibase/types"),ye=new xb.default({prefix:"/api/global/scim/v2"});ye.use(Pi);ye.use(Ti);ye.get("/users",eb);ye.get("/users/:id",In("id"),tb);ye.post("/users",rb);ye.patch("/users/:id",In("id"),nb);ye.delete("/users/:id",In("id"),$i);ye.get("/groups",wb);ye.post("/groups",G.requireFeature(En.Feature.USER_GROUPS),vb);ye.get("/groups/:id",G.requireFeature(En.Feature.USER_GROUPS),Sn("id"),Eb);ye.delete("/groups/:id",G.requireFeature(En.Feature.USER_GROUPS),Sn("id"),Rb);ye.patch("/groups/:id",G.requireFeature(En.Feature.USER_GROUPS),Sn("id"),_b);var Tb=ye;var Ob=C(require("@koa/router"));var Vi=require("@budibase/backend-core");async function Pb(e){let{userId:t,appId:r}=e.params,n=await Je.db.getUser(t);if(Vi.users.isGlobalBuilder(n)){e.body={message:"User already admin - no permissions updated."};return}await Je.addAppBuilder(n,r),e.body={message:`User "${n.email}" app builder access updated.`}}async function Cb(e){let{userId:t,appId:r}=e.params,n=await Je.db.getUser(t);if(Vi.users.isGlobalBuilder(n)){e.body={message:"User already admin - no permissions removed."};return}await Je.removeAppBuilder(n,r),e.body={message:`User "${n.email}" app builder access removed.`}}var Ki=require("@budibase/types"),Yi=require("@budibase/backend-core"),Lb=new Ob.default;Lb.post("/api/global/users/:userId/app/:appId/builder",Yi.auth.builderOrAdmin,G.requireFeatures(Ki.Feature.APP_BUILDERS),Pb).delete("/api/global/users/:userId/app/:appId/builder",Yi.auth.builderOrAdmin,G.requireFeatures(Ki.Feature.APP_BUILDERS),Cb);var qb=Lb;var Q={};S(Q,{group:()=>zi,user:()=>Ji});var Ji={};S(Ji,{fromScimUser:()=>YM,toScimUserResponse:()=>$M,userFilters:()=>HM});var Ga=require("@budibase/types"),Ub=require("scim2-parse-filter"),Db=require("@budibase/backend-core"),Bb=require("@budibase/shared-core"),{unreachable:WM}=Bb.utils,$M=e=>{let{isSync:t,roles:r,...n}=e.scimInfo||{},a={...n,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===Ga.UserStatus.ACTIVE};return(e.firstName||e.lastName)&&(a.name={formatted:[e.firstName,e.lastName].filter(o=>o).join(" "),familyName:e.lastName,givenName:e.firstName}),a},VM=e=>!!e?.id;function KM(e){if(Db.utils.validEmail(e.userName))return e.userName;if(e.emails)return e.emails.find(t=>t.primary)?.value||e.emails[0]?.value}var YM=e=>{let t=VM(e)?e:void 0,r=KM(e);if(!r)throw new Error("Email is required");let n;switch(e.active){case"True":case"true":case!0:n=!0;break;case"False":case"false":case!1:n=!1;break;default:WM(e.active)}let a,o;return e.name?.givenName?(a=e.name?.givenName,o=e.name?.familyName):a=e.displayName,{tenantId:"",_id:t?.id,userId:t?.id,email:r,firstName:a,lastName:o,scimInfo:{...e,isSync:!0},roles:{},status:n?Ga.UserStatus.ACTIVE:Ga.UserStatus.INACTIVE,createdAt:t?.meta.created.getTime(),updatedAt:t?.meta.lastModified.toISOString()}},HM=e=>{let t={equal:{}},r=(0,Ub.parse)(e);function n(a){switch(a.op){case"eq":{let o=a.attrPath,i;switch(o){case"emails.value":i="email";break;default:i=`scimInfo.${o}`}t.equal[i]=a.compValue;break}case"and":for(let o of a.filters)n(o);break;default:console.warn("Filter not handled",{filter:a})}}return n(r),t};var zi={};S(zi,{fromScimGroup:()=>XM,toScimGroupResponse:()=>JM});var JM=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}))}),zM=e=>!!e?.id,XM=e=>{let t=zM(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()}};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});
136
+ ${r}`)}var uh=require("@budibase/shared-core");function Ui(e,t){return t.map(r=>e[r]).join(" ")}var ft=class{constructor({model:t,apiKey:r,measureUsage:n}){this.model=t,this.apiKey=r,this.measureUsage=n,this.maxTokens=parseInt(process.env.BUDIBASE_AI_MAX_PROMPT_TOKENS||"300")}async prompt(t){typeof t=="string"&&(t=ie.user(t));let r=await this.chatCompletion(t);return this.measureUsage&&r.tokensUsed!==void 0&&r.tokensUsed>0&&await os(r.tokensUsed),r}async summarizeText(t){return this.prompt(qi(t))}async generateCronExpression(t){return this.prompt(nh(t))}async operation(t,r){let n=this.promptForOperation(t,r);return this.prompt(n)}promptForOperation(t,r){let{operation:n,column:a,columns:o,language:i,categories:s,prompt:c}=t;switch(n){case dt.AIOperationEnum.SUMMARISE_TEXT:return qi(Ui(r,o));case dt.AIOperationEnum.CLEAN_DATA:return rh(r[a]);case dt.AIOperationEnum.TRANSLATE:return ah(r[a],i);case dt.AIOperationEnum.CATEGORISE_TEXT:if(!s)throw Error("No categories provided for categorise text operation. Please provide categories.");return th(Ui(r,o),s.split(","));case dt.AIOperationEnum.SENTIMENT_ANALYSIS:return oh(r[a]);case dt.AIOperationEnum.PROMPT:return c;case dt.AIOperationEnum.SEARCH_WEB:return sh(Ui(r,o));default:throw uh.utils.unreachable(n)}}async generateJs(t,r){let{bindings:n=[],snippets:a=[]}=r||{};return await this.prompt(ih(n,a).user(t))}};var ph=require("openai/helpers/zod");function Bi(e){if(!e)return;if(e==="text")return{type:"text"};if(e==="json")return{type:"json_object"};let{validator:t,key:r}=wn[e];return(0,ph.zodResponseFormat)(t,r)}var qt=class extends ft{constructor({model:r,apiKey:n,measureUsage:a}){super({model:r,apiKey:n,measureUsage:a});this.client=new Di.default({apiKey:n})}measureTokenUsage(r){if(!r)return 0;let n=r.prompt_tokens;return r.completion_tokens*3+n}async chatCompletion(r){try{let n=await this.client.chat.completions.create({model:this.model,messages:r.messages,max_tokens:this.maxTokens,response_format:Bi(r.responseFormat)}),a=this.measureTokenUsage(n.usage);return{message:n.choices[0]?.message.content||void 0,tokensUsed:a}}catch(n){throw n instanceof Di.default.APIError&&console.error(`OpenAI Prompt failed with error of type ${n.type} and status: ${n.status}:${n.code} - ${n.message}`),n}}};var Ni=C(require("@anthropic-ai/sdk"));var Oa=class extends ft{constructor(r){super(r);this.client=new Ni.default({apiKey:r.apiKey})}firstTextBlock(r){for(let n of r.content)if(n.type==="text")return n.text}async chatCompletion(r){try{let n=await this.client.messages.create({model:this.model,messages:r.messages.map(({content:o})=>({role:"user",content:o})),max_tokens:this.maxTokens});return{message:this.firstTextBlock(n)}}catch(n){throw n instanceof Ni.default.APIError&&console.error(`Anthropic Prompt failed with error ${n.name} and status: ${n.status}`),n}}};var gt=require("@budibase/backend-core"),La=class extends ft{constructor(t){if(super(t),!gt.env.SELF_HOSTED)throw new Error("BudibaseAI LLM provider is only for use in self-host environments.");if(!gt.env.BUDICLOUD_URL)throw new Error("BUDICLOUD_URL is not set");if(!this.apiKey)throw new Error("BudibaseAI API key is not set")}async chatCompletion(t){let r=await fetch(`${gt.env.BUDICLOUD_URL}/api/ai/chat`,{method:"POST",headers:{"Content-Type":"application/json",[gt.constants.Header.LICENSE_KEY]:this.apiKey},body:JSON.stringify({messages:t.messages})});if(!r.ok)throw await gt.HTTPError.fromResponse(r);let n=await r.json();return{message:n.message,tokensUsed:n.tokensUsed}}};var Ut=require("dd-trace"),qa="gpt-4o-mini",pM={OpenAI:qt,Anthropic:Oa,TogetherAI:qt,AzureOpenAI:qt,Custom:qt,BudibaseAI:La};function cM(e){for(let t in e)if(e[t].isDefault)return e[t]}async function lM(){return await Ut.tracer.trace("getAICustomConfig",async e=>{if(!await zo()){e.addTags({enabled:!1,reason:"feature flag disabled"});return}if(ge.context.isSelfHostUsingCloud()){e.addTags({enabled:!1,reason:"is self host using cloud"});return}let t=await ge.configs.getAIConfig();if(!t){e.addTags({enabled:!1,reason:"no config found"});return}let r=cM(t.config);if(!r){e.addTags({enabled:!1,reason:"no provider found"});return}if(!r.apiKey){e.addTags({enabled:!1,reason:"no api key found"});return}return e.addTags({enabled:!0}),{provider:r.provider,model:r.defaultModel||qa,apiKey:r.apiKey,measureUsage:!1}})}function dM(){return Ut.tracer.trace("getSelfHostOpenAIKeyConfig",e=>{if(!ge.env.SELF_HOSTED||!ge.env.OPENAI_API_KEY){e.addTags({enabled:!1,reason:"not self host or no api key"});return}return e.addTags({enabled:!0}),{provider:"OpenAI",model:qa,apiKey:ge.env.OPENAI_API_KEY,measureUsage:!1}})}async function fM(){return await Ut.tracer.trace("getBudibaseAIConfig",async e=>{if(!await cn()){e.addTags({enabled:!1,reason:"feature flag disabled"});return}if(!ge.env.OPENAI_API_KEY){e.addTags({enabled:!1,reason:"no api key found"});return}return e.addTags({enabled:!0}),{provider:"OpenAI",apiKey:ge.env.OPENAI_API_KEY,model:qa,measureUsage:!0}})}async function gM(){return await Ut.tracer.trace("getSelfHostBudibaseAIConfig",async e=>{if(!await ge.features.isEnabled(ch.FeatureFlag.AI_JS_GENERATION)){e.addTags({enabled:!1,reason:"feature flag disabled"});return}if(ge.context.isSelfHostUsingCloud()){e.addTags({enabled:!1,reason:"is self host using cloud"});return}let t=await Wo();if(!t){e.addTags({enabled:!1,reason:"no license key found"});return}return e.addTags({enabled:!0}),{provider:"BudibaseAI",apiKey:t,model:qa,measureUsage:!0}})}async function Mi(){return await Ut.tracer.trace("getLLMConfig",async()=>await lM()||dM()||await fM()||await gM())}async function Ua(e){return await Ut.tracer.trace("getLLM",async t=>{let r=await Mi();if(!r){t.addTags({enabled:!1,reason:"no config found"});return}e&&(r.model=e);let n=pM[r.provider];if(!n){t.addTags({enabled:!1,reason:"no provider found",provider:r.provider});return}return new n(r)})}var mM={parseResponseFormat:Bi};var $e=require("@budibase/backend-core");var yM=/```(?:\w+)?\n([\s\S]+?)\n```/;async function Fi(){let e=await Ua();if(!e)throw new $e.HTTPError("No available LLM configurations",500);return e}async function lh(e){let t=await Fi(),{prompt:r}=e.request.body,{message:n}=await t.generateCronExpression(r);n?.startsWith("Error generating cron:")?e.throw(400,n):e.body={message:n}}async function dh(e){await $e.features.isEnabled(ki.FeatureFlag.AI_JS_GENERATION)||e.throw(500,"AI JS generation is disabled");let t=await Fi();await $e.context.ensureSnippetContext();let n=$e.context.getCurrentContext()?.snippets||[],{prompt:a,bindings:o=[]}=e.request.body,i=(await t.generateJs(a,{bindings:o,snippets:n})).message||"",s=i.match(yM);s&&(i=s[1]),e.body={code:i}}async function fh(e){await $e.features.isEnabled(ki.FeatureFlag.AI_JS_GENERATION)||e.throw(500,"AI JS generation is disabled"),$e.env.SELF_HOSTED&&e.throw(500,"Budibase AI endpoints are not available in self-host");let t=await Fi(),r=ie.fromRequest(e.request.body),{message:n,tokensUsed:a}=await t.prompt(r);e.body={message:n,tokensUsed:a}}var mh=C(require("@koa/router")),Qi=require("@budibase/backend-core");var vn=require("@budibase/backend-core");async function gh(e,t){let r=e.request.headers[vn.constants.Header.LICENSE_KEY];Array.isArray(r)&&(r=r[0]),r||e.throw(403,"License key not provided");let n=await Qo(r);n||e.throw(403,"License not found or invalid"),n.tenantId||e.throw(403,"License does not have a tenant ID"),await vn.context.doInSelfHostTenantUsingCloud(n.tenantId,async()=>{await vn.context.doInLicenseContext(n,async()=>{await t()})})}var Da=new mh.default;Da.post("/api/ai/cron",Qi.auth.builderOrAdmin,lh);Da.post("/api/ai/js",Qi.auth.builderOrAdmin,dh);Da.post("/api/ai/chat",gh,fh);var yh=Da;async function Ah(e){let t=e.request.body;if(t.name=t.name.trim(),delete t.roles,t._id){let n=await Pt(t._id);t.roles=n.roles,t.scimInfo=n.scimInfo}let r=await ur(t);e.body={_id:r.id,_rev:r.rev}}async function hh(e){let t=e.params.groupId,r=e.request.body.add,n=e.request.body.remove;(r&&!Array.isArray(r)||n&&!Array.isArray(n))&&e.throw(400,"Must supply a list of users to add or to remove");let a,o;r&&(a=await is(t,r)),n&&(o=await us(t,n)),e.body={added:a,removed:o}}async function bh(e){let t=e.params.groupId,r=e.request.body.add,n=e.request.body.remove;(r&&!Array.isArray(r)||n&&!Array.isArray(n))&&e.throw(400,"Must supply a list of objects, with appId and roleId to add or remove"),e.body=await ps(t,{appsToAdd:r,appsToRemove:n})}async function Ih(e){e.body={data:await dn()}}async function Sh(e){let{groupId:t,rev:r}=e.params;try{await ss(t,r),e.body={message:"Group deleted successfully"}}catch(n){e.throw(n.status,n)}}async function wh(e){try{e.body=await Pt(e.params.groupId)}catch(t){e.throw(t.status,t)}}async function vh(e){let{pageSize:t=10,bookmark:r,emailSearch:n}=e.request.query,a=e.params.groupId,o={limit:t+1},i=await Ln(a,{...o,emailSearch:n,bookmark:r}),s=n?i[t]?.email:i[t]?._id,c=!!s;e.body={users:i.slice(0,t),bookmark:s,hasNextPage:c}}async function Eh(e){let{groupId:t,appId:r}=e.params;await cs(t,r),e.body={message:"Group app builder access updated."}}async function Rh(e){let{groupId:t,appId:r}=e.params;await ls(t,r),e.body={message:"group app builder access removed."}}var _h=C(require("@koa/router")),me=C(require("joi"));var Ee=require("@budibase/types"),Ve=require("@budibase/backend-core"),xh=new _h.default;function bM(){return Ve.auth.joiValidator.body(me.default.object({_id:me.default.string().optional(),_rev:me.default.string().optional(),color:me.default.string().required(),icon:me.default.string().required(),name:me.default.string().trim().required().max(50),role:me.default.string().optional(),users:me.default.array().optional(),apps:me.default.array().optional(),roles:me.default.object().optional(),createdAt:me.default.string().optional(),updatedAt:me.default.string().optional()}).required())}xh.post("/api/global/groups",Ve.auth.adminOnly,G.requireFeature(Ee.Feature.USER_GROUPS),bM(),Ah).get("/api/global/groups",G.requireFeature(Ee.Feature.USER_GROUPS),Ih).delete("/api/global/groups/:groupId/:rev",G.requireFeature(Ee.Feature.USER_GROUPS),Ve.auth.adminOnly,Ca("groupId"),Sh).get("/api/global/groups/:groupId",G.requireFeature(Ee.Feature.USER_GROUPS),Ve.auth.builderOrAdmin,wh).get("/api/global/groups/:groupId/users",G.requireFeature(Ee.Feature.USER_GROUPS),Ve.auth.builderOrAdmin,vh).post("/api/global/groups/:groupId/users",Ve.auth.adminOnly,G.requireFeature(Ee.Feature.USER_GROUPS),Ca("groupId"),hh).post("/api/global/groups/:groupId/apps",Ve.auth.builderOrAdmin,G.requireFeature(Ee.Feature.USER_GROUPS),bh).post("/api/global/groups/:groupId/app/:appId/builder",Ve.auth.builderOrAdmin,G.requireFeatures(Ee.Feature.USER_GROUPS,Ee.Feature.APP_BUILDERS),Eh).delete("/api/global/groups/:groupId/app/:appId/builder",Ve.auth.builderOrAdmin,G.requireFeatures(Ee.Feature.USER_GROUPS,Ee.Feature.APP_BUILDERS),Rh);var Th=xh;var ji=require("@budibase/types");var Wi=require("@budibase/backend-core");async function Ph(e){e.body={encryptionKeyAvailable:je.isEncryptionKeyAvailable()}}async function Ch(e){e.body={variables:await je.fetch()}}async function Oh(e){let{name:t,production:r,development:n}=e.request.body;await je.update(t,{production:r,development:n});let a=[ji.AppEnvironment.PRODUCTION];r!==n&&a.push(ji.AppEnvironment.DEVELOPMENT),await Wi.events.environmentVariable.created(t,a),e.body={message:`Environment variable "${t}" created.`}}async function Lh(e){let{production:t,development:r}=e.request.body,n=e.params.varName;await je.update(n,{production:t,development:r}),e.body={message:`Environment variable "${n}" updated.`}}async function qh(e){let t=e.params.varName;await je.remove(t),await Wi.events.environmentVariable.deleted(t),e.body={message:`Environment variable "${t}" deleted.`}}var Dt=require("@budibase/backend-core"),Dh=C(require("@koa/router")),En=C(require("joi")),Bh=new Dh.default;function Uh(){return Dt.auth.joiValidator.body(En.default.object({name:En.default.string().optional(),production:En.default.string().required(),development:En.default.string().required()}))}Bh.get("/api/env/variables/status",Dt.auth.builderOrAdmin,Ph).get("/api/env/variables",Dt.auth.builderOrAdmin,Ch).post("/api/env/variables",Dt.auth.builderOrAdmin,Uh(),Oh).patch("/api/env/variables/:varName",Dt.auth.builderOrAdmin,Uh(),Lh).delete("/api/env/variables/:varName",Dt.auth.builderOrAdmin,qh);var Nh=Bh;var $i=require("@budibase/backend-core");async function Mh(e){let t=e.request.body,r=await ct.fetch(t);await $i.events.auditLog.filtered(t),e.body=r}async function Gh(e){let t=e.request.body,{stream:r}=ct.download(t);await $i.events.auditLog.downloaded(t),e.attachment(`audit-logs-${Date.now()}.log`),e.body=r}async function kh(e){e.body={events:ct.definitions()}}var Qh=require("@budibase/types"),Bt=require("@budibase/backend-core"),jh=C(require("@koa/router")),Re=C(require("joi"));function Fh(){return Bt.auth.joiValidator.body(Re.default.object({userIds:Re.default.array().items(Re.default.string()).optional(),appIds:Re.default.array().items(Re.default.string()).optional(),events:Re.default.array().items(Re.default.string().valid(...Object.values(Qh.Event))).optional(),startDate:Re.default.string().optional().allow(""),endDate:Re.default.string().optional().allow(""),fullSearch:Re.default.string().optional().allow(""),bookmark:Re.default.number()}))}var Wh=new jh.default;Wh.post("/api/global/auditlogs/search",Bt.auth.adminOnly,Fh(),Mh).get("/api/global/auditlogs/download",Bt.auth.adminOnly,Bt.middleware.querystringToBody,Fh(),Gh).get("/api/global/auditlogs/definitions",Bt.auth.adminOnly,kh);var $h=Wh;var Vi=require("@budibase/types");var Vh=require("@budibase/backend-core");async function yr(e,t){await Wt.appExists(t)||e.throw(400,`Provided app ID: ${t} - is invalid.`)}async function Kh(e){let t=e.params.appId;await yr(e,t);let r=e.request.body,n=e.user?._id,a=await ve.triggerAppBackup(t,Vi.AppBackupTrigger.MANUAL,{name:r.name,createdBy:n});a||e.throw(500,"Unable to start backup."),e.body={backupId:a,message:"Backup triggered - process starting."}}async function Hh(e){let t=e.params.appId;await yr(e,t);let r=e.params.backupId,n=e.request.body.name,a=await ve.triggerAppRestore(t,r,n,e.user?._id);a||e.throw(500,"Unable to start restore."),await Vh.events.backup.appBackupRestored(a.metadata),e.body={restoredId:a?.restoreId,message:"Restore triggered - process starting."}}async function Yh(e){let t=e.params.appId;await yr(e,t);let r=e.params.backupId;await ve.deleteAppBackup(r),e.body={message:"Backup deleted successfully."}}async function Jh(e){let t=e.params.appId;await yr(e,t);let r=e.request.body;r?.trigger&&(r.trigger=r.trigger.toLowerCase(),Object.values(Vi.AppBackupTrigger).includes(r.trigger)||e.throw(400,"Provided trigger is not a valid option.")),e.body=await ve.fetchAppBackups(t,{paginate:!0,...r})}async function zh(e){let t=e.params.appId;await yr(e,t);let r=e.params.backupId,n=e.request.body;e.body=await ve.updateAppBackup(r,n.name)}async function Xh(e){let t=e.params.appId;await yr(e,t);let r=e.params.backupId,{metadata:n,stream:a}=await ve.getBackupDownloadStream(r);e.attachment(`backup-${n.timestamp}.tar.gz`),e.body=a}var Zh=C(require("@koa/router")),Nt=C(require("joi")),Ba=require("@budibase/types"),mt=require("@budibase/backend-core"),eb=new Zh.default;function vM(){return mt.auth.joiValidator.body(Nt.default.object({trigger:Nt.default.string().valid(...Object.values(Ba.AppBackupTrigger)),type:Nt.default.string().valid(...Object.values(Ba.AppBackupType)),startDate:Nt.default.date(),endDate:Nt.default.date(),page:Nt.default.string()}))}eb.post("/api/apps/:appId/backups",mt.auth.builderOrAdmin,Kh).post("/api/apps/:appId/backups/search",mt.auth.builderOrAdmin,vM(),Jh).get("/api/apps/:appId/backups/:backupId/file",mt.auth.builderOrAdmin,Xh).patch("/api/apps/:appId/backups/:backupId",mt.auth.builderOrAdmin,zh).delete("/api/apps/:appId/backups/:backupId",mt.auth.builderOrAdmin,Yh).post("/api/apps/:appId/backups/:backupId/import",mt.auth.builderOrAdmin,Hh);var tb=eb;var Ob=C(require("@koa/router"));var Na=require("scim-patch");var nb=require("@budibase/backend-core");function rb(e,t){let r=e.request.query[t];if(r!==void 0)return+r}var ab=async e=>{let t=rb(e,"pageSize")??20,r=rb(e,"startIndex"),n;e.request.query.filter&&(n=Q.user.userFilters(e.request.query.filter));let a=await se.get({pageSize:t,skip:r,filters:n});e.body={schemas:["urn:ietf:params:scim:api:messages:2.0:ListResponse"],totalResults:a.total,Resources:a.users.map(Q.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 se.find(t);e.body=Q.user.toScimUserResponse(r)},sb=async e=>{let t=Q.user.fromScimUser(e.request.body);try{let r=await se.create(t);e.body=Q.user.toScimUserResponse(r)}catch(r){throw r instanceof nb.EmailUnavailableError&&e.throw(409,"Email already in use"),r}};function EM(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 ib=async e=>{let t=await se.find(e.params.id);t||e.throw(404);let r=Q.user.toScimUserResponse(t),n=e.request.body;try{(0,Na.patchBodyValidation)(n)}catch{}if(EM(n))return Ki(e);let a;try{a=(0,Na.scimPatch)(r,n.Operations)}catch{}a||e.throw(500);let o=Q.user.fromScimUser(a);await se.update(o,{allowChangingEmail:!0}),e.body=Q.user.toScimUserResponse(o)},Ki=async e=>{let{id:t}=e.params;typeof t!="string"&&e.throw(404),await se.remove(t),e.status=204};var vb=C(wb()),Eb=require("@budibase/shared-core"),Ma=require("scim-patch");var Ga=require("scim2-parse-filter");function Rb(e,t){for(let r of t.split(","))delete e[r]}var _b=async e=>{let r=(await M.fetch()).filter(o=>o.scimInfo?.isSync).map(Q.group.toScimGroupResponse),{filter:n,excludedAttributes:a}=e.request.query;if(n){let o=(0,Ga.filter)((0,Ga.parse)(n));r=r.filter(o)}a&&r.forEach(o=>{Rb(o,a)}),e.body={schemas:["urn:ietf:params:scim:api:messages:2.0:ListResponse"],totalResults:r.length,Resources:r,startIndex:1,itemsPerPage:r.length}},xb=async e=>{let t=Q.group.fromScimGroup(e.request.body),r=await mr.create(t);e.body=Q.group.toScimGroupResponse(r)},Tb=async e=>{let{id:t}=e.params,r=await M.get(t),n=Q.group.toScimGroupResponse(r),{excludedAttributes:a}=e.request.query;a&&Rb(n,a),e.body=n},Pb=async e=>{let{id:t}=e.params,r=await M.get(t);await M.remove(t,r._rev),e.status=204},Cb=async e=>{let{id:t}=e.params,r=await M.get(t),n=Q.group.toScimGroupResponse(r),a=e.request.body;try{(0,Ma.patchBodyValidation)(a)}catch{e.throw(400)}let{true:o,false:i}=(0,vb.default)(a.Operations,s=>s.path==="members");if(i?.length){let s=(0,Ma.scimPatch)(n,i);s||e.throw(500);let c={...Q.group.fromScimGroup(s),_rev:r._rev};await M.save(c)}if(o?.length){let s=[],c=[];for(let{op:f,value:m}of o)switch(f){case"add":case"Add":for(let g of m)s.push(await se.find(g.value));break;case"remove":case"Remove":for(let g of m)c.push(await se.find(g.value));break;case"replace":case"Replace":throw new Error("Replacing members is not allowed");default:Eb.utils.unreachable(f)}s.length&&await M.addUsers(t,s.map(f=>f._id)),c.length&&await M.removeUsers(t,c.map(f=>f._id))}e.body=Q.group.toScimGroupResponse(await M.get(t))};var Rn=require("@budibase/types"),ye=new Ob.default({prefix:"/api/global/scim/v2"});ye.use(Ci);ye.use(Pi);ye.get("/users",ab);ye.get("/users/:id",In("id"),ob);ye.post("/users",sb);ye.patch("/users/:id",In("id"),ib);ye.delete("/users/:id",In("id"),Ki);ye.get("/groups",_b);ye.post("/groups",G.requireFeature(Rn.Feature.USER_GROUPS),xb);ye.get("/groups/:id",G.requireFeature(Rn.Feature.USER_GROUPS),Sn("id"),Tb);ye.delete("/groups/:id",G.requireFeature(Rn.Feature.USER_GROUPS),Sn("id"),Pb);ye.patch("/groups/:id",G.requireFeature(Rn.Feature.USER_GROUPS),Sn("id"),Cb);var Lb=ye;var Db=C(require("@koa/router"));var Hi=require("@budibase/backend-core");async function qb(e){let{userId:t,appId:r}=e.params,n=await Je.db.getUser(t);if(Hi.users.isGlobalBuilder(n)){e.body={message:"User already admin - no permissions updated."};return}await Je.addAppBuilder(n,r),e.body={message:`User "${n.email}" app builder access updated.`}}async function Ub(e){let{userId:t,appId:r}=e.params,n=await Je.db.getUser(t);if(Hi.users.isGlobalBuilder(n)){e.body={message:"User already admin - no permissions removed."};return}await Je.removeAppBuilder(n,r),e.body={message:`User "${n.email}" app builder access removed.`}}var Yi=require("@budibase/types"),Ji=require("@budibase/backend-core"),Bb=new Db.default;Bb.post("/api/global/users/:userId/app/:appId/builder",Ji.auth.builderOrAdmin,G.requireFeatures(Yi.Feature.APP_BUILDERS),qb).delete("/api/global/users/:userId/app/:appId/builder",Ji.auth.builderOrAdmin,G.requireFeatures(Yi.Feature.APP_BUILDERS),Ub);var Nb=Bb;var Q={};S(Q,{group:()=>Zi,user:()=>Xi});var Xi={};S(Xi,{fromScimUser:()=>ZM,toScimUserResponse:()=>JM,userFilters:()=>eG});var ka=require("@budibase/types"),Mb=require("scim2-parse-filter"),Gb=require("@budibase/backend-core"),kb=require("@budibase/shared-core"),{unreachable:YM}=kb.utils,JM=e=>{let{isSync:t,roles:r,...n}=e.scimInfo||{},a={...n,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===ka.UserStatus.ACTIVE};return(e.firstName||e.lastName)&&(a.name={formatted:[e.firstName,e.lastName].filter(o=>o).join(" "),familyName:e.lastName,givenName:e.firstName}),a},zM=e=>!!e?.id;function XM(e){if(Gb.utils.validEmail(e.userName))return e.userName;if(e.emails)return e.emails.find(t=>t.primary)?.value||e.emails[0]?.value}var ZM=e=>{let t=zM(e)?e:void 0,r=XM(e);if(!r)throw new Error("Email is required");let n;switch(e.active){case"True":case"true":case!0:n=!0;break;case"False":case"false":case!1:n=!1;break;default:YM(e.active)}let a,o;return e.name?.givenName?(a=e.name?.givenName,o=e.name?.familyName):a=e.displayName,{tenantId:"",_id:t?.id,userId:t?.id,email:r,firstName:a,lastName:o,scimInfo:{...e,isSync:!0},roles:{},status:n?ka.UserStatus.ACTIVE:ka.UserStatus.INACTIVE,createdAt:t?.meta.created.getTime(),updatedAt:t?.meta.lastModified.toISOString()}},eG=e=>{let t={equal:{}},r=(0,Mb.parse)(e);function n(a){switch(a.op){case"eq":{let o=a.attrPath,i;switch(o){case"emails.value":i="email";break;default:i=`scimInfo.${o}`}t.equal[i]=a.compValue;break}case"and":for(let o of a.filters)n(o);break;default:console.warn("Filter not handled",{filter:a})}}return n(r),t};var Zi={};S(Zi,{fromScimGroup:()=>nG,toScimGroupResponse:()=>tG});var tG=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}))}),rG=e=>!!e?.id,nG=e=>{let t=rG(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()}};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.9.1",
7
+ "version": "3.9.3",
8
8
  "description": "Budibase Pro (Backend)",
9
9
  "main": "dist/index.js",
10
10
  "types": "dist/index.d.ts",
@@ -72,5 +72,5 @@
72
72
  }
73
73
  }
74
74
  },
75
- "gitHead": "47ec626edb1cf53f7bcae95fc6496d2044235052"
75
+ "gitHead": "1a6437c9cc639e40b884932d3db2cea12ddf9267"
76
76
  }