@budibase/cli 3.39.32 → 3.40.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -4431,7 +4431,7 @@ $1`)};iae.parseAttributes=s(function(e){return Object.keys(e).map(function(r){va
4431
4431
  if (doc._id.startsWith("devinfo") && doc.apiKey) {
4432
4432
  emit(doc.apiKey, doc.userId)
4433
4433
  }
4434
- }`;await Kpe(t,e,"by_api_key")},"createApiKeyView");async function b$e(t,e,r,n,i){try{return await r.query(`database/${t}`,e)}catch(o){let a=o&&o.name==="not_found",u=o&&o.status===404;if(a||u)return await ces(r,t),await n(),b$e(t,e,r,n,i);if(o.status===409)return b$e(t,e,r,n,i);throw o}}s(b$e,"queryViewRaw");var hes=s(async(t,e,r,n,i)=>{let u=(await b$e(t,e,r,n,i)).rows.map(c=>e.include_docs?c.doc:c.value);return i?.arrayResponse?u:u.length<=1?u[0]:u},"queryView");var pes={by_email2:les,by_api_key:des,by_app:fes},Jpe=s(async(t,e,r,n)=>{r||(r=lp());let i=pes[t];return hes(t,e,r,i,n)},"queryGlobalView");ur();var ges=ge(require("pouchdb"));var mes=require("dd-trace");var dpr=ge(require("node-fetch"));ur();var N$e=_3.removeKeyNumbering;function r1(t){return t==null||t===""}s(r1,"isEmpty");var lpr=class t{static{s(this,"QueryBuilder")}#e;#r;#t;#i;#s;#n;#c;#o;#a;#u;#l;#f=!1;#d;static{this.maxLimit=200}constructor(e,r,n){this.#e=e,this.#r=r,this.#t={allOr:!1,onEmptyFilter:"all",string:{},fuzzy:{},range:{},equal:{},notEqual:{},empty:{},notEmpty:{},oneOf:{},notOneOf:{},contains:{},notContains:{},containsAny:{},...n},this.#i=50,this.#c="ascending",this.#o="string",this.#a=!0}disableEscaping(){return this.#f=!0,this}setIndexBuilder(e){return this.#l=e,this}setVersion(e){return e!=null&&(this.#u=e),this}setTable(e){return this.#t.equal.tableId=e,this}setLimit(e){return e!=null&&(this.#i=e),this}setSort(e){return e!=null&&(this.#s=e),this}setSortOrder(e){return e!=null&&(this.#c=e),this}setSortType(e){return e!=null&&(this.#o=e),this}setBookmark(e){return e!=null&&(this.#n=e),this}setSkip(e){return this.#d=e,this}excludeDocs(){return this.#a=!1,this}includeDocs(){return this.#a=!0,this}addString(e,r){return this.#t.string[e]=r,this}addFuzzy(e,r){return this.#t.fuzzy[e]=r,this}addRange(e,r,n){return this.#t.range[e]={low:r,high:n},this}addEqual(e,r){return this.#t.equal[e]=r,this}addNotEqual(e,r){return this.#t.notEqual[e]=r,this}addEmpty(e,r){return this.#t.empty[e]=r,this}addNotEmpty(e,r){return this.#t.notEmpty[e]=r,this}addOneOf(e,r){return this.#t.oneOf[e]=r,this}addNotOneOf(e,r){return this.#t.notOneOf[e]=r,this}addContains(e,r){return this.#t.contains[e]=r,this}addNotContains(e,r){return this.#t.notContains[e]=r,this}addContainsAny(e,r){return this.#t.containsAny[e]=r,this}setAllOr(){this.#t.allOr=!0}setOnEmptyFilter(e){this.#t.onEmptyFilter=e}handleSpaces(e){return this.#f?e:e.replace(/ /g,"_")}preprocess(e,{escape:r,lowercase:n,wrap:i,type:o}={}){let a=!!this.#u,u=typeof e;return e&&n&&(e=e.toLowerCase?e.toLowerCase():e),!this.#f&&r&&u==="string"&&(e=`${e}`.replace(/[ /#+\-&|!(){}\]^"~*?:\\]/g,"\\$&")),u==="string"&&!isNaN(e)&&!o?e=`"${e}"`:a&&i&&(e=u==="number"?e:`"${e}"`),e}isMultiCondition(){let e=0;for(let r of Object.values(this.#t))typeof r=="object"&&(e+=Object.keys(r).length);return e>1}compressFilters(e){let r={};for(let o of Object.keys(e)){let a=N$e(o);r[a]?r[a]=r[a].concat(e[o]):r[a]=e[o]}let n={},i=1;for(let[o,a]of Object.entries(r))n[`${i++}:${o}`]=a;return n}buildSearchQuery(){let e=this,r=this.#t&&this.#t.allOr,n=r?"":"*:*",i=!0,o={escape:!0,lowercase:!0,wrap:!0},a="";this.#t.equal.tableId&&(a=this.#t.equal.tableId,delete this.#t.equal.tableId);let u=s((S,b)=>r1(b)?null:`${S}:${e.preprocess(b,o)}`,"equal"),c=s((S,b,C="AND")=>{if(r1(b))return null;if(!Array.isArray(b))return`${S}:${b}`;let B=`${e.preprocess(b[0],{escape:!0})}`;for(let k=1;k<b.length;k++)B+=` ${C} ${e.preprocess(b[k],{escape:!0})}`;return`${S}:(${B})`},"contains"),l=s((S,b)=>r1(b)?null:(b=e.preprocess(b,{escape:!0,lowercase:!0,type:"fuzzy"}),`${S}:/.*${b}.*/`),"fuzzy"),f=s((S,b)=>{let C=r?"*:* AND ":"",B=r?"AND":void 0;return C+"NOT "+c(S,b,B)},"notContains"),d=s((S,b)=>c(S,b,"OR"),"containsAny"),m=s((S,b)=>{if(r1(b))return"*:*";if(!Array.isArray(b))if(typeof b=="string")b=b.split(",");else return"";let C=`${e.preprocess(b[0],o)}`;for(let B=1;B<b.length;B++)C+=` OR ${e.preprocess(b[B],o)}`;return`${S}:(${C})`},"oneOf"),A=s((S,b)=>{if(r1(b))return null;if(!Array.isArray(b))if(typeof b=="string")b=b.split(",");else return"";let C=`${e.preprocess(b[0],o)}`;for(let B=1;B<b.length;B++)C+=` OR ${e.preprocess(b[B],o)}`;return`(*:* -${S}:(${C}))`},"notOneOf");function T(S,b,C){let B="";for(let[k,P]of Object.entries(S)){k=N$e(k),k=e.preprocess(e.handleSpaces(k),{escape:!0});let x=b(k,P);if(x!=null){if(B.length>0||n.length>0){let V=C?.mode?C.mode:r?"OR":"AND";B+=` ${V} `}B+=x,(typeof P!="string"&&P!=null||typeof P=="string"&&P!==a&&P!=="")&&(i=!1)}}if(C?.returnBuilt)return B;n+=B}if(s(T,"build"),this.#t.string&&T(this.#t.string,(S,b)=>r1(b)?null:(b=e.preprocess(b,{escape:!0,lowercase:!0,type:"string"}),`${S}:${b}*`)),this.#t.range&&T(this.#t.range,(S,b)=>{if(r1(b)||b.low==null||b.low===""||b.high==null||b.high==="")return null;let C=e.preprocess(b.low,o),B=e.preprocess(b.high,o);return`${S}:[${C} TO ${B}]`}),this.#t.fuzzy&&T(this.#t.fuzzy,l),this.#t.equal&&T(this.#t.equal,u),this.#t.notEqual&&T(this.#t.notEqual,(S,b)=>r1(b)?null:typeof b=="boolean"?`(*:* AND !${S}:${b})`:`!${S}:${e.preprocess(b,o)}`),this.#t.empty&&T(this.#t.empty,S=>(i=!1,`(*:* -${S}:["" TO *])`)),this.#t.notEmpty&&T(this.#t.notEmpty,S=>(i=!1,`${S}:["" TO *]`)),this.#t.oneOf&&T(this.#t.oneOf,m),this.#t.notOneOf&&T(this.#t.notOneOf,A),this.#t.contains&&T(this.#t.contains,c),this.#t.notContains&&T(this.compressFilters(this.#t.notContains),f),this.#t.containsAny&&T(this.#t.containsAny,d),a&&(n=this.isMultiCondition()?`(${n})`:n,r=!1,T({tableId:a},u)),i){if(this.#t.onEmptyFilter==="none")return"";if(this.#t?.allOr)return n.replace("()","(*:*)")}return n}buildSearchBody(){let e={q:this.buildSearchQuery(),limit:Math.min(this.#i,t.maxLimit),include_docs:this.#a};if(this.#n&&(e.bookmark=this.#n),this.#s){let r=this.#c==="descending"?"-":"",n=`<${this.#o}>`;e.sort=`${r}${this.handleSpaces(this.#s)}${n}`}return e}async run(){return this.#d&&await this.#p(this.#d),await this.#m()}async#p(e){let r=this.#a,n=this.#i;this.excludeDocs();let i=e,o=0;do{let a=Math.min(t.maxLimit,i);this.setLimit(a);let{bookmark:u,rows:c}=await this.#m();this.setBookmark(u),o=c.length,i-=c.length}while(i>0&&o>0);this.#a=r,this.#i=n}async#m(){let{url:e,cookie:r}=QP(),n=`${e}/${this.#e}/_design/database/_search/${this.#r}`,i=this.buildSearchBody();try{return await fpr(n,i,r)}catch(o){if(o.status===404&&this.#l)return await this.#l(),await fpr(n,i,r);throw o}}};async function fpr(t,e,r){let n=await(0,dpr.default)(t,{body:JSON.stringify(e),method:"POST",headers:{Authorization:r}});if(n.status===404)throw n;let i=await n.json(),o={rows:[],totalRows:0};return i.rows!=null&&i.rows.length>0&&(o.rows=i.rows.map(a=>a.doc)),i.bookmark&&(o.bookmark=i.bookmark),i.total_rows&&(o.totalRows=i.total_rows),o}s(fpr,"runQuery");ur();var U7={};Fi(U7,{addTenantToUrl:()=>_es,getTenantDB:()=>hpr,getTenantIDFromCtx:()=>O$e,isUserInWorkspaceTenant:()=>Ees});function hpr(t){return G0(nK(t))}s(hpr,"getTenantDB");ur();function _es(t){let e=Hs();if(ZP()){let r=t.indexOf("?")===-1?"?":"&";t+=`${r}tenantId=${e}`}return t}s(_es,"addTenantToUrl");var Ees=s((t,e)=>{let r;return e?r=e.tenantId||uh:r=Hs(),(Y3(t)||uh)===r},"isUserInWorkspaceTenant"),yes=Object.values(W9),O$e=s((t,e)=>{if(!ZP())return uh;e.allowNoTenant===void 0&&(e.allowNoTenant=!1),e.includeStrategies||(e.includeStrategies=yes),e.excludeStrategies||(e.excludeStrategies=[]);let r=s(n=>{if(e.excludeStrategies?.includes(n))return!1;if(e.includeStrategies?.includes(n))return!0},"isAllowed");if(r("user")){let n=t.user?.tenantId;if(n)return n}if(r("header")){let n=t.request.headers["x-budibase-tenant-id"];if(n)return n}if(r("query")){let n=t.request.query.tenantId;if(n)return n}if(r("subdomain")){let n;try{n=new URL(gHe()).host.split(":")[0]}catch(o){if(o.code!=="ERR_INVALID_URL")throw o}let i=t.host;if(n&&i.includes(n)){let o=i.substring(0,i.indexOf(`.${n}`));if(o)return o}}if(r("path")){let n=t.matched.find(a=>!!a.paramNames.find(u=>u.name==="tenantId")),i=t.originalUrl,o;if(i.includes("?")?o=i.split("?")[0]:o=i,n){let a=n.params(o,n.captures(o),{});if(a.tenantId)return a.tenantId}}e.allowNoTenant||t.throw(403,"Tenant id not set")},"getTenantIDFromCtx");ur();var Xpe={milliseconds:1,seconds:1e3,minutes:60*1e3,hours:3600*1e3,days:1440*60*1e3},_h=class t{constructor(e){this.ms=e}static{s(this,"Duration")}to(e){return this.ms/Xpe[e]}toMs(){return this.ms}toSeconds(){return this.to("seconds")}static convert(e,r,n){return n*Xpe[e]/Xpe[r]}static from(e,r){return new t(r*Xpe[e])}static fromSeconds(e){return t.from("seconds",e)}static fromMinutes(e){return t.from("minutes",e)}static fromHours(e){return t.from("hours",e)}static fromDays(e){return t.from("days",e)}static fromMilliseconds(e){return t.from("milliseconds",e)}};function ppr(){let t=_h.fromDays(7).toSeconds();if(!dt.SESSION_EXPIRY_SECONDS)return t;let e=parseInt(dt.SESSION_EXPIRY_SECONDS);return Number.isFinite(e)&&e>0?e:t}s(ppr,"getSessionExpirySeconds");var ahu="app_";function gpr(t){return new Promise(e=>setTimeout(e,t))}s(gpr,"timeout");function mpr(t){return!!sUt[t]}s(mpr,"isAudited");var tIr=ge(eIr());var dZe=require("util"),hZe=ge(require("zlib"));var AAu=(0,dZe.promisify)(hZe.default.gzip),_Au=(0,dZe.promisify)(hZe.default.gunzip);var uIr=ge(require("http")),cIr=ge(require("https"));var rIr=ge(require("dns")),v1=ge(require("net"));var nIr=require("util");var nAs=["127.0.0.0/8","10.0.0.0/8","172.16.0.0/12","192.168.0.0/16","169.254.0.0/16","0.0.0.0/8","::1/128","fc00::/7","fe80::/10"],gZe,iAs=(0,nIr.promisify)(rIr.default.lookup);function iIr(){return!(dt.SELF_HOSTED&&dt.BLACKLIST_IPS!==void 0)}s(iIr,"shouldApplyDefaultBlacklist");function mZe(t){return v1.default.isIP(t)===6?"ipv6":"ipv4"}s(mZe,"getIpVersion");function sAs(t){let e=v1.default.isIP(t);return e===4?32:e===6?128:null}s(sAs,"getMaxPrefixLength");function oAs(t,e){if(!/^\d+$/.test(e))return null;let r=Number.parseInt(e,10),n=sAs(t);return n==null||r>n?null:r}s(oAs,"getValidSubnetPrefix");function aAs(t){return v1.default.isIP(t)?t:(/^https?:\/\//.test(t)||(t=`https://${t}`),new URL(t).hostname.replace(/^\[|\]$/g,""))}s(aAs,"parseAddress");async function sIr(t){return t=aAs(t),(await iAs(t,{all:!0})).map(r=>r.address)}s(sIr,"lookup");async function AZe(t){return v1.default.isIP(t)?[t]:sIr(t)}s(AZe,"resolveAddress");function pZe(t,e){let r=e.trim();if(!r)return;let n=r.split("/");if(n.length>2){console.log(`Ignoring invalid blacklist entry: ${r}`);return}let[i,o]=n,a=v1.default.isIP(i);if(n.length===2){let u=oAs(i,o);if(a&&u!==null){t.addSubnet(i,u,mZe(i));return}console.log(`Ignoring invalid blacklist entry: ${r}`);return}a&&t.addAddress(i,mZe(i))}s(pZe,"addEntryToBlacklist");async function uAs(){let t=new v1.default.BlockList;if(iIr())for(let r of nAs)pZe(t,r);let e=dt.BLACKLIST_IPS?.split(",")||[];for(let r of e){let n=r.trim();if(!n)continue;let[i]=n.split("/");if(v1.default.isIP(i)){pZe(t,n);continue}let o=await sIr(n);for(let a of o)pZe(t,a)}gZe=t}s(uAs,"refreshBlacklist");async function oIr(t){gZe||await uAs();let e;try{e=await AZe(t)}catch(r){return r instanceof TypeError?(console.error("Black list error: could not parse address: ",t),!0):iIr()}return e.some(r=>gZe.check(r,mZe(r)))}s(oIr,"isBlacklisted");var Zme=ge(require("node-fetch"));var aIr=5,lAs=new Set(["http:","https:"]),fAs=["authorization","cookie","cookie2","proxy-authorization"];function _Ze(t){let e;try{e=new URL(t)}catch{throw new Error("Invalid URL.")}if(!lAs.has(e.protocol))throw new Error("Only HTTP(S) URLs are allowed.");if(e.username||e.password)throw new Error("URL must not include credentials.");return e}s(_Ze,"parseUrl");function dAs(t){return[301,302,303,307,308].includes(t)}s(dAs,"isRedirect");async function hAs(t){let e=_Ze(t),r=await AZe(e.hostname);if(r.length===0)throw new Error("URL is blocked or could not be resolved safely.");for(let n of r)if(await oIr(n))throw new Error("URL is blocked or could not be resolved safely.");return r[0]}s(hAs,"resolveSafePinnedIp");function pAs(t){let e=t.includes(":")?6:4;return(r,n,i)=>{if(typeof n=="object"&&n?.all){i(null,[{address:t,family:e}]);return}i(null,t,e)}}s(pAs,"createPinnedLookup");function gAs(t,e){let r=new URL(t).protocol,n=pAs(e);return r==="https:"?new cIr.default.Agent({lookup:n}):new uIr.default.Agent({lookup:n})}s(gAs,"makePinnedAgent");function mAs(t,e){let r=t.method?.toUpperCase()||"GET";return e===303||(e===301||e===302)&&r==="POST"?{...t,body:void 0,method:"GET",redirect:"manual"}:t}s(mAs,"nextRequestForRedirect");function AAs(t,e){return new URL(t).origin!==new URL(e).origin}s(AAs,"shouldStripSensitiveHeadersForRedirect");function _As(t){if(!t.headers)return t;let e=new Zme.Headers(t.headers);return fAs.forEach(r=>e.delete(r)),{...t,headers:e}}s(_As,"stripSensitiveHeadersForRedirect");function EAs(t){return!t||typeof t!="object"||!("resume"in t)?!1:typeof t.resume=="function"}s(EAs,"isResumableBody");function yAs(t){let e=t.body;EAs(e)&&e.resume()}s(yAs,"releaseResponseBody");async function GJ(t,e={},{followRedirects:r=!0,returnRedirectWithoutLocation:n=!1,fetchFn:i=Zme.default}={}){let o=t,a={...e,redirect:"manual"};for(let u=0;u<=aIr;u++){let c=await hAs(o),l;try{l=await i(o,{...a,agent:gAs(o,c)},c)}catch(m){let A=_Ze(o).hostname;throw m instanceof Error?(m.message=`Failed to connect to resolved IP for ${A}: ${m.message}`,m):new Error(`Failed to connect to resolved IP for ${A}: unknown network error`)}if(!dAs(l.status))return l;if(yAs(l),!r)throw new Error("Redirects are not permitted.");if(u===aIr)break;let f=l.headers.get("location");if(!f){if(n)return l;throw new Error("Maximum redirect reached.")}let d=_Ze(new URL(f,o).toString()).toString();a=mAs(a,l.status),AAs(o,d)&&(a=_As(a)),o=d}throw new Error("Maximum redirect reached.")}s(GJ,"fetchWithBlacklist");function TAs(t){let e="",r=-1,n,i,o=t.opts?.repeat;return o&&(i=o.endDate?new Date(o.endDate).getTime():Date.now(),n=o.tz,"cron"in o?e=o.cron:r=o.every),{id:t.id.toString(),name:"",key:t.id.toString(),tz:n,endDate:i,cron:e,every:r,next:0}}s(TAs,"jobToJobInformation");var EZe=class{static{s(this,"InMemoryQueue")}constructor(e,r){this._name=e,this._opts=r,this._messages=[],this._emitter=new lIr.default.EventEmitter,this._runCount=0,this._addCount=0,this._queuedJobIds=new Set,this._attempts=r?.defaultJobOptions?.attempts||1}async process(e,r){r=typeof e=="number"?r:e,this._emitter.on("message",async n=>{if(!n.manualTrigger&&n.opts?.repeat!=null)return;function i(){return r.length===1?r(n):new Promise((c,l)=>{r(n,s((d,m)=>{d?l(d):c(m)},"done"))})}s(i,"execute");let o=this._attempts;async function a(c,l=0){try{return await c}catch(f){if(l++,l<o&&!n._isDiscarded)return await $b.wait(100*l),await a(i(),l);throw f}}s(a,"retryFunc");try{let c=await a(i());this._emitter.emit("completed",n,c);let l=this._messages.indexOf(n);if(l===-1)throw"Failed deleting a processed message";this._messages.splice(l,1)}catch(c){console.error(c),this._emitter.emit("error",n,c)}this._runCount++;let u=n.opts?.jobId?.toString();u&&n.opts?.removeOnComplete&&this._queuedJobIds.delete(u)})}async isReady(){return this}async add(e,r){if(typeof e=="string")throw new Error("doesn't support named jobs");let n=r,i=n?.jobId?.toString();if(i&&this._queuedJobIds.has(i)){console.log(`Ignoring already queued job ${i}`);return}if(typeof e!="object")throw"Queue only supports carrying JSON.";i&&this._queuedJobIds.add(i);let o=MI(),a=s(()=>{let c={id:o,timestamp:Date.now(),queue:this,data:e,opts:n,discard:s(async()=>{c._isDiscarded=!0},"discard")};this._messages.push(c),this._messages.length>1e3&&this._messages.shift(),this._addCount++,this._emitter.emit("message",c)},"pushMessage"),u=n?.delay;return u?setTimeout(a,u):a(),{id:i,finished:s(()=>new Promise((c,l)=>{let f=s((m,A)=>{m.id===o&&(this._emitter.off("error",f),this._emitter.off("completed",d),l(A))},"errorHandler"),d=s((m,A)=>{m.id===o&&(this._emitter.off("error",f),this._emitter.off("completed",d),c(A))},"completedHandler");this._emitter.on("error",f),this._emitter.on("completed",d)}),"finished")}}async close(){}async removeRepeatableByKey(e){for(let[r,n]of this._messages.entries())if(n.id===e){this._messages.splice(r,1),this._emitter.emit("removed",n);return}}async removeJobs(e){}async clean(){return[]}async getJob(e){for(let r of this._messages)if(r.id===e)return r;return null}async getJobs(){return this._messages}manualTrigger(e){for(let r of this._messages)if(r.id===e){this._emitter.emit("message",{...r,manualTrigger:!0});return}throw new Error(`Job with id ${e} not found`)}on(e,r){return this._emitter.on(e,r),this}off(e,r){return this._emitter.off(e,r),this}async count(){return this._messages.length}async getCompletedCount(){return this._runCount}async getRepeatableJobs(){return this._messages.filter(e=>e.opts?.repeat!=null).map(e=>TAs(e))}async whenCurrentJobsFinished(){do await gpr(50);while(this.hasRunningJobs())}hasRunningJobs(){return this._addCount>this._runCount}},fIr=EZe;var wtt=ge(dNr());function hNr(t,e,r){VIs(t,e),r&&GIs(t,r)}s(hNr,"addListeners");function GIs(t,e){t.on("stalled",async r=>{if(e)await e(r);else if(r.opts.repeat){let n=r.id,i=await t.getRepeatableJobs();for(let o of i)o.id===n&&await t.removeRepeatableByKey(o.key);console.log(`jobId=${n} disabled`)}})}s(GIs,"handleStalled");function Vy(t,e,r={},n={}){let i=`[BULL] ${t}=${e}`,o=r.error,a={_logKey:"bull",eventType:t,event:e,job:r.job,jobId:r.jobId||r.job?.id,...n},u;return r.job?.data?.automation&&(u={_logKey:"automation",trigger:r.job?r.job.data.automation.definition.trigger.event:void 0}),[i,o,a,u]}s(Vy,"getLogParams");var jIs={automationQueue:"automation-event",appBackupQueue:"app-backup-event",auditLogQueue:"audit-log-event",systemEventQueue:"system-event",appMigration:"app-migration",docWritethroughQueue:"doc-writethrough",devRevertProcessorQueue:"dev-revert-event",batchUserSyncProcessorQueue:"batch-user-sync-processor",ragIngestionQueue:"rag-ingestion-processor",agentLogIndexingQueue:"agent-log-indexing-processor",escalationQueue:"escalation-processor",agentRequestTrackingQueue:"agent-request-tracking-processor",agentTestRunQueue:"agent-test-run-processor",knowledgeSourceSyncQueue:"knowledge-source-sync-processor"};function VIs(t,e){let r=jIs[e];function n(i,o){let a=i.data.event?.appId;if(a)return mHe(a,o);o()}s(n,"doInJobContext"),t.on("stalled",async i=>{await n(i,()=>{console.error(...Vy(r,"stalled",{job:i}))})}).on("error",i=>{console.error(...Vy(r,"error",{error:i}))}),process.env.NODE_DEBUG?.includes("bull")&&t.on("waiting",i=>{console.info(...Vy(r,"waiting",{jobId:i}))}).on("active",async i=>{await n(i,()=>{console.info(...Vy(r,"active",{job:i}))})}).on("progress",async(i,o)=>{await n(i,()=>{console.info(...Vy(r,"progress",{job:i},{progress:o}))})}).on("completed",async(i,o)=>{await n(i,()=>{console.info(...Vy(r,"completed",{job:i},{result:o}))})}).on("failed",async(i,o)=>{await n(i,()=>{console.error(...Vy(r,"failed",{job:i,error:o}))})}).on("paused",()=>{console.info(...Vy(r,"paused"))}).on("resumed",()=>{console.info(...Vy(r,"resumed"))}).on("cleaned",(i,o)=>{console.info(...Vy(r,"cleaned",{},{length:i.length,type:o}))}).on("drained",()=>{console.info(...Vy(r,"drained"))}).on("removed",i=>{console.info(...Vy(r,"removed",{job:i}))})}s(VIs,"logging");var HIs=[];function pNr(t,e){let r=setInterval(t,e);return HIs.push(r),r}s(pNr,"set");var iN=ge(require("dd-trace")),pX=ge(qNr());var NRs=_h.fromMinutes(5).toMs(),ORs=_h.fromSeconds(30).toMs(),Ntt=_h.fromSeconds(60).toMs(),VNr=[],GNr;async function jNr(){for(let t of VNr)await t.clean(Ntt,"completed"),await t.clean(Ntt,"failed")}s(jNr,"cleanup");async function xRs(t,e,r){let n=performance.now();try{let i=await e();return iN.default.dogstatsd.increment(`${t}.success`,1,r),i}catch(i){throw iN.default.dogstatsd.increment(`${t}.error`,1,r),i}finally{let i=performance.now()-n;iN.default.dogstatsd.distribution(`${t}.duration.ms`,i,r),iN.default.dogstatsd.increment(t,1,r)}}s(xRs,"withMetrics");function HNr(t){return{"job.opts.attempts":t.attempts,"job.opts.backoff":t.backoff,"job.opts.delay":t.delay,"job.opts.jobId":t.jobId,"job.opts.lifo":t.lifo,"job.opts.preventParsingData":t.preventParsingData,"job.opts.priority":t.priority,"job.opts.removeOnComplete":t.removeOnComplete,"job.opts.removeOnFail":t.removeOnFail,"job.opts.repeat":t.repeat,"job.opts.stackTraceLimit":t.stackTraceLimit,"job.opts.timeout":t.timeout}}s(HNr,"jobOptsTags");function vRs(t){return{"job.id":t.id,"job.attemptsMade":t.attemptsMade,"job.timestamp":t.timestamp,"job.data.sizeBytes":(0,pX.default)(t.data),...HNr(t.opts||{})}}s(vRs,"jobTags");var eU=class{static{s(this,"BudibaseQueue")}constructor(e,r={}){this.opts=r,this.jobQueue=e,this.queue=this.initQueue()}get name(){return this.queue.name}initQueue(){let r={redis:S3(),settings:{maxStalledCount:this.opts.maxStalledCount?this.opts.maxStalledCount:0,lockDuration:NRs,lockRenewTime:ORs}};this.opts.jobOptions&&(r.defaultJobOptions=this.opts.jobOptions);let n;return dt.isTest()?process.env.BULL_TEST_REDIS_PORT&&!isNaN(+process.env.BULL_TEST_REDIS_PORT)?n=new wtt.default(this.jobQueue,{...r,redis:{host:"localhost",port:+process.env.BULL_TEST_REDIS_PORT}}):n=new fIr(this.jobQueue,r):n=new wtt.default(this.jobQueue,r),hNr(n,this.jobQueue,this.opts.removeStalledCb),VNr.push(n),!GNr&&!dt.isTest()&&(GNr=pNr(jNr,Ntt),jNr().catch(i=>{console.error(`Unable to cleanup ${this.jobQueue} initially - ${i}`)})),n}getBullQueue(){return this.queue}process(...e){let r,n;e.length===2?(r=e[0],n=e[1]):n=e[0];let i=s(async(a,u)=>{await iN.default.trace("queue.process",async c=>{if(a.data._parentSpanContext){let l=a.data._parentSpanContext,f={traceId:l.traceId,spanId:l.spanId,toTraceId:s(()=>l.traceId,"toTraceId"),toSpanId:s(()=>l.spanId,"toSpanId"),toTraceparent:s(()=>"","toTraceparent")};c.addLink(f)}c.addTags({"queue.name":this.jobQueue,...vRs(a)}),this.opts.jobTags&&c.addTags(this.opts.jobTags(a.data)),iN.default.dogstatsd.distribution("queue.process.sizeBytes",(0,pX.default)(a.data),this.metricTags()),await this.withMetrics("queue.process",()=>u?n(a,u):n(a))})},"processCallback"),o;return n.length===1?o=s(a=>i(a),"wrappedCb"):o=i,r?this.queue.process(r,o):this.queue.process(o)}async add(e,r){return await iN.default.trace("queue.add",async n=>(n.addTags({"queue.name":this.jobQueue,"job.data.sizeBytes":(0,pX.default)(e),...HNr(r||{})}),this.opts.jobTags&&n.addTags(this.opts.jobTags(e)),e._parentSpanContext={traceId:n.context().toTraceId(),spanId:n.context().toSpanId()},iN.default.dogstatsd.distribution("queue.add.sizeBytes",(0,pX.default)(e),this.metricTags()),await this.withMetrics("queue.add",()=>this.queue.add(e,r))))}withMetrics(e,r){return xRs(e,r,this.metricTags())}metricTags(){return{queueName:this.jobQueue}}close(e){return this.queue.close(e)}whenCurrentJobsFinished(){return this.queue.whenCurrentJobsFinished()}};var KAe={};Fi(KAe,{getId:()=>xtt,setHeader:()=>URs});var zNr=$Ae(),URs=s(t=>{let e=zNr.getId();e&&(t["x-budibase-correlation-id"]=e)},"setHeader");function xtt(){return zNr.getId()}s(xtt,"getId");var Abe=ge(Zxr()),kJr=ge(Cst()),mpt=ge(require("dd-trace")),PJr=require("dd-trace/ext");var vJr=ge(require("path")),DJr=ge(mMr());var mbe={};Fi(mbe,{ObjectStore:()=>hT,ObjectStoreBuckets:()=>Fho,SIGNED_FILE_PREFIX:()=>apt,bucketTTLConfig:()=>cbe,budibaseTempDir:()=>CF,client3rdPartyLibrary:()=>Dpo,clientLibraryPath:()=>vpo,clientLibraryUrl:()=>Bpo,createBucketIfNotExists:()=>zte,deleteFile:()=>npo,deleteFiles:()=>ipo,deleteFolder:()=>AJr,downloadTarball:()=>opo,downloadTarballDirect:()=>spo,enrichPWAImages:()=>kpo,enrichPluginURLs:()=>Lpo,extractBucketAndPath:()=>npt,getAllFiles:()=>epo,getAppFileUrl:()=>RJr,getClientCacheKey:()=>IJr,getGlobalFileS3Key:()=>CJr,getGlobalFileUrl:()=>Ppo,getObjectMetadata:()=>apo,getPluginIconKey:()=>NJr,getPluginJSKey:()=>wJr,getPluginS3Dir:()=>xJr,getPresignedUrl:()=>bF,getReadStream:()=>lbe,getSafeRetrieveDirectoryPath:()=>mJr,listAllObjects:()=>upt,objectExists:()=>upo,processAutomationAttachment:()=>qho,processObjectStoreAttachment:()=>rJr,retrieve:()=>gJr,retrieveDirectory:()=>rpo,retrieveToTmp:()=>tpo,sanitizeBucket:()=>gm,sanitizeKey:()=>nf,streamUpload:()=>pJr,streamUploadMany:()=>Zho,upload:()=>Xho,uploadDirectory:()=>cpt});var dbe=ge(eht()),ipt=ge(V$r()),cJr=ge(W$r()),lJr=ge(aKr());var JN=ge(require("dd-trace")),aH=ge(require("fs")),Yte=ge(require("fs/promises")),fJr=ge(require("https")),EE=require("path"),hbe=ge(require("stream")),Wte=require("stream/promises"),spt=ge(J7r());zx();var opt=ge(require("zlib"));var X7r=ge(require("fs")),Z7r=require("os"),Hte=ge(require("path")),eJr=ge(require("stream"));var Fho={BACKUPS:dt.BACKUPS_BUCKET_NAME,APPS:dt.APPS_BUCKET_NAME,TEMPLATES:dt.TEMPLATES_BUCKET_NAME,GLOBAL:dt.GLOBAL_BUCKET_NAME,PLUGINS:dt.PLUGIN_BUCKET_NAME,TEMP:dt.TEMP_BUCKET_NAME},tJr=(0,Hte.join)((0,Z7r.tmpdir)(),".budibase");try{X7r.default.mkdirSync(tJr)}catch(t){if(t.code!=="EEXIST")throw t}function CF(){return tJr}s(CF,"budibaseTempDir");var cbe=s((t,e)=>{let n={Rules:[{ID:`${t}-ExpireAfter${e}days`,Prefix:"",Status:"Enabled",Expiration:{Days:e}}]};return{Bucket:t,LifecycleConfiguration:n}},"bucketTTLConfig");async function Qho(t){let e=await GJ(t.url);if(!e.ok||!e.body)throw new Error(`Unexpected response ${e.statusText}`);let r=Hte.default.basename(new URL(t.url).pathname);if(!e.body)throw new Error("No response received for attachment");if(!(e.body instanceof eJr.default.Readable))throw new Error("Unexpected response body stream type");return{filename:t.filename||r,content:e.body}}s(Qho,"processUrlAttachment");async function rJr(t){let e=npt(t.url);if(e===null)throw new Error("Invalid signed URL");let{bucket:r,path:n}=e,{stream:i}=await lbe(r,n),o=Hte.default.basename(n);return{bucket:r,path:n,filename:t.filename||o,content:i}}s(rJr,"processObjectStoreAttachment");async function qho(t){return t.url?.startsWith("http://")||t.url?.startsWith("https://")?await Qho(t):await rJr(t)}s(qho,"processAutomationAttachment");var zho=uJr(),$ho={bucketCreationPromises:{}},apt="/files/signed",eB={txt:"text/plain",html:"text/html",css:"text/css",js:"application/javascript",json:"application/json",gz:"application/gzip",svg:"image/svg+xml",form:"multipart/form-data"},Kho=[eB.html,eB.css,eB.js,eB.json];function nf(t){let e=zho(gm(t)).replace(/\\/g,"/");if(e.split("/").some(r=>r==="."||r===".."))throw new Error("Invalid object store key: path traversal is not allowed.");return e}s(nf,"sanitizeKey");function gm(t){return t.replace(new RegExp(Kb,"g"),MP)}s(gm,"sanitizeBucket");function hT(t={presigning:!1}){let e={forcePathStyle:!0,credentials:{accessKeyId:dt.MINIO_ACCESS_KEY,secretAccessKey:dt.MINIO_SECRET_KEY},region:dt.AWS_REGION};if(!dt.MINIO_ENABLED&&dt.AWS_SESSION_TOKEN&&(e.credentials={accessKeyId:dt.MINIO_ACCESS_KEY,secretAccessKey:dt.MINIO_SECRET_KEY,sessionToken:dt.AWS_SESSION_TOKEN}),dt.MINIO_URL&&(t.presigning&&dt.MINIO_ENABLED?e.endpoint="http://minio-service":e.endpoint=dt.MINIO_URL),dt.S3_IGNORE_SELF_SIGNED==="true"){let r=new fJr.default.Agent({rejectUnauthorized:!1});e.requestHandler=new lJr.NodeHttpHandler({httpsAgent:r})}return new dbe.S3(e)}s(hT,"ObjectStore");async function zte(t,e){e=gm(e);try{return await t.headBucket({Bucket:e}),{created:!1,exists:!0}}catch(r){let n=r.statusCode||r.$response?.statusCode||r.$metadata?.httpStatusCode,i=$ho.bucketCreationPromises;if(n===403)throw new Error("Access denied to object store bucket."+r);if(i[e])return await i[e],{created:!1,exists:!0};i[e]=t.createBucket({Bucket:e}).catch(o=>{if(o.Code!=="BucketAlreadyOwnedByYou"&&o.name!=="BucketAlreadyOwnedByYou")throw o});try{return await i[e],{created:!0,exists:!1}}finally{delete i[e]}}}s(zte,"createBucketIfNotExists");var Jho=s((t,e)=>{if(e)return e;let r=t.split(".").pop();return r?eB[r.toLowerCase()]:eB.txt},"resolveContentType"),dJr=s(async(t,e,r)=>{let n=gm(t),i=hT(),o=await zte(i,n);if(r.addTags({bucketCreated:o.created,bucketExists:o.exists}),e&&o.created){let a=cbe(n,e);await i.putBucketLifecycleConfiguration(a)}return{bucket:n,client:i,bucketCreated:o}},"initialiseBucket"),hJr=s(async({client:t,bucket:e,filename:r,stream:n,type:i,extra:o})=>{if(!n)throw new Error("Stream to upload is invalid/undefined");let a=Jho(r,i),u=nf(r),c={Bucket:e,Key:u,Body:n,ContentType:a,...o??{}};return{details:await new ipt.Upload({client:t,params:c}).done(),contentType:a}},"streamUploadInternal");async function Xho({bucket:t,filename:e,path:r,type:n,metadata:i,body:o,ttl:a}){let u=e.split(".").pop(),c=r?(await Yte.default.open(r)).createReadStream():o,l=hT(),f=await zte(l,t);if(a&&f.created){let S=cbe(t,a);await l.putBucketLifecycleConfiguration(S)}let d=n,m=d||(u?eB[u.toLowerCase()]:eB.txt),A={Bucket:gm(t),Key:nf(e),Body:c,ContentType:m};if(i&&typeof i=="object"){for(let S of Object.keys(i))(!i[S]||typeof i[S]!="string")&&delete i[S];A.Metadata=i}return new ipt.Upload({client:l,params:A}).done()}s(Xho,"upload");async function pJr({bucket:t,stream:e,filename:r,type:n,extra:i,ttl:o}){return await JN.default.trace("streamUpload",async a=>{a.addTags({bucketName:t,filename:r,type:n,ttl:o});let u=r.split(".").pop();a.addTags({extension:u});let{bucket:c,client:l}=await dJr(t,o,a),{details:f,contentType:d}=await hJr({client:l,bucket:c,filename:r,stream:e,type:n,extra:i}),m=await l.headObject({Bucket:c,Key:nf(r)});return a.addTags({contentType:d,contentLength:m.ContentLength}),{...f,ContentLength:m.ContentLength}})}s(pJr,"streamUpload");async function Zho({bucket:t,files:e,ttl:r}){return await JN.default.trace("streamUploadMany",async i=>{if(i.addTags({bucketName:t,ttl:r,fileCount:e.length}),!e.length)return[];let{bucket:o,client:a}=await dJr(t,r,i),u=e.map((l,f)=>({...l,index:f})),c=new Array(e.length);return await Px.parallelForeach(u,async l=>{let{details:f}=await hJr({client:a,bucket:o,filename:l.filename,stream:l.stream,type:l.type,extra:l.extra});c[l.index]=f},10),c})}s(Zho,"streamUploadMany");async function gJr(t,e){return await JN.default.trace("retrieve",async r=>{r.addTags({bucketName:t,filepath:e});let n=hT(),i={Bucket:gm(t),Key:nf(e)},o=await n.getObject(i);if(!o.Body)throw new Error("Unable to retrieve object");if(r.addTags({contentLength:o.ContentLength,contentType:o.ContentType}),Kho.includes(o.ContentType))return r.addTags({string:!0}),o.Body.transformToString();{r.addTags({string:!1});let a=o.Body.transformToWebStream();return hbe.default.Readable.fromWeb(a)}})}s(gJr,"retrieve");async function*upt(t,e){let r=hT(),n=s((a={})=>r.listObjectsV2({...a,Bucket:gm(t),Prefix:nf(e)}),"list"),i=!1,o;do{let a={};o&&(a.ContinuationToken=o);let u=await n(a);if(u.Contents)for(let c of u.Contents)yield c;i=!!u.IsTruncated,o=u.NextContinuationToken}while(i&&o)}s(upt,"listAllObjects");async function epo(t,e){let r={};return await Px.parallelForeach(upt(t,e),async n=>{if(!n.Key)throw new Error("file.Key must be defined");r[n.Key]=n},5),r}s(epo,"getAllFiles");async function bF(t,e,r=3600){let n=hT({presigning:!0}),i={Bucket:gm(t),Key:nf(e)},o=await(0,cJr.getSignedUrl)(n,new dbe.GetObjectCommand(i),{expiresIn:r});if(dt.MINIO_ENABLED){let a=new URL(o),u=a.pathname,c=a.search;return`${apt}${u}${c}`}else return o}s(bF,"getPresignedUrl");async function tpo(t,e){return await JN.default.trace("retrieveToTmp",async r=>{r.addTags({bucketName:t,filepath:e}),t=gm(t),e=nf(e);let n=await gJr(t,e),i=(0,EE.join)(CF(),Jb());return r.addTags({outputPath:i}),n instanceof hbe.default.Readable?(r.addTags({stream:!0}),await(0,Wte.pipeline)(n,aH.default.createWriteStream(i))):(r.addTags({stream:!1}),aH.default.writeFileSync(i,n)),i})}s(tpo,"retrieveToTmp");async function rpo(t,e,r){return await JN.default.trace("retrieveDirectory",async n=>{n.addTags({bucketName:t,path:e});let i=(0,EE.join)(CF(),Jb());await Yte.default.mkdir(i,{recursive:!0});let o=0;return await Px.parallelForeach(upt(t,e),async a=>{let{Key:u}=a;!u||r?.some(c=>c.test(u))||(o++,await JN.default.trace("retrieveDirectory.object",async c=>{let l=a.Key;c.addTags({filename:l});let f=mJr(i,l);if(!f){c.addTags({skippedUnsafePath:!0});return}let{stream:d}=await lbe(t,l);aH.default.existsSync(f.dir)||await Yte.default.mkdir(f.dir,{recursive:!0}),await(0,Wte.pipeline)(d,aH.default.createWriteStream(f.path,{mode:420}))}))},5),n.addTags({numObjects:o}),i})}s(rpo,"retrieveDirectory");function mJr(t,e){let r=(0,EE.resolve)(t),n=(0,EE.resolve)(r,...e.split("/"));if(n===r||n.startsWith(`${r}${EE.sep}`))return{dir:(0,EE.dirname)(n),path:n}}s(mJr,"getSafeRetrieveDirectoryPath");async function npo(t,e){let r=hT();await zte(r,t);let n={Bucket:t,Key:nf(e)};return r.deleteObject(n)}s(npo,"deleteFile");async function ipo(t,e){let r=hT();await zte(r,t);let n={Bucket:t,Delete:{Objects:e.map(i=>({Key:nf(i)}))}};return r.deleteObjects(n)}s(ipo,"deleteFiles");async function AJr(t,e){t=gm(t),e=nf(e);let r=hT(),n={Bucket:t,Prefix:e},i=await r.listObjects(n);if(i.Contents?.length===0)return;let o={Bucket:t,Delete:{Objects:[]}};if(i.Contents?.forEach(a=>{o.Delete.Objects.push({Key:a.Key})}),o.Delete.Objects.length&&(await r.deleteObjects(o)).Deleted?.length===1e3)return AJr(t,e)}s(AJr,"deleteFolder");async function cpt(t,e,r){return await JN.default.trace("uploadDirectory",async n=>{n.addTags({bucketName:t,localPath:e,bucketPath:r}),t=gm(t);let i=await Yte.default.readdir(e,{withFileTypes:!0});n.addTags({numFiles:i.length});for(let o of i){let a=nf((0,EE.join)(r,o.name)),u=(0,EE.join)(e,o.name);o.isDirectory()?await cpt(t,u,a):await pJr({bucket:t,filename:a,stream:aH.default.createReadStream(u)})}return i})}s(cpt,"uploadDirectory");async function spo(t,e,r={},{followRedirects:n=!0}={}){e=nf(e);let i=await GJ(t,{headers:r},{followRedirects:n});if(!i.ok)throw new Error(`unexpected response ${i.statusText}`);await(0,Wte.pipeline)(i.body,opt.default.createUnzip(),spt.default.extract(e))}s(spo,"downloadTarballDirect");async function opo(t,e,r){e=gm(e),r=nf(r);let n=await GJ(t);if(!n.ok)throw new Error(`unexpected response ${n.statusText}`);let i=(0,EE.join)(CF(),r);return await(0,Wte.pipeline)(n.body,opt.default.createUnzip(),spt.default.extract(i)),!dt.isTest()&&dt.SELF_HOSTED&&await cpt(e,i,r),i}s(opo,"downloadTarball");async function lbe(t,e){return await JN.default.trace("getReadStream",async r=>{t=gm(t),e=nf(e),r.addTags({bucketName:t,path:e});let n=hT(),i={Bucket:t,Key:e},o=await n.getObject(i);if(!o.Body||!(o.Body instanceof hbe.default.Readable))throw new Error("Unable to retrieve stream - invalid response");return r.addTags({contentLength:o.ContentLength,contentType:o.ContentType}),{stream:o.Body,contentLength:o.ContentLength,contentType:o.ContentType}})}s(lbe,"getReadStream");async function apo(t,e){t=gm(t),e=nf(e);let r=hT(),n={Bucket:t,Key:e};try{return await r.headObject(n)}catch{throw new Error("Unable to retrieve metadata from object")}}s(apo,"getObjectMetadata");async function upo(t,e){t=gm(t),e=nf(e);let r=hT(),n={Bucket:t,Key:e};try{return await r.headObject(n),!0}catch(i){if((i.statusCode||i.$response?.statusCode||i.$metadata?.httpStatusCode)===404)return!1;throw i}}s(upo,"objectExists");function npt(t){let e=t.split("?")[0],r=new RegExp(`^${apt}/(?<bucket>[^/]+)/(?<path>.+)$`),n=e.match(r);if(n&&n.groups){let{bucket:i,path:o}=n.groups;return{bucket:i,path:o}}return null}s(npt,"extractBucketAndPath");var SJr=ge(require("querystring"));var TJr=ge(yJr());var gbe;function Npo(){if(!dt.CLOUDFRONT_PRIVATE_KEY_64)throw new Error("CLOUDFRONT_PRIVATE_KEY_64 is not set");return gbe||(gbe=Buffer.from(dt.CLOUDFRONT_PRIVATE_KEY_64,"base64").toString("utf-8"),gbe)}s(Npo,"getPrivateKey");var Opo=s(()=>({keypairId:dt.CLOUDFRONT_PUBLIC_KEY_ID,privateKeyString:Npo(),expireTime:new Date().getTime()+1e3*60*60*24}),"getCloudfrontSignParams"),uH=s(t=>{let e=xpo(t);return TJr.getSignedUrl(e,Opo())},"getPresignedUrl"),xpo=s(t=>{let e="/";return t.startsWith("/")&&(e=""),`${dt.CLOUDFRONT_CDN}${e}${t}`},"getUrl");function vpo(t){return`${nf(t)}/budibase-client.js`}s(vpo,"clientLibraryPath");function Dpo(t,e){return`${nf(t)}/${e}`}s(Dpo,"client3rdPartyLibrary");async function Bpo(t,e){return`/api/assets/${t}/client?${await IJr(e)}`}s(Bpo,"clientLibraryUrl");async function IJr(t){let e,r;try{e=Hs()}finally{r={version:t}}return e&&e!==uh&&(r.tenantId=e),SJr.default.encode(r)}s(IJr,"getClientCacheKey");async function RJr(t){return dt.CLOUDFRONT_CDN?uH(t):await bF(dt.APPS_BUCKET_NAME,t)}s(RJr,"getAppFileUrl");async function kpo(t){if(t.length===0)return[];try{return await Promise.all(t.map(async e=>({...e,src:await RJr(e.src),type:e.type||"image/png"})))}catch(e){return console.error("Error enriching PWA images:",e),t}}s(kpo,"enrichPWAImages");var Ppo=s(async(t,e,r)=>{let n=CJr(t,e);return dt.CLOUDFRONT_CDN?(r&&(n=`${n}?etag=${r}`),uH(n)):await bF(dt.GLOBAL_BUCKET_NAME,n)},"getGlobalFileUrl"),CJr=s((t,e)=>{let r=`${t}/${e}`;return dt.MULTI_TENANCY&&(r=`${Hs()}/${r}`),r},"getGlobalFileS3Key");async function Lpo(t){return!t||!t.length?[]:await Promise.all(t.map(async e=>{let r=await Mpo(e),n=await Upo(e);return{...e,jsUrl:r,iconUrl:n}}))}s(Lpo,"enrichPluginURLs");async function Mpo(t){let e=wJr(t);return bJr(e)}s(Mpo,"getPluginJSUrl");async function Upo(t){let e=NJr(t);if(e)return bJr(e)}s(Upo,"getPluginIconUrl");async function bJr(t){return dt.CLOUDFRONT_CDN?uH(t):await bF(dt.PLUGIN_BUCKET_NAME,t)}s(bJr,"getPluginUrl");function wJr(t){return OJr(t,"plugin.min.js")}s(wJr,"getPluginJSKey");function NJr(t){let e=t.iconUrl?"icon.svg":t.iconFileName;if(e)return OJr(t,e)}s(NJr,"getPluginIconKey");function OJr(t,e){return`${xJr(t.name)}/${e}`}s(OJr,"getPluginS3Key");function xJr(t){let e=`${t}`;return dt.MULTI_TENANCY&&(e=`${Hs()}/${e}`),dt.CLOUDFRONT_CDN&&(e=`plugins/${e}`),e}s(xJr,"getPluginS3Dir");var Fpo="budibase.log",Qpo="budibase-logs-history.txt",qpo=vJr.default.join(CF(),"systemlogs");function Gpo(t){let e=/(\d+)([A-Za-z])/,r=t?.match(e);if(!r){console.warn("totalMaxSize does not have a valid value",{totalMaxSize:t});return}let n=+r[1],i=r[2];if(n===1)switch(i){case"B":return{size:`${n}B`,totalHistoryFiles:1};case"K":return{size:`${n*1e3/2}B`,totalHistoryFiles:1};case"M":return{size:`${n*1e3/2}K`,totalHistoryFiles:1};case"G":return{size:`${n*1e3/2}M`,totalHistoryFiles:1};default:return}return n%2===0?{size:`${n/2}${i}`,totalHistoryFiles:1}:{size:`1${i}`,totalHistoryFiles:n-1}}s(Gpo,"getSingleFileMaxSizeInfo");function BJr(){let t=Gpo(dt.ROLLING_LOG_MAX_SIZE);return DJr.createStream(Fpo,{size:t?.size,path:qpo,maxFiles:t?.totalHistoryFiles||1,immutable:!0,history:Qpo,initialRotation:!1})}s(BJr,"localFileDestination");function Vpo(t){return typeof t=="object"&&t!==null&&!(t instanceof Error)}s(Vpo,"isPlainObject");function Hpo(t){return t instanceof Error}s(Hpo,"isError");function Ypo(t){return typeof t=="string"}s(Ypo,"isMessage");var rB;if(!dt.DISABLE_PINO_LOGGER){let t=dt.LOG_LEVEL,e={level:t,formatters:{level:s(c=>({level:c.toUpperCase()}),"level"),bindings:s(()=>dt.SELF_HOSTED?{service:dt.SERVICE_NAME}:{},"bindings")},timestamp:s(()=>`,"timestamp":"${new Date(Date.now()).toISOString()}"`,"timestamp")},r=[];r.push(dt.isDev()?{stream:(0,kJr.default)({singleLine:!0}),level:t}:{stream:process.stdout,level:t}),dt.SELF_HOSTED&&r.push({stream:BJr(),level:t}),rB=r.length?(0,Abe.default)(e,Abe.default.multistream(r)):(0,Abe.default)(e);let n=s(c=>{let l,f=[],d="";c.forEach(b=>{Ypo(b)&&(d=`${d} ${b}`.trimStart()),Vpo(b)&&f.push(b),Hpo(b)&&(l=b)});let m=u(),A={};A={tenantId:i(),appId:o(),automationId:a(),identityId:m?._id,identityType:m?.type,correlationId:xtt()};let T=mpt.default.scope().active();T&&mpt.default.inject(T.context(),PJr.formats.LOG,A);let S={err:l,pid:process.pid,...A};if(f.length){let b={},C=0;for(let B=0;B<f.length;B++){let k=f[B],P=k._logKey;P?(delete k._logKey,S[P]=k):(b[C]=k,C++)}Object.keys(b).length&&(S.data=b)}return[S,d]},"getLogParams");console.log=(...c)=>{let[l,f]=n(c);rB?.info(l,f)},console.info=(...c)=>{let[l,f]=n(c);rB?.info(l,f)},console.warn=(...c)=>{let[l,f]=n(c);rB?.warn(l,f)},console.error=(...c)=>{let[l,f]=n(c);rB?.error(l,f)},console.trace=(...c)=>{let[l,f]=n(c);l.err||(l.err=new Error),rB?.trace(l,f)},console.debug=(...c)=>{let[l,f]=n(c);rB?.debug(l,f)};let i=s(()=>{let c;try{c=Hs()}catch{}return c},"getTenantId"),o=s(()=>{let c;try{c=uA()}catch{}return c},"getAppId"),a=s(()=>{let c;try{c=AHe()}catch{}return c},"getAutomationId"),u=s(()=>{let c;try{c=Xx()}catch{}return c},"getIdentity")}var Apt=rB;function US(t){let e=Hs();return`${t}:${e}`}s(US,"generateTenantKey");var cH=class{static{s(this,"BaseCache")}constructor(e=void 0){this.client=e}async getClient(){return this.client?this.client:await apr()}async keys(e){return(await this.getClient()).keys(e)}async exists(e,r={useTenancy:!0}){return e=r.useTenancy?US(e):e,(await this.getClient()).exists(e)}async scan(e,r={useTenancy:!0}){return e=r.useTenancy?US(e):e,(await this.getClient()).scan(e)}async get(e,r={useTenancy:!0}){return e=r.useTenancy?US(e):e,(await this.getClient()).get(e)}async bulkGet(e,r={useTenancy:!0}){return e=r.useTenancy?e.map(i=>US(i)):e,(await this.getClient()).bulkGet(e)}async store(e,r,n=null,i={useTenancy:!0}){e=i.useTenancy?US(e):e,await(await this.getClient()).store(e,r,n)}async bulkStore(e,r=null,n={useTenancy:!0}){n.useTenancy&&(e=Object.entries(e).reduce((o,[a,u])=>(o[US(a)]=u,o),{})),await(await this.getClient()).bulkStore(e,r)}async delete(e,r={useTenancy:!0}){return e=r.useTenancy?US(e):e,(await this.getClient()).delete(e)}async bulkDelete(e,r={useTenancy:!0}){return e=r.useTenancy?e.map(i=>US(i)):e,(await this.getClient()).bulkDelete(e)}async withCache(e,r=null,n,i={useTenancy:!0}){let o=await this.get(e,i);if(o)return o;try{let a=await n();return await this.store(e,a,r,i),a}catch(a){throw console.error("Error fetching before cache - ",a),a}}async withCacheWithDynamicTTL(e,r,n={useTenancy:!0}){let i=await this.get(e,n);if(i)return i;try{let o=await r(),{value:a,ttl:u}=o;return await this.store(e,a,u,{useTenancy:n.useTenancy}),a}catch(o){throw console.error("Error fetching before cache - ",o),o}}async bustCache(e){let r=await this.getClient();try{await r.delete(US(e))}catch(n){throw console.error("Error busting cache - ",n),n}}async increment(e,r,n={useTenancy:!0}){e=n.useTenancy?US(e):e;let i=await this.getClient(),o=await i.increment(e);return r&&await i.setExpiry(e,r),o}async deleteIfValue(e,r,n={useTenancy:!0}){e=n.useTenancy?US(e):e,await(await this.getClient()).deleteIfValue(e,r)}};var Kpo=new cH,lH={CHECKLIST:"checklist",INSTALLATION:"installation",ANALYTICS_ENABLED:"analyticsEnabled",UNIQUE_TENANT_ID:"uniqueTenantId",EVENTS:"events",BACKFILL_METADATA:"backfillMetadata",EVENTS_RATE_LIMIT:"eventsRateLimit",OAUTH2_TOKEN:s(t=>`oauth2Token_${t}`,"OAUTH2_TOKEN")};var _be=s((...t)=>Kpo.withCache(...t),"withCache");ur();var Ago=ge(AZr());var X4u=_h.fromSeconds(10).toMs();ur();var oju=_h.fromDays(7).toSeconds(),aju=_h.fromSeconds(10).toMs();var fju=_h.fromHours(1).toSeconds();var EZr=ge(require("node-fetch"));var OF=class{static{s(this,"API")}constructor(e){this.host=e}async apiCall(e,r,n){n.headers||(n.headers={}),n.headers["Content-Type"]||(n.headers={"Content-Type":"application/json",Accept:"application/json",...n.headers});let i=n.headers["Content-Type"]==="application/json";KAe.setHeader(n.headers);let o={method:e,body:i?JSON.stringify(n.body):n.body,headers:n.headers,credentials:"include"};return await(0,EZr.default)(`${this.host}${r}`,o)}async post(e,r){return this.apiCall("POST",e,r)}async get(e,r){return this.apiCall("GET",e,r)}async patch(e,r){return this.apiCall("PATCH",e,r)}async del(e,r){return this.apiCall("DELETE",e,r)}async put(e,r){return this.apiCall("PUT",e,r)}};var wju=new OF(dt.INTERNAL_ACCOUNT_PORTAL_URL),Nju=dt.SELF_HOSTED||dt.DISABLE_ACCOUNT_PORTAL;ur();ur();var Uju=+(dt.PASSWORD_MIN_LENGTH||12),Fju=+(dt.PASSWORD_MAX_LENGTH||512);var $ju=ppr();ur();ur();var BVu={"automation:created":t=>t.automationId,"automation:step:created":t=>t.stepId,"datasource:created":t=>t.datasourceId,"layout:created":t=>t.layoutId,"query:created":t=>t.queryId,"role:created":t=>t.roleId,"screen:created":t=>t.screenId,"table:created":t=>t.tableId,"view:created":t=>t.tableId,"view:calculation:created":t=>t.tableId,"view:filter:created":t=>t.tableId,"app:created":t=>t.appId,"app:published":t=>t.appId,"auth:sso:created":t=>t.type,"auth:sso:activated":t=>t.type,"user:created":t=>t.userId,"user:admin:assigned":t=>t.userId,"user:builder:assigned":t=>t.userId,"role:assigned":t=>`${t.roleId}-${t.userId}`};var Lpt=dt.SELF_HOSTED&&!dt.isDev(),Zte=class{static{s(this,"LoggingProcessor")}async processEvent(e,r,n){Lpt||console.log(`[audit] [identityType=${r.type}] ${e}`,n)}async identify(e){Lpt||console.log("[audit] identified",e)}async identifyGroup(e){Lpt||console.log("[audit] group identified",e)}async shutdown(){}};ur();var ere=class t{static{s(this,"AuditLogsProcessor")}static{this.auditLogsEnabled=!1}static init(e){t.auditLogsEnabled=!0;let r=e;return t.auditLogQueue=new eU("auditLogQueue",{jobTags:s(n=>({"event.name":n.event}),"jobTags")}),t.auditLogQueue.process(async n=>{await iw(n.data.tenantId,async()=>{let i=n.data.properties;i.audited&&(i={...i,...i.audited},delete i.audited);let o={};dt.ENABLE_AUDIT_LOG_IP_ADDR&&(o=n.data.opts.hostInfo),await r(n.data.event,i,{userId:n.data.opts.userId,timestamp:n.data.opts.timestamp,appId:n.data.opts.appId,hostInfo:o})})})}async processEvent(e,r,n,i){if(t.auditLogsEnabled&&mpr(e)){let o=r.type==="user"?r.id:void 0;await t.auditLogQueue.add({event:e,properties:n,opts:{userId:o,timestamp:i,appId:uA(),hostInfo:r.hostInfo},tenantId:Hs()})}}async identify(){}async identifyGroup(){}async shutdown(){await t.auditLogQueue?.close()}};zx();var Ngo=new OF(dt.INTERNAL_ACCOUNT_PORTAL_URL),tre=class t{static{s(this,"EventBrokerProcessor")}static init(e){t.getLicenseKeyFn=e}async processEvent(e,r,n,i){if(dt.DISABLE_ACCOUNT_PORTAL)return;let o;if(dt.SELF_HOSTED){if(!t.getLicenseKeyFn)return;let c=await t.getLicenseKeyFn();if(!c)return;o={"x-budibase-license-key":c}}else o={"x-budibase-api-key":dt.ACCOUNT_PORTAL_API_KEY},r.tenantId&&(o["x-budibase-tenant-id"]=r.tenantId);let a=uA(),u={id:Jb(),type:e,identity:r,properties:{...n,version:dt.VERSION,service:dt.SERVICE,environment:r.environment,hosting:r.hosting,...a&&{appId:a},...r.installationId&&{installationId:r.installationId},...r.tenantId&&{tenantId:r.tenantId}},timestamp:i===void 0?Date.now():new Date(i).getTime()};try{let c=await Ngo.post("/api/v2/analytics/event",{headers:o,body:u});c.ok||console.warn(`[EventBrokerProcessor] unexpected response status: ${c.status}`)}catch(c){console.error(`[EventBrokerProcessor] failed to send event: ${c}`)}}};var rre=class{constructor(e){this.initialised=!1;this.processors=[];this.processors=e}static{s(this,"Processor")}async processEvent(e,r,n,i){for(let o of this.processors)await o.processEvent(e,r,n,i)}async identify(e,r){for(let n of this.processors)n.identify&&await n.identify(e,r)}async identifyGroup(e,r){for(let n of this.processors)n.identifyGroup&&await n.identifyGroup(e,r)}async shutdown(){for(let e of this.processors)e.shutdown&&await e.shutdown()}};var Ogo=new Zte,xgo=new ere,vgo=new tre;var Mpt=new rre([Ogo,xgo,vgo]);ur();ur();var kgo=ge(v3());ur();ur();ur();ur();ur();ur();ur();ur();var BYu=!dt.SELF_HOSTED&&!dt.isDev();ur();ur();ur();ur();ur();ur();ur();ur();ur();ur();ur();ur();ur();ur();ur();ur();ur();ur();ur();ur();ur();var OZr=_y.users.isBuilder,Obe=_y.users.isAdmin,Bzu=_y.users.isGlobalBuilder,kzu=_y.users.isAdminOrBuilder,wZr=_y.users.hasAdminPermissions,nre=_y.users.hasBuilderPermissions,Pzu=_y.users.hasAppBuilderPermissions,Vgo=_y.users.isAdminOrWorkspaceBuilder;function rmo(t){return Array.isArray(t)?t.map(e=>{if(e)return delete e.password,e}):t&&(delete t.password,t)}s(rmo,"removeUserPassword");async function ire(t,e){if(t==null)throw"Must supply an email address to view";let r=await Jpe("by_email2",{key:t.toLowerCase(),include_docs:!0});if(Array.isArray(r))throw new Error(`Multiple users found with email address: ${t}`);let n=r;return e?.cleanup&&(n=rmo(n)),n}s(ire,"getGlobalUserByEmail");ur();function vZr(t){return`config${"_"}${t}`}s(vZr,"generateConfigID");async function vbe(t){let e=lp();try{return await e.get(vZr(t))}catch(r){if(r.status===404)return;throw r}}s(vbe,"getConfig");async function Upt(){let t=await vbe("settings");return t||(t={_id:vZr("settings"),type:"settings",config:{}}),t.config.platformUrl=await DZr({tenantAware:!0,config:t.config}),t.config.analyticsEnabled=await SZr({config:t.config}),t}s(Upt,"getSettingsConfigDoc");async function DZr(t={tenantAware:!0}){let e=dt.PLATFORM_URL||"http://localhost:10000";if(!dt.SELF_HOSTED&&dt.MULTI_TENANCY&&t.tenantAware){let r=Hs();e.includes("localhost:")||(e=e.replace("://",`://${r}.`))}else if(dt.SELF_HOSTED){let r=t?.config?t.config:(await vbe("settings"))?.config;r?.platformUrl&&(e=r.platformUrl)}return e}s(DZr,"getPlatformUrl");var SZr=s(async t=>{if(!dt.SELF_HOSTED)return!!dt.ENABLE_ANALYTICS;let e=await _be(lH.ANALYTICS_ENABLED,86400,async()=>{let n=t?.config?t.config:(await vbe("settings"))?.config;if(n?.analyticsEnabled===!1)return!1;if(n?.analyticsEnabled===!0)return!0});if(e!==void 0)return e;let r=dt.ENABLE_ANALYTICS;return!(r===0||r===!1)},"analyticsEnabled");ur();var mOo=ge(y3()),AOo=ge(Wgt()),_Oo=ge(v3());var Ian={ADMIN:"ADMIN",POWER:"POWER",BASIC:"BASIC",PUBLIC:"PUBLIC"},yE={...Ian,BUILDER:"BUILDER"},EOo={UUID:void 0,NAME:"name"};var BF=class{constructor(e,r,n,i){this.permissions={};this._id=e,this.name=r,this.uiMetadata=i,this.permissionId=n,this.version=EOo.NAME}static{s(this,"Role")}addInheritance(e){return e&&typeof e=="string"?e=Tan(e):e&&Array.isArray(e)&&(e=e.map(Tan)),this.inherits=e,this}};var Urc={ADMIN:new BF(yE.ADMIN,yE.ADMIN,"admin",{displayName:"Admin user",description:"Can do everything",color:"var(--spectrum-global-color-static-red-400)"}).addInheritance(yE.POWER),POWER:new BF(yE.POWER,yE.POWER,"power",{displayName:"App power user",description:"An app user with more access",color:"var(--spectrum-global-color-static-orange-400)"}).addInheritance(yE.BASIC),BASIC:new BF(yE.BASIC,yE.BASIC,"write",{displayName:"Basic user",description:"Any logged in user",color:"var(--spectrum-global-color-static-green-400)"}).addInheritance(yE.PUBLIC),PUBLIC:new BF(yE.PUBLIC,yE.PUBLIC,"public",{displayName:"Public user",description:"Accessible to anyone",color:"var(--spectrum-global-color-static-blue-400)"}),BUILDER:new BF(yE.BUILDER,yE.BUILDER,"admin",{displayName:"Builder user",description:"Users that can edit this app",color:"var(--spectrum-global-color-static-magenta-600)"})};function yOo(t){return Object.values(Ian).includes(t)}s(yOo,"isBuiltin");function Tan(t){return yOo(t)?t:cpr(t)}s(Tan,"prefixRoleIDNoBuiltin");ur();var IOo=ge(Ygt()),ROo=ge(Wgt());ur();var nc=class{static{s(this,"PermissionImpl")}constructor(e,r){this.type=e,this.level=r}};var jrc={PUBLIC:{_id:"public",name:"Public",permissions:[new nc("webhook","execute")]},READ_ONLY:{_id:"read_only",name:"Read only",permissions:[new nc("query","read"),new nc("table","read"),new nc("app","read")]},WRITE:{_id:"write",name:"Read/Write",permissions:[new nc("query","write"),new nc("table","write"),new nc("automation","execute"),new nc("legacy_view","read"),new nc("app","read")]},POWER:{_id:"power",name:"Power",permissions:[new nc("table","write"),new nc("user","read"),new nc("automation","execute"),new nc("webhook","read"),new nc("legacy_view","read"),new nc("app","read")]},ADMIN:{_id:"admin",name:"Admin",permissions:[new nc("table","admin"),new nc("user","admin"),new nc("automation","admin"),new nc("webhook","read"),new nc("query","admin"),new nc("legacy_view","read"),new nc("app","read")]}};var Vrc="builder",Hrc="creator",Yrc="globalBuilder";ur();var lwe=ge(require("crypto")),Can=ge(require("dd-trace")),ban=ge(y3()),bOo=require("posthog-node");var Ran;function wan(t){let e=t.split(",").map(n=>n.split(":")),r=[];for(let[n,...i]of e)for(let o of i){let a=!0;o.startsWith("!")&&(o=o.slice(1),a=!1),r.push({tenantId:n,key:o,value:a})}return r}s(wan,"parseEnvFlags");function wOo(){return wan(dt.TENANT_FEATURE_FLAGS||"")}s(wOo,"getEnvFlags");var zgt=class{constructor(e){this.flagSchema=e;this.setId=lwe.randomUUID()}static{s(this,"FlagSet")}defaults(){return(0,ban.cloneDeep)(this.flagSchema)}isFlagName(e){return this.flagSchema[e]!==void 0}async isEnabled(e){return(await this.fetch())[e]}async fetch(){return await Can.default.trace("features.fetch",async e=>{let r=THe(this.setId);if(r)return e?.addTags({fromCache:!0}),r;let n={},i=this.defaults(),o=Hs(),a=new Set;if(Yfe())return i;for(let{tenantId:d,key:m,value:A}of wOo())if(!(!d||d!=="*"&&d!==o)&&(n.readFromEnvironmentVars=!0,A===!1&&a.add(m),!!this.isFlagName(m))){if(typeof i[m]!="boolean")throw new Error(`Feature: ${m} is not a boolean`);i[m]=A,n[`flags.${m}.source`]="environment"}let u=Xx(),c=u?._id;if(!c){let d=_He();d&&(c=lwe.createHash("sha512").update(d).digest("hex"))}let l=u?.tenantId;if(l||(l=o),n["identity.type"]=u?.type,n["identity._id"]=u?._id,n.tenantId=l,n.userId=c,Ran&&c){n.readFromPostHog=!0;let d=await Upt(),m={tenantId:l},A={tenant:{id:l}};d.config.createdVersion&&(A.tenant.createdVersion=d.config.createdVersion),d.createdAt&&(A.tenant.createdAt=`${d.createdAt}`);let T=await Ran.getAllFlags(c,{personProperties:m,onlyEvaluateLocally:!0,groups:{tenant:l},groupProperties:A});for(let[S,b]of Object.entries(T))if(this.isFlagName(S)){if(typeof b!="boolean"){console.warn(`Invalid value for posthog flag "${S}": ${b}`);continue}if(!(i[S]===!0||a.has(S)))try{i[S]=b,n[`flags.${S}.source`]="posthog"}catch(C){console.warn(`Error parsing posthog flag "${S}": ${b}`,C)}}}let f=IHe();for(let[d,m]of Object.entries(f))this.isFlagName(d)&&typeof m=="boolean"&&(i[d]=m,n[`flags.${d}.source`]="override");SHe(this.setId,i);for(let[d,m]of Object.entries(i))n[`flags.${d}.value`]=m;return e?.addTags(n),i})}},NOo={USE_ZOD_VALIDATOR:!1,AI_RAG_SHAREPOINT:!1,AI_AGENT_INSTRUCTIONS:!1,AI_TESTS:!1,MULTIPLE_OPERATIONS:!1,ESCALATION:!1,FRONT_COMPANION:!1,PROJECTS:!1,DEBUG_UI:dt.isDev(),DEV_USE_CLIENT_FROM_STORAGE:!1,AI_AGENT_ACTIVITY:!1},enc=new zgt(NOo);ur();var unc=$Ae();var ADo=Lcn(),_Do=$Ae();function EDo(){return{logger:Apt,genReqId:_Do.getId,autoLogging:{ignore:s(t=>!!t.url?.includes("/health"),"ignore")},serializers:{req:s(t=>({method:t.method,url:t.url,correlationId:t.id}),"req"),res:s(t=>({status:t.statusCode}),"res")}}}s(EDo,"pinoSettings");function yDo(){return dt.HTTP_LOGGING?ADo(EDo()):(t,e)=>e()}s(yDo,"getMiddleware");var TDo=yDo();var bDo=ge(Zje());ur();ur();var wDo=ge(require("dd-trace"));var nsc=dt.SESSION_UPDATE_PERIOD?parseInt(dt.SESSION_UPDATE_PERIOD):60*1e3;ur();var vko=ge(Pwe());var kre={};Fi(kre,{authenticate:()=>kko,options:()=>Bko});function xC(t,e,r){return t(r,null,{message:e})}s(xC,"authError");var NAt="Invalid credentials",Dko="This account has expired. Please reset your password",Bko={passReqToCallback:!0};async function kko(t,e,r,n){if(!e)return xC(n,"Email Required");if(!r)return xC(n,"Password Required");let i=await ire(e);return i==null?(console.info(`user=${e} could not be found`),xC(n,NAt)):i.status==="inactive"?(console.info(`user=${e} is inactive`,i),xC(n,NAt)):i.password?await iWt(r,i.password)?(delete i.password,n(null,i)):xC(n,NAt):(console.info(`user=${e} has no password set`,i),xC(n,Dko))}s(kko,"authenticate");ur();var Lcc=a_t().OAuth2Strategy;var tLo=ge(require("node-fetch"));ur();var rLo=ge(ypn());ur();ur();var Ulc=a_t().OAuth2Strategy;var vLo=Zpn(),DLo=agn().Strategy,Zfc=ugn();vLo.use(new DLo(kre.options,kre.authenticate));var CNe={};Fi(CNe,{validate:()=>ULo});ur();var _r=ge(Pwe());var kLo=["Relational","Non-relational","Spreadsheet","Object store","Graph","API"];function b_t(t,e){let{error:r}=t.validate(e);if(r)throw r}s(b_t,"runJoi");function PLo(t){let e=_r.default.object({type:_r.default.string().allow("component").required(),metadata:_r.default.object().unknown(!0).required(),hash:_r.default.string().optional(),version:_r.default.string().optional(),schema:_r.default.object({name:_r.default.string().required(),settings:_r.default.array().items(_r.default.object().unknown(!0)).required()}).unknown(!0)});b_t(e,t)}s(PLo,"validateComponent");function LLo(t){let e=_r.default.object({type:_r.default.string().allow(...Object.values(Nqe)).required(),required:_r.default.boolean().required(),default:_r.default.any(),display:_r.default.string()}),r=_r.default.object({type:_r.default.string().allow(...Object.values(wqe)),readable:_r.default.boolean(),displayName:_r.default.string(),fields:_r.default.object().pattern(_r.default.string(),e)}).required(),n=_r.default.object({type:_r.default.string().allow("datasource").required(),metadata:_r.default.object().unknown(!0).required(),hash:_r.default.string().optional(),version:_r.default.string().optional(),schema:_r.default.object({docs:_r.default.string(),plus:_r.default.boolean().optional(),isSQL:_r.default.boolean().optional(),auth:_r.default.object({type:_r.default.string().required()}).optional(),features:_r.default.object(Object.fromEntries(Object.values(Oqe).map(i=>[i,_r.default.boolean().optional()]))).optional(),relationships:_r.default.boolean().optional(),description:_r.default.string().required(),friendlyName:_r.default.string().required(),type:_r.default.string().allow(...kLo),datasource:_r.default.object().pattern(_r.default.string(),e).required(),query:_r.default.object().pattern(_r.default.string(),r).unknown(!0).required(),extra:_r.default.object().pattern(_r.default.string(),_r.default.object({type:_r.default.string().required(),displayName:_r.default.string().required(),required:_r.default.boolean(),data:_r.default.object()}))})});b_t(n,t)}s(LLo,"validateDatasource");function MLo(t){let e=_r.default.object().pattern(_r.default.string(),{type:_r.default.string().allow(...Object.values(Pqe)).required(),customType:_r.default.string().allow(...Object.values(Lqe)),title:_r.default.string(),description:_r.default.string(),enum:_r.default.array().items(_r.default.string()),pretty:_r.default.array().items(_r.default.string())}),r=_r.default.object({properties:e,required:_r.default.array().items(_r.default.string())}).concat(e).required(),n=_r.default.object({type:_r.default.string().allow("automation").required(),metadata:_r.default.object().unknown(!0).required(),hash:_r.default.string().optional(),version:_r.default.string().optional(),schema:_r.default.object({name:_r.default.string().required(),tagline:_r.default.string().required(),icon:_r.default.string().required(),description:_r.default.string().required(),type:_r.default.string().allow("ACTION","LOGIC").required(),stepId:_r.default.string().disallow(...E2t).required(),inputs:_r.default.object().optional(),schema:_r.default.object({inputs:r,outputs:r}).required()})});b_t(n,t)}s(MLo,"validateAutomation");function ULo(t){switch(t?.type){case"component":PLo(t);break;case"datasource":LLo(t);break;case"automation":MLo(t);break;default:throw new Error(`Unknown plugin type - check schema.json: ${t.type}`)}}s(ULo,"validate");ur();var Ndc={"user:created":t=>t.userId,"user:updated":t=>t.userId,"user:deleted":t=>t.userId,"user:admin:assigned":t=>t.userId,"user:admin:removed":t=>t.userId,"user:builder:assigned":t=>t.userId,"user:builder:removed":t=>t.userId,"user_group:created":t=>t.groupId,"user_group:updated":t=>t.groupId,"user_group:deleted":t=>t.groupId,"user_group:user_added":t=>t.groupId,"user_group:users_deleted":t=>t.groupId,"user_group:permissions_edited":t=>t.groupId,"automation:deleted":t=>t.automationId,"datasource:deleted":t=>t.datasourceId,"table:deleted":t=>t.tableId,"query:deleted":t=>t.queryId,"workspace_app:deleted":t=>t.workspaceAppId,"view:deleted":t=>t.id};var r1a=ge(ABt());var XYn=ge(ABt());ur();ur();var n1a=ge(y3());var OFc={equal:!1,notEqual:!0,empty:!1,notEmpty:!0,fuzzy:!1,string:!1,range:!1,contains:!1,notContains:!0,containsAny:!1,oneOf:!1,notOneOf:!0,$and:!1,$or:!1};var oDa=ge(E6n());var W6n=ge(bBt(),1),WDa=ge(xBt(),1),$6n=ge(bBt(),1),MBt=ge(xBt(),1),ILe=require("url"),e5=ge(j6n(),1),K6n=ge(require("http"),1),X6n=ge(ew(),1);var z6n={NotFound:"not-found"};function HDa(t){return typeof t=="function"?t(z6n):t}s(HDa,"resolveEvent");var YDa=class{static{s(this,"RouterEventEmitter")}_handlers=new Map;register(t,e){let r=this._handlers.get(t)??[];r.push(e),this._handlers.set(t,r)}emit(t,e,r){let n=this._handlers.get(t);return n&&n.length>0?(0,W6n.default)(n)(e,r):r()}};function SLe(t,e={}){let r={...e};"strict"in r&&!("trailing"in r)&&(r.trailing=r.strict!==!0,delete r.strict),delete r.pathAsRegExp,delete r.ignoreCaptures,delete r.prefix;let{regexp:n,keys:i}=(0,e5.pathToRegexp)(t,r);return{regexp:n,keys:i}}s(SLe,"compilePathToRegexp");function zDa(t,e={}){return(0,e5.compile)(t,e)}s(zDa,"compilePath");function $Da(t,e){return(0,e5.parse)(t,e)}s($Da,"parsePath");function PBt(t={}){let e={sensitive:t.sensitive,end:t.end,strict:t.strict,trailing:t.trailing};"strict"in e&&!("trailing"in e)&&(e.trailing=e.strict!==!0,delete e.strict);for(let r of Object.keys(e))e[r]===void 0&&delete e[r];return e}s(PBt,"normalizeLayerOptionsToPathToRegexp");function KDa(t){try{return decodeURIComponent(t)}catch{return t}}s(KDa,"safeDecodeURIComponent");var V6n=class{static{s(this,"Layer")}opts;name;methods;paramNames;stack;path;regexp;constructor(t,e,r,n={}){this.opts=n,this.name=this.opts.name||void 0,this.methods=this._normalizeHttpMethods(e),this.stack=this._normalizeAndValidateMiddleware(r,e,t),this.path=t,this.paramNames=[],this._configurePathMatching()}_normalizeHttpMethods(t){let e=[];for(let r of t){let n=r.toUpperCase();e.push(n),n==="GET"&&e.unshift("HEAD")}return e}_normalizeAndValidateMiddleware(t,e,r){let n=Array.isArray(t)?t:[t];for(let i of n){let o=typeof i;if(o!=="function"){let a=this.opts.name||r;throw new Error(`${e.toString()} \`${a}\`: \`middleware\` must be a function, not \`${o}\``)}}return n}_configurePathMatching(){this.opts.pathAsRegExp===!0?this.regexp=this.path instanceof RegExp?this.path:new RegExp(this.path):this.path&&this._configurePathToRegexp()}_configurePathToRegexp(){let t=PBt(this.opts),{regexp:e,keys:r}=SLe(this.path,t);this.regexp=e,this.paramNames=r}match(t){return this.regexp.test(t)}params(t,e,r={}){let n={...r};for(let[i,o]of e.entries()){let a=this.paramNames[i];if(a&&o&&o.length>0){let u=a.name;if(this.opts.ignoreWildcardParameter===u&&a.type==="wildcard")continue;n[u]=KDa(o)}}return n}captures(t){if(this.opts.ignoreCaptures)return[];let e=t.match(this.regexp);return e?e.slice(1):[]}url(...t){if(this.path instanceof RegExp)throw new TypeError("Cannot generate URL for routes defined with RegExp paths. Use string paths with named parameters instead.");let{params:e,options:r}=this._parseUrlArguments(t),n=this.path.replaceAll("(.*)",""),i=zDa(n,{encode:encodeURIComponent,...r}),o=this._buildParamReplacements(e,n),a=i(o);return r&&r.query?this._addQueryString(a,r.query):a}_parseUrlArguments(t){let e=t[0]??{},r=t[1];if(typeof e!="object"||e===null){let n=[...t],i=n.at(-1);typeof i=="object"&&i!==null?(r=i,e=n.slice(0,-1)):e=n}else if(e&&!r){let n=Object.keys(e);if(n.length===1&&n[0]==="query")r=e,e={};else if("query"in e&&e.query){let{query:o,...a}=e;r={query:o},e=a}}return{params:e,options:r}}_buildParamReplacements(t,e){let{tokens:r}=$Da(e),n=r.some(o=>"name"in o&&o.name),i={};if(Array.isArray(t)){let o=0;for(let a of r)"name"in a&&a.name&&(i[a.name]=String(t[o++]))}else if(n&&typeof t=="object"&&!("query"in t))for(let[o,a]of Object.entries(t))i[o]=String(a);return i}_addQueryString(t,e){let r=(0,ILe.parse)(t),n={...r,query:r.query??void 0};return typeof e=="string"?(n.search=e,n.query=void 0):(n.search=void 0,n.query=e),(0,ILe.format)(n)}param(t,e){let r=this.stack,n=this.paramNames,i=this._createParamMiddleware(t,e),o=n.map(u=>u.name),a=o.indexOf(t);return a!==-1&&this._insertParamMiddleware(r,i,o,a),this}_createParamMiddleware(t,e){let r=s(((n,i)=>(n._matchedParams||(n._matchedParams=new WeakMap),n._matchedParams.has(e)?i():(n._matchedParams.set(e,!0),e(n.params[t],n,i)))),"middleware");return r.param=t,r._originalFn=e,r}_insertParamMiddleware(t,e,r,n){let i=!1;for(let o=0;o<t.length;o++){let a=t[o];if(!a.param){t.splice(o,0,e),i=!0;break}if(r.indexOf(a.param)>n){t.splice(o,0,e),i=!0;break}}i||t.push(e)}setPrefix(t){return this.path?this.path instanceof RegExp?this:(this.path=this._applyPrefix(t),this._reconfigurePathMatching(t),this):this}_applyPrefix(t){let e=this.path==="/",r=this.opts.strict===!0,n=t.includes(":"),i=this.opts.pathAsRegExp===!0&&typeof this.path=="string";if(n&&i){let o=this.path;(o===String.raw`(?:\/|$)`||o===String.raw`(?:\\\/|$)`)&&(this.path="{/*rest}",this.opts.pathAsRegExp=!1)}return e&&!r?t:`${t}${this.path}`}_reconfigurePathMatching(t){let e=this.opts.pathAsRegExp===!0;if(t&&t.includes(":")&&e){let n=PBt(this.opts),{regexp:i,keys:o}=SLe(this.path,n);this.regexp=i,this.paramNames=o,this.opts.pathAsRegExp=!1}else if(e){let n=this.path,i=n.startsWith("^")?n:`^${n}`;this.regexp=this.path instanceof RegExp?this.path:new RegExp(i)}else{let n=PBt(this.opts),{regexp:i,keys:o}=SLe(this.path,n);this.regexp=i,this.paramNames=o}}};function JDa(){return K6n.default.METHODS.map(t=>t.toLowerCase())}s(JDa,"getAllHttpMethods");var XDa=["get","post","put","patch","delete","del","head","options"];function ZDa(t){return t?Array.isArray(t)?t:[t]:[]}s(ZDa,"normalizeParameterMiddleware");function J6n(t,e,r){let n=ZDa(r);for(let i of n)t.param(e,i)}s(J6n,"applyParameterMiddlewareToRoute");function eBa(t,e){let r=Object.keys(e);for(let n of r){let i=e[n];J6n(t,n,i)}}s(eBa,"applyAllParameterMiddleware");function H6n(t,e={}){if(!t)return!1;let{keys:r}=SLe(t,e);return r.length>0}s(H6n,"hasPathParameters");function tBa(t,e){return t!==void 0?typeof t=="string"?t===""?{path:"{/*rest}",pathAsRegExp:!1}:t==="/"?{path:"/",pathAsRegExp:!1}:{path:t,pathAsRegExp:!1}:{path:t,pathAsRegExp:!0}:e?{path:"{/*rest}",pathAsRegExp:!1}:{path:String.raw`(?:\/|$)`,pathAsRegExp:!0}}s(tBa,"determineMiddlewarePath");var LBt=(0,X6n.default)("koa-router"),Z6n=JDa(),Y6n=class{static{s(this,"RouterImplementation")}opts;methods;exclusive;params;stack;host;_events=new YDa;constructor(t={}){this.opts=t,this.methods=this.opts.methods||["HEAD","OPTIONS","GET","PUT","PATCH","POST","DELETE"],this.exclusive=!!this.opts.exclusive,this.params={},this.stack=[],this.host=this.opts.host}static url(t,...e){return new V6n(t,[],()=>{}).url(...e)}use(...t){let e;if(this._isPathArray(t[0]))return this._useWithPathArray(t);let r=this._hasExplicitPath(t[0]);if(r&&(e=t.shift()),t.length===0)throw new Error("You must provide at least one middleware function to router.use()");for(let n of t)this._isNestedRouter(n)?this._mountNestedRouter(n,e):this._registerMiddleware(n,e,r);return this}_isPathArray(t){return Array.isArray(t)&&t.length>0&&t.every(e=>typeof e=="string")}_hasExplicitPath(t){return typeof t=="string"||t instanceof RegExp}_isNestedRouter(t){return typeof t=="function"&&"router"in t&&t.router!==void 0}_useWithPathArray(t){let e=t[0],r=t.slice(1);for(let n of e)Reflect.apply(this.use,this,[n,...r]);return this}_mountNestedRouter(t,e){let r=t.router,n=this._cloneRouter(r),i=e&&typeof e=="string"&&H6n(e,this.opts);for(let o=0;o<n.stack.length;o++){let a=n.stack[o],u=this._cloneLayer(a);e&&typeof e=="string"&&u.setPrefix(e),this.opts.prefix&&u.setPrefix(this.opts.prefix),u.methods.length===0&&i&&(u.opts.ignoreCaptures=!1),this.stack.push(u),n.stack[o]=u}this.params&&this._applyParamMiddlewareToRouter(n)}_cloneRouter(t){return Object.assign(Object.create(Object.getPrototypeOf(t)),t,{stack:[...t.stack]})}_cloneLayer(t){return Object.assign(Object.create(Object.getPrototypeOf(t)),t,{stack:[...t.stack],methods:[...t.methods],paramNames:[...t.paramNames],opts:{...t.opts}})}_applyParamMiddlewareToRouter(t){let e=Object.keys(this.params);for(let r of e){let n=this.params[r];J6n(t,r,n)}}_registerMiddleware(t,e,r){let n=H6n(this.opts.prefix||"",this.opts),i=(()=>{if(e!==void 0)return e;if(n)return""})(),o=r||e===void 0&&n,{path:a,pathAsRegExp:u}=tBa(i,n),c=a,l=u,f=o&&a==="/";o&&typeof a=="string"&&(c=a,l=!1);let d=i===""&&a==="{/*rest}"?"rest":void 0;this.register(c,[],t,{end:f,ignoreCaptures:!o&&!n,ignoreWildcardParameter:d,pathAsRegExp:l})}prefix(t){let e=t.replace(/\/$/,""),r=this.opts.prefix||"";this.opts.prefix=e;for(let n of this.stack){if(typeof n.path=="string"&&r){let i=r+"/";(n.path===r||n.path.startsWith(i))&&(n.path=n.path.slice(r.length)||"/")}n.setPrefix(e)}return this}middleware(){let t=function(e,r){if(LBt("%s %s",e.method,e.path),!this.matchHost(e.host))return r();let n=this._getRequestPath(e),i=this.match(n,e.method);if(this._storeMatchedRoutes(e,i),e.router=this,e.routeMatched=i.route,!i.route)return this._events.emit(z6n.NotFound,e,r);let o=i.pathAndMethod;this._setMatchedRouteInfo(e,o);let a=this._buildMiddlewareChain(o,n);return(0,$6n.default)(a)(e,r)}.bind(this);return t.router=this,t}_getRequestPath(t){let e=t;return this.opts.routerPath||e.newRouterPath||e.path||e.routerPath||""}_storeMatchedRoutes(t,e){let r=t;r.matched?r.matched.push(...e.path):r.matched=e.path}_setMatchedRouteInfo(t,e){let r=t,n=e.toReversed().find(i=>i.methods.length>0);n&&(r._matchedRoute=n.path,n.name&&(r._matchedRouteName=n.name))}_buildMiddlewareChain(t,e){let r;if(this.exclusive){let i;if(this.opts.exclusive==="specificity")for(let o of t)(!i||o.paramNames.length<i.paramNames.length)&&(i=o);else i=t.at(-1);r=i?[i]:[]}else r=t;let n=[];for(let i of r)n.push((o,a)=>{let u=o;return u.captures=i.captures(e),u.request.params=i.params(e,u.captures||[],u.params),u.params=u.request.params,u.routerPath=i.path,u.routerName=i.name||void 0,u._matchedRoute=i.path,i.name&&(u._matchedRouteName=i.name),a()},...i.stack);return n}routes(){return this.middleware()}on(t,e){return this._events.register(HDa(t),e),this}allowedMethods(t={}){let e=this.methods;return(r,n)=>{let i=r;return n().then(()=>{if(!this._shouldProcessAllowedMethods(i))return;let o=i.matched||[],a=this._collectAllowedMethods(o),u=Object.keys(a),c=r.method.toUpperCase();if(!e.includes(c)){this._handleNotImplemented(i,u,t);return}if(c==="OPTIONS"&&u.length>0){this._handleOptionsRequest(i,u);return}u.length>0&&!a[c]&&this._handleMethodNotAllowed(i,u,t)})}}_shouldProcessAllowedMethods(t){return!!(t.matched&&(!t.status||t.status===404))}_collectAllowedMethods(t){let e={};for(let r of t)for(let n of r.methods)e[n]=n;return e}_handleNotImplemented(t,e,r){if(r.throw)throw typeof r.notImplemented=="function"?r.notImplemented():new MBt.default.NotImplemented;t.status=501,t.set("Allow",e.join(", "))}_handleOptionsRequest(t,e){t.status=200,t.body="",t.set("Allow",e.join(", "))}_handleMethodNotAllowed(t,e,r){if(r.throw)throw typeof r.methodNotAllowed=="function"?r.methodNotAllowed():new MBt.default.MethodNotAllowed;t.status=405,t.set("Allow",e.join(", "))}all(...t){let e,r,n;if(t.length>=2&&(typeof t[1]=="string"||t[1]instanceof RegExp)?(e=t[0],r=t[1],n=t.slice(2)):(e=void 0,r=t[0],n=t.slice(1)),typeof r!="string"&&!(r instanceof RegExp)&&(!Array.isArray(r)||r.length===0))throw new Error("You have to provide a path when adding an all handler");let i={name:e,pathAsRegExp:r instanceof RegExp};return this.register(r,Z6n,n,{...this.opts,...i}),this}redirect(t,e,r){let n=t,i=e;if(typeof t=="symbol"||typeof t=="string"&&t[0]!=="/"){let a=this.url(t);if(a instanceof Error)throw a;n=a}if(typeof e=="symbol"||typeof e=="string"&&e[0]!=="/"&&!e.includes("://")){let a=this.url(e);if(a instanceof Error)throw a;i=a}return this.all(n,a=>{a.redirect(i),a.status=r||301})}register(t,e,r,n={}){let i={...this.opts,...n};if(Array.isArray(t))return this._registerMultiplePaths(t,e,r,i);let o=this._createRouteLayer(t,e,r,i);return this.opts.prefix&&o.setPrefix(this.opts.prefix),eBa(o,this.params),this.stack.push(o),LBt("defined route %s %s",o.methods,o.path),o}_registerMultiplePaths(t,e,r,n){for(let i of t)this.register.call(this,i,e,r,n);return this}_createRouteLayer(t,e,r,n){return new V6n(t,e,r,{end:n.end===!1?n.end:!0,name:n.name,sensitive:n.sensitive||!1,strict:n.strict||!1,prefix:n.prefix||"",ignoreCaptures:n.ignoreCaptures,ignoreWildcardParameter:n.ignoreWildcardParameter,pathAsRegExp:n.pathAsRegExp})}route(t){return this.stack.find(r=>r.name===t)||!1}url(t,...e){let r=this.route(t);return r?r.url(...e):new Error(`No route found for name: ${String(t)}`)}match(t,e){let r={path:[],pathAndMethod:[],route:!1},n=e.toUpperCase();for(let i of this.stack)if(LBt("test %s %s",i.path,i.regexp),i.match(t)){r.path.push(i);let o=i.methods.length===0,a=i.methods.includes(n);(o||a)&&(r.pathAndMethod.push(i),i.methods.length>0&&(r.route=!0))}return r}matchHost(t){let{host:e}=this;return e?t?typeof e=="string"?t===e:Array.isArray(e)?e.includes(t):e instanceof RegExp?e.test(t):!1:!1:!0}param(t,e){this.params[t]||(this.params[t]=[]),Array.isArray(this.params[t])||(this.params[t]=[this.params[t]]),this.params[t].push(e);for(let r of this.stack)r.param(t,e);return this}_registerMethod(t,...e){let r,n,i;if(e.length>=2&&(typeof e[1]=="string"||e[1]instanceof RegExp)?(r=e[0],n=e[1],i=e.slice(2)):(r=void 0,n=e[0],i=e.slice(1)),typeof n!="string"&&!(n instanceof RegExp)&&(!Array.isArray(n)||n.length===0))throw new Error(`You have to provide a path when adding a ${t} handler`);let o={name:r,pathAsRegExp:n instanceof RegExp};return this.register(n,[t],i,{...this.opts,...o}),this}get(...t){return this._registerMethod("get",...t)}post(...t){return this._registerMethod("post",...t)}put(...t){return this._registerMethod("put",...t)}patch(...t){return this._registerMethod("patch",...t)}delete(...t){return this._registerMethod("delete",...t)}del(...t){return this.delete.apply(this,t)}head(...t){return this._registerMethod("head",...t)}options(...t){return this._registerMethod("options",...t)}};for(let t of Z6n)XDa.includes(t)||t in Y6n.prototype||Object.defineProperty(Y6n.prototype,t,{value:s(function(...r){return this._registerMethod(t,...r)},"value"),writable:!0,configurable:!0,enumerable:!1});var eQc={...U7,..._l};var eh=".temp",t5="couchdb",Uoe="minio",tWn=[{value:"MAIN_PORT",default:"10000"},{value:"COUCH_DB_URL",default:"http://budibase:budibase@localhost:10000/db/"},{value:"MINIO_URL",default:"http://localhost:10000"},{value:"MINIO_ACCESS_KEY"},{value:"MINIO_SECRET_KEY"}];function iBa(t){let e=t.MAIN_PORT,r=t.COUCH_DB_USER,n=t.COUCH_DB_PASSWORD;return!t.COUCH_DB_URL&&e&&r&&n&&(t.COUCH_DB_URL=`http://${r}:${n}@localhost:${e}/db/`),t.MINIO_URL||(t.MINIO_URL=`http://localhost:${e}/`),t}s(iBa,"checkURLs");async function sBa(){console.log("*** NOTE: use a .env file to load these parameters repeatedly ***");let t={};for(let e of tWn)t[e.value]=await hP(e.value,e.default);return t}s(sBa,"askQuestions");function oBa(t){if(!UBt.default.existsSync(t))throw"Unable to file specified .env file";let e=UBt.default.readFileSync(t,"utf8"),r=iBa(eWn.default.parse(e));for(let n of tWn)if(!r[n.value])throw`Cannot find "${n.value}" property in .env file`;return r}s(oBa,"loadEnvironment");async function FBt(t=!0){let e;t!==!0?e=oBa(t):e=await sBa();for(let r of Object.keys(e))dt._set(r,e[r]);return e}s(FBt,"getConfig");async function QBt(t,e){let r=tce();try{await r.replicate(t,e,{batch_size:1e3,batches_limit:5,style:"main_only"})}catch(n){throw new Error(`Replication failed - ${JSON.stringify(n)}`)}}s(QBt,"replication");function qBt(t){let e=tce(t.COUCH_DB_URL),r=tce();return{Remote:e,Local:r}}s(qBt,"getPouches");var SQ=ge(require("fs")),Nk=require("path");hd();var nWn=ge(require("node:stream")),iWn=require("stream/promises");var{ObjectStoreBuckets:aBa,ObjectStore:sWn,retrieve:uBa,uploadDirectory:cBa,createBucketIfNotExists:lBa}=mbe,rWn=Object.values(aBa);async function fBa(t,e){let r=[],n;do{let i=await t.listObjectsV2({Bucket:e,ContinuationToken:n});r.push(...i.Contents?.filter(o=>!!o.Key).map(o=>({...o,bucket:e,Key:o.Key}))||[]),n=i.NextContinuationToken}while(n);return r}s(fBa,"listBucketObjects");async function oWn(){let t=(0,Nk.join)(eh,Uoe);SQ.default.mkdirSync(t,{recursive:!0});let e=[],r=0;for(let o of rWn){let a=sWn();try{await a.headBucket({Bucket:o})}catch{r++;continue}e=e.concat(await fBa(a,o))}if(r===rWn.length)throw new Error("Unable to access MinIO/S3 - check environment config.");let n=lP(e.length),i=0;for(let o of e){let a=o.Key,u=await uBa(o.bucket,a),c=a.split("/"),l=(0,Nk.join)(t,o.bucket,...c);SQ.default.mkdirSync((0,Nk.dirname)(l),{recursive:!0}),u instanceof nWn.Readable?await(0,iWn.pipeline)(u,SQ.default.createWriteStream(l)):SQ.default.writeFileSync(l,u),n.update(++i)}n.stop()}s(oWn,"exportObjects");async function aWn(){let t=(0,Nk.join)(eh,Uoe),e=SQ.default.readdirSync(t),r=0;e.forEach(o=>{let a=SQ.default.readdirSync((0,Nk.join)(t,o));r+=a.length});let n=lP(r),i=0;for(let o of e){let a=sWn();await lBa(a,o);let u=await cBa(o,(0,Nk.join)(t,o),"/");i+=u.length,n.update(i)}n.stop()}s(aWn,"importObjects");var uWn=require("tar");async function cWn(t){let e=t.env||void 0,r=t.export||t;typeof r!="string"&&(r=`backup-${new Date().toISOString()}.tar.gz`);let n=await FBt(e),i=await Sqt(n.COUCH_DB_URL),{Remote:o,Local:a}=qBt(n);i0.default.existsSync(eh)&&i0.default.rmSync(eh,{recursive:!0});let u=(0,IQ.join)(eh,t5);i0.default.mkdirSync(eh),i0.default.mkdirSync(u),console.log("CouchDB Export");let c=lP(i.length),l=0;for(let f of i){c.update(++l);let d=new o(f),m=new a((0,IQ.join)(eh,t5,f));await QBt(d,m),await d.close(),await m.close()}c.stop(),console.log("S3 Export"),await oWn(),uWn.create({sync:!0,gzip:!0,file:r,cwd:(0,IQ.join)(eh)},[t5,Uoe]),i0.default.rmSync(eh,{recursive:!0}),console.log(`Generated export file - ${r}`)}s(cWn,"exportBackup");async function lWn(t){let e=t.env||void 0,r=t.import||t,n=await FBt(e);(!r||!i0.default.existsSync(r))&&(console.error("Cannot import without specifying a valid file to import"),process.exit(-1)),i0.default.existsSync(eh)&&i0.default.rmSync(eh,{recursive:!0}),i0.default.mkdirSync(eh),uWn.extract({sync:!0,cwd:(0,IQ.join)(eh),file:r});let{Remote:i,Local:o}=qBt(n),a=i0.default.readdirSync((0,IQ.join)(eh,t5));console.log("CouchDB Import");let u=lP(a.length),c=0;for(let l of a){u.update(++c);let f=new i(l),d=new o((0,IQ.join)(eh,t5,l));await QBt(d,f),await f.close(),await d.close()}u.stop(),console.log("MinIO Import"),await aWn();try{await yqe(`http://localhost:${n.MAIN_PORT}/api/system/restored`,"POST")}catch{}console.log("Import complete"),i0.default.rmSync(eh,{recursive:!0})}s(lWn,"importBackup");async function dBa(t){if(t.import)return lWn(t);if(t.export)return cWn(t)}s(dBa,"pickOne");var fWn=new NI("backups").addHelp("Allows building backups of Budibase, as well as importing a backup to a new instance.").addSubOption("--export [filename]","Export a backup from an existing Budibase installation.",cWn).addSubOption("--import [filename]","Import a backup to a new Budibase installation.",lWn).addSubOption("--env [envFile]","Provide an environment variable file to configure the CLI.",dBa);xx();var hXn=ge(require("node-fetch")),GQ=ge(require("fs")),pXn=ge(require("os")),FMe=require("path");var uXn=ge(pWn()),cXn=ge(require("vm")),_Lt=ge(Zoe());var KO=class{static{s(this,"Helper")}constructor(e,r,n=!0){this.name=e,this.fn=r,this.useValueFallback=n}register(e){e.registerHelper(this.name,(r,n)=>{let i={};n&&n.data&&n.data.root&&(i=n.data.root);let o=this.fn(r,i);return o??(this.useValueFallback?r:null)})}unregister(e){e.unregisterHelper(this.name)}};var UMe=ge(Zoe());var QPt=ge(kKn());var Zh=ge(Zqe()),jKn=ge(PKn()),VKn=ge(LKn()),HKn=ge(MKn()),YKn=ge(UKn()),WKn=ge(FKn()),zKn=ge(QKn()),$Kn=ge(qKn()),KKn=ge(GKn());Zh.default.extend(jKn.default);Zh.default.extend(VKn.default);Zh.default.extend(HKn.default);Zh.default.extend(YKn.default);Zh.default.extend(WKn.default);Zh.default.extend(zKn.default);Zh.default.extend($Kn.default);Zh.default.extend(KKn.default);function UQ(t){return typeof t=="object"&&typeof t.hash=="object"}s(UQ,"isOptions");function MPt(t){return typeof t=="object"&&typeof t.options=="object"&&typeof t.app=="object"}s(MPt,"isApp");function UPt(t,e,r){if(UQ(t))return UPt({},e,t);if(UQ(e))return UPt(t,r,e);let n=MPt(t)?t.context:{};r=r||{},UQ(r)||(e=Object.assign({},e,r)),UQ(r)&&r.hash.root===!0&&(e=Object.assign({},r.data.root,e));let i=Object.assign({},n,e,r.hash);return MPt(t)||(i=Object.assign({},t,i)),MPt(t)&&t.view&&t.view.data&&(i=Object.assign({},i,t.view.data)),i}s(UPt,"getContext");function FPt(t,e,r){return UQ(e)&&(r=e,e=XKn),UQ(t)&&(r=t,e=null,t=null),{str:t,pattern:e,options:r}}s(FPt,"initialConfig");function JKn(t,e,r){let n=FPt(t,e,r),i={lang:"en",date:new Date(n.str)},o=UPt(this,i,{});Zh.default.locale(o.lang||o.language)}s(JKn,"setLocale");var XKn="MMMM DD, YYYY",RMe=s((t,e,r)=>{let n=FPt(t,e,r);if(n.str==null&&n.pattern==null)return Zh.default.locale("en"),(0,Zh.default)().format(XKn);JKn(n.str,n.pattern,n.options);let i=(0,Zh.default)(new Date(n.str));return typeof n.options=="string"?i=n.options.toLowerCase()==="utc"?i.utc():i.tz(n.options):i=i.tz(Zh.default.tz.guess()),n.pattern===""?i.toISOString():i.format(n.pattern)},"date"),mae=s((t,e,r)=>{let n=FPt(t,e);JKn(n.str,n.pattern);let i=Zh.default.duration(n.str,n.pattern);return r&&!UQ(r)?i.format(r):i.humanize()},"duration"),Aae=s((t,e,r)=>(0,Zh.default)(new Date(t)).diff((0,Zh.default)(new Date(e)),r),"difference"),CMe=s(t=>{let e=Aae(t,new Date().toISOString(),"ms");return mae(e,"ms")},"durationFromNow");var bMe=["#if","#unless","#each","#with","lookup","log","blockHelperMissing","each","helperMissing","if","unless","log","lookup","with"],ZKn=["math","array","number","url","string","comparison","object","regex","uuid"],FQ={OBJECT:"object",ALL:"all",LITERAL:"literal",JS:"js",DECODE_ID:"decodeId"},_5="%LITERAL%";var e7n={date:RMe,duration:mae,difference:Aae,durationFromNow:CMe};function t7n(t){for(let[r,n]of Object.entries(e7n))t.registerHelper(r,n);let e=[];for(let r of ZKn){let n=QPt.default[r]();for(let i of Object.entries(n)){let o=i[0];bMe.indexOf(o)!==-1||e.indexOf(o)!==-1||e.push(o)}QPt.default[r]({handlebars:t})}qPt=e.concat(Object.keys(e7n))}s(t7n,"registerAll");var qPt=[];function tFa(){return process.env.NODE_ENV==="jest"||process.env.JEST_WORKER_ID!=null&&process.env.JEST_WORKER_ID!=="null"}s(tFa,"isJest");function QQ(){return tFa()}s(QQ,"isTest");var r7n=s(()=>process&&process.env.BACKEND_JS,"isTestingBackendJS");var rFa=/^[A-Za-z0-9]+$/g,wMe=/{{([^{].*?)}}/g,GPt=/{?{{([^{].*?)}}}?/g,nFa=/{{{([^{].*?)}}}/g,_ae=s(()=>QQ()&&r7n()?!0:QQ()?!1:typeof window>"u","isBackendService"),n7n=s(()=>process&&!process.env.NO_JS,"isJSAllowed"),i7n=s(t=>{let e=t,r=new RegExp(wMe),n=new RegExp(nFa),i=e.match(n);i&&i.forEach(a=>{e=e.replace(a,"")});let o=e.match(r);return o||[]},"findDoubleHbsInstances"),s7n=s(t=>t.match(rFa),"isAlphaNumeric"),jPt=s((t,e,r,n)=>t.slice(0,e)+n+t.slice(e+r),"swapStrings");var VPt=s(t=>Buffer.from(t,"base64").toString("utf-8"),"atob"),o7n=s((t,e,r)=>{let n=e.map(o=>o.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")),i=new RegExp(`\\b(${n.join("|")})\\b`,"g");return t.replace(i,`${r}$1`)},"prefixStrings");function NMe(t){return`
4434
+ }`;await Kpe(t,e,"by_api_key")},"createApiKeyView");async function b$e(t,e,r,n,i){try{return await r.query(`database/${t}`,e)}catch(o){let a=o&&o.name==="not_found",u=o&&o.status===404;if(a||u)return await ces(r,t),await n(),b$e(t,e,r,n,i);if(o.status===409)return b$e(t,e,r,n,i);throw o}}s(b$e,"queryViewRaw");var hes=s(async(t,e,r,n,i)=>{let u=(await b$e(t,e,r,n,i)).rows.map(c=>e.include_docs?c.doc:c.value);return i?.arrayResponse?u:u.length<=1?u[0]:u},"queryView");var pes={by_email2:les,by_api_key:des,by_app:fes},Jpe=s(async(t,e,r,n)=>{r||(r=lp());let i=pes[t];return hes(t,e,r,i,n)},"queryGlobalView");ur();var ges=ge(require("pouchdb"));var mes=require("dd-trace");var dpr=ge(require("node-fetch"));ur();var N$e=_3.removeKeyNumbering;function r1(t){return t==null||t===""}s(r1,"isEmpty");var lpr=class t{static{s(this,"QueryBuilder")}#e;#r;#t;#i;#s;#n;#c;#o;#a;#u;#l;#f=!1;#d;static{this.maxLimit=200}constructor(e,r,n){this.#e=e,this.#r=r,this.#t={allOr:!1,onEmptyFilter:"all",string:{},fuzzy:{},range:{},equal:{},notEqual:{},empty:{},notEmpty:{},oneOf:{},notOneOf:{},contains:{},notContains:{},containsAny:{},...n},this.#i=50,this.#c="ascending",this.#o="string",this.#a=!0}disableEscaping(){return this.#f=!0,this}setIndexBuilder(e){return this.#l=e,this}setVersion(e){return e!=null&&(this.#u=e),this}setTable(e){return this.#t.equal.tableId=e,this}setLimit(e){return e!=null&&(this.#i=e),this}setSort(e){return e!=null&&(this.#s=e),this}setSortOrder(e){return e!=null&&(this.#c=e),this}setSortType(e){return e!=null&&(this.#o=e),this}setBookmark(e){return e!=null&&(this.#n=e),this}setSkip(e){return this.#d=e,this}excludeDocs(){return this.#a=!1,this}includeDocs(){return this.#a=!0,this}addString(e,r){return this.#t.string[e]=r,this}addFuzzy(e,r){return this.#t.fuzzy[e]=r,this}addRange(e,r,n){return this.#t.range[e]={low:r,high:n},this}addEqual(e,r){return this.#t.equal[e]=r,this}addNotEqual(e,r){return this.#t.notEqual[e]=r,this}addEmpty(e,r){return this.#t.empty[e]=r,this}addNotEmpty(e,r){return this.#t.notEmpty[e]=r,this}addOneOf(e,r){return this.#t.oneOf[e]=r,this}addNotOneOf(e,r){return this.#t.notOneOf[e]=r,this}addContains(e,r){return this.#t.contains[e]=r,this}addNotContains(e,r){return this.#t.notContains[e]=r,this}addContainsAny(e,r){return this.#t.containsAny[e]=r,this}setAllOr(){this.#t.allOr=!0}setOnEmptyFilter(e){this.#t.onEmptyFilter=e}handleSpaces(e){return this.#f?e:e.replace(/ /g,"_")}preprocess(e,{escape:r,lowercase:n,wrap:i,type:o}={}){let a=!!this.#u,u=typeof e;return e&&n&&(e=e.toLowerCase?e.toLowerCase():e),!this.#f&&r&&u==="string"&&(e=`${e}`.replace(/[ /#+\-&|!(){}\]^"~*?:\\]/g,"\\$&")),u==="string"&&!isNaN(e)&&!o?e=`"${e}"`:a&&i&&(e=u==="number"?e:`"${e}"`),e}isMultiCondition(){let e=0;for(let r of Object.values(this.#t))typeof r=="object"&&(e+=Object.keys(r).length);return e>1}compressFilters(e){let r={};for(let o of Object.keys(e)){let a=N$e(o);r[a]?r[a]=r[a].concat(e[o]):r[a]=e[o]}let n={},i=1;for(let[o,a]of Object.entries(r))n[`${i++}:${o}`]=a;return n}buildSearchQuery(){let e=this,r=this.#t&&this.#t.allOr,n=r?"":"*:*",i=!0,o={escape:!0,lowercase:!0,wrap:!0},a="";this.#t.equal.tableId&&(a=this.#t.equal.tableId,delete this.#t.equal.tableId);let u=s((S,b)=>r1(b)?null:`${S}:${e.preprocess(b,o)}`,"equal"),c=s((S,b,C="AND")=>{if(r1(b))return null;if(!Array.isArray(b))return`${S}:${b}`;let B=`${e.preprocess(b[0],{escape:!0})}`;for(let k=1;k<b.length;k++)B+=` ${C} ${e.preprocess(b[k],{escape:!0})}`;return`${S}:(${B})`},"contains"),l=s((S,b)=>r1(b)?null:(b=e.preprocess(b,{escape:!0,lowercase:!0,type:"fuzzy"}),`${S}:/.*${b}.*/`),"fuzzy"),f=s((S,b)=>{let C=r?"*:* AND ":"",B=r?"AND":void 0;return C+"NOT "+c(S,b,B)},"notContains"),d=s((S,b)=>c(S,b,"OR"),"containsAny"),m=s((S,b)=>{if(r1(b))return"*:*";if(!Array.isArray(b))if(typeof b=="string")b=b.split(",");else return"";let C=`${e.preprocess(b[0],o)}`;for(let B=1;B<b.length;B++)C+=` OR ${e.preprocess(b[B],o)}`;return`${S}:(${C})`},"oneOf"),A=s((S,b)=>{if(r1(b))return null;if(!Array.isArray(b))if(typeof b=="string")b=b.split(",");else return"";let C=`${e.preprocess(b[0],o)}`;for(let B=1;B<b.length;B++)C+=` OR ${e.preprocess(b[B],o)}`;return`(*:* -${S}:(${C}))`},"notOneOf");function T(S,b,C){let B="";for(let[k,P]of Object.entries(S)){k=N$e(k),k=e.preprocess(e.handleSpaces(k),{escape:!0});let x=b(k,P);if(x!=null){if(B.length>0||n.length>0){let V=C?.mode?C.mode:r?"OR":"AND";B+=` ${V} `}B+=x,(typeof P!="string"&&P!=null||typeof P=="string"&&P!==a&&P!=="")&&(i=!1)}}if(C?.returnBuilt)return B;n+=B}if(s(T,"build"),this.#t.string&&T(this.#t.string,(S,b)=>r1(b)?null:(b=e.preprocess(b,{escape:!0,lowercase:!0,type:"string"}),`${S}:${b}*`)),this.#t.range&&T(this.#t.range,(S,b)=>{if(r1(b)||b.low==null||b.low===""||b.high==null||b.high==="")return null;let C=e.preprocess(b.low,o),B=e.preprocess(b.high,o);return`${S}:[${C} TO ${B}]`}),this.#t.fuzzy&&T(this.#t.fuzzy,l),this.#t.equal&&T(this.#t.equal,u),this.#t.notEqual&&T(this.#t.notEqual,(S,b)=>r1(b)?null:typeof b=="boolean"?`(*:* AND !${S}:${b})`:`!${S}:${e.preprocess(b,o)}`),this.#t.empty&&T(this.#t.empty,S=>(i=!1,`(*:* -${S}:["" TO *])`)),this.#t.notEmpty&&T(this.#t.notEmpty,S=>(i=!1,`${S}:["" TO *]`)),this.#t.oneOf&&T(this.#t.oneOf,m),this.#t.notOneOf&&T(this.#t.notOneOf,A),this.#t.contains&&T(this.#t.contains,c),this.#t.notContains&&T(this.compressFilters(this.#t.notContains),f),this.#t.containsAny&&T(this.#t.containsAny,d),a&&(n=this.isMultiCondition()?`(${n})`:n,r=!1,T({tableId:a},u)),i){if(this.#t.onEmptyFilter==="none")return"";if(this.#t?.allOr)return n.replace("()","(*:*)")}return n}buildSearchBody(){let e={q:this.buildSearchQuery(),limit:Math.min(this.#i,t.maxLimit),include_docs:this.#a};if(this.#n&&(e.bookmark=this.#n),this.#s){let r=this.#c==="descending"?"-":"",n=`<${this.#o}>`;e.sort=`${r}${this.handleSpaces(this.#s)}${n}`}return e}async run(){return this.#d&&await this.#p(this.#d),await this.#m()}async#p(e){let r=this.#a,n=this.#i;this.excludeDocs();let i=e,o=0;do{let a=Math.min(t.maxLimit,i);this.setLimit(a);let{bookmark:u,rows:c}=await this.#m();this.setBookmark(u),o=c.length,i-=c.length}while(i>0&&o>0);this.#a=r,this.#i=n}async#m(){let{url:e,cookie:r}=QP(),n=`${e}/${this.#e}/_design/database/_search/${this.#r}`,i=this.buildSearchBody();try{return await fpr(n,i,r)}catch(o){if(o.status===404&&this.#l)return await this.#l(),await fpr(n,i,r);throw o}}};async function fpr(t,e,r){let n=await(0,dpr.default)(t,{body:JSON.stringify(e),method:"POST",headers:{Authorization:r}});if(n.status===404)throw n;let i=await n.json(),o={rows:[],totalRows:0};return i.rows!=null&&i.rows.length>0&&(o.rows=i.rows.map(a=>a.doc)),i.bookmark&&(o.bookmark=i.bookmark),i.total_rows&&(o.totalRows=i.total_rows),o}s(fpr,"runQuery");ur();var U7={};Fi(U7,{addTenantToUrl:()=>_es,getTenantDB:()=>hpr,getTenantIDFromCtx:()=>O$e,isUserInWorkspaceTenant:()=>Ees});function hpr(t){return G0(nK(t))}s(hpr,"getTenantDB");ur();function _es(t){let e=Hs();if(ZP()){let r=t.indexOf("?")===-1?"?":"&";t+=`${r}tenantId=${e}`}return t}s(_es,"addTenantToUrl");var Ees=s((t,e)=>{let r;return e?r=e.tenantId||uh:r=Hs(),(Y3(t)||uh)===r},"isUserInWorkspaceTenant"),yes=Object.values(W9),O$e=s((t,e)=>{if(!ZP())return uh;e.allowNoTenant===void 0&&(e.allowNoTenant=!1),e.includeStrategies||(e.includeStrategies=yes),e.excludeStrategies||(e.excludeStrategies=[]);let r=s(n=>{if(e.excludeStrategies?.includes(n))return!1;if(e.includeStrategies?.includes(n))return!0},"isAllowed");if(r("user")){let n=t.user?.tenantId;if(n)return n}if(r("header")){let n=t.request.headers["x-budibase-tenant-id"];if(n)return n}if(r("query")){let n=t.request.query.tenantId;if(n)return n}if(r("subdomain")){let n;try{n=new URL(gHe()).host.split(":")[0]}catch(o){if(o.code!=="ERR_INVALID_URL")throw o}let i=t.host;if(n&&i.includes(n)){let o=i.substring(0,i.indexOf(`.${n}`));if(o)return o}}if(r("path")){let n=t.matched.find(a=>!!a.paramNames.find(u=>u.name==="tenantId")),i=t.originalUrl,o;if(i.includes("?")?o=i.split("?")[0]:o=i,n){let a=n.params(o,n.captures(o),{});if(a.tenantId)return a.tenantId}}e.allowNoTenant||t.throw(403,"Tenant id not set")},"getTenantIDFromCtx");ur();var Xpe={milliseconds:1,seconds:1e3,minutes:60*1e3,hours:3600*1e3,days:1440*60*1e3},_h=class t{constructor(e){this.ms=e}static{s(this,"Duration")}to(e){return this.ms/Xpe[e]}toMs(){return this.ms}toSeconds(){return this.to("seconds")}static convert(e,r,n){return n*Xpe[e]/Xpe[r]}static from(e,r){return new t(r*Xpe[e])}static fromSeconds(e){return t.from("seconds",e)}static fromMinutes(e){return t.from("minutes",e)}static fromHours(e){return t.from("hours",e)}static fromDays(e){return t.from("days",e)}static fromMilliseconds(e){return t.from("milliseconds",e)}};function ppr(){let t=_h.fromDays(7).toSeconds();if(!dt.SESSION_EXPIRY_SECONDS)return t;let e=parseInt(dt.SESSION_EXPIRY_SECONDS);return Number.isFinite(e)&&e>0?e:t}s(ppr,"getSessionExpirySeconds");var ahu="app_";function gpr(t){return new Promise(e=>setTimeout(e,t))}s(gpr,"timeout");function mpr(t){return!!sUt[t]}s(mpr,"isAudited");var tIr=ge(eIr());var dZe=require("util"),hZe=ge(require("zlib"));var AAu=(0,dZe.promisify)(hZe.default.gzip),_Au=(0,dZe.promisify)(hZe.default.gunzip);var uIr=ge(require("http")),cIr=ge(require("https"));var rIr=ge(require("dns")),v1=ge(require("net"));var nIr=require("util");var nAs=["127.0.0.0/8","10.0.0.0/8","172.16.0.0/12","192.168.0.0/16","169.254.0.0/16","0.0.0.0/8","::1/128","fc00::/7","fe80::/10"],gZe,iAs=(0,nIr.promisify)(rIr.default.lookup);function iIr(){return!(dt.SELF_HOSTED&&dt.BLACKLIST_IPS!==void 0)}s(iIr,"shouldApplyDefaultBlacklist");function mZe(t){return v1.default.isIP(t)===6?"ipv6":"ipv4"}s(mZe,"getIpVersion");function sAs(t){let e=v1.default.isIP(t);return e===4?32:e===6?128:null}s(sAs,"getMaxPrefixLength");function oAs(t,e){if(!/^\d+$/.test(e))return null;let r=Number.parseInt(e,10),n=sAs(t);return n==null||r>n?null:r}s(oAs,"getValidSubnetPrefix");function aAs(t){return v1.default.isIP(t)?t:(/^https?:\/\//.test(t)||(t=`https://${t}`),new URL(t).hostname.replace(/^\[|\]$/g,""))}s(aAs,"parseAddress");async function sIr(t){return t=aAs(t),(await iAs(t,{all:!0})).map(r=>r.address)}s(sIr,"lookup");async function AZe(t){return v1.default.isIP(t)?[t]:sIr(t)}s(AZe,"resolveAddress");function pZe(t,e){let r=e.trim();if(!r)return;let n=r.split("/");if(n.length>2){console.log(`Ignoring invalid blacklist entry: ${r}`);return}let[i,o]=n,a=v1.default.isIP(i);if(n.length===2){let u=oAs(i,o);if(a&&u!==null){t.addSubnet(i,u,mZe(i));return}console.log(`Ignoring invalid blacklist entry: ${r}`);return}a&&t.addAddress(i,mZe(i))}s(pZe,"addEntryToBlacklist");async function uAs(){let t=new v1.default.BlockList;if(iIr())for(let r of nAs)pZe(t,r);let e=dt.BLACKLIST_IPS?.split(",")||[];for(let r of e){let n=r.trim();if(!n)continue;let[i]=n.split("/");if(v1.default.isIP(i)){pZe(t,n);continue}let o=await sIr(n);for(let a of o)pZe(t,a)}gZe=t}s(uAs,"refreshBlacklist");async function oIr(t){gZe||await uAs();let e;try{e=await AZe(t)}catch(r){return r instanceof TypeError?(console.error("Black list error: could not parse address: ",t),!0):iIr()}return e.some(r=>gZe.check(r,mZe(r)))}s(oIr,"isBlacklisted");var Zme=ge(require("node-fetch"));var aIr=5,lAs=new Set(["http:","https:"]),fAs=["authorization","cookie","cookie2","proxy-authorization"];function _Ze(t){let e;try{e=new URL(t)}catch{throw new Error("Invalid URL.")}if(!lAs.has(e.protocol))throw new Error("Only HTTP(S) URLs are allowed.");if(e.username||e.password)throw new Error("URL must not include credentials.");return e}s(_Ze,"parseUrl");function dAs(t){return[301,302,303,307,308].includes(t)}s(dAs,"isRedirect");async function hAs(t){let e=_Ze(t),r=await AZe(e.hostname);if(r.length===0)throw new Error("URL is blocked or could not be resolved safely.");for(let n of r)if(await oIr(n))throw new Error("URL is blocked or could not be resolved safely.");return r[0]}s(hAs,"resolveSafePinnedIp");function pAs(t){let e=t.includes(":")?6:4;return(r,n,i)=>{if(typeof n=="object"&&n?.all){i(null,[{address:t,family:e}]);return}i(null,t,e)}}s(pAs,"createPinnedLookup");function gAs(t,e){let r=new URL(t).protocol,n=pAs(e);return r==="https:"?new cIr.default.Agent({lookup:n}):new uIr.default.Agent({lookup:n})}s(gAs,"makePinnedAgent");function mAs(t,e){let r=t.method?.toUpperCase()||"GET";return e===303||(e===301||e===302)&&r==="POST"?{...t,body:void 0,method:"GET",redirect:"manual"}:t}s(mAs,"nextRequestForRedirect");function AAs(t,e){return new URL(t).origin!==new URL(e).origin}s(AAs,"shouldStripSensitiveHeadersForRedirect");function _As(t){if(!t.headers)return t;let e=new Zme.Headers(t.headers);return fAs.forEach(r=>e.delete(r)),{...t,headers:e}}s(_As,"stripSensitiveHeadersForRedirect");function EAs(t){return!t||typeof t!="object"||!("resume"in t)?!1:typeof t.resume=="function"}s(EAs,"isResumableBody");function yAs(t){let e=t.body;EAs(e)&&e.resume()}s(yAs,"releaseResponseBody");async function GJ(t,e={},{followRedirects:r=!0,returnRedirectWithoutLocation:n=!1,rejectCrossOriginRedirects:i=!1,fetchFn:o=Zme.default}={}){let a=t,u={...e,redirect:"manual"};for(let c=0;c<=aIr;c++){let l=await hAs(a),f;try{f=await o(a,{...u,agent:gAs(a,l)},l)}catch(A){let T=_Ze(a).hostname;throw A instanceof Error?(A.message=`Failed to connect to resolved IP for ${T}: ${A.message}`,A):new Error(`Failed to connect to resolved IP for ${T}: unknown network error`)}if(!dAs(f.status))return f;if(yAs(f),!r)throw new Error("Redirects are not permitted.");if(c===aIr)break;let d=f.headers.get("location");if(!d){if(n)return f;throw new Error("Maximum redirect reached.")}let m=_Ze(new URL(d,a).toString()).toString();if(u=mAs(u,f.status),AAs(a,m)){if(i)throw new Error("Redirect to a different origin is not permitted.");u=_As(u)}a=m}throw new Error("Maximum redirect reached.")}s(GJ,"fetchWithBlacklist");function TAs(t){let e="",r=-1,n,i,o=t.opts?.repeat;return o&&(i=o.endDate?new Date(o.endDate).getTime():Date.now(),n=o.tz,"cron"in o?e=o.cron:r=o.every),{id:t.id.toString(),name:"",key:t.id.toString(),tz:n,endDate:i,cron:e,every:r,next:0}}s(TAs,"jobToJobInformation");var EZe=class{static{s(this,"InMemoryQueue")}constructor(e,r){this._name=e,this._opts=r,this._messages=[],this._emitter=new lIr.default.EventEmitter,this._runCount=0,this._addCount=0,this._queuedJobIds=new Set,this._attempts=r?.defaultJobOptions?.attempts||1}async process(e,r){r=typeof e=="number"?r:e,this._emitter.on("message",async n=>{if(!n.manualTrigger&&n.opts?.repeat!=null)return;function i(){return r.length===1?r(n):new Promise((c,l)=>{r(n,s((d,m)=>{d?l(d):c(m)},"done"))})}s(i,"execute");let o=this._attempts;async function a(c,l=0){try{return await c}catch(f){if(l++,l<o&&!n._isDiscarded)return await $b.wait(100*l),await a(i(),l);throw f}}s(a,"retryFunc");try{let c=await a(i());this._emitter.emit("completed",n,c);let l=this._messages.indexOf(n);if(l===-1)throw"Failed deleting a processed message";this._messages.splice(l,1)}catch(c){console.error(c),this._emitter.emit("error",n,c)}this._runCount++;let u=n.opts?.jobId?.toString();u&&n.opts?.removeOnComplete&&this._queuedJobIds.delete(u)})}async isReady(){return this}async add(e,r){if(typeof e=="string")throw new Error("doesn't support named jobs");let n=r,i=n?.jobId?.toString();if(i&&this._queuedJobIds.has(i)){console.log(`Ignoring already queued job ${i}`);return}if(typeof e!="object")throw"Queue only supports carrying JSON.";i&&this._queuedJobIds.add(i);let o=MI(),a=s(()=>{let c={id:o,timestamp:Date.now(),queue:this,data:e,opts:n,discard:s(async()=>{c._isDiscarded=!0},"discard")};this._messages.push(c),this._messages.length>1e3&&this._messages.shift(),this._addCount++,this._emitter.emit("message",c)},"pushMessage"),u=n?.delay;return u?setTimeout(a,u):a(),{id:i,finished:s(()=>new Promise((c,l)=>{let f=s((m,A)=>{m.id===o&&(this._emitter.off("error",f),this._emitter.off("completed",d),l(A))},"errorHandler"),d=s((m,A)=>{m.id===o&&(this._emitter.off("error",f),this._emitter.off("completed",d),c(A))},"completedHandler");this._emitter.on("error",f),this._emitter.on("completed",d)}),"finished")}}async close(){}async removeRepeatableByKey(e){for(let[r,n]of this._messages.entries())if(n.id===e){this._messages.splice(r,1),this._emitter.emit("removed",n);return}}async removeJobs(e){}async clean(){return[]}async getJob(e){for(let r of this._messages)if(r.id===e)return r;return null}async getJobs(){return this._messages}manualTrigger(e){for(let r of this._messages)if(r.id===e){this._emitter.emit("message",{...r,manualTrigger:!0});return}throw new Error(`Job with id ${e} not found`)}on(e,r){return this._emitter.on(e,r),this}off(e,r){return this._emitter.off(e,r),this}async count(){return this._messages.length}async getCompletedCount(){return this._runCount}async getRepeatableJobs(){return this._messages.filter(e=>e.opts?.repeat!=null).map(e=>TAs(e))}async whenCurrentJobsFinished(){do await gpr(50);while(this.hasRunningJobs())}hasRunningJobs(){return this._addCount>this._runCount}},fIr=EZe;var wtt=ge(dNr());function hNr(t,e,r){VIs(t,e),r&&GIs(t,r)}s(hNr,"addListeners");function GIs(t,e){t.on("stalled",async r=>{if(e)await e(r);else if(r.opts.repeat){let n=r.id,i=await t.getRepeatableJobs();for(let o of i)o.id===n&&await t.removeRepeatableByKey(o.key);console.log(`jobId=${n} disabled`)}})}s(GIs,"handleStalled");function Vy(t,e,r={},n={}){let i=`[BULL] ${t}=${e}`,o=r.error,a={_logKey:"bull",eventType:t,event:e,job:r.job,jobId:r.jobId||r.job?.id,...n},u;return r.job?.data?.automation&&(u={_logKey:"automation",trigger:r.job?r.job.data.automation.definition.trigger.event:void 0}),[i,o,a,u]}s(Vy,"getLogParams");var jIs={automationQueue:"automation-event",appBackupQueue:"app-backup-event",auditLogQueue:"audit-log-event",systemEventQueue:"system-event",appMigration:"app-migration",docWritethroughQueue:"doc-writethrough",devRevertProcessorQueue:"dev-revert-event",batchUserSyncProcessorQueue:"batch-user-sync-processor",ragIngestionQueue:"rag-ingestion-processor",agentLogIndexingQueue:"agent-log-indexing-processor",escalationQueue:"escalation-processor",agentRequestTrackingQueue:"agent-request-tracking-processor",agentTestRunQueue:"agent-test-run-processor",knowledgeSourceSyncQueue:"knowledge-source-sync-processor"};function VIs(t,e){let r=jIs[e];function n(i,o){let a=i.data.event?.appId;if(a)return mHe(a,o);o()}s(n,"doInJobContext"),t.on("stalled",async i=>{await n(i,()=>{console.error(...Vy(r,"stalled",{job:i}))})}).on("error",i=>{console.error(...Vy(r,"error",{error:i}))}),process.env.NODE_DEBUG?.includes("bull")&&t.on("waiting",i=>{console.info(...Vy(r,"waiting",{jobId:i}))}).on("active",async i=>{await n(i,()=>{console.info(...Vy(r,"active",{job:i}))})}).on("progress",async(i,o)=>{await n(i,()=>{console.info(...Vy(r,"progress",{job:i},{progress:o}))})}).on("completed",async(i,o)=>{await n(i,()=>{console.info(...Vy(r,"completed",{job:i},{result:o}))})}).on("failed",async(i,o)=>{await n(i,()=>{console.error(...Vy(r,"failed",{job:i,error:o}))})}).on("paused",()=>{console.info(...Vy(r,"paused"))}).on("resumed",()=>{console.info(...Vy(r,"resumed"))}).on("cleaned",(i,o)=>{console.info(...Vy(r,"cleaned",{},{length:i.length,type:o}))}).on("drained",()=>{console.info(...Vy(r,"drained"))}).on("removed",i=>{console.info(...Vy(r,"removed",{job:i}))})}s(VIs,"logging");var HIs=[];function pNr(t,e){let r=setInterval(t,e);return HIs.push(r),r}s(pNr,"set");var iN=ge(require("dd-trace")),pX=ge(qNr());var NRs=_h.fromMinutes(5).toMs(),ORs=_h.fromSeconds(30).toMs(),Ntt=_h.fromSeconds(60).toMs(),VNr=[],GNr;async function jNr(){for(let t of VNr)await t.clean(Ntt,"completed"),await t.clean(Ntt,"failed")}s(jNr,"cleanup");async function xRs(t,e,r){let n=performance.now();try{let i=await e();return iN.default.dogstatsd.increment(`${t}.success`,1,r),i}catch(i){throw iN.default.dogstatsd.increment(`${t}.error`,1,r),i}finally{let i=performance.now()-n;iN.default.dogstatsd.distribution(`${t}.duration.ms`,i,r),iN.default.dogstatsd.increment(t,1,r)}}s(xRs,"withMetrics");function HNr(t){return{"job.opts.attempts":t.attempts,"job.opts.backoff":t.backoff,"job.opts.delay":t.delay,"job.opts.jobId":t.jobId,"job.opts.lifo":t.lifo,"job.opts.preventParsingData":t.preventParsingData,"job.opts.priority":t.priority,"job.opts.removeOnComplete":t.removeOnComplete,"job.opts.removeOnFail":t.removeOnFail,"job.opts.repeat":t.repeat,"job.opts.stackTraceLimit":t.stackTraceLimit,"job.opts.timeout":t.timeout}}s(HNr,"jobOptsTags");function vRs(t){return{"job.id":t.id,"job.attemptsMade":t.attemptsMade,"job.timestamp":t.timestamp,"job.data.sizeBytes":(0,pX.default)(t.data),...HNr(t.opts||{})}}s(vRs,"jobTags");var eU=class{static{s(this,"BudibaseQueue")}constructor(e,r={}){this.opts=r,this.jobQueue=e,this.queue=this.initQueue()}get name(){return this.queue.name}initQueue(){let r={redis:S3(),settings:{maxStalledCount:this.opts.maxStalledCount?this.opts.maxStalledCount:0,lockDuration:NRs,lockRenewTime:ORs}};this.opts.jobOptions&&(r.defaultJobOptions=this.opts.jobOptions);let n;return dt.isTest()?process.env.BULL_TEST_REDIS_PORT&&!isNaN(+process.env.BULL_TEST_REDIS_PORT)?n=new wtt.default(this.jobQueue,{...r,redis:{host:"localhost",port:+process.env.BULL_TEST_REDIS_PORT}}):n=new fIr(this.jobQueue,r):n=new wtt.default(this.jobQueue,r),hNr(n,this.jobQueue,this.opts.removeStalledCb),VNr.push(n),!GNr&&!dt.isTest()&&(GNr=pNr(jNr,Ntt),jNr().catch(i=>{console.error(`Unable to cleanup ${this.jobQueue} initially - ${i}`)})),n}getBullQueue(){return this.queue}process(...e){let r,n;e.length===2?(r=e[0],n=e[1]):n=e[0];let i=s(async(a,u)=>{await iN.default.trace("queue.process",async c=>{if(a.data._parentSpanContext){let l=a.data._parentSpanContext,f={traceId:l.traceId,spanId:l.spanId,toTraceId:s(()=>l.traceId,"toTraceId"),toSpanId:s(()=>l.spanId,"toSpanId"),toTraceparent:s(()=>"","toTraceparent")};c.addLink(f)}c.addTags({"queue.name":this.jobQueue,...vRs(a)}),this.opts.jobTags&&c.addTags(this.opts.jobTags(a.data)),iN.default.dogstatsd.distribution("queue.process.sizeBytes",(0,pX.default)(a.data),this.metricTags()),await this.withMetrics("queue.process",()=>u?n(a,u):n(a))})},"processCallback"),o;return n.length===1?o=s(a=>i(a),"wrappedCb"):o=i,r?this.queue.process(r,o):this.queue.process(o)}async add(e,r){return await iN.default.trace("queue.add",async n=>(n.addTags({"queue.name":this.jobQueue,"job.data.sizeBytes":(0,pX.default)(e),...HNr(r||{})}),this.opts.jobTags&&n.addTags(this.opts.jobTags(e)),e._parentSpanContext={traceId:n.context().toTraceId(),spanId:n.context().toSpanId()},iN.default.dogstatsd.distribution("queue.add.sizeBytes",(0,pX.default)(e),this.metricTags()),await this.withMetrics("queue.add",()=>this.queue.add(e,r))))}withMetrics(e,r){return xRs(e,r,this.metricTags())}metricTags(){return{queueName:this.jobQueue}}close(e){return this.queue.close(e)}whenCurrentJobsFinished(){return this.queue.whenCurrentJobsFinished()}};var KAe={};Fi(KAe,{getId:()=>xtt,setHeader:()=>URs});var zNr=$Ae(),URs=s(t=>{let e=zNr.getId();e&&(t["x-budibase-correlation-id"]=e)},"setHeader");function xtt(){return zNr.getId()}s(xtt,"getId");var Abe=ge(Zxr()),kJr=ge(Cst()),mpt=ge(require("dd-trace")),PJr=require("dd-trace/ext");var vJr=ge(require("path")),DJr=ge(mMr());var mbe={};Fi(mbe,{ObjectStore:()=>hT,ObjectStoreBuckets:()=>Fho,SIGNED_FILE_PREFIX:()=>apt,bucketTTLConfig:()=>cbe,budibaseTempDir:()=>CF,client3rdPartyLibrary:()=>Dpo,clientLibraryPath:()=>vpo,clientLibraryUrl:()=>Bpo,createBucketIfNotExists:()=>zte,deleteFile:()=>npo,deleteFiles:()=>ipo,deleteFolder:()=>AJr,downloadTarball:()=>opo,downloadTarballDirect:()=>spo,enrichPWAImages:()=>kpo,enrichPluginURLs:()=>Lpo,extractBucketAndPath:()=>npt,getAllFiles:()=>epo,getAppFileUrl:()=>RJr,getClientCacheKey:()=>IJr,getGlobalFileS3Key:()=>CJr,getGlobalFileUrl:()=>Ppo,getObjectMetadata:()=>apo,getPluginIconKey:()=>NJr,getPluginJSKey:()=>wJr,getPluginS3Dir:()=>xJr,getPresignedUrl:()=>bF,getReadStream:()=>lbe,getSafeRetrieveDirectoryPath:()=>mJr,listAllObjects:()=>upt,objectExists:()=>upo,processAutomationAttachment:()=>qho,processObjectStoreAttachment:()=>rJr,retrieve:()=>gJr,retrieveDirectory:()=>rpo,retrieveToTmp:()=>tpo,sanitizeBucket:()=>gm,sanitizeKey:()=>nf,streamUpload:()=>pJr,streamUploadMany:()=>Zho,upload:()=>Xho,uploadDirectory:()=>cpt});var dbe=ge(eht()),ipt=ge(V$r()),cJr=ge(W$r()),lJr=ge(aKr());var JN=ge(require("dd-trace")),aH=ge(require("fs")),Yte=ge(require("fs/promises")),fJr=ge(require("https")),EE=require("path"),hbe=ge(require("stream")),Wte=require("stream/promises"),spt=ge(J7r());zx();var opt=ge(require("zlib"));var X7r=ge(require("fs")),Z7r=require("os"),Hte=ge(require("path")),eJr=ge(require("stream"));var Fho={BACKUPS:dt.BACKUPS_BUCKET_NAME,APPS:dt.APPS_BUCKET_NAME,TEMPLATES:dt.TEMPLATES_BUCKET_NAME,GLOBAL:dt.GLOBAL_BUCKET_NAME,PLUGINS:dt.PLUGIN_BUCKET_NAME,TEMP:dt.TEMP_BUCKET_NAME},tJr=(0,Hte.join)((0,Z7r.tmpdir)(),".budibase");try{X7r.default.mkdirSync(tJr)}catch(t){if(t.code!=="EEXIST")throw t}function CF(){return tJr}s(CF,"budibaseTempDir");var cbe=s((t,e)=>{let n={Rules:[{ID:`${t}-ExpireAfter${e}days`,Prefix:"",Status:"Enabled",Expiration:{Days:e}}]};return{Bucket:t,LifecycleConfiguration:n}},"bucketTTLConfig");async function Qho(t){let e=await GJ(t.url);if(!e.ok||!e.body)throw new Error(`Unexpected response ${e.statusText}`);let r=Hte.default.basename(new URL(t.url).pathname);if(!e.body)throw new Error("No response received for attachment");if(!(e.body instanceof eJr.default.Readable))throw new Error("Unexpected response body stream type");return{filename:t.filename||r,content:e.body}}s(Qho,"processUrlAttachment");async function rJr(t){let e=npt(t.url);if(e===null)throw new Error("Invalid signed URL");let{bucket:r,path:n}=e,{stream:i}=await lbe(r,n),o=Hte.default.basename(n);return{bucket:r,path:n,filename:t.filename||o,content:i}}s(rJr,"processObjectStoreAttachment");async function qho(t){return t.url?.startsWith("http://")||t.url?.startsWith("https://")?await Qho(t):await rJr(t)}s(qho,"processAutomationAttachment");var zho=uJr(),$ho={bucketCreationPromises:{}},apt="/files/signed",eB={txt:"text/plain",html:"text/html",css:"text/css",js:"application/javascript",json:"application/json",gz:"application/gzip",svg:"image/svg+xml",form:"multipart/form-data"},Kho=[eB.html,eB.css,eB.js,eB.json];function nf(t){let e=zho(gm(t)).replace(/\\/g,"/");if(e.split("/").some(r=>r==="."||r===".."))throw new Error("Invalid object store key: path traversal is not allowed.");return e}s(nf,"sanitizeKey");function gm(t){return t.replace(new RegExp(Kb,"g"),MP)}s(gm,"sanitizeBucket");function hT(t={presigning:!1}){let e={forcePathStyle:!0,credentials:{accessKeyId:dt.MINIO_ACCESS_KEY,secretAccessKey:dt.MINIO_SECRET_KEY},region:dt.AWS_REGION};if(!dt.MINIO_ENABLED&&dt.AWS_SESSION_TOKEN&&(e.credentials={accessKeyId:dt.MINIO_ACCESS_KEY,secretAccessKey:dt.MINIO_SECRET_KEY,sessionToken:dt.AWS_SESSION_TOKEN}),dt.MINIO_URL&&(t.presigning&&dt.MINIO_ENABLED?e.endpoint="http://minio-service":e.endpoint=dt.MINIO_URL),dt.S3_IGNORE_SELF_SIGNED==="true"){let r=new fJr.default.Agent({rejectUnauthorized:!1});e.requestHandler=new lJr.NodeHttpHandler({httpsAgent:r})}return new dbe.S3(e)}s(hT,"ObjectStore");async function zte(t,e){e=gm(e);try{return await t.headBucket({Bucket:e}),{created:!1,exists:!0}}catch(r){let n=r.statusCode||r.$response?.statusCode||r.$metadata?.httpStatusCode,i=$ho.bucketCreationPromises;if(n===403)throw new Error("Access denied to object store bucket."+r);if(i[e])return await i[e],{created:!1,exists:!0};i[e]=t.createBucket({Bucket:e}).catch(o=>{if(o.Code!=="BucketAlreadyOwnedByYou"&&o.name!=="BucketAlreadyOwnedByYou")throw o});try{return await i[e],{created:!0,exists:!1}}finally{delete i[e]}}}s(zte,"createBucketIfNotExists");var Jho=s((t,e)=>{if(e)return e;let r=t.split(".").pop();return r?eB[r.toLowerCase()]:eB.txt},"resolveContentType"),dJr=s(async(t,e,r)=>{let n=gm(t),i=hT(),o=await zte(i,n);if(r.addTags({bucketCreated:o.created,bucketExists:o.exists}),e&&o.created){let a=cbe(n,e);await i.putBucketLifecycleConfiguration(a)}return{bucket:n,client:i,bucketCreated:o}},"initialiseBucket"),hJr=s(async({client:t,bucket:e,filename:r,stream:n,type:i,extra:o})=>{if(!n)throw new Error("Stream to upload is invalid/undefined");let a=Jho(r,i),u=nf(r),c={Bucket:e,Key:u,Body:n,ContentType:a,...o??{}};return{details:await new ipt.Upload({client:t,params:c}).done(),contentType:a}},"streamUploadInternal");async function Xho({bucket:t,filename:e,path:r,type:n,metadata:i,body:o,ttl:a}){let u=e.split(".").pop(),c=r?(await Yte.default.open(r)).createReadStream():o,l=hT(),f=await zte(l,t);if(a&&f.created){let S=cbe(t,a);await l.putBucketLifecycleConfiguration(S)}let d=n,m=d||(u?eB[u.toLowerCase()]:eB.txt),A={Bucket:gm(t),Key:nf(e),Body:c,ContentType:m};if(i&&typeof i=="object"){for(let S of Object.keys(i))(!i[S]||typeof i[S]!="string")&&delete i[S];A.Metadata=i}return new ipt.Upload({client:l,params:A}).done()}s(Xho,"upload");async function pJr({bucket:t,stream:e,filename:r,type:n,extra:i,ttl:o}){return await JN.default.trace("streamUpload",async a=>{a.addTags({bucketName:t,filename:r,type:n,ttl:o});let u=r.split(".").pop();a.addTags({extension:u});let{bucket:c,client:l}=await dJr(t,o,a),{details:f,contentType:d}=await hJr({client:l,bucket:c,filename:r,stream:e,type:n,extra:i}),m=await l.headObject({Bucket:c,Key:nf(r)});return a.addTags({contentType:d,contentLength:m.ContentLength}),{...f,ContentLength:m.ContentLength}})}s(pJr,"streamUpload");async function Zho({bucket:t,files:e,ttl:r}){return await JN.default.trace("streamUploadMany",async i=>{if(i.addTags({bucketName:t,ttl:r,fileCount:e.length}),!e.length)return[];let{bucket:o,client:a}=await dJr(t,r,i),u=e.map((l,f)=>({...l,index:f})),c=new Array(e.length);return await Px.parallelForeach(u,async l=>{let{details:f}=await hJr({client:a,bucket:o,filename:l.filename,stream:l.stream,type:l.type,extra:l.extra});c[l.index]=f},10),c})}s(Zho,"streamUploadMany");async function gJr(t,e){return await JN.default.trace("retrieve",async r=>{r.addTags({bucketName:t,filepath:e});let n=hT(),i={Bucket:gm(t),Key:nf(e)},o=await n.getObject(i);if(!o.Body)throw new Error("Unable to retrieve object");if(r.addTags({contentLength:o.ContentLength,contentType:o.ContentType}),Kho.includes(o.ContentType))return r.addTags({string:!0}),o.Body.transformToString();{r.addTags({string:!1});let a=o.Body.transformToWebStream();return hbe.default.Readable.fromWeb(a)}})}s(gJr,"retrieve");async function*upt(t,e){let r=hT(),n=s((a={})=>r.listObjectsV2({...a,Bucket:gm(t),Prefix:nf(e)}),"list"),i=!1,o;do{let a={};o&&(a.ContinuationToken=o);let u=await n(a);if(u.Contents)for(let c of u.Contents)yield c;i=!!u.IsTruncated,o=u.NextContinuationToken}while(i&&o)}s(upt,"listAllObjects");async function epo(t,e){let r={};return await Px.parallelForeach(upt(t,e),async n=>{if(!n.Key)throw new Error("file.Key must be defined");r[n.Key]=n},5),r}s(epo,"getAllFiles");async function bF(t,e,r=3600){let n=hT({presigning:!0}),i={Bucket:gm(t),Key:nf(e)},o=await(0,cJr.getSignedUrl)(n,new dbe.GetObjectCommand(i),{expiresIn:r});if(dt.MINIO_ENABLED){let a=new URL(o),u=a.pathname,c=a.search;return`${apt}${u}${c}`}else return o}s(bF,"getPresignedUrl");async function tpo(t,e){return await JN.default.trace("retrieveToTmp",async r=>{r.addTags({bucketName:t,filepath:e}),t=gm(t),e=nf(e);let n=await gJr(t,e),i=(0,EE.join)(CF(),Jb());return r.addTags({outputPath:i}),n instanceof hbe.default.Readable?(r.addTags({stream:!0}),await(0,Wte.pipeline)(n,aH.default.createWriteStream(i))):(r.addTags({stream:!1}),aH.default.writeFileSync(i,n)),i})}s(tpo,"retrieveToTmp");async function rpo(t,e,r){return await JN.default.trace("retrieveDirectory",async n=>{n.addTags({bucketName:t,path:e});let i=(0,EE.join)(CF(),Jb());await Yte.default.mkdir(i,{recursive:!0});let o=0;return await Px.parallelForeach(upt(t,e),async a=>{let{Key:u}=a;!u||r?.some(c=>c.test(u))||(o++,await JN.default.trace("retrieveDirectory.object",async c=>{let l=a.Key;c.addTags({filename:l});let f=mJr(i,l);if(!f){c.addTags({skippedUnsafePath:!0});return}let{stream:d}=await lbe(t,l);aH.default.existsSync(f.dir)||await Yte.default.mkdir(f.dir,{recursive:!0}),await(0,Wte.pipeline)(d,aH.default.createWriteStream(f.path,{mode:420}))}))},5),n.addTags({numObjects:o}),i})}s(rpo,"retrieveDirectory");function mJr(t,e){let r=(0,EE.resolve)(t),n=(0,EE.resolve)(r,...e.split("/"));if(n===r||n.startsWith(`${r}${EE.sep}`))return{dir:(0,EE.dirname)(n),path:n}}s(mJr,"getSafeRetrieveDirectoryPath");async function npo(t,e){let r=hT();await zte(r,t);let n={Bucket:t,Key:nf(e)};return r.deleteObject(n)}s(npo,"deleteFile");async function ipo(t,e){let r=hT();await zte(r,t);let n={Bucket:t,Delete:{Objects:e.map(i=>({Key:nf(i)}))}};return r.deleteObjects(n)}s(ipo,"deleteFiles");async function AJr(t,e){t=gm(t),e=nf(e);let r=hT(),n={Bucket:t,Prefix:e},i=await r.listObjects(n);if(i.Contents?.length===0)return;let o={Bucket:t,Delete:{Objects:[]}};if(i.Contents?.forEach(a=>{o.Delete.Objects.push({Key:a.Key})}),o.Delete.Objects.length&&(await r.deleteObjects(o)).Deleted?.length===1e3)return AJr(t,e)}s(AJr,"deleteFolder");async function cpt(t,e,r){return await JN.default.trace("uploadDirectory",async n=>{n.addTags({bucketName:t,localPath:e,bucketPath:r}),t=gm(t);let i=await Yte.default.readdir(e,{withFileTypes:!0});n.addTags({numFiles:i.length});for(let o of i){let a=nf((0,EE.join)(r,o.name)),u=(0,EE.join)(e,o.name);o.isDirectory()?await cpt(t,u,a):await pJr({bucket:t,filename:a,stream:aH.default.createReadStream(u)})}return i})}s(cpt,"uploadDirectory");async function spo(t,e,r={},{followRedirects:n=!0}={}){e=nf(e);let i=await GJ(t,{headers:r},{followRedirects:n});if(!i.ok)throw new Error(`unexpected response ${i.statusText}`);await(0,Wte.pipeline)(i.body,opt.default.createUnzip(),spt.default.extract(e))}s(spo,"downloadTarballDirect");async function opo(t,e,r){e=gm(e),r=nf(r);let n=await GJ(t);if(!n.ok)throw new Error(`unexpected response ${n.statusText}`);let i=(0,EE.join)(CF(),r);return await(0,Wte.pipeline)(n.body,opt.default.createUnzip(),spt.default.extract(i)),!dt.isTest()&&dt.SELF_HOSTED&&await cpt(e,i,r),i}s(opo,"downloadTarball");async function lbe(t,e){return await JN.default.trace("getReadStream",async r=>{t=gm(t),e=nf(e),r.addTags({bucketName:t,path:e});let n=hT(),i={Bucket:t,Key:e},o=await n.getObject(i);if(!o.Body||!(o.Body instanceof hbe.default.Readable))throw new Error("Unable to retrieve stream - invalid response");return r.addTags({contentLength:o.ContentLength,contentType:o.ContentType}),{stream:o.Body,contentLength:o.ContentLength,contentType:o.ContentType}})}s(lbe,"getReadStream");async function apo(t,e){t=gm(t),e=nf(e);let r=hT(),n={Bucket:t,Key:e};try{return await r.headObject(n)}catch{throw new Error("Unable to retrieve metadata from object")}}s(apo,"getObjectMetadata");async function upo(t,e){t=gm(t),e=nf(e);let r=hT(),n={Bucket:t,Key:e};try{return await r.headObject(n),!0}catch(i){if((i.statusCode||i.$response?.statusCode||i.$metadata?.httpStatusCode)===404)return!1;throw i}}s(upo,"objectExists");function npt(t){let e=t.split("?")[0],r=new RegExp(`^${apt}/(?<bucket>[^/]+)/(?<path>.+)$`),n=e.match(r);if(n&&n.groups){let{bucket:i,path:o}=n.groups;return{bucket:i,path:o}}return null}s(npt,"extractBucketAndPath");var SJr=ge(require("querystring"));var TJr=ge(yJr());var gbe;function Npo(){if(!dt.CLOUDFRONT_PRIVATE_KEY_64)throw new Error("CLOUDFRONT_PRIVATE_KEY_64 is not set");return gbe||(gbe=Buffer.from(dt.CLOUDFRONT_PRIVATE_KEY_64,"base64").toString("utf-8"),gbe)}s(Npo,"getPrivateKey");var Opo=s(()=>({keypairId:dt.CLOUDFRONT_PUBLIC_KEY_ID,privateKeyString:Npo(),expireTime:new Date().getTime()+1e3*60*60*24}),"getCloudfrontSignParams"),uH=s(t=>{let e=xpo(t);return TJr.getSignedUrl(e,Opo())},"getPresignedUrl"),xpo=s(t=>{let e="/";return t.startsWith("/")&&(e=""),`${dt.CLOUDFRONT_CDN}${e}${t}`},"getUrl");function vpo(t){return`${nf(t)}/budibase-client.js`}s(vpo,"clientLibraryPath");function Dpo(t,e){return`${nf(t)}/${e}`}s(Dpo,"client3rdPartyLibrary");async function Bpo(t,e){return`/api/assets/${t}/client?${await IJr(e)}`}s(Bpo,"clientLibraryUrl");async function IJr(t){let e,r;try{e=Hs()}finally{r={version:t}}return e&&e!==uh&&(r.tenantId=e),SJr.default.encode(r)}s(IJr,"getClientCacheKey");async function RJr(t){return dt.CLOUDFRONT_CDN?uH(t):await bF(dt.APPS_BUCKET_NAME,t)}s(RJr,"getAppFileUrl");async function kpo(t){if(t.length===0)return[];try{return await Promise.all(t.map(async e=>({...e,src:await RJr(e.src),type:e.type||"image/png"})))}catch(e){return console.error("Error enriching PWA images:",e),t}}s(kpo,"enrichPWAImages");var Ppo=s(async(t,e,r)=>{let n=CJr(t,e);return dt.CLOUDFRONT_CDN?(r&&(n=`${n}?etag=${r}`),uH(n)):await bF(dt.GLOBAL_BUCKET_NAME,n)},"getGlobalFileUrl"),CJr=s((t,e)=>{let r=`${t}/${e}`;return dt.MULTI_TENANCY&&(r=`${Hs()}/${r}`),r},"getGlobalFileS3Key");async function Lpo(t){return!t||!t.length?[]:await Promise.all(t.map(async e=>{let r=await Mpo(e),n=await Upo(e);return{...e,jsUrl:r,iconUrl:n}}))}s(Lpo,"enrichPluginURLs");async function Mpo(t){let e=wJr(t);return bJr(e)}s(Mpo,"getPluginJSUrl");async function Upo(t){let e=NJr(t);if(e)return bJr(e)}s(Upo,"getPluginIconUrl");async function bJr(t){return dt.CLOUDFRONT_CDN?uH(t):await bF(dt.PLUGIN_BUCKET_NAME,t)}s(bJr,"getPluginUrl");function wJr(t){return OJr(t,"plugin.min.js")}s(wJr,"getPluginJSKey");function NJr(t){let e=t.iconUrl?"icon.svg":t.iconFileName;if(e)return OJr(t,e)}s(NJr,"getPluginIconKey");function OJr(t,e){return`${xJr(t.name)}/${e}`}s(OJr,"getPluginS3Key");function xJr(t){let e=`${t}`;return dt.MULTI_TENANCY&&(e=`${Hs()}/${e}`),dt.CLOUDFRONT_CDN&&(e=`plugins/${e}`),e}s(xJr,"getPluginS3Dir");var Fpo="budibase.log",Qpo="budibase-logs-history.txt",qpo=vJr.default.join(CF(),"systemlogs");function Gpo(t){let e=/(\d+)([A-Za-z])/,r=t?.match(e);if(!r){console.warn("totalMaxSize does not have a valid value",{totalMaxSize:t});return}let n=+r[1],i=r[2];if(n===1)switch(i){case"B":return{size:`${n}B`,totalHistoryFiles:1};case"K":return{size:`${n*1e3/2}B`,totalHistoryFiles:1};case"M":return{size:`${n*1e3/2}K`,totalHistoryFiles:1};case"G":return{size:`${n*1e3/2}M`,totalHistoryFiles:1};default:return}return n%2===0?{size:`${n/2}${i}`,totalHistoryFiles:1}:{size:`1${i}`,totalHistoryFiles:n-1}}s(Gpo,"getSingleFileMaxSizeInfo");function BJr(){let t=Gpo(dt.ROLLING_LOG_MAX_SIZE);return DJr.createStream(Fpo,{size:t?.size,path:qpo,maxFiles:t?.totalHistoryFiles||1,immutable:!0,history:Qpo,initialRotation:!1})}s(BJr,"localFileDestination");function Vpo(t){return typeof t=="object"&&t!==null&&!(t instanceof Error)}s(Vpo,"isPlainObject");function Hpo(t){return t instanceof Error}s(Hpo,"isError");function Ypo(t){return typeof t=="string"}s(Ypo,"isMessage");var rB;if(!dt.DISABLE_PINO_LOGGER){let t=dt.LOG_LEVEL,e={level:t,formatters:{level:s(c=>({level:c.toUpperCase()}),"level"),bindings:s(()=>dt.SELF_HOSTED?{service:dt.SERVICE_NAME}:{},"bindings")},timestamp:s(()=>`,"timestamp":"${new Date(Date.now()).toISOString()}"`,"timestamp")},r=[];r.push(dt.isDev()?{stream:(0,kJr.default)({singleLine:!0}),level:t}:{stream:process.stdout,level:t}),dt.SELF_HOSTED&&r.push({stream:BJr(),level:t}),rB=r.length?(0,Abe.default)(e,Abe.default.multistream(r)):(0,Abe.default)(e);let n=s(c=>{let l,f=[],d="";c.forEach(b=>{Ypo(b)&&(d=`${d} ${b}`.trimStart()),Vpo(b)&&f.push(b),Hpo(b)&&(l=b)});let m=u(),A={};A={tenantId:i(),appId:o(),automationId:a(),identityId:m?._id,identityType:m?.type,correlationId:xtt()};let T=mpt.default.scope().active();T&&mpt.default.inject(T.context(),PJr.formats.LOG,A);let S={err:l,pid:process.pid,...A};if(f.length){let b={},C=0;for(let B=0;B<f.length;B++){let k=f[B],P=k._logKey;P?(delete k._logKey,S[P]=k):(b[C]=k,C++)}Object.keys(b).length&&(S.data=b)}return[S,d]},"getLogParams");console.log=(...c)=>{let[l,f]=n(c);rB?.info(l,f)},console.info=(...c)=>{let[l,f]=n(c);rB?.info(l,f)},console.warn=(...c)=>{let[l,f]=n(c);rB?.warn(l,f)},console.error=(...c)=>{let[l,f]=n(c);rB?.error(l,f)},console.trace=(...c)=>{let[l,f]=n(c);l.err||(l.err=new Error),rB?.trace(l,f)},console.debug=(...c)=>{let[l,f]=n(c);rB?.debug(l,f)};let i=s(()=>{let c;try{c=Hs()}catch{}return c},"getTenantId"),o=s(()=>{let c;try{c=uA()}catch{}return c},"getAppId"),a=s(()=>{let c;try{c=AHe()}catch{}return c},"getAutomationId"),u=s(()=>{let c;try{c=Xx()}catch{}return c},"getIdentity")}var Apt=rB;function US(t){let e=Hs();return`${t}:${e}`}s(US,"generateTenantKey");var cH=class{static{s(this,"BaseCache")}constructor(e=void 0){this.client=e}async getClient(){return this.client?this.client:await apr()}async keys(e){return(await this.getClient()).keys(e)}async exists(e,r={useTenancy:!0}){return e=r.useTenancy?US(e):e,(await this.getClient()).exists(e)}async scan(e,r={useTenancy:!0}){return e=r.useTenancy?US(e):e,(await this.getClient()).scan(e)}async get(e,r={useTenancy:!0}){return e=r.useTenancy?US(e):e,(await this.getClient()).get(e)}async bulkGet(e,r={useTenancy:!0}){return e=r.useTenancy?e.map(i=>US(i)):e,(await this.getClient()).bulkGet(e)}async store(e,r,n=null,i={useTenancy:!0}){e=i.useTenancy?US(e):e,await(await this.getClient()).store(e,r,n)}async bulkStore(e,r=null,n={useTenancy:!0}){n.useTenancy&&(e=Object.entries(e).reduce((o,[a,u])=>(o[US(a)]=u,o),{})),await(await this.getClient()).bulkStore(e,r)}async delete(e,r={useTenancy:!0}){return e=r.useTenancy?US(e):e,(await this.getClient()).delete(e)}async bulkDelete(e,r={useTenancy:!0}){return e=r.useTenancy?e.map(i=>US(i)):e,(await this.getClient()).bulkDelete(e)}async withCache(e,r=null,n,i={useTenancy:!0}){let o=await this.get(e,i);if(o)return o;try{let a=await n();return await this.store(e,a,r,i),a}catch(a){throw console.error("Error fetching before cache - ",a),a}}async withCacheWithDynamicTTL(e,r,n={useTenancy:!0}){let i=await this.get(e,n);if(i)return i;try{let o=await r(),{value:a,ttl:u}=o;return await this.store(e,a,u,{useTenancy:n.useTenancy}),a}catch(o){throw console.error("Error fetching before cache - ",o),o}}async bustCache(e){let r=await this.getClient();try{await r.delete(US(e))}catch(n){throw console.error("Error busting cache - ",n),n}}async increment(e,r,n={useTenancy:!0}){e=n.useTenancy?US(e):e;let i=await this.getClient(),o=await i.increment(e);return r&&await i.setExpiry(e,r),o}async deleteIfValue(e,r,n={useTenancy:!0}){e=n.useTenancy?US(e):e,await(await this.getClient()).deleteIfValue(e,r)}};var Kpo=new cH,lH={CHECKLIST:"checklist",INSTALLATION:"installation",ANALYTICS_ENABLED:"analyticsEnabled",UNIQUE_TENANT_ID:"uniqueTenantId",EVENTS:"events",BACKFILL_METADATA:"backfillMetadata",EVENTS_RATE_LIMIT:"eventsRateLimit",OAUTH2_TOKEN:s(t=>`oauth2Token_${t}`,"OAUTH2_TOKEN")};var _be=s((...t)=>Kpo.withCache(...t),"withCache");ur();var Ago=ge(AZr());var X4u=_h.fromSeconds(10).toMs();ur();var oju=_h.fromDays(7).toSeconds(),aju=_h.fromSeconds(10).toMs();var fju=_h.fromHours(1).toSeconds();var EZr=ge(require("node-fetch"));var OF=class{static{s(this,"API")}constructor(e){this.host=e}async apiCall(e,r,n){n.headers||(n.headers={}),n.headers["Content-Type"]||(n.headers={"Content-Type":"application/json",Accept:"application/json",...n.headers});let i=n.headers["Content-Type"]==="application/json";KAe.setHeader(n.headers);let o={method:e,body:i?JSON.stringify(n.body):n.body,headers:n.headers,credentials:"include"};return await(0,EZr.default)(`${this.host}${r}`,o)}async post(e,r){return this.apiCall("POST",e,r)}async get(e,r){return this.apiCall("GET",e,r)}async patch(e,r){return this.apiCall("PATCH",e,r)}async del(e,r){return this.apiCall("DELETE",e,r)}async put(e,r){return this.apiCall("PUT",e,r)}};var wju=new OF(dt.INTERNAL_ACCOUNT_PORTAL_URL),Nju=dt.SELF_HOSTED||dt.DISABLE_ACCOUNT_PORTAL;ur();ur();var Uju=+(dt.PASSWORD_MIN_LENGTH||12),Fju=+(dt.PASSWORD_MAX_LENGTH||512);var $ju=ppr();ur();ur();var BVu={"automation:created":t=>t.automationId,"automation:step:created":t=>t.stepId,"datasource:created":t=>t.datasourceId,"layout:created":t=>t.layoutId,"query:created":t=>t.queryId,"role:created":t=>t.roleId,"screen:created":t=>t.screenId,"table:created":t=>t.tableId,"view:created":t=>t.tableId,"view:calculation:created":t=>t.tableId,"view:filter:created":t=>t.tableId,"app:created":t=>t.appId,"app:published":t=>t.appId,"auth:sso:created":t=>t.type,"auth:sso:activated":t=>t.type,"user:created":t=>t.userId,"user:admin:assigned":t=>t.userId,"user:builder:assigned":t=>t.userId,"role:assigned":t=>`${t.roleId}-${t.userId}`};var Lpt=dt.SELF_HOSTED&&!dt.isDev(),Zte=class{static{s(this,"LoggingProcessor")}async processEvent(e,r,n){Lpt||console.log(`[audit] [identityType=${r.type}] ${e}`,n)}async identify(e){Lpt||console.log("[audit] identified",e)}async identifyGroup(e){Lpt||console.log("[audit] group identified",e)}async shutdown(){}};ur();var ere=class t{static{s(this,"AuditLogsProcessor")}static{this.auditLogsEnabled=!1}static init(e){t.auditLogsEnabled=!0;let r=e;return t.auditLogQueue=new eU("auditLogQueue",{jobTags:s(n=>({"event.name":n.event}),"jobTags")}),t.auditLogQueue.process(async n=>{await iw(n.data.tenantId,async()=>{let i=n.data.properties;i.audited&&(i={...i,...i.audited},delete i.audited);let o={};dt.ENABLE_AUDIT_LOG_IP_ADDR&&(o=n.data.opts.hostInfo),await r(n.data.event,i,{userId:n.data.opts.userId,timestamp:n.data.opts.timestamp,appId:n.data.opts.appId,hostInfo:o})})})}async processEvent(e,r,n,i){if(t.auditLogsEnabled&&mpr(e)){let o=r.type==="user"?r.id:void 0;await t.auditLogQueue.add({event:e,properties:n,opts:{userId:o,timestamp:i,appId:uA(),hostInfo:r.hostInfo},tenantId:Hs()})}}async identify(){}async identifyGroup(){}async shutdown(){await t.auditLogQueue?.close()}};zx();var Ngo=new OF(dt.INTERNAL_ACCOUNT_PORTAL_URL),tre=class t{static{s(this,"EventBrokerProcessor")}static init(e){t.getLicenseKeyFn=e}async processEvent(e,r,n,i){if(dt.DISABLE_ACCOUNT_PORTAL)return;let o;if(dt.SELF_HOSTED){if(!t.getLicenseKeyFn)return;let c=await t.getLicenseKeyFn();if(!c)return;o={"x-budibase-license-key":c}}else o={"x-budibase-api-key":dt.ACCOUNT_PORTAL_API_KEY},r.tenantId&&(o["x-budibase-tenant-id"]=r.tenantId);let a=uA(),u={id:Jb(),type:e,identity:r,properties:{...n,version:dt.VERSION,service:dt.SERVICE,environment:r.environment,hosting:r.hosting,...a&&{appId:a},...r.installationId&&{installationId:r.installationId},...r.tenantId&&{tenantId:r.tenantId}},timestamp:i===void 0?Date.now():new Date(i).getTime()};try{let c=await Ngo.post("/api/v2/analytics/event",{headers:o,body:u});c.ok||console.warn(`[EventBrokerProcessor] unexpected response status: ${c.status}`)}catch(c){console.error(`[EventBrokerProcessor] failed to send event: ${c}`)}}};var rre=class{constructor(e){this.initialised=!1;this.processors=[];this.processors=e}static{s(this,"Processor")}async processEvent(e,r,n,i){for(let o of this.processors)await o.processEvent(e,r,n,i)}async identify(e,r){for(let n of this.processors)n.identify&&await n.identify(e,r)}async identifyGroup(e,r){for(let n of this.processors)n.identifyGroup&&await n.identifyGroup(e,r)}async shutdown(){for(let e of this.processors)e.shutdown&&await e.shutdown()}};var Ogo=new Zte,xgo=new ere,vgo=new tre;var Mpt=new rre([Ogo,xgo,vgo]);ur();ur();var kgo=ge(v3());ur();ur();ur();ur();ur();ur();ur();ur();var BYu=!dt.SELF_HOSTED&&!dt.isDev();ur();ur();ur();ur();ur();ur();ur();ur();ur();ur();ur();ur();ur();ur();ur();ur();ur();ur();ur();ur();ur();var OZr=_y.users.isBuilder,Obe=_y.users.isAdmin,Bzu=_y.users.isGlobalBuilder,kzu=_y.users.isAdminOrBuilder,wZr=_y.users.hasAdminPermissions,nre=_y.users.hasBuilderPermissions,Pzu=_y.users.hasAppBuilderPermissions,Vgo=_y.users.isAdminOrWorkspaceBuilder;function rmo(t){return Array.isArray(t)?t.map(e=>{if(e)return delete e.password,e}):t&&(delete t.password,t)}s(rmo,"removeUserPassword");async function ire(t,e){if(t==null)throw"Must supply an email address to view";let r=await Jpe("by_email2",{key:t.toLowerCase(),include_docs:!0});if(Array.isArray(r))throw new Error(`Multiple users found with email address: ${t}`);let n=r;return e?.cleanup&&(n=rmo(n)),n}s(ire,"getGlobalUserByEmail");ur();function vZr(t){return`config${"_"}${t}`}s(vZr,"generateConfigID");async function vbe(t){let e=lp();try{return await e.get(vZr(t))}catch(r){if(r.status===404)return;throw r}}s(vbe,"getConfig");async function Upt(){let t=await vbe("settings");return t||(t={_id:vZr("settings"),type:"settings",config:{}}),t.config.platformUrl=await DZr({tenantAware:!0,config:t.config}),t.config.analyticsEnabled=await SZr({config:t.config}),t}s(Upt,"getSettingsConfigDoc");async function DZr(t={tenantAware:!0}){let e=dt.PLATFORM_URL||"http://localhost:10000";if(!dt.SELF_HOSTED&&dt.MULTI_TENANCY&&t.tenantAware){let r=Hs();e.includes("localhost:")||(e=e.replace("://",`://${r}.`))}else if(dt.SELF_HOSTED){let r=t?.config?t.config:(await vbe("settings"))?.config;r?.platformUrl&&(e=r.platformUrl)}return e}s(DZr,"getPlatformUrl");var SZr=s(async t=>{if(!dt.SELF_HOSTED)return!!dt.ENABLE_ANALYTICS;let e=await _be(lH.ANALYTICS_ENABLED,86400,async()=>{let n=t?.config?t.config:(await vbe("settings"))?.config;if(n?.analyticsEnabled===!1)return!1;if(n?.analyticsEnabled===!0)return!0});if(e!==void 0)return e;let r=dt.ENABLE_ANALYTICS;return!(r===0||r===!1)},"analyticsEnabled");ur();var mOo=ge(y3()),AOo=ge(Wgt()),_Oo=ge(v3());var Ian={ADMIN:"ADMIN",POWER:"POWER",BASIC:"BASIC",PUBLIC:"PUBLIC"},yE={...Ian,BUILDER:"BUILDER"},EOo={UUID:void 0,NAME:"name"};var BF=class{constructor(e,r,n,i){this.permissions={};this._id=e,this.name=r,this.uiMetadata=i,this.permissionId=n,this.version=EOo.NAME}static{s(this,"Role")}addInheritance(e){return e&&typeof e=="string"?e=Tan(e):e&&Array.isArray(e)&&(e=e.map(Tan)),this.inherits=e,this}};var Urc={ADMIN:new BF(yE.ADMIN,yE.ADMIN,"admin",{displayName:"Admin user",description:"Can do everything",color:"var(--spectrum-global-color-static-red-400)"}).addInheritance(yE.POWER),POWER:new BF(yE.POWER,yE.POWER,"power",{displayName:"App power user",description:"An app user with more access",color:"var(--spectrum-global-color-static-orange-400)"}).addInheritance(yE.BASIC),BASIC:new BF(yE.BASIC,yE.BASIC,"write",{displayName:"Basic user",description:"Any logged in user",color:"var(--spectrum-global-color-static-green-400)"}).addInheritance(yE.PUBLIC),PUBLIC:new BF(yE.PUBLIC,yE.PUBLIC,"public",{displayName:"Public user",description:"Accessible to anyone",color:"var(--spectrum-global-color-static-blue-400)"}),BUILDER:new BF(yE.BUILDER,yE.BUILDER,"admin",{displayName:"Builder user",description:"Users that can edit this app",color:"var(--spectrum-global-color-static-magenta-600)"})};function yOo(t){return Object.values(Ian).includes(t)}s(yOo,"isBuiltin");function Tan(t){return yOo(t)?t:cpr(t)}s(Tan,"prefixRoleIDNoBuiltin");ur();var IOo=ge(Ygt()),ROo=ge(Wgt());ur();var nc=class{static{s(this,"PermissionImpl")}constructor(e,r){this.type=e,this.level=r}};var jrc={PUBLIC:{_id:"public",name:"Public",permissions:[new nc("webhook","execute")]},READ_ONLY:{_id:"read_only",name:"Read only",permissions:[new nc("query","read"),new nc("table","read"),new nc("app","read")]},WRITE:{_id:"write",name:"Read/Write",permissions:[new nc("query","write"),new nc("table","write"),new nc("automation","execute"),new nc("legacy_view","read"),new nc("app","read")]},POWER:{_id:"power",name:"Power",permissions:[new nc("table","write"),new nc("user","read"),new nc("automation","execute"),new nc("webhook","read"),new nc("legacy_view","read"),new nc("app","read")]},ADMIN:{_id:"admin",name:"Admin",permissions:[new nc("table","admin"),new nc("user","admin"),new nc("automation","admin"),new nc("webhook","read"),new nc("query","admin"),new nc("legacy_view","read"),new nc("app","read")]}};var Vrc="builder",Hrc="creator",Yrc="globalBuilder";ur();var lwe=ge(require("crypto")),Can=ge(require("dd-trace")),ban=ge(y3()),bOo=require("posthog-node");var Ran;function wan(t){let e=t.split(",").map(n=>n.split(":")),r=[];for(let[n,...i]of e)for(let o of i){let a=!0;o.startsWith("!")&&(o=o.slice(1),a=!1),r.push({tenantId:n,key:o,value:a})}return r}s(wan,"parseEnvFlags");function wOo(){return wan(dt.TENANT_FEATURE_FLAGS||"")}s(wOo,"getEnvFlags");var zgt=class{constructor(e){this.flagSchema=e;this.setId=lwe.randomUUID()}static{s(this,"FlagSet")}defaults(){return(0,ban.cloneDeep)(this.flagSchema)}isFlagName(e){return this.flagSchema[e]!==void 0}async isEnabled(e){return(await this.fetch())[e]}async fetch(){return await Can.default.trace("features.fetch",async e=>{let r=THe(this.setId);if(r)return e?.addTags({fromCache:!0}),r;let n={},i=this.defaults(),o=Hs(),a=new Set;if(Yfe())return i;for(let{tenantId:d,key:m,value:A}of wOo())if(!(!d||d!=="*"&&d!==o)&&(n.readFromEnvironmentVars=!0,A===!1&&a.add(m),!!this.isFlagName(m))){if(typeof i[m]!="boolean")throw new Error(`Feature: ${m} is not a boolean`);i[m]=A,n[`flags.${m}.source`]="environment"}let u=Xx(),c=u?._id;if(!c){let d=_He();d&&(c=lwe.createHash("sha512").update(d).digest("hex"))}let l=u?.tenantId;if(l||(l=o),n["identity.type"]=u?.type,n["identity._id"]=u?._id,n.tenantId=l,n.userId=c,Ran&&c){n.readFromPostHog=!0;let d=await Upt(),m={tenantId:l},A={tenant:{id:l}};d.config.createdVersion&&(A.tenant.createdVersion=d.config.createdVersion),d.createdAt&&(A.tenant.createdAt=`${d.createdAt}`);let T=await Ran.getAllFlags(c,{personProperties:m,onlyEvaluateLocally:!0,groups:{tenant:l},groupProperties:A});for(let[S,b]of Object.entries(T))if(this.isFlagName(S)){if(typeof b!="boolean"){console.warn(`Invalid value for posthog flag "${S}": ${b}`);continue}if(!(i[S]===!0||a.has(S)))try{i[S]=b,n[`flags.${S}.source`]="posthog"}catch(C){console.warn(`Error parsing posthog flag "${S}": ${b}`,C)}}}let f=IHe();for(let[d,m]of Object.entries(f))this.isFlagName(d)&&typeof m=="boolean"&&(i[d]=m,n[`flags.${d}.source`]="override");SHe(this.setId,i);for(let[d,m]of Object.entries(i))n[`flags.${d}.value`]=m;return e?.addTags(n),i})}},NOo={USE_ZOD_VALIDATOR:!1,AI_TESTS:!1,ESCALATION:!1,FRONT_COMPANION:!1,PROJECTS:!1,DEBUG_UI:dt.isDev(),DEV_USE_CLIENT_FROM_STORAGE:!1,AI_AGENT_ACTIVITY:!1},enc=new zgt(NOo);ur();var unc=$Ae();var ADo=Lcn(),_Do=$Ae();function EDo(){return{logger:Apt,genReqId:_Do.getId,autoLogging:{ignore:s(t=>!!t.url?.includes("/health"),"ignore")},serializers:{req:s(t=>({method:t.method,url:t.url,correlationId:t.id}),"req"),res:s(t=>({status:t.statusCode}),"res")}}}s(EDo,"pinoSettings");function yDo(){return dt.HTTP_LOGGING?ADo(EDo()):(t,e)=>e()}s(yDo,"getMiddleware");var TDo=yDo();var bDo=ge(Zje());ur();ur();var wDo=ge(require("dd-trace"));var nsc=dt.SESSION_UPDATE_PERIOD?parseInt(dt.SESSION_UPDATE_PERIOD):60*1e3;ur();var vko=ge(Pwe());var kre={};Fi(kre,{authenticate:()=>kko,options:()=>Bko});function xC(t,e,r){return t(r,null,{message:e})}s(xC,"authError");var NAt="Invalid credentials",Dko="This account has expired. Please reset your password",Bko={passReqToCallback:!0};async function kko(t,e,r,n){if(!e)return xC(n,"Email Required");if(!r)return xC(n,"Password Required");let i=await ire(e);return i==null?(console.info(`user=${e} could not be found`),xC(n,NAt)):i.status==="inactive"?(console.info(`user=${e} is inactive`,i),xC(n,NAt)):i.password?await iWt(r,i.password)?(delete i.password,n(null,i)):xC(n,NAt):(console.info(`user=${e} has no password set`,i),xC(n,Dko))}s(kko,"authenticate");ur();var Lcc=a_t().OAuth2Strategy;var tLo=ge(require("node-fetch"));ur();var rLo=ge(ypn());ur();ur();var Ulc=a_t().OAuth2Strategy;var vLo=Zpn(),DLo=agn().Strategy,Zfc=ugn();vLo.use(new DLo(kre.options,kre.authenticate));var CNe={};Fi(CNe,{validate:()=>ULo});ur();var _r=ge(Pwe());var kLo=["Relational","Non-relational","Spreadsheet","Object store","Graph","API"];function b_t(t,e){let{error:r}=t.validate(e);if(r)throw r}s(b_t,"runJoi");function PLo(t){let e=_r.default.object({type:_r.default.string().allow("component").required(),metadata:_r.default.object().unknown(!0).required(),hash:_r.default.string().optional(),version:_r.default.string().optional(),schema:_r.default.object({name:_r.default.string().required(),settings:_r.default.array().items(_r.default.object().unknown(!0)).required()}).unknown(!0)});b_t(e,t)}s(PLo,"validateComponent");function LLo(t){let e=_r.default.object({type:_r.default.string().allow(...Object.values(Nqe)).required(),required:_r.default.boolean().required(),default:_r.default.any(),display:_r.default.string()}),r=_r.default.object({type:_r.default.string().allow(...Object.values(wqe)),readable:_r.default.boolean(),displayName:_r.default.string(),fields:_r.default.object().pattern(_r.default.string(),e)}).required(),n=_r.default.object({type:_r.default.string().allow("datasource").required(),metadata:_r.default.object().unknown(!0).required(),hash:_r.default.string().optional(),version:_r.default.string().optional(),schema:_r.default.object({docs:_r.default.string(),plus:_r.default.boolean().optional(),isSQL:_r.default.boolean().optional(),auth:_r.default.object({type:_r.default.string().required()}).optional(),features:_r.default.object(Object.fromEntries(Object.values(Oqe).map(i=>[i,_r.default.boolean().optional()]))).optional(),relationships:_r.default.boolean().optional(),description:_r.default.string().required(),friendlyName:_r.default.string().required(),type:_r.default.string().allow(...kLo),datasource:_r.default.object().pattern(_r.default.string(),e).required(),query:_r.default.object().pattern(_r.default.string(),r).unknown(!0).required(),extra:_r.default.object().pattern(_r.default.string(),_r.default.object({type:_r.default.string().required(),displayName:_r.default.string().required(),required:_r.default.boolean(),data:_r.default.object()}))})});b_t(n,t)}s(LLo,"validateDatasource");function MLo(t){let e=_r.default.object().pattern(_r.default.string(),{type:_r.default.string().allow(...Object.values(Pqe)).required(),customType:_r.default.string().allow(...Object.values(Lqe)),title:_r.default.string(),description:_r.default.string(),enum:_r.default.array().items(_r.default.string()),pretty:_r.default.array().items(_r.default.string())}),r=_r.default.object({properties:e,required:_r.default.array().items(_r.default.string())}).concat(e).required(),n=_r.default.object({type:_r.default.string().allow("automation").required(),metadata:_r.default.object().unknown(!0).required(),hash:_r.default.string().optional(),version:_r.default.string().optional(),schema:_r.default.object({name:_r.default.string().required(),tagline:_r.default.string().required(),icon:_r.default.string().required(),description:_r.default.string().required(),type:_r.default.string().allow("ACTION","LOGIC").required(),stepId:_r.default.string().disallow(...E2t).required(),inputs:_r.default.object().optional(),schema:_r.default.object({inputs:r,outputs:r}).required()})});b_t(n,t)}s(MLo,"validateAutomation");function ULo(t){switch(t?.type){case"component":PLo(t);break;case"datasource":LLo(t);break;case"automation":MLo(t);break;default:throw new Error(`Unknown plugin type - check schema.json: ${t.type}`)}}s(ULo,"validate");ur();var Ndc={"user:created":t=>t.userId,"user:updated":t=>t.userId,"user:deleted":t=>t.userId,"user:admin:assigned":t=>t.userId,"user:admin:removed":t=>t.userId,"user:builder:assigned":t=>t.userId,"user:builder:removed":t=>t.userId,"user_group:created":t=>t.groupId,"user_group:updated":t=>t.groupId,"user_group:deleted":t=>t.groupId,"user_group:user_added":t=>t.groupId,"user_group:users_deleted":t=>t.groupId,"user_group:permissions_edited":t=>t.groupId,"automation:deleted":t=>t.automationId,"datasource:deleted":t=>t.datasourceId,"table:deleted":t=>t.tableId,"query:deleted":t=>t.queryId,"workspace_app:deleted":t=>t.workspaceAppId,"view:deleted":t=>t.id};var r1a=ge(ABt());var XYn=ge(ABt());ur();ur();var n1a=ge(y3());var OFc={equal:!1,notEqual:!0,empty:!1,notEmpty:!0,fuzzy:!1,string:!1,range:!1,contains:!1,notContains:!0,containsAny:!1,oneOf:!1,notOneOf:!0,$and:!1,$or:!1};var oDa=ge(E6n());var W6n=ge(bBt(),1),WDa=ge(xBt(),1),$6n=ge(bBt(),1),MBt=ge(xBt(),1),ILe=require("url"),e5=ge(j6n(),1),K6n=ge(require("http"),1),X6n=ge(ew(),1);var z6n={NotFound:"not-found"};function HDa(t){return typeof t=="function"?t(z6n):t}s(HDa,"resolveEvent");var YDa=class{static{s(this,"RouterEventEmitter")}_handlers=new Map;register(t,e){let r=this._handlers.get(t)??[];r.push(e),this._handlers.set(t,r)}emit(t,e,r){let n=this._handlers.get(t);return n&&n.length>0?(0,W6n.default)(n)(e,r):r()}};function SLe(t,e={}){let r={...e};"strict"in r&&!("trailing"in r)&&(r.trailing=r.strict!==!0,delete r.strict),delete r.pathAsRegExp,delete r.ignoreCaptures,delete r.prefix;let{regexp:n,keys:i}=(0,e5.pathToRegexp)(t,r);return{regexp:n,keys:i}}s(SLe,"compilePathToRegexp");function zDa(t,e={}){return(0,e5.compile)(t,e)}s(zDa,"compilePath");function $Da(t,e){return(0,e5.parse)(t,e)}s($Da,"parsePath");function PBt(t={}){let e={sensitive:t.sensitive,end:t.end,strict:t.strict,trailing:t.trailing};"strict"in e&&!("trailing"in e)&&(e.trailing=e.strict!==!0,delete e.strict);for(let r of Object.keys(e))e[r]===void 0&&delete e[r];return e}s(PBt,"normalizeLayerOptionsToPathToRegexp");function KDa(t){try{return decodeURIComponent(t)}catch{return t}}s(KDa,"safeDecodeURIComponent");var V6n=class{static{s(this,"Layer")}opts;name;methods;paramNames;stack;path;regexp;constructor(t,e,r,n={}){this.opts=n,this.name=this.opts.name||void 0,this.methods=this._normalizeHttpMethods(e),this.stack=this._normalizeAndValidateMiddleware(r,e,t),this.path=t,this.paramNames=[],this._configurePathMatching()}_normalizeHttpMethods(t){let e=[];for(let r of t){let n=r.toUpperCase();e.push(n),n==="GET"&&e.unshift("HEAD")}return e}_normalizeAndValidateMiddleware(t,e,r){let n=Array.isArray(t)?t:[t];for(let i of n){let o=typeof i;if(o!=="function"){let a=this.opts.name||r;throw new Error(`${e.toString()} \`${a}\`: \`middleware\` must be a function, not \`${o}\``)}}return n}_configurePathMatching(){this.opts.pathAsRegExp===!0?this.regexp=this.path instanceof RegExp?this.path:new RegExp(this.path):this.path&&this._configurePathToRegexp()}_configurePathToRegexp(){let t=PBt(this.opts),{regexp:e,keys:r}=SLe(this.path,t);this.regexp=e,this.paramNames=r}match(t){return this.regexp.test(t)}params(t,e,r={}){let n={...r};for(let[i,o]of e.entries()){let a=this.paramNames[i];if(a&&o&&o.length>0){let u=a.name;if(this.opts.ignoreWildcardParameter===u&&a.type==="wildcard")continue;n[u]=KDa(o)}}return n}captures(t){if(this.opts.ignoreCaptures)return[];let e=t.match(this.regexp);return e?e.slice(1):[]}url(...t){if(this.path instanceof RegExp)throw new TypeError("Cannot generate URL for routes defined with RegExp paths. Use string paths with named parameters instead.");let{params:e,options:r}=this._parseUrlArguments(t),n=this.path.replaceAll("(.*)",""),i=zDa(n,{encode:encodeURIComponent,...r}),o=this._buildParamReplacements(e,n),a=i(o);return r&&r.query?this._addQueryString(a,r.query):a}_parseUrlArguments(t){let e=t[0]??{},r=t[1];if(typeof e!="object"||e===null){let n=[...t],i=n.at(-1);typeof i=="object"&&i!==null?(r=i,e=n.slice(0,-1)):e=n}else if(e&&!r){let n=Object.keys(e);if(n.length===1&&n[0]==="query")r=e,e={};else if("query"in e&&e.query){let{query:o,...a}=e;r={query:o},e=a}}return{params:e,options:r}}_buildParamReplacements(t,e){let{tokens:r}=$Da(e),n=r.some(o=>"name"in o&&o.name),i={};if(Array.isArray(t)){let o=0;for(let a of r)"name"in a&&a.name&&(i[a.name]=String(t[o++]))}else if(n&&typeof t=="object"&&!("query"in t))for(let[o,a]of Object.entries(t))i[o]=String(a);return i}_addQueryString(t,e){let r=(0,ILe.parse)(t),n={...r,query:r.query??void 0};return typeof e=="string"?(n.search=e,n.query=void 0):(n.search=void 0,n.query=e),(0,ILe.format)(n)}param(t,e){let r=this.stack,n=this.paramNames,i=this._createParamMiddleware(t,e),o=n.map(u=>u.name),a=o.indexOf(t);return a!==-1&&this._insertParamMiddleware(r,i,o,a),this}_createParamMiddleware(t,e){let r=s(((n,i)=>(n._matchedParams||(n._matchedParams=new WeakMap),n._matchedParams.has(e)?i():(n._matchedParams.set(e,!0),e(n.params[t],n,i)))),"middleware");return r.param=t,r._originalFn=e,r}_insertParamMiddleware(t,e,r,n){let i=!1;for(let o=0;o<t.length;o++){let a=t[o];if(!a.param){t.splice(o,0,e),i=!0;break}if(r.indexOf(a.param)>n){t.splice(o,0,e),i=!0;break}}i||t.push(e)}setPrefix(t){return this.path?this.path instanceof RegExp?this:(this.path=this._applyPrefix(t),this._reconfigurePathMatching(t),this):this}_applyPrefix(t){let e=this.path==="/",r=this.opts.strict===!0,n=t.includes(":"),i=this.opts.pathAsRegExp===!0&&typeof this.path=="string";if(n&&i){let o=this.path;(o===String.raw`(?:\/|$)`||o===String.raw`(?:\\\/|$)`)&&(this.path="{/*rest}",this.opts.pathAsRegExp=!1)}return e&&!r?t:`${t}${this.path}`}_reconfigurePathMatching(t){let e=this.opts.pathAsRegExp===!0;if(t&&t.includes(":")&&e){let n=PBt(this.opts),{regexp:i,keys:o}=SLe(this.path,n);this.regexp=i,this.paramNames=o,this.opts.pathAsRegExp=!1}else if(e){let n=this.path,i=n.startsWith("^")?n:`^${n}`;this.regexp=this.path instanceof RegExp?this.path:new RegExp(i)}else{let n=PBt(this.opts),{regexp:i,keys:o}=SLe(this.path,n);this.regexp=i,this.paramNames=o}}};function JDa(){return K6n.default.METHODS.map(t=>t.toLowerCase())}s(JDa,"getAllHttpMethods");var XDa=["get","post","put","patch","delete","del","head","options"];function ZDa(t){return t?Array.isArray(t)?t:[t]:[]}s(ZDa,"normalizeParameterMiddleware");function J6n(t,e,r){let n=ZDa(r);for(let i of n)t.param(e,i)}s(J6n,"applyParameterMiddlewareToRoute");function eBa(t,e){let r=Object.keys(e);for(let n of r){let i=e[n];J6n(t,n,i)}}s(eBa,"applyAllParameterMiddleware");function H6n(t,e={}){if(!t)return!1;let{keys:r}=SLe(t,e);return r.length>0}s(H6n,"hasPathParameters");function tBa(t,e){return t!==void 0?typeof t=="string"?t===""?{path:"{/*rest}",pathAsRegExp:!1}:t==="/"?{path:"/",pathAsRegExp:!1}:{path:t,pathAsRegExp:!1}:{path:t,pathAsRegExp:!0}:e?{path:"{/*rest}",pathAsRegExp:!1}:{path:String.raw`(?:\/|$)`,pathAsRegExp:!0}}s(tBa,"determineMiddlewarePath");var LBt=(0,X6n.default)("koa-router"),Z6n=JDa(),Y6n=class{static{s(this,"RouterImplementation")}opts;methods;exclusive;params;stack;host;_events=new YDa;constructor(t={}){this.opts=t,this.methods=this.opts.methods||["HEAD","OPTIONS","GET","PUT","PATCH","POST","DELETE"],this.exclusive=!!this.opts.exclusive,this.params={},this.stack=[],this.host=this.opts.host}static url(t,...e){return new V6n(t,[],()=>{}).url(...e)}use(...t){let e;if(this._isPathArray(t[0]))return this._useWithPathArray(t);let r=this._hasExplicitPath(t[0]);if(r&&(e=t.shift()),t.length===0)throw new Error("You must provide at least one middleware function to router.use()");for(let n of t)this._isNestedRouter(n)?this._mountNestedRouter(n,e):this._registerMiddleware(n,e,r);return this}_isPathArray(t){return Array.isArray(t)&&t.length>0&&t.every(e=>typeof e=="string")}_hasExplicitPath(t){return typeof t=="string"||t instanceof RegExp}_isNestedRouter(t){return typeof t=="function"&&"router"in t&&t.router!==void 0}_useWithPathArray(t){let e=t[0],r=t.slice(1);for(let n of e)Reflect.apply(this.use,this,[n,...r]);return this}_mountNestedRouter(t,e){let r=t.router,n=this._cloneRouter(r),i=e&&typeof e=="string"&&H6n(e,this.opts);for(let o=0;o<n.stack.length;o++){let a=n.stack[o],u=this._cloneLayer(a);e&&typeof e=="string"&&u.setPrefix(e),this.opts.prefix&&u.setPrefix(this.opts.prefix),u.methods.length===0&&i&&(u.opts.ignoreCaptures=!1),this.stack.push(u),n.stack[o]=u}this.params&&this._applyParamMiddlewareToRouter(n)}_cloneRouter(t){return Object.assign(Object.create(Object.getPrototypeOf(t)),t,{stack:[...t.stack]})}_cloneLayer(t){return Object.assign(Object.create(Object.getPrototypeOf(t)),t,{stack:[...t.stack],methods:[...t.methods],paramNames:[...t.paramNames],opts:{...t.opts}})}_applyParamMiddlewareToRouter(t){let e=Object.keys(this.params);for(let r of e){let n=this.params[r];J6n(t,r,n)}}_registerMiddleware(t,e,r){let n=H6n(this.opts.prefix||"",this.opts),i=(()=>{if(e!==void 0)return e;if(n)return""})(),o=r||e===void 0&&n,{path:a,pathAsRegExp:u}=tBa(i,n),c=a,l=u,f=o&&a==="/";o&&typeof a=="string"&&(c=a,l=!1);let d=i===""&&a==="{/*rest}"?"rest":void 0;this.register(c,[],t,{end:f,ignoreCaptures:!o&&!n,ignoreWildcardParameter:d,pathAsRegExp:l})}prefix(t){let e=t.replace(/\/$/,""),r=this.opts.prefix||"";this.opts.prefix=e;for(let n of this.stack){if(typeof n.path=="string"&&r){let i=r+"/";(n.path===r||n.path.startsWith(i))&&(n.path=n.path.slice(r.length)||"/")}n.setPrefix(e)}return this}middleware(){let t=function(e,r){if(LBt("%s %s",e.method,e.path),!this.matchHost(e.host))return r();let n=this._getRequestPath(e),i=this.match(n,e.method);if(this._storeMatchedRoutes(e,i),e.router=this,e.routeMatched=i.route,!i.route)return this._events.emit(z6n.NotFound,e,r);let o=i.pathAndMethod;this._setMatchedRouteInfo(e,o);let a=this._buildMiddlewareChain(o,n);return(0,$6n.default)(a)(e,r)}.bind(this);return t.router=this,t}_getRequestPath(t){let e=t;return this.opts.routerPath||e.newRouterPath||e.path||e.routerPath||""}_storeMatchedRoutes(t,e){let r=t;r.matched?r.matched.push(...e.path):r.matched=e.path}_setMatchedRouteInfo(t,e){let r=t,n=e.toReversed().find(i=>i.methods.length>0);n&&(r._matchedRoute=n.path,n.name&&(r._matchedRouteName=n.name))}_buildMiddlewareChain(t,e){let r;if(this.exclusive){let i;if(this.opts.exclusive==="specificity")for(let o of t)(!i||o.paramNames.length<i.paramNames.length)&&(i=o);else i=t.at(-1);r=i?[i]:[]}else r=t;let n=[];for(let i of r)n.push((o,a)=>{let u=o;return u.captures=i.captures(e),u.request.params=i.params(e,u.captures||[],u.params),u.params=u.request.params,u.routerPath=i.path,u.routerName=i.name||void 0,u._matchedRoute=i.path,i.name&&(u._matchedRouteName=i.name),a()},...i.stack);return n}routes(){return this.middleware()}on(t,e){return this._events.register(HDa(t),e),this}allowedMethods(t={}){let e=this.methods;return(r,n)=>{let i=r;return n().then(()=>{if(!this._shouldProcessAllowedMethods(i))return;let o=i.matched||[],a=this._collectAllowedMethods(o),u=Object.keys(a),c=r.method.toUpperCase();if(!e.includes(c)){this._handleNotImplemented(i,u,t);return}if(c==="OPTIONS"&&u.length>0){this._handleOptionsRequest(i,u);return}u.length>0&&!a[c]&&this._handleMethodNotAllowed(i,u,t)})}}_shouldProcessAllowedMethods(t){return!!(t.matched&&(!t.status||t.status===404))}_collectAllowedMethods(t){let e={};for(let r of t)for(let n of r.methods)e[n]=n;return e}_handleNotImplemented(t,e,r){if(r.throw)throw typeof r.notImplemented=="function"?r.notImplemented():new MBt.default.NotImplemented;t.status=501,t.set("Allow",e.join(", "))}_handleOptionsRequest(t,e){t.status=200,t.body="",t.set("Allow",e.join(", "))}_handleMethodNotAllowed(t,e,r){if(r.throw)throw typeof r.methodNotAllowed=="function"?r.methodNotAllowed():new MBt.default.MethodNotAllowed;t.status=405,t.set("Allow",e.join(", "))}all(...t){let e,r,n;if(t.length>=2&&(typeof t[1]=="string"||t[1]instanceof RegExp)?(e=t[0],r=t[1],n=t.slice(2)):(e=void 0,r=t[0],n=t.slice(1)),typeof r!="string"&&!(r instanceof RegExp)&&(!Array.isArray(r)||r.length===0))throw new Error("You have to provide a path when adding an all handler");let i={name:e,pathAsRegExp:r instanceof RegExp};return this.register(r,Z6n,n,{...this.opts,...i}),this}redirect(t,e,r){let n=t,i=e;if(typeof t=="symbol"||typeof t=="string"&&t[0]!=="/"){let a=this.url(t);if(a instanceof Error)throw a;n=a}if(typeof e=="symbol"||typeof e=="string"&&e[0]!=="/"&&!e.includes("://")){let a=this.url(e);if(a instanceof Error)throw a;i=a}return this.all(n,a=>{a.redirect(i),a.status=r||301})}register(t,e,r,n={}){let i={...this.opts,...n};if(Array.isArray(t))return this._registerMultiplePaths(t,e,r,i);let o=this._createRouteLayer(t,e,r,i);return this.opts.prefix&&o.setPrefix(this.opts.prefix),eBa(o,this.params),this.stack.push(o),LBt("defined route %s %s",o.methods,o.path),o}_registerMultiplePaths(t,e,r,n){for(let i of t)this.register.call(this,i,e,r,n);return this}_createRouteLayer(t,e,r,n){return new V6n(t,e,r,{end:n.end===!1?n.end:!0,name:n.name,sensitive:n.sensitive||!1,strict:n.strict||!1,prefix:n.prefix||"",ignoreCaptures:n.ignoreCaptures,ignoreWildcardParameter:n.ignoreWildcardParameter,pathAsRegExp:n.pathAsRegExp})}route(t){return this.stack.find(r=>r.name===t)||!1}url(t,...e){let r=this.route(t);return r?r.url(...e):new Error(`No route found for name: ${String(t)}`)}match(t,e){let r={path:[],pathAndMethod:[],route:!1},n=e.toUpperCase();for(let i of this.stack)if(LBt("test %s %s",i.path,i.regexp),i.match(t)){r.path.push(i);let o=i.methods.length===0,a=i.methods.includes(n);(o||a)&&(r.pathAndMethod.push(i),i.methods.length>0&&(r.route=!0))}return r}matchHost(t){let{host:e}=this;return e?t?typeof e=="string"?t===e:Array.isArray(e)?e.includes(t):e instanceof RegExp?e.test(t):!1:!1:!0}param(t,e){this.params[t]||(this.params[t]=[]),Array.isArray(this.params[t])||(this.params[t]=[this.params[t]]),this.params[t].push(e);for(let r of this.stack)r.param(t,e);return this}_registerMethod(t,...e){let r,n,i;if(e.length>=2&&(typeof e[1]=="string"||e[1]instanceof RegExp)?(r=e[0],n=e[1],i=e.slice(2)):(r=void 0,n=e[0],i=e.slice(1)),typeof n!="string"&&!(n instanceof RegExp)&&(!Array.isArray(n)||n.length===0))throw new Error(`You have to provide a path when adding a ${t} handler`);let o={name:r,pathAsRegExp:n instanceof RegExp};return this.register(n,[t],i,{...this.opts,...o}),this}get(...t){return this._registerMethod("get",...t)}post(...t){return this._registerMethod("post",...t)}put(...t){return this._registerMethod("put",...t)}patch(...t){return this._registerMethod("patch",...t)}delete(...t){return this._registerMethod("delete",...t)}del(...t){return this.delete.apply(this,t)}head(...t){return this._registerMethod("head",...t)}options(...t){return this._registerMethod("options",...t)}};for(let t of Z6n)XDa.includes(t)||t in Y6n.prototype||Object.defineProperty(Y6n.prototype,t,{value:s(function(...r){return this._registerMethod(t,...r)},"value"),writable:!0,configurable:!0,enumerable:!1});var eQc={...U7,..._l};var eh=".temp",t5="couchdb",Uoe="minio",tWn=[{value:"MAIN_PORT",default:"10000"},{value:"COUCH_DB_URL",default:"http://budibase:budibase@localhost:10000/db/"},{value:"MINIO_URL",default:"http://localhost:10000"},{value:"MINIO_ACCESS_KEY"},{value:"MINIO_SECRET_KEY"}];function iBa(t){let e=t.MAIN_PORT,r=t.COUCH_DB_USER,n=t.COUCH_DB_PASSWORD;return!t.COUCH_DB_URL&&e&&r&&n&&(t.COUCH_DB_URL=`http://${r}:${n}@localhost:${e}/db/`),t.MINIO_URL||(t.MINIO_URL=`http://localhost:${e}/`),t}s(iBa,"checkURLs");async function sBa(){console.log("*** NOTE: use a .env file to load these parameters repeatedly ***");let t={};for(let e of tWn)t[e.value]=await hP(e.value,e.default);return t}s(sBa,"askQuestions");function oBa(t){if(!UBt.default.existsSync(t))throw"Unable to file specified .env file";let e=UBt.default.readFileSync(t,"utf8"),r=iBa(eWn.default.parse(e));for(let n of tWn)if(!r[n.value])throw`Cannot find "${n.value}" property in .env file`;return r}s(oBa,"loadEnvironment");async function FBt(t=!0){let e;t!==!0?e=oBa(t):e=await sBa();for(let r of Object.keys(e))dt._set(r,e[r]);return e}s(FBt,"getConfig");async function QBt(t,e){let r=tce();try{await r.replicate(t,e,{batch_size:1e3,batches_limit:5,style:"main_only"})}catch(n){throw new Error(`Replication failed - ${JSON.stringify(n)}`)}}s(QBt,"replication");function qBt(t){let e=tce(t.COUCH_DB_URL),r=tce();return{Remote:e,Local:r}}s(qBt,"getPouches");var SQ=ge(require("fs")),Nk=require("path");hd();var nWn=ge(require("node:stream")),iWn=require("stream/promises");var{ObjectStoreBuckets:aBa,ObjectStore:sWn,retrieve:uBa,uploadDirectory:cBa,createBucketIfNotExists:lBa}=mbe,rWn=Object.values(aBa);async function fBa(t,e){let r=[],n;do{let i=await t.listObjectsV2({Bucket:e,ContinuationToken:n});r.push(...i.Contents?.filter(o=>!!o.Key).map(o=>({...o,bucket:e,Key:o.Key}))||[]),n=i.NextContinuationToken}while(n);return r}s(fBa,"listBucketObjects");async function oWn(){let t=(0,Nk.join)(eh,Uoe);SQ.default.mkdirSync(t,{recursive:!0});let e=[],r=0;for(let o of rWn){let a=sWn();try{await a.headBucket({Bucket:o})}catch{r++;continue}e=e.concat(await fBa(a,o))}if(r===rWn.length)throw new Error("Unable to access MinIO/S3 - check environment config.");let n=lP(e.length),i=0;for(let o of e){let a=o.Key,u=await uBa(o.bucket,a),c=a.split("/"),l=(0,Nk.join)(t,o.bucket,...c);SQ.default.mkdirSync((0,Nk.dirname)(l),{recursive:!0}),u instanceof nWn.Readable?await(0,iWn.pipeline)(u,SQ.default.createWriteStream(l)):SQ.default.writeFileSync(l,u),n.update(++i)}n.stop()}s(oWn,"exportObjects");async function aWn(){let t=(0,Nk.join)(eh,Uoe),e=SQ.default.readdirSync(t),r=0;e.forEach(o=>{let a=SQ.default.readdirSync((0,Nk.join)(t,o));r+=a.length});let n=lP(r),i=0;for(let o of e){let a=sWn();await lBa(a,o);let u=await cBa(o,(0,Nk.join)(t,o),"/");i+=u.length,n.update(i)}n.stop()}s(aWn,"importObjects");var uWn=require("tar");async function cWn(t){let e=t.env||void 0,r=t.export||t;typeof r!="string"&&(r=`backup-${new Date().toISOString()}.tar.gz`);let n=await FBt(e),i=await Sqt(n.COUCH_DB_URL),{Remote:o,Local:a}=qBt(n);i0.default.existsSync(eh)&&i0.default.rmSync(eh,{recursive:!0});let u=(0,IQ.join)(eh,t5);i0.default.mkdirSync(eh),i0.default.mkdirSync(u),console.log("CouchDB Export");let c=lP(i.length),l=0;for(let f of i){c.update(++l);let d=new o(f),m=new a((0,IQ.join)(eh,t5,f));await QBt(d,m),await d.close(),await m.close()}c.stop(),console.log("S3 Export"),await oWn(),uWn.create({sync:!0,gzip:!0,file:r,cwd:(0,IQ.join)(eh)},[t5,Uoe]),i0.default.rmSync(eh,{recursive:!0}),console.log(`Generated export file - ${r}`)}s(cWn,"exportBackup");async function lWn(t){let e=t.env||void 0,r=t.import||t,n=await FBt(e);(!r||!i0.default.existsSync(r))&&(console.error("Cannot import without specifying a valid file to import"),process.exit(-1)),i0.default.existsSync(eh)&&i0.default.rmSync(eh,{recursive:!0}),i0.default.mkdirSync(eh),uWn.extract({sync:!0,cwd:(0,IQ.join)(eh),file:r});let{Remote:i,Local:o}=qBt(n),a=i0.default.readdirSync((0,IQ.join)(eh,t5));console.log("CouchDB Import");let u=lP(a.length),c=0;for(let l of a){u.update(++c);let f=new i(l),d=new o((0,IQ.join)(eh,t5,l));await QBt(d,f),await f.close(),await d.close()}u.stop(),console.log("MinIO Import"),await aWn();try{await yqe(`http://localhost:${n.MAIN_PORT}/api/system/restored`,"POST")}catch{}console.log("Import complete"),i0.default.rmSync(eh,{recursive:!0})}s(lWn,"importBackup");async function dBa(t){if(t.import)return lWn(t);if(t.export)return cWn(t)}s(dBa,"pickOne");var fWn=new NI("backups").addHelp("Allows building backups of Budibase, as well as importing a backup to a new instance.").addSubOption("--export [filename]","Export a backup from an existing Budibase installation.",cWn).addSubOption("--import [filename]","Import a backup to a new Budibase installation.",lWn).addSubOption("--env [envFile]","Provide an environment variable file to configure the CLI.",dBa);xx();var hXn=ge(require("node-fetch")),GQ=ge(require("fs")),pXn=ge(require("os")),FMe=require("path");var uXn=ge(pWn()),cXn=ge(require("vm")),_Lt=ge(Zoe());var KO=class{static{s(this,"Helper")}constructor(e,r,n=!0){this.name=e,this.fn=r,this.useValueFallback=n}register(e){e.registerHelper(this.name,(r,n)=>{let i={};n&&n.data&&n.data.root&&(i=n.data.root);let o=this.fn(r,i);return o??(this.useValueFallback?r:null)})}unregister(e){e.unregisterHelper(this.name)}};var UMe=ge(Zoe());var QPt=ge(kKn());var Zh=ge(Zqe()),jKn=ge(PKn()),VKn=ge(LKn()),HKn=ge(MKn()),YKn=ge(UKn()),WKn=ge(FKn()),zKn=ge(QKn()),$Kn=ge(qKn()),KKn=ge(GKn());Zh.default.extend(jKn.default);Zh.default.extend(VKn.default);Zh.default.extend(HKn.default);Zh.default.extend(YKn.default);Zh.default.extend(WKn.default);Zh.default.extend(zKn.default);Zh.default.extend($Kn.default);Zh.default.extend(KKn.default);function UQ(t){return typeof t=="object"&&typeof t.hash=="object"}s(UQ,"isOptions");function MPt(t){return typeof t=="object"&&typeof t.options=="object"&&typeof t.app=="object"}s(MPt,"isApp");function UPt(t,e,r){if(UQ(t))return UPt({},e,t);if(UQ(e))return UPt(t,r,e);let n=MPt(t)?t.context:{};r=r||{},UQ(r)||(e=Object.assign({},e,r)),UQ(r)&&r.hash.root===!0&&(e=Object.assign({},r.data.root,e));let i=Object.assign({},n,e,r.hash);return MPt(t)||(i=Object.assign({},t,i)),MPt(t)&&t.view&&t.view.data&&(i=Object.assign({},i,t.view.data)),i}s(UPt,"getContext");function FPt(t,e,r){return UQ(e)&&(r=e,e=XKn),UQ(t)&&(r=t,e=null,t=null),{str:t,pattern:e,options:r}}s(FPt,"initialConfig");function JKn(t,e,r){let n=FPt(t,e,r),i={lang:"en",date:new Date(n.str)},o=UPt(this,i,{});Zh.default.locale(o.lang||o.language)}s(JKn,"setLocale");var XKn="MMMM DD, YYYY",RMe=s((t,e,r)=>{let n=FPt(t,e,r);if(n.str==null&&n.pattern==null)return Zh.default.locale("en"),(0,Zh.default)().format(XKn);JKn(n.str,n.pattern,n.options);let i=(0,Zh.default)(new Date(n.str));return typeof n.options=="string"?i=n.options.toLowerCase()==="utc"?i.utc():i.tz(n.options):i=i.tz(Zh.default.tz.guess()),n.pattern===""?i.toISOString():i.format(n.pattern)},"date"),mae=s((t,e,r)=>{let n=FPt(t,e);JKn(n.str,n.pattern);let i=Zh.default.duration(n.str,n.pattern);return r&&!UQ(r)?i.format(r):i.humanize()},"duration"),Aae=s((t,e,r)=>(0,Zh.default)(new Date(t)).diff((0,Zh.default)(new Date(e)),r),"difference"),CMe=s(t=>{let e=Aae(t,new Date().toISOString(),"ms");return mae(e,"ms")},"durationFromNow");var bMe=["#if","#unless","#each","#with","lookup","log","blockHelperMissing","each","helperMissing","if","unless","log","lookup","with"],ZKn=["math","array","number","url","string","comparison","object","regex","uuid"],FQ={OBJECT:"object",ALL:"all",LITERAL:"literal",JS:"js",DECODE_ID:"decodeId"},_5="%LITERAL%";var e7n={date:RMe,duration:mae,difference:Aae,durationFromNow:CMe};function t7n(t){for(let[r,n]of Object.entries(e7n))t.registerHelper(r,n);let e=[];for(let r of ZKn){let n=QPt.default[r]();for(let i of Object.entries(n)){let o=i[0];bMe.indexOf(o)!==-1||e.indexOf(o)!==-1||e.push(o)}QPt.default[r]({handlebars:t})}qPt=e.concat(Object.keys(e7n))}s(t7n,"registerAll");var qPt=[];function tFa(){return process.env.NODE_ENV==="jest"||process.env.JEST_WORKER_ID!=null&&process.env.JEST_WORKER_ID!=="null"}s(tFa,"isJest");function QQ(){return tFa()}s(QQ,"isTest");var r7n=s(()=>process&&process.env.BACKEND_JS,"isTestingBackendJS");var rFa=/^[A-Za-z0-9]+$/g,wMe=/{{([^{].*?)}}/g,GPt=/{?{{([^{].*?)}}}?/g,nFa=/{{{([^{].*?)}}}/g,_ae=s(()=>QQ()&&r7n()?!0:QQ()?!1:typeof window>"u","isBackendService"),n7n=s(()=>process&&!process.env.NO_JS,"isJSAllowed"),i7n=s(t=>{let e=t,r=new RegExp(wMe),n=new RegExp(nFa),i=e.match(n);i&&i.forEach(a=>{e=e.replace(a,"")});let o=e.match(r);return o||[]},"findDoubleHbsInstances"),s7n=s(t=>t.match(rFa),"isAlphaNumeric"),jPt=s((t,e,r,n)=>t.slice(0,e)+n+t.slice(e+r),"swapStrings");var VPt=s(t=>Buffer.from(t,"base64").toString("utf-8"),"atob"),o7n=s((t,e,r)=>{let n=e.map(o=>o.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")),i=new RegExp(`\\b(${n.join("|")})\\b`,"g");return t.replace(i,`${r}$1`)},"prefixStrings");function NMe(t){return`
4435
4435
  result = {
4436
4436
  result: null,
4437
4437
  error: null,
@@ -4466,7 +4466,7 @@ ${t}
4466
4466
  </style>
4467
4467
  `,a=!1,u,c,l=[];if(i){let d=`${t}.pre-svelte5`;Rs.default.writeFileSync(d,e),Rs.default.writeFileSync(t,o),a=!0,u=e,c=o,l.push(`Updated ${t} to use <svelte:boundary>, $$restProps, and error UI.`)}else l.push(`${t} already looks Svelte 5 compatible (uses <svelte:boundary> with no legacy Boundary.js wrapper).`);let f=rh.default.join(rh.default.dirname(t),"Boundary.js");if(Rs.default.existsSync(f))try{Rs.default.unlinkSync(f),a=!0,l.push("Removed legacy lib/Boundary.js (incompatible with Svelte 5).")}catch(d){console.log("Failed to delete legacy Boundary.js:",d instanceof Error?d.message:d)}return{changed:a,before:u,after:c,message:l.join(" ")}}s(xqa,"migrateWrapper");function vqa(){let t=rh.default.join(process.cwd(),"package.json");if(!Rs.default.existsSync(t))return{changed:!1,message:"package.json not found"};let e=Rs.default.readFileSync(t,"utf8"),r;try{r=JSON.parse(e)}catch(f){return{changed:!1,message:`Invalid package.json: ${f?.message||"parse error"}`}}let n=JSON.stringify(r,null,2),i=typeof r.version=="string"?r.version.trim():void 0,o=EXn(i);r.dependencies||(r.dependencies={}),r.dependencies.svelte="^5.0.0",r.peerDependencies={...r.peerDependencies||{},svelte:"^5.0.0"};let a=r.devDependencies||{};a.rollup="^4.21.0",a["@rollup/plugin-commonjs"]="^25.0.7",a["@rollup/plugin-node-resolve"]="^15.2.3",a["rollup-plugin-svelte"]="^7.2.3",a["@budibase/backend-core"]&&(a["@budibase/backend-core"]="^2.8.0"),a["npm-run-all"]&&delete a["npm-run-all"],r.devDependencies=a,r.dependencies?.["@crownframework/svelte-error-boundary"]&&delete r.dependencies["@crownframework/svelte-error-boundary"],r.scripts||(r.scripts={}),r.scripts.build="rollup -c rollup.config.mjs",r.scripts.watch="rollup -cw rollup.config.mjs",o&&(r.version=o);let u=JSON.stringify(r,null,2);if(n===u)return{changed:!1,message:"package.json already appears Svelte 5 ready. Skipping."};Rs.default.writeFileSync(`${t}.pre-svelte5`,e),Rs.default.writeFileSync(t,`${u}
4468
4468
  `);let c=i&&o?` (version ${i} -> ${o})`:"",l=o?`Updated package.json for Svelte 5, Rollup 4, scripts, and version bump${c}.`:"Updated package.json for Svelte 5, Rollup 4, and scripts.";return{changed:!0,before:n,after:u,message:l}}s(vqa,"migratePackageJson");function RXn(){let t=rh.default.join(process.cwd(),".github","workflows");return Rs.default.existsSync(t)?Rs.default.readdirSync(t).filter(r=>r.endsWith(".yml")||r.endsWith(".yaml")).map(r=>rh.default.join(".github","workflows",r)):[]}s(RXn,"findWorkflowFiles");function Dqa(){let t=RXn();if(t.length===0)return{changed:!1,message:"No GitHub workflow files found in .github/workflows/ - skipping node version migration."};let e=[],r=!1;for(let n of t){let i=rh.default.join(process.cwd(),n),o=Rs.default.readFileSync(i,"utf8");if(!/node-version:\s*['"]?16['"]?/g.test(o))continue;let u=o.replace(/node-version:\s*['"]?16['"]?/g,"node-version: 18");if(u!==o){let c=`${i}.pre-svelte5`;Rs.default.writeFileSync(c,o),Rs.default.writeFileSync(i,u),r=!0,e.push(`Updated ${n}: node-version 16 -> 18`)}}return r?{changed:!0,message:e.join("; ")}:{changed:!1,message:"No workflow files with node-version: 16 found - skipping node version migration."}}s(Dqa,"migrateNodeVersion");function Bqa(){let t=rh.default.join(process.cwd(),"schema.json");if(!Rs.default.existsSync(t))return{changed:!1,message:"schema.json not found - skipping schema metadata migration."};let e=Rs.default.readFileSync(t,"utf8"),r;try{r=JSON.parse(e)}catch(c){return{changed:!1,message:`Invalid schema.json: ${c?.message||"parse error"}`}}let n=r&&typeof r.metadata=="object"&&!Array.isArray(r.metadata)?r.metadata:{};if(!(n?.svelteMajor!==5))return{changed:!1,message:"schema.json metadata already includes svelteMajor: 5. Skipping."};let o=JSON.stringify(r,null,2),a={...n,svelteMajor:5};r.metadata=a;let u=JSON.stringify(r,null,2);return Rs.default.writeFileSync(`${t}.pre-svelte5`,e),Rs.default.writeFileSync(t,`${u}
4469
- `),{changed:!0,before:o,after:u,message:"Updated schema.json metadata to include svelteMajor: 5."}}s(Bqa,"migrateSchemaJson");async function CXn(){let t=[],e=Rs.default.readFileSync("package.json","utf8"),r=JSON.parse(e),n=r?.dependencies?.svelte?.startsWith("^5")||r?.peerDependencies?.svelte?.startsWith("^5"),i=typeof r?.version=="string"?r.version.trim():void 0,o=EXn(i);n?t.push("package.json appears to already depend on Svelte 5."):t.push("Will bump svelte to ^5.0.0 and align dev/peer dependencies."),r?.dependencies?.["@crownframework/svelte-error-boundary"]&&t.push("Detected @crownframework/svelte-error-boundary; migration will replace it with <svelte:boundary> in lib/Wrapper.svelte."),o&&i&&o!==i&&t.push(`Will bump package.json version from ${i} to ${o}.`);let a=yXn(),u="unknown";if(a){let T=Rs.default.readFileSync(a,"utf8");TXn(T)?(u="looks-new",t.push(`Rollup config ${a} already looks Svelte 5-ready.`)):(u="needs-migration",t.push("Will write Rollup 4 / Svelte 5 config and rename to rollup.config.mjs."))}else u="unknown",t.push("No rollup config found - will create rollup.config.mjs.");let c=IXn(),l="not-found";c?Rs.default.readFileSync(c,"utf8").includes("<svelte:boundary>")?(l="looks-new",t.push(`${c} already uses <svelte:boundary>.`)):(l="needs-migration",t.push(`Will update ${c} to use <svelte:boundary>, $$restProps, and error UI.`)):t.push("No wrapper.svelte found - skipping wrapper migration.");let f="unknown";if(Rs.default.existsSync("schema.json"))try{let T=Rs.default.readFileSync("schema.json","utf8"),S=JSON.parse(T);(S&&typeof S.metadata=="object"&&!Array.isArray(S.metadata)?S.metadata:{}).svelteMajor===5?(f="looks-new",t.push("schema.json metadata already declares svelteMajor: 5.")):(f="needs-migration",t.push("Will update schema.json metadata to set svelteMajor: 5."))}catch(T){f="unknown",t.push(`schema.json could not be parsed - please fix JSON before migration (${T?.message||"parse error"}).`)}else f="not-found",t.push("schema.json not found - cannot update metadata.");let d=n?"looks-new":"needs-migration",m="not-found",A=RXn();if(A.length>0){let T=!1,S=!1;for(let b of A){let C=rh.default.join(process.cwd(),b),B=Rs.default.readFileSync(C,"utf8");/node-version:\s*['"]?16['"]?/.test(B)&&(T=!0),/node-version:\s*['"]?(18|20|22)['"]?/.test(B)&&(S=!0)}T?(m="needs-migration",t.push("Will update GitHub workflow files: node-version 16 -> 18.")):S?(m="looks-new",t.push("GitHub workflow files already use node-version 18 or higher.")):(m="looks-new",t.push("GitHub workflow files found but no node-version: 16 detected."))}else t.push("No GitHub workflow files found in .github/workflows/ - skipping node version check.");return{report:t,rollup:u,packageJson:d,wrapper:l,schema:f,nodeVersion:m,canBuildAfter:!0,rollupFile:a,wrapperFile:c,pkg:r}}s(CXn,"analysePluginForSvelte5");async function bXn(){let t=await Oqa();if(t.message.includes("Failed to retrieve canonical rollup.config.mjs from skeleton"))return{pkgRes:{changed:!1,message:"Skipped package.json migration due to Rollup template failure."},schemaRes:{changed:!1,message:"Skipped schema.json migration due to Rollup template failure."},rollupRes:t,wrapperRes:{changed:!1,message:"Skipped wrapper migration due to Rollup template failure."},nodeVersionRes:{changed:!1,message:"Skipped node version migration due to Rollup template failure."}};let e=xqa(),r=Bqa(),n=vqa(),i=Dqa();return{pkgRes:n,schemaRes:r,rollupRes:t,wrapperRes:e,nodeVersionRes:i}}s(bXn,"runSvelte5Migration");var wXn=require("child_process");var kqa=require("find-free-port");function Pqa(t){let e=[],r=[];for(let n of new Set(t.filter(Boolean)))if(rx.default.existsSync(n))try{rx.default.unlinkSync(n),e.push(n)}catch(i){r.push({path:n,error:i instanceof Error?i.message:String(i)})}return{deleted:e,failed:r}}s(Pqa,"cleanupPreSvelte5Backups");function NXn(){if(!rx.default.existsSync("package.json"))throw new Error("Please run in a plugin directory - must contain package.json");if(!rx.default.existsSync("schema.json"))throw new Error("Please run in a plugin directory - must contain schema.json")}s(NXn,"checkInPlugin");async function Lqa(t){return rx.default.readdirSync(process.cwd()).find(r=>r===".git")?!1:(console.log(Qi(`By default the plugin will be created in the directory "${t}"`)),console.log(Qi("if you are already in an empty directory, such as a new Git repo, you can disable this functionality.")),OI("Create top level directory?"))}s(Lqa,"askAboutTopLevel");async function Mqa(t){let e=t.init||t;if(!e||!KFt.includes(e)){console.log(Fa("Please provide a type to init, either 'component', 'datasource' or 'automation'."));return}console.log(Qi("Lets get some details about your new plugin:"));let r=await hP("Name",`budibase-${e}`);if(rx.default.existsSync(r)){console.log(Fa("Directory by plugin name already exists, pick a new name."));return}let n=await hP("Description",`An amazing Budibase ${e}!`),i=await hP("Version","1.0.0"),o=await Lqa(r);console.log(Qi("Retrieving project...")),await QMe(e,r),await gXn(e,r,n,i),console.log(Qi("Installing dependencies...")),await S5("install",(0,qMe.join)(process.cwd(),r)),o?console.log(Qi(`Plugin created in directory "${r}"`)):(Rqe(r,process.cwd()),console.log(Qi("Plugin created in current directory."))),Wue(Pb.PluginInit,{type:e,name:r,description:n,version:i})}s(Mqa,"init");async function TLt(){NXn(),console.log(Qi("Verifying plugin..."));let t=rx.default.readFileSync("schema.json","utf8"),e=rx.default.readFileSync("package.json","utf8"),r,n;try{let i=JSON.parse(t),o=JSON.parse(e);if(!o.name||!o.version||!o.description)throw new Error("package.json is missing one of 'name', 'version' or 'description'.");return r=o.name,n=o.version,CNe.validate(i),{name:r,version:n}}catch(i){i&&i.message&&i.message.includes("not valid JSON")?console.log(Fa(`schema.json is not valid JSON: ${i.message}`)):console.log(Fa(`Invalid schema/package.json: ${i.message}`))}}s(TLt,"verify");async function Uqa(){let t=await TLt();if(!t?.name)return;console.log(pu("Verified!")),console.log(Qi("Building plugin...")),await S5("build");let e=(0,qMe.join)("dist",`${t.name}-${t.version}.tar.gz`);console.log(pu(`Build complete - output in: ${e}`))}s(Uqa,"build");async function Fqa(){let t=await TLt();if(!t?.name)return;let e=(0,qMe.join)("dist",`${t.name}-${t.version}.tar.gz`);console.log(Qi(`Watching - build in: ${e}`));try{await S5("watch")}catch{console.log(pu("Watch exited."))}}s(Fqa,"watch");async function Qqa(){let t=await hP("Directory to watch","./"),[e]=await kqa(1e4),r="admin";await Xue({init:"quick",single:!0,watchPluginDir:t,genUser:r,port:e,silent:!0}),await Fq(),console.log(pu("Configuration has been written to docker-compose.yaml")),console.log(pu("Development environment started successfully - connect at: ")+Qi(`http://localhost:${e}`)),console.log(pu("Use the following credentials to login:")),console.log(pu("Email: ")+Qi(Qqe)),console.log(pu("Password: ")+Qi(r))}s(Qqa,"dev");async function qqa(t){NXn();let e=!!t?.yes,r=!!t?.force,n=!1;try{n=!!(0,wXn.execSync)("git status --porcelain",{encoding:"utf8"}).trim()}catch{}if(n&&!r&&(console.log(Qi("Your git working directory is not clean. Commit or stash changes, or re-run with --force.")),!await OI("Proceed with migration anyway?"))){console.log(Qi("Migration aborted."));return}console.log(Qi("Analyzing plugin for Svelte 5 migration..."));let i=await CXn();console.log(Qi("Proposed changes:"));for(let c of i.report)console.log(Qi(" - "+c));let o=["package.json.pre-svelte5","schema.json.pre-svelte5",i.rollupFile?`${i.rollupFile}.pre-svelte5`:void 0,i.wrapperFile?`${i.wrapperFile}.pre-svelte5`:void 0];if(!e&&!await OI("Apply these changes now?")){console.log(Qi("Migration aborted by user."));return}console.log(Qi("Applying migrations..."));let a=await bXn();if(a.rollupRes?.message?.includes("Failed to retrieve canonical rollup.config.mjs from skeleton")){console.log(Fa(a.rollupRes.message));return}if(a.pkgRes?.message&&console.log(Qi(a.pkgRes.message)),a.schemaRes?.message&&console.log(Qi(a.schemaRes.message)),a.rollupRes?.message&&console.log(Qi(a.rollupRes.message)),a.wrapperRes?.message&&console.log(Qi(a.wrapperRes.message)),console.log(Qi("Installing updated dependencies...")),await S5("install"),console.log(Qi("Re-verifying plugin...")),!(await TLt())?.name){console.log(Fa("Verification failed after migration."));return}console.log(Qi("Attempting build..."));try{await S5("build");let c=Pqa(o.filter(l=>!!l));console.log(pu("Migration completed. Your plugin was migrated to Svelte 5 and built successfully.")),c.deleted.length&&console.log(Qi(`Removed ${c.deleted.length} pre-svelte5 backup file(s): ${c.deleted.join(", ")}`)),c.failed.length&&console.log(Qi(`Failed to remove ${c.failed.length} pre-svelte5 backup file(s): ${c.failed.map(l=>`${l.path} (${l.error})`).join(", ")}`))}catch(c){console.log(Fa(`Build failed after migration. Please review the errors above. ${c?.message||""}`))}}s(qqa,"migrateSvelte5");var OXn=new NI("plugins").addHelp("Custom plugins for Budibase, init, build and verify your components and datasources with this tool.").addSubOption("--init [type]","Init a new plugin project, with a type of either component or datasource.",Mqa).addSubOption("--build","Build your plugin, this will verify and produce a final tarball for your project.",Uqa).addSubOption("--watch","Automatically build any changes to your plugin.",Fqa).addSubOption("--dev","Run a development environment which automatically watches the current directory.",Qqa).addSubOption("--migrate-svelte5","Migrate this plugin to the Svelte 5-compatible Budibase plugin format.",qqa,[{command:"--yes",help:"Skip confirmation prompts during migration."},{command:"--force",help:"Proceed even if the git working directory is not clean (creates .pre-svelte5 backups during migration, removed on success)."}]);function xXn(){return[yqt,WQt,fWn,OXn]}s(xXn,"getCommands");var DXn=require("commander");hd();var vXn="3.39.32";async function jqa(){let t=new DXn.Command().addHelpCommand("help",Q9("Help with Budibase commands.")).helpOption(!1).version(vXn);for(let e of xXn())e.configure(t);await t.parseAsync(process.argv)}s(jqa,"init");var Vqa=["exit","SIGINT","SIGUSR1","SIGUSR2","uncaughtException"];Vqa.forEach(t=>{process.on(t,e=>{e&&!isNaN(e)||e&&(console.error(Fa("Failed to run CLI command - please report with the following message:")),console.error(Fa(e)))})});jqa().catch(t=>{console.error("Unexpected error - ",t)});
4469
+ `),{changed:!0,before:o,after:u,message:"Updated schema.json metadata to include svelteMajor: 5."}}s(Bqa,"migrateSchemaJson");async function CXn(){let t=[],e=Rs.default.readFileSync("package.json","utf8"),r=JSON.parse(e),n=r?.dependencies?.svelte?.startsWith("^5")||r?.peerDependencies?.svelte?.startsWith("^5"),i=typeof r?.version=="string"?r.version.trim():void 0,o=EXn(i);n?t.push("package.json appears to already depend on Svelte 5."):t.push("Will bump svelte to ^5.0.0 and align dev/peer dependencies."),r?.dependencies?.["@crownframework/svelte-error-boundary"]&&t.push("Detected @crownframework/svelte-error-boundary; migration will replace it with <svelte:boundary> in lib/Wrapper.svelte."),o&&i&&o!==i&&t.push(`Will bump package.json version from ${i} to ${o}.`);let a=yXn(),u="unknown";if(a){let T=Rs.default.readFileSync(a,"utf8");TXn(T)?(u="looks-new",t.push(`Rollup config ${a} already looks Svelte 5-ready.`)):(u="needs-migration",t.push("Will write Rollup 4 / Svelte 5 config and rename to rollup.config.mjs."))}else u="unknown",t.push("No rollup config found - will create rollup.config.mjs.");let c=IXn(),l="not-found";c?Rs.default.readFileSync(c,"utf8").includes("<svelte:boundary>")?(l="looks-new",t.push(`${c} already uses <svelte:boundary>.`)):(l="needs-migration",t.push(`Will update ${c} to use <svelte:boundary>, $$restProps, and error UI.`)):t.push("No wrapper.svelte found - skipping wrapper migration.");let f="unknown";if(Rs.default.existsSync("schema.json"))try{let T=Rs.default.readFileSync("schema.json","utf8"),S=JSON.parse(T);(S&&typeof S.metadata=="object"&&!Array.isArray(S.metadata)?S.metadata:{}).svelteMajor===5?(f="looks-new",t.push("schema.json metadata already declares svelteMajor: 5.")):(f="needs-migration",t.push("Will update schema.json metadata to set svelteMajor: 5."))}catch(T){f="unknown",t.push(`schema.json could not be parsed - please fix JSON before migration (${T?.message||"parse error"}).`)}else f="not-found",t.push("schema.json not found - cannot update metadata.");let d=n?"looks-new":"needs-migration",m="not-found",A=RXn();if(A.length>0){let T=!1,S=!1;for(let b of A){let C=rh.default.join(process.cwd(),b),B=Rs.default.readFileSync(C,"utf8");/node-version:\s*['"]?16['"]?/.test(B)&&(T=!0),/node-version:\s*['"]?(18|20|22)['"]?/.test(B)&&(S=!0)}T?(m="needs-migration",t.push("Will update GitHub workflow files: node-version 16 -> 18.")):S?(m="looks-new",t.push("GitHub workflow files already use node-version 18 or higher.")):(m="looks-new",t.push("GitHub workflow files found but no node-version: 16 detected."))}else t.push("No GitHub workflow files found in .github/workflows/ - skipping node version check.");return{report:t,rollup:u,packageJson:d,wrapper:l,schema:f,nodeVersion:m,canBuildAfter:!0,rollupFile:a,wrapperFile:c,pkg:r}}s(CXn,"analysePluginForSvelte5");async function bXn(){let t=await Oqa();if(t.message.includes("Failed to retrieve canonical rollup.config.mjs from skeleton"))return{pkgRes:{changed:!1,message:"Skipped package.json migration due to Rollup template failure."},schemaRes:{changed:!1,message:"Skipped schema.json migration due to Rollup template failure."},rollupRes:t,wrapperRes:{changed:!1,message:"Skipped wrapper migration due to Rollup template failure."},nodeVersionRes:{changed:!1,message:"Skipped node version migration due to Rollup template failure."}};let e=xqa(),r=Bqa(),n=vqa(),i=Dqa();return{pkgRes:n,schemaRes:r,rollupRes:t,wrapperRes:e,nodeVersionRes:i}}s(bXn,"runSvelte5Migration");var wXn=require("child_process");var kqa=require("find-free-port");function Pqa(t){let e=[],r=[];for(let n of new Set(t.filter(Boolean)))if(rx.default.existsSync(n))try{rx.default.unlinkSync(n),e.push(n)}catch(i){r.push({path:n,error:i instanceof Error?i.message:String(i)})}return{deleted:e,failed:r}}s(Pqa,"cleanupPreSvelte5Backups");function NXn(){if(!rx.default.existsSync("package.json"))throw new Error("Please run in a plugin directory - must contain package.json");if(!rx.default.existsSync("schema.json"))throw new Error("Please run in a plugin directory - must contain schema.json")}s(NXn,"checkInPlugin");async function Lqa(t){return rx.default.readdirSync(process.cwd()).find(r=>r===".git")?!1:(console.log(Qi(`By default the plugin will be created in the directory "${t}"`)),console.log(Qi("if you are already in an empty directory, such as a new Git repo, you can disable this functionality.")),OI("Create top level directory?"))}s(Lqa,"askAboutTopLevel");async function Mqa(t){let e=t.init||t;if(!e||!KFt.includes(e)){console.log(Fa("Please provide a type to init, either 'component', 'datasource' or 'automation'."));return}console.log(Qi("Lets get some details about your new plugin:"));let r=await hP("Name",`budibase-${e}`);if(rx.default.existsSync(r)){console.log(Fa("Directory by plugin name already exists, pick a new name."));return}let n=await hP("Description",`An amazing Budibase ${e}!`),i=await hP("Version","1.0.0"),o=await Lqa(r);console.log(Qi("Retrieving project...")),await QMe(e,r),await gXn(e,r,n,i),console.log(Qi("Installing dependencies...")),await S5("install",(0,qMe.join)(process.cwd(),r)),o?console.log(Qi(`Plugin created in directory "${r}"`)):(Rqe(r,process.cwd()),console.log(Qi("Plugin created in current directory."))),Wue(Pb.PluginInit,{type:e,name:r,description:n,version:i})}s(Mqa,"init");async function TLt(){NXn(),console.log(Qi("Verifying plugin..."));let t=rx.default.readFileSync("schema.json","utf8"),e=rx.default.readFileSync("package.json","utf8"),r,n;try{let i=JSON.parse(t),o=JSON.parse(e);if(!o.name||!o.version||!o.description)throw new Error("package.json is missing one of 'name', 'version' or 'description'.");return r=o.name,n=o.version,CNe.validate(i),{name:r,version:n}}catch(i){i&&i.message&&i.message.includes("not valid JSON")?console.log(Fa(`schema.json is not valid JSON: ${i.message}`)):console.log(Fa(`Invalid schema/package.json: ${i.message}`))}}s(TLt,"verify");async function Uqa(){let t=await TLt();if(!t?.name)return;console.log(pu("Verified!")),console.log(Qi("Building plugin...")),await S5("build");let e=(0,qMe.join)("dist",`${t.name}-${t.version}.tar.gz`);console.log(pu(`Build complete - output in: ${e}`))}s(Uqa,"build");async function Fqa(){let t=await TLt();if(!t?.name)return;let e=(0,qMe.join)("dist",`${t.name}-${t.version}.tar.gz`);console.log(Qi(`Watching - build in: ${e}`));try{await S5("watch")}catch{console.log(pu("Watch exited."))}}s(Fqa,"watch");async function Qqa(){let t=await hP("Directory to watch","./"),[e]=await kqa(1e4),r="admin";await Xue({init:"quick",single:!0,watchPluginDir:t,genUser:r,port:e,silent:!0}),await Fq(),console.log(pu("Configuration has been written to docker-compose.yaml")),console.log(pu("Development environment started successfully - connect at: ")+Qi(`http://localhost:${e}`)),console.log(pu("Use the following credentials to login:")),console.log(pu("Email: ")+Qi(Qqe)),console.log(pu("Password: ")+Qi(r))}s(Qqa,"dev");async function qqa(t){NXn();let e=!!t?.yes,r=!!t?.force,n=!1;try{n=!!(0,wXn.execSync)("git status --porcelain",{encoding:"utf8"}).trim()}catch{}if(n&&!r&&(console.log(Qi("Your git working directory is not clean. Commit or stash changes, or re-run with --force.")),!await OI("Proceed with migration anyway?"))){console.log(Qi("Migration aborted."));return}console.log(Qi("Analyzing plugin for Svelte 5 migration..."));let i=await CXn();console.log(Qi("Proposed changes:"));for(let c of i.report)console.log(Qi(" - "+c));let o=["package.json.pre-svelte5","schema.json.pre-svelte5",i.rollupFile?`${i.rollupFile}.pre-svelte5`:void 0,i.wrapperFile?`${i.wrapperFile}.pre-svelte5`:void 0];if(!e&&!await OI("Apply these changes now?")){console.log(Qi("Migration aborted by user."));return}console.log(Qi("Applying migrations..."));let a=await bXn();if(a.rollupRes?.message?.includes("Failed to retrieve canonical rollup.config.mjs from skeleton")){console.log(Fa(a.rollupRes.message));return}if(a.pkgRes?.message&&console.log(Qi(a.pkgRes.message)),a.schemaRes?.message&&console.log(Qi(a.schemaRes.message)),a.rollupRes?.message&&console.log(Qi(a.rollupRes.message)),a.wrapperRes?.message&&console.log(Qi(a.wrapperRes.message)),console.log(Qi("Installing updated dependencies...")),await S5("install"),console.log(Qi("Re-verifying plugin...")),!(await TLt())?.name){console.log(Fa("Verification failed after migration."));return}console.log(Qi("Attempting build..."));try{await S5("build");let c=Pqa(o.filter(l=>!!l));console.log(pu("Migration completed. Your plugin was migrated to Svelte 5 and built successfully.")),c.deleted.length&&console.log(Qi(`Removed ${c.deleted.length} pre-svelte5 backup file(s): ${c.deleted.join(", ")}`)),c.failed.length&&console.log(Qi(`Failed to remove ${c.failed.length} pre-svelte5 backup file(s): ${c.failed.map(l=>`${l.path} (${l.error})`).join(", ")}`))}catch(c){console.log(Fa(`Build failed after migration. Please review the errors above. ${c?.message||""}`))}}s(qqa,"migrateSvelte5");var OXn=new NI("plugins").addHelp("Custom plugins for Budibase, init, build and verify your components and datasources with this tool.").addSubOption("--init [type]","Init a new plugin project, with a type of either component or datasource.",Mqa).addSubOption("--build","Build your plugin, this will verify and produce a final tarball for your project.",Uqa).addSubOption("--watch","Automatically build any changes to your plugin.",Fqa).addSubOption("--dev","Run a development environment which automatically watches the current directory.",Qqa).addSubOption("--migrate-svelte5","Migrate this plugin to the Svelte 5-compatible Budibase plugin format.",qqa,[{command:"--yes",help:"Skip confirmation prompts during migration."},{command:"--force",help:"Proceed even if the git working directory is not clean (creates .pre-svelte5 backups during migration, removed on success)."}]);function xXn(){return[yqt,WQt,fWn,OXn]}s(xXn,"getCommands");var DXn=require("commander");hd();var vXn="3.40.1";async function jqa(){let t=new DXn.Command().addHelpCommand("help",Q9("Help with Budibase commands.")).helpOption(!1).version(vXn);for(let e of xXn())e.configure(t);await t.parseAsync(process.argv)}s(jqa,"init");var Vqa=["exit","SIGINT","SIGUSR1","SIGUSR2","uncaughtException"];Vqa.forEach(t=>{process.on(t,e=>{e&&!isNaN(e)||e&&(console.error(Fa("Failed to run CLI command - please report with the following message:")),console.error(Fa(e)))})});jqa().catch(t=>{console.error("Unexpected error - ",t)});
4470
4470
  /*! Bundled license information:
4471
4471
 
4472
4472
  lodash/lodash.js: