@budibase/pro 3.15.0 → 3.16.0
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.
|
@@ -5,7 +5,7 @@ import { LLMRequest } from "../llm";
|
|
|
5
5
|
import { LLMConfigOptions, ResponseFormat } from "@budibase/types";
|
|
6
6
|
import openai from "openai";
|
|
7
7
|
import { Readable } from "node:stream";
|
|
8
|
-
export type OpenAIModel = "gpt-4o-mini" | "gpt-4o" | "gpt-4" | "gpt-4-turbo" | "gpt-3.5-turbo";
|
|
8
|
+
export type OpenAIModel = "gpt-4o-mini" | "gpt-4o" | "gpt-4" | "gpt-4-turbo" | "gpt-3.5-turbo" | "gpt-5" | "gpt-5-mini" | "gpt-5-nano";
|
|
9
9
|
export declare function parseResponseFormat(responseFormat?: ResponseFormat): openai.ResponseFormatText | openai.ResponseFormatJSONObject | openai.ResponseFormatJSONSchema | undefined;
|
|
10
10
|
export declare class OpenAI extends LLM {
|
|
11
11
|
protected client: OpenAIClient;
|
|
@@ -8,25 +8,25 @@ export declare const generationStructure: z.ZodObject<{
|
|
|
8
8
|
name: z.ZodString;
|
|
9
9
|
}, {
|
|
10
10
|
type: z.ZodEnum<[FieldType.STRING, FieldType.NUMBER, FieldType.BOOLEAN, FieldType.LONGFORM]>;
|
|
11
|
-
constraints: z.ZodOptional<z.ZodObject<{
|
|
11
|
+
constraints: z.ZodNullable<z.ZodOptional<z.ZodObject<{
|
|
12
12
|
presence: z.ZodBoolean;
|
|
13
13
|
}, "strip", z.ZodTypeAny, {
|
|
14
14
|
presence: boolean;
|
|
15
15
|
}, {
|
|
16
16
|
presence: boolean;
|
|
17
|
-
}
|
|
17
|
+
}>>>;
|
|
18
18
|
}>, "strip", z.ZodTypeAny, {
|
|
19
19
|
name: string;
|
|
20
20
|
type: FieldType.STRING | FieldType.LONGFORM | FieldType.NUMBER | FieldType.BOOLEAN;
|
|
21
21
|
constraints?: {
|
|
22
22
|
presence: boolean;
|
|
23
|
-
} | undefined;
|
|
23
|
+
} | null | undefined;
|
|
24
24
|
}, {
|
|
25
25
|
name: string;
|
|
26
26
|
type: FieldType.STRING | FieldType.LONGFORM | FieldType.NUMBER | FieldType.BOOLEAN;
|
|
27
27
|
constraints?: {
|
|
28
28
|
presence: boolean;
|
|
29
|
-
} | undefined;
|
|
29
|
+
} | null | undefined;
|
|
30
30
|
}>, z.ZodObject<z.objectUtil.extendShape<z.objectUtil.extendShape<{
|
|
31
31
|
name: z.ZodString;
|
|
32
32
|
}, {
|
|
@@ -273,7 +273,7 @@ export declare const generationStructure: z.ZodObject<{
|
|
|
273
273
|
type: FieldType.STRING | FieldType.LONGFORM | FieldType.NUMBER | FieldType.BOOLEAN;
|
|
274
274
|
constraints?: {
|
|
275
275
|
presence: boolean;
|
|
276
|
-
} | undefined;
|
|
276
|
+
} | null | undefined;
|
|
277
277
|
} | {
|
|
278
278
|
name: string;
|
|
279
279
|
type: FieldType.LINK;
|
|
@@ -352,7 +352,7 @@ export declare const generationStructure: z.ZodObject<{
|
|
|
352
352
|
type: FieldType.STRING | FieldType.LONGFORM | FieldType.NUMBER | FieldType.BOOLEAN;
|
|
353
353
|
constraints?: {
|
|
354
354
|
presence: boolean;
|
|
355
|
-
} | undefined;
|
|
355
|
+
} | null | undefined;
|
|
356
356
|
} | {
|
|
357
357
|
name: string;
|
|
358
358
|
type: FieldType.LINK;
|
|
@@ -433,7 +433,7 @@ export declare const generationStructure: z.ZodObject<{
|
|
|
433
433
|
type: FieldType.STRING | FieldType.LONGFORM | FieldType.NUMBER | FieldType.BOOLEAN;
|
|
434
434
|
constraints?: {
|
|
435
435
|
presence: boolean;
|
|
436
|
-
} | undefined;
|
|
436
|
+
} | null | undefined;
|
|
437
437
|
} | {
|
|
438
438
|
name: string;
|
|
439
439
|
type: FieldType.LINK;
|
|
@@ -514,7 +514,7 @@ export declare const generationStructure: z.ZodObject<{
|
|
|
514
514
|
type: FieldType.STRING | FieldType.LONGFORM | FieldType.NUMBER | FieldType.BOOLEAN;
|
|
515
515
|
constraints?: {
|
|
516
516
|
presence: boolean;
|
|
517
|
-
} | undefined;
|
|
517
|
+
} | null | undefined;
|
|
518
518
|
} | {
|
|
519
519
|
name: string;
|
|
520
520
|
type: FieldType.LINK;
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { UserCtx } from "@budibase/types";
|
|
1
|
+
import { DeleteAppBackupsRequest, DeleteAppBackupsResponse, UserCtx } from "@budibase/types";
|
|
2
2
|
export declare function manualBackup(ctx: UserCtx): Promise<void>;
|
|
3
3
|
export declare function importBackup(ctx: UserCtx): Promise<void>;
|
|
4
4
|
export declare function deleteBackup(ctx: UserCtx): Promise<void>;
|
|
5
|
+
export declare function deleteBackups(ctx: UserCtx<DeleteAppBackupsRequest, DeleteAppBackupsResponse>): Promise<void>;
|
|
5
6
|
export declare function fetchBackups(ctx: UserCtx): Promise<void>;
|
|
6
7
|
export declare function updateBackup(ctx: UserCtx): Promise<void>;
|
|
7
8
|
export declare function downloadBackup(ctx: UserCtx): Promise<void>;
|
package/dist/index.js
CHANGED
|
@@ -1,31 +1,31 @@
|
|
|
1
|
-
"use strict";var LI=Object.create;var Na=Object.defineProperty;var PI=Object.getOwnPropertyDescriptor;var UI=Object.getOwnPropertyNames;var qI=Object.getPrototypeOf,DI=Object.prototype.hasOwnProperty;var u=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),w=(e,t)=>{for(var r in t)Na(e,r,{get:t[r],enumerable:!0})},Gu=(e,t,r,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of UI(t))!DI.call(e,n)&&n!==r&&Na(e,n,{get:()=>t[n],enumerable:!(a=PI(t,n))||a.enumerable});return e};var P=(e,t,r)=>(r=e!=null?LI(qI(e)):{},Gu(t||!e||!e.__esModule?Na(r,"default",{value:e,enumerable:!0}):r,e)),NI=e=>Gu(Na({},"__esModule",{value:!0}),e);var Za=u((n0,vp)=>{"use strict";function US(e,t){for(var r=-1,a=t.length,n=e.length;++r<a;)e[n+r]=t[r];return e}vp.exports=US});var Co=u((o0,Rp)=>{"use strict";var qS=typeof global=="object"&&global&&global.Object===Object&&global;Rp.exports=qS});var pe=u((s0,_p)=>{"use strict";var DS=Co(),NS=typeof self=="object"&&self&&self.Object===Object&&self,BS=DS||NS||Function("return this")();_p.exports=BS});var xt=u((i0,xp)=>{"use strict";var MS=pe(),kS=MS.Symbol;xp.exports=kS});var Pp=u((u0,Lp)=>{"use strict";var Cp=xt(),Op=Object.prototype,GS=Op.hasOwnProperty,FS=Op.toString,zr=Cp?Cp.toStringTag:void 0;function QS(e){var t=GS.call(e,zr),r=e[zr];try{e[zr]=void 0;var a=!0}catch{}var n=FS.call(e);return a&&(t?e[zr]=r:delete e[zr]),n}Lp.exports=QS});var qp=u((p0,Up)=>{"use strict";var jS=Object.prototype,WS=jS.toString;function $S(e){return WS.call(e)}Up.exports=$S});var mt=u((c0,Bp)=>{"use strict";var Dp=xt(),KS=Pp(),VS=qp(),YS="[object Null]",HS="[object Undefined]",Np=Dp?Dp.toStringTag:void 0;function zS(e){return e==null?e===void 0?HS:YS:Np&&Np in Object(e)?KS(e):VS(e)}Bp.exports=zS});var be=u((l0,Mp)=>{"use strict";function JS(e){return e!=null&&typeof e=="object"}Mp.exports=JS});var Gp=u((d0,kp)=>{"use strict";var XS=mt(),ZS=be(),ew="[object Arguments]";function tw(e){return ZS(e)&&XS(e)==ew}kp.exports=tw});var Jr=u((f0,jp)=>{"use strict";var Fp=Gp(),rw=be(),Qp=Object.prototype,aw=Qp.hasOwnProperty,nw=Qp.propertyIsEnumerable,ow=Fp(function(){return arguments}())?Fp:function(e){return rw(e)&&aw.call(e,"callee")&&!nw.call(e,"callee")};jp.exports=ow});var se=u((m0,Wp)=>{"use strict";var sw=Array.isArray;Wp.exports=sw});var Yp=u((g0,Vp)=>{"use strict";var $p=xt(),iw=Jr(),uw=se(),Kp=$p?$p.isConcatSpreadable:void 0;function pw(e){return uw(e)||iw(e)||!!(Kp&&e&&e[Kp])}Vp.exports=pw});var Oo=u((h0,zp)=>{"use strict";var cw=Za(),lw=Yp();function Hp(e,t,r,a,n){var o=-1,s=e.length;for(r||(r=lw),n||(n=[]);++o<s;){var i=e[o];t>0&&r(i)?t>1?Hp(i,t-1,r,a,n):cw(n,i):a||(n[n.length]=i)}return n}zp.exports=Hp});var Xr=u((y0,Jp)=>{"use strict";function dw(e){return e}Jp.exports=dw});var en=u((A0,Xp)=>{"use strict";function fw(e,t,r){switch(r.length){case 0:return e.call(t);case 1:return e.call(t,r[0]);case 2:return e.call(t,r[0],r[1]);case 3:return e.call(t,r[0],r[1],r[2])}return e.apply(t,r)}Xp.exports=fw});var Lo=u((b0,ec)=>{"use strict";var mw=en(),Zp=Math.max;function gw(e,t,r){return t=Zp(t===void 0?e.length-1:t,0),function(){for(var a=arguments,n=-1,o=Zp(a.length-t,0),s=Array(o);++n<o;)s[n]=a[t+n];n=-1;for(var i=Array(t+1);++n<t;)i[n]=a[n];return i[t]=r(s),mw(e,this,i)}}ec.exports=gw});var rc=u((I0,tc)=>{"use strict";function hw(e){return function(){return e}}tc.exports=hw});var _e=u((S0,ac)=>{"use strict";function yw(e){var t=typeof e;return e!=null&&(t=="object"||t=="function")}ac.exports=yw});var Zr=u((w0,nc)=>{"use strict";var Aw=mt(),bw=_e(),Iw="[object AsyncFunction]",Sw="[object Function]",ww="[object GeneratorFunction]",Tw="[object Proxy]";function Ew(e){if(!bw(e))return!1;var t=Aw(e);return t==Sw||t==ww||t==Iw||t==Tw}nc.exports=Ew});var sc=u((T0,oc)=>{"use strict";var vw=pe(),Rw=vw["__core-js_shared__"];oc.exports=Rw});var pc=u((E0,uc)=>{"use strict";var Po=sc(),ic=function(){var e=/[^.]+$/.exec(Po&&Po.keys&&Po.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}();function _w(e){return!!ic&&ic in e}uc.exports=_w});var Uo=u((v0,cc)=>{"use strict";var xw=Function.prototype,Cw=xw.toString;function Ow(e){if(e!=null){try{return Cw.call(e)}catch{}try{return e+""}catch{}}return""}cc.exports=Ow});var dc=u((R0,lc)=>{"use strict";var Lw=Zr(),Pw=pc(),Uw=_e(),qw=Uo(),Dw=/[\\^$.*+?()[\]{}|]/g,Nw=/^\[object .+?Constructor\]$/,Bw=Function.prototype,Mw=Object.prototype,kw=Bw.toString,Gw=Mw.hasOwnProperty,Fw=RegExp("^"+kw.call(Gw).replace(Dw,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function Qw(e){if(!Uw(e)||Pw(e))return!1;var t=Lw(e)?Fw:Nw;return t.test(qw(e))}lc.exports=Qw});var mc=u((_0,fc)=>{"use strict";function jw(e,t){return e?.[t]}fc.exports=jw});var gt=u((x0,gc)=>{"use strict";var Ww=dc(),$w=mc();function Kw(e,t){var r=$w(e,t);return Ww(r)?r:void 0}gc.exports=Kw});var qo=u((C0,hc)=>{"use strict";var Vw=gt(),Yw=function(){try{var e=Vw(Object,"defineProperty");return e({},"",{}),e}catch{}}();hc.exports=Yw});var bc=u((O0,Ac)=>{"use strict";var Hw=rc(),yc=qo(),zw=Xr(),Jw=yc?function(e,t){return yc(e,"toString",{configurable:!0,enumerable:!1,value:Hw(t),writable:!0})}:zw;Ac.exports=Jw});var Do=u((L0,Ic)=>{"use strict";var Xw=800,Zw=16,eT=Date.now;function tT(e){var t=0,r=0;return function(){var a=eT(),n=Zw-(a-r);if(r=a,n>0){if(++t>=Xw)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}Ic.exports=tT});var tn=u((P0,Sc)=>{"use strict";var rT=bc(),aT=Do(),nT=aT(rT);Sc.exports=nT});var No=u((U0,wc)=>{"use strict";var oT=Xr(),sT=Lo(),iT=tn();function uT(e,t){return iT(sT(e,t,oT),e+"")}wc.exports=uT});var ea=u((q0,Tc)=>{"use strict";var pT=gt(),cT=pT(Object,"create");Tc.exports=cT});var Rc=u((D0,vc)=>{"use strict";var Ec=ea();function lT(){this.__data__=Ec?Ec(null):{},this.size=0}vc.exports=lT});var xc=u((N0,_c)=>{"use strict";function dT(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}_c.exports=dT});var Oc=u((B0,Cc)=>{"use strict";var fT=ea(),mT="__lodash_hash_undefined__",gT=Object.prototype,hT=gT.hasOwnProperty;function yT(e){var t=this.__data__;if(fT){var r=t[e];return r===mT?void 0:r}return hT.call(t,e)?t[e]:void 0}Cc.exports=yT});var Pc=u((M0,Lc)=>{"use strict";var AT=ea(),bT=Object.prototype,IT=bT.hasOwnProperty;function ST(e){var t=this.__data__;return AT?t[e]!==void 0:IT.call(t,e)}Lc.exports=ST});var qc=u((k0,Uc)=>{"use strict";var wT=ea(),TT="__lodash_hash_undefined__";function ET(e,t){var r=this.__data__;return this.size+=this.has(e)?0:1,r[e]=wT&&t===void 0?TT:t,this}Uc.exports=ET});var Nc=u((G0,Dc)=>{"use strict";var vT=Rc(),RT=xc(),_T=Oc(),xT=Pc(),CT=qc();function Yt(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t<r;){var a=e[t];this.set(a[0],a[1])}}Yt.prototype.clear=vT;Yt.prototype.delete=RT;Yt.prototype.get=_T;Yt.prototype.has=xT;Yt.prototype.set=CT;Dc.exports=Yt});var Mc=u((F0,Bc)=>{"use strict";function OT(){this.__data__=[],this.size=0}Bc.exports=OT});var Ht=u((Q0,kc)=>{"use strict";function LT(e,t){return e===t||e!==e&&t!==t}kc.exports=LT});var ta=u((j0,Gc)=>{"use strict";var PT=Ht();function UT(e,t){for(var r=e.length;r--;)if(PT(e[r][0],t))return r;return-1}Gc.exports=UT});var Qc=u((W0,Fc)=>{"use strict";var qT=ta(),DT=Array.prototype,NT=DT.splice;function BT(e){var t=this.__data__,r=qT(t,e);if(r<0)return!1;var a=t.length-1;return r==a?t.pop():NT.call(t,r,1),--this.size,!0}Fc.exports=BT});var Wc=u(($0,jc)=>{"use strict";var MT=ta();function kT(e){var t=this.__data__,r=MT(t,e);return r<0?void 0:t[r][1]}jc.exports=kT});var Kc=u((K0,$c)=>{"use strict";var GT=ta();function FT(e){return GT(this.__data__,e)>-1}$c.exports=FT});var Yc=u((V0,Vc)=>{"use strict";var QT=ta();function jT(e,t){var r=this.__data__,a=QT(r,e);return a<0?(++this.size,r.push([e,t])):r[a][1]=t,this}Vc.exports=jT});var ra=u((Y0,Hc)=>{"use strict";var WT=Mc(),$T=Qc(),KT=Wc(),VT=Kc(),YT=Yc();function zt(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t<r;){var a=e[t];this.set(a[0],a[1])}}zt.prototype.clear=WT;zt.prototype.delete=$T;zt.prototype.get=KT;zt.prototype.has=VT;zt.prototype.set=YT;Hc.exports=zt});var rn=u((H0,zc)=>{"use strict";var HT=gt(),zT=pe(),JT=HT(zT,"Map");zc.exports=JT});var Zc=u((z0,Xc)=>{"use strict";var Jc=Nc(),XT=ra(),ZT=rn();function eE(){this.size=0,this.__data__={hash:new Jc,map:new(ZT||XT),string:new Jc}}Xc.exports=eE});var tl=u((J0,el)=>{"use strict";function tE(e){var t=typeof e;return t=="string"||t=="number"||t=="symbol"||t=="boolean"?e!=="__proto__":e===null}el.exports=tE});var aa=u((X0,rl)=>{"use strict";var rE=tl();function aE(e,t){var r=e.__data__;return rE(t)?r[typeof t=="string"?"string":"hash"]:r.map}rl.exports=aE});var nl=u((Z0,al)=>{"use strict";var nE=aa();function oE(e){var t=nE(this,e).delete(e);return this.size-=t?1:0,t}al.exports=oE});var sl=u((eF,ol)=>{"use strict";var sE=aa();function iE(e){return sE(this,e).get(e)}ol.exports=iE});var ul=u((tF,il)=>{"use strict";var uE=aa();function pE(e){return uE(this,e).has(e)}il.exports=pE});var cl=u((rF,pl)=>{"use strict";var cE=aa();function lE(e,t){var r=cE(this,e),a=r.size;return r.set(e,t),this.size+=r.size==a?0:1,this}pl.exports=lE});var an=u((aF,ll)=>{"use strict";var dE=Zc(),fE=nl(),mE=sl(),gE=ul(),hE=cl();function Jt(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t<r;){var a=e[t];this.set(a[0],a[1])}}Jt.prototype.clear=dE;Jt.prototype.delete=fE;Jt.prototype.get=mE;Jt.prototype.has=gE;Jt.prototype.set=hE;ll.exports=Jt});var fl=u((nF,dl)=>{"use strict";var yE="__lodash_hash_undefined__";function AE(e){return this.__data__.set(e,yE),this}dl.exports=AE});var gl=u((oF,ml)=>{"use strict";function bE(e){return this.__data__.has(e)}ml.exports=bE});var Bo=u((sF,hl)=>{"use strict";var IE=an(),SE=fl(),wE=gl();function nn(e){var t=-1,r=e==null?0:e.length;for(this.__data__=new IE;++t<r;)this.add(e[t])}nn.prototype.add=nn.prototype.push=SE;nn.prototype.has=wE;hl.exports=nn});var Al=u((iF,yl)=>{"use strict";function TE(e,t,r,a){for(var n=e.length,o=r+(a?1:-1);a?o--:++o<n;)if(t(e[o],o,e))return o;return-1}yl.exports=TE});var Il=u((uF,bl)=>{"use strict";function EE(e){return e!==e}bl.exports=EE});var wl=u((pF,Sl)=>{"use strict";function vE(e,t,r){for(var a=r-1,n=e.length;++a<n;)if(e[a]===t)return a;return-1}Sl.exports=vE});var El=u((cF,Tl)=>{"use strict";var RE=Al(),_E=Il(),xE=wl();function CE(e,t,r){return t===t?xE(e,t,r):RE(e,_E,r)}Tl.exports=CE});var Mo=u((lF,vl)=>{"use strict";var OE=El();function LE(e,t){var r=e==null?0:e.length;return!!r&&OE(e,t,0)>-1}vl.exports=LE});var _l=u((dF,Rl)=>{"use strict";function PE(e,t,r){for(var a=-1,n=e==null?0:e.length;++a<n;)if(r(t,e[a]))return!0;return!1}Rl.exports=PE});var ko=u((fF,xl)=>{"use strict";function UE(e,t){return e.has(t)}xl.exports=UE});var Go=u((mF,Cl)=>{"use strict";var qE=gt(),DE=pe(),NE=qE(DE,"Set");Cl.exports=NE});var Fo=u((gF,Ol)=>{"use strict";function BE(){}Ol.exports=BE});var on=u((hF,Ll)=>{"use strict";function ME(e){var t=-1,r=Array(e.size);return e.forEach(function(a){r[++t]=a}),r}Ll.exports=ME});var Ul=u((yF,Pl)=>{"use strict";var Qo=Go(),kE=Fo(),GE=on(),FE=1/0,QE=Qo&&1/GE(new Qo([,-0]))[1]==FE?function(e){return new Qo(e)}:kE;Pl.exports=QE});var Dl=u((AF,ql)=>{"use strict";var jE=Bo(),WE=Mo(),$E=_l(),KE=ko(),VE=Ul(),YE=on(),HE=200;function zE(e,t,r){var a=-1,n=WE,o=e.length,s=!0,i=[],p=i;if(r)s=!1,n=$E;else if(o>=HE){var f=t?null:VE(e);if(f)return YE(f);s=!1,n=KE,p=new jE}else p=t?[]:i;e:for(;++a<o;){var m=e[a],g=t?t(m):m;if(m=r||m!==0?m:0,s&&g===g){for(var h=p.length;h--;)if(p[h]===g)continue e;t&&p.push(g),i.push(m)}else n(p,g,r)||(p!==i&&p.push(g),i.push(m))}return i}ql.exports=zE});var sn=u((bF,Nl)=>{"use strict";var JE=9007199254740991;function XE(e){return typeof e=="number"&&e>-1&&e%1==0&&e<=JE}Nl.exports=XE});var Xt=u((IF,Bl)=>{"use strict";var ZE=Zr(),ev=sn();function tv(e){return e!=null&&ev(e.length)&&!ZE(e)}Bl.exports=tv});var jo=u((SF,Ml)=>{"use strict";var rv=Xt(),av=be();function nv(e){return av(e)&&rv(e)}Ml.exports=nv});var Gl=u((wF,kl)=>{"use strict";var ov=Oo(),sv=No(),iv=Dl(),uv=jo(),pv=sv(function(e){return iv(ov(e,1,uv,!0))});kl.exports=pv});var Ql=u((TF,Fl)=>{"use strict";var cv=ra();function lv(){this.__data__=new cv,this.size=0}Fl.exports=lv});var Wl=u((EF,jl)=>{"use strict";function dv(e){var t=this.__data__,r=t.delete(e);return this.size=t.size,r}jl.exports=dv});var Kl=u((vF,$l)=>{"use strict";function fv(e){return this.__data__.get(e)}$l.exports=fv});var Yl=u((RF,Vl)=>{"use strict";function mv(e){return this.__data__.has(e)}Vl.exports=mv});var zl=u((_F,Hl)=>{"use strict";var gv=ra(),hv=rn(),yv=an(),Av=200;function bv(e,t){var r=this.__data__;if(r instanceof gv){var a=r.__data__;if(!hv||a.length<Av-1)return a.push([e,t]),this.size=++r.size,this;r=this.__data__=new yv(a)}return r.set(e,t),this.size=r.size,this}Hl.exports=bv});var na=u((xF,Jl)=>{"use strict";var Iv=ra(),Sv=Ql(),wv=Wl(),Tv=Kl(),Ev=Yl(),vv=zl();function Zt(e){var t=this.__data__=new Iv(e);this.size=t.size}Zt.prototype.clear=Sv;Zt.prototype.delete=wv;Zt.prototype.get=Tv;Zt.prototype.has=Ev;Zt.prototype.set=vv;Jl.exports=Zt});var oa=u((CF,Zl)=>{"use strict";var Xl=qo();function Rv(e,t,r){t=="__proto__"&&Xl?Xl(e,t,{configurable:!0,enumerable:!0,value:r,writable:!0}):e[t]=r}Zl.exports=Rv});var Wo=u((OF,ed)=>{"use strict";var _v=oa(),xv=Ht();function Cv(e,t,r){(r!==void 0&&!xv(e[t],r)||r===void 0&&!(t in e))&&_v(e,t,r)}ed.exports=Cv});var rd=u((LF,td)=>{"use strict";function Ov(e){return function(t,r,a){for(var n=-1,o=Object(t),s=a(t),i=s.length;i--;){var p=s[e?i:++n];if(r(o[p],p,o)===!1)break}return t}}td.exports=Ov});var $o=u((PF,ad)=>{"use strict";var Lv=rd(),Pv=Lv();ad.exports=Pv});var Ko=u((sa,er)=>{"use strict";var Uv=pe(),id=typeof sa=="object"&&sa&&!sa.nodeType&&sa,nd=id&&typeof er=="object"&&er&&!er.nodeType&&er,qv=nd&&nd.exports===id,od=qv?Uv.Buffer:void 0,sd=od?od.allocUnsafe:void 0;function Dv(e,t){if(t)return e.slice();var r=e.length,a=sd?sd(r):new e.constructor(r);return e.copy(a),a}er.exports=Dv});var Vo=u((UF,ud)=>{"use strict";var Nv=pe(),Bv=Nv.Uint8Array;ud.exports=Bv});var un=u((qF,cd)=>{"use strict";var pd=Vo();function Mv(e){var t=new e.constructor(e.byteLength);return new pd(t).set(new pd(e)),t}cd.exports=Mv});var Yo=u((DF,ld)=>{"use strict";var kv=un();function Gv(e,t){var r=t?kv(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.length)}ld.exports=Gv});var tr=u((NF,dd)=>{"use strict";function Fv(e,t){var r=-1,a=e.length;for(t||(t=Array(a));++r<a;)t[r]=e[r];return t}dd.exports=Fv});var ia=u((BF,md)=>{"use strict";var Qv=_e(),fd=Object.create,jv=function(){function e(){}return function(t){if(!Qv(t))return{};if(fd)return fd(t);e.prototype=t;var r=new e;return e.prototype=void 0,r}}();md.exports=jv});var Ho=u((MF,gd)=>{"use strict";function Wv(e,t){return function(r){return e(t(r))}}gd.exports=Wv});var pn=u((kF,hd)=>{"use strict";var $v=Ho(),Kv=$v(Object.getPrototypeOf,Object);hd.exports=Kv});var cn=u((GF,yd)=>{"use strict";var Vv=Object.prototype;function Yv(e){var t=e&&e.constructor,r=typeof t=="function"&&t.prototype||Vv;return e===r}yd.exports=Yv});var zo=u((FF,Ad)=>{"use strict";var Hv=ia(),zv=pn(),Jv=cn();function Xv(e){return typeof e.constructor=="function"&&!Jv(e)?Hv(zv(e)):{}}Ad.exports=Xv});var Id=u((QF,bd)=>{"use strict";function Zv(){return!1}bd.exports=Zv});var pa=u((ua,rr)=>{"use strict";var eR=pe(),tR=Id(),Td=typeof ua=="object"&&ua&&!ua.nodeType&&ua,Sd=Td&&typeof rr=="object"&&rr&&!rr.nodeType&&rr,rR=Sd&&Sd.exports===Td,wd=rR?eR.Buffer:void 0,aR=wd?wd.isBuffer:void 0,nR=aR||tR;rr.exports=nR});var Jo=u((jF,vd)=>{"use strict";var oR=mt(),sR=pn(),iR=be(),uR="[object Object]",pR=Function.prototype,cR=Object.prototype,Ed=pR.toString,lR=cR.hasOwnProperty,dR=Ed.call(Object);function fR(e){if(!iR(e)||oR(e)!=uR)return!1;var t=sR(e);if(t===null)return!0;var r=lR.call(t,"constructor")&&t.constructor;return typeof r=="function"&&r instanceof r&&Ed.call(r)==dR}vd.exports=fR});var _d=u((WF,Rd)=>{"use strict";var mR=mt(),gR=sn(),hR=be(),yR="[object Arguments]",AR="[object Array]",bR="[object Boolean]",IR="[object Date]",SR="[object Error]",wR="[object Function]",TR="[object Map]",ER="[object Number]",vR="[object Object]",RR="[object RegExp]",_R="[object Set]",xR="[object String]",CR="[object WeakMap]",OR="[object ArrayBuffer]",LR="[object DataView]",PR="[object Float32Array]",UR="[object Float64Array]",qR="[object Int8Array]",DR="[object Int16Array]",NR="[object Int32Array]",BR="[object Uint8Array]",MR="[object Uint8ClampedArray]",kR="[object Uint16Array]",GR="[object Uint32Array]",B={};B[PR]=B[UR]=B[qR]=B[DR]=B[NR]=B[BR]=B[MR]=B[kR]=B[GR]=!0;B[yR]=B[AR]=B[OR]=B[bR]=B[LR]=B[IR]=B[SR]=B[wR]=B[TR]=B[ER]=B[vR]=B[RR]=B[_R]=B[xR]=B[CR]=!1;function FR(e){return hR(e)&&gR(e.length)&&!!B[mR(e)]}Rd.exports=FR});var ln=u(($F,xd)=>{"use strict";function QR(e){return function(t){return e(t)}}xd.exports=QR});var dn=u((ca,ar)=>{"use strict";var jR=Co(),Cd=typeof ca=="object"&&ca&&!ca.nodeType&&ca,la=Cd&&typeof ar=="object"&&ar&&!ar.nodeType&&ar,WR=la&&la.exports===Cd,Xo=WR&&jR.process,$R=function(){try{var e=la&&la.require&&la.require("util").types;return e||Xo&&Xo.binding&&Xo.binding("util")}catch{}}();ar.exports=$R});var fn=u((KF,Pd)=>{"use strict";var KR=_d(),VR=ln(),Od=dn(),Ld=Od&&Od.isTypedArray,YR=Ld?VR(Ld):KR;Pd.exports=YR});var Zo=u((VF,Ud)=>{"use strict";function HR(e,t){if(!(t==="constructor"&&typeof e[t]=="function")&&t!="__proto__")return e[t]}Ud.exports=HR});var es=u((YF,qd)=>{"use strict";var zR=oa(),JR=Ht(),XR=Object.prototype,ZR=XR.hasOwnProperty;function e_(e,t,r){var a=e[t];(!(ZR.call(e,t)&&JR(a,r))||r===void 0&&!(t in e))&&zR(e,t,r)}qd.exports=e_});var nr=u((HF,Dd)=>{"use strict";var t_=es(),r_=oa();function a_(e,t,r,a){var n=!r;r||(r={});for(var o=-1,s=t.length;++o<s;){var i=t[o],p=a?a(r[i],e[i],i,r,e):void 0;p===void 0&&(p=e[i]),n?r_(r,i,p):t_(r,i,p)}return r}Dd.exports=a_});var Bd=u((zF,Nd)=>{"use strict";function n_(e,t){for(var r=-1,a=Array(e);++r<e;)a[r]=t(r);return a}Nd.exports=n_});var da=u((JF,Md)=>{"use strict";var o_=9007199254740991,s_=/^(?:0|[1-9]\d*)$/;function i_(e,t){var r=typeof e;return t=t??o_,!!t&&(r=="number"||r!="symbol"&&s_.test(e))&&e>-1&&e%1==0&&e<t}Md.exports=i_});var ts=u((XF,kd)=>{"use strict";var u_=Bd(),p_=Jr(),c_=se(),l_=pa(),d_=da(),f_=fn(),m_=Object.prototype,g_=m_.hasOwnProperty;function h_(e,t){var r=c_(e),a=!r&&p_(e),n=!r&&!a&&l_(e),o=!r&&!a&&!n&&f_(e),s=r||a||n||o,i=s?u_(e.length,String):[],p=i.length;for(var f in e)(t||g_.call(e,f))&&!(s&&(f=="length"||n&&(f=="offset"||f=="parent")||o&&(f=="buffer"||f=="byteLength"||f=="byteOffset")||d_(f,p)))&&i.push(f);return i}kd.exports=h_});var Fd=u((ZF,Gd)=>{"use strict";function y_(e){var t=[];if(e!=null)for(var r in Object(e))t.push(r);return t}Gd.exports=y_});var jd=u((e1,Qd)=>{"use strict";var A_=_e(),b_=cn(),I_=Fd(),S_=Object.prototype,w_=S_.hasOwnProperty;function T_(e){if(!A_(e))return I_(e);var t=b_(e),r=[];for(var a in e)a=="constructor"&&(t||!w_.call(e,a))||r.push(a);return r}Qd.exports=T_});var or=u((t1,Wd)=>{"use strict";var E_=ts(),v_=jd(),R_=Xt();function __(e){return R_(e)?E_(e,!0):v_(e)}Wd.exports=__});var Kd=u((r1,$d)=>{"use strict";var x_=nr(),C_=or();function O_(e){return x_(e,C_(e))}$d.exports=O_});var Xd=u((a1,Jd)=>{"use strict";var Vd=Wo(),L_=Ko(),P_=Yo(),U_=tr(),q_=zo(),Yd=Jr(),Hd=se(),D_=jo(),N_=pa(),B_=Zr(),M_=_e(),k_=Jo(),G_=fn(),zd=Zo(),F_=Kd();function Q_(e,t,r,a,n,o,s){var i=zd(e,r),p=zd(t,r),f=s.get(p);if(f){Vd(e,r,f);return}var m=o?o(i,p,r+"",e,t,s):void 0,g=m===void 0;if(g){var h=Hd(p),I=!h&&N_(p),C=!h&&!I&&G_(p);m=p,h||I||C?Hd(i)?m=i:D_(i)?m=U_(i):I?(g=!1,m=L_(p,!0)):C?(g=!1,m=P_(p,!0)):m=[]:k_(p)||Yd(p)?(m=i,Yd(i)?m=F_(i):(!M_(i)||B_(i))&&(m=q_(p))):g=!1}g&&(s.set(p,m),n(m,p,a,o,s),s.delete(p)),Vd(e,r,m)}Jd.exports=Q_});var tf=u((n1,ef)=>{"use strict";var j_=na(),W_=Wo(),$_=$o(),K_=Xd(),V_=_e(),Y_=or(),H_=Zo();function Zd(e,t,r,a,n){e!==t&&$_(t,function(o,s){if(n||(n=new j_),V_(o))K_(e,t,s,r,Zd,a,n);else{var i=a?a(H_(e,s),o,s+"",e,t,n):void 0;i===void 0&&(i=o),W_(e,s,i)}},Y_)}ef.exports=Zd});var af=u((o1,rf)=>{"use strict";var z_=Ht(),J_=Xt(),X_=da(),Z_=_e();function ex(e,t,r){if(!Z_(r))return!1;var a=typeof t;return(a=="number"?J_(r)&&X_(t,r.length):a=="string"&&t in r)?z_(r[t],e):!1}rf.exports=ex});var of=u((s1,nf)=>{"use strict";var tx=No(),rx=af();function ax(e){return tx(function(t,r){var a=-1,n=r.length,o=n>1?r[n-1]:void 0,s=n>2?r[2]:void 0;for(o=e.length>3&&typeof o=="function"?(n--,o):void 0,s&&rx(r[0],r[1],s)&&(o=n<3?void 0:o,n=1),t=Object(t);++a<n;){var i=r[a];i&&e(t,i,a,o)}return t})}nf.exports=ax});var rs=u((i1,sf)=>{"use strict";var nx=tf(),ox=of(),sx=ox(function(e,t,r){nx(e,t,r)});sf.exports=sx});var pm=u(ge=>{"use strict";ge.aliasToReal={each:"forEach",eachRight:"forEachRight",entries:"toPairs",entriesIn:"toPairsIn",extend:"assignIn",extendAll:"assignInAll",extendAllWith:"assignInAllWith",extendWith:"assignInWith",first:"head",conforms:"conformsTo",matches:"isMatch",property:"get",__:"placeholder",F:"stubFalse",T:"stubTrue",all:"every",allPass:"overEvery",always:"constant",any:"some",anyPass:"overSome",apply:"spread",assoc:"set",assocPath:"set",complement:"negate",compose:"flowRight",contains:"includes",dissoc:"unset",dissocPath:"unset",dropLast:"dropRight",dropLastWhile:"dropRightWhile",equals:"isEqual",identical:"eq",indexBy:"keyBy",init:"initial",invertObj:"invert",juxt:"over",omitAll:"omit",nAry:"ary",path:"get",pathEq:"matchesProperty",pathOr:"getOr",paths:"at",pickAll:"pick",pipe:"flow",pluck:"map",prop:"get",propEq:"matchesProperty",propOr:"getOr",props:"at",symmetricDifference:"xor",symmetricDifferenceBy:"xorBy",symmetricDifferenceWith:"xorWith",takeLast:"takeRight",takeLastWhile:"takeRightWhile",unapply:"rest",unnest:"flatten",useWith:"overArgs",where:"conformsTo",whereEq:"isMatch",zipObj:"zipObject"};ge.aryMethod={1:["assignAll","assignInAll","attempt","castArray","ceil","create","curry","curryRight","defaultsAll","defaultsDeepAll","floor","flow","flowRight","fromPairs","invert","iteratee","memoize","method","mergeAll","methodOf","mixin","nthArg","over","overEvery","overSome","rest","reverse","round","runInContext","spread","template","trim","trimEnd","trimStart","uniqueId","words","zipAll"],2:["add","after","ary","assign","assignAllWith","assignIn","assignInAllWith","at","before","bind","bindAll","bindKey","chunk","cloneDeepWith","cloneWith","concat","conformsTo","countBy","curryN","curryRightN","debounce","defaults","defaultsDeep","defaultTo","delay","difference","divide","drop","dropRight","dropRightWhile","dropWhile","endsWith","eq","every","filter","find","findIndex","findKey","findLast","findLastIndex","findLastKey","flatMap","flatMapDeep","flattenDepth","forEach","forEachRight","forIn","forInRight","forOwn","forOwnRight","get","groupBy","gt","gte","has","hasIn","includes","indexOf","intersection","invertBy","invoke","invokeMap","isEqual","isMatch","join","keyBy","lastIndexOf","lt","lte","map","mapKeys","mapValues","matchesProperty","maxBy","meanBy","merge","mergeAllWith","minBy","multiply","nth","omit","omitBy","overArgs","pad","padEnd","padStart","parseInt","partial","partialRight","partition","pick","pickBy","propertyOf","pull","pullAll","pullAt","random","range","rangeRight","rearg","reject","remove","repeat","restFrom","result","sampleSize","some","sortBy","sortedIndex","sortedIndexOf","sortedLastIndex","sortedLastIndexOf","sortedUniqBy","split","spreadFrom","startsWith","subtract","sumBy","take","takeRight","takeRightWhile","takeWhile","tap","throttle","thru","times","trimChars","trimCharsEnd","trimCharsStart","truncate","union","uniqBy","uniqWith","unset","unzipWith","without","wrap","xor","zip","zipObject","zipObjectDeep"],3:["assignInWith","assignWith","clamp","differenceBy","differenceWith","findFrom","findIndexFrom","findLastFrom","findLastIndexFrom","getOr","includesFrom","indexOfFrom","inRange","intersectionBy","intersectionWith","invokeArgs","invokeArgsMap","isEqualWith","isMatchWith","flatMapDepth","lastIndexOfFrom","mergeWith","orderBy","padChars","padCharsEnd","padCharsStart","pullAllBy","pullAllWith","rangeStep","rangeStepRight","reduce","reduceRight","replace","set","slice","sortedIndexBy","sortedLastIndexBy","transform","unionBy","unionWith","update","xorBy","xorWith","zipWith"],4:["fill","setWith","updateWith"]};ge.aryRearg={2:[1,0],3:[2,0,1],4:[3,2,0,1]};ge.iterateeAry={dropRightWhile:1,dropWhile:1,every:1,filter:1,find:1,findFrom:1,findIndex:1,findIndexFrom:1,findKey:1,findLast:1,findLastFrom:1,findLastIndex:1,findLastIndexFrom:1,findLastKey:1,flatMap:1,flatMapDeep:1,flatMapDepth:1,forEach:1,forEachRight:1,forIn:1,forInRight:1,forOwn:1,forOwnRight:1,map:1,mapKeys:1,mapValues:1,partition:1,reduce:2,reduceRight:2,reject:1,remove:1,some:1,takeRightWhile:1,takeWhile:1,times:1,transform:2};ge.iterateeRearg={mapKeys:[1],reduceRight:[1,0]};ge.methodRearg={assignInAllWith:[1,0],assignInWith:[1,2,0],assignAllWith:[1,0],assignWith:[1,2,0],differenceBy:[1,2,0],differenceWith:[1,2,0],getOr:[2,1,0],intersectionBy:[1,2,0],intersectionWith:[1,2,0],isEqualWith:[1,2,0],isMatchWith:[2,1,0],mergeAllWith:[1,0],mergeWith:[1,2,0],padChars:[2,1,0],padCharsEnd:[2,1,0],padCharsStart:[2,1,0],pullAllBy:[2,1,0],pullAllWith:[2,1,0],rangeStep:[1,2,0],rangeStepRight:[1,2,0],setWith:[3,1,2,0],sortedIndexBy:[2,1,0],sortedLastIndexBy:[2,1,0],unionBy:[1,2,0],unionWith:[1,2,0],updateWith:[3,1,2,0],xorBy:[1,2,0],xorWith:[1,2,0],zipWith:[1,2,0]};ge.methodSpread={assignAll:{start:0},assignAllWith:{start:0},assignInAll:{start:0},assignInAllWith:{start:0},defaultsAll:{start:0},defaultsDeepAll:{start:0},invokeArgs:{start:2},invokeArgsMap:{start:2},mergeAll:{start:0},mergeAllWith:{start:0},partial:{start:1},partialRight:{start:1},without:{start:1},zipAll:{start:0}};ge.mutate={array:{fill:!0,pull:!0,pullAll:!0,pullAllBy:!0,pullAllWith:!0,pullAt:!0,remove:!0,reverse:!0},object:{assign:!0,assignAll:!0,assignAllWith:!0,assignIn:!0,assignInAll:!0,assignInAllWith:!0,assignInWith:!0,assignWith:!0,defaults:!0,defaultsAll:!0,defaultsDeep:!0,defaultsDeepAll:!0,merge:!0,mergeAll:!0,mergeAllWith:!0,mergeWith:!0},set:{set:!0,setWith:!0,unset:!0,update:!0,updateWith:!0}};ge.realToAlias=function(){var e=Object.prototype.hasOwnProperty,t=ge.aliasToReal,r={};for(var a in t){var n=t[a];e.call(r,n)?r[n].push(a):r[n]=[a]}return r}();ge.remap={assignAll:"assign",assignAllWith:"assignWith",assignInAll:"assignIn",assignInAllWith:"assignInWith",curryN:"curry",curryRightN:"curryRight",defaultsAll:"defaults",defaultsDeepAll:"defaultsDeep",findFrom:"find",findIndexFrom:"findIndex",findLastFrom:"findLast",findLastIndexFrom:"findLastIndex",getOr:"get",includesFrom:"includes",indexOfFrom:"indexOf",invokeArgs:"invoke",invokeArgsMap:"invokeMap",lastIndexOfFrom:"lastIndexOf",mergeAll:"merge",mergeAllWith:"mergeWith",padChars:"pad",padCharsEnd:"padEnd",padCharsStart:"padStart",propertyOf:"get",rangeStep:"range",rangeStepRight:"rangeRight",restFrom:"rest",spreadFrom:"spread",trimChars:"trim",trimCharsEnd:"trimEnd",trimCharsStart:"trimStart",zipAll:"zip"};ge.skipFixed={castArray:!0,flow:!0,flowRight:!0,iteratee:!0,mixin:!0,rearg:!0,runInContext:!0};ge.skipRearg={add:!0,assign:!0,assignIn:!0,bind:!0,bindKey:!0,concat:!0,difference:!0,divide:!0,eq:!0,gt:!0,gte:!0,isEqual:!0,lt:!0,lte:!0,matchesProperty:!0,merge:!0,multiply:!0,overArgs:!0,partial:!0,partialRight:!0,propertyOf:!0,random:!0,range:!0,rangeRight:!0,subtract:!0,zip:!0,zipObject:!0,zipObjectDeep:!0}});var Js=u((Pj,cm)=>{"use strict";cm.exports={}});var mm=u((Uj,fm)=>{"use strict";var X=pm(),jC=Js(),lm=Array.prototype.push;function WC(e,t){return t==2?function(r,a){return e.apply(void 0,arguments)}:function(r){return e.apply(void 0,arguments)}}function Xs(e,t){return t==2?function(r,a){return e(r,a)}:function(r){return e(r)}}function dm(e){for(var t=e?e.length:0,r=Array(t);t--;)r[t]=e[t];return r}function $C(e){return function(t){return e({},t)}}function KC(e,t){return function(){for(var r=arguments.length,a=r-1,n=Array(r);r--;)n[r]=arguments[r];var o=n[t],s=n.slice(0,t);return o&&lm.apply(s,o),t!=a&&lm.apply(s,n.slice(t+1)),e.apply(this,s)}}function Zs(e,t){return function(){var r=arguments.length;if(r){for(var a=Array(r);r--;)a[r]=arguments[r];var n=a[0]=t.apply(void 0,a);return e.apply(void 0,a),n}}}function ei(e,t,r,a){var n=typeof t=="function",o=t===Object(t);if(o&&(a=r,r=t,t=void 0),r==null)throw new TypeError;a||(a={});var s={cap:"cap"in a?a.cap:!0,curry:"curry"in a?a.curry:!0,fixed:"fixed"in a?a.fixed:!0,immutable:"immutable"in a?a.immutable:!0,rearg:"rearg"in a?a.rearg:!0},i=n?r:jC,p="curry"in a&&a.curry,f="fixed"in a&&a.fixed,m="rearg"in a&&a.rearg,g=n?r.runInContext():void 0,h=n?r:{ary:e.ary,assign:e.assign,clone:e.clone,curry:e.curry,forEach:e.forEach,isArray:e.isArray,isError:e.isError,isFunction:e.isFunction,isWeakMap:e.isWeakMap,iteratee:e.iteratee,keys:e.keys,rearg:e.rearg,toInteger:e.toInteger,toPath:e.toPath},I=h.ary,C=h.assign,_=h.clone,R=h.curry,v=h.forEach,U=h.isArray,qe=h.isError,Te=h.isFunction,pt=h.isWeakMap,Ft=h.keys,Ir=h.rearg,Sr=h.toInteger,wI=h.toPath,Uu=Ft(X.aryMethod),TI={castArray:function(S){return function(){var y=arguments[0];return U(y)?S(dm(y)):S.apply(void 0,arguments)}},iteratee:function(S){return function(){var y=arguments[0],b=arguments[1],E=S(y,b),O=E.length;return s.cap&&typeof b=="number"?(b=b>2?b-2:1,O&&O<=b?E:Xs(E,b)):E}},mixin:function(S){return function(y){var b=this;if(!Te(b))return S(b,Object(y));var E=[];return v(Ft(y),function(O){Te(y[O])&&E.push([O,b.prototype[O]])}),S(b,Object(y)),v(E,function(O){var ie=O[1];Te(ie)?b.prototype[O[0]]=ie:delete b.prototype[O[0]]}),b}},nthArg:function(S){return function(y){var b=y<0?1:Sr(y)+1;return R(S(y),b)}},rearg:function(S){return function(y,b){var E=b?b.length:0;return R(S(y,b),E)}},runInContext:function(S){return function(y){return ei(e,S(y),a)}}};function EI(S,y){if(s.cap){var b=X.iterateeRearg[S];if(b)return CI(y,b);var E=!n&&X.iterateeAry[S];if(E)return xI(y,E)}return y}function vI(S,y,b){return p||s.curry&&b>1?R(y,b):y}function qu(S,y,b){if(s.fixed&&(f||!X.skipFixed[S])){var E=X.methodSpread[S],O=E&&E.start;return O===void 0?I(y,b):KC(y,O)}return y}function Du(S,y,b){return s.rearg&&b>1&&(m||!X.skipRearg[S])?Ir(y,X.methodRearg[S]||X.aryRearg[b]):y}function RI(S,y){y=wI(y);for(var b=-1,E=y.length,O=E-1,ie=_(Object(S)),Qe=ie;Qe!=null&&++b<E;){var Ee=y[b],je=Qe[Ee];je!=null&&!(Te(je)||qe(je)||pt(je))&&(Qe[Ee]=_(b==O?je:Object(je))),Qe=Qe[Ee]}return ie}function _I(S){return ye.runInContext.convert(S)(void 0)}function Nu(S,y){var b=X.aliasToReal[S]||S,E=X.remap[b]||b,O=a;return function(ie){var Qe=n?g:h,Ee=n?g[E]:y,je=C(C({},O),ie);return ei(Qe,b,Ee,je)}}function xI(S,y){return Bu(S,function(b){return typeof b=="function"?Xs(b,y):b})}function CI(S,y){return Bu(S,function(b){var E=y.length;return WC(Ir(Xs(b,E),y),E)})}function Bu(S,y){return function(){var b=arguments.length;if(!b)return S();for(var E=Array(b);b--;)E[b]=arguments[b];var O=s.rearg?0:b-1;return E[O]=y(E[O]),S.apply(void 0,E)}}function Mu(S,y,b){var E,O=X.aliasToReal[S]||S,ie=y,Qe=TI[O];return Qe?ie=Qe(y):s.immutable&&(X.mutate.array[O]?ie=Zs(y,dm):X.mutate.object[O]?ie=Zs(y,$C(y)):X.mutate.set[O]&&(ie=Zs(y,RI))),v(Uu,function(Ee){return v(X.aryMethod[Ee],function(je){if(O==je){var ku=X.methodSpread[O],OI=ku&&ku.afterRearg;return E=OI?qu(O,Du(O,ie,Ee),Ee):Du(O,qu(O,ie,Ee),Ee),E=EI(O,E),E=vI(O,E,Ee),!1}}),!E}),E||(E=ie),E==y&&(E=p?R(E,1):function(){return y.apply(this,arguments)}),E.convert=Nu(O,y),E.placeholder=y.placeholder=b,E}if(!o)return Mu(t,r,i);var ye=r,wr=[];return v(Uu,function(S){v(X.aryMethod[S],function(y){var b=ye[X.remap[y]||y];b&&wr.push([y,Mu(y,b,ye)])})}),v(Ft(ye),function(S){var y=ye[S];if(typeof y=="function"){for(var b=wr.length;b--;)if(wr[b][0]==S)return;y.convert=Nu(S,y),wr.push([S,y])}}),v(wr,function(S){ye[S[0]]=S[1]}),ye.convert=_I,ye.placeholder=ye,v(Ft(ye),function(S){v(X.realToAlias[S]||[],function(y){ye[y]=ye[S]})}),ye}fm.exports=ei});var ti=u((qj,gm)=>{"use strict";var VC=gt(),YC=pe(),HC=VC(YC,"WeakMap");gm.exports=HC});var ri=u((Dj,ym)=>{"use strict";var hm=ti(),zC=hm&&new hm;ym.exports=zC});var ai=u((Nj,bm)=>{"use strict";var JC=Xr(),Am=ri(),XC=Am?function(e,t){return Am.set(e,t),e}:JC;bm.exports=XC});var Ta=u((Bj,Im)=>{"use strict";var ZC=ia(),eO=_e();function tO(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=ZC(e.prototype),a=e.apply(r,t);return eO(a)?a:r}}Im.exports=tO});var wm=u((Mj,Sm)=>{"use strict";var rO=Ta(),aO=pe(),nO=1;function oO(e,t,r){var a=t&nO,n=rO(e);function o(){var s=this&&this!==aO&&this instanceof o?n:e;return s.apply(a?r:this,arguments)}return o}Sm.exports=oO});var ni=u((kj,Tm)=>{"use strict";var sO=Math.max;function iO(e,t,r,a){for(var n=-1,o=e.length,s=r.length,i=-1,p=t.length,f=sO(o-s,0),m=Array(p+f),g=!a;++i<p;)m[i]=t[i];for(;++n<s;)(g||n<o)&&(m[r[n]]=e[n]);for(;f--;)m[i++]=e[n++];return m}Tm.exports=iO});var oi=u((Gj,Em)=>{"use strict";var uO=Math.max;function pO(e,t,r,a){for(var n=-1,o=e.length,s=-1,i=r.length,p=-1,f=t.length,m=uO(o-i,0),g=Array(m+f),h=!a;++n<m;)g[n]=e[n];for(var I=n;++p<f;)g[I+p]=t[p];for(;++s<i;)(h||n<o)&&(g[I+r[s]]=e[n++]);return g}Em.exports=pO});var Rm=u((Fj,vm)=>{"use strict";function cO(e,t){for(var r=e.length,a=0;r--;)e[r]===t&&++a;return a}vm.exports=cO});var Dn=u((Qj,_m)=>{"use strict";function lO(){}_m.exports=lO});var Bn=u((jj,xm)=>{"use strict";var dO=ia(),fO=Dn(),mO=4294967295;function Nn(e){this.__wrapped__=e,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=mO,this.__views__=[]}Nn.prototype=dO(fO.prototype);Nn.prototype.constructor=Nn;xm.exports=Nn});var si=u((Wj,Om)=>{"use strict";var Cm=ri(),gO=Fo(),hO=Cm?function(e){return Cm.get(e)}:gO;Om.exports=hO});var Pm=u(($j,Lm)=>{"use strict";var yO={};Lm.exports=yO});var Dm=u((Kj,qm)=>{"use strict";var Um=Pm(),AO=Object.prototype,bO=AO.hasOwnProperty;function IO(e){for(var t=e.name+"",r=Um[t],a=bO.call(Um,t)?r.length:0;a--;){var n=r[a],o=n.func;if(o==null||o==e)return n.name}return t}qm.exports=IO});var ii=u((Vj,Nm)=>{"use strict";var SO=ia(),wO=Dn();function Mn(e,t){this.__wrapped__=e,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=void 0}Mn.prototype=SO(wO.prototype);Mn.prototype.constructor=Mn;Nm.exports=Mn});var Mm=u((Yj,Bm)=>{"use strict";var TO=Bn(),EO=ii(),vO=tr();function RO(e){if(e instanceof TO)return e.clone();var t=new EO(e.__wrapped__,e.__chain__);return t.__actions__=vO(e.__actions__),t.__index__=e.__index__,t.__values__=e.__values__,t}Bm.exports=RO});var Fm=u((Hj,Gm)=>{"use strict";var _O=Bn(),km=ii(),xO=Dn(),CO=se(),OO=be(),LO=Mm(),PO=Object.prototype,UO=PO.hasOwnProperty;function kn(e){if(OO(e)&&!CO(e)&&!(e instanceof _O)){if(e instanceof km)return e;if(UO.call(e,"__wrapped__"))return LO(e)}return new km(e)}kn.prototype=xO.prototype;kn.prototype.constructor=kn;Gm.exports=kn});var jm=u((zj,Qm)=>{"use strict";var qO=Bn(),DO=si(),NO=Dm(),BO=Fm();function MO(e){var t=NO(e),r=BO[t];if(typeof r!="function"||!(t in qO.prototype))return!1;if(e===r)return!0;var a=DO(r);return!!a&&e===a[0]}Qm.exports=MO});var ui=u((Jj,Wm)=>{"use strict";var kO=ai(),GO=Do(),FO=GO(kO);Wm.exports=FO});var Km=u((Xj,$m)=>{"use strict";var QO=/\{\n\/\* \[wrapped with (.+)\] \*/,jO=/,? & /;function WO(e){var t=e.match(QO);return t?t[1].split(jO):[]}$m.exports=WO});var Ym=u((Zj,Vm)=>{"use strict";var $O=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/;function KO(e,t){var r=t.length;if(!r)return e;var a=r-1;return t[a]=(r>1?"& ":"")+t[a],t=t.join(r>2?", ":" "),e.replace($O,`{
|
|
1
|
+
"use strict";var UI=Object.create;var Na=Object.defineProperty;var qI=Object.getOwnPropertyDescriptor;var DI=Object.getOwnPropertyNames;var NI=Object.getPrototypeOf,BI=Object.prototype.hasOwnProperty;var u=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),w=(e,t)=>{for(var r in t)Na(e,r,{get:t[r],enumerable:!0})},Fu=(e,t,r,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of DI(t))!BI.call(e,n)&&n!==r&&Na(e,n,{get:()=>t[n],enumerable:!(a=qI(t,n))||a.enumerable});return e};var P=(e,t,r)=>(r=e!=null?UI(NI(e)):{},Fu(t||!e||!e.__esModule?Na(r,"default",{value:e,enumerable:!0}):r,e)),MI=e=>Fu(Na({},"__esModule",{value:!0}),e);var Za=u((s0,vp)=>{"use strict";function DS(e,t){for(var r=-1,a=t.length,n=e.length;++r<a;)e[n+r]=t[r];return e}vp.exports=DS});var Oo=u((i0,_p)=>{"use strict";var NS=typeof global=="object"&&global&&global.Object===Object&&global;_p.exports=NS});var pe=u((u0,xp)=>{"use strict";var BS=Oo(),MS=typeof self=="object"&&self&&self.Object===Object&&self,kS=BS||MS||Function("return this")();xp.exports=kS});var xt=u((p0,Cp)=>{"use strict";var GS=pe(),FS=GS.Symbol;Cp.exports=FS});var Up=u((c0,Pp)=>{"use strict";var Op=xt(),Lp=Object.prototype,QS=Lp.hasOwnProperty,jS=Lp.toString,zr=Op?Op.toStringTag:void 0;function WS(e){var t=QS.call(e,zr),r=e[zr];try{e[zr]=void 0;var a=!0}catch{}var n=jS.call(e);return a&&(t?e[zr]=r:delete e[zr]),n}Pp.exports=WS});var Dp=u((l0,qp)=>{"use strict";var $S=Object.prototype,KS=$S.toString;function VS(e){return KS.call(e)}qp.exports=VS});var gt=u((d0,Mp)=>{"use strict";var Np=xt(),YS=Up(),HS=Dp(),zS="[object Null]",JS="[object Undefined]",Bp=Np?Np.toStringTag:void 0;function XS(e){return e==null?e===void 0?JS:zS:Bp&&Bp in Object(e)?YS(e):HS(e)}Mp.exports=XS});var be=u((f0,kp)=>{"use strict";function ZS(e){return e!=null&&typeof e=="object"}kp.exports=ZS});var Fp=u((m0,Gp)=>{"use strict";var ew=gt(),tw=be(),rw="[object Arguments]";function aw(e){return tw(e)&&ew(e)==rw}Gp.exports=aw});var Jr=u((g0,Wp)=>{"use strict";var Qp=Fp(),nw=be(),jp=Object.prototype,ow=jp.hasOwnProperty,sw=jp.propertyIsEnumerable,iw=Qp(function(){return arguments}())?Qp:function(e){return nw(e)&&ow.call(e,"callee")&&!sw.call(e,"callee")};Wp.exports=iw});var se=u((y0,$p)=>{"use strict";var uw=Array.isArray;$p.exports=uw});var Hp=u((h0,Yp)=>{"use strict";var Kp=xt(),pw=Jr(),cw=se(),Vp=Kp?Kp.isConcatSpreadable:void 0;function lw(e){return cw(e)||pw(e)||!!(Vp&&e&&e[Vp])}Yp.exports=lw});var Lo=u((A0,Jp)=>{"use strict";var dw=Za(),fw=Hp();function zp(e,t,r,a,n){var o=-1,s=e.length;for(r||(r=fw),n||(n=[]);++o<s;){var i=e[o];t>0&&r(i)?t>1?zp(i,t-1,r,a,n):dw(n,i):a||(n[n.length]=i)}return n}Jp.exports=zp});var Xr=u((b0,Xp)=>{"use strict";function mw(e){return e}Xp.exports=mw});var en=u((I0,Zp)=>{"use strict";function gw(e,t,r){switch(r.length){case 0:return e.call(t);case 1:return e.call(t,r[0]);case 2:return e.call(t,r[0],r[1]);case 3:return e.call(t,r[0],r[1],r[2])}return e.apply(t,r)}Zp.exports=gw});var Po=u((S0,tc)=>{"use strict";var yw=en(),ec=Math.max;function hw(e,t,r){return t=ec(t===void 0?e.length-1:t,0),function(){for(var a=arguments,n=-1,o=ec(a.length-t,0),s=Array(o);++n<o;)s[n]=a[t+n];n=-1;for(var i=Array(t+1);++n<t;)i[n]=a[n];return i[t]=r(s),yw(e,this,i)}}tc.exports=hw});var ac=u((w0,rc)=>{"use strict";function Aw(e){return function(){return e}}rc.exports=Aw});var xe=u((T0,nc)=>{"use strict";function bw(e){var t=typeof e;return e!=null&&(t=="object"||t=="function")}nc.exports=bw});var Zr=u((E0,oc)=>{"use strict";var Iw=gt(),Sw=xe(),ww="[object AsyncFunction]",Tw="[object Function]",Ew="[object GeneratorFunction]",Rw="[object Proxy]";function vw(e){if(!Sw(e))return!1;var t=Iw(e);return t==Tw||t==Ew||t==ww||t==Rw}oc.exports=vw});var ic=u((R0,sc)=>{"use strict";var _w=pe(),xw=_w["__core-js_shared__"];sc.exports=xw});var cc=u((v0,pc)=>{"use strict";var Uo=ic(),uc=function(){var e=/[^.]+$/.exec(Uo&&Uo.keys&&Uo.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}();function Cw(e){return!!uc&&uc in e}pc.exports=Cw});var qo=u((_0,lc)=>{"use strict";var Ow=Function.prototype,Lw=Ow.toString;function Pw(e){if(e!=null){try{return Lw.call(e)}catch{}try{return e+""}catch{}}return""}lc.exports=Pw});var fc=u((x0,dc)=>{"use strict";var Uw=Zr(),qw=cc(),Dw=xe(),Nw=qo(),Bw=/[\\^$.*+?()[\]{}|]/g,Mw=/^\[object .+?Constructor\]$/,kw=Function.prototype,Gw=Object.prototype,Fw=kw.toString,Qw=Gw.hasOwnProperty,jw=RegExp("^"+Fw.call(Qw).replace(Bw,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function Ww(e){if(!Dw(e)||qw(e))return!1;var t=Uw(e)?jw:Mw;return t.test(Nw(e))}dc.exports=Ww});var gc=u((C0,mc)=>{"use strict";function $w(e,t){return e?.[t]}mc.exports=$w});var yt=u((O0,yc)=>{"use strict";var Kw=fc(),Vw=gc();function Yw(e,t){var r=Vw(e,t);return Kw(r)?r:void 0}yc.exports=Yw});var Do=u((L0,hc)=>{"use strict";var Hw=yt(),zw=function(){try{var e=Hw(Object,"defineProperty");return e({},"",{}),e}catch{}}();hc.exports=zw});var Ic=u((P0,bc)=>{"use strict";var Jw=ac(),Ac=Do(),Xw=Xr(),Zw=Ac?function(e,t){return Ac(e,"toString",{configurable:!0,enumerable:!1,value:Jw(t),writable:!0})}:Xw;bc.exports=Zw});var No=u((U0,Sc)=>{"use strict";var eT=800,tT=16,rT=Date.now;function aT(e){var t=0,r=0;return function(){var a=rT(),n=tT-(a-r);if(r=a,n>0){if(++t>=eT)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}Sc.exports=aT});var tn=u((q0,wc)=>{"use strict";var nT=Ic(),oT=No(),sT=oT(nT);wc.exports=sT});var Bo=u((D0,Tc)=>{"use strict";var iT=Xr(),uT=Po(),pT=tn();function cT(e,t){return pT(uT(e,t,iT),e+"")}Tc.exports=cT});var ea=u((N0,Ec)=>{"use strict";var lT=yt(),dT=lT(Object,"create");Ec.exports=dT});var _c=u((B0,vc)=>{"use strict";var Rc=ea();function fT(){this.__data__=Rc?Rc(null):{},this.size=0}vc.exports=fT});var Cc=u((M0,xc)=>{"use strict";function mT(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}xc.exports=mT});var Lc=u((k0,Oc)=>{"use strict";var gT=ea(),yT="__lodash_hash_undefined__",hT=Object.prototype,AT=hT.hasOwnProperty;function bT(e){var t=this.__data__;if(gT){var r=t[e];return r===yT?void 0:r}return AT.call(t,e)?t[e]:void 0}Oc.exports=bT});var Uc=u((G0,Pc)=>{"use strict";var IT=ea(),ST=Object.prototype,wT=ST.hasOwnProperty;function TT(e){var t=this.__data__;return IT?t[e]!==void 0:wT.call(t,e)}Pc.exports=TT});var Dc=u((F0,qc)=>{"use strict";var ET=ea(),RT="__lodash_hash_undefined__";function vT(e,t){var r=this.__data__;return this.size+=this.has(e)?0:1,r[e]=ET&&t===void 0?RT:t,this}qc.exports=vT});var Bc=u((Q0,Nc)=>{"use strict";var _T=_c(),xT=Cc(),CT=Lc(),OT=Uc(),LT=Dc();function Ht(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t<r;){var a=e[t];this.set(a[0],a[1])}}Ht.prototype.clear=_T;Ht.prototype.delete=xT;Ht.prototype.get=CT;Ht.prototype.has=OT;Ht.prototype.set=LT;Nc.exports=Ht});var kc=u((j0,Mc)=>{"use strict";function PT(){this.__data__=[],this.size=0}Mc.exports=PT});var zt=u((W0,Gc)=>{"use strict";function UT(e,t){return e===t||e!==e&&t!==t}Gc.exports=UT});var ta=u(($0,Fc)=>{"use strict";var qT=zt();function DT(e,t){for(var r=e.length;r--;)if(qT(e[r][0],t))return r;return-1}Fc.exports=DT});var jc=u((K0,Qc)=>{"use strict";var NT=ta(),BT=Array.prototype,MT=BT.splice;function kT(e){var t=this.__data__,r=NT(t,e);if(r<0)return!1;var a=t.length-1;return r==a?t.pop():MT.call(t,r,1),--this.size,!0}Qc.exports=kT});var $c=u((V0,Wc)=>{"use strict";var GT=ta();function FT(e){var t=this.__data__,r=GT(t,e);return r<0?void 0:t[r][1]}Wc.exports=FT});var Vc=u((Y0,Kc)=>{"use strict";var QT=ta();function jT(e){return QT(this.__data__,e)>-1}Kc.exports=jT});var Hc=u((H0,Yc)=>{"use strict";var WT=ta();function $T(e,t){var r=this.__data__,a=WT(r,e);return a<0?(++this.size,r.push([e,t])):r[a][1]=t,this}Yc.exports=$T});var ra=u((z0,zc)=>{"use strict";var KT=kc(),VT=jc(),YT=$c(),HT=Vc(),zT=Hc();function Jt(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t<r;){var a=e[t];this.set(a[0],a[1])}}Jt.prototype.clear=KT;Jt.prototype.delete=VT;Jt.prototype.get=YT;Jt.prototype.has=HT;Jt.prototype.set=zT;zc.exports=Jt});var rn=u((J0,Jc)=>{"use strict";var JT=yt(),XT=pe(),ZT=JT(XT,"Map");Jc.exports=ZT});var el=u((X0,Zc)=>{"use strict";var Xc=Bc(),eE=ra(),tE=rn();function rE(){this.size=0,this.__data__={hash:new Xc,map:new(tE||eE),string:new Xc}}Zc.exports=rE});var rl=u((Z0,tl)=>{"use strict";function aE(e){var t=typeof e;return t=="string"||t=="number"||t=="symbol"||t=="boolean"?e!=="__proto__":e===null}tl.exports=aE});var aa=u((eF,al)=>{"use strict";var nE=rl();function oE(e,t){var r=e.__data__;return nE(t)?r[typeof t=="string"?"string":"hash"]:r.map}al.exports=oE});var ol=u((tF,nl)=>{"use strict";var sE=aa();function iE(e){var t=sE(this,e).delete(e);return this.size-=t?1:0,t}nl.exports=iE});var il=u((rF,sl)=>{"use strict";var uE=aa();function pE(e){return uE(this,e).get(e)}sl.exports=pE});var pl=u((aF,ul)=>{"use strict";var cE=aa();function lE(e){return cE(this,e).has(e)}ul.exports=lE});var ll=u((nF,cl)=>{"use strict";var dE=aa();function fE(e,t){var r=dE(this,e),a=r.size;return r.set(e,t),this.size+=r.size==a?0:1,this}cl.exports=fE});var an=u((oF,dl)=>{"use strict";var mE=el(),gE=ol(),yE=il(),hE=pl(),AE=ll();function Xt(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t<r;){var a=e[t];this.set(a[0],a[1])}}Xt.prototype.clear=mE;Xt.prototype.delete=gE;Xt.prototype.get=yE;Xt.prototype.has=hE;Xt.prototype.set=AE;dl.exports=Xt});var ml=u((sF,fl)=>{"use strict";var bE="__lodash_hash_undefined__";function IE(e){return this.__data__.set(e,bE),this}fl.exports=IE});var yl=u((iF,gl)=>{"use strict";function SE(e){return this.__data__.has(e)}gl.exports=SE});var Mo=u((uF,hl)=>{"use strict";var wE=an(),TE=ml(),EE=yl();function nn(e){var t=-1,r=e==null?0:e.length;for(this.__data__=new wE;++t<r;)this.add(e[t])}nn.prototype.add=nn.prototype.push=TE;nn.prototype.has=EE;hl.exports=nn});var bl=u((pF,Al)=>{"use strict";function RE(e,t,r,a){for(var n=e.length,o=r+(a?1:-1);a?o--:++o<n;)if(t(e[o],o,e))return o;return-1}Al.exports=RE});var Sl=u((cF,Il)=>{"use strict";function vE(e){return e!==e}Il.exports=vE});var Tl=u((lF,wl)=>{"use strict";function _E(e,t,r){for(var a=r-1,n=e.length;++a<n;)if(e[a]===t)return a;return-1}wl.exports=_E});var Rl=u((dF,El)=>{"use strict";var xE=bl(),CE=Sl(),OE=Tl();function LE(e,t,r){return t===t?OE(e,t,r):xE(e,CE,r)}El.exports=LE});var ko=u((fF,vl)=>{"use strict";var PE=Rl();function UE(e,t){var r=e==null?0:e.length;return!!r&&PE(e,t,0)>-1}vl.exports=UE});var xl=u((mF,_l)=>{"use strict";function qE(e,t,r){for(var a=-1,n=e==null?0:e.length;++a<n;)if(r(t,e[a]))return!0;return!1}_l.exports=qE});var Go=u((gF,Cl)=>{"use strict";function DE(e,t){return e.has(t)}Cl.exports=DE});var Fo=u((yF,Ol)=>{"use strict";var NE=yt(),BE=pe(),ME=NE(BE,"Set");Ol.exports=ME});var Qo=u((hF,Ll)=>{"use strict";function kE(){}Ll.exports=kE});var on=u((AF,Pl)=>{"use strict";function GE(e){var t=-1,r=Array(e.size);return e.forEach(function(a){r[++t]=a}),r}Pl.exports=GE});var ql=u((bF,Ul)=>{"use strict";var jo=Fo(),FE=Qo(),QE=on(),jE=1/0,WE=jo&&1/QE(new jo([,-0]))[1]==jE?function(e){return new jo(e)}:FE;Ul.exports=WE});var Nl=u((IF,Dl)=>{"use strict";var $E=Mo(),KE=ko(),VE=xl(),YE=Go(),HE=ql(),zE=on(),JE=200;function XE(e,t,r){var a=-1,n=KE,o=e.length,s=!0,i=[],p=i;if(r)s=!1,n=VE;else if(o>=JE){var f=t?null:HE(e);if(f)return zE(f);s=!1,n=YE,p=new $E}else p=t?[]:i;e:for(;++a<o;){var m=e[a],g=t?t(m):m;if(m=r||m!==0?m:0,s&&g===g){for(var y=p.length;y--;)if(p[y]===g)continue e;t&&p.push(g),i.push(m)}else n(p,g,r)||(p!==i&&p.push(g),i.push(m))}return i}Dl.exports=XE});var sn=u((SF,Bl)=>{"use strict";var ZE=9007199254740991;function eR(e){return typeof e=="number"&&e>-1&&e%1==0&&e<=ZE}Bl.exports=eR});var Zt=u((wF,Ml)=>{"use strict";var tR=Zr(),rR=sn();function aR(e){return e!=null&&rR(e.length)&&!tR(e)}Ml.exports=aR});var Wo=u((TF,kl)=>{"use strict";var nR=Zt(),oR=be();function sR(e){return oR(e)&&nR(e)}kl.exports=sR});var Fl=u((EF,Gl)=>{"use strict";var iR=Lo(),uR=Bo(),pR=Nl(),cR=Wo(),lR=uR(function(e){return pR(iR(e,1,cR,!0))});Gl.exports=lR});var jl=u((RF,Ql)=>{"use strict";var dR=ra();function fR(){this.__data__=new dR,this.size=0}Ql.exports=fR});var $l=u((vF,Wl)=>{"use strict";function mR(e){var t=this.__data__,r=t.delete(e);return this.size=t.size,r}Wl.exports=mR});var Vl=u((_F,Kl)=>{"use strict";function gR(e){return this.__data__.get(e)}Kl.exports=gR});var Hl=u((xF,Yl)=>{"use strict";function yR(e){return this.__data__.has(e)}Yl.exports=yR});var Jl=u((CF,zl)=>{"use strict";var hR=ra(),AR=rn(),bR=an(),IR=200;function SR(e,t){var r=this.__data__;if(r instanceof hR){var a=r.__data__;if(!AR||a.length<IR-1)return a.push([e,t]),this.size=++r.size,this;r=this.__data__=new bR(a)}return r.set(e,t),this.size=r.size,this}zl.exports=SR});var na=u((OF,Xl)=>{"use strict";var wR=ra(),TR=jl(),ER=$l(),RR=Vl(),vR=Hl(),_R=Jl();function er(e){var t=this.__data__=new wR(e);this.size=t.size}er.prototype.clear=TR;er.prototype.delete=ER;er.prototype.get=RR;er.prototype.has=vR;er.prototype.set=_R;Xl.exports=er});var oa=u((LF,ed)=>{"use strict";var Zl=Do();function xR(e,t,r){t=="__proto__"&&Zl?Zl(e,t,{configurable:!0,enumerable:!0,value:r,writable:!0}):e[t]=r}ed.exports=xR});var $o=u((PF,td)=>{"use strict";var CR=oa(),OR=zt();function LR(e,t,r){(r!==void 0&&!OR(e[t],r)||r===void 0&&!(t in e))&&CR(e,t,r)}td.exports=LR});var ad=u((UF,rd)=>{"use strict";function PR(e){return function(t,r,a){for(var n=-1,o=Object(t),s=a(t),i=s.length;i--;){var p=s[e?i:++n];if(r(o[p],p,o)===!1)break}return t}}rd.exports=PR});var Ko=u((qF,nd)=>{"use strict";var UR=ad(),qR=UR();nd.exports=qR});var Vo=u((sa,tr)=>{"use strict";var DR=pe(),ud=typeof sa=="object"&&sa&&!sa.nodeType&&sa,od=ud&&typeof tr=="object"&&tr&&!tr.nodeType&&tr,NR=od&&od.exports===ud,sd=NR?DR.Buffer:void 0,id=sd?sd.allocUnsafe:void 0;function BR(e,t){if(t)return e.slice();var r=e.length,a=id?id(r):new e.constructor(r);return e.copy(a),a}tr.exports=BR});var Yo=u((DF,pd)=>{"use strict";var MR=pe(),kR=MR.Uint8Array;pd.exports=kR});var un=u((NF,ld)=>{"use strict";var cd=Yo();function GR(e){var t=new e.constructor(e.byteLength);return new cd(t).set(new cd(e)),t}ld.exports=GR});var Ho=u((BF,dd)=>{"use strict";var FR=un();function QR(e,t){var r=t?FR(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.length)}dd.exports=QR});var rr=u((MF,fd)=>{"use strict";function jR(e,t){var r=-1,a=e.length;for(t||(t=Array(a));++r<a;)t[r]=e[r];return t}fd.exports=jR});var ia=u((kF,gd)=>{"use strict";var WR=xe(),md=Object.create,$R=function(){function e(){}return function(t){if(!WR(t))return{};if(md)return md(t);e.prototype=t;var r=new e;return e.prototype=void 0,r}}();gd.exports=$R});var zo=u((GF,yd)=>{"use strict";function KR(e,t){return function(r){return e(t(r))}}yd.exports=KR});var pn=u((FF,hd)=>{"use strict";var VR=zo(),YR=VR(Object.getPrototypeOf,Object);hd.exports=YR});var cn=u((QF,Ad)=>{"use strict";var HR=Object.prototype;function zR(e){var t=e&&e.constructor,r=typeof t=="function"&&t.prototype||HR;return e===r}Ad.exports=zR});var Jo=u((jF,bd)=>{"use strict";var JR=ia(),XR=pn(),ZR=cn();function ev(e){return typeof e.constructor=="function"&&!ZR(e)?JR(XR(e)):{}}bd.exports=ev});var Sd=u((WF,Id)=>{"use strict";function tv(){return!1}Id.exports=tv});var pa=u((ua,ar)=>{"use strict";var rv=pe(),av=Sd(),Ed=typeof ua=="object"&&ua&&!ua.nodeType&&ua,wd=Ed&&typeof ar=="object"&&ar&&!ar.nodeType&&ar,nv=wd&&wd.exports===Ed,Td=nv?rv.Buffer:void 0,ov=Td?Td.isBuffer:void 0,sv=ov||av;ar.exports=sv});var Xo=u(($F,vd)=>{"use strict";var iv=gt(),uv=pn(),pv=be(),cv="[object Object]",lv=Function.prototype,dv=Object.prototype,Rd=lv.toString,fv=dv.hasOwnProperty,mv=Rd.call(Object);function gv(e){if(!pv(e)||iv(e)!=cv)return!1;var t=uv(e);if(t===null)return!0;var r=fv.call(t,"constructor")&&t.constructor;return typeof r=="function"&&r instanceof r&&Rd.call(r)==mv}vd.exports=gv});var xd=u((KF,_d)=>{"use strict";var yv=gt(),hv=sn(),Av=be(),bv="[object Arguments]",Iv="[object Array]",Sv="[object Boolean]",wv="[object Date]",Tv="[object Error]",Ev="[object Function]",Rv="[object Map]",vv="[object Number]",_v="[object Object]",xv="[object RegExp]",Cv="[object Set]",Ov="[object String]",Lv="[object WeakMap]",Pv="[object ArrayBuffer]",Uv="[object DataView]",qv="[object Float32Array]",Dv="[object Float64Array]",Nv="[object Int8Array]",Bv="[object Int16Array]",Mv="[object Int32Array]",kv="[object Uint8Array]",Gv="[object Uint8ClampedArray]",Fv="[object Uint16Array]",Qv="[object Uint32Array]",B={};B[qv]=B[Dv]=B[Nv]=B[Bv]=B[Mv]=B[kv]=B[Gv]=B[Fv]=B[Qv]=!0;B[bv]=B[Iv]=B[Pv]=B[Sv]=B[Uv]=B[wv]=B[Tv]=B[Ev]=B[Rv]=B[vv]=B[_v]=B[xv]=B[Cv]=B[Ov]=B[Lv]=!1;function jv(e){return Av(e)&&hv(e.length)&&!!B[yv(e)]}_d.exports=jv});var ln=u((VF,Cd)=>{"use strict";function Wv(e){return function(t){return e(t)}}Cd.exports=Wv});var dn=u((ca,nr)=>{"use strict";var $v=Oo(),Od=typeof ca=="object"&&ca&&!ca.nodeType&&ca,la=Od&&typeof nr=="object"&&nr&&!nr.nodeType&&nr,Kv=la&&la.exports===Od,Zo=Kv&&$v.process,Vv=function(){try{var e=la&&la.require&&la.require("util").types;return e||Zo&&Zo.binding&&Zo.binding("util")}catch{}}();nr.exports=Vv});var fn=u((YF,Ud)=>{"use strict";var Yv=xd(),Hv=ln(),Ld=dn(),Pd=Ld&&Ld.isTypedArray,zv=Pd?Hv(Pd):Yv;Ud.exports=zv});var es=u((HF,qd)=>{"use strict";function Jv(e,t){if(!(t==="constructor"&&typeof e[t]=="function")&&t!="__proto__")return e[t]}qd.exports=Jv});var ts=u((zF,Dd)=>{"use strict";var Xv=oa(),Zv=zt(),e_=Object.prototype,t_=e_.hasOwnProperty;function r_(e,t,r){var a=e[t];(!(t_.call(e,t)&&Zv(a,r))||r===void 0&&!(t in e))&&Xv(e,t,r)}Dd.exports=r_});var or=u((JF,Nd)=>{"use strict";var a_=ts(),n_=oa();function o_(e,t,r,a){var n=!r;r||(r={});for(var o=-1,s=t.length;++o<s;){var i=t[o],p=a?a(r[i],e[i],i,r,e):void 0;p===void 0&&(p=e[i]),n?n_(r,i,p):a_(r,i,p)}return r}Nd.exports=o_});var Md=u((XF,Bd)=>{"use strict";function s_(e,t){for(var r=-1,a=Array(e);++r<e;)a[r]=t(r);return a}Bd.exports=s_});var da=u((ZF,kd)=>{"use strict";var i_=9007199254740991,u_=/^(?:0|[1-9]\d*)$/;function p_(e,t){var r=typeof e;return t=t??i_,!!t&&(r=="number"||r!="symbol"&&u_.test(e))&&e>-1&&e%1==0&&e<t}kd.exports=p_});var rs=u((e1,Gd)=>{"use strict";var c_=Md(),l_=Jr(),d_=se(),f_=pa(),m_=da(),g_=fn(),y_=Object.prototype,h_=y_.hasOwnProperty;function A_(e,t){var r=d_(e),a=!r&&l_(e),n=!r&&!a&&f_(e),o=!r&&!a&&!n&&g_(e),s=r||a||n||o,i=s?c_(e.length,String):[],p=i.length;for(var f in e)(t||h_.call(e,f))&&!(s&&(f=="length"||n&&(f=="offset"||f=="parent")||o&&(f=="buffer"||f=="byteLength"||f=="byteOffset")||m_(f,p)))&&i.push(f);return i}Gd.exports=A_});var Qd=u((t1,Fd)=>{"use strict";function b_(e){var t=[];if(e!=null)for(var r in Object(e))t.push(r);return t}Fd.exports=b_});var Wd=u((r1,jd)=>{"use strict";var I_=xe(),S_=cn(),w_=Qd(),T_=Object.prototype,E_=T_.hasOwnProperty;function R_(e){if(!I_(e))return w_(e);var t=S_(e),r=[];for(var a in e)a=="constructor"&&(t||!E_.call(e,a))||r.push(a);return r}jd.exports=R_});var sr=u((a1,$d)=>{"use strict";var v_=rs(),__=Wd(),x_=Zt();function C_(e){return x_(e)?v_(e,!0):__(e)}$d.exports=C_});var Vd=u((n1,Kd)=>{"use strict";var O_=or(),L_=sr();function P_(e){return O_(e,L_(e))}Kd.exports=P_});var Zd=u((o1,Xd)=>{"use strict";var Yd=$o(),U_=Vo(),q_=Ho(),D_=rr(),N_=Jo(),Hd=Jr(),zd=se(),B_=Wo(),M_=pa(),k_=Zr(),G_=xe(),F_=Xo(),Q_=fn(),Jd=es(),j_=Vd();function W_(e,t,r,a,n,o,s){var i=Jd(e,r),p=Jd(t,r),f=s.get(p);if(f){Yd(e,r,f);return}var m=o?o(i,p,r+"",e,t,s):void 0,g=m===void 0;if(g){var y=zd(p),I=!y&&M_(p),C=!y&&!I&&Q_(p);m=p,y||I||C?zd(i)?m=i:B_(i)?m=D_(i):I?(g=!1,m=U_(p,!0)):C?(g=!1,m=q_(p,!0)):m=[]:F_(p)||Hd(p)?(m=i,Hd(i)?m=j_(i):(!G_(i)||k_(i))&&(m=N_(p))):g=!1}g&&(s.set(p,m),n(m,p,a,o,s),s.delete(p)),Yd(e,r,m)}Xd.exports=W_});var rf=u((s1,tf)=>{"use strict";var $_=na(),K_=$o(),V_=Ko(),Y_=Zd(),H_=xe(),z_=sr(),J_=es();function ef(e,t,r,a,n){e!==t&&V_(t,function(o,s){if(n||(n=new $_),H_(o))Y_(e,t,s,r,ef,a,n);else{var i=a?a(J_(e,s),o,s+"",e,t,n):void 0;i===void 0&&(i=o),K_(e,s,i)}},z_)}tf.exports=ef});var nf=u((i1,af)=>{"use strict";var X_=zt(),Z_=Zt(),ex=da(),tx=xe();function rx(e,t,r){if(!tx(r))return!1;var a=typeof t;return(a=="number"?Z_(r)&&ex(t,r.length):a=="string"&&t in r)?X_(r[t],e):!1}af.exports=rx});var sf=u((u1,of)=>{"use strict";var ax=Bo(),nx=nf();function ox(e){return ax(function(t,r){var a=-1,n=r.length,o=n>1?r[n-1]:void 0,s=n>2?r[2]:void 0;for(o=e.length>3&&typeof o=="function"?(n--,o):void 0,s&&nx(r[0],r[1],s)&&(o=n<3?void 0:o,n=1),t=Object(t);++a<n;){var i=r[a];i&&e(t,i,a,o)}return t})}of.exports=ox});var as=u((p1,uf)=>{"use strict";var sx=rf(),ix=sf(),ux=ix(function(e,t,r){sx(e,t,r)});uf.exports=ux});var lm=u(ge=>{"use strict";ge.aliasToReal={each:"forEach",eachRight:"forEachRight",entries:"toPairs",entriesIn:"toPairsIn",extend:"assignIn",extendAll:"assignInAll",extendAllWith:"assignInAllWith",extendWith:"assignInWith",first:"head",conforms:"conformsTo",matches:"isMatch",property:"get",__:"placeholder",F:"stubFalse",T:"stubTrue",all:"every",allPass:"overEvery",always:"constant",any:"some",anyPass:"overSome",apply:"spread",assoc:"set",assocPath:"set",complement:"negate",compose:"flowRight",contains:"includes",dissoc:"unset",dissocPath:"unset",dropLast:"dropRight",dropLastWhile:"dropRightWhile",equals:"isEqual",identical:"eq",indexBy:"keyBy",init:"initial",invertObj:"invert",juxt:"over",omitAll:"omit",nAry:"ary",path:"get",pathEq:"matchesProperty",pathOr:"getOr",paths:"at",pickAll:"pick",pipe:"flow",pluck:"map",prop:"get",propEq:"matchesProperty",propOr:"getOr",props:"at",symmetricDifference:"xor",symmetricDifferenceBy:"xorBy",symmetricDifferenceWith:"xorWith",takeLast:"takeRight",takeLastWhile:"takeRightWhile",unapply:"rest",unnest:"flatten",useWith:"overArgs",where:"conformsTo",whereEq:"isMatch",zipObj:"zipObject"};ge.aryMethod={1:["assignAll","assignInAll","attempt","castArray","ceil","create","curry","curryRight","defaultsAll","defaultsDeepAll","floor","flow","flowRight","fromPairs","invert","iteratee","memoize","method","mergeAll","methodOf","mixin","nthArg","over","overEvery","overSome","rest","reverse","round","runInContext","spread","template","trim","trimEnd","trimStart","uniqueId","words","zipAll"],2:["add","after","ary","assign","assignAllWith","assignIn","assignInAllWith","at","before","bind","bindAll","bindKey","chunk","cloneDeepWith","cloneWith","concat","conformsTo","countBy","curryN","curryRightN","debounce","defaults","defaultsDeep","defaultTo","delay","difference","divide","drop","dropRight","dropRightWhile","dropWhile","endsWith","eq","every","filter","find","findIndex","findKey","findLast","findLastIndex","findLastKey","flatMap","flatMapDeep","flattenDepth","forEach","forEachRight","forIn","forInRight","forOwn","forOwnRight","get","groupBy","gt","gte","has","hasIn","includes","indexOf","intersection","invertBy","invoke","invokeMap","isEqual","isMatch","join","keyBy","lastIndexOf","lt","lte","map","mapKeys","mapValues","matchesProperty","maxBy","meanBy","merge","mergeAllWith","minBy","multiply","nth","omit","omitBy","overArgs","pad","padEnd","padStart","parseInt","partial","partialRight","partition","pick","pickBy","propertyOf","pull","pullAll","pullAt","random","range","rangeRight","rearg","reject","remove","repeat","restFrom","result","sampleSize","some","sortBy","sortedIndex","sortedIndexOf","sortedLastIndex","sortedLastIndexOf","sortedUniqBy","split","spreadFrom","startsWith","subtract","sumBy","take","takeRight","takeRightWhile","takeWhile","tap","throttle","thru","times","trimChars","trimCharsEnd","trimCharsStart","truncate","union","uniqBy","uniqWith","unset","unzipWith","without","wrap","xor","zip","zipObject","zipObjectDeep"],3:["assignInWith","assignWith","clamp","differenceBy","differenceWith","findFrom","findIndexFrom","findLastFrom","findLastIndexFrom","getOr","includesFrom","indexOfFrom","inRange","intersectionBy","intersectionWith","invokeArgs","invokeArgsMap","isEqualWith","isMatchWith","flatMapDepth","lastIndexOfFrom","mergeWith","orderBy","padChars","padCharsEnd","padCharsStart","pullAllBy","pullAllWith","rangeStep","rangeStepRight","reduce","reduceRight","replace","set","slice","sortedIndexBy","sortedLastIndexBy","transform","unionBy","unionWith","update","xorBy","xorWith","zipWith"],4:["fill","setWith","updateWith"]};ge.aryRearg={2:[1,0],3:[2,0,1],4:[3,2,0,1]};ge.iterateeAry={dropRightWhile:1,dropWhile:1,every:1,filter:1,find:1,findFrom:1,findIndex:1,findIndexFrom:1,findKey:1,findLast:1,findLastFrom:1,findLastIndex:1,findLastIndexFrom:1,findLastKey:1,flatMap:1,flatMapDeep:1,flatMapDepth:1,forEach:1,forEachRight:1,forIn:1,forInRight:1,forOwn:1,forOwnRight:1,map:1,mapKeys:1,mapValues:1,partition:1,reduce:2,reduceRight:2,reject:1,remove:1,some:1,takeRightWhile:1,takeWhile:1,times:1,transform:2};ge.iterateeRearg={mapKeys:[1],reduceRight:[1,0]};ge.methodRearg={assignInAllWith:[1,0],assignInWith:[1,2,0],assignAllWith:[1,0],assignWith:[1,2,0],differenceBy:[1,2,0],differenceWith:[1,2,0],getOr:[2,1,0],intersectionBy:[1,2,0],intersectionWith:[1,2,0],isEqualWith:[1,2,0],isMatchWith:[2,1,0],mergeAllWith:[1,0],mergeWith:[1,2,0],padChars:[2,1,0],padCharsEnd:[2,1,0],padCharsStart:[2,1,0],pullAllBy:[2,1,0],pullAllWith:[2,1,0],rangeStep:[1,2,0],rangeStepRight:[1,2,0],setWith:[3,1,2,0],sortedIndexBy:[2,1,0],sortedLastIndexBy:[2,1,0],unionBy:[1,2,0],unionWith:[1,2,0],updateWith:[3,1,2,0],xorBy:[1,2,0],xorWith:[1,2,0],zipWith:[1,2,0]};ge.methodSpread={assignAll:{start:0},assignAllWith:{start:0},assignInAll:{start:0},assignInAllWith:{start:0},defaultsAll:{start:0},defaultsDeepAll:{start:0},invokeArgs:{start:2},invokeArgsMap:{start:2},mergeAll:{start:0},mergeAllWith:{start:0},partial:{start:1},partialRight:{start:1},without:{start:1},zipAll:{start:0}};ge.mutate={array:{fill:!0,pull:!0,pullAll:!0,pullAllBy:!0,pullAllWith:!0,pullAt:!0,remove:!0,reverse:!0},object:{assign:!0,assignAll:!0,assignAllWith:!0,assignIn:!0,assignInAll:!0,assignInAllWith:!0,assignInWith:!0,assignWith:!0,defaults:!0,defaultsAll:!0,defaultsDeep:!0,defaultsDeepAll:!0,merge:!0,mergeAll:!0,mergeAllWith:!0,mergeWith:!0},set:{set:!0,setWith:!0,unset:!0,update:!0,updateWith:!0}};ge.realToAlias=function(){var e=Object.prototype.hasOwnProperty,t=ge.aliasToReal,r={};for(var a in t){var n=t[a];e.call(r,n)?r[n].push(a):r[n]=[a]}return r}();ge.remap={assignAll:"assign",assignAllWith:"assignWith",assignInAll:"assignIn",assignInAllWith:"assignInWith",curryN:"curry",curryRightN:"curryRight",defaultsAll:"defaults",defaultsDeepAll:"defaultsDeep",findFrom:"find",findIndexFrom:"findIndex",findLastFrom:"findLast",findLastIndexFrom:"findLastIndex",getOr:"get",includesFrom:"includes",indexOfFrom:"indexOf",invokeArgs:"invoke",invokeArgsMap:"invokeMap",lastIndexOfFrom:"lastIndexOf",mergeAll:"merge",mergeAllWith:"mergeWith",padChars:"pad",padCharsEnd:"padEnd",padCharsStart:"padStart",propertyOf:"get",rangeStep:"range",rangeStepRight:"rangeRight",restFrom:"rest",spreadFrom:"spread",trimChars:"trim",trimCharsEnd:"trimEnd",trimCharsStart:"trimStart",zipAll:"zip"};ge.skipFixed={castArray:!0,flow:!0,flowRight:!0,iteratee:!0,mixin:!0,rearg:!0,runInContext:!0};ge.skipRearg={add:!0,assign:!0,assignIn:!0,bind:!0,bindKey:!0,concat:!0,difference:!0,divide:!0,eq:!0,gt:!0,gte:!0,isEqual:!0,lt:!0,lte:!0,matchesProperty:!0,merge:!0,multiply:!0,overArgs:!0,partial:!0,partialRight:!0,propertyOf:!0,random:!0,range:!0,rangeRight:!0,subtract:!0,zip:!0,zipObject:!0,zipObjectDeep:!0}});var Xs=u((qj,dm)=>{"use strict";dm.exports={}});var ym=u((Dj,gm)=>{"use strict";var X=lm(),$C=Xs(),fm=Array.prototype.push;function KC(e,t){return t==2?function(r,a){return e.apply(void 0,arguments)}:function(r){return e.apply(void 0,arguments)}}function Zs(e,t){return t==2?function(r,a){return e(r,a)}:function(r){return e(r)}}function mm(e){for(var t=e?e.length:0,r=Array(t);t--;)r[t]=e[t];return r}function VC(e){return function(t){return e({},t)}}function YC(e,t){return function(){for(var r=arguments.length,a=r-1,n=Array(r);r--;)n[r]=arguments[r];var o=n[t],s=n.slice(0,t);return o&&fm.apply(s,o),t!=a&&fm.apply(s,n.slice(t+1)),e.apply(this,s)}}function ei(e,t){return function(){var r=arguments.length;if(r){for(var a=Array(r);r--;)a[r]=arguments[r];var n=a[0]=t.apply(void 0,a);return e.apply(void 0,a),n}}}function ti(e,t,r,a){var n=typeof t=="function",o=t===Object(t);if(o&&(a=r,r=t,t=void 0),r==null)throw new TypeError;a||(a={});var s={cap:"cap"in a?a.cap:!0,curry:"curry"in a?a.curry:!0,fixed:"fixed"in a?a.fixed:!0,immutable:"immutable"in a?a.immutable:!0,rearg:"rearg"in a?a.rearg:!0},i=n?r:$C,p="curry"in a&&a.curry,f="fixed"in a&&a.fixed,m="rearg"in a&&a.rearg,g=n?r.runInContext():void 0,y=n?r:{ary:e.ary,assign:e.assign,clone:e.clone,curry:e.curry,forEach:e.forEach,isArray:e.isArray,isError:e.isError,isFunction:e.isFunction,isWeakMap:e.isWeakMap,iteratee:e.iteratee,keys:e.keys,rearg:e.rearg,toInteger:e.toInteger,toPath:e.toPath},I=y.ary,C=y.assign,_=y.clone,v=y.curry,R=y.forEach,U=y.isArray,qe=y.isError,Ee=y.isFunction,ct=y.isWeakMap,Qt=y.keys,Ir=y.rearg,Sr=y.toInteger,EI=y.toPath,qu=Qt(X.aryMethod),RI={castArray:function(S){return function(){var h=arguments[0];return U(h)?S(mm(h)):S.apply(void 0,arguments)}},iteratee:function(S){return function(){var h=arguments[0],b=arguments[1],E=S(h,b),O=E.length;return s.cap&&typeof b=="number"?(b=b>2?b-2:1,O&&O<=b?E:Zs(E,b)):E}},mixin:function(S){return function(h){var b=this;if(!Ee(b))return S(b,Object(h));var E=[];return R(Qt(h),function(O){Ee(h[O])&&E.push([O,b.prototype[O]])}),S(b,Object(h)),R(E,function(O){var ie=O[1];Ee(ie)?b.prototype[O[0]]=ie:delete b.prototype[O[0]]}),b}},nthArg:function(S){return function(h){var b=h<0?1:Sr(h)+1;return v(S(h),b)}},rearg:function(S){return function(h,b){var E=b?b.length:0;return v(S(h,b),E)}},runInContext:function(S){return function(h){return ti(e,S(h),a)}}};function vI(S,h){if(s.cap){var b=X.iterateeRearg[S];if(b)return LI(h,b);var E=!n&&X.iterateeAry[S];if(E)return OI(h,E)}return h}function _I(S,h,b){return p||s.curry&&b>1?v(h,b):h}function Du(S,h,b){if(s.fixed&&(f||!X.skipFixed[S])){var E=X.methodSpread[S],O=E&&E.start;return O===void 0?I(h,b):YC(h,O)}return h}function Nu(S,h,b){return s.rearg&&b>1&&(m||!X.skipRearg[S])?Ir(h,X.methodRearg[S]||X.aryRearg[b]):h}function xI(S,h){h=EI(h);for(var b=-1,E=h.length,O=E-1,ie=_(Object(S)),Qe=ie;Qe!=null&&++b<E;){var Re=h[b],je=Qe[Re];je!=null&&!(Ee(je)||qe(je)||ct(je))&&(Qe[Re]=_(b==O?je:Object(je))),Qe=Qe[Re]}return ie}function CI(S){return he.runInContext.convert(S)(void 0)}function Bu(S,h){var b=X.aliasToReal[S]||S,E=X.remap[b]||b,O=a;return function(ie){var Qe=n?g:y,Re=n?g[E]:h,je=C(C({},O),ie);return ti(Qe,b,Re,je)}}function OI(S,h){return Mu(S,function(b){return typeof b=="function"?Zs(b,h):b})}function LI(S,h){return Mu(S,function(b){var E=h.length;return KC(Ir(Zs(b,E),h),E)})}function Mu(S,h){return function(){var b=arguments.length;if(!b)return S();for(var E=Array(b);b--;)E[b]=arguments[b];var O=s.rearg?0:b-1;return E[O]=h(E[O]),S.apply(void 0,E)}}function ku(S,h,b){var E,O=X.aliasToReal[S]||S,ie=h,Qe=RI[O];return Qe?ie=Qe(h):s.immutable&&(X.mutate.array[O]?ie=ei(h,mm):X.mutate.object[O]?ie=ei(h,VC(h)):X.mutate.set[O]&&(ie=ei(h,xI))),R(qu,function(Re){return R(X.aryMethod[Re],function(je){if(O==je){var Gu=X.methodSpread[O],PI=Gu&&Gu.afterRearg;return E=PI?Du(O,Nu(O,ie,Re),Re):Nu(O,Du(O,ie,Re),Re),E=vI(O,E),E=_I(O,E,Re),!1}}),!E}),E||(E=ie),E==h&&(E=p?v(E,1):function(){return h.apply(this,arguments)}),E.convert=Bu(O,h),E.placeholder=h.placeholder=b,E}if(!o)return ku(t,r,i);var he=r,wr=[];return R(qu,function(S){R(X.aryMethod[S],function(h){var b=he[X.remap[h]||h];b&&wr.push([h,ku(h,b,he)])})}),R(Qt(he),function(S){var h=he[S];if(typeof h=="function"){for(var b=wr.length;b--;)if(wr[b][0]==S)return;h.convert=Bu(S,h),wr.push([S,h])}}),R(wr,function(S){he[S[0]]=S[1]}),he.convert=CI,he.placeholder=he,R(Qt(he),function(S){R(X.realToAlias[S]||[],function(h){he[h]=he[S]})}),he}gm.exports=ti});var ri=u((Nj,hm)=>{"use strict";var HC=yt(),zC=pe(),JC=HC(zC,"WeakMap");hm.exports=JC});var ai=u((Bj,bm)=>{"use strict";var Am=ri(),XC=Am&&new Am;bm.exports=XC});var ni=u((Mj,Sm)=>{"use strict";var ZC=Xr(),Im=ai(),eO=Im?function(e,t){return Im.set(e,t),e}:ZC;Sm.exports=eO});var Ta=u((kj,wm)=>{"use strict";var tO=ia(),rO=xe();function aO(e){return function(){var t=arguments;switch(t.length){case 0:return new e;case 1:return new e(t[0]);case 2:return new e(t[0],t[1]);case 3:return new e(t[0],t[1],t[2]);case 4:return new e(t[0],t[1],t[2],t[3]);case 5:return new e(t[0],t[1],t[2],t[3],t[4]);case 6:return new e(t[0],t[1],t[2],t[3],t[4],t[5]);case 7:return new e(t[0],t[1],t[2],t[3],t[4],t[5],t[6])}var r=tO(e.prototype),a=e.apply(r,t);return rO(a)?a:r}}wm.exports=aO});var Em=u((Gj,Tm)=>{"use strict";var nO=Ta(),oO=pe(),sO=1;function iO(e,t,r){var a=t&sO,n=nO(e);function o(){var s=this&&this!==oO&&this instanceof o?n:e;return s.apply(a?r:this,arguments)}return o}Tm.exports=iO});var oi=u((Fj,Rm)=>{"use strict";var uO=Math.max;function pO(e,t,r,a){for(var n=-1,o=e.length,s=r.length,i=-1,p=t.length,f=uO(o-s,0),m=Array(p+f),g=!a;++i<p;)m[i]=t[i];for(;++n<s;)(g||n<o)&&(m[r[n]]=e[n]);for(;f--;)m[i++]=e[n++];return m}Rm.exports=pO});var si=u((Qj,vm)=>{"use strict";var cO=Math.max;function lO(e,t,r,a){for(var n=-1,o=e.length,s=-1,i=r.length,p=-1,f=t.length,m=cO(o-i,0),g=Array(m+f),y=!a;++n<m;)g[n]=e[n];for(var I=n;++p<f;)g[I+p]=t[p];for(;++s<i;)(y||n<o)&&(g[I+r[s]]=e[n++]);return g}vm.exports=lO});var xm=u((jj,_m)=>{"use strict";function dO(e,t){for(var r=e.length,a=0;r--;)e[r]===t&&++a;return a}_m.exports=dO});var Dn=u((Wj,Cm)=>{"use strict";function fO(){}Cm.exports=fO});var Bn=u(($j,Om)=>{"use strict";var mO=ia(),gO=Dn(),yO=4294967295;function Nn(e){this.__wrapped__=e,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=yO,this.__views__=[]}Nn.prototype=mO(gO.prototype);Nn.prototype.constructor=Nn;Om.exports=Nn});var ii=u((Kj,Pm)=>{"use strict";var Lm=ai(),hO=Qo(),AO=Lm?function(e){return Lm.get(e)}:hO;Pm.exports=AO});var qm=u((Vj,Um)=>{"use strict";var bO={};Um.exports=bO});var Bm=u((Yj,Nm)=>{"use strict";var Dm=qm(),IO=Object.prototype,SO=IO.hasOwnProperty;function wO(e){for(var t=e.name+"",r=Dm[t],a=SO.call(Dm,t)?r.length:0;a--;){var n=r[a],o=n.func;if(o==null||o==e)return n.name}return t}Nm.exports=wO});var ui=u((Hj,Mm)=>{"use strict";var TO=ia(),EO=Dn();function Mn(e,t){this.__wrapped__=e,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=void 0}Mn.prototype=TO(EO.prototype);Mn.prototype.constructor=Mn;Mm.exports=Mn});var Gm=u((zj,km)=>{"use strict";var RO=Bn(),vO=ui(),_O=rr();function xO(e){if(e instanceof RO)return e.clone();var t=new vO(e.__wrapped__,e.__chain__);return t.__actions__=_O(e.__actions__),t.__index__=e.__index__,t.__values__=e.__values__,t}km.exports=xO});var jm=u((Jj,Qm)=>{"use strict";var CO=Bn(),Fm=ui(),OO=Dn(),LO=se(),PO=be(),UO=Gm(),qO=Object.prototype,DO=qO.hasOwnProperty;function kn(e){if(PO(e)&&!LO(e)&&!(e instanceof CO)){if(e instanceof Fm)return e;if(DO.call(e,"__wrapped__"))return UO(e)}return new Fm(e)}kn.prototype=OO.prototype;kn.prototype.constructor=kn;Qm.exports=kn});var $m=u((Xj,Wm)=>{"use strict";var NO=Bn(),BO=ii(),MO=Bm(),kO=jm();function GO(e){var t=MO(e),r=kO[t];if(typeof r!="function"||!(t in NO.prototype))return!1;if(e===r)return!0;var a=BO(r);return!!a&&e===a[0]}Wm.exports=GO});var pi=u((Zj,Km)=>{"use strict";var FO=ni(),QO=No(),jO=QO(FO);Km.exports=jO});var Ym=u((eW,Vm)=>{"use strict";var WO=/\{\n\/\* \[wrapped with (.+)\] \*/,$O=/,? & /;function KO(e){var t=e.match(WO);return t?t[1].split($O):[]}Vm.exports=KO});var zm=u((tW,Hm)=>{"use strict";var VO=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/;function YO(e,t){var r=t.length;if(!r)return e;var a=r-1;return t[a]=(r>1?"& ":"")+t[a],t=t.join(r>2?", ":" "),e.replace(VO,`{
|
|
2
2
|
/* [wrapped with `+t+`] */
|
|
3
|
-
`)}Vm.exports=KO});var Gn=u((eW,Hm)=>{"use strict";function VO(e,t){for(var r=-1,a=e==null?0:e.length;++r<a&&t(e[r],r,e)!==!1;);return e}Hm.exports=VO});var Jm=u((tW,zm)=>{"use strict";var YO=Gn(),HO=Mo(),zO=1,JO=2,XO=8,ZO=16,eL=32,tL=64,rL=128,aL=256,nL=512,oL=[["ary",rL],["bind",zO],["bindKey",JO],["curry",XO],["curryRight",ZO],["flip",nL],["partial",eL],["partialRight",tL],["rearg",aL]];function sL(e,t){return YO(oL,function(r){var a="_."+r[0];t&r[1]&&!HO(e,a)&&e.push(a)}),e.sort()}zm.exports=sL});var pi=u((rW,Xm)=>{"use strict";var iL=Km(),uL=Ym(),pL=tn(),cL=Jm();function lL(e,t,r){var a=t+"";return pL(e,uL(a,cL(iL(a),r)))}Xm.exports=lL});var ci=u((aW,tg)=>{"use strict";var dL=jm(),fL=ui(),mL=pi(),gL=1,hL=2,yL=4,AL=8,Zm=32,eg=64;function bL(e,t,r,a,n,o,s,i,p,f){var m=t&AL,g=m?s:void 0,h=m?void 0:s,I=m?o:void 0,C=m?void 0:o;t|=m?Zm:eg,t&=~(m?eg:Zm),t&yL||(t&=~(gL|hL));var _=[e,t,n,I,g,C,h,i,p,f],R=r.apply(void 0,_);return dL(e)&&fL(R,_),R.placeholder=a,mL(R,e,t)}tg.exports=bL});var li=u((nW,rg)=>{"use strict";function IL(e){var t=e;return t.placeholder}rg.exports=IL});var ng=u((oW,ag)=>{"use strict";var SL=tr(),wL=da(),TL=Math.min;function EL(e,t){for(var r=e.length,a=TL(t.length,r),n=SL(e);a--;){var o=t[a];e[a]=wL(o,r)?n[o]:void 0}return e}ag.exports=EL});var Fn=u((sW,sg)=>{"use strict";var og="__lodash_placeholder__";function vL(e,t){for(var r=-1,a=e.length,n=0,o=[];++r<a;){var s=e[r];(s===t||s===og)&&(e[r]=og,o[n++]=r)}return o}sg.exports=vL});var di=u((iW,pg)=>{"use strict";var RL=ni(),_L=oi(),xL=Rm(),ig=Ta(),CL=ci(),OL=li(),LL=ng(),PL=Fn(),UL=pe(),qL=1,DL=2,NL=8,BL=16,ML=128,kL=512;function ug(e,t,r,a,n,o,s,i,p,f){var m=t&ML,g=t&qL,h=t&DL,I=t&(NL|BL),C=t&kL,_=h?void 0:ig(e);function R(){for(var v=arguments.length,U=Array(v),qe=v;qe--;)U[qe]=arguments[qe];if(I)var Te=OL(R),pt=xL(U,Te);if(a&&(U=RL(U,a,n,I)),o&&(U=_L(U,o,s,I)),v-=pt,I&&v<f){var Ft=PL(U,Te);return CL(e,t,ug,R.placeholder,r,U,Ft,i,p,f-v)}var Ir=g?r:this,Sr=h?Ir[e]:e;return v=U.length,i?U=LL(U,i):C&&v>1&&U.reverse(),m&&p<v&&(U.length=p),this&&this!==UL&&this instanceof R&&(Sr=_||ig(Sr)),Sr.apply(Ir,U)}return R}pg.exports=ug});var lg=u((uW,cg)=>{"use strict";var GL=en(),FL=Ta(),QL=di(),jL=ci(),WL=li(),$L=Fn(),KL=pe();function VL(e,t,r){var a=FL(e);function n(){for(var o=arguments.length,s=Array(o),i=o,p=WL(n);i--;)s[i]=arguments[i];var f=o<3&&s[0]!==p&&s[o-1]!==p?[]:$L(s,p);if(o-=f.length,o<r)return jL(e,t,QL,n.placeholder,void 0,s,f,void 0,void 0,r-o);var m=this&&this!==KL&&this instanceof n?a:e;return GL(m,this,s)}return n}cg.exports=VL});var fg=u((pW,dg)=>{"use strict";var YL=en(),HL=Ta(),zL=pe(),JL=1;function XL(e,t,r,a){var n=t&JL,o=HL(e);function s(){for(var i=-1,p=arguments.length,f=-1,m=a.length,g=Array(m+p),h=this&&this!==zL&&this instanceof s?o:e;++f<m;)g[f]=a[f];for(;p--;)g[f++]=arguments[++i];return YL(h,n?r:this,g)}return s}dg.exports=XL});var bg=u((cW,Ag)=>{"use strict";var ZL=ni(),eP=oi(),mg=Fn(),gg="__lodash_placeholder__",fi=1,tP=2,rP=4,hg=8,Ea=128,yg=256,aP=Math.min;function nP(e,t){var r=e[1],a=t[1],n=r|a,o=n<(fi|tP|Ea),s=a==Ea&&r==hg||a==Ea&&r==yg&&e[7].length<=t[8]||a==(Ea|yg)&&t[7].length<=t[8]&&r==hg;if(!(o||s))return e;a&fi&&(e[2]=t[2],n|=r&fi?0:rP);var i=t[3];if(i){var p=e[3];e[3]=p?ZL(p,i,t[4]):i,e[4]=p?mg(e[3],gg):t[4]}return i=t[5],i&&(p=e[5],e[5]=p?eP(p,i,t[6]):i,e[6]=p?mg(e[5],gg):t[6]),i=t[7],i&&(e[7]=i),a&Ea&&(e[8]=e[8]==null?t[8]:aP(e[8],t[8])),e[9]==null&&(e[9]=t[9]),e[0]=t[0],e[1]=n,e}Ag.exports=nP});var Sg=u((lW,Ig)=>{"use strict";var oP=/\s/;function sP(e){for(var t=e.length;t--&&oP.test(e.charAt(t)););return t}Ig.exports=sP});var Tg=u((dW,wg)=>{"use strict";var iP=Sg(),uP=/^\s+/;function pP(e){return e&&e.slice(0,iP(e)+1).replace(uP,"")}wg.exports=pP});var fr=u((fW,Eg)=>{"use strict";var cP=mt(),lP=be(),dP="[object Symbol]";function fP(e){return typeof e=="symbol"||lP(e)&&cP(e)==dP}Eg.exports=fP});var xg=u((mW,_g)=>{"use strict";var mP=Tg(),vg=_e(),gP=fr(),Rg=0/0,hP=/^[-+]0x[0-9a-f]+$/i,yP=/^0b[01]+$/i,AP=/^0o[0-7]+$/i,bP=parseInt;function IP(e){if(typeof e=="number")return e;if(gP(e))return Rg;if(vg(e)){var t=typeof e.valueOf=="function"?e.valueOf():e;e=vg(t)?t+"":t}if(typeof e!="string")return e===0?e:+e;e=mP(e);var r=yP.test(e);return r||AP.test(e)?bP(e.slice(2),r?2:8):hP.test(e)?Rg:+e}_g.exports=IP});var Lg=u((gW,Og)=>{"use strict";var SP=xg(),Cg=1/0,wP=17976931348623157e292;function TP(e){if(!e)return e===0?e:0;if(e=SP(e),e===Cg||e===-Cg){var t=e<0?-1:1;return t*wP}return e===e?e:0}Og.exports=TP});var mi=u((hW,Pg)=>{"use strict";var EP=Lg();function vP(e){var t=EP(e),r=t%1;return t===t?r?t-r:t:0}Pg.exports=vP});var Qn=u((yW,Bg)=>{"use strict";var RP=ai(),_P=wm(),xP=lg(),CP=di(),OP=fg(),LP=si(),PP=bg(),UP=ui(),qP=pi(),Ug=mi(),DP="Expected a function",qg=1,NP=2,gi=8,hi=16,yi=32,Dg=64,Ng=Math.max;function BP(e,t,r,a,n,o,s,i){var p=t&NP;if(!p&&typeof e!="function")throw new TypeError(DP);var f=a?a.length:0;if(f||(t&=~(yi|Dg),a=n=void 0),s=s===void 0?s:Ng(Ug(s),0),i=i===void 0?i:Ug(i),f-=n?n.length:0,t&Dg){var m=a,g=n;a=n=void 0}var h=p?void 0:LP(e),I=[e,t,r,a,n,m,g,o,s,i];if(h&&PP(I,h),e=I[0],t=I[1],r=I[2],a=I[3],n=I[4],i=I[9]=I[9]===void 0?p?0:e.length:Ng(I[9]-f,0),!i&&t&(gi|hi)&&(t&=~(gi|hi)),!t||t==qg)var C=_P(e,t,r);else t==gi||t==hi?C=xP(e,t,i):(t==yi||t==(qg|yi))&&!n.length?C=OP(e,t,r,a):C=CP.apply(void 0,I);var _=h?RP:UP;return qP(_(C,I),e,t)}Bg.exports=BP});var kg=u((AW,Mg)=>{"use strict";var MP=Qn(),kP=128;function GP(e,t,r){return t=r?void 0:t,t=e&&t==null?e.length:t,MP(e,kP,void 0,void 0,void 0,void 0,t)}Mg.exports=GP});var Fg=u((bW,Gg)=>{"use strict";var FP=Ho(),QP=FP(Object.keys,Object);Gg.exports=QP});var Ai=u((IW,Qg)=>{"use strict";var jP=cn(),WP=Fg(),$P=Object.prototype,KP=$P.hasOwnProperty;function VP(e){if(!jP(e))return WP(e);var t=[];for(var r in Object(e))KP.call(e,r)&&r!="constructor"&&t.push(r);return t}Qg.exports=VP});var mr=u((SW,jg)=>{"use strict";var YP=ts(),HP=Ai(),zP=Xt();function JP(e){return zP(e)?YP(e):HP(e)}jg.exports=JP});var bi=u((wW,Wg)=>{"use strict";var XP=nr(),ZP=mr();function eU(e,t){return e&&XP(t,ZP(t),e)}Wg.exports=eU});var Kg=u((TW,$g)=>{"use strict";var tU=nr(),rU=or();function aU(e,t){return e&&tU(t,rU(t),e)}$g.exports=aU});var Yg=u((EW,Vg)=>{"use strict";function nU(e,t){for(var r=-1,a=e==null?0:e.length,n=0,o=[];++r<a;){var s=e[r];t(s,r,e)&&(o[n++]=s)}return o}Vg.exports=nU});var Ii=u((vW,Hg)=>{"use strict";function oU(){return[]}Hg.exports=oU});var jn=u((RW,Jg)=>{"use strict";var sU=Yg(),iU=Ii(),uU=Object.prototype,pU=uU.propertyIsEnumerable,zg=Object.getOwnPropertySymbols,cU=zg?function(e){return e==null?[]:(e=Object(e),sU(zg(e),function(t){return pU.call(e,t)}))}:iU;Jg.exports=cU});var Zg=u((_W,Xg)=>{"use strict";var lU=nr(),dU=jn();function fU(e,t){return lU(e,dU(e),t)}Xg.exports=fU});var Si=u((xW,eh)=>{"use strict";var mU=Za(),gU=pn(),hU=jn(),yU=Ii(),AU=Object.getOwnPropertySymbols,bU=AU?function(e){for(var t=[];e;)mU(t,hU(e)),e=gU(e);return t}:yU;eh.exports=bU});var rh=u((CW,th)=>{"use strict";var IU=nr(),SU=Si();function wU(e,t){return IU(e,SU(e),t)}th.exports=wU});var wi=u((OW,ah)=>{"use strict";var TU=Za(),EU=se();function vU(e,t,r){var a=t(e);return EU(e)?a:TU(a,r(e))}ah.exports=vU});var Ti=u((LW,nh)=>{"use strict";var RU=wi(),_U=jn(),xU=mr();function CU(e){return RU(e,xU,_U)}nh.exports=CU});var sh=u((PW,oh)=>{"use strict";var OU=wi(),LU=Si(),PU=or();function UU(e){return OU(e,PU,LU)}oh.exports=UU});var uh=u((UW,ih)=>{"use strict";var qU=gt(),DU=pe(),NU=qU(DU,"DataView");ih.exports=NU});var ch=u((qW,ph)=>{"use strict";var BU=gt(),MU=pe(),kU=BU(MU,"Promise");ph.exports=kU});var hr=u((DW,yh)=>{"use strict";var Ei=uh(),vi=rn(),Ri=ch(),_i=Go(),xi=ti(),hh=mt(),gr=Uo(),lh="[object Map]",GU="[object Object]",dh="[object Promise]",fh="[object Set]",mh="[object WeakMap]",gh="[object DataView]",FU=gr(Ei),QU=gr(vi),jU=gr(Ri),WU=gr(_i),$U=gr(xi),Nt=hh;(Ei&&Nt(new Ei(new ArrayBuffer(1)))!=gh||vi&&Nt(new vi)!=lh||Ri&&Nt(Ri.resolve())!=dh||_i&&Nt(new _i)!=fh||xi&&Nt(new xi)!=mh)&&(Nt=function(e){var t=hh(e),r=t==GU?e.constructor:void 0,a=r?gr(r):"";if(a)switch(a){case FU:return gh;case QU:return lh;case jU:return dh;case WU:return fh;case $U:return mh}return t});yh.exports=Nt});var bh=u((NW,Ah)=>{"use strict";var KU=Object.prototype,VU=KU.hasOwnProperty;function YU(e){var t=e.length,r=new e.constructor(t);return t&&typeof e[0]=="string"&&VU.call(e,"index")&&(r.index=e.index,r.input=e.input),r}Ah.exports=YU});var Sh=u((BW,Ih)=>{"use strict";var HU=un();function zU(e,t){var r=t?HU(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.byteLength)}Ih.exports=zU});var Th=u((MW,wh)=>{"use strict";var JU=/\w*$/;function XU(e){var t=new e.constructor(e.source,JU.exec(e));return t.lastIndex=e.lastIndex,t}wh.exports=XU});var xh=u((kW,_h)=>{"use strict";var Eh=xt(),vh=Eh?Eh.prototype:void 0,Rh=vh?vh.valueOf:void 0;function ZU(e){return Rh?Object(Rh.call(e)):{}}_h.exports=ZU});var Oh=u((GW,Ch)=>{"use strict";var eq=un(),tq=Sh(),rq=Th(),aq=xh(),nq=Yo(),oq="[object Boolean]",sq="[object Date]",iq="[object Map]",uq="[object Number]",pq="[object RegExp]",cq="[object Set]",lq="[object String]",dq="[object Symbol]",fq="[object ArrayBuffer]",mq="[object DataView]",gq="[object Float32Array]",hq="[object Float64Array]",yq="[object Int8Array]",Aq="[object Int16Array]",bq="[object Int32Array]",Iq="[object Uint8Array]",Sq="[object Uint8ClampedArray]",wq="[object Uint16Array]",Tq="[object Uint32Array]";function Eq(e,t,r){var a=e.constructor;switch(t){case fq:return eq(e);case oq:case sq:return new a(+e);case mq:return tq(e,r);case gq:case hq:case yq:case Aq:case bq:case Iq:case Sq:case wq:case Tq:return nq(e,r);case iq:return new a;case uq:case lq:return new a(e);case pq:return rq(e);case cq:return new a;case dq:return aq(e)}}Ch.exports=Eq});var Ph=u((FW,Lh)=>{"use strict";var vq=hr(),Rq=be(),_q="[object Map]";function xq(e){return Rq(e)&&vq(e)==_q}Lh.exports=xq});var Nh=u((QW,Dh)=>{"use strict";var Cq=Ph(),Oq=ln(),Uh=dn(),qh=Uh&&Uh.isMap,Lq=qh?Oq(qh):Cq;Dh.exports=Lq});var Mh=u((jW,Bh)=>{"use strict";var Pq=hr(),Uq=be(),qq="[object Set]";function Dq(e){return Uq(e)&&Pq(e)==qq}Bh.exports=Dq});var Qh=u((WW,Fh)=>{"use strict";var Nq=Mh(),Bq=ln(),kh=dn(),Gh=kh&&kh.isSet,Mq=Gh?Bq(Gh):Nq;Fh.exports=Mq});var Ci=u(($W,Kh)=>{"use strict";var kq=na(),Gq=Gn(),Fq=es(),Qq=bi(),jq=Kg(),Wq=Ko(),$q=tr(),Kq=Zg(),Vq=rh(),Yq=Ti(),Hq=sh(),zq=hr(),Jq=bh(),Xq=Oh(),Zq=zo(),eD=se(),tD=pa(),rD=Nh(),aD=_e(),nD=Qh(),oD=mr(),sD=or(),iD=1,uD=2,pD=4,jh="[object Arguments]",cD="[object Array]",lD="[object Boolean]",dD="[object Date]",fD="[object Error]",Wh="[object Function]",mD="[object GeneratorFunction]",gD="[object Map]",hD="[object Number]",$h="[object Object]",yD="[object RegExp]",AD="[object Set]",bD="[object String]",ID="[object Symbol]",SD="[object WeakMap]",wD="[object ArrayBuffer]",TD="[object DataView]",ED="[object Float32Array]",vD="[object Float64Array]",RD="[object Int8Array]",_D="[object Int16Array]",xD="[object Int32Array]",CD="[object Uint8Array]",OD="[object Uint8ClampedArray]",LD="[object Uint16Array]",PD="[object Uint32Array]",N={};N[jh]=N[cD]=N[wD]=N[TD]=N[lD]=N[dD]=N[ED]=N[vD]=N[RD]=N[_D]=N[xD]=N[gD]=N[hD]=N[$h]=N[yD]=N[AD]=N[bD]=N[ID]=N[CD]=N[OD]=N[LD]=N[PD]=!0;N[fD]=N[Wh]=N[SD]=!1;function Wn(e,t,r,a,n,o){var s,i=t&iD,p=t&uD,f=t&pD;if(r&&(s=n?r(e,a,n,o):r(e)),s!==void 0)return s;if(!aD(e))return e;var m=eD(e);if(m){if(s=Jq(e),!i)return $q(e,s)}else{var g=zq(e),h=g==Wh||g==mD;if(tD(e))return Wq(e,i);if(g==$h||g==jh||h&&!n){if(s=p||h?{}:Zq(e),!i)return p?Vq(e,jq(s,e)):Kq(e,Qq(s,e))}else{if(!N[g])return n?e:{};s=Xq(e,g,i)}}o||(o=new kq);var I=o.get(e);if(I)return I;o.set(e,s),nD(e)?e.forEach(function(R){s.add(Wn(R,t,r,R,e,o))}):rD(e)&&e.forEach(function(R,v){s.set(v,Wn(R,t,r,v,e,o))});var C=f?p?Hq:Yq:p?sD:oD,_=m?void 0:C(e);return Gq(_||e,function(R,v){_&&(v=R,R=e[v]),Fq(s,v,Wn(R,t,r,v,e,o))}),s}Kh.exports=Wn});var Yh=u((KW,Vh)=>{"use strict";var UD=Ci(),qD=4;function DD(e){return UD(e,qD)}Vh.exports=DD});var zh=u((VW,Hh)=>{"use strict";var ND=Qn(),BD=8;function Oi(e,t,r){t=r?void 0:t;var a=ND(e,BD,void 0,void 0,void 0,void 0,void 0,t);return a.placeholder=Oi.placeholder,a}Oi.placeholder={};Hh.exports=Oi});var Xh=u((YW,Jh)=>{"use strict";var MD=mt(),kD=be(),GD=Jo(),FD="[object DOMException]",QD="[object Error]";function jD(e){if(!kD(e))return!1;var t=MD(e);return t==QD||t==FD||typeof e.message=="string"&&typeof e.name=="string"&&!GD(e)}Jh.exports=jD});var ey=u((HW,Zh)=>{"use strict";var WD=hr(),$D=be(),KD="[object WeakMap]";function VD(e){return $D(e)&&WD(e)==KD}Zh.exports=VD});var ry=u((zW,ty)=>{"use strict";function YD(e,t){for(var r=-1,a=e==null?0:e.length;++r<a;)if(t(e[r],r,e))return!0;return!1}ty.exports=YD});var Li=u((JW,ay)=>{"use strict";var HD=Bo(),zD=ry(),JD=ko(),XD=1,ZD=2;function eN(e,t,r,a,n,o){var s=r&XD,i=e.length,p=t.length;if(i!=p&&!(s&&p>i))return!1;var f=o.get(e),m=o.get(t);if(f&&m)return f==t&&m==e;var g=-1,h=!0,I=r&ZD?new HD:void 0;for(o.set(e,t),o.set(t,e);++g<i;){var C=e[g],_=t[g];if(a)var R=s?a(_,C,g,t,e,o):a(C,_,g,e,t,o);if(R!==void 0){if(R)continue;h=!1;break}if(I){if(!zD(t,function(v,U){if(!JD(I,U)&&(C===v||n(C,v,r,a,o)))return I.push(U)})){h=!1;break}}else if(!(C===_||n(C,_,r,a,o))){h=!1;break}}return o.delete(e),o.delete(t),h}ay.exports=eN});var oy=u((XW,ny)=>{"use strict";function tN(e){var t=-1,r=Array(e.size);return e.forEach(function(a,n){r[++t]=[n,a]}),r}ny.exports=tN});var cy=u((ZW,py)=>{"use strict";var sy=xt(),iy=Vo(),rN=Ht(),aN=Li(),nN=oy(),oN=on(),sN=1,iN=2,uN="[object Boolean]",pN="[object Date]",cN="[object Error]",lN="[object Map]",dN="[object Number]",fN="[object RegExp]",mN="[object Set]",gN="[object String]",hN="[object Symbol]",yN="[object ArrayBuffer]",AN="[object DataView]",uy=sy?sy.prototype:void 0,Pi=uy?uy.valueOf:void 0;function bN(e,t,r,a,n,o,s){switch(r){case AN:if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case yN:return!(e.byteLength!=t.byteLength||!o(new iy(e),new iy(t)));case uN:case pN:case dN:return rN(+e,+t);case cN:return e.name==t.name&&e.message==t.message;case fN:case gN:return e==t+"";case lN:var i=nN;case mN:var p=a&sN;if(i||(i=oN),e.size!=t.size&&!p)return!1;var f=s.get(e);if(f)return f==t;a|=iN,s.set(e,t);var m=aN(i(e),i(t),a,n,o,s);return s.delete(e),m;case hN:if(Pi)return Pi.call(e)==Pi.call(t)}return!1}py.exports=bN});var fy=u((e$,dy)=>{"use strict";var ly=Ti(),IN=1,SN=Object.prototype,wN=SN.hasOwnProperty;function TN(e,t,r,a,n,o){var s=r&IN,i=ly(e),p=i.length,f=ly(t),m=f.length;if(p!=m&&!s)return!1;for(var g=p;g--;){var h=i[g];if(!(s?h in t:wN.call(t,h)))return!1}var I=o.get(e),C=o.get(t);if(I&&C)return I==t&&C==e;var _=!0;o.set(e,t),o.set(t,e);for(var R=s;++g<p;){h=i[g];var v=e[h],U=t[h];if(a)var qe=s?a(U,v,h,t,e,o):a(v,U,h,e,t,o);if(!(qe===void 0?v===U||n(v,U,r,a,o):qe)){_=!1;break}R||(R=h=="constructor")}if(_&&!R){var Te=e.constructor,pt=t.constructor;Te!=pt&&"constructor"in e&&"constructor"in t&&!(typeof Te=="function"&&Te instanceof Te&&typeof pt=="function"&&pt instanceof pt)&&(_=!1)}return o.delete(e),o.delete(t),_}dy.exports=TN});var Sy=u((t$,Iy)=>{"use strict";var Ui=na(),EN=Li(),vN=cy(),RN=fy(),my=hr(),gy=se(),hy=pa(),_N=fn(),xN=1,yy="[object Arguments]",Ay="[object Array]",$n="[object Object]",CN=Object.prototype,by=CN.hasOwnProperty;function ON(e,t,r,a,n,o){var s=gy(e),i=gy(t),p=s?Ay:my(e),f=i?Ay:my(t);p=p==yy?$n:p,f=f==yy?$n:f;var m=p==$n,g=f==$n,h=p==f;if(h&&hy(e)){if(!hy(t))return!1;s=!0,m=!1}if(h&&!m)return o||(o=new Ui),s||_N(e)?EN(e,t,r,a,n,o):vN(e,t,p,r,a,n,o);if(!(r&xN)){var I=m&&by.call(e,"__wrapped__"),C=g&&by.call(t,"__wrapped__");if(I||C){var _=I?e.value():e,R=C?t.value():t;return o||(o=new Ui),n(_,R,r,a,o)}}return h?(o||(o=new Ui),RN(e,t,r,a,n,o)):!1}Iy.exports=ON});var qi=u((r$,Ey)=>{"use strict";var LN=Sy(),wy=be();function Ty(e,t,r,a,n){return e===t?!0:e==null||t==null||!wy(e)&&!wy(t)?e!==e&&t!==t:LN(e,t,r,a,Ty,n)}Ey.exports=Ty});var Ry=u((a$,vy)=>{"use strict";var PN=na(),UN=qi(),qN=1,DN=2;function NN(e,t,r,a){var n=r.length,o=n,s=!a;if(e==null)return!o;for(e=Object(e);n--;){var i=r[n];if(s&&i[2]?i[1]!==e[i[0]]:!(i[0]in e))return!1}for(;++n<o;){i=r[n];var p=i[0],f=e[p],m=i[1];if(s&&i[2]){if(f===void 0&&!(p in e))return!1}else{var g=new PN;if(a)var h=a(f,m,p,e,t,g);if(!(h===void 0?UN(m,f,qN|DN,a,g):h))return!1}}return!0}vy.exports=NN});var Di=u((n$,_y)=>{"use strict";var BN=_e();function MN(e){return e===e&&!BN(e)}_y.exports=MN});var Cy=u((o$,xy)=>{"use strict";var kN=Di(),GN=mr();function FN(e){for(var t=GN(e),r=t.length;r--;){var a=t[r],n=e[a];t[r]=[a,n,kN(n)]}return t}xy.exports=FN});var Ni=u((s$,Oy)=>{"use strict";function QN(e,t){return function(r){return r==null?!1:r[e]===t&&(t!==void 0||e in Object(r))}}Oy.exports=QN});var Py=u((i$,Ly)=>{"use strict";var jN=Ry(),WN=Cy(),$N=Ni();function KN(e){var t=WN(e);return t.length==1&&t[0][2]?$N(t[0][0],t[0][1]):function(r){return r===e||jN(r,e,t)}}Ly.exports=KN});var Kn=u((u$,Uy)=>{"use strict";var VN=se(),YN=fr(),HN=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,zN=/^\w*$/;function JN(e,t){if(VN(e))return!1;var r=typeof e;return r=="number"||r=="symbol"||r=="boolean"||e==null||YN(e)?!0:zN.test(e)||!HN.test(e)||t!=null&&e in Object(t)}Uy.exports=JN});var Ny=u((p$,Dy)=>{"use strict";var qy=an(),XN="Expected a function";function Bi(e,t){if(typeof e!="function"||t!=null&&typeof t!="function")throw new TypeError(XN);var r=function(){var a=arguments,n=t?t.apply(this,a):a[0],o=r.cache;if(o.has(n))return o.get(n);var s=e.apply(this,a);return r.cache=o.set(n,s)||o,s};return r.cache=new(Bi.Cache||qy),r}Bi.Cache=qy;Dy.exports=Bi});var My=u((c$,By)=>{"use strict";var ZN=Ny(),eB=500;function tB(e){var t=ZN(e,function(a){return r.size===eB&&r.clear(),a}),r=t.cache;return t}By.exports=tB});var Mi=u((l$,ky)=>{"use strict";var rB=My(),aB=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,nB=/\\(\\)?/g,oB=rB(function(e){var t=[];return e.charCodeAt(0)===46&&t.push(""),e.replace(aB,function(r,a,n,o){t.push(n?o.replace(nB,"$1"):a||r)}),t});ky.exports=oB});var ki=u((d$,Gy)=>{"use strict";function sB(e,t){for(var r=-1,a=e==null?0:e.length,n=Array(a);++r<a;)n[r]=t(e[r],r,e);return n}Gy.exports=sB});var Ky=u((f$,$y)=>{"use strict";var Fy=xt(),iB=ki(),uB=se(),pB=fr(),cB=1/0,Qy=Fy?Fy.prototype:void 0,jy=Qy?Qy.toString:void 0;function Wy(e){if(typeof e=="string")return e;if(uB(e))return iB(e,Wy)+"";if(pB(e))return jy?jy.call(e):"";var t=e+"";return t=="0"&&1/e==-cB?"-0":t}$y.exports=Wy});var Gi=u((m$,Vy)=>{"use strict";var lB=Ky();function dB(e){return e==null?"":lB(e)}Vy.exports=dB});var Fi=u((g$,Yy)=>{"use strict";var fB=se(),mB=Kn(),gB=Mi(),hB=Gi();function yB(e,t){return fB(e)?e:mB(e,t)?[e]:gB(hB(e))}Yy.exports=yB});var yr=u((h$,Hy)=>{"use strict";var AB=fr(),bB=1/0;function IB(e){if(typeof e=="string"||AB(e))return e;var t=e+"";return t=="0"&&1/e==-bB?"-0":t}Hy.exports=IB});var Qi=u((y$,zy)=>{"use strict";var SB=Fi(),wB=yr();function TB(e,t){t=SB(t,e);for(var r=0,a=t.length;e!=null&&r<a;)e=e[wB(t[r++])];return r&&r==a?e:void 0}zy.exports=TB});var Xy=u((A$,Jy)=>{"use strict";var EB=Qi();function vB(e,t,r){var a=e==null?void 0:EB(e,t);return a===void 0?r:a}Jy.exports=vB});var eA=u((b$,Zy)=>{"use strict";function RB(e,t){return e!=null&&t in Object(e)}Zy.exports=RB});var rA=u((I$,tA)=>{"use strict";var _B=Fi(),xB=Jr(),CB=se(),OB=da(),LB=sn(),PB=yr();function UB(e,t,r){t=_B(t,e);for(var a=-1,n=t.length,o=!1;++a<n;){var s=PB(t[a]);if(!(o=e!=null&&r(e,s)))break;e=e[s]}return o||++a!=n?o:(n=e==null?0:e.length,!!n&&LB(n)&&OB(s,n)&&(CB(e)||xB(e)))}tA.exports=UB});var nA=u((S$,aA)=>{"use strict";var qB=eA(),DB=rA();function NB(e,t){return e!=null&&DB(e,t,qB)}aA.exports=NB});var sA=u((w$,oA)=>{"use strict";var BB=qi(),MB=Xy(),kB=nA(),GB=Kn(),FB=Di(),QB=Ni(),jB=yr(),WB=1,$B=2;function KB(e,t){return GB(e)&&FB(t)?QB(jB(e),t):function(r){var a=MB(r,e);return a===void 0&&a===t?kB(r,e):BB(t,a,WB|$B)}}oA.exports=KB});var uA=u((T$,iA)=>{"use strict";function VB(e){return function(t){return t?.[e]}}iA.exports=VB});var cA=u((E$,pA)=>{"use strict";var YB=Qi();function HB(e){return function(t){return YB(t,e)}}pA.exports=HB});var dA=u((v$,lA)=>{"use strict";var zB=uA(),JB=cA(),XB=Kn(),ZB=yr();function eM(e){return XB(e)?zB(ZB(e)):JB(e)}lA.exports=eM});var ji=u((R$,fA)=>{"use strict";var tM=Py(),rM=sA(),aM=Xr(),nM=se(),oM=dA();function sM(e){return typeof e=="function"?e:e==null?aM:typeof e=="object"?nM(e)?rM(e[0],e[1]):tM(e):oM(e)}fA.exports=sM});var gA=u((_$,mA)=>{"use strict";var iM=Ci(),uM=ji(),pM=1;function cM(e){return uM(typeof e=="function"?e:iM(e,pM))}mA.exports=cM});var yA=u((x$,hA)=>{"use strict";var lM=Oo();function dM(e){var t=e==null?0:e.length;return t?lM(e,1):[]}hA.exports=dM});var bA=u((C$,AA)=>{"use strict";var fM=yA(),mM=Lo(),gM=tn();function hM(e){return gM(mM(e,void 0,fM),e+"")}AA.exports=hM});var SA=u((O$,IA)=>{"use strict";var yM=Qn(),AM=bA(),bM=256,IM=AM(function(e,t){return yM(e,bM,void 0,void 0,void 0,t)});IA.exports=IM});var TA=u((L$,wA)=>{"use strict";var SM=ki(),wM=tr(),TM=se(),EM=fr(),vM=Mi(),RM=yr(),_M=Gi();function xM(e){return TM(e)?SM(e,RM):EM(e)?[e]:wM(vM(_M(e)))}wA.exports=xM});var vA=u((P$,EA)=>{"use strict";EA.exports={ary:kg(),assign:bi(),clone:Yh(),curry:zh(),forEach:Gn(),isArray:se(),isError:Xh(),isFunction:Zr(),isWeakMap:ey(),iteratee:gA(),keys:Ai(),rearg:SA(),toInteger:mi(),toPath:TA()}});var _A=u((U$,RA)=>{"use strict";var CM=mm(),OM=vA();function LM(e,t,r){return CM(OM,e,t,r)}RA.exports=LM});var Wi=u((q$,CA)=>{"use strict";var PM=_A(),xA=PM("merge",rs());xA.placeholder=Js();CA.exports=xA});var Pb=u((_K,Lb)=>{"use strict";function XM(e,t,r,a){for(var n=-1,o=e==null?0:e.length;++n<o;){var s=e[n];t(a,s,r(s),e)}return a}Lb.exports=XM});var qb=u((xK,Ub)=>{"use strict";var ZM=$o(),ek=mr();function tk(e,t){return e&&ZM(e,t,ek)}Ub.exports=tk});var Nb=u((CK,Db)=>{"use strict";var rk=Xt();function ak(e,t){return function(r,a){if(r==null)return r;if(!rk(r))return e(r,a);for(var n=r.length,o=t?n:-1,s=Object(r);(t?o--:++o<n)&&a(s[o],o,s)!==!1;);return r}}Db.exports=ak});var Mb=u((OK,Bb)=>{"use strict";var nk=qb(),ok=Nb(),sk=ok(nk);Bb.exports=sk});var Gb=u((LK,kb)=>{"use strict";var ik=Mb();function uk(e,t,r,a){return ik(e,function(n,o,s){t(a,n,r(n),s)}),a}kb.exports=uk});var Qb=u((PK,Fb)=>{"use strict";var pk=Pb(),ck=Gb(),lk=ji(),dk=se();function fk(e,t){return function(r,a){var n=dk(r)?pk:ck,o=t?t():{};return n(r,e,lk(a,2),o)}}Fb.exports=fk});var Wb=u((UK,jb)=>{"use strict";var mk=oa(),gk=Qb(),hk=Object.prototype,yk=hk.hasOwnProperty,Ak=gk(function(e,t,r){yk.call(e,r)?e[r].push(t):mk(e,r,[t])});jb.exports=Ak});var Qk={};w(Qk,{Method:()=>io,ai:()=>Pu,api:()=>su,auditLogs:()=>bt,automations:()=>Cn,backups:()=>Oe,branding:()=>bn,constants:()=>$r,environmentVariables:()=>Je,features:()=>Me,groups:()=>j,init:()=>um,licensing:()=>Ve,logger:()=>Bt,mappers:()=>Y,middleware:()=>Ji,plugins:()=>On,publicApi:()=>Un,quotas:()=>ze,scimGroups:()=>Ar,scimUsers:()=>he,sdk:()=>Ki,users:()=>nt,utils:()=>Vt});module.exports=NI(Qk);var io=(o=>(o.POST="POST",o.GET="GET",o.PATCH="PATCH",o.DELETE="DELETE",o.PUT="PUT",o))(io||{});var Ki={};w(Ki,{ai:()=>bs,auditLogs:()=>bt,automations:()=>Cn,backups:()=>Oe,branding:()=>bn,environmentVariables:()=>Je,features:()=>Me,groups:()=>j,init:()=>um,licensing:()=>Ve,logger:()=>Bt,plugins:()=>On,publicApi:()=>Un,quotas:()=>ze,scimGroups:()=>Ar,scimUsers:()=>he,users:()=>nt,utils:()=>Vt});var bn={};w(bn,{getBrandingConfig:()=>xx});var Me={};w(Me,{checkBackups:()=>fe,checkFeature:()=>yn,checkFeatures:()=>fs,checkSCIM:()=>ys,isAppBuildersEnabled:()=>Pt,isAuditLogsEnabled:()=>An,isBackupsEnabled:()=>ms,isBrandingEnabled:()=>gs,isEnforceableSSO:()=>wf,isExpandedPublicApiEnabled:()=>rt,isPWAEnabled:()=>Sx,isPkceOidcEnabled:()=>Tx,isRecaptchaEnabled:()=>wx,isSSOEnforced:()=>Ex,isSyncAutomationsEnabled:()=>bx,isTriggerAutomationRunEnabled:()=>Ix,isUserGroupsEnabled:()=>hs,isViewPermissionEnabled:()=>vx,isViewReadonlyColumnsEnabled:()=>Rx});var te=require("@budibase/types"),tt=require("@budibase/backend-core");var Ve={};w(Ve,{cache:()=>Ne,client:()=>ft,features:()=>Ja,getFreeLicense:()=>cs,getLicense:()=>us,getLicenseFromKey:()=>ps,keys:()=>ds,offline:()=>mn,quotas:()=>Xa});var Ne={};w(Ne,{getCachedLicense:()=>If,invalidate:()=>Sf,refresh:()=>Ct});var Ba=require("@budibase/backend-core"),Tr,BI=async()=>{Tr=await Ba.RedisClient.init(Ba.redis.utils.Databases.LICENSES)},MI=async()=>{Tr&&await Tr.finish()};process.on("exit",async()=>{await MI()});var uo=async()=>(Tr||await BI(),Tr);var ft={};w(ft,{activateLicenseKey:()=>vo,getLicense:()=>$t,getLicenseFromKey:()=>Eo,triggerQuota:()=>TS});var Fu=P(require("node-fetch"));var Qu=require("@budibase/backend-core"),po=require("dd-trace"),ju=require("dd-trace/ext/formats"),co=class{constructor(t){this.apiCall=t=>async(r="",a={})=>await po.tracer.trace(`api.${t}`,async n=>{n.setTag("url",r);let o={...a.headers};o["Content-Type"]||(o["Content-Type"]="application/json",o.Accept="application/json");let s=o["Content-Type"]==="application/json";Qu.logging.correlation.setHeader(o),po.tracer.inject(n,ju.HTTP_HEADERS,o);let i={method:t,body:s?JSON.stringify(a.body):a.body,headers:o,credentials:"include"};return(0,Fu.default)(`${this.host}${r}`,i)});this.post=this.apiCall("POST");this.get=this.apiCall("GET");this.patch=this.apiCall("PATCH");this.del=this.apiCall("DELETE");this.put=this.apiCall("PUT");this.host=t}},lo=co;var Ya=require("@budibase/types"),L=require("@budibase/backend-core");var We={};w(We,{bustCache:()=>go,getCurrentUsageValues:()=>Ju,getQuotaUsage:()=>Et,setAllUsage:()=>yo,setAppUsageValue:()=>ho,setUsage:()=>Yu,setUsagePerApp:()=>Hu,utils:()=>_r});var ue=require("@budibase/types"),de=require("@budibase/backend-core");var _r={};w(_r,{generateBaseQuotaUsage:()=>ka,generateNewMonthlyQuotas:()=>Rr,generateNewQuotaUsage:()=>mo,getBreakdownName:()=>Fa,getCurrentMonthString:()=>ct,getQuotaDocId:()=>vr,setCurrentMonth:()=>Ga,setQuotaReset:()=>fo});var H=require("@budibase/types"),Er=require("@budibase/backend-core"),Ma=require("@budibase/shared-core"),vr=()=>Er.context.isSelfHostUsingCloud()?`quota_usage_${Er.context.getTenantId()}`:Er.db.StaticDatabases.GLOBAL.docs.usageQuota,Wu=()=>{let e=new Date;return new Date(e.getFullYear(),e.getMonth()+1,1).toISOString()},fo=e=>{e.quotaReset=Wu()},ct=()=>{let e=new Date,t=e.getMonth()+1,r=e.getFullYear();return`${t}-${r}`},ka=()=>({usageQuota:{[H.StaticQuotaName.APPS]:0,[H.StaticQuotaName.ROWS]:0,[H.StaticQuotaName.PLUGINS]:0,[H.StaticQuotaName.USERS]:0,[H.StaticQuotaName.CREATORS]:0,[H.StaticQuotaName.USER_GROUPS]:0,[H.StaticQuotaName.AI_CUSTOM_CONFIGS]:0,triggers:{}},monthly:{[ct()]:Rr()}}),mo=()=>{let e={_id:vr(),quotaReset:Wu(),...ka(),apps:{}};return Ga(e),e},Rr=()=>({[H.MonthlyQuotaName.QUERIES]:0,[H.MonthlyQuotaName.AUTOMATIONS]:0,[H.MonthlyQuotaName.BUDIBASE_AI_CREDITS]:0,[H.MonthlyQuotaName.ACTIONS]:0,triggers:{}}),Ga=e=>{let t=ct();e.monthly||(e.monthly={}),e.monthly[t]||(e.monthly[t]=Rr()),e.monthly.current=e.monthly[t]},Fa=(e,t)=>{if(!(!t||!e))switch(e){case H.MonthlyQuotaName.AUTOMATIONS:return H.BreakdownQuotaName.AUTOMATIONS;case H.MonthlyQuotaName.QUERIES:return(0,Ma.isTableIdOrExternalTableId)(t)?H.BreakdownQuotaName.ROW_QUERIES:(0,Ma.isDatasourceOrDatasourcePlusId)(t)?H.BreakdownQuotaName.DATASOURCE_QUERIES:void 0}};var $u=de.Duration.fromSeconds(60).toMs(),{Writethrough:Ku}=de.cache.writethrough;function GI(e){return delete e.usageLimits,delete e.usageQuota.automationRuns,delete e.usageQuota.emails,delete e.usageQuota.storage,delete e.usageQuota.views,delete e.usageQuota.publishedApps,delete e.usageQuota.developers,e}var Qa=()=>de.tenancy.isSelfHostUsingCloud()?new Ku(de.tenancy.getSelfHostCloudDB(),$u):new Ku(de.tenancy.getGlobalDB(),$u);async function go(e=0){let r=Qa(),a=vr(),n=await r.tryGet(a);n&&n._rev&&await r.remove(a,n._rev).catch(async o=>{if(e<1)return await go(e+1);throw o})}var Et=async()=>{let e=Qa(),t=await e.tryGet(vr());if(!t){t=mo();let{rev:r}=await e.put(t);t._rev=r}return Ga(t),fo(t),GI(t)},Yu=async(e,t,r)=>yo({name:t,type:r,values:{total:e}}),Hu=async(e,t,r)=>{let a=Qa(),n=await Et(),o=Object.values(e).reduce((i,p)=>i+p,0);for(let[i,p]of Object.entries(e))n=zu(n,t,r,{total:o,app:p},{appId:i});let s=await a.put(n);return n._rev=s.rev,n},FI=(e,t,r,a)=>{let n=Fa(t,r);if(!n||!a?.breakdown)return e;e.breakdown||(e.breakdown={}),e.breakdown[n]||(e.breakdown[n]={parent:t,values:{}});let o=e.breakdown[n];return o.values[r]=a.breakdown,e},ho=(e,t,r,a={},n)=>{let o;try{o=de.db.getProdAppID(a?.appId||de.context.getAppId())}catch{}if(!o||!n.app||!ue.APP_QUOTA_NAMES.includes(t))return e;e.apps?.[o]||(e.apps={...e.apps,[o]:ka()});let s=e.apps[o];switch(r){case ue.QuotaUsageType.STATIC:s.usageQuota[t]=n.app;break;case ue.QuotaUsageType.MONTHLY:{let i=ct(),p=t,f=s.monthly[i];f||(s.monthly[i]=Rr(),f=s.monthly[i]),f[p]=n.app,ue.BREAKDOWN_QUOTA_NAMES.includes(p)&&a?.id&&(f=FI(f,p,a.id,n));break}}return e},Vu=(e,t,r,a)=>{if(!ue.APP_QUOTA_NAMES.includes(r))return{};let n;try{n=de.db.getProdAppID(de.context.getAppId())}catch{}if(!n||!e.apps||!e.apps[n])return{app:0};let o=e.apps[n];switch(t){case ue.QuotaUsageType.STATIC:if(o.usageQuota?.[r])return{app:o.usageQuota[r]};break;case ue.QuotaUsageType.MONTHLY:{let s=ct(),i=r;if(!o.monthly?.[s]?.[i])break;let p=o.monthly[s],f=p[i],m,g=Fa(i,a);return g&&a&&p.breakdown?.[g]&&(m=p.breakdown[g]?.values[a]),{app:f,breakdown:m||0}}}return{app:0}},QI=(e,t,r)=>{t.usageQuota.triggers||(t.usageQuota.triggers={}),r&&(t.usageQuota.triggers[e]=r)},jI=(e,t,r,a)=>{r.monthly[t].triggers||(r.monthly[t].triggers={}),a&&(r.monthly[t].triggers[e]=a)},zu=(e,t,r,a,n={})=>{if(r===ue.QuotaUsageType.STATIC)t=t,e.usageQuota[t]=a.total,QI(t,e,a.triggers);else if(r===ue.QuotaUsageType.MONTHLY){t=t;let o=ct();e.monthly[o][t]=a.total,jI(t,o,e,a.triggers)}else throw new Error(`Invalid usage type: ${r}`);return ho(e,t,r,n,a)},yo=async e=>{let t=Array.isArray(e)?e:[e],r=Qa(),a=await Et();for(let o of t)a=zu(a,o.name,o.type,o.values,o.opts);let n=await r.put(a,0);return a._rev=n.rev,a},Ju=async(e,t,r)=>{let a=await Et(),n=0,o={};switch(e){case ue.QuotaUsageType.STATIC:if(a.usageQuota[t]){let s=t;n=a.usageQuota[s],o=Vu(a,e,t,r)}break;case ue.QuotaUsageType.MONTHLY:{let s=ct(),i=t;a.monthly[s][i]&&(n=a.monthly[s][i],o=Vu(a,e,t,r));break}default:throw new Error(`Invalid usage type: ${e}`)}return ue.APP_QUOTA_NAMES.includes(t)&&!(o.app||o.breakdown)&&(o.app=o.app||0,o.breakdown=o.breakdown||0),{total:n,app:o.app,breakdown:o.breakdown}};var ve={};w(ve,{destroy:()=>KI,get:()=>Ao,save:()=>$I});var lt=require("@budibase/backend-core"),WI=()=>({_id:lt.StaticDatabases.GLOBAL.docs.licenseInfo}),$I=async e=>{let t=await Ao();t={...t,...e};let a=await lt.tenancy.getGlobalDB().put(t);return t._rev=a.rev,t},Ao=async()=>{let e=lt.tenancy.getGlobalDB();try{return await e.get(lt.StaticDatabases.GLOBAL.docs.licenseInfo)}catch(t){if(t.status===404)return WI();throw t}},KI=async()=>{let e=lt.tenancy.getGlobalDB(),t=await Ao();t&&t._rev&&await e.remove(lt.StaticDatabases.GLOBAL.docs.licenseInfo,t._rev)};var M={};w(M,{bulkSave:()=>nS,destroy:()=>oS,fetch:()=>eS,generateUserGroupID:()=>XI,get:()=>tS,getBulk:()=>rS,getByName:()=>bo,getGroupUsers:()=>Wa,getGroupUsersParams:()=>rp,getUserGroupsParams:()=>tp,save:()=>aS});var q=require("@budibase/backend-core");var De=require("@budibase/types"),Qt=require("@budibase/backend-core");async function Xu(){let e=Qt.sql.designDoc.base("type");e.sql.tables={[De.AUDIT_LOG_TYPE]:{fields:{appId:De.SQLiteType.TEXT,event:De.SQLiteType.TEXT,userId:De.SQLiteType.TEXT,timestamp:De.SQLiteType.TEXT,metadata:De.SQLiteType.TEXT,name:De.SQLiteType.TEXT,type:De.SQLiteType.TEXT,fallback:De.SQLiteType.TEXT}}};let t=Qt.context.getAuditLogsDB(),r;try{r=await t.get(Qt.SQLITE_DESIGN_DOC_ID),r={...r,...e}}catch(a){if(a.status===404)r=e;else throw a}await t.put(r)}var ja=require("@budibase/backend-core"),{ViewName:VI,SEPARATOR:YI,DocumentType:HI,createView:zI}=ja.db,JI=HI.USER+YI;async function Zu(){let e=ja.tenancy.getGlobalDB(),t=`function(doc) {
|
|
4
|
-
if (doc._id.startsWith("${
|
|
3
|
+
`)}Hm.exports=YO});var Gn=u((rW,Jm)=>{"use strict";function HO(e,t){for(var r=-1,a=e==null?0:e.length;++r<a&&t(e[r],r,e)!==!1;);return e}Jm.exports=HO});var Zm=u((aW,Xm)=>{"use strict";var zO=Gn(),JO=ko(),XO=1,ZO=2,eL=8,tL=16,rL=32,aL=64,nL=128,oL=256,sL=512,iL=[["ary",nL],["bind",XO],["bindKey",ZO],["curry",eL],["curryRight",tL],["flip",sL],["partial",rL],["partialRight",aL],["rearg",oL]];function uL(e,t){return zO(iL,function(r){var a="_."+r[0];t&r[1]&&!JO(e,a)&&e.push(a)}),e.sort()}Xm.exports=uL});var ci=u((nW,eg)=>{"use strict";var pL=Ym(),cL=zm(),lL=tn(),dL=Zm();function fL(e,t,r){var a=t+"";return lL(e,cL(a,dL(pL(a),r)))}eg.exports=fL});var li=u((oW,ag)=>{"use strict";var mL=$m(),gL=pi(),yL=ci(),hL=1,AL=2,bL=4,IL=8,tg=32,rg=64;function SL(e,t,r,a,n,o,s,i,p,f){var m=t&IL,g=m?s:void 0,y=m?void 0:s,I=m?o:void 0,C=m?void 0:o;t|=m?tg:rg,t&=~(m?rg:tg),t&bL||(t&=~(hL|AL));var _=[e,t,n,I,g,C,y,i,p,f],v=r.apply(void 0,_);return mL(e)&&gL(v,_),v.placeholder=a,yL(v,e,t)}ag.exports=SL});var di=u((sW,ng)=>{"use strict";function wL(e){var t=e;return t.placeholder}ng.exports=wL});var sg=u((iW,og)=>{"use strict";var TL=rr(),EL=da(),RL=Math.min;function vL(e,t){for(var r=e.length,a=RL(t.length,r),n=TL(e);a--;){var o=t[a];e[a]=EL(o,r)?n[o]:void 0}return e}og.exports=vL});var Fn=u((uW,ug)=>{"use strict";var ig="__lodash_placeholder__";function _L(e,t){for(var r=-1,a=e.length,n=0,o=[];++r<a;){var s=e[r];(s===t||s===ig)&&(e[r]=ig,o[n++]=r)}return o}ug.exports=_L});var fi=u((pW,lg)=>{"use strict";var xL=oi(),CL=si(),OL=xm(),pg=Ta(),LL=li(),PL=di(),UL=sg(),qL=Fn(),DL=pe(),NL=1,BL=2,ML=8,kL=16,GL=128,FL=512;function cg(e,t,r,a,n,o,s,i,p,f){var m=t&GL,g=t&NL,y=t&BL,I=t&(ML|kL),C=t&FL,_=y?void 0:pg(e);function v(){for(var R=arguments.length,U=Array(R),qe=R;qe--;)U[qe]=arguments[qe];if(I)var Ee=PL(v),ct=OL(U,Ee);if(a&&(U=xL(U,a,n,I)),o&&(U=CL(U,o,s,I)),R-=ct,I&&R<f){var Qt=qL(U,Ee);return LL(e,t,cg,v.placeholder,r,U,Qt,i,p,f-R)}var Ir=g?r:this,Sr=y?Ir[e]:e;return R=U.length,i?U=UL(U,i):C&&R>1&&U.reverse(),m&&p<R&&(U.length=p),this&&this!==DL&&this instanceof v&&(Sr=_||pg(Sr)),Sr.apply(Ir,U)}return v}lg.exports=cg});var fg=u((cW,dg)=>{"use strict";var QL=en(),jL=Ta(),WL=fi(),$L=li(),KL=di(),VL=Fn(),YL=pe();function HL(e,t,r){var a=jL(e);function n(){for(var o=arguments.length,s=Array(o),i=o,p=KL(n);i--;)s[i]=arguments[i];var f=o<3&&s[0]!==p&&s[o-1]!==p?[]:VL(s,p);if(o-=f.length,o<r)return $L(e,t,WL,n.placeholder,void 0,s,f,void 0,void 0,r-o);var m=this&&this!==YL&&this instanceof n?a:e;return QL(m,this,s)}return n}dg.exports=HL});var gg=u((lW,mg)=>{"use strict";var zL=en(),JL=Ta(),XL=pe(),ZL=1;function eP(e,t,r,a){var n=t&ZL,o=JL(e);function s(){for(var i=-1,p=arguments.length,f=-1,m=a.length,g=Array(m+p),y=this&&this!==XL&&this instanceof s?o:e;++f<m;)g[f]=a[f];for(;p--;)g[f++]=arguments[++i];return zL(y,n?r:this,g)}return s}mg.exports=eP});var Sg=u((dW,Ig)=>{"use strict";var tP=oi(),rP=si(),yg=Fn(),hg="__lodash_placeholder__",mi=1,aP=2,nP=4,Ag=8,Ea=128,bg=256,oP=Math.min;function sP(e,t){var r=e[1],a=t[1],n=r|a,o=n<(mi|aP|Ea),s=a==Ea&&r==Ag||a==Ea&&r==bg&&e[7].length<=t[8]||a==(Ea|bg)&&t[7].length<=t[8]&&r==Ag;if(!(o||s))return e;a&mi&&(e[2]=t[2],n|=r&mi?0:nP);var i=t[3];if(i){var p=e[3];e[3]=p?tP(p,i,t[4]):i,e[4]=p?yg(e[3],hg):t[4]}return i=t[5],i&&(p=e[5],e[5]=p?rP(p,i,t[6]):i,e[6]=p?yg(e[5],hg):t[6]),i=t[7],i&&(e[7]=i),a&Ea&&(e[8]=e[8]==null?t[8]:oP(e[8],t[8])),e[9]==null&&(e[9]=t[9]),e[0]=t[0],e[1]=n,e}Ig.exports=sP});var Tg=u((fW,wg)=>{"use strict";var iP=/\s/;function uP(e){for(var t=e.length;t--&&iP.test(e.charAt(t)););return t}wg.exports=uP});var Rg=u((mW,Eg)=>{"use strict";var pP=Tg(),cP=/^\s+/;function lP(e){return e&&e.slice(0,pP(e)+1).replace(cP,"")}Eg.exports=lP});var mr=u((gW,vg)=>{"use strict";var dP=gt(),fP=be(),mP="[object Symbol]";function gP(e){return typeof e=="symbol"||fP(e)&&dP(e)==mP}vg.exports=gP});var Og=u((yW,Cg)=>{"use strict";var yP=Rg(),_g=xe(),hP=mr(),xg=0/0,AP=/^[-+]0x[0-9a-f]+$/i,bP=/^0b[01]+$/i,IP=/^0o[0-7]+$/i,SP=parseInt;function wP(e){if(typeof e=="number")return e;if(hP(e))return xg;if(_g(e)){var t=typeof e.valueOf=="function"?e.valueOf():e;e=_g(t)?t+"":t}if(typeof e!="string")return e===0?e:+e;e=yP(e);var r=bP.test(e);return r||IP.test(e)?SP(e.slice(2),r?2:8):AP.test(e)?xg:+e}Cg.exports=wP});var Ug=u((hW,Pg)=>{"use strict";var TP=Og(),Lg=1/0,EP=17976931348623157e292;function RP(e){if(!e)return e===0?e:0;if(e=TP(e),e===Lg||e===-Lg){var t=e<0?-1:1;return t*EP}return e===e?e:0}Pg.exports=RP});var gi=u((AW,qg)=>{"use strict";var vP=Ug();function _P(e){var t=vP(e),r=t%1;return t===t?r?t-r:t:0}qg.exports=_P});var Qn=u((bW,kg)=>{"use strict";var xP=ni(),CP=Em(),OP=fg(),LP=fi(),PP=gg(),UP=ii(),qP=Sg(),DP=pi(),NP=ci(),Dg=gi(),BP="Expected a function",Ng=1,MP=2,yi=8,hi=16,Ai=32,Bg=64,Mg=Math.max;function kP(e,t,r,a,n,o,s,i){var p=t&MP;if(!p&&typeof e!="function")throw new TypeError(BP);var f=a?a.length:0;if(f||(t&=~(Ai|Bg),a=n=void 0),s=s===void 0?s:Mg(Dg(s),0),i=i===void 0?i:Dg(i),f-=n?n.length:0,t&Bg){var m=a,g=n;a=n=void 0}var y=p?void 0:UP(e),I=[e,t,r,a,n,m,g,o,s,i];if(y&&qP(I,y),e=I[0],t=I[1],r=I[2],a=I[3],n=I[4],i=I[9]=I[9]===void 0?p?0:e.length:Mg(I[9]-f,0),!i&&t&(yi|hi)&&(t&=~(yi|hi)),!t||t==Ng)var C=CP(e,t,r);else t==yi||t==hi?C=OP(e,t,i):(t==Ai||t==(Ng|Ai))&&!n.length?C=PP(e,t,r,a):C=LP.apply(void 0,I);var _=y?xP:DP;return NP(_(C,I),e,t)}kg.exports=kP});var Fg=u((IW,Gg)=>{"use strict";var GP=Qn(),FP=128;function QP(e,t,r){return t=r?void 0:t,t=e&&t==null?e.length:t,GP(e,FP,void 0,void 0,void 0,void 0,t)}Gg.exports=QP});var jg=u((SW,Qg)=>{"use strict";var jP=zo(),WP=jP(Object.keys,Object);Qg.exports=WP});var bi=u((wW,Wg)=>{"use strict";var $P=cn(),KP=jg(),VP=Object.prototype,YP=VP.hasOwnProperty;function HP(e){if(!$P(e))return KP(e);var t=[];for(var r in Object(e))YP.call(e,r)&&r!="constructor"&&t.push(r);return t}Wg.exports=HP});var gr=u((TW,$g)=>{"use strict";var zP=rs(),JP=bi(),XP=Zt();function ZP(e){return XP(e)?zP(e):JP(e)}$g.exports=ZP});var Ii=u((EW,Kg)=>{"use strict";var eU=or(),tU=gr();function rU(e,t){return e&&eU(t,tU(t),e)}Kg.exports=rU});var Yg=u((RW,Vg)=>{"use strict";var aU=or(),nU=sr();function oU(e,t){return e&&aU(t,nU(t),e)}Vg.exports=oU});var zg=u((vW,Hg)=>{"use strict";function sU(e,t){for(var r=-1,a=e==null?0:e.length,n=0,o=[];++r<a;){var s=e[r];t(s,r,e)&&(o[n++]=s)}return o}Hg.exports=sU});var Si=u((_W,Jg)=>{"use strict";function iU(){return[]}Jg.exports=iU});var jn=u((xW,Zg)=>{"use strict";var uU=zg(),pU=Si(),cU=Object.prototype,lU=cU.propertyIsEnumerable,Xg=Object.getOwnPropertySymbols,dU=Xg?function(e){return e==null?[]:(e=Object(e),uU(Xg(e),function(t){return lU.call(e,t)}))}:pU;Zg.exports=dU});var ty=u((CW,ey)=>{"use strict";var fU=or(),mU=jn();function gU(e,t){return fU(e,mU(e),t)}ey.exports=gU});var wi=u((OW,ry)=>{"use strict";var yU=Za(),hU=pn(),AU=jn(),bU=Si(),IU=Object.getOwnPropertySymbols,SU=IU?function(e){for(var t=[];e;)yU(t,AU(e)),e=hU(e);return t}:bU;ry.exports=SU});var ny=u((LW,ay)=>{"use strict";var wU=or(),TU=wi();function EU(e,t){return wU(e,TU(e),t)}ay.exports=EU});var Ti=u((PW,oy)=>{"use strict";var RU=Za(),vU=se();function _U(e,t,r){var a=t(e);return vU(e)?a:RU(a,r(e))}oy.exports=_U});var Ei=u((UW,sy)=>{"use strict";var xU=Ti(),CU=jn(),OU=gr();function LU(e){return xU(e,OU,CU)}sy.exports=LU});var uy=u((qW,iy)=>{"use strict";var PU=Ti(),UU=wi(),qU=sr();function DU(e){return PU(e,qU,UU)}iy.exports=DU});var cy=u((DW,py)=>{"use strict";var NU=yt(),BU=pe(),MU=NU(BU,"DataView");py.exports=MU});var dy=u((NW,ly)=>{"use strict";var kU=yt(),GU=pe(),FU=kU(GU,"Promise");ly.exports=FU});var hr=u((BW,by)=>{"use strict";var Ri=cy(),vi=rn(),_i=dy(),xi=Fo(),Ci=ri(),Ay=gt(),yr=qo(),fy="[object Map]",QU="[object Object]",my="[object Promise]",gy="[object Set]",yy="[object WeakMap]",hy="[object DataView]",jU=yr(Ri),WU=yr(vi),$U=yr(_i),KU=yr(xi),VU=yr(Ci),Nt=Ay;(Ri&&Nt(new Ri(new ArrayBuffer(1)))!=hy||vi&&Nt(new vi)!=fy||_i&&Nt(_i.resolve())!=my||xi&&Nt(new xi)!=gy||Ci&&Nt(new Ci)!=yy)&&(Nt=function(e){var t=Ay(e),r=t==QU?e.constructor:void 0,a=r?yr(r):"";if(a)switch(a){case jU:return hy;case WU:return fy;case $U:return my;case KU:return gy;case VU:return yy}return t});by.exports=Nt});var Sy=u((MW,Iy)=>{"use strict";var YU=Object.prototype,HU=YU.hasOwnProperty;function zU(e){var t=e.length,r=new e.constructor(t);return t&&typeof e[0]=="string"&&HU.call(e,"index")&&(r.index=e.index,r.input=e.input),r}Iy.exports=zU});var Ty=u((kW,wy)=>{"use strict";var JU=un();function XU(e,t){var r=t?JU(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.byteLength)}wy.exports=XU});var Ry=u((GW,Ey)=>{"use strict";var ZU=/\w*$/;function eq(e){var t=new e.constructor(e.source,ZU.exec(e));return t.lastIndex=e.lastIndex,t}Ey.exports=eq});var Oy=u((FW,Cy)=>{"use strict";var vy=xt(),_y=vy?vy.prototype:void 0,xy=_y?_y.valueOf:void 0;function tq(e){return xy?Object(xy.call(e)):{}}Cy.exports=tq});var Py=u((QW,Ly)=>{"use strict";var rq=un(),aq=Ty(),nq=Ry(),oq=Oy(),sq=Ho(),iq="[object Boolean]",uq="[object Date]",pq="[object Map]",cq="[object Number]",lq="[object RegExp]",dq="[object Set]",fq="[object String]",mq="[object Symbol]",gq="[object ArrayBuffer]",yq="[object DataView]",hq="[object Float32Array]",Aq="[object Float64Array]",bq="[object Int8Array]",Iq="[object Int16Array]",Sq="[object Int32Array]",wq="[object Uint8Array]",Tq="[object Uint8ClampedArray]",Eq="[object Uint16Array]",Rq="[object Uint32Array]";function vq(e,t,r){var a=e.constructor;switch(t){case gq:return rq(e);case iq:case uq:return new a(+e);case yq:return aq(e,r);case hq:case Aq:case bq:case Iq:case Sq:case wq:case Tq:case Eq:case Rq:return sq(e,r);case pq:return new a;case cq:case fq:return new a(e);case lq:return nq(e);case dq:return new a;case mq:return oq(e)}}Ly.exports=vq});var qy=u((jW,Uy)=>{"use strict";var _q=hr(),xq=be(),Cq="[object Map]";function Oq(e){return xq(e)&&_q(e)==Cq}Uy.exports=Oq});var My=u((WW,By)=>{"use strict";var Lq=qy(),Pq=ln(),Dy=dn(),Ny=Dy&&Dy.isMap,Uq=Ny?Pq(Ny):Lq;By.exports=Uq});var Gy=u(($W,ky)=>{"use strict";var qq=hr(),Dq=be(),Nq="[object Set]";function Bq(e){return Dq(e)&&qq(e)==Nq}ky.exports=Bq});var Wy=u((KW,jy)=>{"use strict";var Mq=Gy(),kq=ln(),Fy=dn(),Qy=Fy&&Fy.isSet,Gq=Qy?kq(Qy):Mq;jy.exports=Gq});var Oi=u((VW,Yy)=>{"use strict";var Fq=na(),Qq=Gn(),jq=ts(),Wq=Ii(),$q=Yg(),Kq=Vo(),Vq=rr(),Yq=ty(),Hq=ny(),zq=Ei(),Jq=uy(),Xq=hr(),Zq=Sy(),eD=Py(),tD=Jo(),rD=se(),aD=pa(),nD=My(),oD=xe(),sD=Wy(),iD=gr(),uD=sr(),pD=1,cD=2,lD=4,$y="[object Arguments]",dD="[object Array]",fD="[object Boolean]",mD="[object Date]",gD="[object Error]",Ky="[object Function]",yD="[object GeneratorFunction]",hD="[object Map]",AD="[object Number]",Vy="[object Object]",bD="[object RegExp]",ID="[object Set]",SD="[object String]",wD="[object Symbol]",TD="[object WeakMap]",ED="[object ArrayBuffer]",RD="[object DataView]",vD="[object Float32Array]",_D="[object Float64Array]",xD="[object Int8Array]",CD="[object Int16Array]",OD="[object Int32Array]",LD="[object Uint8Array]",PD="[object Uint8ClampedArray]",UD="[object Uint16Array]",qD="[object Uint32Array]",N={};N[$y]=N[dD]=N[ED]=N[RD]=N[fD]=N[mD]=N[vD]=N[_D]=N[xD]=N[CD]=N[OD]=N[hD]=N[AD]=N[Vy]=N[bD]=N[ID]=N[SD]=N[wD]=N[LD]=N[PD]=N[UD]=N[qD]=!0;N[gD]=N[Ky]=N[TD]=!1;function Wn(e,t,r,a,n,o){var s,i=t&pD,p=t&cD,f=t&lD;if(r&&(s=n?r(e,a,n,o):r(e)),s!==void 0)return s;if(!oD(e))return e;var m=rD(e);if(m){if(s=Zq(e),!i)return Vq(e,s)}else{var g=Xq(e),y=g==Ky||g==yD;if(aD(e))return Kq(e,i);if(g==Vy||g==$y||y&&!n){if(s=p||y?{}:tD(e),!i)return p?Hq(e,$q(s,e)):Yq(e,Wq(s,e))}else{if(!N[g])return n?e:{};s=eD(e,g,i)}}o||(o=new Fq);var I=o.get(e);if(I)return I;o.set(e,s),sD(e)?e.forEach(function(v){s.add(Wn(v,t,r,v,e,o))}):nD(e)&&e.forEach(function(v,R){s.set(R,Wn(v,t,r,R,e,o))});var C=f?p?Jq:zq:p?uD:iD,_=m?void 0:C(e);return Qq(_||e,function(v,R){_&&(R=v,v=e[R]),jq(s,R,Wn(v,t,r,R,e,o))}),s}Yy.exports=Wn});var zy=u((YW,Hy)=>{"use strict";var DD=Oi(),ND=4;function BD(e){return DD(e,ND)}Hy.exports=BD});var Xy=u((HW,Jy)=>{"use strict";var MD=Qn(),kD=8;function Li(e,t,r){t=r?void 0:t;var a=MD(e,kD,void 0,void 0,void 0,void 0,void 0,t);return a.placeholder=Li.placeholder,a}Li.placeholder={};Jy.exports=Li});var eh=u((zW,Zy)=>{"use strict";var GD=gt(),FD=be(),QD=Xo(),jD="[object DOMException]",WD="[object Error]";function $D(e){if(!FD(e))return!1;var t=GD(e);return t==WD||t==jD||typeof e.message=="string"&&typeof e.name=="string"&&!QD(e)}Zy.exports=$D});var rh=u((JW,th)=>{"use strict";var KD=hr(),VD=be(),YD="[object WeakMap]";function HD(e){return VD(e)&&KD(e)==YD}th.exports=HD});var nh=u((XW,ah)=>{"use strict";function zD(e,t){for(var r=-1,a=e==null?0:e.length;++r<a;)if(t(e[r],r,e))return!0;return!1}ah.exports=zD});var Pi=u((ZW,oh)=>{"use strict";var JD=Mo(),XD=nh(),ZD=Go(),eN=1,tN=2;function rN(e,t,r,a,n,o){var s=r&eN,i=e.length,p=t.length;if(i!=p&&!(s&&p>i))return!1;var f=o.get(e),m=o.get(t);if(f&&m)return f==t&&m==e;var g=-1,y=!0,I=r&tN?new JD:void 0;for(o.set(e,t),o.set(t,e);++g<i;){var C=e[g],_=t[g];if(a)var v=s?a(_,C,g,t,e,o):a(C,_,g,e,t,o);if(v!==void 0){if(v)continue;y=!1;break}if(I){if(!XD(t,function(R,U){if(!ZD(I,U)&&(C===R||n(C,R,r,a,o)))return I.push(U)})){y=!1;break}}else if(!(C===_||n(C,_,r,a,o))){y=!1;break}}return o.delete(e),o.delete(t),y}oh.exports=rN});var ih=u((e$,sh)=>{"use strict";function aN(e){var t=-1,r=Array(e.size);return e.forEach(function(a,n){r[++t]=[n,a]}),r}sh.exports=aN});var dh=u((t$,lh)=>{"use strict";var uh=xt(),ph=Yo(),nN=zt(),oN=Pi(),sN=ih(),iN=on(),uN=1,pN=2,cN="[object Boolean]",lN="[object Date]",dN="[object Error]",fN="[object Map]",mN="[object Number]",gN="[object RegExp]",yN="[object Set]",hN="[object String]",AN="[object Symbol]",bN="[object ArrayBuffer]",IN="[object DataView]",ch=uh?uh.prototype:void 0,Ui=ch?ch.valueOf:void 0;function SN(e,t,r,a,n,o,s){switch(r){case IN:if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case bN:return!(e.byteLength!=t.byteLength||!o(new ph(e),new ph(t)));case cN:case lN:case mN:return nN(+e,+t);case dN:return e.name==t.name&&e.message==t.message;case gN:case hN:return e==t+"";case fN:var i=sN;case yN:var p=a&uN;if(i||(i=iN),e.size!=t.size&&!p)return!1;var f=s.get(e);if(f)return f==t;a|=pN,s.set(e,t);var m=oN(i(e),i(t),a,n,o,s);return s.delete(e),m;case AN:if(Ui)return Ui.call(e)==Ui.call(t)}return!1}lh.exports=SN});var gh=u((r$,mh)=>{"use strict";var fh=Ei(),wN=1,TN=Object.prototype,EN=TN.hasOwnProperty;function RN(e,t,r,a,n,o){var s=r&wN,i=fh(e),p=i.length,f=fh(t),m=f.length;if(p!=m&&!s)return!1;for(var g=p;g--;){var y=i[g];if(!(s?y in t:EN.call(t,y)))return!1}var I=o.get(e),C=o.get(t);if(I&&C)return I==t&&C==e;var _=!0;o.set(e,t),o.set(t,e);for(var v=s;++g<p;){y=i[g];var R=e[y],U=t[y];if(a)var qe=s?a(U,R,y,t,e,o):a(R,U,y,e,t,o);if(!(qe===void 0?R===U||n(R,U,r,a,o):qe)){_=!1;break}v||(v=y=="constructor")}if(_&&!v){var Ee=e.constructor,ct=t.constructor;Ee!=ct&&"constructor"in e&&"constructor"in t&&!(typeof Ee=="function"&&Ee instanceof Ee&&typeof ct=="function"&&ct instanceof ct)&&(_=!1)}return o.delete(e),o.delete(t),_}mh.exports=RN});var Th=u((a$,wh)=>{"use strict";var qi=na(),vN=Pi(),_N=dh(),xN=gh(),yh=hr(),hh=se(),Ah=pa(),CN=fn(),ON=1,bh="[object Arguments]",Ih="[object Array]",$n="[object Object]",LN=Object.prototype,Sh=LN.hasOwnProperty;function PN(e,t,r,a,n,o){var s=hh(e),i=hh(t),p=s?Ih:yh(e),f=i?Ih:yh(t);p=p==bh?$n:p,f=f==bh?$n:f;var m=p==$n,g=f==$n,y=p==f;if(y&&Ah(e)){if(!Ah(t))return!1;s=!0,m=!1}if(y&&!m)return o||(o=new qi),s||CN(e)?vN(e,t,r,a,n,o):_N(e,t,p,r,a,n,o);if(!(r&ON)){var I=m&&Sh.call(e,"__wrapped__"),C=g&&Sh.call(t,"__wrapped__");if(I||C){var _=I?e.value():e,v=C?t.value():t;return o||(o=new qi),n(_,v,r,a,o)}}return y?(o||(o=new qi),xN(e,t,r,a,n,o)):!1}wh.exports=PN});var Di=u((n$,vh)=>{"use strict";var UN=Th(),Eh=be();function Rh(e,t,r,a,n){return e===t?!0:e==null||t==null||!Eh(e)&&!Eh(t)?e!==e&&t!==t:UN(e,t,r,a,Rh,n)}vh.exports=Rh});var xh=u((o$,_h)=>{"use strict";var qN=na(),DN=Di(),NN=1,BN=2;function MN(e,t,r,a){var n=r.length,o=n,s=!a;if(e==null)return!o;for(e=Object(e);n--;){var i=r[n];if(s&&i[2]?i[1]!==e[i[0]]:!(i[0]in e))return!1}for(;++n<o;){i=r[n];var p=i[0],f=e[p],m=i[1];if(s&&i[2]){if(f===void 0&&!(p in e))return!1}else{var g=new qN;if(a)var y=a(f,m,p,e,t,g);if(!(y===void 0?DN(m,f,NN|BN,a,g):y))return!1}}return!0}_h.exports=MN});var Ni=u((s$,Ch)=>{"use strict";var kN=xe();function GN(e){return e===e&&!kN(e)}Ch.exports=GN});var Lh=u((i$,Oh)=>{"use strict";var FN=Ni(),QN=gr();function jN(e){for(var t=QN(e),r=t.length;r--;){var a=t[r],n=e[a];t[r]=[a,n,FN(n)]}return t}Oh.exports=jN});var Bi=u((u$,Ph)=>{"use strict";function WN(e,t){return function(r){return r==null?!1:r[e]===t&&(t!==void 0||e in Object(r))}}Ph.exports=WN});var qh=u((p$,Uh)=>{"use strict";var $N=xh(),KN=Lh(),VN=Bi();function YN(e){var t=KN(e);return t.length==1&&t[0][2]?VN(t[0][0],t[0][1]):function(r){return r===e||$N(r,e,t)}}Uh.exports=YN});var Kn=u((c$,Dh)=>{"use strict";var HN=se(),zN=mr(),JN=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,XN=/^\w*$/;function ZN(e,t){if(HN(e))return!1;var r=typeof e;return r=="number"||r=="symbol"||r=="boolean"||e==null||zN(e)?!0:XN.test(e)||!JN.test(e)||t!=null&&e in Object(t)}Dh.exports=ZN});var Mh=u((l$,Bh)=>{"use strict";var Nh=an(),eB="Expected a function";function Mi(e,t){if(typeof e!="function"||t!=null&&typeof t!="function")throw new TypeError(eB);var r=function(){var a=arguments,n=t?t.apply(this,a):a[0],o=r.cache;if(o.has(n))return o.get(n);var s=e.apply(this,a);return r.cache=o.set(n,s)||o,s};return r.cache=new(Mi.Cache||Nh),r}Mi.Cache=Nh;Bh.exports=Mi});var Gh=u((d$,kh)=>{"use strict";var tB=Mh(),rB=500;function aB(e){var t=tB(e,function(a){return r.size===rB&&r.clear(),a}),r=t.cache;return t}kh.exports=aB});var ki=u((f$,Fh)=>{"use strict";var nB=Gh(),oB=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,sB=/\\(\\)?/g,iB=nB(function(e){var t=[];return e.charCodeAt(0)===46&&t.push(""),e.replace(oB,function(r,a,n,o){t.push(n?o.replace(sB,"$1"):a||r)}),t});Fh.exports=iB});var Gi=u((m$,Qh)=>{"use strict";function uB(e,t){for(var r=-1,a=e==null?0:e.length,n=Array(a);++r<a;)n[r]=t(e[r],r,e);return n}Qh.exports=uB});var Yh=u((g$,Vh)=>{"use strict";var jh=xt(),pB=Gi(),cB=se(),lB=mr(),dB=1/0,Wh=jh?jh.prototype:void 0,$h=Wh?Wh.toString:void 0;function Kh(e){if(typeof e=="string")return e;if(cB(e))return pB(e,Kh)+"";if(lB(e))return $h?$h.call(e):"";var t=e+"";return t=="0"&&1/e==-dB?"-0":t}Vh.exports=Kh});var Fi=u((y$,Hh)=>{"use strict";var fB=Yh();function mB(e){return e==null?"":fB(e)}Hh.exports=mB});var Qi=u((h$,zh)=>{"use strict";var gB=se(),yB=Kn(),hB=ki(),AB=Fi();function bB(e,t){return gB(e)?e:yB(e,t)?[e]:hB(AB(e))}zh.exports=bB});var Ar=u((A$,Jh)=>{"use strict";var IB=mr(),SB=1/0;function wB(e){if(typeof e=="string"||IB(e))return e;var t=e+"";return t=="0"&&1/e==-SB?"-0":t}Jh.exports=wB});var ji=u((b$,Xh)=>{"use strict";var TB=Qi(),EB=Ar();function RB(e,t){t=TB(t,e);for(var r=0,a=t.length;e!=null&&r<a;)e=e[EB(t[r++])];return r&&r==a?e:void 0}Xh.exports=RB});var eA=u((I$,Zh)=>{"use strict";var vB=ji();function _B(e,t,r){var a=e==null?void 0:vB(e,t);return a===void 0?r:a}Zh.exports=_B});var rA=u((S$,tA)=>{"use strict";function xB(e,t){return e!=null&&t in Object(e)}tA.exports=xB});var nA=u((w$,aA)=>{"use strict";var CB=Qi(),OB=Jr(),LB=se(),PB=da(),UB=sn(),qB=Ar();function DB(e,t,r){t=CB(t,e);for(var a=-1,n=t.length,o=!1;++a<n;){var s=qB(t[a]);if(!(o=e!=null&&r(e,s)))break;e=e[s]}return o||++a!=n?o:(n=e==null?0:e.length,!!n&&UB(n)&&PB(s,n)&&(LB(e)||OB(e)))}aA.exports=DB});var sA=u((T$,oA)=>{"use strict";var NB=rA(),BB=nA();function MB(e,t){return e!=null&&BB(e,t,NB)}oA.exports=MB});var uA=u((E$,iA)=>{"use strict";var kB=Di(),GB=eA(),FB=sA(),QB=Kn(),jB=Ni(),WB=Bi(),$B=Ar(),KB=1,VB=2;function YB(e,t){return QB(e)&&jB(t)?WB($B(e),t):function(r){var a=GB(r,e);return a===void 0&&a===t?FB(r,e):kB(t,a,KB|VB)}}iA.exports=YB});var cA=u((R$,pA)=>{"use strict";function HB(e){return function(t){return t?.[e]}}pA.exports=HB});var dA=u((v$,lA)=>{"use strict";var zB=ji();function JB(e){return function(t){return zB(t,e)}}lA.exports=JB});var mA=u((_$,fA)=>{"use strict";var XB=cA(),ZB=dA(),eM=Kn(),tM=Ar();function rM(e){return eM(e)?XB(tM(e)):ZB(e)}fA.exports=rM});var Wi=u((x$,gA)=>{"use strict";var aM=qh(),nM=uA(),oM=Xr(),sM=se(),iM=mA();function uM(e){return typeof e=="function"?e:e==null?oM:typeof e=="object"?sM(e)?nM(e[0],e[1]):aM(e):iM(e)}gA.exports=uM});var hA=u((C$,yA)=>{"use strict";var pM=Oi(),cM=Wi(),lM=1;function dM(e){return cM(typeof e=="function"?e:pM(e,lM))}yA.exports=dM});var bA=u((O$,AA)=>{"use strict";var fM=Lo();function mM(e){var t=e==null?0:e.length;return t?fM(e,1):[]}AA.exports=mM});var SA=u((L$,IA)=>{"use strict";var gM=bA(),yM=Po(),hM=tn();function AM(e){return hM(yM(e,void 0,gM),e+"")}IA.exports=AM});var TA=u((P$,wA)=>{"use strict";var bM=Qn(),IM=SA(),SM=256,wM=IM(function(e,t){return bM(e,SM,void 0,void 0,void 0,t)});wA.exports=wM});var RA=u((U$,EA)=>{"use strict";var TM=Gi(),EM=rr(),RM=se(),vM=mr(),_M=ki(),xM=Ar(),CM=Fi();function OM(e){return RM(e)?TM(e,xM):vM(e)?[e]:EM(_M(CM(e)))}EA.exports=OM});var _A=u((q$,vA)=>{"use strict";vA.exports={ary:Fg(),assign:Ii(),clone:zy(),curry:Xy(),forEach:Gn(),isArray:se(),isError:eh(),isFunction:Zr(),isWeakMap:rh(),iteratee:hA(),keys:bi(),rearg:TA(),toInteger:gi(),toPath:RA()}});var CA=u((D$,xA)=>{"use strict";var LM=ym(),PM=_A();function UM(e,t,r){return LM(PM,e,t,r)}xA.exports=UM});var $i=u((N$,LA)=>{"use strict";var qM=CA(),OA=qM("merge",as());OA.placeholder=Xs();LA.exports=OA});var qb=u((LK,Ub)=>{"use strict";function ek(e,t,r,a){for(var n=-1,o=e==null?0:e.length;++n<o;){var s=e[n];t(a,s,r(s),e)}return a}Ub.exports=ek});var Nb=u((PK,Db)=>{"use strict";var tk=Ko(),rk=gr();function ak(e,t){return e&&tk(e,t,rk)}Db.exports=ak});var Mb=u((UK,Bb)=>{"use strict";var nk=Zt();function ok(e,t){return function(r,a){if(r==null)return r;if(!nk(r))return e(r,a);for(var n=r.length,o=t?n:-1,s=Object(r);(t?o--:++o<n)&&a(s[o],o,s)!==!1;);return r}}Bb.exports=ok});var Gb=u((qK,kb)=>{"use strict";var sk=Nb(),ik=Mb(),uk=ik(sk);kb.exports=uk});var Qb=u((DK,Fb)=>{"use strict";var pk=Gb();function ck(e,t,r,a){return pk(e,function(n,o,s){t(a,n,r(n),s)}),a}Fb.exports=ck});var Wb=u((NK,jb)=>{"use strict";var lk=qb(),dk=Qb(),fk=Wi(),mk=se();function gk(e,t){return function(r,a){var n=mk(r)?lk:dk,o=t?t():{};return n(r,e,fk(a,2),o)}}jb.exports=gk});var Kb=u((BK,$b)=>{"use strict";var yk=oa(),hk=Wb(),Ak=Object.prototype,bk=Ak.hasOwnProperty,Ik=hk(function(e,t,r){bk.call(e,r)?e[r].push(t):yk(e,r,[t])});$b.exports=Ik});var Wk={};w(Wk,{Method:()=>uo,ai:()=>Uu,api:()=>iu,auditLogs:()=>It,automations:()=>Cn,backups:()=>Se,branding:()=>bn,constants:()=>$r,environmentVariables:()=>Je,features:()=>Me,groups:()=>j,init:()=>cm,licensing:()=>Ve,logger:()=>Bt,mappers:()=>Y,middleware:()=>Xi,plugins:()=>On,publicApi:()=>Un,quotas:()=>ze,scimGroups:()=>br,scimUsers:()=>ye,sdk:()=>Vi,users:()=>nt,utils:()=>Yt});module.exports=MI(Wk);var uo=(o=>(o.POST="POST",o.GET="GET",o.PATCH="PATCH",o.DELETE="DELETE",o.PUT="PUT",o))(uo||{});var Vi={};w(Vi,{ai:()=>Is,auditLogs:()=>It,automations:()=>Cn,backups:()=>Se,branding:()=>bn,environmentVariables:()=>Je,features:()=>Me,groups:()=>j,init:()=>cm,licensing:()=>Ve,logger:()=>Bt,plugins:()=>On,publicApi:()=>Un,quotas:()=>ze,scimGroups:()=>br,scimUsers:()=>ye,users:()=>nt,utils:()=>Yt});var bn={};w(bn,{getBrandingConfig:()=>Ox});var Me={};w(Me,{checkBackups:()=>ce,checkFeature:()=>hn,checkFeatures:()=>ms,checkSCIM:()=>As,isAppBuildersEnabled:()=>Pt,isAuditLogsEnabled:()=>An,isBackupsEnabled:()=>gs,isBrandingEnabled:()=>ys,isEnforceableSSO:()=>Tf,isExpandedPublicApiEnabled:()=>rt,isPWAEnabled:()=>Tx,isPkceOidcEnabled:()=>Rx,isRecaptchaEnabled:()=>Ex,isSSOEnforced:()=>vx,isSyncAutomationsEnabled:()=>Sx,isTriggerAutomationRunEnabled:()=>wx,isUserGroupsEnabled:()=>hs,isViewPermissionEnabled:()=>_x,isViewReadonlyColumnsEnabled:()=>xx});var te=require("@budibase/types"),tt=require("@budibase/backend-core");var Ve={};w(Ve,{cache:()=>Ne,client:()=>mt,features:()=>Ja,getFreeLicense:()=>ls,getLicense:()=>ps,getLicenseFromKey:()=>cs,keys:()=>fs,offline:()=>mn,quotas:()=>Xa});var Ne={};w(Ne,{getCachedLicense:()=>Sf,invalidate:()=>wf,refresh:()=>Ct});var Ba=require("@budibase/backend-core"),Tr,kI=async()=>{Tr=await Ba.RedisClient.init(Ba.redis.utils.Databases.LICENSES)},GI=async()=>{Tr&&await Tr.finish()};process.on("exit",async()=>{await GI()});var po=async()=>(Tr||await kI(),Tr);var mt={};w(mt,{activateLicenseKey:()=>vo,getLicense:()=>Kt,getLicenseFromKey:()=>Ro,triggerQuota:()=>RS});var Qu=P(require("node-fetch"));var ju=require("@budibase/backend-core"),co=require("dd-trace"),Wu=require("dd-trace/ext/formats"),lo=class{constructor(t){this.apiCall=t=>async(r="",a={})=>await co.tracer.trace(`api.${t}`,async n=>{n.setTag("url",r);let o={...a.headers};o["Content-Type"]||(o["Content-Type"]="application/json",o.Accept="application/json");let s=o["Content-Type"]==="application/json";ju.logging.correlation.setHeader(o),co.tracer.inject(n,Wu.HTTP_HEADERS,o);let i={method:t,body:s?JSON.stringify(a.body):a.body,headers:o,credentials:"include"};return(0,Qu.default)(`${this.host}${r}`,i)});this.post=this.apiCall("POST");this.get=this.apiCall("GET");this.patch=this.apiCall("PATCH");this.del=this.apiCall("DELETE");this.put=this.apiCall("PUT");this.host=t}},fo=lo;var Ya=require("@budibase/types"),L=require("@budibase/backend-core");var We={};w(We,{bustCache:()=>yo,getCurrentUsageValues:()=>Xu,getQuotaUsage:()=>Et,setAllUsage:()=>Ao,setAppUsageValue:()=>ho,setUsage:()=>Hu,setUsagePerApp:()=>zu,utils:()=>_r});var ue=require("@budibase/types"),fe=require("@budibase/backend-core");var _r={};w(_r,{generateBaseQuotaUsage:()=>ka,generateNewMonthlyQuotas:()=>vr,generateNewQuotaUsage:()=>go,getBreakdownName:()=>Fa,getCurrentMonthString:()=>lt,getQuotaDocId:()=>Rr,setCurrentMonth:()=>Ga,setQuotaReset:()=>mo});var H=require("@budibase/types"),Er=require("@budibase/backend-core"),Ma=require("@budibase/shared-core"),Rr=()=>Er.context.isSelfHostUsingCloud()?`quota_usage_${Er.context.getTenantId()}`:Er.db.StaticDatabases.GLOBAL.docs.usageQuota,$u=()=>{let e=new Date;return new Date(e.getFullYear(),e.getMonth()+1,1).toISOString()},mo=e=>{e.quotaReset=$u()},lt=()=>{let e=new Date,t=e.getMonth()+1,r=e.getFullYear();return`${t}-${r}`},ka=()=>({usageQuota:{[H.StaticQuotaName.APPS]:0,[H.StaticQuotaName.ROWS]:0,[H.StaticQuotaName.PLUGINS]:0,[H.StaticQuotaName.USERS]:0,[H.StaticQuotaName.CREATORS]:0,[H.StaticQuotaName.USER_GROUPS]:0,[H.StaticQuotaName.AI_CUSTOM_CONFIGS]:0,triggers:{}},monthly:{[lt()]:vr()}}),go=()=>{let e={_id:Rr(),quotaReset:$u(),...ka(),apps:{}};return Ga(e),e},vr=()=>({[H.MonthlyQuotaName.QUERIES]:0,[H.MonthlyQuotaName.AUTOMATIONS]:0,[H.MonthlyQuotaName.BUDIBASE_AI_CREDITS]:0,[H.MonthlyQuotaName.ACTIONS]:0,triggers:{}}),Ga=e=>{let t=lt();e.monthly||(e.monthly={}),e.monthly[t]||(e.monthly[t]=vr()),e.monthly.current=e.monthly[t]},Fa=(e,t)=>{if(!(!t||!e))switch(e){case H.MonthlyQuotaName.AUTOMATIONS:return H.BreakdownQuotaName.AUTOMATIONS;case H.MonthlyQuotaName.QUERIES:return(0,Ma.isTableIdOrExternalTableId)(t)?H.BreakdownQuotaName.ROW_QUERIES:(0,Ma.isDatasourceOrDatasourcePlusId)(t)?H.BreakdownQuotaName.DATASOURCE_QUERIES:void 0}};var Ku=fe.Duration.fromSeconds(60).toMs(),{Writethrough:Vu}=fe.cache.writethrough;function QI(e){return delete e.usageLimits,delete e.usageQuota.automationRuns,delete e.usageQuota.emails,delete e.usageQuota.storage,delete e.usageQuota.views,delete e.usageQuota.publishedApps,delete e.usageQuota.developers,e}var Qa=()=>fe.tenancy.isSelfHostUsingCloud()?new Vu(fe.tenancy.getSelfHostCloudDB(),Ku):new Vu(fe.tenancy.getGlobalDB(),Ku);async function yo(e=0){let r=Qa(),a=Rr(),n=await r.tryGet(a);n&&n._rev&&await r.remove(a,n._rev).catch(async o=>{if(e<1)return await yo(e+1);throw o})}var Et=async()=>{let e=Qa(),t=await e.tryGet(Rr());if(!t){t=go();let{rev:r}=await e.put(t);t._rev=r}return Ga(t),mo(t),QI(t)},Hu=async(e,t,r)=>Ao({name:t,type:r,values:{total:e}}),zu=async(e,t,r)=>{let a=Qa(),n=await Et(),o=Object.values(e).reduce((i,p)=>i+p,0);for(let[i,p]of Object.entries(e))n=Ju(n,t,r,{total:o,app:p},{appId:i});let s=await a.put(n);return n._rev=s.rev,n},jI=(e,t,r,a)=>{let n=Fa(t,r);if(!n||!a?.breakdown)return e;e.breakdown||(e.breakdown={}),e.breakdown[n]||(e.breakdown[n]={parent:t,values:{}});let o=e.breakdown[n];return o.values[r]=a.breakdown,e},ho=(e,t,r,a={},n)=>{let o;try{o=fe.db.getProdAppID(a?.appId||fe.context.getAppId())}catch{}if(!o||!n.app||!ue.APP_QUOTA_NAMES.includes(t))return e;e.apps?.[o]||(e.apps={...e.apps,[o]:ka()});let s=e.apps[o];switch(r){case ue.QuotaUsageType.STATIC:s.usageQuota[t]=n.app;break;case ue.QuotaUsageType.MONTHLY:{let i=lt(),p=t,f=s.monthly[i];f||(s.monthly[i]=vr(),f=s.monthly[i]),f[p]=n.app,ue.BREAKDOWN_QUOTA_NAMES.includes(p)&&a?.id&&(f=jI(f,p,a.id,n));break}}return e},Yu=(e,t,r,a)=>{if(!ue.APP_QUOTA_NAMES.includes(r))return{};let n;try{n=fe.db.getProdAppID(fe.context.getAppId())}catch{}if(!n||!e.apps||!e.apps[n])return{app:0};let o=e.apps[n];switch(t){case ue.QuotaUsageType.STATIC:if(o.usageQuota?.[r])return{app:o.usageQuota[r]};break;case ue.QuotaUsageType.MONTHLY:{let s=lt(),i=r;if(!o.monthly?.[s]?.[i])break;let p=o.monthly[s],f=p[i],m,g=Fa(i,a);return g&&a&&p.breakdown?.[g]&&(m=p.breakdown[g]?.values[a]),{app:f,breakdown:m||0}}}return{app:0}},WI=(e,t,r)=>{t.usageQuota.triggers||(t.usageQuota.triggers={}),r&&(t.usageQuota.triggers[e]=r)},$I=(e,t,r,a)=>{r.monthly[t].triggers||(r.monthly[t].triggers={}),a&&(r.monthly[t].triggers[e]=a)},Ju=(e,t,r,a,n={})=>{if(r===ue.QuotaUsageType.STATIC)t=t,e.usageQuota[t]=a.total,WI(t,e,a.triggers);else if(r===ue.QuotaUsageType.MONTHLY){t=t;let o=lt();e.monthly[o][t]=a.total,$I(t,o,e,a.triggers)}else throw new Error(`Invalid usage type: ${r}`);return ho(e,t,r,n,a)},Ao=async e=>{let t=Array.isArray(e)?e:[e],r=Qa(),a=await Et();for(let o of t)a=Ju(a,o.name,o.type,o.values,o.opts);let n=await r.put(a,0);return a._rev=n.rev,a},Xu=async(e,t,r)=>{let a=await Et(),n=0,o={};switch(e){case ue.QuotaUsageType.STATIC:if(a.usageQuota[t]){let s=t;n=a.usageQuota[s],o=Yu(a,e,t,r)}break;case ue.QuotaUsageType.MONTHLY:{let s=lt(),i=t;a.monthly[s][i]&&(n=a.monthly[s][i],o=Yu(a,e,t,r));break}default:throw new Error(`Invalid usage type: ${e}`)}return ue.APP_QUOTA_NAMES.includes(t)&&!(o.app||o.breakdown)&&(o.app=o.app||0,o.breakdown=o.breakdown||0),{total:n,app:o.app,breakdown:o.breakdown}};var ve={};w(ve,{destroy:()=>YI,get:()=>bo,save:()=>VI});var dt=require("@budibase/backend-core"),KI=()=>({_id:dt.StaticDatabases.GLOBAL.docs.licenseInfo}),VI=async e=>{let t=await bo();t={...t,...e};let a=await dt.tenancy.getGlobalDB().put(t);return t._rev=a.rev,t},bo=async()=>{let e=dt.tenancy.getGlobalDB();try{return await e.get(dt.StaticDatabases.GLOBAL.docs.licenseInfo)}catch(t){if(t.status===404)return KI();throw t}},YI=async()=>{let e=dt.tenancy.getGlobalDB(),t=await bo();t&&t._rev&&await e.remove(dt.StaticDatabases.GLOBAL.docs.licenseInfo,t._rev)};var M={};w(M,{bulkSave:()=>sS,destroy:()=>iS,fetch:()=>rS,generateUserGroupID:()=>eS,get:()=>aS,getBulk:()=>nS,getByName:()=>Io,getGroupUsers:()=>Wa,getGroupUsersParams:()=>ap,getUserGroupsParams:()=>rp,save:()=>oS});var q=require("@budibase/backend-core");var De=require("@budibase/types"),jt=require("@budibase/backend-core");async function Zu(){let e=jt.sql.designDoc.base("type");e.sql.tables={[De.AUDIT_LOG_TYPE]:{fields:{appId:De.SQLiteType.TEXT,event:De.SQLiteType.TEXT,userId:De.SQLiteType.TEXT,timestamp:De.SQLiteType.TEXT,metadata:De.SQLiteType.TEXT,name:De.SQLiteType.TEXT,type:De.SQLiteType.TEXT,fallback:De.SQLiteType.TEXT}}};let t=jt.context.getAuditLogsDB(),r;try{r=await t.get(jt.SQLITE_DESIGN_DOC_ID),r={...r,...e}}catch(a){if(a.status===404)r=e;else throw a}await t.put(r)}var ja=require("@budibase/backend-core"),{ViewName:HI,SEPARATOR:zI,DocumentType:JI,createView:XI}=ja.db,ZI=JI.USER+zI;async function ep(){let e=ja.tenancy.getGlobalDB(),t=`function(doc) {
|
|
4
|
+
if (doc._id.startsWith("${ZI}") && Array.isArray(doc.userGroups)) {
|
|
5
5
|
for (let groupId of doc.userGroups) {
|
|
6
6
|
emit("g_" + groupId, { email: doc.email, userId: doc._id })
|
|
7
7
|
emit("e_" + groupId + doc.email, { email: doc.email, userId: doc._id })
|
|
8
8
|
}
|
|
9
9
|
}
|
|
10
|
-
}`;await
|
|
11
|
-
if (doc._id.startsWith("${
|
|
10
|
+
}`;await XI(e,t,HI.USER_BY_GROUP)}var tp=`${q.DocumentType.GROUP}${q.SEPARATOR}`,xr=async()=>(await q.db.getAllApps({dev:!0,efficient:!0,idsOnly:!0})).map(t=>q.db.getProdAppID(t));function rp(e,t={}){e||(e="");let r=e?.startsWith(q.DocumentType.GROUP)?"":tp;return{...t,startkey:`${r}${e}`,endkey:`${r}${e}${q.UNICODE_MAX}`}}function ap(e,t={}){e||(e="");let{emailSearch:r,bookmark:a,...n}=t;return r?{...n,startkey:`e_${e}${a||r}`,endkey:`e_${e}${r}${q.UNICODE_MAX}`}:{...t,startkey:`g_${e}`,endkey:`g_${e}${q.UNICODE_MAX}`,startkey_docid:a}}function eS(){return`${tp}${q.utils.newid()}`}async function Wa(e,t){let r=q.tenancy.getGlobalDB();return(await q.db.queryView(q.db.ViewName.USER_BY_GROUP,ap(e,t),r,ep,{arrayResponse:!0})).map(n=>({_id:n.userId,email:n.email}))||[]}async function Cr(e,t){return e.users=await Wa(e._id),e.roles&&(e.roles=Object.fromEntries(Object.entries(e.roles).filter(([r])=>t.includes(r)))),e}async function tS(e){let r=(await Cr(e,await xr())).users?.map(o=>o._id),a=await q.users.bulkGetGlobalUsersById(r),n=[];for(let o of a){if(!o.userGroups)continue;let s=o.userGroups.length;o.userGroups=o.userGroups.filter(i=>i!==e._id),o.userGroups.length!==s&&n.push(o)}n.length&&await q.users.bulkUpdateGlobalUsers(n)}async function np(){return(await q.tenancy.getGlobalDB().allDocs(rp(null,{include_docs:!0}))).rows.map(t=>t.doc)}async function rS(){let[e,t]=await Promise.all([np(),xr()]),r=[];for(let a of e)r.push(Cr(a,t));return await Promise.all(r)}async function aS(e){let t=q.tenancy.getGlobalDB(),[r,a]=await Promise.all([t.get(e),xr()]);return await Cr(r,a)}async function nS(e,t={enriched:!0}){let r=q.tenancy.getGlobalDB(),[a,n]=await Promise.all([r.getMultiple(e,{allowMissing:!0}),xr()]);if(t?.enriched){let o=[];for(let s of a)o.push(Cr(s,n));return await Promise.all(o)}else return a}async function oS(e){return await q.tenancy.getGlobalDB().put(e)}async function sS(e){return await q.tenancy.getGlobalDB().bulkDocs(e)}async function iS(e,t){let r=q.tenancy.getGlobalDB(),a=await r.get(e),n=await r.remove(e,t);return await tS(a),n}async function Io(e){let t=e.toLowerCase(),[r,a]=await Promise.all([np(),xr()]),n=r.find(o=>o.name.toLowerCase()===t);if(n)return await Cr(n,a)}var _e={};w(_e,{deleteAppBackupMetadata:()=>IS,fetchAppBackups:()=>hS,generateAppBackupID:()=>Ap,getAppBackupMetadata:()=>SS,oldestBackupDate:()=>yp,storeAppBackupMetadata:()=>AS,updateAppBackupMetadata:()=>bS});var Q=require("@budibase/backend-core"),gp=require("@budibase/types");function Or(e,t){let r=e.rows.map(n=>n.doc?n.doc:n);if(!t?.paginate)return{data:r,hasNextPage:!1};let a=r.length>t?.pageSize;return{data:r.slice(0,t?.pageSize),hasNextPage:a,nextPage:a?e.rows[t?.pageSize]?.key:void 0}}var Wt=require("@budibase/backend-core"),{ViewName:sp,AutomationViewMode:So,SEPARATOR:$e,DocumentType:ip,createView:up}=Wt.db,uS=ip.AUTOMATION_LOG+$e,op=ip.APP_BACKUP+$e;async function pp(){let e=Wt.context.getProdAppDB(),t=`function(doc) {
|
|
11
|
+
if (doc._id.startsWith("${uS}")) {
|
|
12
12
|
let autoId = doc.automationId + "${$e}"
|
|
13
13
|
let status = doc.status + "${$e}"
|
|
14
|
-
let autoKey = "${
|
|
15
|
-
let statusKey = "${
|
|
16
|
-
let allKey = "${
|
|
14
|
+
let autoKey = "${So.AUTOMATION}${$e}" + autoId + doc.createdAt
|
|
15
|
+
let statusKey = "${So.STATUS}${$e}" + status + doc.createdAt
|
|
16
|
+
let allKey = "${So.ALL}${$e}" + status + autoId + doc.createdAt
|
|
17
17
|
emit(statusKey)
|
|
18
18
|
emit(autoKey)
|
|
19
19
|
emit(allKey)
|
|
20
20
|
}
|
|
21
|
-
}`;await
|
|
22
|
-
if (doc._id.startsWith("${
|
|
21
|
+
}`;await up(e,t,sp.AUTOMATION_LOGS)}async function cp(){let e=Wt.tenancy.getGlobalDB(),t=`function(doc) {
|
|
22
|
+
if (doc._id.startsWith("${op}") && doc.type && doc.trigger) {
|
|
23
23
|
let full = doc.appId + "${$e}"
|
|
24
24
|
full += doc.trigger.toLowerCase() + "${$e}"
|
|
25
25
|
full += doc.type.toLowerCase() + "${$e}"
|
|
26
|
-
emit("${
|
|
26
|
+
emit("${op}" + full + doc.timestamp)
|
|
27
27
|
}
|
|
28
|
-
}`;await
|
|
28
|
+
}`;await up(e,t,sp.APP_BACKUP_BY_TRIGGER)}var mp=require("@budibase/types");var $r={};w($r,{GENERIC_PAGE_SIZE:()=>Ke,auditLogs:()=>$t,licenses:()=>Ae,quotas:()=>et,versions:()=>Wr});var Ae={};w(Ae,{CLOUD_FREE_LICENSE:()=>cS,SELF_FREE_LICENSE:()=>wo,UNLIMITED:()=>F,UNLIMITED_LICENSE:()=>lS});var ft=require("@budibase/types");var et={};w(et,{UNLIMITED:()=>pS,actions:()=>Gr,appBackupRetentionDays:()=>Qr,apps:()=>Pr,automationLogRetentionDays:()=>Fr,automations:()=>Mr,budibaseAICredits:()=>kr,creators:()=>qr,customAIConfigurations:()=>jr,plugins:()=>Nr,queries:()=>Br,rows:()=>Lr,userGroups:()=>Dr,users:()=>Ur});var oe=require("@budibase/types"),pS=-1,Lr=e=>({[oe.StaticQuotaName.ROWS]:{name:"Rows",value:e,triggers:[90,100]}}),Pr=e=>({[oe.StaticQuotaName.APPS]:{name:"Apps",value:e,triggers:[100]}}),Ur=e=>({[oe.StaticQuotaName.USERS]:{name:"Users",value:e,triggers:[80,100]}}),qr=e=>({[oe.StaticQuotaName.CREATORS]:{name:"Creators",value:e,triggers:[]}}),Dr=e=>({[oe.StaticQuotaName.USER_GROUPS]:{name:"User Groups",value:e,triggers:[80,100]}}),Nr=e=>({[oe.StaticQuotaName.PLUGINS]:{name:"Plugins",value:e,triggers:[90,100]}}),Br=e=>({[oe.MonthlyQuotaName.QUERIES]:{name:"Queries",value:e,triggers:[]}}),Mr=e=>({[oe.MonthlyQuotaName.AUTOMATIONS]:{name:"Automations",value:e,triggers:[80,90,100]}}),kr=e=>({[oe.MonthlyQuotaName.BUDIBASE_AI_CREDITS]:{name:"Budibase AI Credits",value:e,triggers:[80,90,100]}}),Gr=e=>({[oe.MonthlyQuotaName.ACTIONS]:{name:"Actions",value:e,triggers:[80,90,100]}}),Fr=e=>({[oe.ConstantQuotaName.AUTOMATION_LOG_RETENTION_DAYS]:{name:"Automation Logs",value:e,triggers:[]}}),Qr=e=>({[oe.ConstantQuotaName.APP_BACKUPS_RETENTION_DAYS]:{name:"App Backups",value:e,triggers:[]}}),jr=e=>({[oe.StaticQuotaName.AI_CUSTOM_CONFIGS]:{name:"Custom AI Configuration",value:e,triggers:[]}});var F=-1,cS={features:[],quotas:{usage:{monthly:{...Br(F),...Mr(200),...kr(5e4),...Gr(F)},static:{...Pr(F),...Lr(2e3),...Ur(5),...qr(5),...Dr(0),...Nr(10),...jr(0)}},constant:{...Fr(1),...Qr(0)}},plan:{type:ft.PlanType.FREE,usesInvoicing:!1,model:ft.PlanModel.PER_USER}},wo={features:[],quotas:{usage:{monthly:{...Br(F),...Mr(F),...kr(5e4),...Gr(F)},static:{...Lr(F),...Pr(F),...Ur(20),...qr(F),...Dr(0),...Nr(10),...jr(0)}},constant:{...Fr(1),...Qr(0)}},plan:{type:ft.PlanType.FREE,usesInvoicing:!1,model:ft.PlanModel.PER_USER}},lS={features:[],quotas:{usage:{monthly:{...Br(F),...Mr(F),...kr(F),...Gr(F)},static:{...Pr(F),...Lr(F),...Ur(F),...qr(F),...Dr(F),...Nr(F),...jr(F)}},constant:{...Fr(F),...Qr(F)}},plan:{type:ft.PlanType.FREE,usesInvoicing:!1,model:ft.PlanModel.PER_USER}};var Wr={};w(Wr,{getLicenseVersion:()=>dS,getProVersion:()=>dp});var Rt=require("@budibase/backend-core"),$a=P(require("fs")),lp=P(require("path")),dS=()=>{if(Rt.env.isDev()){let e="dev-version.txt",t=lp.default.join(Rt.objectStore.budibaseTempDir(),e);if($a.default.existsSync(t))return $a.default.readFileSync(t,"utf8");{let r=Rt.utils.newid();return $a.default.writeFileSync(t,r),r}}else return dp()},dp=()=>{let e=Rt.env.VERSION;if(!e)throw new Error("No budibase pro version was specified");return e};var $t={};w($t,{searchTable:()=>fS});var vt=require("@budibase/types"),fp=require("@budibase/backend-core");function fS(){return{type:"table",sourceType:vt.TableSourceType.INTERNAL,name:vt.AUDIT_LOG_TYPE,sourceId:fp.SQS_DATASOURCE_INTERNAL,primary:["_id"],schema:{metadata:{name:"metadata",type:vt.FieldType.JSON},fallback:{name:"fallback",type:vt.FieldType.JSON}}}}var Ke=9;var mS=new Date(864e13).toISOString(),gS=1e3*60*60*24;async function Ka(e){let r=(await Ne.getCachedLicense()).quotas?.[mp.QuotaType.CONSTANT]?.[e]?.value||0;return r===Ae.UNLIMITED?new Date(mS).toISOString():new Date(new Date().getTime()-gS*r).toISOString()}async function yp(){return Ka(gp.ConstantQuotaName.APP_BACKUPS_RETENTION_DAYS)}var To=`${Q.db.DocumentType.APP_BACKUP}${Q.db.SEPARATOR}`;async function yS(e,t,r={}){let a=await yp(),n=Q.db.getProdAppID(e),o=n,s=n;if(t.trigger&&t.type){let i=`${Q.db.SEPARATOR}${t.trigger}`;i+=`${Q.db.SEPARATOR}${t.type}`,o+=i,s+=i}return(!t.startDate||t.startDate<a)&&(t.startDate=a),t.startDate&&(s+=`${Q.db.SEPARATOR}${t.startDate}`),t.endDate&&(o+=`${Q.db.SEPARATOR}${t.endDate}`),{...r,descending:!0,startkey:`${To}${o}${Q.db.UNICODE_MAX}`,endkey:`${To}${s}`}}async function hp(e,t){try{let r=Q.db.getQueryIndex(Q.db.ViewName.APP_BACKUP_BY_TRIGGER);return await e.query(r,t)}catch(r){if(r!=null&&r.error==="not_found")return await cp(),hp(e,t);throw r}}function Ap(e,t){return`${To}${e}${Q.db.SEPARATOR}${t}`}async function hS(e,t={}){let r=Q.tenancy.getGlobalDB(),a,n=t.limit||9,o=await yS(e,t,{include_docs:!0,limit:n+1});t.page&&(o.startkey=t.page),!t.trigger||!t.type?a=await r.allDocs(o):a=await hp(r,o);let s=Or(a,{paginate:t.paginate,pageSize:n}),i=[...new Set(s.data.filter(f=>f.createdBy).map(f=>f.createdBy))],p=await Q.users.bulkGetGlobalUsersById(i,{cleanup:!0});for(let f of p)for(let m of s.data)f?._id===m.createdBy&&(m.createdBy=f);return s}async function AS(e,t={}){let r=Q.tenancy.getGlobalDB(),a=Q.db.getProdAppID(e.appId),n=Ap(a,e.timestamp),o={...e,_id:n,appId:a,name:e.name};return o._id=t.docId||o._id,o._rev=t.docRev||o._rev,t.filename&&(o.filename=t.filename),e.createdBy&&(o.createdBy=Q.db.getGlobalIDFromUserMetadataID(e.createdBy)),await r.put(o)}async function bS(e,t){let r=Q.tenancy.getGlobalDB(),a=await r.get(e);return a.name=t,await r.put(a)}async function IS(e){let t=Q.tenancy.getGlobalDB(),r=await t.get(e);await t.remove(r._id,r._rev)}async function SS(e){return await Q.tenancy.getGlobalDB().get(e)}var _t={};w(_t,{get:()=>TS,getCacheEnvVarID:()=>Sp,getEnvVarID:()=>Va,update:()=>ES});var Be=require("@budibase/backend-core"),Ip=P(require("lru-cache")),wS=1e3,bp=new Ip.default({max:wS});function Va(){return Be.StaticDatabases.GLOBAL.docs.environmentVariables}function Sp(e){return`${Be.tenancy.getTenantId()}/${Va()}/${e||""}`}async function TS(){let e=Va(),t=Be.tenancy.getGlobalDB(),r,a=!1;try{r=await t.get(e)}catch(i){if(i.status==404)a=!0;else throw i}let n=Sp(r?._rev),o=bp.get(n);if(o)return o;let s;return!a&&r?s={...r,variables:JSON.parse(Be.encryption.decrypt(r.variables,Be.encryption.SecretOption.ENCRYPTION))}:s={_id:e,variables:{}},bp.set(n,s),s}async function ES(e){let t=Va();return await Be.tenancy.getGlobalDB().put({_id:e._id||t,_rev:e._rev||void 0,variables:Be.encryption.encrypt(JSON.stringify(e.variables),Be.encryption.SecretOption.ENCRYPTION)})}var Eo=require("dd-trace"),Ha=new fo(L.env.INTERNAL_ACCOUNT_PORTAL_URL),za=async e=>{try{let t=await e.json();if(t.message)return t.message}catch{}try{let t=await e.text();if(t)return t}catch{}},wp=async e=>{let t,r;if(L.env.SELF_HOSTED){if(t=await ve.get(),!t.licenseKey)return;r={[L.constants.Header.LICENSE_KEY]:t.licenseKey}}else{let a=L.tenancy.getTenantId();r={[L.constants.Header.API_KEY]:L.env.ACCOUNT_PORTAL_API_KEY,[L.constants.Header.TENANT_ID]:a}}return e(r)},Tp=async()=>await Eo.tracer.trace("_getLicense",async()=>await wp(async e=>{let t=await We.getQuotaUsage();if(t.usageQuota.users==null){let i=await L.users.getUserCount();console.info(`Syncing user count quota to ${i}`),t.usageQuota.users=i,await We.setUsage(i,Ya.StaticQuotaName.USERS,Ya.QuotaUsageType.STATIC)}let r=await L.installation.getInstallFromDB(),a=L.tenancy.getTenantId(),n=await L.events.identification.getUniqueTenantId(a),o=Wr.getProVersion(),s={quotaUsage:t,tenantId:a,install:{id:r.installId,tenantId:n,version:o}};try{let i=await Ha.post("/api/license",{headers:{...e},body:s});if(i.status===404||i.status===403)return;if(i.status!==200){let p=await za(i);throw new L.HTTPError(`Error getting license: ${p}`,i.status)}return i.json()}catch(i){if(L.env.DISABLE_ACCOUNT_PORTAL)return;throw i}}));L.env.isJest()&&(Tp=jest.fn());var Kt=Tp;async function Ro(e){return await Eo.tracer.trace("getLicenseFromKey",async t=>{let r;if(!L.env.ACCOUNT_PORTAL_API_KEY)throw new Error("getLicenseFromKey requires ACCOUNT_PORTAL_API_KEY to be set");try{r=await Ha.get(`/api/license/${e}`,{headers:{[L.constants.Header.API_KEY]:L.env.ACCOUNT_PORTAL_API_KEY}})}catch(a){if(L.env.DISABLE_ACCOUNT_PORTAL)return;throw a}if(r.status===404||r.status===403){t.addTags({licenseFound:!1});return}if(r.status!==200){let a=await za(r);throw new L.HTTPError(`Error getting license: ${a}`,r.status)}return r.json()})}var RS=e=>wp(async t=>{let r=await Ha.post("/api/license/usage/triggered",{headers:{...t},body:e});if(r.status!==200){let a=await za(r);L.logging.logAlert(`Error triggering quota usage: ${a}`)}}),vo=async e=>{let t=await L.installation.getInstall(),r={installVersion:t.version,installId:t.installId},a=await Ha.post("/api/license/activate",{headers:{[L.constants.Header.LICENSE_KEY]:e},body:r});if(a.status===403)throw new L.HTTPError("Invalid license key",400);if(a.status===409)throw new L.HTTPError("License key has already been activated",409);if(a.status!==200){let n=await za(a);throw new L.HTTPError(`Error activating license key: ${n}`,a.status)}return a.json()};var us=require("@budibase/backend-core");var mn={};w(mn,{activateOfflineLicenseToken:()=>px,deleteOfflineLicenseToken:()=>cx,dev:()=>ma,enrichLicense:()=>gf,getIdentifier:()=>ns,getIdentifierBase64:()=>lx,getIdentifierFromBase64:()=>dx,getOfflineLicense:()=>os,getOfflineLicenseToken:()=>df,signing:()=>Yr,verifyExpiry:()=>ff,verifyInstallation:()=>mf});var Yr={};w(Yr,{sign:()=>_S,verifyLicenseToken:()=>Vr});var _o=P(require("jsonwebtoken")),vS=`-----BEGIN PUBLIC KEY-----
|
|
29
29
|
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvz3jePLCFBXZ19c8Dpkv
|
|
30
30
|
XtSgOhKFOcvQdo/LV0KJRUzQWDPWuO4ILtBtnqhjtIzZH4CH0qCYBet5L6Qr4CM1
|
|
31
31
|
l2HXiAD1Q2rlHNW9wDaYyKb1F5f+v4RyqCAyzlkwRdksmkLeECTboojNnmRCrE3C
|
|
@@ -34,22 +34,22 @@ l2HXiAD1Q2rlHNW9wDaYyKb1F5f+v4RyqCAyzlkwRdksmkLeECTboojNnmRCrE3C
|
|
|
34
34
|
d/o3ZWE1TTj1zYwlCLN5qRKr3hU8nC3xEYNEbkB9SfTRaOq9Q7P8WmfLkoCPm3pR
|
|
35
35
|
mwIDAQAB
|
|
36
36
|
-----END PUBLIC KEY-----
|
|
37
|
-
`;function Vr(e){return Ro.default.verify(e,ES,{algorithms:["RS256"]})}function vS(e,t){return Ro.default.sign(t,e,{encoding:"utf-8",algorithm:"RS256"})}var Ja={};w(Ja,{getFeatures:()=>_o});var c=require("@budibase/types");var RS={[c.PlanType.FREE]:[...Ae.SELF_FREE_LICENSE.features],[c.PlanType.PREMIUM]:void 0,[c.PlanType.PREMIUM_PLUS]:[c.Feature.APP_BACKUPS,c.Feature.BRANDING,c.Feature.SYNC_AUTOMATIONS,c.Feature.APP_BUILDERS,c.Feature.VIEW_PERMISSIONS,c.Feature.TRIGGER_AUTOMATION_RUN,c.Feature.VIEW_READONLY_COLUMNS,c.Feature.AI_CUSTOM_CONFIGS,c.Feature.PDF,c.Feature.BUDIBASE_AI],[c.PlanType.PREMIUM_PLUS_TRIAL]:[c.Feature.APP_BACKUPS,c.Feature.BRANDING,c.Feature.SYNC_AUTOMATIONS,c.Feature.APP_BUILDERS,c.Feature.VIEW_PERMISSIONS,c.Feature.TRIGGER_AUTOMATION_RUN,c.Feature.VIEW_READONLY_COLUMNS,c.Feature.AI_CUSTOM_CONFIGS,c.Feature.PDF,c.Feature.BUDIBASE_AI],[c.PlanType.PRO]:[c.Feature.USER_GROUPS,c.Feature.APP_BACKUPS],[c.PlanType.TEAM]:[c.Feature.USER_GROUPS,c.Feature.APP_BACKUPS],[c.PlanType.BUSINESS]:[c.Feature.USER_GROUPS,c.Feature.APP_BACKUPS,c.Feature.ENVIRONMENT_VARIABLES,c.Feature.AUDIT_LOGS,c.Feature.BRANDING,c.Feature.SYNC_AUTOMATIONS,c.Feature.APP_BUILDERS,c.Feature.EXPANDED_PUBLIC_API,c.Feature.VIEW_PERMISSIONS,c.Feature.PDF,c.Feature.BUDIBASE_AI],[c.PlanType.ENTERPRISE_BASIC]:[c.Feature.USER_GROUPS,c.Feature.APP_BACKUPS,c.Feature.ENVIRONMENT_VARIABLES,c.Feature.ENFORCEABLE_SSO,c.Feature.AUDIT_LOGS,c.Feature.BRANDING,c.Feature.SYNC_AUTOMATIONS,c.Feature.OFFLINE,c.Feature.APP_BUILDERS,c.Feature.EXPANDED_PUBLIC_API,c.Feature.VIEW_PERMISSIONS,c.Feature.TRIGGER_AUTOMATION_RUN,c.Feature.SCIM,c.Feature.VIEW_READONLY_COLUMNS,c.Feature.AI_CUSTOM_CONFIGS,c.Feature.PWA,c.Feature.CUSTOM_APP_SCRIPTS,c.Feature.PDF,c.Feature.BUDIBASE_AI,c.Feature.RECAPTCHA,c.Feature.PKCE_OIDC],[c.PlanType.ENTERPRISE_BASIC_TRIAL]:[c.Feature.USER_GROUPS,c.Feature.APP_BACKUPS,c.Feature.ENVIRONMENT_VARIABLES,c.Feature.ENFORCEABLE_SSO,c.Feature.BRANDING,c.Feature.SYNC_AUTOMATIONS,c.Feature.APP_BUILDERS,c.Feature.EXPANDED_PUBLIC_API,c.Feature.VIEW_PERMISSIONS,c.Feature.TRIGGER_AUTOMATION_RUN,c.Feature.SCIM,c.Feature.VIEW_READONLY_COLUMNS,c.Feature.AI_CUSTOM_CONFIGS,c.Feature.PWA,c.Feature.CUSTOM_APP_SCRIPTS,c.Feature.PDF,c.Feature.BUDIBASE_AI,c.Feature.RECAPTCHA,c.Feature.PKCE_OIDC],[c.PlanType.ENTERPRISE]:[c.Feature.USER_GROUPS,c.Feature.APP_BACKUPS,c.Feature.ENVIRONMENT_VARIABLES,c.Feature.ENFORCEABLE_SSO,c.Feature.AUDIT_LOGS,c.Feature.BRANDING,c.Feature.SYNC_AUTOMATIONS,c.Feature.OFFLINE,c.Feature.APP_BUILDERS,c.Feature.EXPANDED_PUBLIC_API,c.Feature.VIEW_PERMISSIONS,c.Feature.TRIGGER_AUTOMATION_RUN,c.Feature.SCIM,c.Feature.VIEW_READONLY_COLUMNS,c.Feature.AI_CUSTOM_CONFIGS,c.Feature.PWA,c.Feature.CUSTOM_APP_SCRIPTS,c.Feature.PDF,c.Feature.BUDIBASE_AI,c.Feature.RECAPTCHA,c.Feature.PKCE_OIDC]},_S={[c.PlanType.FREE]:[...Ae.CLOUD_FREE_LICENSE.features],[c.PlanType.PREMIUM]:[c.Feature.APP_BACKUPS,c.Feature.BRANDING,c.Feature.APP_BUILDERS,c.Feature.VIEW_PERMISSIONS,c.Feature.PDF],[c.PlanType.PREMIUM_PLUS]:[c.Feature.APP_BACKUPS,c.Feature.BRANDING,c.Feature.SYNC_AUTOMATIONS,c.Feature.APP_BUILDERS,c.Feature.VIEW_PERMISSIONS,c.Feature.TRIGGER_AUTOMATION_RUN,c.Feature.VIEW_READONLY_COLUMNS,c.Feature.BUDIBASE_AI,c.Feature.PDF],[c.PlanType.PREMIUM_PLUS_TRIAL]:[c.Feature.APP_BACKUPS,c.Feature.BRANDING,c.Feature.SYNC_AUTOMATIONS,c.Feature.APP_BUILDERS,c.Feature.VIEW_PERMISSIONS,c.Feature.TRIGGER_AUTOMATION_RUN,c.Feature.VIEW_READONLY_COLUMNS,c.Feature.BUDIBASE_AI,c.Feature.PDF],[c.PlanType.PRO]:[c.Feature.USER_GROUPS,c.Feature.APP_BACKUPS,c.Feature.BRANDING],[c.PlanType.TEAM]:[c.Feature.USER_GROUPS,c.Feature.APP_BACKUPS,c.Feature.BRANDING],[c.PlanType.BUSINESS]:[c.Feature.USER_GROUPS,c.Feature.APP_BACKUPS,c.Feature.ENVIRONMENT_VARIABLES,c.Feature.AUDIT_LOGS,c.Feature.BRANDING,c.Feature.SYNC_AUTOMATIONS,c.Feature.APP_BUILDERS,c.Feature.EXPANDED_PUBLIC_API,c.Feature.VIEW_PERMISSIONS,c.Feature.BUDIBASE_AI,c.Feature.PDF],[c.PlanType.ENTERPRISE_BASIC]:[c.Feature.USER_GROUPS,c.Feature.APP_BACKUPS,c.Feature.ENVIRONMENT_VARIABLES,c.Feature.ENFORCEABLE_SSO,c.Feature.AUDIT_LOGS,c.Feature.BRANDING,c.Feature.SYNC_AUTOMATIONS,c.Feature.OFFLINE,c.Feature.APP_BUILDERS,c.Feature.EXPANDED_PUBLIC_API,c.Feature.VIEW_PERMISSIONS,c.Feature.TRIGGER_AUTOMATION_RUN,c.Feature.SCIM,c.Feature.VIEW_READONLY_COLUMNS,c.Feature.AI_CUSTOM_CONFIGS,c.Feature.BUDIBASE_AI,c.Feature.PWA,c.Feature.CUSTOM_APP_SCRIPTS,c.Feature.PDF,c.Feature.RECAPTCHA,c.Feature.PKCE_OIDC],[c.PlanType.ENTERPRISE_BASIC_TRIAL]:[c.Feature.USER_GROUPS,c.Feature.APP_BACKUPS,c.Feature.ENVIRONMENT_VARIABLES,c.Feature.ENFORCEABLE_SSO,c.Feature.BRANDING,c.Feature.SYNC_AUTOMATIONS,c.Feature.APP_BUILDERS,c.Feature.EXPANDED_PUBLIC_API,c.Feature.VIEW_PERMISSIONS,c.Feature.TRIGGER_AUTOMATION_RUN,c.Feature.SCIM,c.Feature.VIEW_READONLY_COLUMNS,c.Feature.AI_CUSTOM_CONFIGS,c.Feature.BUDIBASE_AI,c.Feature.PWA,c.Feature.CUSTOM_APP_SCRIPTS,c.Feature.PDF,c.Feature.RECAPTCHA,c.Feature.PKCE_OIDC],[c.PlanType.ENTERPRISE]:[c.Feature.USER_GROUPS,c.Feature.APP_BACKUPS,c.Feature.ENVIRONMENT_VARIABLES,c.Feature.ENFORCEABLE_SSO,c.Feature.AUDIT_LOGS,c.Feature.BRANDING,c.Feature.SYNC_AUTOMATIONS,c.Feature.APP_BUILDERS,c.Feature.EXPANDED_PUBLIC_API,c.Feature.VIEW_PERMISSIONS,c.Feature.TRIGGER_AUTOMATION_RUN,c.Feature.SCIM,c.Feature.VIEW_READONLY_COLUMNS,c.Feature.AI_CUSTOM_CONFIGS,c.Feature.BUDIBASE_AI,c.Feature.PWA,c.Feature.CUSTOM_APP_SCRIPTS,c.Feature.PDF,c.Feature.RECAPTCHA,c.Feature.PKCE_OIDC]};function _o(e,t){let r=[];function a(n){let o=n[t];if(!o)throw new Error(`Features do not exist for planType=${t} and hosting=${e}`);return o}switch(e){case c.Hosting.SELF:r=a(RS);break;case c.Hosting.CLOUD:r=a(_S);break}return r}var Xa={};w(Xa,{UNLIMITED:()=>d,getQuotas:()=>xo});var k=require("@budibase/types");var l=et,Tp=Ae,d=-1,Hr=e=>e*1e6,xS={[k.PlanType.FREE]:{...Tp.CLOUD_FREE_LICENSE.quotas},[k.PlanType.PREMIUM]:{usage:{monthly:{...l.queries(d),...l.automations(1e3),...l.budibaseAICredits(0),...l.actions(d)},static:{...l.rows(1e4),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(0),...l.plugins(d),...l.customAIConfigurations(0)}},constant:{...l.automationLogRetentionDays(7),...l.appBackupRetentionDays(7)}},[k.PlanType.PREMIUM_PLUS]:{usage:{monthly:{...l.queries(d),...l.automations(5e3),...l.budibaseAICredits(Hr(2)),...l.actions(d)},static:{...l.rows(25e3),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(0),...l.plugins(d),...l.customAIConfigurations(1)}},constant:{...l.automationLogRetentionDays(30),...l.appBackupRetentionDays(30)}},[k.PlanType.PREMIUM_PLUS_TRIAL]:{usage:{monthly:{...l.queries(d),...l.automations(5e3),...l.budibaseAICredits(Hr(2)),...l.actions(d)},static:{...l.rows(25e3),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(0),...l.plugins(d),...l.customAIConfigurations(1)}},constant:{...l.automationLogRetentionDays(30),...l.appBackupRetentionDays(30)}},[k.PlanType.PRO]:{usage:{monthly:{...l.queries(d),...l.automations(1e3),...l.budibaseAICredits(0),...l.actions(d)},static:{...l.rows(d),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(5),...l.plugins(d),...l.customAIConfigurations(0)}},constant:{...l.automationLogRetentionDays(7),...l.appBackupRetentionDays(7)}},[k.PlanType.TEAM]:{usage:{monthly:{...l.queries(d),...l.automations(5e3),...l.budibaseAICredits(0),...l.actions(d)},static:{...l.rows(d),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(10),...l.plugins(d),...l.customAIConfigurations(0)}},constant:{...l.automationLogRetentionDays(30),...l.appBackupRetentionDays(90)}},[k.PlanType.BUSINESS]:{usage:{monthly:{...l.queries(d),...l.automations(1e4),...l.budibaseAICredits(0),...l.actions(d)},static:{...l.rows(5e4),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(50),...l.plugins(d),...l.customAIConfigurations(0)}},constant:{...l.automationLogRetentionDays(365),...l.appBackupRetentionDays(365)}},[k.PlanType.ENTERPRISE_BASIC]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(Hr(4)),...l.actions(d)},static:{...l.rows(d),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(d),...l.plugins(d),...l.customAIConfigurations(d)}},constant:{...l.automationLogRetentionDays(d),...l.appBackupRetentionDays(d)}},[k.PlanType.ENTERPRISE_BASIC_TRIAL]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(Hr(4)),...l.actions(d)},static:{...l.rows(d),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(d),...l.plugins(d),...l.customAIConfigurations(d)}},constant:{...l.automationLogRetentionDays(15),...l.appBackupRetentionDays(15)}},[k.PlanType.ENTERPRISE]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(Hr(4)),...l.actions(d)},static:{...l.rows(d),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(d),...l.plugins(d),...l.customAIConfigurations(d)}},constant:{...l.automationLogRetentionDays(d),...l.appBackupRetentionDays(d)}}},CS={[k.PlanType.FREE]:{...Tp.SELF_FREE_LICENSE.quotas},[k.PlanType.PREMIUM]:void 0,[k.PlanType.PREMIUM_PLUS]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(0),...l.actions(d)},static:{...l.rows(d),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(0),...l.plugins(d),...l.customAIConfigurations(1)}},constant:{...l.automationLogRetentionDays(30),...l.appBackupRetentionDays(30)}},[k.PlanType.PREMIUM_PLUS_TRIAL]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(0),...l.actions(d)},static:{...l.rows(d),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(0),...l.plugins(d),...l.customAIConfigurations(1)}},constant:{...l.automationLogRetentionDays(30),...l.appBackupRetentionDays(30)}},[k.PlanType.PRO]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(0),...l.actions(d)},static:{...l.rows(d),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(5),...l.plugins(d),...l.customAIConfigurations(0)}},constant:{...l.automationLogRetentionDays(7),...l.appBackupRetentionDays(7)}},[k.PlanType.TEAM]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(0),...l.actions(d)},static:{...l.rows(d),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(10),...l.plugins(d),...l.customAIConfigurations(0)}},constant:{...l.automationLogRetentionDays(30),...l.appBackupRetentionDays(90)}},[k.PlanType.BUSINESS]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(0),...l.actions(d)},static:{...l.rows(d),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(50),...l.plugins(d),...l.customAIConfigurations(0)}},constant:{...l.automationLogRetentionDays(90),...l.appBackupRetentionDays(365)}},[k.PlanType.ENTERPRISE_BASIC]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(0),...l.actions(d)},static:{...l.rows(d),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(d),...l.plugins(d),...l.customAIConfigurations(d)}},constant:{...l.automationLogRetentionDays(d),...l.appBackupRetentionDays(d)}},[k.PlanType.ENTERPRISE_BASIC_TRIAL]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(0),...l.actions(d)},static:{...l.rows(d),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(d),...l.plugins(d),...l.customAIConfigurations(d)}},constant:{...l.automationLogRetentionDays(15),...l.appBackupRetentionDays(15)}},[k.PlanType.ENTERPRISE]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(0),...l.actions(d)},static:{...l.rows(d),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(d),...l.plugins(d),...l.customAIConfigurations(d)}},constant:{...l.automationLogRetentionDays(d),...l.appBackupRetentionDays(d)}}};function xo(e,t){let r;function a(n){let o=n[t];if(!o)throw new Error(`Quotas do not exist for planType=${t} and hosting=${e}`);return o}switch(e){case k.Hosting.SELF:r=a(CS);break;case k.Hosting.CLOUD:r=a(xS);break}return JSON.parse(JSON.stringify(r))}var Vt={};w(Vt,{appExists:()=>OS,encoding:()=>Kt});var Ep=require("@budibase/backend-core");async function OS(e){return(await Ep.db.getAllApps({all:!0,idsOnly:!0})).includes(e)}var Kt={};w(Kt,{base64ToObject:()=>PS,objectToBase64:()=>LS});function LS(e){let t=JSON.stringify(e);return Buffer.from(t).toString("base64")}function PS(e){let t=Buffer.from(e,"base64").toString();return JSON.parse(t)}var uf=require("@budibase/types"),sr=require("@budibase/backend-core"),pf=P(Gl()),cf=P(rs());async function ix(e){await ve.save({offlineLicenseToken:e}),await Ct()}async function ux(){await ve.save({offlineLicenseToken:void 0}),await Ct()}async function lf(){return(await ve.get()).offlineLicenseToken}async function as(){let t=(await sr.installation.getInstall()).installId,r=sr.context.getTenantId(),a=await sr.events.identification.getUniqueTenantId(r);return{installId:t,tenantId:a}}async function px(){let e=await as();return Kt.objectToBase64(e)}function cx(e){return Kt.base64ToObject(e)}function df(e){let t=Date.now(),r=new Date(e.expireAt).getTime();if(t>r)throw new Error(`Offline license has expired. expireAt=${e.expireAt}`)}async function ff(e){let t=await as();if(e.identifier.installId!==t.installId||e.identifier.tenantId!==t.tenantId)throw new Error("Invalid offline license")}function mf(e){let t=e.plan.type,r=uf.Hosting.SELF,a=_o(r,t),n=xo(r,t);return e.features=(0,pf.default)(e.features,a),e.quotas=(0,cf.default)(e.quotas,n),e}async function ns(){try{let e=await lf();if(e){let t=await Vr(e);return df(t),await ff(t),mf(t)}}catch(e){console.error("Error retrieving offline license",e)}}var ma={};w(ma,{deleteDevLicense:()=>gx,getOfflineLicense:()=>fx,writeDevLicenseToDisk:()=>mx});var gf=require("@budibase/backend-core"),ss=require("path"),hf=require("os"),Ot=P(require("fs"));var lx=gf.env.isTest()?".budibase-test":".budibase",os=(0,ss.join)((0,hf.tmpdir)(),lx),dx="dev_license.txt",fa=(0,ss.join)(os,dx);if(!Ot.default.existsSync(os))try{Ot.default.mkdirSync(os)}catch{}function fx(){try{if(Ot.default.existsSync(fa)){let e=Ot.default.readFileSync(fa,{encoding:"utf-8"});return Vr(e)}}catch(e){console.error("Error retrieving offline license from disk",e)}}function mx(e){console.log(`Writing license to: ${fa}`),Ot.default.writeFileSync(fa,e,{encoding:"utf-8"})}function gx(){Ot.default.rmSync(fa,{force:!0})}var yf=require("dd-trace"),us=async()=>await yf.tracer.trace("getLicense",async e=>{if(is.env.OFFLINE_MODE)return e.addTags({offline:!0}),ns();let t=await $t();return t||(e.addTags({offlineFallback:!0}),t=ma.getOfflineLicense()),t}),ps=e=>Eo(e),cs=()=>is.env.SELF_HOSTED?Ae.SELF_FREE_LICENSE:Ae.CLOUD_FREE_LICENSE;var ds={};w(ds,{activateLicenseKey:()=>hx,deleteLicenseKey:()=>yx,getLicenseKey:()=>gn});var ls=P(require("dd-trace"));async function hx(e){await vo(e),await ve.save({licenseKey:e}),await Ct()}async function gn(){return await ls.default.trace("getLicenseKey",async e=>{let t=await ve.get();return e.addTags({licenseKey:t.licenseKey}),t.licenseKey})}async function yx(){return await ls.default.trace("deleteLicenseKey",async()=>{await ve.save({licenseKey:void 0}),await Ct()})}var Lt=require("@budibase/backend-core"),hn=P(require("dd-trace")),Af=3600,Ct=async()=>{await Sf(),await If()},bf=async(e,t)=>{let{populateLicense:r=us,populateFreeLicense:a=cs}=t||{};return await hn.default.trace("getCachedLicense",async n=>{let o=Lt.context.getLicense();if(o)return n.addTags({foundInContext:!0,features:o.features,plan:o.plan,quotas:o.quotas}),o;let s=Lt.tenancy.getTenantId(),i=await uo(),p=await i.get(s);return n.addTags({tenantId:s,foundInCache:!!p}),p?(n.addTags({foundInCache:!0,refreshedAt:p.refreshedAt,features:p.features,plan:p.plan,quotas:p.quotas}),p):(p=await hn.default.trace("populateLicense",async()=>await r(s)),n.addTags({populatedLicense:!!p}),p||(p=hn.default.trace("populateFreeLicense",()=>a(e,s)),n.addTags({populatedFreeLicense:!!p})),p.refreshedAt=new Date().toISOString(),n.addTags({refreshedAt:p.refreshedAt,features:p.features,plan:p.plan,quotas:p.quotas,expirySeconds:Af}),await i.store(s,p,Af),p)})};Lt.env.isJest()&&(bf=jest.fn());var If=bf,Sf=async()=>{let e=Lt.tenancy.getTenantId();await(await uo()).delete(e)};async function re(e,t){Array.isArray(e)||(e=[e]),t||(t=await Ne.getCachedLicense());for(let r of e)if(!t?.features.includes(r))return!1;return!0}async function yn(e,t){if(!await re(e,t))throw new tt.FeatureDisabledError(`${e} is not currently enabled`,e)}async function fs(e,t){if(!await re(e,t)){let r=e.join(", ");throw new tt.FeatureDisabledError(`${r} are not currently enabled`,r)}}function fe(e){return async(...t)=>(await yn(te.Feature.APP_BACKUPS),e(...t))}async function ms(){return re(te.Feature.APP_BACKUPS)}async function gs(){return re(te.Feature.BRANDING)}async function wf(){return re(te.Feature.ENFORCEABLE_SSO)}async function bx(){return re(te.Feature.SYNC_AUTOMATIONS)}async function Ix(){return re(te.Feature.TRIGGER_AUTOMATION_RUN)}async function Pt(){return re(te.Feature.APP_BUILDERS)}async function An(){return re(te.Feature.AUDIT_LOGS)}async function hs(){return re(te.Feature.USER_GROUPS)}function Sx(){return re(te.Feature.PWA)}function wx(){return re(te.Feature.RECAPTCHA)}var Tx=()=>re(te.Feature.PKCE_OIDC);async function rt(){return re(te.Feature.EXPANDED_PUBLIC_API)}async function Ex(e){if(tt.env.ENABLE_SSO_MAINTENANCE_MODE||!await wf())return!1;let r;return e?.config?r=e.config:r=await tt.configs.getSettingsConfig(),!!r.isSSOEnforced}var ys=async()=>{let e=te.Feature.SCIM,t=await re(e),r=await tt.configs.getSCIMConfig();if(!t||!r?.enabled)throw new tt.FeatureDisabledError(`${e} is not currently enabled`,e);return!0};async function vx(){return re(te.Feature.VIEW_PERMISSIONS)}async function Rx(){return re(te.Feature.VIEW_READONLY_COLUMNS)}var _x={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 xx(e){return await gs()?{faviconUrl:e.faviconUrl,faviconUrlEtag:e.faviconUrlEtag,emailBrandingEnabled:e.emailBrandingEnabled,testimonialsEnabled:e.testimonialsEnabled,platformTitle:e.platformTitle,loginHeading:e.loginHeading,loginButton:e.loginButton,metaDescription:e.metaDescription,metaImageUrl:e.metaImageUrl,metaTitle:e.metaTitle}:_x}var bs={};w(bs,{enrichAIConfig:()=>As});var Tf=require("@budibase/backend-core"),Cx="budibase_ai";async function As(e){if(Tf.env.SELF_HOSTED)return e;for(let t of Object.values(e.config))if(t.provider==="BudibaseAI")return e;return e.config[Cx]={provider:"BudibaseAI",active:!0,isDefault:Object.keys(e.config).every(t=>!e.config[t].isDefault),defaultModel:process.env.BUDIBASE_AI_DEFAULT_MODEL||"gpt-4o-mini",name:"Budibase AI"},e}var ze={};w(ze,{addAction:()=>qx,addApp:()=>Dx,addAutomation:()=>Fx,addGroup:()=>Ss,addPlugin:()=>Ts,addRow:()=>Bx,addRows:()=>kx,addUsers:()=>wn,bustCache:()=>go,decrement:()=>at,decrementMany:()=>ga,getCurrentUsageValues:()=>Ju,getLicensedQuota:()=>vf,getQuotaUsage:()=>Et,increment:()=>Ie,incrementBudibaseAICredits:()=>En,incrementMany:()=>qt,removeApp:()=>Nx,removeGroup:()=>ws,removePlugin:()=>Es,removeRow:()=>Mx,removeRows:()=>Gx,removeUsers:()=>cr,set:()=>Is,setAllUsage:()=>yo,setAppUsageValue:()=>ho,setUsage:()=>Yu,setUsagePerApp:()=>Hu,updatePluginCount:()=>vs,updateUsage:()=>ir,usageLimitIsExceeded:()=>Ux,utils:()=>_r});var In=require("@budibase/types");var z=require("@budibase/types");var ke=require("@budibase/backend-core");var Ut=require("dd-trace"),Ie=async(e,t,r)=>await Ut.tracer.trace("quotas.increment",async a=>(a.addTags({name:e,type:t}),await Ef({change:1,name:e,type:t,opts:r}))),qt=e=>Ut.tracer.trace("quotas.incrementMany",async()=>Ef(e)),Ef=async e=>await Ut.tracer.trace("quotas.tryIncrement",async t=>{let r=Array.isArray(e)?e:[e];t.addTags({numActions:r.length}),await ir(r.map(n=>({usageChange:n.change,name:n.name,type:n.type,opts:{dryRun:!0,suppressErrorLog:n.opts?.suppressErrorLog,id:n.opts?.id}})));let a=[];for(let n of r)await Ut.tracer.trace("quotas.incrementMany.fn",async o=>{o.addTags({actionName:n.name,actionType:n.type,actionChange:n.change});let s=n.opts?.fn;s&&a.push(await s())});return await ir(r.map(n=>({usageChange:n.change,name:n.name,type:n.type,opts:{dryRun:!1,valueFn:n.opts?.valueFn,suppressErrorLog:n.opts?.suppressErrorLog,id:n.opts?.id}}))),a[0]}),at=(e,t,r={})=>ir({usageChange:-1,name:e,type:t,opts:r}),ga=e=>{let t=Array.isArray(e)?e:[e];return ir(t.map(r=>({usageChange:-r.change,name:r.name,type:r.type,opts:r.opts})))},Is=async(e,t,r)=>We.setUsage(r,e,t),Ox=(e,t,r)=>{if(e==z.QuotaUsageType.STATIC){let a=r.usageQuota.triggers;return a?a[t]||{}:{}}else{let a=We.utils.getCurrentMonthString(),n=r.monthly[a].triggers;return n?n[t]||{}:{}}},Lx=async(e,t,r,a)=>{try{await ke.locks.doWithLock({type:z.LockType.TRY_ONCE,name:z.LockName.TRIGGER_QUOTA,resource:e,ttl:1e4},async()=>{let n={percentage:r,name:t.name};a&&(n.resetDate=a),await ft.triggerQuota(n)})}catch(n){ke.logging.logAlert("Error triggering quota",n)}},Px=async(e,t,r,a)=>{let n=await Et(),o=e===z.QuotaUsageType.MONTHLY?n.quotaReset:void 0,s=await Ox(e,t,n),i=a.triggers,p=r/a.value*100;p>100&&(p=100);for(let[f,m]of i.entries())if(p>=m&&a.value!==et.UNLIMITED){if(!s[m]){s[m]=new Date().toISOString();let h=i[f+1]||100;(!(p>=h)||p===m)&&await Lx(t,a,p,o)}}else s[m]=void 0;return s},ir=async e=>{await Ut.tracer.trace("quotas.updateUsage",async t=>{let r=ke.tenancy.getTenantId(),a=Array.isArray(e)?e:[e];t.addTags({numActions:a.length,tenantId:r});let n,o,s=[],i={},p={},f={},m={};for(let h of a)await Ut.tracer.trace("quotas.updateUsage.action",async I=>{I.addTags({actionName:h.name,actionType:h.type,actionUsageChange:h.usageChange});try{n=ke.context.getAppId()}catch{}if(z.APP_QUOTA_NAMES.includes(h.name)&&!n)throw new Error("App context required for quota update");try{o=await vf(z.QuotaType.USAGE,h.name,h.type),s.push(o);let{total:_,app:R,breakdown:v}=await We.getCurrentUsageValues(h.type,h.name,h.opts?.id);_+=h.usageChange,R!=null&&(R+=h.usageChange),v!=null&&(v+=h.usageChange);let U={};if(h.opts?.dryRun||(U=await Px(h.type,h.name,_,o),m={...m,[h.name]:U}),o.value!==et.UNLIMITED&&_>o.value&&h.usageChange>0)throw new ke.UsageLimitError(`Licensed ${o.name} of ${o.value} has been exceeded`,o.name);if(_=Math.max(0,_),R&&(R=Math.max(0,R)),v&&(v=Math.max(0,v),f={...f,[h.name]:v}),!h.opts?.dryRun){let qe=h.opts?.valueFn;qe&&(_=await qe(),R=_),i={...i,[h.name]:_},p={...p,[h.name]:R}}}catch(_){throw h.opts?.suppressErrorLog||console.error(`Error updating usage quotas for ${h.name}`,_),_}});let g=a.filter(h=>!h.opts?.dryRun).map(h=>({name:h.name,type:h.type,values:{total:i[h.name],app:p[h.name],breakdown:f[h.name],triggers:m[h.name]},opts:{...h.opts,tenantId:r}}));g.length>0&&await We.setAllUsage(g)})},vf=async(e,t,r)=>{let a=await Ne.getCachedLicense();if(!a){let n=ke.tenancy.getTenantId();throw new Error("License not found for tenant id "+n)}if(r&&(0,z.isStaticQuota)(e,r,t))return a.quotas[e][r][t];if(r&&(0,z.isMonthlyQuota)(e,r,t))return a.quotas[e][r][t];if((0,z.isConstantQuota)(e,t))return a.quotas[e][t];throw new Error("Invalid quota type")},Ux=async({name:e,type:t,usageChange:r})=>{try{return await ir({usageChange:r,name:e,type:t,opts:{dryRun:!0}}),!1}catch(a){if(a.code===z.ErrorCode.USAGE_LIMIT_EXCEEDED)return!0;throw a}};var qx=async e=>Ie(In.MonthlyQuotaName.ACTIONS,In.QuotaUsageType.MONTHLY,{fn:e});var ur=require("@budibase/types"),Rf=require("@budibase/backend-core"),_f=async()=>{let e=await Rf.db.getAllApps({dev:!0});return e?e.length:0},Dx=async(e,{appId:t}={})=>Ie(ur.StaticQuotaName.APPS,ur.QuotaUsageType.STATIC,{fn:e,valueFn:_f,id:t}),Nx=async({appId:e}={})=>at(ur.StaticQuotaName.APPS,ur.QuotaUsageType.STATIC,{valueFn:_f,id:e});var Ye=require("@budibase/types"),Bx=async(e,{tableId:t}={})=>Ie(Ye.StaticQuotaName.ROWS,Ye.QuotaUsageType.STATIC,{fn:e,id:t}),Mx=async({tableId:e}={})=>at(Ye.StaticQuotaName.ROWS,Ye.QuotaUsageType.STATIC,{id:e}),kx=async(e,t,{tableId:r}={})=>qt({change:e,name:Ye.StaticQuotaName.ROWS,type:Ye.QuotaUsageType.STATIC,opts:{fn:t,id:r}}),Gx=async(e,{tableId:t}={})=>ga({change:e,name:Ye.StaticQuotaName.ROWS,type:Ye.QuotaUsageType.STATIC,opts:{id:t}});var Sn=require("@budibase/types"),Fx=async(e,{automationId:t}={})=>Ie(Sn.MonthlyQuotaName.AUTOMATIONS,Sn.QuotaUsageType.MONTHLY,{fn:e,id:t});var pr=require("@budibase/types"),Ss=async e=>Ie(pr.StaticQuotaName.USER_GROUPS,pr.QuotaUsageType.STATIC,{fn:e}),ws=async()=>at(pr.StaticQuotaName.USER_GROUPS,pr.QuotaUsageType.STATIC);var yt=require("@budibase/types"),Ts=async e=>Ie(yt.StaticQuotaName.PLUGINS,yt.QuotaUsageType.STATIC,{fn:e}),Es=async()=>at(yt.StaticQuotaName.PLUGINS,yt.QuotaUsageType.STATIC),vs=async e=>Is(yt.StaticQuotaName.PLUGINS,yt.QuotaUsageType.STATIC,e);var He=require("@budibase/types"),ha=require("@budibase/backend-core");var wn=async(e,t,r)=>{let a=[{change:e,name:He.StaticQuotaName.USERS,type:He.QuotaUsageType.STATIC,opts:{fn:r,valueFn:ha.users.getUserCount}}];t>0&&a.push({change:t,name:He.StaticQuotaName.CREATORS,type:He.QuotaUsageType.STATIC,opts:{valueFn:ha.users.getCreatorCount}});let n=await qt(a);return await $t(),n},cr=async(e,t)=>{let r=[{change:e,name:He.StaticQuotaName.USERS,type:He.QuotaUsageType.STATIC,opts:{valueFn:ha.users.getUserCount}}];t>0&&r.push({change:t,name:He.StaticQuotaName.CREATORS,type:He.QuotaUsageType.STATIC,opts:{valueFn:ha.users.getCreatorCount}}),await ga(r),await $t()};var Tn=require("@budibase/types"),En=async e=>qt({change:e,name:Tn.MonthlyQuotaName.BUDIBASE_AI_CREDITS,type:Tn.QuotaUsageType.MONTHLY});var nt={};w(nt,{addAppBuilder:()=>Kx,db:()=>xe,removeAppBuilder:()=>Vx});var Aa=require("@budibase/backend-core");var j={};w(j,{addAppBuilder:()=>Cs,addUsers:()=>Rn,adjustGroupCreatorsQuotas:()=>$x,cleanupApp:()=>Wx,enrichUserRolesFromGroups:()=>jx,fetch:()=>ya,get:()=>At,getBulk:()=>qf,getGroupBuilderAppIds:()=>Uf,getGroupRoleId:()=>Qx,remove:()=>Rs,removeAppBuilder:()=>Os,removeUsers:()=>_s,save:()=>lr,updateGroupApps:()=>xs});var x=require("@budibase/backend-core");var xf=require("@budibase/backend-core"),vn=class extends xf.HTTPError{constructor(t){super(`Group name "${t}" is unavailable`,409)}};async function Lf(e,t){try{let r=[];for(let i of e)if(i.roles){let p=i.roles[x.db.getProdAppID(t)];p&&r.push(p)}let a=await Promise.all(r.map(async i=>({[i]:await x.roles.roleToNumber(i)}))),n,o,s={};a.forEach(i=>{let[p,f]=Object.entries(i)[0];s[p]={roleId:p,roleNum:f}});for(let{roleId:i,roleNum:p}of Object.values(s))(o===void 0||p>o)&&(o=p,n=i);return n}catch(r){throw x.logging.logAlert(`Error finding higest role for ${e.length} on app ${t}`,r),r}}async function Pf(e,t){return t?t=t.filter(r=>e.includes(r._id)):t=await M.getBulk(e,{enriched:!1}),t}async function Uf(e,t){if(!e.userGroups)return[];let r=await Pf(e.userGroups,t?.groups),a=t?.appId?x.db.getProdAppID(t?.appId):null,n=[];for(let o of r){let s=o.builder?.apps;a&&s?.includes(a)?n.push(a):a||(n=n.concat(s||[]))}return[...new Set(n)]}async function Qx(e,t,r){if(!e.userGroups)return null;let a=await Pf(e.userGroups,r?.groups),n=x.db.getProdAppID(t);return e.roles?.[n]?e.roles[n]:(a=a.filter(o=>o?.roles?Object.keys(o.roles).includes(n):!1),await Lf(a,t))}async function jx(e){if(!e||!e.userGroups)return e;let t=await qf(e.userGroups,{enriched:!1}),r=[];for(let n of t)n?.roles&&(r=r.concat(Object.keys(n.roles)));r=[...new Set(r)];for(let n of r)await x.context.doInAppContext(n,async()=>{if(e.roles[n])return;let o=await Lf(t,n);o&&(e.roles[n]=o)});let a=await Uf(e,{groups:t});if(a.length&&!e.builder?.global){let n=e.builder?.apps||[];e.builder={apps:n.concat(a)}}return e}async function ya(){return await M.fetch()}async function At(e){return await M.get(e)}async function qf(e,t={enriched:!0}){return await M.getBulk(e,t)}async function Cf(e){if(await M.getByName(e))throw new vn(e)}async function Of(e){let t=await M.getGroupUsers(e._id);if(!t.length)return 0;let a=await x.tenancy.getGlobalDB().getMultiple(t.map(o=>o._id));return(await x.userUtils.creatorsInList(a)).filter(o=>o).length}async function lr(e){let t=[],r=!e._id,a=0;if(delete e.users,!e._id)e._id=M.generateUserGroupID(),await Cf(e.name),t.push(x.events.group.created(e));else{let o=await M.get(e._id);if(o.name!==e.name&&await Cf(e.name),t.push(x.events.group.updated(e)),JSON.stringify(o.roles)!==JSON.stringify(e.roles)){let s=o.users?.length||0,i=0;s>0&&(i=await Of(o)),Object.values(e.roles).includes("CREATOR")?a=s-i:a=-s,t.push(x.events.group.permissionsEdited(e))}}await Promise.all(t);let n=()=>M.save(e);if(r)return await Ss(n);{let o=await n();if(a>0)await wn(0,a);else if(a<0){let s=await Of(e),i=Math.abs(a)-s;i>0&&await cr(0,i)}return o}}async function Rs(e,t){let r;try{r=await M.get(e)}catch{throw new Error("Group not found")}let a=Object.values(r.roles||{}).includes("CREATOR"),n=()=>{};if(a){let s=x.tenancy.getGlobalDB(),i=await M.getGroupUsers(e),f=(await Promise.all(i.map(I=>s.get(I._id)))).map(I=>({...I,userGroups:I.userGroups.filter(C=>C!==e)})),g=(await x.userUtils.creatorsInList(f)).filter(I=>I).length,h=i.length-g;h&&(n=()=>cr(0,h))}let o=await M.destroy(e,t);return await x.events.group.deleted(r),await ws(),await n(),o}async function Rn(e,t){let r=await M.get(e),a=await x.users.bulkGetGlobalUsersById(t),n=[];for(let p of a)p.userGroups||(p.userGroups=[]),p.userGroups.includes(e)||n.push(p);if(!n.length)return n;let o=n.map(p=>({...p,userGroups:[...p?.userGroups||[],e]}));if(await x.users.bulkUpdateGlobalUsers(o),Object.values(r.roles||{}).includes("CREATOR")){let f=(await x.userUtils.creatorsInList(n)).filter(g=>g).length,m=n.length-f;m&&await wn(0,m)}let i=[];for(let p of t)i.push(x.cache.user.invalidateUser(p));return await Promise.all(i),await x.events.group.usersAdded(o.length,r),o}async function _s(e,t){let r=await M.get(e),a=await x.users.bulkGetGlobalUsersById(t),n=[];for(let i of a){if(!i.userGroups||!i.userGroups.includes(e))continue;let p=i.userGroups.indexOf(e);i.userGroups.splice(p,1),n.push(i)}if(await x.users.bulkUpdateGlobalUsers(n),Object.values(r.roles||{}).includes("CREATOR")){let p=(await x.userUtils.creatorsInList(n)).filter(m=>m).length,f=n.length-p;f&&await cr(0,f)}let s=[];for(let i of t)s.push(x.cache.user.invalidateUser(i));return await Promise.all(s),n.length&&await x.events.group.usersDeleted(n.length,r),n}async function xs(e,t){let r=await At(e);if(r.roles||(r.roles={}),t.appsToAdd)for(let a of t.appsToAdd)r.roles[a.appId]=a.roleId;if(t.appsToRemove)for(let a of t.appsToRemove)delete r.roles[a.appId];return await lr(r)}async function Wx(e){let t=await ya(),r=[];for(let a of t)!a.roles||!a.roles[e]||(delete a.roles[e],r.push(a));return await M.bulkSave(r)}async function Cs(e,t){if(!await Pt())throw new Error("Feature not enabled, please check license");let r=x.db.getProdAppID(t),a=await At(e);a.builder??={apps:[]},a.builder.apps.includes(t)||(a.builder.apps.push(r),await lr(a))}async function Os(e,t){if(!await Pt())throw new Error("Feature not enabled, please check license");let r=x.db.getProdAppID(t),a=await At(e);a.builder?.apps.includes(t)&&(a.builder.apps=a.builder.apps.filter(n=>n!==r),await lr(a))}async function $x(){if(!await hs()){let e=x.tenancy.getGlobalDB(),r=(await ya()||[]).filter(a=>Object.values(a?.roles||{}).includes("CREATOR"));for(let a of r){let n=await M.getGroupUsers(a._id),s=(await Promise.all(n.map(m=>e.get(m._id)))).map(m=>({...m,userGroups:m.userGroups.filter(g=>g!==a._id)})),p=(await x.userUtils.creatorsInList(s)).filter(m=>m).length,f=n.length-p;await M.save({...a,roles:{}}),f&&await cr(0,f)}}}Aa.users.UserDB.init(ze,j,Me);var xe=Aa.users.UserDB;async function Kx(e,t){if(!await Pt())throw new Error("Feature not enabled, please check license");await Aa.users.addAppBuilder(e,t)}async function Vx(e,t){if(!await Pt())throw new Error("Feature not enabled, please check license");await Aa.users.removeAppBuilder(e,t)}var Cn={};w(Cn,{logs:()=>Bs});var Bs={};w(Bs,{logSearch:()=>rC,oldestLogDate:()=>Ff,storeLog:()=>aC});var Gf=require("@budibase/types"),xn=require("@budibase/backend-core");var _n=require("@budibase/types");var Z=require("@budibase/backend-core");var Df=require("@budibase/backend-core");async function Nf(e,t){let r,a=5,n=!1,o,s=!0;for(;a>0;a--)try{s?o=await e():o=await exports.randomDelay(e),n=!0;break}catch(i){r=i}return n||Df.logging.logWarn(`Failed to backoff: ${t}`,r),o}var{SEPARATOR:ot,UNICODE_MAX:Yx,DocumentType:Bf,AutomationViewMode:Ls,ViewName:Hx,getQueryIndex:zx}=Z.db,Jx=new Date(0).toISOString(),Xx=100,Ps=async()=>Ka(_n.ConstantQuotaName.AUTOMATION_LOG_RETENTION_DAYS);function Mf(e,t,{status:r,automationId:a}={},n={}){let o=a?`${a}${ot}`:"",s=r?`${r}${ot}`:"",i;return r&&a?i=`${Ls.ALL}${ot}${s}${o}`:r?i=`${Ls.STATUS}${ot}${s}`:a?i=`${Ls.AUTOMATION}${ot}${o}`:i=`${Bf.AUTOMATION_LOG}${ot}`,{...n,descending:!0,startkey:`${i}${t}${Yx}`,endkey:`${i}${e}`}}function Zx(e,t,r){return`${Bf.AUTOMATION_LOG}${ot}${e}${ot}${r}${ot}${t}`}async function Us(e,t,r={docs:!0}){let a=Z.context.getProdAppDB();await a.exists()||(a=Z.context.getDevAppDB());let n={status:r.status},o=r?.limit?r.limit:r?.paginate?9+1:void 0,s=Mf(e,t,n,{include_docs:r.docs,limit:o});r?.page&&(s.startkey=r.page);let i=await a.allDocs(s);return Or(i,{paginate:r?.paginate,pageSize:9})}async function qs(e,t,r={}){let a=Z.context.getProdAppDB();await a.exists()||(a=Z.context.getDevAppDB());let n;try{let o={automationId:r?.automationId,status:r?.status},s=Mf(e,t,o,{include_docs:!0,limit:9+1});r?.page&&(s.startkey=r.page),n=await a.query(zx(Hx.AUTOMATION_LOGS),s)}catch(o){if(o!=null&&(o.name==="not_found"||o.error==="not_found"))return await up(),qs(e,t,r);throw o}return Or(n,{paginate:!0,pageSize:9})}async function kf(e,t){let r=Z.context.getProdAppDB(),a=e._id,n=e.name,o=new Date().toISOString(),s=Zx(o,t.status,a),i={...t,automationId:a,status:t.status,automationName:n,createdAt:o,_id:s};return await r.put(i),s}async function Ds(e,{clearing:t}={clearing:!1}){let r=Z.context.getProdAppDB();await Nf(async()=>{let a=await r.get(Z.db.DocumentType.APP_METADATA);for(let n of e){let o=n.split(Z.db.SEPARATOR),s=`${o[o.length-3]}${Z.db.SEPARATOR}${o[o.length-2]}`,i={};a.automationErrors&&(i=a.automationErrors),Array.isArray(i[s])||(i[s]=[]);let p=i[s].indexOf(n);t&&p!==-1?i[s].splice(p,1):i[s].push(n),i[s].length===0&&delete i[s],a.automationErrors=i}await r.put(a),await Z.cache.app.invalidateAppMetadata(a.appId,a)},"Failed to update app metadata with automation log error")}async function eC(){let e=await Ps();try{return await Us(Jx,e,{docs:!1,paginate:!1,limit:Xx})}catch{return{data:[],hasNextPage:!1}}}async function Ns(){let e=Z.context.getProdAppDB();try{let t=await eC();if(!t.data||t.data.length===0)return;let r=t.data.map(n=>({_id:n.id,_rev:n.value.rev,_deleted:!0})),a=t.data.filter(n=>{let o=n.id.split(Z.db.SEPARATOR);return o[o.length-1]===_n.AutomationStatus.ERROR}).map(n=>n.id);await e.bulkDocs(r),a.length&&await Ds(a,{clearing:!0})}catch(t){Z.logging.logAlert(`Failed to cleanup automation log history - Database "${e.name}"`,t)}}var Ff=Ps;async function tC(e,t,r,a){let n,o=new Date().toISOString(),s=await Ff();return(!e||e<s)&&(e=s),r||t?n=await qs(e,o,{automationId:r,status:t,page:a}):n=await Us(e,o,{status:t,page:a,docs:!0,paginate:!0}),n}async function rC(e){return await Ns(),await tC(e.startDate,e.status,e.automationId,e.page)}async function aC(e,t){if(!xn.db.isProdAppID(xn.context.getAppId()))return;let r=await kf(e,t);t.status===Gf.AutomationStatus.ERROR&&await Ds([r]),await Ns()}var On={};w(On,{checkPluginQuotas:()=>sC,deletePlugin:()=>oC,storePlugin:()=>nC});var $f=require("@budibase/types"),J=require("@budibase/backend-core");var Qf=P(require("fs")),jf=require("path");function Wf(e,t){return Qf.default.readFileSync((0,jf.join)(e,t),"utf8")}async function nC(metadata,directory,source){let db=J.tenancy.getGlobalDB(),version=metadata.package.version,name=metadata.package.name,description=metadata.package.description,hash=metadata.schema.hash,bucketPath=J.objectStore.getPluginS3Dir(name),files=await J.objectStore.uploadDirectory(J.objectStore.ObjectStoreBuckets.PLUGINS,directory,bucketPath),jsFile=files.find(e=>e.name.endsWith(".js")),iconFile=files.find(e=>e.name.endsWith(".svg"));if(!jsFile)throw new Error("Plugin missing .js file.");if(metadata.schema.type===$f.PluginType.DATASOURCE){let js=Wf(directory,jsFile.name);try{eval(js)}catch(e){let t=e?.message?e.message:JSON.stringify(e);throw new Error(`JS invalid: ${t}`)}}let iconFileName=iconFile?iconFile.name:null,pluginId=J.db.generatePluginID(name),rev;try{rev=(await db.get(pluginId))._rev}catch(e){rev=void 0}let doc={_id:pluginId,_rev:rev,...metadata,name,version,hash,description,source};iconFileName&&(doc.iconFileName=iconFileName),source&&(doc={...doc,source});let write=async()=>{let e=await db.put(doc);return await J.events.plugin.imported(doc),{...doc,_rev:e.rev}};return rev?await write():await Ts(write)}async function oC(e){let t=J.tenancy.getGlobalDB();try{let r=await t.get(e),a=J.objectStore.getPluginS3Dir(r.name);await J.objectStore.deleteFolder(J.objectStore.ObjectStoreBuckets.PLUGINS,a),await t.remove(e,r._rev),await J.events.plugin.deleted(r),await Es()}catch(r){let a=r?.message?r?.message:r;throw new Error(`Failed to delete plugin: ${a}`)}}async function sC(){let e=J.tenancy.getGlobalDB();try{let r=(await e.allDocs(J.db.getPluginParams())).rows.length;console.log(`Syncing plugin count: ${r}`),await vs(r)}catch(t){J.logging.logAlert("Unable to retrieve plugins for quota check",t)}}var Je={};w(Je,{fetch:()=>uC,fetchValues:()=>pC,isEncryptionKeyAvailable:()=>iC,isValid:()=>Yf,remove:()=>lC,update:()=>cC});var ba=require("@budibase/types"),Kf=require("@budibase/backend-core");function iC(){return!!Kf.env.ENCRYPTION_KEY}async function uC(){let e=await _t.get();return Object.keys(e.variables)}async function pC(e){let r=(await _t.get()).variables,a={};for(let[n,o]of Object.entries(r))switch(e){case ba.AppEnvironment.DEVELOPMENT:a[n]=o.development;break;case ba.AppEnvironment.PRODUCTION:default:a[n]=o.production;break}return a}async function Vf(e){if(!(await Ve.cache.getCachedLicense()).features.includes(ba.Feature.ENVIRONMENT_VARIABLES))throw new Error("User does not have access to environment variables feature.");let r=await _t.get();r.variables=e(r.variables),await _t.update(r)}async function cC(e,t){if(Yf(e))await Vf(a=>(a[e]=t,a));else throw new Error("Variable name has characters that are not allowed")}async function lC(e){await Vf(t=>(delete t[e],t))}function Yf(e){return/^[a-zA-Z0-9-_]+$/.test(e)}var bt={};w(bt,{definitions:()=>wC,download:()=>SC,fetch:()=>IC,write:()=>AC});var Pn=require("@budibase/types");var V=require("@budibase/backend-core"),Ge=require("@budibase/types");var Hf=require("memorystream"),zf=new V.sql.Sql(Ge.SqlClient.SQL_LITE);async function dC(e,t,r){let a={operation:Ge.Operation.READ,table:Wt.searchTable(),tables:{},paginate:{limit:r||9,page:t},filters:e,resource:{fields:[]},sort:{timestamp:{direction:Ge.SortOrder.DESCENDING,type:Ge.SortType.STRING}}},n=zf._query(a);if(Array.isArray(n))throw new Error("Cannot execute multiple queries for audit log search");return{sql:n.sql,bindings:n.bindings}}function fC(e){return`${V.DocumentType.AUDIT_LOG}${V.SEPARATOR}${e}${V.SEPARATOR}${V.utils.newid()}`}async function Jf(e){e._id||(e._id=fC(e.timestamp)),e.type||(e.type=Ge.AUDIT_LOG_TYPE);try{let r=await V.context.getAuditLogsDB().put(e);return{...e,_rev:r.rev}}catch(t){V.logging.logAlert("Failed to write audit log",t)}}async function Ms(e,t,r){t||(t=1);let a=V.context.getAuditLogsDB();try{let n=9+1,o=await dC(e,t,n),s=Wt.searchTable(),i=zf.convertJsonStringColumns(s,await a.sql(o.sql,o.bindings)),p;i.length>n&&(p=i.pop());let f={rows:i,hasNextPage:!!p};return f.hasNextPage&&(f.bookmark=t+1),f}catch(n){if(n.status===404&&!r?.isRetry)return await mC(),await Xu(),await Ms(e,t,{isRetry:!0});throw n}}async function mC(){let e=V.context.getAuditLogsDB(),r=(await e.allDocs(V.db.getDocParams(V.DocumentType.AUDIT_LOG,null,{include_docs:!0}))).rows.map(a=>a.doc).filter(a=>a&&!a.type).map(a=>({...a,type:Ge.AUDIT_LOG_TYPE}));await e.bulkDocs(r)}function Xf(e){let t=V.context.getAuditLogsDB(),r=new Hf,a=t.dump(r,{filter:o=>{let s=o;if(!s._id?.startsWith(V.DocumentType.AUDIT_LOG))return!1;let i=!0,p=(f,m)=>{!f||f.length===0||(i=!!(i&&m&&f.includes(m)))};if(p(e.userIds,s.userId),p(e.appIds,s.appId),p(e.events,s.event),(e.startDate||e.endDate)&&(i=i&&s.timestamp>=e.startDate&&s.timestamp<=e.endDate),e.fullSearch){let f=JSON.stringify(o);i=i&&f.includes(e.fullSearch)}return i}}),n=new Hf;return r.on("data",o=>{let s=JSON.parse(Buffer.from(o).toString());if(Array.isArray(s.docs)){let i="";for(let p of s.docs)i+=JSON.stringify(p)+`
|
|
38
|
-
`;n.write(i)}}),r.on("end",()=>{n.end()}),{promise:a,stream:n}}var me=require("@budibase/backend-core");var Ln=require("@budibase/types"),Ia=require("@budibase/string-templates"),Sa=require("@budibase/backend-core"),hC=Sa.constants.MIN_VALID_DATE.toISOString(),yC=Sa.constants.MAX_VALID_DATE.toISOString();function ks(e){return(e.startDate||e.endDate)&&(e.startDate=e.startDate||hC,e.endDate=e.endDate||yC),e}async function Zf(e){Array.isArray(e.appIds)&&(e.appIds=e.appIds.map(a=>Sa.db.getProdAppID(a)));let t={};function r(a,n){n?.length&&(t.oneOf={...t.oneOf,[a]:n})}return r("userId",e.userIds),r("appId",e.appIds),r("event",e.events),e.fullSearch&&(t.fuzzyOr=!0,t.fuzzy={name:e.fullSearch,fallback:e.fullSearch}),(e.startDate||e.endDate)&&(e=ks(e),t.range={timestamp:{high:e.endDate,low:e.startDate}}),Object.keys(t).length===0&&(t.notEmpty={event:!0}),t}function Gs(e,t,r){let a={_id:e,status:Ln.AuditLogResourceStatus.DELETED};switch(t){case"app":a.name=r?.appName;break;case"user":a.email=r?.email;break}return a}function Fs(e){let t=(0,Ia.findHBSBlocks)(e);for(let r of t){let a=` "${r}"`;e=e.replace(e.includes(a)?a:` ${r}`,""),e=(0,Ia.processStringSync)(e,{})}return e}function em(e,t){let r=Ln.AuditedEventFriendlyName[e];if(!r)throw new Error("No friendly name found.");let a=(0,Ia.processStringSync)(r,t);return a.includes('""')&&(a=Fs(r)),a}async function AC(e,t,r){if(!await An()||!me.utils.isAudited(e))return;let a=em(e,t),n=new Date;r?.timestamp&&(n=new Date(r.timestamp));let o={timestamp:n.toISOString(),event:e,name:a,userId:r?.userId||Pn.AuditLogSystemUser,metadata:{...t,...r?.hostInfo}},s={};try{if(r?.appId){o.appId=me.db.getProdAppID(r.appId);let i=await me.cache.app.getAppMetadata(r.appId);"name"in i&&(s.appName=i.name)}if(r?.userId){let i=await me.users.getById(r?.userId);s.email=i.email}}catch(i){me.logging.logAlert("Failed to retrieve fallback information for audit log",i)}return o.fallback=s,await Jf(o)}async function bC(e){let t=e.map(i=>i.userId),a=e.filter(i=>i.appId).map(i=>me.db.getDevAppID(i.appId)),n=await me.users.bulkGetGlobalUsersById([...new Set(t)],{cleanup:!0}),o=await me.db.getAppsByIDs([...new Set(a)]),s=[];for(let i of e){let p=n.find(g=>g?._id===i.userId),f=o.find(g=>me.db.isSameAppID(g?.appId,i.appId)),m={event:i.event,timestamp:i.timestamp,name:i.name,metadata:i.metadata,user:p||Gs(i.userId,"user",i.fallback)};i.appId&&(m.app=f||Gs(i.appId,"app",i.fallback)),s.push(m)}return s}async function IC(e){if(!await An())throw new Error("Audit logs not available - license required.");let t=await Zf(e);if(typeof e.bookmark=="string")throw new Error("String based bookmark not supported.");let r=await Ms(t,e.bookmark);return{hasNextPage:r.hasNextPage,bookmark:r.bookmark,data:await bC(r.rows)}}function SC(e){return e=ks(e),Xf(e)}function wC(){let e=Object.entries(Pn.AuditedEventFriendlyName).filter(r=>r[1]!=null),t={};for(let r of e)t[r[0]]=Fs(r[1]);return t}var Un={};w(Un,{applications:()=>Ks,roles:()=>Ws,users:()=>Qs});var Qs={};w(Qs,{roleCheck:()=>EC});function TC(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 EC(e,t){return await rt()||TC(e,t),e}var Ws={};w(Ws,{assign:()=>vC,unAssign:()=>RC});var wa=require("@budibase/backend-core");async function vC(e,t){if(!await rt())throw new Error("Unable to assign roles - license required.");let r=await xe.bulkGet(e);for(let a of r){if(t.role&&t.role.roleId){let n=wa.db.getProdAppID(t.role.appId);a.roles[n]=t.role.roleId}if(t.appBuilder){let n=wa.db.getProdAppID(t.appBuilder.appId),o=a.builder?.apps||[];a.builder={apps:o.concat([n])}}t.builder&&(a.builder={global:!0}),t.admin&&(a.admin={global:!0}),a.roles}await xe.bulkUpdate(r)}async function RC(e,t){if(!await rt())throw new Error("Unable to un-assign roles - license required.");let r=await xe.bulkGet(e);for(let a of r){if(t.role){let n=wa.db.getProdAppID(t.role?.appId);a.roles[n]===t.role.roleId&&delete a.roles[n]}if(t.appBuilder&&a.builder?.apps){let n=wa.db.getProdAppID(t.appBuilder.appId);a.builder.apps=a.builder.apps.filter(o=>o!==n)}t.builder&&a.builder&&delete a.builder,t.admin&&a.admin&&delete a.admin}}var Ks={};w(Ks,{buildExportFn:()=>xC,buildImportFn:()=>_C});var $s=require("@budibase/backend-core");function _C(e){return async(t,r)=>{await rt()||t.throw(403,"Endpoint unavailable, license required."),t.request.files?.appExport||t.throw(400,"Must provide app export file for import."),await $s.context.doInAppContext(t.params.appId,async()=>{await e(t),t.body=void 0,t.status=204,await r()})}}function xC(e){return async(t,r)=>{await rt()||t.throw(403,"Endpoint unavailable, license required.");let{encryptPassword:a,excludeRows:n}=t.request.body;await $s.context.doInAppContext(t.params.appId,async()=>{t.request.body={encryptPassword:a,excludeRows:n},t.query.appId=t.params.appId,await e(t),await r()})}}var ne=require("@budibase/backend-core"),ae=require("@budibase/types");var Vs=require("@budibase/backend-core"),tm;function rm(){tm=new Vs.queue.BudibaseQueue(Vs.queue.JobQueue.APP_BACKUP,{maxStalledCount:3,jobOptions:{attempts:3,removeOnFail:!0,removeOnComplete:!0}})}function Dt(){return tm}var am=require("path"),nm=P(require("fs"));async function Ys(e,t={}){return Re.storeAppBackupMetadata(e,t)}function om(e){let t=new Date().toISOString();switch(e){case ae.AppBackupStatus.COMPLETE:case ae.AppBackupStatus.FAILED:return{timestamp:t,finishedAt:t};case ae.AppBackupStatus.STARTED:return{timestamp:t,startedAt:t};case ae.AppBackupStatus.PENDING:return{timestamp:t,createdAt:t}}}async function CC(e,t,r,a){let n=await qn(e);return await Re.storeAppBackupMetadata({...n,...om(t),contents:r,status:t,type:ae.AppBackupType.BACKUP},{filename:a,docId:e})}async function OC(e,t,r){let a=await qn(e);return await Re.storeAppBackupMetadata({...a,...om(r),status:r,type:ae.AppBackupType.RESTORE,trigger:ae.AppBackupTrigger.MANUAL},{docId:e,docRev:t})}async function qn(e){return Re.getAppBackupMetadata(e)}async function LC(e,t){return Re.updateAppBackupMetadata(e,t)}async function PC(e){let t=await Re.getAppBackupMetadata(e);return t.filename&&await ne.objectStore.deleteFile(ne.objectStore.ObjectStoreBuckets.BACKUPS,t.filename),Re.deleteAppBackupMetadata(e)}async function UC(e,t){return Re.fetchAppBackups(e,t)}async function sm(e){let t=await Re.getAppBackupMetadata(e);if(!t.filename)throw new Error("Backup incomplete - cannot download.");let r=await ne.objectStore.getReadStream(ne.objectStore.ObjectStoreBuckets.BACKUPS,t.filename);return{metadata:t,stream:r}}async function qC(e){let{stream:t}=await sm(e),r=(0,am.join)(ne.objectStore.budibaseTempDir(),ne.utils.newid()),a=nm.default.createWriteStream(r);return new Promise((n,o)=>{t.on("error",o),a.on("error",o),t.pipe(a).on("close",()=>n(r))})}async function DC(e,t,r={}){let a;try{a=await Ys({appId:e,trigger:t,timestamp:new Date().toISOString(),status:ae.AppBackupStatus.PENDING,type:ae.AppBackupType.BACKUP,...r})}catch(n){if(n.status===409)return;throw n}return await Dt().add({docId:a.id,docRev:a.rev,appId:e,export:{trigger:t,...r}}),await ne.events.backup.appBackupTriggered(e,a.id,ae.AppBackupType.BACKUP,t,r?.name),a.id}async function NC(e,t,r,a){let n=await qn(t),o;try{o=await Ys({appId:e,timestamp:new Date().toISOString(),status:ae.AppBackupStatus.PENDING,type:ae.AppBackupType.RESTORE,createdBy:a})}catch(s){if(s?.status===409)return;throw s}return await Dt().add({appId:e,docId:o.id,docRev:o.rev,import:{nameForBackup:r,backupId:t,createdBy:a}}),{restoreId:o.id,metadata:n}}async function BC(e,t,r){let a=ne.db.getProdAppID(e);await ne.context.doInAppContext(a,async()=>{let n=ne.context.getProdAppDB();if(!await n.exists())return;let s=await n.tryGet(ae.DocumentType.APP_METADATA);s&&(s.backupErrors||(s.backupErrors={}),s.backupErrors[t]||(s.backupErrors[t]=[]),s.backupErrors[t].push(r),await n.put(s),await ne.cache.app.invalidateAppMetadata(s.appId,s))})}var MC={isEnabled:ms,triggerAppRestore:fe(NC),triggerAppBackup:fe(DC),getBackupDownloadStream:fe(sm),downloadAppBackup:fe(qC),fetchAppBackups:fe(UC),storeAppBackupMetadata:fe(Ys),updateBackupStatus:fe(CC),updateRestoreStatus:fe(OC),getAppBackup:fe(qn),updateAppBackup:fe(LC),deleteAppBackup:fe(PC),trackBackupError:fe(BC)},Ce=MC;var zs={};w(zs,{init:()=>Hs});var W=require("@budibase/backend-core");var Fe=require("@budibase/types");var dr=P(require("fs"));async function Hs(e){Dt().process(async t=>{let r=t.data;try{if(r.export)return console.log("Exporting app backup:",r.appId,r.export.trigger),FC(t,e);if(r.import)return console.log("Importing app backup:",r.appId,r.import.backupId),GC(t,e)}catch(a){W.logging.logAlert(`Failed to perform backup for app ID: ${r.appId}`,a)}})}async function kC(e){await W.db.getDB(e,{skip_setup:!0}).destroy()}async function im(e,t,r,a){let n=W.db.getDevAppID(r),o=W.db.getProdAppID(r),s=new Date().toISOString(),i=async(p,f)=>{a?.doc?await Ce.updateBackupStatus(a.doc.id,p,f?.contents,f?.filename):await Ce.storeAppBackupMetadata({appId:o,timestamp:s,trigger:e,status:p,name:a?.name,type:Fe.AppBackupType.BACKUP,contents:f?.contents,createdBy:a?.createdBy},{filename:f?.filename})};try{let p=await a.processing.exportAppFn(n,{tar:!0}),f=await a.processing.statsFn(n),m=`${o}/backup-${s}.tar.gz`,g=W.objectStore.ObjectStoreBuckets.BACKUPS,h=dr.default.createReadStream(p);await W.objectStore.streamUpload({bucket:g,filename:m,stream:h,extra:{type:"application/gzip",metadata:{name:a?.name,trigger:e,timestamp:s,appId:o}}}),await i(Fe.AppBackupStatus.COMPLETE,{filename:m,contents:f}),dr.default.existsSync(p)&&dr.default.rmSync(p)}catch(p){W.logging.logAlert("App backup error",p),await i(Fe.AppBackupStatus.FAILED);let f=a?.doc?.id||`backup-${s}`,m=p instanceof Error?p.message:String(p);await Ce.trackBackupError(o,f,`Backup export failed: ${m}`)}}async function GC(e,t){let r=e.data,a=r.appId,n=r.import.backupId,o=r.import.nameForBackup,s=r.import.createdBy,i=W.tenancy.getTenantIDFromAppID(a);return W.tenancy.doInTenant(i,async()=>{let p=W.db.getDevAppID(a),f=`${p}_temp_${Date.now()}`,{rev:m}=await Ce.updateRestoreStatus(r.docId,r.docRev,Fe.AppBackupStatus.STARTED);await im(Fe.AppBackupTrigger.RESTORING,i,a,{processing:t,createdBy:s,name:o});let g=await Ce.downloadAppBackup(n),h=Fe.AppBackupStatus.COMPLETE;try{await t.importAppFn(f,W.db.getDB(f),{file:{type:"application/gzip",path:g},key:g}),await kC(p),await new W.db.Replication({source:f,target:p}).replicate()}catch(I){W.logging.logAlert("App restore error",I),h=Fe.AppBackupStatus.FAILED;let C=I instanceof Error?I.message:String(I);await Ce.trackBackupError(a,n,`Backup restore failed: ${C}`)}finally{try{await W.db.getDB(f,{skip_setup:!0}).destroy()}catch{}}await Ce.updateRestoreStatus(r.docId,m,h),dr.default.existsSync(g)&&dr.default.rmSync(g,{force:!0})})}async function FC(e,t){let r=e.data,a=r.appId,n=r.export.trigger,o=r.export.name,s=W.tenancy.getTenantIDFromAppID(a);await W.tenancy.doInTenant(s,async()=>{try{let{rev:i}=await Ce.updateBackupStatus(r.docId,Fe.AppBackupStatus.STARTED);return im(n,s,a,{processing:t,doc:{id:r.docId,rev:i},name:o})}catch(i){W.logging.logAlert("App backup error",i);let p=i instanceof Error?i.message:String(i);await Ce.trackBackupError(a,r.docId,`Backup export failed: ${p}`)}})}var QC=async e=>{rm(),await Hs(e.processing)},Oe={...Ce,processing:zs,init:QC,getBackupQueue:Dt};var um=async e=>{e.backups&&await Oe.init(e.backups)};var he={};w(he,{create:()=>DM,find:()=>qM,get:()=>UM,remove:()=>BM,update:()=>NM});var OA=P(Wi()),st=require("@budibase/backend-core");var LA=require("@budibase/types");async function UM(e){let t=st.tenancy.getGlobalDB(),r=new st.db.QueryBuilder(t.name,LA.SearchIndex.USER);r.setIndexBuilder(st.db.searchIndexes.createUserIndex),r.setLimit(e.pageSize),r.addEqual("scimInfo.isSync",!0);for(let[n,o]of Object.entries(e.filters?.equal??{}))r.addEqual(n,o);r.setSort("_id"),r.setSkip(e.skip);let a=await r.run();return{users:a.rows,total:a.totalRows}}async function qM(e){return await st.users.getById(e)}async function DM(e){let t=await xe.getUserByEmail(e.email);if(t){if(t.scimInfo?.isSync)throw new st.HTTPError("User is already synched",409);e={...t,scimInfo:(0,OA.default)(t.scimInfo,e.scimInfo),password:void 0,firstName:e.firstName,lastName:e.lastName,updatedAt:e.updatedAt}}return await xe.save(e,{requirePassword:!1})}async function NM(e,t){return await xe.save(e,{requirePassword:!1,allowChangingEmail:t?.allowChangingEmail})}async function BM(e){return await xe.destroy(e)}var Ar={};w(Ar,{create:()=>MM});var PA=P(Wi());var UA=require("@budibase/backend-core");async function MM(e){let t=await bo(e.name),r;if(!t)r=(await j.save(e)).id;else{if(t.scimInfo?.isSync)throw new UA.HTTPError("Group is already synched",409);r=t._id,t.users&&(await j.removeUsers(r,t.users.map(n=>n._id)),delete t.users),t.scimInfo=(0,PA.default)(t.scimInfo,e.scimInfo),await j.save(t)}return await j.get(r)}var Bt={};w(Bt,{logRequest:()=>kM,logResponse:()=>GM});var $i=require("@budibase/backend-core");async function kM(e){$i.logging.logWarn("SCIM request log",e)}async function GM(e){$i.logging.logWarn("SCIM response error",e)}var Ji={};w(Ji,{doInScimContext:()=>Vi,feature:()=>$,internalGroupOnly:()=>_a,licenseAuth:()=>NA,licensing:()=>qA,requireSCIM:()=>Yi,scimGroupOnly:()=>Ra,scimUserOnly:()=>va});var It=require("@budibase/backend-core");var Vn=require("@budibase/types"),FM=(e={checkUsersLimit:!0})=>async(t,r)=>{if((e.licensingCheck?e.licensingCheck:()=>!!t.user)(t)){if(It.env.SELF_HOSTED&&It.env.DEFAULT_LICENSE)return t.user.license=So,r();t.user.license=await Ve.cache.getCachedLicense(t,{populateLicense:e.populateLicense,populateFreeLicense:e.populateFreeLicense}),e.checkUsersLimit&&(It.utils.isServingApp(t)||It.utils.isServingBuilder(t)||It.utils.isServingBuilderPreview(t)||It.utils.isPublicApiRequest(t))&&await ze.usageLimitIsExceeded({name:Vn.StaticQuotaName.USERS,type:Vn.QuotaUsageType.STATIC,usageChange:0})}return r()},qA=FM;var $={};w($,{requireFeature:()=>QM,requireFeatures:()=>jM});var QM=e=>async(t,r)=>{await yn(e),await r()},jM=(...e)=>async(t,r)=>{await fs(e),await r()};var Yn=require("@budibase/backend-core");var Vi=async(e,t)=>(Yn.env.DISABLE_SCIM_CALLS||await Bt.logRequest({...e.request.toJSON(),body:e.request.body}),await Yn.context.doInScimContext(async()=>{let r=await t();return await Bt.logResponse({...e.response.toJSON(),body:e.response.body}),r}));var Yi=async(e,t)=>{await ys(),await t()};var DA=require("@budibase/backend-core");var va=e=>Hi(DA.users.getById,e,!0),Ra=e=>Hi(M.get,e,!0),_a=e=>Hi(M.get,e,!1);function Hi(e,t,r){return async(a,n)=>{let o=a.params[t];return typeof o!="string"&&a.throw(404),!!(await e(o)).scimInfo?.isSync!==r&&a.throw(404),n()}}var xa=require("@budibase/backend-core");var zi=require("dd-trace");async function NA(e,t){await zi.tracer.trace("licenseAuth",async r=>{let a=e.request.headers[xa.constants.Header.LICENSE_KEY];Array.isArray(a)&&(a=a[0]),r.addTags({licenseKey:a}),a||e.throw(403,"License key not provided");let n=await ps(a);n||(r.addTags({licenseFound:!1}),e.throw(403,"License not found or invalid")),n.tenantId||e.throw(403,"License does not have a tenant ID"),zi.tracer.setUser({id:"anonymous",tenantId:n.tenantId}),await xa.context.doInSelfHostTenantUsingCloud(n.tenantId,async()=>{await xa.context.doInLicenseContext(n,async()=>{await t()})})})}var su={};w(su,{appBackups:()=>Eb,auditLogs:()=>mb,environmentVariables:()=>ob,groups:()=>zA,scim:()=>eI,users:()=>oI});var BA=require("@budibase/backend-core");async function MA(e){let t=e.request.body;if(t.name=t.name.trim(),delete t.roles,t._id){let a=await At(t._id);t.roles=a.roles,t.scimInfo=a.scimInfo}let r=await lr(t);e.body={_id:r.id,_rev:r.rev}}async function kA(e){let t=e.params.groupId,r=e.request.body.add,a=e.request.body.remove;(r&&!Array.isArray(r)||a&&!Array.isArray(a))&&e.throw(400,"Must supply a list of users to add or to remove");let n,o;r&&(n=await Rn(t,r)),a&&(o=await _s(t,a)),e.body={added:n,removed:o}}async function GA(e){let t=e.params.groupId,r=e.request.body.add,a=e.request.body.remove;(r&&!Array.isArray(r)||a&&!Array.isArray(a))&&e.throw(400,"Must supply a list of objects, with appId and roleId to add or remove"),e.body=await xs(t,{appsToAdd:r,appsToRemove:a})}async function FA(e){e.body={data:await ya()}}async function QA(e){let{groupId:t,rev:r}=e.params;try{await Rs(t,r),e.body={message:"Group deleted successfully"}}catch(a){e.throw(a.status,a)}}async function jA(e){try{e.body=await At(e.params.groupId)}catch(t){e.throw(t.status,t)}}async function WA(e){let{pageSize:t=10,bookmark:r,emailSearch:a}=e.request.query,n=e.params.groupId,o={limit:t+1},s=await Wa(n,{...o,emailSearch:a,bookmark:r}),i=a?s[t]?.email:s[t]?._id,p=!!i;e.body={users:s.slice(0,t),bookmark:i,hasNextPage:p}}async function $A(e){let{groupId:t,appId:r}=e.params;await Cs(t,r),e.body={message:"Group app builder access updated."}}async function KA(e){let{groupId:t,appId:r}=e.params;await Os(t,r),e.body={message:"group app builder access removed."}}async function VA(e){let{groupId:t}=e.params,{csvContent:r}=e.request.body;(r===void 0||r.trim().length===0)&&e.throw(400,"CSV is empty");let a=await BA.csv.jsonFromCsvString(r,{allowSingleColumn:!0});(!a||a.length===0)&&e.throw(400,"CSV file is invalid");let o=Object.keys(a[0]).find(g=>/^(email|e-mail|email address|mail|e_mail)$/i.test(g.trim()));o||e.throw(400,"CSV file must contain an email column");let s=Array.from(new Set(a.map(g=>g[o]).filter(g=>g&&typeof g=="string"&&g.trim().length>0).map(g=>g.trim())));s.length===0&&e.throw(400,"No valid email addresses found in CSV");try{await At(t)}catch(g){if(g.status===404)e.throw(404,"Group not found");else throw g}let i=[],p=[],f=[],m=await Promise.all(s.map(g=>xe.getUserByEmail(g)));for(let g of s){let h=m.find(I=>I?.email===g);h?(i.push({_id:h._id,email:h.email}),f.push(h._id)):p.push({email:g,reason:"User not found"})}f.length>0&&await Rn(t,f),e.body={added:i,skipped:p}}var YA=P(require("@koa/router")),ce=P(require("joi"));var Se=require("@budibase/types"),Le=require("@budibase/backend-core"),HA=new YA.default;function $M(){return Le.auth.joiValidator.body(ce.default.object({_id:ce.default.string().optional(),_rev:ce.default.string().optional(),color:ce.default.string().required(),icon:ce.default.string().required(),name:ce.default.string().trim().required().max(50),role:ce.default.string().optional(),users:ce.default.array().optional(),apps:ce.default.array().optional(),roles:ce.default.object().optional(),createdAt:ce.default.string().optional(),updatedAt:ce.default.string().optional()}).required())}HA.post("/api/global/groups",Le.auth.adminOnly,$.requireFeature(Se.Feature.USER_GROUPS),$M(),MA).get("/api/global/groups",$.requireFeature(Se.Feature.USER_GROUPS),FA).delete("/api/global/groups/:groupId/:rev",$.requireFeature(Se.Feature.USER_GROUPS),Le.auth.adminOnly,_a("groupId"),QA).get("/api/global/groups/:groupId",$.requireFeature(Se.Feature.USER_GROUPS),Le.auth.builderOrAdmin,jA).get("/api/global/groups/:groupId/users",$.requireFeature(Se.Feature.USER_GROUPS),Le.auth.builderOrAdmin,WA).post("/api/global/groups/:groupId/users",Le.auth.adminOnly,$.requireFeature(Se.Feature.USER_GROUPS),_a("groupId"),kA).post("/api/global/groups/:groupId/users/bulk",Le.auth.adminOnly,$.requireFeature(Se.Feature.USER_GROUPS),_a("groupId"),Le.auth.joiValidator.body(ce.default.object({csvContent:ce.default.string().required()}).required()),VA).post("/api/global/groups/:groupId/apps",Le.auth.builderOrAdmin,$.requireFeature(Se.Feature.USER_GROUPS),GA).post("/api/global/groups/:groupId/app/:appId/builder",Le.auth.builderOrAdmin,$.requireFeatures(Se.Feature.USER_GROUPS,Se.Feature.APP_BUILDERS),$A).delete("/api/global/groups/:groupId/app/:appId/builder",Le.auth.builderOrAdmin,$.requireFeatures(Se.Feature.USER_GROUPS,Se.Feature.APP_BUILDERS),KA);var zA=HA;var Xi=require("@budibase/types");var Zi=require("@budibase/backend-core");async function JA(e){e.body={encryptionKeyAvailable:Je.isEncryptionKeyAvailable()}}async function XA(e){e.body={variables:await Je.fetch()}}async function ZA(e){let{name:t,production:r,development:a}=e.request.body;await Je.update(t,{production:r,development:a});let n=[Xi.AppEnvironment.PRODUCTION];r!==a&&n.push(Xi.AppEnvironment.DEVELOPMENT),await Zi.events.environmentVariable.created(t,n),e.body={message:`Environment variable "${t}" created.`}}async function eb(e){let{production:t,development:r}=e.request.body,a=e.params.varName;await Je.update(a,{production:t,development:r}),e.body={message:`Environment variable "${a}" updated.`}}async function tb(e){let t=e.params.varName;await Je.remove(t),await Zi.events.environmentVariable.deleted(t),e.body={message:`Environment variable "${t}" deleted.`}}var Mt=require("@budibase/backend-core"),ab=P(require("@koa/router")),Ca=P(require("joi")),nb=new ab.default;function rb(){return Mt.auth.joiValidator.body(Ca.default.object({name:Ca.default.string().optional(),production:Ca.default.string().required(),development:Ca.default.string().required()}))}nb.get("/api/env/variables/status",Mt.auth.builderOrAdmin,JA).get("/api/env/variables",Mt.auth.builderOrAdmin,XA).post("/api/env/variables",Mt.auth.builderOrAdmin,rb(),ZA).patch("/api/env/variables/:varName",Mt.auth.builderOrAdmin,rb(),eb).delete("/api/env/variables/:varName",Mt.auth.builderOrAdmin,tb);var ob=nb;var eu=require("@budibase/backend-core");async function sb(e){let t=e.request.body,r=await bt.fetch(t);await eu.events.auditLog.filtered(t),e.body=r}async function ib(e){let t=e.request.body,{stream:r}=bt.download(t);await eu.events.auditLog.downloaded(t),e.attachment(`audit-logs-${Date.now()}.log`),e.body=r}async function ub(e){e.body={events:bt.definitions()}}var cb=require("@budibase/types"),kt=require("@budibase/backend-core"),lb=P(require("@koa/router")),Pe=P(require("joi"));function pb(){return kt.auth.joiValidator.body(Pe.default.object({userIds:Pe.default.array().items(Pe.default.string()).optional(),appIds:Pe.default.array().items(Pe.default.string()).optional(),events:Pe.default.array().items(Pe.default.string().valid(...Object.values(cb.Event))).optional(),startDate:Pe.default.string().optional().allow(""),endDate:Pe.default.string().optional().allow(""),fullSearch:Pe.default.string().optional().allow(""),bookmark:Pe.default.number()}))}var fb=new lb.default;fb.post("/api/global/auditlogs/search",kt.auth.adminOnly,pb(),sb).get("/api/global/auditlogs/download",kt.auth.adminOnly,kt.middleware.querystringToBody,pb(),ib).get("/api/global/auditlogs/definitions",kt.auth.adminOnly,ub);var mb=fb;var tu=require("@budibase/types");var gb=require("@budibase/backend-core");async function br(e,t){await Vt.appExists(t)||e.throw(400,`Provided app ID: ${t} - is invalid.`)}async function hb(e){let t=e.params.appId;await br(e,t);let r=e.request.body,a=e.user?._id,n=await Oe.triggerAppBackup(t,tu.AppBackupTrigger.MANUAL,{name:r.name,createdBy:a});n||e.throw(500,"Unable to start backup."),e.body={backupId:n,message:"Backup triggered - process starting."}}async function yb(e){let t=e.params.appId;await br(e,t);let r=e.params.backupId,a=e.request.body.name,n=await Oe.triggerAppRestore(t,r,a,e.user?._id);n||e.throw(500,"Unable to start restore."),await gb.events.backup.appBackupRestored(n.metadata),e.body={restoredId:n?.restoreId,message:"Restore triggered - process starting."}}async function Ab(e){let t=e.params.appId;await br(e,t);let r=e.params.backupId;await Oe.deleteAppBackup(r),e.body={message:"Backup deleted successfully."}}async function bb(e){let t=e.params.appId;await br(e,t);let r=e.request.body;r?.trigger&&(r.trigger=r.trigger.toLowerCase(),Object.values(tu.AppBackupTrigger).includes(r.trigger)||e.throw(400,"Provided trigger is not a valid option.")),e.body=await Oe.fetchAppBackups(t,{paginate:!0,...r})}async function Ib(e){let t=e.params.appId;await br(e,t);let r=e.params.backupId,a=e.request.body;e.body=await Oe.updateAppBackup(r,a.name)}async function Sb(e){let t=e.params.appId;await br(e,t);let r=e.params.backupId,{metadata:a,stream:n}=await Oe.getBackupDownloadStream(r);e.attachment(`backup-${a.timestamp}.tar.gz`),e.body=n}var wb=P(require("@koa/router")),Gt=P(require("joi")),Hn=require("@budibase/types"),St=require("@budibase/backend-core"),Tb=new wb.default;function HM(){return St.auth.joiValidator.body(Gt.default.object({trigger:Gt.default.string().valid(...Object.values(Hn.AppBackupTrigger)),type:Gt.default.string().valid(...Object.values(Hn.AppBackupType)),startDate:Gt.default.date(),endDate:Gt.default.date(),page:Gt.default.string()}))}Tb.post("/api/apps/:appId/backups",St.auth.builderOrAdmin,hb).post("/api/apps/:appId/backups/search",St.auth.builderOrAdmin,HM(),bb).get("/api/apps/:appId/backups/:backupId/file",St.auth.builderOrAdmin,Sb).patch("/api/apps/:appId/backups/:backupId",St.auth.builderOrAdmin,Ib).delete("/api/apps/:appId/backups/:backupId",St.auth.builderOrAdmin,Ab).post("/api/apps/:appId/backups/:backupId/import",St.auth.builderOrAdmin,yb);var Eb=Tb;var Zb=P(require("@koa/router"));var zn=require("scim-patch");var Rb=require("@budibase/backend-core");function vb(e,t){let r=e.request.query[t];if(r!==void 0)return+r}var _b=async e=>{let t=vb(e,"pageSize")??20,r=vb(e,"startIndex"),a;e.request.query.filter&&(a=Y.user.userFilters(e.request.query.filter));let n=await he.get({pageSize:t,skip:r,filters:a});e.body={schemas:["urn:ietf:params:scim:api:messages:2.0:ListResponse"],totalResults:n.total,Resources:n.users.map(Y.user.toScimUserResponse),startIndex:(r||0)+1,itemsPerPage:t}},xb=async e=>{let{id:t}=e.params;typeof t!="string"&&e.throw(404);let r=await he.find(t);e.body=Y.user.toScimUserResponse(r)},Cb=async e=>{let t=Y.user.fromScimUser(e.request.body);try{let r=await he.create(t);e.body=Y.user.toScimUserResponse(r)}catch(r){throw r instanceof Rb.EmailUnavailableError&&e.throw(409,"Email already in use"),r}};function zM(e){let t=e.Operations.find(r=>(r.op==="Replace"||r.op==="replace")&&r.path==="active");return t?t.value===!1||t.value?.toLowerCase?.()==="false":!1}var Ob=async e=>{let t=await he.find(e.params.id);t||e.throw(404);let r=Y.user.toScimUserResponse(t),a=e.request.body;try{(0,zn.patchBodyValidation)(a)}catch{}if(zM(a))return ru(e);let n;try{n=(0,zn.scimPatch)(r,a.Operations)}catch{}n||e.throw(500);let o=Y.user.fromScimUser(n);await he.update(o,{allowChangingEmail:!0}),e.body=Y.user.toScimUserResponse(o)},ru=async e=>{let{id:t}=e.params;typeof t!="string"&&e.throw(404),await he.remove(t),e.status=204};var $b=P(Wb()),Kb=require("@budibase/shared-core"),Jn=require("scim-patch");var Xn=require("scim2-parse-filter");function Vb(e,t){for(let r of t.split(","))delete e[r]}var Yb=async e=>{let r=(await j.fetch()).filter(o=>o.scimInfo?.isSync).map(Y.group.toScimGroupResponse),{filter:a,excludedAttributes:n}=e.request.query;if(a){let o=(0,Xn.filter)((0,Xn.parse)(a));r=r.filter(o)}n&&r.forEach(o=>{Vb(o,n)}),e.body={schemas:["urn:ietf:params:scim:api:messages:2.0:ListResponse"],totalResults:r.length,Resources:r,startIndex:1,itemsPerPage:r.length}},Hb=async e=>{let t=Y.group.fromScimGroup(e.request.body),r=await Ar.create(t);e.body=Y.group.toScimGroupResponse(r)},zb=async e=>{let{id:t}=e.params,r=await j.get(t),a=Y.group.toScimGroupResponse(r),{excludedAttributes:n}=e.request.query;n&&Vb(a,n),e.body=a},Jb=async e=>{let{id:t}=e.params,r=await j.get(t);await j.remove(t,r._rev),e.status=204},Xb=async e=>{let{id:t}=e.params,r=await j.get(t),a=Y.group.toScimGroupResponse(r),n=e.request.body;try{(0,Jn.patchBodyValidation)(n)}catch{e.throw(400)}let{true:o,false:s}=(0,$b.default)(n.Operations,i=>i.path==="members");if(s?.length){let i=(0,Jn.scimPatch)(a,s);i||e.throw(500);let p={...Y.group.fromScimGroup(i),_rev:r._rev};await j.save(p)}if(o?.length){let i=[],p=[];for(let{op:f,value:m}of o)switch(f){case"add":case"Add":for(let g of m)i.push(await he.find(g.value));break;case"remove":case"Remove":for(let g of m)p.push(await he.find(g.value));break;case"replace":case"Replace":throw new Error("Replacing members is not allowed");default:Kb.utils.unreachable(f)}i.length&&await j.addUsers(t,i.map(f=>f._id)),p.length&&await j.removeUsers(t,p.map(f=>f._id))}e.body=Y.group.toScimGroupResponse(await j.get(t))};var Oa=require("@budibase/types"),we=new Zb.default({prefix:"/api/global/scim/v2"});we.use(Yi);we.use(Vi);we.get("/users",_b);we.get("/users/:id",va("id"),xb);we.post("/users",Cb);we.patch("/users/:id",va("id"),Ob);we.delete("/users/:id",va("id"),ru);we.get("/groups",Yb);we.post("/groups",$.requireFeature(Oa.Feature.USER_GROUPS),Hb);we.get("/groups/:id",$.requireFeature(Oa.Feature.USER_GROUPS),Ra("id"),zb);we.delete("/groups/:id",$.requireFeature(Oa.Feature.USER_GROUPS),Ra("id"),Jb);we.patch("/groups/:id",$.requireFeature(Oa.Feature.USER_GROUPS),Ra("id"),Xb);var eI=we;var aI=P(require("@koa/router"));var au=require("@budibase/backend-core");async function tI(e){let{userId:t,appId:r}=e.params,a=await nt.db.getUser(t);if(au.users.isGlobalBuilder(a)){e.body={message:"User already admin - no permissions updated."};return}await nt.addAppBuilder(a,r),e.body={message:`User "${a.email}" app builder access updated.`}}async function rI(e){let{userId:t,appId:r}=e.params,a=await nt.db.getUser(t);if(au.users.isGlobalBuilder(a)){e.body={message:"User already admin - no permissions removed."};return}await nt.removeAppBuilder(a,r),e.body={message:`User "${a.email}" app builder access removed.`}}var nu=require("@budibase/types"),ou=require("@budibase/backend-core"),nI=new aI.default;nI.post("/api/global/users/:userId/app/:appId/builder",ou.auth.builderOrAdmin,$.requireFeatures(nu.Feature.APP_BUILDERS),tI).delete("/api/global/users/:userId/app/:appId/builder",ou.auth.builderOrAdmin,$.requireFeatures(nu.Feature.APP_BUILDERS),rI);var oI=nI;var Y={};w(Y,{group:()=>uu,user:()=>iu});var iu={};w(iu,{fromScimUser:()=>vk,toScimUserResponse:()=>wk,userFilters:()=>Rk});var Zn=require("@budibase/types"),sI=require("scim2-parse-filter"),iI=require("@budibase/backend-core"),uI=require("@budibase/shared-core"),{unreachable:Sk}=uI.utils,wk=e=>{let{isSync:t,roles:r,...a}=e.scimInfo||{},n={...a,schemas:["urn:ietf:params:scim:schemas:core:2.0:User"],id:e._id,meta:{resourceType:"User",created:new Date(e.createdAt),lastModified:new Date(e.updatedAt)},active:e.status===Zn.UserStatus.ACTIVE};return(e.firstName||e.lastName)&&(n.name={formatted:[e.firstName,e.lastName].filter(o=>o).join(" "),familyName:e.lastName,givenName:e.firstName}),n},Tk=e=>!!e?.id;function Ek(e){if(iI.utils.validEmail(e.userName))return e.userName;if(e.emails)return e.emails.find(t=>t.primary)?.value||e.emails[0]?.value}var vk=e=>{let t=Tk(e)?e:void 0,r=Ek(e);if(!r)throw new Error("Email is required");let a;switch(e.active){case"True":case"true":case!0:a=!0;break;case"False":case"false":case!1:a=!1;break;default:Sk(e.active)}let n,o;return e.name?.givenName?(n=e.name?.givenName,o=e.name?.familyName):n=e.displayName,{tenantId:"",_id:t?.id,userId:t?.id,email:r,firstName:n,lastName:o,scimInfo:{...e,isSync:!0},roles:{},status:a?Zn.UserStatus.ACTIVE:Zn.UserStatus.INACTIVE,createdAt:t?.meta.created.getTime(),updatedAt:t?.meta.lastModified.toISOString()}},Rk=e=>{let t={equal:{}},r=(0,sI.parse)(e);function a(n){switch(n.op){case"eq":{let o=n.attrPath,s;switch(o){case"emails.value":s="email";break;default:s=`scimInfo.${o}`}t.equal[s]=n.compValue;break}case"and":for(let o of n.filters)a(o);break;default:console.warn("Filter not handled",{filter:n})}}return a(r),t};var uu={};w(uu,{fromScimGroup:()=>Ck,toScimGroupResponse:()=>_k});var _k=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}))}),xk=e=>!!e?.id,Ck=e=>{let t=xk(e)?e:void 0;return{_id:t?.id,name:e.displayName,scimInfo:{externalId:e.externalId,isSync:!0},icon:"UserGroup",color:"var(--spectrum-global-color-blue-600)",createdAt:t?.meta.created.getTime(),updatedAt:t?.meta.lastModified.toISOString()}};var Pu={};w(Pu,{LLM:()=>Xe,LLMRequest:()=>K,TableGeneration:()=>Lu,agentHistoryTitleSystemPrompt:()=>Gk,agentSystemPrompt:()=>kk,aiColumnSchemas:()=>Cu,aiTableResponseToTableSchema:()=>vu,appendAIColumns:()=>Ru,classifyText:()=>lu,cleanData:()=>du,extractFileData:()=>Dk,generateAIColumns:()=>Tu,generateCode:()=>Mk,generateCronExpression:()=>fu,generateData:()=>Eu,generateJs:()=>yu,generateSQL:()=>Bk,generateTables:()=>wu,generationStructure:()=>xu,getLLM:()=>Ua,getLLMConfig:()=>Su,getLLMOrThrow:()=>AI,normalizeContentType:()=>pu,parseResponseFormat:()=>to,sanitiseToolName:()=>Ok,searchWeb:()=>hu,sentimentAnalysis:()=>gu,summarizeText:()=>eo,tableDataStructuredOutput:()=>Ou,translate:()=>mu});var La=require("@budibase/types");function Ok(e){if(e.length>64)throw new Error("Tool name must be under 64 characters long");return e.replace(/[^a-zA-Z0-9_-]/g,"_")}function pu(e){return e?e.includes("/")?e:{[La.SupportedFileType.PDF]:"application/pdf",[La.SupportedFileType.JPG]:"image/jpeg",[La.SupportedFileType.JPEG]:"image/jpeg",[La.SupportedFileType.PNG]:"image/png"}[e.toLowerCase()]||"application/octet-stream":"application/octet-stream"}var so=require("@budibase/types");var Ze=require("@budibase/backend-core"),mI=require("@budibase/types");var ro=P(require("openai"));var wt=require("@budibase/types");var pI=require("@budibase/shared-core");var Tt=P(require("dd-trace"));function cu(e,t){return t.map(r=>e[r]).join(" ")}var Xe=class{constructor({model:t,apiKey:r,maxTokens:a}){this._model=t,this._apiKey=r,this._maxTokens=a??parseInt(process.env.BUDIBASE_AI_MAX_PROMPT_TOKENS||"300")}get model(){return this._model}get apiKey(){return this._apiKey}get maxTokens(){return this._maxTokens}async prompt(t){return await Tt.default.trace("prompt",async()=>{let r=typeof t=="string"?new K().addUserMessage(t):t,{messages:a,tokensUsed:n}=await Tt.default.trace("chatCompletion",()=>this.chatCompletion(r));return!a||a.length===0?{message:"",tokensUsed:n}:{message:a[a.length-1].content||"",tokensUsed:n}})}async chat(t){return await Tt.default.trace("chat",async()=>await this.chatCompletion(t))}async*chatStream(t){yield*this.chatCompletionStream(t)}async summarizeText(t){return Tt.default.trace("summarizeText",()=>this.prompt(eo(t)))}async generateCronExpression(t){return Tt.default.trace("generateCronExpression",()=>this.prompt(fu(t)))}async operation(t,r){return Tt.default.trace("operation",a=>{a.addTags({operation:t.operation,rowId:r.id});let n=this.promptForOperation(t,r);return this.prompt(n)})}promptForOperation(t,r){let{operation:a,column:n,columns:o,language:s,categories:i,prompt:p}=t;switch(a){case wt.AIOperationEnum.SUMMARISE_TEXT:return eo(cu(r,o));case wt.AIOperationEnum.CLEAN_DATA:return du(r[n]);case wt.AIOperationEnum.TRANSLATE:return mu(r[n],s);case wt.AIOperationEnum.CATEGORISE_TEXT:if(!i)throw Error("No categories provided for categorise text operation. Please provide categories.");return lu(cu(r,o),i.split(","));case wt.AIOperationEnum.SENTIMENT_ANALYSIS:return gu(r[n]);case wt.AIOperationEnum.PROMPT:return p;case wt.AIOperationEnum.SEARCH_WEB:return hu(cu(r,o));default:throw pI.utils.unreachable(a)}}async generateJs(t,r){return await Tt.default.trace("generateJs",async()=>{let{bindings:a=[],snippets:n=[]}=r||{};return await this.prompt(yu(a,n).addUserMessage(t))})}};var lI=require("@budibase/types"),Au=require("openai/helpers/zod");function to(e){if(e)return e==="text"?{type:"text"}:e==="json"?{type:"json_object"}:e}function cI(e){if(!e)return 0;let t=e.prompt_tokens;return e.completion_tokens*3+t}var Ue=class extends Xe{constructor(r){super(r);this.client=this.getClient(r)}getClient(r){if(!r.apiKey)throw new Error("No OpenAI API key found");return new ro.default({apiKey:r.apiKey})}async uploadFile(r,a,n){let o=pu(n);if(lI.ImageContentTypes.includes(o.toLowerCase())){let p;if(Buffer.isBuffer(r))p=r;else{let m=[];for await(let g of r)m.push(g);p=Buffer.concat(m)}let f=p.toString("base64");return`data:${o};base64,${f}`}let s=await(0,ro.toFile)(r,a);return(await this.client.files.create({file:s,purpose:"assistants"})).id}async chatCompletion(r){let a={model:this.model,messages:r.messages,max_tokens:this.maxTokens,response_format:to(r.format)};r.tools&&r.tools.length>0&&(a.tool_choice="auto",a.tools=r.tools.map(Au.zodFunction));let n=await this.client.chat.completions.create(a),o=n.choices[0]?.message;if(o?.tool_calls){r.addMessage(o);let s=[];for(let i of o.tool_calls){let p=r.findTool(i.function.name);if(!p)throw new Error(`Tool ${i.function.name} not found in prompt tools`);let f=JSON.parse(i.function.arguments);s.push(p.handler(f).then(m=>({role:"tool",tool_call_id:i.id,content:m})).catch(m=>(console.error(`[OPENAI TOOL ERROR] Tool ${i.function.name} failed in OpenAI handler:`,m),{role:"tool",tool_call_id:i.id,content:`Error: ${m.message}`})))}return r.addMessages(await Promise.all(s)),this.chatCompletion(r)}else{if(o?.content)return{messages:[...r.messages,{role:o.role,content:o.content}],tokensUsed:cI(n.usage)};throw new Error("No response found")}}async*chatCompletionStream(r){let a={model:this.model,messages:r.messages,max_tokens:this.maxTokens,response_format:to(r.format),stream:!0};r.tools&&r.tools.length>0&&(a.tool_choice="auto",a.tools=r.tools.map(Au.zodFunction));try{let n=await this.client.chat.completions.create(a),o=null,s="",i=null;for await(let f of n){let m=f.choices[0]?.delta;if(m){if(m.content&&(s+=m.content,yield{type:"content",content:m.content}),m.tool_calls&&m.tool_calls.length>0){let g=m.tool_calls[0];g.id?(o={id:g.id,name:g.function?.name||"",arguments:g.function?.arguments||""},yield{type:"tool_call_start",toolCall:{id:o.id,name:o.name,arguments:o.arguments}}):o&&g.function?.arguments&&(o.arguments+=g.function.arguments,yield{type:"tool_call_start",toolCall:{id:o.id,name:o.name,arguments:o.arguments}})}f.usage&&(i=f.usage)}}let p=i?cI(i):0;if(o){r.addMessage({role:"assistant",content:"",tool_calls:[{id:o.id,type:"function",function:{name:o.name,arguments:o.arguments}}]});let f=r.findTool(o.name);if(f)try{let m=JSON.parse(o.arguments),g=await f.handler(m);yield{type:"tool_call_result",toolResult:{id:o.id,result:g}},r.addMessage({role:"tool",tool_call_id:o.id,content:g}),yield*this.chatCompletionStream(r);return}catch(m){yield{type:"tool_call_result",toolResult:{id:o.id,result:`Error: ${m.message}`,error:m.message}},r.addMessage({role:"tool",tool_call_id:o.id,content:`Error: ${m.message}`}),yield*this.chatCompletionStream(r);return}else{let m=`Tool '${o.name}' not found`;yield{type:"tool_call_result",toolResult:{id:o.id,result:m,error:m}},r.addMessage({role:"tool",tool_call_id:o.id,content:m}),yield*this.chatCompletionStream(r);return}}s&&r.addMessage({role:"assistant",content:s}),yield{type:"done",messages:r.messages,tokensUsed:p}}catch(n){yield{type:"error",content:n.message}}}};var ee=require("@budibase/backend-core"),dI=require("@budibase/types");var bu=require("dd-trace"),ao=class extends Xe{async prompt(t){let r=await super.prompt(t);return r.tokensUsed&&await En(r.tokensUsed),r}async chat(t){let r=await super.chat(t);return r.tokensUsed&&await En(r.tokensUsed),r}async uploadFile(t,r,a){return ee.env.SELF_HOSTED?this.uploadFileSelfHost(t,r,a):this.uploadFileCloud(t,r,a)}async uploadFileCloud(t,r,a){return new Ue({apiKey:ee.env.OPENAI_API_KEY,model:this.model,maxTokens:this.maxTokens}).uploadFile(t,r,a)}async uploadFileSelfHost(t,r,a){let n;if(Buffer.isBuffer(t))n=t;else{let p=[];for await(let f of t)p.push(f);n=Buffer.concat(p)}let o=n.toString("base64");if(a&&dI.ImageContentTypes.includes(a.toLowerCase()))return`data:image/jpeg;base64,${o}`;if(!ee.env.BUDICLOUD_URL)throw new Error("No Budibase URL found");if(!this._apiKey){let p=await gn();if(!p)throw new Error("No license key found");this._apiKey=p}let s=await fetch(`${ee.env.BUDICLOUD_URL}/api/ai/upload-file`,{method:"POST",headers:{"Content-Type":"application/json",[ee.constants.Header.LICENSE_KEY]:this._apiKey},body:JSON.stringify({data:o,filename:r,contentType:a})});if(!s.ok)throw await ee.HTTPError.fromResponse(s);return(await s.json()).fileId}async chatCompletion(t){return ee.env.SELF_HOSTED?this.chatCompletionSelfHost(t):this.chatCompletionCloud(t)}async chatCompletionCloud(t){return await bu.tracer.trace("chatCompletionCloud",async()=>await new Ue({apiKey:ee.env.OPENAI_API_KEY,model:this.model,maxTokens:this.maxTokens}).chatCompletion(t))}async chatCompletionSelfHost(t){return await bu.tracer.trace("chatCompletionSelfHost",async r=>{if(!ee.env.BUDICLOUD_URL)throw new Error("No Budibase URL found");if(r.addTags({budicloudUrl:ee.env.BUDICLOUD_URL}),!this._apiKey){let o=await gn();if(!o)throw new Error("No license key found");this._apiKey=o,r.addTags({licenseKey:this._apiKey})}let a={messages:t.messages,format:t.format,useTools:t.tools.length>0},n=await fetch(`${ee.env.BUDICLOUD_URL}/api/ai/chat`,{method:"POST",headers:{"Content-Type":"application/json",[ee.constants.Header.LICENSE_KEY]:this._apiKey},body:JSON.stringify(a)});if(!n.ok)throw await ee.HTTPError.fromResponse(n);return await n.json()})}async*chatCompletionStream(t){ee.env.SELF_HOSTED?yield*this.chatCompletionStreamSelfHost(t):yield*this.chatCompletionStreamCloud(t)}async*chatCompletionStreamCloud(t){yield*new Ue({apiKey:ee.env.OPENAI_API_KEY,model:this.model,maxTokens:this.maxTokens}).chatCompletionStream(t)}async*chatCompletionStreamSelfHost(t){try{let r=await this.chatCompletionSelfHost(t);if(r.messages.length>0){let a=r.messages[r.messages.length-1];a.content&&(yield{type:"content",content:a.content})}yield{type:"done",messages:r.messages,tokensUsed:r.tokensUsed}}catch(r){yield{type:"error",content:r.message}}}};var Pa=require("dd-trace");var Iu=P(require("@anthropic-ai/sdk"));function Lk(e){if(!e)return 0;let t=e.input_tokens;return e.output_tokens*3+t}var no=class extends Xe{constructor(r){super(r);this.client=new Iu.default({apiKey:r.apiKey})}firstTextBlock(r){for(let a of r.content)if(a.type==="text")return a.text}async uploadFile(r,a,n){throw new Error("File upload not supported for this LLM provider")}async chatCompletion(r){try{let a=await this.client.messages.create({model:this.model,messages:r.messages.map(({content:o})=>{if(o==null)return{role:"user",content:""};if(typeof o=="string")return{role:"user",content:o};let s="";for(let i of o)i.type==="text"?s+=i.text:["image_url","input_audio","file"].includes(i.type);return{role:"user",content:s}}),max_tokens:this.maxTokens}),n=this.firstTextBlock(a)||"";return{messages:[...r.messages,{role:"assistant",content:n}],tokensUsed:Lk(a.usage)}}catch(a){throw a instanceof Iu.default.APIError&&console.error(`Anthropic Prompt failed with error ${a.name} and status: ${a.status}`),a}}async*chatCompletionStream(r){try{let a=await this.chatCompletion(r);if(a.messages.length>0){let n=a.messages[a.messages.length-1];n.content&&(yield{type:"content",content:n.content})}yield{type:"done",messages:a.messages,tokensUsed:a.tokensUsed}}catch(a){yield{type:"error",content:a.message}}}};var gI=require("zod"),hI=require("openai/helpers/zod");var fI=require("openai"),oo=class extends Ue{getClient(t){if(!t.apiKey)throw new Error("No Azure OpenAI API key found");if(!t.model)throw new Error("No Azure OpenAI model specified");return new fI.AzureOpenAI({apiKey:t.apiKey,apiVersion:"2024-10-01-preview",baseURL:t.baseUrl})}};var yI="gpt-4o-mini",Pk={OpenAI:Ue,TogetherAI:Ue,AzureOpenAI:oo,Custom:Ue,Anthropic:no,BudibaseAI:ao};async function Uk(){return await Pa.tracer.trace("getAIConfig",async e=>{let t={type:mI.ConfigType.AI,config:{}};if(!Ze.context.isSelfHostUsingCloud()){let a=await Ze.configs.getAIConfig();a&&(t=a)}await As(t);let r=Object.values(t.config).find(a=>a.active&&a.isDefault);if(!r){e.addTags({enabled:!1,reason:"no provider found"});return}return e.addTags({enabled:!0}),{provider:r.provider,model:r.defaultModel||yI,apiKey:r.apiKey,baseUrl:r.baseUrl}})}async function qk(){return Pa.tracer.trace("getSelfHostOpenAIKeyConfig",e=>{if(!Ze.env.SELF_HOSTED){e.addTags({enabled:!1,reason:"not self host"});return}if(!Ze.env.OPENAI_API_KEY){e.addTags({enabled:!1,reason:"no OPENAI_API_KEY"});return}return e.addTags({enabled:!0}),{provider:"OpenAI",model:yI,apiKey:Ze.env.OPENAI_API_KEY}})}async function Su(){return Pa.tracer.trace("getLLMConfig",async()=>await Uk()||await qk())}async function Ua(e){return await Pa.tracer.trace("getLLM",async t=>{let{model:r,maxTokens:a}=e||{},n=await Su();if(!n){t.addTags({enabled:!1,reason:"no config found"});return}r&&(n.model=r),a&&(n.maxTokens=a);let o=Pk[n.provider];if(!o){t.addTags({enabled:!1,reason:"no provider found",provider:n.provider});return}return new o(n)})}async function AI(){let e=await Ua();if(!e)throw new Ze.HTTPError("No available LLM configurations",500);return e}var K=class e{constructor(){this.messages=[];this.tools=[]}addTool(t){return this.tools.push(t),this}addTools(t){return this.tools.push(...t),this}findTool(t){return this.tools.find(r=>r.name===t)}withFormat(t){return t instanceof gI.z.ZodType?this.format=(0,hI.zodResponseFormat)(t,"key"):this.format=t,this}addMessage(t){return this.messages.push(t),this}addMessages(t){return this.messages.push(...t),this}addUserMessage(t){return this.messages.push({role:"user",content:t}),this}addSystemMessage(t){return this.messages.push({role:"system",content:t}),this}static fromRequest(t){let r=new e;return t.messages&&r.addMessages(t.messages),t.format&&r.withFormat(t.format),r}};var it=require("zod");function eo(e,t){let r=`Summarize this text:
|
|
39
|
-
${e}`,a="";if(t)switch(t){case
|
|
40
|
-
Only return the summary.`)}function
|
|
37
|
+
`;function Vr(e){return _o.default.verify(e,vS,{algorithms:["RS256"]})}function _S(e,t){return _o.default.sign(t,e,{encoding:"utf-8",algorithm:"RS256"})}var Ja={};w(Ja,{getFeatures:()=>xo});var c=require("@budibase/types");var xS={[c.PlanType.FREE]:[...Ae.SELF_FREE_LICENSE.features],[c.PlanType.PREMIUM]:void 0,[c.PlanType.PREMIUM_PLUS]:[c.Feature.APP_BACKUPS,c.Feature.BRANDING,c.Feature.SYNC_AUTOMATIONS,c.Feature.APP_BUILDERS,c.Feature.VIEW_PERMISSIONS,c.Feature.TRIGGER_AUTOMATION_RUN,c.Feature.VIEW_READONLY_COLUMNS,c.Feature.AI_CUSTOM_CONFIGS,c.Feature.PDF,c.Feature.BUDIBASE_AI],[c.PlanType.PREMIUM_PLUS_TRIAL]:[c.Feature.APP_BACKUPS,c.Feature.BRANDING,c.Feature.SYNC_AUTOMATIONS,c.Feature.APP_BUILDERS,c.Feature.VIEW_PERMISSIONS,c.Feature.TRIGGER_AUTOMATION_RUN,c.Feature.VIEW_READONLY_COLUMNS,c.Feature.AI_CUSTOM_CONFIGS,c.Feature.PDF,c.Feature.BUDIBASE_AI],[c.PlanType.PRO]:[c.Feature.USER_GROUPS,c.Feature.APP_BACKUPS],[c.PlanType.TEAM]:[c.Feature.USER_GROUPS,c.Feature.APP_BACKUPS],[c.PlanType.BUSINESS]:[c.Feature.USER_GROUPS,c.Feature.APP_BACKUPS,c.Feature.ENVIRONMENT_VARIABLES,c.Feature.AUDIT_LOGS,c.Feature.BRANDING,c.Feature.SYNC_AUTOMATIONS,c.Feature.APP_BUILDERS,c.Feature.EXPANDED_PUBLIC_API,c.Feature.VIEW_PERMISSIONS,c.Feature.PDF,c.Feature.BUDIBASE_AI],[c.PlanType.ENTERPRISE_BASIC]:[c.Feature.USER_GROUPS,c.Feature.APP_BACKUPS,c.Feature.ENVIRONMENT_VARIABLES,c.Feature.ENFORCEABLE_SSO,c.Feature.AUDIT_LOGS,c.Feature.BRANDING,c.Feature.SYNC_AUTOMATIONS,c.Feature.OFFLINE,c.Feature.APP_BUILDERS,c.Feature.EXPANDED_PUBLIC_API,c.Feature.VIEW_PERMISSIONS,c.Feature.TRIGGER_AUTOMATION_RUN,c.Feature.SCIM,c.Feature.VIEW_READONLY_COLUMNS,c.Feature.AI_CUSTOM_CONFIGS,c.Feature.PWA,c.Feature.CUSTOM_APP_SCRIPTS,c.Feature.PDF,c.Feature.BUDIBASE_AI,c.Feature.RECAPTCHA,c.Feature.PKCE_OIDC],[c.PlanType.ENTERPRISE_BASIC_TRIAL]:[c.Feature.USER_GROUPS,c.Feature.APP_BACKUPS,c.Feature.ENVIRONMENT_VARIABLES,c.Feature.ENFORCEABLE_SSO,c.Feature.BRANDING,c.Feature.SYNC_AUTOMATIONS,c.Feature.APP_BUILDERS,c.Feature.EXPANDED_PUBLIC_API,c.Feature.VIEW_PERMISSIONS,c.Feature.TRIGGER_AUTOMATION_RUN,c.Feature.SCIM,c.Feature.VIEW_READONLY_COLUMNS,c.Feature.AI_CUSTOM_CONFIGS,c.Feature.PWA,c.Feature.CUSTOM_APP_SCRIPTS,c.Feature.PDF,c.Feature.BUDIBASE_AI,c.Feature.RECAPTCHA,c.Feature.PKCE_OIDC],[c.PlanType.ENTERPRISE]:[c.Feature.USER_GROUPS,c.Feature.APP_BACKUPS,c.Feature.ENVIRONMENT_VARIABLES,c.Feature.ENFORCEABLE_SSO,c.Feature.AUDIT_LOGS,c.Feature.BRANDING,c.Feature.SYNC_AUTOMATIONS,c.Feature.OFFLINE,c.Feature.APP_BUILDERS,c.Feature.EXPANDED_PUBLIC_API,c.Feature.VIEW_PERMISSIONS,c.Feature.TRIGGER_AUTOMATION_RUN,c.Feature.SCIM,c.Feature.VIEW_READONLY_COLUMNS,c.Feature.AI_CUSTOM_CONFIGS,c.Feature.PWA,c.Feature.CUSTOM_APP_SCRIPTS,c.Feature.PDF,c.Feature.BUDIBASE_AI,c.Feature.RECAPTCHA,c.Feature.PKCE_OIDC]},CS={[c.PlanType.FREE]:[...Ae.CLOUD_FREE_LICENSE.features],[c.PlanType.PREMIUM]:[c.Feature.APP_BACKUPS,c.Feature.BRANDING,c.Feature.APP_BUILDERS,c.Feature.VIEW_PERMISSIONS,c.Feature.PDF],[c.PlanType.PREMIUM_PLUS]:[c.Feature.APP_BACKUPS,c.Feature.BRANDING,c.Feature.SYNC_AUTOMATIONS,c.Feature.APP_BUILDERS,c.Feature.VIEW_PERMISSIONS,c.Feature.TRIGGER_AUTOMATION_RUN,c.Feature.VIEW_READONLY_COLUMNS,c.Feature.BUDIBASE_AI,c.Feature.PDF],[c.PlanType.PREMIUM_PLUS_TRIAL]:[c.Feature.APP_BACKUPS,c.Feature.BRANDING,c.Feature.SYNC_AUTOMATIONS,c.Feature.APP_BUILDERS,c.Feature.VIEW_PERMISSIONS,c.Feature.TRIGGER_AUTOMATION_RUN,c.Feature.VIEW_READONLY_COLUMNS,c.Feature.BUDIBASE_AI,c.Feature.PDF],[c.PlanType.PRO]:[c.Feature.USER_GROUPS,c.Feature.APP_BACKUPS,c.Feature.BRANDING],[c.PlanType.TEAM]:[c.Feature.USER_GROUPS,c.Feature.APP_BACKUPS,c.Feature.BRANDING],[c.PlanType.BUSINESS]:[c.Feature.USER_GROUPS,c.Feature.APP_BACKUPS,c.Feature.ENVIRONMENT_VARIABLES,c.Feature.AUDIT_LOGS,c.Feature.BRANDING,c.Feature.SYNC_AUTOMATIONS,c.Feature.APP_BUILDERS,c.Feature.EXPANDED_PUBLIC_API,c.Feature.VIEW_PERMISSIONS,c.Feature.BUDIBASE_AI,c.Feature.PDF],[c.PlanType.ENTERPRISE_BASIC]:[c.Feature.USER_GROUPS,c.Feature.APP_BACKUPS,c.Feature.ENVIRONMENT_VARIABLES,c.Feature.ENFORCEABLE_SSO,c.Feature.AUDIT_LOGS,c.Feature.BRANDING,c.Feature.SYNC_AUTOMATIONS,c.Feature.OFFLINE,c.Feature.APP_BUILDERS,c.Feature.EXPANDED_PUBLIC_API,c.Feature.VIEW_PERMISSIONS,c.Feature.TRIGGER_AUTOMATION_RUN,c.Feature.SCIM,c.Feature.VIEW_READONLY_COLUMNS,c.Feature.AI_CUSTOM_CONFIGS,c.Feature.BUDIBASE_AI,c.Feature.PWA,c.Feature.CUSTOM_APP_SCRIPTS,c.Feature.PDF,c.Feature.RECAPTCHA,c.Feature.PKCE_OIDC],[c.PlanType.ENTERPRISE_BASIC_TRIAL]:[c.Feature.USER_GROUPS,c.Feature.APP_BACKUPS,c.Feature.ENVIRONMENT_VARIABLES,c.Feature.ENFORCEABLE_SSO,c.Feature.BRANDING,c.Feature.SYNC_AUTOMATIONS,c.Feature.APP_BUILDERS,c.Feature.EXPANDED_PUBLIC_API,c.Feature.VIEW_PERMISSIONS,c.Feature.TRIGGER_AUTOMATION_RUN,c.Feature.SCIM,c.Feature.VIEW_READONLY_COLUMNS,c.Feature.AI_CUSTOM_CONFIGS,c.Feature.BUDIBASE_AI,c.Feature.PWA,c.Feature.CUSTOM_APP_SCRIPTS,c.Feature.PDF,c.Feature.RECAPTCHA,c.Feature.PKCE_OIDC],[c.PlanType.ENTERPRISE]:[c.Feature.USER_GROUPS,c.Feature.APP_BACKUPS,c.Feature.ENVIRONMENT_VARIABLES,c.Feature.ENFORCEABLE_SSO,c.Feature.AUDIT_LOGS,c.Feature.BRANDING,c.Feature.SYNC_AUTOMATIONS,c.Feature.APP_BUILDERS,c.Feature.EXPANDED_PUBLIC_API,c.Feature.VIEW_PERMISSIONS,c.Feature.TRIGGER_AUTOMATION_RUN,c.Feature.SCIM,c.Feature.VIEW_READONLY_COLUMNS,c.Feature.AI_CUSTOM_CONFIGS,c.Feature.BUDIBASE_AI,c.Feature.PWA,c.Feature.CUSTOM_APP_SCRIPTS,c.Feature.PDF,c.Feature.RECAPTCHA,c.Feature.PKCE_OIDC]};function xo(e,t){let r=[];function a(n){let o=n[t];if(!o)throw new Error(`Features do not exist for planType=${t} and hosting=${e}`);return o}switch(e){case c.Hosting.SELF:r=a(xS);break;case c.Hosting.CLOUD:r=a(CS);break}return r}var Xa={};w(Xa,{UNLIMITED:()=>d,getQuotas:()=>Co});var k=require("@budibase/types");var l=et,Ep=Ae,d=-1,Hr=e=>e*1e6,OS={[k.PlanType.FREE]:{...Ep.CLOUD_FREE_LICENSE.quotas},[k.PlanType.PREMIUM]:{usage:{monthly:{...l.queries(d),...l.automations(1e3),...l.budibaseAICredits(0),...l.actions(d)},static:{...l.rows(1e4),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(0),...l.plugins(d),...l.customAIConfigurations(0)}},constant:{...l.automationLogRetentionDays(7),...l.appBackupRetentionDays(7)}},[k.PlanType.PREMIUM_PLUS]:{usage:{monthly:{...l.queries(d),...l.automations(5e3),...l.budibaseAICredits(Hr(2)),...l.actions(d)},static:{...l.rows(25e3),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(0),...l.plugins(d),...l.customAIConfigurations(1)}},constant:{...l.automationLogRetentionDays(30),...l.appBackupRetentionDays(30)}},[k.PlanType.PREMIUM_PLUS_TRIAL]:{usage:{monthly:{...l.queries(d),...l.automations(5e3),...l.budibaseAICredits(Hr(2)),...l.actions(d)},static:{...l.rows(25e3),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(0),...l.plugins(d),...l.customAIConfigurations(1)}},constant:{...l.automationLogRetentionDays(30),...l.appBackupRetentionDays(30)}},[k.PlanType.PRO]:{usage:{monthly:{...l.queries(d),...l.automations(1e3),...l.budibaseAICredits(0),...l.actions(d)},static:{...l.rows(d),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(5),...l.plugins(d),...l.customAIConfigurations(0)}},constant:{...l.automationLogRetentionDays(7),...l.appBackupRetentionDays(7)}},[k.PlanType.TEAM]:{usage:{monthly:{...l.queries(d),...l.automations(5e3),...l.budibaseAICredits(0),...l.actions(d)},static:{...l.rows(d),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(10),...l.plugins(d),...l.customAIConfigurations(0)}},constant:{...l.automationLogRetentionDays(30),...l.appBackupRetentionDays(90)}},[k.PlanType.BUSINESS]:{usage:{monthly:{...l.queries(d),...l.automations(1e4),...l.budibaseAICredits(0),...l.actions(d)},static:{...l.rows(5e4),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(50),...l.plugins(d),...l.customAIConfigurations(0)}},constant:{...l.automationLogRetentionDays(365),...l.appBackupRetentionDays(365)}},[k.PlanType.ENTERPRISE_BASIC]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(Hr(4)),...l.actions(d)},static:{...l.rows(d),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(d),...l.plugins(d),...l.customAIConfigurations(d)}},constant:{...l.automationLogRetentionDays(d),...l.appBackupRetentionDays(d)}},[k.PlanType.ENTERPRISE_BASIC_TRIAL]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(Hr(4)),...l.actions(d)},static:{...l.rows(d),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(d),...l.plugins(d),...l.customAIConfigurations(d)}},constant:{...l.automationLogRetentionDays(15),...l.appBackupRetentionDays(15)}},[k.PlanType.ENTERPRISE]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(Hr(4)),...l.actions(d)},static:{...l.rows(d),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(d),...l.plugins(d),...l.customAIConfigurations(d)}},constant:{...l.automationLogRetentionDays(d),...l.appBackupRetentionDays(d)}}},LS={[k.PlanType.FREE]:{...Ep.SELF_FREE_LICENSE.quotas},[k.PlanType.PREMIUM]:void 0,[k.PlanType.PREMIUM_PLUS]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(0),...l.actions(d)},static:{...l.rows(d),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(0),...l.plugins(d),...l.customAIConfigurations(1)}},constant:{...l.automationLogRetentionDays(30),...l.appBackupRetentionDays(30)}},[k.PlanType.PREMIUM_PLUS_TRIAL]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(0),...l.actions(d)},static:{...l.rows(d),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(0),...l.plugins(d),...l.customAIConfigurations(1)}},constant:{...l.automationLogRetentionDays(30),...l.appBackupRetentionDays(30)}},[k.PlanType.PRO]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(0),...l.actions(d)},static:{...l.rows(d),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(5),...l.plugins(d),...l.customAIConfigurations(0)}},constant:{...l.automationLogRetentionDays(7),...l.appBackupRetentionDays(7)}},[k.PlanType.TEAM]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(0),...l.actions(d)},static:{...l.rows(d),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(10),...l.plugins(d),...l.customAIConfigurations(0)}},constant:{...l.automationLogRetentionDays(30),...l.appBackupRetentionDays(90)}},[k.PlanType.BUSINESS]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(0),...l.actions(d)},static:{...l.rows(d),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(50),...l.plugins(d),...l.customAIConfigurations(0)}},constant:{...l.automationLogRetentionDays(90),...l.appBackupRetentionDays(365)}},[k.PlanType.ENTERPRISE_BASIC]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(0),...l.actions(d)},static:{...l.rows(d),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(d),...l.plugins(d),...l.customAIConfigurations(d)}},constant:{...l.automationLogRetentionDays(d),...l.appBackupRetentionDays(d)}},[k.PlanType.ENTERPRISE_BASIC_TRIAL]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(0),...l.actions(d)},static:{...l.rows(d),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(d),...l.plugins(d),...l.customAIConfigurations(d)}},constant:{...l.automationLogRetentionDays(15),...l.appBackupRetentionDays(15)}},[k.PlanType.ENTERPRISE]:{usage:{monthly:{...l.queries(d),...l.automations(d),...l.budibaseAICredits(0),...l.actions(d)},static:{...l.rows(d),...l.apps(d),...l.users(d),...l.creators(d),...l.userGroups(d),...l.plugins(d),...l.customAIConfigurations(d)}},constant:{...l.automationLogRetentionDays(d),...l.appBackupRetentionDays(d)}}};function Co(e,t){let r;function a(n){let o=n[t];if(!o)throw new Error(`Quotas do not exist for planType=${t} and hosting=${e}`);return o}switch(e){case k.Hosting.SELF:r=a(LS);break;case k.Hosting.CLOUD:r=a(OS);break}return JSON.parse(JSON.stringify(r))}var Yt={};w(Yt,{appExists:()=>PS,encoding:()=>Vt});var Rp=require("@budibase/backend-core");async function PS(e){return(await Rp.db.getAllApps({all:!0,idsOnly:!0})).includes(e)}var Vt={};w(Vt,{base64ToObject:()=>qS,objectToBase64:()=>US});function US(e){let t=JSON.stringify(e);return Buffer.from(t).toString("base64")}function qS(e){let t=Buffer.from(e,"base64").toString();return JSON.parse(t)}var pf=require("@budibase/types"),ir=require("@budibase/backend-core"),cf=P(Fl()),lf=P(as());async function px(e){await ve.save({offlineLicenseToken:e}),await Ct()}async function cx(){await ve.save({offlineLicenseToken:void 0}),await Ct()}async function df(){return(await ve.get()).offlineLicenseToken}async function ns(){let t=(await ir.installation.getInstall()).installId,r=ir.context.getTenantId(),a=await ir.events.identification.getUniqueTenantId(r);return{installId:t,tenantId:a}}async function lx(){let e=await ns();return Vt.objectToBase64(e)}function dx(e){return Vt.base64ToObject(e)}function ff(e){let t=Date.now(),r=new Date(e.expireAt).getTime();if(t>r)throw new Error(`Offline license has expired. expireAt=${e.expireAt}`)}async function mf(e){let t=await ns();if(e.identifier.installId!==t.installId||e.identifier.tenantId!==t.tenantId)throw new Error("Invalid offline license")}function gf(e){let t=e.plan.type,r=pf.Hosting.SELF,a=xo(r,t),n=Co(r,t);return e.features=(0,cf.default)(e.features,a),e.quotas=(0,lf.default)(e.quotas,n),e}async function os(){try{let e=await df();if(e){let t=await Vr(e);return ff(t),await mf(t),gf(t)}}catch(e){console.error("Error retrieving offline license",e)}}var ma={};w(ma,{deleteDevLicense:()=>hx,getOfflineLicense:()=>gx,writeDevLicenseToDisk:()=>yx});var yf=require("@budibase/backend-core"),is=require("path"),hf=require("os"),Ot=P(require("fs"));var fx=yf.env.isTest()?".budibase-test":".budibase",ss=(0,is.join)((0,hf.tmpdir)(),fx),mx="dev_license.txt",fa=(0,is.join)(ss,mx);if(!Ot.default.existsSync(ss))try{Ot.default.mkdirSync(ss)}catch{}function gx(){try{if(Ot.default.existsSync(fa)){let e=Ot.default.readFileSync(fa,{encoding:"utf-8"});return Vr(e)}}catch(e){console.error("Error retrieving offline license from disk",e)}}function yx(e){console.log(`Writing license to: ${fa}`),Ot.default.writeFileSync(fa,e,{encoding:"utf-8"})}function hx(){Ot.default.rmSync(fa,{force:!0})}var Af=require("dd-trace"),ps=async()=>await Af.tracer.trace("getLicense",async e=>{if(us.env.OFFLINE_MODE)return e.addTags({offline:!0}),os();let t=await Kt();return t||(e.addTags({offlineFallback:!0}),t=ma.getOfflineLicense()),t}),cs=e=>Ro(e),ls=()=>us.env.SELF_HOSTED?Ae.SELF_FREE_LICENSE:Ae.CLOUD_FREE_LICENSE;var fs={};w(fs,{activateLicenseKey:()=>Ax,deleteLicenseKey:()=>bx,getLicenseKey:()=>gn});var ds=P(require("dd-trace"));async function Ax(e){await vo(e),await ve.save({licenseKey:e}),await Ct()}async function gn(){return await ds.default.trace("getLicenseKey",async e=>{let t=await ve.get();return e.addTags({licenseKey:t.licenseKey}),t.licenseKey})}async function bx(){return await ds.default.trace("deleteLicenseKey",async()=>{await ve.save({licenseKey:void 0}),await Ct()})}var Lt=require("@budibase/backend-core"),yn=P(require("dd-trace")),bf=3600,Ct=async()=>{await wf(),await Sf()},If=async(e,t)=>{let{populateLicense:r=ps,populateFreeLicense:a=ls}=t||{};return await yn.default.trace("getCachedLicense",async n=>{let o=Lt.context.getLicense();if(o)return n.addTags({foundInContext:!0,features:o.features,plan:o.plan,quotas:o.quotas}),o;let s=Lt.tenancy.getTenantId(),i=await po(),p=await i.get(s);return n.addTags({tenantId:s,foundInCache:!!p}),p?(n.addTags({foundInCache:!0,refreshedAt:p.refreshedAt,features:p.features,plan:p.plan,quotas:p.quotas}),p):(p=await yn.default.trace("populateLicense",async()=>await r(s)),n.addTags({populatedLicense:!!p}),p||(p=yn.default.trace("populateFreeLicense",()=>a(e,s)),n.addTags({populatedFreeLicense:!!p})),p.refreshedAt=new Date().toISOString(),n.addTags({refreshedAt:p.refreshedAt,features:p.features,plan:p.plan,quotas:p.quotas,expirySeconds:bf}),await i.store(s,p,bf),p)})};Lt.env.isJest()&&(If=jest.fn());var Sf=If,wf=async()=>{let e=Lt.tenancy.getTenantId();await(await po()).delete(e)};async function re(e,t){Array.isArray(e)||(e=[e]),t||(t=await Ne.getCachedLicense());for(let r of e)if(!t?.features.includes(r))return!1;return!0}async function hn(e,t){if(!await re(e,t))throw new tt.FeatureDisabledError(`${e} is not currently enabled`,e)}async function ms(e,t){if(!await re(e,t)){let r=e.join(", ");throw new tt.FeatureDisabledError(`${r} are not currently enabled`,r)}}function ce(e){return async(...t)=>(await hn(te.Feature.APP_BACKUPS),e(...t))}async function gs(){return re(te.Feature.APP_BACKUPS)}async function ys(){return re(te.Feature.BRANDING)}async function Tf(){return re(te.Feature.ENFORCEABLE_SSO)}async function Sx(){return re(te.Feature.SYNC_AUTOMATIONS)}async function wx(){return re(te.Feature.TRIGGER_AUTOMATION_RUN)}async function Pt(){return re(te.Feature.APP_BUILDERS)}async function An(){return re(te.Feature.AUDIT_LOGS)}async function hs(){return re(te.Feature.USER_GROUPS)}function Tx(){return re(te.Feature.PWA)}function Ex(){return re(te.Feature.RECAPTCHA)}var Rx=()=>re(te.Feature.PKCE_OIDC);async function rt(){return re(te.Feature.EXPANDED_PUBLIC_API)}async function vx(e){if(tt.env.ENABLE_SSO_MAINTENANCE_MODE||!await Tf())return!1;let r;return e?.config?r=e.config:r=await tt.configs.getSettingsConfig(),!!r.isSSOEnforced}var As=async()=>{let e=te.Feature.SCIM,t=await re(e),r=await tt.configs.getSCIMConfig();if(!t||!r?.enabled)throw new tt.FeatureDisabledError(`${e} is not currently enabled`,e);return!0};async function _x(){return re(te.Feature.VIEW_PERMISSIONS)}async function xx(){return re(te.Feature.VIEW_READONLY_COLUMNS)}var Cx={faviconUrl:void 0,faviconUrlEtag:void 0,emailBrandingEnabled:!0,testimonialsEnabled:!0,platformTitle:void 0,loginHeading:void 0,loginButton:void 0,metaDescription:void 0,metaImageUrl:void 0,metaTitle:void 0};async function Ox(e){return await ys()?{faviconUrl:e.faviconUrl,faviconUrlEtag:e.faviconUrlEtag,emailBrandingEnabled:e.emailBrandingEnabled,testimonialsEnabled:e.testimonialsEnabled,platformTitle:e.platformTitle,loginHeading:e.loginHeading,loginButton:e.loginButton,metaDescription:e.metaDescription,metaImageUrl:e.metaImageUrl,metaTitle:e.metaTitle}:Cx}var Is={};w(Is,{enrichAIConfig:()=>bs});var Ef=require("@budibase/backend-core"),Lx="budibase_ai";async function bs(e){if(Ef.env.SELF_HOSTED)return e;for(let t of Object.values(e.config))if(t.provider==="BudibaseAI")return e;return e.config[Lx]={provider:"BudibaseAI",active:!0,isDefault:Object.keys(e.config).every(t=>!e.config[t].isDefault),defaultModel:process.env.BUDIBASE_AI_DEFAULT_MODEL||"gpt-5-mini",name:"Budibase AI"},e}var ze={};w(ze,{addAction:()=>Nx,addApp:()=>Bx,addAutomation:()=>jx,addGroup:()=>ws,addPlugin:()=>Es,addRow:()=>kx,addRows:()=>Fx,addUsers:()=>wn,bustCache:()=>yo,decrement:()=>at,decrementMany:()=>ga,getCurrentUsageValues:()=>Xu,getLicensedQuota:()=>vf,getQuotaUsage:()=>Et,increment:()=>Ie,incrementBudibaseAICredits:()=>En,incrementMany:()=>qt,removeApp:()=>Mx,removeGroup:()=>Ts,removePlugin:()=>Rs,removeRow:()=>Gx,removeRows:()=>Qx,removeUsers:()=>lr,set:()=>Ss,setAllUsage:()=>Ao,setAppUsageValue:()=>ho,setUsage:()=>Hu,setUsagePerApp:()=>zu,updatePluginCount:()=>vs,updateUsage:()=>ur,usageLimitIsExceeded:()=>Dx,utils:()=>_r});var In=require("@budibase/types");var z=require("@budibase/types");var ke=require("@budibase/backend-core");var Ut=require("dd-trace"),Ie=async(e,t,r)=>await Ut.tracer.trace("quotas.increment",async a=>(a.addTags({name:e,type:t}),await Rf({change:1,name:e,type:t,opts:r}))),qt=e=>Ut.tracer.trace("quotas.incrementMany",async()=>Rf(e)),Rf=async e=>await Ut.tracer.trace("quotas.tryIncrement",async t=>{let r=Array.isArray(e)?e:[e];t.addTags({numActions:r.length}),await ur(r.map(n=>({usageChange:n.change,name:n.name,type:n.type,opts:{dryRun:!0,suppressErrorLog:n.opts?.suppressErrorLog,id:n.opts?.id}})));let a=[];for(let n of r)await Ut.tracer.trace("quotas.incrementMany.fn",async o=>{o.addTags({actionName:n.name,actionType:n.type,actionChange:n.change});let s=n.opts?.fn;s&&a.push(await s())});return await ur(r.map(n=>({usageChange:n.change,name:n.name,type:n.type,opts:{dryRun:!1,valueFn:n.opts?.valueFn,suppressErrorLog:n.opts?.suppressErrorLog,id:n.opts?.id}}))),a[0]}),at=(e,t,r={})=>ur({usageChange:-1,name:e,type:t,opts:r}),ga=e=>{let t=Array.isArray(e)?e:[e];return ur(t.map(r=>({usageChange:-r.change,name:r.name,type:r.type,opts:r.opts})))},Ss=async(e,t,r)=>We.setUsage(r,e,t),Px=(e,t,r)=>{if(e==z.QuotaUsageType.STATIC){let a=r.usageQuota.triggers;return a?a[t]||{}:{}}else{let a=We.utils.getCurrentMonthString(),n=r.monthly[a].triggers;return n?n[t]||{}:{}}},Ux=async(e,t,r,a)=>{try{await ke.locks.doWithLock({type:z.LockType.TRY_ONCE,name:z.LockName.TRIGGER_QUOTA,resource:e,ttl:1e4},async()=>{let n={percentage:r,name:t.name};a&&(n.resetDate=a),await mt.triggerQuota(n)})}catch(n){ke.logging.logAlert("Error triggering quota",n)}},qx=async(e,t,r,a)=>{let n=await Et(),o=e===z.QuotaUsageType.MONTHLY?n.quotaReset:void 0,s=await Px(e,t,n),i=a.triggers,p=r/a.value*100;p>100&&(p=100);for(let[f,m]of i.entries())if(p>=m&&a.value!==et.UNLIMITED){if(!s[m]){s[m]=new Date().toISOString();let y=i[f+1]||100;(!(p>=y)||p===m)&&await Ux(t,a,p,o)}}else s[m]=void 0;return s},ur=async e=>{await Ut.tracer.trace("quotas.updateUsage",async t=>{let r=ke.tenancy.getTenantId(),a=Array.isArray(e)?e:[e];t.addTags({numActions:a.length,tenantId:r});let n,o,s=[],i={},p={},f={},m={};for(let y of a)await Ut.tracer.trace("quotas.updateUsage.action",async I=>{I.addTags({actionName:y.name,actionType:y.type,actionUsageChange:y.usageChange});try{n=ke.context.getAppId()}catch{}if(z.APP_QUOTA_NAMES.includes(y.name)&&!n)throw new Error("App context required for quota update");try{o=await vf(z.QuotaType.USAGE,y.name,y.type),s.push(o);let{total:_,app:v,breakdown:R}=await We.getCurrentUsageValues(y.type,y.name,y.opts?.id);_+=y.usageChange,v!=null&&(v+=y.usageChange),R!=null&&(R+=y.usageChange);let U={};if(y.opts?.dryRun||(U=await qx(y.type,y.name,_,o),m={...m,[y.name]:U}),o.value!==et.UNLIMITED&&_>o.value&&y.usageChange>0)throw new ke.UsageLimitError(`Licensed ${o.name} of ${o.value} has been exceeded`,o.name);if(_=Math.max(0,_),v&&(v=Math.max(0,v)),R&&(R=Math.max(0,R),f={...f,[y.name]:R}),!y.opts?.dryRun){let qe=y.opts?.valueFn;qe&&(_=await qe(),v=_),i={...i,[y.name]:_},p={...p,[y.name]:v}}}catch(_){throw y.opts?.suppressErrorLog||console.error(`Error updating usage quotas for ${y.name}`,_),_}});let g=a.filter(y=>!y.opts?.dryRun).map(y=>({name:y.name,type:y.type,values:{total:i[y.name],app:p[y.name],breakdown:f[y.name],triggers:m[y.name]},opts:{...y.opts,tenantId:r}}));g.length>0&&await We.setAllUsage(g)})},vf=async(e,t,r)=>{let a=await Ne.getCachedLicense();if(!a){let n=ke.tenancy.getTenantId();throw new Error("License not found for tenant id "+n)}if(r&&(0,z.isStaticQuota)(e,r,t))return a.quotas[e][r][t];if(r&&(0,z.isMonthlyQuota)(e,r,t))return a.quotas[e][r][t];if((0,z.isConstantQuota)(e,t))return a.quotas[e][t];throw new Error("Invalid quota type")},Dx=async({name:e,type:t,usageChange:r})=>{try{return await ur({usageChange:r,name:e,type:t,opts:{dryRun:!0}}),!1}catch(a){if(a.code===z.ErrorCode.USAGE_LIMIT_EXCEEDED)return!0;throw a}};var Nx=async e=>Ie(In.MonthlyQuotaName.ACTIONS,In.QuotaUsageType.MONTHLY,{fn:e});var pr=require("@budibase/types"),_f=require("@budibase/backend-core"),xf=async()=>{let e=await _f.db.getAllApps({dev:!0});return e?e.length:0},Bx=async(e,{appId:t}={})=>Ie(pr.StaticQuotaName.APPS,pr.QuotaUsageType.STATIC,{fn:e,valueFn:xf,id:t}),Mx=async({appId:e}={})=>at(pr.StaticQuotaName.APPS,pr.QuotaUsageType.STATIC,{valueFn:xf,id:e});var Ye=require("@budibase/types"),kx=async(e,{tableId:t}={})=>Ie(Ye.StaticQuotaName.ROWS,Ye.QuotaUsageType.STATIC,{fn:e,id:t}),Gx=async({tableId:e}={})=>at(Ye.StaticQuotaName.ROWS,Ye.QuotaUsageType.STATIC,{id:e}),Fx=async(e,t,{tableId:r}={})=>qt({change:e,name:Ye.StaticQuotaName.ROWS,type:Ye.QuotaUsageType.STATIC,opts:{fn:t,id:r}}),Qx=async(e,{tableId:t}={})=>ga({change:e,name:Ye.StaticQuotaName.ROWS,type:Ye.QuotaUsageType.STATIC,opts:{id:t}});var Sn=require("@budibase/types"),jx=async(e,{automationId:t}={})=>Ie(Sn.MonthlyQuotaName.AUTOMATIONS,Sn.QuotaUsageType.MONTHLY,{fn:e,id:t});var cr=require("@budibase/types"),ws=async e=>Ie(cr.StaticQuotaName.USER_GROUPS,cr.QuotaUsageType.STATIC,{fn:e}),Ts=async()=>at(cr.StaticQuotaName.USER_GROUPS,cr.QuotaUsageType.STATIC);var At=require("@budibase/types"),Es=async e=>Ie(At.StaticQuotaName.PLUGINS,At.QuotaUsageType.STATIC,{fn:e}),Rs=async()=>at(At.StaticQuotaName.PLUGINS,At.QuotaUsageType.STATIC),vs=async e=>Ss(At.StaticQuotaName.PLUGINS,At.QuotaUsageType.STATIC,e);var He=require("@budibase/types"),ya=require("@budibase/backend-core");var wn=async(e,t,r)=>{let a=[{change:e,name:He.StaticQuotaName.USERS,type:He.QuotaUsageType.STATIC,opts:{fn:r,valueFn:ya.users.getUserCount}}];t>0&&a.push({change:t,name:He.StaticQuotaName.CREATORS,type:He.QuotaUsageType.STATIC,opts:{valueFn:ya.users.getCreatorCount}});let n=await qt(a);return await Kt(),n},lr=async(e,t)=>{let r=[{change:e,name:He.StaticQuotaName.USERS,type:He.QuotaUsageType.STATIC,opts:{valueFn:ya.users.getUserCount}}];t>0&&r.push({change:t,name:He.StaticQuotaName.CREATORS,type:He.QuotaUsageType.STATIC,opts:{valueFn:ya.users.getCreatorCount}}),await ga(r),await Kt()};var Tn=require("@budibase/types"),En=async e=>qt({change:e,name:Tn.MonthlyQuotaName.BUDIBASE_AI_CREDITS,type:Tn.QuotaUsageType.MONTHLY});var nt={};w(nt,{addAppBuilder:()=>Yx,db:()=>Ce,removeAppBuilder:()=>Hx});var Aa=require("@budibase/backend-core");var j={};w(j,{addAppBuilder:()=>Os,addUsers:()=>vn,adjustGroupCreatorsQuotas:()=>Vx,cleanupApp:()=>Kx,enrichUserRolesFromGroups:()=>$x,fetch:()=>ha,get:()=>bt,getBulk:()=>Df,getGroupBuilderAppIds:()=>qf,getGroupRoleId:()=>Wx,remove:()=>_s,removeAppBuilder:()=>Ls,removeUsers:()=>xs,save:()=>dr,updateGroupApps:()=>Cs});var x=require("@budibase/backend-core");var Cf=require("@budibase/backend-core"),Rn=class extends Cf.HTTPError{constructor(t){super(`Group name "${t}" is unavailable`,409)}};async function Pf(e,t){try{let r=[];for(let i of e)if(i.roles){let p=i.roles[x.db.getProdAppID(t)];p&&r.push(p)}let a=await Promise.all(r.map(async i=>({[i]:await x.roles.roleToNumber(i)}))),n,o,s={};a.forEach(i=>{let[p,f]=Object.entries(i)[0];s[p]={roleId:p,roleNum:f}});for(let{roleId:i,roleNum:p}of Object.values(s))(o===void 0||p>o)&&(o=p,n=i);return n}catch(r){throw x.logging.logAlert(`Error finding higest role for ${e.length} on app ${t}`,r),r}}async function Uf(e,t){return t?t=t.filter(r=>e.includes(r._id)):t=await M.getBulk(e,{enriched:!1}),t}async function qf(e,t){if(!e.userGroups)return[];let r=await Uf(e.userGroups,t?.groups),a=t?.appId?x.db.getProdAppID(t?.appId):null,n=[];for(let o of r){let s=o.builder?.apps;a&&s?.includes(a)?n.push(a):a||(n=n.concat(s||[]))}return[...new Set(n)]}async function Wx(e,t,r){if(!e.userGroups)return null;let a=await Uf(e.userGroups,r?.groups),n=x.db.getProdAppID(t);return e.roles?.[n]?e.roles[n]:(a=a.filter(o=>o?.roles?Object.keys(o.roles).includes(n):!1),await Pf(a,t))}async function $x(e){if(!e||!e.userGroups)return e;let t=await Df(e.userGroups,{enriched:!1}),r=[];for(let n of t)n?.roles&&(r=r.concat(Object.keys(n.roles)));r=[...new Set(r)];for(let n of r)await x.context.doInAppContext(n,async()=>{if(e.roles[n])return;let o=await Pf(t,n);o&&(e.roles[n]=o)});let a=await qf(e,{groups:t});if(a.length&&!e.builder?.global){let n=e.builder?.apps||[];e.builder={apps:n.concat(a)}}return e}async function ha(){return await M.fetch()}async function bt(e){return await M.get(e)}async function Df(e,t={enriched:!0}){return await M.getBulk(e,t)}async function Of(e){if(await M.getByName(e))throw new Rn(e)}async function Lf(e){let t=await M.getGroupUsers(e._id);if(!t.length)return 0;let a=await x.tenancy.getGlobalDB().getMultiple(t.map(o=>o._id));return(await x.userUtils.creatorsInList(a)).filter(o=>o).length}async function dr(e){let t=[],r=!e._id,a=0;if(delete e.users,!e._id)e._id=M.generateUserGroupID(),await Of(e.name),t.push(x.events.group.created(e));else{let o=await M.get(e._id);if(o.name!==e.name&&await Of(e.name),t.push(x.events.group.updated(e)),JSON.stringify(o.roles)!==JSON.stringify(e.roles)){let s=o.users?.length||0,i=0;s>0&&(i=await Lf(o)),Object.values(e.roles).includes("CREATOR")?a=s-i:a=-s,t.push(x.events.group.permissionsEdited(e))}}await Promise.all(t);let n=()=>M.save(e);if(r)return await ws(n);{let o=await n();if(a>0)await wn(0,a);else if(a<0){let s=await Lf(e),i=Math.abs(a)-s;i>0&&await lr(0,i)}return o}}async function _s(e,t){let r;try{r=await M.get(e)}catch{throw new Error("Group not found")}let a=Object.values(r.roles||{}).includes("CREATOR"),n=()=>{};if(a){let s=x.tenancy.getGlobalDB(),i=await M.getGroupUsers(e),f=(await Promise.all(i.map(I=>s.get(I._id)))).map(I=>({...I,userGroups:I.userGroups.filter(C=>C!==e)})),g=(await x.userUtils.creatorsInList(f)).filter(I=>I).length,y=i.length-g;y&&(n=()=>lr(0,y))}let o=await M.destroy(e,t);return await x.events.group.deleted(r),await Ts(),await n(),o}async function vn(e,t){let r=await M.get(e),a=await x.users.bulkGetGlobalUsersById(t),n=[];for(let p of a)p.userGroups||(p.userGroups=[]),p.userGroups.includes(e)||n.push(p);if(!n.length)return n;let o=n.map(p=>({...p,userGroups:[...p?.userGroups||[],e]}));if(await x.users.bulkUpdateGlobalUsers(o),Object.values(r.roles||{}).includes("CREATOR")){let f=(await x.userUtils.creatorsInList(n)).filter(g=>g).length,m=n.length-f;m&&await wn(0,m)}let i=[];for(let p of t)i.push(x.cache.user.invalidateUser(p));return await Promise.all(i),await x.events.group.usersAdded(o.length,r),o}async function xs(e,t){let r=await M.get(e),a=await x.users.bulkGetGlobalUsersById(t),n=[];for(let i of a){if(!i.userGroups||!i.userGroups.includes(e))continue;let p=i.userGroups.indexOf(e);i.userGroups.splice(p,1),n.push(i)}if(await x.users.bulkUpdateGlobalUsers(n),Object.values(r.roles||{}).includes("CREATOR")){let p=(await x.userUtils.creatorsInList(n)).filter(m=>m).length,f=n.length-p;f&&await lr(0,f)}let s=[];for(let i of t)s.push(x.cache.user.invalidateUser(i));return await Promise.all(s),n.length&&await x.events.group.usersDeleted(n.length,r),n}async function Cs(e,t){let r=await bt(e);if(r.roles||(r.roles={}),t.appsToAdd)for(let a of t.appsToAdd)r.roles[a.appId]=a.roleId;if(t.appsToRemove)for(let a of t.appsToRemove)delete r.roles[a.appId];return await dr(r)}async function Kx(e){let t=await ha(),r=[];for(let a of t)!a.roles||!a.roles[e]||(delete a.roles[e],r.push(a));return await M.bulkSave(r)}async function Os(e,t){if(!await Pt())throw new Error("Feature not enabled, please check license");let r=x.db.getProdAppID(t),a=await bt(e);a.builder??={apps:[]},a.builder.apps.includes(t)||(a.builder.apps.push(r),await dr(a))}async function Ls(e,t){if(!await Pt())throw new Error("Feature not enabled, please check license");let r=x.db.getProdAppID(t),a=await bt(e);a.builder?.apps.includes(t)&&(a.builder.apps=a.builder.apps.filter(n=>n!==r),await dr(a))}async function Vx(){if(!await hs()){let e=x.tenancy.getGlobalDB(),r=(await ha()||[]).filter(a=>Object.values(a?.roles||{}).includes("CREATOR"));for(let a of r){let n=await M.getGroupUsers(a._id),s=(await Promise.all(n.map(m=>e.get(m._id)))).map(m=>({...m,userGroups:m.userGroups.filter(g=>g!==a._id)})),p=(await x.userUtils.creatorsInList(s)).filter(m=>m).length,f=n.length-p;await M.save({...a,roles:{}}),f&&await lr(0,f)}}}Aa.users.UserDB.init(ze,j,Me);var Ce=Aa.users.UserDB;async function Yx(e,t){if(!await Pt())throw new Error("Feature not enabled, please check license");await Aa.users.addAppBuilder(e,t)}async function Hx(e,t){if(!await Pt())throw new Error("Feature not enabled, please check license");await Aa.users.removeAppBuilder(e,t)}var Cn={};w(Cn,{logs:()=>Ms});var Ms={};w(Ms,{logSearch:()=>nC,oldestLogDate:()=>Qf,storeLog:()=>oC});var Ff=require("@budibase/types"),xn=require("@budibase/backend-core");var _n=require("@budibase/types");var Z=require("@budibase/backend-core");var Nf=require("@budibase/backend-core");async function Bf(e,t){let r,a=5,n=!1,o,s=!0;for(;a>0;a--)try{s?o=await e():o=await exports.randomDelay(e),n=!0;break}catch(i){r=i}return n||Nf.logging.logWarn(`Failed to backoff: ${t}`,r),o}var{SEPARATOR:ot,UNICODE_MAX:zx,DocumentType:Mf,AutomationViewMode:Ps,ViewName:Jx,getQueryIndex:Xx}=Z.db,Zx=new Date(0).toISOString(),eC=100,Us=async()=>Ka(_n.ConstantQuotaName.AUTOMATION_LOG_RETENTION_DAYS);function kf(e,t,{status:r,automationId:a}={},n={}){let o=a?`${a}${ot}`:"",s=r?`${r}${ot}`:"",i;return r&&a?i=`${Ps.ALL}${ot}${s}${o}`:r?i=`${Ps.STATUS}${ot}${s}`:a?i=`${Ps.AUTOMATION}${ot}${o}`:i=`${Mf.AUTOMATION_LOG}${ot}`,{...n,descending:!0,startkey:`${i}${t}${zx}`,endkey:`${i}${e}`}}function tC(e,t,r){return`${Mf.AUTOMATION_LOG}${ot}${e}${ot}${r}${ot}${t}`}async function qs(e,t,r={docs:!0}){let a=Z.context.getProdAppDB();await a.exists()||(a=Z.context.getDevAppDB());let n={status:r.status},o=r?.limit?r.limit:r?.paginate?9+1:void 0,s=kf(e,t,n,{include_docs:r.docs,limit:o});r?.page&&(s.startkey=r.page);let i=await a.allDocs(s);return Or(i,{paginate:r?.paginate,pageSize:9})}async function Ds(e,t,r={}){let a=Z.context.getProdAppDB();await a.exists()||(a=Z.context.getDevAppDB());let n;try{let o={automationId:r?.automationId,status:r?.status},s=kf(e,t,o,{include_docs:!0,limit:9+1});r?.page&&(s.startkey=r.page),n=await a.query(Xx(Jx.AUTOMATION_LOGS),s)}catch(o){if(o!=null&&(o.name==="not_found"||o.error==="not_found"))return await pp(),Ds(e,t,r);throw o}return Or(n,{paginate:!0,pageSize:9})}async function Gf(e,t){let r=Z.context.getProdAppDB(),a=e._id,n=e.name,o=new Date().toISOString(),s=tC(o,t.status,a),i={...t,automationId:a,status:t.status,automationName:n,createdAt:o,_id:s};return await r.put(i),s}async function Ns(e,{clearing:t}={clearing:!1}){let r=Z.context.getProdAppDB();await Bf(async()=>{let a=await r.get(Z.db.DocumentType.APP_METADATA);for(let n of e){let o=n.split(Z.db.SEPARATOR),s=`${o[o.length-3]}${Z.db.SEPARATOR}${o[o.length-2]}`,i={};a.automationErrors&&(i=a.automationErrors),Array.isArray(i[s])||(i[s]=[]);let p=i[s].indexOf(n);t&&p!==-1?i[s].splice(p,1):i[s].push(n),i[s].length===0&&delete i[s],a.automationErrors=i}await r.put(a),await Z.cache.app.invalidateAppMetadata(a.appId,a)},"Failed to update app metadata with automation log error")}async function rC(){let e=await Us();try{return await qs(Zx,e,{docs:!1,paginate:!1,limit:eC})}catch{return{data:[],hasNextPage:!1}}}async function Bs(){let e=Z.context.getProdAppDB();try{let t=await rC();if(!t.data||t.data.length===0)return;let r=t.data.map(n=>({_id:n.id,_rev:n.value.rev,_deleted:!0})),a=t.data.filter(n=>{let o=n.id.split(Z.db.SEPARATOR);return o[o.length-1]===_n.AutomationStatus.ERROR}).map(n=>n.id);await e.bulkDocs(r),a.length&&await Ns(a,{clearing:!0})}catch(t){Z.logging.logAlert(`Failed to cleanup automation log history - Database "${e.name}"`,t)}}var Qf=Us;async function aC(e,t,r,a){let n,o=new Date().toISOString(),s=await Qf();return(!e||e<s)&&(e=s),r||t?n=await Ds(e,o,{automationId:r,status:t,page:a}):n=await qs(e,o,{status:t,page:a,docs:!0,paginate:!0}),n}async function nC(e){return await Bs(),await aC(e.startDate,e.status,e.automationId,e.page)}async function oC(e,t){if(!xn.db.isProdAppID(xn.context.getAppId()))return;let r=await Gf(e,t);t.status===Ff.AutomationStatus.ERROR&&await Ns([r]),await Bs()}var On={};w(On,{checkPluginQuotas:()=>uC,deletePlugin:()=>iC,storePlugin:()=>sC});var Kf=require("@budibase/types"),J=require("@budibase/backend-core");var jf=P(require("fs")),Wf=require("path");function $f(e,t){return jf.default.readFileSync((0,Wf.join)(e,t),"utf8")}async function sC(metadata,directory,source){let db=J.tenancy.getGlobalDB(),version=metadata.package.version,name=metadata.package.name,description=metadata.package.description,hash=metadata.schema.hash,bucketPath=J.objectStore.getPluginS3Dir(name),files=await J.objectStore.uploadDirectory(J.objectStore.ObjectStoreBuckets.PLUGINS,directory,bucketPath),jsFile=files.find(e=>e.name.endsWith(".js")),iconFile=files.find(e=>e.name.endsWith(".svg"));if(!jsFile)throw new Error("Plugin missing .js file.");if(metadata.schema.type===Kf.PluginType.DATASOURCE){let js=$f(directory,jsFile.name);try{eval(js)}catch(e){let t=e?.message?e.message:JSON.stringify(e);throw new Error(`JS invalid: ${t}`)}}let iconFileName=iconFile?iconFile.name:null,pluginId=J.db.generatePluginID(name),rev;try{rev=(await db.get(pluginId))._rev}catch(e){rev=void 0}let doc={_id:pluginId,_rev:rev,...metadata,name,version,hash,description,source};iconFileName&&(doc.iconFileName=iconFileName),source&&(doc={...doc,source});let write=async()=>{let e=await db.put(doc);return await J.events.plugin.imported(doc),{...doc,_rev:e.rev}};return rev?await write():await Es(write)}async function iC(e){let t=J.tenancy.getGlobalDB();try{let r=await t.get(e),a=J.objectStore.getPluginS3Dir(r.name);await J.objectStore.deleteFolder(J.objectStore.ObjectStoreBuckets.PLUGINS,a),await t.remove(e,r._rev),await J.events.plugin.deleted(r),await Rs()}catch(r){let a=r?.message?r?.message:r;throw new Error(`Failed to delete plugin: ${a}`)}}async function uC(){let e=J.tenancy.getGlobalDB();try{let r=(await e.allDocs(J.db.getPluginParams())).rows.length;console.log(`Syncing plugin count: ${r}`),await vs(r)}catch(t){J.logging.logAlert("Unable to retrieve plugins for quota check",t)}}var Je={};w(Je,{fetch:()=>cC,fetchValues:()=>lC,isEncryptionKeyAvailable:()=>pC,isValid:()=>Hf,remove:()=>fC,update:()=>dC});var ba=require("@budibase/types"),Vf=require("@budibase/backend-core");function pC(){return!!Vf.env.ENCRYPTION_KEY}async function cC(){let e=await _t.get();return Object.keys(e.variables)}async function lC(e){let r=(await _t.get()).variables,a={};for(let[n,o]of Object.entries(r))switch(e){case ba.AppEnvironment.DEVELOPMENT:a[n]=o.development;break;case ba.AppEnvironment.PRODUCTION:default:a[n]=o.production;break}return a}async function Yf(e){if(!(await Ve.cache.getCachedLicense()).features.includes(ba.Feature.ENVIRONMENT_VARIABLES))throw new Error("User does not have access to environment variables feature.");let r=await _t.get();r.variables=e(r.variables),await _t.update(r)}async function dC(e,t){if(Hf(e))await Yf(a=>(a[e]=t,a));else throw new Error("Variable name has characters that are not allowed")}async function fC(e){await Yf(t=>(delete t[e],t))}function Hf(e){return/^[a-zA-Z0-9-_]+$/.test(e)}var It={};w(It,{definitions:()=>EC,download:()=>TC,fetch:()=>wC,write:()=>IC});var Pn=require("@budibase/types");var V=require("@budibase/backend-core"),Ge=require("@budibase/types");var zf=require("memorystream"),Jf=new V.sql.Sql(Ge.SqlClient.SQL_LITE);async function mC(e,t,r){let a={operation:Ge.Operation.READ,table:$t.searchTable(),tables:{},paginate:{limit:r||9,page:t},filters:e,resource:{fields:[]},sort:{timestamp:{direction:Ge.SortOrder.DESCENDING,type:Ge.SortType.STRING}}},n=Jf._query(a);if(Array.isArray(n))throw new Error("Cannot execute multiple queries for audit log search");return{sql:n.sql,bindings:n.bindings}}function gC(e){return`${V.DocumentType.AUDIT_LOG}${V.SEPARATOR}${e}${V.SEPARATOR}${V.utils.newid()}`}async function Xf(e){e._id||(e._id=gC(e.timestamp)),e.type||(e.type=Ge.AUDIT_LOG_TYPE);try{let r=await V.context.getAuditLogsDB().put(e);return{...e,_rev:r.rev}}catch(t){V.logging.logAlert("Failed to write audit log",t)}}async function ks(e,t,r){t||(t=1);let a=V.context.getAuditLogsDB();try{let n=9+1,o=await mC(e,t,n),s=$t.searchTable(),i=Jf.convertJsonStringColumns(s,await a.sql(o.sql,o.bindings)),p;i.length>n&&(p=i.pop());let f={rows:i,hasNextPage:!!p};return f.hasNextPage&&(f.bookmark=t+1),f}catch(n){if(n.status===404&&!r?.isRetry)return await yC(),await Zu(),await ks(e,t,{isRetry:!0});throw n}}async function yC(){let e=V.context.getAuditLogsDB(),r=(await e.allDocs(V.db.getDocParams(V.DocumentType.AUDIT_LOG,null,{include_docs:!0}))).rows.map(a=>a.doc).filter(a=>a&&!a.type).map(a=>({...a,type:Ge.AUDIT_LOG_TYPE}));await e.bulkDocs(r)}function Zf(e){let t=V.context.getAuditLogsDB(),r=new zf,a=t.dump(r,{filter:o=>{let s=o;if(!s._id?.startsWith(V.DocumentType.AUDIT_LOG))return!1;let i=!0,p=(f,m)=>{!f||f.length===0||(i=!!(i&&m&&f.includes(m)))};if(p(e.userIds,s.userId),p(e.appIds,s.appId),p(e.events,s.event),(e.startDate||e.endDate)&&(i=i&&s.timestamp>=e.startDate&&s.timestamp<=e.endDate),e.fullSearch){let f=JSON.stringify(o);i=i&&f.includes(e.fullSearch)}return i}}),n=new zf;return r.on("data",o=>{let s=JSON.parse(Buffer.from(o).toString());if(Array.isArray(s.docs)){let i="";for(let p of s.docs)i+=JSON.stringify(p)+`
|
|
38
|
+
`;n.write(i)}}),r.on("end",()=>{n.end()}),{promise:a,stream:n}}var me=require("@budibase/backend-core");var Ln=require("@budibase/types"),Ia=require("@budibase/string-templates"),Sa=require("@budibase/backend-core"),AC=Sa.constants.MIN_VALID_DATE.toISOString(),bC=Sa.constants.MAX_VALID_DATE.toISOString();function Gs(e){return(e.startDate||e.endDate)&&(e.startDate=e.startDate||AC,e.endDate=e.endDate||bC),e}async function em(e){Array.isArray(e.appIds)&&(e.appIds=e.appIds.map(a=>Sa.db.getProdAppID(a)));let t={};function r(a,n){n?.length&&(t.oneOf={...t.oneOf,[a]:n})}return r("userId",e.userIds),r("appId",e.appIds),r("event",e.events),e.fullSearch&&(t.fuzzyOr=!0,t.fuzzy={name:e.fullSearch,fallback:e.fullSearch}),(e.startDate||e.endDate)&&(e=Gs(e),t.range={timestamp:{high:e.endDate,low:e.startDate}}),Object.keys(t).length===0&&(t.notEmpty={event:!0}),t}function Fs(e,t,r){let a={_id:e,status:Ln.AuditLogResourceStatus.DELETED};switch(t){case"app":a.name=r?.appName;break;case"user":a.email=r?.email;break}return a}function Qs(e){let t=(0,Ia.findHBSBlocks)(e);for(let r of t){let a=` "${r}"`;e=e.replace(e.includes(a)?a:` ${r}`,""),e=(0,Ia.processStringSync)(e,{})}return e}function tm(e,t){let r=Ln.AuditedEventFriendlyName[e];if(!r)throw new Error("No friendly name found.");let a=(0,Ia.processStringSync)(r,t);return a.includes('""')&&(a=Qs(r)),a}async function IC(e,t,r){if(!await An()||!me.utils.isAudited(e))return;let a=tm(e,t),n=new Date;r?.timestamp&&(n=new Date(r.timestamp));let o={timestamp:n.toISOString(),event:e,name:a,userId:r?.userId||Pn.AuditLogSystemUser,metadata:{...t,...r?.hostInfo}},s={};try{if(r?.appId){o.appId=me.db.getProdAppID(r.appId);let i=await me.cache.app.getAppMetadata(r.appId);"name"in i&&(s.appName=i.name)}if(r?.userId){let i=await me.users.getById(r?.userId);s.email=i.email}}catch(i){me.logging.logAlert("Failed to retrieve fallback information for audit log",i)}return o.fallback=s,await Xf(o)}async function SC(e){let t=e.map(i=>i.userId),a=e.filter(i=>i.appId).map(i=>me.db.getDevAppID(i.appId)),n=await me.users.bulkGetGlobalUsersById([...new Set(t)],{cleanup:!0}),o=await me.db.getAppsByIDs([...new Set(a)]),s=[];for(let i of e){let p=n.find(g=>g?._id===i.userId),f=o.find(g=>me.db.isSameAppID(g?.appId,i.appId)),m={event:i.event,timestamp:i.timestamp,name:i.name,metadata:i.metadata,user:p||Fs(i.userId,"user",i.fallback)};i.appId&&(m.app=f||Fs(i.appId,"app",i.fallback)),s.push(m)}return s}async function wC(e){if(!await An())throw new Error("Audit logs not available - license required.");let t=await em(e);if(typeof e.bookmark=="string")throw new Error("String based bookmark not supported.");let r=await ks(t,e.bookmark);return{hasNextPage:r.hasNextPage,bookmark:r.bookmark,data:await SC(r.rows)}}function TC(e){return e=Gs(e),Zf(e)}function EC(){let e=Object.entries(Pn.AuditedEventFriendlyName).filter(r=>r[1]!=null),t={};for(let r of e)t[r[0]]=Qs(r[1]);return t}var Un={};w(Un,{applications:()=>Vs,roles:()=>$s,users:()=>Ws});var Ws={};w(Ws,{roleCheck:()=>vC});function RC(e,t){let r=e.request.body;return r.builder&&(r.builder=t?.builder||void 0),r.admin&&(r.admin=t?.admin||void 0),r.roles&&(r.roles=t?.roles||{}),e.request.body=r,e}async function vC(e,t){return await rt()||RC(e,t),e}var $s={};w($s,{assign:()=>_C,unAssign:()=>xC});var wa=require("@budibase/backend-core");async function _C(e,t){if(!await rt())throw new Error("Unable to assign roles - license required.");let r=await Ce.bulkGet(e);for(let a of r){if(t.role&&t.role.roleId){let n=wa.db.getProdAppID(t.role.appId);a.roles[n]=t.role.roleId}if(t.appBuilder){let n=wa.db.getProdAppID(t.appBuilder.appId),o=a.builder?.apps||[];a.builder={apps:o.concat([n])}}t.builder&&(a.builder={global:!0}),t.admin&&(a.admin={global:!0}),a.roles}await Ce.bulkUpdate(r)}async function xC(e,t){if(!await rt())throw new Error("Unable to un-assign roles - license required.");let r=await Ce.bulkGet(e);for(let a of r){if(t.role){let n=wa.db.getProdAppID(t.role?.appId);a.roles[n]===t.role.roleId&&delete a.roles[n]}if(t.appBuilder&&a.builder?.apps){let n=wa.db.getProdAppID(t.appBuilder.appId);a.builder.apps=a.builder.apps.filter(o=>o!==n)}t.builder&&a.builder&&delete a.builder,t.admin&&a.admin&&delete a.admin}}var Vs={};w(Vs,{buildExportFn:()=>OC,buildImportFn:()=>CC});var Ks=require("@budibase/backend-core");function CC(e){return async(t,r)=>{await rt()||t.throw(403,"Endpoint unavailable, license required."),t.request.files?.appExport||t.throw(400,"Must provide app export file for import."),await Ks.context.doInAppContext(t.params.appId,async()=>{await e(t),t.body=void 0,t.status=204,await r()})}}function OC(e){return async(t,r)=>{await rt()||t.throw(403,"Endpoint unavailable, license required.");let{encryptPassword:a,excludeRows:n}=t.request.body;await Ks.context.doInAppContext(t.params.appId,async()=>{t.request.body={encryptPassword:a,excludeRows:n},t.query.appId=t.params.appId,await e(t),await r()})}}var ne=require("@budibase/backend-core"),ae=require("@budibase/types");var Ys=require("@budibase/backend-core"),rm;function am(){rm=new Ys.queue.BudibaseQueue(Ys.queue.JobQueue.APP_BACKUP,{maxStalledCount:3,jobOptions:{attempts:3,removeOnFail:!0,removeOnComplete:!0}})}function Dt(){return rm}var nm=require("path"),om=P(require("fs"));async function Hs(e,t={}){return _e.storeAppBackupMetadata(e,t)}function sm(e){let t=new Date().toISOString();switch(e){case ae.AppBackupStatus.COMPLETE:case ae.AppBackupStatus.FAILED:return{timestamp:t,finishedAt:t};case ae.AppBackupStatus.STARTED:return{timestamp:t,startedAt:t};case ae.AppBackupStatus.PENDING:return{timestamp:t,createdAt:t}}}async function LC(e,t,r,a){let n=await qn(e);return await _e.storeAppBackupMetadata({...n,...sm(t),contents:r,status:t,type:ae.AppBackupType.BACKUP},{filename:a,docId:e})}async function PC(e,t,r){let a=await qn(e);return await _e.storeAppBackupMetadata({...a,...sm(r),status:r,type:ae.AppBackupType.RESTORE,trigger:ae.AppBackupTrigger.MANUAL},{docId:e,docRev:t})}async function qn(e){return _e.getAppBackupMetadata(e)}async function UC(e,t){return _e.updateAppBackupMetadata(e,t)}async function im(e){let t=await _e.getAppBackupMetadata(e);return t.filename&&await ne.objectStore.deleteFile(ne.objectStore.ObjectStoreBuckets.BACKUPS,t.filename),_e.deleteAppBackupMetadata(e)}async function qC(e){let t=[];for(let r of e)try{await im(r),t.push({backupId:r,success:!0})}catch(a){t.push({backupId:r,success:!1,error:a instanceof Error?a.message:"Unknown error"})}return t}async function DC(e,t){return _e.fetchAppBackups(e,t)}async function um(e){let t=await _e.getAppBackupMetadata(e);if(!t.filename)throw new Error("Backup incomplete - cannot download.");let r=await ne.objectStore.getReadStream(ne.objectStore.ObjectStoreBuckets.BACKUPS,t.filename);return{metadata:t,stream:r}}async function NC(e){let{stream:t}=await um(e),r=(0,nm.join)(ne.objectStore.budibaseTempDir(),ne.utils.newid()),a=om.default.createWriteStream(r);return new Promise((n,o)=>{t.on("error",o),a.on("error",o),t.pipe(a).on("close",()=>n(r))})}async function BC(e,t,r={}){let a;try{a=await Hs({appId:e,trigger:t,timestamp:new Date().toISOString(),status:ae.AppBackupStatus.PENDING,type:ae.AppBackupType.BACKUP,...r})}catch(n){if(n.status===409)return;throw n}return await Dt().add({docId:a.id,docRev:a.rev,appId:e,export:{trigger:t,...r}}),await ne.events.backup.appBackupTriggered(e,a.id,ae.AppBackupType.BACKUP,t,r?.name),a.id}async function MC(e,t,r,a){let n=await qn(t),o;try{o=await Hs({appId:e,timestamp:new Date().toISOString(),status:ae.AppBackupStatus.PENDING,type:ae.AppBackupType.RESTORE,createdBy:a})}catch(s){if(s?.status===409)return;throw s}return await Dt().add({appId:e,docId:o.id,docRev:o.rev,import:{nameForBackup:r,backupId:t,createdBy:a}}),{restoreId:o.id,metadata:n}}async function kC(e,t,r){let a=ne.db.getProdAppID(e);await ne.context.doInAppContext(a,async()=>{let n=ne.context.getProdAppDB();if(!await n.exists())return;let s=await n.tryGet(ae.DocumentType.APP_METADATA);s&&(s.backupErrors||(s.backupErrors={}),s.backupErrors[t]||(s.backupErrors[t]=[]),s.backupErrors[t].push(r),await n.put(s),await ne.cache.app.invalidateAppMetadata(s.appId,s))})}var GC={isEnabled:gs,triggerAppRestore:ce(MC),triggerAppBackup:ce(BC),getBackupDownloadStream:ce(um),downloadAppBackup:ce(NC),fetchAppBackups:ce(DC),storeAppBackupMetadata:ce(Hs),updateBackupStatus:ce(LC),updateRestoreStatus:ce(PC),getAppBackup:ce(qn),updateAppBackup:ce(UC),deleteAppBackup:ce(im),deleteAppBackups:ce(qC),trackBackupError:ce(kC)},Oe=GC;var Js={};w(Js,{init:()=>zs});var W=require("@budibase/backend-core");var Fe=require("@budibase/types");var fr=P(require("fs"));async function zs(e){Dt().process(async t=>{let r=t.data;try{if(r.export)return console.log("Exporting app backup:",r.appId,r.export.trigger),jC(t,e);if(r.import)return console.log("Importing app backup:",r.appId,r.import.backupId),QC(t,e)}catch(a){W.logging.logAlert(`Failed to perform backup for app ID: ${r.appId}`,a)}})}async function FC(e){await W.db.getDB(e,{skip_setup:!0}).destroy()}async function pm(e,t,r,a){let n=W.db.getDevAppID(r),o=W.db.getProdAppID(r),s=new Date().toISOString(),i=async(p,f)=>{a?.doc?await Oe.updateBackupStatus(a.doc.id,p,f?.contents,f?.filename):await Oe.storeAppBackupMetadata({appId:o,timestamp:s,trigger:e,status:p,name:a?.name,type:Fe.AppBackupType.BACKUP,contents:f?.contents,createdBy:a?.createdBy},{filename:f?.filename})};try{let p=await a.processing.exportAppFn(n,{tar:!0}),f=await a.processing.statsFn(n),m=`${o}/backup-${s}.tar.gz`,g=W.objectStore.ObjectStoreBuckets.BACKUPS,y=fr.default.createReadStream(p);await W.objectStore.streamUpload({bucket:g,filename:m,stream:y,extra:{type:"application/gzip",metadata:{name:a?.name,trigger:e,timestamp:s,appId:o}}}),await i(Fe.AppBackupStatus.COMPLETE,{filename:m,contents:f}),fr.default.existsSync(p)&&fr.default.rmSync(p)}catch(p){W.logging.logAlert("App backup error",p),await i(Fe.AppBackupStatus.FAILED);let f=a?.doc?.id||`backup-${s}`,m=p instanceof Error?p.message:String(p);await Oe.trackBackupError(o,f,`Backup export failed: ${m}`)}}async function QC(e,t){let r=e.data,a=r.appId,n=r.import.backupId,o=r.import.nameForBackup,s=r.import.createdBy,i=W.tenancy.getTenantIDFromAppID(a);return W.tenancy.doInTenant(i,async()=>{let p=W.db.getDevAppID(a),f=`${p}_temp_${Date.now()}`,{rev:m}=await Oe.updateRestoreStatus(r.docId,r.docRev,Fe.AppBackupStatus.STARTED);await pm(Fe.AppBackupTrigger.RESTORING,i,a,{processing:t,createdBy:s,name:o});let g=await Oe.downloadAppBackup(n),y=Fe.AppBackupStatus.COMPLETE;try{await t.importAppFn(f,W.db.getDB(f),{file:{type:"application/gzip",path:g},key:g}),await FC(p),await new W.db.Replication({source:f,target:p}).replicate()}catch(I){W.logging.logAlert("App restore error",I),y=Fe.AppBackupStatus.FAILED;let C=I instanceof Error?I.message:String(I);await Oe.trackBackupError(a,n,`Backup restore failed: ${C}`)}finally{try{await W.db.getDB(f,{skip_setup:!0}).destroy()}catch{}}await Oe.updateRestoreStatus(r.docId,m,y),fr.default.existsSync(g)&&fr.default.rmSync(g,{force:!0})})}async function jC(e,t){let r=e.data,a=r.appId,n=r.export.trigger,o=r.export.name,s=W.tenancy.getTenantIDFromAppID(a);await W.tenancy.doInTenant(s,async()=>{try{let{rev:i}=await Oe.updateBackupStatus(r.docId,Fe.AppBackupStatus.STARTED);return pm(n,s,a,{processing:t,doc:{id:r.docId,rev:i},name:o})}catch(i){W.logging.logAlert("App backup error",i);let p=i instanceof Error?i.message:String(i);await Oe.trackBackupError(a,r.docId,`Backup export failed: ${p}`)}})}var WC=async e=>{am(),await zs(e.processing)},Se={...Oe,processing:Js,init:WC,getBackupQueue:Dt};var cm=async e=>{e.backups&&await Se.init(e.backups)};var ye={};w(ye,{create:()=>BM,find:()=>NM,get:()=>DM,remove:()=>kM,update:()=>MM});var PA=P($i()),st=require("@budibase/backend-core");var UA=require("@budibase/types");async function DM(e){let t=st.tenancy.getGlobalDB(),r=new st.db.QueryBuilder(t.name,UA.SearchIndex.USER);r.setIndexBuilder(st.db.searchIndexes.createUserIndex),r.setLimit(e.pageSize),r.addEqual("scimInfo.isSync",!0);for(let[n,o]of Object.entries(e.filters?.equal??{}))r.addEqual(n,o);r.setSort("_id"),r.setSkip(e.skip);let a=await r.run();return{users:a.rows,total:a.totalRows}}async function NM(e){return await st.users.getById(e)}async function BM(e){let t=await Ce.getUserByEmail(e.email);if(t){if(t.scimInfo?.isSync)throw new st.HTTPError("User is already synched",409);e={...t,scimInfo:(0,PA.default)(t.scimInfo,e.scimInfo),password:void 0,firstName:e.firstName,lastName:e.lastName,updatedAt:e.updatedAt}}return await Ce.save(e,{requirePassword:!1})}async function MM(e,t){return await Ce.save(e,{requirePassword:!1,allowChangingEmail:t?.allowChangingEmail})}async function kM(e){return await Ce.destroy(e)}var br={};w(br,{create:()=>GM});var qA=P($i());var DA=require("@budibase/backend-core");async function GM(e){let t=await Io(e.name),r;if(!t)r=(await j.save(e)).id;else{if(t.scimInfo?.isSync)throw new DA.HTTPError("Group is already synched",409);r=t._id,t.users&&(await j.removeUsers(r,t.users.map(n=>n._id)),delete t.users),t.scimInfo=(0,qA.default)(t.scimInfo,e.scimInfo),await j.save(t)}return await j.get(r)}var Bt={};w(Bt,{logRequest:()=>FM,logResponse:()=>QM});var Ki=require("@budibase/backend-core");async function FM(e){Ki.logging.logWarn("SCIM request log",e)}async function QM(e){Ki.logging.logWarn("SCIM response error",e)}var Xi={};w(Xi,{doInScimContext:()=>Yi,feature:()=>$,internalGroupOnly:()=>_a,licenseAuth:()=>MA,licensing:()=>NA,requireSCIM:()=>Hi,scimGroupOnly:()=>va,scimUserOnly:()=>Ra});var St=require("@budibase/backend-core");var Vn=require("@budibase/types"),jM=(e={checkUsersLimit:!0})=>async(t,r)=>{if((e.licensingCheck?e.licensingCheck:()=>!!t.user)(t)){if(St.env.SELF_HOSTED&&St.env.DEFAULT_LICENSE)return t.user.license=wo,r();t.user.license=await Ve.cache.getCachedLicense(t,{populateLicense:e.populateLicense,populateFreeLicense:e.populateFreeLicense}),e.checkUsersLimit&&(St.utils.isServingApp(t)||St.utils.isServingBuilder(t)||St.utils.isServingBuilderPreview(t)||St.utils.isPublicApiRequest(t))&&await ze.usageLimitIsExceeded({name:Vn.StaticQuotaName.USERS,type:Vn.QuotaUsageType.STATIC,usageChange:0})}return r()},NA=jM;var $={};w($,{requireFeature:()=>WM,requireFeatures:()=>$M});var WM=e=>async(t,r)=>{await hn(e),await r()},$M=(...e)=>async(t,r)=>{await ms(e),await r()};var Yn=require("@budibase/backend-core");var Yi=async(e,t)=>(Yn.env.DISABLE_SCIM_CALLS||await Bt.logRequest({...e.request.toJSON(),body:e.request.body}),await Yn.context.doInScimContext(async()=>{let r=await t();return await Bt.logResponse({...e.response.toJSON(),body:e.response.body}),r}));var Hi=async(e,t)=>{await As(),await t()};var BA=require("@budibase/backend-core");var Ra=e=>zi(BA.users.getById,e,!0),va=e=>zi(M.get,e,!0),_a=e=>zi(M.get,e,!1);function zi(e,t,r){return async(a,n)=>{let o=a.params[t];return typeof o!="string"&&a.throw(404),!!(await e(o)).scimInfo?.isSync!==r&&a.throw(404),n()}}var xa=require("@budibase/backend-core");var Ji=require("dd-trace");async function MA(e,t){await Ji.tracer.trace("licenseAuth",async r=>{let a=e.request.headers[xa.constants.Header.LICENSE_KEY];Array.isArray(a)&&(a=a[0]),r.addTags({licenseKey:a}),a||e.throw(403,"License key not provided");let n=await cs(a);n||(r.addTags({licenseFound:!1}),e.throw(403,"License not found or invalid")),n.tenantId||e.throw(403,"License does not have a tenant ID"),Ji.tracer.setUser({id:"anonymous",tenantId:n.tenantId}),await xa.context.doInSelfHostTenantUsingCloud(n.tenantId,async()=>{await xa.context.doInLicenseContext(n,async()=>{await t()})})})}var iu={};w(iu,{appBackups:()=>vb,auditLogs:()=>yb,environmentVariables:()=>ib,groups:()=>XA,scim:()=>rI,users:()=>iI});var kA=require("@budibase/backend-core");async function GA(e){let t=e.request.body;if(t.name=t.name.trim(),delete t.roles,t._id){let a=await bt(t._id);t.roles=a.roles,t.scimInfo=a.scimInfo}let r=await dr(t);e.body={_id:r.id,_rev:r.rev}}async function FA(e){let t=e.params.groupId,r=e.request.body.add,a=e.request.body.remove;(r&&!Array.isArray(r)||a&&!Array.isArray(a))&&e.throw(400,"Must supply a list of users to add or to remove");let n,o;r&&(n=await vn(t,r)),a&&(o=await xs(t,a)),e.body={added:n,removed:o}}async function QA(e){let t=e.params.groupId,r=e.request.body.add,a=e.request.body.remove;(r&&!Array.isArray(r)||a&&!Array.isArray(a))&&e.throw(400,"Must supply a list of objects, with appId and roleId to add or remove"),e.body=await Cs(t,{appsToAdd:r,appsToRemove:a})}async function jA(e){e.body={data:await ha()}}async function WA(e){let{groupId:t,rev:r}=e.params;try{await _s(t,r),e.body={message:"Group deleted successfully"}}catch(a){e.throw(a.status,a)}}async function $A(e){try{e.body=await bt(e.params.groupId)}catch(t){e.throw(t.status,t)}}async function KA(e){let{pageSize:t=10,bookmark:r,emailSearch:a}=e.request.query,n=e.params.groupId,o={limit:t+1},s=await Wa(n,{...o,emailSearch:a,bookmark:r}),i=a?s[t]?.email:s[t]?._id,p=!!i;e.body={users:s.slice(0,t),bookmark:i,hasNextPage:p}}async function VA(e){let{groupId:t,appId:r}=e.params;await Os(t,r),e.body={message:"Group app builder access updated."}}async function YA(e){let{groupId:t,appId:r}=e.params;await Ls(t,r),e.body={message:"group app builder access removed."}}async function HA(e){let{groupId:t}=e.params,{csvContent:r}=e.request.body;(r===void 0||r.trim().length===0)&&e.throw(400,"CSV is empty");let a=await kA.csv.jsonFromCsvString(r,{allowSingleColumn:!0});(!a||a.length===0)&&e.throw(400,"CSV file is invalid");let o=Object.keys(a[0]).find(g=>/^(email|e-mail|email address|mail|e_mail)$/i.test(g.trim()));o||e.throw(400,"CSV file must contain an email column");let s=Array.from(new Set(a.map(g=>g[o]).filter(g=>g&&typeof g=="string"&&g.trim().length>0).map(g=>g.trim())));s.length===0&&e.throw(400,"No valid email addresses found in CSV");try{await bt(t)}catch(g){if(g.status===404)e.throw(404,"Group not found");else throw g}let i=[],p=[],f=[],m=await Promise.all(s.map(g=>Ce.getUserByEmail(g)));for(let g of s){let y=m.find(I=>I?.email===g);y?(i.push({_id:y._id,email:y.email}),f.push(y._id)):p.push({email:g,reason:"User not found"})}f.length>0&&await vn(t,f),e.body={added:i,skipped:p}}var zA=P(require("@koa/router")),le=P(require("joi"));var we=require("@budibase/types"),Le=require("@budibase/backend-core"),JA=new zA.default;function VM(){return Le.auth.joiValidator.body(le.default.object({_id:le.default.string().optional(),_rev:le.default.string().optional(),color:le.default.string().required(),icon:le.default.string().required(),name:le.default.string().trim().required().max(50),role:le.default.string().optional(),users:le.default.array().optional(),apps:le.default.array().optional(),roles:le.default.object().optional(),createdAt:le.default.string().optional(),updatedAt:le.default.string().optional()}).required())}JA.post("/api/global/groups",Le.auth.adminOnly,$.requireFeature(we.Feature.USER_GROUPS),VM(),GA).get("/api/global/groups",$.requireFeature(we.Feature.USER_GROUPS),jA).delete("/api/global/groups/:groupId/:rev",$.requireFeature(we.Feature.USER_GROUPS),Le.auth.adminOnly,_a("groupId"),WA).get("/api/global/groups/:groupId",$.requireFeature(we.Feature.USER_GROUPS),Le.auth.builderOrAdmin,$A).get("/api/global/groups/:groupId/users",$.requireFeature(we.Feature.USER_GROUPS),Le.auth.builderOrAdmin,KA).post("/api/global/groups/:groupId/users",Le.auth.adminOnly,$.requireFeature(we.Feature.USER_GROUPS),_a("groupId"),FA).post("/api/global/groups/:groupId/users/bulk",Le.auth.adminOnly,$.requireFeature(we.Feature.USER_GROUPS),_a("groupId"),Le.auth.joiValidator.body(le.default.object({csvContent:le.default.string().required()}).required()),HA).post("/api/global/groups/:groupId/apps",Le.auth.builderOrAdmin,$.requireFeature(we.Feature.USER_GROUPS),QA).post("/api/global/groups/:groupId/app/:appId/builder",Le.auth.builderOrAdmin,$.requireFeatures(we.Feature.USER_GROUPS,we.Feature.APP_BUILDERS),VA).delete("/api/global/groups/:groupId/app/:appId/builder",Le.auth.builderOrAdmin,$.requireFeatures(we.Feature.USER_GROUPS,we.Feature.APP_BUILDERS),YA);var XA=JA;var Zi=require("@budibase/types");var eu=require("@budibase/backend-core");async function ZA(e){e.body={encryptionKeyAvailable:Je.isEncryptionKeyAvailable()}}async function eb(e){e.body={variables:await Je.fetch()}}async function tb(e){let{name:t,production:r,development:a}=e.request.body;await Je.update(t,{production:r,development:a});let n=[Zi.AppEnvironment.PRODUCTION];r!==a&&n.push(Zi.AppEnvironment.DEVELOPMENT),await eu.events.environmentVariable.created(t,n),e.body={message:`Environment variable "${t}" created.`}}async function rb(e){let{production:t,development:r}=e.request.body,a=e.params.varName;await Je.update(a,{production:t,development:r}),e.body={message:`Environment variable "${a}" updated.`}}async function ab(e){let t=e.params.varName;await Je.remove(t),await eu.events.environmentVariable.deleted(t),e.body={message:`Environment variable "${t}" deleted.`}}var Mt=require("@budibase/backend-core"),ob=P(require("@koa/router")),Ca=P(require("joi")),sb=new ob.default;function nb(){return Mt.auth.joiValidator.body(Ca.default.object({name:Ca.default.string().optional(),production:Ca.default.string().required(),development:Ca.default.string().required()}))}sb.get("/api/env/variables/status",Mt.auth.builderOrAdmin,ZA).get("/api/env/variables",Mt.auth.builderOrAdmin,eb).post("/api/env/variables",Mt.auth.builderOrAdmin,nb(),tb).patch("/api/env/variables/:varName",Mt.auth.builderOrAdmin,nb(),rb).delete("/api/env/variables/:varName",Mt.auth.builderOrAdmin,ab);var ib=sb;var tu=require("@budibase/backend-core");async function ub(e){let t=e.request.body,r=await It.fetch(t);await tu.events.auditLog.filtered(t),e.body=r}async function pb(e){let t=e.request.body,{stream:r}=It.download(t);await tu.events.auditLog.downloaded(t),e.attachment(`audit-logs-${Date.now()}.log`),e.body=r}async function cb(e){e.body={events:It.definitions()}}var fb=require("@budibase/types"),kt=require("@budibase/backend-core"),mb=P(require("@koa/router")),Pe=P(require("joi"));function lb(){return kt.auth.joiValidator.body(Pe.default.object({userIds:Pe.default.array().items(Pe.default.string()).optional(),appIds:Pe.default.array().items(Pe.default.string()).optional(),events:Pe.default.array().items(Pe.default.string().valid(...Object.values(fb.Event))).optional(),startDate:Pe.default.string().optional().allow(""),endDate:Pe.default.string().optional().allow(""),fullSearch:Pe.default.string().optional().allow(""),bookmark:Pe.default.number()}))}var gb=new mb.default;gb.post("/api/global/auditlogs/search",kt.auth.adminOnly,lb(),ub).get("/api/global/auditlogs/download",kt.auth.adminOnly,kt.middleware.querystringToBody,lb(),pb).get("/api/global/auditlogs/definitions",kt.auth.adminOnly,cb);var yb=gb;var ru=require("@budibase/types");var Hn=require("@budibase/backend-core");async function Gt(e,t){t||e.throw(400,"App ID missing"),await Yt.appExists(t)||e.throw(400,`Provided app ID: ${t} - is invalid.`)}async function hb(e){let t=e.params.appId;await Gt(e,t);let r=e.request.body,a=e.user?._id,n=await Se.triggerAppBackup(t,ru.AppBackupTrigger.MANUAL,{name:r.name,createdBy:a});n||e.throw(500,"Unable to start backup."),e.body={backupId:n,message:"Backup triggered - process starting."}}async function Ab(e){let t=e.params.appId;await Gt(e,t);let r=e.params.backupId,a=e.request.body.name,n=await Se.triggerAppRestore(t,r,a,e.user?._id);n||e.throw(500,"Unable to start restore."),await Hn.events.backup.appBackupRestored(n.metadata),e.body={restoredId:n?.restoreId,message:"Restore triggered - process starting."}}async function bb(e){let t=e.params.appId;await Gt(e,t);let r=e.params.backupId;await Se.deleteAppBackup(r),e.body={message:"Backup deleted successfully."}}async function Ib(e){let t=Hn.context.getAppId();await Gt(e,t);let{backupIds:r}=e.request.body;(!Array.isArray(r)||r.length===0)&&e.throw(400,"backupIds must be a non-empty array");let a=await Se.deleteAppBackups(r),n=a.filter(s=>s.success).length,o=a.length-n;e.body={message:`${n} backups deleted successfully${o>0?`, ${o} failed`:""}.`,results:a,successCount:n,failureCount:o}}async function Sb(e){let t=e.params.appId;await Gt(e,t);let r=e.request.body;r?.trigger&&(r.trigger=r.trigger.toLowerCase(),Object.values(ru.AppBackupTrigger).includes(r.trigger)||e.throw(400,"Provided trigger is not a valid option.")),e.body=await Se.fetchAppBackups(t,{paginate:!0,...r})}async function wb(e){let t=e.params.appId;await Gt(e,t);let r=e.params.backupId,a=e.request.body;e.body=await Se.updateAppBackup(r,a.name)}async function Tb(e){let t=e.params.appId;await Gt(e,t);let r=e.params.backupId,{metadata:a,stream:n}=await Se.getBackupDownloadStream(r);e.attachment(`backup-${a.timestamp}.tar.gz`),e.body=n}var Eb=P(require("@koa/router")),Ft=P(require("joi")),zn=require("@budibase/types"),it=require("@budibase/backend-core"),Rb=new Eb.default;function JM(){return it.auth.joiValidator.body(Ft.default.object({trigger:Ft.default.string().valid(...Object.values(zn.AppBackupTrigger)),type:Ft.default.string().valid(...Object.values(zn.AppBackupType)),startDate:Ft.default.date(),endDate:Ft.default.date(),page:Ft.default.string()}))}Rb.post("/api/apps/:appId/backups",it.auth.builderOrAdmin,hb).post("/api/apps/:appId/backups/search",it.auth.builderOrAdmin,JM(),Sb).get("/api/apps/:appId/backups/:backupId/file",it.auth.builderOrAdmin,Tb).patch("/api/apps/:appId/backups/:backupId",it.auth.builderOrAdmin,wb).delete("/api/apps/:appId/backups/:backupId",it.auth.builderOrAdmin,bb).delete("/api/apps/:appId/backups",it.auth.builderOrAdmin,Ib).post("/api/apps/:appId/backups/:backupId/import",it.auth.builderOrAdmin,Ab);var vb=Rb;var tI=P(require("@koa/router"));var Jn=require("scim-patch");var xb=require("@budibase/backend-core");function _b(e,t){let r=e.request.query[t];if(r!==void 0)return+r}var Cb=async e=>{let t=_b(e,"pageSize")??20,r=_b(e,"startIndex"),a;e.request.query.filter&&(a=Y.user.userFilters(e.request.query.filter));let n=await ye.get({pageSize:t,skip:r,filters:a});e.body={schemas:["urn:ietf:params:scim:api:messages:2.0:ListResponse"],totalResults:n.total,Resources:n.users.map(Y.user.toScimUserResponse),startIndex:(r||0)+1,itemsPerPage:t}},Ob=async e=>{let{id:t}=e.params;typeof t!="string"&&e.throw(404);let r=await ye.find(t);e.body=Y.user.toScimUserResponse(r)},Lb=async e=>{let t=Y.user.fromScimUser(e.request.body);try{let r=await ye.create(t);e.body=Y.user.toScimUserResponse(r)}catch(r){throw r instanceof xb.EmailUnavailableError&&e.throw(409,"Email already in use"),r}};function XM(e){let t=e.Operations.find(r=>(r.op==="Replace"||r.op==="replace")&&r.path==="active");return t?t.value===!1||t.value?.toLowerCase?.()==="false":!1}var Pb=async e=>{let t=await ye.find(e.params.id);t||e.throw(404);let r=Y.user.toScimUserResponse(t),a=e.request.body;try{(0,Jn.patchBodyValidation)(a)}catch{}if(XM(a))return au(e);let n;try{n=(0,Jn.scimPatch)(r,a.Operations)}catch{}n||e.throw(500);let o=Y.user.fromScimUser(n);await ye.update(o,{allowChangingEmail:!0}),e.body=Y.user.toScimUserResponse(o)},au=async e=>{let{id:t}=e.params;typeof t!="string"&&e.throw(404),await ye.remove(t),e.status=204};var Vb=P(Kb()),Yb=require("@budibase/shared-core"),Xn=require("scim-patch");var Zn=require("scim2-parse-filter");function Hb(e,t){for(let r of t.split(","))delete e[r]}var zb=async e=>{let r=(await j.fetch()).filter(o=>o.scimInfo?.isSync).map(Y.group.toScimGroupResponse),{filter:a,excludedAttributes:n}=e.request.query;if(a){let o=(0,Zn.filter)((0,Zn.parse)(a));r=r.filter(o)}n&&r.forEach(o=>{Hb(o,n)}),e.body={schemas:["urn:ietf:params:scim:api:messages:2.0:ListResponse"],totalResults:r.length,Resources:r,startIndex:1,itemsPerPage:r.length}},Jb=async e=>{let t=Y.group.fromScimGroup(e.request.body),r=await br.create(t);e.body=Y.group.toScimGroupResponse(r)},Xb=async e=>{let{id:t}=e.params,r=await j.get(t),a=Y.group.toScimGroupResponse(r),{excludedAttributes:n}=e.request.query;n&&Hb(a,n),e.body=a},Zb=async e=>{let{id:t}=e.params,r=await j.get(t);await j.remove(t,r._rev),e.status=204},eI=async e=>{let{id:t}=e.params,r=await j.get(t),a=Y.group.toScimGroupResponse(r),n=e.request.body;try{(0,Xn.patchBodyValidation)(n)}catch{e.throw(400)}let{true:o,false:s}=(0,Vb.default)(n.Operations,i=>i.path==="members");if(s?.length){let i=(0,Xn.scimPatch)(a,s);i||e.throw(500);let p={...Y.group.fromScimGroup(i),_rev:r._rev};await j.save(p)}if(o?.length){let i=[],p=[];for(let{op:f,value:m}of o)switch(f){case"add":case"Add":for(let g of m)i.push(await ye.find(g.value));break;case"remove":case"Remove":for(let g of m)p.push(await ye.find(g.value));break;case"replace":case"Replace":throw new Error("Replacing members is not allowed");default:Yb.utils.unreachable(f)}i.length&&await j.addUsers(t,i.map(f=>f._id)),p.length&&await j.removeUsers(t,p.map(f=>f._id))}e.body=Y.group.toScimGroupResponse(await j.get(t))};var Oa=require("@budibase/types"),Te=new tI.default({prefix:"/api/global/scim/v2"});Te.use(Hi);Te.use(Yi);Te.get("/users",Cb);Te.get("/users/:id",Ra("id"),Ob);Te.post("/users",Lb);Te.patch("/users/:id",Ra("id"),Pb);Te.delete("/users/:id",Ra("id"),au);Te.get("/groups",zb);Te.post("/groups",$.requireFeature(Oa.Feature.USER_GROUPS),Jb);Te.get("/groups/:id",$.requireFeature(Oa.Feature.USER_GROUPS),va("id"),Xb);Te.delete("/groups/:id",$.requireFeature(Oa.Feature.USER_GROUPS),va("id"),Zb);Te.patch("/groups/:id",$.requireFeature(Oa.Feature.USER_GROUPS),va("id"),eI);var rI=Te;var oI=P(require("@koa/router"));var nu=require("@budibase/backend-core");async function aI(e){let{userId:t,appId:r}=e.params,a=await nt.db.getUser(t);if(nu.users.isGlobalBuilder(a)){e.body={message:"User already admin - no permissions updated."};return}await nt.addAppBuilder(a,r),e.body={message:`User "${a.email}" app builder access updated.`}}async function nI(e){let{userId:t,appId:r}=e.params,a=await nt.db.getUser(t);if(nu.users.isGlobalBuilder(a)){e.body={message:"User already admin - no permissions removed."};return}await nt.removeAppBuilder(a,r),e.body={message:`User "${a.email}" app builder access removed.`}}var ou=require("@budibase/types"),su=require("@budibase/backend-core"),sI=new oI.default;sI.post("/api/global/users/:userId/app/:appId/builder",su.auth.builderOrAdmin,$.requireFeatures(ou.Feature.APP_BUILDERS),aI).delete("/api/global/users/:userId/app/:appId/builder",su.auth.builderOrAdmin,$.requireFeatures(ou.Feature.APP_BUILDERS),nI);var iI=sI;var Y={};w(Y,{group:()=>pu,user:()=>uu});var uu={};w(uu,{fromScimUser:()=>_k,toScimUserResponse:()=>Ek,userFilters:()=>xk});var eo=require("@budibase/types"),uI=require("scim2-parse-filter"),pI=require("@budibase/backend-core"),cI=require("@budibase/shared-core"),{unreachable:Tk}=cI.utils,Ek=e=>{let{isSync:t,roles:r,...a}=e.scimInfo||{},n={...a,schemas:["urn:ietf:params:scim:schemas:core:2.0:User"],id:e._id,meta:{resourceType:"User",created:new Date(e.createdAt),lastModified:new Date(e.updatedAt)},active:e.status===eo.UserStatus.ACTIVE};return(e.firstName||e.lastName)&&(n.name={formatted:[e.firstName,e.lastName].filter(o=>o).join(" "),familyName:e.lastName,givenName:e.firstName}),n},Rk=e=>!!e?.id;function vk(e){if(pI.utils.validEmail(e.userName))return e.userName;if(e.emails)return e.emails.find(t=>t.primary)?.value||e.emails[0]?.value}var _k=e=>{let t=Rk(e)?e:void 0,r=vk(e);if(!r)throw new Error("Email is required");let a;switch(e.active){case"True":case"true":case!0:a=!0;break;case"False":case"false":case!1:a=!1;break;default:Tk(e.active)}let n,o;return e.name?.givenName?(n=e.name?.givenName,o=e.name?.familyName):n=e.displayName,{tenantId:"",_id:t?.id,userId:t?.id,email:r,firstName:n,lastName:o,scimInfo:{...e,isSync:!0},roles:{},status:a?eo.UserStatus.ACTIVE:eo.UserStatus.INACTIVE,createdAt:t?.meta.created.getTime(),updatedAt:t?.meta.lastModified.toISOString()}},xk=e=>{let t={equal:{}},r=(0,uI.parse)(e);function a(n){switch(n.op){case"eq":{let o=n.attrPath,s;switch(o){case"emails.value":s="email";break;default:s=`scimInfo.${o}`}t.equal[s]=n.compValue;break}case"and":for(let o of n.filters)a(o);break;default:console.warn("Filter not handled",{filter:n})}}return a(r),t};var pu={};w(pu,{fromScimGroup:()=>Lk,toScimGroupResponse:()=>Ck});var Ck=e=>({schemas:["urn:ietf:params:scim:schemas:core:2.0:Group"],id:e._id,externalId:e.scimInfo.externalId,meta:{resourceType:"Group",created:new Date(e.createdAt),lastModified:new Date(e.updatedAt)},displayName:e.name,members:e.users?.map(t=>({value:t._id}))}),Ok=e=>!!e?.id,Lk=e=>{let t=Ok(e)?e:void 0;return{_id:t?.id,name:e.displayName,scimInfo:{externalId:e.externalId,isSync:!0},icon:"UserGroup",color:"var(--spectrum-global-color-blue-600)",createdAt:t?.meta.created.getTime(),updatedAt:t?.meta.lastModified.toISOString()}};var Uu={};w(Uu,{LLM:()=>Xe,LLMRequest:()=>K,TableGeneration:()=>Pu,agentHistoryTitleSystemPrompt:()=>Qk,agentSystemPrompt:()=>Fk,aiColumnSchemas:()=>Ou,aiTableResponseToTableSchema:()=>vu,appendAIColumns:()=>_u,classifyText:()=>du,cleanData:()=>fu,extractFileData:()=>Bk,generateAIColumns:()=>Eu,generateCode:()=>Gk,generateCronExpression:()=>mu,generateData:()=>Ru,generateJs:()=>Au,generateSQL:()=>kk,generateTables:()=>Tu,generationStructure:()=>Cu,getLLM:()=>Ua,getLLMConfig:()=>wu,getLLMOrThrow:()=>II,normalizeContentType:()=>cu,parseResponseFormat:()=>ro,sanitiseToolName:()=>Pk,searchWeb:()=>hu,sentimentAnalysis:()=>yu,summarizeText:()=>to,tableDataStructuredOutput:()=>Lu,translate:()=>gu});var La=require("@budibase/types");function Pk(e){if(e.length>64)throw new Error("Tool name must be under 64 characters long");return e.replace(/[^a-zA-Z0-9_-]/g,"_")}function cu(e){return e?e.includes("/")?e:{[La.SupportedFileType.PDF]:"application/pdf",[La.SupportedFileType.JPG]:"image/jpeg",[La.SupportedFileType.JPEG]:"image/jpeg",[La.SupportedFileType.PNG]:"image/png"}[e.toLowerCase()]||"application/octet-stream":"application/octet-stream"}var io=require("@budibase/types");var Ze=require("@budibase/backend-core"),yI=require("@budibase/types");var ao=P(require("openai"));var wt=require("@budibase/types");var lI=require("@budibase/shared-core");var Tt=P(require("dd-trace"));function lu(e,t){return t.map(r=>e[r]).join(" ")}var Xe=class{constructor({model:t,apiKey:r,maxTokens:a}){this._model=t,this._apiKey=r,this._maxTokens=a??parseInt(process.env.BUDIBASE_AI_MAX_PROMPT_TOKENS||"1000")}get model(){return this._model}get apiKey(){return this._apiKey}get maxTokens(){return this._maxTokens}async prompt(t){return await Tt.default.trace("prompt",async()=>{let r=typeof t=="string"?new K().addUserMessage(t):t,{messages:a,tokensUsed:n}=await Tt.default.trace("chatCompletion",()=>this.chatCompletion(r));return!a||a.length===0?{message:"",tokensUsed:n}:{message:a[a.length-1].content||"",tokensUsed:n}})}async chat(t){return await Tt.default.trace("chat",async()=>await this.chatCompletion(t))}async*chatStream(t){yield*this.chatCompletionStream(t)}async summarizeText(t){return Tt.default.trace("summarizeText",()=>this.prompt(to(t)))}async generateCronExpression(t){return Tt.default.trace("generateCronExpression",()=>this.prompt(mu(t)))}async operation(t,r){return Tt.default.trace("operation",a=>{a.addTags({operation:t.operation,rowId:r.id});let n=this.promptForOperation(t,r);return this.prompt(n)})}promptForOperation(t,r){let{operation:a,column:n,columns:o,language:s,categories:i,prompt:p}=t;switch(a){case wt.AIOperationEnum.SUMMARISE_TEXT:return to(lu(r,o));case wt.AIOperationEnum.CLEAN_DATA:return fu(r[n]);case wt.AIOperationEnum.TRANSLATE:return gu(r[n],s);case wt.AIOperationEnum.CATEGORISE_TEXT:if(!i)throw Error("No categories provided for categorise text operation. Please provide categories.");return du(lu(r,o),i.split(","));case wt.AIOperationEnum.SENTIMENT_ANALYSIS:return yu(r[n]);case wt.AIOperationEnum.PROMPT:return p;case wt.AIOperationEnum.SEARCH_WEB:return hu(lu(r,o));default:throw lI.utils.unreachable(a)}}async generateJs(t,r){return await Tt.default.trace("generateJs",async()=>{let{bindings:a=[],snippets:n=[]}=r||{};return await this.prompt(Au(a,n).addUserMessage(t))})}};var fI=require("@budibase/types"),bu=require("openai/helpers/zod");function ro(e){if(e)return e==="text"?{type:"text"}:e==="json"?{type:"json_object"}:e}function dI(e){if(!e)return 0;let t=e.prompt_tokens;return e.completion_tokens*3+t}var Ue=class extends Xe{constructor(r){super(r);this.client=this.getClient(r)}getClient(r){if(!r.apiKey)throw new Error("No OpenAI API key found");return new ao.default({apiKey:r.apiKey})}async uploadFile(r,a,n){let o=cu(n);if(fI.ImageContentTypes.includes(o.toLowerCase())){let p;if(Buffer.isBuffer(r))p=r;else{let m=[];for await(let g of r)m.push(g);p=Buffer.concat(m)}let f=p.toString("base64");return`data:${o};base64,${f}`}let s=await(0,ao.toFile)(r,a);return(await this.client.files.create({file:s,purpose:"assistants"})).id}async chatCompletion(r){let a={model:this.model,messages:r.messages,max_completion_tokens:this._maxTokens,response_format:ro(r.format),reasoning_effort:"minimal",verbosity:"low"};r.tools&&r.tools.length>0&&(a.tool_choice="auto",a.tools=r.tools.map(bu.zodFunction));let n=await this.client.chat.completions.create(a),o=n?.choices?.[0]?.message;if(o?.tool_calls){r.addMessage(o);let s=[];for(let i of o.tool_calls){if(i.type!=="function"||!i.function){console.warn(`[OPENAI TOOL WARN] Unsupported tool call type: ${i.type}`);continue}let p=i.function.name,f=r.findTool(p);if(!f)throw new Error(`Tool ${p} not found in prompt tools`);let m=JSON.parse(i.function.arguments);s.push(f.handler(m).then(g=>({role:"tool",tool_call_id:i.id,content:g})).catch(g=>(console.error(`[OPENAI TOOL ERROR] Tool ${p} failed in OpenAI handler:`,g),{role:"tool",tool_call_id:i.id,content:`Error: ${g.message}`})))}return r.addMessages(await Promise.all(s)),this.chatCompletion(r)}else{if(o?.content)return{messages:[...r.messages,{role:o.role,content:o.content}],tokensUsed:dI(n.usage)};throw new Error("No response found")}}async*chatCompletionStream(r){let a={model:this.model,messages:r.messages,max_tokens:this.maxTokens,response_format:ro(r.format),stream:!0};r.tools&&r.tools.length>0&&(a.tool_choice="auto",a.tools=r.tools.map(bu.zodFunction));try{let n=await this.client.chat.completions.create(a),o=null,s="",i=null;for await(let f of n){let m=f?.choices?.[0]?.delta;if(m){if(m.content&&(s+=m.content,yield{type:"content",content:m.content}),m.tool_calls&&m.tool_calls.length>0){let g=m.tool_calls[0];g.id?(o={id:g.id,name:g.function?.name||"",arguments:g.function?.arguments||""},yield{type:"tool_call_start",toolCall:{id:o.id,name:o.name,arguments:o.arguments}}):o&&g.function?.arguments&&(o.arguments+=g.function.arguments,yield{type:"tool_call_start",toolCall:{id:o.id,name:o.name,arguments:o.arguments}})}f.usage&&(i=f.usage)}}let p=i?dI(i):0;if(o){r.addMessage({role:"assistant",content:"",tool_calls:[{id:o.id,type:"function",function:{name:o.name,arguments:o.arguments}}]});let f=r.findTool(o.name);if(f)try{let m=JSON.parse(o.arguments),g=await f.handler(m);yield{type:"tool_call_result",toolResult:{id:o.id,result:g}},r.addMessage({role:"tool",tool_call_id:o.id,content:g}),yield*this.chatCompletionStream(r);return}catch(m){yield{type:"tool_call_result",toolResult:{id:o.id,result:`Error: ${m.message}`,error:m.message}},r.addMessage({role:"tool",tool_call_id:o.id,content:`Error: ${m.message}`}),yield*this.chatCompletionStream(r);return}else{let m=`Tool '${o.name}' not found`;yield{type:"tool_call_result",toolResult:{id:o.id,result:m,error:m}},r.addMessage({role:"tool",tool_call_id:o.id,content:m}),yield*this.chatCompletionStream(r);return}}s&&r.addMessage({role:"assistant",content:s}),yield{type:"done",messages:r.messages,tokensUsed:p}}catch(n){yield{type:"error",content:n.message}}}};var ee=require("@budibase/backend-core"),mI=require("@budibase/types");var Iu=require("dd-trace"),no=class extends Xe{async prompt(t){let r=await super.prompt(t);return r.tokensUsed&&await En(r.tokensUsed),r}async chat(t){let r=await super.chat(t);return r.tokensUsed&&await En(r.tokensUsed),r}async uploadFile(t,r,a){return ee.env.SELF_HOSTED?this.uploadFileSelfHost(t,r,a):this.uploadFileCloud(t,r,a)}async uploadFileCloud(t,r,a){return new Ue({apiKey:ee.env.OPENAI_API_KEY,model:this.model,max_completion_tokens:this.maxTokens}).uploadFile(t,r,a)}async uploadFileSelfHost(t,r,a){let n;if(Buffer.isBuffer(t))n=t;else{let p=[];for await(let f of t)p.push(f);n=Buffer.concat(p)}let o=n.toString("base64");if(a&&mI.ImageContentTypes.includes(a.toLowerCase()))return`data:image/jpeg;base64,${o}`;if(!ee.env.BUDICLOUD_URL)throw new Error("No Budibase URL found");if(!this._apiKey){let p=await gn();if(!p)throw new Error("No license key found");this._apiKey=p}let s=await fetch(`${ee.env.BUDICLOUD_URL}/api/ai/upload-file`,{method:"POST",headers:{"Content-Type":"application/json",[ee.constants.Header.LICENSE_KEY]:this._apiKey},body:JSON.stringify({data:o,filename:r,contentType:a})});if(!s.ok)throw await ee.HTTPError.fromResponse(s);return(await s.json()).fileId}async chatCompletion(t){return ee.env.SELF_HOSTED?this.chatCompletionSelfHost(t):this.chatCompletionCloud(t)}async chatCompletionCloud(t){return await Iu.tracer.trace("chatCompletionCloud",async()=>await new Ue({apiKey:ee.env.OPENAI_API_KEY,model:this.model,max_completion_tokens:this.maxTokens}).chatCompletion(t))}async chatCompletionSelfHost(t){return await Iu.tracer.trace("chatCompletionSelfHost",async r=>{if(!ee.env.BUDICLOUD_URL)throw new Error("No Budibase URL found");if(r.addTags({budicloudUrl:ee.env.BUDICLOUD_URL}),!this._apiKey){let o=await gn();if(!o)throw new Error("No license key found");this._apiKey=o,r.addTags({licenseKey:this._apiKey})}let a={messages:t.messages,format:t.format,useTools:t.tools.length>0},n=await fetch(`${ee.env.BUDICLOUD_URL}/api/ai/chat`,{method:"POST",headers:{"Content-Type":"application/json",[ee.constants.Header.LICENSE_KEY]:this._apiKey},body:JSON.stringify(a)});if(!n.ok)throw await ee.HTTPError.fromResponse(n);return await n.json()})}async*chatCompletionStream(t){ee.env.SELF_HOSTED?yield*this.chatCompletionStreamSelfHost(t):yield*this.chatCompletionStreamCloud(t)}async*chatCompletionStreamCloud(t){yield*new Ue({apiKey:ee.env.OPENAI_API_KEY,model:this.model,max_completion_tokens:this.maxTokens}).chatCompletionStream(t)}async*chatCompletionStreamSelfHost(t){try{let r=await this.chatCompletionSelfHost(t);if(r.messages.length>0){let a=r.messages[r.messages.length-1];a.content&&(yield{type:"content",content:a.content})}yield{type:"done",messages:r.messages,tokensUsed:r.tokensUsed}}catch(r){yield{type:"error",content:r.message}}}};var Pa=require("dd-trace");var Su=P(require("@anthropic-ai/sdk"));function Uk(e){if(!e)return 0;let t=e.input_tokens;return e.output_tokens*3+t}var oo=class extends Xe{constructor(r){super(r);this.client=new Su.default({apiKey:r.apiKey})}firstTextBlock(r){for(let a of r.content)if(a.type==="text")return a.text}async uploadFile(r,a,n){throw new Error("File upload not supported for this LLM provider")}async chatCompletion(r){try{let a=await this.client.messages.create({model:this.model,messages:r.messages.map(({content:o})=>{if(o==null)return{role:"user",content:""};if(typeof o=="string")return{role:"user",content:o};let s="";for(let i of o)i.type==="text"?s+=i.text:["image_url","input_audio","file"].includes(i.type);return{role:"user",content:s}}),max_tokens:this.maxTokens}),n=this.firstTextBlock(a)||"";return{messages:[...r.messages,{role:"assistant",content:n}],tokensUsed:Uk(a.usage)}}catch(a){throw a instanceof Su.default.APIError&&console.error(`Anthropic Prompt failed with error ${a.name} and status: ${a.status}`),a}}async*chatCompletionStream(r){try{let a=await this.chatCompletion(r);if(a.messages.length>0){let n=a.messages[a.messages.length-1];n.content&&(yield{type:"content",content:n.content})}yield{type:"done",messages:a.messages,tokensUsed:a.tokensUsed}}catch(a){yield{type:"error",content:a.message}}}};var hI=require("zod"),AI=require("openai/helpers/zod");var gI=require("openai"),so=class extends Ue{getClient(t){if(!t.apiKey)throw new Error("No Azure OpenAI API key found");if(!t.model)throw new Error("No Azure OpenAI model specified");return new gI.AzureOpenAI({apiKey:t.apiKey,apiVersion:"2024-10-01-preview",baseURL:t.baseUrl})}};var bI="gpt-5-mini",qk={OpenAI:Ue,TogetherAI:Ue,AzureOpenAI:so,Custom:Ue,Anthropic:oo,BudibaseAI:no};async function Dk(){return await Pa.tracer.trace("getAIConfig",async e=>{let t={type:yI.ConfigType.AI,config:{}};if(!Ze.context.isSelfHostUsingCloud()){let a=await Ze.configs.getAIConfig();a&&(t=a)}await bs(t);let r=Object.values(t.config).find(a=>a.active&&a.isDefault);if(!r){e.addTags({enabled:!1,reason:"no provider found"});return}return e.addTags({enabled:!0}),{provider:r.provider,model:r.defaultModel||bI,apiKey:r.apiKey,baseUrl:r.baseUrl}})}async function Nk(){return Pa.tracer.trace("getSelfHostOpenAIKeyConfig",e=>{if(!Ze.env.SELF_HOSTED){e.addTags({enabled:!1,reason:"not self host"});return}if(!Ze.env.OPENAI_API_KEY){e.addTags({enabled:!1,reason:"no OPENAI_API_KEY"});return}return e.addTags({enabled:!0}),{provider:"OpenAI",model:bI,apiKey:Ze.env.OPENAI_API_KEY}})}async function wu(){return Pa.tracer.trace("getLLMConfig",async()=>await Dk()||await Nk())}async function Ua(e){return await Pa.tracer.trace("getLLM",async t=>{let{model:r,maxTokens:a}=e||{},n=await wu();if(!n){t.addTags({enabled:!1,reason:"no config found"});return}r&&(n.model=r),a&&(n.maxTokens=a);let o=qk[n.provider];if(!o){t.addTags({enabled:!1,reason:"no provider found",provider:n.provider});return}return new o(n)})}async function II(){let e=await Ua();if(!e)throw new Ze.HTTPError("No available LLM configurations",500);return e}var K=class e{constructor(){this.messages=[];this.tools=[]}addTool(t){return this.tools.push(t),this}addTools(t){return this.tools.push(...t),this}findTool(t){return this.tools.find(r=>r.name===t)}withFormat(t){return t instanceof hI.z.ZodType?this.format=(0,AI.zodResponseFormat)(t,"key"):this.format=t,this}addMessage(t){return this.messages.push(t),this}addMessages(t){return this.messages.push(...t),this}addUserMessage(t){return this.messages.push({role:"user",content:t}),this}addSystemMessage(t){return this.messages.push({role:"system",content:t}),this}static fromRequest(t){let r=new e;return t.messages&&r.addMessages(t.messages),t.format&&r.withFormat(t.format),r}};var ut=require("zod");function to(e,t){let r=`Summarize this text:
|
|
39
|
+
${e}`,a="";if(t)switch(t){case io.SummariseLength.SHORT:a="In 1-2 concise sentences, ";break;case io.SummariseLength.MEDIUM:a="In 2-3 paragraphs, ";break;case io.SummariseLength.LONG:a="In multiple detailed paragraphs, ";break}return new K().addUserMessage(`${a}${r}.
|
|
40
|
+
Only return the summary.`)}function Bk(e,t){let r=["You are a data extraction assistant.","Extract data from the attached document/image that matches the provided schema.","The schema defines the structure where values like 'string', 'number', 'boolean' indicate the expected data types.","Extract all items that match the schema from the document.","Return the data in json format","If no matching data is found, return an empty data array."].join(`
|
|
41
41
|
|
|
42
42
|
`),n=t.startsWith("data:")?[{type:"image_url",image_url:{url:t}},{type:"text",text:r}]:[{type:"text",text:`${r}
|
|
43
43
|
|
|
44
|
-
File ID: ${t}`}],o=
|
|
44
|
+
File ID: ${t}`}],o=Mk(e),s=ut.z.object({data:ut.z.array(o)});return new K().addMessages([{role:"user",content:n}]).withFormat(s)}function Mk(e){let t={};for(let[r,a]of Object.entries(e))if(typeof a=="string")switch(a.toLowerCase()){case"string":t[r]=ut.z.string();break;case"number":t[r]=ut.z.number();break;case"boolean":t[r]=ut.z.boolean();break;default:t[r]=ut.z.string()}else t[r]=ut.z.string();return ut.z.object(t)}function du(e,t){return new K().addUserMessage(`Return the category of this text: "${e}". Based on these categories: ${t.join(", ")}. Only return the category. Do not add any extra punctuation or fix spelling mistakes. It should exactly match one of the categories. `)}function fu(e){return new K().addUserMessage(`Clean the following string: "${e}". Remove any spelling mistakes or data issues. Only return the cleaned string itself and nothing else.`)}function kk(e,t){return new K().addUserMessage(`Given the table schema:
|
|
45
45
|
${t}
|
|
46
46
|
|
|
47
47
|
Generate a SQL query for the following request:
|
|
48
48
|
${e}.
|
|
49
|
-
Only provide the SQL.`)}function
|
|
49
|
+
Only provide the SQL.`)}function Gk(e){return new K().addUserMessage(`Generate JavaScript code for the following request:
|
|
50
50
|
${e}.
|
|
51
|
-
Only provide the JS and nothing else.`)}function
|
|
52
|
-
${e}`)}function
|
|
51
|
+
Only provide the JS and nothing else.`)}function mu(e){return new K().addUserMessage(`Generate a node-cron compatible expression based on the following prompt. Return only the cron expression (without backticks), and if not possible return only 'Error generating cron' with a short explanation:
|
|
52
|
+
${e}`)}function gu(e,t){return new K().addUserMessage(`Translate the following text: "${e}" into ${t}. Only return the translation.`)}function yu(e){return new K().addUserMessage(`Return the sentiment of this text: "${e}". Only return the sentiment.`)}function hu(e){return new K().addUserMessage(`Search the web for the following: "${e}". Only return the top results.`)}function Au(e,t){let r="You do not have access to any bindings in this request.";e&&e.length>0&&(r=`The bindings you have access to are:
|
|
53
53
|
|
|
54
54
|
${e.map(({readableBinding:n})=>`- $("${n}")`).join(`
|
|
55
55
|
`)}`);let a="You do not have access to any snippets in this request.";return t.length>0&&(a=`The snippets you have access to are:
|
|
@@ -144,7 +144,7 @@ a variable, it will be provided to you as a binding.
|
|
|
144
144
|
|
|
145
145
|
${a}
|
|
146
146
|
|
|
147
|
-
${r}`)}function
|
|
147
|
+
${r}`)}function Tu(){let e=`
|
|
148
148
|
You are generating Budibase table schemas from user prompts.
|
|
149
149
|
Always return at least 2 tables, and define only one side of relationships using a link field.
|
|
150
150
|
Exclude id, created_at, and updated_at (Budibase adds them).
|
|
@@ -152,10 +152,10 @@ Include a variety of column types: text, dropdown, date, number.
|
|
|
152
152
|
Add at least one formula column, one attachment, and one multi-attachment column across the tables.
|
|
153
153
|
Budibase handles reverse relationships and many-to-many links \u2014 never define join tables or reverse fields.
|
|
154
154
|
You may specify foreignColumnName, but do not create that field manually.
|
|
155
|
-
`;return new K().addSystemMessage(e)}function
|
|
155
|
+
`;return new K().addSystemMessage(e)}function Eu(){let e='Given the generated schema, add only one field of type "AI" to relevant tables to add value to the Budibase user.';return new K().addSystemMessage(e)}function Ru(){let e=`
|
|
156
156
|
For each table, populate the data field with realistic-looking sample records.
|
|
157
157
|
Avoid placeholder values like "foo" or "bar". Use real names, emails, etc., and ensure values are unique across rows.
|
|
158
|
-
`;return new K().addSystemMessage(e)}function
|
|
158
|
+
`;return new K().addSystemMessage(e)}function Fk(e){return`You are a helpful support agent who uses workflows to resolve user issues efficiently.
|
|
159
159
|
|
|
160
160
|
- The user will ask support queries.
|
|
161
161
|
- Your replies MUST be short, concise, and directly answer the user's question as quickly and clearly as possible.
|
|
@@ -170,15 +170,15 @@ Avoid placeholder values like "foo" or "bar". Use real names, emails, etc., and
|
|
|
170
170
|
|
|
171
171
|
\`\`\`
|
|
172
172
|
${JSON.stringify(e)}
|
|
173
|
-
\`\`\``}function
|
|
173
|
+
\`\`\``}function Qk(){return`You will be provided with a set of history, a conversation between a user and an AI. Using this
|
|
174
174
|
information generate a title for the conversation, this should start with a capital letter and MUST be
|
|
175
|
-
less than five words.`}var qa=require("@budibase/backend-core"),
|
|
175
|
+
less than five words.`}var qa=require("@budibase/backend-core"),TI=require("@budibase/shared-core");var pt=require("@budibase/types"),SI=require("@budibase/backend-core");function vu(e){let t=[],r=[];for(let a of e.tables){let n=a.schema.reduce((o,s)=>{if(s.type===pt.FieldType.LINK){if(!r.includes(s.relationshipId)){let i={[pt.RelationshipType.MANY_TO_ONE]:pt.RelationshipType.ONE_TO_MANY,[pt.RelationshipType.ONE_TO_MANY]:pt.RelationshipType.MANY_TO_ONE,[pt.RelationshipType.MANY_TO_MANY]:pt.RelationshipType.MANY_TO_MANY},{reverseFieldName:p,relationshipId:f,...m}=s;o[s.name]={...m,fieldName:p,relationshipType:i[s.relationshipType]},r.push(f)}}else o[s.name]=s;return o},{});t.push({_id:SI.docIds.generateTableID(),name:a.name,primaryDisplay:a.primaryDisplay,schema:n})}return t}function _u(e,t){let r=[];for(let a of e)r.push({...a,schema:{...a.schema,...t[a.name]?.reduce((n,o)=>(n[o.name]=o,n),{})}});return r}var T=require("@budibase/types"),A=require("zod"),de=A.z.object({name:A.z.string().describe("A human readable name for the field. It MUST be alpha-numeric and capitalised.")}),xu=de.extend({type:A.z.literal(T.FieldType.LINK),tableId:A.z.string().describe("This must match one of the generated table names"),reverseFieldName:A.z.string().describe("Only the *name* of the field that will appear in the foreign table. Budibase creates this automatically. Do not define the column yourself."),relationshipId:A.z.string().describe("The ID of the relationship. It must be used in pairs, paring many-to-ones and one-to-manys, or many-to-manys with each other.")}),jk=A.z.array(A.z.union([de.extend({type:A.z.enum([T.FieldType.STRING,T.FieldType.NUMBER,T.FieldType.BOOLEAN,T.FieldType.LONGFORM]),constraints:A.z.object({presence:A.z.boolean()}).optional().nullable()}),xu.extend({relationshipType:A.z.enum([T.RelationshipType.MANY_TO_ONE])}).describe("Many-to-one relationship, where the current table is the 'many' side. Defines the initiating side of the relationship. Only this side should be defined. The reverse column will be created automatically."),xu.extend({relationshipType:A.z.enum([T.RelationshipType.ONE_TO_MANY])}).describe("One-to-many relationship, where the current table is the 'one' side. Defines the initiating side of the relationship. Only this side should be defined. The reverse column will be created automatically."),xu.extend({relationshipType:A.z.enum([T.RelationshipType.MANY_TO_MANY])}).describe("Many to many relationship. Defines the initiating side of the relationship. Only this side should be defined. The reverse column will be created automatically."),de.extend({type:A.z.literal(T.FieldType.OPTIONS),constraints:A.z.object({inclusion:A.z.array(A.z.string()).describe("The options for the field"),presence:A.z.boolean()})}).describe("A single option from closed set of options"),de.extend({type:A.z.literal(T.FieldType.ARRAY),constraints:A.z.object({inclusion:A.z.array(A.z.string()).describe("The options for the field"),presence:A.z.boolean(),type:A.z.literal(T.JsonFieldSubType.ARRAY)}).describe("Multiple selected options from closed set of options")}),de.extend({type:A.z.literal(T.FieldType.FORMULA),formula:A.z.string().describe(`
|
|
176
176
|
A JavaScript expression using only previously defined fields.
|
|
177
177
|
Reference fields using $("Field name"). Must end with: return ...
|
|
178
178
|
Example: return $("Score") + $("Weight")
|
|
179
|
-
`),responseType:A.z.enum([T.FieldType.STRING,T.FieldType.NUMBER,T.FieldType.BOOLEAN,T.FieldType.DATETIME])}).describe("Define these types after the other types"),
|
|
179
|
+
`),responseType:A.z.enum([T.FieldType.STRING,T.FieldType.NUMBER,T.FieldType.BOOLEAN,T.FieldType.DATETIME])}).describe("Define these types after the other types"),de.extend({type:A.z.literal(T.FieldType.DATETIME),ignoreTimezones:A.z.boolean()}).describe("A datetime field, storing date and time"),de.extend({type:A.z.literal(T.FieldType.DATETIME),ignoreTimezones:A.z.boolean(),timeOnly:A.z.literal(!0)}).describe("A time only field"),de.extend({type:A.z.literal(T.FieldType.DATETIME),ignoreTimezones:A.z.boolean(),dateOnly:A.z.literal(!0)}).describe("A date only field"),de.extend({type:A.z.literal(T.FieldType.ATTACHMENT_SINGLE),subtype:A.z.literal(T.AttachmentSubType.IMAGE)}).describe("Single image column"),de.extend({type:A.z.literal(T.FieldType.ATTACHMENT_SINGLE)}).describe("Single attachment column. It stores a single document: pdf, word, etc. Use an appropriate name for the column, like 'Invoice', 'Document', etc."),de.extend({type:A.z.literal(T.FieldType.ATTACHMENTS),subtype:A.z.literal(T.AttachmentSubType.IMAGE)}).describe("Multiple images column. Use an appropiate name for the columns, like 'Gallery', 'Photos', etc."),de.extend({type:A.z.literal(T.FieldType.ATTACHMENTS)}).describe("Multiple attachments column. It might hold different kind of documents mixed up: pdf, txt, etc. Use an appropiate name for the columns, like 'Invoices', 'Documents', 'Attachments', etc.")])),Cu=A.z.object({tables:A.z.array(A.z.object({name:A.z.string(),schema:jk,primaryDisplay:A.z.string().describe("The column will be used as display, so pick the clearer option. This must match EXACTLY one of the created fields names in the schema.")}))});function Ou(e){let t=A.z.object({});for(let r of e){let a=Object.values(r.schema),n=[de.extend({type:A.z.literal(T.FieldType.AI),operation:A.z.literal(T.AIOperationEnum.TRANSLATE),column:A.z.enum(a.filter(o=>[T.FieldType.STRING,T.FieldType.LONGFORM].includes(o.type)).map(o=>o.name)).describe("The columns to translate"),language:A.z.string()}).describe("This column will be autogenerated via AI to translate one column. Use it for reasonable cases, like translating descriptions or similar."),de.extend({type:A.z.literal(T.FieldType.AI),operation:A.z.literal(T.AIOperationEnum.CATEGORISE_TEXT),columns:A.z.array(A.z.enum(a.filter(o=>[T.FieldType.STRING,T.FieldType.LONGFORM,T.FieldType.BOOLEAN,T.FieldType.NUMBER,T.FieldType.DATETIME].includes(o.type)).map(o=>o.name))).describe("The columns to be used as context"),categories:A.z.string().describe("CSV list of categories")}).describe("This column will be autogenerated via AI to categorise a row based on one or many columns.")];a.some(o=>o.type===T.FieldType.LONGFORM)&&n.push(de.extend({type:A.z.literal(T.FieldType.AI),operation:A.z.literal(T.AIOperationEnum.SUMMARISE_TEXT),columns:A.z.array(A.z.enum(a.filter(o=>[T.FieldType.STRING,T.FieldType.LONGFORM].includes(o.type)).map(o=>o.name))).describe("Columns, from the current table, to be passed in the context. Use at least one.")}).describe("This column will be autogenerated via AI to summarise one or many columns.")),t=t.extend({[r.name]:A.z.array(A.z.union(n))})}return t}var G=require("zod"),wI=require("@budibase/shared-core"),D=require("@budibase/types");function Lu(e){let t=G.z.object({});for(let r of e){let a={_id:G.z.string().describe("Unique ID for the row")},n=G.z.union([G.z.literal("https://picsum.photos/600/600").describe("For profile pictures and similar"),G.z.literal("https://picsum.photos/1920/1080").describe("For anything else")]),o=G.z.object({fileName:G.z.string(),extension:G.z.enum([".pdf",".txt"]),content:G.z.string().describe("Random content for the file")});for(let s of Object.values(r.schema)){let{type:i}=s;switch(i){case D.FieldType.STRING:case D.FieldType.LONGFORM:a[s.name]=G.z.string();break;case D.FieldType.NUMBER:case D.FieldType.BIGINT:a[s.name]=G.z.number();break;case D.FieldType.BOOLEAN:a[s.name]=G.z.boolean();break;case D.FieldType.DATETIME:a[s.name]=G.z.string().describe(`ISO datetime. Use realistic dates, based on today's date, ${new Date().toISOString()}`);break;case D.FieldType.ATTACHMENT_SINGLE:s.subtype===D.AttachmentSubType.IMAGE?a[s.name]=n:a[s.name]=o;break;case D.FieldType.ATTACHMENTS:s.subtype===D.AttachmentSubType.IMAGE?a[s.name]=G.z.array(n):a[s.name]=G.z.array(o),a[s.name]=a[s.name].describe("Between 2 and 5 items.");break;case D.FieldType.OPTIONS:a[s.name]=G.z.enum(s.constraints.inclusion);break;case D.FieldType.LINK:{let p=G.z.string().describe(`Match one of the _ids created for table "${s.tableId}"`);s.relationshipType===D.RelationshipType.ONE_TO_MANY?a[s.name]=G.z.array(p).describe("Array with a single item"):s.relationshipType===D.RelationshipType.MANY_TO_MANY&&(a[s.name]=G.z.array(p).describe("Array with a one or many items. You can repeat the same ids between rows"))}break;case D.FieldType.ARRAY:a[s.name]=G.z.array(G.z.enum(s.constraints.inclusion));break;case D.FieldType.AI:case D.FieldType.AUTO:case D.FieldType.SIGNATURE_SINGLE:case D.FieldType.BB_REFERENCE:case D.FieldType.JSON:case D.FieldType.FORMULA:case D.FieldType.INTERNAL:case D.FieldType.BARCODEQR:case D.FieldType.BB_REFERENCE_SINGLE:break;default:throw wI.utils.unreachable(i)}}t=t.extend({[r.name]:G.z.array(G.z.object(a))}).describe(`Each table should include at least a few items (min 3, max 18). The number of items should not be evenly distributed. Instead, follow natural relationships and usage patterns based on the tables nature. For example:
|
|
180
180
|
1. If we have posts and comments, there should be more posts than users, and more comments than posts.
|
|
181
181
|
2. If it's a ticketing system, there may be more tickets than users, and some users may have submitted several tickets.
|
|
182
182
|
3. In a CRM, there are fewer users than customers, and customers may have many deals.
|
|
183
|
-
4. In a project management tool, projects might have many tasks, and tasks might have multiple comments.`)}return t}var Da=P(require("dd-trace")),
|
|
184
|
-
"${t}"`).withFormat(
|
|
183
|
+
4. In a project management tool, projects might have many tasks, and tasks might have multiple comments.`)}return t}var Da=P(require("dd-trace")),Pu=class e{constructor(t,r){this.llmFunctions={getTableStructure:async t=>Da.default.trace("llm.getTableStructure",async()=>{let r=await this.llm.prompt(Tu().addUserMessage(t).withFormat(Cu));try{let a=JSON.parse(r.message);return vu(a)}catch{throw new qa.HTTPError("Error generating tables",500)}}),generateAIColumns:(t,r)=>Da.default.trace("llm.generateAIColumns",async()=>this.generateAIColumns(t,r)),generateData:async(t,r)=>Da.default.trace("llm.generateData",async()=>{let a=await this.llm.prompt(Ru().addUserMessage(t).withFormat(Lu(r)));try{return JSON.parse(a.message)}catch{throw new qa.HTTPError("Error generating data",500)}})};this.llm=t,this.delegates=r}static async init(t){let r=await Ua({model:"gpt-5-mini",maxTokens:5e3});if(!r)throw new qa.HTTPError("LLM not available",422);return new e(r,t)}async generate(t,r){return Da.default.trace("tableGeneration.generate",async a=>{let n=await this.generateTables(t,r);return a.addTags({table_count:n.length}),n})}async generateTables(t,r){let a=await this.llmFunctions.getTableStructure(t),n=this.llmFunctions.generateAIColumns(t,a).then(i=>this.delegates.generateTablesDelegate(_u(a,i))),o=await this.llmFunctions.generateData(t,a),s=await n;return await this.delegates.generateDataDelegate(o,r,TI.utils.toMap("name",a)),s}async generateAIColumns(t,r){let a=await this.llm.prompt(Eu().addUserMessage(`This is the initial user prompt that generated the given schema:
|
|
184
|
+
"${t}"`).withFormat(Ou(r)));try{return JSON.parse(a.message)}catch{throw new qa.HTTPError("Error generating columns",500)}}};0&&(module.exports={Method,ai,api,auditLogs,automations,backups,branding,constants,environmentVariables,features,groups,init,licensing,logger,mappers,middleware,plugins,publicApi,quotas,scimGroups,scimUsers,sdk,users,utils});
|
|
@@ -33,6 +33,15 @@ declare const pkg: {
|
|
|
33
33
|
getAppBackup: (backupId: string) => Promise<Promise<import("@budibase/types").AppBackup>>;
|
|
34
34
|
updateAppBackup: (backupId: string, backupName: string) => Promise<Promise<import("@budibase/types").PutResponse>>;
|
|
35
35
|
deleteAppBackup: (backupId: string) => Promise<Promise<void>>;
|
|
36
|
+
deleteAppBackups: (backupIds: string[]) => Promise<Promise<({
|
|
37
|
+
backupId: string;
|
|
38
|
+
success: boolean;
|
|
39
|
+
error?: undefined;
|
|
40
|
+
} | {
|
|
41
|
+
backupId: string;
|
|
42
|
+
success: boolean;
|
|
43
|
+
error: string;
|
|
44
|
+
})[]>>;
|
|
36
45
|
trackBackupError: (appId: string, backupId: string, error: string) => Promise<Promise<void>>;
|
|
37
46
|
};
|
|
38
47
|
export default pkg;
|
|
@@ -32,6 +32,15 @@ declare const _default: {
|
|
|
32
32
|
getAppBackup: (backupId: string) => Promise<Promise<import("packages/types/dist").AppBackup>>;
|
|
33
33
|
updateAppBackup: (backupId: string, backupName: string) => Promise<Promise<import("packages/types/dist").PutResponse>>;
|
|
34
34
|
deleteAppBackup: (backupId: string) => Promise<Promise<void>>;
|
|
35
|
+
deleteAppBackups: (backupIds: string[]) => Promise<Promise<({
|
|
36
|
+
backupId: string;
|
|
37
|
+
success: boolean;
|
|
38
|
+
error?: undefined;
|
|
39
|
+
} | {
|
|
40
|
+
backupId: string;
|
|
41
|
+
success: boolean;
|
|
42
|
+
error: string;
|
|
43
|
+
})[]>>;
|
|
35
44
|
trackBackupError: (appId: string, backupId: string, error: string) => Promise<Promise<void>>;
|
|
36
45
|
};
|
|
37
46
|
export default _default;
|
package/package.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"dist"
|
|
5
5
|
],
|
|
6
6
|
"license": "UNLICENSED",
|
|
7
|
-
"version": "3.
|
|
7
|
+
"version": "3.16.0",
|
|
8
8
|
"description": "Budibase Pro (Backend)",
|
|
9
9
|
"main": "dist/index.js",
|
|
10
10
|
"types": "dist/index.d.ts",
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
"lru-cache": "^7.14.1",
|
|
27
27
|
"memorystream": "^0.3.1",
|
|
28
28
|
"node-fetch": "2.6.7",
|
|
29
|
-
"openai": "
|
|
29
|
+
"openai": "5.12.1",
|
|
30
30
|
"scim-patch": "^0.8.1",
|
|
31
31
|
"scim2-parse-filter": "^0.2.8",
|
|
32
32
|
"zod": "^3.23.8"
|
|
@@ -73,5 +73,5 @@
|
|
|
73
73
|
}
|
|
74
74
|
}
|
|
75
75
|
},
|
|
76
|
-
"gitHead": "
|
|
76
|
+
"gitHead": "d20f1f44d10db8eb79d7b7e47c670f3fce502547"
|
|
77
77
|
}
|