@budibase/backend-core 3.10.6 → 3.10.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js
CHANGED
|
@@ -33,7 +33,7 @@ attempted value: ${s}
|
|
|
33
33
|
if (doc.ssoId) {
|
|
34
34
|
emit(doc.ssoId, doc._id)
|
|
35
35
|
}
|
|
36
|
-
}`,"platform_users_lowercase_2")},Yo=async(t,e)=>{let r={account_by_email:DA,platform_users_lowercase_2:CA};return ut(Ee.PLATFORM_INFO.name,async n=>{let i=r[t];return If(t,e,n,i,{arrayResponse:!0})})},vA={by_email2:xA,by_api_key:wA,by_app:RA},dr=async(t,e,r,n)=>{r||(r=ie());let i=vA[t];return If(t,e,r,i,n)};async function Of(t,e,r){let n=ie(),i=vA[t];return Ko(t,e,n,i,r)}var xf=class{constructor({source:e,target:r}){this.source=Et(e),this.target=Et(r),e.startsWith("app_dev")&&r.startsWith("app")?this.direction="toProduction":e.startsWith("app")&&r.startsWith("app_dev")&&(this.direction="toDev")}async close(){await Promise.all([bo(this.source),bo(this.target)])}replicate(e={}){return new Promise(r=>{this.source.replicate.to(this.target,e).on("denied",function(n){throw new Error(`Denied: Document failed to replicate ${n}`)}).on("complete",function(n){return r(n)}).on("error",function(n){throw n})})}appReplicateOpts(e={}){if(typeof e.filter=="string")return e;let r=e.filter,i=this.direction==="toDev";return delete e.filter,{...e,filter:(s,o)=>i&&s._id?.startsWith("_design")||s._id?.startsWith("log_au")||s._id==="app_metadata"?!1:r?r(s,o):!0}}async rollback(){await this.target.destroy(),this.target=Et(this.target.name),await this.replicate()}},NA=xf;var UA=W(require("node-fetch"));var Jo=Fr.removeKeyNumbering;function oi(t){return t==null||t===""}var pr=class t{#l;#d;#e;#r;#n;#i;#s;#o;#t;#p;#a;#u=!1;#c;static{this.maxLimit=200}constructor(e,r,n){this.#l=e,this.#d=r,this.#e={allOr:!1,onEmptyFilter:"all",string:{},fuzzy:{},range:{},equal:{},notEqual:{},empty:{},notEmpty:{},oneOf:{},contains:{},notContains:{},containsAny:{},...n},this.#r=50,this.#s="ascending",this.#o="string",this.#t=!0}disableEscaping(){return this.#u=!0,this}setIndexBuilder(e){return this.#a=e,this}setVersion(e){return e!=null&&(this.#p=e),this}setTable(e){return this.#e.equal.tableId=e,this}setLimit(e){return e!=null&&(this.#r=e),this}setSort(e){return e!=null&&(this.#n=e),this}setSortOrder(e){return e!=null&&(this.#s=e),this}setSortType(e){return e!=null&&(this.#o=e),this}setBookmark(e){return e!=null&&(this.#i=e),this}setSkip(e){return this.#c=e,this}excludeDocs(){return this.#t=!1,this}includeDocs(){return this.#t=!0,this}addString(e,r){return this.#e.string[e]=r,this}addFuzzy(e,r){return this.#e.fuzzy[e]=r,this}addRange(e,r,n){return this.#e.range[e]={low:r,high:n},this}addEqual(e,r){return this.#e.equal[e]=r,this}addNotEqual(e,r){return this.#e.notEqual[e]=r,this}addEmpty(e,r){return this.#e.empty[e]=r,this}addNotEmpty(e,r){return this.#e.notEmpty[e]=r,this}addOneOf(e,r){return this.#e.oneOf[e]=r,this}addContains(e,r){return this.#e.contains[e]=r,this}addNotContains(e,r){return this.#e.notContains[e]=r,this}addContainsAny(e,r){return this.#e.containsAny[e]=r,this}setAllOr(){this.#e.allOr=!0}setOnEmptyFilter(e){this.#e.onEmptyFilter=e}handleSpaces(e){return this.#u?e:e.replace(/ /g,"_")}preprocess(e,{escape:r,lowercase:n,wrap:i,type:s}={}){let o=!!this.#p,a=typeof e;return e&&n&&(e=e.toLowerCase?e.toLowerCase():e),!this.#u&&r&&a==="string"&&(e=`${e}`.replace(/[ /#+\-&|!(){}\]^"~*?:\\]/g,"\\$&")),a==="string"&&!isNaN(e)&&!s?e=`"${e}"`:o&&i&&(e=a==="number"?e:`"${e}"`),e}isMultiCondition(){let e=0;for(let r of Object.values(this.#e))typeof r=="object"&&(e+=Object.keys(r).length);return e>1}compressFilters(e){let r={};for(let s of Object.keys(e)){let o=Jo(s);r[o]?r[o]=r[o].concat(e[s]):r[o]=e[s]}let n={},i=1;for(let[s,o]of Object.entries(r))n[`${i++}:${s}`]=o;return n}buildSearchQuery(){let e=this,r=this.#e&&this.#e.allOr,n=r?"":"*:*",i=!0,s={escape:!0,lowercase:!0,wrap:!0},o="";this.#e.equal.tableId&&(o=this.#e.equal.tableId,delete this.#e.equal.tableId);let a=(f,g)=>oi(g)?null:`${f}:${e.preprocess(g,s)}`,u=(f,g,E="AND")=>{if(oi(g))return null;if(!Array.isArray(g))return`${f}:${g}`;let y=`${e.preprocess(g[0],{escape:!0})}`;for(let _=1;_<g.length;_++)y+=` ${E} ${e.preprocess(g[_],{escape:!0})}`;return`${f}:(${y})`},c=(f,g)=>oi(g)?null:(g=e.preprocess(g,{escape:!0,lowercase:!0,type:"fuzzy"}),`${f}:/.*${g}.*/`),l=(f,g)=>{let E=r?"*:* AND ":"",y=r?"AND":void 0;return E+"NOT "+u(f,g,y)},d=(f,g)=>u(f,g,"OR"),m=(f,g)=>{if(oi(g))return"*:*";if(!Array.isArray(g))if(typeof g=="string")g=g.split(",");else return"";let E=`${e.preprocess(g[0],s)}`;for(let y=1;y<g.length;y++)E+=` OR ${e.preprocess(g[y],s)}`;return`${f}:(${E})`};function p(f,g,E){let y="";for(let[_,S]of Object.entries(f)){_=Jo(_),_=e.preprocess(e.handleSpaces(_),{escape:!0});let M=g(_,S);if(M!=null){if(y.length>0||n.length>0){let T=E?.mode?E.mode:r?"OR":"AND";y+=` ${T} `}y+=M,(typeof S!="string"&&S!=null||typeof S=="string"&&S!==o&&S!=="")&&(i=!1)}}if(E?.returnBuilt)return y;n+=y}if(this.#e.string&&p(this.#e.string,(f,g)=>oi(g)?null:(g=e.preprocess(g,{escape:!0,lowercase:!0,type:"string"}),`${f}:${g}*`)),this.#e.range&&p(this.#e.range,(f,g)=>{if(oi(g)||g.low==null||g.low===""||g.high==null||g.high==="")return null;let E=e.preprocess(g.low,s),y=e.preprocess(g.high,s);return`${f}:[${E} TO ${y}]`}),this.#e.fuzzy&&p(this.#e.fuzzy,c),this.#e.equal&&p(this.#e.equal,a),this.#e.notEqual&&p(this.#e.notEqual,(f,g)=>oi(g)?null:typeof g=="boolean"?`(*:* AND !${f}:${g})`:`!${f}:${e.preprocess(g,s)}`),this.#e.empty&&p(this.#e.empty,f=>(i=!1,`(*:* -${f}:["" TO *])`)),this.#e.notEmpty&&p(this.#e.notEmpty,f=>(i=!1,`${f}:["" TO *]`)),this.#e.oneOf&&p(this.#e.oneOf,m),this.#e.contains&&p(this.#e.contains,u),this.#e.notContains&&p(this.compressFilters(this.#e.notContains),l),this.#e.containsAny&&p(this.#e.containsAny,d),o&&(n=this.isMultiCondition()?`(${n})`:n,r=!1,p({tableId:o},a)),i){if(this.#e.onEmptyFilter==="none")return"";if(this.#e?.allOr)return n.replace("()","(*:*)")}return n}buildSearchBody(){let e={q:this.buildSearchQuery(),limit:Math.min(this.#r,t.maxLimit),include_docs:this.#t};if(this.#i&&(e.bookmark=this.#i),this.#n){let r=this.#s==="descending"?"-":"",n=`<${this.#o}>`;e.sort=`${r}${this.handleSpaces(this.#n)}${n}`}return e}async run(){return this.#c&&await this.#m(this.#c),await this.#f()}async#m(e){let r=this.#t,n=this.#r;this.excludeDocs();let i=e,s=0;do{let o=Math.min(t.maxLimit,i);this.setLimit(o);let{bookmark:a,rows:u}=await this.#f();this.setBookmark(a),s=u.length,i-=u.length}while(i>0&&s>0);this.#t=r,this.#r=n}async#f(){let{url:e,cookie:r}=vt(),n=`${e}/${this.#l}/_design/database/_search/${this.#d}`,i=this.buildSearchBody();try{return await PA(n,i,r)}catch(s){if(s.status===404&&this.#a)return await this.#a(),await PA(n,i,r);throw s}}};async function PA(t,e,r){let n=await(0,UA.default)(t,{body:JSON.stringify(e),method:"POST",headers:{Authorization:r}});if(n.status===404)throw n;let i=await n.json(),s={rows:[],totalRows:0};return i.rows!=null&&i.rows.length>0&&(s.rows=i.rows.map(o=>o.doc)),i.bookmark&&(s.bookmark=i.bookmark),i.total_rows&&(s.totalRows=i.total_rows),s}async function LA(t,e,r,n){let i=n.bookmark,s=n.rows||[];if(n.limit&&s.length>=n.limit)return s;let o=pr.maxLimit;n.limit&&s.length>n.limit-pr.maxLimit&&(o=n.limit-s.length);let a=new pr(t,e,r);a.setVersion(n.version).setBookmark(i).setLimit(o).setSort(n.sort).setSortOrder(n.sortOrder).setSortType(n.sortType),n.tableId&&a.setTable(n.tableId);let u=await a.run();if(!u.rows.length)return s;if(u.rows.length<pr.maxLimit)return[...s,...u.rows];let c={...n,bookmark:u.bookmark,rows:[...s,...u.rows]};return await LA(t,e,r,c)}async function VN(t,e,r,n){let i=n.limit;(i==null||isNaN(i)||i<0)&&(i=50),i=Math.min(i,pr.maxLimit);let s=new pr(t,e,r);n.version&&s.setVersion(n.version),n.tableId&&s.setTable(n.tableId),n.sort&&s.setSort(n.sort).setSortOrder(n.sortOrder).setSortType(n.sortType),n.indexer&&s.setIndexBuilder(n.indexer),n.disableEscaping&&s.disableEscaping();let o=await s.setBookmark(n.bookmark).setLimit(i).run();s.setBookmark(o.bookmark).setLimit(1),n.tableId&&s.setTable(n.tableId);let a=await s.run();return{...o,hasNextPage:a.rows&&a.rows.length>0}}async function qN(t,e,r,n){let i=n.limit;return(i==null||isNaN(i)||i<0)&&(i=1e3),n.limit=Math.min(i,1e3),{rows:await LA(t,e,r,n)}}var Rf={};N(Rf,{createUserIndex:()=>WN});async function WN(){let t=ie(),e;try{e=await t.get("_design/database")}catch(n){n.status===404&&(e={_id:"_design/database"})}let r=function(n){if(n._id&&!n._id.startsWith("us_"))return;let i=["_id","_rev","password","account","license","budibaseAccess","accountPortalAccess","csrfToken"];function s(o,a){for(let u of Object.keys(o)){if(i.includes(u))continue;let c=a!=null?`${a}.${u}`:u;typeof o[u]=="string"?index(c,o[u].toLowerCase(),{facet:!0}):typeof o[u]!="object"?index(c,o[u],{facet:!0}):s(o[u],c)}}s(n)};e.indexes={user:{index:r.toString(),analyzer:{default:"keyword",name:"perfield"}}},await t.put(e)}function MA(t,e){let r=e.toString();if(typeof t=="object")return t.status===e||t.message?.includes(r);if(typeof t=="number")return t===e;if(typeof t=="string")return t.includes(r)}function QN(t){return MA(t,409)}var pc=W(require("jsonwebtoken")),wf="app"+C,kA="/app/",BA="/app/preview",jN="/builder",GA=`${jN}/app/`,HN="/api/public/v";function is(t){return t&&t.startsWith(wf)?t:void 0}async function $A(t){let r=`/${t.path.split("/")[2].toLowerCase()}`,n=j();!h.isDev()&&h.MULTI_TENANCY&&(n=qo(t,{includeStrategies:["subdomain"]}));let s=(await qe(n,()=>Ho({dev:!1}))).filter(o=>o.url&&o.url.toLowerCase()===r)[0];return s&&s.appId?s.appId:void 0}function KN(t){return t.path.startsWith(`/${wf}`)?!0:t.path.startsWith(kA)}function YN(t){return t.path.startsWith(GA)}function JN(t){return t.path.startsWith(BA)}function zN(t){return t.path.startsWith(HN)}async function ZN(t){let e=[t.request.headers["x-budibase-app-id"]],r;for(let a of e)if(r=is(a),r)break;!r&&t.request.body&&t.request.body.appId&&(r=is(t.request.body.appId));let n=FA(t.path);!r&&n&&(r=is(n)),!r&&t.query?.appId&&(r=is(t.query?.appId));let i=t.path.startsWith(BA),s=t.path.startsWith(kA)&&!i;!r&&s&&(r=is(await $A(t)));let o=t.request.headers.referer;if(!r&&o?.includes(GA)){let a=FA(t.request.headers.referer);r=is(a)}return r}function FA(t){if(t)return t.split("?")[0].split("/").find(e=>e.startsWith(wf))}function fc(t){if(t)try{return pc.default.verify(t,h.JWT_SECRET)}catch(e){if(h.JWT_SECRET_FALLBACK)return pc.default.verify(t,h.JWT_SECRET_FALLBACK);throw e}}function zo(t){return h.INTERNAL_API_KEY&&h.INTERNAL_API_KEY===t?!0:!!(h.INTERNAL_API_KEY_FALLBACK&&h.INTERNAL_API_KEY_FALLBACK===t)}function fr(t,e){let r=t.cookies.get(e);if(r)return fc(r)}function VA(t,e,r="builder",n={sign:!0}){e&&n&&n.sign&&(e=pc.default.sign(e,h.JWT_SECRET));let i={expires:Wu,path:"/",httpOnly:!1,overwrite:!0};h.COOKIE_DOMAIN&&(i.domain=h.COOKIE_DOMAIN),t.cookies.set(r,e,i)}function Hr(t,e){VA(t,null,e)}function XN(t){return t.headers["x-budibase-type"]==="client"}function bf(t){return new Promise(e=>setTimeout(e,t))}function Df(t){return!!Dh[t]}function eP(t){if(typeof t!="object")return!1;try{JSON.stringify(t)}catch(e){if(e instanceof Error&&e?.message.includes("circular structure"))return!0}return!1}function tP(t){return!!t.match(/^.+:\/\/.+$/)}function Cf(t){return t&&!!t.match(/^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/)}var vf=(s=>(s.MILLISECONDS="milliseconds",s.SECONDS="seconds",s.MINUTES="minutes",s.HOURS="hours",s.DAYS="days",s))(vf||{}),mc={milliseconds:1,seconds:1e3,minutes:6e4,hours:36e5,days:864e5},be=class t{constructor(e){this.ms=e}to(e){return this.ms/mc[e]}toMs(){return this.ms}toSeconds(){return this.to("seconds")}static convert(e,r,n){return n*mc[e]/mc[r]}static from(e,r){return new t(r*mc[e])}static fromSeconds(e){return t.from("seconds",e)}static fromMinutes(e){return t.from("minutes",e)}static fromHours(e){return t.from("hours",e)}static fromDays(e){return t.from("days",e)}static fromMilliseconds(e){return t.from("milliseconds",e)}};async function rP(t){let e=performance.now();return[await t(),be.fromMilliseconds(performance.now()-e)]}async function nP(t,e){if(t==="custom")return ai(e);switch(t){case"try_once":return ai(os.TRY_ONCE);case"try_twice":return ai(os.TRY_TWICE);case"default":return ai(os.DEFAULT);case"delay_500":return ai(os.DELAY_500);case"auto_extend":return ai(os.AUTO_EXTEND);default:throw Ci.unreachable(t)}}var os={TRY_ONCE:{retryCount:0},TRY_TWICE:{retryCount:1},DEFAULT:{driftFactor:.01,retryCount:10,retryDelay:200,retryJitter:100},DELAY_500:{retryDelay:500},CUSTOM:{},AUTO_EXTEND:{retryCount:-1}};async function ai(t={}){let e={...os.DEFAULT,...t},n=(await cf()).client;return new WA.default([n],e)}function iP(t){let r=`lock:${t.systemLock?"system":j()}_${t.name}`;return t.resource&&(r=r+`_${t.resource}`),r}var QA=be.fromSeconds(10).toMs();async function as(t,e){let r=await nP(t.type,t.customOptions),n,i;try{let s=iP(t),o=t.type==="auto_extend"?QA:t.ttl;if(n=await r.lock(s,o),t.type==="auto_extend"){let u=()=>{i=setTimeout(async()=>{n=await n.extend(o,()=>t.onExtend&&t.onExtend()),u()},o/2)};u()}return{executed:!0,result:await e()}}catch(s){if(s.name==="LockError"){if(t.type==="try_once")return{executed:!1};throw s}else throw s}finally{clearTimeout(i),await n?.unlock()}}var Nf=Ee.PLATFORM_INFO.docs.tenants,Pf={type:"default",name:"update_tenants_doc",ttl:10*1e3,systemLock:!0};async function oP(){return(await hc()).tenantIds}async function hc(){let t=ct(),e;try{e=await t.get(Nf)}catch(r){if(r.status===404)e=await cP();else throw r}return e}async function aP(t){return(await hc()).tenantIds.indexOf(t)!==-1}function uP(){return{_id:Nf,tenantIds:[]}}async function cP(){let t=ct(),e=uP();try{let r=await t.put(e);e._rev=r.rev}catch(r){if(r.status===409)return t.get(Nf);throw r}return e}async function lP(t){let e=ct();await as(Pf,async()=>{let r=await hc();r.tenantIds.indexOf(t)===-1&&(r.tenantIds.push(t),await e.put(r))})}async function dP(t){try{await as(Pf,async()=>{let e=ct(),r=await hc();r.tenantIds=r.tenantIds.filter(n=>n!==t),await e.put(r)})}catch(e){throw console.error(`Error removing tenant ${t} from info db`,e),e}}var li={};N(li,{getAccount:()=>Zr,getAccountByTenantId:()=>ls,getStatus:()=>WP});var OS=W(require("node-fetch"));var Ic={};N(Ic,{correlation:()=>Xo,logAlert:()=>ia,logAlertWithInfo:()=>qP,logWarn:()=>cs,logger:()=>_c,system:()=>Yf});var Xo={};N(Xo,{getId:()=>Lf,setHeader:()=>pP});var jA=require("correlation-id"),pP=t=>{let e=jA.getId();e&&(t["x-budibase-correlation-id"]=e)};function Lf(){return jA.getId()}var Sc=W(require("pino")),_S=W(require("pino-pretty"));var Jf=W(require("dd-trace")),IS=require("dd-trace/ext");var Yf={};N(Yf,{getLogReadStream:()=>FP,getSingleFileMaxSizeInfo:()=>SS,localFileDestination:()=>Kf});var na=W(require("fs")),Hf=W(require("path")),yS=W(require("rotating-file-stream"));var jf={};N(jf,{ObjectStore:()=>Mt,ObjectStoreBuckets:()=>mP,SIGNED_FILE_PREFIX:()=>Vf,bucketTTLConfig:()=>gc,budibaseTempDir:()=>ci,clientLibraryCDNUrl:()=>CP,clientLibraryPath:()=>uS,clientLibraryUrl:()=>vP,createBucketIfNotExists:()=>ra,deleteFile:()=>IP,deleteFiles:()=>OP,deleteFolder:()=>sS,downloadTarball:()=>RP,downloadTarballDirect:()=>xP,enrichPWAImages:()=>NP,enrichPluginURLs:()=>UP,extractBucketAndPath:()=>Mf,getAppFileUrl:()=>cS,getGlobalFileS3Key:()=>lS,getGlobalFileUrl:()=>PP,getObjectMetadata:()=>wP,getPluginIconKey:()=>fS,getPluginJSKey:()=>pS,getPluginS3Dir:()=>hS,getPresignedUrl:()=>Jr,getReadStream:()=>yc,listAllObjects:()=>iS,processAutomationAttachment:()=>gP,processObjectStoreAttachment:()=>zA,retrieve:()=>nS,retrieveDirectory:()=>_P,retrieveToTmp:()=>SP,sanitizeBucket:()=>Ye,sanitizeKey:()=>Le,streamUpload:()=>rS,upload:()=>AP,uploadDirectory:()=>qf});var Tc=require("@aws-sdk/client-s3"),Ff=require("@aws-sdk/lib-storage"),ZA=require("@aws-sdk/s3-request-presigner"),ta=W(require("stream")),kf=W(require("node-fetch")),Bf=W(require("tar-fs")),Gf=W(require("zlib")),XA=require("util"),Yr=require("path"),mr=W(require("fs"));var ea=W(require("path")),HA=require("os"),KA=W(require("fs"));var YA=W(require("stream")),mP={BACKUPS:h.BACKUPS_BUCKET_NAME,APPS:h.APPS_BUCKET_NAME,TEMPLATES:h.TEMPLATES_BUCKET_NAME,GLOBAL:h.GLOBAL_BUCKET_NAME,PLUGINS:h.PLUGIN_BUCKET_NAME,TEMP:h.TEMP_BUCKET_NAME},JA=(0,ea.join)((0,HA.tmpdir)(),".budibase");try{KA.default.mkdirSync(JA)}catch(t){if(t.code!=="EEXIST")throw t}function ci(){return JA}var gc=(t,e)=>{let n={Rules:[{ID:`${t}-ExpireAfter${e}days`,Prefix:"",Status:"Enabled",Expiration:{Days:e}}]};return{Bucket:t,LifecycleConfiguration:n}};async function hP(t){let e=await fetch(t.url);if(!e.ok||!e.body)throw new Error(`Unexpected response ${e.statusText}`);let r=ea.default.basename(new URL(t.url).pathname);if(!e.body)throw new Error("No response received for attachment");return{filename:t.filename||r,content:YA.default.Readable.fromWeb(e.body)}}async function zA(t){let e=Mf(t.url);if(e===null)throw new Error("Invalid signed URL");let{bucket:r,path:n}=e,i=await yc(r,n),s=ea.default.basename(n);return{bucket:r,path:n,filename:t.filename||s,content:i}}async function gP(t){return t.url?.startsWith("http://")||t.url?.startsWith("https://")?await hP(t):await zA(t)}var $f=require("uuid");var eS=W(require("fs/promises")),yP=require("sanitize-s3-objectkey"),tS=(0,XA.promisify)(ta.default.pipeline),EP={bucketCreationPromises:{}},Vf="/files/signed",Kr={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"},TP=[Kr.html,Kr.css,Kr.js,Kr.json];function Le(t){return yP(Ye(t)).replace(/\\/g,"/")}function Ye(t){return t.replace(new RegExp(yt,"g"),gt)}function Mt(t={presigning:!1}){let e={forcePathStyle:!0,credentials:{accessKeyId:h.MINIO_ACCESS_KEY,secretAccessKey:h.MINIO_SECRET_KEY},region:h.AWS_REGION};return!h.MINIO_ENABLED&&h.AWS_SESSION_TOKEN&&(e.credentials={accessKeyId:h.MINIO_ACCESS_KEY,secretAccessKey:h.MINIO_SECRET_KEY,sessionToken:h.AWS_SESSION_TOKEN}),h.MINIO_URL&&(t.presigning&&h.MINIO_ENABLED?e.endpoint="http://minio-service":e.endpoint=h.MINIO_URL),new Tc.S3(e)}async function ra(t,e){e=Ye(e);try{return await t.headBucket({Bucket:e}),{created:!1,exists:!0}}catch(r){let n=r.statusCode||r.$response?.statusCode,i=EP.bucketCreationPromises,s=n===404,o=n===403;if(i[e])return await i[e],{created:!1,exists:!0};if(s||o){if(s)return i[e]=t.createBucket({Bucket:e}),await i[e],delete i[e],{created:!0,exists:!1};throw new Error("Access denied to object store bucket."+r)}else throw new Error("Unable to write to object store bucket.")}}async function AP({bucket:t,filename:e,path:r,type:n,metadata:i,body:s,ttl:o}){let a=e.split(".").pop(),u=r?(await eS.default.open(r)).createReadStream():s,c=Mt(),l=await ra(c,t);if(o&&l.created){let g=gc(t,o);await c.putBucketLifecycleConfiguration(g)}let d=n,m=d||(a?Kr[a.toLowerCase()]:Kr.txt),p={Bucket:Ye(t),Key:Le(e),Body:u,ContentType:m};if(i&&typeof i=="object"){for(let g of Object.keys(i))(!i[g]||typeof i[g]!="string")&&delete i[g];p.Metadata=i}return new Ff.Upload({client:c,params:p}).done()}async function rS({bucket:t,stream:e,filename:r,type:n,extra:i,ttl:s}){if(!e)throw new Error("Stream to upload is invalid/undefined");let o=r.split(".").pop(),a=Mt(),u=await ra(a,t);if(s&&u.created){let E=gc(t,s);await a.putBucketLifecycleConfiguration(E)}r?.endsWith(".js")?i={...i,ContentType:"application/javascript"}:r?.endsWith(".svg")&&(i={...i,ContentType:"image"});let c=n;c||(c=o?Kr[o.toLowerCase()]:Kr.txt);let l=Ye(t),d=Le(r),m={Bucket:l,Key:d,Body:e,ContentType:c,...i},f=await new Ff.Upload({client:a,params:m}).done(),g=await a.headObject({Bucket:l,Key:d});return{...f,ContentLength:g.ContentLength}}async function nS(t,e){let r=Mt(),n={Bucket:Ye(t),Key:Le(e)},i=await r.getObject(n);if(!i.Body)throw new Error("Unable to retrieve object");if(TP.includes(i.ContentType))return i.Body.transformToString();{let s=i.Body.transformToWebStream();return ta.default.Readable.fromWeb(s)}}async function iS(t,e){let r=Mt(),n=(a={})=>r.listObjectsV2({...a,Bucket:Ye(t),Prefix:Le(e)}),i=!1,s,o=[];do{let a={};s&&(a.ContinuationToken=s);let u=await n(a);u.Contents&&(o=o.concat(u.Contents)),i=!!u.IsTruncated,s=u.NextContinuationToken}while(i&&s);return o}async function Jr(t,e,r=3600){let n=Mt({presigning:!0}),i={Bucket:Ye(t),Key:Le(e)},s=await(0,ZA.getSignedUrl)(n,new Tc.GetObjectCommand(i),{expiresIn:r});if(h.MINIO_ENABLED){let o=new URL(s),a=o.pathname,u=o.search;return`${Vf}${a}${u}`}else return s}async function SP(t,e){t=Ye(t),e=Le(e);let r=await nS(t,e),n=(0,Yr.join)(ci(),(0,$f.v4)());return r instanceof ta.default.Readable?r.pipe(mr.default.createWriteStream(n)):mr.default.writeFileSync(n,r),n}async function _P(t,e){let r=(0,Yr.join)(ci(),(0,$f.v4)());mr.default.mkdirSync(r);let n=await iS(t,e),i=await Promise.all(n.map(a=>yc(t,a.Key))),s=0,o=[];for(let a of n){let u=a.Key,c=i[s++],l=u.split("/"),d=l.slice(0,l.length-1),m=(0,Yr.join)(r,...d);l.length>1&&!mr.default.existsSync(m)&&mr.default.mkdirSync(m,{recursive:!0});let p=mr.default.createWriteStream((0,Yr.join)(r,...l),{mode:420});c.pipe(p),o.push(new Promise((f,g)=>{p.on("finish",f),c.on("error",g),p.on("error",g)}))}return await Promise.all(o),r}async function IP(t,e){let r=Mt();await ra(r,t);let n={Bucket:t,Key:Le(e)};return r.deleteObject(n)}async function OP(t,e){let r=Mt();await ra(r,t);let n={Bucket:t,Delete:{Objects:e.map(i=>({Key:Le(i)}))}};return r.deleteObjects(n)}async function sS(t,e){t=Ye(t),e=Le(e);let r=Mt(),n={Bucket:t,Prefix:e},i=await r.listObjects(n);if(i.Contents?.length===0)return;let s={Bucket:t,Delete:{Objects:[]}};if(i.Contents?.forEach(o=>{s.Delete.Objects.push({Key:o.Key})}),s.Delete.Objects.length&&(await r.deleteObjects(s)).Deleted?.length===1e3)return sS(t,e)}async function qf(t,e,r){t=Ye(t);let n=[],i=mr.default.readdirSync(e,{withFileTypes:!0});for(let s of i){let o=Le((0,Yr.join)(r,s.name)),a=(0,Yr.join)(e,s.name);s.isDirectory()?n.push(qf(t,a,o)):n.push(rS({bucket:t,filename:o,stream:mr.default.createReadStream(a)}))}return await Promise.all(n),i}async function xP(t,e,r={}){e=Le(e);let n=await(0,kf.default)(t,{headers:r});if(!n.ok)throw new Error(`unexpected response ${n.statusText}`);await tS(n.body,Gf.default.createUnzip(),Bf.default.extract(e))}async function RP(t,e,r){e=Ye(e),r=Le(r);let n=await(0,kf.default)(t);if(!n.ok)throw new Error(`unexpected response ${n.statusText}`);let i=(0,Yr.join)(ci(),r);return await tS(n.body,Gf.default.createUnzip(),Bf.default.extract(i)),!h.isTest()&&h.SELF_HOSTED&&await qf(e,i,r),i}async function yc(t,e){t=Ye(t),e=Le(e);let r=Mt(),n={Bucket:t,Key:e},i=await r.getObject(n);if(!i.Body||!(i.Body instanceof ta.default.Readable))throw new Error("Unable to retrieve stream - invalid response");return i.Body}async function wP(t,e){t=Ye(t),e=Le(e);let r=Mt(),n={Bucket:t,Key:e};try{return await r.headObject(n)}catch{throw new Error("Unable to retrieve metadata from object")}}function Mf(t){let e=t.split("?")[0],r=new RegExp(`^${Vf}/(?<bucket>[^/]+)/(?<path>.+)$`),n=e.match(r);if(n&&n.groups){let{bucket:i,path:s}=n.groups;return{bucket:i,path:s}}return null}var oS=W(require("aws-cloudfront-sign")),Ac;function bP(){if(!h.CLOUDFRONT_PRIVATE_KEY_64)throw new Error("CLOUDFRONT_PRIVATE_KEY_64 is not set");return Ac||(Ac=Buffer.from(h.CLOUDFRONT_PRIVATE_KEY_64,"base64").toString("utf-8"),Ac)}var DP=()=>({keypairId:h.CLOUDFRONT_PUBLIC_KEY_ID,privateKeyString:bP(),expireTime:new Date().getTime()+1e3*60*60*24}),us=t=>{let e=Wf(t);return oS.getSignedUrl(e,DP())},Wf=t=>{let e="/";return t.startsWith("/")&&(e=""),`${h.CLOUDFRONT_CDN}${e}${t}`};var aS=W(require("querystring"));function uS(t){return`${Le(t)}/budibase-client.js`}async function CP(t,e){let r=uS(t);return h.CLOUDFRONT_CDN?(e&&(r+=`?v=${e}`),Wf(r)):await Jr(h.APPS_BUCKET_NAME,r)}function vP(t,e){let r,n;try{r=j()}finally{n={appId:t,version:e}}return r&&r!==Te&&(n.tenantId=r),`/api/assets/client?${aS.default.encode(n)}`}async function cS(t){return h.CLOUDFRONT_CDN?us(t):await Jr(h.APPS_BUCKET_NAME,t)}async function NP(t){if(t.length===0)return[];try{return await Promise.all(t.map(async e=>({...e,src:await cS(e.src),type:e.type||"image/png"})))}catch(e){return console.error("Error enriching PWA images:",e),t}}var PP=async(t,e,r)=>{let n=lS(t,e);return h.CLOUDFRONT_CDN?(r&&(n=`${n}?etag=${r}`),us(n)):await Jr(h.GLOBAL_BUCKET_NAME,n)},lS=(t,e)=>{let r=`${t}/${e}`;return h.MULTI_TENANCY&&(r=`${j()}/${r}`),r};async function UP(t){return!t||!t.length?[]:await Promise.all(t.map(async e=>{let r=await LP(e),n=await MP(e);return{...e,jsUrl:r,iconUrl:n}}))}async function LP(t){let e=pS(t);return dS(e)}async function MP(t){let e=fS(t);if(e)return dS(e)}async function dS(t){return h.CLOUDFRONT_CDN?us(t):await Jr(h.PLUGIN_BUCKET_NAME,t)}function pS(t){return mS(t,"plugin.min.js")}function fS(t){let e=t.iconUrl?"icon.svg":t.iconFileName;if(e)return mS(t,e)}function mS(t,e){return`${hS(t.name)}/${e}`}function hS(t){let e=`${t}`;return h.MULTI_TENANCY&&(e=`${j()}/${e}`),h.CLOUDFRONT_CDN&&(e=`plugins/${e}`),e}var ES="budibase.log",TS="budibase-logs-history.txt",AS=Hf.default.join(ci(),"systemlogs");function gS(t){return Hf.default.join(AS,t)}function SS(t){let e=/(\d+)([A-Za-z])/,r=t?.match(e);if(!r){console.warn("totalMaxSize does not have a valid value",{totalMaxSize:t});return}let n=+r[1],i=r[2];if(n===1)switch(i){case"B":return{size:`${n}B`,totalHistoryFiles:1};case"K":return{size:`${n*1e3/2}B`,totalHistoryFiles:1};case"M":return{size:`${n*1e3/2}K`,totalHistoryFiles:1};case"G":return{size:`${n*1e3/2}M`,totalHistoryFiles:1};default:return}return n%2===0?{size:`${n/2}${i}`,totalHistoryFiles:1}:{size:`1${i}`,totalHistoryFiles:n-1}}function Kf(){let t=SS(h.ROLLING_LOG_MAX_SIZE);return yS.createStream(ES,{size:t?.size,path:AS,maxFiles:t?.totalHistoryFiles||1,immutable:!0,history:TS,initialRotation:!1})}function FP(){let t=[],e=gS(TS);if(na.default.existsSync(e)){let i=na.default.readFileSync(e,"utf-8").split(`
|
|
36
|
+
}`,"platform_users_lowercase_2")},Yo=async(t,e)=>{let r={account_by_email:DA,platform_users_lowercase_2:CA};return ut(Ee.PLATFORM_INFO.name,async n=>{let i=r[t];return If(t,e,n,i,{arrayResponse:!0})})},vA={by_email2:xA,by_api_key:wA,by_app:RA},dr=async(t,e,r,n)=>{r||(r=ie());let i=vA[t];return If(t,e,r,i,n)};async function Of(t,e,r){let n=ie(),i=vA[t];return Ko(t,e,n,i,r)}var xf=class{constructor({source:e,target:r}){this.source=Et(e),this.target=Et(r),e.startsWith("app_dev")&&r.startsWith("app")?this.direction="toProduction":e.startsWith("app")&&r.startsWith("app_dev")&&(this.direction="toDev")}async close(){await Promise.all([bo(this.source),bo(this.target)])}replicate(e={}){return new Promise(r=>{this.source.replicate.to(this.target,e).on("denied",function(n){throw new Error(`Denied: Document failed to replicate ${n}`)}).on("complete",function(n){return r(n)}).on("error",function(n){throw n})})}appReplicateOpts(e={}){if(typeof e.filter=="string")return e;let r=e.filter,i=this.direction==="toDev";return delete e.filter,{...e,filter:(s,o)=>i&&s._id?.startsWith("_design")||s._id?.startsWith("log_au")||s._id==="app_metadata"?!1:r?r(s,o):!0}}async rollback(){await this.target.destroy(),this.target=Et(this.target.name),await this.replicate()}},NA=xf;var UA=W(require("node-fetch"));var Jo=Fr.removeKeyNumbering;function oi(t){return t==null||t===""}var pr=class t{#l;#d;#e;#r;#n;#i;#s;#o;#t;#p;#a;#u=!1;#c;static{this.maxLimit=200}constructor(e,r,n){this.#l=e,this.#d=r,this.#e={allOr:!1,onEmptyFilter:"all",string:{},fuzzy:{},range:{},equal:{},notEqual:{},empty:{},notEmpty:{},oneOf:{},contains:{},notContains:{},containsAny:{},...n},this.#r=50,this.#s="ascending",this.#o="string",this.#t=!0}disableEscaping(){return this.#u=!0,this}setIndexBuilder(e){return this.#a=e,this}setVersion(e){return e!=null&&(this.#p=e),this}setTable(e){return this.#e.equal.tableId=e,this}setLimit(e){return e!=null&&(this.#r=e),this}setSort(e){return e!=null&&(this.#n=e),this}setSortOrder(e){return e!=null&&(this.#s=e),this}setSortType(e){return e!=null&&(this.#o=e),this}setBookmark(e){return e!=null&&(this.#i=e),this}setSkip(e){return this.#c=e,this}excludeDocs(){return this.#t=!1,this}includeDocs(){return this.#t=!0,this}addString(e,r){return this.#e.string[e]=r,this}addFuzzy(e,r){return this.#e.fuzzy[e]=r,this}addRange(e,r,n){return this.#e.range[e]={low:r,high:n},this}addEqual(e,r){return this.#e.equal[e]=r,this}addNotEqual(e,r){return this.#e.notEqual[e]=r,this}addEmpty(e,r){return this.#e.empty[e]=r,this}addNotEmpty(e,r){return this.#e.notEmpty[e]=r,this}addOneOf(e,r){return this.#e.oneOf[e]=r,this}addContains(e,r){return this.#e.contains[e]=r,this}addNotContains(e,r){return this.#e.notContains[e]=r,this}addContainsAny(e,r){return this.#e.containsAny[e]=r,this}setAllOr(){this.#e.allOr=!0}setOnEmptyFilter(e){this.#e.onEmptyFilter=e}handleSpaces(e){return this.#u?e:e.replace(/ /g,"_")}preprocess(e,{escape:r,lowercase:n,wrap:i,type:s}={}){let o=!!this.#p,a=typeof e;return e&&n&&(e=e.toLowerCase?e.toLowerCase():e),!this.#u&&r&&a==="string"&&(e=`${e}`.replace(/[ /#+\-&|!(){}\]^"~*?:\\]/g,"\\$&")),a==="string"&&!isNaN(e)&&!s?e=`"${e}"`:o&&i&&(e=a==="number"?e:`"${e}"`),e}isMultiCondition(){let e=0;for(let r of Object.values(this.#e))typeof r=="object"&&(e+=Object.keys(r).length);return e>1}compressFilters(e){let r={};for(let s of Object.keys(e)){let o=Jo(s);r[o]?r[o]=r[o].concat(e[s]):r[o]=e[s]}let n={},i=1;for(let[s,o]of Object.entries(r))n[`${i++}:${s}`]=o;return n}buildSearchQuery(){let e=this,r=this.#e&&this.#e.allOr,n=r?"":"*:*",i=!0,s={escape:!0,lowercase:!0,wrap:!0},o="";this.#e.equal.tableId&&(o=this.#e.equal.tableId,delete this.#e.equal.tableId);let a=(f,g)=>oi(g)?null:`${f}:${e.preprocess(g,s)}`,u=(f,g,E="AND")=>{if(oi(g))return null;if(!Array.isArray(g))return`${f}:${g}`;let y=`${e.preprocess(g[0],{escape:!0})}`;for(let _=1;_<g.length;_++)y+=` ${E} ${e.preprocess(g[_],{escape:!0})}`;return`${f}:(${y})`},c=(f,g)=>oi(g)?null:(g=e.preprocess(g,{escape:!0,lowercase:!0,type:"fuzzy"}),`${f}:/.*${g}.*/`),l=(f,g)=>{let E=r?"*:* AND ":"",y=r?"AND":void 0;return E+"NOT "+u(f,g,y)},d=(f,g)=>u(f,g,"OR"),m=(f,g)=>{if(oi(g))return"*:*";if(!Array.isArray(g))if(typeof g=="string")g=g.split(",");else return"";let E=`${e.preprocess(g[0],s)}`;for(let y=1;y<g.length;y++)E+=` OR ${e.preprocess(g[y],s)}`;return`${f}:(${E})`};function p(f,g,E){let y="";for(let[_,S]of Object.entries(f)){_=Jo(_),_=e.preprocess(e.handleSpaces(_),{escape:!0});let M=g(_,S);if(M!=null){if(y.length>0||n.length>0){let T=E?.mode?E.mode:r?"OR":"AND";y+=` ${T} `}y+=M,(typeof S!="string"&&S!=null||typeof S=="string"&&S!==o&&S!=="")&&(i=!1)}}if(E?.returnBuilt)return y;n+=y}if(this.#e.string&&p(this.#e.string,(f,g)=>oi(g)?null:(g=e.preprocess(g,{escape:!0,lowercase:!0,type:"string"}),`${f}:${g}*`)),this.#e.range&&p(this.#e.range,(f,g)=>{if(oi(g)||g.low==null||g.low===""||g.high==null||g.high==="")return null;let E=e.preprocess(g.low,s),y=e.preprocess(g.high,s);return`${f}:[${E} TO ${y}]`}),this.#e.fuzzy&&p(this.#e.fuzzy,c),this.#e.equal&&p(this.#e.equal,a),this.#e.notEqual&&p(this.#e.notEqual,(f,g)=>oi(g)?null:typeof g=="boolean"?`(*:* AND !${f}:${g})`:`!${f}:${e.preprocess(g,s)}`),this.#e.empty&&p(this.#e.empty,f=>(i=!1,`(*:* -${f}:["" TO *])`)),this.#e.notEmpty&&p(this.#e.notEmpty,f=>(i=!1,`${f}:["" TO *]`)),this.#e.oneOf&&p(this.#e.oneOf,m),this.#e.contains&&p(this.#e.contains,u),this.#e.notContains&&p(this.compressFilters(this.#e.notContains),l),this.#e.containsAny&&p(this.#e.containsAny,d),o&&(n=this.isMultiCondition()?`(${n})`:n,r=!1,p({tableId:o},a)),i){if(this.#e.onEmptyFilter==="none")return"";if(this.#e?.allOr)return n.replace("()","(*:*)")}return n}buildSearchBody(){let e={q:this.buildSearchQuery(),limit:Math.min(this.#r,t.maxLimit),include_docs:this.#t};if(this.#i&&(e.bookmark=this.#i),this.#n){let r=this.#s==="descending"?"-":"",n=`<${this.#o}>`;e.sort=`${r}${this.handleSpaces(this.#n)}${n}`}return e}async run(){return this.#c&&await this.#m(this.#c),await this.#f()}async#m(e){let r=this.#t,n=this.#r;this.excludeDocs();let i=e,s=0;do{let o=Math.min(t.maxLimit,i);this.setLimit(o);let{bookmark:a,rows:u}=await this.#f();this.setBookmark(a),s=u.length,i-=u.length}while(i>0&&s>0);this.#t=r,this.#r=n}async#f(){let{url:e,cookie:r}=vt(),n=`${e}/${this.#l}/_design/database/_search/${this.#d}`,i=this.buildSearchBody();try{return await PA(n,i,r)}catch(s){if(s.status===404&&this.#a)return await this.#a(),await PA(n,i,r);throw s}}};async function PA(t,e,r){let n=await(0,UA.default)(t,{body:JSON.stringify(e),method:"POST",headers:{Authorization:r}});if(n.status===404)throw n;let i=await n.json(),s={rows:[],totalRows:0};return i.rows!=null&&i.rows.length>0&&(s.rows=i.rows.map(o=>o.doc)),i.bookmark&&(s.bookmark=i.bookmark),i.total_rows&&(s.totalRows=i.total_rows),s}async function LA(t,e,r,n){let i=n.bookmark,s=n.rows||[];if(n.limit&&s.length>=n.limit)return s;let o=pr.maxLimit;n.limit&&s.length>n.limit-pr.maxLimit&&(o=n.limit-s.length);let a=new pr(t,e,r);a.setVersion(n.version).setBookmark(i).setLimit(o).setSort(n.sort).setSortOrder(n.sortOrder).setSortType(n.sortType),n.tableId&&a.setTable(n.tableId);let u=await a.run();if(!u.rows.length)return s;if(u.rows.length<pr.maxLimit)return[...s,...u.rows];let c={...n,bookmark:u.bookmark,rows:[...s,...u.rows]};return await LA(t,e,r,c)}async function VN(t,e,r,n){let i=n.limit;(i==null||isNaN(i)||i<0)&&(i=50),i=Math.min(i,pr.maxLimit);let s=new pr(t,e,r);n.version&&s.setVersion(n.version),n.tableId&&s.setTable(n.tableId),n.sort&&s.setSort(n.sort).setSortOrder(n.sortOrder).setSortType(n.sortType),n.indexer&&s.setIndexBuilder(n.indexer),n.disableEscaping&&s.disableEscaping();let o=await s.setBookmark(n.bookmark).setLimit(i).run();s.setBookmark(o.bookmark).setLimit(1),n.tableId&&s.setTable(n.tableId);let a=await s.run();return{...o,hasNextPage:a.rows&&a.rows.length>0}}async function qN(t,e,r,n){let i=n.limit;return(i==null||isNaN(i)||i<0)&&(i=1e3),n.limit=Math.min(i,1e3),{rows:await LA(t,e,r,n)}}var Rf={};N(Rf,{createUserIndex:()=>WN});async function WN(){let t=ie(),e;try{e=await t.get("_design/database")}catch(n){n.status===404&&(e={_id:"_design/database"})}let r=function(n){if(n._id&&!n._id.startsWith("us_"))return;let i=["_id","_rev","password","account","license","budibaseAccess","accountPortalAccess","csrfToken"];function s(o,a){for(let u of Object.keys(o)){if(i.includes(u))continue;let c=a!=null?`${a}.${u}`:u;typeof o[u]=="string"?index(c,o[u].toLowerCase(),{facet:!0}):typeof o[u]!="object"?index(c,o[u],{facet:!0}):s(o[u],c)}}s(n)};e.indexes={user:{index:r.toString(),analyzer:{default:"keyword",name:"perfield"}}},await t.put(e)}function MA(t,e){let r=e.toString();if(typeof t=="object")return t.status===e||t.message?.includes(r);if(typeof t=="number")return t===e;if(typeof t=="string")return t.includes(r)}function QN(t){return MA(t,409)}var pc=W(require("jsonwebtoken")),wf="app"+C,kA="/app/",BA="/app/preview",jN="/builder",GA=`${jN}/app/`,HN="/api/public/v";function is(t){return t&&t.startsWith(wf)?t:void 0}async function $A(t){let r=`/${t.path.split("/")[2].toLowerCase()}`,n=j();!h.isDev()&&h.MULTI_TENANCY&&(n=qo(t,{includeStrategies:["subdomain"]}));let s=(await qe(n,()=>Ho({dev:!1}))).filter(o=>o.url&&o.url.toLowerCase()===r)[0];return s&&s.appId?s.appId:void 0}function KN(t){return t.path.startsWith(`/${wf}`)?!0:t.path.startsWith(kA)}function YN(t){return t.path.startsWith(GA)}function JN(t){return t.path.startsWith(BA)}function zN(t){return t.path.startsWith(HN)}async function ZN(t){let e=[t.request.headers["x-budibase-app-id"]],r;for(let a of e)if(r=is(a),r)break;!r&&t.request.body&&t.request.body.appId&&(r=is(t.request.body.appId));let n=FA(t.path);!r&&n&&(r=is(n)),!r&&t.query?.appId&&(r=is(t.query?.appId));let i=t.path.startsWith(BA),s=t.path.startsWith(kA)&&!i;!r&&s&&(r=is(await $A(t)));let o=t.request.headers.referer;if(!r&&o?.includes(GA)){let a=FA(t.request.headers.referer);r=is(a)}return r}function FA(t){if(t)return t.split("?")[0].split("/").find(e=>e.startsWith(wf))}function fc(t){if(t)try{return pc.default.verify(t,h.JWT_SECRET)}catch(e){if(h.JWT_SECRET_FALLBACK)return pc.default.verify(t,h.JWT_SECRET_FALLBACK);throw e}}function zo(t){return h.INTERNAL_API_KEY&&h.INTERNAL_API_KEY===t?!0:!!(h.INTERNAL_API_KEY_FALLBACK&&h.INTERNAL_API_KEY_FALLBACK===t)}function fr(t,e){let r=t.cookies.get(e);if(r)return fc(r)}function VA(t,e,r="builder",n={sign:!0}){e&&n&&n.sign&&(e=pc.default.sign(e,h.JWT_SECRET));let i={expires:Wu,path:"/",httpOnly:!1,overwrite:!0};h.COOKIE_DOMAIN&&(i.domain=h.COOKIE_DOMAIN),t.cookies.set(r,e,i)}function Hr(t,e){VA(t,null,e)}function XN(t){return t.headers["x-budibase-type"]==="client"}function bf(t){return new Promise(e=>setTimeout(e,t))}function Df(t){return!!Dh[t]}function eP(t){if(typeof t!="object")return!1;try{JSON.stringify(t)}catch(e){if(e instanceof Error&&e?.message.includes("circular structure"))return!0}return!1}function tP(t){return!!t.match(/^.+:\/\/.+$/)}function Cf(t){return t&&!!t.match(/^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/)}var vf=(s=>(s.MILLISECONDS="milliseconds",s.SECONDS="seconds",s.MINUTES="minutes",s.HOURS="hours",s.DAYS="days",s))(vf||{}),mc={milliseconds:1,seconds:1e3,minutes:6e4,hours:36e5,days:864e5},be=class t{constructor(e){this.ms=e}to(e){return this.ms/mc[e]}toMs(){return this.ms}toSeconds(){return this.to("seconds")}static convert(e,r,n){return n*mc[e]/mc[r]}static from(e,r){return new t(r*mc[e])}static fromSeconds(e){return t.from("seconds",e)}static fromMinutes(e){return t.from("minutes",e)}static fromHours(e){return t.from("hours",e)}static fromDays(e){return t.from("days",e)}static fromMilliseconds(e){return t.from("milliseconds",e)}};async function rP(t){let e=performance.now();return[await t(),be.fromMilliseconds(performance.now()-e)]}async function nP(t,e){if(t==="custom")return ai(e);switch(t){case"try_once":return ai(os.TRY_ONCE);case"try_twice":return ai(os.TRY_TWICE);case"default":return ai(os.DEFAULT);case"delay_500":return ai(os.DELAY_500);case"auto_extend":return ai(os.AUTO_EXTEND);default:throw Ci.unreachable(t)}}var os={TRY_ONCE:{retryCount:0},TRY_TWICE:{retryCount:1},DEFAULT:{driftFactor:.01,retryCount:10,retryDelay:200,retryJitter:100},DELAY_500:{retryDelay:500},CUSTOM:{},AUTO_EXTEND:{retryCount:-1}};async function ai(t={}){let e={...os.DEFAULT,...t},n=(await cf()).client;return new WA.default([n],e)}function iP(t){let r=`lock:${t.systemLock?"system":j()}_${t.name}`;return t.resource&&(r=r+`_${t.resource}`),r}var QA=be.fromSeconds(10).toMs();async function as(t,e){let r=await nP(t.type,t.customOptions),n,i;try{let s=iP(t),o=t.type==="auto_extend"?QA:t.ttl;if(n=await r.lock(s,o),t.type==="auto_extend"){let u=()=>{i=setTimeout(async()=>{n=await n.extend(o,()=>t.onExtend&&t.onExtend()),u()},o/2)};u()}return{executed:!0,result:await e()}}catch(s){if(s.name==="LockError"){if(t.type==="try_once")return{executed:!1};throw s}else throw s}finally{clearTimeout(i),await n?.unlock()}}var Nf=Ee.PLATFORM_INFO.docs.tenants,Pf={type:"default",name:"update_tenants_doc",ttl:10*1e3,systemLock:!0};async function oP(){return(await hc()).tenantIds}async function hc(){let t=ct(),e;try{e=await t.get(Nf)}catch(r){if(r.status===404)e=await cP();else throw r}return e}async function aP(t){return(await hc()).tenantIds.indexOf(t)!==-1}function uP(){return{_id:Nf,tenantIds:[]}}async function cP(){let t=ct(),e=uP();try{let r=await t.put(e);e._rev=r.rev}catch(r){if(r.status===409)return t.get(Nf);throw r}return e}async function lP(t){let e=ct();await as(Pf,async()=>{let r=await hc();r.tenantIds.indexOf(t)===-1&&(r.tenantIds.push(t),await e.put(r))})}async function dP(t){try{await as(Pf,async()=>{let e=ct(),r=await hc();r.tenantIds=r.tenantIds.filter(n=>n!==t),await e.put(r)})}catch(e){throw console.error(`Error removing tenant ${t} from info db`,e),e}}var li={};N(li,{getAccount:()=>Zr,getAccountByTenantId:()=>ls,getStatus:()=>WP});var OS=W(require("node-fetch"));var Ic={};N(Ic,{correlation:()=>Xo,logAlert:()=>ia,logAlertWithInfo:()=>qP,logWarn:()=>cs,logger:()=>_c,system:()=>Yf});var Xo={};N(Xo,{getId:()=>Lf,setHeader:()=>pP});var jA=require("correlation-id"),pP=t=>{let e=jA.getId();e&&(t["x-budibase-correlation-id"]=e)};function Lf(){return jA.getId()}var Sc=W(require("pino")),_S=W(require("pino-pretty"));var Jf=W(require("dd-trace")),IS=require("dd-trace/ext");var Yf={};N(Yf,{getLogReadStream:()=>FP,getSingleFileMaxSizeInfo:()=>SS,localFileDestination:()=>Kf});var na=W(require("fs")),Hf=W(require("path")),yS=W(require("rotating-file-stream"));var jf={};N(jf,{ObjectStore:()=>Mt,ObjectStoreBuckets:()=>mP,SIGNED_FILE_PREFIX:()=>Vf,bucketTTLConfig:()=>gc,budibaseTempDir:()=>ci,clientLibraryCDNUrl:()=>CP,clientLibraryPath:()=>uS,clientLibraryUrl:()=>vP,createBucketIfNotExists:()=>ra,deleteFile:()=>IP,deleteFiles:()=>OP,deleteFolder:()=>sS,downloadTarball:()=>RP,downloadTarballDirect:()=>xP,enrichPWAImages:()=>NP,enrichPluginURLs:()=>UP,extractBucketAndPath:()=>Mf,getAppFileUrl:()=>cS,getGlobalFileS3Key:()=>lS,getGlobalFileUrl:()=>PP,getObjectMetadata:()=>wP,getPluginIconKey:()=>fS,getPluginJSKey:()=>pS,getPluginS3Dir:()=>hS,getPresignedUrl:()=>Jr,getReadStream:()=>yc,listAllObjects:()=>iS,processAutomationAttachment:()=>gP,processObjectStoreAttachment:()=>zA,retrieve:()=>nS,retrieveDirectory:()=>_P,retrieveToTmp:()=>SP,sanitizeBucket:()=>Ye,sanitizeKey:()=>Le,streamUpload:()=>rS,upload:()=>AP,uploadDirectory:()=>qf});var Tc=require("@aws-sdk/client-s3"),Ff=require("@aws-sdk/lib-storage"),ZA=require("@aws-sdk/s3-request-presigner"),ta=W(require("stream")),kf=W(require("node-fetch")),Bf=W(require("tar-fs")),Gf=W(require("zlib")),XA=require("util"),Yr=require("path"),mr=W(require("fs"));var ea=W(require("path")),HA=require("os"),KA=W(require("fs"));var YA=W(require("stream")),mP={BACKUPS:h.BACKUPS_BUCKET_NAME,APPS:h.APPS_BUCKET_NAME,TEMPLATES:h.TEMPLATES_BUCKET_NAME,GLOBAL:h.GLOBAL_BUCKET_NAME,PLUGINS:h.PLUGIN_BUCKET_NAME,TEMP:h.TEMP_BUCKET_NAME},JA=(0,ea.join)((0,HA.tmpdir)(),".budibase");try{KA.default.mkdirSync(JA)}catch(t){if(t.code!=="EEXIST")throw t}function ci(){return JA}var gc=(t,e)=>{let n={Rules:[{ID:`${t}-ExpireAfter${e}days`,Prefix:"",Status:"Enabled",Expiration:{Days:e}}]};return{Bucket:t,LifecycleConfiguration:n}};async function hP(t){let e=await fetch(t.url);if(!e.ok||!e.body)throw new Error(`Unexpected response ${e.statusText}`);let r=ea.default.basename(new URL(t.url).pathname);if(!e.body)throw new Error("No response received for attachment");return{filename:t.filename||r,content:YA.default.Readable.fromWeb(e.body)}}async function zA(t){let e=Mf(t.url);if(e===null)throw new Error("Invalid signed URL");let{bucket:r,path:n}=e,i=await yc(r,n),s=ea.default.basename(n);return{bucket:r,path:n,filename:t.filename||s,content:i}}async function gP(t){return t.url?.startsWith("http://")||t.url?.startsWith("https://")?await hP(t):await zA(t)}var $f=require("uuid");var eS=W(require("fs/promises")),yP=require("sanitize-s3-objectkey"),tS=(0,XA.promisify)(ta.default.pipeline),EP={bucketCreationPromises:{}},Vf="/files/signed",Kr={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"},TP=[Kr.html,Kr.css,Kr.js,Kr.json];function Le(t){return yP(Ye(t)).replace(/\\/g,"/")}function Ye(t){return t.replace(new RegExp(yt,"g"),gt)}function Mt(t={presigning:!1}){let e={forcePathStyle:!0,credentials:{accessKeyId:h.MINIO_ACCESS_KEY,secretAccessKey:h.MINIO_SECRET_KEY},region:h.AWS_REGION};return!h.MINIO_ENABLED&&h.AWS_SESSION_TOKEN&&(e.credentials={accessKeyId:h.MINIO_ACCESS_KEY,secretAccessKey:h.MINIO_SECRET_KEY,sessionToken:h.AWS_SESSION_TOKEN}),h.MINIO_URL&&(t.presigning&&h.MINIO_ENABLED?e.endpoint="http://minio-service":e.endpoint=h.MINIO_URL),new Tc.S3(e)}async function ra(t,e){e=Ye(e);try{return await t.headBucket({Bucket:e}),{created:!1,exists:!0}}catch(r){let n=r.statusCode||r.$response?.statusCode,i=EP.bucketCreationPromises,s=n===404,o=n===403;if(i[e])return await i[e],{created:!1,exists:!0};if(s||o){if(s)return i[e]=t.createBucket({Bucket:e}),await i[e],delete i[e],{created:!0,exists:!1};throw new Error("Access denied to object store bucket."+r)}else throw new Error("Unable to write to object store bucket.")}}async function AP({bucket:t,filename:e,path:r,type:n,metadata:i,body:s,ttl:o}){let a=e.split(".").pop(),u=r?(await eS.default.open(r)).createReadStream():s,c=Mt(),l=await ra(c,t);if(o&&l.created){let g=gc(t,o);await c.putBucketLifecycleConfiguration(g)}let d=n,m=d||(a?Kr[a.toLowerCase()]:Kr.txt),p={Bucket:Ye(t),Key:Le(e),Body:u,ContentType:m};if(i&&typeof i=="object"){for(let g of Object.keys(i))(!i[g]||typeof i[g]!="string")&&delete i[g];p.Metadata=i}return new Ff.Upload({client:c,params:p}).done()}async function rS({bucket:t,stream:e,filename:r,type:n,extra:i,ttl:s}){if(!e)throw new Error("Stream to upload is invalid/undefined");let o=r.split(".").pop(),a=Mt(),u=await ra(a,t);if(s&&u.created){let E=gc(t,s);await a.putBucketLifecycleConfiguration(E)}r?.endsWith(".js")?i={...i,ContentType:"application/javascript"}:r?.endsWith(".svg")&&(i={...i,ContentType:"image"});let c=n;c||(c=o?Kr[o.toLowerCase()]:Kr.txt);let l=Ye(t),d=Le(r),m={Bucket:l,Key:d,Body:e,ContentType:c,...i},f=await new Ff.Upload({client:a,params:m}).done(),g=await a.headObject({Bucket:l,Key:d});return{...f,ContentLength:g.ContentLength}}async function nS(t,e){let r=Mt(),n={Bucket:Ye(t),Key:Le(e)},i=await r.getObject(n);if(!i.Body)throw new Error("Unable to retrieve object");if(TP.includes(i.ContentType))return i.Body.transformToString();{let s=i.Body.transformToWebStream();return ta.default.Readable.fromWeb(s)}}async function iS(t,e){let r=Mt(),n=(a={})=>r.listObjectsV2({...a,Bucket:Ye(t),Prefix:Le(e)}),i=!1,s,o=[];do{let a={};s&&(a.ContinuationToken=s);let u=await n(a);u.Contents&&(o=o.concat(u.Contents)),i=!!u.IsTruncated,s=u.NextContinuationToken}while(i&&s);return o}async function Jr(t,e,r=3600){let n=Mt({presigning:!0}),i={Bucket:Ye(t),Key:Le(e)},s=await(0,ZA.getSignedUrl)(n,new Tc.GetObjectCommand(i),{expiresIn:r});if(h.MINIO_ENABLED){let o=new URL(s),a=o.pathname,u=o.search;return`${Vf}${a}${u}`}else return s}async function SP(t,e){t=Ye(t),e=Le(e);let r=await nS(t,e),n=(0,Yr.join)(ci(),(0,$f.v4)());return r instanceof ta.default.Readable?r.pipe(mr.default.createWriteStream(n)):mr.default.writeFileSync(n,r),n}async function _P(t,e){let r=(0,Yr.join)(ci(),(0,$f.v4)());mr.default.mkdirSync(r);let n=await iS(t,e),i=await Promise.all(n.map(a=>yc(t,a.Key))),s=0,o=[];for(let a of n){let u=a.Key,c=i[s++],l=u.split("/"),d=l.slice(0,l.length-1),m=(0,Yr.join)(r,...d);l.length>1&&!mr.default.existsSync(m)&&mr.default.mkdirSync(m,{recursive:!0});let p=mr.default.createWriteStream((0,Yr.join)(r,...l),{mode:420});c.pipe(p),o.push(new Promise((f,g)=>{p.on("finish",()=>f()),c.on("error",g),p.on("error",g)}))}return await Promise.all(o),r}async function IP(t,e){let r=Mt();await ra(r,t);let n={Bucket:t,Key:Le(e)};return r.deleteObject(n)}async function OP(t,e){let r=Mt();await ra(r,t);let n={Bucket:t,Delete:{Objects:e.map(i=>({Key:Le(i)}))}};return r.deleteObjects(n)}async function sS(t,e){t=Ye(t),e=Le(e);let r=Mt(),n={Bucket:t,Prefix:e},i=await r.listObjects(n);if(i.Contents?.length===0)return;let s={Bucket:t,Delete:{Objects:[]}};if(i.Contents?.forEach(o=>{s.Delete.Objects.push({Key:o.Key})}),s.Delete.Objects.length&&(await r.deleteObjects(s)).Deleted?.length===1e3)return sS(t,e)}async function qf(t,e,r){t=Ye(t);let n=[],i=mr.default.readdirSync(e,{withFileTypes:!0});for(let s of i){let o=Le((0,Yr.join)(r,s.name)),a=(0,Yr.join)(e,s.name);s.isDirectory()?n.push(qf(t,a,o)):n.push(rS({bucket:t,filename:o,stream:mr.default.createReadStream(a)}))}return await Promise.all(n),i}async function xP(t,e,r={}){e=Le(e);let n=await(0,kf.default)(t,{headers:r});if(!n.ok)throw new Error(`unexpected response ${n.statusText}`);await tS(n.body,Gf.default.createUnzip(),Bf.default.extract(e))}async function RP(t,e,r){e=Ye(e),r=Le(r);let n=await(0,kf.default)(t);if(!n.ok)throw new Error(`unexpected response ${n.statusText}`);let i=(0,Yr.join)(ci(),r);return await tS(n.body,Gf.default.createUnzip(),Bf.default.extract(i)),!h.isTest()&&h.SELF_HOSTED&&await qf(e,i,r),i}async function yc(t,e){t=Ye(t),e=Le(e);let r=Mt(),n={Bucket:t,Key:e},i=await r.getObject(n);if(!i.Body||!(i.Body instanceof ta.default.Readable))throw new Error("Unable to retrieve stream - invalid response");return i.Body}async function wP(t,e){t=Ye(t),e=Le(e);let r=Mt(),n={Bucket:t,Key:e};try{return await r.headObject(n)}catch{throw new Error("Unable to retrieve metadata from object")}}function Mf(t){let e=t.split("?")[0],r=new RegExp(`^${Vf}/(?<bucket>[^/]+)/(?<path>.+)$`),n=e.match(r);if(n&&n.groups){let{bucket:i,path:s}=n.groups;return{bucket:i,path:s}}return null}var oS=W(require("aws-cloudfront-sign")),Ac;function bP(){if(!h.CLOUDFRONT_PRIVATE_KEY_64)throw new Error("CLOUDFRONT_PRIVATE_KEY_64 is not set");return Ac||(Ac=Buffer.from(h.CLOUDFRONT_PRIVATE_KEY_64,"base64").toString("utf-8"),Ac)}var DP=()=>({keypairId:h.CLOUDFRONT_PUBLIC_KEY_ID,privateKeyString:bP(),expireTime:new Date().getTime()+1e3*60*60*24}),us=t=>{let e=Wf(t);return oS.getSignedUrl(e,DP())},Wf=t=>{let e="/";return t.startsWith("/")&&(e=""),`${h.CLOUDFRONT_CDN}${e}${t}`};var aS=W(require("querystring"));function uS(t){return`${Le(t)}/budibase-client.js`}async function CP(t,e){let r=uS(t);return h.CLOUDFRONT_CDN?(e&&(r+=`?v=${e}`),Wf(r)):await Jr(h.APPS_BUCKET_NAME,r)}function vP(t,e){let r,n;try{r=j()}finally{n={appId:t,version:e}}return r&&r!==Te&&(n.tenantId=r),`/api/assets/client?${aS.default.encode(n)}`}async function cS(t){return h.CLOUDFRONT_CDN?us(t):await Jr(h.APPS_BUCKET_NAME,t)}async function NP(t){if(t.length===0)return[];try{return await Promise.all(t.map(async e=>({...e,src:await cS(e.src),type:e.type||"image/png"})))}catch(e){return console.error("Error enriching PWA images:",e),t}}var PP=async(t,e,r)=>{let n=lS(t,e);return h.CLOUDFRONT_CDN?(r&&(n=`${n}?etag=${r}`),us(n)):await Jr(h.GLOBAL_BUCKET_NAME,n)},lS=(t,e)=>{let r=`${t}/${e}`;return h.MULTI_TENANCY&&(r=`${j()}/${r}`),r};async function UP(t){return!t||!t.length?[]:await Promise.all(t.map(async e=>{let r=await LP(e),n=await MP(e);return{...e,jsUrl:r,iconUrl:n}}))}async function LP(t){let e=pS(t);return dS(e)}async function MP(t){let e=fS(t);if(e)return dS(e)}async function dS(t){return h.CLOUDFRONT_CDN?us(t):await Jr(h.PLUGIN_BUCKET_NAME,t)}function pS(t){return mS(t,"plugin.min.js")}function fS(t){let e=t.iconUrl?"icon.svg":t.iconFileName;if(e)return mS(t,e)}function mS(t,e){return`${hS(t.name)}/${e}`}function hS(t){let e=`${t}`;return h.MULTI_TENANCY&&(e=`${j()}/${e}`),h.CLOUDFRONT_CDN&&(e=`plugins/${e}`),e}var ES="budibase.log",TS="budibase-logs-history.txt",AS=Hf.default.join(ci(),"systemlogs");function gS(t){return Hf.default.join(AS,t)}function SS(t){let e=/(\d+)([A-Za-z])/,r=t?.match(e);if(!r){console.warn("totalMaxSize does not have a valid value",{totalMaxSize:t});return}let n=+r[1],i=r[2];if(n===1)switch(i){case"B":return{size:`${n}B`,totalHistoryFiles:1};case"K":return{size:`${n*1e3/2}B`,totalHistoryFiles:1};case"M":return{size:`${n*1e3/2}K`,totalHistoryFiles:1};case"G":return{size:`${n*1e3/2}M`,totalHistoryFiles:1};default:return}return n%2===0?{size:`${n/2}${i}`,totalHistoryFiles:1}:{size:`1${i}`,totalHistoryFiles:n-1}}function Kf(){let t=SS(h.ROLLING_LOG_MAX_SIZE);return yS.createStream(ES,{size:t?.size,path:AS,maxFiles:t?.totalHistoryFiles||1,immutable:!0,history:TS,initialRotation:!1})}function FP(){let t=[],e=gS(TS);if(na.default.existsSync(e)){let i=na.default.readFileSync(e,"utf-8").split(`
|
|
37
37
|
`);for(let s of i.filter(o=>o))t.push(na.default.readFileSync(s))}return t.push(na.default.readFileSync(gS(ES))),Buffer.concat(t)}function kP(t){return typeof t=="object"&&t!==null&&!(t instanceof Error)}function BP(t){return t instanceof Error}function GP(t){return typeof t=="string"}var zr;if(!h.DISABLE_PINO_LOGGER){let t=h.LOG_LEVEL,e={level:t,formatters:{level:u=>({level:u.toUpperCase()}),bindings:()=>h.SELF_HOSTED?{service:h.SERVICE_NAME}:{}},timestamp:()=>`,"timestamp":"${new Date(Date.now()).toISOString()}"`},r=[];r.push(h.isDev()?{stream:(0,_S.default)({singleLine:!0}),level:t}:{stream:process.stdout,level:t}),h.SELF_HOSTED&&r.push({stream:Kf(),level:t}),zr=r.length?(0,Sc.default)(e,Sc.default.multistream(r)):(0,Sc.default)(e);let n=u=>{let c,l=[],d="";u.forEach(E=>{GP(E)&&(d=`${d} ${E}`.trimStart()),kP(E)&&l.push(E),BP(E)&&(c=E)});let m=a(),p={};p={tenantId:i(),appId:s(),automationId:o(),identityId:m?._id,identityType:m?.type,correlationId:Lf()};let f=Jf.default.scope().active();f&&Jf.default.inject(f.context(),IS.formats.LOG,p);let g={err:c,pid:process.pid,...p};if(l.length){let E={},y=0;for(let _=0;_<l.length;_++){let S=l[_],M=S._logKey;M?(delete S._logKey,g[M]=S):(E[y]=S,y++)}Object.keys(E).length&&(g.data=E)}return[g,d]};console.log=(...u)=>{let[c,l]=n(u);zr?.info(c,l)},console.info=(...u)=>{let[c,l]=n(u);zr?.info(c,l)},console.warn=(...u)=>{let[c,l]=n(u);zr?.warn(c,l)},console.error=(...u)=>{let[c,l]=n(u);zr?.error(c,l)},console.trace=(...u)=>{let[c,l]=n(u);c.err||(c.err=new Error),zr?.trace(c,l)},console.debug=(...u)=>{let[c,l]=n(u);zr?.debug(c,l)};let i=()=>{let u;try{u=j()}catch{}return u},s=()=>{let u;try{u=Ue()}catch{}return u},o=()=>{let u;try{u=Kp()}catch{}return u},a=()=>{let u;try{u=ar()}catch{}return u}}var _c=zr;var $P=["AccountError"];function VP(t){return t&&t.suppressAlert}function ia(t,e){e&&$P.includes(e.name)&&VP(e)||console.error(`bb-alert: ${t}`,e)}function qP(t,e,r,n){t=`${t} - db: ${e} - doc: ${r} - error: `,ia(t,n)}function cs(t,e){console.warn(`bb-warn: ${t}`,e)}var sa=class{constructor(e){this.host=e}async apiCall(e,r,n){n.headers||(n.headers={}),n.headers["Content-Type"]||(n.headers={"Content-Type":"application/json",Accept:"application/json",...n.headers});let i=n.headers["Content-Type"]==="application/json";Xo.setHeader(n.headers);let s={method:e,body:i?JSON.stringify(n.body):n.body,headers:n.headers,credentials:"include"};return await(0,OS.default)(`${this.host}${r}`,s)}async post(e,r){return this.apiCall("POST",e,r)}async get(e,r){return this.apiCall("GET",e,r)}async patch(e,r){return this.apiCall("PATCH",e,r)}async del(e,r){return this.apiCall("DELETE",e,r)}async put(e,r){return this.apiCall("PUT",e,r)}};var zf=new sa(h.ACCOUNT_PORTAL_URL),Zf=h.SELF_HOSTED||h.DISABLE_ACCOUNT_PORTAL,Zr=async t=>{if(Zf)return;let e={email:t},r=await zf.post("/api/accounts/search",{body:e,headers:{"x-budibase-api-key":h.ACCOUNT_PORTAL_API_KEY}});if(r.status!==200)throw new Error(`Error getting account by email ${t}`);return(await r.json())[0]},ls=async t=>{if(Zf)return;let e={tenantId:t},r=await zf.post("/api/accounts/search",{body:e,headers:{"x-budibase-api-key":h.ACCOUNT_PORTAL_API_KEY}});if(r.status!==200)throw new Error(`Error getting account by tenantId ${t}`);return(await r.json())[0]},WP=async()=>{if(Zf)return;let t=await zf.get("/api/status",{headers:{"x-budibase-api-key":h.ACCOUNT_PORTAL_API_KEY}}),e=await t.json();if(t.status!==200)throw new Error("Error getting status");return e};var Es={};N(Es,{UserDB:()=>Kt,addAppBuilder:()=>y0,bulkGetGlobalUsersById:()=>Kc,bulkUpdateGlobalUsers:()=>Sa,cleanseUserObject:()=>wm,creatorsInList:()=>di,doesUserExist:()=>p0,getAccountHolderFromUsers:()=>Pc,getAllUserIds:()=>l0,getAllUsers:()=>d0,getById:()=>mi,getCreatorCount:()=>h0,getExistingAccounts:()=>ds,getExistingPlatformUsers:()=>bS,getExistingTenantUsers:()=>wS,getFirstPlatformUser:()=>oa,getGlobalUserByAppPage:()=>A_,getGlobalUserByEmail:()=>kt,getPlatformUsers:()=>Oc,getUserCount:()=>m0,hasAdminPermissions:()=>en,hasAppBuilderPermissions:()=>vS,hasBuilderPermissions:()=>Tt,isAdmin:()=>Xr,isAdminOrBuilder:()=>CS,isBuilder:()=>ms,isCreatorAsync:()=>aa,isCreatorSync:()=>vc,isGlobalBuilder:()=>DS,paginatedUsers:()=>__,removeAppBuilder:()=>E0,removePortalUserPermissions:()=>g0,searchExistingEmails:()=>tm,searchGlobalUsersByApp:()=>Yc,searchGlobalUsersByAppAccess:()=>Rm,searchGlobalUsersByEmail:()=>S_,validateUniqueUser:()=>Nc});var rm={};N(rm,{creatorsInList:()=>di,getAccountHolderFromUsers:()=>Pc,hasAdminPermissions:()=>en,hasAppBuilderPermissions:()=>vS,hasBuilderPermissions:()=>Tt,isAdmin:()=>Xr,isAdminOrBuilder:()=>CS,isBuilder:()=>ms,isCreatorAsync:()=>aa,isCreatorSync:()=>vc,isGlobalBuilder:()=>DS,validateUniqueUser:()=>Nc});var em={};N(em,{createCode:()=>jP,deleteCode:()=>KP,getCode:()=>HP,getExistingInvites:()=>Xf,getInviteCodes:()=>RS,updateCode:()=>QP});var xS=be.fromDays(7).toSeconds();async function QP(t,e){await(await Xn()).store(t,e,xS)}async function jP(t,e){let r=Se();return await(await Xn()).store(r,{email:t,info:e},xS),r}async function HP(t){let r=await(await Xn()).get(t);if(!r)throw"Invitation is not valid or has expired, please request a new one.";return r}async function KP(t){await(await Xn()).delete(t)}async function RS(){let r=(await(await Xn()).scan()).map(i=>({...i.value,code:i.key}));if(!h.MULTI_TENANCY)return r;let n=j();return r.filter(i=>n===i.info.tenantId)}async function Xf(t){return(await RS()).filter(e=>t.includes(e.email))}async function tm(t){let e=[],r=await wS(t);e.push(...r.map(o=>o.email));let n=await bS(t);e.push(...n.map(o=>o._id));let i=await ds(t);e.push(...i.map(o=>o.email));let s=await Xf(t);return e.push(...s.map(o=>o.email)),[...new Set(e.map(o=>o.toLowerCase()))]}async function Oc(t){return await Yo("platform_users_lowercase_2",{keys:[t.toLowerCase()],include_docs:!0})}async function oa(t){return(await Oc(t))[0]??null}async function wS(t){let r={keys:t.map(i=>i.toLowerCase()),include_docs:!0},n={arrayResponse:!0};return await dr("by_email2",r,void 0,n)}async function bS(t){let r={keys:t.map(n=>n.toLowerCase()),include_docs:!0};return await Yo("platform_users_lowercase_2",r)}async function ds(t){let r={keys:t.map(n=>n.toLowerCase()),include_docs:!0};return await Yo("account_by_email",r)}var Cc={};N(Cc,{BadRequestError:()=>Rc,BudibaseError:()=>ps,EmailUnavailableError:()=>hr,FeatureDisabledError:()=>bc,HTTPError:()=>lt,InvalidAPIKeyError:()=>fs,NotFoundError:()=>xc,UsageLimitError:()=>wc,getPublicError:()=>Dc});var ps=class extends Error{constructor(r,n){super(r);this.code=n}},Dc=t=>{let e;return t.code&&(e={code:t.code},t.getPublicError&&(e={...e,...t.getPublicError()})),e},lt=class t extends ps{constructor(r,n,i="http"){super(r,i);this.status=n}static async fromResponse(r){let n=await r.text(),i=n,s=r.status,o="http";try{let a=JSON.parse(n);i=a.message,s=a.status,o=a.error?.code}catch{}return new t(i,s,o)}},xc=class extends lt{constructor(e){super(e,404)}},Rc=class extends lt{constructor(e){super(e,400)}},wc=class extends lt{constructor(r,n){super(r,400,"usage_limit_exceeded");this.limitName=n}getPublicError(){return{limitName:this.limitName}}},bc=class extends lt{constructor(r,n){super(r,400,"feature_disabled");this.featureName=n}getPublicError(){return{featureName:this.featureName}}},fs=class extends ps{constructor(){super("Invalid API key - may need re-generated, or user doesn't exist","invalid_api_key")}},hr=class extends Error{constructor(e){super(`Email already in use: '${e}'`)}};var ms=ot.users.isBuilder,Xr=ot.users.isAdmin,DS=ot.users.isGlobalBuilder,CS=ot.users.isAdminOrBuilder,en=ot.users.hasAdminPermissions,Tt=ot.users.hasBuilderPermissions,vS=ot.users.hasAppBuilderPermissions;async function di(t,e){let r=[...new Set(t.filter(i=>i.userGroups).flatMap(i=>i.userGroups))];return e=await ie().getMultiple(r,{allowMissing:!0}),t.map(i=>vc(i,e))}async function aa(t){let e=[];return t.userGroups&&(e=await ie().getMultiple(t.userGroups)),vc(t,e)}function vc(t,e){let r=ot.users.isCreator(t);return!r&&t?JP(t,e):r}function JP(t,e){let r=e?.filter(n=>t.userGroups?.indexOf(n._id)!==-1);return r&&r.length>0?r.some(n=>Object.values(n.roles||{}).includes("CREATOR")):!1}async function Nc(t,e){if(h.MULTI_TENANCY){let r=await oa(t);if(r!=null&&r.tenantId!==e)throw new hr(t)}if(!h.SELF_HOSTED&&!h.DISABLE_ACCOUNT_PORTAL){let r=await Zr(t);if(r&&r.verified&&r.tenantId!==e)throw new hr(t)}}async function Pc(t){if(!h.SELF_HOSTED&&!h.DISABLE_ACCOUNT_PORTAL){let e=await ds(t.map(r=>r.email));return t.find(r=>e.map(n=>n.email).includes(r.email))}}var ys={};N(ys,{account:()=>KS,ai:()=>XS,analytics:()=>Lc,app:()=>YS,auditLog:()=>m_,auth:()=>Qc,automation:()=>JS,backfill:()=>c_,backfillCache:()=>qc,backup:()=>p_,datasource:()=>zS,email:()=>ZS,environmentVariable:()=>f_,group:()=>l_,identification:()=>Ft,initAsyncEvents:()=>JM,installation:()=>ha,layout:()=>t_,license:()=>e_,org:()=>r_,plugin:()=>d_,processors:()=>cm,publishEvent:()=>A,query:()=>n_,role:()=>Aa,rowAction:()=>h_,rows:()=>s_,screen:()=>i_,serve:()=>a_,shutdown:()=>zM,table:()=>o_,user:()=>Je,view:()=>u_});var cm={};N(cm,{analyticsProcessor:()=>qS,init:()=>gU,processors:()=>Er});var Lc={};N(Lc,{enabled:()=>Uc});var Uc=async()=>Mc();var MS=require("posthog-node");var zP=t=>t==="served:builder"||t==="served:app:preview"||t==="served:app",ZP=t=>t==="served:app:preview"||t==="served:app";var PS={"served:app":"calendarDay","served:app:preview":"calendarDay","served:builder":"calendarDay"},US=async t=>{if(!zP(t))return!1;let e=await XP(t);if(e){let r=new Date(e.timestamp);switch(PS[t]){case"calendarDay":return r.setDate(r.getDate()+1),r.setHours(0,0,0,0),Date.now()>r.getTime()?(await NS(t,{timestamp:Date.now()}),!1):!0}}else return await NS(t,{timestamp:Date.now()}),!1},LS=t=>{let e=`${Ce.EVENTS_RATE_LIMIT}:${t}`;return ZP(t)&&(e=e+":"+Ue()),e},XP=async t=>{let e=LS(t);return await ni(e)},NS=async(t,e)=>{let r=LS(t),n=PS[t],i;switch(n){case"calendarDay":i=86400}await cr(r,e,i)};var tU=["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"],ua=class{constructor(e){if(!e)throw new Error("Posthog token is not defined");this.posthog=new MS.PostHog(e)}async processEvent(e,r,n,i){if(tU.includes(e)||await US(e))return;n=this.clearPIIProperties(n),n.version=h.VERSION,n.service=h.SERVICE,n.environment=r.environment,n.hosting=r.hosting;let s=Ue();s&&(n.appId=s);let o={distinctId:r.id,event:e,properties:n};i&&(o.timestamp=new Date(i)),(r.installationId||r.tenantId)&&(o.groups={},r.installationId&&(o.groups.installation=r.installationId,o.properties.installationId=r.installationId),r.tenantId&&(o.groups.tenant=r.tenantId,o.properties.tenantId=r.tenantId)),this.posthog.capture(o)}clearPIIProperties(e){return e.email&&delete e.email,e.audited&&delete e.audited,e}async identify(e,r){let n={distinctId:e.id,properties:e};r&&(n.timestamp=new Date(r)),this.posthog.identify(n)}async identifyGroup(e,r){let n={distinctId:e.id,groupType:e.type,groupKey:e.id,properties:e};r&&(n.timestamp=new Date(r)),this.posthog.groupIdentify(n)}shutdown(){this.posthog.shutdown()}};var FS=ua;var rU=["installation:version:upgraded","installation:version:downgraded"],nU=["installation","tenant"],ca=class{constructor(){h.POSTHOG_TOKEN&&!h.isTest()&&(this.posthog=new FS(h.POSTHOG_TOKEN))}async processEvent(e,r,n,i){!rU.includes(e)&&!await Uc()||this.posthog&&await this.posthog.processEvent(e,r,n,i)}async identify(e,r){!nU.includes(e.type)&&!await Uc()||this.posthog&&await this.posthog.identify(e,r)}async identifyGroup(e,r){this.posthog&&await this.posthog.identifyGroup(e,r)}shutdown(){this.posthog&&this.posthog.shutdown()}};var nm=h.SELF_HOSTED&&!h.isDev(),la=class{async processEvent(e,r,n){nm||console.log(`[audit] [identityType=${r.type}] ${e}`,n)}async identify(e){nm||console.log("[audit] identified",e)}async identifyGroup(e){nm||console.log("[audit] group identified",e)}shutdown(){}};var um={};N(um,{BudibaseQueue:()=>yr,InMemoryQueue:()=>Fc,JobQueue:()=>hs,shutdown:()=>fU});var kS=W(require("events"));function iU(t){let e="",r=-1,n,i,s=t.opts?.repeat;return s&&(i=s.endDate?new Date(s.endDate).getTime():Date.now(),n=s.tz,"cron"in s?e=s.cron:r=s.every),{id:t.id.toString(),name:"",key:t.id.toString(),tz:n,endDate:i,cron:e,every:r,next:0}}var Fc=class{constructor(e,r){this._name=e,this._opts=r,this._messages=[],this._emitter=new kS.default.EventEmitter,this._runCount=0,this._addCount=0,this._queuedJobIds=new Set}async process(e,r){r=typeof e=="number"?r:e,this._emitter.on("message",async n=>{if(!n.manualTrigger&&n.opts?.repeat!=null)return;let i=r(n);async function s(a,u=0){try{await a}catch(c){if(u++,u<3)await jt.wait(100*u),await s(r(n),u);else throw c}}if(i.then!=null)try{await s(i),this._emitter.emit("completed",n);let a=this._messages.indexOf(n);if(a===-1)throw"Failed deleting a processed message";this._messages.splice(a,1)}catch(a){console.error(a)}this._runCount++;let o=n.opts?.jobId?.toString();o&&n.opts?.removeOnComplete&&this._queuedJobIds.delete(o)})}async isReady(){return this}async add(e,r){if(typeof e=="string")throw new Error("doesn't support named jobs");let n=r,i=n?.jobId?.toString();if(i&&this._queuedJobIds.has(i)){console.log(`Ignoring already queued job ${i}`);return}if(typeof e!="object")throw"Queue only supports carrying JSON.";i&&this._queuedJobIds.add(i);let s=()=>{let a={id:Se(),timestamp:Date.now(),queue:this,data:e,opts:n};this._messages.push(a),this._messages.length>1e3&&this._messages.shift(),this._addCount++,this._emitter.emit("message",a)},o=n?.delay;return o?setTimeout(s,o):s(),{id:i}}async close(){}async removeRepeatableByKey(e){for(let[r,n]of this._messages.entries())if(n.id===e){this._messages.splice(r,1),this._emitter.emit("removed",n);return}}async removeJobs(e){}async clean(){return[]}async getJob(e){for(let r of this._messages)if(r.id===e)return r;return null}manualTrigger(e){for(let r of this._messages)if(r.id===e){this._emitter.emit("message",{...r,manualTrigger:!0});return}throw new Error(`Job with id ${e} not found`)}on(e,r){return this._emitter.on(e,r),this}off(e,r){return this._emitter.off(e,r),this}async count(){return this._messages.length}async getCompletedCount(){return this._runCount}async getRepeatableJobs(){return this._messages.filter(e=>e.opts?.repeat!=null).map(e=>iU(e))}async whenCurrentJobsFinished(){do await bf(50);while(this.hasRunningJobs())}hasRunningJobs(){return this._addCount>this._runCount}},BS=Fc;var om=W(require("bull"));var hs=(o=>(o.AUTOMATION="automationQueue",o.APP_BACKUP="appBackupQueue",o.AUDIT_LOG="auditLogQueue",o.SYSTEM_EVENT_QUEUE="systemEventQueue",o.APP_MIGRATION="appMigration",o.DOC_WRITETHROUGH_QUEUE="docWritethroughQueue",o))(hs||{});function GS(t,e,r){aU(t,e),r&&sU(t,r)}function sU(t,e){t.on("stalled",async r=>{if(e)await e(r);else if(r.opts.repeat){let n=r.id,i=await t.getRepeatableJobs();for(let s of i)s.id===n&&await t.removeRepeatableByKey(s.key);console.log(`jobId=${n} disabled`)}})}function At(t,e,r={},n={}){let i=`[BULL] ${t}=${e}`,s=r.error,o={_logKey:"bull",eventType:t,event:e,job:r.job,jobId:r.jobId||r.job?.id,...n},a;return r.job?.data?.automation&&(a={_logKey:"automation",trigger:r.job?r.job.data.automation.definition.trigger.event:void 0}),[i,s,o,a]}var oU={automationQueue:"automation-event",appBackupQueue:"app-backup-event",auditLogQueue:"audit-log-event",systemEventQueue:"system-event",appMigration:"app-migration",docWritethroughQueue:"doc-writethrough"};function aU(t,e){let r=oU[e];function n(i,s){let o=i.data.event?.appId;if(o)return Hp(o,s);s()}t.on("stalled",async i=>{await n(i,()=>{console.error(...At(r,"stalled",{job:i}))})}).on("error",i=>{console.error(...At(r,"error",{error:i}))}),process.env.NODE_DEBUG?.includes("bull")&&t.on("waiting",i=>{console.info(...At(r,"waiting",{jobId:i}))}).on("active",async i=>{await n(i,()=>{console.info(...At(r,"active",{job:i}))})}).on("progress",async(i,s)=>{await n(i,()=>{console.info(...At(r,"progress",{job:i},{progress:s}))})}).on("completed",async(i,s)=>{await n(i,()=>{console.info(...At(r,"completed",{job:i},{result:s}))})}).on("failed",async(i,s)=>{await n(i,()=>{console.error(...At(r,"failed",{job:i,error:s}))})}).on("paused",()=>{console.info(...At(r,"paused"))}).on("resumed",()=>{console.info(...At(r,"resumed"))}).on("cleaned",(i,s)=>{console.info(...At(r,"cleaned",{},{length:i.length,type:s}))}).on("drained",()=>{console.info(...At(r,"drained"))}).on("removed",i=>{console.info(...At(r,"removed",{job:i}))})}var kc={};N(kc,{cleanup:()=>uU,clear:()=>sm,set:()=>im});var da=[];function im(t,e){let r=setInterval(t,e);return da.push(r),r}function sm(t){let e=da.indexOf(t);e!==-1&&da.splice(e,1),clearInterval(t)}function uU(){for(let t of da)clearInterval(t);da=[]}var gr=W(require("dd-trace")),pa=W(require("object-sizeof")),cU=be.fromMinutes(5).toMs(),lU=be.fromSeconds(30).toMs(),am=be.fromSeconds(60).toMs(),fa=[],Bc;async function $S(){for(let t of fa)await t.clean(am,"completed"),await t.clean(am,"failed")}async function dU(t,e,r){let n=performance.now();try{let i=await e();return gr.default.dogstatsd.increment(`${t}.success`,1,r),i}catch(i){throw gr.default.dogstatsd.increment(`${t}.error`,1,r),i}finally{let i=performance.now()-n;gr.default.dogstatsd.distribution(`${t}.duration.ms`,i,r),gr.default.dogstatsd.increment(t,1,r)}}function VS(t){return{"job.opts.attempts":t.attempts,"job.opts.backoff":t.backoff,"job.opts.delay":t.delay,"job.opts.jobId":t.jobId,"job.opts.lifo":t.lifo,"job.opts.preventParsingData":t.preventParsingData,"job.opts.priority":t.priority,"job.opts.removeOnComplete":t.removeOnComplete,"job.opts.removeOnFail":t.removeOnFail,"job.opts.repeat":t.repeat,"job.opts.stackTraceLimit":t.stackTraceLimit,"job.opts.timeout":t.timeout}}function pU(t){return{"job.id":t.id,"job.attemptsMade":t.attemptsMade,"job.timestamp":t.timestamp,"job.data.sizeBytes":(0,pa.default)(t.data),...VS(t.opts||{})}}var yr=class{constructor(e,r={}){this.opts=r,this.jobQueue=e,this.queue=this.initQueue()}initQueue(){let r={redis:zn(),settings:{maxStalledCount:this.opts.maxStalledCount?this.opts.maxStalledCount:0,lockDuration:cU,lockRenewTime:lU}};this.opts.jobOptions&&(r.defaultJobOptions=this.opts.jobOptions);let n;return h.isTest()?process.env.BULL_TEST_REDIS_PORT&&!isNaN(+process.env.BULL_TEST_REDIS_PORT)?n=new om.default(this.jobQueue,{redis:{host:"localhost",port:+process.env.BULL_TEST_REDIS_PORT}}):n=new BS(this.jobQueue,r):n=new om.default(this.jobQueue,r),GS(n,this.jobQueue,this.opts.removeStalledCb),fa.push(n),!Bc&&!h.isTest()&&(Bc=im($S,am),$S().catch(i=>{console.error(`Unable to cleanup ${this.jobQueue} initially - ${i}`)})),n}getBullQueue(){return this.queue}process(...e){let r,n;e.length===2?(r=e[0],n=e[1]):n=e[0];let i=async s=>{await gr.default.trace("queue.process",async o=>{if(s.data._parentSpanContext){let a=s.data._parentSpanContext,u={traceId:a.traceId,spanId:a.spanId,toTraceId:()=>a.traceId,toSpanId:()=>a.spanId,toTraceparent:()=>""};o.addLink(u)}o.addTags({"queue.name":this.jobQueue,...pU(s)}),this.opts.jobTags&&o.addTags(this.opts.jobTags(s.data)),gr.default.dogstatsd.distribution("queue.process.sizeBytes",(0,pa.default)(s.data),this.metricTags()),await this.withMetrics("queue.process",()=>n(s))})};return r?this.queue.process(r,i):this.queue.process(i)}async add(e,r){return await gr.default.trace("queue.add",async n=>(n.addTags({"queue.name":this.jobQueue,"job.data.sizeBytes":(0,pa.default)(e),...VS(r||{})}),this.opts.jobTags&&n.addTags(this.opts.jobTags(e)),e._parentSpanContext={traceId:n.context().toTraceId(),spanId:n.context().toSpanId()},gr.default.dogstatsd.distribution("queue.add.sizeBytes",(0,pa.default)(e),this.metricTags()),await this.withMetrics("queue.add",()=>this.queue.add(e,r))))}withMetrics(e,r){return dU(e,r,this.metricTags())}metricTags(){return{queueName:this.jobQueue}}close(){return this.queue.close()}};async function fU(){if(Bc&&sm(Bc),fa.length){for(let t of fa)await t.close();fa=[]}console.log("Queues shutdown")}var gs=class t{static{this.auditLogsEnabled=!1}static init(e){t.auditLogsEnabled=!0;let r=e;return t.auditLogQueue=new yr("auditLogQueue",{jobTags:n=>({"event.name":n.event})}),t.auditLogQueue.process(async n=>{await qe(n.data.tenantId,async()=>{let i=n.data.properties;i.audited&&(i={...i,...i.audited},delete i.audited);let s={};h.ENABLE_AUDIT_LOG_IP_ADDR&&(s=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:s})})})}async processEvent(e,r,n,i){if(t.auditLogsEnabled&&Df(e)){let s=r.type==="user"?r.id:void 0;await t.auditLogQueue.add({event:e,properties:n,opts:{userId:s,timestamp:i,appId:Ue(),hostInfo:r.hostInfo},tenantId:j()})}}async identify(){}async identifyGroup(){}shutdown(){t.auditLogQueue?.close()}};var ma=class{constructor(e){this.initialised=!1;this.processors=[];this.processors=e}async processEvent(e,r,n,i){for(let s of this.processors)await s.processEvent(e,r,n,i)}async identify(e,r){for(let n of this.processors)n.identify&&await n.identify(e,r)}async identifyGroup(e,r){for(let n of this.processors)n.identifyGroup&&await n.identifyGroup(e,r)}shutdown(){for(let e of this.processors)e.shutdown&&e.shutdown()}};var qS=new ca,mU=new la,hU=new gs;function gU(t){return gs.init(t)}var Er=new ma([qS,mU,hU]);var Gc={};N(Gc,{checkInstallVersion:()=>TU,getInstall:()=>ga,getInstallFromDB:()=>dm});var lm=W(require("semver"));var ga=async()=>Qr(Ce.INSTALLATION,86400,dm,{useTenancy:!1});async function yU(t){let e={_id:Ee.PLATFORM_INFO.docs.install,installId:Se(),version:h.VERSION};try{let r=await t.put(e);return e._rev=r.rev,e}catch(r){if(r.status===409)return dm();throw r}}var dm=async()=>ut(Ee.PLATFORM_INFO.name,async t=>{let e;try{e=await t.get(Ee.PLATFORM_INFO.docs.install)}catch(r){if(r.status===404)e=await yU(t);else throw r}return e}),EU=async t=>{try{await ut(Ee.PLATFORM_INFO.name,async e=>{let r=await ga();r.version=t,await e.put(r),await ts(Ce.INSTALLATION)})}catch(e){if(e.status===409)return!1;throw e}return!0},TU=async()=>{let t=await ga(),e=t.version,r=h.VERSION;try{if(e!==r){let n=lm.default.gt(r,e),i=lm.default.lt(r,e);await EU(r)&&(await Oo({_id:t.installId,type:"installation"},async()=>{n?await ha.upgraded(e,r):i&&await ha.downgraded(e,r)}),await Ft.identifyInstallationGroup(t.installId))}}catch(n){n?.message?.includes("Invalid Version")?ia(`Invalid version "${r}" - is it semver?`):ia("Failed to retrieve version",n)}};var AU=async()=>{let t=bp(),e=Ta(),r;if(t?r=t.type:r="tenant",r==="installation"){let n=await pi(),i=ya();return{id:WS(n,r),hosting:i,type:r,installationId:n,environment:e}}else if(r==="tenant"){let n=await pi(),i=await $c(j()),s=ya();return{id:WS(i,r),type:r,hosting:s,installationId:n,tenantId:i,realTenantId:j(),environment:e}}else if(r==="user"){let n=t,i=await $c(j()),s=await pi(),o=n.account,a;return o?a=o.hosting:a=ya(),{id:n._id,type:r,hosting:a,installationId:s,tenantId:i,environment:e,realTenantId:j(),hostInfo:n.hostInfo}}else throw new Error("Unknown identity type")},SU=async(t,e)=>{let r=t,n="installation",i=ya(),s=h.VERSION,o=Ta(),a={id:r,type:n,hosting:i,version:s,environment:o};await pm(a,e),await Ea({...a,id:`$${n}_${r}`},e)},_U=async(t,e,r)=>{let n=await $c(t),i="tenant",s=await pi(),o=Ta(),a={id:n,type:i,hosting:e,environment:o,installationId:s};await pm(a,r),await Ea({...a,id:`$${i}_${n}`},r)},IU=async(t,e,r)=>{let n=t._id,i=await $c(t.tenantId),s="user",o=Tt(t),a=en(t),u;Va(t)&&(u=t.providerType);let l=(await ds([t.email])).length>0,d=!!e&&l&&e.verified,m=await pi(),p=e?e.hosting:ya(),f=Ta();await Ea({id:n,type:s,hosting:p,installationId:m,tenantId:i,verified:d,accountHolder:l,providerType:u,builder:o,admin:a,environment:f},r)},OU=async t=>{let e=t.accountId,r=t.tenantId,n="user",i=$a(t)?t.providerType:void 0,s=t.verified,o=!0,a=t.hosting,u=await pi(),c=Ta();if(Ga(t)){let d=await kt(t.email);d?._id&&(e=d._id)}await Ea({id:e,type:n,hosting:a,installationId:u,tenantId:r,providerType:i,verified:s,accountHolder:o,environment:c})},Ea=async(t,e)=>{await Er.identify(t,e)},pm=async(t,e)=>{await Er.identifyGroup(t,e)},Ta=()=>h.isDev()?"development":h.DEPLOYMENT_ENVIRONMENT,ya=()=>h.SELF_HOSTED?"self":"cloud",pi=async()=>xU()?"account-portal":(await ga()).installId,$c=async t=>h.SELF_HOSTED?QS(t):t,QS=async t=>qe(t,()=>Qr(Ce.UNIQUE_TENANT_ID,86400,async()=>{let e=ie(),r=await Vc(),n;return r.config.uniqueTenantId?r.config.uniqueTenantId:(n=`${Se()}_${t}`,r.config.uniqueTenantId=n,await e.put(r),n)})),xU=()=>h.SERVICE==="account-portal",WS=(t,e)=>e==="installation"||e==="tenant"?`$${e}_${t}`:t,Ft={getCurrentIdentity:AU,identifyInstallationGroup:SU,identifyTenantGroup:_U,identifyUser:IU,identifyAccount:OU,identify:Ea,identifyGroup:pm,getInstallationId:pi,getUniqueTenantId:QS};var qc={};N(qc,{end:()=>wU,isAlreadySent:()=>hm,isBackfillingEvent:()=>mm,recordEvent:()=>fm,start:()=>RU});var RU=async t=>DU({eventWhitelist:t}),fm=async(t,e)=>{let r=gm(t,e);await cr(r,e,void 0,{useTenancy:!1})},wU=async()=>{await CU(),await vU()},bU=async()=>ni(Ce.BACKFILL_METADATA),DU=async t=>cr(Ce.BACKFILL_METADATA,t),CU=async()=>{await $o(Ce.BACKFILL_METADATA)},vU=async()=>{let t=gm(),e=await ac(t);for(let r of e)await $o(r,{useTenancy:!1})},mm=async t=>{let r=(await bU())?.eventWhitelist;return!!(r&&r.includes(t))},hm=async(t,e)=>{let r=gm(t,e);return!!await ni(r,{useTenancy:!1})},NU={"automation:created":t=>t.automationId,"automation:step:created":t=>t.stepId,"datasource:created":t=>t.datasourceId,"layout:created":t=>t.layoutId,"query:created":t=>t.queryId,"role:created":t=>t.roleId,"screen:created":t=>t.screenId,"table:created":t=>t.tableId,"view:created":t=>t.tableId,"view:calculation:created":t=>t.tableId,"view:filter:created":t=>t.tableId,"app:created":t=>t.appId,"app:published":t=>t.appId,"auth:sso:created":t=>t.type,"auth:sso:activated":t=>t.type,"user:created":t=>t.userId,"user:admin:assigned":t=>t.userId,"user:builder:assigned":t=>t.userId,"role:assigned":t=>`${t.roleId}-${t.userId}`},gm=(t,e)=>{let r,n=j();if(t){r=`${Ce.EVENTS}:${n}:${t}`;let i=NU[t],s=i?i(e):void 0;s&&(r=`${r}:${s}`)}else r=`${Ce.EVENTS}:${n}:*`;return r};var Tr;function Wc(){Tr=new yr("systemEventQueue",{jobTags:t=>({"event.name":t.event})})}async function jS(){Tr&&await Tr.close()}async function HS(t){Tr||Wc();let{event:e,identity:r}=t;bh.indexOf(e)!==-1&&r.tenantId&&await Tr.add(t)}var A=async(t,e,r,n)=>{let i=n||await Ft.getCurrentIdentity();if(!(n?!1:await mm(t))){await HS({event:t,identity:i,properties:e,timestamp:r}),await Er.processEvent(t,i,e,r);return}await hm(t,e)||(await Er.processEvent(t,i,e,r),await fm(t,e))};async function PU(t,e){let r={tenantId:t.tenantId};await A("account:created",r,void 0,e)}async function UU(t){let e={tenantId:t.tenantId};await A("account:deleted",e)}async function LU(t){let e={tenantId:t.tenantId};await A("account:verified",e)}var KS={created:PU,deleted:UU,verified:LU};var MU=async(t,e)=>{let r={appId:t.appId,version:t.version,audited:{name:t.name}};await A("app:created",r,e)};async function FU(t){let e={appId:t.appId,version:t.version,audited:{name:t.name}};await A("app:updated",e)}async function kU(t){let e={appId:t.appId,audited:{name:t.name}};await A("app:deleted",e)}async function BU(t,e){let r={appId:t.appId,audited:{name:t.name}};await A("app:published",r,e)}async function GU(t){let e={appId:t.appId,audited:{name:t.name}};await A("app:unpublished",e)}async function $U(t){let e={appId:t.appId,audited:{name:t.name}};await A("app:file:imported",e)}async function VU(t,e){let r={duplicateAppId:e,appId:t.appId,audited:{name:t.name}};await A("app:duplicated",r)}async function qU(t,e){let r={appId:t.appId,templateKey:e,audited:{name:t.name}};await A("app:template:imported",r)}async function WU(t,e,r){let n={appId:t.appId,currentVersion:e,updatedToVersion:r,audited:{name:t.name}};await A("app:version:updated",n)}async function QU(t,e,r){let n={appId:t.appId,currentVersion:e,revertedToVersion:r,audited:{name:t.name}};await A("app:version:reverted",n)}async function jU(t){let e={appId:t.appId,audited:{name:t.name}};await A("app:reverted",e)}async function HU(t){let e={appId:t.appId,audited:{name:t.name}};await A("app:exported",e)}var YS={created:MU,updated:FU,deleted:kU,published:BU,unpublished:GU,fileImported:$U,duplicated:VU,templateImported:qU,versionUpdated:WU,versionReverted:QU,reverted:jU,exported:HU};async function KU(t,e){let n={userId:(await Ft.getCurrentIdentity()).id,source:t,audited:{email:e}};await A("auth:login",n)}async function YU(t){let r={userId:(await Ft.getCurrentIdentity()).id,audited:{email:t}};await A("auth:logout",r)}async function JU(t,e){let r={type:t};await A("auth:sso:created",r,e)}async function zU(t){let e={type:t};await A("auth:sso:updated",e)}async function ZU(t,e){let r={type:t};await A("auth:sso:activated",r,e)}async function XU(t){let e={type:t};await A("auth:sso:deactivated",e)}var Qc={login:KU,logout:YU,SSOCreated:JU,SSOUpdated:zU,SSOActivated:ZU,SSODeactivated:XU};async function eL(t,e){let r={appId:t.appId,automationId:t._id,triggerId:t.definition?.trigger?.id,triggerType:t.definition?.trigger?.stepId,audited:{name:t.name}};await A("automation:created",r,e)}async function tL(t){let e={appId:t.appId,automationId:t._id,triggerId:t.definition?.trigger?.id,triggerType:t.definition?.trigger?.stepId};await A("automation:trigger:updated",e)}async function rL(t){let e={appId:t.appId,automationId:t._id,triggerId:t.definition?.trigger?.id,triggerType:t.definition?.trigger?.stepId,audited:{name:t.name}};await A("automation:deleted",e)}async function nL(t){let e={appId:t.appId,automationId:t._id,triggerId:t.definition?.trigger?.id,triggerType:t.definition?.trigger?.stepId};await A("automation:tested",e)}var iL=async(t,e)=>{let r={count:t};await A("automations:run",r,e)};async function sL(t,e,r){let n={appId:t.appId,automationId:t._id,triggerId:t.definition?.trigger?.id,triggerType:t.definition?.trigger?.stepId,stepId:e.id,stepType:e.stepId,audited:{name:t.name}};await A("automation:step:created",n,r)}async function oL(t,e){let r={appId:t.appId,automationId:t._id,triggerId:t.definition?.trigger?.id,triggerType:t.definition?.trigger?.stepId,stepId:e.id,stepType:e.stepId,audited:{name:t.name}};await A("automation:step:deleted",r)}var JS={created:eL,triggerUpdated:tL,deleted:rL,tested:nL,run:iL,stepCreated:sL,stepDeleted:oL};function ym(t){return!Object.values(Ma).includes(t.source)}async function aL(t,e){let r={datasourceId:t._id,source:t.source,custom:ym(t)};await A("datasource:created",r,e)}async function uL(t){let e={datasourceId:t._id,source:t.source,custom:ym(t)};await A("datasource:updated",e)}async function cL(t){let e={datasourceId:t._id,source:t.source,custom:ym(t)};await A("datasource:deleted",e)}var zS={created:aL,updated:uL,deleted:cL};async function lL(t){let e={};await A("email:smtp:created",e,t)}async function dL(){let t={};await A("email:smtp:updated",t)}var ZS={SMTPCreated:lL,SMTPUpdated:dL};async function pL(t){let e={};await A("ai:config:created",e,t)}async function fL(){let t={};await A("ai:config:updated",t)}var XS={AIConfigCreated:pL,AIConfigUpdated:fL};async function mL(t,e){let r={accountId:t.accountId,...e};await A("license:plan:changed",r)}async function hL(t){let e={accountId:t.accountId};await A("license:activated",e)}async function gL(t){let e={accountId:t.accountId};await A("license:checkout:opened",e)}async function yL(t){let e={accountId:t.accountId};await A("license:checkout:success",e)}async function EL(t){let e={accountId:t.accountId};await A("license:portal:opened",e)}async function TL(t){let e={accountId:t.accountId};await A("license:payment:failed",e)}async function AL(t){let e={accountId:t.accountId};await A("license:payment:recovered",e)}var e_={planChanged:mL,activated:hL,checkoutOpened:gL,checkoutSuccess:yL,portalOpened:EL,paymentFailed:TL,paymentRecovered:AL};async function SL(t,e){let r={layoutId:t._id};await A("layout:created",r,e)}async function _L(t){let e={layoutId:t};await A("layout:deleted",e)}var t_={created:SL,deleted:_L};async function IL(t){let e={};await A("org:info:name:updated",e,t)}async function OL(t){let e={};await A("org:info:logo:updated",e,t)}async function xL(t){let e={};await A("org:platformurl:updated",e,t)}async function RL(){let t={};await A("analytics:opt:out",t)}async function wL(){let t={};await A("analytics:opt:out",t)}var r_={nameUpdated:IL,logoUpdated:OL,platformURLUpdated:xL,analyticsOptOut:RL,analyticsOptIn:wL};var bL=async(t,e,r)=>{let n={queryId:e._id,datasourceId:t._id,source:t.source,queryVerb:e.queryVerb};await A("query:created",n,r)},DL=async(t,e)=>{let r={queryId:e._id,datasourceId:t._id,source:t.source,queryVerb:e.queryVerb};await A("query:updated",r)},CL=async(t,e)=>{let r={queryId:e._id,datasourceId:t._id,source:t.source,queryVerb:e.queryVerb};await A("query:deleted",r)},vL=async(t,e,r)=>{let n={datasourceId:t._id,source:t.source,count:r,importSource:e};await A("query:import",n)},NL=async(t,e)=>{let r={count:t};await A("queries:run",r,e)},PL=async(t,e)=>{let r={queryId:e.queryId,datasourceId:t._id,source:t.source,queryVerb:e.queryVerb};await A("query:previewed",r)},n_={created:bL,updated:DL,deleted:CL,imported:vL,run:NL,previewed:PL};async function UL(t,e){let r={roleId:t._id,permissionId:t.permissionId,inherits:t.inherits};await A("role:created",r,e)}async function LL(t){let e={roleId:t._id,permissionId:t.permissionId,inherits:t.inherits};await A("role:updated",e)}async function ML(t){let e={roleId:t._id,permissionId:t.permissionId,inherits:t.inherits};await A("role:deleted",e)}async function FL(t,e,r){let n={userId:t._id,roleId:e};await A("role:assigned",n,r)}async function kL(t,e){let r={userId:t._id,roleId:e};await A("role:unassigned",r)}var Aa={created:UL,updated:LL,deleted:ML,assigned:FL,unassigned:kL};async function BL(t,e){let r={layoutId:t.layoutId,screenId:t._id,roleId:t.routing.roleId,audited:{name:t.routing?.route}};await A("screen:created",r,e)}async function GL(t){let e={layoutId:t.layoutId,screenId:t._id,roleId:t.routing.roleId,audited:{name:t.routing?.route}};await A("screen:deleted",e)}var i_={created:BL,deleted:GL};var $L=async(t,e)=>{let r={count:t};await A("rows:created",r,e)},VL=async(t,e)=>{let r={tableId:t._id,count:e};await A("rows:imported",r)},s_={created:$L,imported:VL};async function qL(t,e){let r={tableId:t._id,audited:{name:t.name}};await A("table:created",r,e)}async function WL(t,e){let r,n;for(let s in e.schema)if(!t.schema[s]){let o=e.schema[s];"default"in o&&o.default!=null&&(r=!0),o.type==="ai"&&(n=o.operation)}let i={tableId:e._id,defaultValues:r,aiColumn:n,audited:{name:e.name}};(r||n)&&await A("table:updated",i)}async function QL(t){let e={tableId:t._id,audited:{name:t.name}};await A("table:deleted",e)}async function jL(t,e){let r={tableId:t._id,format:e,audited:{name:t.name}};await A("table:exported",r)}async function HL(t){let e={tableId:t._id,audited:{name:t.name}};await A("table:imported",e)}var o_={created:qL,updated:WL,deleted:QL,exported:jL,imported:HL};async function KL(t){let e={timezone:t};await A("served:builder",e)}async function YL(t,e,r){let n={appVersion:t.version,timezone:e,embed:r===!0};await A("served:app",n)}async function JL(t,e){let r={appId:t.appId,appVersion:t.version,timezone:e};await A("served:app:preview",r)}var a_={servedBuilder:KL,servedApp:YL,servedAppPreview:JL};async function zL(t,e){let r={userId:t._id,viaScim:Pt(),audited:{email:t.email}};await A("user:created",r,e)}async function ZL(t){let e={userId:t._id,viaScim:Pt(),audited:{email:t.email}};await A("user:updated",e)}async function XL(t){let e={userId:t._id,viaScim:Pt(),audited:{email:t.email}};await A("user:deleted",e)}async function eM(t,e){let r={userId:t._id,audited:{email:t.email}};await A("user:admin:assigned",r,e)}async function tM(t){let e={userId:t._id,audited:{email:t.email}};await A("user:admin:removed",e)}async function rM(t,e){let r={userId:t._id,audited:{email:t.email}};await A("user:builder:assigned",r,e)}async function nM(t){let e={userId:t._id,audited:{email:t.email}};await A("user:builder:removed",e)}async function iM(t){let e={audited:{email:t}};await A("user:invited",e)}async function sM(t){let e={userId:t._id,audited:{email:t.email}};await A("user:invite:accepted",e)}async function oM(t){let e={userId:t._id,audited:{email:t.email}};await A("user:password:force:reset",e)}async function aM(t){let e={userId:t._id,audited:{email:t.email}};await A("user:password:updated",e)}async function uM(t){let e={userId:t._id,audited:{email:t.email}};await A("user:password:reset:requested",e)}async function cM(t){let e={userId:t._id,audited:{email:t.email}};await A("user:password:reset",e)}async function lM(t){let e={users:t};await A("user:data:collaboration",e)}var Je={created:zL,updated:ZL,deleted:XL,permissionAdminAssigned:eM,permissionAdminRemoved:tM,permissionBuilderAssigned:rM,permissionBuilderRemoved:nM,invited:iM,inviteAccepted:sM,passwordForceReset:oM,passwordUpdated:aM,passwordResetRequested:uM,passwordReset:cM,dataCollaboration:lM};async function dM(t,e){let r={name:t.name,type:t.type,tableId:t.tableId};await A("view:created",r,e)}async function pM(t){let e={tableId:t.tableId};await A("view:updated",e)}async function fM(t){let e={tableId:t.tableId};await A("view:deleted",e)}async function mM(t,e){let r={tableId:t._id,format:e};await A("view:exported",r)}async function hM({tableId:t,filterGroups:e},r){let n={tableId:t,filterGroups:e};await A("view:filter:created",n,r)}async function gM({tableId:t,filterGroups:e}){let r={tableId:t,filterGroups:e};await A("view:filter:updated",r)}async function yM(t){let e={tableId:t.tableId};await A("view:filter:deleted",e)}async function EM({tableId:t,calculationType:e},r){let n={tableId:t,calculation:e};await A("view:calculation:created",n,r)}async function TM(t){let e={tableId:t.tableId,calculation:t.calculation};await A("view:calculation:updated",e)}async function AM(t){let e={tableId:t.tableId,calculation:t.calculation};await A("view:calculation:deleted",e)}async function SM(t,e){let r={tableId:t};await A("view:join:created",r,e)}var u_={created:dM,updated:pM,deleted:fM,exported:mM,filterCreated:hM,filterUpdated:gM,filterDeleted:yM,calculationCreated:EM,calculationUpdated:TM,calculationDeleted:AM,viewJoinCreated:SM};async function _M(t){let e={currentVersion:t};await A("installation:version:checked",e)}async function IM(t,e){let r={from:t,to:e};await A("installation:version:upgraded",r)}async function OM(t,e){let r={from:t,to:e};await A("installation:version:downgraded",r)}async function xM(){let t={};await A("installation:firstStartup",t)}var ha={versionChecked:_M,upgraded:IM,downgraded:OM,firstStartup:xM};var Ts=!h.SELF_HOSTED&&!h.isDev();async function RM(t){Ts||await A("app:backfill:succeeded",t)}async function wM(t){if(Ts)return;let e={error:JSON.stringify(t,Object.getOwnPropertyNames(t))};await A("app:backfill:failed",e)}async function bM(t){Ts||await A("tenant:backfill:succeeded",t)}async function DM(t){if(Ts)return;let e={error:JSON.stringify(t,Object.getOwnPropertyNames(t))};await A("tenant:backfill:failed",e)}async function CM(){if(Ts)return;let t={};await A("installation:backfill:succeeded",t)}async function vM(t){if(Ts)return;let e={error:JSON.stringify(t,Object.getOwnPropertyNames(t))};await A("installation:backfill:failed",e)}var c_={appSucceeded:RM,appFailed:wM,tenantSucceeded:bM,tenantFailed:DM,installationSucceeded:CM,installationFailed:vM};async function NM(t,e){let r={groupId:t._id,viaScim:Pt(),audited:{name:t.name}};await A("user_group:created",r,e)}async function PM(t){let e={groupId:t._id,viaScim:Pt(),audited:{name:t.name}};await A("user_group:updated",e)}async function UM(t){let e={groupId:t._id,viaScim:Pt(),audited:{name:t.name}};await A("user_group:deleted",e)}async function LM(t,e){let r={count:t,groupId:e._id,viaScim:Pt(),audited:{name:e.name}};await A("user_group:user_added",r)}async function MM(t,e){let r={count:t,groupId:e._id,viaScim:Pt(),audited:{name:e.name}};await A("user_group:users_deleted",r)}async function FM(t){let e={groupId:t,onboarding:!0};await A("user_group:onboarding_added",e)}async function kM(t){let e={permissions:t.roles,groupId:t._id,audited:{name:t.name}};await A("user_group:permissions_edited",e)}var l_={created:NM,updated:PM,deleted:UM,usersAdded:LM,usersDeleted:MM,createdOnboarding:FM,permissionsEdited:kM};async function BM(t){let e={type:t.schema.type,name:t.name,description:t.description,version:t.version};await A("plugin:init",e)}async function GM(t){let e={pluginId:t._id,type:t.schema.type,source:t.source,name:t.name,description:t.description,version:t.version};await A("plugin:imported",e)}async function $M(t){let e={pluginId:t._id,type:t.schema.type,name:t.name,description:t.description,version:t.version};await A("plugin:deleted",e)}var d_={init:BM,imported:GM,deleted:$M};async function VM(t){let e={appId:t.appId,restoreId:t._id,backupCreatedAt:t.timestamp,name:t.name};await A("app:backup:restored",e)}async function qM(t,e,r,n,i){let s={appId:t,backupId:e,type:r,trigger:n,name:i};await A("app:backup:triggered",s)}var p_={appBackupRestored:VM,appBackupTriggered:qM};async function WM(t,e){let r={name:t,environments:e};await A("environment_variable:created",r)}async function QM(t){let e={name:t};await A("environment_variable:deleted",e)}async function jM(t){let e={userId:t};await A("environment_variable:upgrade_panel_opened",e)}var f_={created:WM,deleted:QM,upgradePanelOpened:jM};async function HM(t){let e={filters:t};await A("audit_log:filtered",e)}async function KM(t){let e={filters:t};await A("audit_log:downloaded",e)}var m_={filtered:HM,downloaded:KM};async function YM(t,e){await A("row_action:created",t,e)}var h_={created:YM};function JM(){}var zM=()=>{Er.shutdown(),console.log("Events shutdown")};var Em=async t=>{await Je.deleted(t),Tt(t)&&await Je.permissionBuilderRemoved(t),en(t)&&await Je.permissionAdminRemoved(t)},ZM=async(t,e,r)=>{for(let[n,i]of Object.entries(e))(!r||r[n]!==i)&&await Aa.assigned(t,i)},XM=async(t,e,r)=>{if(r)for(let[n,i]of Object.entries(r))(!e||e[n]!==i)&&await Aa.unassigned(t,i)},e0=async(t,e)=>{let r=t.roles,n=e?.roles;await ZM(t,r,n),await XM(t,r,n)},Tm=async(t,e)=>{let r=j(),n;!h.SELF_HOSTED&&!h.DISABLE_ACCOUNT_PORTAL&&(n=await ls(r)),await Ft.identifyUser(t,n),e?(await Je.updated(t),r0(t,e)&&await Je.permissionBuilderRemoved(t),i0(t,e)&&await Je.permissionAdminRemoved(t),!e.forceResetPassword&&t.forceResetPassword&&t.password&&await Je.passwordForceReset(t),t.password!==e.password&&await Je.passwordUpdated(t)):await Je.created(t),t0(t,e)&&await Je.permissionBuilderAssigned(t),n0(t,e)&&await Je.permissionAdminAssigned(t),await e0(t,e)},t0=(t,e)=>g_(t,e,Tt),r0=(t,e)=>y_(t,e,Tt),n0=(t,e)=>g_(t,e,en),i0=(t,e)=>y_(t,e,en),g_=(t,e,r)=>!(!r(t)||e&&r(e)),y_=(t,e,r)=>!(r(t)||!e||!r(e));var Hc={};N(Hc,{createASession:()=>o0,endSession:()=>a0,getSession:()=>Sm,getSessionsForUser:()=>jc,invalidateSessions:()=>fi,updateSessionTTL:()=>Am});var E_=require("uuid");var T_=h.SESSION_EXPIRY_SECONDS?parseInt(h.SESSION_EXPIRY_SECONDS):be.fromDays(7).toSeconds();function As(t,e){return`${t}/${e}`}async function jc(t){return t?(await(await qr()).scan(t)).map(n=>n.value):(console.trace("Cannot get sessions for undefined userId"),[])}async function fi(t,e={}){try{let r=e?.reason||"unknown",n=e.sessionIds||[],i;if(n.length===0?i=(await jc(t)).map(o=>({key:As(o.userId,o.sessionId)})):(n=Array.isArray(n)?n:[n],i=n.map(s=>({key:As(t,s)}))),i&&i.length>0){let s=await qr(),o=[];for(let a of i)o.push(s.delete(a.key));h.isTest()||cs(`Invalidating sessions for ${t} (reason: ${r}) - ${i.map(a=>a.key).join(", ")}`),await Promise.all(o)}}catch(r){console.error(`Error invalidating sessions: ${r}`)}}async function o0(t,e){await fi(t,{reason:"creation"});let r=await qr(),n=e.sessionId,i=e.csrfToken?e.csrfToken:(0,E_.v4)(),s=As(t,n),o={...e,csrfToken:i,createdAt:new Date().toISOString(),lastAccessedAt:new Date().toISOString(),userId:t};return await r.store(s,o,T_),o}async function Am(t){let e=await qr(),r=As(t.userId,t.sessionId);t.lastAccessedAt=new Date().toISOString(),await e.store(r,t,T_)}async function a0(t,e){await(await qr()).delete(As(t,e))}async function Sm(t,e){if(!t||!e)throw new Error(`Invalid session details - ${t} - ${e}`);let n=await(await qr()).get(As(t,e));if(!n)throw new Error(`Session not found - ${t} - ${e}`);return n}var xm={};N(xm,{PASSWORD_MAX_LENGTH:()=>Im,PASSWORD_MIN_LENGTH:()=>_m,validatePassword:()=>Om});var _m=+(h.PASSWORD_MIN_LENGTH||12),Im=+(h.PASSWORD_MAX_LENGTH||512);function Om(t){return!t||t.length<_m?{valid:!1,error:`Password invalid. Minimum ${_m} characters.`}:t.length>Im?{valid:!1,error:`Password invalid. Maximum ${Im} characters.`}:{valid:!0}}var u0=async t=>{let e=t._id;await Lt.removeUser(t),await Em(t),await rn.invalidateUser(e),await fi(e,{reason:"bulk-deletion"})},Kt=class t{static init(e,r,n){t.quotas=e,t.groups=r,t.features=n}static async isPreventPasswordActions(e,r){return h.ENABLE_SSO_MAINTENANCE_MODE&&Xr(e)?!1:await t.features.isSSOEnforced()||Va(e)?!0:(r||(r=await ls(j())),!!(r&&r.email===e.email&&$a(r)))}static async buildUser(e,r={hashPassword:!0,requirePassword:!0},n,i,s){let{password:o,_id:a}=e;i&&!i.password&&(r.requirePassword=!1);let u;if(o){if(await t.isPreventPasswordActions(e,s))throw new lt("Password change is disabled for this user",400);if(!r.skipPasswordValidation){let d=Om(o);if(!d.valid)throw new lt(d.error,400)}u=r.hashPassword?await ff(o):o}else i&&(u=i.password);let c=r.requirePassword&&!await t.features.isSSOEnforced();if(!u&&c)throw"Password must be specified.";a=a||rs();let l={createdAt:Date.now(),...i,...e,_id:a,password:u,tenantId:n};return l.roles||(l.roles={}),l.status==null&&(l.status="active"),l}static async allUsers(){return(await ie().allDocs(si(null,{include_docs:!0}))).rows.map(n=>n.doc)}static async countUsersByApp(e){return{userCount:(await Yc(e,{})).length}}static async getUsersByAppAccess(e){return await Rm(e.appId,{limit:e.limit||50})}static async getUserByEmail(e){return kt(e)}static async getUser(e){let r=await mi(e);return r&&delete r.password,r}static async bulkGet(e){return await Kc(e)}static async bulkUpdate(e){return await Sa(e)}static async save(e,r={}){r.hashPassword==null&&(r.hashPassword=!0),r.requirePassword==null&&(r.requirePassword=!0);let n=j(),i=ie(),{email:s,_id:o,userGroups:a=[],roles:u}=e;if(!s&&!o)throw new Error("_id or email is required");let c;if(o)try{if(c=await mi(o),s&&c.email!==s&&!r.allowChangingEmail)throw new Error("Email address cannot be changed")}catch(m){if(m.status!==404)throw m}if(!c&&s&&(c=await kt(s),c&&c._id!==o))throw new hr(s);let l=1,d=0;if((r.isAccountHolder||c)&&(l=0,d=1),c){let[m,p]=await di([c,e]);d=m!==p?1:0}return t.quotas.addUsers(l,d,async()=>{r.isAccountHolder||await Nc(s,n);let m=await t.buildUser(e,r,n,c);r.currentUserId&&r.currentUserId===c?._id&&(m=wm(m,c)),!c&&u?.length&&(m.roles={...u});let p=[];if(!o&&a.length>0)for(let f of a)p.push(t.groups.addUsers(f,[m._id]));try{let f=await i.put(m);return m._rev=f.rev,await Tm(m,c),c&&m.email!==c.email&&await Lt.removeUser({email:c.email}),await Lt.addUser(n,m._id,m.email,m.ssoId),await rn.invalidateUser(f.id),await Promise.all(p),i.get(m._id)}catch(f){throw f.status===409?"User exists already":f}})}static async bulkCreate(e,r){let n=j(),i=[],s=[],o=[],a=e.map(d=>d.email),u=await tm(a),c=[];for(let d of e){if(s.find(m=>m.email.toLowerCase()===d.email.toLowerCase())||u.includes(d.email.toLowerCase())){c.push({email:d.email,reason:"Unavailable"});continue}d.userGroups=r||[],s.push(d),await aa(d)&&o.push(d)}let l=await ls(n);return t.quotas.addUsers(s.length,o.length,async()=>{s.forEach(p=>{i.push(t.buildUser(p,{hashPassword:!0,requirePassword:p.requirePassword},n,void 0,l))});let d=await Promise.all(i);await Sa(d);for(let p of d)await Lt.addUser(n,p._id,p.email),await Tm(p,void 0);let m=d.map(p=>({_id:p._id,email:p.email}));if(Array.isArray(m)&&r){let p=[],f=m.map(g=>g._id);for(let g of r)p.push(t.groups.addUsers(g,f));await Promise.all(p)}return{successful:m,unsuccessful:c}})}static async bulkDelete(e){let r=ie(),n={successful:[],unsuccessful:[]},i=await Pc(e);i&&(e=e.filter(p=>p.userId!==i.userId),n.unsuccessful.push({_id:i.userId,email:i.email,reason:"Account holder cannot be deleted"}));let o=(await r.allDocs({include_docs:!0,keys:e.map(p=>p.userId)})).rows.map(p=>p.doc),a=o.map(p=>({...p,_deleted:!0})),u=await Sa(a),l=(await di(o)).filter(p=>p).length,d=[];for(let p of o){let g=(await oa(p._id)).ssoId;g&&(await Oc(g)).filter(y=>y.ssoId==null).forEach(y=>{d.push({...y,_deleted:!0})}),await u0(p)}await ct().bulkDocs(d),await t.quotas.removeUsers(a.length,l);let m={};return o.reduce((p,f)=>(p[f._id]=f,p),m),u.forEach(p=>{let f=m[p.id].email;p.ok?n.successful.push({_id:p.id,email:f}):n.unsuccessful.push({_id:p.id,email:f,reason:"Database error"})}),n}static async destroy(e){let r=ie(),n=await r.get(e),i=n._id;if(!h.SELF_HOSTED&&!h.DISABLE_ACCOUNT_PORTAL){let o=n.email;if(await Zr(o))throw n.userId===ar()._id?new lt('Please visit "Account" to delete this user',400):new lt("Account holder cannot be deleted",400)}await Lt.removeUser(n),await r.remove(i,n._rev);let s=await aa(n)?1:0;await t.quotas.removeUsers(1,s),await Em(n),await rn.invalidateUser(i),await fi(i,{reason:"deletion"})}static async createAdminUser(e,r,n){let i=n?.password,s={email:e,password:i,createdAt:Date.now(),roles:{},builder:{global:!0},admin:{global:!0},tenantId:r,firstName:n?.firstName,lastName:n?.lastName};return n?.ssoId&&(s.ssoId=n.ssoId),await ts(Ce.CHECKLIST),await t.save(s,{hashPassword:n?.hashPassword,requirePassword:n?.requirePassword,skipPasswordValidation:n?.skipPasswordValidation,isAccountHolder:!0})}static async getGroups(e){return await this.groups.getBulk(e)}static async getGroupBuilderAppIds(e){return await this.groups.getGroupBuilderAppIds(e)}};function Ia(t){return Array.isArray(t)?t.map(e=>{if(e)return delete e.password,e}):t&&(delete t.password,t)}async function Kc(t,e){let n=(await ie().allDocs({keys:t,include_docs:!0})).rows.map(i=>i.doc);return e?.cleanup&&(n=Ia(n)),n}async function l0(){let t=ie(),e=`us${C}`;return(await t.allDocs({startkey:e,endkey:`${e}${Be}`})).rows.map(n=>n.id)}async function d0(){let t=ie(),e=`us${C}`;return(await t.allDocs({startkey:e,endkey:`${e}${Be}`,include_docs:!0})).rows.map(n=>n.doc)}async function Sa(t){return await ie().bulkDocs(t)}async function mi(t,e){let n=await ie().get(t);return e?.cleanup&&(n=Ia(n)),n}async function kt(t,e){if(t==null)throw"Must supply an email address to view";let r=await dr("by_email2",{key:t.toLowerCase(),include_docs:!0});if(Array.isArray(r))throw new Error(`Multiple users found with email address: ${t}`);let n=r;return e?.cleanup&&(n=Ia(n)),n}async function p0(t){try{let e=await kt(t);if(Array.isArray(e)||e!=null)return!0}catch{return!1}return!1}async function Yc(t,e,r){if(typeof t!="string")throw new Error("Must provide a string based app ID");let n=lc(t,{include_docs:!0});n.startkey=e&&e.startkey?e.startkey:n.startkey;let i=await dr("by_app",n);i||(i=[]);let s=Array.isArray(i)?i:[i];return r?.cleanup&&(s=Ia(s)),s}async function Rm(t,e){let r=`roles.${t}`,n=[{"builder.global":!0},{"admin.global":!0}];if(t){let o={[r]:{$exists:!0}};n.push(o)}let i={selector:{$or:n,_id:{$regex:"^us_"}},limit:e?.limit||50};return(await Qp(ur(),i)).rows}function A_(t,e){if(e)return cc(at(t),e._id)}async function S_(t,e,r){if(typeof t!="string")throw new Error("Must provide a string to search by");let n=t.toLowerCase(),i=e&&e.startkey?e.startkey:n,s=await dr("by_email2",{...e,startkey:i,endkey:`${n}${Be}`});s||(s=[]);let o=Array.isArray(s)?s:[s];return r?.cleanup&&(o=Ia(o)),o}var f0=8;async function __({bookmark:t,query:e,appId:r,limit:n}={}){let i=ie(),s=n??f0,a={include_docs:!0,limit:s+1};t&&(a.startkey=t);let u,c="_id",l;return e?.equal?._id?u=[await mi(e.equal._id)]:r?(u=await Yc(r,a),l=d=>A_(r,d)):e?.string?.email?(u=await S_(e?.string?.email,a),c="email"):e?.oneOf?._id?u=await Kc(e?.oneOf?._id,{cleanup:!0}):e?(u=(await i.allDocs(si(null,{...a,limit:void 0}))).rows.map(m=>m.doc),u=Fr.search(u,{query:e,limit:a.limit}).rows):u=(await i.allDocs(si(null,a))).rows.map(m=>m.doc),Sf(u,s,{paginate:!0,property:c,getKey:l})}async function m0(){return(await Of("by_email2",{limit:0,include_docs:!1})).total_rows}async function h0(){let t=0;async function e(r){let n=await __({bookmark:r}),i=await di(n.data);t+=i.filter(s=>s).length,n.hasNextPage&&await e(n.nextPage)}return await e(),t}function g0(t){return delete t.admin,delete t.builder,t}function wm(t,e){return delete t.admin,delete t.builder,delete t.roles,e&&(t.admin=e.admin,t.builder=e.builder,t.roles=e.roles),t}async function y0(t,e){let r=at(e);t.builder??={},t.builder.creator=!0,t.builder.apps??=[],t.builder.apps.push(r),await Kt.save(t,{hashPassword:!1})}async function E0(t,e){let r=at(e);t.builder&&t.builder.apps?.includes(r)&&(t.builder.apps=t.builder.apps.filter(n=>n!==r)),await Kt.save(t,{hashPassword:!1})}var I_=3600;async function T0(t,e){let n=await lf(e).get(t);if(n.budibaseAccess=!0,!h.SELF_HOSTED&&!h.DISABLE_ACCOUNT_PORTAL){let i=await Zr(n.email);i&&(n.account=i,n.accountPortalAccess=!0)}return n}async function A0(t){let e=await Kt.bulkGet(t),r=t.filter((i,s)=>!e[s]),n=e.filter(i=>i);return await Promise.all(n.map(async i=>{if(i.budibaseAccess=!0,!h.SELF_HOSTED&&!h.DISABLE_ACCOUNT_PORTAL){let s=await Zr(i.email);s&&(i.account=s,i.accountPortalAccess=!0)}})),r.length?{users:n,notFoundIds:r}:{users:n}}async function Oa({userId:t,tenantId:e,email:r,populateUser:n}){if(n||(n=T0),!e)try{e=j()}catch{e=await Lt.lookupTenantId(t)}let i=await Bo(),s=await i.get(t);return s||(s=await n(t,e,r),await i.store(t,s,I_)),s&&!s.tenantId&&e&&(s.tenantId=e),s.userGroups&&!ot.users.isGlobalBuilder(s)&&await qe(e,async()=>{let o=await Kt.getGroupBuilderAppIds(s);if(o.length){let a=s.builder?.apps||[];s.builder={apps:[...new Set(a.concat(o))]}}}),s}async function S0(t){let e=await Bo(),r=await e.bulkGet(t),n=t.filter(o=>!r[o]),i=Object.values(r).filter(o=>!!o),s;if(n.length){let o=await A0(n);s=o.notFoundIds;for(let a of o.users)await e.store(a._id,a,I_);i.push(...o.users)}return{users:i,notFoundIds:s}}async function xa(t){await(await Bo()).delete(t)}var vm={};N(vm,{Writethrough:()=>Dm});var O_=1e4,bm=null;async function Jc(){if(!bm){let t=await uf();bm=new ei(t)}return bm}function Ra(t,e){return t.name+e}function Cm(t,e=null){return{doc:t,lastWrite:e||Date.now()}}async function _0(t,e,r=O_){let n=await Jc(),i=e._id,s;i&&(s=await n.get(Ra(t,i)));let o=!s||s.lastWrite<Date.now()-r,a=e;return o&&((await as({type:"try_once",name:"persist_writethrough",resource:i,ttl:15e3},async()=>{let c=async l=>{let d=await t.put(l,{force:!0});a._id=d.id,a._rev=d.rev};try{await c(e)}catch(l){if(l.status!==409)throw l;cs("Ignoring conflict in write-through cache")}})).executed||cs("Ignoring redlock conflict in write-through cache")),s=Cm(a,o?null:s?.lastWrite),a._id&&await n.store(Ra(t,a._id),s),{ok:!0,id:a._id,rev:a._rev}}async function I0(t,e){let r=await Jc(),n=Ra(t,e),i=await r.get(n);if(!i){let s=await t.get(e);i=Cm(s),await r.store(n,i)}return i.doc}async function O0(t,e){let r=await Jc(),n=Ra(t,e),i=await r.get(n);if(!i){let s=await t.tryGet(e);if(!s)return null;i=Cm(s),await r.store(n,i)}return i.doc}async function x0(t,e,r){let n=await Jc();if(!e)throw new Error("No ID/Rev provided.");let i=typeof e=="string"?e:e._id;r=typeof e=="string"?r:e._rev;try{await n.delete(Ra(t,i))}finally{await t.remove(i,r)}}var Dm=class{constructor(e,r=O_){this.db=e,this.writeRateMs=r}async put(e,r=this.writeRateMs){return _0(this.db,e,r)}async get(e){return I0(this.db,e)}async tryGet(e){return O0(this.db,e)}async remove(e,r){return x0(this.db,e,r)}};var Nm={};N(Nm,{createCode:()=>w0,getCode:()=>b0,invalidateCode:()=>D0});var R0=be.fromHours(1).toSeconds();async function w0(t,e){let r=Se();return await(await Go()).store(r,{userId:t,info:e},R0),r}async function b0(t){let r=await(await Go()).get(t);if(!r)throw new Error("Provided information is not valid, cannot reset password - please try again.");return r}async function D0(t){await(await Go()).delete(t)}var Um={};N(Um,{DocWritethrough:()=>Pm,DocWritethroughProcessor:()=>wa,getProcessor:()=>v0,init:()=>x_});var C0=100,zc,wa=class t{static get queue(){return t._queue||(t._queue=new yr("docWritethroughQueue",{jobOptions:{attempts:C0}})),t._queue}init(){return t.queue.process(async e=>{try{await this.persistToDb(e.data)}catch(r){throw r.status===409?new Error(`Conflict persisting message ${e.id}. Attempt ${e.attemptsMade}`):r}}),this}async persistToDb({dbName:e,docId:r,data:n}){if(r.startsWith("scimlog"))return;let i=Ve(e),s;try{s=await i.get(r)}catch{s={_id:r}}s={...s,...n},await i.put(s)}},Pm=class{constructor(e,r){this.db=e,this._docId=r}get docId(){return this._docId}async patch(e){await wa.queue.add({dbName:this.db.name,docId:this.docId,data:e})}};function x_(){return zc=new wa().init(),zc}function v0(){return zc||x_()}function Zc(t){return`config${C}${t}`}async function Bt(t){let e=ie();try{return await e.get(Zc(t))}catch(r){if(r.status===404)return;throw r}}async function N0(t){return t._id||(t._id=Zc(t.type)),ie().put(t)}async function Vc(){let t=await Bt("settings");return t||(t={_id:Zc("settings"),type:"settings",config:{}}),t.config.platformUrl=await ba({tenantAware:!0,config:t.config}),t.config.analyticsEnabled=await Mc({config:t.config}),t}async function Fm(){return(await Vc()).config}async function ba(t={tenantAware:!0}){let e=h.PLATFORM_URL||"http://localhost:10000";if(!h.SELF_HOSTED&&h.MULTI_TENANCY&&t.tenantAware){let r=j();e.includes("localhost:")||(e=e.replace("://",`://${r}.`))}else if(h.SELF_HOSTED){let r=t?.config?t.config:(await Bt("settings"))?.config;r?.platformUrl&&(e=r.platformUrl)}return e}var Mc=async t=>{if(!h.SELF_HOSTED)return!!h.ENABLE_ANALYTICS;let e=await Qr(Ce.ANALYTICS_ENABLED,86400,async()=>{let n=t?.config?t.config:(await Bt("settings"))?.config;if(n?.analyticsEnabled===!1)return!1;if(n?.analyticsEnabled===!0)return!0});if(e!==void 0)return e;let r=h.ENABLE_ANALYTICS;return!(r===0||r===!1)};async function P0(){return await Bt("google")}async function Xc(){return(await P0())?.config}async function km(){if(!h.SELF_HOSTED)return Lm();let t=await Xc();return(!t||!t.activated)&&(t=Lm()),t}function Lm(){if(h.GOOGLE_CLIENT_ID&&h.GOOGLE_CLIENT_SECRET)return{clientID:h.GOOGLE_CLIENT_ID,clientSecret:h.GOOGLE_CLIENT_SECRET,activated:!0}}async function U0(){return Bt("logos_oidc")}async function L0(){return Bt("oidc")}async function M0(){let t=(await L0())?.config;return t?.configs&&t.configs[0]}async function Bm(t){let e=(await Bt("oidc"))?.config;return e&&e.configs.filter(r=>r.uuid===t)[0]}async function R_(){return Bt("smtp")}async function F0(t){let e=await R_();if(e)return e.config;let r=h.SELF_HOSTED||!t;if(h.SMTP_FALLBACK_ENABLED&&r)return{port:h.SMTP_PORT,host:h.SMTP_HOST,secure:!1,from:h.SMTP_FROM_ADDRESS,auth:{user:h.SMTP_USER,pass:h.SMTP_PASSWORD},fallback:!0}}async function k0(){return(await Bt("scim"))?.config}async function B0(){return Bt("ai")}var Ym={};N(Ym,{AccessController:()=>Vm,BUILTIN_ROLE_IDS:()=>qm,Role:()=>nn,RoleHierarchyTraversal:()=>el,RoleIDVersion:()=>Wm,builtinRoleToNumber:()=>Da,checkForRoleResourceArray:()=>C_,externalRole:()=>Q0,findRole:()=>Ca,getAllRoleIds:()=>Y0,getAllRoles:()=>Km,getBuiltinRole:()=>b_,getBuiltinRoles:()=>jm,getDBRoleID:()=>v_,getExternalRoleID:()=>sn,getExternalRoleIDs:()=>N_,getRole:()=>j0,getUserRoleHierarchy:()=>Hm,getUserRoleIdHierarchy:()=>D_,isBuiltin:()=>hi,lowerBuiltinRoleID:()=>W0,prefixRoleIDNoBuiltin:()=>$m,roleIDsAreEqual:()=>St,roleToNumber:()=>q0,saveRoles:()=>H0,validInherits:()=>V0});var Gm=W(require("semver"));var tl=W(require("lodash/fp/cloneDeep"));var w_=require("lodash");var qm={ADMIN:"ADMIN",POWER:"POWER",BASIC:"BASIC",PUBLIC:"PUBLIC"},fe={...qm,BUILDER:"BUILDER"},Wm={UUID:void 0,NAME:"name"};function $0(t,e){return Array.isArray(e)?e.filter(r=>t.includes(r)).length===e.length:t.includes(e)}var nn=class{constructor(e,r,n,i){this.permissions={};this._id=e,this.name=r,this.uiMetadata=i,this.permissionId=n,this.version=Wm.NAME}addInheritance(e){return e&&typeof e=="string"?e=$m(e):e&&Array.isArray(e)&&(e=e.map($m)),this.inherits=e,this}},el=class{constructor(e,r){this.allRoles=e,this.opts=r}walk(e){let r=this.opts,n=this.allRoles,i=[];if(!e||!e._id)return i;if(i.push(e),Array.isArray(e.inherits))for(let s of e.inherits){let o=Ca(s,n,r);o&&(i=i.concat(this.walk(o)))}else{let s=[],o=e;for(;o&&o.inherits&&!$0(s,o.inherits);){if(Array.isArray(o.inherits))return i.concat(this.walk(o));if(s.push(o.inherits),o=Ca(o.inherits,n,r),o&&i.push(o),jt.roles.checkForRoleInheritanceLoops(i))break}}return(0,w_.uniqBy)(i,s=>s._id)}},Qm={ADMIN:new nn(fe.ADMIN,fe.ADMIN,"admin",{displayName:"App admin",description:"Can do everything",color:"var(--spectrum-global-color-static-red-400)"}).addInheritance(fe.POWER),POWER:new nn(fe.POWER,fe.POWER,"power",{displayName:"App power user",description:"An app user with more access",color:"var(--spectrum-global-color-static-orange-400)"}).addInheritance(fe.BASIC),BASIC:new nn(fe.BASIC,fe.BASIC,"write",{displayName:"App user",description:"Any logged in user",color:"var(--spectrum-global-color-static-green-400)"}).addInheritance(fe.PUBLIC),PUBLIC:new nn(fe.PUBLIC,fe.PUBLIC,"public",{displayName:"Public user",description:"Accessible to anyone",color:"var(--spectrum-global-color-static-blue-400)"}),BUILDER:new nn(fe.BUILDER,fe.BUILDER,"admin",{displayName:"Builder user",description:"Users that can edit this app",color:"var(--spectrum-global-color-static-magenta-600)"})};function jm(){return(0,tl.default)(Qm)}function hi(t){return Object.values(qm).includes(t)}function $m(t){return hi(t)?t:lr(t)}function b_(t){let e=Object.values(Qm).find(r=>t.includes(r._id));if(e)return(0,tl.default)(e)}function V0(t,e){if(!e)return!1;let r=n=>t.find(i=>St(i._id,n));if(Array.isArray(e)){let n=e.filter(i=>r(i));return e.length!==0&&n.length===e.length}else return!!r(e)}function Da(t){let e=jm(),r=Object.values(e).length+1;if(St(t,fe.ADMIN)||St(t,fe.BUILDER))return r;let n=e[t],i=0;do{if(!n)break;if(Array.isArray(n.inherits))throw new Error("Built-in roles don't support multi-inheritance");n=e[n.inherits],i++}while(n!==null);return i}async function q0(t){if(hi(t))return Da(t);let e=await Hm(t,{defaultPublic:!0}),r=n=>{if(!n.inherits)return 0;if(Array.isArray(n.inherits)){let i=n.inherits.map(s=>{let o=e.find(a=>St(a._id,s));if(o)return r(o)+1}).filter(s=>s).sort().pop();if(i!=null)return i}else if(hi(n.inherits))return Da(n.inherits)+1;return 0};return Math.max(...e.map(r))}function W0(t,e){return t?e&&Da(t)>Da(e)?e:t:e}function St(t,e){return lr(t)===lr(e)}function Q0(t){let e;return t._id&&(e=sn(t._id)),{...t,_id:e,inherits:N_(t.inherits,t.version)}}function Ca(t,e,r){let n=b_(t);n||(t=lr(t));let i=e.find(s=>s._id&&St(s._id,t));return!i&&!hi(t)&&r?.defaultPublic?(0,tl.default)(Qm.PUBLIC):(n=Object.assign(n||{},i),n?._id&&(n._id=sn(n._id,n.version)),Object.keys(n).length===0?void 0:n)}async function j0(t,e){let r=Xi(),n=[];if(!hi(t)){let i=await r.tryGet(v_(t));i&&n.push(i)}return Ca(t,n,e)}async function H0(t){await Xi().bulkDocs(t.filter(r=>r._id).map(r=>({...r,_id:lr(r._id)})))}async function K0(t,e){let r=await Km();if(St(t,fe.ADMIN))return r;let n=Ca(t,r,e),i=[];return n&&(i=new el(r,e).walk(n)),i}async function D_(t){return(await Hm(t)).map(r=>r._id)}async function Hm(t,e){return K0(t,e)}function C_(t,e){if(t&&!Array.isArray(t[e])){let r=t[e];t[e]=[r],r==="write"&&t[e].push("read")}return t}async function Y0(t){return(await Km(t)).map(r=>r._id)}async function Km(t){if(t)return ut(t,e);{let r;try{r=Xi()}catch{}return e(r)}async function e(r){let n=[];r&&(n=(await r.allDocs(dc(null,{include_docs:!0}))).rows.map(a=>a.doc),n.forEach(a=>a._id=sn(a._id,a.version)));let i=jm(),s=[];!r||await J0(r)?s=[fe.ADMIN,fe.POWER,fe.BASIC,fe.PUBLIC]:s=[fe.ADMIN,fe.BASIC,fe.PUBLIC];for(let o of s){let a=i[o],u=n.filter(c=>St(c._id,o))[0];u==null?n.push(a||i.BASIC):(n=n.filter(c=>c._id!==u._id),u._id=sn(a._id,u.version),n.push({...a,...u,name:a.name,_id:sn(a._id,a.version)}))}for(let o of n)if(o.permissions)for(let a of Object.keys(o.permissions))o.permissions=C_(o.permissions,a);return n}}async function J0(t){let r=(await t.tryGet("app_metadata"))?.creationVersion;return!r||!Gm.default.valid(r)?!0:!Gm.default.gte(r,h.MIN_VERSION_WITHOUT_POWER_ROLE)}var Vm=class{constructor(){this.userHierarchies={}}async hasAccess(e,r){if(e==null||e===""||St(e,fe.BUILDER)||St(r,e)||St(r,fe.BUILDER))return!0;let n=r?this.userHierarchies[r]:null;return!n&&r&&(n=await D_(r),this.userHierarchies[r]=n),n?.find(i=>St(i,e))!==void 0}async checkScreensAccess(e,r){let n=[];for(let i of e){let s=await this.checkScreenAccess(i,r);s&&n.push(s)}return n}async checkScreenAccess(e,r){let n=e&&e.routing?e.routing.roleId:void 0;return await this.hasAccess(n,r)?e:null}};function v_(t){return t?.startsWith("role")?t:lr(t)}function sn(t,e){if(t.startsWith(`role${C}`)&&(hi(t)||e===Wm.NAME)){let r=t.split(C);return r.shift(),r.join(C)}return t}function N_(t,e){return t&&(typeof t=="string"?sn(t,e):t.map(r=>sn(r,e)))}var Jm={};N(Jm,{BUILDER:()=>tF,BUILTIN_PERMISSIONS:()=>rl,CREATOR:()=>rF,GLOBAL_BUILDER:()=>nF,PermissionImpl:()=>me,PermissionLevel:()=>xs,PermissionType:()=>Ba,doesHaveBasePermission:()=>X0,getAllowedLevels:()=>M_,getBuiltinPermissionByID:()=>Z0,getBuiltinPermissions:()=>z0,isPermissionLevelHigherThanRead:()=>eF,levelToNumber:()=>L_});var P_=W(require("lodash/flatten")),U_=W(require("lodash/fp/cloneDeep")),me=class{constructor(e,r){this.type=e,this.level=r}};function L_(t){switch(t){case"execute":return 0;case"read":return 1;case"write":return 2;case"admin":return 3;default:return-1}}function M_(t){switch(t){case"execute":return["execute"];case"read":return["execute","read"];case"write":case"admin":return["execute","read","write"];default:return[]}}var rl={PUBLIC:{_id:"public",name:"Public",permissions:[new me("webhook","execute")]},READ_ONLY:{_id:"read_only",name:"Read only",permissions:[new me("query","read"),new me("table","read"),new me("app","read")]},WRITE:{_id:"write",name:"Read/Write",permissions:[new me("query","write"),new me("table","write"),new me("automation","execute"),new me("legacy_view","read"),new me("app","read")]},POWER:{_id:"power",name:"Power",permissions:[new me("table","write"),new me("user","read"),new me("automation","execute"),new me("webhook","read"),new me("legacy_view","read"),new me("app","read")]},ADMIN:{_id:"admin",name:"Admin",permissions:[new me("table","admin"),new me("user","admin"),new me("automation","admin"),new me("webhook","read"),new me("query","admin"),new me("legacy_view","read"),new me("app","read")]}};function z0(){return(0,U_.default)(rl)}function Z0(t){return Object.values(rl).find(r=>r._id===t)}function X0(t,e,r){let n=[...new Set(r.map(o=>o.permissionId))],i=Object.values(rl),s=(0,P_.default)(i.filter(o=>n.indexOf(o._id)!==-1).map(o=>o.permissions));for(let o of s)if(o.type===t&&M_(o.level).indexOf(e)!==-1)return!0;return!1}function eF(t){return L_(t)>1}var tF="builder",rF="creator",nF="globalBuilder";var Xm={};N(Xm,{FlagSet:()=>il,all:()=>aF,flags:()=>zm,init:()=>iF,isEnabled:()=>oF,parseEnvFlags:()=>ol,shutdown:()=>sF,testutils:()=>Zm});var sl=W(require("crypto"));var F_=require("posthog-node"),k_=W(require("dd-trace"));var B_=require("lodash");var nl;function iF(t){h.POSTHOG_TOKEN&&h.POSTHOG_API_HOST&&!h.SELF_HOSTED&&h.POSTHOG_FEATURE_FLAGS_ENABLED?(console.log("initializing posthog client..."),nl=new F_.PostHog(h.POSTHOG_TOKEN,{host:h.POSTHOG_API_HOST,personalApiKey:h.POSTHOG_PERSONAL_TOKEN,featureFlagsPollingInterval:be.fromMinutes(3).toMs(),...t})):console.log("posthog disabled")}function sF(){nl?.shutdown()}function ol(t){let e=t.split(",").map(n=>n.split(":")),r=[];for(let[n,...i]of e)for(let s of i){let o=!0;s.startsWith("!")&&(s=s.slice(1),o=!1),r.push({tenantId:n,key:s,value:o})}return r}var il=class{constructor(e){this.flagSchema=e;this.setId=sl.randomUUID()}defaults(){return(0,B_.cloneDeep)(this.flagSchema)}isFlagName(e){return this.flagSchema[e]!==void 0}async isEnabled(e){return(await this.fetch())[e]}async fetch(){return await k_.default.trace("features.fetch",async e=>{let r=zp(this.setId);if(r)return e?.addTags({fromCache:!0}),r;let n={},i=this.defaults(),s=j(),o=new Set;for(let{tenantId:d,key:m,value:p}of ol(h.TENANT_FEATURE_FLAGS||""))if(!(!d||d!=="*"&&d!==s)&&(n.readFromEnvironmentVars=!0,p===!1&&o.add(m),!!this.isFlagName(m))){if(typeof i[m]!="boolean")throw new Error(`Feature: ${m} is not a boolean`);i[m]=p,n[`flags.${m}.source`]="environment"}let a=ar(),u=a?._id;if(!u){let d=Yp();d&&(u=sl.createHash("sha512").update(d).digest("hex"))}let c=a?.tenantId;if(c||(c=s),n["identity.type"]=a?.type,n["identity._id"]=a?._id,n.tenantId=c,n.userId=u,nl&&u){n.readFromPostHog=!0;let d={tenantId:c},m=await nl.getAllFlags(u,{personProperties:d,onlyEvaluateLocally:!0});for(let[p,f]of Object.entries(m))if(this.isFlagName(p)){if(typeof f!="boolean"){console.warn(`Invalid value for posthog flag "${p}": ${f}`);continue}if(!(i[p]===!0||o.has(p)))try{i[p]=f,n[`flags.${p}.source`]="posthog"}catch(g){console.warn(`Error parsing posthog flag "${p}": ${f}`,g)}}}let l=Xp();for(let[d,m]of Object.entries(l))this.isFlagName(d)&&typeof m=="boolean"&&(i[d]=m,n[`flags.${d}.source`]="override");Zp(this.setId,i);for(let[d,m]of Object.entries(i))n[`flags.${d}.value`]=m;return e?.addTags(n),i})}},zm=new il(Ph);async function oF(t){return await zm.isEnabled(t)}async function aF(){return await zm.fetch()}var Zm={};N(Zm,{setFeatureFlags:()=>G_,withFeatureFlags:()=>lF});function uF(){let t={};for(let{tenantId:e,key:r,value:n}of ol(process.env.TENANT_FEATURE_FLAGS||"")){let i=t[e]||{};i[r]!==!1&&(i[r]=n,t[e]=i)}return t}function cF(t){let e=[];for(let[r,n]of Object.entries(t))for(let[i,s]of Object.entries(n))s===!1?e.push(`${r}:!${i}`):e.push(`${r}:${i}`);return e.join(",")}function G_(t,e){let r=uF();for(let[i,s]of Object.entries(e)){let o=r[t]||{};o[i]=s,r[t]=o}let n=cF(r);return xo({TENANT_FEATURE_FLAGS:n})}function lF(t,e,r){let n=G_(t,e),i=r();return i instanceof Promise?i.finally(n):(n(),i)}var dh={};N(dh,{adminOnly:()=>yl,auditLog:()=>fl,authError:()=>Me,buildAuthMiddleware:()=>ZF,buildCsrfMiddleware:()=>ek,buildTenancyMiddleware:()=>XF,builderOnly:()=>Tl,builderOrAdmin:()=>El,google:()=>Ar,internalApi:()=>hl,joiValidator:()=>Na,oidc:()=>Sr,passport:()=>tk,platformLogout:()=>ok,refreshOAuthToken:()=>ik,ssoCallbackUrl:()=>on,updateUserOAuth:()=>sk});var lh={};N(lh,{adminOnly:()=>yl,auditLog:()=>fl,authError:()=>Me,authenticated:()=>pl,builderOnly:()=>Tl,builderOrAdmin:()=>El,correlation:()=>eI,csp:()=>oI,csrf:()=>gl,datasource:()=>JF,errorHandling:()=>rI,featureFlagCookie:()=>aI,google:()=>Ar,internalApi:()=>hl,ip:()=>cI,joiValidator:()=>Na,local:()=>Ss,oidc:()=>Sr,pino:()=>Z_,querystringToBody:()=>nI,ssoCallbackUrl:()=>on,tenancy:()=>ml});var Ss={};N(Ss,{authenticate:()=>fF,options:()=>pF});function Me(t,e,r){return t(r,null,{message:e})}async function on(t,e){if(e&&e.callbackURL)return e.callbackURL;let r=await Fm(),n="/api/global/auth";return Vr()&&(n+=`/${j()}`),n+=`/${t}/callback`,`${r.platformUrl}${n}`}var eh="Invalid credentials",dF="This account has expired. Please reset your password",pF={passReqToCallback:!0};async function fF(t,e,r,n){if(!e)return Me(n,"Email Required");if(!r)return Me(n,"Password Required");let i=await kt(e);return i==null?(console.info(`user=${e} could not be found`),Me(n,eh)):i.status==="inactive"?(console.info(`user=${e} is inactive`,i),Me(n,eh)):i.password?await mf(r,i.password)?(delete i.password,n(null,i)):Me(n,eh):(console.info(`user=${e} has no password set`,i),Me(n,dF))}var Ar={};N(Ar,{buildVerifyFn:()=>q_,getCallbackUrl:()=>gF,strategyFactory:()=>th});var va=t=>Promise.resolve(t);async function al(t,e=!0,r,n){if(!n)throw new Error("Save user function must be provided");if(!t.userId)return Me(r,"sso user id required");if(!t.email)return Me(r,"sso user email required");let i=rs(t.userId),s;try{s=await mi(i)}catch(a){if(!a.status||a.status!==404)return Me(r,"Unexpected error when retrieving existing user",a)}if(s||(s=await kt(t.email)),!s&&e)return Me(r,"Email does not yet exist. You must set up your local budibase account first.");s||(s={_id:i,email:t.email,roles:{},tenantId:j()});let o=await mF(s,t);o.forceResetPassword=!1;try{delete o.password,o=await n(o,{hashPassword:!1,requirePassword:!1})}catch(a){return Me(r,"Error saving user",a)}return r(null,o)}async function mF(t,e){let r,n,i;if(e.profile){let s=e.profile;if(s.name){let o=s.name;o.givenName&&(r=o.givenName),o.familyName&&(n=o.familyName)}}return e.oauth2&&(i={...e.oauth2}),{...t,provider:e.provider,providerType:e.providerType,firstName:r,lastName:n,oauth2:i}}var hF=require("passport-google-oauth").OAuth2Strategy;function q_(t){return(e,r,n,i)=>{let s={provider:"google",providerType:"google",userId:n.id,profile:n,email:n._json.email,oauth2:{accessToken:e,refreshToken:r}};return al(s,!0,i,t)}}async function th(t,e,r){try{let{clientID:n,clientSecret:i}=t;if(!n||!i)throw new Error("Configuration invalid. Must contain google clientID and clientSecret");let s=q_(r);return new hF({clientID:t.clientID,clientSecret:t.clientSecret,callbackURL:e},s)}catch(n){throw new Error(`Error constructing google authentication strategy: ${n}`)}}async function gF(t){return on("google",t)}var Sr={};N(Sr,{buildVerifyFn:()=>Q_,fetchStrategyConfig:()=>AF,getCallbackUrl:()=>SF,strategyFactory:()=>TF});var W_=W(require("node-fetch"));var yF=require("@techpass/passport-openidconnect").Strategy;function Q_(t){return async(e,r,n,i,s,o,a,u,c)=>{let l={provider:e,providerType:"oidc",userId:n.id,profile:n,email:EF(n,i),oauth2:{accessToken:s,refreshToken:o}};return al(l,!1,c,t)}}function EF(t,e){if(t._json.email)return t._json.email;if(e.email)return e.email;let r=e.preferred_username;if(r&&Cf(r))return r;throw new Error(`Could not determine user email from profile ${JSON.stringify(t)} and claims ${JSON.stringify(e)}`)}async function TF(t,e){try{let r=Q_(e),n=new yF(t,r);return n.name="oidc",n}catch(r){throw new Error(`Error constructing OIDC authentication strategy - ${r}`)}}async function AF(t,e){try{let{clientID:r,clientSecret:n,configUrl:i}=t;if(!r||!n||!e||!i)throw new Error("Configuration invalid. Must contain clientID, clientSecret, callbackUrl and configUrl");let s=await(0,W_.default)(i);if(!s.ok)throw new Error(`Unexpected response when fetching openid-configuration: ${s.statusText}`);let o=await s.json();return{issuer:o.issuer,authorizationURL:o.authorization_endpoint,tokenURL:o.token_endpoint,userInfoURL:o.userinfo_endpoint,clientID:r,clientSecret:n,callbackURL:e}}catch(r){throw new Error(`Error constructing OIDC authentication configuration - ${r}`)}}async function SF(){return on("oidc")}var rh={};N(rh,{postAuth:()=>OF,preAuth:()=>IF});var _F=require("passport-google-oauth").OAuth2Strategy;async function j_(){let t=await km();if(!t)throw new Error("No google configuration found");return t}async function IF(t,e,r){let n=await j_(),s=`${await ba({tenantAware:!1})}/api/global/auth/datasource/google/callback`,o=await th(n,s,va);return e.query.appId||e.throw(400,"appId query param not present."),t.authenticate(o,{scope:["profile","email","https://www.googleapis.com/auth/spreadsheets"],accessType:"offline",prompt:"consent"})(e,r)}async function OF(t,e,r){let n=await j_(),s=`${await ba({tenantAware:!1})}/api/global/auth/datasource/google/callback`,o=fr(e,"budibase:datasourceauth");if(!o)throw new Error("Unable to fetch datasource auth cookie");return t.authenticate(new _F({clientID:n.clientID,clientSecret:n.clientSecret,callbackURL:s},(a,u,c,l)=>{Hr(e,"budibase:datasourceauth"),l(null,{accessToken:a,refreshToken:u})}),{successRedirect:"/",failureRedirect:"/error"},async(a,u)=>{let c=`/builder/app/${o.appId}/data`,l=Se();await cr(`datasource:creation:${o.appId}:google:${l}`,{tokens:u}),e.redirect(`${c}/new?continue_google_setup=${l}`)})(e,r)}var xF=/\/:(.*?)(\/.*)?$/g,gi=t=>t?t.map(e=>{let r=e.route,n=e.method,i=r.match(xF);if(i)for(let s of i){let a="/.*"+(s.endsWith("/")?"/":"");r=r.replace(s,a)}return{regex:new RegExp(r),method:n,route:r}}):[],yi=(t,e)=>e.find(({regex:r,method:n})=>{let i=r.test(t.request.url),s=n==="ALL"?!0:t.request.method.toLowerCase()===n.toLowerCase();return i&&s});var uh={};N(uh,{SecretOption:()=>Y_,decrypt:()=>ah,decryptFile:()=>vF,encrypt:()=>bF,encryptFile:()=>DF,getSecret:()=>oh});var _r=W(require("crypto")),an=W(require("fs")),ih=W(require("zlib"));var nh=require("path"),ul="aes-256-ctr",K_="-",RF=1e4,wF=32,cl=16,sh=16,Y_=(r=>(r.API="api",r.ENCRYPTION="encryption",r))(Y_||{});function oh(t){let e,r;switch(t){case"encryption":e=h.ENCRYPTION_KEY,r="ENCRYPTION_KEY";break;case"api":default:e=h.API_ENCRYPTION_KEY,r="API_ENCRYPTION_KEY";break}if(!e)throw new Error(`Secret "${r}" has not been set in environment.`);return e}function ll(t,e){return _r.default.pbkdf2Sync(t,e,RF,wF,"sha512")}function bF(t,e="api"){let r=_r.default.randomBytes(cl),n=ll(oh(e),r),i=_r.default.createCipheriv(ul,n,r),s=i.update(t),o=i.final(),a=Buffer.concat([s,o]).toString("hex");return`${r.toString("hex")}${K_}${a}`}function ah(t,e="api"){let[r,n]=t.split(K_),i=Buffer.from(r,"hex"),s=ll(oh(e),i),o=_r.default.createDecipheriv(ul,s,i),a=o.update(Buffer.from(n,"hex")),u=o.final();return Buffer.concat([a,u]).toString()}async function DF({dir:t,filename:e},r){let n=`${e}.enc`,i=(0,nh.join)(t,e);if(an.default.lstatSync(i).isDirectory())throw new Error("Unable to encrypt directory");let s=an.default.createReadStream(i),o=an.default.createWriteStream((0,nh.join)(t,n)),a=_r.default.randomBytes(cl),u=_r.default.randomBytes(sh),c=ll(r,a),l=_r.default.createCipheriv(ul,c,u);return o.write(a),o.write(u),s.pipe(ih.default.createGzip()).pipe(l).pipe(o),new Promise(d=>{o.on("finish",()=>{d({filename:n,dir:t})})})}async function CF(t){let e=an.default.createReadStream(t),r=await H_(e,cl),n=await H_(e,sh);return e.close(),{salt:r,iv:n}}async function vF(t,e,r){if(an.default.lstatSync(t).isDirectory())throw new Error("Unable to encrypt directory");let{salt:n,iv:i}=await CF(t),s=an.default.createReadStream(t,{start:cl+sh}),o=an.default.createWriteStream(e),a=ll(r,n),u=_r.default.createDecipheriv(ul,a,i),c=ih.default.createGunzip();return s.pipe(u).pipe(c).pipe(o),new Promise((l,d)=>{o.on("finish",()=>{o.close(),l()}),s.on("error",m=>{o.close(),d(m)}),u.on("error",m=>{o.close(),d(m)}),c.on("error",m=>{o.close(),d(m)}),o.on("error",m=>{o.close(),d(m)})})}function H_(t,e){return new Promise((r,n)=>{let i=0,s=[];t.on("readable",()=>{let o;for(;(o=t.read(e-i))!==null;)s.push(o),i+=o.length;r(Buffer.concat(s))}),t.on("end",()=>{n(new Error("Insufficient data in the stream."))}),t.on("error",o=>{n(o)})})}var z_=W(require("dd-trace")),NF=h.SESSION_UPDATE_PERIOD?parseInt(h.SESSION_UPDATE_PERIOD):60*1e3;function PF(){return new Date(Date.now()-NF).toISOString()}function J_(t,e={}){t.publicEndpoint=e.publicEndpoint||!1,t.isAuthenticated=e.authenticated||!1,t.loginMethod=e.loginMethod,t.user=e.user,t.internal=e.internal||!1,t.version=e.version}async function UF(t,e){if(zo(t))return{valid:!0,user:void 0};let n=ah(t).split(C)[0];return qe(n,async()=>{let i;try{let s=ie();i=await dr("by_api_key",{key:t},s)}catch{i=void 0}if(i)return{valid:!0,user:await Oa({userId:i,tenantId:n,populateUser:e})};throw new fs})}function dl(t,e){let r=t.request.headers[e];if(Array.isArray(r))throw new Error("Unexpected header format");return r}function pl(t=[],e={publicAllowed:!1}){let r=t?gi(t):[];return async(n,i)=>{let s=!1,o=dl(n,"x-budibase-api-version");yi(n,r)&&(s=!0);try{let u=dl(n,"x-budibase-token"),c=fr(n,"budibase:auth")||fc(u),l=dl(n,"x-budibase-api-key");!l&&n.request.headers.authorization&&(l=n.request.headers.authorization.split(" ")[1]);let d=dl(n,"x-budibase-tenant-id"),m=!1,p,f=!1,g;if(c&&!l){let y=c.sessionId,_=c.userId,S;try{S=await Sm(_,y),e&&e.populateUser?p=await Oa({userId:_,tenantId:S.tenantId,email:S.email,populateUser:e.populateUser(n)}):p=await Oa({userId:_,tenantId:S.tenantId,email:S.email}),p.csrfToken=S.csrfToken,g="cookie",S?.lastAccessedAt<PF()&&await Am(S),m=!0}catch(M){m=!1,console.error(`Auth Error: ${M.message}`),Hr(n,"budibase:auth")}}if(!m&&l){let y=e.populateUser?e.populateUser(n):null,{valid:_,user:S}=await UF(l,y);_&&(m=!0,g="api_key",p=S,f=!S)}!p&&d?p={tenantId:d}:p&&"password"in p&&delete p.password,m||(m=!1);let E=y=>y&&y.email;return E(p)&&z_.default.setUser({id:p._id,tenantId:p.tenantId,budibaseAccess:p.budibaseAccess,status:p.status}),J_(n,{authenticated:m,user:p,internal:f,version:o,publicEndpoint:s,loginMethod:g}),E(p)?Cp(p,n,i):i()}catch(u){if(console.error(`Auth Error: ${u.message}`),u?.name==="JsonWebTokenError"?Hr(n,"budibase:auth"):u?.code==="invalid_api_key"&&n.throw(403,u.message),e&&e.publicAllowed||s)return J_(n,{authenticated:!1,version:o,publicEndpoint:s}),i();n.throw(u.status||403,u)}}}var LF=async(t,e)=>e(),fl=LF;function ml(t,e,r={noTenancyRequired:!1}){let n=gi(t),i=gi(e);return async function(s,o){let u={allowNoTenant:r.noTenancyRequired||!!yi(s,i)};!!yi(s,n)||(u.excludeStrategies=["query"]);let l=qo(s,u);return s.set("x-budibase-tenant-id",l),qe(l,o)}}var hl=async(t,e)=>{let r=t.request.headers["x-budibase-api-key"];return r||t.throw(403,"Unauthorized"),Array.isArray(r)&&t.throw(403,"Unauthorized"),zo(r)||t.throw(403,"Unauthorized"),e()};var MF=["GET","HEAD","OPTIONS"],FF=["application/x-www-form-urlencoded","multipart/form-data","text/plain"];function gl(t={noCsrfPatterns:[]}){let e=gi(t.noCsrfPatterns);return async(r,n)=>{if(yi(r,e)||MF.indexOf(r.method)!==-1)return n();let s=r.get("content-type")?r.get("content-type").toLowerCase():"";if(!FF.filter(u=>s.includes(u)).length||r.internal)return n();let o=r.user?.csrfToken;if(!o)return n();let a=r.get("x-csrf-token");return(!a||a!==o)&&r.throw(403,"Invalid CSRF token"),n()}}var yl=async(t,e)=>(!t.internal&&!Xr(t.user)&&t.throw(403,"Admin user only endpoint."),e());var El=async(t,e)=>{let r=Ue(),n=h.isWorker()||!r?Tt:h.isApps()?ms:void 0;if(!n)throw new Error("Service name unknown - middleware inactive.");return!t.internal&&!n(t.user,r)&&!Xr(t.user)&&t.throw(403,"Admin/Builder user only endpoint."),e()};var Tl=async(t,e)=>{let r=Ue(),n=h.isWorker()||!r?Tt:h.isApps()?ms:void 0;if(!n)throw new Error("Service name unknown - middleware inactive.");return!t.internal&&!n(t.user,r)&&t.throw(403,"Builder user only endpoint."),e()};var kF=require("koa-pino-logger"),BF=require("correlation-id");function GF(){return{logger:_c,genReqId:BF.getId,autoLogging:{ignore:t=>!!t.url?.includes("/health")},serializers:{req:t=>({method:t.method,url:t.url,correlationId:t.id}),res:t=>({status:t.statusCode})}}}function $F(){return h.HTTP_LOGGING?kF(GF()):(t,e)=>e()}var VF=$F(),Z_=VF;var X_=require("uuid"),qF=require("correlation-id"),WF=(t,e)=>{let r=t.headers["x-budibase-correlation-id"];return r||(r=(0,X_.v4)()),qF.withId(r,()=>e())},eI=WF;function tI(t){if(t.includes("-----BEGIN PRIVATE KEY-----"))return!0;for(let e of NT){let r=h[e];if(!(typeof r!="string"||r==="")&&t.includes(r))return!0}return!1}async function QF(t,e){try{await e()}catch(r){let n=r.status||r.statusCode||500;t.status=n,n>=400&&n<500?console.warn(r):console.error("Got 400 response code",r);let i={message:r.message,status:n,validationErrors:r.validation,error:Dc(r)};if(tI(JSON.stringify(i))&&(i={message:"Unexpected error",status:n,error:"Unexpected error"}),h.isTest()&&t.headers["x-budibase-include-stacktrace"]){let s=r;for(;s.cause;)s=s.cause;i.stack=s.stack}t.body=i}}var rI=QF;function nI(t,e){let r=t.request.query?.query;if(t.request.method.toLowerCase()!=="get"&&t.throw(500,"Query to download middleware can only be used for get requests."),!r)return e();let n=decodeURIComponent(r),i;try{i=JSON.parse(n)}catch{return e()}return t.request.body=i,e()}var sI=W(require("crypto"));var iI={"default-src":["'self'"],"script-src":["'self'","'unsafe-eval'","https://*.budibase.net","https://cdn.budi.live","https://js.intercomcdn.com","https://widget.intercom.io","https://d2l5prqdbvm3op.cloudfront.net","https://us-assets.i.posthog.com"],"style-src":["'self'","'unsafe-inline'","https://cdn.jsdelivr.net","https://fonts.googleapis.com","https://rsms.me","https://maxcdn.bootstrapcdn.com"],"object-src":["'none'"],"base-uri":["'self'"],"connect-src":["'self'","https://*.budibase.app","https://*.budibaseqa.app","https://*.budibase.net","https://api-iam.intercom.io","https://api-ping.intercom.io","https://app.posthog.com","https://us.i.posthog.com","wss://nexus-websocket-a.intercom.io","wss://nexus-websocket-b.intercom.io","https://nexus-websocket-a.intercom.io","https://nexus-websocket-b.intercom.io","https://uploads.intercomcdn.com","https://uploads.intercomusercontent.com","https://*.amazonaws.com","https://*.s3.amazonaws.com","https://*.s3.us-east-2.amazonaws.com","https://*.s3.us-east-1.amazonaws.com","https://*.s3.us-west-1.amazonaws.com","https://*.s3.us-west-2.amazonaws.com","https://*.s3.af-south-1.amazonaws.com","https://*.s3.ap-east-1.amazonaws.com","https://*.s3.ap-south-1.amazonaws.com","https://*.s3.ap-northeast-2.amazonaws.com","https://*.s3.ap-southeast-1.amazonaws.com","https://*.s3.ap-southeast-2.amazonaws.com","https://*.s3.ap-northeast-1.amazonaws.com","https://*.s3.ca-central-1.amazonaws.com","https://*.s3.cn-north-1.amazonaws.com","https://*.s3.cn-northwest-1.amazonaws.com","https://*.s3.eu-central-1.amazonaws.com","https://*.s3.eu-west-1.amazonaws.com","https://*.s3.eu-west-2.amazonaws.com","https://*.s3.eu-south-1.amazonaws.com","https://*.s3.eu-west-3.amazonaws.com","https://*.s3.eu-north-1.amazonaws.com","https://*.s3.sa-east-1.amazonaws.com","https://*.s3.me-south-1.amazonaws.com","https://*.s3.us-gov-east-1.amazonaws.com","https://*.s3.us-gov-west-1.amazonaws.com","https://api.github.com"],"font-src":["'self'","data:","https://cdn.jsdelivr.net","https://fonts.gstatic.com","https://rsms.me","https://maxcdn.bootstrapcdn.com","https://js.intercomcdn.com","https://fonts.intercomcdn.com"],"frame-src":["'self'","https:"],"img-src":["http:","https:","data:","blob:"],"manifest-src":["'self'"],"media-src":["'self'","https://js.intercomcdn.com","https://cdn.budi.live"],"worker-src":["blob:","'self'"]},jF=/^[A-Za-z0-9-*:/.]+$/,HF=async(t,e)=>{let r=sI.default.randomBytes(16).toString("base64");t.state.nonce=r;let n={...iI};if(n["script-src"]=[...iI["script-src"],`'nonce-${r}'`],t.user?.license?.features.includes("customAppScripts")&&t.appId)try{let o=await Qo.getAppMetadata(t.appId);if("name"in o)for(let a of o.scripts||[]){let u=(a.cspWhitelist||"").split(`
|
|
38
38
|
`).filter(c=>jF.test(c));n["default-src"]=[...n["default-src"],...u]}}catch(o){console.error(`Error occurred in Content-Security-Policy middleware: ${o}`)}let s=Object.entries(n).map(([o,a])=>`${o} ${a.join(" ")}`).join("; ");t.set("Content-Security-Policy",s),await e()},oI=HF;var aI=async(t,e)=>{let n=fr(t,"budibase:featureflags")?.flags||{};await ef(n,async()=>{await e()})};var Na={};N(Na,{body:()=>KF,params:()=>YF});var ch=W(require("joi"));function uI(t,e,r){let n=r?.errorPrefix??`Invalid ${e}`;return(i,s)=>{if(!t)return s();let o=null,a=i.request?.[e];i[e]!=null?o=i[e]:a!=null&&(o=a),t.append&&(t=t.append({createdAt:ch.default.any().optional(),updatedAt:ch.default.any().optional()}));let{error:u}=t.validate(o,{allowUnknown:r?.allowUnknown});if(u){let c=u.message;n&&(c=`Invalid ${e} - ${c}`),i.throw(400,c)}return s()}}function KF(t,e){return uI(t,"body",e)}function YF(t,e){return uI(t,"params",e)}var cI=async(t,e)=>t.ip?await Jp(t.ip,()=>e()):e();var JF={google:rh};var lI=require("koa-passport"),zF=require("passport-local").Strategy,Al=require("passport-oauth2-refresh"),ZF=pl,XF=ml,ek=gl,tk=lI;lI.use(new zF(Ss.options,Ss.authenticate));async function rk(t,e){let r=await Sr.getCallbackUrl(),n,i;try{if(n=await Sr.fetchStrategyConfig(t,r),!n)throw new Error("OIDC Config contents invalid");i=await Sr.strategyFactory(n,va)}catch{throw new Error("Could not refresh OAuth Token")}return Al.use(i,{setRefreshOAuth2(){return i._getOAuth2Client(n)}}),new Promise(s=>{Al.requestNewAccessToken("oidc",e,(o,a,u,c)=>{s({err:o,accessToken:a,refreshToken:u,params:c})})})}async function nk(t,e){let r=await Ar.getCallbackUrl(t),n;try{n=await Ar.strategyFactory(t,r,va)}catch(i){throw new Error(`Error constructing OIDC refresh strategy: message=${i.message}`)}return Al.use(n),new Promise(i=>{Al.requestNewAccessToken("google",e,(s,o,a,u)=>{i({err:s,accessToken:o,refreshToken:a,params:u})})})}async function ik(t,e,r){switch(e){case"oidc":{if(!r)return{err:{data:"OIDC config id not provided"}};let n=await Bm(r);return n?rk(n,t):{err:{data:"OIDC configuration not found"}}}case"google":{let n=await Xc();return n?nk(n,t):{err:{data:"Google configuration not found"}}}}}async function sk(t,e){let r={accessToken:e.accessToken,refreshToken:e.refreshToken};try{let n=ie(),i=await n.get(t);typeof r.refreshToken!="string"&&delete r.refreshToken,i.oauth2={...i.oauth2,...r},await n.put(i),await xa(t)}catch(n){console.error("Could not update OAuth details for current user",n)}}async function ok(t){let e=t.ctx,r=t.userId,n=t.keepActiveSession;if(!e)throw new Error("Koa context must be supplied to logout.");let i=fr(e,"budibase:auth"),s=await jc(r);i&&n?s=s.filter(a=>a.sessionId!==i.sessionId):Hr(e,"budibase:auth");let o=s.map(({sessionId:a})=>a);await fi(r,{sessionIds:o,reason:"logout"}),await Qc.logout(e.user?.email),await xa(r)}var fh={};N(fh,{validate:()=>dk});var D=W(require("joi")),ak=["Relational","Non-relational","Spreadsheet","Object store","Graph","API"];function ph(t,e){let{error:r}=t.validate(e);if(r)throw r}function uk(t){let e=D.default.object({type:D.default.string().allow("component").required(),metadata:D.default.object().unknown(!0).required(),hash:D.default.string().optional(),version:D.default.string().optional(),schema:D.default.object({name:D.default.string().required(),settings:D.default.array().items(D.default.object().unknown(!0)).required()}).unknown(!0)});ph(e,t)}function ck(t){let e=D.default.object({type:D.default.string().allow(...Object.values(xl)).required(),required:D.default.boolean().required(),default:D.default.any(),display:D.default.string()}),r=D.default.object({type:D.default.string().allow(...Object.values(Ol)),readable:D.default.boolean(),fields:D.default.object().pattern(D.default.string(),e)}).required(),n=D.default.object({type:D.default.string().allow("datasource").required(),metadata:D.default.object().unknown(!0).required(),hash:D.default.string().optional(),version:D.default.string().optional(),schema:D.default.object({docs:D.default.string(),plus:D.default.boolean().optional(),isSQL:D.default.boolean().optional(),auth:D.default.object({type:D.default.string().required()}).optional(),features:D.default.object(Object.fromEntries(Object.values(Rl).map(i=>[i,D.default.boolean().optional()]))).optional(),relationships:D.default.boolean().optional(),description:D.default.string().required(),friendlyName:D.default.string().required(),type:D.default.string().allow(...ak),datasource:D.default.object().pattern(D.default.string(),e).required(),query:D.default.object().pattern(D.default.string(),r).unknown(!0).required(),extra:D.default.object().pattern(D.default.string(),D.default.object({type:D.default.string().required(),displayName:D.default.string().required(),required:D.default.boolean(),data:D.default.object()}))})});ph(n,t)}function lk(t){let e=D.default.object().pattern(D.default.string(),{type:D.default.string().allow(...Object.values(oe)).required(),customType:D.default.string().allow(...Object.values(ge)),title:D.default.string(),description:D.default.string(),enum:D.default.array().items(D.default.string()),pretty:D.default.array().items(D.default.string())}),r=D.default.object({properties:e,required:D.default.array().items(D.default.string())}).concat(e).required(),n=D.default.object({type:D.default.string().allow("automation").required(),metadata:D.default.object().unknown(!0).required(),hash:D.default.string().optional(),version:D.default.string().optional(),schema:D.default.object({name:D.default.string().required(),tagline:D.default.string().required(),icon:D.default.string().required(),description:D.default.string().required(),type:D.default.string().allow("ACTION","LOGIC").required(),stepId:D.default.string().disallow(...Uh).required(),inputs:D.default.object().optional(),schema:D.default.object({inputs:r,outputs:r}).required()})});ph(n,t)}function dk(t){switch(t?.type){case"component":uk(t);break;case"datasource":ck(t);break;case"automation":lk(t);break;default:throw new Error(`Unknown plugin type - check schema.json: ${t.type}`)}}var mh={};N(mh,{Client:()=>We,clients:()=>Wr,locks:()=>ui,utils:()=>nc});var hh={};N(hh,{isBlacklisted:()=>fk,refreshBlacklist:()=>mI});var dI=W(require("dns")),_l=W(require("net"));var pI=require("util"),Sl,pk=(0,pI.promisify)(dI.default.lookup);async function fI(t){return _l.default.isIP(t)||(t.startsWith("http")||(t=`https://${t}`),t=new URL(t).hostname),(await pk(t,{all:!0})).map(r=>r.address)}async function mI(){let e=h.BLACKLIST_IPS?.split(",")||[],r=[];for(let n of e){let i=n.trim();if(_l.default.isIP(i))r.push(i);else{let s=await fI(i);r=r.concat(s)}}Sl=r}async function fk(t){if(Sl||await mI(),Sl?.length===0)return!1;let e;return _l.default.isIP(t)?e=[t]:e=await fI(t),!!Sl?.find(r=>e.includes(r))}var yh={};N(yh,{init:()=>hk});var mk={"user:created":t=>t.userId,"user:updated":t=>t.userId,"user:deleted":t=>t.userId,"user:admin:assigned":t=>t.userId,"user:admin:removed":t=>t.userId,"user:builder:assigned":t=>t.userId,"user:builder:removed":t=>t.userId,"user_group:created":t=>t.groupId,"user_group:updated":t=>t.groupId,"user_group:deleted":t=>t.groupId,"user_group:user_added":t=>t.groupId,"user_group:users_deleted":t=>t.groupId,"user_group:permissions_edited":t=>t.groupId};function hI(t,e){let r=mk[t];if(!r)throw new Error("Event does not have a method of document ID extraction");return r(e)}var Pa=class{constructor(e){this.processors=[];this.processors=e}async processEvent(e,r,n){let i=r.realTenantId,s=hI(e,n);if(!(!i||!s))for(let{events:o,processor:a}of this.processors)o.includes(e)&&await qe(i,async()=>{await a({id:s,tenantId:i})})}shutdown(){return jS()}};var gI,gh;function hk(t){Tr||Wc(),gh||(gh=new Pa(t)),gI||(gI=Tr.process(async e=>{let{event:r,identity:n,properties:i}=e.data;await gh.processEvent(r,n,i)}))}var Rh={};N(Rh,{COUNT_FIELD_NAME:()=>Oh,Sql:()=>xI,SqlTable:()=>Il,designDoc:()=>xh,utils:()=>qp});var AI=require("knex");var gk=require("knex");function Eh(t){return["link","formula","ai"].indexOf(t)!==-1}function yI(t,e,r,n,i){let s=e&&e.primary?e.primary:[],o=Object.values(e.schema),a=o.filter(m=>m.meta),u=a.length===o.length,c=[];n||(u?t.primary(a.map(m=>m.name)):s.length===1?(t.increments(s[0]).primary(),c.push(s[0])):t.primary(s));let l=Object.values(e.schema).map(m=>m.foreignKey);for(let[m,p]of Object.entries(e.schema)){let f=n?.schema[m];if(f&&f.type||c.includes(m)||i?.updated===m)continue;let g=p.type;switch(g){case"string":case"options":case"longform":case"barcodeqr":case"bb_reference_single":s.includes(m)?t.string(m,255):t.text(m);break;case"number":if(p.meta&&p.meta.toKey&&p.meta.toTable){let{toKey:E,toTable:y}=p.meta;t.integer(m).unsigned(),t.foreign(m).references(`${y}.${E}`)}else l.indexOf(m)===-1&&t.float(m);break;case"bigint":t.bigint(m);break;case"boolean":t.boolean(m);break;case"datetime":p.timeOnly?t.time(m):t.datetime(m,{useTz:!p.ignoreTimezones});break;case"array":case"bb_reference":jt.schema.isDeprecatedSingleUserColumn(p)?t.text(m):t.json(m);break;case"link":if(p.relationshipType!=="many-to-one"&&p.relationshipType!=="many-to-many"){if(!p.foreignKey||!p.tableId)throw new Error("Invalid relationship schema");let{tableName:E}=kp(p.tableId),y=r[E];if(!y||!y.primary)throw new Error("Referenced table doesn't exist or has no primary keys");let _=y.primary[0],S=y.schema[_].externalType;S?t.specificType(p.foreignKey,S):t.integer(p.foreignKey).unsigned(),t.foreign(p.foreignKey).references(`${E}.${_}`)}break;case"signature_single":case"attachment":case"attachment_single":t.json(m);break;case"formula":break;case"ai":break;case"auto":case"json":case"internal":throw new Error(`${p.type} is not a valid SQL type`);default:Ci.unreachable(g)}}let d=i?n?.schema[i.old].type:void 0;return i&&d&&!Eh(d)&&t.renameColumn(i.old,i.updated),n&&Object.entries(n.schema).filter(([p,f])=>!Eh(f.type)&&e.schema[p]==null).forEach(([p,f])=>{i?.old===p||Eh(f.type)||(n.constrained&&n.constrained.indexOf(p)!==-1&&t.dropForeign(p),t.dropColumn(p))}),t}function Ek(t,e,r){return t.createTable(e.name,n=>{yI(n,e,r)})}function Tk(t,e,r,n,i){return t.alterTable(e.name,s=>{yI(s,e,r,n,i)})}function Ak(t,e){return t.dropTable(e.name)}var Th=class{constructor(e){this.sqlClient=e}getBaseSqlClient(){return this.sqlClient}getSqlClient(){return this.extendedSqlClient||this.sqlClient}setExtendedSqlClient(e){this.extendedSqlClient=e}_operation(e){return e.operation}_tableQuery(e){let r=(0,gk.knex)({client:this.sqlClient}).schema;e?.schema&&(r=r.withSchema(e.schema));let n;if(!e.table||!e.tables)throw new Error("Cannot execute without table being specified");if(e.table.sourceType==="internal")throw new Error("Cannot perform table actions for SQS.");switch(this._operation(e)){case"CREATE_TABLE":n=Ek(r,e.table,e.tables);break;case"UPDATE_TABLE":if(!e.table)throw new Error("Must specify old table for update");if(this.sqlClient==="mysql2"&&e.meta?.renamed){let i=e.meta.renamed.updated;return{sql:`alter table ${e?.schema?`\`${e.schema}\`.\`${e.table.name}\``:`\`${e.table.name}\``} rename column \`${e.meta.renamed.old}\` to \`${i}\`;`,bindings:[]}}if(n=Tk(r,e.table,e.tables,e.meta?.oldTable,e.meta?.renamed),this.sqlClient==="mssql"&&e.meta?.renamed){let i=e.meta.renamed.old,s=e.meta.renamed.updated,o=e?.schema?`${e.schema}.${e.table.name}`:`${e.table.name}`,a=Ji(n);if(Array.isArray(a))for(let u of a)u.sql.startsWith("exec sp_rename")&&(u.sql=`exec sp_rename '${o}.${i}', '${s}', 'COLUMN'`,u.bindings=[]);return a}break;case"DELETE_TABLE":n=Ak(r,e.table);break;default:throw new Error("Table operation is of unknown type")}return Ji(n)}},Il=Th;var SI=require("lodash"),Oh="__bb_total";function EI(){return(h.SQL_MAX_ROWS?parseInt(h.SQL_MAX_ROWS):null)||5e3}function Ah(){return(h.SQL_MAX_RELATED_ROWS?parseInt(h.SQL_MAX_RELATED_ROWS):null)||500}function Sk(t,e){return t.sort((r,n)=>{let i=e.find(o=>o&&r.endsWith(o)),s=e.find(o=>o&&n.endsWith(o));return i&&!s?-1:!i&&s?1:r.localeCompare(n)})}function _I(t){return Array.isArray(t)?t.map(e=>_I(e)):(t.bindings&&(t.bindings=t.bindings.map(e=>typeof e=="boolean"?e?1:0:e)),t)}function TI(t){return t.sourceType==="internal"||t.sourceId===Cl}function _k(t,e='"'){return t.replace(new RegExp(e,"g"),`${e}${e}`)}function II(t,e='"'){return`${e}${_k(t,e)}${e}`}function Sh(t,e='"'){for(let r in t)typeof t[r]=="string"&&(t[r]=II(t[r],e));return`[${t.join(",")}]`}function OI(t){return Lh.includes(t.type)&&!jt.schema.isDeprecatedSingleUserColumn(t)}var Ik={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},_h=class{constructor(e,r,n){this.SPECIAL_SELECT_CASES={POSTGRES_MONEY:e=>this.client==="pg"&&e?.externalType?.includes("money"),MSSQL_DATES:e=>this.client==="mssql"&&e?.type==="datetime"&&e.timeOnly};this.client=e,this.query=n,this.knex=r,this.splitter=new Fr.ColumnSplitter([this.table],{aliases:this.query.tableAliases,columnPrefix:this.query.meta?.columnPrefix})}get table(){return this.query.table}get knexClient(){return this.knex.client}getFieldSchema(e){let{column:r}=this.splitter.run(e);return this.table.schema[r]}requiresJsonAsStringClient(){return["mssql","mysql2","mariadb","oracledb"].includes(this.client)}quoteChars(){let e=this.knexClient.wrapIdentifier("foo",{});return[e[0],e[e.length-1]]}quote(e){return this.knexClient.wrapIdentifier(e,{})}isQuoted(e){let[r,n]=this.quoteChars();return e.startsWith(r)&&e.endsWith(n)}quotedIdentifier(e){return Array.isArray(e)||(e=this.splitIdentifier(e)),e.map(r=>this.quote(r)).join(".")}quotedValue(e){return this.knexClient.formatter(this.knexClient.queryBuilder()).wrap(e,!1)}castIntToString(e){switch(this.client){case"oracledb":return this.knex.raw("to_char(??)",[e]);case"pg":return this.knex.raw("??::TEXT",[e]);case"mysql2":case"mariadb":return this.knex.raw("CAST(?? AS CHAR)",[e]);case"sqlite3":return this.knex.raw("printf('%d', ??)",[e]);case"mssql":return this.knex.raw("CONVERT(NVARCHAR, ??)",[e])}}rawQuotedIdentifier(e){return this.knex.raw(this.quotedIdentifier(e))}splitIdentifier(e){let[r,n]=this.quoteChars();return this.isQuoted(e)?e.slice(1,-1).split(`${n}.${r}`):e.split(".")}qualifyIdentifier(e){let r=this.getTableName(),n=this.splitIdentifier(e);return n[0]!==r&&n.unshift(r),this.isQuoted(e)?this.quotedIdentifier(n):n.join(".")}generateSelectStatement(){let{table:e,resource:r}=this.query;if(!r||!r.fields||r.fields.length===0)return"*";let n=this.getTableName(e),i=this.table.schema;return r.fields.map(o=>{let a=o.split(/\./g),u,c=a[0];return a.length>1&&(u=a[0],c=a.slice(1).join(".")),{table:u,column:c,field:o}}).filter(({table:o})=>!o||o===n).map(({table:o,column:a,field:u})=>{let c=i[a];return this.SPECIAL_SELECT_CASES.POSTGRES_MONEY(c)?this.knex.raw("??::money::numeric as ??",[this.rawQuotedIdentifier([o,a].join(".")),this.knex.raw(this.quote(u))]):this.SPECIAL_SELECT_CASES.MSSQL_DATES(c)?this.knex.raw("CONVERT(varchar, ??, 108) as ??",[this.rawQuotedIdentifier(u),this.knex.raw(this.quote(u))]):o?this.rawQuotedIdentifier(`${o}.${a}`):this.rawQuotedIdentifier(u)})}convertClobs(e,r){if(this.client!=="oracledb")throw new Error("you've called convertClobs on a DB that's not Oracle, this is a mistake");let i=this.splitIdentifier(e).pop(),s=this.table.schema[i],o=this.rawQuotedIdentifier(e);return(s.type==="string"||s.type==="longform"||s.type==="bb_reference_single"||s.type==="bb_reference"||s.type==="options"||s.type==="barcodeqr")&&(r?.forSelect?o=this.knex.raw("to_char(??) as ??",[o,this.rawQuotedIdentifier(i)]):o=this.knex.raw("to_char(??)",[o])),o}parse(e,r){if(Array.isArray(e))return JSON.stringify(e);if(e==null)return null;if(this.requiresJsonAsStringClient()&&OI(r)&&typeof e=="object")return JSON.stringify(e);if(this.client==="oracledb"&&r.type==="datetime"&&r.timeOnly){if(e instanceof Date){let n=e.getHours().toString().padStart(2,"0"),i=e.getMinutes().toString().padStart(2,"0"),s=e.getSeconds().toString().padStart(2,"0");return`${n}:${i}:${s}`}if(typeof e=="string")return new Date(`1970-01-01T${e}Z`)}if(typeof e=="string"&&r.type==="datetime")if(r.timeOnly){if(!$p(e))return null}else if(r.dateOnly){let n=Gp(e);return n?new Date(n):null}else{if(Bp(e))return null;if(Xu(e))return new Date(e.trim())}return e}parseBody(e){for(let[r,n]of Object.entries(e)){let{column:i}=this.splitter.run(r),s=this.table.schema[i];s&&(e[r]=this.parse(n,s))}return e}parseFilters(e){e=(0,SI.cloneDeep)(e);for(let r of Object.values(Or)){let n=e[r];if(n)for(let i of Object.keys(n)){if(Array.isArray(n[i])){n[i]=JSON.stringify(n[i]);continue}let{column:s}=this.splitter.run(i),o=this.table.schema[s];o&&(n[i]=this.parse(n[i],o))}}for(let r of Object.values(Yt)){let n=e[r];if(n)for(let i of Object.keys(n)){let{column:s}=this.splitter.run(i),o=this.table.schema[s];o&&(n[i]=n[i].map(a=>this.parse(a,o)))}}for(let r of Object.values(dn)){let n=e[r];if(n)for(let i of Object.keys(n)){let{column:s}=this.splitter.run(i),o=this.table.schema[s];if(!o)continue;let a=n[i];"low"in a&&(a.low=this.parse(a.low,o)),"high"in a&&(a.high=this.parse(a.high,o))}}return e}addJoinFieldCheck(e,r){let n=r.from?.split(".")[0]||"";return e.andWhere(`${n}.fieldName`,"=",r.column)}addRelationshipForFilter(e,r,n,i){let{relationships:s,schema:o,tableAliases:a,table:u}=this.query,c=a?.[u.name]||u.name,l=d=>n.match(new RegExp(`^${d}\\.`));if(!s)return e;for(let d of s){let m=d.tableName,p=a?.[m]||m,f=l(m)||l(p),g=l(d.column);if((f||g)&&d.to&&d.tableName){let E=this.knex.select(this.knex.raw(1)).from({[p]:m}),y=E.clone(),_=Vp(d),S;if(f?S=n:S=n.replace(new RegExp(`^${d.column}.`),`${a?.[d.tableName]||d.tableName}.`),_){let M=a?.[_.through]||d.through,T=this.tableNameWithSchema(_.through,{alias:M,schema:o});y=y.innerJoin(T,function(){this.on(`${p}.${_.toPrimary}`,"=",`${M}.${_.to}`)}).where(`${M}.${_.from}`,"=",this.rawQuotedIdentifier(`${c}.${_.fromPrimary}`)),this.client==="sqlite3"&&(y=this.addJoinFieldCheck(y,_)),e=e.where(I=>{I.whereExists(i(S,y)),r&&I.orWhereNotExists(E.clone().innerJoin(T,function(){this.on(`${c}.${_.fromPrimary}`,"=",`${M}.${_.from}`)}))})}else{let M=`${p}.${d.to}`,T=`${c}.${d.from}`;y=y.where(M,"=",this.rawQuotedIdentifier(T)),e=e.where(I=>{I.whereExists(i(S,y.clone())),r&&I.orWhereNotExists(y)})}}}return e}addFilters(e,r,n){if(!r)return e;let i=this;r=this.parseFilters({...r});let s=this.query.tableAliases,o=r.allOr,u=this.client==="sqlite3"?this.table._id:this.table.name;function c(f){return s?.[f]||f}function l(f,g,E,y){let _=(S,M,T)=>{let[I,...x]=M.split("."),w=x.join("."),B=c(I);return S.andWhere(le=>E(le,B?`${B}.${w}`:w,T))};for(let S in f){let M=f[S],T=Jo(S),I=T.includes("."),x=n?.relationship&&I,w;if(S==="_complexIdOperator"&&(w=f[S])&&y){let B=c(u);e=y(e,w.id.map(le=>B?`${B}.${le}`:le),w.values)}else if(I)x&&(o&&(e=e.or),e=i.addRelationshipForFilter(e,Ik[g],T,(B,le)=>_(le,B,M)));else{let B=c(u);e=E(e,B?`${B}.${T}`:T,M)}}}let d=(f,g,E)=>((r?.fuzzyOr||o)&&(f=f.or),this.client==="oracledb"||this.client==="sqlite3"?f.whereRaw("LOWER(??) LIKE ?",[this.rawQuotedIdentifier(g),`%${E.toLowerCase()}%`]):f.whereILike(this.rawQuotedIdentifier(g),this.knex.raw("?",[`%${E}%`]))),m=(f,g=!1)=>{function E(y){return(o||f===r?.containsAny)&&(y=y.or),f===r?.notContains&&(y=y.not),y}this.client==="pg"?l(f,"contains",(y,_,S)=>(y=E(y),g?y.whereRaw("COALESCE(??::jsonb \\?| array??, FALSE)",[this.rawQuotedIdentifier(_),this.knex.raw(Sh(S,"'"))]):y.whereRaw("COALESCE(??::jsonb @> '??', FALSE)",[this.rawQuotedIdentifier(_),this.knex.raw(Sh(S))]))):this.client==="mysql2"||this.client==="mariadb"?l(f,"contains",(y,_,S)=>E(y).whereRaw("COALESCE(?(??, ?), FALSE)",[this.knex.raw(g?"JSON_OVERLAPS":"JSON_CONTAINS"),this.rawQuotedIdentifier(_),this.knex.raw(II(Sh(S)))])):l(f,"contains",(y,_,S)=>(S.length===0||(y=y.where(M=>(f===r?.notContains&&(M=M.not),M=M.where(T=>{for(let I of S){f===r?.containsAny?T=T.or:T=T.and;let x=typeof I=="string"?`"${I.toLowerCase()}"`:I;T=T.whereLike(this.knex.raw("COALESCE(LOWER(??), '')",[this.rawQuotedIdentifier(_)]),`%${x}%`)}}),f===r?.notContains&&(M=M.or.whereNull(this.rawQuotedIdentifier(_))),M))),y))};if(r.$and){let{$and:f}=r;for(let g of f.conditions)e=e.where(E=>{this.addFilters(E,g,n)})}if(r.$or){let{$or:f}=r;e=e.where(g=>{for(let E of f.conditions)g.orWhere(y=>this.addFilters(y,{...E,allOr:!0},n))})}r.oneOf&&l(r.oneOf,"oneOf",(f,g,E)=>{let y=this.getFieldSchema(g),_=Array.isArray(E)?E:[E];if(o&&(f=f.or),this.client==="oracledb")g=this.convertClobs(g);else if(this.client==="sqlite3"&&y?.type==="datetime"&&y.dateOnly){for(let S of _)S!=null?f=f.or.whereLike(g,`${S.toISOString().slice(0,10)}%`):f=f.or.whereNull(g);return f}return f.whereIn(g,_)},(f,g,E)=>(o&&(f=f.or),this.client==="oracledb"&&(g=g.map(y=>this.convertClobs(y))),f.whereIn(g,Array.isArray(E)?E:[E]))),r.string&&l(r.string,"string",(f,g,E)=>(o&&(f=f.or),this.client==="oracledb"||this.client==="sqlite3"?f.whereRaw("LOWER(??) LIKE ?",[this.rawQuotedIdentifier(g),`${E.toLowerCase()}%`]):f.whereILike(g,`${E}%`))),r.fuzzy&&l(r.fuzzy,"fuzzy",d),r.range&&l(r.range,"range",(f,g,E)=>{let y=w=>w&&Object.keys(w).length===0&&Object.getPrototypeOf(w)===Object.prototype;y(E.low)&&(E.low=""),y(E.high)&&(E.high="");let _=ec(E.low),S=ec(E.high),M=this.getFieldSchema(g),T=g,I=E.high,x=E.low;return this.client==="sqlite3"&&M?.type==="datetime"&&M.dateOnly&&(I!=null&&(I=`${I.toISOString().slice(0,10)}T23:59:59.999Z`),x!=null&&(x=x.toISOString().slice(0,10))),this.client==="oracledb"?T=this.convertClobs(g):this.client==="sqlite3"&&M?.type==="bigint"&&(T=this.knex.raw("CAST(?? AS INTEGER)",[this.rawQuotedIdentifier(g)]),I=this.knex.raw("CAST(? AS INTEGER)",[E.high]),x=this.knex.raw("CAST(? AS INTEGER)",[E.low])),o&&(f=f.or),_&&S?f.whereBetween(T,[x,I]):_?f.where(T,">=",x):S?f.where(T,"<=",I):f}),r.equal&&l(r.equal,"equal",(f,g,E)=>{let y=this.getFieldSchema(g);if(o&&(f=f.or),this.client==="mssql")return f.whereRaw("CASE WHEN ?? = ? THEN 1 ELSE 0 END = 1",[this.rawQuotedIdentifier(g),E]);if(this.client==="oracledb"){let _=this.convertClobs(g);return f.where(S=>S.whereNotNull(_).andWhere(_,E))}else return this.client==="sqlite3"&&y?.type==="datetime"&&y.dateOnly?E!=null?f.whereLike(g,`${E.toISOString().slice(0,10)}%`):f.whereNull(g):f.whereRaw("COALESCE(?? = ?, FALSE)",[this.rawQuotedIdentifier(g),E])}),r.notEqual&&l(r.notEqual,"notEqual",(f,g,E)=>{let y=this.getFieldSchema(g);if(o&&(f=f.or),this.client==="mssql")return f.whereRaw("CASE WHEN ?? = ? THEN 1 ELSE 0 END = 0",[this.rawQuotedIdentifier(g),E]);if(this.client==="oracledb"){let _=this.convertClobs(g);return f.where(S=>S.not.whereNull(_).and.where(_,"!=",E)).or.whereNull(_)}else return this.client==="sqlite3"&&y?.type==="datetime"&&y.dateOnly?E!=null?f.not.whereLike(g,`${E.toISOString().slice(0,10)}%`).or.whereNull(g):f.not.whereNull(g):f.whereRaw("COALESCE(?? != ?, TRUE)",[this.rawQuotedIdentifier(g),E])}),r.empty&&l(r.empty,"empty",(f,g)=>(o&&(f=f.or),f.whereNull(g))),r.notEmpty&&l(r.notEmpty,"notEmpty",(f,g)=>(o&&(f=f.or),f.whereNotNull(g))),r.contains&&m(r.contains),r.notContains&&m(r.notContains),r.containsAny&&m(r.containsAny,!0);let p=s?.[this.table._id]||this.table._id;return r.documentType&&!Fp(this.table)&&p&&e.andWhereLike(`${p}._id`,`${xr(r.documentType)}%`),e}isSqs(){return TI(this.table)}getTableName(e){e||(e=this.table);let r=e.name;TI(e)&&e._id&&(r=e._id);let n=this.query.tableAliases||{};return n[r]?n[r]:r}addDistinctCount(e){if(!this.table.primary)throw new Error("SQL counting requires primary key to be supplied");return e.countDistinct(`${this.getTableName()}.${this.table.primary[0]} as ${Oh}`)}addAggregations(e,r){let n=this.query.resource?.fields||[],i=this.getTableName();if(n.length>0){let s=n.map(o=>this.qualifyIdentifier(o));if(this.client==="oracledb"){let o=s.map(u=>this.convertClobs(u)),a=s.map(u=>this.convertClobs(u,{forSelect:!0}));e=e.groupBy(o).select(a)}else e=e.groupBy(s).select(s)}for(let s of r){let o=s.calculationType;if(o==="count")if("distinct"in s&&s.distinct)if(this.client==="oracledb"){let a=this.convertClobs(`${i}.${s.field}`);e=e.select(this.knex.raw("COUNT(DISTINCT ??) as ??",[a,s.name]))}else e=e.countDistinct(`${i}.${s.field} as ${s.name}`);else if(this.client==="oracledb"){let a=this.convertClobs(`${i}.${s.field}`);e=e.select(this.knex.raw("COUNT(??) as ??",[a,s.name]))}else e=e.count(`${s.field} as ${s.name}`);else{let a=this.getFieldSchema(s.field);if(!a)throw new Error(`field schema missing for aggregation target: ${s.field}`);let u=this.knex.raw("??(??)",[this.knex.raw(o),this.rawQuotedIdentifier(`${i}.${s.field}`)]);a.type==="bigint"&&(u=this.castIntToString(u)),e=e.select(this.knex.raw("?? as ??",[u,s.name]))}}return e}isAggregateField(e){return!!this.query.resource?.aggregations?.find(n=>n.name===e)}addSorting(e){let{sort:r,resource:n}=this.query,i=this.table.primary,s=this.getTableName();if(!Array.isArray(i))throw new Error("Sorting requires primary key to be specified for table");if(r&&Object.keys(r||{}).length>0)for(let[a,u]of Object.entries(r)){let c=u.direction==="ascending"?"asc":"desc",l;(this.client==="pg"||this.client==="oracledb")&&(l=u.direction==="ascending"?"first":"last");let d=`${s}.${a}`,m;this.isAggregateField(a)?m=this.rawQuotedIdentifier(a):this.client==="oracledb"?m=this.convertClobs(d):m=this.rawQuotedIdentifier(d),e=e.orderByRaw(`?? ?? ${l?"nulls ??":""}`,[m,this.knex.raw(c),...l?[this.knex.raw(l)]:[]])}return!((n?.aggregations?.length??0)>0)&&(!r||r[i[0]]===void 0)&&(e=e.orderBy(`${s}.${i[0]}`)),e}tableNameWithSchema(e,r){let n=r?.schema?`${r.schema}.${e}`:e;return r?.alias&&(n+=` as ${r.alias}`),n}buildJsonField(e,r){let n=r.split("."),i=n[n.length-1],s,o;if(n.length>1){let c=n.shift();s=n.join("."),o=`${c}.${s}`}else s=n.join("."),o=s;this.query.meta?.columnPrefix&&(i=i.replace(this.query.meta.columnPrefix,""));let a=this.rawQuotedIdentifier(o),u=e.schema[i];return u&&u.type==="bigint"&&(a=this.castIntToString(a)),[s,a]}maxFunctionParameters(){switch(this.client){case"sqlite3":return 127;case"pg":return 100;default:return 200}}addJsonRelationships(e,r,n){let i=this.client,s=this.knex,{resource:o,tableAliases:a,schema:u,tables:c}=this.query,l=o?.fields||[];for(let d of n){let{tableName:m,through:p,to:f,from:g,fromPrimary:E,toPrimary:y}=d;if(!m||!r)continue;let _=c[m];if(!_)throw new Error(`related table "${m}" not found in datasource`);let S=a?.[m]||m,M=a?.[r]||r,T=p&&a?.[p]||p,I=this.tableNameWithSchema(m,{alias:S,schema:u}),x=[..._?.primary||[],_?.primaryDisplay].filter(V=>V),w=Sk(l.filter(V=>V.split(".")[0]===S),x);w=w.slice(0,Math.floor(this.maxFunctionParameters()/2));let B=w.map(V=>this.buildJsonField(_,V));if(!B.length)continue;let le=B.map(V=>{let se=this.client==="oracledb"?" VALUE ":",";return this.knex.raw(`?${se}??`,[V[0],V[1]]).toString()}).join(","),un=`${S}.${y||f}`,$=s.from(I).orderBy(un),k=p&&y&&E,v=k?`${T}.${g}`:`${S}.${f}`,q=k?`${M}.${E}`:`${M}.${g}`;if(k){let V=this.tableNameWithSchema(p,{alias:T,schema:u});$=$.join(V,function(){this.on(`${S}.${y}`,"=",`${T}.${f}`)})}$=$.where(this.rawQuotedIdentifier(v),"=",this.rawQuotedIdentifier(q));let L=V=>($=$.select(w.map(se=>this.rawQuotedIdentifier(se))).limit(Ah()),s.select(V).from({[S]:$})),Y;switch(i){case"sqlite3":$=this.addJoinFieldCheck($,d),Y=L(this.knex.raw(`json_group_array(json_object(${le}))`));break;case"pg":Y=L(this.knex.raw(`json_agg(json_build_object(${le}))`));break;case"mariadb":Y=$.select(s.raw(`json_arrayagg(json_object(${le}) LIMIT ${Ah()})`));break;case"mysql2":case"oracledb":Y=L(this.knex.raw(`json_arrayagg(json_object(${le}))`));break;case"mssql":{let V=s.select("*").from({[M]:$.select(B.map(se=>s.ref(se[1]).as(se[0]))).limit(Ah())});Y=s.raw(`(SELECT ?? = (${V} FOR JSON PATH))`,[this.rawQuotedIdentifier(S)]);break}default:throw new Error(`JSON relationships not implement for ${i}`)}e=e.select({[d.column]:Y})}return e}addJoin(e,r,n){let{tableAliases:i,schema:s}=this.query,o=r.to,a=r.from,u=r.through,c=i?.[o]||o,l=u&&i?.[u]||u,d=i?.[a]||a,m=this.tableNameWithSchema(o,{alias:c,schema:s}),p=u?this.tableNameWithSchema(u,{alias:l,schema:s}):void 0;return u?e=e.leftJoin(p,function(){for(let f of n){let g=f.fromPrimary,E=f.from;this.orOn(`${d}.${g}`,"=",`${l}.${E}`)}}).leftJoin(m,function(){for(let f of n){let g=f.toPrimary,E=f.to;this.orOn(`${c}.${g}`,`${l}.${E}`)}}):e=e.leftJoin(m,function(){for(let f of n){let g=f.from,E=f.to;this.orOn(`${d}.${g}`,"=",`${c}.${E}`)}}),e}qualifiedKnex(e){let r=this.query.tableAliases?.[this.query.table.name];return e?.alias===!1?r=void 0:typeof e?.alias=="string"&&(r=e.alias),this.knex(this.tableNameWithSchema(this.query.table.name,{alias:r,schema:this.query.schema}))}create(e){let{body:r}=this.query;if(!r)throw new Error("Cannot create without row body");let n=this.qualifiedKnex({alias:!1}),i=this.parseBody(r);if(this.client==="oracledb")for(let[s,o]of Object.entries(this.query.table.schema)){if(o.constraints?.presence===!0||o.type==="formula"||o.type==="auto"||o.type==="link"||o.type==="ai")continue;i[s]==null&&(i[s]=null)}else for(let[s,o]of Object.entries(i))o==null&&delete i[s];return e.disableReturning?n.insert(i):n.insert(i).returning("*")}bulkCreate(){let{body:e}=this.query,r=this.qualifiedKnex({alias:!1});if(!Array.isArray(e))return r;let n=e.map(i=>this.parseBody(i));return r.insert(n)}bulkUpsert(){let{body:e}=this.query,r=this.qualifiedKnex({alias:!1});if(!Array.isArray(e))return r;let n=e.map(i=>this.parseBody(i));if(this.client==="pg"||this.client==="sqlite3"||this.client==="mysql2"||this.client==="mariadb"){let i=this.table.primary;if(!i)throw new Error("Primary key is required for upsert");return r.insert(n).onConflict(i).merge()}else if(this.client==="mssql"||this.client==="oracledb")return r.insert(n);return r.upsert(n)}read(e={}){let{operation:r,filters:n,paginate:i,relationships:s,table:o}=this.query,{limits:a}=e,u=this.qualifiedKnex(),c=null,l=a?.query||a?.base;if(i&&i.page&&i.limit){let p=(i.page<=1?0:i.page-1)*i.limit;l=i.limit,c=p}else i&&i.offset&&i.limit?(l=i.limit,c=i.offset):i&&i.limit&&(l=i.limit);r!=="COUNT"&&(l!=null&&(u=u.limit(l)),c!=null&&(u=u.offset(c)));let d=this.query.resource?.aggregations||[];if(r==="COUNT"?u=this.addDistinctCount(u):d.length>0?u=this.addAggregations(u,d):u=u.select(this.generateSelectStatement()),r!=="COUNT"&&(u=this.addSorting(u)),u=this.addFilters(u,n,{relationship:!0}),s?.length&&d.length===0){let m=this.query.tableAliases?.[o.name]||o.name,p=this.addSorting(this.knex.with("paginated",u.clone().clearSelect().select("*")).select(this.generateSelectStatement()).from({[m]:"paginated"}));return this.addJsonRelationships(p,o.name,s)}return u}update(e){let{body:r,filters:n}=this.query;if(!r)throw new Error("Cannot update without row body");let i=this.qualifiedKnex(),s=this.parseBody(r);return i=this.addFilters(i,n),e.disableReturning?i.update(s):i.update(s).returning("*")}delete(e){let{filters:r}=this.query,n=this.qualifiedKnex();return n=this.addFilters(n,r),e.disableReturning?n.delete():n.delete().returning(this.generateSelectStatement())}},Ih=class extends Il{constructor(r,n=EI()){super(r);this.limit=n}convertToNative(r,n={}){let i=this.getSqlClient();if(n?.disableBindings)return{sql:r.toString()};{let s=Ji(r);return i==="sqlite3"&&(s=_I(s)),s}}_query(r,n={}){let i=this.getSqlClient(),s={client:this.getBaseSqlClient()};(i==="sqlite3"||i==="oracledb")&&(s.useNullAsDefault=!0);let o=(0,AI.knex)(s),a,u=new _h(i,o,r);switch(this._operation(r)){case"CREATE":a=u.create(n);break;case"READ":a=u.read({limits:{query:this.limit,base:EI()}});break;case"COUNT":a=u.read();break;case"UPDATE":a=u.update(n);break;case"DELETE":a=u.delete(n);break;case"BULK_CREATE":a=u.bulkCreate();break;case"BULK_UPSERT":a=u.bulkUpsert();break;case"CREATE_TABLE":case"UPDATE_TABLE":case"DELETE_TABLE":return this._tableQuery(r);default:throw"Operation type is not supported by SQL query builder"}return this.convertToNative(a,n)}async getReturningRow(r,n){if(!n.extra||!n.extra.idFilter)return{};let i=this._query({operation:"READ",datasource:n.datasource,schema:n.schema,table:n.table,tables:n.tables,resource:{fields:[]},filters:n.extra?.idFilter,paginate:{limit:1}});return r(i,"READ")}checkLookupKeys(r,n){if(!r||!n.table.primary)return n;let i=n.table.primary[0];return n.extra={idFilter:{equal:{[i]:r}}},n}async queryWithReturning(r,n,i=s=>s){let s=this.getSqlClient(),o=this._operation(r),a=this._query(r,{disableReturning:!0});if(Array.isArray(a)){let d=[];for(let m of a)d.push(await n(m,o));return d}let u;o==="DELETE"&&(u=i(await this.getReturningRow(n,r)));let c=await n(a,o),l=i(c);if(o==="CREATE"||o==="UPDATE"){let d;s==="mssql"?d=l?.[0].id:(s==="mysql2"||s==="mariadb")&&(d=l?.insertId),u=i(await this.getReturningRow(n,this.checkLookupKeys(d,r)))}return o==="COUNT"?l:o!=="READ"?u:l.length?l:[{[o.toLowerCase()]:!0}]}getTableName(r,n){let i=r.name;if(r.sourceType==="internal"||r.sourceId===Cl){if(!r._id)return;i=r._id}return n?.[i]||i}convertJsonStringColumns(r,n,i){let s=this.getTableName(r,i);for(let[o,a]of Object.entries(r.schema)){if(!OI(a))continue;let u=`${s}.${o}`;for(let c of n)typeof c[u]=="string"&&(c[u]=JSON.parse(c[u])),typeof c[o]=="string"&&(c[o]=JSON.parse(c[o]))}return n}log(r,n){Do(this.getSqlClient(),r,n)}},xI=Ih;var xh={};N(xh,{base:()=>Ok});function Ok(t){return{_id:or,language:"sqlite",sql:{tables:{},options:{table_name:t}}}}var xk={...Wo,...Ae},Rk=(t={})=>{zu(t.db)};0&&(module.exports={APP_DEV,APP_DEV_PREFIX,APP_PREFIX,AutomationViewMode,BUDIBASE_DATASOURCE_TYPE,BadRequestError,BudibaseError,Config,Cookie,DEFAULT_BB_DATASOURCE_ID,DEFAULT_EMPLOYEE_TABLE_ID,DEFAULT_EXPENSES_TABLE_ID,DEFAULT_INVENTORY_TABLE_ID,DEFAULT_JOBS_TABLE_ID,DEFAULT_TENANT_ID,DeprecatedViews,DocumentType,Duration,DurationType,EmailUnavailableError,FeatureDisabledError,GlobalRole,HTTPError,Header,InternalTable,InvalidAPIKeyError,MAX_VALID_DATE,MIN_VALID_DATE,NotFoundError,RedisClient,SEPARATOR,SQLITE_DESIGN_DOC_ID,SQS_DATASOURCE_INTERNAL,StaticDatabases,UNICODE_MAX,UsageLimitError,UserStatus,ViewName,accounts,auth,blacklist,cache,configs,constants,context,db,docIds,docUpdates,encryption,env,errors,events,features,getPublicError,init,installation,locks,logging,middleware,objectStore,permissions,platform,plugins,queue,redis,roles,security,sessions,setEnv,sql,tenancy,timers,userUtils,users,utils,withEnv});
|
|
39
39
|
//# sourceMappingURL=index.js.map
|