@budibase/cli 3.32.5 → 3.33.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1464,7 +1464,7 @@ $1`)};ide.parseAttributes=s(function(e){return Object.keys(e).map(function(r){va
1464
1464
  if (doc._id.startsWith("devinfo") && doc.apiKey) {
1465
1465
  emit(doc.apiKey, doc.userId)
1466
1466
  }
1467
- }`;await bTe(t,e,"by_api_key")},"createApiKeyView");async function MEt(t,e,r,n,i){try{return await r.query(`database/${t}`,e)}catch(o){let a=o&&o.name==="not_found",c=o&&o.status===404;if(a||c)return await zxa(r,t),await n(),MEt(t,e,r,n,i);if(o.status===409)return MEt(t,e,r,n,i);throw o}}s(MEt,"queryViewRaw");var Jxa=s(async(t,e,r,n,i)=>{let c=(await MEt(t,e,r,n,i)).rows.map(u=>e.include_docs?u.doc:u.value);return i?.arrayResponse?c:c.length<=1?c[0]:c},"queryView");var Xxa={by_email2:Wxa,by_api_key:Kxa,by_app:Yxa},STe=s(async(t,e,r,n)=>{r||(r=$p());let i=Xxa[t];return Jxa(t,e,r,i,n)},"queryGlobalView");Ut();var Zxa=Be(require("pouchdb"));var eRa=Be(ew());var dwn=Be(require("node-fetch"));Ut();var UEt=MH.removeKeyNumbering;function iF(t){return t==null||t===""}s(iF,"isEmpty");var uwn=class t{static{s(this,"QueryBuilder")}#e;#t;#r;#n;#s;#i;#c;#o;#a;#l;#u;#d=!1;#p;static{this.maxLimit=200}constructor(e,r,n){this.#e=e,this.#t=r,this.#r={allOr:!1,onEmptyFilter:"all",string:{},fuzzy:{},range:{},equal:{},notEqual:{},empty:{},notEmpty:{},oneOf:{},contains:{},notContains:{},containsAny:{},...n},this.#n=50,this.#c="ascending",this.#o="string",this.#a=!0}disableEscaping(){return this.#d=!0,this}setIndexBuilder(e){return this.#u=e,this}setVersion(e){return e!=null&&(this.#l=e),this}setTable(e){return this.#r.equal.tableId=e,this}setLimit(e){return e!=null&&(this.#n=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.#i=e),this}setSkip(e){return this.#p=e,this}excludeDocs(){return this.#a=!1,this}includeDocs(){return this.#a=!0,this}addString(e,r){return this.#r.string[e]=r,this}addFuzzy(e,r){return this.#r.fuzzy[e]=r,this}addRange(e,r,n){return this.#r.range[e]={low:r,high:n},this}addEqual(e,r){return this.#r.equal[e]=r,this}addNotEqual(e,r){return this.#r.notEqual[e]=r,this}addEmpty(e,r){return this.#r.empty[e]=r,this}addNotEmpty(e,r){return this.#r.notEmpty[e]=r,this}addOneOf(e,r){return this.#r.oneOf[e]=r,this}addContains(e,r){return this.#r.contains[e]=r,this}addNotContains(e,r){return this.#r.notContains[e]=r,this}addContainsAny(e,r){return this.#r.containsAny[e]=r,this}setAllOr(){this.#r.allOr=!0}setOnEmptyFilter(e){this.#r.onEmptyFilter=e}handleSpaces(e){return this.#d?e:e.replace(/ /g,"_")}preprocess(e,{escape:r,lowercase:n,wrap:i,type:o}={}){let a=!!this.#l,c=typeof e;return e&&n&&(e=e.toLowerCase?e.toLowerCase():e),!this.#d&&r&&c==="string"&&(e=`${e}`.replace(/[ /#+\-&|!(){}\]^"~*?:\\]/g,"\\$&")),c==="string"&&!isNaN(e)&&!o?e=`"${e}"`:a&&i&&(e=c==="number"?e:`"${e}"`),e}isMultiCondition(){let e=0;for(let r of Object.values(this.#r))typeof r=="object"&&(e+=Object.keys(r).length);return e>1}compressFilters(e){let r={};for(let o of Object.keys(e)){let a=UEt(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.#r&&this.#r.allOr,n=r?"":"*:*",i=!0,o={escape:!0,lowercase:!0,wrap:!0},a="";this.#r.equal.tableId&&(a=this.#r.equal.tableId,delete this.#r.equal.tableId);let c=s((A,y)=>iF(y)?null:`${A}:${e.preprocess(y,o)}`,"equal"),u=s((A,y,v="AND")=>{if(iF(y))return null;if(!Array.isArray(y))return`${A}:${y}`;let b=`${e.preprocess(y[0],{escape:!0})}`;for(let x=1;x<y.length;x++)b+=` ${v} ${e.preprocess(y[x],{escape:!0})}`;return`${A}:(${b})`},"contains"),l=s((A,y)=>iF(y)?null:(y=e.preprocess(y,{escape:!0,lowercase:!0,type:"fuzzy"}),`${A}:/.*${y}.*/`),"fuzzy"),d=s((A,y)=>{let v=r?"*:* AND ":"",b=r?"AND":void 0;return v+"NOT "+u(A,y,b)},"notContains"),f=s((A,y)=>u(A,y,"OR"),"containsAny"),p=s((A,y)=>{if(iF(y))return"*:*";if(!Array.isArray(y))if(typeof y=="string")y=y.split(",");else return"";let v=`${e.preprocess(y[0],o)}`;for(let b=1;b<y.length;b++)v+=` OR ${e.preprocess(y[b],o)}`;return`${A}:(${v})`},"oneOf");function h(A,y,v){let b="";for(let[x,O]of Object.entries(A)){x=UEt(x),x=e.preprocess(e.handleSpaces(x),{escape:!0});let N=y(x,O);if(N!=null){if(b.length>0||n.length>0){let T=v?.mode?v.mode:r?"OR":"AND";b+=` ${T} `}b+=N,(typeof O!="string"&&O!=null||typeof O=="string"&&O!==a&&O!=="")&&(i=!1)}}if(v?.returnBuilt)return b;n+=b}if(s(h,"build"),this.#r.string&&h(this.#r.string,(A,y)=>iF(y)?null:(y=e.preprocess(y,{escape:!0,lowercase:!0,type:"string"}),`${A}:${y}*`)),this.#r.range&&h(this.#r.range,(A,y)=>{if(iF(y)||y.low==null||y.low===""||y.high==null||y.high==="")return null;let v=e.preprocess(y.low,o),b=e.preprocess(y.high,o);return`${A}:[${v} TO ${b}]`}),this.#r.fuzzy&&h(this.#r.fuzzy,l),this.#r.equal&&h(this.#r.equal,c),this.#r.notEqual&&h(this.#r.notEqual,(A,y)=>iF(y)?null:typeof y=="boolean"?`(*:* AND !${A}:${y})`:`!${A}:${e.preprocess(y,o)}`),this.#r.empty&&h(this.#r.empty,A=>(i=!1,`(*:* -${A}:["" TO *])`)),this.#r.notEmpty&&h(this.#r.notEmpty,A=>(i=!1,`${A}:["" TO *]`)),this.#r.oneOf&&h(this.#r.oneOf,p),this.#r.contains&&h(this.#r.contains,u),this.#r.notContains&&h(this.compressFilters(this.#r.notContains),d),this.#r.containsAny&&h(this.#r.containsAny,f),a&&(n=this.isMultiCondition()?`(${n})`:n,r=!1,h({tableId:a},c)),i){if(this.#r.onEmptyFilter==="none")return"";if(this.#r?.allOr)return n.replace("()","(*:*)")}return n}buildSearchBody(){let e={q:this.buildSearchQuery(),limit:Math.min(this.#n,t.maxLimit),include_docs:this.#a};if(this.#i&&(e.bookmark=this.#i),this.#s){let r=this.#c==="descending"?"-":"",n=`<${this.#o}>`;e.sort=`${r}${this.handleSpaces(this.#s)}${n}`}return e}async run(){return this.#p&&await this.#h(this.#p),await this.#m()}async#h(e){let r=this.#a,n=this.#n;this.excludeDocs();let i=e,o=0;do{let a=Math.min(t.maxLimit,i);this.setLimit(a);let{bookmark:c,rows:u}=await this.#m();this.setBookmark(c),o=u.length,i-=u.length}while(i>0&&o>0);this.#a=r,this.#n=n}async#m(){let{url:e,cookie:r}=uk(),n=`${e}/${this.#e}/_design/database/_search/${this.#t}`,i=this.buildSearchBody();try{return await lwn(n,i,r)}catch(o){if(o.status===404&&this.#u)return await this.#u(),await lwn(n,i,r);throw o}}};async function lwn(t,e,r){let n=await(0,dwn.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(lwn,"runQuery");Ut();var Xre={};ks(Xre,{addTenantToUrl:()=>rRa,getTenantDB:()=>fwn,getTenantIDFromCtx:()=>FEt,isUserInWorkspaceTenant:()=>nRa});function fwn(t){return jS(Ate(t))}s(fwn,"getTenantDB");Ut();function rRa(t){let e=ys();if(iU()){let r=t.indexOf("?")===-1?"?":"&";t+=`${r}tenantId=${e}`}return t}s(rRa,"addTenantToUrl");var nRa=s((t,e)=>{let r;return e?r=e.tenantId||Of:r=ys(),(c$(t)||Of)===r},"isUserInWorkspaceTenant"),iRa=Object.values(dK),FEt=s((t,e)=>{if(!iU())return Of;e.allowNoTenant===void 0&&(e.allowNoTenant=!1),e.includeStrategies||(e.includeStrategies=iRa),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(Rpt()).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(c=>c.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");var ntd="app"+Yi;function pwn(t){return new Promise(e=>setTimeout(e,t))}s(pwn,"timeout");function hwn(t){return!!FKt[t]}s(hwn,"isAudited");var vTe={milliseconds:1,seconds:1e3,minutes:6e4,hours:36e5,days:864e5},Vf=class t{constructor(e){this.ms=e}static{s(this,"Duration")}to(e){return this.ms/vTe[e]}toMs(){return this.ms}toSeconds(){return this.to("seconds")}static convert(e,r,n){return n*vTe[e]/vTe[r]}static from(e,r){return new t(r*vTe[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)}};var bDn=Be(EDn());var rwt=require("util"),nwt=Be(require("zlib"));var fsd=(0,rwt.promisify)(nwt.default.gzip),psd=(0,rwt.promisify)(nwt.default.gunzip);function Gja(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(Gja,"jobToJobInformation");var iwt=class{static{s(this,"InMemoryQueue")}constructor(e,r){this._name=e,this._opts=r,this._messages=[],this._emitter=new SDn.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((u,l)=>{r(n,s((f,p)=>{f?l(f):u(p)},"done"))})}s(i,"execute");let o=this._attempts;async function a(u,l=0){try{return await u}catch(d){if(l++,l<o&&!n._isDiscarded)return await WC.wait(100*l),await a(i(),l);throw d}}s(a,"retryFunc");try{let u=await a(i());this._emitter.emit("completed",n,u);let l=this._messages.indexOf(n);if(l===-1)throw"Failed deleting a processed message";this._messages.splice(l,1)}catch(u){console.error(u),this._emitter.emit("error",n,u)}this._runCount++;let c=n.opts?.jobId?.toString();c&&n.opts?.removeOnComplete&&this._queuedJobIds.delete(c)})}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=y0(),a=s(()=>{let u={id:o,timestamp:Date.now(),queue:this,data:e,opts:n,discard:async()=>{u._isDiscarded=!0}};this._messages.push(u),this._messages.length>1e3&&this._messages.shift(),this._addCount++,this._emitter.emit("message",u)},"pushMessage"),c=n?.delay;return c?setTimeout(a,c):a(),{id:i,finished:()=>new Promise((u,l)=>{let d=s((p,h)=>{p.id===o&&(this._emitter.off("error",d),this._emitter.off("completed",f),l(h))},"errorHandler"),f=s((p,h)=>{p.id===o&&(this._emitter.off("error",d),this._emitter.off("completed",f),u(h))},"completedHandler");this._emitter.on("error",d),this._emitter.on("completed",f)})}}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}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=>Gja(e))}async whenCurrentJobsFinished(){do await pwn(50);while(this.hasRunningJobs())}hasRunningJobs(){return this._addCount>this._runCount}},vDn=iwt;var gwt=Be(require("bull"));function wDn(t,e,r){zja(t,e),r&&Vja(t,r)}s(wDn,"addListeners");function Vja(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(Vja,"handleStalled");function wE(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},c;return r.job?.data?.automation&&(c={_logKey:"automation",trigger:r.job?r.job.data.automation.definition.trigger.event:void 0}),[i,o,a,c]}s(wE,"getLogParams");var $ja={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"};function zja(t,e){let r=$ja[e];function n(i,o){let a=i.data.event?.appId;if(a)return Opt(a,o);o()}s(n,"doInJobContext"),t.on("stalled",async i=>{await n(i,()=>{console.error(...wE(r,"stalled",{job:i}))})}).on("error",i=>{console.error(...wE(r,"error",{error:i}))}),process.env.NODE_DEBUG?.includes("bull")&&t.on("waiting",i=>{console.info(...wE(r,"waiting",{jobId:i}))}).on("active",async i=>{await n(i,()=>{console.info(...wE(r,"active",{job:i}))})}).on("progress",async(i,o)=>{await n(i,()=>{console.info(...wE(r,"progress",{job:i},{progress:o}))})}).on("completed",async(i,o)=>{await n(i,()=>{console.info(...wE(r,"completed",{job:i},{result:o}))})}).on("failed",async(i,o)=>{await n(i,()=>{console.error(...wE(r,"failed",{job:i,error:o}))})}).on("paused",()=>{console.info(...wE(r,"paused"))}).on("resumed",()=>{console.info(...wE(r,"resumed"))}).on("cleaned",(i,o)=>{console.info(...wE(r,"cleaned",{},{length:i.length,type:o}))}).on("drained",()=>{console.info(...wE(r,"drained"))}).on("removed",i=>{console.info(...wE(r,"removed",{job:i}))})}s(zja,"logging");var Wja=[];function TDn(t,e){let r=setInterval(t,e);return Wja.push(r),r}s(TDn,"set");var $x=Be(ew()),sie=Be(XDn());var kHa=Vf.fromMinutes(5).toMs(),NHa=Vf.fromSeconds(30).toMs(),Awt=Vf.fromSeconds(60).toMs(),tPn=[],ZDn;async function ePn(){for(let t of tPn)await t.clean(Awt,"completed"),await t.clean(Awt,"failed")}s(ePn,"cleanup");async function DHa(t,e,r){let n=performance.now();try{let i=await e();return $x.default.dogstatsd.increment(`${t}.success`,1,r),i}catch(i){throw $x.default.dogstatsd.increment(`${t}.error`,1,r),i}finally{let i=performance.now()-n;$x.default.dogstatsd.distribution(`${t}.duration.ms`,i,r),$x.default.dogstatsd.increment(t,1,r)}}s(DHa,"withMetrics");function rPn(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(rPn,"jobOptsTags");function PHa(t){return{"job.id":t.id,"job.attemptsMade":t.attemptsMade,"job.timestamp":t.timestamp,"job.data.sizeBytes":(0,sie.default)(t.data),...rPn(t.opts||{})}}s(PHa,"jobTags");var DF=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:qH(),settings:{maxStalledCount:this.opts.maxStalledCount?this.opts.maxStalledCount:0,lockDuration:kHa,lockRenewTime:NHa}};this.opts.jobOptions&&(r.defaultJobOptions=this.opts.jobOptions);let n;return He.isTest()?process.env.BULL_TEST_REDIS_PORT&&!isNaN(+process.env.BULL_TEST_REDIS_PORT)?n=new gwt.default(this.jobQueue,{...r,redis:{host:"localhost",port:+process.env.BULL_TEST_REDIS_PORT}}):n=new vDn(this.jobQueue,r):n=new gwt.default(this.jobQueue,r),wDn(n,this.jobQueue,this.opts.removeStalledCb),tPn.push(n),!ZDn&&!He.isTest()&&(ZDn=TDn(ePn,Awt),ePn().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,c)=>{await $x.default.trace("queue.process",async u=>{if(a.data._parentSpanContext){let l=a.data._parentSpanContext,d={traceId:l.traceId,spanId:l.spanId,toTraceId:()=>l.traceId,toSpanId:()=>l.spanId,toTraceparent:()=>""};u.addLink(d)}u.addTags({"queue.name":this.jobQueue,...PHa(a)}),this.opts.jobTags&&u.addTags(this.opts.jobTags(a.data)),$x.default.dogstatsd.distribution("queue.process.sizeBytes",(0,sie.default)(a.data),this.metricTags()),await this.withMetrics("queue.process",()=>c?n(a,c):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 $x.default.trace("queue.add",async n=>(n.addTags({"queue.name":this.jobQueue,"job.data.sizeBytes":(0,sie.default)(e),...rPn(r||{})}),this.opts.jobTags&&n.addTags(this.opts.jobTags(e)),e._parentSpanContext={traceId:n.context().toTraceId(),spanId:n.context().toSpanId()},$x.default.dogstatsd.distribution("queue.add.sizeBytes",(0,sie.default)(e),this.metricTags()),await this.withMetrics("queue.add",()=>this.queue.add(e,r))))}withMetrics(e,r){return DHa(e,r,this.metricTags())}metricTags(){return{queueName:this.jobQueue}}close(e){return this.queue.close(e)}whenCurrentJobsFinished(){return this.queue.whenCurrentJobsFinished()}};var CIe={};ks(CIe,{getId:()=>_wt,setHeader:()=>QHa});var sPn=TIe(),QHa=s(t=>{let e=sPn.getId();e&&(t["x-budibase-correlation-id"]=e)},"setHeader");function _wt(){return sPn.getId()}s(_wt,"getId");var sBe=Be(lBn()),vpi=Be(hxt()),_Mt=Be(ew()),wpi=Be(nAe());var Epi=Be(require("path")),bpi=Be(IQn());var iBe={};ks(iBe,{ObjectStore:()=>ub,ObjectStoreBuckets:()=>Gzc,SIGNED_FILE_PREFIX:()=>lMt,bucketTTLConfig:()=>J1e,budibaseTempDir:()=>j2,client3rdPartyLibrary:()=>LWc,clientLibraryPath:()=>MWc,clientLibraryUrl:()=>UWc,createBucketIfNotExists:()=>Qoe,deleteFile:()=>cWc,deleteFiles:()=>uWc,deleteFolder:()=>opi,downloadTarball:()=>dWc,downloadTarballDirect:()=>lWc,enrichPWAImages:()=>FWc,enrichPluginURLs:()=>QWc,extractBucketAndPath:()=>sMt,getAllFiles:()=>sWc,getAppFileUrl:()=>ppi,getClientCacheKey:()=>fpi,getGlobalFileS3Key:()=>hpi,getGlobalFileUrl:()=>qWc,getObjectMetadata:()=>fWc,getPluginIconKey:()=>Api,getPluginJSKey:()=>gpi,getPluginS3Dir:()=>_pi,getPresignedUrl:()=>H2,getReadStream:()=>X1e,listAllObjects:()=>dMt,objectExists:()=>pWc,processAutomationAttachment:()=>$zc,processObjectStoreAttachment:()=>$fi,retrieve:()=>spi,retrieveDirectory:()=>aWc,retrieveToTmp:()=>oWc,sanitizeBucket:()=>Nm,sanitizeKey:()=>Ol,streamUpload:()=>ipi,streamUploadMany:()=>iWc,upload:()=>nWc,uploadDirectory:()=>fMt});var eBe=Be(J1t()),oMt=Be(xli()),Zfi=Be(Mli()),epi=Be(Jli());var PR=Be(ew()),wY=Be(require("fs")),Foe=Be(require("fs/promises")),tpi=Be(require("https")),aMt=Be(require("node-fetch")),p1=require("path"),tBe=Be(require("stream")),qoe=require("stream/promises"),cMt=Be(Qfi());k7();var uMt=Be(require("zlib"));var jfi=Be(require("fs")),Hfi=require("os"),Uoe=Be(require("path")),Gfi=Be(require("stream"));var Gzc={BACKUPS:He.BACKUPS_BUCKET_NAME,APPS:He.APPS_BUCKET_NAME,TEMPLATES:He.TEMPLATES_BUCKET_NAME,GLOBAL:He.GLOBAL_BUCKET_NAME,PLUGINS:He.PLUGIN_BUCKET_NAME,TEMP:He.TEMP_BUCKET_NAME},Vfi=(0,Uoe.join)((0,Hfi.tmpdir)(),".budibase");try{jfi.default.mkdirSync(Vfi)}catch(t){if(t.code!=="EEXIST")throw t}function j2(){return Vfi}s(j2,"budibaseTempDir");var J1e=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 Vzc(t){let e=await fetch(t.url);if(!e.ok||!e.body)throw new Error(`Unexpected response ${e.statusText}`);let r=Uoe.default.basename(new URL(t.url).pathname);if(!e.body)throw new Error("No response received for attachment");return{filename:t.filename||r,content:Gfi.default.Readable.fromWeb(e.body)}}s(Vzc,"processUrlAttachment");async function $fi(t){let e=sMt(t.url);if(e===null)throw new Error("Invalid signed URL");let{bucket:r,path:n}=e,{stream:i}=await X1e(r,n),o=Uoe.default.basename(n);return{bucket:r,path:n,filename:t.filename||o,content:i}}s($fi,"processObjectStoreAttachment");async function $zc(t){return t.url?.startsWith("http://")||t.url?.startsWith("https://")?await Vzc(t):await $fi(t)}s($zc,"processAutomationAttachment");var Zzc=Xfi(),eWc={bucketCreationPromises:{}},lMt="/files/signed",f1={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"},tWc=[f1.html,f1.css,f1.js,f1.json];function Ol(t){return Zzc(Nm(t)).replace(/\\/g,"/")}s(Ol,"sanitizeKey");function Nm(t){return t.replace(new RegExp(rk,"g"),cM)}s(Nm,"sanitizeBucket");function ub(t={presigning:!1}){let e={forcePathStyle:!0,credentials:{accessKeyId:He.MINIO_ACCESS_KEY,secretAccessKey:He.MINIO_SECRET_KEY},region:He.AWS_REGION};if(!He.MINIO_ENABLED&&He.AWS_SESSION_TOKEN&&(e.credentials={accessKeyId:He.MINIO_ACCESS_KEY,secretAccessKey:He.MINIO_SECRET_KEY,sessionToken:He.AWS_SESSION_TOKEN}),He.MINIO_URL&&(t.presigning&&He.MINIO_ENABLED?e.endpoint="http://minio-service":e.endpoint=He.MINIO_URL),He.S3_IGNORE_SELF_SIGNED==="true"){let r=new tpi.default.Agent({rejectUnauthorized:!1});e.requestHandler=new epi.NodeHttpHandler({httpsAgent:r})}return new eBe.S3(e)}s(ub,"ObjectStore");async function Qoe(t,e){e=Nm(e);try{return await t.headBucket({Bucket:e}),{created:!1,exists:!0}}catch(r){let n=r.statusCode||r.$response?.statusCode,i=eWc.bucketCreationPromises,o=n===404,a=n===403;if(i[e])return await i[e],{created:!1,exists:!0};if(o||a){if(o)return i[e]=t.createBucket({Bucket:e}).catch(c=>{if(c.Code!=="BucketAlreadyOwnedByYou")throw c}),await i[e],delete i[e],{created:!0,exists:!1};throw new Error("Access denied to object store bucket."+r)}else throw new Error("Unable to write to object store bucket.")}}s(Qoe,"createBucketIfNotExists");var rWc=s((t,e)=>{if(e)return e;let r=t.split(".").pop();return r?f1[r.toLowerCase()]:f1.txt},"resolveContentType"),rpi=s(async(t,e,r)=>{let n=Nm(t),i=ub(),o=await Qoe(i,n);if(r.addTags({bucketCreated:o.created,bucketExists:o.exists}),e&&o.created){let a=J1e(n,e);await i.putBucketLifecycleConfiguration(a)}return{bucket:n,client:i,bucketCreated:o}},"initialiseBucket"),npi=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=rWc(r,i),c=Ol(r),u={Bucket:e,Key:c,Body:n,ContentType:a,...o??{}};return{details:await new oMt.Upload({client:t,params:u}).done(),contentType:a}},"streamUploadInternal");async function nWc({bucket:t,filename:e,path:r,type:n,metadata:i,body:o,ttl:a}){let c=e.split(".").pop(),u=r?(await Foe.default.open(r)).createReadStream():o,l=ub(),d=await Qoe(l,t);if(a&&d.created){let y=J1e(t,a);await l.putBucketLifecycleConfiguration(y)}let f=n,p=f||(c?f1[c.toLowerCase()]:f1.txt),h={Bucket:Nm(t),Key:Ol(e),Body:u,ContentType:p};if(i&&typeof i=="object"){for(let y of Object.keys(i))(!i[y]||typeof i[y]!="string")&&delete i[y];h.Metadata=i}return new oMt.Upload({client:l,params:h}).done()}s(nWc,"upload");async function ipi({bucket:t,stream:e,filename:r,type:n,extra:i,ttl:o}){return await PR.default.trace("streamUpload",async a=>{a.addTags({bucketName:t,filename:r,type:n,ttl:o});let c=r.split(".").pop();a.addTags({extension:c});let{bucket:u,client:l}=await rpi(t,o,a),{details:d,contentType:f}=await npi({client:l,bucket:u,filename:r,stream:e,type:n,extra:i}),p=await l.headObject({Bucket:u,Key:Ol(r)});return a.addTags({contentType:f,contentLength:p.ContentLength}),{...d,ContentLength:p.ContentLength}})}s(ipi,"streamUpload");async function iWc({bucket:t,files:e,ttl:r}){return await PR.default.trace("streamUploadMany",async i=>{if(i.addTags({bucketName:t,ttl:r,fileCount:e.length}),!e.length)return[];let{bucket:o,client:a}=await rpi(t,r,i),c=e.map((l,d)=>({...l,index:d})),u=new Array(e.length);return await $O.parallelForeach(c,async l=>{let{details:d}=await npi({client:a,bucket:o,filename:l.filename,stream:l.stream,type:l.type,extra:l.extra});u[l.index]=d},10),u})}s(iWc,"streamUploadMany");async function spi(t,e){return await PR.default.trace("retrieve",async r=>{r.addTags({bucketName:t,filepath:e});let n=ub(),i={Bucket:Nm(t),Key:Ol(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}),tWc.includes(o.ContentType))return r.addTags({string:!0}),o.Body.transformToString();{r.addTags({string:!1});let a=o.Body.transformToWebStream();return tBe.default.Readable.fromWeb(a)}})}s(spi,"retrieve");async function*dMt(t,e){let r=ub(),n=s((a={})=>r.listObjectsV2({...a,Bucket:Nm(t),Prefix:Ol(e)}),"list"),i=!1,o;do{let a={};o&&(a.ContinuationToken=o);let c=await n(a);if(c.Contents)for(let u of c.Contents)yield u;i=!!c.IsTruncated,o=c.NextContinuationToken}while(i&&o)}s(dMt,"listAllObjects");async function sWc(t,e){let r={};return await $O.parallelForeach(dMt(t,e),async n=>{if(!n.Key)throw new Error("file.Key must be defined");r[n.Key]=n},5),r}s(sWc,"getAllFiles");async function H2(t,e,r=3600){let n=ub({presigning:!0}),i={Bucket:Nm(t),Key:Ol(e)},o=await(0,Zfi.getSignedUrl)(n,new eBe.GetObjectCommand(i),{expiresIn:r});if(He.MINIO_ENABLED){let a=new URL(o),c=a.pathname,u=a.search;return`${lMt}${c}${u}`}else return o}s(H2,"getPresignedUrl");async function oWc(t,e){return await PR.default.trace("retrieveToTmp",async r=>{r.addTags({bucketName:t,filepath:e}),t=Nm(t),e=Ol(e);let n=await spi(t,e),i=(0,p1.join)(j2(),uM());return r.addTags({outputPath:i}),n instanceof tBe.default.Readable?(r.addTags({stream:!0}),await(0,qoe.pipeline)(n,wY.default.createWriteStream(i))):(r.addTags({stream:!1}),wY.default.writeFileSync(i,n)),i})}s(oWc,"retrieveToTmp");async function aWc(t,e,r){return await PR.default.trace("retrieveDirectory",async n=>{n.addTags({bucketName:t,path:e});let i=(0,p1.join)(j2(),uM());await Foe.default.mkdir(i,{recursive:!0});let o=0;return await $O.parallelForeach(dMt(t,e),async a=>{let{Key:c}=a;!c||r?.some(u=>u.test(c))||(o++,await PR.default.trace("retrieveDirectory.object",async u=>{let l=a.Key;u.addTags({filename:l});let{stream:d}=await X1e(t,l),f=l.split("/"),p=f.slice(0,f.length-1),h=(0,p1.join)(i,...p);f.length>1&&!wY.default.existsSync(h)&&await Foe.default.mkdir(h,{recursive:!0}),await(0,qoe.pipeline)(d,wY.default.createWriteStream((0,p1.join)(i,...f),{mode:420}))}))},5),n.addTags({numObjects:o}),i})}s(aWc,"retrieveDirectory");async function cWc(t,e){let r=ub();await Qoe(r,t);let n={Bucket:t,Key:Ol(e)};return r.deleteObject(n)}s(cWc,"deleteFile");async function uWc(t,e){let r=ub();await Qoe(r,t);let n={Bucket:t,Delete:{Objects:e.map(i=>({Key:Ol(i)}))}};return r.deleteObjects(n)}s(uWc,"deleteFiles");async function opi(t,e){t=Nm(t),e=Ol(e);let r=ub(),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 opi(t,e)}s(opi,"deleteFolder");async function fMt(t,e,r){return await PR.default.trace("uploadDirectory",async n=>{n.addTags({bucketName:t,localPath:e,bucketPath:r}),t=Nm(t);let i=await Foe.default.readdir(e,{withFileTypes:!0});n.addTags({numFiles:i.length});for(let o of i){let a=Ol((0,p1.join)(r,o.name)),c=(0,p1.join)(e,o.name);o.isDirectory()?await fMt(t,c,a):await ipi({bucket:t,filename:a,stream:wY.default.createReadStream(c)})}return i})}s(fMt,"uploadDirectory");async function lWc(t,e,r={}){e=Ol(e);let n=await(0,aMt.default)(t,{headers:r});if(!n.ok)throw new Error(`unexpected response ${n.statusText}`);await(0,qoe.pipeline)(n.body,uMt.default.createUnzip(),cMt.default.extract(e))}s(lWc,"downloadTarballDirect");async function dWc(t,e,r){e=Nm(e),r=Ol(r);let n=await(0,aMt.default)(t);if(!n.ok)throw new Error(`unexpected response ${n.statusText}`);let i=(0,p1.join)(j2(),r);return await(0,qoe.pipeline)(n.body,uMt.default.createUnzip(),cMt.default.extract(i)),!He.isTest()&&He.SELF_HOSTED&&await fMt(e,i,r),i}s(dWc,"downloadTarball");async function X1e(t,e){return await PR.default.trace("getReadStream",async r=>{t=Nm(t),e=Ol(e),r.addTags({bucketName:t,path:e});let n=ub(),i={Bucket:t,Key:e},o=await n.getObject(i);if(!o.Body||!(o.Body instanceof tBe.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(X1e,"getReadStream");async function fWc(t,e){t=Nm(t),e=Ol(e);let r=ub(),n={Bucket:t,Key:e};try{return await r.headObject(n)}catch{throw new Error("Unable to retrieve metadata from object")}}s(fWc,"getObjectMetadata");async function pWc(t,e){t=Nm(t),e=Ol(e);let r=ub(),n={Bucket:t,Key:e};try{return await r.headObject(n),!0}catch(i){if((i.statusCode||i.$response?.statusCode)===404)return!1;throw i}}s(pWc,"objectExists");function sMt(t){let e=t.split("?")[0],r=new RegExp(`^${lMt}/(?<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(sMt,"extractBucketAndPath");var dpi=Be(require("querystring"));var lpi=Be(upi());var nBe;function DWc(){if(!He.CLOUDFRONT_PRIVATE_KEY_64)throw new Error("CLOUDFRONT_PRIVATE_KEY_64 is not set");return nBe||(nBe=Buffer.from(He.CLOUDFRONT_PRIVATE_KEY_64,"base64").toString("utf-8"),nBe)}s(DWc,"getPrivateKey");var PWc=s(()=>({keypairId:He.CLOUDFRONT_PUBLIC_KEY_ID,privateKeyString:DWc(),expireTime:new Date().getTime()+1e3*60*60*24}),"getCloudfrontSignParams"),TY=s(t=>{let e=BWc(t);return lpi.getSignedUrl(e,PWc())},"getPresignedUrl"),BWc=s(t=>{let e="/";return t.startsWith("/")&&(e=""),`${He.CLOUDFRONT_CDN}${e}${t}`},"getUrl");function MWc(t){return`${Ol(t)}/budibase-client.js`}s(MWc,"clientLibraryPath");function LWc(t,e){return`${Ol(t)}/${e}`}s(LWc,"client3rdPartyLibrary");async function UWc(t,e){return`/api/assets/${t}/client?${await fpi(e)}`}s(UWc,"clientLibraryUrl");async function fpi(t){let e,r;try{e=ys()}finally{r={version:t}}return e&&e!==Of&&(r.tenantId=e),dpi.default.encode(r)}s(fpi,"getClientCacheKey");async function ppi(t){return He.CLOUDFRONT_CDN?TY(t):await H2(He.APPS_BUCKET_NAME,t)}s(ppi,"getAppFileUrl");async function FWc(t){if(t.length===0)return[];try{return await Promise.all(t.map(async e=>({...e,src:await ppi(e.src),type:e.type||"image/png"})))}catch(e){return console.error("Error enriching PWA images:",e),t}}s(FWc,"enrichPWAImages");var qWc=s(async(t,e,r)=>{let n=hpi(t,e);return He.CLOUDFRONT_CDN?(r&&(n=`${n}?etag=${r}`),TY(n)):await H2(He.GLOBAL_BUCKET_NAME,n)},"getGlobalFileUrl"),hpi=s((t,e)=>{let r=`${t}/${e}`;return He.MULTI_TENANCY&&(r=`${ys()}/${r}`),r},"getGlobalFileS3Key");async function QWc(t){return!t||!t.length?[]:await Promise.all(t.map(async e=>{let r=await jWc(e),n=await HWc(e);return{...e,jsUrl:r,iconUrl:n}}))}s(QWc,"enrichPluginURLs");async function jWc(t){let e=gpi(t);return mpi(e)}s(jWc,"getPluginJSUrl");async function HWc(t){let e=Api(t);if(e)return mpi(e)}s(HWc,"getPluginIconUrl");async function mpi(t){return He.CLOUDFRONT_CDN?TY(t):await H2(He.PLUGIN_BUCKET_NAME,t)}s(mpi,"getPluginUrl");function gpi(t){return ypi(t,"plugin.min.js")}s(gpi,"getPluginJSKey");function Api(t){let e=t.iconUrl?"icon.svg":t.iconFileName;if(e)return ypi(t,e)}s(Api,"getPluginIconKey");function ypi(t,e){return`${_pi(t.name)}/${e}`}s(ypi,"getPluginS3Key");function _pi(t){let e=`${t}`;return He.MULTI_TENANCY&&(e=`${ys()}/${e}`),He.CLOUDFRONT_CDN&&(e=`plugins/${e}`),e}s(_pi,"getPluginS3Dir");var GWc="budibase.log",VWc="budibase-logs-history.txt",$Wc=Epi.default.join(j2(),"systemlogs");function zWc(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(zWc,"getSingleFileMaxSizeInfo");function Spi(){let t=zWc(He.ROLLING_LOG_MAX_SIZE);return bpi.createStream(GWc,{size:t?.size,path:$Wc,maxFiles:t?.totalHistoryFiles||1,immutable:!0,history:VWc,initialRotation:!1})}s(Spi,"localFileDestination");function YWc(t){return typeof t=="object"&&t!==null&&!(t instanceof Error)}s(YWc,"isPlainObject");function KWc(t){return t instanceof Error}s(KWc,"isError");function JWc(t){return typeof t=="string"}s(JWc,"isMessage");var m1;if(!He.DISABLE_PINO_LOGGER){let t=He.LOG_LEVEL,e={level:t,formatters:{level:u=>({level:u.toUpperCase()}),bindings:()=>He.SELF_HOSTED?{service:He.SERVICE_NAME}:{}},timestamp:()=>`,"timestamp":"${new Date(Date.now()).toISOString()}"`},r=[];r.push(He.isDev()?{stream:(0,vpi.default)({singleLine:!0}),level:t}:{stream:process.stdout,level:t}),He.SELF_HOSTED&&r.push({stream:Spi(),level:t}),m1=r.length?(0,sBe.default)(e,sBe.default.multistream(r)):(0,sBe.default)(e);let n=s(u=>{let l,d=[],f="";u.forEach(v=>{JWc(v)&&(f=`${f} ${v}`.trimStart()),YWc(v)&&d.push(v),KWc(v)&&(l=v)});let p=c(),h={};h={tenantId:i(),appId:o(),automationId:a(),identityId:p?._id,identityType:p?.type,correlationId:_wt()};let A=_Mt.default.scope().active();A&&_Mt.default.inject(A.context(),wpi.formats.LOG,h);let y={err:l,pid:process.pid,...h};if(d.length){let v={},b=0;for(let x=0;x<d.length;x++){let O=d[x],N=O._logKey;N?(delete O._logKey,y[N]=O):(v[b]=O,b++)}Object.keys(v).length&&(y.data=v)}return[y,f]},"getLogParams");console.log=(...u)=>{let[l,d]=n(u);m1?.info(l,d)},console.info=(...u)=>{let[l,d]=n(u);m1?.info(l,d)},console.warn=(...u)=>{let[l,d]=n(u);m1?.warn(l,d)},console.error=(...u)=>{let[l,d]=n(u);m1?.error(l,d)},console.trace=(...u)=>{let[l,d]=n(u);l.err||(l.err=new Error),m1?.trace(l,d)},console.debug=(...u)=>{let[l,d]=n(u);m1?.debug(l,d)};let i=s(()=>{let u;try{u=ys()}catch{}return u},"getTenantId"),o=s(()=>{let u;try{u=sm()}catch{}return u},"getAppId"),a=s(()=>{let u;try{u=kpt()}catch{}return u},"getAutomationId"),c=s(()=>{let u;try{u=ck()}catch{}return u},"getIdentity")}var EMt=m1;function UT(t){let e=ys();return`${t}:${e}`}s(UT,"generateTenantKey");var CY=class{static{s(this,"BaseCache")}constructor(e=void 0){this.client=e}async getClient(){return this.client?this.client:await own()}async keys(e){return(await this.getClient()).keys(e)}async exists(e,r={useTenancy:!0}){return e=r.useTenancy?UT(e):e,(await this.getClient()).exists(e)}async scan(e,r={useTenancy:!0}){return e=r.useTenancy?UT(e):e,(await this.getClient()).scan(e)}async get(e,r={useTenancy:!0}){return e=r.useTenancy?UT(e):e,(await this.getClient()).get(e)}async bulkGet(e,r={useTenancy:!0}){return e=r.useTenancy?e.map(i=>UT(i)):e,(await this.getClient()).bulkGet(e)}async store(e,r,n=null,i={useTenancy:!0}){e=i.useTenancy?UT(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,c])=>(o[UT(a)]=c,o),{})),await(await this.getClient()).bulkStore(e,r)}async delete(e,r={useTenancy:!0}){return e=r.useTenancy?UT(e):e,(await this.getClient()).delete(e)}async bulkDelete(e,r={useTenancy:!0}){return e=r.useTenancy?e.map(i=>UT(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:c}=o;return await this.store(e,a,c,{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(UT(e))}catch(n){throw console.error("Error busting cache - ",n),n}}async deleteIfValue(e,r,n={useTenancy:!0}){e=n.useTenancy?UT(e):e,await(await this.getClient()).deleteIfValue(e,r)}};var SMt=new CY,g1={CHECKLIST:"checklist",INSTALLATION:"installation",ANALYTICS_ENABLED:"analyticsEnabled",UNIQUE_TENANT_ID:"uniqueTenantId",EVENTS:"events",BACKFILL_METADATA:"backfillMetadata",EVENTS_RATE_LIMIT:"eventsRateLimit",OAUTH2_TOKEN:t=>`oauth2Token_${t}`};var vMt=s((...t)=>SMt.get(...t),"get"),oBe=s((...t)=>SMt.store(...t),"store");var aBe=s((...t)=>SMt.withCache(...t),"withCache");Ut();var b8c=Be(smi());var _Cd=Vf.fromSeconds(10).toMs();Ut();var ICd=Vf.fromDays(7).toSeconds(),xCd=Vf.fromSeconds(10).toMs();var NCd=Vf.fromHours(1).toSeconds();var ami=Be(require("node-fetch"));var Voe=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";CIe.setHeader(n.headers);let o={method:e,body:i?JSON.stringify(n.body):n.body,headers:n.headers,credentials:"include"};return await(0,ami.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 WCd=new Voe(He.INTERNAL_ACCOUNT_PORTAL_URL),YCd=He.SELF_HOSTED||He.DISABLE_ACCOUNT_PORTAL;Ut();Ut();var sId=+(He.PASSWORD_MIN_LENGTH||12),oId=+(He.PASSWORD_MAX_LENGTH||512);var gId=He.SESSION_EXPIRY_SECONDS?parseInt(He.SESSION_EXPIRY_SECONDS):Vf.fromDays(7).toSeconds();var jMt=s(async()=>HMt(),"enabled");Ut();Ut();var ZId={"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}`};Ut();Ut();var Ami=require("posthog-node");Ut();var O8c=s(t=>t==="served:builder"||t==="served:app:preview"||t==="served:app","isRateLimited"),k8c=s(t=>t==="served:app:preview"||t==="served:app","isPerApp");var hmi={"served:app":"calendarDay","served:app:preview":"calendarDay","served:builder":"calendarDay"},mmi=s(async t=>{if(!O8c(t))return!1;let e=await N8c(t);if(e){let r=new Date(e.timestamp);switch(hmi[t]){case"calendarDay":return r.setDate(r.getDate()+1),r.setHours(0,0,0,0),Date.now()>r.getTime()?(await pmi(t,{timestamp:Date.now()}),!1):!0}}else return await pmi(t,{timestamp:Date.now()}),!1},"limited"),gmi=s(t=>{let e=`${g1.EVENTS_RATE_LIMIT}:${t}`;return k8c(t)&&(e=e+":"+sm()),e},"eventKey"),N8c=s(async t=>{let e=gmi(t);return await vMt(e)},"readEvent"),pmi=s(async(t,e)=>{let r=gmi(t),n=hmi[t],i;switch(n){case"calendarDay":i=86400}await oBe(r,e,i)},"recordEvent");var P8c=["user:updated","email:smtp:updated","auth:sso:updated","app:updated","role:updated","datasource:updated","query:updated","view:updated","view:calculation:updated","automation:trigger:updated","user_group:updated"],zoe=class{static{s(this,"PosthogProcessor")}constructor(e){if(!e)throw new Error("Posthog token is not defined");this.posthog=new Ami.PostHog(e)}async processEvent(e,r,n,i){if(P8c.includes(e)||await mmi(e))return;n=this.clearPIIProperties(n),n.version=He.VERSION,n.service=He.SERVICE,n.environment=r.environment,n.hosting=r.hosting;let o=sm();o&&(n.appId=o);let a={distinctId:r.id,event:e,properties:n};i&&(a.timestamp=new Date(i)),(r.installationId||r.tenantId)&&(a.groups={},r.installationId&&(a.groups.installation=r.installationId,a.properties.installationId=r.installationId),r.tenantId&&(a.groups.tenant=r.tenantId,a.properties.tenantId=r.tenantId)),this.posthog.capture(a)}clearPIIProperties(e){return e.email&&delete e.email,e.audited&&delete e.audited,e}async identify(e,r){let n={distinctId:e.id,properties:e};r&&(n.timestamp=new Date(r)),this.posthog.identify(n)}async identifyGroup(e,r){let n={distinctId:e.id,groupType:e.type,groupKey:e.id,properties:e};r&&(n.timestamp=new Date(r)),this.posthog.groupIdentify(n)}async shutdown(){await this.posthog.shutdown()}};var ymi=zoe;var B8c=["installation:version:upgraded","installation:version:downgraded"],M8c=["installation","tenant"],Woe=class{static{s(this,"AnalyticsProcessor")}constructor(){He.POSTHOG_TOKEN&&!He.isTest()&&(this.posthog=new ymi(He.POSTHOG_TOKEN))}async processEvent(e,r,n,i){!B8c.includes(e)&&!await jMt()||this.posthog&&await this.posthog.processEvent(e,r,n,i)}async identify(e,r){!M8c.includes(e.type)&&!await jMt()||this.posthog&&await this.posthog.identify(e,r)}async identifyGroup(e,r){this.posthog&&await this.posthog.identifyGroup(e,r)}async shutdown(){this.posthog&&await this.posthog.shutdown()}};var VMt=He.SELF_HOSTED&&!He.isDev(),Yoe=class{static{s(this,"LoggingProcessor")}async processEvent(e,r,n){VMt||console.log(`[audit] [identityType=${r.type}] ${e}`,n)}async identify(e){VMt||console.log("[audit] identified",e)}async identifyGroup(e){VMt||console.log("[audit] group identified",e)}async shutdown(){}};Ut();var Koe=class t{static{s(this,"AuditLogsProcessor")}static{this.auditLogsEnabled=!1}static init(e){t.auditLogsEnabled=!0;let r=e;return t.auditLogQueue=new DF("auditLogQueue",{jobTags:n=>({"event.name":n.event})}),t.auditLogQueue.process(async n=>{await nx(n.data.tenantId,async()=>{let i=n.data.properties;i.audited&&(i={...i,...i.audited},delete i.audited);let o={};He.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&&hwn(e)){let o=r.type==="user"?r.id:void 0;await t.auditLogQueue.add({event:e,properties:n,opts:{userId:o,timestamp:i,appId:sm(),hostInfo:r.hostInfo},tenantId:ys()})}}async identify(){}async identifyGroup(){}async shutdown(){await t.auditLogQueue?.close()}};var Joe=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 L8c=new Woe,U8c=new Yoe,F8c=new Koe;var $Mt=new Joe([L8c,U8c,F8c]);Ut();Ut();var L5c=Be(fLt());Ut();Ut();Ut();Ut();Ut();Ut();Ut();Ut();var INd=!He.SELF_HOSTED&&!He.isDev();Ut();Ut();Ut();Ut();Ut();Ut();Ut();Ut();Ut();Ut();Ut();Ut();Ut();Ut();Ut();Ut();Ut();Ut();Ut();Ut();Ut();var lAi=N_.users.isBuilder,OBe=N_.users.isAdmin,TMd=N_.users.isGlobalBuilder,CMd=N_.users.isAdminOrBuilder,cAi=N_.users.hasAdminPermissions,sae=N_.users.hasBuilderPermissions,IMd=N_.users.hasAppBuilderPermissions,z5c=N_.users.isAdminOrWorkspaceBuilder;function s9c(t){return Array.isArray(t)?t.map(e=>{if(e)return delete e.password,e}):t&&(delete t.password,t)}s(s9c,"removeUserPassword");async function oae(t,e){if(t==null)throw"Must supply an email address to view";let r=await STe("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=s9c(n)),n}s(oae,"getGlobalUserByEmail");Ut();function fAi(t){return`config${Yi}${t}`}s(fAi,"generateConfigID");async function NBe(t){let e=$p();try{return await e.get(fAi(t))}catch(r){if(r.status===404)return;throw r}}s(NBe,"getConfig");async function pLt(){let t=await NBe("settings");return t||(t={_id:fAi("settings"),type:"settings",config:{}}),t.config.platformUrl=await pAi({tenantAware:!0,config:t.config}),t.config.analyticsEnabled=await HMt({config:t.config}),t}s(pLt,"getSettingsConfigDoc");async function pAi(t={tenantAware:!0}){let e=He.PLATFORM_URL||"http://localhost:10000";if(!He.SELF_HOSTED&&He.MULTI_TENANCY&&t.tenantAware){let r=ys();e.includes("localhost:")||(e=e.replace("://",`://${r}.`))}else if(He.SELF_HOSTED){let r=t?.config?t.config:(await NBe("settings"))?.config;r?.platformUrl&&(e=r.platformUrl)}return e}s(pAi,"getPlatformUrl");var HMt=s(async t=>{if(!He.SELF_HOSTED)return!!He.ENABLE_ANALYTICS;let e=await aBe(g1.ANALYTICS_ENABLED,86400,async()=>{let n=t?.config?t.config:(await NBe("settings"))?.config;if(n?.analyticsEnabled===!1)return!1;if(n?.analyticsEnabled===!0)return!0});if(e!==void 0)return e;let r=He.ENABLE_ANALYTICS;return!(r===0||r===!1)},"analyticsEnabled");Ut();var ueu=Be(UH()),leu=Be($Be()),deu=Be(fLt());var mEi={ADMIN:"ADMIN",POWER:"POWER",BASIC:"BASIC",PUBLIC:"PUBLIC"},qy={...mEi,BUILDER:"BUILDER"},feu={UUID:void 0,NAME:"name"};var Y2=class{constructor(e,r,n,i){this.permissions={};this._id=e,this.name=r,this.uiMetadata=i,this.permissionId=n,this.version=feu.NAME}static{s(this,"Role")}addInheritance(e){return e&&typeof e=="string"?e=pEi(e):e&&Array.isArray(e)&&(e=e.map(pEi)),this.inherits=e,this}};var n2d={ADMIN:new Y2(qy.ADMIN,qy.ADMIN,"admin",{displayName:"Admin user",description:"Can do everything",color:"var(--spectrum-global-color-static-red-400)"}).addInheritance(qy.POWER),POWER:new Y2(qy.POWER,qy.POWER,"power",{displayName:"App power user",description:"An app user with more access",color:"var(--spectrum-global-color-static-orange-400)"}).addInheritance(qy.BASIC),BASIC:new Y2(qy.BASIC,qy.BASIC,"write",{displayName:"Basic user",description:"Any logged in user",color:"var(--spectrum-global-color-static-green-400)"}).addInheritance(qy.PUBLIC),PUBLIC:new Y2(qy.PUBLIC,qy.PUBLIC,"public",{displayName:"Public user",description:"Accessible to anyone",color:"var(--spectrum-global-color-static-blue-400)"}),BUILDER:new Y2(qy.BUILDER,qy.BUILDER,"admin",{displayName:"Builder user",description:"Users that can edit this app",color:"var(--spectrum-global-color-static-magenta-600)"})};function peu(t){return Object.values(mEi).includes(t)}s(peu,"isBuiltin");function pEi(t){return peu(t)?t:cwn(t)}s(pEi,"prefixRoleIDNoBuiltin");Ut();var geu=Be(QB()),Aeu=Be($Be());Ut();var Ac=class{static{s(this,"PermissionImpl")}constructor(e,r){this.type=e,this.level=r}};var c2d={PUBLIC:{_id:"public",name:"Public",permissions:[new Ac("webhook","execute")]},READ_ONLY:{_id:"read_only",name:"Read only",permissions:[new Ac("query","read"),new Ac("table","read"),new Ac("app","read")]},WRITE:{_id:"write",name:"Read/Write",permissions:[new Ac("query","write"),new Ac("table","write"),new Ac("automation","execute"),new Ac("legacy_view","read"),new Ac("app","read")]},POWER:{_id:"power",name:"Power",permissions:[new Ac("table","write"),new Ac("user","read"),new Ac("automation","execute"),new Ac("webhook","read"),new Ac("legacy_view","read"),new Ac("app","read")]},ADMIN:{_id:"admin",name:"Admin",permissions:[new Ac("table","admin"),new Ac("user","admin"),new Ac("automation","admin"),new Ac("webhook","read"),new Ac("query","admin"),new Ac("legacy_view","read"),new Ac("app","read")]}};var u2d="builder",l2d="creator",d2d="globalBuilder";Ut();var zBe=Be(require("crypto")),AEi=Be(ew()),yEi=Be(UH()),_eu=require("posthog-node");var gEi;function _Ei(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(_Ei,"parseEnvFlags");function Eeu(){return _Ei(He.TENANT_FEATURE_FLAGS||"")}s(Eeu,"getEnvFlags");var jLt=class{constructor(e){this.flagSchema=e;this.setId=zBe.randomUUID()}static{s(this,"FlagSet")}defaults(){return(0,yEi.cloneDeep)(this.flagSchema)}isFlagName(e){return this.flagSchema[e]!==void 0}async isEnabled(e){return(await this.fetch())[e]}async fetch(){return await AEi.default.trace("features.fetch",async e=>{let r=Bpt(this.setId);if(r)return e?.addTags({fromCache:!0}),r;let n={},i=this.defaults(),o=ys(),a=new Set;if(mve())return i;for(let{tenantId:f,key:p,value:h}of Eeu())if(!(!f||f!=="*"&&f!==o)&&(n.readFromEnvironmentVars=!0,h===!1&&a.add(p),!!this.isFlagName(p))){if(typeof i[p]!="boolean")throw new Error(`Feature: ${p} is not a boolean`);i[p]=h,n[`flags.${p}.source`]="environment"}let c=ck(),u=c?._id;if(!u){let f=Npt();f&&(u=zBe.createHash("sha512").update(f).digest("hex"))}let l=c?.tenantId;if(l||(l=o),n["identity.type"]=c?.type,n["identity._id"]=c?._id,n.tenantId=l,n.userId=u,gEi&&u){n.readFromPostHog=!0;let f=await pLt(),p={tenantId:l},h={tenant:{id:l}};f.config.createdVersion&&(h.tenant.createdVersion=f.config.createdVersion),f.createdAt&&(h.tenant.createdAt=`${f.createdAt}`);let A=await gEi.getAllFlags(u,{personProperties:p,onlyEvaluateLocally:!0,groups:{tenant:l},groupProperties:h});for(let[y,v]of Object.entries(A))if(this.isFlagName(y)){if(typeof v!="boolean"){console.warn(`Invalid value for posthog flag "${y}": ${v}`);continue}if(!(i[y]===!0||a.has(y)))try{i[y]=v,n[`flags.${y}.source`]="posthog"}catch(b){console.warn(`Error parsing posthog flag "${y}": ${v}`,b)}}}let d=Lpt();for(let[f,p]of Object.entries(d))this.isFlagName(f)&&typeof p=="boolean"&&(i[f]=p,n[`flags.${f}.source`]="override");Mpt(this.setId,i);for(let[f,p]of Object.entries(i))n[`flags.${f}.value`]=p;return e?.addTags(n),i})}},beu={USE_ZOD_VALIDATOR:!1,AI_AGENTS:!1,AI_CHAT:!1,AI_RAG:!1,WORKSPACE_HOME:!1,DEBUG_UI:He.isDev(),DEV_USE_CLIENT_FROM_STORAGE:!1},_2d=new jLt(beu);Ut();var I2d=TIe();var liu=ISi(),diu=TIe();function fiu(){return{logger:EMt,genReqId:diu.getId,autoLogging:{ignore:t=>!!t.url?.includes("/health")},serializers:{req:t=>({method:t.method,url:t.url,correlationId:t.id}),res:t=>({status:t.statusCode})}}}s(fiu,"pinoSettings");function piu(){return He.HTTP_LOGGING?liu(fiu()):(t,e)=>e()}s(piu,"getMiddleware");var hiu=piu();Ut();Ut();var _iu=Be(ew());var Sjd=He.SESSION_UPDATE_PERIOD?parseInt(He.SESSION_UPDATE_PERIOD):60*1e3;Ut();var jsu=Be(fMe());var vae={};ks(vae,{authenticate:()=>Vsu,options:()=>Gsu});function zT(t,e,r){return t(r,null,{message:e})}s(zT,"authError");var bFt="Invalid credentials",Hsu="This account has expired. Please reset your password",Gsu={passReqToCallback:!0};async function Vsu(t,e,r,n){if(!e)return zT(n,"Email Required");if(!r)return zT(n,"Password Required");let i=await oae(e);return i==null?(console.info(`user=${e} could not be found`),zT(n,bFt)):i.status==="inactive"?(console.info(`user=${e} is inactive`,i),zT(n,bFt)):i.password?await kur(r,i.password)?(delete i.password,n(null,i)):zT(n,bFt):(console.info(`user=${e} has no password set`,i),zT(n,Hsu))}s(Vsu,"authenticate");Ut();var vVd=rqt().OAuth2Strategy;var fau=Be(require("node-fetch"));Ut();var pau=Be(PTi());Ut();Ut();var w$d=rqt().OAuth2Strategy;var jau=pCi(),Hau=bCi().Strategy,F4d=SCi();jau.use(new Hau(vae.options,vae.authenticate));var rLe={};ks(rLe,{validate:()=>Yau});Ut();var Vt=Be(fMe());var Vau=["Relational","Non-relational","Spreadsheet","Object store","Graph","API"];function bqt(t,e){let{error:r}=t.validate(e);if(r)throw r}s(bqt,"runJoi");function $au(t){let e=Vt.default.object({type:Vt.default.string().allow("component").required(),metadata:Vt.default.object().unknown(!0).required(),hash:Vt.default.string().optional(),version:Vt.default.string().optional(),schema:Vt.default.object({name:Vt.default.string().required(),settings:Vt.default.array().items(Vt.default.object().unknown(!0)).required()}).unknown(!0)});bqt(e,t)}s($au,"validateComponent");function zau(t){let e=Vt.default.object({type:Vt.default.string().allow(...Object.values(D3e)).required(),required:Vt.default.boolean().required(),default:Vt.default.any(),display:Vt.default.string()}),r=Vt.default.object({type:Vt.default.string().allow(...Object.values(N3e)),readable:Vt.default.boolean(),displayName:Vt.default.string(),fields:Vt.default.object().pattern(Vt.default.string(),e)}).required(),n=Vt.default.object({type:Vt.default.string().allow("datasource").required(),metadata:Vt.default.object().unknown(!0).required(),hash:Vt.default.string().optional(),version:Vt.default.string().optional(),schema:Vt.default.object({docs:Vt.default.string(),plus:Vt.default.boolean().optional(),isSQL:Vt.default.boolean().optional(),auth:Vt.default.object({type:Vt.default.string().required()}).optional(),features:Vt.default.object(Object.fromEntries(Object.values(P3e).map(i=>[i,Vt.default.boolean().optional()]))).optional(),relationships:Vt.default.boolean().optional(),description:Vt.default.string().required(),friendlyName:Vt.default.string().required(),type:Vt.default.string().allow(...Vau),datasource:Vt.default.object().pattern(Vt.default.string(),e).required(),query:Vt.default.object().pattern(Vt.default.string(),r).unknown(!0).required(),extra:Vt.default.object().pattern(Vt.default.string(),Vt.default.object({type:Vt.default.string().required(),displayName:Vt.default.string().required(),required:Vt.default.boolean(),data:Vt.default.object()}))})});bqt(n,t)}s(zau,"validateDatasource");function Wau(t){let e=Vt.default.object().pattern(Vt.default.string(),{type:Vt.default.string().allow(...Object.values(q3e)).required(),customType:Vt.default.string().allow(...Object.values(Q3e)),title:Vt.default.string(),description:Vt.default.string(),enum:Vt.default.array().items(Vt.default.string()),pretty:Vt.default.array().items(Vt.default.string())}),r=Vt.default.object({properties:e,required:Vt.default.array().items(Vt.default.string())}).concat(e).required(),n=Vt.default.object({type:Vt.default.string().allow("automation").required(),metadata:Vt.default.object().unknown(!0).required(),hash:Vt.default.string().optional(),version:Vt.default.string().optional(),schema:Vt.default.object({name:Vt.default.string().required(),tagline:Vt.default.string().required(),icon:Vt.default.string().required(),description:Vt.default.string().required(),type:Vt.default.string().allow("ACTION","LOGIC").required(),stepId:Vt.default.string().disallow(...WJt).required(),inputs:Vt.default.object().optional(),schema:Vt.default.object({inputs:r,outputs:r}).required()})});bqt(n,t)}s(Wau,"validateAutomation");function Yau(t){switch(t?.type){case"component":$au(t);break;case"datasource":zau(t);break;case"automation":Wau(t);break;default:throw new Error(`Unknown plugin type - check schema.json: ${t.type}`)}}s(Yau,"validate");var vCi=Be(require("dns"));var wCi=require("util");var J4d=(0,wCi.promisify)(vCi.default.lookup);Ut();var _zd={"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 s8u=Be(OWt());var f8i=Be(OWt());Ut();Ut();var o8u=Be(UH());var xuf={equal:!1,notEqual:!0,empty:!1,notEmpty:!0,fuzzy:!1,string:!1,range:!1,contains:!1,notContains:!0,containsAny:!1,oneOf:!1,$and:!1,$or:!1};var uYu=Be(D8i());var KYu=Be(jWt(),1),cYi=Be(X8i(),1),YWt=Be(jWt(),1),gHe=require("url"),E9=Be(iYi(),1),uYi=Be(require("http"),1),dYi=Be(pk(),1);function mHe(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,E9.pathToRegexp)(t,r);return{regexp:n,keys:i}}s(mHe,"compilePathToRegexp");function JYu(t,e={}){return(0,E9.compile)(t,e)}s(JYu,"compilePath");function XYu(t,e){return(0,E9.parse)(t,e)}s(XYu,"parsePath");function zWt(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(zWt,"normalizeLayerOptionsToPathToRegexp");function ZYu(t){try{return decodeURIComponent(t)}catch{return t}}s(ZYu,"safeDecodeURIComponent");var sYi=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=zWt(this.opts),{regexp:e,keys:r}=mHe(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 c=a.name;n[c]=ZYu(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=JYu(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}=XYu(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,gHe.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,gHe.format)(n)}param(t,e){let r=this.stack,n=this.paramNames,i=this._createParamMiddleware(t,e),o=n.map(c=>c.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=zWt(this.opts),{regexp:i,keys:o}=mHe(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=zWt(this.opts),{regexp:i,keys:o}=mHe(this.path,n);this.regexp=i,this.paramNames=o}}};function e6u(){return uYi.default.METHODS.map(t=>t.toLowerCase())}s(e6u,"getAllHttpMethods");var t6u=["get","post","put","patch","delete","del","head","options"];function r6u(t){return t?Array.isArray(t)?t:[t]:[]}s(r6u,"normalizeParameterMiddleware");function lYi(t,e,r){let n=r6u(r);for(let i of n)t.param(e,i)}s(lYi,"applyParameterMiddlewareToRoute");function n6u(t,e){let r=Object.keys(e);for(let n of r){let i=e[n];lYi(t,n,i)}}s(n6u,"applyAllParameterMiddleware");function oYi(t,e={}){if(!t)return!1;let{keys:r}=mHe(t,e);return r.length>0}s(oYi,"hasPathParameters");function i6u(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(i6u,"determineMiddlewarePath");var WWt=(0,dYi.default)("koa-router"),fYi=e6u(),aYi=class{static{s(this,"RouterImplementation")}opts;methods;exclusive;params;stack;host;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 sYi(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"&&oYi(e,this.opts);for(let o=0;o<n.stack.length;o++){let a=n.stack[o],c=this._cloneLayer(a);e&&typeof e=="string"&&c.setPrefix(e),this.opts.prefix&&c.setPrefix(this.opts.prefix),c.methods.length===0&&i&&(c.opts.ignoreCaptures=!1),this.stack.push(c),n.stack[o]=c}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];lYi(t,r,n)}}_registerMiddleware(t,e,r){let n=oYi(this.opts.prefix||"",this.opts),i=(()=>{if(e!==void 0)return e;if(n)return""})(),o=r||e===void 0&&n,{path:a,pathAsRegExp:c}=i6u(i,n),u=a,l=c,d=o&&a==="/";o&&typeof a=="string"&&(u=a,l=!1),this.register(u,[],t,{end:d,ignoreCaptures:!o&&!n,pathAsRegExp:l})}prefix(t){let e=t.replace(/\/$/,""),r=this.opts.prefix||"";this.opts.prefix=e;for(let n of this.stack)r&&typeof n.path=="string"&&n.path.startsWith(r)&&(n.path=n.path.slice(r.length)||"/"),n.setPrefix(e);return this}middleware(){let t=function(e,r){if(WWt("%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,!i.route)return r();let o=i.pathAndMethod;this._setMatchedRouteInfo(e,o);let a=this._buildMiddlewareChain(o,n);return(0,cYi.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=this.opts.exclusive?[t.at(-1)].filter(i=>i!==void 0):t,n=[];for(let i of r)n.push((o,a)=>{let c=o;return c.captures=i.captures(e),c.request.params=i.params(e,c.captures||[],c.params),c.params=c.request.params,c.routerPath=i.path,c.routerName=i.name||void 0,c._matchedRoute=i.path,i.name&&(c._matchedRouteName=i.name),a()},...i.stack);return n}routes(){return this.middleware()}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),c=Object.keys(a),u=r.method.toUpperCase();if(!e.includes(u)){this._handleNotImplemented(i,c,t);return}if(u==="OPTIONS"&&c.length>0){this._handleOptionsRequest(i,c);return}c.length>0&&!a[u]&&this._handleMethodNotAllowed(i,c,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 YWt.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 YWt.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,fYi,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),n6u(o,this.params),this.stack.push(o),WWt("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 sYi(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,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(WWt("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 fYi)t6u.includes(t)||t in aYi.prototype||Object.defineProperty(aYi.prototype,t,{value:function(...r){return this._registerMethod(t,...r)},writable:!0,configurable:!0,enumerable:!1});var Xlf={...Xre,...tu};var Sf=".temp",b9="couchdb",Fle="minio",hYi=[{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 a6u(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(a6u,"checkURLs");async function c6u(){console.log("*** NOTE: use a .env file to load these parameters repeatedly ***");let t={};for(let e of hYi)t[e.value]=await LB(e.value,e.default);return t}s(c6u,"askQuestions");function u6u(t){if(!KWt.default.existsSync(t))throw"Unable to file specified .env file";let e=KWt.default.readFileSync(t,"utf8"),r=a6u(pYi.default.parse(e));for(let n of hYi)if(!r[n.value])throw`Cannot find "${n.value}" property in .env file`;return r}s(u6u,"loadEnvironment");async function JWt(t=!0){let e;t!==!0?e=u6u(t):e=await c6u();for(let r of Object.keys(e))He._set(r,e[r]);return e}s(JWt,"getConfig");async function XWt(t,e){let r=Afe();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(XWt,"replication");function ZWt(t){let e=Afe(t.COUCH_DB_URL),r=Afe();return{Remote:e,Local:r}}s(ZWt,"getPouches");var Ej=Be(require("fs")),gB=require("path");xd();var gYi=Be(require("node:stream"));var{ObjectStoreBuckets:l6u,ObjectStore:AYi,retrieve:d6u,uploadDirectory:f6u,createBucketIfNotExists:p6u}=iBe,mYi=Object.values(l6u);async function yYi(){let t=(0,gB.join)(Sf,Fle);Ej.default.mkdirSync(t);let e=[],r=0;for(let o of mYi){let a=AYi();try{await a.headBucket({Bucket:o})}catch{r++;continue}let c=await a.listObjectsV2({Bucket:o});e=e.concat(c.Contents?.map(u=>({...u,bucket:o}))||[])}if(r===mYi.length)throw new Error("Unable to access MinIO/S3 - check environment config.");let n=DB(e.length),i=0;for(let o of e){let a=o.Key,c=await d6u(o.bucket,a),u=a.split("/");if(u.length>1){let l=u.slice(0,u.length-1);Ej.default.mkdirSync((0,gB.join)(t,o.bucket,...l),{recursive:!0})}c instanceof gYi.Readable?c.pipe(Ej.default.createWriteStream((0,gB.join)(t,o.bucket,...u))):Ej.default.writeFileSync((0,gB.join)(t,o.bucket,...u),c),n.update(++i)}n.stop()}s(yYi,"exportObjects");async function _Yi(){let t=(0,gB.join)(Sf,Fle),e=Ej.default.readdirSync(t),r=0;e.forEach(o=>{let a=Ej.default.readdirSync((0,gB.join)(t,o));r+=a.length});let n=DB(r),i=0;for(let o of e){let a=AYi();await p6u(a,o);let c=await f6u(o,(0,gB.join)(t,o),"/");i+=c.length,n.update(i)}n.stop()}s(_Yi,"importObjects");var EYi=require("tar");async function bYi(t){let e=t.env||void 0,r=t.export||t;typeof r!="string"&&(r=`backup-${new Date().toISOString()}.tar.gz`);let n=await JWt(e),i=await WZt(n.COUCH_DB_URL),{Remote:o,Local:a}=ZWt(n);Hb.default.existsSync(Sf)&&Hb.default.rmSync(Sf,{recursive:!0});let c=(0,bj.join)(Sf,b9);Hb.default.mkdirSync(Sf),Hb.default.mkdirSync(c),console.log("CouchDB Export");let u=DB(i.length),l=0;for(let d of i){u.update(++l);let f=new o(d),p=new a((0,bj.join)(Sf,b9,d));await XWt(f,p),await f.close(),await p.close()}u.stop(),console.log("S3 Export"),await yYi(),EYi.create({sync:!0,gzip:!0,file:r,cwd:(0,bj.join)(Sf)},[b9,Fle]),Hb.default.rmSync(Sf,{recursive:!0}),console.log(`Generated export file - ${r}`)}s(bYi,"exportBackup");async function SYi(t){let e=t.env||void 0,r=t.import||t,n=await JWt(e);(!r||!Hb.default.existsSync(r))&&(console.error("Cannot import without specifying a valid file to import"),process.exit(-1)),Hb.default.existsSync(Sf)&&Hb.default.rmSync(Sf,{recursive:!0}),Hb.default.mkdirSync(Sf),EYi.extract({sync:!0,cwd:(0,bj.join)(Sf),file:r});let{Remote:i,Local:o}=ZWt(n),a=Hb.default.readdirSync((0,bj.join)(Sf,b9));console.log("CouchDB Import");let c=DB(a.length),u=0;for(let l of a){c.update(++u);let d=new i(l),f=new o((0,bj.join)(Sf,b9,l));await XWt(f,d),await d.close(),await f.close()}c.stop(),console.log("MinIO Import"),await _Yi();try{await T3e(`http://localhost:${n.MAIN_PORT}/api/system/restored`,"POST")}catch{}console.log("Import complete"),Hb.default.rmSync(Sf,{recursive:!0})}s(SYi,"importBackup");async function h6u(t){if(t.import)return SYi(t);if(t.export)return bYi(t)}s(h6u,"pickOne");var vYi=new l0("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.",bYi).addSubOption("--import [filename]","Import a backup to a new Budibase installation.",SYi).addSubOption("--env [envFile]","Provide an environment variable file to configure the CLI.",h6u);QO();var VJi=Be(require("node-fetch")),qj=Be(require("fs")),$Ji=Be(require("os")),wGe=require("path");var qJi=Be(CYi()),QJi=Be(require("vm")),u6t=Be(Zle());var SO=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 vGe=Be(Zle());var JYt=Be(z7i());var bp=Be(iVe()),rJi=Be(W7i()),nJi=Be(Y7i()),iJi=Be(K7i()),sJi=Be(J7i()),oJi=Be(X7i()),aJi=Be(Z7i()),cJi=Be(eJi()),uJi=Be(tJi());bp.default.extend(rJi.default);bp.default.extend(nJi.default);bp.default.extend(iJi.default);bp.default.extend(sJi.default);bp.default.extend(oJi.default);bp.default.extend(aJi.default);bp.default.extend(cJi.default);bp.default.extend(uJi.default);function Mj(t){return typeof t=="object"&&typeof t.hash=="object"}s(Mj,"isOptions");function WYt(t){return typeof t=="object"&&typeof t.options=="object"&&typeof t.app=="object"}s(WYt,"isApp");function YYt(t,e,r){if(Mj(t))return YYt({},e,t);if(Mj(e))return YYt(t,r,e);let n=WYt(t)?t.context:{};r=r||{},Mj(r)||(e=Object.assign({},e,r)),Mj(r)&&r.hash.root===!0&&(e=Object.assign({},r.data.root,e));let i=Object.assign({},n,e,r.hash);return WYt(t)||(i=Object.assign({},t,i)),WYt(t)&&t.view&&t.view.data&&(i=Object.assign({},i,t.view.data)),i}s(YYt,"getContext");function KYt(t,e,r){return Mj(e)&&(r=e,e=dJi),Mj(t)&&(r=t,e=null,t=null),{str:t,pattern:e,options:r}}s(KYt,"initialConfig");function lJi(t,e,r){let n=KYt(t,e,r),i={lang:"en",date:new Date(n.str)},o=YYt(this,i,{});bp.default.locale(o.lang||o.language)}s(lJi,"setLocale");var dJi="MMMM DD, YYYY",gGe=s((t,e,r)=>{let n=KYt(t,e,r);if(n.str==null&&n.pattern==null)return bp.default.locale("en"),(0,bp.default)().format(dJi);lJi(n.str,n.pattern,n.options);let i=(0,bp.default)(new Date(n.str));return typeof n.options=="string"?i=n.options.toLowerCase()==="utc"?i.utc():i.tz(n.options):i=i.tz(bp.default.tz.guess()),n.pattern===""?i.toISOString():i.format(n.pattern)},"date"),gde=s((t,e,r)=>{let n=KYt(t,e);lJi(n.str,n.pattern);let i=bp.default.duration(n.str,n.pattern);return r&&!Mj(r)?i.format(r):i.humanize()},"duration"),Ade=s((t,e,r)=>(0,bp.default)(new Date(t)).diff((0,bp.default)(new Date(e)),r),"difference"),AGe=s(t=>{let e=Ade(t,new Date().toISOString(),"ms");return gde(e,"ms")},"durationFromNow");var yGe=["#if","#unless","#each","#with","lookup","log","blockHelperMissing","each","helperMissing","if","unless","log","lookup","with"],fJi=["math","array","number","url","string","comparison","object","regex","uuid"],Lj={OBJECT:"object",ALL:"all",LITERAL:"literal",JS:"js",DECODE_ID:"decodeId"},L9="%LITERAL%";var pJi={date:gGe,duration:gde,difference:Ade,durationFromNow:AGe};function hJi(t){for(let[r,n]of Object.entries(pJi))t.registerHelper(r,n);let e=[];for(let r of fJi){let n=JYt.default[r]();for(let i of Object.entries(n)){let o=i[0];yGe.indexOf(o)!==-1||e.indexOf(o)!==-1||e.push(o)}JYt.default[r]({handlebars:t})}XYt=e.concat(Object.keys(pJi))}s(hJi,"registerAll");var XYt=[];function nXu(){return process.env.NODE_ENV==="jest"||process.env.JEST_WORKER_ID!=null&&process.env.JEST_WORKER_ID!=="null"}s(nXu,"isJest");function Uj(){return nXu()}s(Uj,"isTest");var mJi=s(()=>process&&process.env.BACKEND_JS,"isTestingBackendJS");var iXu=/^[A-Za-z0-9]+$/g,_Ge=/{{([^{].*?)}}/g,ZYt=/{?{{([^{].*?)}}}?/g,sXu=/{{{([^{].*?)}}}/g,yde=s(()=>Uj()&&mJi()?!0:Uj()?!1:typeof window>"u","isBackendService"),gJi=s(()=>process&&!process.env.NO_JS,"isJSAllowed"),AJi=s(t=>{let e=t,r=new RegExp(_Ge),n=new RegExp(sXu),i=e.match(n);i&&i.forEach(a=>{e=e.replace(a,"")});let o=e.match(r);return o||[]},"findDoubleHbsInstances"),yJi=s(t=>t.match(iXu),"isAlphaNumeric"),e6t=s((t,e,r,n)=>t.slice(0,e)+n+t.slice(e+r),"swapStrings");var t6t=s(t=>Buffer.from(t,"base64").toString("utf-8"),"atob"),_Ji=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 EGe(t){return`
1467
+ }`;await bTe(t,e,"by_api_key")},"createApiKeyView");async function MEt(t,e,r,n,i){try{return await r.query(`database/${t}`,e)}catch(o){let a=o&&o.name==="not_found",c=o&&o.status===404;if(a||c)return await zxa(r,t),await n(),MEt(t,e,r,n,i);if(o.status===409)return MEt(t,e,r,n,i);throw o}}s(MEt,"queryViewRaw");var Jxa=s(async(t,e,r,n,i)=>{let c=(await MEt(t,e,r,n,i)).rows.map(u=>e.include_docs?u.doc:u.value);return i?.arrayResponse?c:c.length<=1?c[0]:c},"queryView");var Xxa={by_email2:Wxa,by_api_key:Kxa,by_app:Yxa},STe=s(async(t,e,r,n)=>{r||(r=$p());let i=Xxa[t];return Jxa(t,e,r,i,n)},"queryGlobalView");Ut();var Zxa=Be(require("pouchdb"));var eRa=Be(ew());var dwn=Be(require("node-fetch"));Ut();var UEt=MH.removeKeyNumbering;function iF(t){return t==null||t===""}s(iF,"isEmpty");var uwn=class t{static{s(this,"QueryBuilder")}#e;#t;#r;#n;#s;#i;#c;#o;#a;#l;#u;#d=!1;#p;static{this.maxLimit=200}constructor(e,r,n){this.#e=e,this.#t=r,this.#r={allOr:!1,onEmptyFilter:"all",string:{},fuzzy:{},range:{},equal:{},notEqual:{},empty:{},notEmpty:{},oneOf:{},contains:{},notContains:{},containsAny:{},...n},this.#n=50,this.#c="ascending",this.#o="string",this.#a=!0}disableEscaping(){return this.#d=!0,this}setIndexBuilder(e){return this.#u=e,this}setVersion(e){return e!=null&&(this.#l=e),this}setTable(e){return this.#r.equal.tableId=e,this}setLimit(e){return e!=null&&(this.#n=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.#i=e),this}setSkip(e){return this.#p=e,this}excludeDocs(){return this.#a=!1,this}includeDocs(){return this.#a=!0,this}addString(e,r){return this.#r.string[e]=r,this}addFuzzy(e,r){return this.#r.fuzzy[e]=r,this}addRange(e,r,n){return this.#r.range[e]={low:r,high:n},this}addEqual(e,r){return this.#r.equal[e]=r,this}addNotEqual(e,r){return this.#r.notEqual[e]=r,this}addEmpty(e,r){return this.#r.empty[e]=r,this}addNotEmpty(e,r){return this.#r.notEmpty[e]=r,this}addOneOf(e,r){return this.#r.oneOf[e]=r,this}addContains(e,r){return this.#r.contains[e]=r,this}addNotContains(e,r){return this.#r.notContains[e]=r,this}addContainsAny(e,r){return this.#r.containsAny[e]=r,this}setAllOr(){this.#r.allOr=!0}setOnEmptyFilter(e){this.#r.onEmptyFilter=e}handleSpaces(e){return this.#d?e:e.replace(/ /g,"_")}preprocess(e,{escape:r,lowercase:n,wrap:i,type:o}={}){let a=!!this.#l,c=typeof e;return e&&n&&(e=e.toLowerCase?e.toLowerCase():e),!this.#d&&r&&c==="string"&&(e=`${e}`.replace(/[ /#+\-&|!(){}\]^"~*?:\\]/g,"\\$&")),c==="string"&&!isNaN(e)&&!o?e=`"${e}"`:a&&i&&(e=c==="number"?e:`"${e}"`),e}isMultiCondition(){let e=0;for(let r of Object.values(this.#r))typeof r=="object"&&(e+=Object.keys(r).length);return e>1}compressFilters(e){let r={};for(let o of Object.keys(e)){let a=UEt(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.#r&&this.#r.allOr,n=r?"":"*:*",i=!0,o={escape:!0,lowercase:!0,wrap:!0},a="";this.#r.equal.tableId&&(a=this.#r.equal.tableId,delete this.#r.equal.tableId);let c=s((A,y)=>iF(y)?null:`${A}:${e.preprocess(y,o)}`,"equal"),u=s((A,y,v="AND")=>{if(iF(y))return null;if(!Array.isArray(y))return`${A}:${y}`;let b=`${e.preprocess(y[0],{escape:!0})}`;for(let x=1;x<y.length;x++)b+=` ${v} ${e.preprocess(y[x],{escape:!0})}`;return`${A}:(${b})`},"contains"),l=s((A,y)=>iF(y)?null:(y=e.preprocess(y,{escape:!0,lowercase:!0,type:"fuzzy"}),`${A}:/.*${y}.*/`),"fuzzy"),d=s((A,y)=>{let v=r?"*:* AND ":"",b=r?"AND":void 0;return v+"NOT "+u(A,y,b)},"notContains"),f=s((A,y)=>u(A,y,"OR"),"containsAny"),p=s((A,y)=>{if(iF(y))return"*:*";if(!Array.isArray(y))if(typeof y=="string")y=y.split(",");else return"";let v=`${e.preprocess(y[0],o)}`;for(let b=1;b<y.length;b++)v+=` OR ${e.preprocess(y[b],o)}`;return`${A}:(${v})`},"oneOf");function h(A,y,v){let b="";for(let[x,O]of Object.entries(A)){x=UEt(x),x=e.preprocess(e.handleSpaces(x),{escape:!0});let N=y(x,O);if(N!=null){if(b.length>0||n.length>0){let T=v?.mode?v.mode:r?"OR":"AND";b+=` ${T} `}b+=N,(typeof O!="string"&&O!=null||typeof O=="string"&&O!==a&&O!=="")&&(i=!1)}}if(v?.returnBuilt)return b;n+=b}if(s(h,"build"),this.#r.string&&h(this.#r.string,(A,y)=>iF(y)?null:(y=e.preprocess(y,{escape:!0,lowercase:!0,type:"string"}),`${A}:${y}*`)),this.#r.range&&h(this.#r.range,(A,y)=>{if(iF(y)||y.low==null||y.low===""||y.high==null||y.high==="")return null;let v=e.preprocess(y.low,o),b=e.preprocess(y.high,o);return`${A}:[${v} TO ${b}]`}),this.#r.fuzzy&&h(this.#r.fuzzy,l),this.#r.equal&&h(this.#r.equal,c),this.#r.notEqual&&h(this.#r.notEqual,(A,y)=>iF(y)?null:typeof y=="boolean"?`(*:* AND !${A}:${y})`:`!${A}:${e.preprocess(y,o)}`),this.#r.empty&&h(this.#r.empty,A=>(i=!1,`(*:* -${A}:["" TO *])`)),this.#r.notEmpty&&h(this.#r.notEmpty,A=>(i=!1,`${A}:["" TO *]`)),this.#r.oneOf&&h(this.#r.oneOf,p),this.#r.contains&&h(this.#r.contains,u),this.#r.notContains&&h(this.compressFilters(this.#r.notContains),d),this.#r.containsAny&&h(this.#r.containsAny,f),a&&(n=this.isMultiCondition()?`(${n})`:n,r=!1,h({tableId:a},c)),i){if(this.#r.onEmptyFilter==="none")return"";if(this.#r?.allOr)return n.replace("()","(*:*)")}return n}buildSearchBody(){let e={q:this.buildSearchQuery(),limit:Math.min(this.#n,t.maxLimit),include_docs:this.#a};if(this.#i&&(e.bookmark=this.#i),this.#s){let r=this.#c==="descending"?"-":"",n=`<${this.#o}>`;e.sort=`${r}${this.handleSpaces(this.#s)}${n}`}return e}async run(){return this.#p&&await this.#h(this.#p),await this.#m()}async#h(e){let r=this.#a,n=this.#n;this.excludeDocs();let i=e,o=0;do{let a=Math.min(t.maxLimit,i);this.setLimit(a);let{bookmark:c,rows:u}=await this.#m();this.setBookmark(c),o=u.length,i-=u.length}while(i>0&&o>0);this.#a=r,this.#n=n}async#m(){let{url:e,cookie:r}=uk(),n=`${e}/${this.#e}/_design/database/_search/${this.#t}`,i=this.buildSearchBody();try{return await lwn(n,i,r)}catch(o){if(o.status===404&&this.#u)return await this.#u(),await lwn(n,i,r);throw o}}};async function lwn(t,e,r){let n=await(0,dwn.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(lwn,"runQuery");Ut();var Xre={};ks(Xre,{addTenantToUrl:()=>rRa,getTenantDB:()=>fwn,getTenantIDFromCtx:()=>FEt,isUserInWorkspaceTenant:()=>nRa});function fwn(t){return jS(Ate(t))}s(fwn,"getTenantDB");Ut();function rRa(t){let e=ys();if(iU()){let r=t.indexOf("?")===-1?"?":"&";t+=`${r}tenantId=${e}`}return t}s(rRa,"addTenantToUrl");var nRa=s((t,e)=>{let r;return e?r=e.tenantId||Of:r=ys(),(c$(t)||Of)===r},"isUserInWorkspaceTenant"),iRa=Object.values(dK),FEt=s((t,e)=>{if(!iU())return Of;e.allowNoTenant===void 0&&(e.allowNoTenant=!1),e.includeStrategies||(e.includeStrategies=iRa),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(Rpt()).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(c=>c.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");var ntd="app"+Yi;function pwn(t){return new Promise(e=>setTimeout(e,t))}s(pwn,"timeout");function hwn(t){return!!FKt[t]}s(hwn,"isAudited");var vTe={milliseconds:1,seconds:1e3,minutes:6e4,hours:36e5,days:864e5},Vf=class t{constructor(e){this.ms=e}static{s(this,"Duration")}to(e){return this.ms/vTe[e]}toMs(){return this.ms}toSeconds(){return this.to("seconds")}static convert(e,r,n){return n*vTe[e]/vTe[r]}static from(e,r){return new t(r*vTe[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)}};var bDn=Be(EDn());var rwt=require("util"),nwt=Be(require("zlib"));var fsd=(0,rwt.promisify)(nwt.default.gzip),psd=(0,rwt.promisify)(nwt.default.gunzip);function Gja(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(Gja,"jobToJobInformation");var iwt=class{static{s(this,"InMemoryQueue")}constructor(e,r){this._name=e,this._opts=r,this._messages=[],this._emitter=new SDn.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((u,l)=>{r(n,s((f,p)=>{f?l(f):u(p)},"done"))})}s(i,"execute");let o=this._attempts;async function a(u,l=0){try{return await u}catch(d){if(l++,l<o&&!n._isDiscarded)return await WC.wait(100*l),await a(i(),l);throw d}}s(a,"retryFunc");try{let u=await a(i());this._emitter.emit("completed",n,u);let l=this._messages.indexOf(n);if(l===-1)throw"Failed deleting a processed message";this._messages.splice(l,1)}catch(u){console.error(u),this._emitter.emit("error",n,u)}this._runCount++;let c=n.opts?.jobId?.toString();c&&n.opts?.removeOnComplete&&this._queuedJobIds.delete(c)})}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=y0(),a=s(()=>{let u={id:o,timestamp:Date.now(),queue:this,data:e,opts:n,discard:async()=>{u._isDiscarded=!0}};this._messages.push(u),this._messages.length>1e3&&this._messages.shift(),this._addCount++,this._emitter.emit("message",u)},"pushMessage"),c=n?.delay;return c?setTimeout(a,c):a(),{id:i,finished:()=>new Promise((u,l)=>{let d=s((p,h)=>{p.id===o&&(this._emitter.off("error",d),this._emitter.off("completed",f),l(h))},"errorHandler"),f=s((p,h)=>{p.id===o&&(this._emitter.off("error",d),this._emitter.off("completed",f),u(h))},"completedHandler");this._emitter.on("error",d),this._emitter.on("completed",f)})}}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}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=>Gja(e))}async whenCurrentJobsFinished(){do await pwn(50);while(this.hasRunningJobs())}hasRunningJobs(){return this._addCount>this._runCount}},vDn=iwt;var gwt=Be(require("bull"));function wDn(t,e,r){zja(t,e),r&&Vja(t,r)}s(wDn,"addListeners");function Vja(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(Vja,"handleStalled");function wE(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},c;return r.job?.data?.automation&&(c={_logKey:"automation",trigger:r.job?r.job.data.automation.definition.trigger.event:void 0}),[i,o,a,c]}s(wE,"getLogParams");var $ja={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"};function zja(t,e){let r=$ja[e];function n(i,o){let a=i.data.event?.appId;if(a)return Opt(a,o);o()}s(n,"doInJobContext"),t.on("stalled",async i=>{await n(i,()=>{console.error(...wE(r,"stalled",{job:i}))})}).on("error",i=>{console.error(...wE(r,"error",{error:i}))}),process.env.NODE_DEBUG?.includes("bull")&&t.on("waiting",i=>{console.info(...wE(r,"waiting",{jobId:i}))}).on("active",async i=>{await n(i,()=>{console.info(...wE(r,"active",{job:i}))})}).on("progress",async(i,o)=>{await n(i,()=>{console.info(...wE(r,"progress",{job:i},{progress:o}))})}).on("completed",async(i,o)=>{await n(i,()=>{console.info(...wE(r,"completed",{job:i},{result:o}))})}).on("failed",async(i,o)=>{await n(i,()=>{console.error(...wE(r,"failed",{job:i,error:o}))})}).on("paused",()=>{console.info(...wE(r,"paused"))}).on("resumed",()=>{console.info(...wE(r,"resumed"))}).on("cleaned",(i,o)=>{console.info(...wE(r,"cleaned",{},{length:i.length,type:o}))}).on("drained",()=>{console.info(...wE(r,"drained"))}).on("removed",i=>{console.info(...wE(r,"removed",{job:i}))})}s(zja,"logging");var Wja=[];function TDn(t,e){let r=setInterval(t,e);return Wja.push(r),r}s(TDn,"set");var $x=Be(ew()),sie=Be(XDn());var kHa=Vf.fromMinutes(5).toMs(),NHa=Vf.fromSeconds(30).toMs(),Awt=Vf.fromSeconds(60).toMs(),tPn=[],ZDn;async function ePn(){for(let t of tPn)await t.clean(Awt,"completed"),await t.clean(Awt,"failed")}s(ePn,"cleanup");async function DHa(t,e,r){let n=performance.now();try{let i=await e();return $x.default.dogstatsd.increment(`${t}.success`,1,r),i}catch(i){throw $x.default.dogstatsd.increment(`${t}.error`,1,r),i}finally{let i=performance.now()-n;$x.default.dogstatsd.distribution(`${t}.duration.ms`,i,r),$x.default.dogstatsd.increment(t,1,r)}}s(DHa,"withMetrics");function rPn(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(rPn,"jobOptsTags");function PHa(t){return{"job.id":t.id,"job.attemptsMade":t.attemptsMade,"job.timestamp":t.timestamp,"job.data.sizeBytes":(0,sie.default)(t.data),...rPn(t.opts||{})}}s(PHa,"jobTags");var DF=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:qH(),settings:{maxStalledCount:this.opts.maxStalledCount?this.opts.maxStalledCount:0,lockDuration:kHa,lockRenewTime:NHa}};this.opts.jobOptions&&(r.defaultJobOptions=this.opts.jobOptions);let n;return He.isTest()?process.env.BULL_TEST_REDIS_PORT&&!isNaN(+process.env.BULL_TEST_REDIS_PORT)?n=new gwt.default(this.jobQueue,{...r,redis:{host:"localhost",port:+process.env.BULL_TEST_REDIS_PORT}}):n=new vDn(this.jobQueue,r):n=new gwt.default(this.jobQueue,r),wDn(n,this.jobQueue,this.opts.removeStalledCb),tPn.push(n),!ZDn&&!He.isTest()&&(ZDn=TDn(ePn,Awt),ePn().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,c)=>{await $x.default.trace("queue.process",async u=>{if(a.data._parentSpanContext){let l=a.data._parentSpanContext,d={traceId:l.traceId,spanId:l.spanId,toTraceId:()=>l.traceId,toSpanId:()=>l.spanId,toTraceparent:()=>""};u.addLink(d)}u.addTags({"queue.name":this.jobQueue,...PHa(a)}),this.opts.jobTags&&u.addTags(this.opts.jobTags(a.data)),$x.default.dogstatsd.distribution("queue.process.sizeBytes",(0,sie.default)(a.data),this.metricTags()),await this.withMetrics("queue.process",()=>c?n(a,c):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 $x.default.trace("queue.add",async n=>(n.addTags({"queue.name":this.jobQueue,"job.data.sizeBytes":(0,sie.default)(e),...rPn(r||{})}),this.opts.jobTags&&n.addTags(this.opts.jobTags(e)),e._parentSpanContext={traceId:n.context().toTraceId(),spanId:n.context().toSpanId()},$x.default.dogstatsd.distribution("queue.add.sizeBytes",(0,sie.default)(e),this.metricTags()),await this.withMetrics("queue.add",()=>this.queue.add(e,r))))}withMetrics(e,r){return DHa(e,r,this.metricTags())}metricTags(){return{queueName:this.jobQueue}}close(e){return this.queue.close(e)}whenCurrentJobsFinished(){return this.queue.whenCurrentJobsFinished()}};var CIe={};ks(CIe,{getId:()=>_wt,setHeader:()=>QHa});var sPn=TIe(),QHa=s(t=>{let e=sPn.getId();e&&(t["x-budibase-correlation-id"]=e)},"setHeader");function _wt(){return sPn.getId()}s(_wt,"getId");var sBe=Be(lBn()),vpi=Be(hxt()),_Mt=Be(ew()),wpi=Be(nAe());var Epi=Be(require("path")),bpi=Be(IQn());var iBe={};ks(iBe,{ObjectStore:()=>ub,ObjectStoreBuckets:()=>Gzc,SIGNED_FILE_PREFIX:()=>lMt,bucketTTLConfig:()=>J1e,budibaseTempDir:()=>j2,client3rdPartyLibrary:()=>LWc,clientLibraryPath:()=>MWc,clientLibraryUrl:()=>UWc,createBucketIfNotExists:()=>Qoe,deleteFile:()=>cWc,deleteFiles:()=>uWc,deleteFolder:()=>opi,downloadTarball:()=>dWc,downloadTarballDirect:()=>lWc,enrichPWAImages:()=>FWc,enrichPluginURLs:()=>QWc,extractBucketAndPath:()=>sMt,getAllFiles:()=>sWc,getAppFileUrl:()=>ppi,getClientCacheKey:()=>fpi,getGlobalFileS3Key:()=>hpi,getGlobalFileUrl:()=>qWc,getObjectMetadata:()=>fWc,getPluginIconKey:()=>Api,getPluginJSKey:()=>gpi,getPluginS3Dir:()=>_pi,getPresignedUrl:()=>H2,getReadStream:()=>X1e,listAllObjects:()=>dMt,objectExists:()=>pWc,processAutomationAttachment:()=>$zc,processObjectStoreAttachment:()=>$fi,retrieve:()=>spi,retrieveDirectory:()=>aWc,retrieveToTmp:()=>oWc,sanitizeBucket:()=>Nm,sanitizeKey:()=>Ol,streamUpload:()=>ipi,streamUploadMany:()=>iWc,upload:()=>nWc,uploadDirectory:()=>fMt});var eBe=Be(J1t()),oMt=Be(xli()),Zfi=Be(Mli()),epi=Be(Jli());var PR=Be(ew()),wY=Be(require("fs")),Foe=Be(require("fs/promises")),tpi=Be(require("https")),aMt=Be(require("node-fetch")),p1=require("path"),tBe=Be(require("stream")),qoe=require("stream/promises"),cMt=Be(Qfi());k7();var uMt=Be(require("zlib"));var jfi=Be(require("fs")),Hfi=require("os"),Uoe=Be(require("path")),Gfi=Be(require("stream"));var Gzc={BACKUPS:He.BACKUPS_BUCKET_NAME,APPS:He.APPS_BUCKET_NAME,TEMPLATES:He.TEMPLATES_BUCKET_NAME,GLOBAL:He.GLOBAL_BUCKET_NAME,PLUGINS:He.PLUGIN_BUCKET_NAME,TEMP:He.TEMP_BUCKET_NAME},Vfi=(0,Uoe.join)((0,Hfi.tmpdir)(),".budibase");try{jfi.default.mkdirSync(Vfi)}catch(t){if(t.code!=="EEXIST")throw t}function j2(){return Vfi}s(j2,"budibaseTempDir");var J1e=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 Vzc(t){let e=await fetch(t.url);if(!e.ok||!e.body)throw new Error(`Unexpected response ${e.statusText}`);let r=Uoe.default.basename(new URL(t.url).pathname);if(!e.body)throw new Error("No response received for attachment");return{filename:t.filename||r,content:Gfi.default.Readable.fromWeb(e.body)}}s(Vzc,"processUrlAttachment");async function $fi(t){let e=sMt(t.url);if(e===null)throw new Error("Invalid signed URL");let{bucket:r,path:n}=e,{stream:i}=await X1e(r,n),o=Uoe.default.basename(n);return{bucket:r,path:n,filename:t.filename||o,content:i}}s($fi,"processObjectStoreAttachment");async function $zc(t){return t.url?.startsWith("http://")||t.url?.startsWith("https://")?await Vzc(t):await $fi(t)}s($zc,"processAutomationAttachment");var Zzc=Xfi(),eWc={bucketCreationPromises:{}},lMt="/files/signed",f1={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"},tWc=[f1.html,f1.css,f1.js,f1.json];function Ol(t){return Zzc(Nm(t)).replace(/\\/g,"/")}s(Ol,"sanitizeKey");function Nm(t){return t.replace(new RegExp(rk,"g"),cM)}s(Nm,"sanitizeBucket");function ub(t={presigning:!1}){let e={forcePathStyle:!0,credentials:{accessKeyId:He.MINIO_ACCESS_KEY,secretAccessKey:He.MINIO_SECRET_KEY},region:He.AWS_REGION};if(!He.MINIO_ENABLED&&He.AWS_SESSION_TOKEN&&(e.credentials={accessKeyId:He.MINIO_ACCESS_KEY,secretAccessKey:He.MINIO_SECRET_KEY,sessionToken:He.AWS_SESSION_TOKEN}),He.MINIO_URL&&(t.presigning&&He.MINIO_ENABLED?e.endpoint="http://minio-service":e.endpoint=He.MINIO_URL),He.S3_IGNORE_SELF_SIGNED==="true"){let r=new tpi.default.Agent({rejectUnauthorized:!1});e.requestHandler=new epi.NodeHttpHandler({httpsAgent:r})}return new eBe.S3(e)}s(ub,"ObjectStore");async function Qoe(t,e){e=Nm(e);try{return await t.headBucket({Bucket:e}),{created:!1,exists:!0}}catch(r){let n=r.statusCode||r.$response?.statusCode,i=eWc.bucketCreationPromises,o=n===404,a=n===403;if(i[e])return await i[e],{created:!1,exists:!0};if(o||a){if(o)return i[e]=t.createBucket({Bucket:e}).catch(c=>{if(c.Code!=="BucketAlreadyOwnedByYou")throw c}),await i[e],delete i[e],{created:!0,exists:!1};throw new Error("Access denied to object store bucket."+r)}else throw new Error("Unable to write to object store bucket.")}}s(Qoe,"createBucketIfNotExists");var rWc=s((t,e)=>{if(e)return e;let r=t.split(".").pop();return r?f1[r.toLowerCase()]:f1.txt},"resolveContentType"),rpi=s(async(t,e,r)=>{let n=Nm(t),i=ub(),o=await Qoe(i,n);if(r.addTags({bucketCreated:o.created,bucketExists:o.exists}),e&&o.created){let a=J1e(n,e);await i.putBucketLifecycleConfiguration(a)}return{bucket:n,client:i,bucketCreated:o}},"initialiseBucket"),npi=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=rWc(r,i),c=Ol(r),u={Bucket:e,Key:c,Body:n,ContentType:a,...o??{}};return{details:await new oMt.Upload({client:t,params:u}).done(),contentType:a}},"streamUploadInternal");async function nWc({bucket:t,filename:e,path:r,type:n,metadata:i,body:o,ttl:a}){let c=e.split(".").pop(),u=r?(await Foe.default.open(r)).createReadStream():o,l=ub(),d=await Qoe(l,t);if(a&&d.created){let y=J1e(t,a);await l.putBucketLifecycleConfiguration(y)}let f=n,p=f||(c?f1[c.toLowerCase()]:f1.txt),h={Bucket:Nm(t),Key:Ol(e),Body:u,ContentType:p};if(i&&typeof i=="object"){for(let y of Object.keys(i))(!i[y]||typeof i[y]!="string")&&delete i[y];h.Metadata=i}return new oMt.Upload({client:l,params:h}).done()}s(nWc,"upload");async function ipi({bucket:t,stream:e,filename:r,type:n,extra:i,ttl:o}){return await PR.default.trace("streamUpload",async a=>{a.addTags({bucketName:t,filename:r,type:n,ttl:o});let c=r.split(".").pop();a.addTags({extension:c});let{bucket:u,client:l}=await rpi(t,o,a),{details:d,contentType:f}=await npi({client:l,bucket:u,filename:r,stream:e,type:n,extra:i}),p=await l.headObject({Bucket:u,Key:Ol(r)});return a.addTags({contentType:f,contentLength:p.ContentLength}),{...d,ContentLength:p.ContentLength}})}s(ipi,"streamUpload");async function iWc({bucket:t,files:e,ttl:r}){return await PR.default.trace("streamUploadMany",async i=>{if(i.addTags({bucketName:t,ttl:r,fileCount:e.length}),!e.length)return[];let{bucket:o,client:a}=await rpi(t,r,i),c=e.map((l,d)=>({...l,index:d})),u=new Array(e.length);return await $O.parallelForeach(c,async l=>{let{details:d}=await npi({client:a,bucket:o,filename:l.filename,stream:l.stream,type:l.type,extra:l.extra});u[l.index]=d},10),u})}s(iWc,"streamUploadMany");async function spi(t,e){return await PR.default.trace("retrieve",async r=>{r.addTags({bucketName:t,filepath:e});let n=ub(),i={Bucket:Nm(t),Key:Ol(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}),tWc.includes(o.ContentType))return r.addTags({string:!0}),o.Body.transformToString();{r.addTags({string:!1});let a=o.Body.transformToWebStream();return tBe.default.Readable.fromWeb(a)}})}s(spi,"retrieve");async function*dMt(t,e){let r=ub(),n=s((a={})=>r.listObjectsV2({...a,Bucket:Nm(t),Prefix:Ol(e)}),"list"),i=!1,o;do{let a={};o&&(a.ContinuationToken=o);let c=await n(a);if(c.Contents)for(let u of c.Contents)yield u;i=!!c.IsTruncated,o=c.NextContinuationToken}while(i&&o)}s(dMt,"listAllObjects");async function sWc(t,e){let r={};return await $O.parallelForeach(dMt(t,e),async n=>{if(!n.Key)throw new Error("file.Key must be defined");r[n.Key]=n},5),r}s(sWc,"getAllFiles");async function H2(t,e,r=3600){let n=ub({presigning:!0}),i={Bucket:Nm(t),Key:Ol(e)},o=await(0,Zfi.getSignedUrl)(n,new eBe.GetObjectCommand(i),{expiresIn:r});if(He.MINIO_ENABLED){let a=new URL(o),c=a.pathname,u=a.search;return`${lMt}${c}${u}`}else return o}s(H2,"getPresignedUrl");async function oWc(t,e){return await PR.default.trace("retrieveToTmp",async r=>{r.addTags({bucketName:t,filepath:e}),t=Nm(t),e=Ol(e);let n=await spi(t,e),i=(0,p1.join)(j2(),uM());return r.addTags({outputPath:i}),n instanceof tBe.default.Readable?(r.addTags({stream:!0}),await(0,qoe.pipeline)(n,wY.default.createWriteStream(i))):(r.addTags({stream:!1}),wY.default.writeFileSync(i,n)),i})}s(oWc,"retrieveToTmp");async function aWc(t,e,r){return await PR.default.trace("retrieveDirectory",async n=>{n.addTags({bucketName:t,path:e});let i=(0,p1.join)(j2(),uM());await Foe.default.mkdir(i,{recursive:!0});let o=0;return await $O.parallelForeach(dMt(t,e),async a=>{let{Key:c}=a;!c||r?.some(u=>u.test(c))||(o++,await PR.default.trace("retrieveDirectory.object",async u=>{let l=a.Key;u.addTags({filename:l});let{stream:d}=await X1e(t,l),f=l.split("/"),p=f.slice(0,f.length-1),h=(0,p1.join)(i,...p);f.length>1&&!wY.default.existsSync(h)&&await Foe.default.mkdir(h,{recursive:!0}),await(0,qoe.pipeline)(d,wY.default.createWriteStream((0,p1.join)(i,...f),{mode:420}))}))},5),n.addTags({numObjects:o}),i})}s(aWc,"retrieveDirectory");async function cWc(t,e){let r=ub();await Qoe(r,t);let n={Bucket:t,Key:Ol(e)};return r.deleteObject(n)}s(cWc,"deleteFile");async function uWc(t,e){let r=ub();await Qoe(r,t);let n={Bucket:t,Delete:{Objects:e.map(i=>({Key:Ol(i)}))}};return r.deleteObjects(n)}s(uWc,"deleteFiles");async function opi(t,e){t=Nm(t),e=Ol(e);let r=ub(),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 opi(t,e)}s(opi,"deleteFolder");async function fMt(t,e,r){return await PR.default.trace("uploadDirectory",async n=>{n.addTags({bucketName:t,localPath:e,bucketPath:r}),t=Nm(t);let i=await Foe.default.readdir(e,{withFileTypes:!0});n.addTags({numFiles:i.length});for(let o of i){let a=Ol((0,p1.join)(r,o.name)),c=(0,p1.join)(e,o.name);o.isDirectory()?await fMt(t,c,a):await ipi({bucket:t,filename:a,stream:wY.default.createReadStream(c)})}return i})}s(fMt,"uploadDirectory");async function lWc(t,e,r={}){e=Ol(e);let n=await(0,aMt.default)(t,{headers:r});if(!n.ok)throw new Error(`unexpected response ${n.statusText}`);await(0,qoe.pipeline)(n.body,uMt.default.createUnzip(),cMt.default.extract(e))}s(lWc,"downloadTarballDirect");async function dWc(t,e,r){e=Nm(e),r=Ol(r);let n=await(0,aMt.default)(t);if(!n.ok)throw new Error(`unexpected response ${n.statusText}`);let i=(0,p1.join)(j2(),r);return await(0,qoe.pipeline)(n.body,uMt.default.createUnzip(),cMt.default.extract(i)),!He.isTest()&&He.SELF_HOSTED&&await fMt(e,i,r),i}s(dWc,"downloadTarball");async function X1e(t,e){return await PR.default.trace("getReadStream",async r=>{t=Nm(t),e=Ol(e),r.addTags({bucketName:t,path:e});let n=ub(),i={Bucket:t,Key:e},o=await n.getObject(i);if(!o.Body||!(o.Body instanceof tBe.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(X1e,"getReadStream");async function fWc(t,e){t=Nm(t),e=Ol(e);let r=ub(),n={Bucket:t,Key:e};try{return await r.headObject(n)}catch{throw new Error("Unable to retrieve metadata from object")}}s(fWc,"getObjectMetadata");async function pWc(t,e){t=Nm(t),e=Ol(e);let r=ub(),n={Bucket:t,Key:e};try{return await r.headObject(n),!0}catch(i){if((i.statusCode||i.$response?.statusCode)===404)return!1;throw i}}s(pWc,"objectExists");function sMt(t){let e=t.split("?")[0],r=new RegExp(`^${lMt}/(?<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(sMt,"extractBucketAndPath");var dpi=Be(require("querystring"));var lpi=Be(upi());var nBe;function DWc(){if(!He.CLOUDFRONT_PRIVATE_KEY_64)throw new Error("CLOUDFRONT_PRIVATE_KEY_64 is not set");return nBe||(nBe=Buffer.from(He.CLOUDFRONT_PRIVATE_KEY_64,"base64").toString("utf-8"),nBe)}s(DWc,"getPrivateKey");var PWc=s(()=>({keypairId:He.CLOUDFRONT_PUBLIC_KEY_ID,privateKeyString:DWc(),expireTime:new Date().getTime()+1e3*60*60*24}),"getCloudfrontSignParams"),TY=s(t=>{let e=BWc(t);return lpi.getSignedUrl(e,PWc())},"getPresignedUrl"),BWc=s(t=>{let e="/";return t.startsWith("/")&&(e=""),`${He.CLOUDFRONT_CDN}${e}${t}`},"getUrl");function MWc(t){return`${Ol(t)}/budibase-client.js`}s(MWc,"clientLibraryPath");function LWc(t,e){return`${Ol(t)}/${e}`}s(LWc,"client3rdPartyLibrary");async function UWc(t,e){return`/api/assets/${t}/client?${await fpi(e)}`}s(UWc,"clientLibraryUrl");async function fpi(t){let e,r;try{e=ys()}finally{r={version:t}}return e&&e!==Of&&(r.tenantId=e),dpi.default.encode(r)}s(fpi,"getClientCacheKey");async function ppi(t){return He.CLOUDFRONT_CDN?TY(t):await H2(He.APPS_BUCKET_NAME,t)}s(ppi,"getAppFileUrl");async function FWc(t){if(t.length===0)return[];try{return await Promise.all(t.map(async e=>({...e,src:await ppi(e.src),type:e.type||"image/png"})))}catch(e){return console.error("Error enriching PWA images:",e),t}}s(FWc,"enrichPWAImages");var qWc=s(async(t,e,r)=>{let n=hpi(t,e);return He.CLOUDFRONT_CDN?(r&&(n=`${n}?etag=${r}`),TY(n)):await H2(He.GLOBAL_BUCKET_NAME,n)},"getGlobalFileUrl"),hpi=s((t,e)=>{let r=`${t}/${e}`;return He.MULTI_TENANCY&&(r=`${ys()}/${r}`),r},"getGlobalFileS3Key");async function QWc(t){return!t||!t.length?[]:await Promise.all(t.map(async e=>{let r=await jWc(e),n=await HWc(e);return{...e,jsUrl:r,iconUrl:n}}))}s(QWc,"enrichPluginURLs");async function jWc(t){let e=gpi(t);return mpi(e)}s(jWc,"getPluginJSUrl");async function HWc(t){let e=Api(t);if(e)return mpi(e)}s(HWc,"getPluginIconUrl");async function mpi(t){return He.CLOUDFRONT_CDN?TY(t):await H2(He.PLUGIN_BUCKET_NAME,t)}s(mpi,"getPluginUrl");function gpi(t){return ypi(t,"plugin.min.js")}s(gpi,"getPluginJSKey");function Api(t){let e=t.iconUrl?"icon.svg":t.iconFileName;if(e)return ypi(t,e)}s(Api,"getPluginIconKey");function ypi(t,e){return`${_pi(t.name)}/${e}`}s(ypi,"getPluginS3Key");function _pi(t){let e=`${t}`;return He.MULTI_TENANCY&&(e=`${ys()}/${e}`),He.CLOUDFRONT_CDN&&(e=`plugins/${e}`),e}s(_pi,"getPluginS3Dir");var GWc="budibase.log",VWc="budibase-logs-history.txt",$Wc=Epi.default.join(j2(),"systemlogs");function zWc(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(zWc,"getSingleFileMaxSizeInfo");function Spi(){let t=zWc(He.ROLLING_LOG_MAX_SIZE);return bpi.createStream(GWc,{size:t?.size,path:$Wc,maxFiles:t?.totalHistoryFiles||1,immutable:!0,history:VWc,initialRotation:!1})}s(Spi,"localFileDestination");function YWc(t){return typeof t=="object"&&t!==null&&!(t instanceof Error)}s(YWc,"isPlainObject");function KWc(t){return t instanceof Error}s(KWc,"isError");function JWc(t){return typeof t=="string"}s(JWc,"isMessage");var m1;if(!He.DISABLE_PINO_LOGGER){let t=He.LOG_LEVEL,e={level:t,formatters:{level:u=>({level:u.toUpperCase()}),bindings:()=>He.SELF_HOSTED?{service:He.SERVICE_NAME}:{}},timestamp:()=>`,"timestamp":"${new Date(Date.now()).toISOString()}"`},r=[];r.push(He.isDev()?{stream:(0,vpi.default)({singleLine:!0}),level:t}:{stream:process.stdout,level:t}),He.SELF_HOSTED&&r.push({stream:Spi(),level:t}),m1=r.length?(0,sBe.default)(e,sBe.default.multistream(r)):(0,sBe.default)(e);let n=s(u=>{let l,d=[],f="";u.forEach(v=>{JWc(v)&&(f=`${f} ${v}`.trimStart()),YWc(v)&&d.push(v),KWc(v)&&(l=v)});let p=c(),h={};h={tenantId:i(),appId:o(),automationId:a(),identityId:p?._id,identityType:p?.type,correlationId:_wt()};let A=_Mt.default.scope().active();A&&_Mt.default.inject(A.context(),wpi.formats.LOG,h);let y={err:l,pid:process.pid,...h};if(d.length){let v={},b=0;for(let x=0;x<d.length;x++){let O=d[x],N=O._logKey;N?(delete O._logKey,y[N]=O):(v[b]=O,b++)}Object.keys(v).length&&(y.data=v)}return[y,f]},"getLogParams");console.log=(...u)=>{let[l,d]=n(u);m1?.info(l,d)},console.info=(...u)=>{let[l,d]=n(u);m1?.info(l,d)},console.warn=(...u)=>{let[l,d]=n(u);m1?.warn(l,d)},console.error=(...u)=>{let[l,d]=n(u);m1?.error(l,d)},console.trace=(...u)=>{let[l,d]=n(u);l.err||(l.err=new Error),m1?.trace(l,d)},console.debug=(...u)=>{let[l,d]=n(u);m1?.debug(l,d)};let i=s(()=>{let u;try{u=ys()}catch{}return u},"getTenantId"),o=s(()=>{let u;try{u=sm()}catch{}return u},"getAppId"),a=s(()=>{let u;try{u=kpt()}catch{}return u},"getAutomationId"),c=s(()=>{let u;try{u=ck()}catch{}return u},"getIdentity")}var EMt=m1;function UT(t){let e=ys();return`${t}:${e}`}s(UT,"generateTenantKey");var CY=class{static{s(this,"BaseCache")}constructor(e=void 0){this.client=e}async getClient(){return this.client?this.client:await own()}async keys(e){return(await this.getClient()).keys(e)}async exists(e,r={useTenancy:!0}){return e=r.useTenancy?UT(e):e,(await this.getClient()).exists(e)}async scan(e,r={useTenancy:!0}){return e=r.useTenancy?UT(e):e,(await this.getClient()).scan(e)}async get(e,r={useTenancy:!0}){return e=r.useTenancy?UT(e):e,(await this.getClient()).get(e)}async bulkGet(e,r={useTenancy:!0}){return e=r.useTenancy?e.map(i=>UT(i)):e,(await this.getClient()).bulkGet(e)}async store(e,r,n=null,i={useTenancy:!0}){e=i.useTenancy?UT(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,c])=>(o[UT(a)]=c,o),{})),await(await this.getClient()).bulkStore(e,r)}async delete(e,r={useTenancy:!0}){return e=r.useTenancy?UT(e):e,(await this.getClient()).delete(e)}async bulkDelete(e,r={useTenancy:!0}){return e=r.useTenancy?e.map(i=>UT(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:c}=o;return await this.store(e,a,c,{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(UT(e))}catch(n){throw console.error("Error busting cache - ",n),n}}async deleteIfValue(e,r,n={useTenancy:!0}){e=n.useTenancy?UT(e):e,await(await this.getClient()).deleteIfValue(e,r)}};var SMt=new CY,g1={CHECKLIST:"checklist",INSTALLATION:"installation",ANALYTICS_ENABLED:"analyticsEnabled",UNIQUE_TENANT_ID:"uniqueTenantId",EVENTS:"events",BACKFILL_METADATA:"backfillMetadata",EVENTS_RATE_LIMIT:"eventsRateLimit",OAUTH2_TOKEN:t=>`oauth2Token_${t}`};var vMt=s((...t)=>SMt.get(...t),"get"),oBe=s((...t)=>SMt.store(...t),"store");var aBe=s((...t)=>SMt.withCache(...t),"withCache");Ut();var b8c=Be(smi());var _Cd=Vf.fromSeconds(10).toMs();Ut();var ICd=Vf.fromDays(7).toSeconds(),xCd=Vf.fromSeconds(10).toMs();var NCd=Vf.fromHours(1).toSeconds();var ami=Be(require("node-fetch"));var Voe=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";CIe.setHeader(n.headers);let o={method:e,body:i?JSON.stringify(n.body):n.body,headers:n.headers,credentials:"include"};return await(0,ami.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 WCd=new Voe(He.INTERNAL_ACCOUNT_PORTAL_URL),YCd=He.SELF_HOSTED||He.DISABLE_ACCOUNT_PORTAL;Ut();Ut();var sId=+(He.PASSWORD_MIN_LENGTH||12),oId=+(He.PASSWORD_MAX_LENGTH||512);var gId=He.SESSION_EXPIRY_SECONDS?parseInt(He.SESSION_EXPIRY_SECONDS):Vf.fromDays(7).toSeconds();var jMt=s(async()=>HMt(),"enabled");Ut();Ut();var ZId={"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}`};Ut();Ut();var Ami=require("posthog-node");Ut();var O8c=s(t=>t==="served:builder"||t==="served:app:preview"||t==="served:app","isRateLimited"),k8c=s(t=>t==="served:app:preview"||t==="served:app","isPerApp");var hmi={"served:app":"calendarDay","served:app:preview":"calendarDay","served:builder":"calendarDay"},mmi=s(async t=>{if(!O8c(t))return!1;let e=await N8c(t);if(e){let r=new Date(e.timestamp);switch(hmi[t]){case"calendarDay":return r.setDate(r.getDate()+1),r.setHours(0,0,0,0),Date.now()>r.getTime()?(await pmi(t,{timestamp:Date.now()}),!1):!0}}else return await pmi(t,{timestamp:Date.now()}),!1},"limited"),gmi=s(t=>{let e=`${g1.EVENTS_RATE_LIMIT}:${t}`;return k8c(t)&&(e=e+":"+sm()),e},"eventKey"),N8c=s(async t=>{let e=gmi(t);return await vMt(e)},"readEvent"),pmi=s(async(t,e)=>{let r=gmi(t),n=hmi[t],i;switch(n){case"calendarDay":i=86400}await oBe(r,e,i)},"recordEvent");var P8c=["user:updated","email:smtp:updated","auth:sso:updated","app:updated","role:updated","datasource:updated","query:updated","view:updated","view:calculation:updated","automation:trigger:updated","user_group:updated"],zoe=class{static{s(this,"PosthogProcessor")}constructor(e){if(!e)throw new Error("Posthog token is not defined");this.posthog=new Ami.PostHog(e)}async processEvent(e,r,n,i){if(P8c.includes(e)||await mmi(e))return;n=this.clearPIIProperties(n),n.version=He.VERSION,n.service=He.SERVICE,n.environment=r.environment,n.hosting=r.hosting;let o=sm();o&&(n.appId=o);let a={distinctId:r.id,event:e,properties:n};i&&(a.timestamp=new Date(i)),(r.installationId||r.tenantId)&&(a.groups={},r.installationId&&(a.groups.installation=r.installationId,a.properties.installationId=r.installationId),r.tenantId&&(a.groups.tenant=r.tenantId,a.properties.tenantId=r.tenantId)),this.posthog.capture(a)}clearPIIProperties(e){return e.email&&delete e.email,e.audited&&delete e.audited,e}async identify(e,r){let n={distinctId:e.id,properties:e};r&&(n.timestamp=new Date(r)),this.posthog.identify(n)}async identifyGroup(e,r){let n={distinctId:e.id,groupType:e.type,groupKey:e.id,properties:e};r&&(n.timestamp=new Date(r)),this.posthog.groupIdentify(n)}async shutdown(){await this.posthog.shutdown()}};var ymi=zoe;var B8c=["installation:version:upgraded","installation:version:downgraded"],M8c=["installation","tenant"],Woe=class{static{s(this,"AnalyticsProcessor")}constructor(){He.POSTHOG_TOKEN&&!He.isTest()&&(this.posthog=new ymi(He.POSTHOG_TOKEN))}async processEvent(e,r,n,i){!B8c.includes(e)&&!await jMt()||this.posthog&&await this.posthog.processEvent(e,r,n,i)}async identify(e,r){!M8c.includes(e.type)&&!await jMt()||this.posthog&&await this.posthog.identify(e,r)}async identifyGroup(e,r){this.posthog&&await this.posthog.identifyGroup(e,r)}async shutdown(){this.posthog&&await this.posthog.shutdown()}};var VMt=He.SELF_HOSTED&&!He.isDev(),Yoe=class{static{s(this,"LoggingProcessor")}async processEvent(e,r,n){VMt||console.log(`[audit] [identityType=${r.type}] ${e}`,n)}async identify(e){VMt||console.log("[audit] identified",e)}async identifyGroup(e){VMt||console.log("[audit] group identified",e)}async shutdown(){}};Ut();var Koe=class t{static{s(this,"AuditLogsProcessor")}static{this.auditLogsEnabled=!1}static init(e){t.auditLogsEnabled=!0;let r=e;return t.auditLogQueue=new DF("auditLogQueue",{jobTags:n=>({"event.name":n.event})}),t.auditLogQueue.process(async n=>{await nx(n.data.tenantId,async()=>{let i=n.data.properties;i.audited&&(i={...i,...i.audited},delete i.audited);let o={};He.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&&hwn(e)){let o=r.type==="user"?r.id:void 0;await t.auditLogQueue.add({event:e,properties:n,opts:{userId:o,timestamp:i,appId:sm(),hostInfo:r.hostInfo},tenantId:ys()})}}async identify(){}async identifyGroup(){}async shutdown(){await t.auditLogQueue?.close()}};var Joe=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 L8c=new Woe,U8c=new Yoe,F8c=new Koe;var $Mt=new Joe([L8c,U8c,F8c]);Ut();Ut();var L5c=Be(fLt());Ut();Ut();Ut();Ut();Ut();Ut();Ut();Ut();var INd=!He.SELF_HOSTED&&!He.isDev();Ut();Ut();Ut();Ut();Ut();Ut();Ut();Ut();Ut();Ut();Ut();Ut();Ut();Ut();Ut();Ut();Ut();Ut();Ut();Ut();Ut();var lAi=N_.users.isBuilder,OBe=N_.users.isAdmin,TMd=N_.users.isGlobalBuilder,CMd=N_.users.isAdminOrBuilder,cAi=N_.users.hasAdminPermissions,sae=N_.users.hasBuilderPermissions,IMd=N_.users.hasAppBuilderPermissions,z5c=N_.users.isAdminOrWorkspaceBuilder;function s9c(t){return Array.isArray(t)?t.map(e=>{if(e)return delete e.password,e}):t&&(delete t.password,t)}s(s9c,"removeUserPassword");async function oae(t,e){if(t==null)throw"Must supply an email address to view";let r=await STe("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=s9c(n)),n}s(oae,"getGlobalUserByEmail");Ut();function fAi(t){return`config${Yi}${t}`}s(fAi,"generateConfigID");async function NBe(t){let e=$p();try{return await e.get(fAi(t))}catch(r){if(r.status===404)return;throw r}}s(NBe,"getConfig");async function pLt(){let t=await NBe("settings");return t||(t={_id:fAi("settings"),type:"settings",config:{}}),t.config.platformUrl=await pAi({tenantAware:!0,config:t.config}),t.config.analyticsEnabled=await HMt({config:t.config}),t}s(pLt,"getSettingsConfigDoc");async function pAi(t={tenantAware:!0}){let e=He.PLATFORM_URL||"http://localhost:10000";if(!He.SELF_HOSTED&&He.MULTI_TENANCY&&t.tenantAware){let r=ys();e.includes("localhost:")||(e=e.replace("://",`://${r}.`))}else if(He.SELF_HOSTED){let r=t?.config?t.config:(await NBe("settings"))?.config;r?.platformUrl&&(e=r.platformUrl)}return e}s(pAi,"getPlatformUrl");var HMt=s(async t=>{if(!He.SELF_HOSTED)return!!He.ENABLE_ANALYTICS;let e=await aBe(g1.ANALYTICS_ENABLED,86400,async()=>{let n=t?.config?t.config:(await NBe("settings"))?.config;if(n?.analyticsEnabled===!1)return!1;if(n?.analyticsEnabled===!0)return!0});if(e!==void 0)return e;let r=He.ENABLE_ANALYTICS;return!(r===0||r===!1)},"analyticsEnabled");Ut();var ueu=Be(UH()),leu=Be($Be()),deu=Be(fLt());var mEi={ADMIN:"ADMIN",POWER:"POWER",BASIC:"BASIC",PUBLIC:"PUBLIC"},qy={...mEi,BUILDER:"BUILDER"},feu={UUID:void 0,NAME:"name"};var Y2=class{constructor(e,r,n,i){this.permissions={};this._id=e,this.name=r,this.uiMetadata=i,this.permissionId=n,this.version=feu.NAME}static{s(this,"Role")}addInheritance(e){return e&&typeof e=="string"?e=pEi(e):e&&Array.isArray(e)&&(e=e.map(pEi)),this.inherits=e,this}};var n2d={ADMIN:new Y2(qy.ADMIN,qy.ADMIN,"admin",{displayName:"Admin user",description:"Can do everything",color:"var(--spectrum-global-color-static-red-400)"}).addInheritance(qy.POWER),POWER:new Y2(qy.POWER,qy.POWER,"power",{displayName:"App power user",description:"An app user with more access",color:"var(--spectrum-global-color-static-orange-400)"}).addInheritance(qy.BASIC),BASIC:new Y2(qy.BASIC,qy.BASIC,"write",{displayName:"Basic user",description:"Any logged in user",color:"var(--spectrum-global-color-static-green-400)"}).addInheritance(qy.PUBLIC),PUBLIC:new Y2(qy.PUBLIC,qy.PUBLIC,"public",{displayName:"Public user",description:"Accessible to anyone",color:"var(--spectrum-global-color-static-blue-400)"}),BUILDER:new Y2(qy.BUILDER,qy.BUILDER,"admin",{displayName:"Builder user",description:"Users that can edit this app",color:"var(--spectrum-global-color-static-magenta-600)"})};function peu(t){return Object.values(mEi).includes(t)}s(peu,"isBuiltin");function pEi(t){return peu(t)?t:cwn(t)}s(pEi,"prefixRoleIDNoBuiltin");Ut();var geu=Be(QB()),Aeu=Be($Be());Ut();var Ac=class{static{s(this,"PermissionImpl")}constructor(e,r){this.type=e,this.level=r}};var c2d={PUBLIC:{_id:"public",name:"Public",permissions:[new Ac("webhook","execute")]},READ_ONLY:{_id:"read_only",name:"Read only",permissions:[new Ac("query","read"),new Ac("table","read"),new Ac("app","read")]},WRITE:{_id:"write",name:"Read/Write",permissions:[new Ac("query","write"),new Ac("table","write"),new Ac("automation","execute"),new Ac("legacy_view","read"),new Ac("app","read")]},POWER:{_id:"power",name:"Power",permissions:[new Ac("table","write"),new Ac("user","read"),new Ac("automation","execute"),new Ac("webhook","read"),new Ac("legacy_view","read"),new Ac("app","read")]},ADMIN:{_id:"admin",name:"Admin",permissions:[new Ac("table","admin"),new Ac("user","admin"),new Ac("automation","admin"),new Ac("webhook","read"),new Ac("query","admin"),new Ac("legacy_view","read"),new Ac("app","read")]}};var u2d="builder",l2d="creator",d2d="globalBuilder";Ut();var zBe=Be(require("crypto")),AEi=Be(ew()),yEi=Be(UH()),_eu=require("posthog-node");var gEi;function _Ei(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(_Ei,"parseEnvFlags");function Eeu(){return _Ei(He.TENANT_FEATURE_FLAGS||"")}s(Eeu,"getEnvFlags");var jLt=class{constructor(e){this.flagSchema=e;this.setId=zBe.randomUUID()}static{s(this,"FlagSet")}defaults(){return(0,yEi.cloneDeep)(this.flagSchema)}isFlagName(e){return this.flagSchema[e]!==void 0}async isEnabled(e){return(await this.fetch())[e]}async fetch(){return await AEi.default.trace("features.fetch",async e=>{let r=Bpt(this.setId);if(r)return e?.addTags({fromCache:!0}),r;let n={},i=this.defaults(),o=ys(),a=new Set;if(mve())return i;for(let{tenantId:f,key:p,value:h}of Eeu())if(!(!f||f!=="*"&&f!==o)&&(n.readFromEnvironmentVars=!0,h===!1&&a.add(p),!!this.isFlagName(p))){if(typeof i[p]!="boolean")throw new Error(`Feature: ${p} is not a boolean`);i[p]=h,n[`flags.${p}.source`]="environment"}let c=ck(),u=c?._id;if(!u){let f=Npt();f&&(u=zBe.createHash("sha512").update(f).digest("hex"))}let l=c?.tenantId;if(l||(l=o),n["identity.type"]=c?.type,n["identity._id"]=c?._id,n.tenantId=l,n.userId=u,gEi&&u){n.readFromPostHog=!0;let f=await pLt(),p={tenantId:l},h={tenant:{id:l}};f.config.createdVersion&&(h.tenant.createdVersion=f.config.createdVersion),f.createdAt&&(h.tenant.createdAt=`${f.createdAt}`);let A=await gEi.getAllFlags(u,{personProperties:p,onlyEvaluateLocally:!0,groups:{tenant:l},groupProperties:h});for(let[y,v]of Object.entries(A))if(this.isFlagName(y)){if(typeof v!="boolean"){console.warn(`Invalid value for posthog flag "${y}": ${v}`);continue}if(!(i[y]===!0||a.has(y)))try{i[y]=v,n[`flags.${y}.source`]="posthog"}catch(b){console.warn(`Error parsing posthog flag "${y}": ${v}`,b)}}}let d=Lpt();for(let[f,p]of Object.entries(d))this.isFlagName(f)&&typeof p=="boolean"&&(i[f]=p,n[`flags.${f}.source`]="override");Mpt(this.setId,i);for(let[f,p]of Object.entries(i))n[`flags.${f}.value`]=p;return e?.addTags(n),i})}},beu={USE_ZOD_VALIDATOR:!1,AI_AGENTS:!1,AI_RAG:!1,DEBUG_UI:He.isDev(),DEV_USE_CLIENT_FROM_STORAGE:!1},_2d=new jLt(beu);Ut();var I2d=TIe();var liu=ISi(),diu=TIe();function fiu(){return{logger:EMt,genReqId:diu.getId,autoLogging:{ignore:t=>!!t.url?.includes("/health")},serializers:{req:t=>({method:t.method,url:t.url,correlationId:t.id}),res:t=>({status:t.statusCode})}}}s(fiu,"pinoSettings");function piu(){return He.HTTP_LOGGING?liu(fiu()):(t,e)=>e()}s(piu,"getMiddleware");var hiu=piu();Ut();Ut();var _iu=Be(ew());var Sjd=He.SESSION_UPDATE_PERIOD?parseInt(He.SESSION_UPDATE_PERIOD):60*1e3;Ut();var jsu=Be(fMe());var vae={};ks(vae,{authenticate:()=>Vsu,options:()=>Gsu});function zT(t,e,r){return t(r,null,{message:e})}s(zT,"authError");var bFt="Invalid credentials",Hsu="This account has expired. Please reset your password",Gsu={passReqToCallback:!0};async function Vsu(t,e,r,n){if(!e)return zT(n,"Email Required");if(!r)return zT(n,"Password Required");let i=await oae(e);return i==null?(console.info(`user=${e} could not be found`),zT(n,bFt)):i.status==="inactive"?(console.info(`user=${e} is inactive`,i),zT(n,bFt)):i.password?await kur(r,i.password)?(delete i.password,n(null,i)):zT(n,bFt):(console.info(`user=${e} has no password set`,i),zT(n,Hsu))}s(Vsu,"authenticate");Ut();var vVd=rqt().OAuth2Strategy;var fau=Be(require("node-fetch"));Ut();var pau=Be(PTi());Ut();Ut();var w$d=rqt().OAuth2Strategy;var jau=pCi(),Hau=bCi().Strategy,F4d=SCi();jau.use(new Hau(vae.options,vae.authenticate));var rLe={};ks(rLe,{validate:()=>Yau});Ut();var Vt=Be(fMe());var Vau=["Relational","Non-relational","Spreadsheet","Object store","Graph","API"];function bqt(t,e){let{error:r}=t.validate(e);if(r)throw r}s(bqt,"runJoi");function $au(t){let e=Vt.default.object({type:Vt.default.string().allow("component").required(),metadata:Vt.default.object().unknown(!0).required(),hash:Vt.default.string().optional(),version:Vt.default.string().optional(),schema:Vt.default.object({name:Vt.default.string().required(),settings:Vt.default.array().items(Vt.default.object().unknown(!0)).required()}).unknown(!0)});bqt(e,t)}s($au,"validateComponent");function zau(t){let e=Vt.default.object({type:Vt.default.string().allow(...Object.values(D3e)).required(),required:Vt.default.boolean().required(),default:Vt.default.any(),display:Vt.default.string()}),r=Vt.default.object({type:Vt.default.string().allow(...Object.values(N3e)),readable:Vt.default.boolean(),displayName:Vt.default.string(),fields:Vt.default.object().pattern(Vt.default.string(),e)}).required(),n=Vt.default.object({type:Vt.default.string().allow("datasource").required(),metadata:Vt.default.object().unknown(!0).required(),hash:Vt.default.string().optional(),version:Vt.default.string().optional(),schema:Vt.default.object({docs:Vt.default.string(),plus:Vt.default.boolean().optional(),isSQL:Vt.default.boolean().optional(),auth:Vt.default.object({type:Vt.default.string().required()}).optional(),features:Vt.default.object(Object.fromEntries(Object.values(P3e).map(i=>[i,Vt.default.boolean().optional()]))).optional(),relationships:Vt.default.boolean().optional(),description:Vt.default.string().required(),friendlyName:Vt.default.string().required(),type:Vt.default.string().allow(...Vau),datasource:Vt.default.object().pattern(Vt.default.string(),e).required(),query:Vt.default.object().pattern(Vt.default.string(),r).unknown(!0).required(),extra:Vt.default.object().pattern(Vt.default.string(),Vt.default.object({type:Vt.default.string().required(),displayName:Vt.default.string().required(),required:Vt.default.boolean(),data:Vt.default.object()}))})});bqt(n,t)}s(zau,"validateDatasource");function Wau(t){let e=Vt.default.object().pattern(Vt.default.string(),{type:Vt.default.string().allow(...Object.values(q3e)).required(),customType:Vt.default.string().allow(...Object.values(Q3e)),title:Vt.default.string(),description:Vt.default.string(),enum:Vt.default.array().items(Vt.default.string()),pretty:Vt.default.array().items(Vt.default.string())}),r=Vt.default.object({properties:e,required:Vt.default.array().items(Vt.default.string())}).concat(e).required(),n=Vt.default.object({type:Vt.default.string().allow("automation").required(),metadata:Vt.default.object().unknown(!0).required(),hash:Vt.default.string().optional(),version:Vt.default.string().optional(),schema:Vt.default.object({name:Vt.default.string().required(),tagline:Vt.default.string().required(),icon:Vt.default.string().required(),description:Vt.default.string().required(),type:Vt.default.string().allow("ACTION","LOGIC").required(),stepId:Vt.default.string().disallow(...WJt).required(),inputs:Vt.default.object().optional(),schema:Vt.default.object({inputs:r,outputs:r}).required()})});bqt(n,t)}s(Wau,"validateAutomation");function Yau(t){switch(t?.type){case"component":$au(t);break;case"datasource":zau(t);break;case"automation":Wau(t);break;default:throw new Error(`Unknown plugin type - check schema.json: ${t.type}`)}}s(Yau,"validate");var vCi=Be(require("dns"));var wCi=require("util");var J4d=(0,wCi.promisify)(vCi.default.lookup);Ut();var _zd={"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 s8u=Be(OWt());var f8i=Be(OWt());Ut();Ut();var o8u=Be(UH());var xuf={equal:!1,notEqual:!0,empty:!1,notEmpty:!0,fuzzy:!1,string:!1,range:!1,contains:!1,notContains:!0,containsAny:!1,oneOf:!1,$and:!1,$or:!1};var uYu=Be(D8i());var KYu=Be(jWt(),1),cYi=Be(X8i(),1),YWt=Be(jWt(),1),gHe=require("url"),E9=Be(iYi(),1),uYi=Be(require("http"),1),dYi=Be(pk(),1);function mHe(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,E9.pathToRegexp)(t,r);return{regexp:n,keys:i}}s(mHe,"compilePathToRegexp");function JYu(t,e={}){return(0,E9.compile)(t,e)}s(JYu,"compilePath");function XYu(t,e){return(0,E9.parse)(t,e)}s(XYu,"parsePath");function zWt(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(zWt,"normalizeLayerOptionsToPathToRegexp");function ZYu(t){try{return decodeURIComponent(t)}catch{return t}}s(ZYu,"safeDecodeURIComponent");var sYi=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=zWt(this.opts),{regexp:e,keys:r}=mHe(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 c=a.name;n[c]=ZYu(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=JYu(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}=XYu(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,gHe.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,gHe.format)(n)}param(t,e){let r=this.stack,n=this.paramNames,i=this._createParamMiddleware(t,e),o=n.map(c=>c.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=zWt(this.opts),{regexp:i,keys:o}=mHe(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=zWt(this.opts),{regexp:i,keys:o}=mHe(this.path,n);this.regexp=i,this.paramNames=o}}};function e6u(){return uYi.default.METHODS.map(t=>t.toLowerCase())}s(e6u,"getAllHttpMethods");var t6u=["get","post","put","patch","delete","del","head","options"];function r6u(t){return t?Array.isArray(t)?t:[t]:[]}s(r6u,"normalizeParameterMiddleware");function lYi(t,e,r){let n=r6u(r);for(let i of n)t.param(e,i)}s(lYi,"applyParameterMiddlewareToRoute");function n6u(t,e){let r=Object.keys(e);for(let n of r){let i=e[n];lYi(t,n,i)}}s(n6u,"applyAllParameterMiddleware");function oYi(t,e={}){if(!t)return!1;let{keys:r}=mHe(t,e);return r.length>0}s(oYi,"hasPathParameters");function i6u(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(i6u,"determineMiddlewarePath");var WWt=(0,dYi.default)("koa-router"),fYi=e6u(),aYi=class{static{s(this,"RouterImplementation")}opts;methods;exclusive;params;stack;host;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 sYi(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"&&oYi(e,this.opts);for(let o=0;o<n.stack.length;o++){let a=n.stack[o],c=this._cloneLayer(a);e&&typeof e=="string"&&c.setPrefix(e),this.opts.prefix&&c.setPrefix(this.opts.prefix),c.methods.length===0&&i&&(c.opts.ignoreCaptures=!1),this.stack.push(c),n.stack[o]=c}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];lYi(t,r,n)}}_registerMiddleware(t,e,r){let n=oYi(this.opts.prefix||"",this.opts),i=(()=>{if(e!==void 0)return e;if(n)return""})(),o=r||e===void 0&&n,{path:a,pathAsRegExp:c}=i6u(i,n),u=a,l=c,d=o&&a==="/";o&&typeof a=="string"&&(u=a,l=!1),this.register(u,[],t,{end:d,ignoreCaptures:!o&&!n,pathAsRegExp:l})}prefix(t){let e=t.replace(/\/$/,""),r=this.opts.prefix||"";this.opts.prefix=e;for(let n of this.stack)r&&typeof n.path=="string"&&n.path.startsWith(r)&&(n.path=n.path.slice(r.length)||"/"),n.setPrefix(e);return this}middleware(){let t=function(e,r){if(WWt("%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,!i.route)return r();let o=i.pathAndMethod;this._setMatchedRouteInfo(e,o);let a=this._buildMiddlewareChain(o,n);return(0,cYi.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=this.opts.exclusive?[t.at(-1)].filter(i=>i!==void 0):t,n=[];for(let i of r)n.push((o,a)=>{let c=o;return c.captures=i.captures(e),c.request.params=i.params(e,c.captures||[],c.params),c.params=c.request.params,c.routerPath=i.path,c.routerName=i.name||void 0,c._matchedRoute=i.path,i.name&&(c._matchedRouteName=i.name),a()},...i.stack);return n}routes(){return this.middleware()}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),c=Object.keys(a),u=r.method.toUpperCase();if(!e.includes(u)){this._handleNotImplemented(i,c,t);return}if(u==="OPTIONS"&&c.length>0){this._handleOptionsRequest(i,c);return}c.length>0&&!a[u]&&this._handleMethodNotAllowed(i,c,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 YWt.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 YWt.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,fYi,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),n6u(o,this.params),this.stack.push(o),WWt("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 sYi(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,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(WWt("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 fYi)t6u.includes(t)||t in aYi.prototype||Object.defineProperty(aYi.prototype,t,{value:function(...r){return this._registerMethod(t,...r)},writable:!0,configurable:!0,enumerable:!1});var Xlf={...Xre,...tu};var Sf=".temp",b9="couchdb",Fle="minio",hYi=[{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 a6u(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(a6u,"checkURLs");async function c6u(){console.log("*** NOTE: use a .env file to load these parameters repeatedly ***");let t={};for(let e of hYi)t[e.value]=await LB(e.value,e.default);return t}s(c6u,"askQuestions");function u6u(t){if(!KWt.default.existsSync(t))throw"Unable to file specified .env file";let e=KWt.default.readFileSync(t,"utf8"),r=a6u(pYi.default.parse(e));for(let n of hYi)if(!r[n.value])throw`Cannot find "${n.value}" property in .env file`;return r}s(u6u,"loadEnvironment");async function JWt(t=!0){let e;t!==!0?e=u6u(t):e=await c6u();for(let r of Object.keys(e))He._set(r,e[r]);return e}s(JWt,"getConfig");async function XWt(t,e){let r=Afe();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(XWt,"replication");function ZWt(t){let e=Afe(t.COUCH_DB_URL),r=Afe();return{Remote:e,Local:r}}s(ZWt,"getPouches");var Ej=Be(require("fs")),gB=require("path");xd();var gYi=Be(require("node:stream"));var{ObjectStoreBuckets:l6u,ObjectStore:AYi,retrieve:d6u,uploadDirectory:f6u,createBucketIfNotExists:p6u}=iBe,mYi=Object.values(l6u);async function yYi(){let t=(0,gB.join)(Sf,Fle);Ej.default.mkdirSync(t);let e=[],r=0;for(let o of mYi){let a=AYi();try{await a.headBucket({Bucket:o})}catch{r++;continue}let c=await a.listObjectsV2({Bucket:o});e=e.concat(c.Contents?.map(u=>({...u,bucket:o}))||[])}if(r===mYi.length)throw new Error("Unable to access MinIO/S3 - check environment config.");let n=DB(e.length),i=0;for(let o of e){let a=o.Key,c=await d6u(o.bucket,a),u=a.split("/");if(u.length>1){let l=u.slice(0,u.length-1);Ej.default.mkdirSync((0,gB.join)(t,o.bucket,...l),{recursive:!0})}c instanceof gYi.Readable?c.pipe(Ej.default.createWriteStream((0,gB.join)(t,o.bucket,...u))):Ej.default.writeFileSync((0,gB.join)(t,o.bucket,...u),c),n.update(++i)}n.stop()}s(yYi,"exportObjects");async function _Yi(){let t=(0,gB.join)(Sf,Fle),e=Ej.default.readdirSync(t),r=0;e.forEach(o=>{let a=Ej.default.readdirSync((0,gB.join)(t,o));r+=a.length});let n=DB(r),i=0;for(let o of e){let a=AYi();await p6u(a,o);let c=await f6u(o,(0,gB.join)(t,o),"/");i+=c.length,n.update(i)}n.stop()}s(_Yi,"importObjects");var EYi=require("tar");async function bYi(t){let e=t.env||void 0,r=t.export||t;typeof r!="string"&&(r=`backup-${new Date().toISOString()}.tar.gz`);let n=await JWt(e),i=await WZt(n.COUCH_DB_URL),{Remote:o,Local:a}=ZWt(n);Hb.default.existsSync(Sf)&&Hb.default.rmSync(Sf,{recursive:!0});let c=(0,bj.join)(Sf,b9);Hb.default.mkdirSync(Sf),Hb.default.mkdirSync(c),console.log("CouchDB Export");let u=DB(i.length),l=0;for(let d of i){u.update(++l);let f=new o(d),p=new a((0,bj.join)(Sf,b9,d));await XWt(f,p),await f.close(),await p.close()}u.stop(),console.log("S3 Export"),await yYi(),EYi.create({sync:!0,gzip:!0,file:r,cwd:(0,bj.join)(Sf)},[b9,Fle]),Hb.default.rmSync(Sf,{recursive:!0}),console.log(`Generated export file - ${r}`)}s(bYi,"exportBackup");async function SYi(t){let e=t.env||void 0,r=t.import||t,n=await JWt(e);(!r||!Hb.default.existsSync(r))&&(console.error("Cannot import without specifying a valid file to import"),process.exit(-1)),Hb.default.existsSync(Sf)&&Hb.default.rmSync(Sf,{recursive:!0}),Hb.default.mkdirSync(Sf),EYi.extract({sync:!0,cwd:(0,bj.join)(Sf),file:r});let{Remote:i,Local:o}=ZWt(n),a=Hb.default.readdirSync((0,bj.join)(Sf,b9));console.log("CouchDB Import");let c=DB(a.length),u=0;for(let l of a){c.update(++u);let d=new i(l),f=new o((0,bj.join)(Sf,b9,l));await XWt(f,d),await d.close(),await f.close()}c.stop(),console.log("MinIO Import"),await _Yi();try{await T3e(`http://localhost:${n.MAIN_PORT}/api/system/restored`,"POST")}catch{}console.log("Import complete"),Hb.default.rmSync(Sf,{recursive:!0})}s(SYi,"importBackup");async function h6u(t){if(t.import)return SYi(t);if(t.export)return bYi(t)}s(h6u,"pickOne");var vYi=new l0("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.",bYi).addSubOption("--import [filename]","Import a backup to a new Budibase installation.",SYi).addSubOption("--env [envFile]","Provide an environment variable file to configure the CLI.",h6u);QO();var VJi=Be(require("node-fetch")),qj=Be(require("fs")),$Ji=Be(require("os")),wGe=require("path");var qJi=Be(CYi()),QJi=Be(require("vm")),u6t=Be(Zle());var SO=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 vGe=Be(Zle());var JYt=Be(z7i());var bp=Be(iVe()),rJi=Be(W7i()),nJi=Be(Y7i()),iJi=Be(K7i()),sJi=Be(J7i()),oJi=Be(X7i()),aJi=Be(Z7i()),cJi=Be(eJi()),uJi=Be(tJi());bp.default.extend(rJi.default);bp.default.extend(nJi.default);bp.default.extend(iJi.default);bp.default.extend(sJi.default);bp.default.extend(oJi.default);bp.default.extend(aJi.default);bp.default.extend(cJi.default);bp.default.extend(uJi.default);function Mj(t){return typeof t=="object"&&typeof t.hash=="object"}s(Mj,"isOptions");function WYt(t){return typeof t=="object"&&typeof t.options=="object"&&typeof t.app=="object"}s(WYt,"isApp");function YYt(t,e,r){if(Mj(t))return YYt({},e,t);if(Mj(e))return YYt(t,r,e);let n=WYt(t)?t.context:{};r=r||{},Mj(r)||(e=Object.assign({},e,r)),Mj(r)&&r.hash.root===!0&&(e=Object.assign({},r.data.root,e));let i=Object.assign({},n,e,r.hash);return WYt(t)||(i=Object.assign({},t,i)),WYt(t)&&t.view&&t.view.data&&(i=Object.assign({},i,t.view.data)),i}s(YYt,"getContext");function KYt(t,e,r){return Mj(e)&&(r=e,e=dJi),Mj(t)&&(r=t,e=null,t=null),{str:t,pattern:e,options:r}}s(KYt,"initialConfig");function lJi(t,e,r){let n=KYt(t,e,r),i={lang:"en",date:new Date(n.str)},o=YYt(this,i,{});bp.default.locale(o.lang||o.language)}s(lJi,"setLocale");var dJi="MMMM DD, YYYY",gGe=s((t,e,r)=>{let n=KYt(t,e,r);if(n.str==null&&n.pattern==null)return bp.default.locale("en"),(0,bp.default)().format(dJi);lJi(n.str,n.pattern,n.options);let i=(0,bp.default)(new Date(n.str));return typeof n.options=="string"?i=n.options.toLowerCase()==="utc"?i.utc():i.tz(n.options):i=i.tz(bp.default.tz.guess()),n.pattern===""?i.toISOString():i.format(n.pattern)},"date"),gde=s((t,e,r)=>{let n=KYt(t,e);lJi(n.str,n.pattern);let i=bp.default.duration(n.str,n.pattern);return r&&!Mj(r)?i.format(r):i.humanize()},"duration"),Ade=s((t,e,r)=>(0,bp.default)(new Date(t)).diff((0,bp.default)(new Date(e)),r),"difference"),AGe=s(t=>{let e=Ade(t,new Date().toISOString(),"ms");return gde(e,"ms")},"durationFromNow");var yGe=["#if","#unless","#each","#with","lookup","log","blockHelperMissing","each","helperMissing","if","unless","log","lookup","with"],fJi=["math","array","number","url","string","comparison","object","regex","uuid"],Lj={OBJECT:"object",ALL:"all",LITERAL:"literal",JS:"js",DECODE_ID:"decodeId"},L9="%LITERAL%";var pJi={date:gGe,duration:gde,difference:Ade,durationFromNow:AGe};function hJi(t){for(let[r,n]of Object.entries(pJi))t.registerHelper(r,n);let e=[];for(let r of fJi){let n=JYt.default[r]();for(let i of Object.entries(n)){let o=i[0];yGe.indexOf(o)!==-1||e.indexOf(o)!==-1||e.push(o)}JYt.default[r]({handlebars:t})}XYt=e.concat(Object.keys(pJi))}s(hJi,"registerAll");var XYt=[];function nXu(){return process.env.NODE_ENV==="jest"||process.env.JEST_WORKER_ID!=null&&process.env.JEST_WORKER_ID!=="null"}s(nXu,"isJest");function Uj(){return nXu()}s(Uj,"isTest");var mJi=s(()=>process&&process.env.BACKEND_JS,"isTestingBackendJS");var iXu=/^[A-Za-z0-9]+$/g,_Ge=/{{([^{].*?)}}/g,ZYt=/{?{{([^{].*?)}}}?/g,sXu=/{{{([^{].*?)}}}/g,yde=s(()=>Uj()&&mJi()?!0:Uj()?!1:typeof window>"u","isBackendService"),gJi=s(()=>process&&!process.env.NO_JS,"isJSAllowed"),AJi=s(t=>{let e=t,r=new RegExp(_Ge),n=new RegExp(sXu),i=e.match(n);i&&i.forEach(a=>{e=e.replace(a,"")});let o=e.match(r);return o||[]},"findDoubleHbsInstances"),yJi=s(t=>t.match(iXu),"isAlphaNumeric"),e6t=s((t,e,r,n)=>t.slice(0,e)+n+t.slice(e+r),"swapStrings");var t6t=s(t=>Buffer.from(t,"base64").toString("utf-8"),"atob"),_Ji=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 EGe(t){return`
1468
1468
  result = {
1469
1469
  result: null,
1470
1470
  error: null,
@@ -1499,7 +1499,7 @@ ${t}
1499
1499
  </style>
1500
1500
  `,a=!1,c,u,l=[];if(i){let f=`${t}.pre-svelte5`;ns.default.writeFileSync(f,e),ns.default.writeFileSync(t,o),a=!0,c=e,u=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 d=wf.default.join(wf.default.dirname(t),"Boundary.js");if(ns.default.existsSync(d))try{ns.default.unlinkSync(d),a=!0,l.push("Removed legacy lib/Boundary.js (incompatible with Svelte 5).")}catch(f){console.log("Failed to delete legacy Boundary.js:",f instanceof Error?f.message:f)}return{changed:a,before:c,after:u,message:l.join(" ")}}s(DXu,"migrateWrapper");function PXu(){let t=wf.default.join(process.cwd(),"package.json");if(!ns.default.existsSync(t))return{changed:!1,message:"package.json not found"};let e=ns.default.readFileSync(t,"utf8"),r;try{r=JSON.parse(e)}catch(d){return{changed:!1,message:`Invalid package.json: ${d?.message||"parse error"}`}}let n=JSON.stringify(r,null,2),i=typeof r.version=="string"?r.version.trim():void 0,o=JJi(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 c=JSON.stringify(r,null,2);if(n===c)return{changed:!1,message:"package.json already appears Svelte 5 ready. Skipping."};ns.default.writeFileSync(`${t}.pre-svelte5`,e),ns.default.writeFileSync(t,`${c}
1501
1501
  `);let u=i&&o?` (version ${i} -> ${o})`:"",l=o?`Updated package.json for Svelte 5, Rollup 4, scripts, and version bump${u}.`:"Updated package.json for Svelte 5, Rollup 4, and scripts.";return{changed:!0,before:n,after:c,message:l}}s(PXu,"migratePackageJson");function rXi(){let t=wf.default.join(process.cwd(),".github","workflows");return ns.default.existsSync(t)?ns.default.readdirSync(t).filter(r=>r.endsWith(".yml")||r.endsWith(".yaml")).map(r=>wf.default.join(".github","workflows",r)):[]}s(rXi,"findWorkflowFiles");function BXu(){let t=rXi();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=wf.default.join(process.cwd(),n),o=ns.default.readFileSync(i,"utf8");if(!/node-version:\s*['"]?16['"]?/g.test(o))continue;let c=o.replace(/node-version:\s*['"]?16['"]?/g,"node-version: 18");if(c!==o){let u=`${i}.pre-svelte5`;ns.default.writeFileSync(u,o),ns.default.writeFileSync(i,c),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(BXu,"migrateNodeVersion");function MXu(){let t=wf.default.join(process.cwd(),"schema.json");if(!ns.default.existsSync(t))return{changed:!1,message:"schema.json not found - skipping schema metadata migration."};let e=ns.default.readFileSync(t,"utf8"),r;try{r=JSON.parse(e)}catch(u){return{changed:!1,message:`Invalid schema.json: ${u?.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 c=JSON.stringify(r,null,2);return ns.default.writeFileSync(`${t}.pre-svelte5`,e),ns.default.writeFileSync(t,`${c}
1502
- `),{changed:!0,before:o,after:c,message:"Updated schema.json metadata to include svelteMajor: 5."}}s(MXu,"migrateSchemaJson");async function nXi(){let t=[],e=ns.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=JJi(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=XJi(),c="unknown";if(a){let A=ns.default.readFileSync(a,"utf8");ZJi(A)?(c="looks-new",t.push(`Rollup config ${a} already looks Svelte 5-ready.`)):(c="needs-migration",t.push("Will write Rollup 4 / Svelte 5 config and rename to rollup.config.mjs."))}else c="unknown",t.push("No rollup config found - will create rollup.config.mjs.");let u=tXi(),l="not-found";u?ns.default.readFileSync(u,"utf8").includes("<svelte:boundary>")?(l="looks-new",t.push(`${u} already uses <svelte:boundary>.`)):(l="needs-migration",t.push(`Will update ${u} to use <svelte:boundary>, $$restProps, and error UI.`)):t.push("No wrapper.svelte found - skipping wrapper migration.");let d="unknown";if(ns.default.existsSync("schema.json"))try{let A=ns.default.readFileSync("schema.json","utf8"),y=JSON.parse(A);(y&&typeof y.metadata=="object"&&!Array.isArray(y.metadata)?y.metadata:{}).svelteMajor===5?(d="looks-new",t.push("schema.json metadata already declares svelteMajor: 5.")):(d="needs-migration",t.push("Will update schema.json metadata to set svelteMajor: 5."))}catch(A){d="unknown",t.push(`schema.json could not be parsed - please fix JSON before migration (${A?.message||"parse error"}).`)}else d="not-found",t.push("schema.json not found - cannot update metadata.");let f=n?"looks-new":"needs-migration",p="not-found",h=rXi();if(h.length>0){let A=!1,y=!1;for(let v of h){let b=wf.default.join(process.cwd(),v),x=ns.default.readFileSync(b,"utf8");/node-version:\s*['"]?16['"]?/.test(x)&&(A=!0),/node-version:\s*['"]?(18|20|22)['"]?/.test(x)&&(y=!0)}A?(p="needs-migration",t.push("Will update GitHub workflow files: node-version 16 -> 18.")):y?(p="looks-new",t.push("GitHub workflow files already use node-version 18 or higher.")):(p="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:c,packageJson:f,wrapper:l,schema:d,nodeVersion:p,canBuildAfter:!0,rollupFile:a,wrapperFile:u,pkg:r}}s(nXi,"analysePluginForSvelte5");async function iXi(){let t=await NXu();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=DXu(),r=MXu(),n=PXu(),i=BXu();return{pkgRes:n,schemaRes:r,rollupRes:t,wrapperRes:e,nodeVersionRes:i}}s(iXi,"runSvelte5Migration");var sXi=require("child_process");var LXu=require("find-free-port");function UXu(t){let e=[],r=[];for(let n of new Set(t.filter(Boolean)))if(xO.default.existsSync(n))try{xO.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(UXu,"cleanupPreSvelte5Backups");function oXi(){if(!xO.default.existsSync("package.json"))throw new Error("Please run in a plugin directory - must contain package.json");if(!xO.default.existsSync("schema.json"))throw new Error("Please run in a plugin directory - must contain schema.json")}s(oXi,"checkInPlugin");async function FXu(t){return xO.default.readdirSync(process.cwd()).find(r=>r===".git")?!1:(console.log(bi(`By default the plugin will be created in the directory "${t}"`)),console.log(bi("if you are already in an empty directory, such as a new Git repo, you can disable this functionality.")),d0("Create top level directory?"))}s(FXu,"askAboutTopLevel");async function qXu(t){let e=t.init||t;if(!e||!IJt.includes(e)){console.log(Xo("Please provide a type to init, either 'component', 'datasource' or 'automation'."));return}console.log(bi("Lets get some details about your new plugin:"));let r=await LB("Name",`budibase-${e}`);if(xO.default.existsSync(r)){console.log(Xo("Directory by plugin name already exists, pick a new name."));return}let n=await LB("Description",`An amazing Budibase ${e}!`),i=await LB("Version","1.0.0"),o=await FXu(r);console.log(bi("Retrieving project...")),await TGe(e,r),await zJi(e,r,n,i),console.log(bi("Installing dependencies...")),await Q9("install",(0,CGe.join)(process.cwd(),r)),o?console.log(bi(`Plugin created in directory "${r}"`)):(R3e(r,process.cwd()),console.log(bi("Plugin created in current directory."))),ufe(PC.PluginInit,{type:e,name:r,description:n,version:i})}s(qXu,"init");async function f6t(){oXi(),console.log(bi("Verifying plugin..."));let t=xO.default.readFileSync("schema.json","utf8"),e=xO.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,rLe.validate(i),{name:r,version:n}}catch(i){i&&i.message&&i.message.includes("not valid JSON")?console.log(Xo(`schema.json is not valid JSON: ${i.message}`)):console.log(Xo(`Invalid schema/package.json: ${i.message}`))}}s(f6t,"verify");async function QXu(){let t=await f6t();if(!t?.name)return;console.log(Ca("Verified!")),console.log(bi("Building plugin...")),await Q9("build");let e=(0,CGe.join)("dist",`${t.name}-${t.version}.tar.gz`);console.log(Ca(`Build complete - output in: ${e}`))}s(QXu,"build");async function jXu(){let t=await f6t();if(!t?.name)return;let e=(0,CGe.join)("dist",`${t.name}-${t.version}.tar.gz`);console.log(bi(`Watching - build in: ${e}`));try{await Q9("watch")}catch{console.log(Ca("Watch exited."))}}s(jXu,"watch");async function HXu(){let t=await LB("Directory to watch","./"),[e]=await LXu(1e4),r="admin";await hfe({init:"quick",single:!0,watchPluginDir:t,genUser:r,port:e,silent:!0}),await iH(),console.log(Ca("Configuration has been written to docker-compose.yaml")),console.log(Ca("Development environment started successfully - connect at: ")+bi(`http://localhost:${e}`)),console.log(Ca("Use the following credentials to login:")),console.log(Ca("Email: ")+bi(V3e)),console.log(Ca("Password: ")+bi(r))}s(HXu,"dev");async function GXu(t){oXi();let e=!!t?.yes,r=!!t?.force,n=!1;try{n=!!(0,sXi.execSync)("git status --porcelain",{encoding:"utf8"}).trim()}catch{}if(n&&!r&&(console.log(bi("Your git working directory is not clean. Commit or stash changes, or re-run with --force.")),!await d0("Proceed with migration anyway?"))){console.log(bi("Migration aborted."));return}console.log(bi("Analyzing plugin for Svelte 5 migration..."));let i=await nXi();console.log(bi("Proposed changes:"));for(let u of i.report)console.log(bi(" - "+u));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 d0("Apply these changes now?")){console.log(bi("Migration aborted by user."));return}console.log(bi("Applying migrations..."));let a=await iXi();if(a.rollupRes?.message?.includes("Failed to retrieve canonical rollup.config.mjs from skeleton")){console.log(Xo(a.rollupRes.message));return}if(a.pkgRes?.message&&console.log(bi(a.pkgRes.message)),a.schemaRes?.message&&console.log(bi(a.schemaRes.message)),a.rollupRes?.message&&console.log(bi(a.rollupRes.message)),a.wrapperRes?.message&&console.log(bi(a.wrapperRes.message)),console.log(bi("Installing updated dependencies...")),await Q9("install"),console.log(bi("Re-verifying plugin...")),!(await f6t())?.name){console.log(Xo("Verification failed after migration."));return}console.log(bi("Attempting build..."));try{await Q9("build");let u=UXu(o.filter(l=>!!l));console.log(Ca("Migration completed. Your plugin was migrated to Svelte 5 and built successfully.")),u.deleted.length&&console.log(bi(`Removed ${u.deleted.length} pre-svelte5 backup file(s): ${u.deleted.join(", ")}`)),u.failed.length&&console.log(bi(`Failed to remove ${u.failed.length} pre-svelte5 backup file(s): ${u.failed.map(l=>`${l.path} (${l.error})`).join(", ")}`))}catch(u){console.log(Xo(`Build failed after migration. Please review the errors above. ${u?.message||""}`))}}s(GXu,"migrateSvelte5");var aXi=new l0("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.",qXu).addSubOption("--build","Build your plugin, this will verify and produce a final tarball for your project.",QXu).addSubOption("--watch","Automatically build any changes to your plugin.",jXu).addSubOption("--dev","Run a development environment which automatically watches the current directory.",HXu).addSubOption("--migrate-svelte5","Migrate this plugin to the Svelte 5-compatible Budibase plugin format.",GXu,[{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 cXi(){return[$Zt,_Zt,vYi,aXi]}s(cXi,"getCommands");var lXi=require("commander");xd();var uXi="3.32.5";async function $Xu(){let t=new lXi.Command().addHelpCommand("help",iK("Help with Budibase commands.")).helpOption(!1).version(uXi);for(let e of cXi())e.configure(t);await t.parseAsync(process.argv)}s($Xu,"init");var zXu=["exit","SIGINT","SIGUSR1","SIGUSR2","uncaughtException"];zXu.forEach(t=>{process.on(t,e=>{e&&!isNaN(e)||e&&(console.error(Xo("Failed to run CLI command - please report with the following message:")),console.error(Xo(e)))})});$Xu().catch(t=>{console.error("Unexpected error - ",t)});
1502
+ `),{changed:!0,before:o,after:c,message:"Updated schema.json metadata to include svelteMajor: 5."}}s(MXu,"migrateSchemaJson");async function nXi(){let t=[],e=ns.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=JJi(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=XJi(),c="unknown";if(a){let A=ns.default.readFileSync(a,"utf8");ZJi(A)?(c="looks-new",t.push(`Rollup config ${a} already looks Svelte 5-ready.`)):(c="needs-migration",t.push("Will write Rollup 4 / Svelte 5 config and rename to rollup.config.mjs."))}else c="unknown",t.push("No rollup config found - will create rollup.config.mjs.");let u=tXi(),l="not-found";u?ns.default.readFileSync(u,"utf8").includes("<svelte:boundary>")?(l="looks-new",t.push(`${u} already uses <svelte:boundary>.`)):(l="needs-migration",t.push(`Will update ${u} to use <svelte:boundary>, $$restProps, and error UI.`)):t.push("No wrapper.svelte found - skipping wrapper migration.");let d="unknown";if(ns.default.existsSync("schema.json"))try{let A=ns.default.readFileSync("schema.json","utf8"),y=JSON.parse(A);(y&&typeof y.metadata=="object"&&!Array.isArray(y.metadata)?y.metadata:{}).svelteMajor===5?(d="looks-new",t.push("schema.json metadata already declares svelteMajor: 5.")):(d="needs-migration",t.push("Will update schema.json metadata to set svelteMajor: 5."))}catch(A){d="unknown",t.push(`schema.json could not be parsed - please fix JSON before migration (${A?.message||"parse error"}).`)}else d="not-found",t.push("schema.json not found - cannot update metadata.");let f=n?"looks-new":"needs-migration",p="not-found",h=rXi();if(h.length>0){let A=!1,y=!1;for(let v of h){let b=wf.default.join(process.cwd(),v),x=ns.default.readFileSync(b,"utf8");/node-version:\s*['"]?16['"]?/.test(x)&&(A=!0),/node-version:\s*['"]?(18|20|22)['"]?/.test(x)&&(y=!0)}A?(p="needs-migration",t.push("Will update GitHub workflow files: node-version 16 -> 18.")):y?(p="looks-new",t.push("GitHub workflow files already use node-version 18 or higher.")):(p="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:c,packageJson:f,wrapper:l,schema:d,nodeVersion:p,canBuildAfter:!0,rollupFile:a,wrapperFile:u,pkg:r}}s(nXi,"analysePluginForSvelte5");async function iXi(){let t=await NXu();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=DXu(),r=MXu(),n=PXu(),i=BXu();return{pkgRes:n,schemaRes:r,rollupRes:t,wrapperRes:e,nodeVersionRes:i}}s(iXi,"runSvelte5Migration");var sXi=require("child_process");var LXu=require("find-free-port");function UXu(t){let e=[],r=[];for(let n of new Set(t.filter(Boolean)))if(xO.default.existsSync(n))try{xO.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(UXu,"cleanupPreSvelte5Backups");function oXi(){if(!xO.default.existsSync("package.json"))throw new Error("Please run in a plugin directory - must contain package.json");if(!xO.default.existsSync("schema.json"))throw new Error("Please run in a plugin directory - must contain schema.json")}s(oXi,"checkInPlugin");async function FXu(t){return xO.default.readdirSync(process.cwd()).find(r=>r===".git")?!1:(console.log(bi(`By default the plugin will be created in the directory "${t}"`)),console.log(bi("if you are already in an empty directory, such as a new Git repo, you can disable this functionality.")),d0("Create top level directory?"))}s(FXu,"askAboutTopLevel");async function qXu(t){let e=t.init||t;if(!e||!IJt.includes(e)){console.log(Xo("Please provide a type to init, either 'component', 'datasource' or 'automation'."));return}console.log(bi("Lets get some details about your new plugin:"));let r=await LB("Name",`budibase-${e}`);if(xO.default.existsSync(r)){console.log(Xo("Directory by plugin name already exists, pick a new name."));return}let n=await LB("Description",`An amazing Budibase ${e}!`),i=await LB("Version","1.0.0"),o=await FXu(r);console.log(bi("Retrieving project...")),await TGe(e,r),await zJi(e,r,n,i),console.log(bi("Installing dependencies...")),await Q9("install",(0,CGe.join)(process.cwd(),r)),o?console.log(bi(`Plugin created in directory "${r}"`)):(R3e(r,process.cwd()),console.log(bi("Plugin created in current directory."))),ufe(PC.PluginInit,{type:e,name:r,description:n,version:i})}s(qXu,"init");async function f6t(){oXi(),console.log(bi("Verifying plugin..."));let t=xO.default.readFileSync("schema.json","utf8"),e=xO.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,rLe.validate(i),{name:r,version:n}}catch(i){i&&i.message&&i.message.includes("not valid JSON")?console.log(Xo(`schema.json is not valid JSON: ${i.message}`)):console.log(Xo(`Invalid schema/package.json: ${i.message}`))}}s(f6t,"verify");async function QXu(){let t=await f6t();if(!t?.name)return;console.log(Ca("Verified!")),console.log(bi("Building plugin...")),await Q9("build");let e=(0,CGe.join)("dist",`${t.name}-${t.version}.tar.gz`);console.log(Ca(`Build complete - output in: ${e}`))}s(QXu,"build");async function jXu(){let t=await f6t();if(!t?.name)return;let e=(0,CGe.join)("dist",`${t.name}-${t.version}.tar.gz`);console.log(bi(`Watching - build in: ${e}`));try{await Q9("watch")}catch{console.log(Ca("Watch exited."))}}s(jXu,"watch");async function HXu(){let t=await LB("Directory to watch","./"),[e]=await LXu(1e4),r="admin";await hfe({init:"quick",single:!0,watchPluginDir:t,genUser:r,port:e,silent:!0}),await iH(),console.log(Ca("Configuration has been written to docker-compose.yaml")),console.log(Ca("Development environment started successfully - connect at: ")+bi(`http://localhost:${e}`)),console.log(Ca("Use the following credentials to login:")),console.log(Ca("Email: ")+bi(V3e)),console.log(Ca("Password: ")+bi(r))}s(HXu,"dev");async function GXu(t){oXi();let e=!!t?.yes,r=!!t?.force,n=!1;try{n=!!(0,sXi.execSync)("git status --porcelain",{encoding:"utf8"}).trim()}catch{}if(n&&!r&&(console.log(bi("Your git working directory is not clean. Commit or stash changes, or re-run with --force.")),!await d0("Proceed with migration anyway?"))){console.log(bi("Migration aborted."));return}console.log(bi("Analyzing plugin for Svelte 5 migration..."));let i=await nXi();console.log(bi("Proposed changes:"));for(let u of i.report)console.log(bi(" - "+u));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 d0("Apply these changes now?")){console.log(bi("Migration aborted by user."));return}console.log(bi("Applying migrations..."));let a=await iXi();if(a.rollupRes?.message?.includes("Failed to retrieve canonical rollup.config.mjs from skeleton")){console.log(Xo(a.rollupRes.message));return}if(a.pkgRes?.message&&console.log(bi(a.pkgRes.message)),a.schemaRes?.message&&console.log(bi(a.schemaRes.message)),a.rollupRes?.message&&console.log(bi(a.rollupRes.message)),a.wrapperRes?.message&&console.log(bi(a.wrapperRes.message)),console.log(bi("Installing updated dependencies...")),await Q9("install"),console.log(bi("Re-verifying plugin...")),!(await f6t())?.name){console.log(Xo("Verification failed after migration."));return}console.log(bi("Attempting build..."));try{await Q9("build");let u=UXu(o.filter(l=>!!l));console.log(Ca("Migration completed. Your plugin was migrated to Svelte 5 and built successfully.")),u.deleted.length&&console.log(bi(`Removed ${u.deleted.length} pre-svelte5 backup file(s): ${u.deleted.join(", ")}`)),u.failed.length&&console.log(bi(`Failed to remove ${u.failed.length} pre-svelte5 backup file(s): ${u.failed.map(l=>`${l.path} (${l.error})`).join(", ")}`))}catch(u){console.log(Xo(`Build failed after migration. Please review the errors above. ${u?.message||""}`))}}s(GXu,"migrateSvelte5");var aXi=new l0("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.",qXu).addSubOption("--build","Build your plugin, this will verify and produce a final tarball for your project.",QXu).addSubOption("--watch","Automatically build any changes to your plugin.",jXu).addSubOption("--dev","Run a development environment which automatically watches the current directory.",HXu).addSubOption("--migrate-svelte5","Migrate this plugin to the Svelte 5-compatible Budibase plugin format.",GXu,[{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 cXi(){return[$Zt,_Zt,vYi,aXi]}s(cXi,"getCommands");var lXi=require("commander");xd();var uXi="3.33.0";async function $Xu(){let t=new lXi.Command().addHelpCommand("help",iK("Help with Budibase commands.")).helpOption(!1).version(uXi);for(let e of cXi())e.configure(t);await t.parseAsync(process.argv)}s($Xu,"init");var zXu=["exit","SIGINT","SIGUSR1","SIGUSR2","uncaughtException"];zXu.forEach(t=>{process.on(t,e=>{e&&!isNaN(e)||e&&(console.error(Xo("Failed to run CLI command - please report with the following message:")),console.error(Xo(e)))})});$Xu().catch(t=>{console.error("Unexpected error - ",t)});
1503
1503
  /*! Bundled license information:
1504
1504
 
1505
1505
  lodash/lodash.js: