@budibase/cli 3.19.1 → 3.19.2
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 +2 -2
- package/dist/index.js.map +2 -2
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -1383,7 +1383,7 @@ $1`)};Uce.parseAttributes=s(function(t){return Object.keys(t).map(function(r){va
|
|
|
1383
1383
|
if (doc._id.startsWith("devinfo") && doc.apiKey) {
|
|
1384
1384
|
emit(doc.apiKey, doc.userId)
|
|
1385
1385
|
}
|
|
1386
|
-
}`;await WSe(e,t,"by_api_key")},"createApiKeyView");async function Lmt(e,t,r,n,i){try{return await r.query(`database/${e}`,t)}catch(o){let a=o&&o.name==="not_found",c=o&&o.status===404;if(a||c)return await pfa(r,e),await n(),Lmt(e,t,r,n,i);if(o.status===409)return Lmt(e,t,r,n,i);throw o}}s(Lmt,"queryViewRaw");var _fa=s(async(e,t,r,n,i)=>{let c=(await Lmt(e,t,r,n,i)).rows.map(u=>t.include_docs?u.doc:u.value);return i?.arrayResponse?c:c.length<=1?c[0]:c},"queryView");var yfa={by_email2:hfa,by_api_key:gfa,by_app:mfa},KSe=s(async(e,t,r,n)=>{r||(r=_h());let i=yfa[e];return _fa(e,t,r,i,n)},"queryGlobalView");Ir();var bfa=at(require("pouchdb"));var jmn=at(require("node-fetch"));Ir();var Umt=O3.removeKeyNumbering;function wq(e){return e==null||e===""}s(wq,"isEmpty");var Umn=class e{static{s(this,"QueryBuilder")}#r;#s;#e;#i;#n;#a;#c;#t;#o;#d;#u;#l=!1;#f;static{this.maxLimit=200}constructor(t,r,n){this.#r=t,this.#s=r,this.#e={allOr:!1,onEmptyFilter:"all",string:{},fuzzy:{},range:{},equal:{},notEqual:{},empty:{},notEmpty:{},oneOf:{},contains:{},notContains:{},containsAny:{},...n},this.#i=50,this.#c="ascending",this.#t="string",this.#o=!0}disableEscaping(){return this.#l=!0,this}setIndexBuilder(t){return this.#u=t,this}setVersion(t){return t!=null&&(this.#d=t),this}setTable(t){return this.#e.equal.tableId=t,this}setLimit(t){return t!=null&&(this.#i=t),this}setSort(t){return t!=null&&(this.#n=t),this}setSortOrder(t){return t!=null&&(this.#c=t),this}setSortType(t){return t!=null&&(this.#t=t),this}setBookmark(t){return t!=null&&(this.#a=t),this}setSkip(t){return this.#f=t,this}excludeDocs(){return this.#o=!1,this}includeDocs(){return this.#o=!0,this}addString(t,r){return this.#e.string[t]=r,this}addFuzzy(t,r){return this.#e.fuzzy[t]=r,this}addRange(t,r,n){return this.#e.range[t]={low:r,high:n},this}addEqual(t,r){return this.#e.equal[t]=r,this}addNotEqual(t,r){return this.#e.notEqual[t]=r,this}addEmpty(t,r){return this.#e.empty[t]=r,this}addNotEmpty(t,r){return this.#e.notEmpty[t]=r,this}addOneOf(t,r){return this.#e.oneOf[t]=r,this}addContains(t,r){return this.#e.contains[t]=r,this}addNotContains(t,r){return this.#e.notContains[t]=r,this}addContainsAny(t,r){return this.#e.containsAny[t]=r,this}setAllOr(){this.#e.allOr=!0}setOnEmptyFilter(t){this.#e.onEmptyFilter=t}handleSpaces(t){return this.#l?t:t.replace(/ /g,"_")}preprocess(t,{escape:r,lowercase:n,wrap:i,type:o}={}){let a=!!this.#d,c=typeof t;return t&&n&&(t=t.toLowerCase?t.toLowerCase():t),!this.#l&&r&&c==="string"&&(t=`${t}`.replace(/[ /#+\-&|!(){}\]^"~*?:\\]/g,"\\$&")),c==="string"&&!isNaN(t)&&!o?t=`"${t}"`:a&&i&&(t=c==="number"?t:`"${t}"`),t}isMultiCondition(){let t=0;for(let r of Object.values(this.#e))typeof r=="object"&&(t+=Object.keys(r).length);return t>1}compressFilters(t){let r={};for(let o of Object.keys(t)){let a=Umt(o);r[a]?r[a]=r[a].concat(t[o]):r[a]=t[o]}let n={},i=1;for(let[o,a]of Object.entries(r))n[`${i++}:${o}`]=a;return n}buildSearchQuery(){let t=this,r=this.#e&&this.#e.allOr,n=r?"":"*:*",i=!0,o={escape:!0,lowercase:!0,wrap:!0},a="";this.#e.equal.tableId&&(a=this.#e.equal.tableId,delete this.#e.equal.tableId);let c=s((g,b)=>wq(b)?null:`${g}:${t.preprocess(b,o)}`,"equal"),u=s((g,b,v="AND")=>{if(wq(b))return null;if(!Array.isArray(b))return`${g}:${b}`;let S=`${t.preprocess(b[0],{escape:!0})}`;for(let C=1;C<b.length;C++)S+=` ${v} ${t.preprocess(b[C],{escape:!0})}`;return`${g}:(${S})`},"contains"),l=s((g,b)=>wq(b)?null:(b=t.preprocess(b,{escape:!0,lowercase:!0,type:"fuzzy"}),`${g}:/.*${b}.*/`),"fuzzy"),f=s((g,b)=>{let v=r?"*:* AND ":"",S=r?"AND":void 0;return v+"NOT "+u(g,b,S)},"notContains"),d=s((g,b)=>u(g,b,"OR"),"containsAny"),p=s((g,b)=>{if(wq(b))return"*:*";if(!Array.isArray(b))if(typeof b=="string")b=b.split(",");else return"";let v=`${t.preprocess(b[0],o)}`;for(let S=1;S<b.length;S++)v+=` OR ${t.preprocess(b[S],o)}`;return`${g}:(${v})`},"oneOf");function h(g,b,v){let S="";for(let[C,R]of Object.entries(g)){C=Umt(C),C=t.preprocess(t.handleSpaces(C),{escape:!0});let N=b(C,R);if(N!=null){if(S.length>0||n.length>0){let A=v?.mode?v.mode:r?"OR":"AND";S+=` ${A} `}S+=N,(typeof R!="string"&&R!=null||typeof R=="string"&&R!==a&&R!=="")&&(i=!1)}}if(v?.returnBuilt)return S;n+=S}if(s(h,"build"),this.#e.string&&h(this.#e.string,(g,b)=>wq(b)?null:(b=t.preprocess(b,{escape:!0,lowercase:!0,type:"string"}),`${g}:${b}*`)),this.#e.range&&h(this.#e.range,(g,b)=>{if(wq(b)||b.low==null||b.low===""||b.high==null||b.high==="")return null;let v=t.preprocess(b.low,o),S=t.preprocess(b.high,o);return`${g}:[${v} TO ${S}]`}),this.#e.fuzzy&&h(this.#e.fuzzy,l),this.#e.equal&&h(this.#e.equal,c),this.#e.notEqual&&h(this.#e.notEqual,(g,b)=>wq(b)?null:typeof b=="boolean"?`(*:* AND !${g}:${b})`:`!${g}:${t.preprocess(b,o)}`),this.#e.empty&&h(this.#e.empty,g=>(i=!1,`(*:* -${g}:["" TO *])`)),this.#e.notEmpty&&h(this.#e.notEmpty,g=>(i=!1,`${g}:["" TO *]`)),this.#e.oneOf&&h(this.#e.oneOf,p),this.#e.contains&&h(this.#e.contains,u),this.#e.notContains&&h(this.compressFilters(this.#e.notContains),f),this.#e.containsAny&&h(this.#e.containsAny,d),a&&(n=this.isMultiCondition()?`(${n})`:n,r=!1,h({tableId:a},c)),i){if(this.#e.onEmptyFilter==="none")return"";if(this.#e?.allOr)return n.replace("()","(*:*)")}return n}buildSearchBody(){let t={q:this.buildSearchQuery(),limit:Math.min(this.#i,e.maxLimit),include_docs:this.#o};if(this.#a&&(t.bookmark=this.#a),this.#n){let r=this.#c==="descending"?"-":"",n=`<${this.#t}>`;t.sort=`${r}${this.handleSpaces(this.#n)}${n}`}return t}async run(){return this.#f&&await this.#h(this.#f),await this.#p()}async#h(t){let r=this.#o,n=this.#i;this.excludeDocs();let i=t,o=0;do{let a=Math.min(e.maxLimit,i);this.setLimit(a);let{bookmark:c,rows:u}=await this.#p();this.setBookmark(c),o=u.length,i-=u.length}while(i>0&&o>0);this.#o=r,this.#i=n}async#p(){let{url:t,cookie:r}=xI(),n=`${t}/${this.#r}/_design/database/_search/${this.#s}`,i=this.buildSearchBody();try{return await Fmn(n,i,r)}catch(o){if(o.status===404&&this.#u)return await this.#u(),await Fmn(n,i,r);throw o}}};async function Fmn(e,t,r){let n=await(0,jmn.default)(e,{body:JSON.stringify(t),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(Fmn,"runQuery");Ir();var fte={};Co(fte,{addTenantToUrl:()=>vfa,getTenantDB:()=>$mn,getTenantIDFromCtx:()=>Fmt,isUserInAppTenant:()=>Sfa});function $mn(e){return l0(CZ(e))}s($mn,"getTenantDB");Ir();function vfa(e){let t=eo();if(w2()){let r=e.indexOf("?")===-1?"?":"&";e+=`${r}tenantId=${t}`}return e}s(vfa,"addTenantToUrl");var Sfa=s((e,t)=>{let r;return t?r=t.tenantId||cp:r=eo(),(z$(e)||cp)===r},"isUserInAppTenant"),wfa=Object.values(TK),Fmt=s((e,t)=>{if(!w2())return cp;t.allowNoTenant===void 0&&(t.allowNoTenant=!1),t.includeStrategies||(t.includeStrategies=wfa),t.excludeStrategies||(t.excludeStrategies=[]);let r=s(n=>{if(t.excludeStrategies?.includes(n))return!1;if(t.includeStrategies?.includes(n))return!0},"isAllowed");if(r("user")){let n=e.user?.tenantId;if(n)return n}if(r("header")){let n=e.request.headers["x-budibase-tenant-id"];if(n)return n}if(r("query")){let n=e.request.query.tenantId;if(n)return n}if(r("subdomain")){let n;try{n=new URL(yct()).host.split(":")[0]}catch(o){if(o.code!=="ERR_INVALID_URL")throw o}let i=e.host;if(n&&i.includes(n)){let o=i.substring(0,i.indexOf(`.${n}`));if(o)return o}}if(r("path")){let n=e.matched.find(a=>!!a.paramNames.find(c=>c.name==="tenantId")),i=e.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}}t.allowNoTenant||e.throw(403,"Tenant id not set")},"getTenantIDFromCtx");var pOl="app"+Fs;var Afa="/builder",hOl=`${Afa}/workspace/`;function Hmn(e){return new Promise(t=>setTimeout(t,e))}s(Hmn,"timeout");function Gmn(e){return!!NGt[e]}s(Gmn,"isAudited");var YSe={milliseconds:1,seconds:1e3,minutes:6e4,hours:36e5,days:864e5},Ah=class e{constructor(t){this.ms=t}static{s(this,"Duration")}to(t){return this.ms/YSe[t]}toMs(){return this.ms}toSeconds(){return this.to("seconds")}static convert(t,r,n){return n*YSe[t]/YSe[r]}static from(t,r){return new e(r*YSe[t])}static fromSeconds(t){return e.from("seconds",t)}static fromMinutes(t){return e.from("minutes",t)}static fromHours(t){return e.from("hours",t)}static fromDays(t){return e.from("days",t)}static fromMilliseconds(t){return e.from("milliseconds",t)}};function xfa(e){let t="",r=-1,n,i,o=e.opts?.repeat;return o&&(i=o.endDate?new Date(o.endDate).getTime():Date.now(),n=o.tz,"cron"in o?t=o.cron:r=o.every),{id:e.id.toString(),name:"",key:e.id.toString(),tz:n,endDate:i,cron:t,every:r,next:0}}s(xfa,"jobToJobInformation");var jmt=class{static{s(this,"InMemoryQueue")}constructor(t,r){this._name=t,this._opts=r,this._messages=[],this._emitter=new zmn.default.EventEmitter,this._runCount=0,this._addCount=0,this._queuedJobIds=new Set,this._attempts=r?.defaultJobOptions?.attempts||1}async process(t,r){r=typeof t=="number"?r:t,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((d,p)=>{d?l(d):u(p)},"done"))})}s(i,"execute");let o=this._attempts;async function a(u,l=0){try{return await u}catch(f){if(l++,l<o&&!n._isDiscarded)return await ox.wait(100*l),await a(i(),l);throw f}}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(t,r){if(typeof t=="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 t!="object")throw"Queue only supports carrying JSON.";i&&this._queuedJobIds.add(i);let o=US(),a=s(()=>{let u={id:o,timestamp:Date.now(),queue:this,data:t,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 f=s((p,h)=>{p.id===o&&(this._emitter.off("error",f),this._emitter.off("completed",d),l(h))},"errorHandler"),d=s((p,h)=>{p.id===o&&(this._emitter.off("error",f),this._emitter.off("completed",d),u(h))},"completedHandler");this._emitter.on("error",f),this._emitter.on("completed",d)})}}async close(){}async removeRepeatableByKey(t){for(let[r,n]of this._messages.entries())if(n.id===t){this._messages.splice(r,1),this._emitter.emit("removed",n);return}}async removeJobs(t){}async clean(){return[]}async getJob(t){for(let r of this._messages)if(r.id===t)return r;return null}manualTrigger(t){for(let r of this._messages)if(r.id===t){this._emitter.emit("message",{...r,manualTrigger:!0});return}throw new Error(`Job with id ${t} not found`)}on(t,r){return this._emitter.on(t,r),this}off(t,r){return this._emitter.off(t,r),this}async count(){return this._messages.length}async getCompletedCount(){return this._runCount}async getRepeatableJobs(){return this._messages.filter(t=>t.opts?.repeat!=null).map(t=>xfa(t))}async whenCurrentJobsFinished(){do await Hmn(50);while(this.hasRunningJobs())}hasRunningJobs(){return this._addCount>this._runCount}},Vmn=jmt;var Zmt=at(require("bull"));function Wmn(e,t,r){Rfa(e,t),r&&Cfa(e,r)}s(Wmn,"addListeners");function Cfa(e,t){e.on("stalled",async r=>{if(t)await t(r);else if(r.opts.repeat){let n=r.id,i=await e.getRepeatableJobs();for(let o of i)o.id===n&&await e.removeRepeatableByKey(o.key);console.log(`jobId=${n} disabled`)}})}s(Cfa,"handleStalled");function Jb(e,t,r={},n={}){let i=`[BULL] ${e}=${t}`,o=r.error,a={_logKey:"bull",eventType:e,event:t,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(Jb,"getLogParams");var Ofa={automationQueue:"automation-event",appBackupQueue:"app-backup-event",auditLogQueue:"audit-log-event",systemEventQueue:"system-event",appMigration:"app-migration",docWritethroughQueue:"doc-writethrough",devRevertProcessorQueue:"dev-revert-event"};function Rfa(e,t){let r=Ofa[t];function n(i,o){let a=i.data.event?.appId;if(a)return bct(a,o);o()}s(n,"doInJobContext"),e.on("stalled",async i=>{await n(i,()=>{console.error(...Jb(r,"stalled",{job:i}))})}).on("error",i=>{console.error(...Jb(r,"error",{error:i}))}),process.env.NODE_DEBUG?.includes("bull")&&e.on("waiting",i=>{console.info(...Jb(r,"waiting",{jobId:i}))}).on("active",async i=>{await n(i,()=>{console.info(...Jb(r,"active",{job:i}))})}).on("progress",async(i,o)=>{await n(i,()=>{console.info(...Jb(r,"progress",{job:i},{progress:o}))})}).on("completed",async(i,o)=>{await n(i,()=>{console.info(...Jb(r,"completed",{job:i},{result:o}))})}).on("failed",async(i,o)=>{await n(i,()=>{console.error(...Jb(r,"failed",{job:i,error:o}))})}).on("paused",()=>{console.info(...Jb(r,"paused"))}).on("resumed",()=>{console.info(...Jb(r,"resumed"))}).on("cleaned",(i,o)=>{console.info(...Jb(r,"cleaned",{},{length:i.length,type:o}))}).on("drained",()=>{console.info(...Jb(r,"drained"))}).on("removed",i=>{console.info(...Jb(r,"removed",{job:i}))})}s(Rfa,"logging");var Ifa=[];function Kmn(e,t){let r=setInterval(e,t);return Ifa.push(r),r}s(Kmn,"set");var eO=at(Qx()),pte=at(vgn());var pda=Ah.fromMinutes(5).toMs(),hda=Ah.fromSeconds(30).toMs(),egt=Ah.fromSeconds(60).toMs(),Tgn=[],Sgn;async function wgn(){for(let e of Tgn)await e.clean(egt,"completed"),await e.clean(egt,"failed")}s(wgn,"cleanup");async function mda(e,t,r){let n=performance.now();try{let i=await t();return eO.default.dogstatsd.increment(`${e}.success`,1,r),i}catch(i){throw eO.default.dogstatsd.increment(`${e}.error`,1,r),i}finally{let i=performance.now()-n;eO.default.dogstatsd.distribution(`${e}.duration.ms`,i,r),eO.default.dogstatsd.increment(e,1,r)}}s(mda,"withMetrics");function Agn(e){return{"job.opts.attempts":e.attempts,"job.opts.backoff":e.backoff,"job.opts.delay":e.delay,"job.opts.jobId":e.jobId,"job.opts.lifo":e.lifo,"job.opts.preventParsingData":e.preventParsingData,"job.opts.priority":e.priority,"job.opts.removeOnComplete":e.removeOnComplete,"job.opts.removeOnFail":e.removeOnFail,"job.opts.repeat":e.repeat,"job.opts.stackTraceLimit":e.stackTraceLimit,"job.opts.timeout":e.timeout}}s(Agn,"jobOptsTags");function gda(e){return{"job.id":e.id,"job.attemptsMade":e.attemptsMade,"job.timestamp":e.timestamp,"job.data.sizeBytes":(0,pte.default)(e.data),...Agn(e.opts||{})}}s(gda,"jobTags");var xq=class{static{s(this,"BudibaseQueue")}constructor(t,r={}){this.opts=r,this.jobQueue=t,this.queue=this.initQueue()}get name(){return this.queue.name}initQueue(){let r={redis:N3(),settings:{maxStalledCount:this.opts.maxStalledCount?this.opts.maxStalledCount:0,lockDuration:pda,lockRenewTime:hda}};this.opts.jobOptions&&(r.defaultJobOptions=this.opts.jobOptions);let n;return ft.isTest()?process.env.BULL_TEST_REDIS_PORT&&!isNaN(+process.env.BULL_TEST_REDIS_PORT)?n=new Zmt.default(this.jobQueue,{...r,redis:{host:"localhost",port:+process.env.BULL_TEST_REDIS_PORT}}):n=new Vmn(this.jobQueue,r):n=new Zmt.default(this.jobQueue,r),Wmn(n,this.jobQueue,this.opts.removeStalledCb),Tgn.push(n),!Sgn&&!ft.isTest()&&(Sgn=Kmn(wgn,egt),wgn().catch(i=>{console.error(`Unable to cleanup ${this.jobQueue} initially - ${i}`)})),n}getBullQueue(){return this.queue}process(...t){let r,n;t.length===2?(r=t[0],n=t[1]):n=t[0];let i=s(async(a,c)=>{await eO.default.trace("queue.process",async u=>{if(a.data._parentSpanContext){let l=a.data._parentSpanContext,f={traceId:l.traceId,spanId:l.spanId,toTraceId:()=>l.traceId,toSpanId:()=>l.spanId,toTraceparent:()=>""};u.addLink(f)}u.addTags({"queue.name":this.jobQueue,...gda(a)}),this.opts.jobTags&&u.addTags(this.opts.jobTags(a.data)),eO.default.dogstatsd.distribution("queue.process.sizeBytes",(0,pte.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(t,r){return await eO.default.trace("queue.add",async n=>(n.addTags({"queue.name":this.jobQueue,"job.data.sizeBytes":(0,pte.default)(t),...Agn(r||{})}),this.opts.jobTags&&n.addTags(this.opts.jobTags(t)),t._parentSpanContext={traceId:n.context().toTraceId(),spanId:n.context().toSpanId()},eO.default.dogstatsd.distribution("queue.add.sizeBytes",(0,pte.default)(t),this.metricTags()),await this.withMetrics("queue.add",()=>this.queue.add(t,r))))}withMetrics(t,r){return mda(t,r,this.metricTags())}metricTags(){return{queueName:this.jobQueue}}close(t){return this.queue.close(t)}whenCurrentJobsFinished(){return this.queue.whenCurrentJobsFinished()}};var twe={};Co(twe,{getId:()=>rgt,setHeader:()=>wda});var Ogn=ewe(),wda=s(e=>{let t=Ogn.getId();t&&(e["x-budibase-correlation-id"]=t)},"setHeader");function rgt(){return Ogn.getId()}s(rgt,"getId");var qIe=at(Pyn()),yWn=at(Xbt()),gCt=at(Qx()),bWn=at(Lhe());var mWn=at(require("path")),gWn=at(QTn());var LIe={};Co(LIe,{ObjectStore:()=>kE,ObjectStoreBuckets:()=>Udc,SIGNED_FILE_PREFIX:()=>nCt,bucketTTLConfig:()=>OIe,budibaseTempDir:()=>yU,client3rdPartyLibrary:()=>kpc,clientLibraryCDNUrl:()=>Npc,clientLibraryPath:()=>oWn,clientLibraryUrl:()=>Ppc,createBucketIfNotExists:()=>qne,deleteFile:()=>epc,deleteFiles:()=>tpc,deleteFolder:()=>Y9n,downloadTarball:()=>npc,downloadTarballDirect:()=>rpc,enrichPWAImages:()=>Dpc,enrichPluginURLs:()=>Lpc,extractBucketAndPath:()=>Jxt,getAppFileUrl:()=>cWn,getClientCacheKey:()=>aWn,getGlobalFileS3Key:()=>uWn,getGlobalFileUrl:()=>Mpc,getObjectMetadata:()=>ipc,getPluginIconKey:()=>dWn,getPluginJSKey:()=>fWn,getPluginS3Dir:()=>hWn,getPresignedUrl:()=>hP,getReadStream:()=>RIe,listAllObjects:()=>K9n,objectExists:()=>sCt,processAutomationAttachment:()=>jdc,processObjectStoreAttachment:()=>B9n,retrieve:()=>W9n,retrieveDirectory:()=>Zdc,retrieveToTmp:()=>Jdc,sanitizeBucket:()=>tg,sanitizeKey:()=>af,streamUpload:()=>V9n,upload:()=>Xdc,uploadDirectory:()=>iCt});var kIe=at(rxt()),Zxt=at(LVn()),z9n=at(GVn());var pP=at(Qx()),lV=at(require("fs")),Mne=at(require("fs/promises")),eCt=at(require("node-fetch")),dP=require("path"),NIe=at(require("stream")),Lne=require("stream/promises"),tCt=at(P9n());j7();var rCt=at(require("zlib"));var D9n=at(require("fs")),M9n=require("os"),Dne=at(require("path")),L9n=at(require("stream"));var Udc={BACKUPS:ft.BACKUPS_BUCKET_NAME,APPS:ft.APPS_BUCKET_NAME,TEMPLATES:ft.TEMPLATES_BUCKET_NAME,GLOBAL:ft.GLOBAL_BUCKET_NAME,PLUGINS:ft.PLUGIN_BUCKET_NAME,TEMP:ft.TEMP_BUCKET_NAME},q9n=(0,Dne.join)((0,M9n.tmpdir)(),".budibase");try{D9n.default.mkdirSync(q9n)}catch(e){if(e.code!=="EEXIST")throw e}function yU(){return q9n}s(yU,"budibaseTempDir");var OIe=s((e,t)=>{let n={Rules:[{ID:`${e}-ExpireAfter${t}days`,Prefix:"",Status:"Enabled",Expiration:{Days:t}}]};return{Bucket:e,LifecycleConfiguration:n}},"bucketTTLConfig");async function Fdc(e){let t=await fetch(e.url);if(!t.ok||!t.body)throw new Error(`Unexpected response ${t.statusText}`);let r=Dne.default.basename(new URL(e.url).pathname);if(!t.body)throw new Error("No response received for attachment");return{filename:e.filename||r,content:L9n.default.Readable.fromWeb(t.body)}}s(Fdc,"processUrlAttachment");async function B9n(e){let t=Jxt(e.url);if(t===null)throw new Error("Invalid signed URL");let{bucket:r,path:n}=t,{stream:i}=await RIe(r,n),o=Dne.default.basename(n);return{bucket:r,path:n,filename:e.filename||o,content:i}}s(B9n,"processObjectStoreAttachment");async function jdc(e){return e.url?.startsWith("http://")||e.url?.startsWith("https://")?await Fdc(e):await B9n(e)}s(jdc,"processAutomationAttachment");var Kdc=G9n(),Ydc={bucketCreationPromises:{}},nCt="/files/signed",fP={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"},Qdc=[fP.html,fP.css,fP.js,fP.json];function af(e){return Kdc(tg(e)).replace(/\\/g,"/")}s(af,"sanitizeKey");function tg(e){return e.replace(new RegExp(bI,"g"),wM)}s(tg,"sanitizeBucket");function kE(e={presigning:!1}){let t={forcePathStyle:!0,credentials:{accessKeyId:ft.MINIO_ACCESS_KEY,secretAccessKey:ft.MINIO_SECRET_KEY},region:ft.AWS_REGION};return!ft.MINIO_ENABLED&&ft.AWS_SESSION_TOKEN&&(t.credentials={accessKeyId:ft.MINIO_ACCESS_KEY,secretAccessKey:ft.MINIO_SECRET_KEY,sessionToken:ft.AWS_SESSION_TOKEN}),ft.MINIO_URL&&(e.presigning&&ft.MINIO_ENABLED?t.endpoint="http://minio-service":t.endpoint=ft.MINIO_URL),new kIe.S3(t)}s(kE,"ObjectStore");async function qne(e,t){t=tg(t);try{return await e.headBucket({Bucket:t}),{created:!1,exists:!0}}catch(r){let n=r.statusCode||r.$response?.statusCode,i=Ydc.bucketCreationPromises,o=n===404,a=n===403;if(i[t])return await i[t],{created:!1,exists:!0};if(o||a){if(o)return i[t]=e.createBucket({Bucket:t}).catch(c=>{if(c.Code!=="BucketAlreadyOwnedByYou")throw c}),await i[t],delete i[t],{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(qne,"createBucketIfNotExists");async function Xdc({bucket:e,filename:t,path:r,type:n,metadata:i,body:o,ttl:a}){let c=t.split(".").pop(),u=r?(await Mne.default.open(r)).createReadStream():o,l=kE(),f=await qne(l,e);if(a&&f.created){let b=OIe(e,a);await l.putBucketLifecycleConfiguration(b)}let d=n,p=d||(c?fP[c.toLowerCase()]:fP.txt),h={Bucket:tg(e),Key:af(t),Body:u,ContentType:p};if(i&&typeof i=="object"){for(let b of Object.keys(i))(!i[b]||typeof i[b]!="string")&&delete i[b];h.Metadata=i}return new Zxt.Upload({client:l,params:h}).done()}s(Xdc,"upload");async function V9n({bucket:e,stream:t,filename:r,type:n,extra:i,ttl:o}){return await pP.default.trace("streamUpload",async a=>{if(a.addTags({bucketName:e,filename:r,type:n,ttl:o}),!t)throw new Error("Stream to upload is invalid/undefined");let c=r.split(".").pop(),u=kE(),l=await qne(u,e);if(a.addTags({bucketCreated:l.created,bucketExists:l.exists,extension:c}),o&&l.created){let S=OIe(e,o);await u.putBucketLifecycleConfiguration(S)}let f=n;f||(f=c?fP[c.toLowerCase()]:fP.txt),a.addTags({contentType:f});let d=tg(e),p=af(r),h={Bucket:d,Key:p,Body:t,ContentType:f,...i},b=await new Zxt.Upload({client:u,params:h}).done(),v=await u.headObject({Bucket:d,Key:p});return a.addTags({contentLength:v.ContentLength}),{...b,ContentLength:v.ContentLength}})}s(V9n,"streamUpload");async function W9n(e,t){return await pP.default.trace("retrieve",async r=>{r.addTags({bucketName:e,filepath:t});let n=kE(),i={Bucket:tg(e),Key:af(t)},o=await n.getObject(i);if(!o.Body)throw new Error("Unable to retrieve object");if(r.addTags({contentLength:o.ContentLength,contentType:o.ContentType}),Qdc.includes(o.ContentType))return r.addTags({string:!0}),o.Body.transformToString();{r.addTags({string:!1});let a=o.Body.transformToWebStream();return NIe.default.Readable.fromWeb(a)}})}s(W9n,"retrieve");async function*K9n(e,t){let r=kE(),n=s((a={})=>r.listObjectsV2({...a,Bucket:tg(e),Prefix:af(t)}),"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(K9n,"listAllObjects");async function hP(e,t,r=3600){let n=kE({presigning:!0}),i={Bucket:tg(e),Key:af(t)},o=await(0,z9n.getSignedUrl)(n,new kIe.GetObjectCommand(i),{expiresIn:r});if(ft.MINIO_ENABLED){let a=new URL(o),c=a.pathname,u=a.search;return`${nCt}${c}${u}`}else return o}s(hP,"getPresignedUrl");async function Jdc(e,t){return await pP.default.trace("retrieveToTmp",async r=>{r.addTags({bucketName:e,filepath:t}),e=tg(e),t=af(t);let n=await W9n(e,t),i=(0,dP.join)(yU(),TM());return r.addTags({outputPath:i}),n instanceof NIe.default.Readable?(r.addTags({stream:!0}),await(0,Lne.pipeline)(n,lV.default.createWriteStream(i))):(r.addTags({stream:!1}),lV.default.writeFileSync(i,n)),i})}s(Jdc,"retrieveToTmp");async function Zdc(e,t){return await pP.default.trace("retrieveDirectory",async r=>{r.addTags({bucketName:e,path:t});let n=(0,dP.join)(yU(),TM());await Mne.default.mkdir(n,{recursive:!0});let i=0;return await n3.parallelForeach(K9n(e,t),async o=>{i++,await pP.default.trace("retrieveDirectory.object",async a=>{let c=o.Key;a.addTags({filename:c});let{stream:u}=await RIe(e,c),l=c.split("/"),f=l.slice(0,l.length-1),d=(0,dP.join)(n,...f);l.length>1&&!lV.default.existsSync(d)&&await Mne.default.mkdir(d,{recursive:!0}),await(0,Lne.pipeline)(u,lV.default.createWriteStream((0,dP.join)(n,...l),{mode:420}))})},5),r.addTags({numObjects:i}),n})}s(Zdc,"retrieveDirectory");async function epc(e,t){let r=kE();await qne(r,e);let n={Bucket:e,Key:af(t)};return r.deleteObject(n)}s(epc,"deleteFile");async function tpc(e,t){let r=kE();await qne(r,e);let n={Bucket:e,Delete:{Objects:t.map(i=>({Key:af(i)}))}};return r.deleteObjects(n)}s(tpc,"deleteFiles");async function Y9n(e,t){e=tg(e),t=af(t);let r=kE(),n={Bucket:e,Prefix:t},i=await r.listObjects(n);if(i.Contents?.length===0)return;let o={Bucket:e,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 Y9n(e,t)}s(Y9n,"deleteFolder");async function iCt(e,t,r){return await pP.default.trace("uploadDirectory",async n=>{n.addTags({bucketName:e,localPath:t,bucketPath:r}),e=tg(e);let i=await Mne.default.readdir(t,{withFileTypes:!0});n.addTags({numFiles:i.length});for(let o of i){let a=af((0,dP.join)(r,o.name)),c=(0,dP.join)(t,o.name);o.isDirectory()?await iCt(e,c,a):await V9n({bucket:e,filename:a,stream:lV.default.createReadStream(c)})}return i})}s(iCt,"uploadDirectory");async function rpc(e,t,r={}){t=af(t);let n=await(0,eCt.default)(e,{headers:r});if(!n.ok)throw new Error(`unexpected response ${n.statusText}`);await(0,Lne.pipeline)(n.body,rCt.default.createUnzip(),tCt.default.extract(t))}s(rpc,"downloadTarballDirect");async function npc(e,t,r){t=tg(t),r=af(r);let n=await(0,eCt.default)(e);if(!n.ok)throw new Error(`unexpected response ${n.statusText}`);let i=(0,dP.join)(yU(),r);return await(0,Lne.pipeline)(n.body,rCt.default.createUnzip(),tCt.default.extract(i)),!ft.isTest()&&ft.SELF_HOSTED&&await iCt(t,i,r),i}s(npc,"downloadTarball");async function RIe(e,t){return await pP.default.trace("getReadStream",async r=>{e=tg(e),t=af(t),r.addTags({bucketName:e,path:t});let n=kE(),i={Bucket:e,Key:t},o=await n.getObject(i);if(!o.Body||!(o.Body instanceof NIe.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(RIe,"getReadStream");async function ipc(e,t){e=tg(e),t=af(t);let r=kE(),n={Bucket:e,Key:t};try{return await r.headObject(n)}catch{throw new Error("Unable to retrieve metadata from object")}}s(ipc,"getObjectMetadata");async function sCt(e,t){e=tg(e),t=af(t);let r=kE(),n={Bucket:e,Key:t};try{return await r.headObject(n),!0}catch(i){if((i.statusCode||i.$response?.statusCode)===404)return!1;throw i}}s(sCt,"objectExists");function Jxt(e){let t=e.split("?")[0],r=new RegExp(`^${nCt}/(?<bucket>[^/]+)/(?<path>.+)$`),n=t.match(r);if(n&&n.groups){let{bucket:i,path:o}=n.groups;return{bucket:i,path:o}}return null}s(Jxt,"extractBucketAndPath");Ir();var sWn=at(require("querystring"));var PIe=at(require("crypto"));var spc=require("posthog-node"),X9n=at(Qx());var J9n=at(I3());Ir();var Q9n;function Z9n(e){let t=e.split(",").map(n=>n.split(":")),r=[];for(let[n,...i]of t)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(Z9n,"parseEnvFlags");function opc(){return Z9n(ft.TENANT_FEATURE_FLAGS||"")}s(opc,"getEnvFlags");var oCt=class{constructor(t){this.flagSchema=t;this.setId=PIe.randomUUID()}static{s(this,"FlagSet")}defaults(){return(0,J9n.cloneDeep)(this.flagSchema)}isFlagName(t){return this.flagSchema[t]!==void 0}async isEnabled(t){return(await this.fetch())[t]}async fetch(){return await X9n.default.trace("features.fetch",async t=>{let r=Tct(this.setId);if(r)return t?.addTags({fromCache:!0}),r;let n={},i=this.defaults(),o=eo(),a=new Set;if(zEe())return i;for(let{tenantId:d,key:p,value:h}of opc())if(!(!d||d!=="*"&&d!==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=AI(),u=c?._id;if(!u){let d=vct();d&&(u=PIe.createHash("sha512").update(d).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,Q9n&&u){n.readFromPostHog=!0;let d=await cCt(),p={tenantId:l},h={tenant:{id:l}};d.config.createdVersion&&(h.tenant.createdVersion=d.config.createdVersion),d.createdAt&&(h.tenant.createdAt=`${d.createdAt}`);let g=await Q9n.getAllFlags(u,{personProperties:p,onlyEvaluateLocally:!0,groups:{tenant:l},groupProperties:h});for(let[b,v]of Object.entries(g))if(this.isFlagName(b)){if(typeof v!="boolean"){console.warn(`Invalid value for posthog flag "${b}": ${v}`);continue}if(!(i[b]===!0||a.has(b)))try{i[b]=v,n[`flags.${b}.source`]="posthog"}catch(S){console.warn(`Error parsing posthog flag "${b}": ${v}`,S)}}}let f=xct();for(let[d,p]of Object.entries(f))this.isFlagName(d)&&typeof p=="boolean"&&(i[d]=p,n[`flags.${d}.source`]="override");Act(this.setId,i);for(let[d,p]of Object.entries(i))n[`flags.${d}.value`]=p;return t?.addTags(n),i})}},apc=new oCt(Pzt);async function aCt(e){return await apc.isEnabled(e)}s(aCt,"isEnabled");var iWn=at(nWn());var MIe;function Rpc(){if(!ft.CLOUDFRONT_PRIVATE_KEY_64)throw new Error("CLOUDFRONT_PRIVATE_KEY_64 is not set");return MIe||(MIe=Buffer.from(ft.CLOUDFRONT_PRIVATE_KEY_64,"base64").toString("utf-8"),MIe)}s(Rpc,"getPrivateKey");var Ipc=s(()=>({keypairId:ft.CLOUDFRONT_PUBLIC_KEY_ID,privateKeyString:Rpc(),expireTime:new Date().getTime()+1e3*60*60*24}),"getCloudfrontSignParams"),fV=s(e=>{let t=hCt(e);return iWn.getSignedUrl(t,Ipc())},"getPresignedUrl"),hCt=s(e=>{let t="/";return e.startsWith("/")&&(t=""),`${ft.CLOUDFRONT_CDN}${t}${e}`},"getUrl");async function oWn(e){let t=`${af(e)}/budibase-client.js`,r=`${af(e)}/budibase-client.new.js`;return await aCt("USE_DYNAMIC_LOADING")&&await sCt(ft.APPS_BUCKET_NAME,r)?r:t}s(oWn,"clientLibraryPath");function kpc(e,t){return`${af(e)}/_dependencies/${t}`}s(kpc,"client3rdPartyLibrary");async function Npc(e,t){let r=await oWn(e);return ft.CLOUDFRONT_CDN?(t&&(r+=`?v=${t}`),hCt(r)):await hP(ft.APPS_BUCKET_NAME,r)}s(Npc,"clientLibraryCDNUrl");async function Ppc(e,t){return`/api/assets/client?${await aWn(e,t)}`}s(Ppc,"clientLibraryUrl");async function aWn(e,t){let r,n;try{r=eo()}finally{n={appId:e,version:t}}return r&&r!==cp&&(n.tenantId=r),n.dynamic=await aCt("USE_DYNAMIC_LOADING"),sWn.default.encode(n)}s(aWn,"getClientCacheKey");async function cWn(e){return ft.CLOUDFRONT_CDN?fV(e):await hP(ft.APPS_BUCKET_NAME,e)}s(cWn,"getAppFileUrl");async function Dpc(e){if(e.length===0)return[];try{return await Promise.all(e.map(async t=>({...t,src:await cWn(t.src),type:t.type||"image/png"})))}catch(t){return console.error("Error enriching PWA images:",t),e}}s(Dpc,"enrichPWAImages");var Mpc=s(async(e,t,r)=>{let n=uWn(e,t);return ft.CLOUDFRONT_CDN?(r&&(n=`${n}?etag=${r}`),fV(n)):await hP(ft.GLOBAL_BUCKET_NAME,n)},"getGlobalFileUrl"),uWn=s((e,t)=>{let r=`${e}/${t}`;return ft.MULTI_TENANCY&&(r=`${eo()}/${r}`),r},"getGlobalFileS3Key");async function Lpc(e){return!e||!e.length?[]:await Promise.all(e.map(async t=>{let r=await qpc(t),n=await Bpc(t);return{...t,jsUrl:r,iconUrl:n}}))}s(Lpc,"enrichPluginURLs");async function qpc(e){let t=fWn(e);return lWn(t)}s(qpc,"getPluginJSUrl");async function Bpc(e){let t=dWn(e);if(t)return lWn(t)}s(Bpc,"getPluginIconUrl");async function lWn(e){return ft.CLOUDFRONT_CDN?fV(e):await hP(ft.PLUGIN_BUCKET_NAME,e)}s(lWn,"getPluginUrl");function fWn(e){return pWn(e,"plugin.min.js")}s(fWn,"getPluginJSKey");function dWn(e){let t=e.iconUrl?"icon.svg":e.iconFileName;if(t)return pWn(e,t)}s(dWn,"getPluginIconKey");function pWn(e,t){return`${hWn(e.name)}/${t}`}s(pWn,"getPluginS3Key");function hWn(e){let t=`${e}`;return ft.MULTI_TENANCY&&(t=`${eo()}/${t}`),ft.CLOUDFRONT_CDN&&(t=`plugins/${t}`),t}s(hWn,"getPluginS3Dir");var Upc="budibase.log",Fpc="budibase-logs-history.txt",jpc=mWn.default.join(yU(),"systemlogs");function $pc(e){let t=/(\d+)([A-Za-z])/,r=e?.match(t);if(!r){console.warn("totalMaxSize does not have a valid value",{totalMaxSize:e});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($pc,"getSingleFileMaxSizeInfo");function _Wn(){let e=$pc(ft.ROLLING_LOG_MAX_SIZE);return gWn.createStream(Upc,{size:e?.size,path:jpc,maxFiles:e?.totalHistoryFiles||1,immutable:!0,history:Fpc,initialRotation:!1})}s(_Wn,"localFileDestination");function Gpc(e){return typeof e=="object"&&e!==null&&!(e instanceof Error)}s(Gpc,"isPlainObject");function zpc(e){return e instanceof Error}s(zpc,"isError");function Vpc(e){return typeof e=="string"}s(Vpc,"isMessage");var gP;if(!ft.DISABLE_PINO_LOGGER){let e=ft.LOG_LEVEL,t={level:e,formatters:{level:u=>({level:u.toUpperCase()}),bindings:()=>ft.SELF_HOSTED?{service:ft.SERVICE_NAME}:{}},timestamp:()=>`,"timestamp":"${new Date(Date.now()).toISOString()}"`},r=[];r.push(ft.isDev()?{stream:(0,yWn.default)({singleLine:!0}),level:e}:{stream:process.stdout,level:e}),ft.SELF_HOSTED&&r.push({stream:_Wn(),level:e}),gP=r.length?(0,qIe.default)(t,qIe.default.multistream(r)):(0,qIe.default)(t);let n=s(u=>{let l,f=[],d="";u.forEach(v=>{Vpc(v)&&(d=`${d} ${v}`.trimStart()),Gpc(v)&&f.push(v),zpc(v)&&(l=v)});let p=c(),h={};h={tenantId:i(),appId:o(),automationId:a(),identityId:p?._id,identityType:p?.type,correlationId:rgt()};let g=gCt.default.scope().active();g&&gCt.default.inject(g.context(),bWn.formats.LOG,h);let b={err:l,pid:process.pid,...h};if(f.length){let v={},S=0;for(let C=0;C<f.length;C++){let R=f[C],N=R._logKey;N?(delete R._logKey,b[N]=R):(v[S]=R,S++)}Object.keys(v).length&&(b.data=v)}return[b,d]},"getLogParams");console.log=(...u)=>{let[l,f]=n(u);gP?.info(l,f)},console.info=(...u)=>{let[l,f]=n(u);gP?.info(l,f)},console.warn=(...u)=>{let[l,f]=n(u);gP?.warn(l,f)},console.error=(...u)=>{let[l,f]=n(u);gP?.error(l,f)},console.trace=(...u)=>{let[l,f]=n(u);l.err||(l.err=new Error),gP?.trace(l,f)},console.debug=(...u)=>{let[l,f]=n(u);gP?.debug(l,f)};let i=s(()=>{let u;try{u=eo()}catch{}return u},"getTenantId"),o=s(()=>{let u;try{u=e_()}catch{}return u},"getAppId"),a=s(()=>{let u;try{u=Ect()}catch{}return u},"getAutomationId"),c=s(()=>{let u;try{u=AI()}catch{}return u},"getIdentity")}var _Ct=gP;function BT(e){let t=eo();return`${e}:${t}`}s(BT,"generateTenantKey");var dV=class{static{s(this,"BaseCache")}constructor(t=void 0){this.client=t}async getClient(){return this.client?this.client:await Lmn()}async keys(t){return(await this.getClient()).keys(t)}async exists(t,r={useTenancy:!0}){return t=r.useTenancy?BT(t):t,(await this.getClient()).exists(t)}async scan(t,r={useTenancy:!0}){return t=r.useTenancy?BT(t):t,(await this.getClient()).scan(t)}async get(t,r={useTenancy:!0}){return t=r.useTenancy?BT(t):t,(await this.getClient()).get(t)}async bulkGet(t,r={useTenancy:!0}){return t=r.useTenancy?t.map(i=>BT(i)):t,(await this.getClient()).bulkGet(t)}async store(t,r,n=null,i={useTenancy:!0}){t=i.useTenancy?BT(t):t,await(await this.getClient()).store(t,r,n)}async bulkStore(t,r=null,n={useTenancy:!0}){n.useTenancy&&(t=Object.entries(t).reduce((o,[a,c])=>(o[BT(a)]=c,o),{})),await(await this.getClient()).bulkStore(t,r)}async delete(t,r={useTenancy:!0}){return t=r.useTenancy?BT(t):t,(await this.getClient()).delete(t)}async bulkDelete(t,r={useTenancy:!0}){return t=r.useTenancy?t.map(i=>BT(i)):t,(await this.getClient()).bulkDelete(t)}async withCache(t,r=null,n,i={useTenancy:!0}){let o=await this.get(t,i);if(o)return o;try{let a=await n();return await this.store(t,a,r,i),a}catch(a){throw console.error("Error fetching before cache - ",a),a}}async withCacheWithDynamicTTL(t,r,n={useTenancy:!0}){let i=await this.get(t,n);if(i)return i;try{let o=await r(),{value:a,ttl:c}=o;return await this.store(t,a,c,{useTenancy:n.useTenancy}),a}catch(o){throw console.error("Error fetching before cache - ",o),o}}async bustCache(t){let r=await this.getClient();try{await r.delete(BT(t))}catch(n){throw console.error("Error busting cache - ",n),n}}async deleteIfValue(t,r,n={useTenancy:!0}){t=n.useTenancy?BT(t):t,await(await this.getClient()).deleteIfValue(t,r)}};var bCt=new dV,_P={CHECKLIST:"checklist",INSTALLATION:"installation",ANALYTICS_ENABLED:"analyticsEnabled",UNIQUE_TENANT_ID:"uniqueTenantId",EVENTS:"events",BACKFILL_METADATA:"backfillMetadata",EVENTS_RATE_LIMIT:"eventsRateLimit",OAUTH2_TOKEN:e=>`oauth2Token_${e}`};var ECt=s((...e)=>bCt.get(...e),"get"),BIe=s((...e)=>bCt.store(...e),"store");var UIe=s((...e)=>bCt.withCache(...e),"withCache");var a8l=Ah.fromDays(7).toSeconds();var f8l=Ah.fromHours(1).toSeconds();var EWn=at(require("node-fetch"));var Une=class{static{s(this,"API")}constructor(t){this.host=t}async apiCall(t,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";twe.setHeader(n.headers);let o={method:t,body:i?JSON.stringify(n.body):n.body,headers:n.headers,credentials:"include"};return await(0,EWn.default)(`${this.host}${r}`,o)}async post(t,r){return this.apiCall("POST",t,r)}async get(t,r){return this.apiCall("GET",t,r)}async patch(t,r){return this.apiCall("PATCH",t,r)}async del(t,r){return this.apiCall("DELETE",t,r)}async put(t,r){return this.apiCall("PUT",t,r)}};var C8l=new Une(ft.INTERNAL_ACCOUNT_PORTAL_URL),O8l=ft.SELF_HOSTED||ft.DISABLE_ACCOUNT_PORTAL;Ir();var TCt=s(async()=>ACt(),"enabled");Ir();var xWn=require("posthog-node");Ir();var Zpc=s(e=>e==="served:builder"||e==="served:app:preview"||e==="served:app","isRateLimited"),ehc=s(e=>e==="served:app:preview"||e==="served:app","isPerApp");var wWn={"served:app":"calendarDay","served:app:preview":"calendarDay","served:builder":"calendarDay"},TWn=s(async e=>{if(!Zpc(e))return!1;let t=await thc(e);if(t){let r=new Date(t.timestamp);switch(wWn[e]){case"calendarDay":return r.setDate(r.getDate()+1),r.setHours(0,0,0,0),Date.now()>r.getTime()?(await SWn(e,{timestamp:Date.now()}),!1):!0}}else return await SWn(e,{timestamp:Date.now()}),!1},"limited"),AWn=s(e=>{let t=`${_P.EVENTS_RATE_LIMIT}:${e}`;return ehc(e)&&(t=t+":"+e_()),t},"eventKey"),thc=s(async e=>{let t=AWn(e);return await ECt(t)},"readEvent"),SWn=s(async(e,t)=>{let r=AWn(e),n=wWn[e],i;switch(n){case"calendarDay":i=86400}await BIe(r,t,i)},"recordEvent");var nhc=["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"],jne=class{static{s(this,"PosthogProcessor")}constructor(t){if(!t)throw new Error("Posthog token is not defined");this.posthog=new xWn.PostHog(t)}async processEvent(t,r,n,i){if(nhc.includes(t)||await TWn(t))return;n=this.clearPIIProperties(n),n.version=ft.VERSION,n.service=ft.SERVICE,n.environment=r.environment,n.hosting=r.hosting;let o=e_();o&&(n.appId=o);let a={distinctId:r.id,event:t,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(t){return t.email&&delete t.email,t.audited&&delete t.audited,t}async identify(t,r){let n={distinctId:t.id,properties:t};r&&(n.timestamp=new Date(r)),this.posthog.identify(n)}async identifyGroup(t,r){let n={distinctId:t.id,groupType:t.type,groupKey:t.id,properties:t};r&&(n.timestamp=new Date(r)),this.posthog.groupIdentify(n)}async shutdown(){await this.posthog.shutdown()}};var CWn=jne;var ihc=["installation:version:upgraded","installation:version:downgraded"],shc=["installation","tenant"],$ne=class{static{s(this,"AnalyticsProcessor")}constructor(){ft.POSTHOG_TOKEN&&!ft.isTest()&&(this.posthog=new CWn(ft.POSTHOG_TOKEN))}async processEvent(t,r,n,i){!ihc.includes(t)&&!await TCt()||this.posthog&&await this.posthog.processEvent(t,r,n,i)}async identify(t,r){!shc.includes(t.type)&&!await TCt()||this.posthog&&await this.posthog.identify(t,r)}async identifyGroup(t,r){this.posthog&&await this.posthog.identifyGroup(t,r)}async shutdown(){this.posthog&&await this.posthog.shutdown()}};var CCt=ft.SELF_HOSTED&&!ft.isDev(),Hne=class{static{s(this,"LoggingProcessor")}async processEvent(t,r,n){CCt||console.log(`[audit] [identityType=${r.type}] ${t}`,n)}async identify(t){CCt||console.log("[audit] identified",t)}async identifyGroup(t){CCt||console.log("[audit] group identified",t)}async shutdown(){}};Ir();var Gne=class e{static{s(this,"AuditLogsProcessor")}static{this.auditLogsEnabled=!1}static init(t){e.auditLogsEnabled=!0;let r=t;return e.auditLogQueue=new xq("auditLogQueue",{jobTags:n=>({"event.name":n.event})}),e.auditLogQueue.process(async n=>{await vC(n.data.tenantId,async()=>{let i=n.data.properties;i.audited&&(i={...i,...i.audited},delete i.audited);let o={};ft.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(t,r,n,i){if(e.auditLogsEnabled&&Gmn(t)){let o=r.type==="user"?r.id:void 0;await e.auditLogQueue.add({event:t,properties:n,opts:{userId:o,timestamp:i,appId:e_(),hostInfo:r.hostInfo},tenantId:eo()})}}async identify(){}async identifyGroup(){}async shutdown(){await e.auditLogQueue?.close()}};var zne=class{constructor(t){this.initialised=!1;this.processors=[];this.processors=t}static{s(this,"Processor")}async processEvent(t,r,n,i){for(let o of this.processors)await o.processEvent(t,r,n,i)}async identify(t,r){for(let n of this.processors)n.identify&&await n.identify(t,r)}async identifyGroup(t,r){for(let n of this.processors)n.identifyGroup&&await n.identifyGroup(t,r)}async shutdown(){for(let t of this.processors)t.shutdown&&await t.shutdown()}};var ohc=new $ne,ahc=new Hne,chc=new Gne;var OCt=new zne([ohc,ahc,chc]);Ir();Ir();var o_c=at(WCt());Ir();var Wzl={"automation:created":e=>e.automationId,"automation:step:created":e=>e.stepId,"datasource:created":e=>e.datasourceId,"layout:created":e=>e.layoutId,"query:created":e=>e.queryId,"role:created":e=>e.roleId,"screen:created":e=>e.screenId,"table:created":e=>e.tableId,"view:created":e=>e.tableId,"view:calculation:created":e=>e.tableId,"view:filter:created":e=>e.tableId,"app:created":e=>e.appId,"app:published":e=>e.appId,"auth:sso:created":e=>e.type,"auth:sso:activated":e=>e.type,"user:created":e=>e.userId,"user:admin:assigned":e=>e.userId,"user:builder:assigned":e=>e.userId,"role:assigned":e=>`${e.roleId}-${e.userId}`};Ir();Ir();Ir();Ir();Ir();Ir();Ir();Ir();Ir();Ir();Ir();Ir();Ir();Ir();Ir();Ir();Ir();Ir();Ir();Ir();Ir();Ir();var mKl=!ft.SELF_HOSTED&&!ft.isDev();Ir();Ir();Ir();Ir();Ir();Ir();Ir();Ir();var v7n=kv.users.isBuilder,KCt=kv.users.isAdmin,qYl=kv.users.isGlobalBuilder,BYl=kv.users.isAdminOrBuilder,_7n=kv.users.hasAdminPermissions,eke=kv.users.hasBuilderPermissions,UYl=kv.users.hasAppBuilderPermissions;var XYl=ft.SESSION_EXPIRY_SECONDS?parseInt(ft.SESSION_EXPIRY_SECONDS):Ah.fromDays(7).toSeconds();Ir();var eQl=+(ft.PASSWORD_MIN_LENGTH||12),tQl=+(ft.PASSWORD_MAX_LENGTH||512);function I_c(e){return Array.isArray(e)?e.map(t=>{if(t)return delete t.password,t}):e&&(delete e.password,e)}s(I_c,"removeUserPassword");async function Zne(e,t){if(e==null)throw"Must supply an email address to view";let r=await KSe("by_email2",{key:e.toLowerCase(),include_docs:!0});if(Array.isArray(r))throw new Error(`Multiple users found with email address: ${e}`);let n=r;return t?.cleanup&&(n=I_c(n)),n}s(Zne,"getGlobalUserByEmail");Ir();Ir();var J_c=at(nQn());var OJl=Ah.fromSeconds(10).toMs();function iQn(e){return`config${Fs}${e}`}s(iQn,"generateConfigID");async function hOt(e){let t=_h();try{return await t.get(iQn(e))}catch(r){if(r.status===404)return;throw r}}s(hOt,"getConfig");async function cCt(){let e=await hOt("settings");return e||(e={_id:iQn("settings"),type:"settings",config:{}}),e.config.platformUrl=await sQn({tenantAware:!0,config:e.config}),e.config.analyticsEnabled=await ACt({config:e.config}),e}s(cCt,"getSettingsConfigDoc");async function sQn(e={tenantAware:!0}){let t=ft.PLATFORM_URL||"http://localhost:10000";if(!ft.SELF_HOSTED&&ft.MULTI_TENANCY&&e.tenantAware){let r=eo();t.includes("localhost:")||(t=t.replace("://",`://${r}.`))}else if(ft.SELF_HOSTED){let r=e?.config?e.config:(await hOt("settings"))?.config;r?.platformUrl&&(t=r.platformUrl)}return t}s(sQn,"getPlatformUrl");var ACt=s(async e=>{if(!ft.SELF_HOSTED)return!!ft.ENABLE_ANALYTICS;let t=await UIe(_P.ANALYTICS_ENABLED,86400,async()=>{let n=e?.config?e.config:(await hOt("settings"))?.config;if(n?.analyticsEnabled===!1)return!1;if(n?.analyticsEnabled===!0)return!0});if(t!==void 0)return t;let r=ft.ENABLE_ANALYTICS;return!(r===0||r===!1)},"analyticsEnabled");Ir();var rwc=at(I3()),nwc=at(vke()),iwc=at(WCt());var aZn={ADMIN:"ADMIN",POWER:"POWER",BASIC:"BASIC",PUBLIC:"PUBLIC"},qy={...aZn,BUILDER:"BUILDER"},swc={UUID:void 0,NAME:"name"};var TU=class{constructor(t,r,n,i){this.permissions={};this._id=t,this.name=r,this.uiMetadata=i,this.permissionId=n,this.version=swc.NAME}static{s(this,"Role")}addInheritance(t){return t&&typeof t=="string"?t=sZn(t):t&&Array.isArray(t)&&(t=t.map(sZn)),this.inherits=t,this}};var rrf={ADMIN:new TU(qy.ADMIN,qy.ADMIN,"admin",{displayName:"App admin",description:"Can do everything",color:"var(--spectrum-global-color-static-red-400)"}).addInheritance(qy.POWER),POWER:new TU(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 TU(qy.BASIC,qy.BASIC,"write",{displayName:"App user",description:"Any logged in user",color:"var(--spectrum-global-color-static-green-400)"}).addInheritance(qy.PUBLIC),PUBLIC:new TU(qy.PUBLIC,qy.PUBLIC,"public",{displayName:"Public user",description:"Accessible to anyone",color:"var(--spectrum-global-color-static-blue-400)"}),BUILDER:new TU(qy.BUILDER,qy.BUILDER,"admin",{displayName:"Builder user",description:"Users that can edit this app",color:"var(--spectrum-global-color-static-magenta-600)"})};function owc(e){return Object.values(aZn).includes(e)}s(owc,"isBuiltin");function sZn(e){return owc(e)?e:Bmn(e)}s(sZn,"prefixRoleIDNoBuiltin");Ir();var uwc=at(rM()),lwc=at(vke());Ir();var Zc=class{static{s(this,"PermissionImpl")}constructor(t,r){this.type=t,this.level=r}};var arf={PUBLIC:{_id:"public",name:"Public",permissions:[new Zc("webhook","execute")]},READ_ONLY:{_id:"read_only",name:"Read only",permissions:[new Zc("query","read"),new Zc("table","read"),new Zc("app","read")]},WRITE:{_id:"write",name:"Read/Write",permissions:[new Zc("query","write"),new Zc("table","write"),new Zc("automation","execute"),new Zc("legacy_view","read"),new Zc("app","read")]},POWER:{_id:"power",name:"Power",permissions:[new Zc("table","write"),new Zc("user","read"),new Zc("automation","execute"),new Zc("webhook","read"),new Zc("legacy_view","read"),new Zc("app","read")]},ADMIN:{_id:"admin",name:"Admin",permissions:[new Zc("table","admin"),new Zc("user","admin"),new Zc("automation","admin"),new Zc("webhook","read"),new Zc("query","admin"),new Zc("legacy_view","read"),new Zc("app","read")]}};var crf="builder",urf="creator",lrf="globalBuilder";var aie={};Co(aie,{authenticate:()=>hwc,options:()=>pwc});function FT(e,t,r){return e(r,null,{message:t})}s(FT,"authError");var jOt="Invalid credentials",dwc="This account has expired. Please reset your password",pwc={passReqToCallback:!0};async function hwc(e,t,r,n){if(!t)return FT(n,"Email Required");if(!r)return FT(n,"Password Required");let i=await Zne(t);return i==null?(console.info(`user=${t} could not be found`),FT(n,jOt)):i.status==="inactive"?(console.info(`user=${t} is inactive`,i),FT(n,jOt)):i.password?await rtr(r,i.password)?(delete i.password,n(null,i)):FT(n,jOt):(console.info(`user=${t} has no password set`,i),FT(n,dwc))}s(hwc,"authenticate");Ir();var Hnf=wRt().OAuth2Strategy;var iDc=at(require("node-fetch"));Ir();var Ilf=dui().Strategy;var Llf=wRt().OAuth2Strategy;Ir();var uDc=at(Qx());var lff=ft.SESSION_UPDATE_PERIOD?parseInt(ft.SESSION_UPDATE_PERIOD):60*1e3;Ir();var Q2c=wfi(),X2c=ewe();function J2c(){return{logger:_Ct,genReqId:X2c.getId,autoLogging:{ignore:e=>!!e.url?.includes("/health")},serializers:{req:e=>({method:e.method,url:e.url,correlationId:e.id}),res:e=>({status:e.statusCode})}}}s(J2c,"pinoSettings");function Z2c(){return ft.HTTP_LOGGING?Q2c(J2c()):(e,t)=>t()}s(Z2c,"getMiddleware");var eqc=Z2c();var ipf=ewe();Ir();var wBc=at(qNe());Ir();var YBc=ihi(),QBc=dhi().Strategy,vgf=phi();YBc.use(new QBc(aie.options,aie.authenticate));var aPe={};Co(aPe,{validate:()=>rUc});Ir();var Dr=at(qNe());var JBc=["Relational","Non-relational","Spreadsheet","Object store","Graph","API"];function nPt(e,t){let{error:r}=e.validate(t);if(r)throw r}s(nPt,"runJoi");function ZBc(e){let t=Dr.default.object({type:Dr.default.string().allow("component").required(),metadata:Dr.default.object().unknown(!0).required(),hash:Dr.default.string().optional(),version:Dr.default.string().optional(),schema:Dr.default.object({name:Dr.default.string().required(),settings:Dr.default.array().items(Dr.default.object().unknown(!0)).required()}).unknown(!0)});nPt(t,e)}s(ZBc,"validateComponent");function eUc(e){let t=Dr.default.object({type:Dr.default.string().allow(...Object.values(cje)).required(),required:Dr.default.boolean().required(),default:Dr.default.any(),display:Dr.default.string()}),r=Dr.default.object({type:Dr.default.string().allow(...Object.values(aje)),readable:Dr.default.boolean(),displayName:Dr.default.string(),fields:Dr.default.object().pattern(Dr.default.string(),t)}).required(),n=Dr.default.object({type:Dr.default.string().allow("datasource").required(),metadata:Dr.default.object().unknown(!0).required(),hash:Dr.default.string().optional(),version:Dr.default.string().optional(),schema:Dr.default.object({docs:Dr.default.string(),plus:Dr.default.boolean().optional(),isSQL:Dr.default.boolean().optional(),auth:Dr.default.object({type:Dr.default.string().required()}).optional(),features:Dr.default.object(Object.fromEntries(Object.values(uje).map(i=>[i,Dr.default.boolean().optional()]))).optional(),relationships:Dr.default.boolean().optional(),description:Dr.default.string().required(),friendlyName:Dr.default.string().required(),type:Dr.default.string().allow(...JBc),datasource:Dr.default.object().pattern(Dr.default.string(),t).required(),query:Dr.default.object().pattern(Dr.default.string(),r).unknown(!0).required(),extra:Dr.default.object().pattern(Dr.default.string(),Dr.default.object({type:Dr.default.string().required(),displayName:Dr.default.string().required(),required:Dr.default.boolean(),data:Dr.default.object()}))})});nPt(n,e)}s(eUc,"validateDatasource");function tUc(e){let t=Dr.default.object().pattern(Dr.default.string(),{type:Dr.default.string().allow(...Object.values(mje)).required(),customType:Dr.default.string().allow(...Object.values(gje)),title:Dr.default.string(),description:Dr.default.string(),enum:Dr.default.array().items(Dr.default.string()),pretty:Dr.default.array().items(Dr.default.string())}),r=Dr.default.object({properties:t,required:Dr.default.array().items(Dr.default.string())}).concat(t).required(),n=Dr.default.object({type:Dr.default.string().allow("automation").required(),metadata:Dr.default.object().unknown(!0).required(),hash:Dr.default.string().optional(),version:Dr.default.string().optional(),schema:Dr.default.object({name:Dr.default.string().required(),tagline:Dr.default.string().required(),icon:Dr.default.string().required(),description:Dr.default.string().required(),type:Dr.default.string().allow("ACTION","LOGIC").required(),stepId:Dr.default.string().disallow(...DVt).required(),inputs:Dr.default.object().optional(),schema:Dr.default.object({inputs:r,outputs:r}).required()})});nPt(n,e)}s(tUc,"validateAutomation");function rUc(e){switch(e?.type){case"component":ZBc(e);break;case"datasource":eUc(e);break;case"automation":tUc(e);break;default:throw new Error(`Unknown plugin type - check schema.json: ${e.type}`)}}s(rUc,"validate");var hhi=at(require("dns"));var mhi=require("util");var Pgf=(0,mhi.promisify)(hhi.default.lookup);Ir();var t_f={"user:created":e=>e.userId,"user:updated":e=>e.userId,"user:deleted":e=>e.userId,"user:admin:assigned":e=>e.userId,"user:admin:removed":e=>e.userId,"user:builder:assigned":e=>e.userId,"user:builder:removed":e=>e.userId,"user_group:created":e=>e.groupId,"user_group:updated":e=>e.groupId,"user_group:deleted":e=>e.groupId,"user_group:user_added":e=>e.groupId,"user_group:users_deleted":e=>e.groupId,"user_group:permissions_edited":e=>e.groupId,"automation:deleted":e=>e.automationId,"datasource:deleted":e=>e.datasourceId,"table:deleted":e=>e.tableId,"query:deleted":e=>e.queryId,"workspace_app:deleted":e=>e.workspaceAppId,"view:deleted":e=>e.id};var nEu=at(L3t());var nLi=at(L3t());Ir();Ir();var iEu=at(I3());var ZPf={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 lvu=at(RLi());var n0u=at(s2i());var wMf={...fte,...Pu};var np=".temp",qW="couchdb",Ece="minio",a2i=[{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 s0u(e){let t=e.MAIN_PORT,r=e.COUCH_DB_USER,n=e.COUCH_DB_PASSWORD;return!e.COUCH_DB_URL&&t&&r&&n&&(e.COUCH_DB_URL=`http://${r}:${n}@localhost:${t}/db/`),e.MINIO_URL||(e.MINIO_URL=`http://localhost:${t}/`),e}s(s0u,"checkURLs");async function o0u(){console.log("*** NOTE: use a .env file to load these parameters repeatedly ***");let e={};for(let t of a2i)e[t.value]=await JD(t.value,t.default);return e}s(o0u,"askQuestions");function a0u(e){if(!e4t.default.existsSync(e))throw"Unable to file specified .env file";let t=e4t.default.readFileSync(e,"utf8"),r=s0u(o2i.default.parse(t));for(let n of a2i)if(!r[n.value])throw`Cannot find "${n.value}" property in .env file`;return r}s(a0u,"loadEnvironment");async function t4t(e=!0){let t;e!==!0?t=a0u(e):t=await o0u();for(let r of Object.keys(t))ft._set(r,t[r]);return t}s(t4t,"getConfig");async function r4t(e,t){let r=Xue();try{await r.replicate(e,t,{batch_size:1e3,batches_limit:5,style:"main_only"})}catch(n){throw new Error(`Replication failed - ${JSON.stringify(n)}`)}}s(r4t,"replication");function n4t(e){let t=Xue(e.COUCH_DB_URL),r=Xue();return{Remote:t,Local:r}}s(n4t,"getPouches");var dj=at(require("fs")),ND=require("path");ad();var u2i=at(require("node:stream"));var{ObjectStoreBuckets:c0u,ObjectStore:l2i,retrieve:u0u,uploadDirectory:l0u,createBucketIfNotExists:f0u}=LIe,c2i=Object.values(c0u);async function f2i(){let e=(0,ND.join)(np,Ece);dj.default.mkdirSync(e);let t=[],r=0;for(let o of c2i){let a=l2i();try{await a.headBucket({Bucket:o})}catch{r++;continue}let c=await a.listObjectsV2({Bucket:o});t=t.concat(c.Contents?.map(u=>({...u,bucket:o}))||[])}if(r===c2i.length)throw new Error("Unable to access MinIO/S3 - check environment config.");let n=KD(t.length),i=0;for(let o of t){let a=o.Key,c=await u0u(o.bucket,a),u=a.split("/");if(u.length>1){let l=u.slice(0,u.length-1);dj.default.mkdirSync((0,ND.join)(e,o.bucket,...l),{recursive:!0})}c instanceof u2i.Readable?c.pipe(dj.default.createWriteStream((0,ND.join)(e,o.bucket,...u))):dj.default.writeFileSync((0,ND.join)(e,o.bucket,...u),c),n.update(++i)}n.stop()}s(f2i,"exportObjects");async function d2i(){let e=(0,ND.join)(np,Ece),t=dj.default.readdirSync(e),r=0;t.forEach(o=>{let a=dj.default.readdirSync((0,ND.join)(e,o));r+=a.length});let n=KD(r),i=0;for(let o of t){let a=l2i();await f0u(a,o);let c=await l0u(o,(0,ND.join)(e,o),"/");i+=c.length,n.update(i)}n.stop()}s(d2i,"importObjects");var p2i=require("tar");async function h2i(e){let t=e.env||void 0,r=e.export||e;typeof r!="string"&&(r=`backup-${new Date().toISOString()}.tar.gz`);let n=await t4t(t),i=await A9t(n.COUCH_DB_URL),{Remote:o,Local:a}=n4t(n);hv.default.existsSync(np)&&hv.default.rmSync(np,{recursive:!0});let c=(0,pj.join)(np,qW);hv.default.mkdirSync(np),hv.default.mkdirSync(c),console.log("CouchDB Export");let u=KD(i.length),l=0;for(let f of i){u.update(++l);let d=new o(f),p=new a((0,pj.join)(np,qW,f));await r4t(d,p),await d.close(),await p.close()}u.stop(),console.log("S3 Export"),await f2i(),p2i.create({sync:!0,gzip:!0,file:r,cwd:(0,pj.join)(np)},[qW,Ece]),hv.default.rmSync(np,{recursive:!0}),console.log(`Generated export file - ${r}`)}s(h2i,"exportBackup");async function m2i(e){let t=e.env||void 0,r=e.import||e,n=await t4t(t);(!r||!hv.default.existsSync(r))&&(console.error("Cannot import without specifying a valid file to import"),process.exit(-1)),hv.default.existsSync(np)&&hv.default.rmSync(np,{recursive:!0}),hv.default.mkdirSync(np),p2i.extract({sync:!0,cwd:(0,pj.join)(np),file:r});let{Remote:i,Local:o}=n4t(n),a=hv.default.readdirSync((0,pj.join)(np,qW));console.log("CouchDB Import");let c=KD(a.length),u=0;for(let l of a){c.update(++u);let f=new i(l),d=new o((0,pj.join)(np,qW,l));await r4t(d,f),await f.close(),await d.close()}c.stop(),console.log("MinIO Import"),await d2i();try{await eje(`http://localhost:${n.MAIN_PORT}/api/system/restored`,"POST")}catch{}console.log("Import complete"),hv.default.rmSync(np,{recursive:!0})}s(m2i,"importBackup");async function d0u(e){if(e.import)return m2i(e);if(e.export)return h2i(e)}s(d0u,"pickOne");var g2i=new NS("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.",h2i).addSubOption("--import [filename]","Import a backup to a new Budibase installation.",m2i).addSubOption("--env [envFile]","Provide an environment variable file to configure the CLI.",d0u);iI();var U3i=at(require("node-fetch")),Nj=at(require("fs")),F3i=at(require("os")),ZUe=require("path");var D3i=at(b2i()),M3i=at(require("vm")),h$t=at(Dce());var FR=class{static{s(this,"Helper")}constructor(t,r,n=!0){this.name=t,this.fn=r,this.useValueFallback=n}register(t){t.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(t){t.unregisterHelper(this.name)}};var JUe=at(Dce());var r$t=at(Fji());var Xp=at(Dje()),Yji=at(jji()),Qji=at($ji()),Xji=at(Hji()),Jji=at(Gji()),Zji=at(zji()),e3i=at(Vji()),t3i=at(Wji()),r3i=at(Kji());Xp.default.extend(Yji.default);Xp.default.extend(Qji.default);Xp.default.extend(Xji.default);Xp.default.extend(Jji.default);Xp.default.extend(Zji.default);Xp.default.extend(e3i.default);Xp.default.extend(t3i.default);Xp.default.extend(r3i.default);function Oj(e){return typeof e=="object"&&typeof e.hash=="object"}s(Oj,"isOptions");function J6t(e){return typeof e=="object"&&typeof e.options=="object"&&typeof e.app=="object"}s(J6t,"isApp");function Z6t(e,t,r){if(Oj(e))return Z6t({},t,e);if(Oj(t))return Z6t(e,r,t);let n=J6t(e)?e.context:{};r=r||{},Oj(r)||(t=Object.assign({},t,r)),Oj(r)&&r.hash.root===!0&&(t=Object.assign({},r.data.root,t));let i=Object.assign({},n,t,r.hash);return J6t(e)||(i=Object.assign({},e,i)),J6t(e)&&e.view&&e.view.data&&(i=Object.assign({},i,e.view.data)),i}s(Z6t,"getContext");function e$t(e,t,r){return Oj(t)&&(r=t,t=i3i),Oj(e)&&(r=e,t=null,e=null),{str:e,pattern:t,options:r}}s(e$t,"initialConfig");function n3i(e,t,r){let n=e$t(e,t,r),i={lang:"en",date:new Date(n.str)},o=Z6t(this,i,{});Xp.default.locale(o.lang||o.language)}s(n3i,"setLocale");var i3i="MMMM DD, YYYY",VUe=s((e,t,r)=>{let n=e$t(e,t,r);if(n.str==null&&n.pattern==null)return Xp.default.locale("en"),(0,Xp.default)().format(i3i);n3i(n.str,n.pattern,n.options);let i=(0,Xp.default)(new Date(n.str));return typeof n.options=="string"?i=n.options.toLowerCase()==="utc"?i.utc():i.tz(n.options):i=i.tz(Xp.default.tz.guess()),n.pattern===""?i.toISOString():i.format(n.pattern)},"date"),Xce=s((e,t,r)=>{let n=e$t(e,t);n3i(n.str,n.pattern);let i=Xp.default.duration(n.str,n.pattern);return r&&!Oj(r)?i.format(r):i.humanize()},"duration"),t$t=s((e,t,r)=>(0,Xp.default)(new Date(e)).diff((0,Xp.default)(new Date(t)),r),"difference"),s3i=s(e=>{let t=t$t(e,new Date().toISOString(),"ms");return Xce(t,"ms")},"durationFromNow");var WUe=["#if","#unless","#each","#with","lookup","log","blockHelperMissing","each","helperMissing","if","unless","log","lookup","with"],o3i=["math","array","number","url","string","comparison","object","regex","uuid"],Rj={OBJECT:"object",ALL:"all",LITERAL:"literal",JS:"js",DECODE_ID:"decodeId"},ZW="%LITERAL%";var a3i={date:VUe,duration:Xce,difference:t$t,durationFromNow:s3i};function c3i(e){for(let[r,n]of Object.entries(a3i))e.registerHelper(r,n);let t=[];for(let r of o3i){let n=r$t.default[r]();for(let i of Object.entries(n)){let o=i[0];WUe.indexOf(o)!==-1||t.indexOf(o)!==-1||t.push(o)}r$t.default[r]({handlebars:e})}n$t=t.concat(Object.keys(a3i))}s(c3i,"registerAll");var n$t=[];function tCu(){return process.env.NODE_ENV==="jest"||process.env.JEST_WORKER_ID!=null&&process.env.JEST_WORKER_ID!=="null"}s(tCu,"isJest");function Ij(){return tCu()}s(Ij,"isTest");var u3i=s(()=>process&&process.env.BACKEND_JS,"isTestingBackendJS");var rCu=/^[A-Za-z0-9]+$/g,KUe=/{{([^{].*?)}}/g,i$t=/{?{{([^{].*?)}}}?/g,nCu=/{{{([^{].*?)}}}/g,Jce=s(()=>Ij()&&u3i()?!0:Ij()?!1:typeof window>"u","isBackendService"),l3i=s(()=>process&&!process.env.NO_JS,"isJSAllowed"),f3i=s(e=>{let t=e,r=new RegExp(KUe),n=new RegExp(nCu),i=t.match(n);i&&i.forEach(a=>{t=t.replace(a,"")});let o=t.match(r);return o||[]},"findDoubleHbsInstances"),d3i=s(e=>e.match(rCu),"isAlphaNumeric"),s$t=s((e,t,r,n)=>e.slice(0,t)+n+e.slice(t+r),"swapStrings");var o$t=s(e=>Buffer.from(e,"base64").toString("utf-8"),"atob"),p3i=s((e,t,r)=>{let n=t.map(o=>o.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")),i=new RegExp(`\\b(${n.join("|")})\\b`,"g");return e.replace(i,`${r}$1`)},"prefixStrings");function YUe(e){return`
|
|
1386
|
+
}`;await WSe(e,t,"by_api_key")},"createApiKeyView");async function Lmt(e,t,r,n,i){try{return await r.query(`database/${e}`,t)}catch(o){let a=o&&o.name==="not_found",c=o&&o.status===404;if(a||c)return await pfa(r,e),await n(),Lmt(e,t,r,n,i);if(o.status===409)return Lmt(e,t,r,n,i);throw o}}s(Lmt,"queryViewRaw");var _fa=s(async(e,t,r,n,i)=>{let c=(await Lmt(e,t,r,n,i)).rows.map(u=>t.include_docs?u.doc:u.value);return i?.arrayResponse?c:c.length<=1?c[0]:c},"queryView");var yfa={by_email2:hfa,by_api_key:gfa,by_app:mfa},KSe=s(async(e,t,r,n)=>{r||(r=_h());let i=yfa[e];return _fa(e,t,r,i,n)},"queryGlobalView");Ir();var bfa=at(require("pouchdb"));var jmn=at(require("node-fetch"));Ir();var Umt=O3.removeKeyNumbering;function wq(e){return e==null||e===""}s(wq,"isEmpty");var Umn=class e{static{s(this,"QueryBuilder")}#r;#s;#e;#i;#n;#a;#c;#t;#o;#d;#u;#l=!1;#f;static{this.maxLimit=200}constructor(t,r,n){this.#r=t,this.#s=r,this.#e={allOr:!1,onEmptyFilter:"all",string:{},fuzzy:{},range:{},equal:{},notEqual:{},empty:{},notEmpty:{},oneOf:{},contains:{},notContains:{},containsAny:{},...n},this.#i=50,this.#c="ascending",this.#t="string",this.#o=!0}disableEscaping(){return this.#l=!0,this}setIndexBuilder(t){return this.#u=t,this}setVersion(t){return t!=null&&(this.#d=t),this}setTable(t){return this.#e.equal.tableId=t,this}setLimit(t){return t!=null&&(this.#i=t),this}setSort(t){return t!=null&&(this.#n=t),this}setSortOrder(t){return t!=null&&(this.#c=t),this}setSortType(t){return t!=null&&(this.#t=t),this}setBookmark(t){return t!=null&&(this.#a=t),this}setSkip(t){return this.#f=t,this}excludeDocs(){return this.#o=!1,this}includeDocs(){return this.#o=!0,this}addString(t,r){return this.#e.string[t]=r,this}addFuzzy(t,r){return this.#e.fuzzy[t]=r,this}addRange(t,r,n){return this.#e.range[t]={low:r,high:n},this}addEqual(t,r){return this.#e.equal[t]=r,this}addNotEqual(t,r){return this.#e.notEqual[t]=r,this}addEmpty(t,r){return this.#e.empty[t]=r,this}addNotEmpty(t,r){return this.#e.notEmpty[t]=r,this}addOneOf(t,r){return this.#e.oneOf[t]=r,this}addContains(t,r){return this.#e.contains[t]=r,this}addNotContains(t,r){return this.#e.notContains[t]=r,this}addContainsAny(t,r){return this.#e.containsAny[t]=r,this}setAllOr(){this.#e.allOr=!0}setOnEmptyFilter(t){this.#e.onEmptyFilter=t}handleSpaces(t){return this.#l?t:t.replace(/ /g,"_")}preprocess(t,{escape:r,lowercase:n,wrap:i,type:o}={}){let a=!!this.#d,c=typeof t;return t&&n&&(t=t.toLowerCase?t.toLowerCase():t),!this.#l&&r&&c==="string"&&(t=`${t}`.replace(/[ /#+\-&|!(){}\]^"~*?:\\]/g,"\\$&")),c==="string"&&!isNaN(t)&&!o?t=`"${t}"`:a&&i&&(t=c==="number"?t:`"${t}"`),t}isMultiCondition(){let t=0;for(let r of Object.values(this.#e))typeof r=="object"&&(t+=Object.keys(r).length);return t>1}compressFilters(t){let r={};for(let o of Object.keys(t)){let a=Umt(o);r[a]?r[a]=r[a].concat(t[o]):r[a]=t[o]}let n={},i=1;for(let[o,a]of Object.entries(r))n[`${i++}:${o}`]=a;return n}buildSearchQuery(){let t=this,r=this.#e&&this.#e.allOr,n=r?"":"*:*",i=!0,o={escape:!0,lowercase:!0,wrap:!0},a="";this.#e.equal.tableId&&(a=this.#e.equal.tableId,delete this.#e.equal.tableId);let c=s((g,b)=>wq(b)?null:`${g}:${t.preprocess(b,o)}`,"equal"),u=s((g,b,v="AND")=>{if(wq(b))return null;if(!Array.isArray(b))return`${g}:${b}`;let S=`${t.preprocess(b[0],{escape:!0})}`;for(let C=1;C<b.length;C++)S+=` ${v} ${t.preprocess(b[C],{escape:!0})}`;return`${g}:(${S})`},"contains"),l=s((g,b)=>wq(b)?null:(b=t.preprocess(b,{escape:!0,lowercase:!0,type:"fuzzy"}),`${g}:/.*${b}.*/`),"fuzzy"),f=s((g,b)=>{let v=r?"*:* AND ":"",S=r?"AND":void 0;return v+"NOT "+u(g,b,S)},"notContains"),d=s((g,b)=>u(g,b,"OR"),"containsAny"),p=s((g,b)=>{if(wq(b))return"*:*";if(!Array.isArray(b))if(typeof b=="string")b=b.split(",");else return"";let v=`${t.preprocess(b[0],o)}`;for(let S=1;S<b.length;S++)v+=` OR ${t.preprocess(b[S],o)}`;return`${g}:(${v})`},"oneOf");function h(g,b,v){let S="";for(let[C,R]of Object.entries(g)){C=Umt(C),C=t.preprocess(t.handleSpaces(C),{escape:!0});let N=b(C,R);if(N!=null){if(S.length>0||n.length>0){let A=v?.mode?v.mode:r?"OR":"AND";S+=` ${A} `}S+=N,(typeof R!="string"&&R!=null||typeof R=="string"&&R!==a&&R!=="")&&(i=!1)}}if(v?.returnBuilt)return S;n+=S}if(s(h,"build"),this.#e.string&&h(this.#e.string,(g,b)=>wq(b)?null:(b=t.preprocess(b,{escape:!0,lowercase:!0,type:"string"}),`${g}:${b}*`)),this.#e.range&&h(this.#e.range,(g,b)=>{if(wq(b)||b.low==null||b.low===""||b.high==null||b.high==="")return null;let v=t.preprocess(b.low,o),S=t.preprocess(b.high,o);return`${g}:[${v} TO ${S}]`}),this.#e.fuzzy&&h(this.#e.fuzzy,l),this.#e.equal&&h(this.#e.equal,c),this.#e.notEqual&&h(this.#e.notEqual,(g,b)=>wq(b)?null:typeof b=="boolean"?`(*:* AND !${g}:${b})`:`!${g}:${t.preprocess(b,o)}`),this.#e.empty&&h(this.#e.empty,g=>(i=!1,`(*:* -${g}:["" TO *])`)),this.#e.notEmpty&&h(this.#e.notEmpty,g=>(i=!1,`${g}:["" TO *]`)),this.#e.oneOf&&h(this.#e.oneOf,p),this.#e.contains&&h(this.#e.contains,u),this.#e.notContains&&h(this.compressFilters(this.#e.notContains),f),this.#e.containsAny&&h(this.#e.containsAny,d),a&&(n=this.isMultiCondition()?`(${n})`:n,r=!1,h({tableId:a},c)),i){if(this.#e.onEmptyFilter==="none")return"";if(this.#e?.allOr)return n.replace("()","(*:*)")}return n}buildSearchBody(){let t={q:this.buildSearchQuery(),limit:Math.min(this.#i,e.maxLimit),include_docs:this.#o};if(this.#a&&(t.bookmark=this.#a),this.#n){let r=this.#c==="descending"?"-":"",n=`<${this.#t}>`;t.sort=`${r}${this.handleSpaces(this.#n)}${n}`}return t}async run(){return this.#f&&await this.#h(this.#f),await this.#p()}async#h(t){let r=this.#o,n=this.#i;this.excludeDocs();let i=t,o=0;do{let a=Math.min(e.maxLimit,i);this.setLimit(a);let{bookmark:c,rows:u}=await this.#p();this.setBookmark(c),o=u.length,i-=u.length}while(i>0&&o>0);this.#o=r,this.#i=n}async#p(){let{url:t,cookie:r}=xI(),n=`${t}/${this.#r}/_design/database/_search/${this.#s}`,i=this.buildSearchBody();try{return await Fmn(n,i,r)}catch(o){if(o.status===404&&this.#u)return await this.#u(),await Fmn(n,i,r);throw o}}};async function Fmn(e,t,r){let n=await(0,jmn.default)(e,{body:JSON.stringify(t),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(Fmn,"runQuery");Ir();var fte={};Co(fte,{addTenantToUrl:()=>vfa,getTenantDB:()=>$mn,getTenantIDFromCtx:()=>Fmt,isUserInAppTenant:()=>Sfa});function $mn(e){return l0(CZ(e))}s($mn,"getTenantDB");Ir();function vfa(e){let t=eo();if(w2()){let r=e.indexOf("?")===-1?"?":"&";e+=`${r}tenantId=${t}`}return e}s(vfa,"addTenantToUrl");var Sfa=s((e,t)=>{let r;return t?r=t.tenantId||cp:r=eo(),(z$(e)||cp)===r},"isUserInAppTenant"),wfa=Object.values(TK),Fmt=s((e,t)=>{if(!w2())return cp;t.allowNoTenant===void 0&&(t.allowNoTenant=!1),t.includeStrategies||(t.includeStrategies=wfa),t.excludeStrategies||(t.excludeStrategies=[]);let r=s(n=>{if(t.excludeStrategies?.includes(n))return!1;if(t.includeStrategies?.includes(n))return!0},"isAllowed");if(r("user")){let n=e.user?.tenantId;if(n)return n}if(r("header")){let n=e.request.headers["x-budibase-tenant-id"];if(n)return n}if(r("query")){let n=e.request.query.tenantId;if(n)return n}if(r("subdomain")){let n;try{n=new URL(yct()).host.split(":")[0]}catch(o){if(o.code!=="ERR_INVALID_URL")throw o}let i=e.host;if(n&&i.includes(n)){let o=i.substring(0,i.indexOf(`.${n}`));if(o)return o}}if(r("path")){let n=e.matched.find(a=>!!a.paramNames.find(c=>c.name==="tenantId")),i=e.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}}t.allowNoTenant||e.throw(403,"Tenant id not set")},"getTenantIDFromCtx");var pOl="app"+Fs;var Afa="/builder",hOl=`${Afa}/workspace/`;function Hmn(e){return new Promise(t=>setTimeout(t,e))}s(Hmn,"timeout");function Gmn(e){return!!NGt[e]}s(Gmn,"isAudited");var YSe={milliseconds:1,seconds:1e3,minutes:6e4,hours:36e5,days:864e5},Ah=class e{constructor(t){this.ms=t}static{s(this,"Duration")}to(t){return this.ms/YSe[t]}toMs(){return this.ms}toSeconds(){return this.to("seconds")}static convert(t,r,n){return n*YSe[t]/YSe[r]}static from(t,r){return new e(r*YSe[t])}static fromSeconds(t){return e.from("seconds",t)}static fromMinutes(t){return e.from("minutes",t)}static fromHours(t){return e.from("hours",t)}static fromDays(t){return e.from("days",t)}static fromMilliseconds(t){return e.from("milliseconds",t)}};function xfa(e){let t="",r=-1,n,i,o=e.opts?.repeat;return o&&(i=o.endDate?new Date(o.endDate).getTime():Date.now(),n=o.tz,"cron"in o?t=o.cron:r=o.every),{id:e.id.toString(),name:"",key:e.id.toString(),tz:n,endDate:i,cron:t,every:r,next:0}}s(xfa,"jobToJobInformation");var jmt=class{static{s(this,"InMemoryQueue")}constructor(t,r){this._name=t,this._opts=r,this._messages=[],this._emitter=new zmn.default.EventEmitter,this._runCount=0,this._addCount=0,this._queuedJobIds=new Set,this._attempts=r?.defaultJobOptions?.attempts||1}async process(t,r){r=typeof t=="number"?r:t,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((d,p)=>{d?l(d):u(p)},"done"))})}s(i,"execute");let o=this._attempts;async function a(u,l=0){try{return await u}catch(f){if(l++,l<o&&!n._isDiscarded)return await ox.wait(100*l),await a(i(),l);throw f}}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(t,r){if(typeof t=="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 t!="object")throw"Queue only supports carrying JSON.";i&&this._queuedJobIds.add(i);let o=US(),a=s(()=>{let u={id:o,timestamp:Date.now(),queue:this,data:t,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 f=s((p,h)=>{p.id===o&&(this._emitter.off("error",f),this._emitter.off("completed",d),l(h))},"errorHandler"),d=s((p,h)=>{p.id===o&&(this._emitter.off("error",f),this._emitter.off("completed",d),u(h))},"completedHandler");this._emitter.on("error",f),this._emitter.on("completed",d)})}}async close(){}async removeRepeatableByKey(t){for(let[r,n]of this._messages.entries())if(n.id===t){this._messages.splice(r,1),this._emitter.emit("removed",n);return}}async removeJobs(t){}async clean(){return[]}async getJob(t){for(let r of this._messages)if(r.id===t)return r;return null}manualTrigger(t){for(let r of this._messages)if(r.id===t){this._emitter.emit("message",{...r,manualTrigger:!0});return}throw new Error(`Job with id ${t} not found`)}on(t,r){return this._emitter.on(t,r),this}off(t,r){return this._emitter.off(t,r),this}async count(){return this._messages.length}async getCompletedCount(){return this._runCount}async getRepeatableJobs(){return this._messages.filter(t=>t.opts?.repeat!=null).map(t=>xfa(t))}async whenCurrentJobsFinished(){do await Hmn(50);while(this.hasRunningJobs())}hasRunningJobs(){return this._addCount>this._runCount}},Vmn=jmt;var Zmt=at(require("bull"));function Wmn(e,t,r){Rfa(e,t),r&&Cfa(e,r)}s(Wmn,"addListeners");function Cfa(e,t){e.on("stalled",async r=>{if(t)await t(r);else if(r.opts.repeat){let n=r.id,i=await e.getRepeatableJobs();for(let o of i)o.id===n&&await e.removeRepeatableByKey(o.key);console.log(`jobId=${n} disabled`)}})}s(Cfa,"handleStalled");function Jb(e,t,r={},n={}){let i=`[BULL] ${e}=${t}`,o=r.error,a={_logKey:"bull",eventType:e,event:t,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(Jb,"getLogParams");var Ofa={automationQueue:"automation-event",appBackupQueue:"app-backup-event",auditLogQueue:"audit-log-event",systemEventQueue:"system-event",appMigration:"app-migration",docWritethroughQueue:"doc-writethrough",devRevertProcessorQueue:"dev-revert-event"};function Rfa(e,t){let r=Ofa[t];function n(i,o){let a=i.data.event?.appId;if(a)return bct(a,o);o()}s(n,"doInJobContext"),e.on("stalled",async i=>{await n(i,()=>{console.error(...Jb(r,"stalled",{job:i}))})}).on("error",i=>{console.error(...Jb(r,"error",{error:i}))}),process.env.NODE_DEBUG?.includes("bull")&&e.on("waiting",i=>{console.info(...Jb(r,"waiting",{jobId:i}))}).on("active",async i=>{await n(i,()=>{console.info(...Jb(r,"active",{job:i}))})}).on("progress",async(i,o)=>{await n(i,()=>{console.info(...Jb(r,"progress",{job:i},{progress:o}))})}).on("completed",async(i,o)=>{await n(i,()=>{console.info(...Jb(r,"completed",{job:i},{result:o}))})}).on("failed",async(i,o)=>{await n(i,()=>{console.error(...Jb(r,"failed",{job:i,error:o}))})}).on("paused",()=>{console.info(...Jb(r,"paused"))}).on("resumed",()=>{console.info(...Jb(r,"resumed"))}).on("cleaned",(i,o)=>{console.info(...Jb(r,"cleaned",{},{length:i.length,type:o}))}).on("drained",()=>{console.info(...Jb(r,"drained"))}).on("removed",i=>{console.info(...Jb(r,"removed",{job:i}))})}s(Rfa,"logging");var Ifa=[];function Kmn(e,t){let r=setInterval(e,t);return Ifa.push(r),r}s(Kmn,"set");var eO=at(Qx()),pte=at(vgn());var pda=Ah.fromMinutes(5).toMs(),hda=Ah.fromSeconds(30).toMs(),egt=Ah.fromSeconds(60).toMs(),Tgn=[],Sgn;async function wgn(){for(let e of Tgn)await e.clean(egt,"completed"),await e.clean(egt,"failed")}s(wgn,"cleanup");async function mda(e,t,r){let n=performance.now();try{let i=await t();return eO.default.dogstatsd.increment(`${e}.success`,1,r),i}catch(i){throw eO.default.dogstatsd.increment(`${e}.error`,1,r),i}finally{let i=performance.now()-n;eO.default.dogstatsd.distribution(`${e}.duration.ms`,i,r),eO.default.dogstatsd.increment(e,1,r)}}s(mda,"withMetrics");function Agn(e){return{"job.opts.attempts":e.attempts,"job.opts.backoff":e.backoff,"job.opts.delay":e.delay,"job.opts.jobId":e.jobId,"job.opts.lifo":e.lifo,"job.opts.preventParsingData":e.preventParsingData,"job.opts.priority":e.priority,"job.opts.removeOnComplete":e.removeOnComplete,"job.opts.removeOnFail":e.removeOnFail,"job.opts.repeat":e.repeat,"job.opts.stackTraceLimit":e.stackTraceLimit,"job.opts.timeout":e.timeout}}s(Agn,"jobOptsTags");function gda(e){return{"job.id":e.id,"job.attemptsMade":e.attemptsMade,"job.timestamp":e.timestamp,"job.data.sizeBytes":(0,pte.default)(e.data),...Agn(e.opts||{})}}s(gda,"jobTags");var xq=class{static{s(this,"BudibaseQueue")}constructor(t,r={}){this.opts=r,this.jobQueue=t,this.queue=this.initQueue()}get name(){return this.queue.name}initQueue(){let r={redis:N3(),settings:{maxStalledCount:this.opts.maxStalledCount?this.opts.maxStalledCount:0,lockDuration:pda,lockRenewTime:hda}};this.opts.jobOptions&&(r.defaultJobOptions=this.opts.jobOptions);let n;return ft.isTest()?process.env.BULL_TEST_REDIS_PORT&&!isNaN(+process.env.BULL_TEST_REDIS_PORT)?n=new Zmt.default(this.jobQueue,{...r,redis:{host:"localhost",port:+process.env.BULL_TEST_REDIS_PORT}}):n=new Vmn(this.jobQueue,r):n=new Zmt.default(this.jobQueue,r),Wmn(n,this.jobQueue,this.opts.removeStalledCb),Tgn.push(n),!Sgn&&!ft.isTest()&&(Sgn=Kmn(wgn,egt),wgn().catch(i=>{console.error(`Unable to cleanup ${this.jobQueue} initially - ${i}`)})),n}getBullQueue(){return this.queue}process(...t){let r,n;t.length===2?(r=t[0],n=t[1]):n=t[0];let i=s(async(a,c)=>{await eO.default.trace("queue.process",async u=>{if(a.data._parentSpanContext){let l=a.data._parentSpanContext,f={traceId:l.traceId,spanId:l.spanId,toTraceId:()=>l.traceId,toSpanId:()=>l.spanId,toTraceparent:()=>""};u.addLink(f)}u.addTags({"queue.name":this.jobQueue,...gda(a)}),this.opts.jobTags&&u.addTags(this.opts.jobTags(a.data)),eO.default.dogstatsd.distribution("queue.process.sizeBytes",(0,pte.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(t,r){return await eO.default.trace("queue.add",async n=>(n.addTags({"queue.name":this.jobQueue,"job.data.sizeBytes":(0,pte.default)(t),...Agn(r||{})}),this.opts.jobTags&&n.addTags(this.opts.jobTags(t)),t._parentSpanContext={traceId:n.context().toTraceId(),spanId:n.context().toSpanId()},eO.default.dogstatsd.distribution("queue.add.sizeBytes",(0,pte.default)(t),this.metricTags()),await this.withMetrics("queue.add",()=>this.queue.add(t,r))))}withMetrics(t,r){return mda(t,r,this.metricTags())}metricTags(){return{queueName:this.jobQueue}}close(t){return this.queue.close(t)}whenCurrentJobsFinished(){return this.queue.whenCurrentJobsFinished()}};var twe={};Co(twe,{getId:()=>rgt,setHeader:()=>wda});var Ogn=ewe(),wda=s(e=>{let t=Ogn.getId();t&&(e["x-budibase-correlation-id"]=t)},"setHeader");function rgt(){return Ogn.getId()}s(rgt,"getId");var qIe=at(Pyn()),yWn=at(Xbt()),gCt=at(Qx()),bWn=at(Lhe());var mWn=at(require("path")),gWn=at(QTn());var LIe={};Co(LIe,{ObjectStore:()=>kE,ObjectStoreBuckets:()=>Udc,SIGNED_FILE_PREFIX:()=>nCt,bucketTTLConfig:()=>OIe,budibaseTempDir:()=>yU,client3rdPartyLibrary:()=>kpc,clientLibraryCDNUrl:()=>Npc,clientLibraryPath:()=>oWn,clientLibraryUrl:()=>Ppc,createBucketIfNotExists:()=>qne,deleteFile:()=>epc,deleteFiles:()=>tpc,deleteFolder:()=>Y9n,downloadTarball:()=>npc,downloadTarballDirect:()=>rpc,enrichPWAImages:()=>Dpc,enrichPluginURLs:()=>Lpc,extractBucketAndPath:()=>Jxt,getAppFileUrl:()=>cWn,getClientCacheKey:()=>aWn,getGlobalFileS3Key:()=>uWn,getGlobalFileUrl:()=>Mpc,getObjectMetadata:()=>ipc,getPluginIconKey:()=>dWn,getPluginJSKey:()=>fWn,getPluginS3Dir:()=>hWn,getPresignedUrl:()=>hP,getReadStream:()=>RIe,listAllObjects:()=>K9n,objectExists:()=>sCt,processAutomationAttachment:()=>jdc,processObjectStoreAttachment:()=>B9n,retrieve:()=>W9n,retrieveDirectory:()=>Zdc,retrieveToTmp:()=>Jdc,sanitizeBucket:()=>tg,sanitizeKey:()=>af,streamUpload:()=>V9n,upload:()=>Xdc,uploadDirectory:()=>iCt});var kIe=at(rxt()),Zxt=at(LVn()),z9n=at(GVn());var pP=at(Qx()),lV=at(require("fs")),Mne=at(require("fs/promises")),eCt=at(require("node-fetch")),dP=require("path"),NIe=at(require("stream")),Lne=require("stream/promises"),tCt=at(P9n());j7();var rCt=at(require("zlib"));var D9n=at(require("fs")),M9n=require("os"),Dne=at(require("path")),L9n=at(require("stream"));var Udc={BACKUPS:ft.BACKUPS_BUCKET_NAME,APPS:ft.APPS_BUCKET_NAME,TEMPLATES:ft.TEMPLATES_BUCKET_NAME,GLOBAL:ft.GLOBAL_BUCKET_NAME,PLUGINS:ft.PLUGIN_BUCKET_NAME,TEMP:ft.TEMP_BUCKET_NAME},q9n=(0,Dne.join)((0,M9n.tmpdir)(),".budibase");try{D9n.default.mkdirSync(q9n)}catch(e){if(e.code!=="EEXIST")throw e}function yU(){return q9n}s(yU,"budibaseTempDir");var OIe=s((e,t)=>{let n={Rules:[{ID:`${e}-ExpireAfter${t}days`,Prefix:"",Status:"Enabled",Expiration:{Days:t}}]};return{Bucket:e,LifecycleConfiguration:n}},"bucketTTLConfig");async function Fdc(e){let t=await fetch(e.url);if(!t.ok||!t.body)throw new Error(`Unexpected response ${t.statusText}`);let r=Dne.default.basename(new URL(e.url).pathname);if(!t.body)throw new Error("No response received for attachment");return{filename:e.filename||r,content:L9n.default.Readable.fromWeb(t.body)}}s(Fdc,"processUrlAttachment");async function B9n(e){let t=Jxt(e.url);if(t===null)throw new Error("Invalid signed URL");let{bucket:r,path:n}=t,{stream:i}=await RIe(r,n),o=Dne.default.basename(n);return{bucket:r,path:n,filename:e.filename||o,content:i}}s(B9n,"processObjectStoreAttachment");async function jdc(e){return e.url?.startsWith("http://")||e.url?.startsWith("https://")?await Fdc(e):await B9n(e)}s(jdc,"processAutomationAttachment");var Kdc=G9n(),Ydc={bucketCreationPromises:{}},nCt="/files/signed",fP={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"},Qdc=[fP.html,fP.css,fP.js,fP.json];function af(e){return Kdc(tg(e)).replace(/\\/g,"/")}s(af,"sanitizeKey");function tg(e){return e.replace(new RegExp(bI,"g"),wM)}s(tg,"sanitizeBucket");function kE(e={presigning:!1}){let t={forcePathStyle:!0,credentials:{accessKeyId:ft.MINIO_ACCESS_KEY,secretAccessKey:ft.MINIO_SECRET_KEY},region:ft.AWS_REGION};return!ft.MINIO_ENABLED&&ft.AWS_SESSION_TOKEN&&(t.credentials={accessKeyId:ft.MINIO_ACCESS_KEY,secretAccessKey:ft.MINIO_SECRET_KEY,sessionToken:ft.AWS_SESSION_TOKEN}),ft.MINIO_URL&&(e.presigning&&ft.MINIO_ENABLED?t.endpoint="http://minio-service":t.endpoint=ft.MINIO_URL),new kIe.S3(t)}s(kE,"ObjectStore");async function qne(e,t){t=tg(t);try{return await e.headBucket({Bucket:t}),{created:!1,exists:!0}}catch(r){let n=r.statusCode||r.$response?.statusCode,i=Ydc.bucketCreationPromises,o=n===404,a=n===403;if(i[t])return await i[t],{created:!1,exists:!0};if(o||a){if(o)return i[t]=e.createBucket({Bucket:t}).catch(c=>{if(c.Code!=="BucketAlreadyOwnedByYou")throw c}),await i[t],delete i[t],{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(qne,"createBucketIfNotExists");async function Xdc({bucket:e,filename:t,path:r,type:n,metadata:i,body:o,ttl:a}){let c=t.split(".").pop(),u=r?(await Mne.default.open(r)).createReadStream():o,l=kE(),f=await qne(l,e);if(a&&f.created){let b=OIe(e,a);await l.putBucketLifecycleConfiguration(b)}let d=n,p=d||(c?fP[c.toLowerCase()]:fP.txt),h={Bucket:tg(e),Key:af(t),Body:u,ContentType:p};if(i&&typeof i=="object"){for(let b of Object.keys(i))(!i[b]||typeof i[b]!="string")&&delete i[b];h.Metadata=i}return new Zxt.Upload({client:l,params:h}).done()}s(Xdc,"upload");async function V9n({bucket:e,stream:t,filename:r,type:n,extra:i,ttl:o}){return await pP.default.trace("streamUpload",async a=>{if(a.addTags({bucketName:e,filename:r,type:n,ttl:o}),!t)throw new Error("Stream to upload is invalid/undefined");let c=r.split(".").pop(),u=kE(),l=await qne(u,e);if(a.addTags({bucketCreated:l.created,bucketExists:l.exists,extension:c}),o&&l.created){let S=OIe(e,o);await u.putBucketLifecycleConfiguration(S)}let f=n;f||(f=c?fP[c.toLowerCase()]:fP.txt),a.addTags({contentType:f});let d=tg(e),p=af(r),h={Bucket:d,Key:p,Body:t,ContentType:f,...i},b=await new Zxt.Upload({client:u,params:h}).done(),v=await u.headObject({Bucket:d,Key:p});return a.addTags({contentLength:v.ContentLength}),{...b,ContentLength:v.ContentLength}})}s(V9n,"streamUpload");async function W9n(e,t){return await pP.default.trace("retrieve",async r=>{r.addTags({bucketName:e,filepath:t});let n=kE(),i={Bucket:tg(e),Key:af(t)},o=await n.getObject(i);if(!o.Body)throw new Error("Unable to retrieve object");if(r.addTags({contentLength:o.ContentLength,contentType:o.ContentType}),Qdc.includes(o.ContentType))return r.addTags({string:!0}),o.Body.transformToString();{r.addTags({string:!1});let a=o.Body.transformToWebStream();return NIe.default.Readable.fromWeb(a)}})}s(W9n,"retrieve");async function*K9n(e,t){let r=kE(),n=s((a={})=>r.listObjectsV2({...a,Bucket:tg(e),Prefix:af(t)}),"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(K9n,"listAllObjects");async function hP(e,t,r=3600){let n=kE({presigning:!0}),i={Bucket:tg(e),Key:af(t)},o=await(0,z9n.getSignedUrl)(n,new kIe.GetObjectCommand(i),{expiresIn:r});if(ft.MINIO_ENABLED){let a=new URL(o),c=a.pathname,u=a.search;return`${nCt}${c}${u}`}else return o}s(hP,"getPresignedUrl");async function Jdc(e,t){return await pP.default.trace("retrieveToTmp",async r=>{r.addTags({bucketName:e,filepath:t}),e=tg(e),t=af(t);let n=await W9n(e,t),i=(0,dP.join)(yU(),TM());return r.addTags({outputPath:i}),n instanceof NIe.default.Readable?(r.addTags({stream:!0}),await(0,Lne.pipeline)(n,lV.default.createWriteStream(i))):(r.addTags({stream:!1}),lV.default.writeFileSync(i,n)),i})}s(Jdc,"retrieveToTmp");async function Zdc(e,t,r){return await pP.default.trace("retrieveDirectory",async n=>{n.addTags({bucketName:e,path:t});let i=(0,dP.join)(yU(),TM());await Mne.default.mkdir(i,{recursive:!0});let o=0;return await n3.parallelForeach(K9n(e,t),async a=>{let{Key:c}=a;!c||r?.some(u=>u.test(c))||(o++,await pP.default.trace("retrieveDirectory.object",async u=>{let l=a.Key;u.addTags({filename:l});let{stream:f}=await RIe(e,l),d=l.split("/"),p=d.slice(0,d.length-1),h=(0,dP.join)(i,...p);d.length>1&&!lV.default.existsSync(h)&&await Mne.default.mkdir(h,{recursive:!0}),await(0,Lne.pipeline)(f,lV.default.createWriteStream((0,dP.join)(i,...d),{mode:420}))}))},5),n.addTags({numObjects:o}),i})}s(Zdc,"retrieveDirectory");async function epc(e,t){let r=kE();await qne(r,e);let n={Bucket:e,Key:af(t)};return r.deleteObject(n)}s(epc,"deleteFile");async function tpc(e,t){let r=kE();await qne(r,e);let n={Bucket:e,Delete:{Objects:t.map(i=>({Key:af(i)}))}};return r.deleteObjects(n)}s(tpc,"deleteFiles");async function Y9n(e,t){e=tg(e),t=af(t);let r=kE(),n={Bucket:e,Prefix:t},i=await r.listObjects(n);if(i.Contents?.length===0)return;let o={Bucket:e,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 Y9n(e,t)}s(Y9n,"deleteFolder");async function iCt(e,t,r){return await pP.default.trace("uploadDirectory",async n=>{n.addTags({bucketName:e,localPath:t,bucketPath:r}),e=tg(e);let i=await Mne.default.readdir(t,{withFileTypes:!0});n.addTags({numFiles:i.length});for(let o of i){let a=af((0,dP.join)(r,o.name)),c=(0,dP.join)(t,o.name);o.isDirectory()?await iCt(e,c,a):await V9n({bucket:e,filename:a,stream:lV.default.createReadStream(c)})}return i})}s(iCt,"uploadDirectory");async function rpc(e,t,r={}){t=af(t);let n=await(0,eCt.default)(e,{headers:r});if(!n.ok)throw new Error(`unexpected response ${n.statusText}`);await(0,Lne.pipeline)(n.body,rCt.default.createUnzip(),tCt.default.extract(t))}s(rpc,"downloadTarballDirect");async function npc(e,t,r){t=tg(t),r=af(r);let n=await(0,eCt.default)(e);if(!n.ok)throw new Error(`unexpected response ${n.statusText}`);let i=(0,dP.join)(yU(),r);return await(0,Lne.pipeline)(n.body,rCt.default.createUnzip(),tCt.default.extract(i)),!ft.isTest()&&ft.SELF_HOSTED&&await iCt(t,i,r),i}s(npc,"downloadTarball");async function RIe(e,t){return await pP.default.trace("getReadStream",async r=>{e=tg(e),t=af(t),r.addTags({bucketName:e,path:t});let n=kE(),i={Bucket:e,Key:t},o=await n.getObject(i);if(!o.Body||!(o.Body instanceof NIe.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(RIe,"getReadStream");async function ipc(e,t){e=tg(e),t=af(t);let r=kE(),n={Bucket:e,Key:t};try{return await r.headObject(n)}catch{throw new Error("Unable to retrieve metadata from object")}}s(ipc,"getObjectMetadata");async function sCt(e,t){e=tg(e),t=af(t);let r=kE(),n={Bucket:e,Key:t};try{return await r.headObject(n),!0}catch(i){if((i.statusCode||i.$response?.statusCode)===404)return!1;throw i}}s(sCt,"objectExists");function Jxt(e){let t=e.split("?")[0],r=new RegExp(`^${nCt}/(?<bucket>[^/]+)/(?<path>.+)$`),n=t.match(r);if(n&&n.groups){let{bucket:i,path:o}=n.groups;return{bucket:i,path:o}}return null}s(Jxt,"extractBucketAndPath");Ir();var sWn=at(require("querystring"));var PIe=at(require("crypto"));var spc=require("posthog-node"),X9n=at(Qx());var J9n=at(I3());Ir();var Q9n;function Z9n(e){let t=e.split(",").map(n=>n.split(":")),r=[];for(let[n,...i]of t)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(Z9n,"parseEnvFlags");function opc(){return Z9n(ft.TENANT_FEATURE_FLAGS||"")}s(opc,"getEnvFlags");var oCt=class{constructor(t){this.flagSchema=t;this.setId=PIe.randomUUID()}static{s(this,"FlagSet")}defaults(){return(0,J9n.cloneDeep)(this.flagSchema)}isFlagName(t){return this.flagSchema[t]!==void 0}async isEnabled(t){return(await this.fetch())[t]}async fetch(){return await X9n.default.trace("features.fetch",async t=>{let r=Tct(this.setId);if(r)return t?.addTags({fromCache:!0}),r;let n={},i=this.defaults(),o=eo(),a=new Set;if(zEe())return i;for(let{tenantId:d,key:p,value:h}of opc())if(!(!d||d!=="*"&&d!==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=AI(),u=c?._id;if(!u){let d=vct();d&&(u=PIe.createHash("sha512").update(d).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,Q9n&&u){n.readFromPostHog=!0;let d=await cCt(),p={tenantId:l},h={tenant:{id:l}};d.config.createdVersion&&(h.tenant.createdVersion=d.config.createdVersion),d.createdAt&&(h.tenant.createdAt=`${d.createdAt}`);let g=await Q9n.getAllFlags(u,{personProperties:p,onlyEvaluateLocally:!0,groups:{tenant:l},groupProperties:h});for(let[b,v]of Object.entries(g))if(this.isFlagName(b)){if(typeof v!="boolean"){console.warn(`Invalid value for posthog flag "${b}": ${v}`);continue}if(!(i[b]===!0||a.has(b)))try{i[b]=v,n[`flags.${b}.source`]="posthog"}catch(S){console.warn(`Error parsing posthog flag "${b}": ${v}`,S)}}}let f=xct();for(let[d,p]of Object.entries(f))this.isFlagName(d)&&typeof p=="boolean"&&(i[d]=p,n[`flags.${d}.source`]="override");Act(this.setId,i);for(let[d,p]of Object.entries(i))n[`flags.${d}.value`]=p;return t?.addTags(n),i})}},apc=new oCt(Pzt);async function aCt(e){return await apc.isEnabled(e)}s(aCt,"isEnabled");var iWn=at(nWn());var MIe;function Rpc(){if(!ft.CLOUDFRONT_PRIVATE_KEY_64)throw new Error("CLOUDFRONT_PRIVATE_KEY_64 is not set");return MIe||(MIe=Buffer.from(ft.CLOUDFRONT_PRIVATE_KEY_64,"base64").toString("utf-8"),MIe)}s(Rpc,"getPrivateKey");var Ipc=s(()=>({keypairId:ft.CLOUDFRONT_PUBLIC_KEY_ID,privateKeyString:Rpc(),expireTime:new Date().getTime()+1e3*60*60*24}),"getCloudfrontSignParams"),fV=s(e=>{let t=hCt(e);return iWn.getSignedUrl(t,Ipc())},"getPresignedUrl"),hCt=s(e=>{let t="/";return e.startsWith("/")&&(t=""),`${ft.CLOUDFRONT_CDN}${t}${e}`},"getUrl");async function oWn(e){let t=`${af(e)}/budibase-client.js`,r=`${af(e)}/budibase-client.new.js`;return await aCt("USE_DYNAMIC_LOADING")&&await sCt(ft.APPS_BUCKET_NAME,r)?r:t}s(oWn,"clientLibraryPath");function kpc(e,t){return`${af(e)}/_dependencies/${t}`}s(kpc,"client3rdPartyLibrary");async function Npc(e,t){let r=await oWn(e);return ft.CLOUDFRONT_CDN?(t&&(r+=`?v=${t}`),hCt(r)):await hP(ft.APPS_BUCKET_NAME,r)}s(Npc,"clientLibraryCDNUrl");async function Ppc(e,t){return`/api/assets/client?${await aWn(e,t)}`}s(Ppc,"clientLibraryUrl");async function aWn(e,t){let r,n;try{r=eo()}finally{n={appId:e,version:t}}return r&&r!==cp&&(n.tenantId=r),n.dynamic=await aCt("USE_DYNAMIC_LOADING"),sWn.default.encode(n)}s(aWn,"getClientCacheKey");async function cWn(e){return ft.CLOUDFRONT_CDN?fV(e):await hP(ft.APPS_BUCKET_NAME,e)}s(cWn,"getAppFileUrl");async function Dpc(e){if(e.length===0)return[];try{return await Promise.all(e.map(async t=>({...t,src:await cWn(t.src),type:t.type||"image/png"})))}catch(t){return console.error("Error enriching PWA images:",t),e}}s(Dpc,"enrichPWAImages");var Mpc=s(async(e,t,r)=>{let n=uWn(e,t);return ft.CLOUDFRONT_CDN?(r&&(n=`${n}?etag=${r}`),fV(n)):await hP(ft.GLOBAL_BUCKET_NAME,n)},"getGlobalFileUrl"),uWn=s((e,t)=>{let r=`${e}/${t}`;return ft.MULTI_TENANCY&&(r=`${eo()}/${r}`),r},"getGlobalFileS3Key");async function Lpc(e){return!e||!e.length?[]:await Promise.all(e.map(async t=>{let r=await qpc(t),n=await Bpc(t);return{...t,jsUrl:r,iconUrl:n}}))}s(Lpc,"enrichPluginURLs");async function qpc(e){let t=fWn(e);return lWn(t)}s(qpc,"getPluginJSUrl");async function Bpc(e){let t=dWn(e);if(t)return lWn(t)}s(Bpc,"getPluginIconUrl");async function lWn(e){return ft.CLOUDFRONT_CDN?fV(e):await hP(ft.PLUGIN_BUCKET_NAME,e)}s(lWn,"getPluginUrl");function fWn(e){return pWn(e,"plugin.min.js")}s(fWn,"getPluginJSKey");function dWn(e){let t=e.iconUrl?"icon.svg":e.iconFileName;if(t)return pWn(e,t)}s(dWn,"getPluginIconKey");function pWn(e,t){return`${hWn(e.name)}/${t}`}s(pWn,"getPluginS3Key");function hWn(e){let t=`${e}`;return ft.MULTI_TENANCY&&(t=`${eo()}/${t}`),ft.CLOUDFRONT_CDN&&(t=`plugins/${t}`),t}s(hWn,"getPluginS3Dir");var Upc="budibase.log",Fpc="budibase-logs-history.txt",jpc=mWn.default.join(yU(),"systemlogs");function $pc(e){let t=/(\d+)([A-Za-z])/,r=e?.match(t);if(!r){console.warn("totalMaxSize does not have a valid value",{totalMaxSize:e});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($pc,"getSingleFileMaxSizeInfo");function _Wn(){let e=$pc(ft.ROLLING_LOG_MAX_SIZE);return gWn.createStream(Upc,{size:e?.size,path:jpc,maxFiles:e?.totalHistoryFiles||1,immutable:!0,history:Fpc,initialRotation:!1})}s(_Wn,"localFileDestination");function Gpc(e){return typeof e=="object"&&e!==null&&!(e instanceof Error)}s(Gpc,"isPlainObject");function zpc(e){return e instanceof Error}s(zpc,"isError");function Vpc(e){return typeof e=="string"}s(Vpc,"isMessage");var gP;if(!ft.DISABLE_PINO_LOGGER){let e=ft.LOG_LEVEL,t={level:e,formatters:{level:u=>({level:u.toUpperCase()}),bindings:()=>ft.SELF_HOSTED?{service:ft.SERVICE_NAME}:{}},timestamp:()=>`,"timestamp":"${new Date(Date.now()).toISOString()}"`},r=[];r.push(ft.isDev()?{stream:(0,yWn.default)({singleLine:!0}),level:e}:{stream:process.stdout,level:e}),ft.SELF_HOSTED&&r.push({stream:_Wn(),level:e}),gP=r.length?(0,qIe.default)(t,qIe.default.multistream(r)):(0,qIe.default)(t);let n=s(u=>{let l,f=[],d="";u.forEach(v=>{Vpc(v)&&(d=`${d} ${v}`.trimStart()),Gpc(v)&&f.push(v),zpc(v)&&(l=v)});let p=c(),h={};h={tenantId:i(),appId:o(),automationId:a(),identityId:p?._id,identityType:p?.type,correlationId:rgt()};let g=gCt.default.scope().active();g&&gCt.default.inject(g.context(),bWn.formats.LOG,h);let b={err:l,pid:process.pid,...h};if(f.length){let v={},S=0;for(let C=0;C<f.length;C++){let R=f[C],N=R._logKey;N?(delete R._logKey,b[N]=R):(v[S]=R,S++)}Object.keys(v).length&&(b.data=v)}return[b,d]},"getLogParams");console.log=(...u)=>{let[l,f]=n(u);gP?.info(l,f)},console.info=(...u)=>{let[l,f]=n(u);gP?.info(l,f)},console.warn=(...u)=>{let[l,f]=n(u);gP?.warn(l,f)},console.error=(...u)=>{let[l,f]=n(u);gP?.error(l,f)},console.trace=(...u)=>{let[l,f]=n(u);l.err||(l.err=new Error),gP?.trace(l,f)},console.debug=(...u)=>{let[l,f]=n(u);gP?.debug(l,f)};let i=s(()=>{let u;try{u=eo()}catch{}return u},"getTenantId"),o=s(()=>{let u;try{u=e_()}catch{}return u},"getAppId"),a=s(()=>{let u;try{u=Ect()}catch{}return u},"getAutomationId"),c=s(()=>{let u;try{u=AI()}catch{}return u},"getIdentity")}var _Ct=gP;function BT(e){let t=eo();return`${e}:${t}`}s(BT,"generateTenantKey");var dV=class{static{s(this,"BaseCache")}constructor(t=void 0){this.client=t}async getClient(){return this.client?this.client:await Lmn()}async keys(t){return(await this.getClient()).keys(t)}async exists(t,r={useTenancy:!0}){return t=r.useTenancy?BT(t):t,(await this.getClient()).exists(t)}async scan(t,r={useTenancy:!0}){return t=r.useTenancy?BT(t):t,(await this.getClient()).scan(t)}async get(t,r={useTenancy:!0}){return t=r.useTenancy?BT(t):t,(await this.getClient()).get(t)}async bulkGet(t,r={useTenancy:!0}){return t=r.useTenancy?t.map(i=>BT(i)):t,(await this.getClient()).bulkGet(t)}async store(t,r,n=null,i={useTenancy:!0}){t=i.useTenancy?BT(t):t,await(await this.getClient()).store(t,r,n)}async bulkStore(t,r=null,n={useTenancy:!0}){n.useTenancy&&(t=Object.entries(t).reduce((o,[a,c])=>(o[BT(a)]=c,o),{})),await(await this.getClient()).bulkStore(t,r)}async delete(t,r={useTenancy:!0}){return t=r.useTenancy?BT(t):t,(await this.getClient()).delete(t)}async bulkDelete(t,r={useTenancy:!0}){return t=r.useTenancy?t.map(i=>BT(i)):t,(await this.getClient()).bulkDelete(t)}async withCache(t,r=null,n,i={useTenancy:!0}){let o=await this.get(t,i);if(o)return o;try{let a=await n();return await this.store(t,a,r,i),a}catch(a){throw console.error("Error fetching before cache - ",a),a}}async withCacheWithDynamicTTL(t,r,n={useTenancy:!0}){let i=await this.get(t,n);if(i)return i;try{let o=await r(),{value:a,ttl:c}=o;return await this.store(t,a,c,{useTenancy:n.useTenancy}),a}catch(o){throw console.error("Error fetching before cache - ",o),o}}async bustCache(t){let r=await this.getClient();try{await r.delete(BT(t))}catch(n){throw console.error("Error busting cache - ",n),n}}async deleteIfValue(t,r,n={useTenancy:!0}){t=n.useTenancy?BT(t):t,await(await this.getClient()).deleteIfValue(t,r)}};var bCt=new dV,_P={CHECKLIST:"checklist",INSTALLATION:"installation",ANALYTICS_ENABLED:"analyticsEnabled",UNIQUE_TENANT_ID:"uniqueTenantId",EVENTS:"events",BACKFILL_METADATA:"backfillMetadata",EVENTS_RATE_LIMIT:"eventsRateLimit",OAUTH2_TOKEN:e=>`oauth2Token_${e}`};var ECt=s((...e)=>bCt.get(...e),"get"),BIe=s((...e)=>bCt.store(...e),"store");var UIe=s((...e)=>bCt.withCache(...e),"withCache");var a8l=Ah.fromDays(7).toSeconds();var f8l=Ah.fromHours(1).toSeconds();var EWn=at(require("node-fetch"));var Une=class{static{s(this,"API")}constructor(t){this.host=t}async apiCall(t,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";twe.setHeader(n.headers);let o={method:t,body:i?JSON.stringify(n.body):n.body,headers:n.headers,credentials:"include"};return await(0,EWn.default)(`${this.host}${r}`,o)}async post(t,r){return this.apiCall("POST",t,r)}async get(t,r){return this.apiCall("GET",t,r)}async patch(t,r){return this.apiCall("PATCH",t,r)}async del(t,r){return this.apiCall("DELETE",t,r)}async put(t,r){return this.apiCall("PUT",t,r)}};var C8l=new Une(ft.INTERNAL_ACCOUNT_PORTAL_URL),O8l=ft.SELF_HOSTED||ft.DISABLE_ACCOUNT_PORTAL;Ir();var TCt=s(async()=>ACt(),"enabled");Ir();var xWn=require("posthog-node");Ir();var Zpc=s(e=>e==="served:builder"||e==="served:app:preview"||e==="served:app","isRateLimited"),ehc=s(e=>e==="served:app:preview"||e==="served:app","isPerApp");var wWn={"served:app":"calendarDay","served:app:preview":"calendarDay","served:builder":"calendarDay"},TWn=s(async e=>{if(!Zpc(e))return!1;let t=await thc(e);if(t){let r=new Date(t.timestamp);switch(wWn[e]){case"calendarDay":return r.setDate(r.getDate()+1),r.setHours(0,0,0,0),Date.now()>r.getTime()?(await SWn(e,{timestamp:Date.now()}),!1):!0}}else return await SWn(e,{timestamp:Date.now()}),!1},"limited"),AWn=s(e=>{let t=`${_P.EVENTS_RATE_LIMIT}:${e}`;return ehc(e)&&(t=t+":"+e_()),t},"eventKey"),thc=s(async e=>{let t=AWn(e);return await ECt(t)},"readEvent"),SWn=s(async(e,t)=>{let r=AWn(e),n=wWn[e],i;switch(n){case"calendarDay":i=86400}await BIe(r,t,i)},"recordEvent");var nhc=["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"],jne=class{static{s(this,"PosthogProcessor")}constructor(t){if(!t)throw new Error("Posthog token is not defined");this.posthog=new xWn.PostHog(t)}async processEvent(t,r,n,i){if(nhc.includes(t)||await TWn(t))return;n=this.clearPIIProperties(n),n.version=ft.VERSION,n.service=ft.SERVICE,n.environment=r.environment,n.hosting=r.hosting;let o=e_();o&&(n.appId=o);let a={distinctId:r.id,event:t,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(t){return t.email&&delete t.email,t.audited&&delete t.audited,t}async identify(t,r){let n={distinctId:t.id,properties:t};r&&(n.timestamp=new Date(r)),this.posthog.identify(n)}async identifyGroup(t,r){let n={distinctId:t.id,groupType:t.type,groupKey:t.id,properties:t};r&&(n.timestamp=new Date(r)),this.posthog.groupIdentify(n)}async shutdown(){await this.posthog.shutdown()}};var CWn=jne;var ihc=["installation:version:upgraded","installation:version:downgraded"],shc=["installation","tenant"],$ne=class{static{s(this,"AnalyticsProcessor")}constructor(){ft.POSTHOG_TOKEN&&!ft.isTest()&&(this.posthog=new CWn(ft.POSTHOG_TOKEN))}async processEvent(t,r,n,i){!ihc.includes(t)&&!await TCt()||this.posthog&&await this.posthog.processEvent(t,r,n,i)}async identify(t,r){!shc.includes(t.type)&&!await TCt()||this.posthog&&await this.posthog.identify(t,r)}async identifyGroup(t,r){this.posthog&&await this.posthog.identifyGroup(t,r)}async shutdown(){this.posthog&&await this.posthog.shutdown()}};var CCt=ft.SELF_HOSTED&&!ft.isDev(),Hne=class{static{s(this,"LoggingProcessor")}async processEvent(t,r,n){CCt||console.log(`[audit] [identityType=${r.type}] ${t}`,n)}async identify(t){CCt||console.log("[audit] identified",t)}async identifyGroup(t){CCt||console.log("[audit] group identified",t)}async shutdown(){}};Ir();var Gne=class e{static{s(this,"AuditLogsProcessor")}static{this.auditLogsEnabled=!1}static init(t){e.auditLogsEnabled=!0;let r=t;return e.auditLogQueue=new xq("auditLogQueue",{jobTags:n=>({"event.name":n.event})}),e.auditLogQueue.process(async n=>{await vC(n.data.tenantId,async()=>{let i=n.data.properties;i.audited&&(i={...i,...i.audited},delete i.audited);let o={};ft.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(t,r,n,i){if(e.auditLogsEnabled&&Gmn(t)){let o=r.type==="user"?r.id:void 0;await e.auditLogQueue.add({event:t,properties:n,opts:{userId:o,timestamp:i,appId:e_(),hostInfo:r.hostInfo},tenantId:eo()})}}async identify(){}async identifyGroup(){}async shutdown(){await e.auditLogQueue?.close()}};var zne=class{constructor(t){this.initialised=!1;this.processors=[];this.processors=t}static{s(this,"Processor")}async processEvent(t,r,n,i){for(let o of this.processors)await o.processEvent(t,r,n,i)}async identify(t,r){for(let n of this.processors)n.identify&&await n.identify(t,r)}async identifyGroup(t,r){for(let n of this.processors)n.identifyGroup&&await n.identifyGroup(t,r)}async shutdown(){for(let t of this.processors)t.shutdown&&await t.shutdown()}};var ohc=new $ne,ahc=new Hne,chc=new Gne;var OCt=new zne([ohc,ahc,chc]);Ir();Ir();var o_c=at(WCt());Ir();var Wzl={"automation:created":e=>e.automationId,"automation:step:created":e=>e.stepId,"datasource:created":e=>e.datasourceId,"layout:created":e=>e.layoutId,"query:created":e=>e.queryId,"role:created":e=>e.roleId,"screen:created":e=>e.screenId,"table:created":e=>e.tableId,"view:created":e=>e.tableId,"view:calculation:created":e=>e.tableId,"view:filter:created":e=>e.tableId,"app:created":e=>e.appId,"app:published":e=>e.appId,"auth:sso:created":e=>e.type,"auth:sso:activated":e=>e.type,"user:created":e=>e.userId,"user:admin:assigned":e=>e.userId,"user:builder:assigned":e=>e.userId,"role:assigned":e=>`${e.roleId}-${e.userId}`};Ir();Ir();Ir();Ir();Ir();Ir();Ir();Ir();Ir();Ir();Ir();Ir();Ir();Ir();Ir();Ir();Ir();Ir();Ir();Ir();Ir();Ir();var mKl=!ft.SELF_HOSTED&&!ft.isDev();Ir();Ir();Ir();Ir();Ir();Ir();Ir();Ir();var v7n=kv.users.isBuilder,KCt=kv.users.isAdmin,qYl=kv.users.isGlobalBuilder,BYl=kv.users.isAdminOrBuilder,_7n=kv.users.hasAdminPermissions,eke=kv.users.hasBuilderPermissions,UYl=kv.users.hasAppBuilderPermissions;var XYl=ft.SESSION_EXPIRY_SECONDS?parseInt(ft.SESSION_EXPIRY_SECONDS):Ah.fromDays(7).toSeconds();Ir();var eQl=+(ft.PASSWORD_MIN_LENGTH||12),tQl=+(ft.PASSWORD_MAX_LENGTH||512);function I_c(e){return Array.isArray(e)?e.map(t=>{if(t)return delete t.password,t}):e&&(delete e.password,e)}s(I_c,"removeUserPassword");async function Zne(e,t){if(e==null)throw"Must supply an email address to view";let r=await KSe("by_email2",{key:e.toLowerCase(),include_docs:!0});if(Array.isArray(r))throw new Error(`Multiple users found with email address: ${e}`);let n=r;return t?.cleanup&&(n=I_c(n)),n}s(Zne,"getGlobalUserByEmail");Ir();Ir();var J_c=at(nQn());var OJl=Ah.fromSeconds(10).toMs();function iQn(e){return`config${Fs}${e}`}s(iQn,"generateConfigID");async function hOt(e){let t=_h();try{return await t.get(iQn(e))}catch(r){if(r.status===404)return;throw r}}s(hOt,"getConfig");async function cCt(){let e=await hOt("settings");return e||(e={_id:iQn("settings"),type:"settings",config:{}}),e.config.platformUrl=await sQn({tenantAware:!0,config:e.config}),e.config.analyticsEnabled=await ACt({config:e.config}),e}s(cCt,"getSettingsConfigDoc");async function sQn(e={tenantAware:!0}){let t=ft.PLATFORM_URL||"http://localhost:10000";if(!ft.SELF_HOSTED&&ft.MULTI_TENANCY&&e.tenantAware){let r=eo();t.includes("localhost:")||(t=t.replace("://",`://${r}.`))}else if(ft.SELF_HOSTED){let r=e?.config?e.config:(await hOt("settings"))?.config;r?.platformUrl&&(t=r.platformUrl)}return t}s(sQn,"getPlatformUrl");var ACt=s(async e=>{if(!ft.SELF_HOSTED)return!!ft.ENABLE_ANALYTICS;let t=await UIe(_P.ANALYTICS_ENABLED,86400,async()=>{let n=e?.config?e.config:(await hOt("settings"))?.config;if(n?.analyticsEnabled===!1)return!1;if(n?.analyticsEnabled===!0)return!0});if(t!==void 0)return t;let r=ft.ENABLE_ANALYTICS;return!(r===0||r===!1)},"analyticsEnabled");Ir();var rwc=at(I3()),nwc=at(vke()),iwc=at(WCt());var aZn={ADMIN:"ADMIN",POWER:"POWER",BASIC:"BASIC",PUBLIC:"PUBLIC"},qy={...aZn,BUILDER:"BUILDER"},swc={UUID:void 0,NAME:"name"};var TU=class{constructor(t,r,n,i){this.permissions={};this._id=t,this.name=r,this.uiMetadata=i,this.permissionId=n,this.version=swc.NAME}static{s(this,"Role")}addInheritance(t){return t&&typeof t=="string"?t=sZn(t):t&&Array.isArray(t)&&(t=t.map(sZn)),this.inherits=t,this}};var rrf={ADMIN:new TU(qy.ADMIN,qy.ADMIN,"admin",{displayName:"App admin",description:"Can do everything",color:"var(--spectrum-global-color-static-red-400)"}).addInheritance(qy.POWER),POWER:new TU(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 TU(qy.BASIC,qy.BASIC,"write",{displayName:"App user",description:"Any logged in user",color:"var(--spectrum-global-color-static-green-400)"}).addInheritance(qy.PUBLIC),PUBLIC:new TU(qy.PUBLIC,qy.PUBLIC,"public",{displayName:"Public user",description:"Accessible to anyone",color:"var(--spectrum-global-color-static-blue-400)"}),BUILDER:new TU(qy.BUILDER,qy.BUILDER,"admin",{displayName:"Builder user",description:"Users that can edit this app",color:"var(--spectrum-global-color-static-magenta-600)"})};function owc(e){return Object.values(aZn).includes(e)}s(owc,"isBuiltin");function sZn(e){return owc(e)?e:Bmn(e)}s(sZn,"prefixRoleIDNoBuiltin");Ir();var uwc=at(rM()),lwc=at(vke());Ir();var Zc=class{static{s(this,"PermissionImpl")}constructor(t,r){this.type=t,this.level=r}};var arf={PUBLIC:{_id:"public",name:"Public",permissions:[new Zc("webhook","execute")]},READ_ONLY:{_id:"read_only",name:"Read only",permissions:[new Zc("query","read"),new Zc("table","read"),new Zc("app","read")]},WRITE:{_id:"write",name:"Read/Write",permissions:[new Zc("query","write"),new Zc("table","write"),new Zc("automation","execute"),new Zc("legacy_view","read"),new Zc("app","read")]},POWER:{_id:"power",name:"Power",permissions:[new Zc("table","write"),new Zc("user","read"),new Zc("automation","execute"),new Zc("webhook","read"),new Zc("legacy_view","read"),new Zc("app","read")]},ADMIN:{_id:"admin",name:"Admin",permissions:[new Zc("table","admin"),new Zc("user","admin"),new Zc("automation","admin"),new Zc("webhook","read"),new Zc("query","admin"),new Zc("legacy_view","read"),new Zc("app","read")]}};var crf="builder",urf="creator",lrf="globalBuilder";var aie={};Co(aie,{authenticate:()=>hwc,options:()=>pwc});function FT(e,t,r){return e(r,null,{message:t})}s(FT,"authError");var jOt="Invalid credentials",dwc="This account has expired. Please reset your password",pwc={passReqToCallback:!0};async function hwc(e,t,r,n){if(!t)return FT(n,"Email Required");if(!r)return FT(n,"Password Required");let i=await Zne(t);return i==null?(console.info(`user=${t} could not be found`),FT(n,jOt)):i.status==="inactive"?(console.info(`user=${t} is inactive`,i),FT(n,jOt)):i.password?await rtr(r,i.password)?(delete i.password,n(null,i)):FT(n,jOt):(console.info(`user=${t} has no password set`,i),FT(n,dwc))}s(hwc,"authenticate");Ir();var Hnf=wRt().OAuth2Strategy;var iDc=at(require("node-fetch"));Ir();var Ilf=dui().Strategy;var Llf=wRt().OAuth2Strategy;Ir();var uDc=at(Qx());var lff=ft.SESSION_UPDATE_PERIOD?parseInt(ft.SESSION_UPDATE_PERIOD):60*1e3;Ir();var Q2c=wfi(),X2c=ewe();function J2c(){return{logger:_Ct,genReqId:X2c.getId,autoLogging:{ignore:e=>!!e.url?.includes("/health")},serializers:{req:e=>({method:e.method,url:e.url,correlationId:e.id}),res:e=>({status:e.statusCode})}}}s(J2c,"pinoSettings");function Z2c(){return ft.HTTP_LOGGING?Q2c(J2c()):(e,t)=>t()}s(Z2c,"getMiddleware");var eqc=Z2c();var ipf=ewe();Ir();var wBc=at(qNe());Ir();var YBc=ihi(),QBc=dhi().Strategy,vgf=phi();YBc.use(new QBc(aie.options,aie.authenticate));var aPe={};Co(aPe,{validate:()=>rUc});Ir();var Dr=at(qNe());var JBc=["Relational","Non-relational","Spreadsheet","Object store","Graph","API"];function nPt(e,t){let{error:r}=e.validate(t);if(r)throw r}s(nPt,"runJoi");function ZBc(e){let t=Dr.default.object({type:Dr.default.string().allow("component").required(),metadata:Dr.default.object().unknown(!0).required(),hash:Dr.default.string().optional(),version:Dr.default.string().optional(),schema:Dr.default.object({name:Dr.default.string().required(),settings:Dr.default.array().items(Dr.default.object().unknown(!0)).required()}).unknown(!0)});nPt(t,e)}s(ZBc,"validateComponent");function eUc(e){let t=Dr.default.object({type:Dr.default.string().allow(...Object.values(cje)).required(),required:Dr.default.boolean().required(),default:Dr.default.any(),display:Dr.default.string()}),r=Dr.default.object({type:Dr.default.string().allow(...Object.values(aje)),readable:Dr.default.boolean(),displayName:Dr.default.string(),fields:Dr.default.object().pattern(Dr.default.string(),t)}).required(),n=Dr.default.object({type:Dr.default.string().allow("datasource").required(),metadata:Dr.default.object().unknown(!0).required(),hash:Dr.default.string().optional(),version:Dr.default.string().optional(),schema:Dr.default.object({docs:Dr.default.string(),plus:Dr.default.boolean().optional(),isSQL:Dr.default.boolean().optional(),auth:Dr.default.object({type:Dr.default.string().required()}).optional(),features:Dr.default.object(Object.fromEntries(Object.values(uje).map(i=>[i,Dr.default.boolean().optional()]))).optional(),relationships:Dr.default.boolean().optional(),description:Dr.default.string().required(),friendlyName:Dr.default.string().required(),type:Dr.default.string().allow(...JBc),datasource:Dr.default.object().pattern(Dr.default.string(),t).required(),query:Dr.default.object().pattern(Dr.default.string(),r).unknown(!0).required(),extra:Dr.default.object().pattern(Dr.default.string(),Dr.default.object({type:Dr.default.string().required(),displayName:Dr.default.string().required(),required:Dr.default.boolean(),data:Dr.default.object()}))})});nPt(n,e)}s(eUc,"validateDatasource");function tUc(e){let t=Dr.default.object().pattern(Dr.default.string(),{type:Dr.default.string().allow(...Object.values(mje)).required(),customType:Dr.default.string().allow(...Object.values(gje)),title:Dr.default.string(),description:Dr.default.string(),enum:Dr.default.array().items(Dr.default.string()),pretty:Dr.default.array().items(Dr.default.string())}),r=Dr.default.object({properties:t,required:Dr.default.array().items(Dr.default.string())}).concat(t).required(),n=Dr.default.object({type:Dr.default.string().allow("automation").required(),metadata:Dr.default.object().unknown(!0).required(),hash:Dr.default.string().optional(),version:Dr.default.string().optional(),schema:Dr.default.object({name:Dr.default.string().required(),tagline:Dr.default.string().required(),icon:Dr.default.string().required(),description:Dr.default.string().required(),type:Dr.default.string().allow("ACTION","LOGIC").required(),stepId:Dr.default.string().disallow(...DVt).required(),inputs:Dr.default.object().optional(),schema:Dr.default.object({inputs:r,outputs:r}).required()})});nPt(n,e)}s(tUc,"validateAutomation");function rUc(e){switch(e?.type){case"component":ZBc(e);break;case"datasource":eUc(e);break;case"automation":tUc(e);break;default:throw new Error(`Unknown plugin type - check schema.json: ${e.type}`)}}s(rUc,"validate");var hhi=at(require("dns"));var mhi=require("util");var Pgf=(0,mhi.promisify)(hhi.default.lookup);Ir();var t_f={"user:created":e=>e.userId,"user:updated":e=>e.userId,"user:deleted":e=>e.userId,"user:admin:assigned":e=>e.userId,"user:admin:removed":e=>e.userId,"user:builder:assigned":e=>e.userId,"user:builder:removed":e=>e.userId,"user_group:created":e=>e.groupId,"user_group:updated":e=>e.groupId,"user_group:deleted":e=>e.groupId,"user_group:user_added":e=>e.groupId,"user_group:users_deleted":e=>e.groupId,"user_group:permissions_edited":e=>e.groupId,"automation:deleted":e=>e.automationId,"datasource:deleted":e=>e.datasourceId,"table:deleted":e=>e.tableId,"query:deleted":e=>e.queryId,"workspace_app:deleted":e=>e.workspaceAppId,"view:deleted":e=>e.id};var nEu=at(L3t());var nLi=at(L3t());Ir();Ir();var iEu=at(I3());var ZPf={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 lvu=at(RLi());var n0u=at(s2i());var wMf={...fte,...Pu};var np=".temp",qW="couchdb",Ece="minio",a2i=[{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 s0u(e){let t=e.MAIN_PORT,r=e.COUCH_DB_USER,n=e.COUCH_DB_PASSWORD;return!e.COUCH_DB_URL&&t&&r&&n&&(e.COUCH_DB_URL=`http://${r}:${n}@localhost:${t}/db/`),e.MINIO_URL||(e.MINIO_URL=`http://localhost:${t}/`),e}s(s0u,"checkURLs");async function o0u(){console.log("*** NOTE: use a .env file to load these parameters repeatedly ***");let e={};for(let t of a2i)e[t.value]=await JD(t.value,t.default);return e}s(o0u,"askQuestions");function a0u(e){if(!e4t.default.existsSync(e))throw"Unable to file specified .env file";let t=e4t.default.readFileSync(e,"utf8"),r=s0u(o2i.default.parse(t));for(let n of a2i)if(!r[n.value])throw`Cannot find "${n.value}" property in .env file`;return r}s(a0u,"loadEnvironment");async function t4t(e=!0){let t;e!==!0?t=a0u(e):t=await o0u();for(let r of Object.keys(t))ft._set(r,t[r]);return t}s(t4t,"getConfig");async function r4t(e,t){let r=Xue();try{await r.replicate(e,t,{batch_size:1e3,batches_limit:5,style:"main_only"})}catch(n){throw new Error(`Replication failed - ${JSON.stringify(n)}`)}}s(r4t,"replication");function n4t(e){let t=Xue(e.COUCH_DB_URL),r=Xue();return{Remote:t,Local:r}}s(n4t,"getPouches");var dj=at(require("fs")),ND=require("path");ad();var u2i=at(require("node:stream"));var{ObjectStoreBuckets:c0u,ObjectStore:l2i,retrieve:u0u,uploadDirectory:l0u,createBucketIfNotExists:f0u}=LIe,c2i=Object.values(c0u);async function f2i(){let e=(0,ND.join)(np,Ece);dj.default.mkdirSync(e);let t=[],r=0;for(let o of c2i){let a=l2i();try{await a.headBucket({Bucket:o})}catch{r++;continue}let c=await a.listObjectsV2({Bucket:o});t=t.concat(c.Contents?.map(u=>({...u,bucket:o}))||[])}if(r===c2i.length)throw new Error("Unable to access MinIO/S3 - check environment config.");let n=KD(t.length),i=0;for(let o of t){let a=o.Key,c=await u0u(o.bucket,a),u=a.split("/");if(u.length>1){let l=u.slice(0,u.length-1);dj.default.mkdirSync((0,ND.join)(e,o.bucket,...l),{recursive:!0})}c instanceof u2i.Readable?c.pipe(dj.default.createWriteStream((0,ND.join)(e,o.bucket,...u))):dj.default.writeFileSync((0,ND.join)(e,o.bucket,...u),c),n.update(++i)}n.stop()}s(f2i,"exportObjects");async function d2i(){let e=(0,ND.join)(np,Ece),t=dj.default.readdirSync(e),r=0;t.forEach(o=>{let a=dj.default.readdirSync((0,ND.join)(e,o));r+=a.length});let n=KD(r),i=0;for(let o of t){let a=l2i();await f0u(a,o);let c=await l0u(o,(0,ND.join)(e,o),"/");i+=c.length,n.update(i)}n.stop()}s(d2i,"importObjects");var p2i=require("tar");async function h2i(e){let t=e.env||void 0,r=e.export||e;typeof r!="string"&&(r=`backup-${new Date().toISOString()}.tar.gz`);let n=await t4t(t),i=await A9t(n.COUCH_DB_URL),{Remote:o,Local:a}=n4t(n);hv.default.existsSync(np)&&hv.default.rmSync(np,{recursive:!0});let c=(0,pj.join)(np,qW);hv.default.mkdirSync(np),hv.default.mkdirSync(c),console.log("CouchDB Export");let u=KD(i.length),l=0;for(let f of i){u.update(++l);let d=new o(f),p=new a((0,pj.join)(np,qW,f));await r4t(d,p),await d.close(),await p.close()}u.stop(),console.log("S3 Export"),await f2i(),p2i.create({sync:!0,gzip:!0,file:r,cwd:(0,pj.join)(np)},[qW,Ece]),hv.default.rmSync(np,{recursive:!0}),console.log(`Generated export file - ${r}`)}s(h2i,"exportBackup");async function m2i(e){let t=e.env||void 0,r=e.import||e,n=await t4t(t);(!r||!hv.default.existsSync(r))&&(console.error("Cannot import without specifying a valid file to import"),process.exit(-1)),hv.default.existsSync(np)&&hv.default.rmSync(np,{recursive:!0}),hv.default.mkdirSync(np),p2i.extract({sync:!0,cwd:(0,pj.join)(np),file:r});let{Remote:i,Local:o}=n4t(n),a=hv.default.readdirSync((0,pj.join)(np,qW));console.log("CouchDB Import");let c=KD(a.length),u=0;for(let l of a){c.update(++u);let f=new i(l),d=new o((0,pj.join)(np,qW,l));await r4t(d,f),await f.close(),await d.close()}c.stop(),console.log("MinIO Import"),await d2i();try{await eje(`http://localhost:${n.MAIN_PORT}/api/system/restored`,"POST")}catch{}console.log("Import complete"),hv.default.rmSync(np,{recursive:!0})}s(m2i,"importBackup");async function d0u(e){if(e.import)return m2i(e);if(e.export)return h2i(e)}s(d0u,"pickOne");var g2i=new NS("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.",h2i).addSubOption("--import [filename]","Import a backup to a new Budibase installation.",m2i).addSubOption("--env [envFile]","Provide an environment variable file to configure the CLI.",d0u);iI();var U3i=at(require("node-fetch")),Nj=at(require("fs")),F3i=at(require("os")),ZUe=require("path");var D3i=at(b2i()),M3i=at(require("vm")),h$t=at(Dce());var FR=class{static{s(this,"Helper")}constructor(t,r,n=!0){this.name=t,this.fn=r,this.useValueFallback=n}register(t){t.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(t){t.unregisterHelper(this.name)}};var JUe=at(Dce());var r$t=at(Fji());var Xp=at(Dje()),Yji=at(jji()),Qji=at($ji()),Xji=at(Hji()),Jji=at(Gji()),Zji=at(zji()),e3i=at(Vji()),t3i=at(Wji()),r3i=at(Kji());Xp.default.extend(Yji.default);Xp.default.extend(Qji.default);Xp.default.extend(Xji.default);Xp.default.extend(Jji.default);Xp.default.extend(Zji.default);Xp.default.extend(e3i.default);Xp.default.extend(t3i.default);Xp.default.extend(r3i.default);function Oj(e){return typeof e=="object"&&typeof e.hash=="object"}s(Oj,"isOptions");function J6t(e){return typeof e=="object"&&typeof e.options=="object"&&typeof e.app=="object"}s(J6t,"isApp");function Z6t(e,t,r){if(Oj(e))return Z6t({},t,e);if(Oj(t))return Z6t(e,r,t);let n=J6t(e)?e.context:{};r=r||{},Oj(r)||(t=Object.assign({},t,r)),Oj(r)&&r.hash.root===!0&&(t=Object.assign({},r.data.root,t));let i=Object.assign({},n,t,r.hash);return J6t(e)||(i=Object.assign({},e,i)),J6t(e)&&e.view&&e.view.data&&(i=Object.assign({},i,e.view.data)),i}s(Z6t,"getContext");function e$t(e,t,r){return Oj(t)&&(r=t,t=i3i),Oj(e)&&(r=e,t=null,e=null),{str:e,pattern:t,options:r}}s(e$t,"initialConfig");function n3i(e,t,r){let n=e$t(e,t,r),i={lang:"en",date:new Date(n.str)},o=Z6t(this,i,{});Xp.default.locale(o.lang||o.language)}s(n3i,"setLocale");var i3i="MMMM DD, YYYY",VUe=s((e,t,r)=>{let n=e$t(e,t,r);if(n.str==null&&n.pattern==null)return Xp.default.locale("en"),(0,Xp.default)().format(i3i);n3i(n.str,n.pattern,n.options);let i=(0,Xp.default)(new Date(n.str));return typeof n.options=="string"?i=n.options.toLowerCase()==="utc"?i.utc():i.tz(n.options):i=i.tz(Xp.default.tz.guess()),n.pattern===""?i.toISOString():i.format(n.pattern)},"date"),Xce=s((e,t,r)=>{let n=e$t(e,t);n3i(n.str,n.pattern);let i=Xp.default.duration(n.str,n.pattern);return r&&!Oj(r)?i.format(r):i.humanize()},"duration"),t$t=s((e,t,r)=>(0,Xp.default)(new Date(e)).diff((0,Xp.default)(new Date(t)),r),"difference"),s3i=s(e=>{let t=t$t(e,new Date().toISOString(),"ms");return Xce(t,"ms")},"durationFromNow");var WUe=["#if","#unless","#each","#with","lookup","log","blockHelperMissing","each","helperMissing","if","unless","log","lookup","with"],o3i=["math","array","number","url","string","comparison","object","regex","uuid"],Rj={OBJECT:"object",ALL:"all",LITERAL:"literal",JS:"js",DECODE_ID:"decodeId"},ZW="%LITERAL%";var a3i={date:VUe,duration:Xce,difference:t$t,durationFromNow:s3i};function c3i(e){for(let[r,n]of Object.entries(a3i))e.registerHelper(r,n);let t=[];for(let r of o3i){let n=r$t.default[r]();for(let i of Object.entries(n)){let o=i[0];WUe.indexOf(o)!==-1||t.indexOf(o)!==-1||t.push(o)}r$t.default[r]({handlebars:e})}n$t=t.concat(Object.keys(a3i))}s(c3i,"registerAll");var n$t=[];function tCu(){return process.env.NODE_ENV==="jest"||process.env.JEST_WORKER_ID!=null&&process.env.JEST_WORKER_ID!=="null"}s(tCu,"isJest");function Ij(){return tCu()}s(Ij,"isTest");var u3i=s(()=>process&&process.env.BACKEND_JS,"isTestingBackendJS");var rCu=/^[A-Za-z0-9]+$/g,KUe=/{{([^{].*?)}}/g,i$t=/{?{{([^{].*?)}}}?/g,nCu=/{{{([^{].*?)}}}/g,Jce=s(()=>Ij()&&u3i()?!0:Ij()?!1:typeof window>"u","isBackendService"),l3i=s(()=>process&&!process.env.NO_JS,"isJSAllowed"),f3i=s(e=>{let t=e,r=new RegExp(KUe),n=new RegExp(nCu),i=t.match(n);i&&i.forEach(a=>{t=t.replace(a,"")});let o=t.match(r);return o||[]},"findDoubleHbsInstances"),d3i=s(e=>e.match(rCu),"isAlphaNumeric"),s$t=s((e,t,r,n)=>e.slice(0,t)+n+e.slice(t+r),"swapStrings");var o$t=s(e=>Buffer.from(e,"base64").toString("utf-8"),"atob"),p3i=s((e,t,r)=>{let n=t.map(o=>o.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")),i=new RegExp(`\\b(${n.join("|")})\\b`,"g");return e.replace(i,`${r}$1`)},"prefixStrings");function YUe(e){return`
|
|
1387
1387
|
result = {
|
|
1388
1388
|
result: null,
|
|
1389
1389
|
error: null,
|
|
@@ -1399,7 +1399,7 @@ $1`)};Uce.parseAttributes=s(function(t){return Object.keys(t).map(function(r){va
|
|
|
1399
1399
|
`}s(YUe,"frontendWrapJS");var h3i=at(S6t()),m3i=at(KW()),g3i=at(w6t()),_3i=at(C6t()),y3i=at(A6t()),b3i=at(r6t()),E3i=at(kUe()),v3i=at(T6t()),S3i=at(M6t());var iCu={math:h3i.default,array:m3i.default,number:g3i.default,url:_3i.default,string:y3i.default,comparison:b3i.default,object:E3i.default,regex:v3i.default,uuid:S3i.default},w3i=["sortBy"],sCu={date:VUe,duration:Xce},zR;function Zce(){if(zR)return zR;zR={};for(let e of Object.values(iCu))for(let[t,r]of Object.entries(e))zR[t]=(...n)=>r(...n,{});zR={...zR,...sCu};for(let e of w3i)delete zR[e];return Object.freeze(zR),zR}s(Zce,"getJsHelperList");var QUe=s(e=>`(function(){
|
|
1400
1400
|
${e}
|
|
1401
1401
|
})();`,"iifeWrapper");var eK=class e extends Error{constructor(){super(e.message);this.code=e.code}static{s(this,"JsTimeoutError")}static{this.message="Timed out while executing JS"}static{this.code="JS_TIMEOUT_ERROR"}},kj=class e extends Error{constructor(r){super(`error while running user-supplied JavaScript: ${r.toString()}`);this.userScriptError=r;this.code=e.code}static{s(this,"UserScriptError")}static{this.code="USER_SCRIPT_ERROR"}};var T3i=at(vke());var XUe,c$t=s(e=>XUe=e,"setJSRunner"),A3i=s(()=>{XUe=void 0},"removeJSRunner"),a$t,oCu=s(e=>a$t=e,"setOnErrorLog"),aCu=s(e=>{if(!e||typeof e!="string")return e;let t=/\[+(.+)]+/,r=e.match(t);return r&&r[1]?r[1]:e},"removeSquareBrackets"),cCu=s(e=>e==="snippets"||e==="helpers"||e.startsWith("snippets.")||e.startsWith("helpers."),"isReservedKey"),uCu=s((e,t)=>{if(cCu(e))return;let r=/^(["'`]).*\1$/,n=t;return r.test(e)?e.substring(1,e.length-1):(e.split(".").forEach(i=>{if(n==null||typeof n!="object")return null;n=n[aCu(i)]}),n)},"getContextValue");function x3i(handlebars,context){if(!l3i()||!XUe)throw new Error("JS disabled in environment.");try{let js=QUe(o$t(handlebars)),snippetMap={},snippetCache={};for(let e of context.snippets||[])snippetMap[e.name]=e.code;let clonedContext;Jce()?clonedContext=context:clonedContext=(0,T3i.default)(context);let sandboxContext={$:e=>uCu(e,clonedContext),helpers:Zce(),snippets:new Proxy({},{get:function(_,name){return name in snippetCache||(snippetCache[name]=eval(QUe(snippetMap[name]))),snippetCache[name]}})},logs=[];if(!Jce()){let e=YUe(js).split(js)[0].split(`
|
|
1402
|
-
`).length,t=s(r=>(...n)=>{Ij()||console[r](...n),n.forEach((o,a)=>{typeof o=="object"&&(n[a]=JSON.stringify(o))});let i=new Error().stack?.match(/<anonymous>:(\d+):\d+/)?.[1];logs.push({log:n,line:i?parseInt(i)-e:void 0,type:r})},"buildLogResponse");sandboxContext.console={log:t("log"),info:t("info"),debug:t("debug"),warn:t("warn"),error:t("error"),table:t("table")}}let res={data:XUe(js,sandboxContext),logs};return`{{${ZW} js_result-${JSON.stringify(res)}}}`}catch(e){a$t&&a$t(e);let{noThrow:t=!0}=context.__opts||{};if(e.code==="ERR_SCRIPT_EXECUTION_TIMEOUT")return"Timed out while executing JS";if(e.code==="JS_REQUEST_TIMEOUT_ERROR")return e.message;if(e.code===eK.code)return eK.message;if(e.code===kj.code){if(t)return e.userScriptError.toString();throw e}if(e.name==="SyntaxError"){if(t)return e.toString();throw e}return"Error while executing JS"}}s(x3i,"processJS");var lCu={"<":"<",">":">"};function fCu(e){return e==null||typeof e!="object"?!1:e.toString()==="[object Object]"||e.length>0&&typeof e[0]=="object"}s(fCu,"isObject");var dCu=[new FR(Rj.OBJECT,e=>new JUe.default.SafeString(JSON.stringify(e))),new FR(Rj.JS,x3i,!1),new FR(Rj.DECODE_ID,e=>{if(!e)return[];let t=typeof e=="string"?e:e._id,r=decodeURIComponent(t).replace(/'/g,'"');try{let n=JSON.parse(r);return Array.isArray(n)?n:[n]}catch{return[e]}}),new FR(Rj.ALL,(e,t)=>{let{__opts:r}=t;if(fCu(e))return new JUe.default.SafeString(JSON.stringify(e));if(r&&r.onlyFound&&e==null)return r.input;if(e==null||typeof e!="string")return e??"";e&&e.string&&(e=e.string);let n=e;return r&&r.escapeNewlines&&(n=e.replace(/\n/g,"\\n")),n=new JUe.default.SafeString(n.replace(/&/g,"&")),n==null||typeof n!="string"?n:n.replace(/[<>]/g,i=>lCu[i]||i)}),new FR(Rj.LITERAL,e=>{if(e===void 0)return"";let t=typeof e,r=t==="object"?JSON.stringify(e):e;return`{{${ZW} ${t}-${r}}}`})];function C3i(){return Object.values(Rj).concat(WUe,n$t)}s(C3i,"HelperNames");function u$t(e){for(let t of dCu)t.register(e)}s(u$t,"registerMinimum");function O3i(e){u$t(e),c3i(e)}s(O3i,"registerAll");var R3i=["#","else","/"];var tK=class{static{s(this,"Preprocessor")}constructor(t,r){this.name=t,this.fn=r}process(t,r,n){let i=this.fn(r,n),o=t.indexOf(r);return s$t(t,o,r.length,i)}},I3i=[new tK("swap-to-dot-notation",e=>{let t=e.indexOf("["),r=0;for(;t!==-1;){d3i(e.charAt(t-1))&&(e=s$t(e,t+r,1,".[")),r=t+1;let n=e.substring(r+1).indexOf("[");t=n>0?r+1+n:-1}return e}),new tK("fix-functions",e=>{for(let t of R3i){let r=`{ ${t}`,n=`{${t}`;e=e.replace(new RegExp(r,"g"),n)}return e}),new tK("normalize-spaces",e=>e.replace(/{{(\s{2,})/g,"{{ ")),new tK("finalise",(e,t)=>{let n=!t?.noHelpers,i=e.slice(2,e.length-2);i.charAt(0)===" "&&(i=i.slice(1)),i.charAt(i.length-1)===" "&&(i=i.slice(0,i.length-1));let o=i.split(" ")[0];for(let c of R3i)if(o.includes(c))return e;let a=o.trim().toLowerCase();return n&&!t?.disabledHelpers?.includes(a)&&C3i().some(c=>a===c.toLowerCase())&&(i=`(${i})`),`{{ all ${i} }}`})];var l$t=class{static{s(this,"Postprocessor")}constructor(t,r){this.name=t,this.fn=r}process(t){return this.fn(t)}},f$t=[new l$t("convert-literals",e=>{if(typeof e!="string"||!e.includes(ZW))return{result:e};let t=e.indexOf("-"),r=e.substring(12,t),n=e.substring(t+1,e.length-2);switch(r){case"string":return{result:n};case"number":return{result:parseFloat(n)};case"boolean":return{result:n==="true"};case"object":return{result:JSON.parse(n)};case"js_result":{let i=JSON.parse(n);return{result:i.data,logs:i.logs}}}return{result:n}})];function d$t(e,t,r){let n=[];for(let i of t){if(typeof e!="string")break;let o=new RegExp(KUe),a=e.match(o);if(a!=null)for(let c of a){let u=i.process(e,c,r||{});typeof u=="object"?("logs"in u&&u.logs&&(n=n.concat(u.logs)),e=u.result):e=u}}return{result:e,logs:n}}s(d$t,"process");function k3i(e,t){let r=I3i;return t.noFinalise&&(r=r.filter(n=>n.name!=="finalise")),d$t(e,r,t).result}s(k3i,"preprocess");function N3i(e){return d$t(e,f$t).result}s(N3i,"postprocess");function P3i(e){return d$t(e,f$t)}s(P3i,"postprocessWithLogs");var m$t=(0,h$t.create)();O3i(m$t);var mCu=Object.keys(m$t.helpers),L3i=(0,h$t.create)();u$t(L3i);var gCu={noHelpers:!1,cacheTemplates:!1,noEscaping:!1,escapeNewlines:!1,noFinalise:!1};function _Cu(e){return e?Object.keys(e).filter(r=>mCu.includes(r)):[]}s(_Cu,"findOverlappingHelpers");var p$t={};function yCu(e,t,r){t={...gCu,...t};let n=!t?.noHelpers,i=`${e}-${JSON.stringify(t)}`;if(t.cacheTemplates&&p$t[i])return p$t[i];let o=n?_Cu(r):[];if(e=k3i(e,{...t,disabledHelpers:o}),r&&n&&o.length>0)for(let u of B3i(e))e=e.replace(u,p3i(u,o,"./"));t.noEscaping&&(e=ECu(e));let c=(t.noHelpers?L3i:m$t).compile(e,{strict:!1});return p$t[i]=c,c}s(yCu,"createTemplate");function bCu(e,t,r){let n=e;if(typeof e!="string")throw new Error("Cannot process non-string types.");function i(o){let a=yCu(o,r,t),c=Math.floor(Date.now()/1e3)*1e3,u=a({now:new Date(c).toISOString(),__opts:{...r,input:o},...t});return r?.logging?P3i(u):N3i(u)}s(i,"process");try{if(r&&r.onlyFound){let o=[],a=B3i(e);for(let c of a){let u=i(c);typeof u=="object"&&"result"in u?(o=o.concat(u.logs||[]),e=e.replace(c,u.result)):e=e.replace(c,u)}return r?.logging?{result:e,logs:o}:e}else return i(e)}catch(o){let{noThrow:a=!0}=r||{};if(a)return n;throw o}}s(bCu,"processStringSyncInternal");function q3i(e,t,r){return bCu(e,t,{...r,logging:!1})}s(q3i,"processStringSync");function ECu(e){let t=f3i(e);if(t==null)return e;let r=[...new Set(t)];for(let n of r){let i=new RegExp(`${n}(?!})`,"g");e=e.replace(i,`{${n}}`)}return e}s(ECu,"disableEscaping");function B3i(e){if(!e||typeof e!="string")return[];let t=new RegExp(i$t),r=e.match(t);return r??[]}s(B3i,"findHBSBlocks");function vCu(){let e=Ij()?M3i.default:D3i.default;c$t((t,r)=>{e.createContext(r);let n=YUe(t),i=e.runInNewContext(n,r);if(i.error)throw new kj(i.error);return i.result})}s(vCu,"browserJSSetup");function SCu(){Jce()?A3i():vCu()}s(SCu,"defaultJSSetup");SCu();var wCu=require("download"),TCu=require("tar"),ACu=["package.json.hbs","schema.json.hbs","README.md.hbs"];async function xCu(e){let t=await(0,U3i.default)("https://api.github.com/repos/budibase/budibase-skeleton/releases/latest");if(t.status>=300)throw new Error("Failed to retrieve skeleton metadata");let r=await t.json();for(let n of r.assets)if(n.name&&n.name.includes(e))return n.browser_download_url;throw new Error("No skeleton found in latest release.")}s(xCu,"getSkeletonUrl");async function j3i(e,t){let r=await xCu(e),n=(0,ZUe.join)(F3i.default.tmpdir(),"skeleton.tar.gz");Nj.default.writeFileSync(n,await wCu(r)),Nj.default.mkdirSync(t),await TCu.extract({file:n,C:t}),Nj.default.rmSync(n)}s(j3i,"getSkeleton");async function $3i(e,t,r,n){for(let i of ACu){let o=(0,ZUe.join)(t,i),a=(0,ZUe.join)(t,i.substring(0,i.length-4)),c=Nj.default.readFileSync(o,"utf8");if(!c)continue;let u=q3i(c,{name:t,description:r,version:n});Nj.default.writeFileSync(a,u),Nj.default.rmSync(o)}}s($3i,"fleshOutSkeleton");ZD();var Pj=at(require("fs"));Ir();var G3i=at(require("util")),z3i=at(require("child_process"));var CCu=G3i.default.promisify(z3i.default.exec);async function V3i(e,t="./"){let{stdout:r}=await CCu(e,{cwd:t});return r}s(V3i,"exec");async function H3i(e){try{return await V3i(`${e} --version`),!0}catch{return!1}}s(H3i,"utilityInstalled");async function eFe(e,t="./"){let r=await H3i("yarn"),n=await H3i("npm");if(!r&&!n)throw new Error("Must have yarn or npm installed to run build.");let i=e==="install"?`npm ${e}`:`npm run ${e}`,o=r?`yarn ${e} --ignore-engines`:i;await V3i(o,t)}s(eFe,"runPkgCommand");var tFe=require("path");ad();var OCu=require("find-free-port");function RCu(){if(!Pj.default.existsSync("package.json"))throw new Error("Please run in a plugin directory - must contain package.json");if(!Pj.default.existsSync("schema.json"))throw new Error("Please run in a plugin directory - must contain schema.json")}s(RCu,"checkInPlugin");async function ICu(e){return Pj.default.readdirSync(process.cwd()).find(r=>r===".git")?!1:(console.log(jc(`By default the plugin will be created in the directory "${e}"`)),console.log(jc("if you are already in an empty directory, such as a new Git repo, you can disable this functionality.")),sI("Create top level directory?"))}s(ICu,"askAboutTopLevel");async function kCu(e){let t=e.init||e;if(!t||!_Vt.includes(t)){console.log(ou("Please provide a type to init, either 'component', 'datasource' or 'automation'."));return}console.log(jc("Lets get some details about your new plugin:"));let r=await JD("Name",`budibase-${t}`);if(Pj.default.existsSync(r)){console.log(ou("Directory by plugin name already exists, pick a new name."));return}let n=await JD("Description",`An amazing Budibase ${t}!`),i=await JD("Version","1.0.0"),o=await ICu(r);console.log(jc("Retrieving project...")),await j3i(t,r),await $3i(t,r,n,i),console.log(jc("Installing dependencies...")),await eFe("install",(0,tFe.join)(process.cwd(),r)),o?console.log(jc(`Plugin created in directory "${r}"`)):(ije(r,process.cwd()),console.log(jc("Plugin created in current directory."))),Hue(WA.PluginInit,{type:t,name:r,description:n,version:i})}s(kCu,"init");async function W3i(){RCu(),console.log(jc("Verifying plugin..."));let e=Pj.default.readFileSync("schema.json","utf8"),t=Pj.default.readFileSync("package.json","utf8"),r,n;try{let i=JSON.parse(e),o=JSON.parse(t);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,aPe.validate(i),{name:r,version:n}}catch(i){i&&i.message&&i.message.includes("not valid JSON")?console.log(ou(`schema.json is not valid JSON: ${i.message}`)):console.log(ou(`Invalid schema/package.json: ${i.message}`))}}s(W3i,"verify");async function NCu(){let e=await W3i();if(!e?.name)return;console.log(Fc("Verified!")),console.log(jc("Building plugin...")),await eFe("build");let t=(0,tFe.join)("dist",`${e.name}-${e.version}.tar.gz`);console.log(Fc(`Build complete - output in: ${t}`))}s(NCu,"build");async function PCu(){let e=await W3i();if(!e?.name)return;let t=(0,tFe.join)("dist",`${e.name}-${e.version}.tar.gz`);console.log(jc(`Watching - build in: ${t}`));try{await eFe("watch")}catch{console.log(Fc("Watch exited."))}}s(PCu,"watch");async function DCu(){let e=await JD("Directory to watch","./"),[t]=await OCu(1e4),r="admin";await Kue({init:"quick",single:!0,watchPluginDir:e,genUser:r,port:t,silent:!0}),await Qj(),console.log(Fc("Configuration has been written to docker-compose.yaml")),console.log(Fc("Development environment started successfully - connect at: ")+jc(`http://localhost:${t}`)),console.log(Fc("Use the following credentials to login:")),console.log(Fc("Email: ")+jc(Eje)),console.log(Fc("Password: ")+jc(r))}s(DCu,"dev");var K3i=new NS("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.",kCu).addSubOption("--build","Build your plugin, this will verify and produce a final tarball for your project.",NCu).addSubOption("--watch","Automatically build any changes to your plugin.",PCu).addSubOption("--dev","Run a development environment which automatically watches the current directory.",DCu);function Y3i(){return[w9t,J5t,g2i,K3i]}s(Y3i,"getCommands");var X3i=require("commander");ad();var Q3i="3.19.1";async function LCu(){let e=new X3i.Command().addHelpCommand("help",yK("Help with Budibase commands.")).helpOption(!1).version(Q3i);for(let t of Y3i())t.configure(e);await e.parseAsync(process.argv)}s(LCu,"init");var qCu=["exit","SIGINT","SIGUSR1","SIGUSR2","uncaughtException"];qCu.forEach(e=>{process.on(e,t=>{t&&!isNaN(t)||t&&(console.error(ou("Failed to run CLI command - please report with the following message:")),console.error(ou(t)))})});LCu().catch(e=>{console.error("Unexpected error - ",e)});
|
|
1402
|
+
`).length,t=s(r=>(...n)=>{Ij()||console[r](...n),n.forEach((o,a)=>{typeof o=="object"&&(n[a]=JSON.stringify(o))});let i=new Error().stack?.match(/<anonymous>:(\d+):\d+/)?.[1];logs.push({log:n,line:i?parseInt(i)-e:void 0,type:r})},"buildLogResponse");sandboxContext.console={log:t("log"),info:t("info"),debug:t("debug"),warn:t("warn"),error:t("error"),table:t("table")}}let res={data:XUe(js,sandboxContext),logs};return`{{${ZW} js_result-${JSON.stringify(res)}}}`}catch(e){a$t&&a$t(e);let{noThrow:t=!0}=context.__opts||{};if(e.code==="ERR_SCRIPT_EXECUTION_TIMEOUT")return"Timed out while executing JS";if(e.code==="JS_REQUEST_TIMEOUT_ERROR")return e.message;if(e.code===eK.code)return eK.message;if(e.code===kj.code){if(t)return e.userScriptError.toString();throw e}if(e.name==="SyntaxError"){if(t)return e.toString();throw e}return"Error while executing JS"}}s(x3i,"processJS");var lCu={"<":"<",">":">"};function fCu(e){return e==null||typeof e!="object"?!1:e.toString()==="[object Object]"||e.length>0&&typeof e[0]=="object"}s(fCu,"isObject");var dCu=[new FR(Rj.OBJECT,e=>new JUe.default.SafeString(JSON.stringify(e))),new FR(Rj.JS,x3i,!1),new FR(Rj.DECODE_ID,e=>{if(!e)return[];let t=typeof e=="string"?e:e._id,r=decodeURIComponent(t).replace(/'/g,'"');try{let n=JSON.parse(r);return Array.isArray(n)?n:[n]}catch{return[e]}}),new FR(Rj.ALL,(e,t)=>{let{__opts:r}=t;if(fCu(e))return new JUe.default.SafeString(JSON.stringify(e));if(r&&r.onlyFound&&e==null)return r.input;if(e==null||typeof e!="string")return e??"";e&&e.string&&(e=e.string);let n=e;return r&&r.escapeNewlines&&(n=e.replace(/\n/g,"\\n")),n=new JUe.default.SafeString(n.replace(/&/g,"&")),n==null||typeof n!="string"?n:n.replace(/[<>]/g,i=>lCu[i]||i)}),new FR(Rj.LITERAL,e=>{if(e===void 0)return"";let t=typeof e,r=t==="object"?JSON.stringify(e):e;return`{{${ZW} ${t}-${r}}}`})];function C3i(){return Object.values(Rj).concat(WUe,n$t)}s(C3i,"HelperNames");function u$t(e){for(let t of dCu)t.register(e)}s(u$t,"registerMinimum");function O3i(e){u$t(e),c3i(e)}s(O3i,"registerAll");var R3i=["#","else","/"];var tK=class{static{s(this,"Preprocessor")}constructor(t,r){this.name=t,this.fn=r}process(t,r,n){let i=this.fn(r,n),o=t.indexOf(r);return s$t(t,o,r.length,i)}},I3i=[new tK("swap-to-dot-notation",e=>{let t=e.indexOf("["),r=0;for(;t!==-1;){d3i(e.charAt(t-1))&&(e=s$t(e,t+r,1,".[")),r=t+1;let n=e.substring(r+1).indexOf("[");t=n>0?r+1+n:-1}return e}),new tK("fix-functions",e=>{for(let t of R3i){let r=`{ ${t}`,n=`{${t}`;e=e.replace(new RegExp(r,"g"),n)}return e}),new tK("normalize-spaces",e=>e.replace(/{{(\s{2,})/g,"{{ ")),new tK("finalise",(e,t)=>{let n=!t?.noHelpers,i=e.slice(2,e.length-2);i.charAt(0)===" "&&(i=i.slice(1)),i.charAt(i.length-1)===" "&&(i=i.slice(0,i.length-1));let o=i.split(" ")[0];for(let c of R3i)if(o.includes(c))return e;let a=o.trim().toLowerCase();return n&&!t?.disabledHelpers?.includes(a)&&C3i().some(c=>a===c.toLowerCase())&&(i=`(${i})`),`{{ all ${i} }}`})];var l$t=class{static{s(this,"Postprocessor")}constructor(t,r){this.name=t,this.fn=r}process(t){return this.fn(t)}},f$t=[new l$t("convert-literals",e=>{if(typeof e!="string"||!e.includes(ZW))return{result:e};let t=e.indexOf("-"),r=e.substring(12,t),n=e.substring(t+1,e.length-2);switch(r){case"string":return{result:n};case"number":return{result:parseFloat(n)};case"boolean":return{result:n==="true"};case"object":return{result:JSON.parse(n)};case"js_result":{let i=JSON.parse(n);return{result:i.data,logs:i.logs}}}return{result:n}})];function d$t(e,t,r){let n=[];for(let i of t){if(typeof e!="string")break;let o=new RegExp(KUe),a=e.match(o);if(a!=null)for(let c of a){let u=i.process(e,c,r||{});typeof u=="object"?("logs"in u&&u.logs&&(n=n.concat(u.logs)),e=u.result):e=u}}return{result:e,logs:n}}s(d$t,"process");function k3i(e,t){let r=I3i;return t.noFinalise&&(r=r.filter(n=>n.name!=="finalise")),d$t(e,r,t).result}s(k3i,"preprocess");function N3i(e){return d$t(e,f$t).result}s(N3i,"postprocess");function P3i(e){return d$t(e,f$t)}s(P3i,"postprocessWithLogs");var m$t=(0,h$t.create)();O3i(m$t);var mCu=Object.keys(m$t.helpers),L3i=(0,h$t.create)();u$t(L3i);var gCu={noHelpers:!1,cacheTemplates:!1,noEscaping:!1,escapeNewlines:!1,noFinalise:!1};function _Cu(e){return e?Object.keys(e).filter(r=>mCu.includes(r)):[]}s(_Cu,"findOverlappingHelpers");var p$t={};function yCu(e,t,r){t={...gCu,...t};let n=!t?.noHelpers,i=`${e}-${JSON.stringify(t)}`;if(t.cacheTemplates&&p$t[i])return p$t[i];let o=n?_Cu(r):[];if(e=k3i(e,{...t,disabledHelpers:o}),r&&n&&o.length>0)for(let u of B3i(e))e=e.replace(u,p3i(u,o,"./"));t.noEscaping&&(e=ECu(e));let c=(t.noHelpers?L3i:m$t).compile(e,{strict:!1});return p$t[i]=c,c}s(yCu,"createTemplate");function bCu(e,t,r){let n=e;if(typeof e!="string")throw new Error("Cannot process non-string types.");function i(o){let a=yCu(o,r,t),c=Math.floor(Date.now()/1e3)*1e3,u=a({now:new Date(c).toISOString(),__opts:{...r,input:o},...t});return r?.logging?P3i(u):N3i(u)}s(i,"process");try{if(r&&r.onlyFound){let o=[],a=B3i(e);for(let c of a){let u=i(c);typeof u=="object"&&"result"in u?(o=o.concat(u.logs||[]),e=e.replace(c,u.result)):e=e.replace(c,u)}return r?.logging?{result:e,logs:o}:e}else return i(e)}catch(o){let{noThrow:a=!0}=r||{};if(a)return n;throw o}}s(bCu,"processStringSyncInternal");function q3i(e,t,r){return bCu(e,t,{...r,logging:!1})}s(q3i,"processStringSync");function ECu(e){let t=f3i(e);if(t==null)return e;let r=[...new Set(t)];for(let n of r){let i=new RegExp(`${n}(?!})`,"g");e=e.replace(i,`{${n}}`)}return e}s(ECu,"disableEscaping");function B3i(e){if(!e||typeof e!="string")return[];let t=new RegExp(i$t),r=e.match(t);return r??[]}s(B3i,"findHBSBlocks");function vCu(){let e=Ij()?M3i.default:D3i.default;c$t((t,r)=>{e.createContext(r);let n=YUe(t),i=e.runInNewContext(n,r);if(i.error)throw new kj(i.error);return i.result})}s(vCu,"browserJSSetup");function SCu(){Jce()?A3i():vCu()}s(SCu,"defaultJSSetup");SCu();var wCu=require("download"),TCu=require("tar"),ACu=["package.json.hbs","schema.json.hbs","README.md.hbs"];async function xCu(e){let t=await(0,U3i.default)("https://api.github.com/repos/budibase/budibase-skeleton/releases/latest");if(t.status>=300)throw new Error("Failed to retrieve skeleton metadata");let r=await t.json();for(let n of r.assets)if(n.name&&n.name.includes(e))return n.browser_download_url;throw new Error("No skeleton found in latest release.")}s(xCu,"getSkeletonUrl");async function j3i(e,t){let r=await xCu(e),n=(0,ZUe.join)(F3i.default.tmpdir(),"skeleton.tar.gz");Nj.default.writeFileSync(n,await wCu(r)),Nj.default.mkdirSync(t),await TCu.extract({file:n,C:t}),Nj.default.rmSync(n)}s(j3i,"getSkeleton");async function $3i(e,t,r,n){for(let i of ACu){let o=(0,ZUe.join)(t,i),a=(0,ZUe.join)(t,i.substring(0,i.length-4)),c=Nj.default.readFileSync(o,"utf8");if(!c)continue;let u=q3i(c,{name:t,description:r,version:n});Nj.default.writeFileSync(a,u),Nj.default.rmSync(o)}}s($3i,"fleshOutSkeleton");ZD();var Pj=at(require("fs"));Ir();var G3i=at(require("util")),z3i=at(require("child_process"));var CCu=G3i.default.promisify(z3i.default.exec);async function V3i(e,t="./"){let{stdout:r}=await CCu(e,{cwd:t});return r}s(V3i,"exec");async function H3i(e){try{return await V3i(`${e} --version`),!0}catch{return!1}}s(H3i,"utilityInstalled");async function eFe(e,t="./"){let r=await H3i("yarn"),n=await H3i("npm");if(!r&&!n)throw new Error("Must have yarn or npm installed to run build.");let i=e==="install"?`npm ${e}`:`npm run ${e}`,o=r?`yarn ${e} --ignore-engines`:i;await V3i(o,t)}s(eFe,"runPkgCommand");var tFe=require("path");ad();var OCu=require("find-free-port");function RCu(){if(!Pj.default.existsSync("package.json"))throw new Error("Please run in a plugin directory - must contain package.json");if(!Pj.default.existsSync("schema.json"))throw new Error("Please run in a plugin directory - must contain schema.json")}s(RCu,"checkInPlugin");async function ICu(e){return Pj.default.readdirSync(process.cwd()).find(r=>r===".git")?!1:(console.log(jc(`By default the plugin will be created in the directory "${e}"`)),console.log(jc("if you are already in an empty directory, such as a new Git repo, you can disable this functionality.")),sI("Create top level directory?"))}s(ICu,"askAboutTopLevel");async function kCu(e){let t=e.init||e;if(!t||!_Vt.includes(t)){console.log(ou("Please provide a type to init, either 'component', 'datasource' or 'automation'."));return}console.log(jc("Lets get some details about your new plugin:"));let r=await JD("Name",`budibase-${t}`);if(Pj.default.existsSync(r)){console.log(ou("Directory by plugin name already exists, pick a new name."));return}let n=await JD("Description",`An amazing Budibase ${t}!`),i=await JD("Version","1.0.0"),o=await ICu(r);console.log(jc("Retrieving project...")),await j3i(t,r),await $3i(t,r,n,i),console.log(jc("Installing dependencies...")),await eFe("install",(0,tFe.join)(process.cwd(),r)),o?console.log(jc(`Plugin created in directory "${r}"`)):(ije(r,process.cwd()),console.log(jc("Plugin created in current directory."))),Hue(WA.PluginInit,{type:t,name:r,description:n,version:i})}s(kCu,"init");async function W3i(){RCu(),console.log(jc("Verifying plugin..."));let e=Pj.default.readFileSync("schema.json","utf8"),t=Pj.default.readFileSync("package.json","utf8"),r,n;try{let i=JSON.parse(e),o=JSON.parse(t);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,aPe.validate(i),{name:r,version:n}}catch(i){i&&i.message&&i.message.includes("not valid JSON")?console.log(ou(`schema.json is not valid JSON: ${i.message}`)):console.log(ou(`Invalid schema/package.json: ${i.message}`))}}s(W3i,"verify");async function NCu(){let e=await W3i();if(!e?.name)return;console.log(Fc("Verified!")),console.log(jc("Building plugin...")),await eFe("build");let t=(0,tFe.join)("dist",`${e.name}-${e.version}.tar.gz`);console.log(Fc(`Build complete - output in: ${t}`))}s(NCu,"build");async function PCu(){let e=await W3i();if(!e?.name)return;let t=(0,tFe.join)("dist",`${e.name}-${e.version}.tar.gz`);console.log(jc(`Watching - build in: ${t}`));try{await eFe("watch")}catch{console.log(Fc("Watch exited."))}}s(PCu,"watch");async function DCu(){let e=await JD("Directory to watch","./"),[t]=await OCu(1e4),r="admin";await Kue({init:"quick",single:!0,watchPluginDir:e,genUser:r,port:t,silent:!0}),await Qj(),console.log(Fc("Configuration has been written to docker-compose.yaml")),console.log(Fc("Development environment started successfully - connect at: ")+jc(`http://localhost:${t}`)),console.log(Fc("Use the following credentials to login:")),console.log(Fc("Email: ")+jc(Eje)),console.log(Fc("Password: ")+jc(r))}s(DCu,"dev");var K3i=new NS("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.",kCu).addSubOption("--build","Build your plugin, this will verify and produce a final tarball for your project.",NCu).addSubOption("--watch","Automatically build any changes to your plugin.",PCu).addSubOption("--dev","Run a development environment which automatically watches the current directory.",DCu);function Y3i(){return[w9t,J5t,g2i,K3i]}s(Y3i,"getCommands");var X3i=require("commander");ad();var Q3i="3.19.2";async function LCu(){let e=new X3i.Command().addHelpCommand("help",yK("Help with Budibase commands.")).helpOption(!1).version(Q3i);for(let t of Y3i())t.configure(e);await e.parseAsync(process.argv)}s(LCu,"init");var qCu=["exit","SIGINT","SIGUSR1","SIGUSR2","uncaughtException"];qCu.forEach(e=>{process.on(e,t=>{t&&!isNaN(t)||t&&(console.error(ou("Failed to run CLI command - please report with the following message:")),console.error(ou(t)))})});LCu().catch(e=>{console.error("Unexpected error - ",e)});
|
|
1403
1403
|
/*! Bundled license information:
|
|
1404
1404
|
|
|
1405
1405
|
lodash/lodash.js:
|