@budibase/server 3.23.22 → 3.23.23
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/builder/assets/{easymde-feeed539.js → easymde-7cbafe1c.js} +1 -1
- package/builder/assets/{index-6cb6f85b.js → index-529b858b.js} +4 -4
- package/builder/index.html +1 -1
- package/client/budibase-client.js +1 -1
- package/client/chunks/{Accordion-9bf43ef5.js → Accordion-a5c23a04.js} +1 -1
- package/client/chunks/{ApexChart-5c32b7d6.js → ApexChart-5aaa9925.js} +2 -2
- package/client/chunks/{AreaChart-8116b80e.js → AreaChart-1c5e1a0c.js} +2 -2
- package/client/chunks/{AttachmentField-c0e27381.js → AttachmentField-7c5a53ef.js} +4 -4
- package/client/chunks/{AttachmentSingleField-a9c2dcf2.js → AttachmentSingleField-47e5398b.js} +5 -5
- package/client/chunks/{BBReferenceField-a7ccc0f1.js → BBReferenceField-d6c4dcc9.js} +7 -7
- package/client/chunks/{BBReferenceSingleField-664ccc23.js → BBReferenceSingleField-a12a4254.js} +8 -8
- package/client/chunks/{BackgroundImage-2772a812.js → BackgroundImage-a018a954.js} +1 -1
- package/client/chunks/{BarChart-a048e0ef.js → BarChart-c6a6b367.js} +2 -2
- package/client/chunks/{BigIntField-0904b91e.js → BigIntField-32d58b3f.js} +5 -5
- package/client/chunks/{BooleanField-a0ee7601.js → BooleanField-356f4cfd.js} +4 -4
- package/client/chunks/{Button-fa5ca8c2.js → Button-94652f83.js} +1 -1
- package/client/chunks/{ButtonGroup-06c930f0.js → ButtonGroup-78022b67.js} +3 -3
- package/client/chunks/{CandleStickChart-9b729f9c.js → CandleStickChart-3e44725c.js} +2 -2
- package/client/chunks/{Card-91f045ca.js → Card-27534fe2.js} +1 -1
- package/client/chunks/{CardHorizontal-20f3753d.js → CardHorizontal-308696db.js} +1 -1
- package/client/chunks/{CardStat-c3d8a440.js → CardStat-420b2fba.js} +1 -1
- package/client/chunks/{CardsBlock-6870ce30.js → CardsBlock-2aec8fb1.js} +2 -2
- package/client/chunks/{ChartBlock-47ea0b3f.js → ChartBlock-7629ed93.js} +1 -1
- package/client/chunks/{Chatbox-9d370f71.js → Chatbox-eaf12b79.js} +2 -2
- package/client/chunks/{CheckboxGroup-02d3cba5.js → CheckboxGroup-108d3b0a.js} +1 -1
- package/client/chunks/{CodeGenerator-b01b4bcd.js → CodeGenerator-6c34d52e.js} +1 -1
- package/client/chunks/{CodeScannerField-2eec8b57.js → CodeScannerField-94bb5a35.js} +6 -6
- package/client/chunks/{CollapsedButtonGroup-e910dd6d.js → CollapsedButtonGroup-c3d445d2.js} +2 -2
- package/client/chunks/{Container-bafe727b.js → Container-eb990d30.js} +1 -1
- package/client/chunks/{DataProvider-a675fba3.js → DataProvider-c9c02169.js} +1 -1
- package/client/chunks/{DatePicker-379cb448.js → DatePicker-6fec9151.js} +1 -1
- package/client/chunks/{DatePicker-e1681c3f.js → DatePicker-9b9dde4a.js} +2 -2
- package/client/chunks/{DateRangePicker-4a08714a.js → DateRangePicker-7592f5df.js} +2 -2
- package/client/chunks/{DateTimeField-56bc2971.js → DateTimeField-f6fb7081.js} +5 -5
- package/client/chunks/{Divider-5c07c3e9.js → Divider-ba4510af.js} +1 -1
- package/client/chunks/{DonutChart-0bf6ea65.js → DonutChart-dd94ab87.js} +2 -2
- package/client/chunks/{DynamicFilter-6576a6a8.js → DynamicFilter-046fc100.js} +5 -5
- package/client/chunks/{Embed-99af1400.js → Embed-456140e6.js} +2 -2
- package/client/chunks/{EmbeddedMap-39f193ee.js → EmbeddedMap-f354ae15.js} +2 -2
- package/client/chunks/{Field-218ad62a.js → Field-31480c33.js} +3 -3
- package/client/chunks/{FieldGroup-2d5abdf5.js → FieldGroup-d3fae781.js} +3 -3
- package/client/chunks/{Filter-a67e0b8b.js → Filter-93f98fc3.js} +14 -14
- package/client/chunks/{Form-94c45672.js → Form-527e38be.js} +2 -2
- package/client/chunks/{FormBlock-b1f24b53.js → FormBlock-1fa932cf.js} +3 -3
- package/client/chunks/{FormBlockComponent-6675ef53.js → FormBlockComponent-4d489d65.js} +1 -1
- package/client/chunks/{FormStep-e440653c.js → FormStep-778be960.js} +2 -2
- package/client/chunks/{GridBlock-fc0a59ba.js → GridBlock-31543699.js} +5 -5
- package/client/chunks/{Heading-8540408f.js → Heading-d94bfe34.js} +1 -1
- package/client/chunks/{HistogramChart-497a35ef.js → HistogramChart-364e12d1.js} +2 -2
- package/client/chunks/{Icon-ff2eb4c9.js → Icon-690e8221.js} +2 -2
- package/client/chunks/{IconV2-2e218e2b.js → IconV2-c23cdc54.js} +2 -2
- package/client/chunks/{Image-af6a4199.js → Image-e83d4a6c.js} +2 -2
- package/client/chunks/{InnerForm-43f01bff.js → InnerForm-73669612.js} +1 -1
- package/client/chunks/{Item-7bc624af.js → Item-180361f1.js} +1 -1
- package/client/chunks/{JSONField-6734e1a2.js → JSONField-9b64049c.js} +5 -5
- package/client/chunks/{Layout-474a44de.js → Layout-2f70d9af.js} +4 -4
- package/client/chunks/{LineChart-27fba06b.js → LineChart-fc45552a.js} +2 -2
- package/client/chunks/{Link-1d19b57e.js → Link-323a1ce0.js} +1 -1
- package/client/chunks/{LongFormField-d731a8bd.js → LongFormField-f7c7960b.js} +6 -6
- package/client/chunks/{MarkdownViewer-3c39ccc2.js → MarkdownViewer-598dc87b.js} +3 -3
- package/client/chunks/{MarkdownViewer-4cc65383.js → MarkdownViewer-8c9ce44f.js} +1 -1
- package/client/chunks/Modal-024bd3c7.js +236 -0
- package/client/chunks/{MultiFieldSelect-c420c15a.js → MultiFieldSelect-47b5b649.js} +6 -6
- package/client/chunks/{MultiStepFormblock-fa778db0.js → MultiStepFormblock-4b1e958d.js} +2 -2
- package/client/chunks/{Multiselect-681e492b.js → Multiselect-a1599e17.js} +1 -1
- package/client/chunks/{Navigation-167b5cc7.js → Navigation-3a0c39c3.js} +1 -1
- package/client/chunks/{NumberField-1c1de9f6.js → NumberField-be28a613.js} +5 -5
- package/client/chunks/{OptionsField-734cacf0.js → OptionsField-a5422369.js} +5 -5
- package/client/chunks/{PDF-6b73490a.js → PDF-f35ff9d9.js} +1 -1
- package/client/chunks/{PDFTable-d93f6a1b.js → PDFTable-6f67b76f.js} +1 -1
- package/client/chunks/{PasswordField-34d94b2e.js → PasswordField-92d2543d.js} +5 -5
- package/client/chunks/{PieChart-284d335a.js → PieChart-3bf1da2e.js} +2 -2
- package/client/chunks/{Placeholder-26f62a15.js → Placeholder-69195628.js} +1 -1
- package/client/chunks/{RadioGroup-ffd210dc.js → RadioGroup-cec83c5b.js} +1 -1
- package/client/chunks/{RatingField-72fb03d1.js → RatingField-fc75e8b3.js} +4 -4
- package/client/chunks/{RelationshipField-b5bf2788.js → RelationshipField-cc03a2f4.js} +5 -5
- package/client/chunks/{Repeater-54fb8b53.js → Repeater-2f9ce3a9.js} +3 -3
- package/client/chunks/{RepeaterBlock-1548af56.js → RepeaterBlock-d7eb75fe.js} +2 -2
- package/client/chunks/{RowExplorer-333a7c50.js → RowExplorer-d2a074ef.js} +1 -1
- package/client/chunks/{S3Upload-950614d0.js → S3Upload-d6965727.js} +4 -4
- package/client/chunks/{ScreenSlot-0fd382b7.js → ScreenSlot-6e148eba.js} +1 -1
- package/client/chunks/{Section-934a97f6.js → Section-cdc4b72a.js} +2 -2
- package/client/chunks/{SidePanel-d5a1048d.js → SidePanel-0820f026.js} +1 -1
- package/client/chunks/{SignatureField-65a95a58.js → SignatureField-1e06c47d.js} +4 -4
- package/client/chunks/{SingleRowProvider-b14a3289.js → SingleRowProvider-3dd44159.js} +1 -1
- package/client/chunks/{SpectrumCard-44d14022.js → SpectrumCard-13324f63.js} +1 -1
- package/client/chunks/{StackedList-f8c89837.js → StackedList-de6ff80f.js} +1 -1
- package/client/chunks/{StringField-6f6add8e.js → StringField-bcb3cf55.js} +4 -4
- package/client/chunks/{Table-b97f74a3.js → Table-c3d2ed97.js} +2 -2
- package/client/chunks/{TableBlock-40e14cce.js → TableBlock-bea44c74.js} +2 -2
- package/client/chunks/{Tag-cd2a9a69.js → Tag-1afb881a.js} +1 -1
- package/client/chunks/{Text-857355c7.js → Text-1223772f.js} +1 -1
- package/client/chunks/{Text-e21c1f9b.js → Text-fee5aac7.js} +2 -2
- package/client/chunks/{TextArea-a1903d4c.js → TextArea-e97e027f.js} +1 -1
- package/client/chunks/{UserAvatar-f9ba8165.js → UserAvatar-5dcc3fb5.js} +1 -1
- package/client/chunks/{___vite-browser-external_commonjs-proxy-d30e3316.js → ___vite-browser-external_commonjs-proxy-ed3d72c5.js} +1 -1
- package/client/chunks/{apexcharts.common-342b3508.js → apexcharts.common-f2779797.js} +1 -1
- package/client/chunks/{blocks-a94420db.js → blocks-99a14794.js} +1 -1
- package/client/chunks/{easymde-35f7473a.js → easymde-a98f2082.js} +2 -2
- package/client/chunks/{index-03f19615.js → index-104cfa7c.js} +1 -1
- package/client/chunks/{index-22991524.js → index-4f010e0b.js} +13 -2
- package/client/chunks/{table-4a8cf259.js → table-b4292ebf.js} +1 -1
- package/client/chunks/{users-38d05564.js → users-0717978f.js} +1 -1
- package/client/chunks/{utc-561b2582.js → utc-12047dea.js} +1 -1
- package/client/manifest.json +12 -1
- package/dist/automation.js +1 -1
- package/dist/automation.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/query.js +1 -1
- package/dist/query.js.map +1 -1
- package/dist/yarn.lock +11 -4
- package/package.json +3 -3
- package/client/chunks/Modal-7a912990.js +0 -230
package/dist/automation.js
CHANGED
|
@@ -532,7 +532,7 @@ $1`)};HO.parseAttributes=a(function(t){return Object.keys(t).map(function(r){var
|
|
|
532
532
|
emit(doc.ssoId, doc._id)
|
|
533
533
|
}
|
|
534
534
|
}`,"platform_users_lowercase_2")},"createPlatformUserView"),Nx=a(async(e,t)=>{let r={account_by_email:Zbe,platform_users_lowercase_2:eve};return $s(vn.PLATFORM_INFO.name,async n=>{let i=r[e];return mz(e,t,n,i,{arrayResponse:!0})})},"queryPlatformView"),tve={by_email2:Qbe,by_api_key:Jbe,by_app:Ybe},Zf=a(async(e,t,r,n)=>{r||(r=Rr());let i=tve[e];return mz(e,t,r,i,n)},"queryGlobalView");async function gz(e,t,r){let n=Rr(),i=tve[e];return Px(e,t,n,i,r)}a(gz,"queryGlobalViewRaw");var oxt=ne(require("pouchdb"));var yz=class{static{a(this,"Replication")}constructor({source:t,target:r}){this.source=Eu(t),this.target=Eu(r),t.startsWith("app_dev")&&r.startsWith("app")?this.direction="toProduction":t.startsWith("app")&&r.startsWith("app_dev")&&(this.direction="toDev")}async close(){await Promise.all([gx(this.source),gx(this.target)])}replicate(t={}){return new Promise(r=>{this.source.replicate.to(this.target,t).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})})}async resolveInconsistencies(t){let r=[];for(let n of t)try{let[i,o]=await Promise.all([this.source.get(n),this.target.get(n)]);this.haveReplicationInconsistencies(i,o)&&(await this.target.remove({_id:o._id,_rev:o._rev}),r.push(i._id))}catch{console.warn("Cannot resolve inconsistencies for document",n)}r.length>0&&await this.replicate({doc_ids:r})}haveReplicationInconsistencies(t,r){let n=this.getRevisionNumber(t);return this.getRevisionNumber(r)>n}getRevisionNumber(t){return parseInt(t._rev?.split("-")[0]||"0")}appReplicateOpts(t={}){if(typeof t.filter=="string")return t;let r=t.filter,n=this.direction,i=n==="toDev";delete t.filter;let o=t.isCreation,s=t.tablesToSync;delete t.isCreation,delete t.tablesToSync;let u=!1,c;typeof s=="string"&&s==="all"?u=!0:s&&(c=s);let l=a((p,d)=>p?.startsWith(d+Fe),"startsWithID"),f=a(p=>l(p,"ro")||l(p,"li"),"isData");return{...t,filter:(p,d)=>!o&&p._id==="_design/migrations"||i&&p._id.startsWith("_design")?!1:p._deleted||l(p._id,dC)?!0:n==="toProduction"&&!o&&l(p._id,"autocolumn_state")?!1:f(p._id)?!!c?.find(h=>p._id.includes(h))||u:l(p._id,"log_au")||p._id==="app_metadata"?!1:r?r(p,d):!0}}async rollback(){await this.target.destroy(),this.target=Eu(this.target.name),await this.replicate()}},rve=yz;var ive=ne(require("node-fetch"));var Lx=Lr.removeKeyNumbering;function bg(e){return e==null||e===""}a(bg,"isEmpty");var ep=class e{static{a(this,"QueryBuilder")}#l;#f;#e;#r;#n;#i;#a;#o;#t;#p;#s;#u=!1;#c;static{this.maxLimit=200}constructor(t,r,n){this.#l=t,this.#f=r,this.#e={allOr:!1,onEmptyFilter:"all",string:{},fuzzy:{},range:{},equal:{},notEqual:{},empty:{},notEmpty:{},oneOf:{},contains:{},notContains:{},containsAny:{},...n},this.#r=50,this.#a="ascending",this.#o="string",this.#t=!0}disableEscaping(){return this.#u=!0,this}setIndexBuilder(t){return this.#s=t,this}setVersion(t){return t!=null&&(this.#p=t),this}setTable(t){return this.#e.equal.tableId=t,this}setLimit(t){return t!=null&&(this.#r=t),this}setSort(t){return t!=null&&(this.#n=t),this}setSortOrder(t){return t!=null&&(this.#a=t),this}setSortType(t){return t!=null&&(this.#o=t),this}setBookmark(t){return t!=null&&(this.#i=t),this}setSkip(t){return this.#c=t,this}excludeDocs(){return this.#t=!1,this}includeDocs(){return this.#t=!0,this}addString(t,r){return this.#e.string[t]=r,this}addFuzzy(t,r){return this.#e.fuzzy[t]=r,this}addRange(t,r,n){return this.#e.range[t]={low:r,high:n},this}addEqual(t,r){return this.#e.equal[t]=r,this}addNotEqual(t,r){return this.#e.notEqual[t]=r,this}addEmpty(t,r){return this.#e.empty[t]=r,this}addNotEmpty(t,r){return this.#e.notEmpty[t]=r,this}addOneOf(t,r){return this.#e.oneOf[t]=r,this}addContains(t,r){return this.#e.contains[t]=r,this}addNotContains(t,r){return this.#e.notContains[t]=r,this}addContainsAny(t,r){return this.#e.containsAny[t]=r,this}setAllOr(){this.#e.allOr=!0}setOnEmptyFilter(t){this.#e.onEmptyFilter=t}handleSpaces(t){return this.#u?t:t.replace(/ /g,"_")}preprocess(t,{escape:r,lowercase:n,wrap:i,type:o}={}){let s=!!this.#p,u=typeof t;return t&&n&&(t=t.toLowerCase?t.toLowerCase():t),!this.#u&&r&&u==="string"&&(t=`${t}`.replace(/[ /#+\-&|!(){}\]^"~*?:\\]/g,"\\$&")),u==="string"&&!isNaN(t)&&!o?t=`"${t}"`:s&&i&&(t=u==="number"?t:`"${t}"`),t}isMultiCondition(){let t=0;for(let r of Object.values(this.#e))typeof r=="object"&&(t+=Object.keys(r).length);return t>1}compressFilters(t){let r={};for(let o of Object.keys(t)){let s=Lx(o);r[s]?r[s]=r[s].concat(t[o]):r[s]=t[o]}let n={},i=1;for(let[o,s]of Object.entries(r))n[`${i++}:${o}`]=s;return n}buildSearchQuery(){let t=this,r=this.#e&&this.#e.allOr,n=r?"":"*:*",i=!0,o={escape:!0,lowercase:!0,wrap:!0},s="";this.#e.equal.tableId&&(s=this.#e.equal.tableId,delete this.#e.equal.tableId);let u=a((m,g)=>bg(g)?null:`${m}:${t.preprocess(g,o)}`,"equal"),c=a((m,g,y="AND")=>{if(bg(g))return null;if(!Array.isArray(g))return`${m}:${g}`;let b=`${t.preprocess(g[0],{escape:!0})}`;for(let v=1;v<g.length;v++)b+=` ${y} ${t.preprocess(g[v],{escape:!0})}`;return`${m}:(${b})`},"contains"),l=a((m,g)=>bg(g)?null:(g=t.preprocess(g,{escape:!0,lowercase:!0,type:"fuzzy"}),`${m}:/.*${g}.*/`),"fuzzy"),f=a((m,g)=>{let y=r?"*:* AND ":"",b=r?"AND":void 0;return y+"NOT "+c(m,g,b)},"notContains"),p=a((m,g)=>c(m,g,"OR"),"containsAny"),d=a((m,g)=>{if(bg(g))return"*:*";if(!Array.isArray(g))if(typeof g=="string")g=g.split(",");else return"";let y=`${t.preprocess(g[0],o)}`;for(let b=1;b<g.length;b++)y+=` OR ${t.preprocess(g[b],o)}`;return`${m}:(${y})`},"oneOf");function h(m,g,y){let b="";for(let[v,w]of Object.entries(m)){v=Lx(v),v=t.preprocess(t.handleSpaces(v),{escape:!0});let x=g(v,w);if(x!=null){if(b.length>0||n.length>0){let T=y?.mode?y.mode:r?"OR":"AND";b+=` ${T} `}b+=x,(typeof w!="string"&&w!=null||typeof w=="string"&&w!==s&&w!=="")&&(i=!1)}}if(y?.returnBuilt)return b;n+=b}if(a(h,"build"),this.#e.string&&h(this.#e.string,(m,g)=>bg(g)?null:(g=t.preprocess(g,{escape:!0,lowercase:!0,type:"string"}),`${m}:${g}*`)),this.#e.range&&h(this.#e.range,(m,g)=>{if(bg(g)||g.low==null||g.low===""||g.high==null||g.high==="")return null;let y=t.preprocess(g.low,o),b=t.preprocess(g.high,o);return`${m}:[${y} TO ${b}]`}),this.#e.fuzzy&&h(this.#e.fuzzy,l),this.#e.equal&&h(this.#e.equal,u),this.#e.notEqual&&h(this.#e.notEqual,(m,g)=>bg(g)?null:typeof g=="boolean"?`(*:* AND !${m}:${g})`:`!${m}:${t.preprocess(g,o)}`),this.#e.empty&&h(this.#e.empty,m=>(i=!1,`(*:* -${m}:["" TO *])`)),this.#e.notEmpty&&h(this.#e.notEmpty,m=>(i=!1,`${m}:["" TO *]`)),this.#e.oneOf&&h(this.#e.oneOf,d),this.#e.contains&&h(this.#e.contains,c),this.#e.notContains&&h(this.compressFilters(this.#e.notContains),f),this.#e.containsAny&&h(this.#e.containsAny,p),s&&(n=this.isMultiCondition()?`(${n})`:n,r=!1,h({tableId:s},u)),i){if(this.#e.onEmptyFilter==="none")return"";if(this.#e?.allOr)return n.replace("()","(*:*)")}return n}buildSearchBody(){let t={q:this.buildSearchQuery(),limit:Math.min(this.#r,e.maxLimit),include_docs:this.#t};if(this.#i&&(t.bookmark=this.#i),this.#n){let r=this.#a==="descending"?"-":"",n=`<${this.#o}>`;t.sort=`${r}${this.handleSpaces(this.#n)}${n}`}return t}async run(){return this.#c&&await this.#h(this.#c),await this.#d()}async#h(t){let r=this.#t,n=this.#r;this.excludeDocs();let i=t,o=0;do{let s=Math.min(e.maxLimit,i);this.setLimit(s);let{bookmark:u,rows:c}=await this.#d();this.setBookmark(u),o=c.length,i-=c.length}while(i>0&&o>0);this.#t=r,this.#r=n}async#d(){let{url:t,cookie:r}=vc(),n=`${t}/${this.#l}/_design/database/_search/${this.#f}`,i=this.buildSearchBody();try{return await nve(n,i,r)}catch(o){if(o.status===404&&this.#s)return await this.#s(),await nve(n,i,r);throw o}}};async function nve(e,t,r){let n=await(0,ive.default)(e,{body:JSON.stringify(t),method:"POST",headers:{Authorization:r}});if(n.status===404)throw n;let i=await n.json(),o={rows:[],totalRows:0};return i.rows!=null&&i.rows.length>0&&(o.rows=i.rows.map(s=>s.doc)),i.bookmark&&(o.bookmark=i.bookmark),i.total_rows&&(o.totalRows=i.total_rows),o}a(nve,"runQuery");async function ave(e,t,r,n){let i=n.bookmark,o=n.rows||[];if(n.limit&&o.length>=n.limit)return o;let s=ep.maxLimit;n.limit&&o.length>n.limit-ep.maxLimit&&(s=n.limit-o.length);let u=new ep(e,t,r);u.setVersion(n.version).setBookmark(i).setLimit(s).setSort(n.sort).setSortOrder(n.sortOrder).setSortType(n.sortType),n.tableId&&u.setTable(n.tableId);let c=await u.run();if(!c.rows.length)return o;if(c.rows.length<ep.maxLimit)return[...o,...c.rows];let l={...n,bookmark:c.bookmark,rows:[...o,...c.rows]};return await ave(e,t,r,l)}a(ave,"recursiveSearch");async function sxt(e,t,r,n){let i=n.limit;(i==null||isNaN(i)||i<0)&&(i=50),i=Math.min(i,ep.maxLimit);let o=new ep(e,t,r);n.version&&o.setVersion(n.version),n.tableId&&o.setTable(n.tableId),n.sort&&o.setSort(n.sort).setSortOrder(n.sortOrder).setSortType(n.sortType),n.indexer&&o.setIndexBuilder(n.indexer),n.disableEscaping&&o.disableEscaping();let s=await o.setBookmark(n.bookmark).setLimit(i).run();o.setBookmark(s.bookmark).setLimit(1),n.tableId&&o.setTable(n.tableId);let u=await o.run();return{...s,hasNextPage:u.rows&&u.rows.length>0}}a(sxt,"paginatedSearch");async function uxt(e,t,r,n){let i=n.limit;return(i==null||isNaN(i)||i<0)&&(i=1e3),n.limit=Math.min(i,1e3),{rows:await ave(e,t,r,n)}}a(uxt,"fullSearch");var vz={};oe(vz,{createUserIndex:()=>cxt});async function cxt(){let e=Rr(),t;try{t=await e.get("_design/database")}catch(n){n.status===404&&(t={_id:"_design/database"})}let r=a(function(n){if(n._id&&!n._id.startsWith("us_"))return;let i=["_id","_rev","password","account","license","budibaseAccess","accountPortalAccess","csrfToken"];function o(s,u){for(let c of Object.keys(s)){if(i.includes(c))continue;let l=u!=null?`${u}.${c}`:c;typeof s[c]=="string"?index(l,s[c].toLowerCase(),{facet:!0}):typeof s[c]!="object"?index(l,s[c],{facet:!0}):o(s[c],l)}}a(o,"idx"),o(n)},"fn");t.indexes={user:{index:r.toString(),analyzer:{default:"keyword",name:"perfield"}}},await e.put(t)}a(cxt,"createUserIndex");function ove(e,t){let r=t.toString();if(typeof e=="object")return e.status===t||e.message?.includes(r);if(typeof e=="number")return e===t;if(typeof e=="string")return e.includes(r)}a(ove,"checkErrorCode");function lxt(e){return ove(e,409)}a(lxt,"isDocumentConflictError");var Ux={};oe(Ux,{addTenantToUrl:()=>fxt,getTenantDB:()=>wz,getTenantIDFromCtx:()=>Fx,isUserInWorkspaceTenant:()=>pxt});function wz(e){return Po(dg(e))}a(wz,"getTenantDB");function fxt(e){let t=Pt();if(Hd()){let r=e.indexOf("?")===-1?"?":"&";e+=`${r}tenantId=${t}`}return e}a(fxt,"addTenantToUrl");var pxt=a((e,t)=>{let r;return t?r=t.tenantId||di:r=Pt(),(Qv(e)||di)===r},"isUserInWorkspaceTenant"),dxt=Object.values(yS),Fx=a((e,t)=>{if(!Hd())return di;t.allowNoTenant===void 0&&(t.allowNoTenant=!1),t.includeStrategies||(t.includeStrategies=dxt),t.excludeStrategies||(t.excludeStrategies=[]);let r=a(n=>{if(t.excludeStrategies?.includes(n))return!1;if(t.includeStrategies?.includes(n))return!0},"isAllowed");if(r("user")){let n=e.user?.tenantId;if(n)return n}if(r("header")){let n=e.request.headers["x-budibase-tenant-id"];if(n)return n}if(r("query")){let n=e.request.query.tenantId;if(n)return n}if(r("subdomain")){let n;try{n=new URL(Q5()).host.split(":")[0]}catch(o){if(o.code!=="ERR_INVALID_URL")throw o}let i=e.host;if(n&&i.includes(n)){let o=i.substring(0,i.indexOf(`.${n}`));if(o)return o}}if(r("path")){let n=e.matched.find(s=>!!s.paramNames.find(u=>u.name==="tenantId")),i=e.originalUrl,o;if(i.includes("?")?o=i.split("?")[0]:o=i,n){let s=n.params(o,n.captures(o),{});if(s.tenantId)return s.tenantId}}t.allowNoTenant||e.throw(403,"Tenant id not set")},"getTenantIDFromCtx");var Ez="app"+Fe,sve="/app/";async function hxt(e){let r=`/${e.path.split("/")[2].toLowerCase()}`,n=Pt();!K.isDev()&&K.MULTI_TENANCY&&(n=Fx(e,{includeStrategies:["subdomain"]}));let o=(await es(n,()=>Dx({dev:!1}))).filter(s=>s.url&&s.url.toLowerCase()===r)[0];return o&&o.appId?o.appId:void 0}a(hxt,"resolveAppUrl");function mxt(e){return e.path.startsWith(`/${Ez}`)?!0:e.path.startsWith(sve)}a(mxt,"isServingApp");function gxt(e){return e.path.startsWith("/builder/workspace/")}a(gxt,"isServingBuilder");function yxt(e){return uve(e.path)}a(yxt,"isServingBuilderPreview");function uve(e){return new RegExp(/^\/app\/app_\w+\/preview$/).test(e)}a(uve,"isBuilderPreviewUrl");function bxt(e){return e.path.startsWith("/api/public/v")}a(bxt,"isPublicApiRequest");async function vg(e){let t;function r(u){u&&u.startsWith(Ez)&&(t&&t!==u&&e.throw("App id conflict",403),t=u)}a(r,"setWorkspaceIdIfValid");function n(u){if(u){typeof u=="string"&&(u=[u]);for(let c of u)r(c)}}a(n,"checkPossibleValues"),n(e.request.headers["x-budibase-app-id"]),r(e.request.body?.appId);let i=vxt(e.path);r(i),n(e.query?.appId);let o=uve(e.path);return e.path.startsWith(sve)&&!o&&r(await hxt(e)),t}a(vg,"getWorkspaceIdFromCtx");function vxt(e){if(e)return e.split("?")[0].split("/").find(t=>t.startsWith(Ez))}a(vxt,"parseWorkspaceIdFromUrlPath");function P1(e){if(e)try{return D1.default.verify(e,K.JWT_SECRET)}catch(t){if(K.JWT_SECRET_FALLBACK)return D1.default.verify(e,K.JWT_SECRET_FALLBACK);throw t}}a(P1,"openJwt");function Mx(e){return K.INTERNAL_API_KEY&&K.INTERNAL_API_KEY===e?!0:!!(K.INTERNAL_API_KEY_FALLBACK&&K.INTERNAL_API_KEY_FALLBACK===e)}a(Mx,"isValidInternalAPIKey");function tp(e,t){let r=e.cookies.get(t);if(r)return P1(r)}a(tp,"getCookie");function cve(e,t,r="builder",n={sign:!0}){t&&n&&n.sign&&(t=D1.default.sign(t,K.JWT_SECRET));let i={expires:$4,path:"/",httpOnly:!1,overwrite:!0};K.COOKIE_DOMAIN&&(i.domain=K.COOKIE_DOMAIN),e.cookies.set(r,t,i)}a(cve,"setCookie");function Kd(e,t){cve(e,null,t)}a(Kd,"clearCookie");function wxt(e){return e.headers["x-budibase-type"]==="client"}a(wxt,"isClient");function _z(e){return new Promise(t=>setTimeout(t,e))}a(_z,"timeout");function Sz(e){return!!Bb[e]}a(Sz,"isAudited");function Ext(e){if(typeof e!="object")return!1;try{JSON.stringify(e)}catch(t){if(t instanceof Error&&t?.message.includes("circular structure"))return!0}return!1}a(Ext,"hasCircularStructure");function _xt(e){return!!e.match(/^.+:\/\/.+$/)}a(_xt,"urlHasProtocol");function xz(e){return e&&!!e.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,}))$/)}a(xz,"validEmail");var lve=(o=>(o.MILLISECONDS="milliseconds",o.SECONDS="seconds",o.MINUTES="minutes",o.HOURS="hours",o.DAYS="days",o))(lve||{}),N1={milliseconds:1,seconds:1e3,minutes:6e4,hours:36e5,days:864e5},gi=class e{constructor(t){this.ms=t}static{a(this,"Duration")}to(t){return this.ms/N1[t]}toMs(){return this.ms}toSeconds(){return this.to("seconds")}static convert(t,r,n){return n*N1[t]/N1[r]}static from(t,r){return new e(r*N1[t])}static fromSeconds(t){return e.from("seconds",t)}static fromMinutes(t){return e.from("minutes",t)}static fromHours(t){return e.from("hours",t)}static fromDays(t){return e.from("days",t)}static fromMilliseconds(t){return e.from("milliseconds",t)}};async function Sxt(e){let t=performance.now();return[await e(),gi.fromMilliseconds(performance.now()-t)]}a(Sxt,"time");var pve=require("undici");function fve(e){let t=process.env.GLOBAL_AGENT_HTTP_PROXY||process.env.HTTP_PROXY,n=process.env.GLOBAL_AGENT_HTTPS_PROXY||process.env.HTTPS_PROXY||t;if(!n||!n.trim())return!1;let i=n.trim();try{new URL(i)}catch{return console.log("[fetch] Invalid proxy URL format:",n),!1}let o=e?.rejectUnauthorized!==void 0?e?.rejectUnauthorized:!0;console.log("[fetch] Creating ProxyAgent",{proxyUrl:i,rejectUnauthorized:o});let s={uri:i,requestTls:{rejectUnauthorized:o}};i.startsWith("https://")&&(s.proxyTls={rejectUnauthorized:o});try{return new pve.ProxyAgent(s)}catch(u){return console.log("[fetch] Failed to create ProxyAgent:",u),!1}}a(fve,"createProxyDispatcher");var L1=null;function xxt(e){return e?fve(e)||!1:(L1===null&&(L1=fve()),L1||!1)}a(xxt,"getProxyDispatcher");function Txt(){L1=null}a(Txt,"resetProxyDispatcherCache");function Axt(e){let t="",r=-1,n,i,o=e.opts?.repeat;return o&&(i=o.endDate?new Date(o.endDate).getTime():Date.now(),n=o.tz,"cron"in o?t=o.cron:r=o.every),{id:e.id.toString(),name:"",key:e.id.toString(),tz:n,endDate:i,cron:t,every:r,next:0}}a(Axt,"jobToJobInformation");var F1=class{static{a(this,"InMemoryQueue")}constructor(t,r){this._name=t,this._opts=r,this._messages=[],this._emitter=new dve.default.EventEmitter,this._runCount=0,this._addCount=0,this._queuedJobIds=new Set,this._attempts=r?.defaultJobOptions?.attempts||1}async process(t,r){r=typeof t=="number"?r:t,this._emitter.on("message",async n=>{if(!n.manualTrigger&&n.opts?.repeat!=null)return;function i(){return r.length===1?r(n):new Promise((c,l)=>{r(n,a((p,d)=>{p?l(p):c(d)},"done"))})}a(i,"execute");let o=this._attempts;async function s(c,l=0){try{return await c}catch(f){if(l++,l<o&&!n._isDiscarded)return await Ye.wait(100*l),await s(i(),l);throw f}}a(s,"retryFunc");try{let c=await s(i());this._emitter.emit("completed",n,c);let l=this._messages.indexOf(n);if(l===-1)throw"Failed deleting a processed message";this._messages.splice(l,1)}catch(c){console.error(c),this._emitter.emit("error",n,c)}this._runCount++;let u=n.opts?.jobId?.toString();u&&n.opts?.removeOnComplete&&this._queuedJobIds.delete(u)})}async isReady(){return this}async add(t,r){if(typeof t=="string")throw new Error("doesn't support named jobs");let n=r,i=n?.jobId?.toString();if(i&&this._queuedJobIds.has(i)){console.log(`Ignoring already queued job ${i}`);return}if(typeof t!="object")throw"Queue only supports carrying JSON.";i&&this._queuedJobIds.add(i);let o=cn(),s=a(()=>{let c={id:o,timestamp:Date.now(),queue:this,data:t,opts:n,discard:async()=>{c._isDiscarded=!0}};this._messages.push(c),this._messages.length>1e3&&this._messages.shift(),this._addCount++,this._emitter.emit("message",c)},"pushMessage"),u=n?.delay;return u?setTimeout(s,u):s(),{id:i,finished:()=>new Promise((c,l)=>{let f=a((d,h)=>{d.id===o&&(this._emitter.off("error",f),this._emitter.off("completed",p),l(h))},"errorHandler"),p=a((d,h)=>{d.id===o&&(this._emitter.off("error",f),this._emitter.off("completed",p),c(h))},"completedHandler");this._emitter.on("error",f),this._emitter.on("completed",p)})}}async close(){}async removeRepeatableByKey(t){for(let[r,n]of this._messages.entries())if(n.id===t){this._messages.splice(r,1),this._emitter.emit("removed",n);return}}async removeJobs(t){}async clean(){return[]}async getJob(t){for(let r of this._messages)if(r.id===t)return r;return null}manualTrigger(t){for(let r of this._messages)if(r.id===t){this._emitter.emit("message",{...r,manualTrigger:!0});return}throw new Error(`Job with id ${t} not found`)}on(t,r){return this._emitter.on(t,r),this}off(t,r){return this._emitter.off(t,r),this}async count(){return this._messages.length}async getCompletedCount(){return this._runCount}async getRepeatableJobs(){return this._messages.filter(t=>t.opts?.repeat!=null).map(t=>Axt(t))}async whenCurrentJobsFinished(){do await _z(50);while(this.hasRunningJobs())}hasRunningJobs(){return this._addCount>this._runCount}},hve=F1;var Az=ne(require("bull"));var ew=(c=>(c.AUTOMATION="automationQueue",c.APP_BACKUP="appBackupQueue",c.AUDIT_LOG="auditLogQueue",c.SYSTEM_EVENT_QUEUE="systemEventQueue",c.APP_MIGRATION="appMigration",c.DOC_WRITETHROUGH_QUEUE="docWritethroughQueue",c.DEV_REVERT_PROCESSOR="devRevertProcessorQueue",c.BATCH_USER_SYNC_PROCESSOR="batchUserSyncProcessorQueue",c))(ew||{});function mve(e,t,r){Ixt(e,t),r&&Rxt(e,r)}a(mve,"addListeners");function Rxt(e,t){e.on("stalled",async r=>{if(t)await t(r);else if(r.opts.repeat){let n=r.id,i=await e.getRepeatableJobs();for(let o of i)o.id===n&&await e.removeRepeatableByKey(o.key);console.log(`jobId=${n} disabled`)}})}a(Rxt,"handleStalled");function _u(e,t,r={},n={}){let i=`[BULL] ${e}=${t}`,o=r.error,s={_logKey:"bull",eventType:e,event:t,job:r.job,jobId:r.jobId||r.job?.id,...n},u;return r.job?.data?.automation&&(u={_logKey:"automation",trigger:r.job?r.job.data.automation.definition.trigger.event:void 0}),[i,o,s,u]}a(_u,"getLogParams");var Oxt={automationQueue:"automation-event",appBackupQueue:"app-backup-event",auditLogQueue:"audit-log-event",systemEventQueue:"system-event",appMigration:"app-migration",docWritethroughQueue:"doc-writethrough",devRevertProcessorQueue:"dev-revert-event",batchUserSyncProcessorQueue:"batch-user-sync-processor"};function Ixt(e,t){let r=Oxt[t];function n(i,o){let s=i.data.event?.appId;if(s)return Y5(s,o);o()}a(n,"doInJobContext"),e.on("stalled",async i=>{await n(i,()=>{console.error(..._u(r,"stalled",{job:i}))})}).on("error",i=>{console.error(..._u(r,"error",{error:i}))}),process.env.NODE_DEBUG?.includes("bull")&&e.on("waiting",i=>{console.info(..._u(r,"waiting",{jobId:i}))}).on("active",async i=>{await n(i,()=>{console.info(..._u(r,"active",{job:i}))})}).on("progress",async(i,o)=>{await n(i,()=>{console.info(..._u(r,"progress",{job:i},{progress:o}))})}).on("completed",async(i,o)=>{await n(i,()=>{console.info(..._u(r,"completed",{job:i},{result:o}))})}).on("failed",async(i,o)=>{await n(i,()=>{console.error(..._u(r,"failed",{job:i,error:o}))})}).on("paused",()=>{console.info(..._u(r,"paused"))}).on("resumed",()=>{console.info(..._u(r,"resumed"))}).on("cleaned",(i,o)=>{console.info(..._u(r,"cleaned",{},{length:i.length,type:o}))}).on("drained",()=>{console.info(..._u(r,"drained"))}).on("removed",i=>{console.info(..._u(r,"removed",{job:i}))})}a(Ixt,"logging");var Tz=[];function gve(e,t){let r=setInterval(e,t);return Tz.push(r),r}a(gve,"set");function yve(e){let t=Tz.indexOf(e);t!==-1&&Tz.splice(t,1),clearInterval(e)}a(yve,"clear");var rp=ne(require("dd-trace")),jx=ne(require("object-sizeof"));var kxt=gi.fromMinutes(5).toMs(),Cxt=gi.fromSeconds(30).toMs(),Rz=gi.fromSeconds(60).toMs(),Bx=[],U1;async function vve(){for(let e of Bx)await e.clean(Rz,"completed"),await e.clean(Rz,"failed")}a(vve,"cleanup");async function Dxt(e,t,r){let n=performance.now();try{let i=await t();return rp.default.dogstatsd.increment(`${e}.success`,1,r),i}catch(i){throw rp.default.dogstatsd.increment(`${e}.error`,1,r),i}finally{let i=performance.now()-n;rp.default.dogstatsd.distribution(`${e}.duration.ms`,i,r),rp.default.dogstatsd.increment(e,1,r)}}a(Dxt,"withMetrics");function wve(e){return{"job.opts.attempts":e.attempts,"job.opts.backoff":e.backoff,"job.opts.delay":e.delay,"job.opts.jobId":e.jobId,"job.opts.lifo":e.lifo,"job.opts.preventParsingData":e.preventParsingData,"job.opts.priority":e.priority,"job.opts.removeOnComplete":e.removeOnComplete,"job.opts.removeOnFail":e.removeOnFail,"job.opts.repeat":e.repeat,"job.opts.stackTraceLimit":e.stackTraceLimit,"job.opts.timeout":e.timeout}}a(wve,"jobOptsTags");function Pxt(e){return{"job.id":e.id,"job.attemptsMade":e.attemptsMade,"job.timestamp":e.timestamp,"job.data.sizeBytes":(0,jx.default)(e.data),...wve(e.opts||{})}}a(Pxt,"jobTags");var Ac=class{static{a(this,"BudibaseQueue")}constructor(t,r={}){this.opts=r,this.jobQueue=t,this.queue=this.initQueue()}get name(){return this.queue.name}initQueue(){let r={redis:Vm(),settings:{maxStalledCount:this.opts.maxStalledCount?this.opts.maxStalledCount:0,lockDuration:kxt,lockRenewTime:Cxt}};this.opts.jobOptions&&(r.defaultJobOptions=this.opts.jobOptions);let n;return K.isTest()?process.env.BULL_TEST_REDIS_PORT&&!isNaN(+process.env.BULL_TEST_REDIS_PORT)?n=new Az.default(this.jobQueue,{...r,redis:{host:"localhost",port:+process.env.BULL_TEST_REDIS_PORT}}):n=new hve(this.jobQueue,r):n=new Az.default(this.jobQueue,r),mve(n,this.jobQueue,this.opts.removeStalledCb),Bx.push(n),!U1&&!K.isTest()&&(U1=gve(vve,Rz),vve().catch(i=>{console.error(`Unable to cleanup ${this.jobQueue} initially - ${i}`)})),n}getBullQueue(){return this.queue}process(...t){let r,n;t.length===2?(r=t[0],n=t[1]):n=t[0];let i=a(async(s,u)=>{await rp.default.trace("queue.process",async c=>{if(s.data._parentSpanContext){let l=s.data._parentSpanContext,f={traceId:l.traceId,spanId:l.spanId,toTraceId:()=>l.traceId,toSpanId:()=>l.spanId,toTraceparent:()=>""};c.addLink(f)}c.addTags({"queue.name":this.jobQueue,...Pxt(s)}),this.opts.jobTags&&c.addTags(this.opts.jobTags(s.data)),rp.default.dogstatsd.distribution("queue.process.sizeBytes",(0,jx.default)(s.data),this.metricTags()),await this.withMetrics("queue.process",()=>u?n(s,u):n(s))})},"processCallback"),o;return n.length===1?o=a(s=>i(s),"wrappedCb"):o=i,r?this.queue.process(r,o):this.queue.process(o)}async add(t,r){return await rp.default.trace("queue.add",async n=>(n.addTags({"queue.name":this.jobQueue,"job.data.sizeBytes":(0,jx.default)(t),...wve(r||{})}),this.opts.jobTags&&n.addTags(this.opts.jobTags(t)),t._parentSpanContext={traceId:n.context().toTraceId(),spanId:n.context().toSpanId()},rp.default.dogstatsd.distribution("queue.add.sizeBytes",(0,jx.default)(t),this.metricTags()),await this.withMetrics("queue.add",()=>this.queue.add(t,r))))}withMetrics(t,r){return Dxt(t,r,this.metricTags())}metricTags(){return{queueName:this.jobQueue}}close(t){return this.queue.close(t)}whenCurrentJobsFinished(){return this.queue.whenCurrentJobsFinished()}};async function Nxt(){U1&&yve(U1),console.log("Waiting for current queue jobs to finish...");for(let e of Bx)await e.whenCurrentJobsFinished();console.log("Closing queue Redis connections...");for(let e of Bx)await e.close();Bx=[],console.log("Queues shutdown")}a(Nxt,"shutdown");var kt={};oe(kt,{correlation:()=>qx,logAlert:()=>iy,logAlertWithInfo:()=>X8t,logWarn:()=>Hw,logger:()=>KN,system:()=>y9});var qx={};oe(qx,{getId:()=>Iz,setHeader:()=>qxt});var Sve=M1(),qxt=a(e=>{let t=Sve.getId();t&&(e["x-budibase-correlation-id"]=t)},"setHeader");function Iz(){return Sve.getId()}a(Iz,"getId");var VN=ne(OEe()),UDe=ne(xH()),b9=ne(require("dd-trace")),MDe=require("dd-trace/ext");var y9={};oe(y9,{getLogReadStream:()=>H8t,getSingleFileMaxSizeInfo:()=>FDe,localFileDestination:()=>g9});var YT=ne(require("fs")),m9=ne(require("path")),DDe=ne(GRe());var gt={};oe(gt,{ObjectStore:()=>Cu,ObjectStoreBuckets:()=>HWt,SIGNED_FILE_PREFIX:()=>o9,bucketTTLConfig:()=>BN,budibaseTempDir:()=>ry,client3rdPartyLibrary:()=>j8t,clientLibraryPath:()=>M8t,clientLibraryUrl:()=>B8t,createBucketIfNotExists:()=>KT,deleteFile:()=>l8t,deleteFiles:()=>f8t,deleteFolder:()=>yDe,downloadTarball:()=>d8t,downloadTarballDirect:()=>p8t,enrichPWAImages:()=>q8t,enrichPluginURLs:()=>z8t,extractBucketAndPath:()=>e9,getAllFiles:()=>s8t,getAppFileUrl:()=>xDe,getClientCacheKey:()=>SDe,getGlobalFileS3Key:()=>TDe,getGlobalFileUrl:()=>$8t,getObjectMetadata:()=>h8t,getPluginIconKey:()=>ODe,getPluginJSKey:()=>RDe,getPluginS3Dir:()=>kDe,getPresignedUrl:()=>ny,getReadStream:()=>qN,listAllObjects:()=>s9,objectExists:()=>m8t,processAutomationAttachment:()=>KWt,processObjectStoreAttachment:()=>aDe,retrieve:()=>gDe,retrieveDirectory:()=>c8t,retrieveToTmp:()=>u8t,sanitizeBucket:()=>Uo,sanitizeKey:()=>qi,streamUpload:()=>mDe,streamUploadMany:()=>o8t,upload:()=>a8t,uploadDirectory:()=>u9});var zN=require("@aws-sdk/client-s3"),t9=ne(f1e()),pDe=require("@aws-sdk/s3-request-presigner");var yp=ne(require("dd-trace")),Ww=ne(require("fs")),HT=ne(require("fs/promises")),r9=ne(require("node-fetch")),dh=require("path"),WN=ne(require("stream")),VT=require("stream/promises"),n9=ne(eDe()),i9=require("uuid"),a9=ne(require("zlib"));var tDe=ne(require("fs")),rDe=require("os"),GT=ne(require("path")),nDe=ne(require("stream"));var HWt={BACKUPS:K.BACKUPS_BUCKET_NAME,APPS:K.APPS_BUCKET_NAME,TEMPLATES:K.TEMPLATES_BUCKET_NAME,GLOBAL:K.GLOBAL_BUCKET_NAME,PLUGINS:K.PLUGIN_BUCKET_NAME,TEMP:K.TEMP_BUCKET_NAME},iDe=(0,GT.join)((0,rDe.tmpdir)(),".budibase");try{tDe.default.mkdirSync(iDe)}catch(e){if(e.code!=="EEXIST")throw e}function ry(){return iDe}a(ry,"budibaseTempDir");var BN=a((e,t)=>{let n={Rules:[{ID:`${e}-ExpireAfter${t}days`,Prefix:"",Status:"Enabled",Expiration:{Days:t}}]};return{Bucket:e,LifecycleConfiguration:n}},"bucketTTLConfig");async function VWt(e){let t=await fetch(e.url);if(!t.ok||!t.body)throw new Error(`Unexpected response ${t.statusText}`);let r=GT.default.basename(new URL(e.url).pathname);if(!t.body)throw new Error("No response received for attachment");return{filename:e.filename||r,content:nDe.default.Readable.fromWeb(t.body)}}a(VWt,"processUrlAttachment");async function aDe(e){let t=e9(e.url);if(t===null)throw new Error("Invalid signed URL");let{bucket:r,path:n}=t,{stream:i}=await qN(r,n),o=GT.default.basename(n);return{bucket:r,path:n,filename:e.filename||o,content:i}}a(aDe,"processObjectStoreAttachment");async function KWt(e){return e.url?.startsWith("http://")||e.url?.startsWith("https://")?await VWt(e):await aDe(e)}a(KWt,"processAutomationAttachment");var t8t=fDe(),r8t={bucketCreationPromises:{}},o9="/files/signed",ph={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"},n8t=[ph.html,ph.css,ph.js,ph.json];function qi(e){return t8t(Uo(e)).replace(/\\/g,"/")}a(qi,"sanitizeKey");function Uo(e){return e.replace(new RegExp(bc,"g"),yc)}a(Uo,"sanitizeBucket");function Cu(e={presigning:!1}){let t={forcePathStyle:!0,credentials:{accessKeyId:K.MINIO_ACCESS_KEY,secretAccessKey:K.MINIO_SECRET_KEY},region:K.AWS_REGION};return!K.MINIO_ENABLED&&K.AWS_SESSION_TOKEN&&(t.credentials={accessKeyId:K.MINIO_ACCESS_KEY,secretAccessKey:K.MINIO_SECRET_KEY,sessionToken:K.AWS_SESSION_TOKEN}),K.MINIO_URL&&(e.presigning&&K.MINIO_ENABLED?t.endpoint="http://minio-service":t.endpoint=K.MINIO_URL),new zN.S3(t)}a(Cu,"ObjectStore");async function KT(e,t){t=Uo(t);try{return await e.headBucket({Bucket:t}),{created:!1,exists:!0}}catch(r){let n=r.statusCode||r.$response?.statusCode,i=r8t.bucketCreationPromises,o=n===404,s=n===403;if(i[t])return await i[t],{created:!1,exists:!0};if(o||s){if(o)return i[t]=e.createBucket({Bucket:t}).catch(u=>{if(u.Code!=="BucketAlreadyOwnedByYou")throw u}),await i[t],delete i[t],{created:!0,exists:!1};throw new Error("Access denied to object store bucket."+r)}else throw new Error("Unable to write to object store bucket.")}}a(KT,"createBucketIfNotExists");var i8t=a((e,t)=>{if(t)return t;let r=e.split(".").pop();return r?ph[r.toLowerCase()]:ph.txt},"resolveContentType"),dDe=a(async(e,t,r)=>{let n=Uo(e),i=Cu(),o=await KT(i,n);if(r.addTags({bucketCreated:o.created,bucketExists:o.exists}),t&&o.created){let s=BN(n,t);await i.putBucketLifecycleConfiguration(s)}return{bucket:n,client:i,bucketCreated:o}},"initialiseBucket"),hDe=a(async({client:e,bucket:t,filename:r,stream:n,type:i,extra:o})=>{if(!n)throw new Error("Stream to upload is invalid/undefined");let s=i8t(r,i),u=qi(r),c={Bucket:t,Key:u,Body:n,ContentType:s,...o??{}};return{details:await new t9.Upload({client:e,params:c}).done(),contentType:s}},"streamUploadInternal");async function a8t({bucket:e,filename:t,path:r,type:n,metadata:i,body:o,ttl:s}){let u=t.split(".").pop(),c=r?(await HT.default.open(r)).createReadStream():o,l=Cu(),f=await KT(l,e);if(s&&f.created){let g=BN(e,s);await l.putBucketLifecycleConfiguration(g)}let p=n,d=p||(u?ph[u.toLowerCase()]:ph.txt),h={Bucket:Uo(e),Key:qi(t),Body:c,ContentType:d};if(i&&typeof i=="object"){for(let g of Object.keys(i))(!i[g]||typeof i[g]!="string")&&delete i[g];h.Metadata=i}return new t9.Upload({client:l,params:h}).done()}a(a8t,"upload");async function mDe({bucket:e,stream:t,filename:r,type:n,extra:i,ttl:o}){return await yp.default.trace("streamUpload",async s=>{s.addTags({bucketName:e,filename:r,type:n,ttl:o});let u=r.split(".").pop();s.addTags({extension:u});let{bucket:c,client:l}=await dDe(e,o,s),{details:f,contentType:p}=await hDe({client:l,bucket:c,filename:r,stream:t,type:n,extra:i}),d=await l.headObject({Bucket:c,Key:qi(r)});return s.addTags({contentType:p,contentLength:d.ContentLength}),{...f,ContentLength:d.ContentLength}})}a(mDe,"streamUpload");async function o8t({bucket:e,files:t,ttl:r}){return await yp.default.trace("streamUploadMany",async i=>{if(i.addTags({bucketName:e,ttl:r,fileCount:t.length}),!t.length)return[];let{bucket:o,client:s}=await dDe(e,r,i),u=t.map((l,f)=>({...l,index:f})),c=new Array(t.length);return await Mt.parallelForeach(u,async l=>{let{details:f}=await hDe({client:s,bucket:o,filename:l.filename,stream:l.stream,type:l.type,extra:l.extra});c[l.index]=f},10),c})}a(o8t,"streamUploadMany");async function gDe(e,t){return await yp.default.trace("retrieve",async r=>{r.addTags({bucketName:e,filepath:t});let n=Cu(),i={Bucket:Uo(e),Key:qi(t)},o=await n.getObject(i);if(!o.Body)throw new Error("Unable to retrieve object");if(r.addTags({contentLength:o.ContentLength,contentType:o.ContentType}),n8t.includes(o.ContentType))return r.addTags({string:!0}),o.Body.transformToString();{r.addTags({string:!1});let s=o.Body.transformToWebStream();return WN.default.Readable.fromWeb(s)}})}a(gDe,"retrieve");async function*s9(e,t){let r=Cu(),n=a((s={})=>r.listObjectsV2({...s,Bucket:Uo(e),Prefix:qi(t)}),"list"),i=!1,o;do{let s={};o&&(s.ContinuationToken=o);let u=await n(s);if(u.Contents)for(let c of u.Contents)yield c;i=!!u.IsTruncated,o=u.NextContinuationToken}while(i&&o)}a(s9,"listAllObjects");async function s8t(e,t){let r={};return await Mt.parallelForeach(s9(e,t),async n=>{if(!n.Key)throw new Error("file.Key must be defined");r[n.Key]=n},5),r}a(s8t,"getAllFiles");async function ny(e,t,r=3600){let n=Cu({presigning:!0}),i={Bucket:Uo(e),Key:qi(t)},o=await(0,pDe.getSignedUrl)(n,new zN.GetObjectCommand(i),{expiresIn:r});if(K.MINIO_ENABLED){let s=new URL(o),u=s.pathname,c=s.search;return`${o9}${u}${c}`}else return o}a(ny,"getPresignedUrl");async function u8t(e,t){return await yp.default.trace("retrieveToTmp",async r=>{r.addTags({bucketName:e,filepath:t}),e=Uo(e),t=qi(t);let n=await gDe(e,t),i=(0,dh.join)(ry(),(0,i9.v4)());return r.addTags({outputPath:i}),n instanceof WN.default.Readable?(r.addTags({stream:!0}),await(0,VT.pipeline)(n,Ww.default.createWriteStream(i))):(r.addTags({stream:!1}),Ww.default.writeFileSync(i,n)),i})}a(u8t,"retrieveToTmp");async function c8t(e,t,r){return await yp.default.trace("retrieveDirectory",async n=>{n.addTags({bucketName:e,path:t});let i=(0,dh.join)(ry(),(0,i9.v4)());await HT.default.mkdir(i,{recursive:!0});let o=0;return await Mt.parallelForeach(s9(e,t),async s=>{let{Key:u}=s;!u||r?.some(c=>c.test(u))||(o++,await yp.default.trace("retrieveDirectory.object",async c=>{let l=s.Key;c.addTags({filename:l});let{stream:f}=await qN(e,l),p=l.split("/"),d=p.slice(0,p.length-1),h=(0,dh.join)(i,...d);p.length>1&&!Ww.default.existsSync(h)&&await HT.default.mkdir(h,{recursive:!0}),await(0,VT.pipeline)(f,Ww.default.createWriteStream((0,dh.join)(i,...p),{mode:420}))}))},5),n.addTags({numObjects:o}),i})}a(c8t,"retrieveDirectory");async function l8t(e,t){let r=Cu();await KT(r,e);let n={Bucket:e,Key:qi(t)};return r.deleteObject(n)}a(l8t,"deleteFile");async function f8t(e,t){let r=Cu();await KT(r,e);let n={Bucket:e,Delete:{Objects:t.map(i=>({Key:qi(i)}))}};return r.deleteObjects(n)}a(f8t,"deleteFiles");async function yDe(e,t){e=Uo(e),t=qi(t);let r=Cu(),n={Bucket:e,Prefix:t},i=await r.listObjects(n);if(i.Contents?.length===0)return;let o={Bucket:e,Delete:{Objects:[]}};if(i.Contents?.forEach(s=>{o.Delete.Objects.push({Key:s.Key})}),o.Delete.Objects.length&&(await r.deleteObjects(o)).Deleted?.length===1e3)return yDe(e,t)}a(yDe,"deleteFolder");async function u9(e,t,r){return await yp.default.trace("uploadDirectory",async n=>{n.addTags({bucketName:e,localPath:t,bucketPath:r}),e=Uo(e);let i=await HT.default.readdir(t,{withFileTypes:!0});n.addTags({numFiles:i.length});for(let o of i){let s=qi((0,dh.join)(r,o.name)),u=(0,dh.join)(t,o.name);o.isDirectory()?await u9(e,u,s):await mDe({bucket:e,filename:s,stream:Ww.default.createReadStream(u)})}return i})}a(u9,"uploadDirectory");async function p8t(e,t,r={}){t=qi(t);let n=await(0,r9.default)(e,{headers:r});if(!n.ok)throw new Error(`unexpected response ${n.statusText}`);await(0,VT.pipeline)(n.body,a9.default.createUnzip(),n9.default.extract(t))}a(p8t,"downloadTarballDirect");async function d8t(e,t,r){t=Uo(t),r=qi(r);let n=await(0,r9.default)(e);if(!n.ok)throw new Error(`unexpected response ${n.statusText}`);let i=(0,dh.join)(ry(),r);return await(0,VT.pipeline)(n.body,a9.default.createUnzip(),n9.default.extract(i)),!K.isTest()&&K.SELF_HOSTED&&await u9(t,i,r),i}a(d8t,"downloadTarball");async function qN(e,t){return await yp.default.trace("getReadStream",async r=>{e=Uo(e),t=qi(t),r.addTags({bucketName:e,path:t});let n=Cu(),i={Bucket:e,Key:t},o=await n.getObject(i);if(!o.Body||!(o.Body instanceof WN.default.Readable))throw new Error("Unable to retrieve stream - invalid response");return r.addTags({contentLength:o.ContentLength,contentType:o.ContentType}),{stream:o.Body,contentLength:o.ContentLength,contentType:o.ContentType}})}a(qN,"getReadStream");async function h8t(e,t){e=Uo(e),t=qi(t);let r=Cu(),n={Bucket:e,Key:t};try{return await r.headObject(n)}catch{throw new Error("Unable to retrieve metadata from object")}}a(h8t,"getObjectMetadata");async function m8t(e,t){e=Uo(e),t=qi(t);let r=Cu(),n={Bucket:e,Key:t};try{return await r.headObject(n),!0}catch(i){if((i.statusCode||i.$response?.statusCode)===404)return!1;throw i}}a(m8t,"objectExists");function e9(e){let t=e.split("?")[0],r=new RegExp(`^${o9}/(?<bucket>[^/]+)/(?<path>.+)$`),n=t.match(r);if(n&&n.groups){let{bucket:i,path:o}=n.groups;return{bucket:i,path:o}}return null}a(e9,"extractBucketAndPath");var _De=ne(require("querystring"));var EDe=ne(wDe());var HN;function L8t(){if(!K.CLOUDFRONT_PRIVATE_KEY_64)throw new Error("CLOUDFRONT_PRIVATE_KEY_64 is not set");return HN||(HN=Buffer.from(K.CLOUDFRONT_PRIVATE_KEY_64,"base64").toString("utf-8"),HN)}a(L8t,"getPrivateKey");var F8t=a(()=>({keypairId:K.CLOUDFRONT_PUBLIC_KEY_ID,privateKeyString:L8t(),expireTime:new Date().getTime()+1e3*60*60*24}),"getCloudfrontSignParams"),Gw=a(e=>{let t=U8t(e);return EDe.getSignedUrl(t,F8t())},"getPresignedUrl"),U8t=a(e=>{let t="/";return e.startsWith("/")&&(t=""),`${K.CLOUDFRONT_CDN}${t}${e}`},"getUrl");function M8t(e){return`${qi(e)}/budibase-client.js`}a(M8t,"clientLibraryPath");function j8t(e,t){return`${qi(e)}/${t}`}a(j8t,"client3rdPartyLibrary");async function B8t(e,t){return`/api/assets/${e}/client?${await SDe(t)}`}a(B8t,"clientLibraryUrl");async function SDe(e){let t,r;try{t=Pt()}finally{r={version:e}}return t&&t!==di&&(r.tenantId=t),_De.default.encode(r)}a(SDe,"getClientCacheKey");async function xDe(e){return K.CLOUDFRONT_CDN?Gw(e):await ny(K.APPS_BUCKET_NAME,e)}a(xDe,"getAppFileUrl");async function q8t(e){if(e.length===0)return[];try{return await Promise.all(e.map(async t=>({...t,src:await xDe(t.src),type:t.type||"image/png"})))}catch(t){return console.error("Error enriching PWA images:",t),e}}a(q8t,"enrichPWAImages");var $8t=a(async(e,t,r)=>{let n=TDe(e,t);return K.CLOUDFRONT_CDN?(r&&(n=`${n}?etag=${r}`),Gw(n)):await ny(K.GLOBAL_BUCKET_NAME,n)},"getGlobalFileUrl"),TDe=a((e,t)=>{let r=`${e}/${t}`;return K.MULTI_TENANCY&&(r=`${Pt()}/${r}`),r},"getGlobalFileS3Key");async function z8t(e){return!e||!e.length?[]:await Promise.all(e.map(async t=>{let r=await W8t(t),n=await G8t(t);return{...t,jsUrl:r,iconUrl:n}}))}a(z8t,"enrichPluginURLs");async function W8t(e){let t=RDe(e);return ADe(t)}a(W8t,"getPluginJSUrl");async function G8t(e){let t=ODe(e);if(t)return ADe(t)}a(G8t,"getPluginIconUrl");async function ADe(e){return K.CLOUDFRONT_CDN?Gw(e):await ny(K.PLUGIN_BUCKET_NAME,e)}a(ADe,"getPluginUrl");function RDe(e){return IDe(e,"plugin.min.js")}a(RDe,"getPluginJSKey");function ODe(e){let t=e.iconUrl?"icon.svg":e.iconFileName;if(t)return IDe(e,t)}a(ODe,"getPluginIconKey");function IDe(e,t){return`${kDe(e.name)}/${t}`}a(IDe,"getPluginS3Key");function kDe(e){let t=`${e}`;return K.MULTI_TENANCY&&(t=`${Pt()}/${t}`),K.CLOUDFRONT_CDN&&(t=`plugins/${t}`),t}a(kDe,"getPluginS3Dir");var PDe="budibase.log",NDe="budibase-logs-history.txt",LDe=m9.default.join(ry(),"systemlogs");function CDe(e){return m9.default.join(LDe,e)}a(CDe,"getFullPath");function FDe(e){let t=/(\d+)([A-Za-z])/,r=e?.match(t);if(!r){console.warn("totalMaxSize does not have a valid value",{totalMaxSize:e});return}let n=+r[1],i=r[2];if(n===1)switch(i){case"B":return{size:`${n}B`,totalHistoryFiles:1};case"K":return{size:`${n*1e3/2}B`,totalHistoryFiles:1};case"M":return{size:`${n*1e3/2}K`,totalHistoryFiles:1};case"G":return{size:`${n*1e3/2}M`,totalHistoryFiles:1};default:return}return n%2===0?{size:`${n/2}${i}`,totalHistoryFiles:1}:{size:`1${i}`,totalHistoryFiles:n-1}}a(FDe,"getSingleFileMaxSizeInfo");function g9(){let e=FDe(K.ROLLING_LOG_MAX_SIZE);return DDe.createStream(PDe,{size:e?.size,path:LDe,maxFiles:e?.totalHistoryFiles||1,immutable:!0,history:NDe,initialRotation:!1})}a(g9,"localFileDestination");function H8t(){let e=[],t=CDe(NDe);if(YT.default.existsSync(t)){let i=YT.default.readFileSync(t,"utf-8").split(`
|
|
535
|
-
`);for(let o of i.filter(s=>s))e.push(YT.default.readFileSync(o))}return e.push(YT.default.readFileSync(CDe(PDe))),Buffer.concat(e.map(n=>new Uint8Array(n)))}a(H8t,"getLogReadStream");function V8t(e){return typeof e=="object"&&e!==null&&!(e instanceof Error)}a(V8t,"isPlainObject");function K8t(e){return e instanceof Error}a(K8t,"isError");function Q8t(e){return typeof e=="string"}a(Q8t,"isMessage");var mh;if(!K.DISABLE_PINO_LOGGER){let e=K.LOG_LEVEL,t={level:e,formatters:{level:c=>({level:c.toUpperCase()}),bindings:()=>K.SELF_HOSTED?{service:K.SERVICE_NAME}:{}},timestamp:()=>`,"timestamp":"${new Date(Date.now()).toISOString()}"`},r=[];r.push(K.isDev()?{stream:(0,UDe.default)({singleLine:!0}),level:e}:{stream:process.stdout,level:e}),K.SELF_HOSTED&&r.push({stream:g9(),level:e}),mh=r.length?(0,VN.default)(t,VN.default.multistream(r)):(0,VN.default)(t);let n=a(c=>{let l,f=[],p="";c.forEach(y=>{Q8t(y)&&(p=`${p} ${y}`.trimStart()),V8t(y)&&f.push(y),K8t(y)&&(l=y)});let d=u(),h={};h={tenantId:i(),appId:o(),automationId:s(),identityId:d?._id,identityType:d?.type,correlationId:Iz()};let m=b9.default.scope().active();m&&b9.default.inject(m.context(),MDe.formats.LOG,h);let g={err:l,pid:process.pid,...h};if(f.length){let y={},b=0;for(let v=0;v<f.length;v++){let w=f[v],x=w._logKey;x?(delete w._logKey,g[x]=w):(y[b]=w,b++)}Object.keys(y).length&&(g.data=y)}return[g,p]},"getLogParams");console.log=(...c)=>{let[l,f]=n(c);mh?.info(l,f)},console.info=(...c)=>{let[l,f]=n(c);mh?.info(l,f)},console.warn=(...c)=>{let[l,f]=n(c);mh?.warn(l,f)},console.error=(...c)=>{let[l,f]=n(c);mh?.error(l,f)},console.trace=(...c)=>{let[l,f]=n(c);l.err||(l.err=new Error),mh?.trace(l,f)},console.debug=(...c)=>{let[l,f]=n(c);mh?.debug(l,f)};let i=a(()=>{let c;try{c=Pt()}catch{}return c},"getTenantId"),o=a(()=>{let c;try{c=ts()}catch{}return c},"getAppId"),s=a(()=>{let c;try{c=J5()}catch{}return c},"getAutomationId"),u=a(()=>{let c;try{c=qf()}catch{}return c},"getIdentity")}var KN=mh;var Y8t=["AccountError"];function J8t(e){return e&&e.suppressAlert}a(J8t,"isSuppressed");function iy(e,t){t&&Y8t.includes(t.name)&&J8t(t)||console.error(`bb-alert: ${e}`,t)}a(iy,"logAlert");function X8t(e,t,r,n){e=`${e} - db: ${t} - doc: ${r} - error: `,iy(e,n)}a(X8t,"logAlertWithInfo");function Hw(e,t){console.warn(`bb-warn: ${e}`,t)}a(Hw,"logWarn");var QN=class extends Error{static{a(this,"UnretriableError")}constructor(t){super(t),this.name="PermanentError"}},v9=class{static{a(this,"QueuedProcessor")}constructor(t,r={}){let{maxAttempts:n=3,removeOnFail:i=!0,removeOnComplete:o=!0,maxStalledCount:s=3}=r;this.waitForCompletionMs=r.waitForCompletionMs||1e4,this._queue=new Ac(t,{maxStalledCount:s,jobOptions:{attempts:n,removeOnFail:i,removeOnComplete:o}}),this._queue.process(async(u,c)=>{try{let l=await this.processFn(u.data);c?.(null,l)}catch(l){l instanceof QN&&await u.discard(),iy(`Failed to process job in ${this._queue.name}`,l),c?.(l)}})}async close(t){await this._queue.close(t)}async execute(t){try{let r=await this._queue.add(t);return{success:!0,result:await Ye.withTimeout(this.waitForCompletionMs,()=>r.finished())}}catch(r){if(r.errno!=="ETIME")throw r;return{success:!1,reason:"timeout"}}}};var Z8t=100,YN,JT=class e{static{a(this,"DocWritethroughProcessor")}static get queue(){return e._queue||(e._queue=new Ac("docWritethroughQueue",{jobOptions:{attempts:Z8t}})),e._queue}init(){return e.queue.process(async t=>{try{await this.persistToDb(t.data)}catch(r){throw r.status===409?new Error(`Conflict persisting message ${t.id}. Attempt ${t.attemptsMade}`):r}}),this}async persistToDb({dbName:t,docId:r,data:n}){if(r.startsWith("scimlog"))return;let i=Po(t),o;try{o=await i.get(r)}catch{o={_id:r}}o={...o,...n},await i.put(o)}},w9=class{static{a(this,"DocWritethrough")}constructor(t,r){this.db=t,this._docId=r}get docId(){return this._docId}async patch(t){await JT.queue.add({dbName:this.db.name,docId:this.docId,data:t})}};function jDe(){return YN=new JT().init(),YN}a(jDe,"init");function eGt(){return YN||jDe()}a(eGt,"getProcessor");var ZT={};oe(ZT,{CacheKey:()=>sa,TTL:()=>sy,bustCache:()=>Vw,destroy:()=>XT,get:()=>uy,keys:()=>JN,store:()=>bp,withCache:()=>gh,withCacheWithDynamicTTL:()=>BDe});function $l(e){let t=Pt();return`${e}:${t}`}a($l,"generateTenantKey");var ay=class{static{a(this,"BaseCache")}constructor(t=void 0){this.client=t}async getClient(){return this.client?this.client:await oz()}async keys(t){return(await this.getClient()).keys(t)}async exists(t,r={useTenancy:!0}){return t=r.useTenancy?$l(t):t,(await this.getClient()).exists(t)}async scan(t,r={useTenancy:!0}){return t=r.useTenancy?$l(t):t,(await this.getClient()).scan(t)}async get(t,r={useTenancy:!0}){return t=r.useTenancy?$l(t):t,(await this.getClient()).get(t)}async bulkGet(t,r={useTenancy:!0}){return t=r.useTenancy?t.map(i=>$l(i)):t,(await this.getClient()).bulkGet(t)}async store(t,r,n=null,i={useTenancy:!0}){t=i.useTenancy?$l(t):t,await(await this.getClient()).store(t,r,n)}async bulkStore(t,r=null,n={useTenancy:!0}){n.useTenancy&&(t=Object.entries(t).reduce((o,[s,u])=>(o[$l(s)]=u,o),{})),await(await this.getClient()).bulkStore(t,r)}async delete(t,r={useTenancy:!0}){return t=r.useTenancy?$l(t):t,(await this.getClient()).delete(t)}async bulkDelete(t,r={useTenancy:!0}){return t=r.useTenancy?t.map(i=>$l(i)):t,(await this.getClient()).bulkDelete(t)}async withCache(t,r=null,n,i={useTenancy:!0}){let o=await this.get(t,i);if(o)return o;try{let s=await n();return await this.store(t,s,r,i),s}catch(s){throw console.error("Error fetching before cache - ",s),s}}async withCacheWithDynamicTTL(t,r,n={useTenancy:!0}){let i=await this.get(t,n);if(i)return i;try{let o=await r(),{value:s,ttl:u}=o;return await this.store(t,s,u,{useTenancy:n.useTenancy}),s}catch(o){throw console.error("Error fetching before cache - ",o),o}}async bustCache(t){let r=await this.getClient();try{await r.delete($l(t))}catch(n){throw console.error("Error busting cache - ",n),n}}async deleteIfValue(t,r,n={useTenancy:!0}){t=n.useTenancy?$l(t):t,await(await this.getClient()).deleteIfValue(t,r)}};var oy=new ay,sa={CHECKLIST:"checklist",INSTALLATION:"installation",ANALYTICS_ENABLED:"analyticsEnabled",UNIQUE_TENANT_ID:"uniqueTenantId",EVENTS:"events",BACKFILL_METADATA:"backfillMetadata",EVENTS_RATE_LIMIT:"eventsRateLimit",OAUTH2_TOKEN:e=>`oauth2Token_${e}`},sy=(n=>(n[n.ONE_MINUTE=600]="ONE_MINUTE",n[n.ONE_HOUR=3600]="ONE_HOUR",n[n.ONE_DAY=86400]="ONE_DAY",n))(sy||{}),JN=a((...e)=>oy.keys(...e),"keys"),uy=a((...e)=>oy.get(...e),"get"),bp=a((...e)=>oy.store(...e),"store"),XT=a((...e)=>oy.delete(...e),"destroy"),gh=a((...e)=>oy.withCache(...e),"withCache"),BDe=a((...e)=>oy.withCacheWithDynamicTTL(...e),"withCacheWithDynamicTTL"),Vw=a((...e)=>oy.bustCache(...e),"bustCache");var S9={};oe(S9,{createCode:()=>rGt,deleteCode:()=>iGt,getCode:()=>nGt,getExistingInvites:()=>_9,getInviteCodes:()=>$De,updateCode:()=>tGt});var qDe=gi.fromDays(7).toSeconds();async function tGt(e,t){await(await gg()).store(e,t,qDe)}a(tGt,"updateCode");async function rGt(e,t){let r=cn();return await(await gg()).store(r,{email:e,info:t},qDe),r}a(rGt,"createCode");async function nGt(e){let r=await(await gg()).get(e);if(!r)throw"Invitation is not valid or has expired, please request a new one.";return r}a(nGt,"getCode");async function iGt(e){await(await gg()).delete(e)}a(iGt,"deleteCode");async function $De(){let r=(await(await gg()).scan()).map(i=>({...i.value,code:i.key}));if(!K.MULTI_TENANCY)return r;let n=Pt();return r.filter(i=>n===i.info.tenantId)}a($De,"getInviteCodes");async function _9(e){return(await $De()).filter(t=>e.includes(t.email))}a(_9,"getExistingInvites");var x9={};oe(x9,{createCode:()=>oGt,getCode:()=>sGt,invalidateCode:()=>uGt});var aGt=gi.fromHours(1).toSeconds();async function oGt(e,t){let r=cn();return await(await Ix()).store(r,{userId:e,info:t},aGt),r}a(oGt,"createCode");async function sGt(e){let r=await(await Ix()).get(e);if(!r)throw new Error("Provided information is not valid, cannot reset password - please try again.");return r}a(sGt,"getCode");async function uGt(e){await(await Ix()).delete(e)}a(uGt,"invalidateCode");var Rh={};oe(Rh,{getUser:()=>UA,getUsers:()=>UXt,invalidateUser:()=>MA});var zl={};oe(zl,{addSsoUser:()=>WDe,addUser:()=>hGt,getUserDoc:()=>zDe,lookupTenantId:()=>cGt,removeUser:()=>mGt,updateUserDoc:()=>lGt});function cy(){return Po(vn.PLATFORM_INFO.name)}a(cy,"getPlatformDB");async function cGt(e){return K.MULTI_TENANCY?(await zDe(e)).tenantId:di}a(cGt,"lookupTenantId");async function zDe(e){return cy().get(e)}a(zDe,"getUserDoc");async function lGt(e){await cy().put(e)}a(lGt,"updateUserDoc");function fGt(e,t){return{_id:e,tenantId:t}}a(fGt,"newUserIdDoc");function pGt(e,t,r){return{_id:t,userId:e,tenantId:r}}a(pGt,"newUserEmailDoc");function dGt(e,t,r,n){return{_id:e,userId:r,email:t,tenantId:n}}a(dGt,"newUserSsoIdDoc");async function T9(e,t){let r=cy(),n;try{await r.get(e)}catch(i){if(i.status===404)n=t(),await r.put(n);else throw i}}a(T9,"addUserDoc");async function WDe(e,t,r,n){return T9(e,()=>dGt(e,t,r,n))}a(WDe,"addSsoUser");async function hGt(e,t,r,n){let i=[T9(t,()=>fGt(t,e)),T9(r,()=>pGt(t,r,e))];n&&i.push(WDe(n,r,t,e)),await Promise.all(i)}a(hGt,"addUser");async function mGt(e){let t=cy(),r=[e._id,e.email],n=await t.allDocs({keys:r,include_docs:!0});await t.bulkRemove(n.rows.map(i=>i.doc),{silenceErrors:!0})}a(mGt,"removeUser");var GDe=ne(require("node-fetch"));var eA=class{static{a(this,"API")}constructor(t){this.host=t}async apiCall(t,r,n){n.headers||(n.headers={}),n.headers["Content-Type"]||(n.headers={"Content-Type":"application/json",Accept:"application/json",...n.headers});let i=n.headers["Content-Type"]==="application/json";qx.setHeader(n.headers);let o={method:t,body:i?JSON.stringify(n.body):n.body,headers:n.headers,credentials:"include"};return await(0,GDe.default)(`${this.host}${r}`,o)}async post(t,r){return this.apiCall("POST",t,r)}async get(t,r){return this.apiCall("GET",t,r)}async patch(t,r){return this.apiCall("PATCH",t,r)}async del(t,r){return this.apiCall("DELETE",t,r)}async put(t,r){return this.apiCall("PUT",t,r)}};var HDe=new eA(K.INTERNAL_ACCOUNT_PORTAL_URL),VDe=K.SELF_HOSTED||K.DISABLE_ACCOUNT_PORTAL,ly=a(async e=>{if(VDe)return;let t={email:e},r=await HDe.post("/api/accounts/search",{body:t,headers:{"x-budibase-api-key":K.ACCOUNT_PORTAL_API_KEY}});if(r.status!==200)throw new Error(`Error getting account by email ${e}`);return(await r.json())[0]},"getAccount"),tA=a(async e=>{if(VDe)return;let t={tenantId:e},r=await HDe.post("/api/accounts/search",{body:t,headers:{"x-budibase-api-key":K.ACCOUNT_PORTAL_API_KEY}});if(r.status!==200)throw new Error(`Error getting account by tenantId ${e}`);return(await r.json())[0]},"getAccountByTenantId");var er={};oe(er,{UserDB:()=>Hl,addAppBuilder:()=>PXt,bulkGetGlobalUsersById:()=>KL,bulkUpdateGlobalUsers:()=>LA,cleanseUserObject:()=>oK,creatorsInList:()=>vy,doesUserExist:()=>OXt,getAccountHolderFromUsers:()=>VL,getAllUserIds:()=>AXt,getAllUsers:()=>RXt,getById:()=>wy,getCreatorCount:()=>CXt,getExistingAccounts:()=>oE,getExistingPlatformUsers:()=>tFe,getExistingTenantUsers:()=>eFe,getFirstPlatformUser:()=>PA,getGlobalUserByAppPage:()=>sFe,getGlobalUserByEmail:()=>qc,getPlatformUsers:()=>zL,getUserCount:()=>kXt,hasAdminPermissions:()=>Th,hasAppBuilderPermissions:()=>iFe,hasBuilderPermissions:()=>us,isAdmin:()=>Gl,isAdminOrBuilder:()=>nFe,isAdminOrWorkspaceBuilder:()=>WL,isBuilder:()=>cE,isCreatorAsync:()=>NA,isCreatorSync:()=>GL,isGlobalBuilder:()=>rFe,paginatedUsers:()=>cFe,removeAppBuilder:()=>NXt,removePortalUserPermissions:()=>DXt,searchExistingEmails:()=>rK,searchGlobalUsersByApp:()=>QL,searchGlobalUsersByAppAccess:()=>aK,searchGlobalUsersByEmail:()=>uFe,validateUniqueUser:()=>HL});var XN=class extends Error{constructor(r,n){super(r);this.code=n}static{a(this,"BudibaseError")}},QDe=a(e=>{let t;return e.code&&(t={code:e.code},e.getPublicError&&(t={...t,...e.getPublicError()})),t},"getPublicError"),ve=class e extends XN{constructor(r,n,i="http"){super(r,i);this.status=n}static{a(this,"HTTPError")}static async fromResponse(r){let n=await r.text(),i=n,o=r.status,s="http";try{let u=JSON.parse(n);i=u.message,o=u.status,s=u.error?.code}catch{}return new e(i,o,s)}};var $a=class extends ve{static{a(this,"BadRequestError")}constructor(t){super(t,400)}};var ZN=class extends ve{constructor(r,n){super(r,400,"usage_limit_exceeded");this.limitName=n}static{a(this,"UsageLimitError")}getPublicError(){return{limitName:this.limitName}}},Kw=class extends ve{constructor(r,n){super(r,400,"feature_disabled");this.featureName=n}static{a(this,"FeatureDisabledError")}getPublicError(){return{featureName:this.featureName}}},eL=class extends XN{static{a(this,"InvalidAPIKeyError")}constructor(){super("Invalid API key - may need re-generated, or user doesn't exist","invalid_api_key")}},vp=class extends Error{static{a(this,"EmailUnavailableError")}constructor(t){super(`Email already in use: '${t}'`)}};var JDe=+(K.PASSWORD_MIN_LENGTH||12),XDe=+(K.PASSWORD_MAX_LENGTH||512);function ZDe(e){return!e||e.length<JDe?{valid:!1,error:`Password invalid. Minimum ${JDe} characters.`}:e.length>XDe?{valid:!1,error:`Password invalid. Maximum ${XDe} characters.`}:{valid:!0}}a(ZDe,"validatePassword");var yGt=require("uuid");var bGt=K.SESSION_EXPIRY_SECONDS?parseInt(K.SESSION_EXPIRY_SECONDS):gi.fromDays(7).toSeconds();function tL(e,t){return`${e}/${t}`}a(tL,"makeSessionID");async function R9(e){return e?(await(await Jv()).scan(e)).map(n=>n.value):(console.trace("Cannot get sessions for undefined userId"),[])}a(R9,"getSessionsForUser");async function nA(e,t={}){try{let r=t?.reason||"unknown",n=t.sessionIds||[],i;if(n.length===0?i=(await R9(e)).map(s=>({key:tL(s.userId,s.sessionId)})):(n=Array.isArray(n)?n:[n],i=n.map(o=>({key:tL(e,o)}))),i&&i.length>0){let o=await Jv(),s=[];for(let u of i)s.push(o.delete(u.key));K.isTest()||Hw(`Invalidating sessions for ${e} (reason: ${r}) - ${i.map(u=>u.key).join(", ")}`),await Promise.all(s)}}catch(r){console.error(`Error invalidating sessions: ${r}`)}}a(nA,"invalidateSessions");async function ePe(e){let t=await Jv(),r=tL(e.userId,e.sessionId);e.lastAccessedAt=new Date().toISOString(),await t.store(r,e,bGt)}a(ePe,"updateSessionTTL");async function tPe(e,t){if(!e||!t)throw new Error(`Invalid session details - ${e} - ${t}`);let n=await(await Jv()).get(tL(e,t));if(!n)throw new Error(`Session not found - ${e} - ${t}`);return n}a(tPe,"getSession");var St={};oe(St,{account:()=>I2e,action:()=>k2e,ai:()=>C2e,analytics:()=>nL,app:()=>D2e,asyncEventQueue:()=>fy,auditLog:()=>P2e,auth:()=>$L,automation:()=>N2e,backfill:()=>L2e,backfillCache:()=>aL,backup:()=>F2e,datasource:()=>U2e,email:()=>M2e,environmentVariable:()=>j2e,group:()=>B2e,identification:()=>Bc,initAsyncEvents:()=>pXt,installation:()=>RA,layout:()=>q2e,license:()=>$2e,org:()=>z2e,plugin:()=>W2e,processors:()=>k7,publishEvent:()=>de,query:()=>G2e,resource:()=>H2e,role:()=>DA,rowAction:()=>V2e,rows:()=>K2e,screen:()=>Q2e,serve:()=>Y2e,shutdown:()=>dXt,table:()=>J2e,user:()=>cs,view:()=>X2e,workspace:()=>Z2e});var nL={};oe(nL,{enabled:()=>rL});var rL=a(async()=>iL(),"enabled");var fy;function O9(){fy=new Ac("systemEventQueue",{jobTags:e=>({"event.name":e.event})})}a(O9,"init");async function nPe(e){fy||O9();let{event:t,identity:r}=e;gse.indexOf(t)!==-1&&r.tenantId&&await fy.add(e)}a(nPe,"publishAsyncEvent");var aL={};oe(aL,{end:()=>wGt,isAlreadySent:()=>C9,isBackfillingEvent:()=>k9,recordEvent:()=>I9,start:()=>vGt});var vGt=a(async e=>_Gt({eventWhitelist:e}),"start"),I9=a(async(e,t)=>{let r=D9(e,t);await bp(r,t,void 0,{useTenancy:!1})},"recordEvent"),wGt=a(async()=>{await SGt(),await xGt()},"end"),EGt=a(async()=>uy(sa.BACKFILL_METADATA),"getBackfillMetadata"),_Gt=a(async e=>bp(sa.BACKFILL_METADATA,e),"saveBackfillMetadata"),SGt=a(async()=>{await XT(sa.BACKFILL_METADATA)},"deleteBackfillMetadata"),xGt=a(async()=>{let e=D9(),t=await JN(e);for(let r of t)await XT(r,{useTenancy:!1})},"clearEvents"),k9=a(async e=>{let r=(await EGt())?.eventWhitelist;return!!(r&&r.includes(e))},"isBackfillingEvent"),C9=a(async(e,t)=>{let r=D9(e,t);return!!await uy(r,{useTenancy:!1})},"isAlreadySent"),TGt={"automation:created":e=>e.automationId,"automation:step:created":e=>e.stepId,"datasource:created":e=>e.datasourceId,"layout:created":e=>e.layoutId,"query:created":e=>e.queryId,"role:created":e=>e.roleId,"screen:created":e=>e.screenId,"table:created":e=>e.tableId,"view:created":e=>e.tableId,"view:calculation:created":e=>e.tableId,"view:filter:created":e=>e.tableId,"app:created":e=>e.appId,"app:published":e=>e.appId,"auth:sso:created":e=>e.type,"auth:sso:activated":e=>e.type,"user:created":e=>e.userId,"user:admin:assigned":e=>e.userId,"user:builder:assigned":e=>e.userId,"role:assigned":e=>`${e.roleId}-${e.userId}`},D9=a((e,t)=>{let r,n=Pt();if(e){r=`${sa.EVENTS}:${n}:${e}`;let i=TGt[e],o=i?i(t):void 0;o&&(r=`${r}:${o}`)}else r=`${sa.EVENTS}:${n}:*`;return r},"getEventKey");var k7={};oe(k7,{analyticsProcessor:()=>MNe,init:()=>j9t,processors:()=>wp});var FNe=ne(O7());var k9t=a(e=>e==="served:builder"||e==="served:app:preview"||e==="served:app","isRateLimited"),C9t=a(e=>e==="served:app:preview"||e==="served:app","isPerApp");var PNe={"served:app":"calendarDay","served:app:preview":"calendarDay","served:builder":"calendarDay"},NNe=a(async e=>{if(!k9t(e))return!1;let t=await D9t(e);if(t){let r=new Date(t.timestamp);switch(PNe[e]){case"calendarDay":return r.setDate(r.getDate()+1),r.setHours(0,0,0,0),Date.now()>r.getTime()?(await DNe(e,{timestamp:Date.now()}),!1):!0}}else return await DNe(e,{timestamp:Date.now()}),!1},"limited"),LNe=a(e=>{let t=`${sa.EVENTS_RATE_LIMIT}:${e}`;return C9t(e)&&(t=t+":"+ts()),t},"eventKey"),D9t=a(async e=>{let t=LNe(e);return await uy(t)},"readEvent"),DNe=a(async(e,t)=>{let r=LNe(e),n=PNe[e],i;switch(n){case"calendarDay":i=86400}await bp(r,t,i)},"recordEvent");var N9t=["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"],gA=class{static{a(this,"PosthogProcessor")}constructor(t){if(!t)throw new Error("Posthog token is not defined");this.posthog=new FNe.PostHog(t)}async processEvent(t,r,n,i){if(N9t.includes(t)||await NNe(t))return;n=this.clearPIIProperties(n),n.version=K.VERSION,n.service=K.SERVICE,n.environment=r.environment,n.hosting=r.hosting;let o=ts();o&&(n.appId=o);let s={distinctId:r.id,event:t,properties:n};i&&(s.timestamp=new Date(i)),(r.installationId||r.tenantId)&&(s.groups={},r.installationId&&(s.groups.installation=r.installationId,s.properties.installationId=r.installationId),r.tenantId&&(s.groups.tenant=r.tenantId,s.properties.tenantId=r.tenantId)),this.posthog.capture(s)}clearPIIProperties(t){return t.email&&delete t.email,t.audited&&delete t.audited,t}async identify(t,r){let n={distinctId:t.id,properties:t};r&&(n.timestamp=new Date(r)),this.posthog.identify(n)}async identifyGroup(t,r){let n={distinctId:t.id,groupType:t.type,groupKey:t.id,properties:t};r&&(n.timestamp=new Date(r)),this.posthog.groupIdentify(n)}async shutdown(){await this.posthog.shutdown()}};var UNe=gA;var L9t=["installation:version:upgraded","installation:version:downgraded"],F9t=["installation","tenant"],yA=class{static{a(this,"AnalyticsProcessor")}constructor(){K.POSTHOG_TOKEN&&!K.isTest()&&(this.posthog=new UNe(K.POSTHOG_TOKEN))}async processEvent(t,r,n,i){!L9t.includes(t)&&!await rL()||this.posthog&&await this.posthog.processEvent(t,r,n,i)}async identify(t,r){!F9t.includes(t.type)&&!await rL()||this.posthog&&await this.posthog.identify(t,r)}async identifyGroup(t,r){this.posthog&&await this.posthog.identifyGroup(t,r)}async shutdown(){this.posthog&&await this.posthog.shutdown()}};var I7=K.SELF_HOSTED&&!K.isDev(),bA=class{static{a(this,"LoggingProcessor")}async processEvent(t,r,n){I7||console.log(`[audit] [identityType=${r.type}] ${t}`,n)}async identify(t){I7||console.log("[audit] identified",t)}async identifyGroup(t){I7||console.log("[audit] group identified",t)}async shutdown(){}};var iE=class e{static{a(this,"AuditLogsProcessor")}static{this.auditLogsEnabled=!1}static init(t){e.auditLogsEnabled=!0;let r=t;return e.auditLogQueue=new Ac("auditLogQueue",{jobTags:n=>({"event.name":n.event})}),e.auditLogQueue.process(async n=>{await es(n.data.tenantId,async()=>{let i=n.data.properties;i.audited&&(i={...i,...i.audited},delete i.audited);let o={};K.ENABLE_AUDIT_LOG_IP_ADDR&&(o=n.data.opts.hostInfo),await r(n.data.event,i,{userId:n.data.opts.userId,timestamp:n.data.opts.timestamp,appId:n.data.opts.appId,hostInfo:o})})})}async processEvent(t,r,n,i){if(e.auditLogsEnabled&&Sz(t)){let o=r.type==="user"?r.id:void 0;await e.auditLogQueue.add({event:t,properties:n,opts:{userId:o,timestamp:i,appId:ts(),hostInfo:r.hostInfo},tenantId:Pt()})}}async identify(){}async identifyGroup(){}async shutdown(){await e.auditLogQueue?.close()}};var vA=class{constructor(t){this.initialised=!1;this.processors=[];this.processors=t}static{a(this,"Processor")}async processEvent(t,r,n,i){for(let o of this.processors)await o.processEvent(t,r,n,i)}async identify(t,r){for(let n of this.processors)n.identify&&await n.identify(t,r)}async identifyGroup(t,r){for(let n of this.processors)n.identifyGroup&&await n.identifyGroup(t,r)}async shutdown(){for(let t of this.processors)t.shutdown&&await t.shutdown()}};var MNe=new yA,U9t=new bA,M9t=new iE;function j9t(e){return iE.init(e)}a(j9t,"init");var wp=new vA([MNe,U9t,M9t]);var xh={};oe(xh,{checkInstallVersion:()=>UQt,getInstall:()=>OA,getInstallFromDB:()=>X7});var J7=ne(Y7());var OA=a(async()=>gh(sa.INSTALLATION,86400,X7,{useTenancy:!1}),"getInstall");async function LQt(e){let t={_id:vn.PLATFORM_INFO.docs.install,installId:cn(),version:K.VERSION};try{let r=await e.put(t);return t._rev=r.rev,t}catch(r){if(r.status===409)return X7();throw r}}a(LQt,"createInstallDoc");var X7=a(async()=>$s(vn.PLATFORM_INFO.name,async e=>{let t;try{t=await e.get(vn.PLATFORM_INFO.docs.install)}catch(r){if(r.status===404)t=await LQt(e);else throw r}return t}),"getInstallFromDB"),FQt=a(async e=>{try{await $s(vn.PLATFORM_INFO.name,async t=>{let r=await OA();r.version=e,await t.put(r),await Vw(sa.INSTALLATION)})}catch(t){if(t.status===409)return!1;throw t}return!0},"updateVersion"),UQt=a(async()=>{let e=await OA(),t=e.version,r=K.VERSION;try{if(t!==r){let n=J7.default.gt(r,t),i=J7.default.lt(r,t);await FQt(r)&&(await v0({_id:e.installId,type:"installation"},async()=>{n?await RA.upgraded(t,r):i&&await RA.downgraded(t,r)}),await Bc.identifyInstallationGroup(e.installId))}}catch(n){n?.message?.includes("Invalid Version")?iy(`Invalid version "${r}" - is it semver?`):iy("Failed to retrieve version",n)}},"checkInstallVersion");var MQt=a(async()=>{let e=J4(),t=CA(),r;if(e?r=e.type:r="tenant",r==="installation"){let n=await by(),i=IA();return{id:R2e(n,r),hosting:i,type:r,installationId:n,environment:t}}else if(r==="tenant"){let n=await by(),i=await qL(Pt()),o=IA();return{id:R2e(i,r),type:r,hosting:o,installationId:n,tenantId:i,realTenantId:Pt(),environment:t}}else if(r==="user"){let n=e,i=await qL(Pt()),o=await by(),s=n.account,u;return s?u=s.hosting:u=IA(),{id:n._id,type:r,hosting:u,installationId:o,tenantId:i,environment:t,realTenantId:Pt(),hostInfo:n.hostInfo}}else throw new Error("Unknown identity type")},"getCurrentIdentity"),jQt=a(async(e,t)=>{let r=e,n="installation",i=IA(),o=K.VERSION,s=CA(),u={id:r,type:n,hosting:i,version:o,environment:s};await eK(u,t),await kA({...u,id:`$${n}_${r}`},t)},"identifyInstallationGroup"),BQt=a(async(e,t,r,n=K.VERSION)=>{let i=await qL(e),o="tenant",s=await by(),u=CA(),c={id:i,type:o,hosting:t,environment:u,installationId:s,createdAt:r,createdVersion:n};await eK(c,r),await kA({...c,id:`$${o}_${i}`},r)},"identifyTenantGroup"),qQt=a(async(e,t,r)=>{let n=e._id,i=await qL(e.tenantId),o="user",s=us(e),u=Th(e),c;$b(e)&&(c=e.providerType);let f=(await oE([e.email])).length>0,p=!!t&&f&&t.verified,d=await by(),h=t?t.hosting:IA(),m=CA();await kA({id:n,type:o,hosting:h,installationId:d,tenantId:i,verified:p,accountHolder:f,providerType:c,builder:s,admin:u,environment:m},r)},"identifyUser"),$Qt=a(async e=>{let t=e.accountId,r=e.tenantId,n="user",i=pk(e)?e.providerType:void 0,o=e.verified,s=!0,u=e.hosting,c=await by(),l=CA();if(fk(e)){let p=await qc(e.email);p?._id&&(t=p._id)}await kA({id:t,type:n,hosting:u,installationId:c,tenantId:r,providerType:i,verified:o,accountHolder:s,environment:l})},"identifyAccount"),kA=a(async(e,t)=>{await wp.identify(e,t)},"identify"),eK=a(async(e,t)=>{await wp.identifyGroup(e,t)},"identifyGroup"),CA=a(()=>K.isDev()?"development":K.DEPLOYMENT_ENVIRONMENT,"getDeploymentEnvironment"),IA=a(()=>K.SELF_HOSTED?"self":"cloud","getHostingFromEnv"),by=a(async()=>zQt()?"account-portal":(await OA()).installId,"getInstallationId"),qL=a(async e=>K.SELF_HOSTED?O2e(e):e,"getEventTenantId"),O2e=a(async e=>es(e,()=>gh(sa.UNIQUE_TENANT_ID,86400,async()=>{let t=Rr(),r=await sE(),n;return r.config.uniqueTenantId?r.config.uniqueTenantId:(n=`${cn()}_${e}`,r.config.uniqueTenantId=n,r.config.createdVersion=K.VERSION,await t.put(r),n)})),"getUniqueTenantId"),zQt=a(()=>K.SERVICE==="account-portal","isAccountPortal"),R2e=a((e,t)=>t==="installation"||t==="tenant"?`$${t}_${e}`:e,"formatDistinctId"),Bc={getCurrentIdentity:MQt,identifyInstallationGroup:jQt,identifyTenantGroup:BQt,identifyUser:qQt,identifyAccount:$Qt,identify:kA,identifyGroup:eK,getInstallationId:by,getUniqueTenantId:O2e};var de=a(async(e,t,r,n)=>{let i=n||await Bc.getCurrentIdentity();if(!(n?!1:await k9(e))){await nPe({event:e,identity:i,properties:t,timestamp:r}),await wp.processEvent(e,i,t,r);return}await C9(e,t)||(await wp.processEvent(e,i,t,r),await I9(e,t))},"publishEvent");async function WQt(e,t){let r={tenantId:e.tenantId};await de("account:created",r,void 0,t)}a(WQt,"created");async function GQt(e){let t={tenantId:e.tenantId};await de("account:deleted",t)}a(GQt,"deleted");async function HQt(e){let t={tenantId:e.tenantId};await de("account:verified",t)}a(HQt,"verified");var I2e={created:WQt,deleted:GQt,verified:HQt};async function VQt(e,t){console.info("action:automation_step:executed",`disabled. Action step ${e.stepId} not published at ${t}`)}a(VQt,"automationStepExecuted");async function KQt(e,t){console.info("action:automation_step:executed",`disabled. Action type ${e.type} not published at ${t}`)}a(KQt,"crudExecuted");async function QQt(e,t){console.info("action:automation_step:executed",`disabled. Execution for ai agent ${e.agentId} not published at ${t}`)}a(QQt,"aiAgentExecuted");var k2e={aiAgentExecuted:QQt,automationStepExecuted:VQt,crudExecuted:KQt};async function YQt(e){let t={};await de("ai:config:created",t,e)}a(YQt,"AIConfigCreated");async function JQt(){let e={};await de("ai:config:updated",e)}a(JQt,"AIConfigUpdated");var C2e={AIConfigCreated:YQt,AIConfigUpdated:JQt};var XQt=a(async(e,t)=>{let r={appId:e.appId,version:e.version,audited:{name:e.name}};await de("app:created",r,t)},"created");async function ZQt(e){let t={appId:e.appId,version:e.version,audited:{name:e.name}};await de("app:updated",t)}a(ZQt,"updated");async function eYt(e){let t={appId:e.appId,audited:{name:e.name}};await de("app:deleted",t)}a(eYt,"deleted");async function tYt(e,t){let r={appId:e.appId,audited:{name:e.name}};await de("app:published",r,t)}a(tYt,"published");async function rYt(e){let t={appId:e.appId,audited:{name:e.name}};await de("app:unpublished",t)}a(rYt,"unpublished");async function nYt(e){let t={appId:e.appId,audited:{name:e.name}};await de("app:file:imported",t)}a(nYt,"fileImported");async function iYt(e,t){let r={duplicateAppId:t,appId:e.appId,audited:{name:e.name}};await de("app:duplicated",r)}a(iYt,"duplicated");async function aYt(e,t){let r={appId:e.appId,templateKey:t,audited:{name:e.name}};await de("app:template:imported",r)}a(aYt,"templateImported");async function oYt(e,t,r){let n={appId:e.appId,currentVersion:t,updatedToVersion:r,audited:{name:e.name}};await de("app:version:updated",n)}a(oYt,"versionUpdated");async function sYt(e,t,r){let n={appId:e.appId,currentVersion:t,revertedToVersion:r,audited:{name:e.name}};await de("app:version:reverted",n)}a(sYt,"versionReverted");async function uYt(e){let t={appId:e.appId,audited:{name:e.name}};await de("app:reverted",t)}a(uYt,"reverted");async function cYt(e){let t={appId:e.appId,audited:{name:e.name}};await de("app:exported",t)}a(cYt,"exported");var D2e={created:XQt,updated:ZQt,deleted:eYt,published:tYt,unpublished:rYt,fileImported:nYt,duplicated:iYt,templateImported:aYt,versionUpdated:oYt,versionReverted:sYt,reverted:uYt,exported:cYt};async function lYt(e){let t={filters:e};await de("audit_log:filtered",t)}a(lYt,"filtered");async function fYt(e){let t={filters:e};await de("audit_log:downloaded",t)}a(fYt,"downloaded");var P2e={filtered:lYt,downloaded:fYt};async function pYt(e,t){let n={userId:(await Bc.getCurrentIdentity()).id,source:e,audited:{email:t}};await de("auth:login",n)}a(pYt,"login");async function dYt(e){let r={userId:(await Bc.getCurrentIdentity()).id,audited:{email:e}};await de("auth:logout",r)}a(dYt,"logout");async function hYt(e,t){let r={type:e};await de("auth:sso:created",r,t)}a(hYt,"SSOCreated");async function mYt(e){let t={type:e};await de("auth:sso:updated",t)}a(mYt,"SSOUpdated");async function gYt(e,t){let r={type:e};await de("auth:sso:activated",r,t)}a(gYt,"SSOActivated");async function yYt(e){let t={type:e};await de("auth:sso:deactivated",t)}a(yYt,"SSODeactivated");var $L={login:pYt,logout:dYt,SSOCreated:hYt,SSOUpdated:mYt,SSOActivated:gYt,SSODeactivated:yYt};async function bYt(e,t){let r={appId:e.appId,automationId:e._id,triggerId:e.definition?.trigger?.id,triggerType:e.definition?.trigger?.stepId,audited:{name:e.name}};await de("automation:created",r,t)}a(bYt,"created");async function vYt(e){let t={appId:e.appId,automationId:e._id,triggerId:e.definition?.trigger?.id,triggerType:e.definition?.trigger?.stepId};await de("automation:trigger:updated",t)}a(vYt,"triggerUpdated");async function wYt(e){let t={appId:e.appId,automationId:e._id,triggerId:e.definition?.trigger?.id,triggerType:e.definition?.trigger?.stepId,audited:{name:e.name}};await de("automation:deleted",t)}a(wYt,"deleted");async function EYt(e){let t={appId:e.appId,automationId:e._id,triggerId:e.definition?.trigger?.id,triggerType:e.definition?.trigger?.stepId};await de("automation:tested",t)}a(EYt,"tested");var _Yt=a(async(e,t)=>{let r={count:e};await de("automations:run",r,t)},"run");async function SYt(e,t,r){let n={appId:e.appId,automationId:e._id,triggerId:e.definition?.trigger?.id,triggerType:e.definition?.trigger?.stepId,stepId:t.id,stepType:t.stepId,audited:{name:e.name}};await de("automation:step:created",n,r)}a(SYt,"stepCreated");async function xYt(e,t){let r={appId:e.appId,automationId:e._id,triggerId:e.definition?.trigger?.id,triggerType:e.definition?.trigger?.stepId,stepId:t.id,stepType:t.stepId,audited:{name:e.name}};await de("automation:step:deleted",r)}a(xYt,"stepDeleted");var N2e={created:bYt,triggerUpdated:vYt,deleted:wYt,tested:EYt,run:_Yt,stepCreated:SYt,stepDeleted:xYt};var uE=!K.SELF_HOSTED&&!K.isDev();async function TYt(e){uE||await de("app:backfill:succeeded",e)}a(TYt,"appSucceeded");async function AYt(e){if(uE)return;let t={error:JSON.stringify(e,Object.getOwnPropertyNames(e))};await de("app:backfill:failed",t)}a(AYt,"appFailed");async function RYt(e){uE||await de("tenant:backfill:succeeded",e)}a(RYt,"tenantSucceeded");async function OYt(e){if(uE)return;let t={error:JSON.stringify(e,Object.getOwnPropertyNames(e))};await de("tenant:backfill:failed",t)}a(OYt,"tenantFailed");async function IYt(){if(uE)return;let e={};await de("installation:backfill:succeeded",e)}a(IYt,"installationSucceeded");async function kYt(e){if(uE)return;let t={error:JSON.stringify(e,Object.getOwnPropertyNames(e))};await de("installation:backfill:failed",t)}a(kYt,"installationFailed");var L2e={appSucceeded:TYt,appFailed:AYt,tenantSucceeded:RYt,tenantFailed:OYt,installationSucceeded:IYt,installationFailed:kYt};async function CYt(e){let t={appId:e.appId,restoreId:e._id,backupCreatedAt:e.timestamp,name:e.name};await de("app:backup:restored",t)}a(CYt,"appBackupRestored");async function DYt(e,t,r,n,i){let o={appId:e,backupId:t,type:r,trigger:n,name:i};await de("app:backup:triggered",o)}a(DYt,"appBackupTriggered");var F2e={appBackupRestored:CYt,appBackupTriggered:DYt};function tK(e){return!Object.values(Za).includes(e.source)}a(tK,"isCustom");async function PYt(e,t){let r={datasourceId:e._id,source:e.source,custom:tK(e)};await de("datasource:created",r,t)}a(PYt,"created");async function NYt(e){let t={datasourceId:e._id,source:e.source,custom:tK(e)};await de("datasource:updated",t)}a(NYt,"updated");async function LYt(e){let t={datasourceId:e._id,source:e.source,custom:tK(e)};await de("datasource:deleted",t)}a(LYt,"deleted");var U2e={created:PYt,updated:NYt,deleted:LYt};async function FYt(e){let t={};await de("email:smtp:created",t,e)}a(FYt,"SMTPCreated");async function UYt(){let e={};await de("email:smtp:updated",e)}a(UYt,"SMTPUpdated");var M2e={SMTPCreated:FYt,SMTPUpdated:UYt};async function MYt(e,t){let r={name:e,environments:t};await de("environment_variable:created",r)}a(MYt,"created");async function jYt(e){let t={name:e};await de("environment_variable:deleted",t)}a(jYt,"deleted");async function BYt(e){let t={userId:e};await de("environment_variable:upgrade_panel_opened",t)}a(BYt,"upgradePanelOpened");var j2e={created:MYt,deleted:jYt,upgradePanelOpened:BYt};async function qYt(e,t){let r={groupId:e._id,viaScim:xc(),audited:{name:e.name}};await de("user_group:created",r,t)}a(qYt,"created");async function $Yt(e){let t={groupId:e._id,viaScim:xc(),audited:{name:e.name}};await de("user_group:updated",t)}a($Yt,"updated");async function zYt(e){let t={groupId:e._id,viaScim:xc(),audited:{name:e.name}};await de("user_group:deleted",t)}a(zYt,"deleted");async function WYt(e,t,r){let n={count:e,groupId:t._id,userIds:r,viaScim:xc(),audited:{name:t.name}};await de("user_group:user_added",n)}a(WYt,"usersAdded");async function GYt(e,t,r){let n={count:e,groupId:t._id,userIds:r,viaScim:xc(),audited:{name:t.name}};await de("user_group:users_deleted",n)}a(GYt,"usersDeleted");async function HYt(e){let t={groupId:e,onboarding:!0};await de("user_group:onboarding_added",t)}a(HYt,"createdOnboarding");async function VYt(e){let t={permissions:e.roles,groupId:e._id,audited:{name:e.name}};await de("user_group:permissions_edited",t)}a(VYt,"permissionsEdited");var B2e={created:qYt,updated:$Yt,deleted:zYt,usersAdded:WYt,usersDeleted:GYt,createdOnboarding:HYt,permissionsEdited:VYt};async function KYt(e){let t={currentVersion:e};await de("installation:version:checked",t)}a(KYt,"versionChecked");async function QYt(e,t){let r={from:e,to:t};await de("installation:version:upgraded",r)}a(QYt,"upgraded");async function YYt(e,t){let r={from:e,to:t};await de("installation:version:downgraded",r)}a(YYt,"downgraded");async function JYt(){let e={};await de("installation:firstStartup",e)}a(JYt,"firstStartup");var RA={versionChecked:KYt,upgraded:QYt,downgraded:YYt,firstStartup:JYt};async function XYt(e,t){let r={layoutId:e._id};await de("layout:created",r,t)}a(XYt,"created");async function ZYt(e){let t={layoutId:e};await de("layout:deleted",t)}a(ZYt,"deleted");var q2e={created:XYt,deleted:ZYt};async function eJt(e,t){let r={accountId:e.accountId,...t};await de("license:plan:changed",r)}a(eJt,"planChanged");async function tJt(e){let t={accountId:e.accountId};await de("license:activated",t)}a(tJt,"activated");async function rJt(e){let t={accountId:e.accountId};await de("license:checkout:opened",t)}a(rJt,"checkoutOpened");async function nJt(e){let t={accountId:e.accountId};await de("license:checkout:success",t)}a(nJt,"checkoutSuccess");async function iJt(e){let t={accountId:e.accountId};await de("license:portal:opened",t)}a(iJt,"portalOpened");async function aJt(e){let t={accountId:e.accountId};await de("license:payment:failed",t)}a(aJt,"paymentFailed");async function oJt(e){let t={accountId:e.accountId};await de("license:payment:recovered",t)}a(oJt,"paymentRecovered");var $2e={planChanged:eJt,activated:tJt,checkoutOpened:rJt,checkoutSuccess:nJt,portalOpened:iJt,paymentFailed:aJt,paymentRecovered:oJt};async function sJt(e){let t={};await de("org:info:name:updated",t,e)}a(sJt,"nameUpdated");async function uJt(e){let t={};await de("org:info:logo:updated",t,e)}a(uJt,"logoUpdated");async function cJt(e){let t={};await de("org:platformurl:updated",t,e)}a(cJt,"platformURLUpdated");async function lJt(){let e={};await de("analytics:opt:out",e)}a(lJt,"analyticsOptOut");async function fJt(){let e={};await de("analytics:opt:out",e)}a(fJt,"analyticsOptIn");var z2e={nameUpdated:sJt,logoUpdated:uJt,platformURLUpdated:cJt,analyticsOptOut:lJt,analyticsOptIn:fJt};async function pJt(e){let t={type:e.schema.type,name:e.name,description:e.description,version:e.version};await de("plugin:init",t)}a(pJt,"init");async function dJt(e){let t={pluginId:e._id,type:e.schema.type,source:e.source,name:e.name,description:e.description,version:e.version};await de("plugin:imported",t)}a(dJt,"imported");async function hJt(e){let t={pluginId:e._id,type:e.schema.type,name:e.name,description:e.description,version:e.version};await de("plugin:deleted",t)}a(hJt,"deleted");var W2e={init:pJt,imported:dJt,deleted:hJt};var mJt=a(async(e,t,r)=>{let n={queryId:t._id,datasourceId:e._id,source:e.source,queryVerb:t.queryVerb};await de("query:created",n,r)},"created"),gJt=a(async(e,t)=>{let r={queryId:t._id,datasourceId:e._id,source:e.source,queryVerb:t.queryVerb};await de("query:updated",r)},"updated"),yJt=a(async(e,t,r)=>{let n={queryId:t._id,datasourceId:e._id,source:e.source,queryVerb:t.queryVerb,appId:r};await de("query:deleted",n)},"deleted"),bJt=a(async(e,t,r)=>{let n={datasourceId:e._id,source:e.source,count:r,importSource:t};await de("query:import",n)},"imported"),vJt=a(async(e,t)=>{let r={count:e};await de("queries:run",r,t)},"run"),wJt=a(async(e,t)=>{let r={queryId:t.queryId,datasourceId:e._id,source:e.source,queryVerb:t.queryVerb};await de("query:previewed",r)},"previewed"),G2e={created:mJt,updated:gJt,deleted:yJt,imported:bJt,run:vJt,previewed:wJt};async function EJt({resource:e,fromWorkspace:t,toWorkspace:r},n){let i={resource:e,fromWorkspace:t,toWorkspace:r};await de("resource:copied_to_workspace",i,n)}a(EJt,"duplicatedToWorkspace");var H2e={duplicatedToWorkspace:EJt};async function _Jt(e,t){let r={roleId:e._id,permissionId:e.permissionId,inherits:e.inherits};await de("role:created",r,t)}a(_Jt,"created");async function SJt(e){let t={roleId:e._id,permissionId:e.permissionId,inherits:e.inherits};await de("role:updated",t)}a(SJt,"updated");async function xJt(e){let t={roleId:e._id,permissionId:e.permissionId,inherits:e.inherits};await de("role:deleted",t)}a(xJt,"deleted");async function TJt(e,t,r){let n={userId:e._id,roleId:t};await de("role:assigned",n,r)}a(TJt,"assigned");async function AJt(e,t){let r={userId:e._id,roleId:t};await de("role:unassigned",r)}a(AJt,"unassigned");var DA={created:_Jt,updated:SJt,deleted:xJt,assigned:TJt,unassigned:AJt};async function RJt(e,t){await de("row_action:created",e,t)}a(RJt,"created");var V2e={created:RJt};var OJt=a(async(e,t)=>{let r={count:e};await de("rows:created",r,t)},"created"),IJt=a(async(e,t)=>{let r={tableId:e._id,count:t};await de("rows:imported",r)},"imported"),K2e={created:OJt,imported:IJt};async function kJt(e,t){let r={layoutId:e.layoutId,screenId:e._id,roleId:e.routing.roleId,audited:{name:e.routing?.route}};await de("screen:created",r,t)}a(kJt,"created");async function CJt(e){let t={layoutId:e.layoutId,screenId:e._id,roleId:e.routing.roleId,audited:{name:e.routing?.route}};await de("screen:deleted",t)}a(CJt,"deleted");var Q2e={created:kJt,deleted:CJt};async function DJt(e){let t={timezone:e};await de("served:builder",t)}a(DJt,"servedBuilder");async function PJt(e,t,r){let n={appVersion:e.version,timezone:t,embed:r===!0};await de("served:app",n)}a(PJt,"servedApp");async function NJt(e,t){let r={appId:e.appId,appVersion:e.version,timezone:t};await de("served:app:preview",r)}a(NJt,"servedAppPreview");var Y2e={servedBuilder:DJt,servedApp:PJt,servedAppPreview:NJt};async function LJt(e,t){let r={tableId:e._id,audited:{name:e.name}};await de("table:created",r,t)}a(LJt,"created");async function FJt(e,t){let r,n;for(let o in t.schema)if(!e.schema[o]){let s=t.schema[o];"default"in s&&s.default!=null&&(r=!0),s.type==="ai"&&(n=s.operation)}let i={tableId:t._id,defaultValues:r,aiColumn:n,audited:{name:t.name}};(r||n)&&await de("table:updated",i)}a(FJt,"updated");async function UJt(e,t){let r={tableId:e._id,audited:{name:e.name},appId:t};await de("table:deleted",r)}a(UJt,"deleted");async function MJt(e,t){let r={tableId:e._id,format:t,audited:{name:e.name}};await de("table:exported",r)}a(MJt,"exported");async function jJt(e){let t={tableId:e._id,audited:{name:e.name}};await de("table:imported",t)}a(jJt,"imported");var J2e={created:LJt,updated:FJt,deleted:UJt,exported:MJt,imported:jJt};async function BJt(e,t){let r={userId:e._id,viaScim:xc(),audited:{email:e.email}};await de("user:created",r,t)}a(BJt,"created");async function qJt(e){let t={userId:e._id,viaScim:xc(),audited:{email:e.email}};await de("user:updated",t)}a(qJt,"updated");async function $Jt(e){let t={userId:e._id,viaScim:xc(),audited:{email:e.email}};await de("user:deleted",t)}a($Jt,"deleted");async function zJt(e,t){let r={userId:e._id,audited:{email:e.email}};await de("user:admin:assigned",r,t)}a(zJt,"permissionAdminAssigned");async function WJt(e){let t={userId:e._id,audited:{email:e.email}};await de("user:admin:removed",t)}a(WJt,"permissionAdminRemoved");async function GJt(e,t){let r={userId:e._id,audited:{email:e.email}};await de("user:builder:assigned",r,t)}a(GJt,"permissionBuilderAssigned");async function HJt(e){let t={userId:e._id,audited:{email:e.email}};await de("user:builder:removed",t)}a(HJt,"permissionBuilderRemoved");async function VJt(e){let t={audited:{email:e}};await de("user:invited",t)}a(VJt,"invited");async function KJt(e){let t={userId:e._id,audited:{email:e.email}};await de("user:invite:accepted",t)}a(KJt,"inviteAccepted");async function QJt(e){let t={userId:e._id,audited:{email:e.email}};await de("user:password:force:reset",t)}a(QJt,"passwordForceReset");async function YJt(e){let t={userId:e._id,audited:{email:e.email}};await de("user:password:updated",t)}a(YJt,"passwordUpdated");async function JJt(e){let t={userId:e._id,audited:{email:e.email}};await de("user:password:reset:requested",t)}a(JJt,"passwordResetRequested");async function XJt(e){let t={userId:e._id,audited:{email:e.email}};await de("user:password:reset",t)}a(XJt,"passwordReset");async function ZJt(e){let t={users:e};await de("user:data:collaboration",t)}a(ZJt,"dataCollaboration");var cs={created:BJt,updated:qJt,deleted:$Jt,permissionAdminAssigned:zJt,permissionAdminRemoved:WJt,permissionBuilderAssigned:GJt,permissionBuilderRemoved:HJt,invited:VJt,inviteAccepted:KJt,passwordForceReset:QJt,passwordUpdated:YJt,passwordResetRequested:JJt,passwordReset:XJt,dataCollaboration:ZJt};async function eXt(e,t){let r={name:e.name,type:e.type,tableId:e.tableId};await de("view:created",r,t)}a(eXt,"created");async function tXt(e){let t={tableId:e.tableId};await de("view:updated",t)}a(tXt,"updated");async function rXt(e,t){let r={...Ye.views.isV2(e)?{id:e.id,tableId:e.tableId,appId:t}:{}};await de("view:deleted",r)}a(rXt,"deleted");async function nXt(e,t){let r={tableId:e._id,format:t};await de("view:exported",r)}a(nXt,"exported");async function iXt({tableId:e,filterGroups:t},r){let n={tableId:e,filterGroups:t};await de("view:filter:created",n,r)}a(iXt,"filterCreated");async function aXt({tableId:e,filterGroups:t}){let r={tableId:e,filterGroups:t};await de("view:filter:updated",r)}a(aXt,"filterUpdated");async function oXt(e){let t={tableId:e.tableId};await de("view:filter:deleted",t)}a(oXt,"filterDeleted");async function sXt({tableId:e,calculationType:t},r){let n={tableId:e,calculation:t};await de("view:calculation:created",n,r)}a(sXt,"calculationCreated");async function uXt(e){let t={tableId:e.tableId,calculation:e.calculation};await de("view:calculation:updated",t)}a(uXt,"calculationUpdated");async function cXt(e){let t={tableId:e.tableId,calculation:e.calculation};await de("view:calculation:deleted",t)}a(cXt,"calculationDeleted");async function lXt(e,t){let r={tableId:e};await de("view:join:created",r,t)}a(lXt,"viewJoinCreated");var X2e={created:eXt,updated:tXt,deleted:rXt,exported:nXt,filterCreated:iXt,filterUpdated:aXt,filterDeleted:oXt,calculationCreated:sXt,calculationUpdated:uXt,calculationDeleted:cXt,viewJoinCreated:lXt};async function fXt(e,t){let r={workspaceAppId:e._id,audited:{name:e.name},appId:t};await de("workspace_app:deleted",r)}a(fXt,"deleted");var Z2e={deleted:fXt};function pXt(){}a(pXt,"initAsyncEvents");var dXt=a(async()=>{await wp.shutdown(),console.log("Events shutdown")},"shutdown");var Ah={};oe(Ah,{creatorsInList:()=>vy,getAccountHolderFromUsers:()=>VL,hasAdminPermissions:()=>Th,hasAppBuilderPermissions:()=>iFe,hasBuilderPermissions:()=>us,isAdmin:()=>Gl,isAdminOrBuilder:()=>nFe,isAdminOrWorkspaceBuilder:()=>WL,isBuilder:()=>cE,isCreatorAsync:()=>NA,isCreatorSync:()=>GL,isGlobalBuilder:()=>rFe,validateUniqueUser:()=>HL});async function rK(e){let t=[],r=await eFe(e);t.push(...r.map(s=>s.email));let n=await tFe(e);t.push(...n.map(s=>s._id));let i=await oE(e);t.push(...i.map(s=>s.email));let o=await _9(e);return t.push(...o.map(s=>s.email)),[...new Set(t.map(s=>s.toLowerCase()))]}a(rK,"searchExistingEmails");async function zL(e){return await Nx("platform_users_lowercase_2",{keys:[e.toLowerCase()],include_docs:!0})}a(zL,"getPlatformUsers");async function PA(e){return(await zL(e))[0]??null}a(PA,"getFirstPlatformUser");async function eFe(e){let r={keys:e.map(i=>i.toLowerCase()),include_docs:!0},n={arrayResponse:!0};return await Zf("by_email2",r,void 0,n)}a(eFe,"getExistingTenantUsers");async function tFe(e){let r={keys:e.map(n=>n.toLowerCase()),include_docs:!0};return await Nx("platform_users_lowercase_2",r)}a(tFe,"getExistingPlatformUsers");async function oE(e){let r={keys:e.map(n=>n.toLowerCase()),include_docs:!0};return await Nx("account_by_email",r)}a(oE,"getExistingAccounts");var cE=Zi.users.isBuilder,Gl=Zi.users.isAdmin,rFe=Zi.users.isGlobalBuilder,nFe=Zi.users.isAdminOrBuilder,Th=Zi.users.hasAdminPermissions,us=Zi.users.hasBuilderPermissions,iFe=Zi.users.hasAppBuilderPermissions,WL=Zi.users.isAdminOrWorkspaceBuilder;async function vy(e,t){let r=[...new Set(e.filter(i=>i.userGroups).flatMap(i=>i.userGroups))];return t=await Rr().getMultiple(r,{allowMissing:!0}),e.map(i=>GL(i,t))}a(vy,"creatorsInList");async function NA(e){let t=[];return e.userGroups&&(t=await Rr().getMultiple(e.userGroups)),GL(e,t)}a(NA,"isCreatorAsync");function GL(e,t){let r=Zi.users.isCreator(e);return!r&&e?hXt(e,t):r}a(GL,"isCreatorSync");function hXt(e,t){let r=t?.filter(n=>e.userGroups?.indexOf(n._id)!==-1);return r&&r.length>0?r.some(n=>Object.values(n.roles||{}).includes("CREATOR")):!1}a(hXt,"isCreatorByGroupMembership");async function HL(e,t){if(K.MULTI_TENANCY){let r=await PA(e);if(r!=null&&r.tenantId!==t)throw new vp(e)}if(!K.SELF_HOSTED&&!K.DISABLE_ACCOUNT_PORTAL){let r=await ly(e);if(r&&r.verified&&r.tenantId!==t)throw new vp(e)}}a(HL,"validateUniqueUser");async function VL(e){if(!K.SELF_HOSTED&&!K.DISABLE_ACCOUNT_PORTAL){let t=await oE(e.map(r=>r.email));return e.find(r=>t.map(n=>n.email).includes(r.email))}}a(VL,"getAccountHolderFromUsers");var nK=a(async e=>{await cs.deleted(e),us(e)&&await cs.permissionBuilderRemoved(e),Th(e)&&await cs.permissionAdminRemoved(e)},"handleDeleteEvents"),mXt=a(async(e,t,r)=>{for(let[n,i]of Object.entries(t))(!r||r[n]!==i)&&await DA.assigned(e,i)},"assignAppRoleEvents"),gXt=a(async(e,t,r)=>{if(r)for(let[n,i]of Object.entries(r))(!t||t[n]!==i)&&await DA.unassigned(e,i)},"unassignAppRoleEvents"),yXt=a(async(e,t)=>{let r=e.roles,n=t?.roles;await mXt(e,r,n),await gXt(e,r,n)},"handleAppRoleEvents"),iK=a(async(e,t)=>{let r=Pt(),n;!K.SELF_HOSTED&&!K.DISABLE_ACCOUNT_PORTAL&&(n=await tA(r)),await Bc.identifyUser(e,n),t?(await cs.updated(e),vXt(e,t)&&await cs.permissionBuilderRemoved(e),EXt(e,t)&&await cs.permissionAdminRemoved(e),!t.forceResetPassword&&e.forceResetPassword&&e.password&&await cs.passwordForceReset(e),e.password!==t.password&&await cs.passwordUpdated(e)):await cs.created(e),bXt(e,t)&&await cs.permissionBuilderAssigned(e),wXt(e,t)&&await cs.permissionAdminAssigned(e),await yXt(e,t)},"handleSaveEvents"),bXt=a((e,t)=>aFe(e,t,us),"isAddingBuilder"),vXt=a((e,t)=>oFe(e,t,us),"isRemovingBuilder"),wXt=a((e,t)=>aFe(e,t,Th),"isAddingAdmin"),EXt=a((e,t)=>oFe(e,t,Th),"isRemovingAdmin"),aFe=a((e,t,r)=>!(!r(e)||t&&r(t)),"isAddingPermission"),oFe=a((e,t,r)=>!(r(e)||!t||!r(t)),"isRemovingPermission");var xXt=a(async e=>{let t=e._id;await zl.removeUser(e),await nK(e),await Rh.invalidateUser(t),await nA(t,{reason:"bulk-deletion"})},"bulkDeleteProcessing"),Hl=class e{static{a(this,"UserDB")}static init(t,r,n){e.quotas=t,e.groups=r,e.features=n}static async isPreventPasswordActions(t,r){return K.ENABLE_SSO_MAINTENANCE_MODE&&Gl(t)?!1:await e.features.isSSOEnforced()||$b(t)?!0:(r||(r=await tA(Pt())),!!(r&&r.email===t.email&&pk(r)))}static async buildUser(t,r={hashPassword:!0,requirePassword:!0},n,i,o){let{password:s,_id:u}=t;i&&!i.password&&(r.requirePassword=!1);let c;if(s&&s!==i?.password){if(await e.isPreventPasswordActions(t,o))throw new ve("Password change is disabled for this user",400);if(!r.skipPasswordValidation){let p=ZDe(s);if(!p.valid)throw new ve(p.error,400)}c=r.hashPassword?await Q4(s):s}else i&&(c=i.password);let l=r.requirePassword&&!await e.features.isSSOEnforced();if(!c&&l)throw"Password must be specified.";u=u||Xv();let f={createdAt:Date.now(),...i,...t,_id:u,password:c,tenantId:n};return f.roles||(f.roles={}),f.status==null&&(f.status="active"),f}static async allUsers(){return(await Rr().allDocs(yg(null,{include_docs:!0}))).rows.map(n=>n.doc)}static async countUsersByApp(t){return{userCount:(await QL(t,{})).length}}static async getUsersByAppAccess(t){return await aK(t.appId,{limit:t.limit||50})}static async getUserByEmail(t){return qc(t)}static async getUser(t){let r=await wy(t);return r&&delete r.password,r}static async bulkGet(t){return await KL(t)}static async bulkUpdate(t){return await LA(t)}static async save(t,r={}){r.hashPassword==null&&(r.hashPassword=!0),r.requirePassword==null&&(r.requirePassword=!0);let n=Pt(),i=Rr(),{email:o,_id:s,userGroups:u=[],roles:c}=t;if(!o&&!s)throw new Error("_id or email is required");let l;if(s)try{if(l=await wy(s),o&&l.email!==o&&!r.allowChangingEmail)throw new Error("Email address cannot be changed")}catch(d){if(d.status!==404)throw d}if(!l&&o&&(l=await qc(o),l&&l._id!==s))throw new vp(o);let f=1,p=0;if((r.isAccountHolder||l)&&(f=0,p=1),l){let[d,h]=await vy([l,t]);p=d!==h?1:0}return e.quotas.addUsers(f,p,async()=>{r.isAccountHolder||await HL(o,n);let d=await e.buildUser(t,r,n,l);r.currentUserId&&r.currentUserId===l?._id&&(d=oK(d,l)),!l&&c?.length&&(d.roles={...c});let h=[];if(!s&&u.length>0)for(let m of u)h.push(e.groups.addUsers(m,[d._id]));try{let m=await i.put(d);return d._rev=m.rev,await iK(d,l),l&&d.email!==l.email&&await zl.removeUser({email:l.email}),await zl.addUser(n,d._id,d.email,d.ssoId),await Rh.invalidateUser(m.id),await Promise.all(h),i.get(d._id)}catch(m){throw m.status===409?"User exists already":m}})}static async bulkCreate(t,r){let n=Pt(),i=[],o=[],s=[],u=t.map(d=>d.email),c=await rK(u),l=[];for(let d of t){let h=o.find(g=>g.email.toLowerCase()===d.email.toLowerCase()),m=c.includes(d.email.toLowerCase());if(h||m){l.push({email:d.email,reason:"Unavailable"});continue}d.userGroups=r||[],o.push(d),await NA(d)&&s.push(d)}let f=await tA(n),p=await e.features.isSSOEnforced();return e.quotas.addUsers(o.length,s.length,async()=>{for(let m of o)p&&delete m.password,i.push(e.buildUser(m,{hashPassword:!0,requirePassword:!p},n,void 0,f));let d=await Promise.all(i);await LA(d);for(let m of d)await zl.addUser(n,m._id,m.email),await iK(m,void 0);let h=d.map(m=>({_id:m._id,email:m.email}));if(Array.isArray(h)&&r){let m=[],g=h.map(y=>y._id);for(let y of r)m.push(e.groups.addUsers(y,g));await Promise.all(m)}return{successful:h,unsuccessful:l}})}static async bulkDelete(t){let r=Rr(),n={successful:[],unsuccessful:[]},i=await VL(t);i&&(t=t.filter(h=>h.userId!==i.userId),n.unsuccessful.push({_id:i.userId,email:i.email,reason:"Account holder cannot be deleted"}));let s=(await r.allDocs({include_docs:!0,keys:t.map(h=>h.userId)})).rows.map(h=>h.doc),u=s.map(h=>({...h,_deleted:!0})),c=await LA(u),f=(await vy(s)).filter(h=>h).length,p=[];for(let h of s){let g=(await PA(h._id)).ssoId;g&&(await zL(g)).filter(b=>b.ssoId==null).forEach(b=>{p.push({...b,_deleted:!0})}),await xXt(h)}await cy().bulkDocs(p),await e.quotas.removeUsers(u.length,f);let d={};return s.reduce((h,m)=>(h[m._id]=m,h),d),c.forEach(h=>{let m=d[h.id].email;h.ok?n.successful.push({_id:h.id,email:m}):n.unsuccessful.push({_id:h.id,email:m,reason:"Database error"})}),n}static async destroy(t){let r=Rr(),n=await r.get(t),i=n._id;if(!K.SELF_HOSTED&&!K.DISABLE_ACCOUNT_PORTAL){let s=n.email;if(await ly(s))throw n.userId===qf()._id?new ve('Please visit "Account" to delete this user',400):new ve("Account holder cannot be deleted",400)}await zl.removeUser(n),await r.remove(i,n._rev);let o=await NA(n)?1:0;await e.quotas.removeUsers(1,o),await nK(n),await Rh.invalidateUser(i),await nA(i,{reason:"deletion"})}static async createAdminUser(t,r,n){let i=n?.password,o={email:t,password:i,createdAt:Date.now(),roles:{},builder:{global:!0},admin:{global:!0},tenantId:r,firstName:n?.firstName,lastName:n?.lastName};return n?.ssoId&&(o.ssoId=n.ssoId),await Vw(sa.CHECKLIST),await e.save(o,{hashPassword:n?.hashPassword,requirePassword:n?.requirePassword,skipPasswordValidation:n?.skipPasswordValidation,isAccountHolder:!0})}static async getGroups(t){return await this.groups.getBulk(t)}static async getGroupBuilderAppIds(t){return await this.groups.getGroupBuilderAppIds(t)}};function FA(e){return Array.isArray(e)?e.map(t=>{if(t)return delete t.password,t}):e&&(delete e.password,e)}a(FA,"removeUserPassword");async function KL(e,t){let n=(await Rr().allDocs({keys:e,include_docs:!0})).rows.map(i=>i.doc);return t?.cleanup&&(n=FA(n)),n}a(KL,"bulkGetGlobalUsersById");async function AXt(){let e=Rr(),t=`us${Fe}`;return(await e.allDocs({startkey:t,endkey:`${t}${Na}`})).rows.map(n=>n.id)}a(AXt,"getAllUserIds");async function RXt(){let e=Rr(),t=`us${Fe}`;return(await e.allDocs({startkey:t,endkey:`${t}${Na}`,include_docs:!0})).rows.map(n=>n.doc)}a(RXt,"getAllUsers");async function LA(e){return await Rr().bulkDocs(e)}a(LA,"bulkUpdateGlobalUsers");async function wy(e,t){let n=await Rr().get(e);return t?.cleanup&&(n=FA(n)),n}a(wy,"getById");async function qc(e,t){if(e==null)throw"Must supply an email address to view";let r=await Zf("by_email2",{key:e.toLowerCase(),include_docs:!0});if(Array.isArray(r))throw new Error(`Multiple users found with email address: ${e}`);let n=r;return t?.cleanup&&(n=FA(n)),n}a(qc,"getGlobalUserByEmail");async function OXt(e){try{let t=await qc(e);if(Array.isArray(t)||t!=null)return!0}catch{return!1}return!1}a(OXt,"doesUserExist");async function QL(e,t,r){if(typeof e!="string")throw new Error("Must provide a string based workspace ID");let n=k1(e,{include_docs:!0});n.startkey=t&&t.startkey?t.startkey:n.startkey;let i=await Zf("by_app",n);i||(i=[]);let o=Array.isArray(i)?i:[i];return r?.cleanup&&(o=FA(o)),o}a(QL,"searchGlobalUsersByApp");async function aK(e,t){let r=`roles.${e}`,n=[{"builder.global":!0},{"admin.global":!0}];if(e){let s={[r]:{$exists:!0}};n.push(s)}return(await Rr().find({selector:{$or:n,_id:{$regex:"^us_"}},limit:t?.limit||50})).docs}a(aK,"searchGlobalUsersByAppAccess");function sFe(e,t){if(t)return I1(zs(e),t._id)}a(sFe,"getGlobalUserByAppPage");async function uFe(e,t,r){if(typeof e!="string")throw new Error("Must provide a string to search by");let n=e.toLowerCase(),i=t&&t.startkey?t.startkey:n,o=await Zf("by_email2",{...t,startkey:i,endkey:`${n}${Na}`});o||(o=[]);let s=Array.isArray(o)?o:[o];return r?.cleanup&&(s=FA(s)),s}a(uFe,"searchGlobalUsersByEmail");var IXt=8;async function cFe({bookmark:e,query:t,appId:r,limit:n}={}){let i=Rr(),o=n??IXt,u={include_docs:!0,limit:o+1};e&&(u.startkey=e);let c,l="_id",f;return t?.equal?._id?c=[await wy(t.equal._id)]:r?(c=await QL(r,u),f=a(p=>sFe(r,p),"getKey")):t?.string?.email?(c=await uFe(t?.string?.email,u),l="email"):t?.oneOf?._id?c=await KL(t?.oneOf?._id,{cleanup:!0}):t?(c=(await i.allDocs(yg(null,{...u,limit:void 0}))).rows.map(d=>d.doc),c=Lr.search(c,{query:t,limit:u.limit}).rows):c=(await i.allDocs(yg(null,u))).rows.map(d=>d.doc),dz(c,o,{paginate:!0,property:l,getKey:f})}a(cFe,"paginatedUsers");async function kXt(){return(await gz("by_email2",{limit:0,include_docs:!1})).total_rows}a(kXt,"getUserCount");async function CXt(){let e=0;async function t(r){let n=await cFe({bookmark:r}),i=await vy(n.data);e+=i.filter(o=>o).length,n.hasNextPage&&await t(n.nextPage)}return a(t,"iterate"),await t(),e}a(CXt,"getCreatorCount");function DXt(e){return delete e.admin,delete e.builder,e}a(DXt,"removePortalUserPermissions");function oK(e,t){return delete e.admin,delete e.builder,delete e.roles,t&&(e.admin=t.admin,e.builder=t.builder,e.roles=t.roles),e}a(oK,"cleanseUserObject");async function PXt(e,t){let r=zs(t);e.builder??={},e.builder.creator=!0,e.builder.apps??=[],e.builder.apps.push(r),await Hl.save(e,{hashPassword:!1})}a(PXt,"addAppBuilder");async function NXt(e,t){let r=zs(t);e.builder&&e.builder.apps?.includes(r)&&(e.builder.apps=e.builder.apps.filter(n=>n!==r)),await Hl.save(e,{hashPassword:!1})}a(NXt,"removeAppBuilder");var lFe=3600;async function LXt(e,t){let n=await wz(t).get(e);if(n.budibaseAccess=!0,!K.SELF_HOSTED&&!K.DISABLE_ACCOUNT_PORTAL){let i=await ly(n.email);i&&(n.account=i,n.accountPortalAccess=!0)}return n}a(LXt,"populateFromDB");async function FXt(e){let t=await Hl.bulkGet(e),r=e.filter((i,o)=>!t[o]),n=t.filter(i=>i);return await Promise.all(n.map(async i=>{if(i.budibaseAccess=!0,!K.SELF_HOSTED&&!K.DISABLE_ACCOUNT_PORTAL){let o=await ly(i.email);o&&(i.account=o,i.accountPortalAccess=!0)}})),r.length?{users:n,notFoundIds:r}:{users:n}}a(FXt,"populateUsersFromDB");async function UA({userId:e,tenantId:t,email:r,populateUser:n}){if(n||(n=LXt),!t)try{t=Pt()}catch{t=await zl.lookupTenantId(e)}let i=await Ox(),o=await i.get(e);return o||(o=await n(e,t,r),await i.store(e,o,lFe)),o&&!o.tenantId&&t&&(o.tenantId=t),o.userGroups&&!Zi.users.isGlobalBuilder(o)&&await es(t,async()=>{let s=await Hl.getGroupBuilderAppIds(o);if(s.length){let u=o.builder?.apps||[];o.builder={apps:[...new Set(u.concat(s))]}}}),o}a(UA,"getUser");async function UXt(e){let t=await Ox(),r=await t.bulkGet(e),n=e.filter(s=>!r[s]),i=Object.values(r).filter(s=>!!s),o;if(n.length){let s=await FXt(n);o=s.notFoundIds;for(let u of s.users)await t.store(u._id,u,lFe);i.push(...s.users)}return{users:i,notFoundIds:o}}a(UXt,"getUsers");async function MA(e){await(await Ox()).delete(e)}a(MA,"invalidateUser");var RK={};oe(RK,{Writethrough:()=>xK});var $c={};oe($c,{AUTO_EXTEND_POLLING_MS:()=>VUe,doWithLock:()=>_K,newRedlock:()=>Sy});var HUe=ne(GUe());async function iZt(e,t){if(e==="custom")return Sy(t);switch(e){case"try_once":return Sy(hE.TRY_ONCE);case"try_twice":return Sy(hE.TRY_TWICE);case"default":return Sy(hE.DEFAULT);case"delay_500":return Sy(hE.DELAY_500);case"auto_extend":return Sy(hE.AUTO_EXTEND);default:throw Mt.unreachable(e)}}a(iZt,"getClient");var hE={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 Sy(e={}){let t={...hE.DEFAULT,...e},n=(await uz()).client;return new HUe.default([n],t)}a(Sy,"newRedlock");function aZt(e){let r=`lock:${e.systemLock?"system":Pt()}_${e.name}`;return e.resource&&(r=r+`_${e.resource}`),r}a(aZt,"getLockName");var VUe=gi.fromSeconds(10).toMs();async function _K(e,t){let r=await iZt(e.type,e.customOptions),n,i;try{let o=aZt(e),s=e.type==="auto_extend"?VUe:e.ttl;if(n=await r.lock(o,s),e.type==="auto_extend"){let c=a(()=>{i=setTimeout(async()=>{n=await n.extend(s,()=>e.onExtend&&e.onExtend()),c()},s/2)},"extendInIntervals");c()}return{executed:!0,result:await t()}}catch(o){if(o.name==="LockError"){if(e.type==="try_once")return{executed:!1};throw o}else throw o}finally{clearTimeout(i),await n?.unlock()}}a(_K,"doWithLock");var KUe=1e4,SK=null;async function n2(){if(!SK){let e=await sz();SK=new ay(e)}return SK}a(n2,"getCache");function qA(e,t){return e.name+t}a(qA,"makeCacheKey");function AK(e,t=null){return{doc:e,lastWrite:t||Date.now()}}a(AK,"makeCacheItem");async function oZt(e,t,r=KUe){let n=await n2(),i=t._id,o;i&&(o=await n.get(qA(e,i)));let s=!o||o.lastWrite<Date.now()-r,u=t;return s&&((await _K({type:"try_once",name:"persist_writethrough",resource:i,ttl:15e3},async()=>{let l=a(async f=>{let p=await e.put(f,{force:!0});u._id=p.id,u._rev=p.rev},"writeDb");try{await l(t)}catch(f){if(f.status!==409)throw f;Hw("Ignoring conflict in write-through cache")}})).executed||Hw("Ignoring redlock conflict in write-through cache")),o=AK(u,s?null:o?.lastWrite),u._id&&await n.store(qA(e,u._id),o),{ok:!0,id:u._id,rev:u._rev}}a(oZt,"put");async function sZt(e,t){let r=await n2(),n=qA(e,t),i=await r.get(n);if(!i){let o=await e.get(t);i=AK(o),await r.store(n,i)}return i.doc}a(sZt,"get");async function uZt(e,t){let r=await n2(),n=qA(e,t),i=await r.get(n);if(!i){let o=await e.tryGet(t);if(!o)return null;i=AK(o),await r.store(n,i)}return i.doc}a(uZt,"tryGet");async function cZt(e,t,r){let n=await n2();if(!t)throw new Error("No ID/Rev provided.");let i=typeof t=="string"?t:t._id;r=typeof t=="string"?r:t._rev;try{await n.delete(qA(e,i))}finally{await e.remove(i,r)}}a(cZt,"remove");var xK=class{static{a(this,"Writethrough")}constructor(t,r=KUe){this.db=t,this.writeRateMs=r}async put(t,r=this.writeRateMs){return oZt(this.db,t,r)}async get(t){return sZt(this.db,t)}async tryGet(t){return uZt(this.db,t)}async remove(t,r){return cZt(this.db,t,r)}};function i2(e){return`config${Fe}${e}`}a(i2,"generateConfigID");async function Fu(e){let t=Rr();try{return await t.get(i2(e))}catch(r){if(r.status===404)return;throw r}}a(Fu,"getConfig");async function lZt(e){return e._id||(e._id=i2(e.type)),Rr().put(e)}a(lZt,"save");async function sE(){let e=await Fu("settings");return e||(e={_id:i2("settings"),type:"settings",config:{}}),e.config.platformUrl=await zA({tenantAware:!0,config:e.config}),e.config.analyticsEnabled=await iL({config:e.config}),e}a(sE,"getSettingsConfigDoc");async function IK(){return(await sE()).config}a(IK,"getSettingsConfig");async function zA(e={tenantAware:!0}){let t=K.PLATFORM_URL||"http://localhost:10000";if(!K.SELF_HOSTED&&K.MULTI_TENANCY&&e.tenantAware){let r=Pt();t.includes("localhost:")||(t=t.replace("://",`://${r}.`))}else if(K.SELF_HOSTED){let r=e?.config?e.config:(await Fu("settings"))?.config;r?.platformUrl&&(t=r.platformUrl)}return t}a(zA,"getPlatformUrl");var iL=a(async e=>{if(!K.SELF_HOSTED)return!!K.ENABLE_ANALYTICS;let t=await gh(sa.ANALYTICS_ENABLED,86400,async()=>{let n=e?.config?e.config:(await Fu("settings"))?.config;if(n?.analyticsEnabled===!1)return!1;if(n?.analyticsEnabled===!0)return!0});if(t!==void 0)return t;let r=K.ENABLE_ANALYTICS;return!(r===0||r===!1)},"analyticsEnabled");async function fZt(){return await Fu("google")}a(fZt,"getGoogleConfigDoc");async function a2(){return(await fZt())?.config}a(a2,"getGoogleConfig");async function kK(){if(!K.SELF_HOSTED)return OK();let e=await a2();return(!e||!e.activated)&&(e=OK()),e}a(kK,"getGoogleDatasourceConfig");function OK(){if(K.GOOGLE_CLIENT_ID&&K.GOOGLE_CLIENT_SECRET)return{clientID:K.GOOGLE_CLIENT_ID,clientSecret:K.GOOGLE_CLIENT_SECRET,activated:!0}}a(OK,"getDefaultGoogleConfig");async function pZt(){return Fu("logos_oidc")}a(pZt,"getOIDCLogosDoc");async function dZt(){return Fu("oidc")}a(dZt,"getOIDCConfigDoc");async function hZt(){let e=(await dZt())?.config;return e?.configs&&e.configs[0]}a(hZt,"getOIDCConfig");async function CK(e){let t=(await Fu("oidc"))?.config;return t&&t.configs.filter(r=>r.uuid===e)[0]}a(CK,"getOIDCConfigById");async function QUe(){return Fu("smtp")}a(QUe,"getSMTPConfigDoc");async function mZt(e){let t=await QUe();if(t)return t.config;let r=K.SELF_HOSTED||!e;if(K.SMTP_FALLBACK_ENABLED&&r)return{port:K.SMTP_PORT,host:K.SMTP_HOST,secure:!1,from:K.SMTP_FROM_ADDRESS,auth:{user:K.SMTP_USER,pass:K.SMTP_PASSWORD},fallback:!0}}a(mZt,"getSMTPConfig");async function gZt(){return(await Fu("scim"))?.config}a(gZt,"getSCIMConfig");async function yZt(){return Fu("ai")}a(yZt,"getAIConfig");async function bZt(){return Fu("recaptcha")}a(bZt,"getRecaptchaConfig");var Dr={};oe(Dr,{AccessController:()=>NK,BUILTIN_ROLE_IDS:()=>LK,Role:()=>kh,RoleHierarchyTraversal:()=>o2,RoleIDVersion:()=>FK,builtinRoleToNumber:()=>WA,checkForRoleResourceArray:()=>ZUe,externalRole:()=>xZt,findRole:()=>GA,getAllRoleIds:()=>OZt,getAllRoles:()=>BK,getBuiltinRole:()=>JUe,getBuiltinRoles:()=>MK,getDBRoleID:()=>eMe,getExternalRoleID:()=>Ch,getExternalRoleIDs:()=>tMe,getRole:()=>TZt,getUserRoleHierarchy:()=>jK,getUserRoleIdHierarchy:()=>XUe,isBuiltin:()=>xy,lowerBuiltinRoleID:()=>SZt,prefixRoleIDNoBuiltin:()=>PK,roleIDsAreEqual:()=>Uu,roleToNumber:()=>_Zt,saveRoles:()=>AZt,validInherits:()=>EZt});var YUe=require("lodash"),s2=ne(require("lodash/fp/cloneDeep")),DK=ne(Y7());var LK={ADMIN:"ADMIN",POWER:"POWER",BASIC:"BASIC",PUBLIC:"PUBLIC"},Fn={...LK,BUILDER:"BUILDER"},FK={UUID:void 0,NAME:"name"};function wZt(e,t){return Array.isArray(t)?t.filter(r=>e.includes(r)).length===t.length:e.includes(t)}a(wZt,"rolesInList");var kh=class{constructor(t,r,n,i){this.permissions={};this._id=t,this.name=r,this.uiMetadata=i,this.permissionId=n,this.version=FK.NAME}static{a(this,"Role")}addInheritance(t){return t&&typeof t=="string"?t=PK(t):t&&Array.isArray(t)&&(t=t.map(PK)),this.inherits=t,this}},o2=class{static{a(this,"RoleHierarchyTraversal")}constructor(t,r){this.allRoles=t,this.opts=r}walk(t){let r=this.opts,n=this.allRoles,i=[];if(!t||!t._id)return i;if(i.push(t),Array.isArray(t.inherits))for(let o of t.inherits){let s=GA(o,n,r);s&&(i=i.concat(this.walk(s)))}else{let o=[],s=t;for(;s&&s.inherits&&!wZt(o,s.inherits);){if(Array.isArray(s.inherits))return i.concat(this.walk(s));if(o.push(s.inherits),s=GA(s.inherits,n,r),s&&i.push(s),Ye.roles.checkForRoleInheritanceLoops(i))break}}return(0,YUe.uniqBy)(i,o=>o._id)}},UK={ADMIN:new kh(Fn.ADMIN,Fn.ADMIN,"admin",{displayName:"App admin",description:"Can do everything",color:"var(--spectrum-global-color-static-red-400)"}).addInheritance(Fn.POWER),POWER:new kh(Fn.POWER,Fn.POWER,"power",{displayName:"App power user",description:"An app user with more access",color:"var(--spectrum-global-color-static-orange-400)"}).addInheritance(Fn.BASIC),BASIC:new kh(Fn.BASIC,Fn.BASIC,"write",{displayName:"App user",description:"Any logged in user",color:"var(--spectrum-global-color-static-green-400)"}).addInheritance(Fn.PUBLIC),PUBLIC:new kh(Fn.PUBLIC,Fn.PUBLIC,"public",{displayName:"Public user",description:"Accessible to anyone",color:"var(--spectrum-global-color-static-blue-400)"}),BUILDER:new kh(Fn.BUILDER,Fn.BUILDER,"admin",{displayName:"Builder user",description:"Users that can edit this app",color:"var(--spectrum-global-color-static-magenta-600)"})};function MK(){return(0,s2.default)(UK)}a(MK,"getBuiltinRoles");function xy(e){return Object.values(LK).includes(e)}a(xy,"isBuiltin");function PK(e){return xy(e)?e:Jf(e)}a(PK,"prefixRoleIDNoBuiltin");function JUe(e){let t=Object.values(UK).find(r=>e.includes(r._id));if(t)return(0,s2.default)(t)}a(JUe,"getBuiltinRole");function EZt(e,t){if(!t)return!1;let r=a(n=>e.find(i=>Uu(i._id,n)),"find");if(Array.isArray(t)){let n=t.filter(i=>r(i));return t.length!==0&&n.length===t.length}else return!!r(t)}a(EZt,"validInherits");function WA(e){let t=MK(),r=Object.values(t).length+1;if(Uu(e,Fn.ADMIN)||Uu(e,Fn.BUILDER))return r;let n=t[e],i=0;do{if(!n)break;if(Array.isArray(n.inherits))throw new Error("Built-in roles don't support multi-inheritance");n=t[n.inherits],i++}while(n!==null);return i}a(WA,"builtinRoleToNumber");async function _Zt(e){if(xy(e))return WA(e);let t=await jK(e,{defaultPublic:!0}),r=a(n=>{if(!n.inherits)return 0;if(Array.isArray(n.inherits)){let i=n.inherits.map(o=>{let s=t.find(u=>Uu(u._id,o));if(s)return r(s)+1}).filter(o=>o).sort().pop();if(i!=null)return i}else if(xy(n.inherits))return WA(n.inherits)+1;return 0},"findNumber");return Math.max(...t.map(r))}a(_Zt,"roleToNumber");function SZt(e,t){return e?t&&WA(e)>WA(t)?t:e:t}a(SZt,"lowerBuiltinRoleID");function Uu(e,t){return Jf(e)===Jf(t)}a(Uu,"roleIDsAreEqual");function xZt(e){let t;return e._id&&(t=Ch(e._id)),{...e,_id:t,inherits:tMe(e.inherits,e.version)}}a(xZt,"externalRole");function GA(e,t,r){let n=JUe(e);n||(e=Jf(e));let i=t.find(o=>o._id&&Uu(o._id,e));return!i&&!xy(e)&&r?.defaultPublic?(0,s2.default)(UK.PUBLIC):(n=Object.assign(n||{},i),n?._id&&(n._id=Ch(n._id,n.version)),Object.keys(n).length===0?void 0:n)}a(GA,"findRole");async function TZt(e,t){let r=Yv(),n=[];if(!xy(e)){let i=await r.tryGet(eMe(e));i&&n.push(i)}return GA(e,n,t)}a(TZt,"getRole");async function AZt(e){await Yv().bulkDocs(e.filter(r=>r._id).map(r=>({...r,_id:Jf(r._id)})))}a(AZt,"saveRoles");async function RZt(e,t){let r=await BK();if(Uu(e,Fn.ADMIN))return r;let n=GA(e,r,t),i=[];return n&&(i=new o2(r,t).walk(n)),i}a(RZt,"getAllUserRoles");async function XUe(e){return(await jK(e)).map(r=>r._id)}a(XUe,"getUserRoleIdHierarchy");async function jK(e,t){return RZt(e,t)}a(jK,"getUserRoleHierarchy");function ZUe(e,t){if(e&&!Array.isArray(e[t])){let r=e[t];e[t]=[r],r==="write"&&e[t].push("read")}return e}a(ZUe,"checkForRoleResourceArray");async function OZt(e){return(await BK(e)).map(r=>r._id)}a(OZt,"getAllRoleIds");async function BK(e){if(e)return $s(e,t);{let r;try{r=Yv()}catch{}return t(r)}async function t(r){let n=[];r&&(n=(await r.allDocs(C1(null,{include_docs:!0}))).rows.map(u=>u.doc),n.forEach(u=>u._id=Ch(u._id,u.version)));let i=MK(),o=[];!r||await IZt(r)?o=[Fn.ADMIN,Fn.POWER,Fn.BASIC,Fn.PUBLIC]:o=[Fn.ADMIN,Fn.BASIC,Fn.PUBLIC];for(let s of o){let u=i[s],c=n.filter(l=>Uu(l._id,s))[0];c==null?n.push(u||i.BASIC):(n=n.filter(l=>l._id!==c._id),c._id=Ch(u._id,c.version),n.push({...u,...c,name:u.name,_id:Ch(u._id,u.version)}))}for(let s of n)if(s.permissions)for(let u of Object.keys(s.permissions))s.permissions=ZUe(s.permissions,u);return n}a(t,"internal")}a(BK,"getAllRoles");async function IZt(e){let r=(await e.tryGet("app_metadata"))?.creationVersion;return!r||!DK.default.valid(r)?!0:!DK.default.gte(r,K.MIN_VERSION_WITHOUT_POWER_ROLE)}a(IZt,"shouldIncludePowerRole");var NK=class{static{a(this,"AccessController")}constructor(){this.userHierarchies={}}async hasAccess(t,r){if(t==null||t===""||Uu(t,Fn.BUILDER)||Uu(r,t)||Uu(r,Fn.BUILDER))return!0;let n=r?this.userHierarchies[r]:null;return!n&&r&&(n=await XUe(r),this.userHierarchies[r]=n),n?.find(i=>Uu(i,t))!==void 0}async checkScreensAccess(t,r){let n=[];for(let i of t){let o=await this.checkScreenAccess(i,r);o&&n.push(o)}return n}async checkScreenAccess(t,r){let n=t&&t.routing?t.routing.roleId:void 0;return await this.hasAccess(n,r)?t:null}};function eMe(e){return e?.startsWith("role")?e:Jf(e)}a(eMe,"getDBRoleID");function Ch(e,t){if(e.startsWith(`role${Fe}`)&&(xy(e)||t===FK.NAME)){let r=e.split(Fe);return r.shift(),r.join(Fe)}return e}a(Ch,"getExternalRoleID");function tMe(e,t){return e&&(typeof e=="string"?Ch(e,t):e.map(r=>Ch(r,t)))}a(tMe,"getExternalRoleIDs");var Ri={};oe(Ri,{BUILDER:()=>NZt,BUILTIN_PERMISSIONS:()=>u2,CREATOR:()=>LZt,GLOBAL_BUILDER:()=>FZt,PermissionImpl:()=>Un,PermissionLevel:()=>fd,PermissionType:()=>bS,doesHaveBasePermission:()=>DZt,getAllowedLevels:()=>aMe,getBuiltinPermissionByID:()=>CZt,getBuiltinPermissions:()=>kZt,isPermissionLevelHigherThanRead:()=>PZt,levelToNumber:()=>iMe});var rMe=ne(require("lodash/flatten")),nMe=ne(require("lodash/fp/cloneDeep"));var Un=class{static{a(this,"PermissionImpl")}constructor(t,r){this.type=t,this.level=r}};function iMe(e){switch(e){case"execute":return 0;case"read":return 1;case"write":return 2;case"admin":return 3;default:return-1}}a(iMe,"levelToNumber");function aMe(e){switch(e){case"execute":return["execute"];case"read":return["execute","read"];case"write":case"admin":return["execute","read","write"];default:return[]}}a(aMe,"getAllowedLevels");var u2={PUBLIC:{_id:"public",name:"Public",permissions:[new Un("webhook","execute")]},READ_ONLY:{_id:"read_only",name:"Read only",permissions:[new Un("query","read"),new Un("table","read"),new Un("app","read")]},WRITE:{_id:"write",name:"Read/Write",permissions:[new Un("query","write"),new Un("table","write"),new Un("automation","execute"),new Un("legacy_view","read"),new Un("app","read")]},POWER:{_id:"power",name:"Power",permissions:[new Un("table","write"),new Un("user","read"),new Un("automation","execute"),new Un("webhook","read"),new Un("legacy_view","read"),new Un("app","read")]},ADMIN:{_id:"admin",name:"Admin",permissions:[new Un("table","admin"),new Un("user","admin"),new Un("automation","admin"),new Un("webhook","read"),new Un("query","admin"),new Un("legacy_view","read"),new Un("app","read")]}};function kZt(){return(0,nMe.default)(u2)}a(kZt,"getBuiltinPermissions");function CZt(e){return Object.values(u2).find(r=>r._id===e)}a(CZt,"getBuiltinPermissionByID");function DZt(e,t,r){let n=[...new Set(r.map(s=>s.permissionId))],i=Object.values(u2),o=(0,rMe.default)(i.filter(s=>n.indexOf(s._id)!==-1).map(s=>s.permissions));for(let s of o)if(s.type===e&&aMe(s.level).indexOf(t)!==-1)return!0;return!1}a(DZt,"doesHaveBasePermission");function PZt(e){return iMe(e)>1}a(PZt,"isPermissionLevelHigherThanRead");var NZt="builder",LZt="creator",FZt="globalBuilder";var c2=ne(require("crypto")),sMe=ne(require("dd-trace")),uMe=require("lodash"),MZt=ne(O7());var oMe;function cMe(e){let t=e.split(",").map(n=>n.split(":")),r=[];for(let[n,...i]of t)for(let o of i){let s=!0;o.startsWith("!")&&(o=o.slice(1),s=!1),r.push({tenantId:n,key:o,value:s})}return r}a(cMe,"parseEnvFlags");function jZt(){return cMe(K.TENANT_FEATURE_FLAGS||"")}a(jZt,"getEnvFlags");var qK=class{constructor(t){this.flagSchema=t;this.setId=c2.randomUUID()}static{a(this,"FlagSet")}defaults(){return(0,uMe.cloneDeep)(this.flagSchema)}isFlagName(t){return this.flagSchema[t]!==void 0}async isEnabled(t){return(await this.fetch())[t]}async fetch(){return await sMe.default.trace("features.fetch",async t=>{let r=ez(this.setId);if(r)return t?.addTags({fromCache:!0}),r;let n={},i=this.defaults(),o=Pt(),s=new Set;if(x1())return i;for(let{tenantId:p,key:d,value:h}of jZt())if(!(!p||p!=="*"&&p!==o)&&(n.readFromEnvironmentVars=!0,h===!1&&s.add(d),!!this.isFlagName(d))){if(typeof i[d]!="boolean")throw new Error(`Feature: ${d} is not a boolean`);i[d]=h,n[`flags.${d}.source`]="environment"}let u=qf(),c=u?._id;if(!c){let p=X5();p&&(c=c2.createHash("sha512").update(p).digest("hex"))}let l=u?.tenantId;if(l||(l=o),n["identity.type"]=u?.type,n["identity._id"]=u?._id,n.tenantId=l,n.userId=c,oMe&&c){n.readFromPostHog=!0;let p=await sE(),d={tenantId:l},h={tenant:{id:l}};p.config.createdVersion&&(h.tenant.createdVersion=p.config.createdVersion),p.createdAt&&(h.tenant.createdAt=`${p.createdAt}`);let m=await oMe.getAllFlags(c,{personProperties:d,onlyEvaluateLocally:!0,groups:{tenant:l},groupProperties:h});for(let[g,y]of Object.entries(m))if(this.isFlagName(g)){if(typeof y!="boolean"){console.warn(`Invalid value for posthog flag "${g}": ${y}`);continue}if(!(i[g]===!0||s.has(g)))try{i[g]=y,n[`flags.${g}.source`]="posthog"}catch(b){console.warn(`Error parsing posthog flag "${g}": ${y}`,b)}}}let f=rz();for(let[p,d]of Object.entries(f))this.isFlagName(p)&&typeof d=="boolean"&&(i[p]=d,n[`flags.${p}.source`]="override");tz(this.setId,i);for(let[p,d]of Object.entries(i))n[`flags.${p}.value`]=d;return t?.addTags(n),i})}},BZt={USE_ZOD_VALIDATOR:!1,AI_AGENTS:!1,EMAIL_TRIGGER:!1,DEBUG_UI:K.isDev(),DEV_USE_CLIENT_FROM_STORAGE:!1,DUPLICATE_APP:!1,COPY_RESOURCES_BETWEEN_WORKSPACES:!1,PRIVATE_LLMS:!1},Ysn=new qK(BZt);var pr={};oe(pr,{adminOnly:()=>R2,auditLog:()=>O2,authError:()=>Wa,buildAuthMiddleware:()=>_gr,buildCsrfMiddleware:()=>xgr,buildTenancyMiddleware:()=>Sgr,builderOnly:()=>N2,builderOrAdmin:()=>L2,google:()=>Ip,internalApi:()=>U2,joiValidator:()=>YA,oidc:()=>qp,passport:()=>Tgr,platformLogout:()=>kgr,refreshOAuthToken:()=>Ogr,ssoCallbackUrl:()=>Ph,updateUserOAuth:()=>Igr,workspaceBuilderOrAdmin:()=>LU});var FU={};oe(FU,{adminOnly:()=>R2,auditLog:()=>O2,authError:()=>Wa,authenticated:()=>P2,builderOnly:()=>N2,builderOrAdmin:()=>L2,correlation:()=>pMe,csp:()=>IBe,csrf:()=>F2,datasource:()=>agr,errorHandling:()=>CBe,featureFlagCookie:()=>DBe,google:()=>Ip,internalApi:()=>U2,ip:()=>PBe,joiValidator:()=>YA,local:()=>wE,oidc:()=>qp,pino:()=>EBe,querystringToBody:()=>WGe,ssoCallbackUrl:()=>Ph,tenancy:()=>NU,workspaceBuilderOrAdmin:()=>LU});var fMe=require("uuid");var zZt=M1(),pMe=a((e,t)=>{let r=e.headers["x-budibase-correlation-id"];return r||(r=(0,fMe.v4)()),zZt.withId(r,()=>t())},"correlationMiddleware");var Inr=wBe(),knr=M1();function Cnr(){return{logger:KN,genReqId:knr.getId,autoLogging:{ignore:e=>!!e.url?.includes("/health")},serializers:{req:e=>({method:e.method,url:e.url,correlationId:e.id}),res:e=>({status:e.statusCode})}}}a(Cnr,"pinoSettings");function Dnr(){return K.HTTP_LOGGING?Inr(Cnr()):(e,t)=>t()}a(Dnr,"getMiddleware");var EBe=Dnr();var R2=a(async(e,t)=>(!e.internal&&!Gl(e.user)&&e.throw(403,"Admin user only endpoint."),t()),"adminOnly");var O2=a(async(e,t)=>t(),"auditLog");var Pnr=/\/:(.*?)(\/.*)?$/g,Oy=a(e=>e?e.map(t=>{let r=t.route,n=t.method,i=r.match(Pnr);if(i)for(let o of i){let u="/.*"+(o.endsWith("/")?"/":"");r=r.replace(o,u)}return{regex:new RegExp(r),method:n,route:r}}):[],"buildMatcherRegex"),Iy=a((e,t)=>t.find(({regex:r,method:n})=>{let i=r.test(e.request.url),o=n==="ALL"?!0:e.request.method.toLowerCase()===n.toLowerCase();return i&&o}),"matches");var Wc={};oe(Wc,{SecretOption:()=>xBe,decrypt:()=>jQ,decryptFile:()=>jnr,encrypt:()=>Fnr,encryptFile:()=>Unr,getSecret:()=>MQ});var xp=ne(require("crypto")),Dh=ne(require("fs")),LQ=require("path"),FQ=ne(require("zlib"));var I2="aes-256-ctr",SBe="-",Nnr=1e4,Lnr=32,k2=16,UQ=16,xBe=(r=>(r.API="api",r.ENCRYPTION="encryption",r))(xBe||{});function MQ(e){let t,r;switch(e){case"encryption":t=K.ENCRYPTION_KEY,r="ENCRYPTION_KEY";break;case"api":default:t=K.API_ENCRYPTION_KEY,r="API_ENCRYPTION_KEY";break}if(!t)throw new Error(`Secret "${r}" has not been set in environment.`);return t}a(MQ,"getSecret");function C2(e,t){return xp.default.pbkdf2Sync(e,new Uint8Array(t),Nnr,Lnr,"sha512")}a(C2,"stretchString");function Fnr(e,t="api"){let r=xp.default.randomBytes(k2),n=C2(MQ(t),r),i=xp.default.createCipheriv(I2,new Uint8Array(n),new Uint8Array(r)),o=i.update(e,"utf8"),s=i.final(),u=Buffer.concat([new Uint8Array(o),new Uint8Array(s)]).toString("hex");return`${r.toString("hex")}${SBe}${u}`}a(Fnr,"encrypt");function jQ(e,t="api"){let[r,n]=e.split(SBe),i=Buffer.from(r,"hex"),o=C2(MQ(t),i),s=xp.default.createDecipheriv(I2,new Uint8Array(o),new Uint8Array(i)),u=s.update(n,"hex"),c=s.final();return Buffer.concat([new Uint8Array(u),new Uint8Array(c)]).toString()}a(jQ,"decrypt");async function Unr({dir:e,filename:t},r){let n=`${t}.enc`,i=(0,LQ.join)(e,t);if(Dh.default.lstatSync(i).isDirectory())throw new Error("Unable to encrypt directory");let o=Dh.default.createReadStream(i),s=Dh.default.createWriteStream((0,LQ.join)(e,n)),u=xp.default.randomBytes(k2),c=xp.default.randomBytes(UQ),l=C2(r,u),f=xp.default.createCipheriv(I2,new Uint8Array(l),new Uint8Array(c));return s.write(u),s.write(c),o.pipe(FQ.default.createGzip()).pipe(f).pipe(s),new Promise(p=>{s.on("finish",()=>{p({filename:n,dir:e})})})}a(Unr,"encryptFile");async function Mnr(e){let t=Dh.default.createReadStream(e),r=await _Be(t,k2),n=await _Be(t,UQ);return t.close(),{salt:r,iv:n}}a(Mnr,"getSaltAndIV");async function jnr(e,t,r){if(Dh.default.lstatSync(e).isDirectory())throw new Error("Unable to decrypt directory");let{salt:n,iv:i}=await Mnr(e),o=Dh.default.createReadStream(e,{start:k2+UQ}),s=Dh.default.createWriteStream(t),u=C2(r,n),c=xp.default.createDecipheriv(I2,new Uint8Array(u),new Uint8Array(i)),l=FQ.default.createGunzip();return o.pipe(c).pipe(l).pipe(s),new Promise((f,p)=>{s.on("finish",()=>{s.close(),f()}),o.on("error",d=>{s.close(),p(d)}),c.on("error",d=>{s.close(),p(d)}),l.on("error",d=>{s.close(),p(d)}),s.on("error",d=>{s.close(),p(d)})})}a(jnr,"decryptFile");function _Be(e,t){return new Promise((r,n)=>{let i=0,o=[];e.on("readable",()=>{let s;for(;(s=e.read(t-i))!==null;)o.push(s),i+=s.length;r(Buffer.concat(o.map(u=>new Uint8Array(u))))}),e.on("end",()=>{n(new Error("Insufficient data in the stream."))}),e.on("error",s=>{n(s)})})}a(_Be,"readBytes");var ABe=ne(require("dd-trace"));var qnr=K.SESSION_UPDATE_PERIOD?parseInt(K.SESSION_UPDATE_PERIOD):60*1e3;function $nr(){return new Date(Date.now()-qnr).toISOString()}a($nr,"timeMinusOneMinute");function TBe(e,t={}){e.publicEndpoint=t.publicEndpoint||!1,e.isAuthenticated=t.authenticated||!1,e.loginMethod=t.loginMethod,e.user=t.user,e.internal=t.internal||!1,e.version=t.version}a(TBe,"finalise");async function znr(e,t){if(Mx(e))return{valid:!0,user:void 0};let n=jQ(e).split(Fe)[0];return es(n,async()=>{let i;try{let o=Rr();i=await Zf("by_api_key",{key:e},o)}catch{i=void 0}if(i)return{valid:!0,user:await UA({userId:i,tenantId:n,populateUser:t})};throw new eL})}a(znr,"checkApiKey");function D2(e,t){let r=e.request.headers[t];if(Array.isArray(r))throw new Error("Unexpected header format");return r}a(D2,"getHeader");function P2(e=[],t={publicAllowed:!1}){let r=e?Oy(e):[];return async(n,i)=>{let o=!1,s=D2(n,"x-budibase-api-version");Iy(n,r)&&(o=!0);try{let c=D2(n,"x-budibase-token"),l=tp(n,"budibase:auth")||P1(c),f=D2(n,"x-budibase-api-key");!f&&n.request.headers.authorization&&(f=n.request.headers.authorization.split(" ")[1]);let p=D2(n,"x-budibase-tenant-id"),d=!1,h,m=!1,g;if(l&&!f){let b=l.sessionId,v=l.userId,w;try{w=await tPe(v,b),t&&t.populateUser?h=await UA({userId:v,tenantId:w.tenantId,email:w.email,populateUser:t.populateUser(n)}):h=await UA({userId:v,tenantId:w.tenantId,email:w.email}),h.csrfToken=w.csrfToken,g="cookie",w?.lastAccessedAt<$nr()&&await ePe(w),d=!0}catch(x){d=!1,console.error(`Auth Error: ${x.message}`),Kd(n,"budibase:auth")}}if(!d&&f){let b=t.populateUser?t.populateUser(n):null,{valid:v,user:w}=await znr(f,b);v&&(d=!0,g="api_key",h=w,m=!w)}!h&&p?h={tenantId:p}:h&&"password"in h&&delete h.password,d||(d=!1);let y=a(b=>b&&b.email,"isUser");return y(h)&&ABe.default.setUser({id:h._id,tenantId:h.tenantId,budibaseAccess:h.budibaseAccess,status:h.status}),TBe(n,{authenticated:d,user:h,internal:m,version:s,publicEndpoint:o,loginMethod:g}),y(h)?Z4(h,n,i):i()}catch(c){if(console.error(`Auth Error: ${c.message}`),c?.name==="JsonWebTokenError"?Kd(n,"budibase:auth"):c?.code==="invalid_api_key"&&n.throw(403,c.message),t&&t.publicAllowed||o)return TBe(n,{authenticated:!1,version:s,publicEndpoint:o}),i();n.throw(c.status||403,c)}}}a(P2,"authenticated");async function N2(e,t){if(e.internal)return t();let r=await vg(e);return!r&&!K.isWorker()?e.throw(403,"This request required a workspace id."):!r&&!us(e.user)?e.throw(403,"Builder user only endpoint."):r&&!cE(e.user,r)&&e.throw(403,"Workspace builder user only endpoint."),t()}a(N2,"builderOnly");async function L2(e,t){if(e.internal||Gl(e.user))return t();let r=await vg(e);return!r&&!K.isWorker()?e.throw(403,"This request required a workspace id."):!r&&!us(e.user)?e.throw(403,"Admin/Builder user only endpoint."):r&&!cE(e.user,r)&&e.throw(403,"Workspace Admin/Builder user only endpoint."),t()}a(L2,"builderOrAdmin");var OBe=ne(require("crypto"));var RBe={"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","https://www.google.com/recaptcha/api.js"],"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'"]},Wnr=/^[A-Za-z0-9-*:/.]+$/,IBe=a(async(e,t)=>{let r=OBe.default.randomBytes(16).toString("base64");e.state.nonce=r;let n={...RBe};if(n["script-src"]=[...RBe["script-src"],`'nonce-${r}'`],e.user?.license?.features.includes("customAppScripts")&&e.appId)try{let s=await kx.getWorkspaceMetadata(e.appId);if("name"in s)for(let u of s.scripts||[]){let c=(u.cspWhitelist||"").split(`
|
|
535
|
+
`);for(let o of i.filter(s=>s))e.push(YT.default.readFileSync(o))}return e.push(YT.default.readFileSync(CDe(PDe))),Buffer.concat(e.map(n=>new Uint8Array(n)))}a(H8t,"getLogReadStream");function V8t(e){return typeof e=="object"&&e!==null&&!(e instanceof Error)}a(V8t,"isPlainObject");function K8t(e){return e instanceof Error}a(K8t,"isError");function Q8t(e){return typeof e=="string"}a(Q8t,"isMessage");var mh;if(!K.DISABLE_PINO_LOGGER){let e=K.LOG_LEVEL,t={level:e,formatters:{level:c=>({level:c.toUpperCase()}),bindings:()=>K.SELF_HOSTED?{service:K.SERVICE_NAME}:{}},timestamp:()=>`,"timestamp":"${new Date(Date.now()).toISOString()}"`},r=[];r.push(K.isDev()?{stream:(0,UDe.default)({singleLine:!0}),level:e}:{stream:process.stdout,level:e}),K.SELF_HOSTED&&r.push({stream:g9(),level:e}),mh=r.length?(0,VN.default)(t,VN.default.multistream(r)):(0,VN.default)(t);let n=a(c=>{let l,f=[],p="";c.forEach(y=>{Q8t(y)&&(p=`${p} ${y}`.trimStart()),V8t(y)&&f.push(y),K8t(y)&&(l=y)});let d=u(),h={};h={tenantId:i(),appId:o(),automationId:s(),identityId:d?._id,identityType:d?.type,correlationId:Iz()};let m=b9.default.scope().active();m&&b9.default.inject(m.context(),MDe.formats.LOG,h);let g={err:l,pid:process.pid,...h};if(f.length){let y={},b=0;for(let v=0;v<f.length;v++){let w=f[v],x=w._logKey;x?(delete w._logKey,g[x]=w):(y[b]=w,b++)}Object.keys(y).length&&(g.data=y)}return[g,p]},"getLogParams");console.log=(...c)=>{let[l,f]=n(c);mh?.info(l,f)},console.info=(...c)=>{let[l,f]=n(c);mh?.info(l,f)},console.warn=(...c)=>{let[l,f]=n(c);mh?.warn(l,f)},console.error=(...c)=>{let[l,f]=n(c);mh?.error(l,f)},console.trace=(...c)=>{let[l,f]=n(c);l.err||(l.err=new Error),mh?.trace(l,f)},console.debug=(...c)=>{let[l,f]=n(c);mh?.debug(l,f)};let i=a(()=>{let c;try{c=Pt()}catch{}return c},"getTenantId"),o=a(()=>{let c;try{c=ts()}catch{}return c},"getAppId"),s=a(()=>{let c;try{c=J5()}catch{}return c},"getAutomationId"),u=a(()=>{let c;try{c=qf()}catch{}return c},"getIdentity")}var KN=mh;var Y8t=["AccountError"];function J8t(e){return e&&e.suppressAlert}a(J8t,"isSuppressed");function iy(e,t){t&&Y8t.includes(t.name)&&J8t(t)||console.error(`bb-alert: ${e}`,t)}a(iy,"logAlert");function X8t(e,t,r,n){e=`${e} - db: ${t} - doc: ${r} - error: `,iy(e,n)}a(X8t,"logAlertWithInfo");function Hw(e,t){console.warn(`bb-warn: ${e}`,t)}a(Hw,"logWarn");var QN=class extends Error{static{a(this,"UnretriableError")}constructor(t){super(t),this.name="PermanentError"}},v9=class{static{a(this,"QueuedProcessor")}constructor(t,r={}){let{maxAttempts:n=3,removeOnFail:i=!0,removeOnComplete:o=!0,maxStalledCount:s=3}=r;this.waitForCompletionMs=r.waitForCompletionMs||1e4,this._queue=new Ac(t,{maxStalledCount:s,jobOptions:{attempts:n,removeOnFail:i,removeOnComplete:o}}),this._queue.process(async(u,c)=>{try{let l=await this.processFn(u.data);c?.(null,l)}catch(l){l instanceof QN&&await u.discard(),iy(`Failed to process job in ${this._queue.name}`,l),c?.(l)}})}async close(t){await this._queue.close(t)}async execute(t){try{let r=await this._queue.add(t);return{success:!0,result:await Ye.withTimeout(this.waitForCompletionMs,()=>r.finished())}}catch(r){if(r.errno!=="ETIME")throw r;return{success:!1,reason:"timeout"}}}};var Z8t=100,YN,JT=class e{static{a(this,"DocWritethroughProcessor")}static get queue(){return e._queue||(e._queue=new Ac("docWritethroughQueue",{jobOptions:{attempts:Z8t}})),e._queue}init(){return e.queue.process(async t=>{try{await this.persistToDb(t.data)}catch(r){throw r.status===409?new Error(`Conflict persisting message ${t.id}. Attempt ${t.attemptsMade}`):r}}),this}async persistToDb({dbName:t,docId:r,data:n}){if(r.startsWith("scimlog"))return;let i=Po(t),o;try{o=await i.get(r)}catch{o={_id:r}}o={...o,...n},await i.put(o)}},w9=class{static{a(this,"DocWritethrough")}constructor(t,r){this.db=t,this._docId=r}get docId(){return this._docId}async patch(t){await JT.queue.add({dbName:this.db.name,docId:this.docId,data:t})}};function jDe(){return YN=new JT().init(),YN}a(jDe,"init");function eGt(){return YN||jDe()}a(eGt,"getProcessor");var ZT={};oe(ZT,{CacheKey:()=>sa,TTL:()=>sy,bustCache:()=>Vw,destroy:()=>XT,get:()=>uy,keys:()=>JN,store:()=>bp,withCache:()=>gh,withCacheWithDynamicTTL:()=>BDe});function $l(e){let t=Pt();return`${e}:${t}`}a($l,"generateTenantKey");var ay=class{static{a(this,"BaseCache")}constructor(t=void 0){this.client=t}async getClient(){return this.client?this.client:await oz()}async keys(t){return(await this.getClient()).keys(t)}async exists(t,r={useTenancy:!0}){return t=r.useTenancy?$l(t):t,(await this.getClient()).exists(t)}async scan(t,r={useTenancy:!0}){return t=r.useTenancy?$l(t):t,(await this.getClient()).scan(t)}async get(t,r={useTenancy:!0}){return t=r.useTenancy?$l(t):t,(await this.getClient()).get(t)}async bulkGet(t,r={useTenancy:!0}){return t=r.useTenancy?t.map(i=>$l(i)):t,(await this.getClient()).bulkGet(t)}async store(t,r,n=null,i={useTenancy:!0}){t=i.useTenancy?$l(t):t,await(await this.getClient()).store(t,r,n)}async bulkStore(t,r=null,n={useTenancy:!0}){n.useTenancy&&(t=Object.entries(t).reduce((o,[s,u])=>(o[$l(s)]=u,o),{})),await(await this.getClient()).bulkStore(t,r)}async delete(t,r={useTenancy:!0}){return t=r.useTenancy?$l(t):t,(await this.getClient()).delete(t)}async bulkDelete(t,r={useTenancy:!0}){return t=r.useTenancy?t.map(i=>$l(i)):t,(await this.getClient()).bulkDelete(t)}async withCache(t,r=null,n,i={useTenancy:!0}){let o=await this.get(t,i);if(o)return o;try{let s=await n();return await this.store(t,s,r,i),s}catch(s){throw console.error("Error fetching before cache - ",s),s}}async withCacheWithDynamicTTL(t,r,n={useTenancy:!0}){let i=await this.get(t,n);if(i)return i;try{let o=await r(),{value:s,ttl:u}=o;return await this.store(t,s,u,{useTenancy:n.useTenancy}),s}catch(o){throw console.error("Error fetching before cache - ",o),o}}async bustCache(t){let r=await this.getClient();try{await r.delete($l(t))}catch(n){throw console.error("Error busting cache - ",n),n}}async deleteIfValue(t,r,n={useTenancy:!0}){t=n.useTenancy?$l(t):t,await(await this.getClient()).deleteIfValue(t,r)}};var oy=new ay,sa={CHECKLIST:"checklist",INSTALLATION:"installation",ANALYTICS_ENABLED:"analyticsEnabled",UNIQUE_TENANT_ID:"uniqueTenantId",EVENTS:"events",BACKFILL_METADATA:"backfillMetadata",EVENTS_RATE_LIMIT:"eventsRateLimit",OAUTH2_TOKEN:e=>`oauth2Token_${e}`},sy=(n=>(n[n.ONE_MINUTE=600]="ONE_MINUTE",n[n.ONE_HOUR=3600]="ONE_HOUR",n[n.ONE_DAY=86400]="ONE_DAY",n))(sy||{}),JN=a((...e)=>oy.keys(...e),"keys"),uy=a((...e)=>oy.get(...e),"get"),bp=a((...e)=>oy.store(...e),"store"),XT=a((...e)=>oy.delete(...e),"destroy"),gh=a((...e)=>oy.withCache(...e),"withCache"),BDe=a((...e)=>oy.withCacheWithDynamicTTL(...e),"withCacheWithDynamicTTL"),Vw=a((...e)=>oy.bustCache(...e),"bustCache");var S9={};oe(S9,{createCode:()=>rGt,deleteCode:()=>iGt,getCode:()=>nGt,getExistingInvites:()=>_9,getInviteCodes:()=>$De,updateCode:()=>tGt});var qDe=gi.fromDays(7).toSeconds();async function tGt(e,t){await(await gg()).store(e,t,qDe)}a(tGt,"updateCode");async function rGt(e,t){let r=cn();return await(await gg()).store(r,{email:e,info:t},qDe),r}a(rGt,"createCode");async function nGt(e){let r=await(await gg()).get(e);if(!r)throw"Invitation is not valid or has expired, please request a new one.";return r}a(nGt,"getCode");async function iGt(e){await(await gg()).delete(e)}a(iGt,"deleteCode");async function $De(){let r=(await(await gg()).scan()).map(i=>({...i.value,code:i.key}));if(!K.MULTI_TENANCY)return r;let n=Pt();return r.filter(i=>n===i.info.tenantId)}a($De,"getInviteCodes");async function _9(e){return(await $De()).filter(t=>e.includes(t.email))}a(_9,"getExistingInvites");var x9={};oe(x9,{createCode:()=>oGt,getCode:()=>sGt,invalidateCode:()=>uGt});var aGt=gi.fromHours(1).toSeconds();async function oGt(e,t){let r=cn();return await(await Ix()).store(r,{userId:e,info:t},aGt),r}a(oGt,"createCode");async function sGt(e){let r=await(await Ix()).get(e);if(!r)throw new Error("Provided information is not valid, cannot reset password - please try again.");return r}a(sGt,"getCode");async function uGt(e){await(await Ix()).delete(e)}a(uGt,"invalidateCode");var Rh={};oe(Rh,{getUser:()=>UA,getUsers:()=>UXt,invalidateUser:()=>MA});var zl={};oe(zl,{addSsoUser:()=>WDe,addUser:()=>hGt,getUserDoc:()=>zDe,lookupTenantId:()=>cGt,removeUser:()=>mGt,updateUserDoc:()=>lGt});function cy(){return Po(vn.PLATFORM_INFO.name)}a(cy,"getPlatformDB");async function cGt(e){return K.MULTI_TENANCY?(await zDe(e)).tenantId:di}a(cGt,"lookupTenantId");async function zDe(e){return cy().get(e)}a(zDe,"getUserDoc");async function lGt(e){await cy().put(e)}a(lGt,"updateUserDoc");function fGt(e,t){return{_id:e,tenantId:t}}a(fGt,"newUserIdDoc");function pGt(e,t,r){return{_id:t,userId:e,tenantId:r}}a(pGt,"newUserEmailDoc");function dGt(e,t,r,n){return{_id:e,userId:r,email:t,tenantId:n}}a(dGt,"newUserSsoIdDoc");async function T9(e,t){let r=cy(),n;try{await r.get(e)}catch(i){if(i.status===404)n=t(),await r.put(n);else throw i}}a(T9,"addUserDoc");async function WDe(e,t,r,n){return T9(e,()=>dGt(e,t,r,n))}a(WDe,"addSsoUser");async function hGt(e,t,r,n){let i=[T9(t,()=>fGt(t,e)),T9(r,()=>pGt(t,r,e))];n&&i.push(WDe(n,r,t,e)),await Promise.all(i)}a(hGt,"addUser");async function mGt(e){let t=cy(),r=[e._id,e.email],n=await t.allDocs({keys:r,include_docs:!0});await t.bulkRemove(n.rows.map(i=>i.doc),{silenceErrors:!0})}a(mGt,"removeUser");var GDe=ne(require("node-fetch"));var eA=class{static{a(this,"API")}constructor(t){this.host=t}async apiCall(t,r,n){n.headers||(n.headers={}),n.headers["Content-Type"]||(n.headers={"Content-Type":"application/json",Accept:"application/json",...n.headers});let i=n.headers["Content-Type"]==="application/json";qx.setHeader(n.headers);let o={method:t,body:i?JSON.stringify(n.body):n.body,headers:n.headers,credentials:"include"};return await(0,GDe.default)(`${this.host}${r}`,o)}async post(t,r){return this.apiCall("POST",t,r)}async get(t,r){return this.apiCall("GET",t,r)}async patch(t,r){return this.apiCall("PATCH",t,r)}async del(t,r){return this.apiCall("DELETE",t,r)}async put(t,r){return this.apiCall("PUT",t,r)}};var HDe=new eA(K.INTERNAL_ACCOUNT_PORTAL_URL),VDe=K.SELF_HOSTED||K.DISABLE_ACCOUNT_PORTAL,ly=a(async e=>{if(VDe)return;let t={email:e},r=await HDe.post("/api/accounts/search",{body:t,headers:{"x-budibase-api-key":K.ACCOUNT_PORTAL_API_KEY}});if(r.status!==200)throw new Error(`Error getting account by email ${e}`);return(await r.json())[0]},"getAccount"),tA=a(async e=>{if(VDe)return;let t={tenantId:e},r=await HDe.post("/api/accounts/search",{body:t,headers:{"x-budibase-api-key":K.ACCOUNT_PORTAL_API_KEY}});if(r.status!==200)throw new Error(`Error getting account by tenantId ${e}`);return(await r.json())[0]},"getAccountByTenantId");var er={};oe(er,{UserDB:()=>Hl,addAppBuilder:()=>PXt,bulkGetGlobalUsersById:()=>KL,bulkUpdateGlobalUsers:()=>LA,cleanseUserObject:()=>oK,creatorsInList:()=>vy,doesUserExist:()=>OXt,getAccountHolderFromUsers:()=>VL,getAllUserIds:()=>AXt,getAllUsers:()=>RXt,getById:()=>wy,getCreatorCount:()=>CXt,getExistingAccounts:()=>oE,getExistingPlatformUsers:()=>tFe,getExistingTenantUsers:()=>eFe,getFirstPlatformUser:()=>PA,getGlobalUserByAppPage:()=>sFe,getGlobalUserByEmail:()=>qc,getPlatformUsers:()=>zL,getUserCount:()=>kXt,hasAdminPermissions:()=>Th,hasAppBuilderPermissions:()=>iFe,hasBuilderPermissions:()=>us,isAdmin:()=>Gl,isAdminOrBuilder:()=>nFe,isAdminOrWorkspaceBuilder:()=>WL,isBuilder:()=>cE,isCreatorAsync:()=>NA,isCreatorSync:()=>GL,isGlobalBuilder:()=>rFe,paginatedUsers:()=>cFe,removeAppBuilder:()=>NXt,removePortalUserPermissions:()=>DXt,searchExistingEmails:()=>rK,searchGlobalUsersByApp:()=>QL,searchGlobalUsersByAppAccess:()=>aK,searchGlobalUsersByEmail:()=>uFe,validateUniqueUser:()=>HL});var XN=class extends Error{constructor(r,n){super(r);this.code=n}static{a(this,"BudibaseError")}},QDe=a(e=>{let t;return e.code&&(t={code:e.code},e.getPublicError&&(t={...t,...e.getPublicError()})),t},"getPublicError"),ve=class e extends XN{constructor(r,n,i="http"){super(r,i);this.status=n}static{a(this,"HTTPError")}static async fromResponse(r){let n=await r.text(),i=n,o=r.status,s="http";try{let u=JSON.parse(n);i=u.message,o=u.status,s=u.error?.code}catch{}return new e(i,o,s)}};var $a=class extends ve{static{a(this,"BadRequestError")}constructor(t){super(t,400)}};var ZN=class extends ve{constructor(r,n){super(r,400,"usage_limit_exceeded");this.limitName=n}static{a(this,"UsageLimitError")}getPublicError(){return{limitName:this.limitName}}},Kw=class extends ve{constructor(r,n){super(r,400,"feature_disabled");this.featureName=n}static{a(this,"FeatureDisabledError")}getPublicError(){return{featureName:this.featureName}}},eL=class extends XN{static{a(this,"InvalidAPIKeyError")}constructor(){super("Invalid API key - may need re-generated, or user doesn't exist","invalid_api_key")}},vp=class extends Error{static{a(this,"EmailUnavailableError")}constructor(t){super(`Email already in use: '${t}'`)}};var JDe=+(K.PASSWORD_MIN_LENGTH||12),XDe=+(K.PASSWORD_MAX_LENGTH||512);function ZDe(e){return!e||e.length<JDe?{valid:!1,error:`Password invalid. Minimum ${JDe} characters.`}:e.length>XDe?{valid:!1,error:`Password invalid. Maximum ${XDe} characters.`}:{valid:!0}}a(ZDe,"validatePassword");var yGt=require("uuid");var bGt=K.SESSION_EXPIRY_SECONDS?parseInt(K.SESSION_EXPIRY_SECONDS):gi.fromDays(7).toSeconds();function tL(e,t){return`${e}/${t}`}a(tL,"makeSessionID");async function R9(e){return e?(await(await Jv()).scan(e)).map(n=>n.value):(console.trace("Cannot get sessions for undefined userId"),[])}a(R9,"getSessionsForUser");async function nA(e,t={}){try{let r=t?.reason||"unknown",n=t.sessionIds||[],i;if(n.length===0?i=(await R9(e)).map(s=>({key:tL(s.userId,s.sessionId)})):(n=Array.isArray(n)?n:[n],i=n.map(o=>({key:tL(e,o)}))),i&&i.length>0){let o=await Jv(),s=[];for(let u of i)s.push(o.delete(u.key));K.isTest()||Hw(`Invalidating sessions for ${e} (reason: ${r}) - ${i.map(u=>u.key).join(", ")}`),await Promise.all(s)}}catch(r){console.error(`Error invalidating sessions: ${r}`)}}a(nA,"invalidateSessions");async function ePe(e){let t=await Jv(),r=tL(e.userId,e.sessionId);e.lastAccessedAt=new Date().toISOString(),await t.store(r,e,bGt)}a(ePe,"updateSessionTTL");async function tPe(e,t){if(!e||!t)throw new Error(`Invalid session details - ${e} - ${t}`);let n=await(await Jv()).get(tL(e,t));if(!n)throw new Error(`Session not found - ${e} - ${t}`);return n}a(tPe,"getSession");var St={};oe(St,{account:()=>I2e,action:()=>k2e,ai:()=>C2e,analytics:()=>nL,app:()=>D2e,asyncEventQueue:()=>fy,auditLog:()=>P2e,auth:()=>$L,automation:()=>N2e,backfill:()=>L2e,backfillCache:()=>aL,backup:()=>F2e,datasource:()=>U2e,email:()=>M2e,environmentVariable:()=>j2e,group:()=>B2e,identification:()=>Bc,initAsyncEvents:()=>pXt,installation:()=>RA,layout:()=>q2e,license:()=>$2e,org:()=>z2e,plugin:()=>W2e,processors:()=>k7,publishEvent:()=>de,query:()=>G2e,resource:()=>H2e,role:()=>DA,rowAction:()=>V2e,rows:()=>K2e,screen:()=>Q2e,serve:()=>Y2e,shutdown:()=>dXt,table:()=>J2e,user:()=>cs,view:()=>X2e,workspace:()=>Z2e});var nL={};oe(nL,{enabled:()=>rL});var rL=a(async()=>iL(),"enabled");var fy;function O9(){fy=new Ac("systemEventQueue",{jobTags:e=>({"event.name":e.event})})}a(O9,"init");async function nPe(e){fy||O9();let{event:t,identity:r}=e;gse.indexOf(t)!==-1&&r.tenantId&&await fy.add(e)}a(nPe,"publishAsyncEvent");var aL={};oe(aL,{end:()=>wGt,isAlreadySent:()=>C9,isBackfillingEvent:()=>k9,recordEvent:()=>I9,start:()=>vGt});var vGt=a(async e=>_Gt({eventWhitelist:e}),"start"),I9=a(async(e,t)=>{let r=D9(e,t);await bp(r,t,void 0,{useTenancy:!1})},"recordEvent"),wGt=a(async()=>{await SGt(),await xGt()},"end"),EGt=a(async()=>uy(sa.BACKFILL_METADATA),"getBackfillMetadata"),_Gt=a(async e=>bp(sa.BACKFILL_METADATA,e),"saveBackfillMetadata"),SGt=a(async()=>{await XT(sa.BACKFILL_METADATA)},"deleteBackfillMetadata"),xGt=a(async()=>{let e=D9(),t=await JN(e);for(let r of t)await XT(r,{useTenancy:!1})},"clearEvents"),k9=a(async e=>{let r=(await EGt())?.eventWhitelist;return!!(r&&r.includes(e))},"isBackfillingEvent"),C9=a(async(e,t)=>{let r=D9(e,t);return!!await uy(r,{useTenancy:!1})},"isAlreadySent"),TGt={"automation:created":e=>e.automationId,"automation:step:created":e=>e.stepId,"datasource:created":e=>e.datasourceId,"layout:created":e=>e.layoutId,"query:created":e=>e.queryId,"role:created":e=>e.roleId,"screen:created":e=>e.screenId,"table:created":e=>e.tableId,"view:created":e=>e.tableId,"view:calculation:created":e=>e.tableId,"view:filter:created":e=>e.tableId,"app:created":e=>e.appId,"app:published":e=>e.appId,"auth:sso:created":e=>e.type,"auth:sso:activated":e=>e.type,"user:created":e=>e.userId,"user:admin:assigned":e=>e.userId,"user:builder:assigned":e=>e.userId,"role:assigned":e=>`${e.roleId}-${e.userId}`},D9=a((e,t)=>{let r,n=Pt();if(e){r=`${sa.EVENTS}:${n}:${e}`;let i=TGt[e],o=i?i(t):void 0;o&&(r=`${r}:${o}`)}else r=`${sa.EVENTS}:${n}:*`;return r},"getEventKey");var k7={};oe(k7,{analyticsProcessor:()=>MNe,init:()=>j9t,processors:()=>wp});var FNe=ne(O7());var k9t=a(e=>e==="served:builder"||e==="served:app:preview"||e==="served:app","isRateLimited"),C9t=a(e=>e==="served:app:preview"||e==="served:app","isPerApp");var PNe={"served:app":"calendarDay","served:app:preview":"calendarDay","served:builder":"calendarDay"},NNe=a(async e=>{if(!k9t(e))return!1;let t=await D9t(e);if(t){let r=new Date(t.timestamp);switch(PNe[e]){case"calendarDay":return r.setDate(r.getDate()+1),r.setHours(0,0,0,0),Date.now()>r.getTime()?(await DNe(e,{timestamp:Date.now()}),!1):!0}}else return await DNe(e,{timestamp:Date.now()}),!1},"limited"),LNe=a(e=>{let t=`${sa.EVENTS_RATE_LIMIT}:${e}`;return C9t(e)&&(t=t+":"+ts()),t},"eventKey"),D9t=a(async e=>{let t=LNe(e);return await uy(t)},"readEvent"),DNe=a(async(e,t)=>{let r=LNe(e),n=PNe[e],i;switch(n){case"calendarDay":i=86400}await bp(r,t,i)},"recordEvent");var N9t=["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"],gA=class{static{a(this,"PosthogProcessor")}constructor(t){if(!t)throw new Error("Posthog token is not defined");this.posthog=new FNe.PostHog(t)}async processEvent(t,r,n,i){if(N9t.includes(t)||await NNe(t))return;n=this.clearPIIProperties(n),n.version=K.VERSION,n.service=K.SERVICE,n.environment=r.environment,n.hosting=r.hosting;let o=ts();o&&(n.appId=o);let s={distinctId:r.id,event:t,properties:n};i&&(s.timestamp=new Date(i)),(r.installationId||r.tenantId)&&(s.groups={},r.installationId&&(s.groups.installation=r.installationId,s.properties.installationId=r.installationId),r.tenantId&&(s.groups.tenant=r.tenantId,s.properties.tenantId=r.tenantId)),this.posthog.capture(s)}clearPIIProperties(t){return t.email&&delete t.email,t.audited&&delete t.audited,t}async identify(t,r){let n={distinctId:t.id,properties:t};r&&(n.timestamp=new Date(r)),this.posthog.identify(n)}async identifyGroup(t,r){let n={distinctId:t.id,groupType:t.type,groupKey:t.id,properties:t};r&&(n.timestamp=new Date(r)),this.posthog.groupIdentify(n)}async shutdown(){await this.posthog.shutdown()}};var UNe=gA;var L9t=["installation:version:upgraded","installation:version:downgraded"],F9t=["installation","tenant"],yA=class{static{a(this,"AnalyticsProcessor")}constructor(){K.POSTHOG_TOKEN&&!K.isTest()&&(this.posthog=new UNe(K.POSTHOG_TOKEN))}async processEvent(t,r,n,i){!L9t.includes(t)&&!await rL()||this.posthog&&await this.posthog.processEvent(t,r,n,i)}async identify(t,r){!F9t.includes(t.type)&&!await rL()||this.posthog&&await this.posthog.identify(t,r)}async identifyGroup(t,r){this.posthog&&await this.posthog.identifyGroup(t,r)}async shutdown(){this.posthog&&await this.posthog.shutdown()}};var I7=K.SELF_HOSTED&&!K.isDev(),bA=class{static{a(this,"LoggingProcessor")}async processEvent(t,r,n){I7||console.log(`[audit] [identityType=${r.type}] ${t}`,n)}async identify(t){I7||console.log("[audit] identified",t)}async identifyGroup(t){I7||console.log("[audit] group identified",t)}async shutdown(){}};var iE=class e{static{a(this,"AuditLogsProcessor")}static{this.auditLogsEnabled=!1}static init(t){e.auditLogsEnabled=!0;let r=t;return e.auditLogQueue=new Ac("auditLogQueue",{jobTags:n=>({"event.name":n.event})}),e.auditLogQueue.process(async n=>{await es(n.data.tenantId,async()=>{let i=n.data.properties;i.audited&&(i={...i,...i.audited},delete i.audited);let o={};K.ENABLE_AUDIT_LOG_IP_ADDR&&(o=n.data.opts.hostInfo),await r(n.data.event,i,{userId:n.data.opts.userId,timestamp:n.data.opts.timestamp,appId:n.data.opts.appId,hostInfo:o})})})}async processEvent(t,r,n,i){if(e.auditLogsEnabled&&Sz(t)){let o=r.type==="user"?r.id:void 0;await e.auditLogQueue.add({event:t,properties:n,opts:{userId:o,timestamp:i,appId:ts(),hostInfo:r.hostInfo},tenantId:Pt()})}}async identify(){}async identifyGroup(){}async shutdown(){await e.auditLogQueue?.close()}};var vA=class{constructor(t){this.initialised=!1;this.processors=[];this.processors=t}static{a(this,"Processor")}async processEvent(t,r,n,i){for(let o of this.processors)await o.processEvent(t,r,n,i)}async identify(t,r){for(let n of this.processors)n.identify&&await n.identify(t,r)}async identifyGroup(t,r){for(let n of this.processors)n.identifyGroup&&await n.identifyGroup(t,r)}async shutdown(){for(let t of this.processors)t.shutdown&&await t.shutdown()}};var MNe=new yA,U9t=new bA,M9t=new iE;function j9t(e){return iE.init(e)}a(j9t,"init");var wp=new vA([MNe,U9t,M9t]);var xh={};oe(xh,{checkInstallVersion:()=>UQt,getInstall:()=>OA,getInstallFromDB:()=>X7});var J7=ne(Y7());var OA=a(async()=>gh(sa.INSTALLATION,86400,X7,{useTenancy:!1}),"getInstall");async function LQt(e){let t={_id:vn.PLATFORM_INFO.docs.install,installId:cn(),version:K.VERSION};try{let r=await e.put(t);return t._rev=r.rev,t}catch(r){if(r.status===409)return X7();throw r}}a(LQt,"createInstallDoc");var X7=a(async()=>$s(vn.PLATFORM_INFO.name,async e=>{let t;try{t=await e.get(vn.PLATFORM_INFO.docs.install)}catch(r){if(r.status===404)t=await LQt(e);else throw r}return t}),"getInstallFromDB"),FQt=a(async e=>{try{await $s(vn.PLATFORM_INFO.name,async t=>{let r=await OA();r.version=e,await t.put(r),await Vw(sa.INSTALLATION)})}catch(t){if(t.status===409)return!1;throw t}return!0},"updateVersion"),UQt=a(async()=>{let e=await OA(),t=e.version,r=K.VERSION;try{if(t!==r){let n=J7.default.gt(r,t),i=J7.default.lt(r,t);await FQt(r)&&(await v0({_id:e.installId,type:"installation"},async()=>{n?await RA.upgraded(t,r):i&&await RA.downgraded(t,r)}),await Bc.identifyInstallationGroup(e.installId))}}catch(n){n?.message?.includes("Invalid Version")?iy(`Invalid version "${r}" - is it semver?`):iy("Failed to retrieve version",n)}},"checkInstallVersion");var MQt=a(async()=>{let e=J4(),t=CA(),r;if(e?r=e.type:r="tenant",r==="installation"){let n=await by(),i=IA();return{id:R2e(n,r),hosting:i,type:r,installationId:n,environment:t}}else if(r==="tenant"){let n=await by(),i=await qL(Pt()),o=IA();return{id:R2e(i,r),type:r,hosting:o,installationId:n,tenantId:i,realTenantId:Pt(),environment:t}}else if(r==="user"){let n=e,i=await qL(Pt()),o=await by(),s=n.account,u;return s?u=s.hosting:u=IA(),{id:n._id,type:r,hosting:u,installationId:o,tenantId:i,environment:t,realTenantId:Pt(),hostInfo:n.hostInfo}}else throw new Error("Unknown identity type")},"getCurrentIdentity"),jQt=a(async(e,t)=>{let r=e,n="installation",i=IA(),o=K.VERSION,s=CA(),u={id:r,type:n,hosting:i,version:o,environment:s};await eK(u,t),await kA({...u,id:`$${n}_${r}`},t)},"identifyInstallationGroup"),BQt=a(async(e,t,r,n=K.VERSION)=>{let i=await qL(e),o="tenant",s=await by(),u=CA(),c={id:i,type:o,hosting:t,environment:u,installationId:s,createdAt:r,createdVersion:n};await eK(c,r),await kA({...c,id:`$${o}_${i}`},r)},"identifyTenantGroup"),qQt=a(async(e,t,r)=>{let n=e._id,i=await qL(e.tenantId),o="user",s=us(e),u=Th(e),c;$b(e)&&(c=e.providerType);let f=(await oE([e.email])).length>0,p=!!t&&f&&t.verified,d=await by(),h=t?t.hosting:IA(),m=CA();await kA({id:n,type:o,hosting:h,installationId:d,tenantId:i,verified:p,accountHolder:f,providerType:c,builder:s,admin:u,environment:m},r)},"identifyUser"),$Qt=a(async e=>{let t=e.accountId,r=e.tenantId,n="user",i=pk(e)?e.providerType:void 0,o=e.verified,s=!0,u=e.hosting,c=await by(),l=CA();if(fk(e)){let p=await qc(e.email);p?._id&&(t=p._id)}await kA({id:t,type:n,hosting:u,installationId:c,tenantId:r,providerType:i,verified:o,accountHolder:s,environment:l})},"identifyAccount"),kA=a(async(e,t)=>{await wp.identify(e,t)},"identify"),eK=a(async(e,t)=>{await wp.identifyGroup(e,t)},"identifyGroup"),CA=a(()=>K.isDev()?"development":K.DEPLOYMENT_ENVIRONMENT,"getDeploymentEnvironment"),IA=a(()=>K.SELF_HOSTED?"self":"cloud","getHostingFromEnv"),by=a(async()=>zQt()?"account-portal":(await OA()).installId,"getInstallationId"),qL=a(async e=>K.SELF_HOSTED?O2e(e):e,"getEventTenantId"),O2e=a(async e=>es(e,()=>gh(sa.UNIQUE_TENANT_ID,86400,async()=>{let t=Rr(),r=await sE(),n;return r.config.uniqueTenantId?r.config.uniqueTenantId:(n=`${cn()}_${e}`,r.config.uniqueTenantId=n,r.config.createdVersion=K.VERSION,await t.put(r),n)})),"getUniqueTenantId"),zQt=a(()=>K.SERVICE==="account-portal","isAccountPortal"),R2e=a((e,t)=>t==="installation"||t==="tenant"?`$${t}_${e}`:e,"formatDistinctId"),Bc={getCurrentIdentity:MQt,identifyInstallationGroup:jQt,identifyTenantGroup:BQt,identifyUser:qQt,identifyAccount:$Qt,identify:kA,identifyGroup:eK,getInstallationId:by,getUniqueTenantId:O2e};var de=a(async(e,t,r,n)=>{let i=n||await Bc.getCurrentIdentity();if(!(n?!1:await k9(e))){await nPe({event:e,identity:i,properties:t,timestamp:r}),await wp.processEvent(e,i,t,r);return}await C9(e,t)||(await wp.processEvent(e,i,t,r),await I9(e,t))},"publishEvent");async function WQt(e,t){let r={tenantId:e.tenantId};await de("account:created",r,void 0,t)}a(WQt,"created");async function GQt(e){let t={tenantId:e.tenantId};await de("account:deleted",t)}a(GQt,"deleted");async function HQt(e){let t={tenantId:e.tenantId};await de("account:verified",t)}a(HQt,"verified");var I2e={created:WQt,deleted:GQt,verified:HQt};async function VQt(e,t){console.info("action:automation_step:executed",`disabled. Action step ${e.stepId} not published at ${t}`)}a(VQt,"automationStepExecuted");async function KQt(e,t){console.info("action:automation_step:executed",`disabled. Action type ${e.type} not published at ${t}`)}a(KQt,"crudExecuted");async function QQt(e,t){console.info("action:automation_step:executed",`disabled. Execution for ai agent ${e.agentId} not published at ${t}`)}a(QQt,"aiAgentExecuted");var k2e={aiAgentExecuted:QQt,automationStepExecuted:VQt,crudExecuted:KQt};async function YQt(e){let t={};await de("ai:config:created",t,e)}a(YQt,"AIConfigCreated");async function JQt(){let e={};await de("ai:config:updated",e)}a(JQt,"AIConfigUpdated");var C2e={AIConfigCreated:YQt,AIConfigUpdated:JQt};var XQt=a(async(e,t)=>{let r={appId:e.appId,version:e.version,audited:{name:e.name}};await de("app:created",r,t)},"created");async function ZQt(e){let t={appId:e.appId,version:e.version,audited:{name:e.name}};await de("app:updated",t)}a(ZQt,"updated");async function eYt(e){let t={appId:e.appId,audited:{name:e.name}};await de("app:deleted",t)}a(eYt,"deleted");async function tYt(e,t){let r={appId:e.appId,audited:{name:e.name}};await de("app:published",r,t)}a(tYt,"published");async function rYt(e){let t={appId:e.appId,audited:{name:e.name}};await de("app:unpublished",t)}a(rYt,"unpublished");async function nYt(e){let t={appId:e.appId,audited:{name:e.name}};await de("app:file:imported",t)}a(nYt,"fileImported");async function iYt(e,t){let r={duplicateAppId:t,appId:e.appId,audited:{name:e.name}};await de("app:duplicated",r)}a(iYt,"duplicated");async function aYt(e,t){let r={appId:e.appId,templateKey:t,audited:{name:e.name}};await de("app:template:imported",r)}a(aYt,"templateImported");async function oYt(e,t,r){let n={appId:e.appId,currentVersion:t,updatedToVersion:r,audited:{name:e.name}};await de("app:version:updated",n)}a(oYt,"versionUpdated");async function sYt(e,t,r){let n={appId:e.appId,currentVersion:t,revertedToVersion:r,audited:{name:e.name}};await de("app:version:reverted",n)}a(sYt,"versionReverted");async function uYt(e){let t={appId:e.appId,audited:{name:e.name}};await de("app:reverted",t)}a(uYt,"reverted");async function cYt(e){let t={appId:e.appId,audited:{name:e.name}};await de("app:exported",t)}a(cYt,"exported");var D2e={created:XQt,updated:ZQt,deleted:eYt,published:tYt,unpublished:rYt,fileImported:nYt,duplicated:iYt,templateImported:aYt,versionUpdated:oYt,versionReverted:sYt,reverted:uYt,exported:cYt};async function lYt(e){let t={filters:e};await de("audit_log:filtered",t)}a(lYt,"filtered");async function fYt(e){let t={filters:e};await de("audit_log:downloaded",t)}a(fYt,"downloaded");var P2e={filtered:lYt,downloaded:fYt};async function pYt(e,t){let n={userId:(await Bc.getCurrentIdentity()).id,source:e,audited:{email:t}};await de("auth:login",n)}a(pYt,"login");async function dYt(e){let r={userId:(await Bc.getCurrentIdentity()).id,audited:{email:e}};await de("auth:logout",r)}a(dYt,"logout");async function hYt(e,t){let r={type:e};await de("auth:sso:created",r,t)}a(hYt,"SSOCreated");async function mYt(e){let t={type:e};await de("auth:sso:updated",t)}a(mYt,"SSOUpdated");async function gYt(e,t){let r={type:e};await de("auth:sso:activated",r,t)}a(gYt,"SSOActivated");async function yYt(e){let t={type:e};await de("auth:sso:deactivated",t)}a(yYt,"SSODeactivated");var $L={login:pYt,logout:dYt,SSOCreated:hYt,SSOUpdated:mYt,SSOActivated:gYt,SSODeactivated:yYt};async function bYt(e,t){let r={appId:e.appId,automationId:e._id,triggerId:e.definition?.trigger?.id,triggerType:e.definition?.trigger?.stepId,audited:{name:e.name}};await de("automation:created",r,t)}a(bYt,"created");async function vYt(e){let t={appId:e.appId,automationId:e._id,triggerId:e.definition?.trigger?.id,triggerType:e.definition?.trigger?.stepId};await de("automation:trigger:updated",t)}a(vYt,"triggerUpdated");async function wYt(e){let t={appId:e.appId,automationId:e._id,triggerId:e.definition?.trigger?.id,triggerType:e.definition?.trigger?.stepId,audited:{name:e.name}};await de("automation:deleted",t)}a(wYt,"deleted");async function EYt(e){let t={appId:e.appId,automationId:e._id,triggerId:e.definition?.trigger?.id,triggerType:e.definition?.trigger?.stepId};await de("automation:tested",t)}a(EYt,"tested");var _Yt=a(async(e,t)=>{let r={count:e};await de("automations:run",r,t)},"run");async function SYt(e,t,r){let n={appId:e.appId,automationId:e._id,triggerId:e.definition?.trigger?.id,triggerType:e.definition?.trigger?.stepId,stepId:t.id,stepType:t.stepId,audited:{name:e.name}};await de("automation:step:created",n,r)}a(SYt,"stepCreated");async function xYt(e,t){let r={appId:e.appId,automationId:e._id,triggerId:e.definition?.trigger?.id,triggerType:e.definition?.trigger?.stepId,stepId:t.id,stepType:t.stepId,audited:{name:e.name}};await de("automation:step:deleted",r)}a(xYt,"stepDeleted");var N2e={created:bYt,triggerUpdated:vYt,deleted:wYt,tested:EYt,run:_Yt,stepCreated:SYt,stepDeleted:xYt};var uE=!K.SELF_HOSTED&&!K.isDev();async function TYt(e){uE||await de("app:backfill:succeeded",e)}a(TYt,"appSucceeded");async function AYt(e){if(uE)return;let t={error:JSON.stringify(e,Object.getOwnPropertyNames(e))};await de("app:backfill:failed",t)}a(AYt,"appFailed");async function RYt(e){uE||await de("tenant:backfill:succeeded",e)}a(RYt,"tenantSucceeded");async function OYt(e){if(uE)return;let t={error:JSON.stringify(e,Object.getOwnPropertyNames(e))};await de("tenant:backfill:failed",t)}a(OYt,"tenantFailed");async function IYt(){if(uE)return;let e={};await de("installation:backfill:succeeded",e)}a(IYt,"installationSucceeded");async function kYt(e){if(uE)return;let t={error:JSON.stringify(e,Object.getOwnPropertyNames(e))};await de("installation:backfill:failed",t)}a(kYt,"installationFailed");var L2e={appSucceeded:TYt,appFailed:AYt,tenantSucceeded:RYt,tenantFailed:OYt,installationSucceeded:IYt,installationFailed:kYt};async function CYt(e){let t={appId:e.appId,restoreId:e._id,backupCreatedAt:e.timestamp,name:e.name};await de("app:backup:restored",t)}a(CYt,"appBackupRestored");async function DYt(e,t,r,n,i){let o={appId:e,backupId:t,type:r,trigger:n,name:i};await de("app:backup:triggered",o)}a(DYt,"appBackupTriggered");var F2e={appBackupRestored:CYt,appBackupTriggered:DYt};function tK(e){return!Object.values(Za).includes(e.source)}a(tK,"isCustom");async function PYt(e,t){let r={datasourceId:e._id,source:e.source,custom:tK(e)};await de("datasource:created",r,t)}a(PYt,"created");async function NYt(e){let t={datasourceId:e._id,source:e.source,custom:tK(e)};await de("datasource:updated",t)}a(NYt,"updated");async function LYt(e){let t={datasourceId:e._id,source:e.source,custom:tK(e)};await de("datasource:deleted",t)}a(LYt,"deleted");var U2e={created:PYt,updated:NYt,deleted:LYt};async function FYt(e){let t={};await de("email:smtp:created",t,e)}a(FYt,"SMTPCreated");async function UYt(){let e={};await de("email:smtp:updated",e)}a(UYt,"SMTPUpdated");var M2e={SMTPCreated:FYt,SMTPUpdated:UYt};async function MYt(e,t){let r={name:e,environments:t};await de("environment_variable:created",r)}a(MYt,"created");async function jYt(e){let t={name:e};await de("environment_variable:deleted",t)}a(jYt,"deleted");async function BYt(e){let t={userId:e};await de("environment_variable:upgrade_panel_opened",t)}a(BYt,"upgradePanelOpened");var j2e={created:MYt,deleted:jYt,upgradePanelOpened:BYt};async function qYt(e,t){let r={groupId:e._id,viaScim:xc(),audited:{name:e.name}};await de("user_group:created",r,t)}a(qYt,"created");async function $Yt(e){let t={groupId:e._id,viaScim:xc(),audited:{name:e.name}};await de("user_group:updated",t)}a($Yt,"updated");async function zYt(e){let t={groupId:e._id,viaScim:xc(),audited:{name:e.name}};await de("user_group:deleted",t)}a(zYt,"deleted");async function WYt(e,t,r){let n={count:e,groupId:t._id,userIds:r,viaScim:xc(),audited:{name:t.name}};await de("user_group:user_added",n)}a(WYt,"usersAdded");async function GYt(e,t,r){let n={count:e,groupId:t._id,userIds:r,viaScim:xc(),audited:{name:t.name}};await de("user_group:users_deleted",n)}a(GYt,"usersDeleted");async function HYt(e){let t={groupId:e,onboarding:!0};await de("user_group:onboarding_added",t)}a(HYt,"createdOnboarding");async function VYt(e){let t={permissions:e.roles,groupId:e._id,audited:{name:e.name}};await de("user_group:permissions_edited",t)}a(VYt,"permissionsEdited");var B2e={created:qYt,updated:$Yt,deleted:zYt,usersAdded:WYt,usersDeleted:GYt,createdOnboarding:HYt,permissionsEdited:VYt};async function KYt(e){let t={currentVersion:e};await de("installation:version:checked",t)}a(KYt,"versionChecked");async function QYt(e,t){let r={from:e,to:t};await de("installation:version:upgraded",r)}a(QYt,"upgraded");async function YYt(e,t){let r={from:e,to:t};await de("installation:version:downgraded",r)}a(YYt,"downgraded");async function JYt(){let e={};await de("installation:firstStartup",e)}a(JYt,"firstStartup");var RA={versionChecked:KYt,upgraded:QYt,downgraded:YYt,firstStartup:JYt};async function XYt(e,t){let r={layoutId:e._id};await de("layout:created",r,t)}a(XYt,"created");async function ZYt(e){let t={layoutId:e};await de("layout:deleted",t)}a(ZYt,"deleted");var q2e={created:XYt,deleted:ZYt};async function eJt(e,t){let r={accountId:e.accountId,...t};await de("license:plan:changed",r)}a(eJt,"planChanged");async function tJt(e){let t={accountId:e.accountId};await de("license:activated",t)}a(tJt,"activated");async function rJt(e){let t={accountId:e.accountId};await de("license:checkout:opened",t)}a(rJt,"checkoutOpened");async function nJt(e){let t={accountId:e.accountId};await de("license:checkout:success",t)}a(nJt,"checkoutSuccess");async function iJt(e){let t={accountId:e.accountId};await de("license:portal:opened",t)}a(iJt,"portalOpened");async function aJt(e){let t={accountId:e.accountId};await de("license:payment:failed",t)}a(aJt,"paymentFailed");async function oJt(e){let t={accountId:e.accountId};await de("license:payment:recovered",t)}a(oJt,"paymentRecovered");var $2e={planChanged:eJt,activated:tJt,checkoutOpened:rJt,checkoutSuccess:nJt,portalOpened:iJt,paymentFailed:aJt,paymentRecovered:oJt};async function sJt(e){let t={};await de("org:info:name:updated",t,e)}a(sJt,"nameUpdated");async function uJt(e){let t={};await de("org:info:logo:updated",t,e)}a(uJt,"logoUpdated");async function cJt(e){let t={};await de("org:platformurl:updated",t,e)}a(cJt,"platformURLUpdated");async function lJt(){let e={};await de("analytics:opt:out",e)}a(lJt,"analyticsOptOut");async function fJt(){let e={};await de("analytics:opt:out",e)}a(fJt,"analyticsOptIn");var z2e={nameUpdated:sJt,logoUpdated:uJt,platformURLUpdated:cJt,analyticsOptOut:lJt,analyticsOptIn:fJt};async function pJt(e){let t={type:e.schema.type,name:e.name,description:e.description,version:e.version};await de("plugin:init",t)}a(pJt,"init");async function dJt(e){let t={pluginId:e._id,type:e.schema.type,source:e.source,name:e.name,description:e.description,version:e.version};await de("plugin:imported",t)}a(dJt,"imported");async function hJt(e){let t={pluginId:e._id,type:e.schema.type,name:e.name,description:e.description,version:e.version};await de("plugin:deleted",t)}a(hJt,"deleted");var W2e={init:pJt,imported:dJt,deleted:hJt};var mJt=a(async(e,t,r)=>{let n={queryId:t._id,datasourceId:e._id,source:e.source,queryVerb:t.queryVerb};await de("query:created",n,r)},"created"),gJt=a(async(e,t)=>{let r={queryId:t._id,datasourceId:e._id,source:e.source,queryVerb:t.queryVerb};await de("query:updated",r)},"updated"),yJt=a(async(e,t,r)=>{let n={queryId:t._id,datasourceId:e._id,source:e.source,queryVerb:t.queryVerb,appId:r};await de("query:deleted",n)},"deleted"),bJt=a(async(e,t,r)=>{let n={datasourceId:e._id,source:e.source,count:r,importSource:t};await de("query:import",n)},"imported"),vJt=a(async(e,t)=>{let r={count:e};await de("queries:run",r,t)},"run"),wJt=a(async(e,t)=>{let r={queryId:t.queryId,datasourceId:e._id,source:e.source,queryVerb:t.queryVerb};await de("query:previewed",r)},"previewed"),G2e={created:mJt,updated:gJt,deleted:yJt,imported:bJt,run:vJt,previewed:wJt};async function EJt({resource:e,fromWorkspace:t,toWorkspace:r},n){let i={resource:e,fromWorkspace:t,toWorkspace:r};await de("resource:copied_to_workspace",i,n)}a(EJt,"duplicatedToWorkspace");var H2e={duplicatedToWorkspace:EJt};async function _Jt(e,t){let r={roleId:e._id,permissionId:e.permissionId,inherits:e.inherits};await de("role:created",r,t)}a(_Jt,"created");async function SJt(e){let t={roleId:e._id,permissionId:e.permissionId,inherits:e.inherits};await de("role:updated",t)}a(SJt,"updated");async function xJt(e){let t={roleId:e._id,permissionId:e.permissionId,inherits:e.inherits};await de("role:deleted",t)}a(xJt,"deleted");async function TJt(e,t,r){let n={userId:e._id,roleId:t};await de("role:assigned",n,r)}a(TJt,"assigned");async function AJt(e,t){let r={userId:e._id,roleId:t};await de("role:unassigned",r)}a(AJt,"unassigned");var DA={created:_Jt,updated:SJt,deleted:xJt,assigned:TJt,unassigned:AJt};async function RJt(e,t){await de("row_action:created",e,t)}a(RJt,"created");var V2e={created:RJt};var OJt=a(async(e,t)=>{let r={count:e};await de("rows:created",r,t)},"created"),IJt=a(async(e,t)=>{let r={tableId:e._id,count:t};await de("rows:imported",r)},"imported"),K2e={created:OJt,imported:IJt};async function kJt(e,t){let r={layoutId:e.layoutId,screenId:e._id,roleId:e.routing.roleId,audited:{name:e.routing?.route}};await de("screen:created",r,t)}a(kJt,"created");async function CJt(e){let t={layoutId:e.layoutId,screenId:e._id,roleId:e.routing.roleId,audited:{name:e.routing?.route}};await de("screen:deleted",t)}a(CJt,"deleted");var Q2e={created:kJt,deleted:CJt};async function DJt(e){let t={timezone:e};await de("served:builder",t)}a(DJt,"servedBuilder");async function PJt(e,t,r){let n={appVersion:e.version,timezone:t,embed:r===!0};await de("served:app",n)}a(PJt,"servedApp");async function NJt(e,t){let r={appId:e.appId,appVersion:e.version,timezone:t};await de("served:app:preview",r)}a(NJt,"servedAppPreview");var Y2e={servedBuilder:DJt,servedApp:PJt,servedAppPreview:NJt};async function LJt(e,t){let r={tableId:e._id,audited:{name:e.name}};await de("table:created",r,t)}a(LJt,"created");async function FJt(e,t){let r,n;for(let o in t.schema)if(!e.schema[o]){let s=t.schema[o];"default"in s&&s.default!=null&&(r=!0),s.type==="ai"&&(n=s.operation)}let i={tableId:t._id,defaultValues:r,aiColumn:n,audited:{name:t.name}};(r||n)&&await de("table:updated",i)}a(FJt,"updated");async function UJt(e,t){let r={tableId:e._id,audited:{name:e.name},appId:t};await de("table:deleted",r)}a(UJt,"deleted");async function MJt(e,t){let r={tableId:e._id,format:t,audited:{name:e.name}};await de("table:exported",r)}a(MJt,"exported");async function jJt(e){let t={tableId:e._id,audited:{name:e.name}};await de("table:imported",t)}a(jJt,"imported");var J2e={created:LJt,updated:FJt,deleted:UJt,exported:MJt,imported:jJt};async function BJt(e,t){let r={userId:e._id,viaScim:xc(),audited:{email:e.email}};await de("user:created",r,t)}a(BJt,"created");async function qJt(e){let t={userId:e._id,viaScim:xc(),audited:{email:e.email}};await de("user:updated",t)}a(qJt,"updated");async function $Jt(e){let t={userId:e._id,viaScim:xc(),audited:{email:e.email}};await de("user:deleted",t)}a($Jt,"deleted");async function zJt(e,t){let r={userId:e._id,audited:{email:e.email}};await de("user:admin:assigned",r,t)}a(zJt,"permissionAdminAssigned");async function WJt(e){let t={userId:e._id,audited:{email:e.email}};await de("user:admin:removed",t)}a(WJt,"permissionAdminRemoved");async function GJt(e,t){let r={userId:e._id,audited:{email:e.email}};await de("user:builder:assigned",r,t)}a(GJt,"permissionBuilderAssigned");async function HJt(e){let t={userId:e._id,audited:{email:e.email}};await de("user:builder:removed",t)}a(HJt,"permissionBuilderRemoved");async function VJt(e){let t={audited:{email:e}};await de("user:invited",t)}a(VJt,"invited");async function KJt(e){let t={userId:e._id,audited:{email:e.email}};await de("user:invite:accepted",t)}a(KJt,"inviteAccepted");async function QJt(e){let t={userId:e._id,audited:{email:e.email}};await de("user:password:force:reset",t)}a(QJt,"passwordForceReset");async function YJt(e){let t={userId:e._id,audited:{email:e.email}};await de("user:password:updated",t)}a(YJt,"passwordUpdated");async function JJt(e){let t={userId:e._id,audited:{email:e.email}};await de("user:password:reset:requested",t)}a(JJt,"passwordResetRequested");async function XJt(e){let t={userId:e._id,audited:{email:e.email}};await de("user:password:reset",t)}a(XJt,"passwordReset");async function ZJt(e){let t={users:e};await de("user:data:collaboration",t)}a(ZJt,"dataCollaboration");var cs={created:BJt,updated:qJt,deleted:$Jt,permissionAdminAssigned:zJt,permissionAdminRemoved:WJt,permissionBuilderAssigned:GJt,permissionBuilderRemoved:HJt,invited:VJt,inviteAccepted:KJt,passwordForceReset:QJt,passwordUpdated:YJt,passwordResetRequested:JJt,passwordReset:XJt,dataCollaboration:ZJt};async function eXt(e,t){let r={name:e.name,type:e.type,tableId:e.tableId};await de("view:created",r,t)}a(eXt,"created");async function tXt(e){let t={tableId:e.tableId};await de("view:updated",t)}a(tXt,"updated");async function rXt(e,t){let r={...Ye.views.isV2(e)?{id:e.id,tableId:e.tableId,appId:t}:{}};await de("view:deleted",r)}a(rXt,"deleted");async function nXt(e,t){let r={tableId:e._id,format:t};await de("view:exported",r)}a(nXt,"exported");async function iXt({tableId:e,filterGroups:t},r){let n={tableId:e,filterGroups:t};await de("view:filter:created",n,r)}a(iXt,"filterCreated");async function aXt({tableId:e,filterGroups:t}){let r={tableId:e,filterGroups:t};await de("view:filter:updated",r)}a(aXt,"filterUpdated");async function oXt(e){let t={tableId:e.tableId};await de("view:filter:deleted",t)}a(oXt,"filterDeleted");async function sXt({tableId:e,calculationType:t},r){let n={tableId:e,calculation:t};await de("view:calculation:created",n,r)}a(sXt,"calculationCreated");async function uXt(e){let t={tableId:e.tableId,calculation:e.calculation};await de("view:calculation:updated",t)}a(uXt,"calculationUpdated");async function cXt(e){let t={tableId:e.tableId,calculation:e.calculation};await de("view:calculation:deleted",t)}a(cXt,"calculationDeleted");async function lXt(e,t){let r={tableId:e};await de("view:join:created",r,t)}a(lXt,"viewJoinCreated");var X2e={created:eXt,updated:tXt,deleted:rXt,exported:nXt,filterCreated:iXt,filterUpdated:aXt,filterDeleted:oXt,calculationCreated:sXt,calculationUpdated:uXt,calculationDeleted:cXt,viewJoinCreated:lXt};async function fXt(e,t){let r={workspaceAppId:e._id,audited:{name:e.name},appId:t};await de("workspace_app:deleted",r)}a(fXt,"deleted");var Z2e={deleted:fXt};function pXt(){}a(pXt,"initAsyncEvents");var dXt=a(async()=>{await wp.shutdown(),console.log("Events shutdown")},"shutdown");var Ah={};oe(Ah,{creatorsInList:()=>vy,getAccountHolderFromUsers:()=>VL,hasAdminPermissions:()=>Th,hasAppBuilderPermissions:()=>iFe,hasBuilderPermissions:()=>us,isAdmin:()=>Gl,isAdminOrBuilder:()=>nFe,isAdminOrWorkspaceBuilder:()=>WL,isBuilder:()=>cE,isCreatorAsync:()=>NA,isCreatorSync:()=>GL,isGlobalBuilder:()=>rFe,validateUniqueUser:()=>HL});async function rK(e){let t=[],r=await eFe(e);t.push(...r.map(s=>s.email));let n=await tFe(e);t.push(...n.map(s=>s._id));let i=await oE(e);t.push(...i.map(s=>s.email));let o=await _9(e);return t.push(...o.map(s=>s.email)),[...new Set(t.map(s=>s.toLowerCase()))]}a(rK,"searchExistingEmails");async function zL(e){return await Nx("platform_users_lowercase_2",{keys:[e.toLowerCase()],include_docs:!0})}a(zL,"getPlatformUsers");async function PA(e){return(await zL(e))[0]??null}a(PA,"getFirstPlatformUser");async function eFe(e){let r={keys:e.map(i=>i.toLowerCase()),include_docs:!0},n={arrayResponse:!0};return await Zf("by_email2",r,void 0,n)}a(eFe,"getExistingTenantUsers");async function tFe(e){let r={keys:e.map(n=>n.toLowerCase()),include_docs:!0};return await Nx("platform_users_lowercase_2",r)}a(tFe,"getExistingPlatformUsers");async function oE(e){let r={keys:e.map(n=>n.toLowerCase()),include_docs:!0};return await Nx("account_by_email",r)}a(oE,"getExistingAccounts");var cE=Zi.users.isBuilder,Gl=Zi.users.isAdmin,rFe=Zi.users.isGlobalBuilder,nFe=Zi.users.isAdminOrBuilder,Th=Zi.users.hasAdminPermissions,us=Zi.users.hasBuilderPermissions,iFe=Zi.users.hasAppBuilderPermissions,WL=Zi.users.isAdminOrWorkspaceBuilder;async function vy(e,t){let r=[...new Set(e.filter(i=>i.userGroups).flatMap(i=>i.userGroups))];return t=await Rr().getMultiple(r,{allowMissing:!0}),e.map(i=>GL(i,t))}a(vy,"creatorsInList");async function NA(e){let t=[];return e.userGroups&&(t=await Rr().getMultiple(e.userGroups)),GL(e,t)}a(NA,"isCreatorAsync");function GL(e,t){let r=Zi.users.isCreator(e);return!r&&e?hXt(e,t):r}a(GL,"isCreatorSync");function hXt(e,t){let r=t?.filter(n=>e.userGroups?.indexOf(n._id)!==-1);return r&&r.length>0?r.some(n=>Object.values(n.roles||{}).includes("CREATOR")):!1}a(hXt,"isCreatorByGroupMembership");async function HL(e,t){if(K.MULTI_TENANCY){let r=await PA(e);if(r!=null&&r.tenantId!==t)throw new vp(e)}if(!K.SELF_HOSTED&&!K.DISABLE_ACCOUNT_PORTAL){let r=await ly(e);if(r&&r.verified&&r.tenantId!==t)throw new vp(e)}}a(HL,"validateUniqueUser");async function VL(e){if(!K.SELF_HOSTED&&!K.DISABLE_ACCOUNT_PORTAL){let t=await oE(e.map(r=>r.email));return e.find(r=>t.map(n=>n.email).includes(r.email))}}a(VL,"getAccountHolderFromUsers");var nK=a(async e=>{await cs.deleted(e),us(e)&&await cs.permissionBuilderRemoved(e),Th(e)&&await cs.permissionAdminRemoved(e)},"handleDeleteEvents"),mXt=a(async(e,t,r)=>{for(let[n,i]of Object.entries(t))(!r||r[n]!==i)&&await DA.assigned(e,i)},"assignAppRoleEvents"),gXt=a(async(e,t,r)=>{if(r)for(let[n,i]of Object.entries(r))(!t||t[n]!==i)&&await DA.unassigned(e,i)},"unassignAppRoleEvents"),yXt=a(async(e,t)=>{let r=e.roles,n=t?.roles;await mXt(e,r,n),await gXt(e,r,n)},"handleAppRoleEvents"),iK=a(async(e,t)=>{let r=Pt(),n;!K.SELF_HOSTED&&!K.DISABLE_ACCOUNT_PORTAL&&(n=await tA(r)),await Bc.identifyUser(e,n),t?(await cs.updated(e),vXt(e,t)&&await cs.permissionBuilderRemoved(e),EXt(e,t)&&await cs.permissionAdminRemoved(e),!t.forceResetPassword&&e.forceResetPassword&&e.password&&await cs.passwordForceReset(e),e.password!==t.password&&await cs.passwordUpdated(e)):await cs.created(e),bXt(e,t)&&await cs.permissionBuilderAssigned(e),wXt(e,t)&&await cs.permissionAdminAssigned(e),await yXt(e,t)},"handleSaveEvents"),bXt=a((e,t)=>aFe(e,t,us),"isAddingBuilder"),vXt=a((e,t)=>oFe(e,t,us),"isRemovingBuilder"),wXt=a((e,t)=>aFe(e,t,Th),"isAddingAdmin"),EXt=a((e,t)=>oFe(e,t,Th),"isRemovingAdmin"),aFe=a((e,t,r)=>!(!r(e)||t&&r(t)),"isAddingPermission"),oFe=a((e,t,r)=>!(r(e)||!t||!r(t)),"isRemovingPermission");var xXt=a(async e=>{let t=e._id;await zl.removeUser(e),await nK(e),await Rh.invalidateUser(t),await nA(t,{reason:"bulk-deletion"})},"bulkDeleteProcessing"),Hl=class e{static{a(this,"UserDB")}static init(t,r,n){e.quotas=t,e.groups=r,e.features=n}static async isPreventPasswordActions(t,r){return K.ENABLE_SSO_MAINTENANCE_MODE&&Gl(t)?!1:await e.features.isSSOEnforced()||$b(t)?!0:(r||(r=await tA(Pt())),!!(r&&r.email===t.email&&pk(r)))}static async buildUser(t,r={hashPassword:!0,requirePassword:!0},n,i,o){let{password:s,_id:u}=t;i&&!i.password&&(r.requirePassword=!1);let c;if(s&&s!==i?.password){if(await e.isPreventPasswordActions(t,o))throw new ve("Password change is disabled for this user",400);if(!r.skipPasswordValidation){let p=ZDe(s);if(!p.valid)throw new ve(p.error,400)}c=r.hashPassword?await Q4(s):s}else i&&(c=i.password);let l=r.requirePassword&&!await e.features.isSSOEnforced();if(!c&&l)throw"Password must be specified.";u=u||Xv();let f={createdAt:Date.now(),...i,...t,_id:u,password:c,tenantId:n};return f.roles||(f.roles={}),f.status==null&&(f.status="active"),f}static async allUsers(){return(await Rr().allDocs(yg(null,{include_docs:!0}))).rows.map(n=>n.doc)}static async countUsersByApp(t){return{userCount:(await QL(t,{})).length}}static async getUsersByAppAccess(t){return await aK(t.appId,{limit:t.limit||50})}static async getUserByEmail(t){return qc(t)}static async getUser(t){let r=await wy(t);return r&&delete r.password,r}static async bulkGet(t){return await KL(t)}static async bulkUpdate(t){return await LA(t)}static async save(t,r={}){r.hashPassword==null&&(r.hashPassword=!0),r.requirePassword==null&&(r.requirePassword=!0);let n=Pt(),i=Rr(),{email:o,_id:s,userGroups:u=[],roles:c}=t;if(!o&&!s)throw new Error("_id or email is required");let l;if(s)try{if(l=await wy(s),o&&l.email!==o&&!r.allowChangingEmail)throw new Error("Email address cannot be changed")}catch(d){if(d.status!==404)throw d}if(!l&&o&&(l=await qc(o),l&&l._id!==s))throw new vp(o);let f=1,p=0;if((r.isAccountHolder||l)&&(f=0,p=1),l){let[d,h]=await vy([l,t]);p=d!==h?1:0}return e.quotas.addUsers(f,p,async()=>{r.isAccountHolder||await HL(o,n);let d=await e.buildUser(t,r,n,l);r.currentUserId&&r.currentUserId===l?._id&&(d=oK(d,l)),!l&&c?.length&&(d.roles={...c});let h=[];if(!s&&u.length>0)for(let m of u)h.push(e.groups.addUsers(m,[d._id]));try{let m=await i.put(d);return d._rev=m.rev,await iK(d,l),l&&d.email!==l.email&&await zl.removeUser({email:l.email}),await zl.addUser(n,d._id,d.email,d.ssoId),await Rh.invalidateUser(m.id),await Promise.all(h),i.get(d._id)}catch(m){throw m.status===409?"User exists already":m}})}static async bulkCreate(t,r){let n=Pt(),i=[],o=[],s=[],u=t.map(d=>d.email),c=await rK(u),l=[];for(let d of t){let h=o.find(g=>g.email.toLowerCase()===d.email.toLowerCase()),m=c.includes(d.email.toLowerCase());if(h||m){l.push({email:d.email,reason:"Unavailable"});continue}d.userGroups=r||[],o.push(d),await NA(d)&&s.push(d)}let f=await tA(n),p=await e.features.isSSOEnforced();return e.quotas.addUsers(o.length,s.length,async()=>{for(let m of o)p&&delete m.password,i.push(e.buildUser(m,{hashPassword:!0,requirePassword:!p},n,void 0,f));let d=await Promise.all(i);await LA(d);for(let m of d)await zl.addUser(n,m._id,m.email),await iK(m,void 0);let h=d.map(m=>({_id:m._id,email:m.email}));if(Array.isArray(h)&&r){let m=[],g=h.map(y=>y._id);for(let y of r)m.push(e.groups.addUsers(y,g));await Promise.all(m)}return{successful:h,unsuccessful:l}})}static async bulkDelete(t){let r=Rr(),n={successful:[],unsuccessful:[]},i=await VL(t);i&&(t=t.filter(h=>h.userId!==i.userId),n.unsuccessful.push({_id:i.userId,email:i.email,reason:"Account holder cannot be deleted"}));let s=(await r.allDocs({include_docs:!0,keys:t.map(h=>h.userId)})).rows.map(h=>h.doc),u=s.map(h=>({...h,_deleted:!0})),c=await LA(u),f=(await vy(s)).filter(h=>h).length,p=[];for(let h of s){let g=(await PA(h._id)).ssoId;g&&(await zL(g)).filter(b=>b.ssoId==null).forEach(b=>{p.push({...b,_deleted:!0})}),await xXt(h)}await cy().bulkDocs(p),await e.quotas.removeUsers(u.length,f);let d={};return s.reduce((h,m)=>(h[m._id]=m,h),d),c.forEach(h=>{let m=d[h.id].email;h.ok?n.successful.push({_id:h.id,email:m}):n.unsuccessful.push({_id:h.id,email:m,reason:"Database error"})}),n}static async destroy(t){let r=Rr(),n=await r.get(t),i=n._id;if(!K.SELF_HOSTED&&!K.DISABLE_ACCOUNT_PORTAL){let s=n.email;if(await ly(s))throw n.userId===qf()._id?new ve('Please visit "Account" to delete this user',400):new ve("Account holder cannot be deleted",400)}await zl.removeUser(n),await r.remove(i,n._rev);let o=await NA(n)?1:0;await e.quotas.removeUsers(1,o),await nK(n),await Rh.invalidateUser(i),await nA(i,{reason:"deletion"})}static async createAdminUser(t,r,n){let i=n?.password,o={email:t,password:i,createdAt:Date.now(),roles:{},builder:{global:!0},admin:{global:!0},tenantId:r,firstName:n?.firstName,lastName:n?.lastName};return n?.ssoId&&(o.ssoId=n.ssoId),await Vw(sa.CHECKLIST),await e.save(o,{hashPassword:n?.hashPassword,requirePassword:n?.requirePassword,skipPasswordValidation:n?.skipPasswordValidation,isAccountHolder:!0})}static async getGroups(t){return await this.groups.getBulk(t)}static async getGroupBuilderAppIds(t){return await this.groups.getGroupBuilderAppIds(t)}};function FA(e){return Array.isArray(e)?e.map(t=>{if(t)return delete t.password,t}):e&&(delete e.password,e)}a(FA,"removeUserPassword");async function KL(e,t){let n=(await Rr().allDocs({keys:e,include_docs:!0})).rows.map(i=>i.doc);return t?.cleanup&&(n=FA(n)),n}a(KL,"bulkGetGlobalUsersById");async function AXt(){let e=Rr(),t=`us${Fe}`;return(await e.allDocs({startkey:t,endkey:`${t}${Na}`})).rows.map(n=>n.id)}a(AXt,"getAllUserIds");async function RXt(){let e=Rr(),t=`us${Fe}`;return(await e.allDocs({startkey:t,endkey:`${t}${Na}`,include_docs:!0})).rows.map(n=>n.doc)}a(RXt,"getAllUsers");async function LA(e){return await Rr().bulkDocs(e)}a(LA,"bulkUpdateGlobalUsers");async function wy(e,t){let n=await Rr().get(e);return t?.cleanup&&(n=FA(n)),n}a(wy,"getById");async function qc(e,t){if(e==null)throw"Must supply an email address to view";let r=await Zf("by_email2",{key:e.toLowerCase(),include_docs:!0});if(Array.isArray(r))throw new Error(`Multiple users found with email address: ${e}`);let n=r;return t?.cleanup&&(n=FA(n)),n}a(qc,"getGlobalUserByEmail");async function OXt(e){try{let t=await qc(e);if(Array.isArray(t)||t!=null)return!0}catch{return!1}return!1}a(OXt,"doesUserExist");async function QL(e,t,r){if(typeof e!="string")throw new Error("Must provide a string based workspace ID");let n=k1(e,{include_docs:!0});n.startkey=t&&t.startkey?t.startkey:n.startkey;let i=await Zf("by_app",n);i||(i=[]);let o=Array.isArray(i)?i:[i];return r?.cleanup&&(o=FA(o)),o}a(QL,"searchGlobalUsersByApp");async function aK(e,t){let r=`roles.${e}`,n=[{"builder.global":!0},{"admin.global":!0}];if(e){let s={[r]:{$exists:!0}};n.push(s)}return(await Rr().find({selector:{$or:n,_id:{$regex:"^us_"}},limit:t?.limit||50})).docs}a(aK,"searchGlobalUsersByAppAccess");function sFe(e,t){if(t)return I1(zs(e),t._id)}a(sFe,"getGlobalUserByAppPage");async function uFe(e,t,r){if(typeof e!="string")throw new Error("Must provide a string to search by");let n=e.toLowerCase(),i=t&&t.startkey?t.startkey:n,o=await Zf("by_email2",{...t,startkey:i,endkey:`${n}${Na}`});o||(o=[]);let s=Array.isArray(o)?o:[o];return r?.cleanup&&(s=FA(s)),s}a(uFe,"searchGlobalUsersByEmail");var IXt=8;async function cFe({bookmark:e,query:t,appId:r,limit:n}={}){let i=Rr(),o=n??IXt,u={include_docs:!0,limit:o+1};e&&(u.startkey=e);let c,l="_id",f;return t?.equal?._id?c=[await wy(t.equal._id)]:r?(c=await QL(r,u),f=a(p=>sFe(r,p),"getKey")):t?.string?.email?(c=await uFe(t?.string?.email,u),l="email"):t?.oneOf?._id?c=await KL(t?.oneOf?._id,{cleanup:!0}):t?(c=(await i.allDocs(yg(null,{...u,limit:void 0}))).rows.map(d=>d.doc),c=Lr.search(c,{query:t,limit:u.limit}).rows):c=(await i.allDocs(yg(null,u))).rows.map(d=>d.doc),dz(c,o,{paginate:!0,property:l,getKey:f})}a(cFe,"paginatedUsers");async function kXt(){return(await gz("by_email2",{limit:0,include_docs:!1})).total_rows}a(kXt,"getUserCount");async function CXt(){let e=0;async function t(r){let n=await cFe({bookmark:r}),i=await vy(n.data);e+=i.filter(o=>o).length,n.hasNextPage&&await t(n.nextPage)}return a(t,"iterate"),await t(),e}a(CXt,"getCreatorCount");function DXt(e){return delete e.admin,delete e.builder,e}a(DXt,"removePortalUserPermissions");function oK(e,t){return delete e.admin,delete e.builder,delete e.roles,t&&(e.admin=t.admin,e.builder=t.builder,e.roles=t.roles),e}a(oK,"cleanseUserObject");async function PXt(e,t){let r=zs(t);e.builder??={},e.builder.creator=!0,e.builder.apps??=[],e.builder.apps.push(r),await Hl.save(e,{hashPassword:!1})}a(PXt,"addAppBuilder");async function NXt(e,t){let r=zs(t);e.builder&&e.builder.apps?.includes(r)&&(e.builder.apps=e.builder.apps.filter(n=>n!==r)),await Hl.save(e,{hashPassword:!1})}a(NXt,"removeAppBuilder");var lFe=3600;async function LXt(e,t){let n=await wz(t).get(e);if(n.budibaseAccess=!0,!K.SELF_HOSTED&&!K.DISABLE_ACCOUNT_PORTAL){let i=await ly(n.email);i&&(n.account=i,n.accountPortalAccess=!0)}return n}a(LXt,"populateFromDB");async function FXt(e){let t=await Hl.bulkGet(e),r=e.filter((i,o)=>!t[o]),n=t.filter(i=>i);return await Promise.all(n.map(async i=>{if(i.budibaseAccess=!0,!K.SELF_HOSTED&&!K.DISABLE_ACCOUNT_PORTAL){let o=await ly(i.email);o&&(i.account=o,i.accountPortalAccess=!0)}})),r.length?{users:n,notFoundIds:r}:{users:n}}a(FXt,"populateUsersFromDB");async function UA({userId:e,tenantId:t,email:r,populateUser:n}){if(n||(n=LXt),!t)try{t=Pt()}catch{t=await zl.lookupTenantId(e)}let i=await Ox(),o=await i.get(e);return o||(o=await n(e,t,r),await i.store(e,o,lFe)),o&&!o.tenantId&&t&&(o.tenantId=t),o.userGroups&&!Zi.users.isGlobalBuilder(o)&&await es(t,async()=>{let s=await Hl.getGroupBuilderAppIds(o);if(s.length){let u=o.builder?.apps||[];o.builder={apps:[...new Set(u.concat(s))]}}}),o}a(UA,"getUser");async function UXt(e){let t=await Ox(),r=await t.bulkGet(e),n=e.filter(s=>!r[s]),i=Object.values(r).filter(s=>!!s),o;if(n.length){let s=await FXt(n);o=s.notFoundIds;for(let u of s.users)await t.store(u._id,u,lFe);i.push(...s.users)}return{users:i,notFoundIds:o}}a(UXt,"getUsers");async function MA(e){await(await Ox()).delete(e)}a(MA,"invalidateUser");var RK={};oe(RK,{Writethrough:()=>xK});var $c={};oe($c,{AUTO_EXTEND_POLLING_MS:()=>VUe,doWithLock:()=>_K,newRedlock:()=>Sy});var HUe=ne(GUe());async function iZt(e,t){if(e==="custom")return Sy(t);switch(e){case"try_once":return Sy(hE.TRY_ONCE);case"try_twice":return Sy(hE.TRY_TWICE);case"default":return Sy(hE.DEFAULT);case"delay_500":return Sy(hE.DELAY_500);case"auto_extend":return Sy(hE.AUTO_EXTEND);default:throw Mt.unreachable(e)}}a(iZt,"getClient");var hE={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 Sy(e={}){let t={...hE.DEFAULT,...e},n=(await uz()).client;return new HUe.default([n],t)}a(Sy,"newRedlock");function aZt(e){let r=`lock:${e.systemLock?"system":Pt()}_${e.name}`;return e.resource&&(r=r+`_${e.resource}`),r}a(aZt,"getLockName");var VUe=gi.fromSeconds(10).toMs();async function _K(e,t){let r=await iZt(e.type,e.customOptions),n,i;try{let o=aZt(e),s=e.type==="auto_extend"?VUe:e.ttl;if(n=await r.lock(o,s),e.type==="auto_extend"){let c=a(()=>{i=setTimeout(async()=>{n=await n.extend(s,()=>e.onExtend&&e.onExtend()),c()},s/2)},"extendInIntervals");c()}return{executed:!0,result:await t()}}catch(o){if(o.name==="LockError"){if(e.type==="try_once")return{executed:!1};throw o}else throw o}finally{clearTimeout(i),await n?.unlock()}}a(_K,"doWithLock");var KUe=1e4,SK=null;async function n2(){if(!SK){let e=await sz();SK=new ay(e)}return SK}a(n2,"getCache");function qA(e,t){return e.name+t}a(qA,"makeCacheKey");function AK(e,t=null){return{doc:e,lastWrite:t||Date.now()}}a(AK,"makeCacheItem");async function oZt(e,t,r=KUe){let n=await n2(),i=t._id,o;i&&(o=await n.get(qA(e,i)));let s=!o||o.lastWrite<Date.now()-r,u=t;return s&&((await _K({type:"try_once",name:"persist_writethrough",resource:i,ttl:15e3},async()=>{let l=a(async f=>{let p=await e.put(f,{force:!0});u._id=p.id,u._rev=p.rev},"writeDb");try{await l(t)}catch(f){if(f.status!==409)throw f;Hw("Ignoring conflict in write-through cache")}})).executed||Hw("Ignoring redlock conflict in write-through cache")),o=AK(u,s?null:o?.lastWrite),u._id&&await n.store(qA(e,u._id),o),{ok:!0,id:u._id,rev:u._rev}}a(oZt,"put");async function sZt(e,t){let r=await n2(),n=qA(e,t),i=await r.get(n);if(!i){let o=await e.get(t);i=AK(o),await r.store(n,i)}return i.doc}a(sZt,"get");async function uZt(e,t){let r=await n2(),n=qA(e,t),i=await r.get(n);if(!i){let o=await e.tryGet(t);if(!o)return null;i=AK(o),await r.store(n,i)}return i.doc}a(uZt,"tryGet");async function cZt(e,t,r){let n=await n2();if(!t)throw new Error("No ID/Rev provided.");let i=typeof t=="string"?t:t._id;r=typeof t=="string"?r:t._rev;try{await n.delete(qA(e,i))}finally{await e.remove(i,r)}}a(cZt,"remove");var xK=class{static{a(this,"Writethrough")}constructor(t,r=KUe){this.db=t,this.writeRateMs=r}async put(t,r=this.writeRateMs){return oZt(this.db,t,r)}async get(t){return sZt(this.db,t)}async tryGet(t){return uZt(this.db,t)}async remove(t,r){return cZt(this.db,t,r)}};function i2(e){return`config${Fe}${e}`}a(i2,"generateConfigID");async function Fu(e){let t=Rr();try{return await t.get(i2(e))}catch(r){if(r.status===404)return;throw r}}a(Fu,"getConfig");async function lZt(e){return e._id||(e._id=i2(e.type)),Rr().put(e)}a(lZt,"save");async function sE(){let e=await Fu("settings");return e||(e={_id:i2("settings"),type:"settings",config:{}}),e.config.platformUrl=await zA({tenantAware:!0,config:e.config}),e.config.analyticsEnabled=await iL({config:e.config}),e}a(sE,"getSettingsConfigDoc");async function IK(){return(await sE()).config}a(IK,"getSettingsConfig");async function zA(e={tenantAware:!0}){let t=K.PLATFORM_URL||"http://localhost:10000";if(!K.SELF_HOSTED&&K.MULTI_TENANCY&&e.tenantAware){let r=Pt();t.includes("localhost:")||(t=t.replace("://",`://${r}.`))}else if(K.SELF_HOSTED){let r=e?.config?e.config:(await Fu("settings"))?.config;r?.platformUrl&&(t=r.platformUrl)}return t}a(zA,"getPlatformUrl");var iL=a(async e=>{if(!K.SELF_HOSTED)return!!K.ENABLE_ANALYTICS;let t=await gh(sa.ANALYTICS_ENABLED,86400,async()=>{let n=e?.config?e.config:(await Fu("settings"))?.config;if(n?.analyticsEnabled===!1)return!1;if(n?.analyticsEnabled===!0)return!0});if(t!==void 0)return t;let r=K.ENABLE_ANALYTICS;return!(r===0||r===!1)},"analyticsEnabled");async function fZt(){return await Fu("google")}a(fZt,"getGoogleConfigDoc");async function a2(){return(await fZt())?.config}a(a2,"getGoogleConfig");async function kK(){if(!K.SELF_HOSTED)return OK();let e=await a2();return(!e||!e.activated)&&(e=OK()),e}a(kK,"getGoogleDatasourceConfig");function OK(){if(K.GOOGLE_CLIENT_ID&&K.GOOGLE_CLIENT_SECRET)return{clientID:K.GOOGLE_CLIENT_ID,clientSecret:K.GOOGLE_CLIENT_SECRET,activated:!0}}a(OK,"getDefaultGoogleConfig");async function pZt(){return Fu("logos_oidc")}a(pZt,"getOIDCLogosDoc");async function dZt(){return Fu("oidc")}a(dZt,"getOIDCConfigDoc");async function hZt(){let e=(await dZt())?.config;return e?.configs&&e.configs[0]}a(hZt,"getOIDCConfig");async function CK(e){let t=(await Fu("oidc"))?.config;return t&&t.configs.filter(r=>r.uuid===e)[0]}a(CK,"getOIDCConfigById");async function QUe(){return Fu("smtp")}a(QUe,"getSMTPConfigDoc");async function mZt(e){let t=await QUe();if(t)return t.config;let r=K.SELF_HOSTED||!e;if(K.SMTP_FALLBACK_ENABLED&&r)return{port:K.SMTP_PORT,host:K.SMTP_HOST,secure:!1,from:K.SMTP_FROM_ADDRESS,auth:{user:K.SMTP_USER,pass:K.SMTP_PASSWORD},fallback:!0}}a(mZt,"getSMTPConfig");async function gZt(){return(await Fu("scim"))?.config}a(gZt,"getSCIMConfig");async function yZt(){return Fu("ai")}a(yZt,"getAIConfig");async function bZt(){return Fu("recaptcha")}a(bZt,"getRecaptchaConfig");var Dr={};oe(Dr,{AccessController:()=>NK,BUILTIN_ROLE_IDS:()=>LK,Role:()=>kh,RoleHierarchyTraversal:()=>o2,RoleIDVersion:()=>FK,builtinRoleToNumber:()=>WA,checkForRoleResourceArray:()=>ZUe,externalRole:()=>xZt,findRole:()=>GA,getAllRoleIds:()=>OZt,getAllRoles:()=>BK,getBuiltinRole:()=>JUe,getBuiltinRoles:()=>MK,getDBRoleID:()=>eMe,getExternalRoleID:()=>Ch,getExternalRoleIDs:()=>tMe,getRole:()=>TZt,getUserRoleHierarchy:()=>jK,getUserRoleIdHierarchy:()=>XUe,isBuiltin:()=>xy,lowerBuiltinRoleID:()=>SZt,prefixRoleIDNoBuiltin:()=>PK,roleIDsAreEqual:()=>Uu,roleToNumber:()=>_Zt,saveRoles:()=>AZt,validInherits:()=>EZt});var YUe=require("lodash"),s2=ne(require("lodash/fp/cloneDeep")),DK=ne(Y7());var LK={ADMIN:"ADMIN",POWER:"POWER",BASIC:"BASIC",PUBLIC:"PUBLIC"},Fn={...LK,BUILDER:"BUILDER"},FK={UUID:void 0,NAME:"name"};function wZt(e,t){return Array.isArray(t)?t.filter(r=>e.includes(r)).length===t.length:e.includes(t)}a(wZt,"rolesInList");var kh=class{constructor(t,r,n,i){this.permissions={};this._id=t,this.name=r,this.uiMetadata=i,this.permissionId=n,this.version=FK.NAME}static{a(this,"Role")}addInheritance(t){return t&&typeof t=="string"?t=PK(t):t&&Array.isArray(t)&&(t=t.map(PK)),this.inherits=t,this}},o2=class{static{a(this,"RoleHierarchyTraversal")}constructor(t,r){this.allRoles=t,this.opts=r}walk(t){let r=this.opts,n=this.allRoles,i=[];if(!t||!t._id)return i;if(i.push(t),Array.isArray(t.inherits))for(let o of t.inherits){let s=GA(o,n,r);s&&(i=i.concat(this.walk(s)))}else{let o=[],s=t;for(;s&&s.inherits&&!wZt(o,s.inherits);){if(Array.isArray(s.inherits))return i.concat(this.walk(s));if(o.push(s.inherits),s=GA(s.inherits,n,r),s&&i.push(s),Ye.roles.checkForRoleInheritanceLoops(i))break}}return(0,YUe.uniqBy)(i,o=>o._id)}},UK={ADMIN:new kh(Fn.ADMIN,Fn.ADMIN,"admin",{displayName:"App admin",description:"Can do everything",color:"var(--spectrum-global-color-static-red-400)"}).addInheritance(Fn.POWER),POWER:new kh(Fn.POWER,Fn.POWER,"power",{displayName:"App power user",description:"An app user with more access",color:"var(--spectrum-global-color-static-orange-400)"}).addInheritance(Fn.BASIC),BASIC:new kh(Fn.BASIC,Fn.BASIC,"write",{displayName:"App user",description:"Any logged in user",color:"var(--spectrum-global-color-static-green-400)"}).addInheritance(Fn.PUBLIC),PUBLIC:new kh(Fn.PUBLIC,Fn.PUBLIC,"public",{displayName:"Public user",description:"Accessible to anyone",color:"var(--spectrum-global-color-static-blue-400)"}),BUILDER:new kh(Fn.BUILDER,Fn.BUILDER,"admin",{displayName:"Builder user",description:"Users that can edit this app",color:"var(--spectrum-global-color-static-magenta-600)"})};function MK(){return(0,s2.default)(UK)}a(MK,"getBuiltinRoles");function xy(e){return Object.values(LK).includes(e)}a(xy,"isBuiltin");function PK(e){return xy(e)?e:Jf(e)}a(PK,"prefixRoleIDNoBuiltin");function JUe(e){let t=Object.values(UK).find(r=>e.includes(r._id));if(t)return(0,s2.default)(t)}a(JUe,"getBuiltinRole");function EZt(e,t){if(!t)return!1;let r=a(n=>e.find(i=>Uu(i._id,n)),"find");if(Array.isArray(t)){let n=t.filter(i=>r(i));return t.length!==0&&n.length===t.length}else return!!r(t)}a(EZt,"validInherits");function WA(e){let t=MK(),r=Object.values(t).length+1;if(Uu(e,Fn.ADMIN)||Uu(e,Fn.BUILDER))return r;let n=t[e],i=0;do{if(!n)break;if(Array.isArray(n.inherits))throw new Error("Built-in roles don't support multi-inheritance");n=t[n.inherits],i++}while(n!==null);return i}a(WA,"builtinRoleToNumber");async function _Zt(e){if(xy(e))return WA(e);let t=await jK(e,{defaultPublic:!0}),r=a(n=>{if(!n.inherits)return 0;if(Array.isArray(n.inherits)){let i=n.inherits.map(o=>{let s=t.find(u=>Uu(u._id,o));if(s)return r(s)+1}).filter(o=>o).sort().pop();if(i!=null)return i}else if(xy(n.inherits))return WA(n.inherits)+1;return 0},"findNumber");return Math.max(...t.map(r))}a(_Zt,"roleToNumber");function SZt(e,t){return e?t&&WA(e)>WA(t)?t:e:t}a(SZt,"lowerBuiltinRoleID");function Uu(e,t){return Jf(e)===Jf(t)}a(Uu,"roleIDsAreEqual");function xZt(e){let t;return e._id&&(t=Ch(e._id)),{...e,_id:t,inherits:tMe(e.inherits,e.version)}}a(xZt,"externalRole");function GA(e,t,r){let n=JUe(e);n||(e=Jf(e));let i=t.find(o=>o._id&&Uu(o._id,e));return!i&&!xy(e)&&r?.defaultPublic?(0,s2.default)(UK.PUBLIC):(n=Object.assign(n||{},i),n?._id&&(n._id=Ch(n._id,n.version)),Object.keys(n).length===0?void 0:n)}a(GA,"findRole");async function TZt(e,t){let r=Yv(),n=[];if(!xy(e)){let i=await r.tryGet(eMe(e));i&&n.push(i)}return GA(e,n,t)}a(TZt,"getRole");async function AZt(e){await Yv().bulkDocs(e.filter(r=>r._id).map(r=>({...r,_id:Jf(r._id)})))}a(AZt,"saveRoles");async function RZt(e,t){let r=await BK();if(Uu(e,Fn.ADMIN))return r;let n=GA(e,r,t),i=[];return n&&(i=new o2(r,t).walk(n)),i}a(RZt,"getAllUserRoles");async function XUe(e){return(await jK(e)).map(r=>r._id)}a(XUe,"getUserRoleIdHierarchy");async function jK(e,t){return RZt(e,t)}a(jK,"getUserRoleHierarchy");function ZUe(e,t){if(e&&!Array.isArray(e[t])){let r=e[t];e[t]=[r],r==="write"&&e[t].push("read")}return e}a(ZUe,"checkForRoleResourceArray");async function OZt(e){return(await BK(e)).map(r=>r._id)}a(OZt,"getAllRoleIds");async function BK(e){if(e)return $s(e,t);{let r;try{r=Yv()}catch{}return t(r)}async function t(r){let n=[];r&&(n=(await r.allDocs(C1(null,{include_docs:!0}))).rows.map(u=>u.doc),n.forEach(u=>u._id=Ch(u._id,u.version)));let i=MK(),o=[];!r||await IZt(r)?o=[Fn.ADMIN,Fn.POWER,Fn.BASIC,Fn.PUBLIC]:o=[Fn.ADMIN,Fn.BASIC,Fn.PUBLIC];for(let s of o){let u=i[s],c=n.filter(l=>Uu(l._id,s))[0];c==null?n.push(u||i.BASIC):(n=n.filter(l=>l._id!==c._id),c._id=Ch(u._id,c.version),n.push({...u,...c,name:u.name,_id:Ch(u._id,u.version)}))}for(let s of n)if(s.permissions)for(let u of Object.keys(s.permissions))s.permissions=ZUe(s.permissions,u);return n}a(t,"internal")}a(BK,"getAllRoles");async function IZt(e){let r=(await e.tryGet("app_metadata"))?.creationVersion;return!r||!DK.default.valid(r)?!0:!DK.default.gte(r,K.MIN_VERSION_WITHOUT_POWER_ROLE)}a(IZt,"shouldIncludePowerRole");var NK=class{static{a(this,"AccessController")}constructor(){this.userHierarchies={}}async hasAccess(t,r){if(t==null||t===""||Uu(t,Fn.BUILDER)||Uu(r,t)||Uu(r,Fn.BUILDER))return!0;let n=r?this.userHierarchies[r]:null;return!n&&r&&(n=await XUe(r),this.userHierarchies[r]=n),n?.find(i=>Uu(i,t))!==void 0}async checkScreensAccess(t,r){let n=[];for(let i of t){let o=await this.checkScreenAccess(i,r);o&&n.push(o)}return n}async checkScreenAccess(t,r){let n=t&&t.routing?t.routing.roleId:void 0;return await this.hasAccess(n,r)?t:null}};function eMe(e){return e?.startsWith("role")?e:Jf(e)}a(eMe,"getDBRoleID");function Ch(e,t){if(e.startsWith(`role${Fe}`)&&(xy(e)||t===FK.NAME)){let r=e.split(Fe);return r.shift(),r.join(Fe)}return e}a(Ch,"getExternalRoleID");function tMe(e,t){return e&&(typeof e=="string"?Ch(e,t):e.map(r=>Ch(r,t)))}a(tMe,"getExternalRoleIDs");var Ri={};oe(Ri,{BUILDER:()=>NZt,BUILTIN_PERMISSIONS:()=>u2,CREATOR:()=>LZt,GLOBAL_BUILDER:()=>FZt,PermissionImpl:()=>Un,PermissionLevel:()=>fd,PermissionType:()=>bS,doesHaveBasePermission:()=>DZt,getAllowedLevels:()=>aMe,getBuiltinPermissionByID:()=>CZt,getBuiltinPermissions:()=>kZt,isPermissionLevelHigherThanRead:()=>PZt,levelToNumber:()=>iMe});var rMe=ne(require("lodash/flatten")),nMe=ne(require("lodash/fp/cloneDeep"));var Un=class{static{a(this,"PermissionImpl")}constructor(t,r){this.type=t,this.level=r}};function iMe(e){switch(e){case"execute":return 0;case"read":return 1;case"write":return 2;case"admin":return 3;default:return-1}}a(iMe,"levelToNumber");function aMe(e){switch(e){case"execute":return["execute"];case"read":return["execute","read"];case"write":case"admin":return["execute","read","write"];default:return[]}}a(aMe,"getAllowedLevels");var u2={PUBLIC:{_id:"public",name:"Public",permissions:[new Un("webhook","execute")]},READ_ONLY:{_id:"read_only",name:"Read only",permissions:[new Un("query","read"),new Un("table","read"),new Un("app","read")]},WRITE:{_id:"write",name:"Read/Write",permissions:[new Un("query","write"),new Un("table","write"),new Un("automation","execute"),new Un("legacy_view","read"),new Un("app","read")]},POWER:{_id:"power",name:"Power",permissions:[new Un("table","write"),new Un("user","read"),new Un("automation","execute"),new Un("webhook","read"),new Un("legacy_view","read"),new Un("app","read")]},ADMIN:{_id:"admin",name:"Admin",permissions:[new Un("table","admin"),new Un("user","admin"),new Un("automation","admin"),new Un("webhook","read"),new Un("query","admin"),new Un("legacy_view","read"),new Un("app","read")]}};function kZt(){return(0,nMe.default)(u2)}a(kZt,"getBuiltinPermissions");function CZt(e){return Object.values(u2).find(r=>r._id===e)}a(CZt,"getBuiltinPermissionByID");function DZt(e,t,r){let n=[...new Set(r.map(s=>s.permissionId))],i=Object.values(u2),o=(0,rMe.default)(i.filter(s=>n.indexOf(s._id)!==-1).map(s=>s.permissions));for(let s of o)if(s.type===e&&aMe(s.level).indexOf(t)!==-1)return!0;return!1}a(DZt,"doesHaveBasePermission");function PZt(e){return iMe(e)>1}a(PZt,"isPermissionLevelHigherThanRead");var NZt="builder",LZt="creator",FZt="globalBuilder";var c2=ne(require("crypto")),sMe=ne(require("dd-trace")),uMe=require("lodash"),MZt=ne(O7());var oMe;function cMe(e){let t=e.split(",").map(n=>n.split(":")),r=[];for(let[n,...i]of t)for(let o of i){let s=!0;o.startsWith("!")&&(o=o.slice(1),s=!1),r.push({tenantId:n,key:o,value:s})}return r}a(cMe,"parseEnvFlags");function jZt(){return cMe(K.TENANT_FEATURE_FLAGS||"")}a(jZt,"getEnvFlags");var qK=class{constructor(t){this.flagSchema=t;this.setId=c2.randomUUID()}static{a(this,"FlagSet")}defaults(){return(0,uMe.cloneDeep)(this.flagSchema)}isFlagName(t){return this.flagSchema[t]!==void 0}async isEnabled(t){return(await this.fetch())[t]}async fetch(){return await sMe.default.trace("features.fetch",async t=>{let r=ez(this.setId);if(r)return t?.addTags({fromCache:!0}),r;let n={},i=this.defaults(),o=Pt(),s=new Set;if(x1())return i;for(let{tenantId:p,key:d,value:h}of jZt())if(!(!p||p!=="*"&&p!==o)&&(n.readFromEnvironmentVars=!0,h===!1&&s.add(d),!!this.isFlagName(d))){if(typeof i[d]!="boolean")throw new Error(`Feature: ${d} is not a boolean`);i[d]=h,n[`flags.${d}.source`]="environment"}let u=qf(),c=u?._id;if(!c){let p=X5();p&&(c=c2.createHash("sha512").update(p).digest("hex"))}let l=u?.tenantId;if(l||(l=o),n["identity.type"]=u?.type,n["identity._id"]=u?._id,n.tenantId=l,n.userId=c,oMe&&c){n.readFromPostHog=!0;let p=await sE(),d={tenantId:l},h={tenant:{id:l}};p.config.createdVersion&&(h.tenant.createdVersion=p.config.createdVersion),p.createdAt&&(h.tenant.createdAt=`${p.createdAt}`);let m=await oMe.getAllFlags(c,{personProperties:d,onlyEvaluateLocally:!0,groups:{tenant:l},groupProperties:h});for(let[g,y]of Object.entries(m))if(this.isFlagName(g)){if(typeof y!="boolean"){console.warn(`Invalid value for posthog flag "${g}": ${y}`);continue}if(!(i[g]===!0||s.has(g)))try{i[g]=y,n[`flags.${g}.source`]="posthog"}catch(b){console.warn(`Error parsing posthog flag "${g}": ${y}`,b)}}}let f=rz();for(let[p,d]of Object.entries(f))this.isFlagName(p)&&typeof d=="boolean"&&(i[p]=d,n[`flags.${p}.source`]="override");tz(this.setId,i);for(let[p,d]of Object.entries(i))n[`flags.${p}.value`]=d;return t?.addTags(n),i})}},BZt={USE_ZOD_VALIDATOR:!1,AI_AGENTS:!1,DEBUG_UI:K.isDev(),DEV_USE_CLIENT_FROM_STORAGE:!1,DUPLICATE_APP:!1,COPY_RESOURCES_BETWEEN_WORKSPACES:!1,PRIVATE_LLMS:!1},Ysn=new qK(BZt);var pr={};oe(pr,{adminOnly:()=>R2,auditLog:()=>O2,authError:()=>Wa,buildAuthMiddleware:()=>_gr,buildCsrfMiddleware:()=>xgr,buildTenancyMiddleware:()=>Sgr,builderOnly:()=>N2,builderOrAdmin:()=>L2,google:()=>Ip,internalApi:()=>U2,joiValidator:()=>YA,oidc:()=>qp,passport:()=>Tgr,platformLogout:()=>kgr,refreshOAuthToken:()=>Ogr,ssoCallbackUrl:()=>Ph,updateUserOAuth:()=>Igr,workspaceBuilderOrAdmin:()=>LU});var FU={};oe(FU,{adminOnly:()=>R2,auditLog:()=>O2,authError:()=>Wa,authenticated:()=>P2,builderOnly:()=>N2,builderOrAdmin:()=>L2,correlation:()=>pMe,csp:()=>IBe,csrf:()=>F2,datasource:()=>agr,errorHandling:()=>CBe,featureFlagCookie:()=>DBe,google:()=>Ip,internalApi:()=>U2,ip:()=>PBe,joiValidator:()=>YA,local:()=>wE,oidc:()=>qp,pino:()=>EBe,querystringToBody:()=>WGe,ssoCallbackUrl:()=>Ph,tenancy:()=>NU,workspaceBuilderOrAdmin:()=>LU});var fMe=require("uuid");var zZt=M1(),pMe=a((e,t)=>{let r=e.headers["x-budibase-correlation-id"];return r||(r=(0,fMe.v4)()),zZt.withId(r,()=>t())},"correlationMiddleware");var Inr=wBe(),knr=M1();function Cnr(){return{logger:KN,genReqId:knr.getId,autoLogging:{ignore:e=>!!e.url?.includes("/health")},serializers:{req:e=>({method:e.method,url:e.url,correlationId:e.id}),res:e=>({status:e.statusCode})}}}a(Cnr,"pinoSettings");function Dnr(){return K.HTTP_LOGGING?Inr(Cnr()):(e,t)=>t()}a(Dnr,"getMiddleware");var EBe=Dnr();var R2=a(async(e,t)=>(!e.internal&&!Gl(e.user)&&e.throw(403,"Admin user only endpoint."),t()),"adminOnly");var O2=a(async(e,t)=>t(),"auditLog");var Pnr=/\/:(.*?)(\/.*)?$/g,Oy=a(e=>e?e.map(t=>{let r=t.route,n=t.method,i=r.match(Pnr);if(i)for(let o of i){let u="/.*"+(o.endsWith("/")?"/":"");r=r.replace(o,u)}return{regex:new RegExp(r),method:n,route:r}}):[],"buildMatcherRegex"),Iy=a((e,t)=>t.find(({regex:r,method:n})=>{let i=r.test(e.request.url),o=n==="ALL"?!0:e.request.method.toLowerCase()===n.toLowerCase();return i&&o}),"matches");var Wc={};oe(Wc,{SecretOption:()=>xBe,decrypt:()=>jQ,decryptFile:()=>jnr,encrypt:()=>Fnr,encryptFile:()=>Unr,getSecret:()=>MQ});var xp=ne(require("crypto")),Dh=ne(require("fs")),LQ=require("path"),FQ=ne(require("zlib"));var I2="aes-256-ctr",SBe="-",Nnr=1e4,Lnr=32,k2=16,UQ=16,xBe=(r=>(r.API="api",r.ENCRYPTION="encryption",r))(xBe||{});function MQ(e){let t,r;switch(e){case"encryption":t=K.ENCRYPTION_KEY,r="ENCRYPTION_KEY";break;case"api":default:t=K.API_ENCRYPTION_KEY,r="API_ENCRYPTION_KEY";break}if(!t)throw new Error(`Secret "${r}" has not been set in environment.`);return t}a(MQ,"getSecret");function C2(e,t){return xp.default.pbkdf2Sync(e,new Uint8Array(t),Nnr,Lnr,"sha512")}a(C2,"stretchString");function Fnr(e,t="api"){let r=xp.default.randomBytes(k2),n=C2(MQ(t),r),i=xp.default.createCipheriv(I2,new Uint8Array(n),new Uint8Array(r)),o=i.update(e,"utf8"),s=i.final(),u=Buffer.concat([new Uint8Array(o),new Uint8Array(s)]).toString("hex");return`${r.toString("hex")}${SBe}${u}`}a(Fnr,"encrypt");function jQ(e,t="api"){let[r,n]=e.split(SBe),i=Buffer.from(r,"hex"),o=C2(MQ(t),i),s=xp.default.createDecipheriv(I2,new Uint8Array(o),new Uint8Array(i)),u=s.update(n,"hex"),c=s.final();return Buffer.concat([new Uint8Array(u),new Uint8Array(c)]).toString()}a(jQ,"decrypt");async function Unr({dir:e,filename:t},r){let n=`${t}.enc`,i=(0,LQ.join)(e,t);if(Dh.default.lstatSync(i).isDirectory())throw new Error("Unable to encrypt directory");let o=Dh.default.createReadStream(i),s=Dh.default.createWriteStream((0,LQ.join)(e,n)),u=xp.default.randomBytes(k2),c=xp.default.randomBytes(UQ),l=C2(r,u),f=xp.default.createCipheriv(I2,new Uint8Array(l),new Uint8Array(c));return s.write(u),s.write(c),o.pipe(FQ.default.createGzip()).pipe(f).pipe(s),new Promise(p=>{s.on("finish",()=>{p({filename:n,dir:e})})})}a(Unr,"encryptFile");async function Mnr(e){let t=Dh.default.createReadStream(e),r=await _Be(t,k2),n=await _Be(t,UQ);return t.close(),{salt:r,iv:n}}a(Mnr,"getSaltAndIV");async function jnr(e,t,r){if(Dh.default.lstatSync(e).isDirectory())throw new Error("Unable to decrypt directory");let{salt:n,iv:i}=await Mnr(e),o=Dh.default.createReadStream(e,{start:k2+UQ}),s=Dh.default.createWriteStream(t),u=C2(r,n),c=xp.default.createDecipheriv(I2,new Uint8Array(u),new Uint8Array(i)),l=FQ.default.createGunzip();return o.pipe(c).pipe(l).pipe(s),new Promise((f,p)=>{s.on("finish",()=>{s.close(),f()}),o.on("error",d=>{s.close(),p(d)}),c.on("error",d=>{s.close(),p(d)}),l.on("error",d=>{s.close(),p(d)}),s.on("error",d=>{s.close(),p(d)})})}a(jnr,"decryptFile");function _Be(e,t){return new Promise((r,n)=>{let i=0,o=[];e.on("readable",()=>{let s;for(;(s=e.read(t-i))!==null;)o.push(s),i+=s.length;r(Buffer.concat(o.map(u=>new Uint8Array(u))))}),e.on("end",()=>{n(new Error("Insufficient data in the stream."))}),e.on("error",s=>{n(s)})})}a(_Be,"readBytes");var ABe=ne(require("dd-trace"));var qnr=K.SESSION_UPDATE_PERIOD?parseInt(K.SESSION_UPDATE_PERIOD):60*1e3;function $nr(){return new Date(Date.now()-qnr).toISOString()}a($nr,"timeMinusOneMinute");function TBe(e,t={}){e.publicEndpoint=t.publicEndpoint||!1,e.isAuthenticated=t.authenticated||!1,e.loginMethod=t.loginMethod,e.user=t.user,e.internal=t.internal||!1,e.version=t.version}a(TBe,"finalise");async function znr(e,t){if(Mx(e))return{valid:!0,user:void 0};let n=jQ(e).split(Fe)[0];return es(n,async()=>{let i;try{let o=Rr();i=await Zf("by_api_key",{key:e},o)}catch{i=void 0}if(i)return{valid:!0,user:await UA({userId:i,tenantId:n,populateUser:t})};throw new eL})}a(znr,"checkApiKey");function D2(e,t){let r=e.request.headers[t];if(Array.isArray(r))throw new Error("Unexpected header format");return r}a(D2,"getHeader");function P2(e=[],t={publicAllowed:!1}){let r=e?Oy(e):[];return async(n,i)=>{let o=!1,s=D2(n,"x-budibase-api-version");Iy(n,r)&&(o=!0);try{let c=D2(n,"x-budibase-token"),l=tp(n,"budibase:auth")||P1(c),f=D2(n,"x-budibase-api-key");!f&&n.request.headers.authorization&&(f=n.request.headers.authorization.split(" ")[1]);let p=D2(n,"x-budibase-tenant-id"),d=!1,h,m=!1,g;if(l&&!f){let b=l.sessionId,v=l.userId,w;try{w=await tPe(v,b),t&&t.populateUser?h=await UA({userId:v,tenantId:w.tenantId,email:w.email,populateUser:t.populateUser(n)}):h=await UA({userId:v,tenantId:w.tenantId,email:w.email}),h.csrfToken=w.csrfToken,g="cookie",w?.lastAccessedAt<$nr()&&await ePe(w),d=!0}catch(x){d=!1,console.error(`Auth Error: ${x.message}`),Kd(n,"budibase:auth")}}if(!d&&f){let b=t.populateUser?t.populateUser(n):null,{valid:v,user:w}=await znr(f,b);v&&(d=!0,g="api_key",h=w,m=!w)}!h&&p?h={tenantId:p}:h&&"password"in h&&delete h.password,d||(d=!1);let y=a(b=>b&&b.email,"isUser");return y(h)&&ABe.default.setUser({id:h._id,tenantId:h.tenantId,budibaseAccess:h.budibaseAccess,status:h.status}),TBe(n,{authenticated:d,user:h,internal:m,version:s,publicEndpoint:o,loginMethod:g}),y(h)?Z4(h,n,i):i()}catch(c){if(console.error(`Auth Error: ${c.message}`),c?.name==="JsonWebTokenError"?Kd(n,"budibase:auth"):c?.code==="invalid_api_key"&&n.throw(403,c.message),t&&t.publicAllowed||o)return TBe(n,{authenticated:!1,version:s,publicEndpoint:o}),i();n.throw(c.status||403,c)}}}a(P2,"authenticated");async function N2(e,t){if(e.internal)return t();let r=await vg(e);return!r&&!K.isWorker()?e.throw(403,"This request required a workspace id."):!r&&!us(e.user)?e.throw(403,"Builder user only endpoint."):r&&!cE(e.user,r)&&e.throw(403,"Workspace builder user only endpoint."),t()}a(N2,"builderOnly");async function L2(e,t){if(e.internal||Gl(e.user))return t();let r=await vg(e);return!r&&!K.isWorker()?e.throw(403,"This request required a workspace id."):!r&&!us(e.user)?e.throw(403,"Admin/Builder user only endpoint."):r&&!cE(e.user,r)&&e.throw(403,"Workspace Admin/Builder user only endpoint."),t()}a(L2,"builderOrAdmin");var OBe=ne(require("crypto"));var RBe={"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","https://www.google.com/recaptcha/api.js"],"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'"]},Wnr=/^[A-Za-z0-9-*:/.]+$/,IBe=a(async(e,t)=>{let r=OBe.default.randomBytes(16).toString("base64");e.state.nonce=r;let n={...RBe};if(n["script-src"]=[...RBe["script-src"],`'nonce-${r}'`],e.user?.license?.features.includes("customAppScripts")&&e.appId)try{let s=await kx.getWorkspaceMetadata(e.appId);if("name"in s)for(let u of s.scripts||[]){let c=(u.cspWhitelist||"").split(`
|
|
536
536
|
`).filter(l=>Wnr.test(l));n["default-src"]=[...n["default-src"],...c]}}catch(s){console.error(`Error occurred in Content-Security-Policy middleware: ${s}`)}let o=Object.entries(n).map(([s,u])=>`${s} ${u.join(" ")}`).join("; ");e.set("Content-Security-Policy",o),await t()},"contentSecurityPolicy");var Gnr=["GET","HEAD","OPTIONS"],Hnr=["application/x-www-form-urlencoded","multipart/form-data","text/plain"];function F2(e={noCsrfPatterns:[]}){let t=Oy(e.noCsrfPatterns);return async(r,n)=>{if(Iy(r,t)||Gnr.indexOf(r.method)!==-1)return n();let o=r.get("content-type")?r.get("content-type").toLowerCase():"";if(!Hnr.filter(c=>o.includes(c)).length||r.internal)return n();let s=r.user?.csrfToken;if(!s)return n();let u=r.get("x-csrf-token");return(!u||u!==s)&&r.throw(403,"Invalid CSRF token"),n()}}a(F2,"csrf");function kBe(e){if(e.includes("-----BEGIN PRIVATE KEY-----"))return!0;for(let t of $fe){let r=K[t];if(!(typeof r!="string"||r==="")&&e.includes(r))return!0}return!1}a(kBe,"stringContainsSecret");async function CBe(e,t){try{await t()}catch(r){let n=r.status||r.statusCode||500;e.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:QDe(r)};if(kBe(JSON.stringify(i))&&(i={message:"Unexpected error",status:n,error:"Unexpected error"}),K.isTest()&&e.headers["x-budibase-include-stacktrace"]){let o=r;for(;o.cause;)o=o.cause;i.stack=o.stack}e.body=i}}a(CBe,"errorHandling");var DBe=a(async(e,t)=>{let n=tp(e,"budibase:featureflags")?.flags||{};await nz(n,async()=>{await t()})},"featureFlagCookie");async function U2(e,t){let r=e.request.headers["x-budibase-api-key"];return r||e.throw(403,"Unauthorized"),Array.isArray(r)&&e.throw(403,"Unauthorized"),Mx(r)||e.throw(403,"Unauthorized"),t()}a(U2,"internalApi");async function PBe(e,t){return e.ip?await Z5(e.ip,()=>t()):t()}a(PBe,"ip");var YA={};oe(YA,{body:()=>Vnr,params:()=>Knr});var BQ=ne(require("joi"));function NBe(e,t,r){let n=r?.errorPrefix??`Invalid ${t}`;return(i,o)=>{if(!e)return o();let s=null,u=i.request?.[t];i[t]!=null?s=i[t]:u!=null&&(s=u),e.append&&(e=e.append({createdAt:BQ.default.any().optional(),updatedAt:BQ.default.any().optional()}));let{error:c}=e.validate(s,{allowUnknown:r?.allowUnknown});if(c){let l=c.message;n&&(l=`Invalid ${t} - ${l}`),i.throw(400,l)}return o()}}a(NBe,"validate");function Vnr(e,t){return NBe(e,"body",t)}a(Vnr,"body");function Knr(e,t){return NBe(e,"params",t)}a(Knr,"params");var wE={};oe(wE,{authenticate:()=>Jnr,options:()=>Ynr});function Wa(e,t,r){return e(r,null,{message:t})}a(Wa,"authError");async function Ph(e,t){if(t&&t.callbackURL)return t.callbackURL;let r=await IK(),n="/api/global/auth";return Hd()&&(n+=`/${Pt()}`),n+=`/${e}/callback`,`${r.platformUrl}${n}`}a(Ph,"ssoCallbackUrl");var qQ="Invalid credentials",Qnr="This account has expired. Please reset your password",Ynr={passReqToCallback:!0};async function Jnr(e,t,r,n){if(!t)return Wa(n,"Email Required");if(!r)return Wa(n,"Password Required");let i=await qc(t);return i==null?(console.info(`user=${t} could not be found`),Wa(n,qQ)):i.status==="inactive"?(console.info(`user=${t} is inactive`,i),Wa(n,qQ)):i.password?await Y4(r,i.password)?(delete i.password,n(null,i)):Wa(n,qQ):(console.info(`user=${t} has no password set`,i),Wa(n,Qnr))}a(Jnr,"authenticate");var Ip={};oe(Ip,{buildVerifyFn:()=>d3e,getCallbackUrl:()=>far,strategyFactory:()=>TY});var JA=a(e=>Promise.resolve(e),"ssoSaveUserNoOp");async function M2(e,t=!0,r,n){if(!n)throw new Error("Save user function must be provided");if(!e.userId)return Wa(r,"sso user id required");if(!e.email)return Wa(r,"sso user email required");let i=Xv(e.userId),o;try{o=await wy(i)}catch(u){if(!u.status||u.status!==404)return Wa(r,"Unexpected error when retrieving existing user",u)}if(o||(o=await qc(e.email)),!o&&t)return Wa(r,"Email does not yet exist. You must set up your local budibase account first.");o||(o={_id:i,email:e.email,roles:{},tenantId:Pt()});let s=await Xnr(o,e);s.forceResetPassword=!1;try{delete s.password,s=await n(s,{hashPassword:!1,requirePassword:!1})}catch(u){return Wa(r,"Error saving user",u)}return r(null,s)}a(M2,"authenticate");async function Xnr(e,t){let r,n,i;if(t.profile){let o=t.profile;if(o.name){let s=o.name;s.givenName&&(r=s.givenName),s.familyName&&(n=s.familyName)}}return t.oauth2&&(i={...t.oauth2}),{...e,provider:t.provider,providerType:t.providerType,firstName:r,lastName:n,oauth2:i}}a(Xnr,"syncUser");var lar=SY().OAuth2Strategy;function d3e(e){return(t,r,n,i)=>{let o={provider:"google",providerType:"google",userId:n.id,profile:n,email:n._json.email,oauth2:{accessToken:t,refreshToken:r}};return M2(o,!0,i,e)}}a(d3e,"buildVerifyFn");async function TY(e,t,r){try{let{clientID:n,clientSecret:i}=e;if(!n||!i)throw new Error("Configuration invalid. Must contain google clientID and clientSecret");let o=d3e(r);return new lar({clientID:e.clientID,clientSecret:e.clientSecret,callbackURL:t},o)}catch(n){throw new Error(`Error constructing google authentication strategy: ${n}`)}}a(TY,"strategyFactory");async function far(e){return Ph("google",e)}a(far,"getCallbackUrl");var qp={};oe(qp,{buildVerifyFn:()=>zGe,fetchStrategyConfig:()=>egr,getCallbackUrl:()=>tgr,strategyFactory:()=>Zmr});var $Ge=ne(require("node-fetch"));var Jmr=qGe().Strategy;function zGe(e){return async(t,r,n,i,o,s,u,c,l)=>{let f={provider:t,providerType:"oidc",userId:n.id,profile:n,email:Xmr(n,i),oauth2:{accessToken:o,refreshToken:s}};return M2(f,!1,l,e)}}a(zGe,"buildVerifyFn");function Xmr(e,t){if(e._json.email)return e._json.email;if(t.email)return t.email;let r=t.preferred_username;if(r&&xz(r))return r;throw new Error(`Could not determine user email from profile ${JSON.stringify(e)} and claims ${JSON.stringify(t)}`)}a(Xmr,"getEmail");async function Zmr(e,t){try{let r=zGe(t),n=new Jmr(e,r);return n.name="oidc",n}catch(r){throw new Error(`Error constructing OIDC authentication strategy - ${r}`)}}a(Zmr,"strategyFactory");async function egr(e,t){try{let{clientID:r,clientSecret:n,configUrl:i,pkce:o}=e;if(!r||!n||!t||!i)throw new Error("Configuration invalid. Must contain clientID, clientSecret, callbackUrl and configUrl");let s=await(0,$Ge.default)(i);if(!s.ok)throw new Error(`Unexpected response when fetching openid-configuration: ${s.statusText}`);let u=await s.json();return{issuer:u.issuer,authorizationURL:u.authorization_endpoint,tokenURL:u.token_endpoint,userInfoURL:u.userinfo_endpoint,clientID:r,clientSecret:n,callbackURL:t,pkce:o}}catch(r){throw new Error(`Error constructing OIDC authentication configuration - ${r}`)}}a(egr,"fetchStrategyConfig");async function tgr(){return Ph("oidc")}a(tgr,"getCallbackUrl");function WGe(e,t){let r=e.request.query?.query;if(e.request.method.toLowerCase()!=="get"&&e.throw(500,"Query to download middleware can only be used for get requests."),!r)return t();let n=decodeURIComponent(r),i;try{i=JSON.parse(n)}catch{return t()}return e.request.body=i,t()}a(WGe,"querystringToBody");function NU(e,t,r={noTenancyRequired:!1}){let n=Oy(e),i=Oy(t);return async function(o,s){let c={allowNoTenant:r.noTenancyRequired||!!Iy(o,i)};!!Iy(o,n)||(c.excludeStrategies=["query"]);let f=Fx(o,c);return o.set("x-budibase-tenant-id",f),es(f,s)}}a(NU,"tenancy");async function LU(e,t){if(e.internal||Gl(e.user))return t();let r=await vg(e);return r&&!WL(e.user,r)?e.throw(403,"Workspace Admin/Builder user only endpoint."):!r&&!K.isWorker()?e.throw(403,"This request required a workspace id."):!r&&!us(e.user)&&e.throw(403,"Admin/Builder user only endpoint."),t()}a(LU,"workspaceBuilderOrAdmin");var fZ={};oe(fZ,{postAuth:()=>igr,preAuth:()=>ngr});var rgr=SY().OAuth2Strategy;async function GGe(){let e=await kK();if(!e)throw new Error("No google configuration found");return e}a(GGe,"fetchGoogleCreds");async function ngr(e,t,r){let n=await GGe(),o=`${await zA({tenantAware:!1})}/api/global/auth/datasource/google/callback`,s=await TY(n,o,JA);return t.query.appId||t.throw(400,"appId query param not present."),e.authenticate(s,{scope:["profile","email","https://www.googleapis.com/auth/spreadsheets"],accessType:"offline",prompt:"consent"})(t,r)}a(ngr,"preAuth");async function igr(e,t,r){let n=await GGe(),o=`${await zA({tenantAware:!1})}/api/global/auth/datasource/google/callback`,s=tp(t,"budibase:datasourceauth");if(!s)throw new Error("Unable to fetch datasource auth cookie");return e.authenticate(new rgr({clientID:n.clientID,clientSecret:n.clientSecret,callbackURL:o},(u,c,l,f)=>{Kd(t,"budibase:datasourceauth"),f(null,{accessToken:u,refreshToken:c})}),{successRedirect:"/",failureRedirect:"/error"},async(u,c)=>{let l=`/builder/workspace/${s.appId}/data`,f=cn();await bp(`datasource:creation:${s.appId}:google:${f}`,{tokens:c}),t.redirect(`${l}/new?continue_google_setup=${f}`)})(t,r)}a(igr,"postAuth");var agr={google:fZ};var NHe=xHe(),Egr=DHe().Strategy,zU=PHe(),_gr=P2,Sgr=NU,xgr=F2,Tgr=NHe;NHe.use(new Egr(wE.options,wE.authenticate));async function Agr(e,t){let r=await qp.getCallbackUrl(),n,i;try{if(n=await qp.fetchStrategyConfig(e,r),!n)throw new Error("OIDC Config contents invalid");i=await qp.strategyFactory(n,JA)}catch{throw new Error("Could not refresh OAuth Token")}return zU.use(i,{setRefreshOAuth2(){return i._getOAuth2Client(n)}}),new Promise(o=>{zU.requestNewAccessToken("oidc",t,(s,u,c,l)=>{o({err:s,accessToken:u,refreshToken:c,params:l})})})}a(Agr,"refreshOIDCAccessToken");async function Rgr(e,t){let r=await Ip.getCallbackUrl(e),n;try{n=await Ip.strategyFactory(e,r,JA)}catch(i){throw new Error(`Error constructing OIDC refresh strategy: message=${i.message}`)}return zU.use(n),new Promise(i=>{zU.requestNewAccessToken("google",t,(o,s,u,c)=>{i({err:o,accessToken:s,refreshToken:u,params:c})})})}a(Rgr,"refreshGoogleAccessToken");async function Ogr(e,t,r){switch(t){case"oidc":{if(!r)return{err:{data:"OIDC config id not provided"}};let n=await CK(r);return n?Agr(n,e):{err:{data:"OIDC configuration not found"}}}case"google":{let n=await a2();return n?Rgr(n,e):{err:{data:"Google configuration not found"}}}}}a(Ogr,"refreshOAuthToken");async function Igr(e,t){let r={accessToken:t.accessToken,refreshToken:t.refreshToken};try{let n=Rr(),i=await n.get(e);typeof r.refreshToken!="string"&&delete r.refreshToken,i.oauth2={...i.oauth2,...r},await n.put(i),await MA(e)}catch(n){console.error("Could not update OAuth details for current user",n)}}a(Igr,"updateUserOAuth");async function kgr(e){let t=e.ctx,r=e.userId,n=e.keepActiveSession;if(!t)throw new Error("Koa context must be supplied to logout.");let i=tp(t,"budibase:auth"),o=await R9(r);i&&n?o=o.filter(u=>u.sessionId!==i.sessionId):Kd(t,"budibase:auth");let s=o.map(({sessionId:u})=>u);await nA(r,{sessionIds:s,reason:"logout"}),await $L.logout(t.user?.email),await MA(r)}a(kgr,"platformLogout");var GU={};oe(GU,{validate:()=>Lgr});var nt=ne(require("joi"));var Cgr=["Relational","Non-relational","Spreadsheet","Object store","Graph","API"];function xZ(e,t){let{error:r}=e.validate(t);if(r)throw r}a(xZ,"runJoi");function Dgr(e){let t=nt.default.object({type:nt.default.string().allow("component").required(),metadata:nt.default.object().unknown(!0).required(),hash:nt.default.string().optional(),version:nt.default.string().optional(),schema:nt.default.object({name:nt.default.string().required(),settings:nt.default.array().items(nt.default.object().unknown(!0)).required()}).unknown(!0)});xZ(t,e)}a(Dgr,"validateComponent");function Pgr(e){let t=nt.default.object({type:nt.default.string().allow(...Object.values(Fi)).required(),required:nt.default.boolean().required(),default:nt.default.any(),display:nt.default.string()}),r=nt.default.object({type:nt.default.string().allow(...Object.values(Ji)),readable:nt.default.boolean(),displayName:nt.default.string(),fields:nt.default.object().pattern(nt.default.string(),t)}).required(),n=nt.default.object({type:nt.default.string().allow("datasource").required(),metadata:nt.default.object().unknown(!0).required(),hash:nt.default.string().optional(),version:nt.default.string().optional(),schema:nt.default.object({docs:nt.default.string(),plus:nt.default.boolean().optional(),isSQL:nt.default.boolean().optional(),auth:nt.default.object({type:nt.default.string().required()}).optional(),features:nt.default.object(Object.fromEntries(Object.values(ya).map(i=>[i,nt.default.boolean().optional()]))).optional(),relationships:nt.default.boolean().optional(),description:nt.default.string().required(),friendlyName:nt.default.string().required(),type:nt.default.string().allow(...Cgr),datasource:nt.default.object().pattern(nt.default.string(),t).required(),query:nt.default.object().pattern(nt.default.string(),r).unknown(!0).required(),extra:nt.default.object().pattern(nt.default.string(),nt.default.object({type:nt.default.string().required(),displayName:nt.default.string().required(),required:nt.default.boolean(),data:nt.default.object()}))})});xZ(n,e)}a(Pgr,"validateDatasource");function Ngr(e){let t=nt.default.object().pattern(nt.default.string(),{type:nt.default.string().allow(...Object.values(Qt)).required(),customType:nt.default.string().allow(...Object.values(sn)),title:nt.default.string(),description:nt.default.string(),enum:nt.default.array().items(nt.default.string()),pretty:nt.default.array().items(nt.default.string())}),r=nt.default.object({properties:t,required:nt.default.array().items(nt.default.string())}).concat(t).required(),n=nt.default.object({type:nt.default.string().allow("automation").required(),metadata:nt.default.object().unknown(!0).required(),hash:nt.default.string().optional(),version:nt.default.string().optional(),schema:nt.default.object({name:nt.default.string().required(),tagline:nt.default.string().required(),icon:nt.default.string().required(),description:nt.default.string().required(),type:nt.default.string().allow("ACTION","LOGIC").required(),stepId:nt.default.string().disallow(...Rse).required(),inputs:nt.default.object().optional(),schema:nt.default.object({inputs:r,outputs:r}).required()})});xZ(n,e)}a(Ngr,"validateAutomation");function Lgr(e){switch(e?.type){case"component":Dgr(e);break;case"datasource":Pgr(e);break;case"automation":Ngr(e);break;default:throw new Error(`Unknown plugin type - check schema.json: ${e.type}`)}}a(Lgr,"validate");var $p={};oe($p,{Client:()=>oo,clients:()=>Vd,locks:()=>$c,utils:()=>bC});var KU={};oe(KU,{isBlacklisted:()=>Ugr,refreshBlacklist:()=>MHe});var LHe=ne(require("dns")),VU=ne(require("net"));var FHe=require("util");var HU,Fgr=(0,FHe.promisify)(LHe.default.lookup);async function UHe(e){return VU.default.isIP(e)||(e.startsWith("http")||(e=`https://${e}`),e=new URL(e).hostname),(await Fgr(e,{all:!0})).map(r=>r.address)}a(UHe,"lookup");async function MHe(){let t=K.BLACKLIST_IPS?.split(",")||[],r=[];for(let n of t){let i=n.trim();if(VU.default.isIP(i))r.push(i);else{let o=await UHe(i);r=r.concat(o)}}HU=r}a(MHe,"refreshBlacklist");async function Ugr(e){if(HU||await MHe(),HU?.length===0)return!1;let t;return VU.default.isIP(e)?t=[e]:t=await UHe(e),!!HU?.find(r=>t.includes(r))}a(Ugr,"isBlacklisted");var Fwn={"user:created":e=>e.userId,"user:updated":e=>e.userId,"user:deleted":e=>e.userId,"user:admin:assigned":e=>e.userId,"user:admin:removed":e=>e.userId,"user:builder:assigned":e=>e.userId,"user:builder:removed":e=>e.userId,"user_group:created":e=>e.groupId,"user_group:updated":e=>e.groupId,"user_group:deleted":e=>e.groupId,"user_group:user_added":e=>e.groupId,"user_group:users_deleted":e=>e.groupId,"user_group:permissions_edited":e=>e.groupId,"automation:deleted":e=>e.automationId,"datasource:deleted":e=>e.datasourceId,"table:deleted":e=>e.tableId,"query:deleted":e=>e.queryId,"workspace_app:deleted":e=>e.workspaceAppId,"view:deleted":e=>e.id};var Vt={};oe(Vt,{COUNT_FIELD_NAME:()=>CZ,Sql:()=>QHe,SqlTable:()=>QU,designDoc:()=>DZ,utils:()=>H5});var WHe=require("knex");var Mgr=require("knex");function TZ(e){return["link","formula","ai"].indexOf(e)!==-1}a(TZ,"isIgnoredType");function BHe(e,t,r,n,i){let o=t&&t.primary?t.primary:[],s=Object.values(t.schema),u=s.filter(d=>d.meta),c=u.length===s.length,l=[];n||(c?e.primary(u.map(d=>d.name)):o.length===1?(e.increments(o[0]).primary(),l.push(o[0])):e.primary(o));let f=Object.values(t.schema).map(d=>d.foreignKey);for(let[d,h]of Object.entries(t.schema)){let m=n?.schema[d];if(m&&m.type||l.includes(d)||i?.updated===d)continue;let g=h.type;switch(g){case"string":case"options":case"longform":case"barcodeqr":case"bb_reference_single":o.includes(d)?e.string(d,255):e.text(d);break;case"number":if(h.meta&&h.meta.toKey&&h.meta.toTable){let{toKey:y,toTable:b}=h.meta;e.integer(d).unsigned(),e.foreign(d).references(`${b}.${y}`)}else f.indexOf(d)===-1&&e.float(d);break;case"bigint":e.bigint(d);break;case"boolean":e.boolean(d);break;case"datetime":h.timeOnly?e.time(d):e.datetime(d,{useTz:!h.ignoreTimezones});break;case"array":case"bb_reference":Ye.schema.isDeprecatedSingleUserColumn(h)?e.text(d):e.json(d);break;case"link":if(h.relationshipType!=="many-to-one"&&h.relationshipType!=="many-to-many"){if(!h.foreignKey||!h.tableId)throw new Error("Invalid relationship schema");let{tableName:y}=q5(h.tableId),b=r[y];if(!b||!b.primary)throw new Error("Referenced table doesn't exist or has no primary keys");let v=b.primary[0],w=b.schema[v].externalType;w?e.specificType(h.foreignKey,w):e.integer(h.foreignKey).unsigned(),e.foreign(h.foreignKey).references(`${y}.${v}`)}break;case"signature_single":case"attachment":case"attachment_single":e.json(d);break;case"formula":break;case"ai":break;case"auto":case"json":case"internal":throw new Error(`${h.type} is not a valid SQL type`);default:Mt.unreachable(g)}}let p=i?n?.schema[i.old].type:void 0;return i&&p&&!TZ(p)&&e.renameColumn(i.old,i.updated),n&&Object.entries(n.schema).filter(([h,m])=>!TZ(m.type)&&t.schema[h]==null).forEach(([h,m])=>{i?.old===h||TZ(m.type)||(n.constrained&&n.constrained.indexOf(h)!==-1&&e.dropForeign(h),e.dropColumn(h))}),e}a(BHe,"generateSchema");function jgr(e,t,r){return e.createTable(t.name,n=>{BHe(n,t,r)})}a(jgr,"buildCreateTable");function Bgr(e,t,r,n,i){return e.alterTable(t.name,o=>{BHe(o,t,r,n,i)})}a(Bgr,"buildUpdateTable");function qgr(e,t){return e.dropTable(t.name)}a(qgr,"buildDeleteTable");var AZ=class{static{a(this,"SqlTableQueryBuilder")}constructor(t){this.sqlClient=t}getBaseSqlClient(){return this.sqlClient}getSqlClient(){return this.extendedSqlClient||this.sqlClient}setExtendedSqlClient(t){this.extendedSqlClient=t}_operation(t){return t.operation}_tableQuery(t){let r=(0,Mgr.knex)({client:this.sqlClient}).schema;t?.schema&&(r=r.withSchema(t.schema));let n;if(!t.table||!t.tables)throw new Error("Cannot execute without table being specified");if(t.table.sourceType==="internal")throw new Error("Cannot perform table actions for SQS.");switch(this._operation(t)){case"CREATE_TABLE":n=jgr(r,t.table,t.tables);break;case"UPDATE_TABLE":if(!t.table)throw new Error("Must specify old table for update");if(this.sqlClient==="mysql2"&&t.meta?.renamed){let i=t.meta.renamed.updated;return{sql:`alter table ${t?.schema?`\`${t.schema}\`.\`${t.table.name}\``:`\`${t.table.name}\``} rename column \`${t.meta.renamed.old}\` to \`${i}\`;`,bindings:[]}}if(n=Bgr(r,t.table,t.tables,t.meta?.oldTable,t.meta?.renamed),this.sqlClient==="mssql"&&t.meta?.renamed){let i=t.meta.renamed.old,o=t.meta.renamed.updated,s=t?.schema?`${t.schema}.${t.table.name}`:`${t.table.name}`,u=Vv(n);if(Array.isArray(u))for(let c of u)c.sql.startsWith("exec sp_rename")&&(c.sql=`exec sp_rename '${s}.${i}', '${o}', 'COLUMN'`,c.bindings=[]);return u}break;case"DELETE_TABLE":n=qgr(r,t.table);break;default:throw new Error("Table operation is of unknown type")}return Vv(n)}},QU=AZ;var GHe=require("lodash");var CZ="__bb_total";function qHe(){return(K.SQL_MAX_ROWS?parseInt(K.SQL_MAX_ROWS):null)||5e3}a(qHe,"getBaseLimit");function RZ(){return(K.SQL_MAX_RELATED_ROWS?parseInt(K.SQL_MAX_RELATED_ROWS):null)||500}a(RZ,"getRelationshipLimit");function zgr(e,t){return e.sort((r,n)=>{let i=t.find(s=>s&&r.endsWith(s)),o=t.find(s=>s&&n.endsWith(s));return i&&!o?-1:!i&&o?1:r.localeCompare(n)})}a(zgr,"prioritisedArraySort");function HHe(e){return Array.isArray(e)?e.map(t=>HHe(t)):(e.bindings&&(e.bindings=e.bindings.map(t=>typeof t=="boolean"?t?1:0:t)),e)}a(HHe,"convertBooleans");function $He(e){return e.sourceType==="internal"||e.sourceId===to}a($He,"isSqs");function Wgr(e,t='"'){return e.replace(new RegExp(t,"g"),`${t}${t}`)}a(Wgr,"escapeQuotes");function VHe(e,t='"'){return`${t}${Wgr(e,t)}${t}`}a(VHe,"wrap");function OZ(e,t='"'){for(let r in e)typeof e[r]=="string"&&(e[r]=VHe(e[r],t));return`[${e.join(",")}]`}a(OZ,"stringifyArray");function KHe(e){return _k.includes(e.type)&&!Ye.schema.isDeprecatedSingleUserColumn(e)}a(KHe,"isJsonColumn");var Ggr={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},IZ=class{constructor(t,r,n){this.SPECIAL_SELECT_CASES={POSTGRES_ARRAY:t=>this.client==="pg"&&t?.externalType?.toLowerCase()==="array",POSTGRES_MONEY:t=>this.client==="pg"&&t?.externalType?.includes("money"),POSTGRES_ENUM:t=>this.client==="pg"&&t?.externalType?.toLowerCase()==="user-defined"&&t?.type==="options",MSSQL_DATES:t=>this.client==="mssql"&&t?.type==="datetime"&&t.timeOnly};this.client=t,this.query=n,this.knex=r,this.splitter=new Lr.ColumnSplitter([this.table],{aliases:this.query.tableAliases,columnPrefix:this.query.meta?.columnPrefix})}static{a(this,"InternalBuilder")}get table(){return this.query.table}get knexClient(){return this.knex.client}getFieldSchema(t){let{column:r}=this.splitter.run(t);return this.table.schema[r]}requiresJsonAsStringClient(){return["mssql","mysql2","mariadb","oracledb"].includes(this.client)}quoteChars(){let t=this.knexClient.wrapIdentifier("foo",{});return[t[0],t[t.length-1]]}quote(t){return this.knexClient.wrapIdentifier(t,{})}isQuoted(t){let[r,n]=this.quoteChars();return t.startsWith(r)&&t.endsWith(n)}quotedIdentifier(t){return Array.isArray(t)||(t=this.splitIdentifier(t)),t.map(r=>this.quote(r)).join(".")}castIntToString(t){switch(this.client){case"oracledb":return this.knex.raw("to_char(??)",[t]);case"pg":return this.knex.raw("??::TEXT",[t]);case"mysql2":case"mariadb":return this.knex.raw("CAST(?? AS CHAR)",[t]);case"sqlite3":return this.knex.raw("printf('%d', ??)",[t]);case"mssql":return this.knex.raw("CONVERT(NVARCHAR, ??)",[t])}}rawQuotedIdentifier(t){return this.knex.raw(this.quotedIdentifier(t))}splitIdentifier(t){let[r,n]=this.quoteChars();return this.isQuoted(t)?t.slice(1,-1).split(`${n}.${r}`):t.split(".")}qualifyIdentifier(t){let r=this.getTableName(),n=this.splitIdentifier(t);return n[0]!==r&&n.unshift(r),this.isQuoted(t)?this.quotedIdentifier(n):n.join(".")}generateSelectStatement(){let{table:t,resource:r}=this.query;if(!r||!r.fields||r.fields.length===0)return"*";let n=this.getTableName(t),i=this.table.schema;return r.fields.map(s=>{let u=s.split(/\./g),c,l=u[0];return u.length>1&&(c=u[0],l=u.slice(1).join(".")),{table:c,column:l,field:s}}).filter(({table:s})=>!s||s===n).map(({table:s,column:u,field:c})=>{let l=i[u];return this.SPECIAL_SELECT_CASES.POSTGRES_MONEY(l)?this.knex.raw("??::money::numeric as ??",[this.rawQuotedIdentifier([s,u].join(".")),this.knex.raw(this.quote(c))]):this.SPECIAL_SELECT_CASES.MSSQL_DATES(l)?this.knex.raw("CONVERT(varchar, ??, 108) as ??",[this.rawQuotedIdentifier(c),this.knex.raw(this.quote(c))]):s?this.rawQuotedIdentifier(`${s}.${u}`):this.rawQuotedIdentifier(c)})}convertClobs(t,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(t).pop(),o=this.table.schema[i],s=this.rawQuotedIdentifier(t);return(o.type==="string"||o.type==="longform"||o.type==="bb_reference_single"||o.type==="bb_reference"||o.type==="options"||o.type==="barcodeqr")&&(r?.forSelect?s=this.knex.raw("to_char(??) as ??",[s,this.rawQuotedIdentifier(i)]):s=this.knex.raw("to_char(??)",[s])),s}parse(t,r){if(Array.isArray(t))return JSON.stringify(t);if(t==null)return null;if(this.requiresJsonAsStringClient()&&KHe(r)&&typeof t=="object")return JSON.stringify(t);if(this.SPECIAL_SELECT_CASES.POSTGRES_ARRAY(r))return`{${t}}`;if(this.client==="oracledb"&&r.type==="datetime"&&r.timeOnly){if(t instanceof Date){let n=t.getHours().toString().padStart(2,"0"),i=t.getMinutes().toString().padStart(2,"0"),o=t.getSeconds().toString().padStart(2,"0");return`${n}:${i}:${o}`}if(typeof t=="string")return new Date(`1970-01-01T${t}Z`)}if(typeof t=="string"&&r.type==="datetime")if(r.timeOnly){if(!W5(t))return null}else if(r.dateOnly){let n=z5(t);return n?new Date(n):null}else return r.ignoreTimezones?E1(t)?new Date(t):$5(t)?new Date(t+"Z"):null:E1(t)?new Date(t.trim()):null;return t}parseBody(t){for(let[r,n]of Object.entries(t)){let{column:i}=this.splitter.run(r),o=this.table.schema[i];o&&(t[r]=this.parse(n,o))}return t}parseFilters(t){t=(0,GHe.cloneDeep)(t);for(let r of Object.values(Tm)){let n=t[r];if(n)for(let i of Object.keys(n)){if(Array.isArray(n[i])){n[i]=JSON.stringify(n[i]);continue}let{column:o}=this.splitter.run(i),s=this.table.schema[o];s&&(n[i]=this.parse(n[i],s))}}for(let r of Object.values(hl)){let n=t[r];if(n)for(let i of Object.keys(n)){let{column:o}=this.splitter.run(i),s=this.table.schema[o];s&&(n[i]=n[i].map(u=>this.parse(u,s)))}}for(let r of Object.values(qb)){let n=t[r];if(n)for(let i of Object.keys(n)){let{column:o}=this.splitter.run(i),s=this.table.schema[o];if(!s)continue;let u=n[i];"low"in u&&(u.low=this.parse(u.low,s)),"high"in u&&(u.high=this.parse(u.high,s))}}return t}addJoinFieldCheck(t,r){let n=r.from?.split(".")[0]||"";return t.andWhere(`${n}.fieldName`,"=",r.column)}addRelationshipForFilter(t,r,n,i){let{relationships:o,schema:s,tableAliases:u,table:c}=this.query,l=u?.[c.name]||c.name,f=a(p=>n.match(new RegExp(`^${p}\\.`)),"matches");if(!o)return t;for(let p of o){let d=p.tableName,h=u?.[d]||d,m=f(d)||f(h),g=f(p.column);if((m||g)&&p.to&&p.tableName){let y=this.knex.select(this.knex.raw(1)).from({[h]:d}),b=y.clone(),v=G5(p),w;if(m?w=n:w=n.replace(new RegExp(`^${p.column}.`),`${u?.[p.tableName]||p.tableName}.`),v){let x=u?.[v.through]||p.through,T=this.tableNameWithSchema(v.through,{alias:x,schema:s});b=b.innerJoin(T,function(){this.on(`${h}.${v.toPrimary}`,"=",`${x}.${v.to}`)}).where(`${x}.${v.from}`,"=",this.rawQuotedIdentifier(`${l}.${v.fromPrimary}`)),this.client==="sqlite3"&&(b=this.addJoinFieldCheck(b,v)),t=t.where(I=>{I.whereExists(i(w,b)),r&&I.orWhereNotExists(y.clone().innerJoin(T,function(){this.on(`${l}.${v.fromPrimary}`,"=",`${x}.${v.from}`)}))})}else{let x=`${h}.${p.to}`,T=`${l}.${p.from}`;b=b.where(x,"=",this.rawQuotedIdentifier(T)),t=t.where(I=>{I.whereExists(i(w,b.clone())),r&&I.orWhereNotExists(b)})}}}return t}addFilters(t,r,n){if(!r)return t;let i=this;r=this.parseFilters({...r});let o=this.query.tableAliases,s=r.allOr,c=this.client==="sqlite3"?this.table._id:this.table.name;function l(m){return o?.[m]||m}a(l,"getTableAlias");function f(m,g,y,b){let v=a((w,x,T)=>{let[I,...R]=x.split("."),C=R.join("."),k=l(I);return w.andWhere(F=>y(F,k?`${k}.${C}`:C,T))},"handleRelationship");for(let w in m){let x=m[w],T=Lx(w),I=T.includes("."),R=n?.relationship&&I,C;if(w==="_complexIdOperator"&&(C=m[w])&&b){let k=l(c);t=b(t,C.id.map(F=>k?`${k}.${F}`:F),C.values)}else if(I)R&&(s&&(t=t.or),t=i.addRelationshipForFilter(t,Ggr[g],T,(k,F)=>v(F,k,x)));else{let k=l(c);t=y(t,k?`${k}.${T}`:T,x)}}}a(f,"iterate");let p=a((m,g,y)=>((r?.fuzzyOr||s)&&(m=m.or),this.client==="oracledb"||this.client==="sqlite3"?m.whereRaw("LOWER(??) LIKE ?",[this.rawQuotedIdentifier(g),`%${y.toLowerCase()}%`]):m.whereILike(this.rawQuotedIdentifier(g),this.knex.raw("?",[`%${y}%`]))),"like"),d=a((m,g=!1)=>{function y(b){return(s||m===r?.containsAny)&&(b=b.or),m===r?.notContains&&(b=b.not),b}a(y,"addModifiers"),this.client==="pg"?f(m,"contains",(b,v,w)=>{b=y(b);let x=this.getFieldSchema(v),T="::jsonb";return this.SPECIAL_SELECT_CASES.POSTGRES_ARRAY(x)&&(T="",w=`{${w.map(R=>R.substring(1,R.length-1))}}`),g?b.whereRaw(T?"COALESCE(??::jsonb \\?| array??, FALSE)":"COALESCE(?? && '??', FALSE)",[this.rawQuotedIdentifier(v),T?this.knex.raw(OZ(w,"'")):this.knex.raw(w)]):b.whereRaw(`COALESCE(??${T} @> '??', FALSE)`,[this.rawQuotedIdentifier(v),T?this.knex.raw(OZ(w)):this.knex.raw(w)])}):this.client==="mysql2"||this.client==="mariadb"?f(m,"contains",(b,v,w)=>y(b).whereRaw("COALESCE(?(??, ?), FALSE)",[this.knex.raw(g?"JSON_OVERLAPS":"JSON_CONTAINS"),this.rawQuotedIdentifier(v),this.knex.raw(VHe(OZ(w)))])):f(m,"contains",(b,v,w)=>(w.length===0||(b=b.where(x=>(m===r?.notContains&&(x=x.not),x=x.where(T=>{for(let I of w){m===r?.containsAny?T=T.or:T=T.and;let R=typeof I=="string"?`"${I.toLowerCase()}"`:I;T=T.whereLike(this.knex.raw("COALESCE(LOWER(??), '')",[this.rawQuotedIdentifier(v)]),`%${R}%`)}}),m===r?.notContains&&(x=x.or.whereNull(this.rawQuotedIdentifier(v))),x))),b))},"contains");if(r.$and){let{$and:m}=r;for(let g of m.conditions)t=t.where(y=>{this.addFilters(y,g,n)})}if(r.$or){let{$or:m}=r;t=t.where(g=>{for(let y of m.conditions)g.orWhere(b=>this.addFilters(b,{...y,allOr:!0},n))})}r.oneOf&&f(r.oneOf,"oneOf",(m,g,y)=>{let b=this.getFieldSchema(g),v=Array.isArray(y)?y:[y];if(s&&(m=m.or),this.client==="oracledb")g=this.convertClobs(g);else if(this.client==="sqlite3"&&b?.type==="datetime"&&b.dateOnly){for(let w of v)w!=null?m=m.or.whereLike(g,`${w.toISOString().slice(0,10)}%`):m=m.or.whereNull(g);return m}return m.whereIn(g,v)},(m,g,y)=>(s&&(m=m.or),this.client==="oracledb"&&(g=g.map(b=>this.convertClobs(b))),m.whereIn(g,Array.isArray(y)?y:[y]))),r.string&&f(r.string,"string",(m,g,y)=>{if(s&&(m=m.or),this.client==="oracledb"||this.client==="sqlite3")return m.whereRaw("LOWER(??) LIKE ?",[this.rawQuotedIdentifier(g),`${y.toLowerCase()}%`]);{let b=this.getFieldSchema(g);return this.SPECIAL_SELECT_CASES.POSTGRES_ENUM(b)?m.whereRaw(`??::text ilike '${y}%'`,[this.knex.raw(this.quote(b.name))]):m.whereILike(g,`${y}%`)}}),r.fuzzy&&f(r.fuzzy,"fuzzy",p),r.range&&f(r.range,"range",(m,g,y)=>{let b=a(C=>C&&Object.keys(C).length===0&&Object.getPrototypeOf(C)===Object.prototype,"isEmptyObject");b(y.low)&&(y.low=""),b(y.high)&&(y.high="");let v=_1(y.low),w=_1(y.high),x=this.getFieldSchema(g),T=g,I=y.high,R=y.low;return this.client==="sqlite3"&&x?.type==="datetime"&&x.dateOnly&&(I!=null&&(I=`${I.toISOString().slice(0,10)}T23:59:59.999Z`),R!=null&&(R=R.toISOString().slice(0,10))),this.client==="oracledb"?T=this.convertClobs(g):this.client==="sqlite3"&&x?.type==="bigint"&&(T=this.knex.raw("CAST(?? AS INTEGER)",[this.rawQuotedIdentifier(g)]),I=this.knex.raw("CAST(? AS INTEGER)",[y.high]),R=this.knex.raw("CAST(? AS INTEGER)",[y.low])),s&&(m=m.or),v&&w?m.whereBetween(T,[R,I]):v?m.where(T,">=",R):w?m.where(T,"<=",I):m}),r.equal&&f(r.equal,"equal",(m,g,y)=>{let b=this.getFieldSchema(g);if(s&&(m=m.or),this.client==="mssql")return m.whereRaw("CASE WHEN ?? = ? THEN 1 ELSE 0 END = 1",[this.rawQuotedIdentifier(g),y]);if(this.client==="oracledb"){let v=this.convertClobs(g);return m.where(w=>w.whereNotNull(v).andWhere(v,y))}else return this.client==="sqlite3"&&b?.type==="datetime"&&b.dateOnly?y!=null?m.whereLike(g,`${y.toISOString().slice(0,10)}%`):m.whereNull(g):m.whereRaw("COALESCE(?? = ?, FALSE)",[this.rawQuotedIdentifier(g),y])}),r.notEqual&&f(r.notEqual,"notEqual",(m,g,y)=>{let b=this.getFieldSchema(g);if(s&&(m=m.or),this.client==="mssql")return m.whereRaw("CASE WHEN ?? = ? THEN 1 ELSE 0 END = 0",[this.rawQuotedIdentifier(g),y]);if(this.client==="oracledb"){let v=this.convertClobs(g);return m.where(w=>w.not.whereNull(v).and.where(v,"!=",y)).or.whereNull(v)}else return this.client==="sqlite3"&&b?.type==="datetime"&&b.dateOnly?y!=null?m.not.whereLike(g,`${y.toISOString().slice(0,10)}%`).or.whereNull(g):m.not.whereNull(g):m.whereRaw("COALESCE(?? != ?, TRUE)",[this.rawQuotedIdentifier(g),y])}),r.empty&&f(r.empty,"empty",(m,g)=>(s&&(m=m.or),m.whereNull(g))),r.notEmpty&&f(r.notEmpty,"notEmpty",(m,g)=>(s&&(m=m.or),m.whereNotNull(g))),r.contains&&d(r.contains),r.notContains&&d(r.notContains),r.containsAny&&d(r.containsAny,!0);let h=o?.[this.table._id]||this.table._id;return r.documentType&&!B5(this.table)&&h&&t.andWhereLike(`${h}._id`,`${eo(r.documentType)}%`),t}isSqs(){return $He(this.table)}getTableName(t){t||(t=this.table);let r=t.name;$He(t)&&t._id&&(r=t._id);let n=this.query.tableAliases||{};return n[r]?n[r]:r}addDistinctCount(t){if(!this.table.primary)throw new Error("SQL counting requires primary key to be supplied");return t.countDistinct(`${this.getTableName()}.${this.table.primary[0]} as ${CZ}`)}addAggregations(t,r){let n=this.query.resource?.fields||[],i=this.getTableName();if(n.length>0){let o=n.map(s=>this.qualifyIdentifier(s));if(this.client==="oracledb"){let s=o.map(c=>this.convertClobs(c)),u=o.map(c=>this.convertClobs(c,{forSelect:!0}));t=t.groupBy(s).select(u)}else t=t.groupBy(o).select(o)}for(let o of r){let s=o.calculationType;if(s==="count")if("distinct"in o&&o.distinct)if(this.client==="oracledb"){let u=this.convertClobs(`${i}.${o.field}`);t=t.select(this.knex.raw("COUNT(DISTINCT ??) as ??",[u,o.name]))}else t=t.countDistinct(`${i}.${o.field} as ${o.name}`);else if(this.client==="oracledb"){let u=this.convertClobs(`${i}.${o.field}`);t=t.select(this.knex.raw("COUNT(??) as ??",[u,o.name]))}else t=t.count(`${o.field} as ${o.name}`);else{let u=this.getFieldSchema(o.field);if(!u)throw new Error(`field schema missing for aggregation target: ${o.field}`);let c=this.knex.raw("??(??)",[this.knex.raw(s),this.rawQuotedIdentifier(`${i}.${o.field}`)]);u.type==="bigint"&&(c=this.castIntToString(c)),t=t.select(this.knex.raw("?? as ??",[c,o.name]))}}return t}isAggregateField(t){return!!this.query.resource?.aggregations?.find(n=>n.name===t)}addSorting(t){let{sort:r,resource:n}=this.query,i=this.table.primary,o=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[u,c]of Object.entries(r)){let l=this.getFieldSchema(u);if(this.isUnsortableField(l))continue;let f=c.direction==="ascending"?"asc":"desc",p;(this.client==="pg"||this.client==="oracledb")&&(p=c.direction==="ascending"?"first":"last");let d=`${o}.${u}`,h;this.isAggregateField(u)?h=this.rawQuotedIdentifier(u):this.client==="oracledb"?h=this.convertClobs(d):h=this.rawQuotedIdentifier(d),t=t.orderByRaw(`?? ?? ${p?"nulls ??":""}`,[h,this.knex.raw(f),...p?[this.knex.raw(p)]:[]])}if(!((n?.aggregations?.length??0)>0)){let u=this.findSortablePrimaryKey(i);if(u&&(!r||r[u]===void 0))t=t.orderBy(`${o}.${u}`);else if(!u&&(!r||Object.keys(r).length===0))throw new Error(`Primary key not found for table ${this.table.name}`)}return t}isUnsortableField(t){return t?.type==="json"}findSortablePrimaryKey(t){return t.find(r=>{if(r==null)return!1;let n=this.getFieldSchema(r);return!this.isUnsortableField(n)})}tableNameWithSchema(t,r){let n=r?.schema?`${r.schema}.${t}`:t;return r?.alias&&(n+=` as ${r.alias}`),n}buildJsonField(t,r){let n=r.split("."),i=n[n.length-1],o,s;if(n.length>1){let l=n.shift();o=n.join("."),s=`${l}.${o}`}else o=n.join("."),s=o;this.query.meta?.columnPrefix&&(i=i.replace(this.query.meta.columnPrefix,""));let u=this.rawQuotedIdentifier(s),c=t.schema[i];return c&&c.type==="bigint"&&(u=this.castIntToString(u)),[o,u]}maxFunctionParameters(){switch(this.client){case"sqlite3":return 127;case"pg":return 100;default:return 200}}addJsonRelationships(t,r,n){let i=this.client,o=this.knex,{resource:s,tableAliases:u,schema:c,tables:l}=this.query,f=s?.fields||[];for(let p of n){let{tableName:d,through:h,to:m,from:g,fromPrimary:y,toPrimary:b}=p;if(!d||!r)continue;let v=l[d];if(!v)throw new Error(`related table "${d}" not found in datasource`);let w=u?.[d]||d,x=u?.[r]||r,T=h&&u?.[h]||h,I=this.tableNameWithSchema(d,{alias:w,schema:c}),R=[...v?.primary||[],v?.primaryDisplay].filter(ae=>ae),C=zgr(f.filter(ae=>ae.split(".")[0]===w),R);C=C.slice(0,Math.floor(this.maxFunctionParameters()/2));let k=C.map(ae=>this.buildJsonField(v,ae));if(!k.length)continue;let F=k.map(ae=>{let Q=this.client==="oracledb"?" VALUE ":",";return this.knex.raw(`?${Q}??`,[ae[0],ae[1]]).toString()}).join(","),M=`${w}.${b||m}`,V=o.from(I).orderBy(M),L=h&&b&&y,Y=L?`${T}.${g}`:`${w}.${m}`,B=L?`${x}.${y}`:`${x}.${g}`;if(L){let ae=this.tableNameWithSchema(h,{alias:T,schema:c});V=V.join(ae,function(){this.on(`${w}.${b}`,"=",`${T}.${m}`)})}V=V.where(this.rawQuotedIdentifier(Y),"=",this.rawQuotedIdentifier(B));let G=a(ae=>(V=V.select(C.map(Q=>this.rawQuotedIdentifier(Q))).limit(RZ()),o.select(ae).from({[w]:V})),"standardWrap"),Z;switch(i){case"sqlite3":V=this.addJoinFieldCheck(V,p),Z=G(this.knex.raw(`json_group_array(json_object(${F}))`));break;case"pg":Z=G(this.knex.raw(`json_agg(json_build_object(${F}))`));break;case"mariadb":Z=V.select(o.raw(`json_arrayagg(json_object(${F}) LIMIT ${RZ()})`));break;case"mysql2":case"oracledb":Z=G(this.knex.raw(`json_arrayagg(json_object(${F}))`));break;case"mssql":{let ae=o.select("*").from({[x]:V.select(k.map(Q=>o.ref(Q[1]).as(Q[0]))).limit(RZ())});Z=o.raw(`(SELECT ?? = (${ae} FOR JSON PATH))`,[this.rawQuotedIdentifier(w)]);break}default:throw new Error(`JSON relationships not implement for ${i}`)}t=t.select({[p.column]:Z})}return t}addJoin(t,r,n){let{tableAliases:i,schema:o}=this.query,s=r.to,u=r.from,c=r.through,l=i?.[s]||s,f=c&&i?.[c]||c,p=i?.[u]||u,d=this.tableNameWithSchema(s,{alias:l,schema:o}),h=c?this.tableNameWithSchema(c,{alias:f,schema:o}):void 0;return c?t=t.leftJoin(h,function(){for(let m of n){let g=m.fromPrimary,y=m.from;this.orOn(`${p}.${g}`,"=",`${f}.${y}`)}}).leftJoin(d,function(){for(let m of n){let g=m.toPrimary,y=m.to;this.orOn(`${l}.${g}`,`${f}.${y}`)}}):t=t.leftJoin(d,function(){for(let m of n){let g=m.from,y=m.to;this.orOn(`${p}.${g}`,"=",`${l}.${y}`)}}),t}qualifiedKnex(t){let r=this.query.tableAliases?.[this.query.table.name];return t?.alias===!1?r=void 0:typeof t?.alias=="string"&&(r=t.alias),this.knex(this.tableNameWithSchema(this.query.table.name,{alias:r,schema:this.query.schema}))}create(t){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[o,s]of Object.entries(this.query.table.schema)){if(s.constraints?.presence===!0||s.type==="formula"||s.type==="auto"||s.type==="link"||s.type==="ai")continue;i[o]==null&&(i[o]=null)}else for(let[o,s]of Object.entries(i))s==null&&delete i[o];return t.disableReturning?n.insert(i):n.insert(i).returning("*")}bulkCreate(){let{body:t}=this.query,r=this.qualifiedKnex({alias:!1});if(!Array.isArray(t))return r;let n=t.map(i=>this.parseBody(i));return r.insert(n)}bulkUpsert(){let{body:t}=this.query,r=this.qualifiedKnex({alias:!1});if(!Array.isArray(t))return r;let n=t.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(t={}){let{operation:r,filters:n,paginate:i,relationships:o,table:s}=this.query,{limits:u}=t,c=this.qualifiedKnex(),l=null,f=u?.query||u?.base;if(i&&i.page&&i.limit){let h=(i.page<=1?0:i.page-1)*i.limit;f=i.limit,l=h}else i&&i.offset&&i.limit?(f=i.limit,l=i.offset):i&&i.limit&&(f=i.limit);r!=="COUNT"&&(f!=null&&(c=c.limit(f)),l!=null&&(c=c.offset(l)));let p=this.query.resource?.aggregations||[];if(r==="COUNT"?c=this.addDistinctCount(c):p.length>0?c=this.addAggregations(c,p):c=c.select(this.generateSelectStatement()),r!=="COUNT"&&(c=this.addSorting(c)),c=this.addFilters(c,n,{relationship:!0}),o?.length&&p.length===0){let d=this.query.tableAliases?.[s.name]||s.name,h=this.addSorting(this.knex.with("paginated",c.clone().clearSelect().select("*")).select(this.generateSelectStatement()).from({[d]:"paginated"}));return this.addJsonRelationships(h,s.name,o)}return c}update(t){let{body:r,filters:n}=this.query;if(!r)throw new Error("Cannot update without row body");let i=this.qualifiedKnex(),o=this.parseBody(r);return i=this.addFilters(i,n),t.disableReturning?i.update(o):i.update(o).returning("*")}delete(t){let{filters:r}=this.query,n=this.qualifiedKnex();return n=this.addFilters(n,r),t.disableReturning?n.delete():n.delete().returning(this.generateSelectStatement())}},kZ=class extends QU{constructor(r,n=qHe()){super(r);this.limit=n}static{a(this,"SqlQueryBuilder")}convertToNative(r,n={}){let i=this.getSqlClient();if(n?.disableBindings)return{sql:r.toString()};{let o=Vv(r);return i==="sqlite3"&&(o=HHe(o)),o}}_query(r,n={}){let i=this.getSqlClient(),o={client:this.getBaseSqlClient()};(i==="sqlite3"||i==="oracledb")&&(o.useNullAsDefault=!0);let s=(0,WHe.knex)(o),u,c=new IZ(i,s,r);switch(this._operation(r)){case"CREATE":u=c.create(n);break;case"READ":u=c.read({limits:{query:this.limit,base:qHe()}});break;case"COUNT":u=c.read();break;case"UPDATE":u=c.update(n);break;case"DELETE":u=c.delete(n);break;case"BULK_CREATE":u=c.bulkCreate();break;case"BULK_UPSERT":u=c.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(u,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=o=>o){let o=this.getSqlClient(),s=this._operation(r),u=this._query(r,{disableReturning:!0});if(Array.isArray(u)){let p=[];for(let d of u)p.push(await n(d,s));return p}let c;s==="DELETE"&&(c=i(await this.getReturningRow(n,r)));let l=await n(u,s),f=i(l);if(s==="CREATE"||s==="UPDATE"){let p;o==="mssql"?p=f?.[0].id:(o==="mysql2"||o==="mariadb")&&(p=f?.insertId),c=i(await this.getReturningRow(n,this.checkLookupKeys(p,r)))}return s==="COUNT"?f:s!=="READ"?c:f.length?f:[{[s.toLowerCase()]:!0}]}getTableName(r,n){let i=r.name;if(r.sourceType==="internal"||r.sourceId===to){if(!r._id)return;i=r._id}return n?.[i]||i}convertJsonStringColumns(r,n,i){let o=this.getTableName(r,i);for(let[s,u]of Object.entries(r.schema)){if(!KHe(u))continue;let c=`${o}.${s}`;for(let l of n)typeof l[c]=="string"&&(l[c]=JSON.parse(l[c])),typeof l[s]=="string"&&(l[s]=JSON.parse(l[s]))}return n}log(r,n){yx(this.getSqlClient(),r,n)}},QHe=kZ;var DZ={};oe(DZ,{base:()=>Hgr});function Hgr(e){return{_id:La,language:"sqlite",sql:{tables:{},options:{table_name:e}}}}a(Hgr,"base");var YR={};oe(YR,{jsonFromCsvString:()=>Vgr});var YHe=ne(require("csvtojson"));async function Vgr(e,t){let{ignoreEmpty:r=!1,allowSingleColumn:n=!1,possibleDelimiters:i=[",",";",":","|","~"," "," "]}=t||{};for(let o of i){let s,u=!1;try{let c=await(0,YHe.default)({ignoreEmpty:r,delimiter:o}).fromString(e);for(let[,l]of c.entries()){let f=Object.keys(l);if(s==null&&(s=f),!n&&f.length===1){u=!0;break}if(s.length!==f.length){u=!0;break}for(let p of s)(l[p]===void 0||l[p]==="")&&(l[p]=null)}if(u)continue;return c}catch{continue}}throw new Error("Unable to determine delimiter")}a(Vgr,"jsonFromCsvString");var Qgr=ne(require("@koa/router"));var yt={...Ux,...$},JHe=a((e={})=>{v1(e.db)},"init");var wb={};oe(wb,{ai:()=>wee,auditLogs:()=>bb,automations:()=>h_,backups:()=>iu,branding:()=>bee,environmentVariables:()=>ol,features:()=>gs,groups:()=>on,init:()=>Dxr,licensing:()=>em,logger:()=>P_,plugins:()=>Mee,publicApi:()=>Ure,quotas:()=>jn,scimGroups:()=>oI,scimUsers:()=>au,users:()=>kee,utils:()=>SO});var bee={};oe(bee,{getBrandingConfig:()=>_br});var gs={};oe(gs,{checkBackups:()=>Go,checkFeature:()=>gM,checkFeatures:()=>pee,checkSCIM:()=>yee,isAppBuildersEnabled:()=>mee,isAuditLogsEnabled:()=>yM,isBackupsEnabled:()=>dee,isBrandingEnabled:()=>hee,isEnforceableSSO:()=>YVe,isExpandedPublicApiEnabled:()=>Wp,isPWAEnabled:()=>mbr,isPkceOidcEnabled:()=>ybr,isRecaptchaEnabled:()=>gbr,isSSOEnforced:()=>bbr,isSyncAutomationsEnabled:()=>dbr,isTriggerAutomationRunEnabled:()=>hbr,isUserGroupsEnabled:()=>gee,isViewPermissionEnabled:()=>vbr,isViewReadonlyColumnsEnabled:()=>wbr});var em={};oe(em,{cache:()=>al,client:()=>rm,features:()=>fM,getFreeLicense:()=>cee,getLicense:()=>uee,getLicenseFromKey:()=>GVe,keys:()=>fee,offline:()=>dM,quotas:()=>pM});var al={};oe(al,{getCachedLicense:()=>KVe,invalidate:()=>QVe,refresh:()=>Jy});var JR,Xgr=a(async()=>{JR=await oo.init($p.utils.Databases.LICENSES)},"init"),Zgr=a(async()=>{JR&&await JR.finish()},"shutdown");process.on("exit",async()=>{await Zgr()});var PZ=a(async()=>(JR||await Xgr(),JR),"getClient");var rm={};oe(rm,{activateLicenseKey:()=>eee,getLicense:()=>c_,getLicenseFromKey:()=>ZZ,triggerQuota:()=>Gyr});var XHe=ne(require("node-fetch"));var NZ=require("dd-trace"),ZHe=require("dd-trace/ext/formats");var LZ=class{constructor(t){this.apiCall=t=>async(r="",n={})=>await NZ.tracer.trace(`api.${t}`,async i=>{i.setTag("url",r);let o={...n.headers};o["Content-Type"]||(o["Content-Type"]="application/json",o.Accept="application/json");let s=o["Content-Type"]==="application/json";kt.correlation.setHeader(o),NZ.tracer.inject(i,ZHe.HTTP_HEADERS,o);let u={method:t,body:s?JSON.stringify(n.body):n.body,headers:o,credentials:"include"};return(0,XHe.default)(`${this.host}${r}`,u)});this.post=this.apiCall("POST");this.get=this.apiCall("GET");this.patch=this.apiCall("PATCH");this.del=this.apiCall("DELETE");this.put=this.apiCall("PUT");this.host=t}static{a(this,"API")}},FZ=LZ;var{getProxyDispatcher:tyr}=gr;async function YU(e,t,r){let n=tyr({rejectUnauthorized:r?.rejectUnauthorized});return n?(console.log("[proxyFetch] Using proxy for request",{url:typeof e=="string"?e:e instanceof URL?e.href:e.url,hasDispatcher:!0,rejectUnauthorized:r?.rejectUnauthorized}),fetch(e,{...t,dispatcher:n})):(console.log("[proxyFetch] No proxy configured, using direct fetch",{url:typeof e=="string"?e:e instanceof URL?e.href:e.url}),fetch(e,t))}a(YU,"proxyFetch");var il={};oe(il,{bustCache:()=>jZ,getCurrentUsageValues:()=>sVe,getQuotaUsage:()=>Qy,setAllUsage:()=>qZ,setAppUsageValue:()=>BZ,setUsage:()=>iVe,setUsagePerApp:()=>aVe,utils:()=>eO});var eO={};oe(eO,{generateBaseQuotaUsage:()=>XU,generateNewMonthlyQuotas:()=>ZR,generateNewQuotaUsage:()=>MZ,getBreakdownName:()=>eM,getCurrentMonthString:()=>Xh,getQuotaDocId:()=>XR,setCurrentMonth:()=>ZU,setQuotaReset:()=>UZ});var XR=a(()=>$.isSelfHostUsingCloud()?`quota_usage_${$.getTenantId()}`:ie.StaticDatabases.GLOBAL.docs.usageQuota,"getQuotaDocId"),eVe=a(()=>{let e=new Date;return new Date(e.getFullYear(),e.getMonth()+1,1).toISOString()},"getNextQuotaReset"),UZ=a(e=>{e.quotaReset=eVe()},"setQuotaReset"),Xh=a(()=>{let e=new Date,t=e.getMonth()+1,r=e.getFullYear();return`${t}-${r}`},"getCurrentMonthString"),XU=a(()=>({usageQuota:{apps:0,rows:0,plugins:0,users:0,creators:0,userGroups:0,aiCustomConfigs:0,triggers:{}},monthly:{[Xh()]:ZR()}}),"generateBaseQuotaUsage"),MZ=a(()=>{let e={_id:XR(),quotaReset:eVe(),...XU(),apps:{}};return ZU(e),e},"generateNewQuotaUsage"),ZR=a(()=>({queries:0,automations:0,budibaseAICredits:0,actions:0,triggers:{}}),"generateNewMonthlyQuotas"),ZU=a(e=>{let t=Xh();e.monthly||(e.monthly={}),e.monthly[t]||(e.monthly[t]=ZR()),e.monthly.current=e.monthly[t]},"setCurrentMonth"),eM=a((e,t)=>{if(!(!t||!e))switch(e){case"automations":return"automations";case"queries":return gc(t)?"rowQueries":cv(t)?"datasourceQueries":void 0}},"getBreakdownName");var tVe=gi.fromSeconds(60).toMs(),{Writethrough:rVe}=$t.writethrough;function ryr(e){return delete e.usageLimits,delete e.usageQuota.automationRuns,delete e.usageQuota.emails,delete e.usageQuota.storage,delete e.usageQuota.views,delete e.usageQuota.publishedApps,delete e.usageQuota.developers,e}a(ryr,"clearDeprecated");var tM=a(()=>yt.isSelfHostUsingCloud()?new rVe(yt.getSelfHostCloudDB(),tVe):new rVe(yt.getGlobalDB(),tVe),"getDB");async function jZ(e=0){let r=tM(),n=XR(),i=await r.tryGet(n);i&&i._rev&&await r.remove(n,i._rev).catch(async o=>{if(e<1)return await jZ(e+1);throw o})}a(jZ,"bustCache");var Qy=a(async()=>{let e=tM(),t=await e.tryGet(XR());if(!t){t=MZ();let{rev:r}=await e.put(t);t._rev=r}return ZU(t),UZ(t),ryr(t)},"getQuotaUsage"),iVe=a(async(e,t,r)=>qZ({name:t,type:r,values:{total:e}}),"setUsage"),aVe=a(async(e,t,r)=>{let n=tM(),i=await Qy(),o=Object.values(e).reduce((u,c)=>u+c,0);for(let[u,c]of Object.entries(e))i=oVe(i,t,r,{total:o,app:c},{appId:u});let s=await n.put(i);return i._rev=s.rev,i},"setUsagePerApp"),nyr=a((e,t,r,n)=>{let i=eM(t,r);if(!i||!n?.breakdown)return e;e.breakdown||(e.breakdown={}),e.breakdown[i]||(e.breakdown[i]={parent:t,values:{}});let o=e.breakdown[i];return o.values[r]=n.breakdown,e},"setBreakdown"),BZ=a((e,t,r,n={},i)=>{let o;try{o=ie.getProdWorkspaceID(n?.appId||$.getWorkspaceId())}catch{}if(!o||!i.app||!zb.includes(t))return e;e.apps?.[o]||(e.apps={...e.apps,[o]:XU()});let s=e.apps[o];switch(r){case"static":s.usageQuota[t]=i.app;break;case"monthly":{let u=Xh(),c=t,l=s.monthly[u];l||(s.monthly[u]=ZR(),l=s.monthly[u]),l[c]=i.app,Tse.includes(c)&&n?.id&&(l=nyr(l,c,n.id,i));break}}return e},"setAppUsageValue"),nVe=a((e,t,r,n)=>{if(!zb.includes(r))return{};let i;try{i=ie.getProdWorkspaceID($.getWorkspaceId())}catch{}if(!i||!e.apps||!e.apps[i])return{app:0};let o=e.apps[i];switch(t){case"static":if(o.usageQuota?.[r])return{app:o.usageQuota[r]};break;case"monthly":{let s=Xh(),u=r;if(!o.monthly?.[s]?.[u])break;let c=o.monthly[s],l=c[u],f,p=eM(u,n);return p&&n&&c.breakdown?.[p]&&(f=c.breakdown[p]?.values[n]),{app:l,breakdown:f||0}}}return{app:0}},"getAppUsageValue"),iyr=a((e,t,r)=>{t.usageQuota.triggers||(t.usageQuota.triggers={}),r&&(t.usageQuota.triggers[e]=r)},"setStaticTriggers"),ayr=a((e,t,r,n)=>{r.monthly[t].triggers||(r.monthly[t].triggers={}),n&&(r.monthly[t].triggers[e]=n)},"setMonthlyTriggers"),oVe=a((e,t,r,n,i={})=>{if(r==="static")t=t,e.usageQuota[t]=n.total,iyr(t,e,n.triggers);else if(r==="monthly"){t=t;let o=Xh();e.monthly[o][t]=n.total,ayr(t,o,e,n.triggers)}else throw new Error(`Invalid usage type: ${r}`);return BZ(e,t,r,i,n)},"coreUsageUpdate"),qZ=a(async e=>{let t=Array.isArray(e)?e:[e],r=tM(),n=await Qy();for(let o of t)n=oVe(n,o.name,o.type,o.values,o.opts);let i=await r.put(n,0);return n._rev=i.rev,n},"setAllUsage"),sVe=a(async(e,t,r)=>{let n=await Qy(),i=0,o={};switch(e){case"static":if(n.usageQuota[t]){let s=t;i=n.usageQuota[s],o=nVe(n,e,t,r)}break;case"monthly":{let s=Xh(),u=t;n.monthly[s][u]&&(i=n.monthly[s][u],o=nVe(n,e,t,r));break}default:throw new Error(`Invalid usage type: ${e}`)}return zb.includes(t)&&!(o.app||o.breakdown)&&(o.app=o.app||0,o.breakdown=o.breakdown||0),{total:i,app:o.app,breakdown:o.breakdown}},"getCurrentUsageValues");var Hu={};oe(Hu,{destroy:()=>uyr,get:()=>$Z,save:()=>syr});var oyr=a(()=>({_id:vn.GLOBAL.docs.licenseInfo}),"newLicenseInfo"),syr=a(async e=>{let t=await $Z();t={...t,...e};let n=await yt.getGlobalDB().put(t);return t._rev=n.rev,t},"save"),$Z=a(async()=>{let e=yt.getGlobalDB();try{return await e.get(vn.GLOBAL.docs.licenseInfo)}catch(t){if(t.status===404)return oyr();throw t}},"get"),uyr=a(async()=>{let e=yt.getGlobalDB(),t=await $Z();t&&t._rev&&await e.remove(vn.GLOBAL.docs.licenseInfo,t._rev)},"destroy");var ei={};oe(ei,{bulkSave:()=>Eyr,destroy:()=>_yr,fetch:()=>yyr,generateUserGroupID:()=>myr,get:()=>byr,getBulk:()=>vyr,getByName:()=>zZ,getGroupUsers:()=>rM,getGroupUsersParams:()=>pVe,getUserGroupsParams:()=>fVe,save:()=>wyr});async function uVe(){let e=Vt.designDoc.base("type");e.sql.tables={[Am]:{fields:{appId:"VARCHAR",event:"VARCHAR",userId:"VARCHAR",timestamp:"VARCHAR",metadata:"VARCHAR",name:"VARCHAR",type:"VARCHAR",fallback:"VARCHAR"}}};let t=$.getAuditLogsDB(),r;try{r=await t.get(La),r={...r,...e}}catch(n){if(n.status===404)r=e;else throw n}await t.put(r)}a(uVe,"createAuditLogDesignDocSQL");var{ViewName:lyr,SEPARATOR:fyr,DocumentType:pyr,createView:dyr}=ie,hyr=pyr.USER+fyr;async function cVe(){let e=yt.getGlobalDB(),t=`function(doc) {
|
|
537
537
|
if (doc._id.startsWith("${hyr}") && Array.isArray(doc.userGroups)) {
|
|
538
538
|
for (let groupId of doc.userGroups) {
|