@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.
Files changed (114) hide show
  1. package/builder/assets/{easymde-feeed539.js → easymde-7cbafe1c.js} +1 -1
  2. package/builder/assets/{index-6cb6f85b.js → index-529b858b.js} +4 -4
  3. package/builder/index.html +1 -1
  4. package/client/budibase-client.js +1 -1
  5. package/client/chunks/{Accordion-9bf43ef5.js → Accordion-a5c23a04.js} +1 -1
  6. package/client/chunks/{ApexChart-5c32b7d6.js → ApexChart-5aaa9925.js} +2 -2
  7. package/client/chunks/{AreaChart-8116b80e.js → AreaChart-1c5e1a0c.js} +2 -2
  8. package/client/chunks/{AttachmentField-c0e27381.js → AttachmentField-7c5a53ef.js} +4 -4
  9. package/client/chunks/{AttachmentSingleField-a9c2dcf2.js → AttachmentSingleField-47e5398b.js} +5 -5
  10. package/client/chunks/{BBReferenceField-a7ccc0f1.js → BBReferenceField-d6c4dcc9.js} +7 -7
  11. package/client/chunks/{BBReferenceSingleField-664ccc23.js → BBReferenceSingleField-a12a4254.js} +8 -8
  12. package/client/chunks/{BackgroundImage-2772a812.js → BackgroundImage-a018a954.js} +1 -1
  13. package/client/chunks/{BarChart-a048e0ef.js → BarChart-c6a6b367.js} +2 -2
  14. package/client/chunks/{BigIntField-0904b91e.js → BigIntField-32d58b3f.js} +5 -5
  15. package/client/chunks/{BooleanField-a0ee7601.js → BooleanField-356f4cfd.js} +4 -4
  16. package/client/chunks/{Button-fa5ca8c2.js → Button-94652f83.js} +1 -1
  17. package/client/chunks/{ButtonGroup-06c930f0.js → ButtonGroup-78022b67.js} +3 -3
  18. package/client/chunks/{CandleStickChart-9b729f9c.js → CandleStickChart-3e44725c.js} +2 -2
  19. package/client/chunks/{Card-91f045ca.js → Card-27534fe2.js} +1 -1
  20. package/client/chunks/{CardHorizontal-20f3753d.js → CardHorizontal-308696db.js} +1 -1
  21. package/client/chunks/{CardStat-c3d8a440.js → CardStat-420b2fba.js} +1 -1
  22. package/client/chunks/{CardsBlock-6870ce30.js → CardsBlock-2aec8fb1.js} +2 -2
  23. package/client/chunks/{ChartBlock-47ea0b3f.js → ChartBlock-7629ed93.js} +1 -1
  24. package/client/chunks/{Chatbox-9d370f71.js → Chatbox-eaf12b79.js} +2 -2
  25. package/client/chunks/{CheckboxGroup-02d3cba5.js → CheckboxGroup-108d3b0a.js} +1 -1
  26. package/client/chunks/{CodeGenerator-b01b4bcd.js → CodeGenerator-6c34d52e.js} +1 -1
  27. package/client/chunks/{CodeScannerField-2eec8b57.js → CodeScannerField-94bb5a35.js} +6 -6
  28. package/client/chunks/{CollapsedButtonGroup-e910dd6d.js → CollapsedButtonGroup-c3d445d2.js} +2 -2
  29. package/client/chunks/{Container-bafe727b.js → Container-eb990d30.js} +1 -1
  30. package/client/chunks/{DataProvider-a675fba3.js → DataProvider-c9c02169.js} +1 -1
  31. package/client/chunks/{DatePicker-379cb448.js → DatePicker-6fec9151.js} +1 -1
  32. package/client/chunks/{DatePicker-e1681c3f.js → DatePicker-9b9dde4a.js} +2 -2
  33. package/client/chunks/{DateRangePicker-4a08714a.js → DateRangePicker-7592f5df.js} +2 -2
  34. package/client/chunks/{DateTimeField-56bc2971.js → DateTimeField-f6fb7081.js} +5 -5
  35. package/client/chunks/{Divider-5c07c3e9.js → Divider-ba4510af.js} +1 -1
  36. package/client/chunks/{DonutChart-0bf6ea65.js → DonutChart-dd94ab87.js} +2 -2
  37. package/client/chunks/{DynamicFilter-6576a6a8.js → DynamicFilter-046fc100.js} +5 -5
  38. package/client/chunks/{Embed-99af1400.js → Embed-456140e6.js} +2 -2
  39. package/client/chunks/{EmbeddedMap-39f193ee.js → EmbeddedMap-f354ae15.js} +2 -2
  40. package/client/chunks/{Field-218ad62a.js → Field-31480c33.js} +3 -3
  41. package/client/chunks/{FieldGroup-2d5abdf5.js → FieldGroup-d3fae781.js} +3 -3
  42. package/client/chunks/{Filter-a67e0b8b.js → Filter-93f98fc3.js} +14 -14
  43. package/client/chunks/{Form-94c45672.js → Form-527e38be.js} +2 -2
  44. package/client/chunks/{FormBlock-b1f24b53.js → FormBlock-1fa932cf.js} +3 -3
  45. package/client/chunks/{FormBlockComponent-6675ef53.js → FormBlockComponent-4d489d65.js} +1 -1
  46. package/client/chunks/{FormStep-e440653c.js → FormStep-778be960.js} +2 -2
  47. package/client/chunks/{GridBlock-fc0a59ba.js → GridBlock-31543699.js} +5 -5
  48. package/client/chunks/{Heading-8540408f.js → Heading-d94bfe34.js} +1 -1
  49. package/client/chunks/{HistogramChart-497a35ef.js → HistogramChart-364e12d1.js} +2 -2
  50. package/client/chunks/{Icon-ff2eb4c9.js → Icon-690e8221.js} +2 -2
  51. package/client/chunks/{IconV2-2e218e2b.js → IconV2-c23cdc54.js} +2 -2
  52. package/client/chunks/{Image-af6a4199.js → Image-e83d4a6c.js} +2 -2
  53. package/client/chunks/{InnerForm-43f01bff.js → InnerForm-73669612.js} +1 -1
  54. package/client/chunks/{Item-7bc624af.js → Item-180361f1.js} +1 -1
  55. package/client/chunks/{JSONField-6734e1a2.js → JSONField-9b64049c.js} +5 -5
  56. package/client/chunks/{Layout-474a44de.js → Layout-2f70d9af.js} +4 -4
  57. package/client/chunks/{LineChart-27fba06b.js → LineChart-fc45552a.js} +2 -2
  58. package/client/chunks/{Link-1d19b57e.js → Link-323a1ce0.js} +1 -1
  59. package/client/chunks/{LongFormField-d731a8bd.js → LongFormField-f7c7960b.js} +6 -6
  60. package/client/chunks/{MarkdownViewer-3c39ccc2.js → MarkdownViewer-598dc87b.js} +3 -3
  61. package/client/chunks/{MarkdownViewer-4cc65383.js → MarkdownViewer-8c9ce44f.js} +1 -1
  62. package/client/chunks/Modal-024bd3c7.js +236 -0
  63. package/client/chunks/{MultiFieldSelect-c420c15a.js → MultiFieldSelect-47b5b649.js} +6 -6
  64. package/client/chunks/{MultiStepFormblock-fa778db0.js → MultiStepFormblock-4b1e958d.js} +2 -2
  65. package/client/chunks/{Multiselect-681e492b.js → Multiselect-a1599e17.js} +1 -1
  66. package/client/chunks/{Navigation-167b5cc7.js → Navigation-3a0c39c3.js} +1 -1
  67. package/client/chunks/{NumberField-1c1de9f6.js → NumberField-be28a613.js} +5 -5
  68. package/client/chunks/{OptionsField-734cacf0.js → OptionsField-a5422369.js} +5 -5
  69. package/client/chunks/{PDF-6b73490a.js → PDF-f35ff9d9.js} +1 -1
  70. package/client/chunks/{PDFTable-d93f6a1b.js → PDFTable-6f67b76f.js} +1 -1
  71. package/client/chunks/{PasswordField-34d94b2e.js → PasswordField-92d2543d.js} +5 -5
  72. package/client/chunks/{PieChart-284d335a.js → PieChart-3bf1da2e.js} +2 -2
  73. package/client/chunks/{Placeholder-26f62a15.js → Placeholder-69195628.js} +1 -1
  74. package/client/chunks/{RadioGroup-ffd210dc.js → RadioGroup-cec83c5b.js} +1 -1
  75. package/client/chunks/{RatingField-72fb03d1.js → RatingField-fc75e8b3.js} +4 -4
  76. package/client/chunks/{RelationshipField-b5bf2788.js → RelationshipField-cc03a2f4.js} +5 -5
  77. package/client/chunks/{Repeater-54fb8b53.js → Repeater-2f9ce3a9.js} +3 -3
  78. package/client/chunks/{RepeaterBlock-1548af56.js → RepeaterBlock-d7eb75fe.js} +2 -2
  79. package/client/chunks/{RowExplorer-333a7c50.js → RowExplorer-d2a074ef.js} +1 -1
  80. package/client/chunks/{S3Upload-950614d0.js → S3Upload-d6965727.js} +4 -4
  81. package/client/chunks/{ScreenSlot-0fd382b7.js → ScreenSlot-6e148eba.js} +1 -1
  82. package/client/chunks/{Section-934a97f6.js → Section-cdc4b72a.js} +2 -2
  83. package/client/chunks/{SidePanel-d5a1048d.js → SidePanel-0820f026.js} +1 -1
  84. package/client/chunks/{SignatureField-65a95a58.js → SignatureField-1e06c47d.js} +4 -4
  85. package/client/chunks/{SingleRowProvider-b14a3289.js → SingleRowProvider-3dd44159.js} +1 -1
  86. package/client/chunks/{SpectrumCard-44d14022.js → SpectrumCard-13324f63.js} +1 -1
  87. package/client/chunks/{StackedList-f8c89837.js → StackedList-de6ff80f.js} +1 -1
  88. package/client/chunks/{StringField-6f6add8e.js → StringField-bcb3cf55.js} +4 -4
  89. package/client/chunks/{Table-b97f74a3.js → Table-c3d2ed97.js} +2 -2
  90. package/client/chunks/{TableBlock-40e14cce.js → TableBlock-bea44c74.js} +2 -2
  91. package/client/chunks/{Tag-cd2a9a69.js → Tag-1afb881a.js} +1 -1
  92. package/client/chunks/{Text-857355c7.js → Text-1223772f.js} +1 -1
  93. package/client/chunks/{Text-e21c1f9b.js → Text-fee5aac7.js} +2 -2
  94. package/client/chunks/{TextArea-a1903d4c.js → TextArea-e97e027f.js} +1 -1
  95. package/client/chunks/{UserAvatar-f9ba8165.js → UserAvatar-5dcc3fb5.js} +1 -1
  96. package/client/chunks/{___vite-browser-external_commonjs-proxy-d30e3316.js → ___vite-browser-external_commonjs-proxy-ed3d72c5.js} +1 -1
  97. package/client/chunks/{apexcharts.common-342b3508.js → apexcharts.common-f2779797.js} +1 -1
  98. package/client/chunks/{blocks-a94420db.js → blocks-99a14794.js} +1 -1
  99. package/client/chunks/{easymde-35f7473a.js → easymde-a98f2082.js} +2 -2
  100. package/client/chunks/{index-03f19615.js → index-104cfa7c.js} +1 -1
  101. package/client/chunks/{index-22991524.js → index-4f010e0b.js} +13 -2
  102. package/client/chunks/{table-4a8cf259.js → table-b4292ebf.js} +1 -1
  103. package/client/chunks/{users-38d05564.js → users-0717978f.js} +1 -1
  104. package/client/chunks/{utc-561b2582.js → utc-12047dea.js} +1 -1
  105. package/client/manifest.json +12 -1
  106. package/dist/automation.js +1 -1
  107. package/dist/automation.js.map +1 -1
  108. package/dist/index.js +1 -1
  109. package/dist/index.js.map +1 -1
  110. package/dist/query.js +1 -1
  111. package/dist/query.js.map +1 -1
  112. package/dist/yarn.lock +11 -4
  113. package/package.json +3 -3
  114. package/client/chunks/Modal-7a912990.js +0 -230
package/dist/query.js CHANGED
@@ -532,7 +532,7 @@ $1`)};gO.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"),Lx=a(async(e,t)=>{let r={account_by_email:eve,platform_users_lowercase_2:tve};return zs(vn.PLATFORM_INFO.name,async n=>{let i=r[e];return gz(e,t,n,i,{arrayResponse:!0})})},"queryPlatformView"),rve={by_email2:Ybe,by_api_key:Xbe,by_app:Jbe},ep=a(async(e,t,r,n)=>{r||(r=Rr());let i=rve[e];return gz(e,t,r,i,n)},"queryGlobalView");async function yz(e,t,r){let n=Rr(),i=rve[e];return Nx(e,t,n,i,r)}a(yz,"queryGlobalViewRaw");var uxt=ne(require("pouchdb"));var bz=class{static{a(this,"Replication")}constructor({source:t,target:r}){this.source=_u(t),this.target=_u(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([yx(this.source),yx(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=_u(this.target.name),await this.replicate()}},nve=bz;var ave=ne(require("node-fetch"));var Fx=Lr.removeKeyNumbering;function _g(e){return e==null||e===""}a(_g,"isEmpty");var tp=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=Fx(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)=>_g(g)?null:`${m}:${t.preprocess(g,o)}`,"equal"),c=a((m,g,y="AND")=>{if(_g(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)=>_g(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(_g(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=Fx(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)=>_g(g)?null:(g=t.preprocess(g,{escape:!0,lowercase:!0,type:"string"}),`${m}:${g}*`)),this.#e.range&&h(this.#e.range,(m,g)=>{if(_g(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)=>_g(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}=wc(),n=`${t}/${this.#l}/_design/database/_search/${this.#f}`,i=this.buildSearchBody();try{return await ive(n,i,r)}catch(o){if(o.status===404&&this.#s)return await this.#s(),await ive(n,i,r);throw o}}};async function ive(e,t,r){let n=await(0,ave.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(ive,"runQuery");async function ove(e,t,r,n){let i=n.bookmark,o=n.rows||[];if(n.limit&&o.length>=n.limit)return o;let s=tp.maxLimit;n.limit&&o.length>n.limit-tp.maxLimit&&(s=n.limit-o.length);let u=new tp(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<tp.maxLimit)return[...o,...c.rows];let l={...n,bookmark:c.bookmark,rows:[...o,...c.rows]};return await ove(e,t,r,l)}a(ove,"recursiveSearch");async function cxt(e,t,r,n){let i=n.limit;(i==null||isNaN(i)||i<0)&&(i=50),i=Math.min(i,tp.maxLimit);let o=new tp(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(cxt,"paginatedSearch");async function lxt(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 ove(e,t,r,n)}}a(lxt,"fullSearch");var wz={};oe(wz,{createUserIndex:()=>fxt});async function fxt(){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(fxt,"createUserIndex");function sve(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(sve,"checkErrorCode");function pxt(e){return sve(e,409)}a(pxt,"isDocumentConflictError");var Mx={};oe(Mx,{addTenantToUrl:()=>dxt,getTenantDB:()=>Ez,getTenantIDFromCtx:()=>Ux,isUserInWorkspaceTenant:()=>hxt});function Ez(e){return Po(yg(e))}a(Ez,"getTenantDB");function dxt(e){let t=Pt();if(Qd()){let r=e.indexOf("?")===-1?"?":"&";e+=`${r}tenantId=${t}`}return e}a(dxt,"addTenantToUrl");var hxt=a((e,t)=>{let r;return t?r=t.tenantId||di:r=Pt(),(Zv(e)||di)===r},"isUserInWorkspaceTenant"),mxt=Object.values(bS),Ux=a((e,t)=>{if(!Qd())return di;t.allowNoTenant===void 0&&(t.allowNoTenant=!1),t.includeStrategies||(t.includeStrategies=mxt),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(Y5()).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 _z="app"+Fe,uve="/app/";async function gxt(e){let r=`/${e.path.split("/")[2].toLowerCase()}`,n=Pt();!K.isDev()&&K.MULTI_TENANCY&&(n=Ux(e,{includeStrategies:["subdomain"]}));let o=(await ts(n,()=>Px({dev:!1}))).filter(s=>s.url&&s.url.toLowerCase()===r)[0];return o&&o.appId?o.appId:void 0}a(gxt,"resolveAppUrl");function yxt(e){return e.path.startsWith(`/${_z}`)?!0:e.path.startsWith(uve)}a(yxt,"isServingApp");function bxt(e){return e.path.startsWith("/builder/workspace/")}a(bxt,"isServingBuilder");function vxt(e){return cve(e.path)}a(vxt,"isServingBuilderPreview");function cve(e){return new RegExp(/^\/app\/app_\w+\/preview$/).test(e)}a(cve,"isBuilderPreviewUrl");function wxt(e){return e.path.startsWith("/api/public/v")}a(wxt,"isPublicApiRequest");async function Sg(e){let t;function r(u){u&&u.startsWith(_z)&&(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=Ext(e.path);r(i),n(e.query?.appId);let o=cve(e.path);return e.path.startsWith(uve)&&!o&&r(await gxt(e)),t}a(Sg,"getWorkspaceIdFromCtx");function Ext(e){if(e)return e.split("?")[0].split("/").find(t=>t.startsWith(_z))}a(Ext,"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 jx(e){return K.INTERNAL_API_KEY&&K.INTERNAL_API_KEY===e?!0:!!(K.INTERNAL_API_KEY_FALLBACK&&K.INTERNAL_API_KEY_FALLBACK===e)}a(jx,"isValidInternalAPIKey");function rp(e,t){let r=e.cookies.get(t);if(r)return P1(r)}a(rp,"getCookie");function lve(e,t,r="builder",n={sign:!0}){t&&n&&n.sign&&(t=D1.default.sign(t,K.JWT_SECRET));let i={expires:z4,path:"/",httpOnly:!1,overwrite:!0};K.COOKIE_DOMAIN&&(i.domain=K.COOKIE_DOMAIN),e.cookies.set(r,t,i)}a(lve,"setCookie");function Jd(e,t){lve(e,null,t)}a(Jd,"clearCookie");function _xt(e){return e.headers["x-budibase-type"]==="client"}a(_xt,"isClient");function Sz(e){return new Promise(t=>setTimeout(t,e))}a(Sz,"timeout");function xz(e){return!!Wb[e]}a(xz,"isAudited");function Sxt(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(Sxt,"hasCircularStructure");function xxt(e){return!!e.match(/^.+:\/\/.+$/)}a(xxt,"urlHasProtocol");function Tz(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(Tz,"validEmail");var fve=(o=>(o.MILLISECONDS="milliseconds",o.SECONDS="seconds",o.MINUTES="minutes",o.HOURS="hours",o.DAYS="days",o))(fve||{}),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 Txt(e){let t=performance.now();return[await e(),gi.fromMilliseconds(performance.now()-t)]}a(Txt,"time");var dve=require("undici");function pve(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 dve.ProxyAgent(s)}catch(u){return console.log("[fetch] Failed to create ProxyAgent:",u),!1}}a(pve,"createProxyDispatcher");var L1=null;function Axt(e){return e?pve(e)||!1:(L1===null&&(L1=pve()),L1||!1)}a(Axt,"getProxyDispatcher");function Rxt(){L1=null}a(Rxt,"resetProxyDispatcherCache");function Oxt(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(Oxt,"jobToJobInformation");var F1=class{static{a(this,"InMemoryQueue")}constructor(t,r){this._name=t,this._opts=r,this._messages=[],this._emitter=new hve.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=>Oxt(t))}async whenCurrentJobsFinished(){do await Sz(50);while(this.hasRunningJobs())}hasRunningJobs(){return this._addCount>this._runCount}},mve=F1;var Rz=ne(require("bull"));var iw=(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))(iw||{});function gve(e,t,r){Cxt(e,t),r&&Ixt(e,r)}a(gve,"addListeners");function Ixt(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(Ixt,"handleStalled");function Su(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(Su,"getLogParams");var kxt={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 Cxt(e,t){let r=kxt[t];function n(i,o){let s=i.data.event?.appId;if(s)return J5(s,o);o()}a(n,"doInJobContext"),e.on("stalled",async i=>{await n(i,()=>{console.error(...Su(r,"stalled",{job:i}))})}).on("error",i=>{console.error(...Su(r,"error",{error:i}))}),process.env.NODE_DEBUG?.includes("bull")&&e.on("waiting",i=>{console.info(...Su(r,"waiting",{jobId:i}))}).on("active",async i=>{await n(i,()=>{console.info(...Su(r,"active",{job:i}))})}).on("progress",async(i,o)=>{await n(i,()=>{console.info(...Su(r,"progress",{job:i},{progress:o}))})}).on("completed",async(i,o)=>{await n(i,()=>{console.info(...Su(r,"completed",{job:i},{result:o}))})}).on("failed",async(i,o)=>{await n(i,()=>{console.error(...Su(r,"failed",{job:i,error:o}))})}).on("paused",()=>{console.info(...Su(r,"paused"))}).on("resumed",()=>{console.info(...Su(r,"resumed"))}).on("cleaned",(i,o)=>{console.info(...Su(r,"cleaned",{},{length:i.length,type:o}))}).on("drained",()=>{console.info(...Su(r,"drained"))}).on("removed",i=>{console.info(...Su(r,"removed",{job:i}))})}a(Cxt,"logging");var Az=[];function yve(e,t){let r=setInterval(e,t);return Az.push(r),r}a(yve,"set");function bve(e){let t=Az.indexOf(e);t!==-1&&Az.splice(t,1),clearInterval(e)}a(bve,"clear");var np=ne(require("dd-trace")),Bx=ne(require("object-sizeof"));var Dxt=gi.fromMinutes(5).toMs(),Pxt=gi.fromSeconds(30).toMs(),Oz=gi.fromSeconds(60).toMs(),qx=[],U1;async function wve(){for(let e of qx)await e.clean(Oz,"completed"),await e.clean(Oz,"failed")}a(wve,"cleanup");async function Nxt(e,t,r){let n=performance.now();try{let i=await t();return np.default.dogstatsd.increment(`${e}.success`,1,r),i}catch(i){throw np.default.dogstatsd.increment(`${e}.error`,1,r),i}finally{let i=performance.now()-n;np.default.dogstatsd.distribution(`${e}.duration.ms`,i,r),np.default.dogstatsd.increment(e,1,r)}}a(Nxt,"withMetrics");function Eve(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(Eve,"jobOptsTags");function Lxt(e){return{"job.id":e.id,"job.attemptsMade":e.attemptsMade,"job.timestamp":e.timestamp,"job.data.sizeBytes":(0,Bx.default)(e.data),...Eve(e.opts||{})}}a(Lxt,"jobTags");var Rc=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:Jm(),settings:{maxStalledCount:this.opts.maxStalledCount?this.opts.maxStalledCount:0,lockDuration:Dxt,lockRenewTime:Pxt}};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 Rz.default(this.jobQueue,{...r,redis:{host:"localhost",port:+process.env.BULL_TEST_REDIS_PORT}}):n=new mve(this.jobQueue,r):n=new Rz.default(this.jobQueue,r),gve(n,this.jobQueue,this.opts.removeStalledCb),qx.push(n),!U1&&!K.isTest()&&(U1=yve(wve,Oz),wve().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 np.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,...Lxt(s)}),this.opts.jobTags&&c.addTags(this.opts.jobTags(s.data)),np.default.dogstatsd.distribution("queue.process.sizeBytes",(0,Bx.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 np.default.trace("queue.add",async n=>(n.addTags({"queue.name":this.jobQueue,"job.data.sizeBytes":(0,Bx.default)(t),...Eve(r||{})}),this.opts.jobTags&&n.addTags(this.opts.jobTags(t)),t._parentSpanContext={traceId:n.context().toTraceId(),spanId:n.context().toSpanId()},np.default.dogstatsd.distribution("queue.add.sizeBytes",(0,Bx.default)(t),this.metricTags()),await this.withMetrics("queue.add",()=>this.queue.add(t,r))))}withMetrics(t,r){return Nxt(t,r,this.metricTags())}metricTags(){return{queueName:this.jobQueue}}close(t){return this.queue.close(t)}whenCurrentJobsFinished(){return this.queue.whenCurrentJobsFinished()}};async function Fxt(){U1&&bve(U1),console.log("Waiting for current queue jobs to finish...");for(let e of qx)await e.whenCurrentJobsFinished();console.log("Closing queue Redis connections...");for(let e of qx)await e.close();qx=[],console.log("Queues shutdown")}a(Fxt,"shutdown");var kt={};oe(kt,{correlation:()=>$x,logAlert:()=>uy,logAlertWithInfo:()=>eGt,logWarn:()=>Yw,logger:()=>KN,system:()=>b9});var $x={};oe($x,{getId:()=>kz,setHeader:()=>zxt});var xve=M1(),zxt=a(e=>{let t=xve.getId();t&&(e["x-budibase-correlation-id"]=t)},"setHeader");function kz(){return xve.getId()}a(kz,"getId");var HN=ne(IEe()),MDe=ne(TV()),v9=ne(require("dd-trace")),jDe=require("dd-trace/ext");var b9={};oe(b9,{getLogReadStream:()=>K8t,getSingleFileMaxSizeInfo:()=>UDe,localFileDestination:()=>y9});var JT=ne(require("fs")),g9=ne(require("path")),PDe=ne(VRe());var gt={};oe(gt,{ObjectStore:()=>Du,ObjectStoreBuckets:()=>KWt,SIGNED_FILE_PREFIX:()=>s9,bucketTTLConfig:()=>BN,budibaseTempDir:()=>oy,client3rdPartyLibrary:()=>q8t,clientLibraryPath:()=>B8t,clientLibraryUrl:()=>$8t,createBucketIfNotExists:()=>QT,deleteFile:()=>p8t,deleteFiles:()=>d8t,deleteFolder:()=>bDe,downloadTarball:()=>m8t,downloadTarballDirect:()=>h8t,enrichPWAImages:()=>z8t,enrichPluginURLs:()=>G8t,extractBucketAndPath:()=>t9,getAllFiles:()=>c8t,getAppFileUrl:()=>TDe,getClientCacheKey:()=>xDe,getGlobalFileS3Key:()=>ADe,getGlobalFileUrl:()=>W8t,getObjectMetadata:()=>g8t,getPluginIconKey:()=>IDe,getPluginJSKey:()=>ODe,getPluginS3Dir:()=>CDe,getPresignedUrl:()=>sy,getReadStream:()=>qN,listAllObjects:()=>u9,objectExists:()=>y8t,processAutomationAttachment:()=>YWt,processObjectStoreAttachment:()=>oDe,retrieve:()=>yDe,retrieveDirectory:()=>f8t,retrieveToTmp:()=>l8t,sanitizeBucket:()=>Uo,sanitizeKey:()=>qi,streamUpload:()=>gDe,streamUploadMany:()=>u8t,upload:()=>s8t,uploadDirectory:()=>c9});var zN=require("@aws-sdk/client-s3"),r9=ne(p1e()),dDe=require("@aws-sdk/s3-request-presigner");var bp=ne(require("dd-trace")),Kw=ne(require("fs")),HT=ne(require("fs/promises")),n9=ne(require("node-fetch")),gh=require("path"),WN=ne(require("stream")),KT=require("stream/promises"),i9=ne(tDe()),a9=require("uuid"),o9=ne(require("zlib"));var rDe=ne(require("fs")),nDe=require("os"),VT=ne(require("path")),iDe=ne(require("stream"));var KWt={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},aDe=(0,VT.join)((0,nDe.tmpdir)(),".budibase");try{rDe.default.mkdirSync(aDe)}catch(e){if(e.code!=="EEXIST")throw e}function oy(){return aDe}a(oy,"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 QWt(e){let t=await fetch(e.url);if(!t.ok||!t.body)throw new Error(`Unexpected response ${t.statusText}`);let r=VT.default.basename(new URL(e.url).pathname);if(!t.body)throw new Error("No response received for attachment");return{filename:e.filename||r,content:iDe.default.Readable.fromWeb(t.body)}}a(QWt,"processUrlAttachment");async function oDe(e){let t=t9(e.url);if(t===null)throw new Error("Invalid signed URL");let{bucket:r,path:n}=t,{stream:i}=await qN(r,n),o=VT.default.basename(n);return{bucket:r,path:n,filename:e.filename||o,content:i}}a(oDe,"processObjectStoreAttachment");async function YWt(e){return e.url?.startsWith("http://")||e.url?.startsWith("https://")?await QWt(e):await oDe(e)}a(YWt,"processAutomationAttachment");var n8t=pDe(),i8t={bucketCreationPromises:{}},s9="/files/signed",mh={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"},a8t=[mh.html,mh.css,mh.js,mh.json];function qi(e){return n8t(Uo(e)).replace(/\\/g,"/")}a(qi,"sanitizeKey");function Uo(e){return e.replace(new RegExp(vc,"g"),bc)}a(Uo,"sanitizeBucket");function Du(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(Du,"ObjectStore");async function QT(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=i8t.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(QT,"createBucketIfNotExists");var o8t=a((e,t)=>{if(t)return t;let r=e.split(".").pop();return r?mh[r.toLowerCase()]:mh.txt},"resolveContentType"),hDe=a(async(e,t,r)=>{let n=Uo(e),i=Du(),o=await QT(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"),mDe=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=o8t(r,i),u=qi(r),c={Bucket:t,Key:u,Body:n,ContentType:s,...o??{}};return{details:await new r9.Upload({client:e,params:c}).done(),contentType:s}},"streamUploadInternal");async function s8t({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=Du(),f=await QT(l,e);if(s&&f.created){let g=BN(e,s);await l.putBucketLifecycleConfiguration(g)}let p=n,d=p||(u?mh[u.toLowerCase()]:mh.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 r9.Upload({client:l,params:h}).done()}a(s8t,"upload");async function gDe({bucket:e,stream:t,filename:r,type:n,extra:i,ttl:o}){return await bp.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 hDe(e,o,s),{details:f,contentType:p}=await mDe({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(gDe,"streamUpload");async function u8t({bucket:e,files:t,ttl:r}){return await bp.default.trace("streamUploadMany",async i=>{if(i.addTags({bucketName:e,ttl:r,fileCount:t.length}),!t.length)return[];let{bucket:o,client:s}=await hDe(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 mDe({client:s,bucket:o,filename:l.filename,stream:l.stream,type:l.type,extra:l.extra});c[l.index]=f},10),c})}a(u8t,"streamUploadMany");async function yDe(e,t){return await bp.default.trace("retrieve",async r=>{r.addTags({bucketName:e,filepath:t});let n=Du(),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}),a8t.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(yDe,"retrieve");async function*u9(e,t){let r=Du(),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(u9,"listAllObjects");async function c8t(e,t){let r={};return await Mt.parallelForeach(u9(e,t),async n=>{if(!n.Key)throw new Error("file.Key must be defined");r[n.Key]=n},5),r}a(c8t,"getAllFiles");async function sy(e,t,r=3600){let n=Du({presigning:!0}),i={Bucket:Uo(e),Key:qi(t)},o=await(0,dDe.getSignedUrl)(n,new zN.GetObjectCommand(i),{expiresIn:r});if(K.MINIO_ENABLED){let s=new URL(o),u=s.pathname,c=s.search;return`${s9}${u}${c}`}else return o}a(sy,"getPresignedUrl");async function l8t(e,t){return await bp.default.trace("retrieveToTmp",async r=>{r.addTags({bucketName:e,filepath:t}),e=Uo(e),t=qi(t);let n=await yDe(e,t),i=(0,gh.join)(oy(),(0,a9.v4)());return r.addTags({outputPath:i}),n instanceof WN.default.Readable?(r.addTags({stream:!0}),await(0,KT.pipeline)(n,Kw.default.createWriteStream(i))):(r.addTags({stream:!1}),Kw.default.writeFileSync(i,n)),i})}a(l8t,"retrieveToTmp");async function f8t(e,t,r){return await bp.default.trace("retrieveDirectory",async n=>{n.addTags({bucketName:e,path:t});let i=(0,gh.join)(oy(),(0,a9.v4)());await HT.default.mkdir(i,{recursive:!0});let o=0;return await Mt.parallelForeach(u9(e,t),async s=>{let{Key:u}=s;!u||r?.some(c=>c.test(u))||(o++,await bp.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,gh.join)(i,...d);p.length>1&&!Kw.default.existsSync(h)&&await HT.default.mkdir(h,{recursive:!0}),await(0,KT.pipeline)(f,Kw.default.createWriteStream((0,gh.join)(i,...p),{mode:420}))}))},5),n.addTags({numObjects:o}),i})}a(f8t,"retrieveDirectory");async function p8t(e,t){let r=Du();await QT(r,e);let n={Bucket:e,Key:qi(t)};return r.deleteObject(n)}a(p8t,"deleteFile");async function d8t(e,t){let r=Du();await QT(r,e);let n={Bucket:e,Delete:{Objects:t.map(i=>({Key:qi(i)}))}};return r.deleteObjects(n)}a(d8t,"deleteFiles");async function bDe(e,t){e=Uo(e),t=qi(t);let r=Du(),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 bDe(e,t)}a(bDe,"deleteFolder");async function c9(e,t,r){return await bp.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,gh.join)(r,o.name)),u=(0,gh.join)(t,o.name);o.isDirectory()?await c9(e,u,s):await gDe({bucket:e,filename:s,stream:Kw.default.createReadStream(u)})}return i})}a(c9,"uploadDirectory");async function h8t(e,t,r={}){t=qi(t);let n=await(0,n9.default)(e,{headers:r});if(!n.ok)throw new Error(`unexpected response ${n.statusText}`);await(0,KT.pipeline)(n.body,o9.default.createUnzip(),i9.default.extract(t))}a(h8t,"downloadTarballDirect");async function m8t(e,t,r){t=Uo(t),r=qi(r);let n=await(0,n9.default)(e);if(!n.ok)throw new Error(`unexpected response ${n.statusText}`);let i=(0,gh.join)(oy(),r);return await(0,KT.pipeline)(n.body,o9.default.createUnzip(),i9.default.extract(i)),!K.isTest()&&K.SELF_HOSTED&&await c9(t,i,r),i}a(m8t,"downloadTarball");async function qN(e,t){return await bp.default.trace("getReadStream",async r=>{e=Uo(e),t=qi(t),r.addTags({bucketName:e,path:t});let n=Du(),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 g8t(e,t){e=Uo(e),t=qi(t);let r=Du(),n={Bucket:e,Key:t};try{return await r.headObject(n)}catch{throw new Error("Unable to retrieve metadata from object")}}a(g8t,"getObjectMetadata");async function y8t(e,t){e=Uo(e),t=qi(t);let r=Du(),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(y8t,"objectExists");function t9(e){let t=e.split("?")[0],r=new RegExp(`^${s9}/(?<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(t9,"extractBucketAndPath");var SDe=ne(require("querystring"));var _De=ne(EDe());var VN;function U8t(){if(!K.CLOUDFRONT_PRIVATE_KEY_64)throw new Error("CLOUDFRONT_PRIVATE_KEY_64 is not set");return VN||(VN=Buffer.from(K.CLOUDFRONT_PRIVATE_KEY_64,"base64").toString("utf-8"),VN)}a(U8t,"getPrivateKey");var M8t=a(()=>({keypairId:K.CLOUDFRONT_PUBLIC_KEY_ID,privateKeyString:U8t(),expireTime:new Date().getTime()+1e3*60*60*24}),"getCloudfrontSignParams"),Qw=a(e=>{let t=j8t(e);return _De.getSignedUrl(t,M8t())},"getPresignedUrl"),j8t=a(e=>{let t="/";return e.startsWith("/")&&(t=""),`${K.CLOUDFRONT_CDN}${t}${e}`},"getUrl");function B8t(e){return`${qi(e)}/budibase-client.js`}a(B8t,"clientLibraryPath");function q8t(e,t){return`${qi(e)}/${t}`}a(q8t,"client3rdPartyLibrary");async function $8t(e,t){return`/api/assets/${e}/client?${await xDe(t)}`}a($8t,"clientLibraryUrl");async function xDe(e){let t,r;try{t=Pt()}finally{r={version:e}}return t&&t!==di&&(r.tenantId=t),SDe.default.encode(r)}a(xDe,"getClientCacheKey");async function TDe(e){return K.CLOUDFRONT_CDN?Qw(e):await sy(K.APPS_BUCKET_NAME,e)}a(TDe,"getAppFileUrl");async function z8t(e){if(e.length===0)return[];try{return await Promise.all(e.map(async t=>({...t,src:await TDe(t.src),type:t.type||"image/png"})))}catch(t){return console.error("Error enriching PWA images:",t),e}}a(z8t,"enrichPWAImages");var W8t=a(async(e,t,r)=>{let n=ADe(e,t);return K.CLOUDFRONT_CDN?(r&&(n=`${n}?etag=${r}`),Qw(n)):await sy(K.GLOBAL_BUCKET_NAME,n)},"getGlobalFileUrl"),ADe=a((e,t)=>{let r=`${e}/${t}`;return K.MULTI_TENANCY&&(r=`${Pt()}/${r}`),r},"getGlobalFileS3Key");async function G8t(e){return!e||!e.length?[]:await Promise.all(e.map(async t=>{let r=await V8t(t),n=await H8t(t);return{...t,jsUrl:r,iconUrl:n}}))}a(G8t,"enrichPluginURLs");async function V8t(e){let t=ODe(e);return RDe(t)}a(V8t,"getPluginJSUrl");async function H8t(e){let t=IDe(e);if(t)return RDe(t)}a(H8t,"getPluginIconUrl");async function RDe(e){return K.CLOUDFRONT_CDN?Qw(e):await sy(K.PLUGIN_BUCKET_NAME,e)}a(RDe,"getPluginUrl");function ODe(e){return kDe(e,"plugin.min.js")}a(ODe,"getPluginJSKey");function IDe(e){let t=e.iconUrl?"icon.svg":e.iconFileName;if(t)return kDe(e,t)}a(IDe,"getPluginIconKey");function kDe(e,t){return`${CDe(e.name)}/${t}`}a(kDe,"getPluginS3Key");function CDe(e){let t=`${e}`;return K.MULTI_TENANCY&&(t=`${Pt()}/${t}`),K.CLOUDFRONT_CDN&&(t=`plugins/${t}`),t}a(CDe,"getPluginS3Dir");var NDe="budibase.log",LDe="budibase-logs-history.txt",FDe=g9.default.join(oy(),"systemlogs");function DDe(e){return g9.default.join(FDe,e)}a(DDe,"getFullPath");function UDe(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(UDe,"getSingleFileMaxSizeInfo");function y9(){let e=UDe(K.ROLLING_LOG_MAX_SIZE);return PDe.createStream(NDe,{size:e?.size,path:FDe,maxFiles:e?.totalHistoryFiles||1,immutable:!0,history:LDe,initialRotation:!1})}a(y9,"localFileDestination");function K8t(){let e=[],t=DDe(LDe);if(JT.default.existsSync(t)){let i=JT.default.readFileSync(t,"utf-8").split(`
535
- `);for(let o of i.filter(s=>s))e.push(JT.default.readFileSync(o))}return e.push(JT.default.readFileSync(DDe(NDe))),Buffer.concat(e.map(n=>new Uint8Array(n)))}a(K8t,"getLogReadStream");function Q8t(e){return typeof e=="object"&&e!==null&&!(e instanceof Error)}a(Q8t,"isPlainObject");function Y8t(e){return e instanceof Error}a(Y8t,"isError");function J8t(e){return typeof e=="string"}a(J8t,"isMessage");var bh;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,MDe.default)({singleLine:!0}),level:e}:{stream:process.stdout,level:e}),K.SELF_HOSTED&&r.push({stream:y9(),level:e}),bh=r.length?(0,HN.default)(t,HN.default.multistream(r)):(0,HN.default)(t);let n=a(c=>{let l,f=[],p="";c.forEach(y=>{J8t(y)&&(p=`${p} ${y}`.trimStart()),Q8t(y)&&f.push(y),Y8t(y)&&(l=y)});let d=u(),h={};h={tenantId:i(),appId:o(),automationId:s(),identityId:d?._id,identityType:d?.type,correlationId:kz()};let m=v9.default.scope().active();m&&v9.default.inject(m.context(),jDe.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);bh?.info(l,f)},console.info=(...c)=>{let[l,f]=n(c);bh?.info(l,f)},console.warn=(...c)=>{let[l,f]=n(c);bh?.warn(l,f)},console.error=(...c)=>{let[l,f]=n(c);bh?.error(l,f)},console.trace=(...c)=>{let[l,f]=n(c);l.err||(l.err=new Error),bh?.trace(l,f)},console.debug=(...c)=>{let[l,f]=n(c);bh?.debug(l,f)};let i=a(()=>{let c;try{c=Pt()}catch{}return c},"getTenantId"),o=a(()=>{let c;try{c=rs()}catch{}return c},"getAppId"),s=a(()=>{let c;try{c=X5()}catch{}return c},"getAutomationId"),u=a(()=>{let c;try{c=$f()}catch{}return c},"getIdentity")}var KN=bh;var X8t=["AccountError"];function Z8t(e){return e&&e.suppressAlert}a(Z8t,"isSuppressed");function uy(e,t){t&&X8t.includes(t.name)&&Z8t(t)||console.error(`bb-alert: ${e}`,t)}a(uy,"logAlert");function eGt(e,t,r,n){e=`${e} - db: ${t} - doc: ${r} - error: `,uy(e,n)}a(eGt,"logAlertWithInfo");function Yw(e,t){console.warn(`bb-warn: ${e}`,t)}a(Yw,"logWarn");var QN=class extends Error{static{a(this,"UnretriableError")}constructor(t){super(t),this.name="PermanentError"}},w9=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 Rc(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(),uy(`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 tGt=100,YN,XT=class e{static{a(this,"DocWritethroughProcessor")}static get queue(){return e._queue||(e._queue=new Rc("docWritethroughQueue",{jobOptions:{attempts:tGt}})),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)}},E9=class{static{a(this,"DocWritethrough")}constructor(t,r){this.db=t,this._docId=r}get docId(){return this._docId}async patch(t){await XT.queue.add({dbName:this.db.name,docId:this.docId,data:t})}};function BDe(){return YN=new XT().init(),YN}a(BDe,"init");function rGt(){return YN||BDe()}a(rGt,"getProcessor");var eA={};oe(eA,{CacheKey:()=>sa,TTL:()=>fy,bustCache:()=>Jw,destroy:()=>ZT,get:()=>py,keys:()=>JN,store:()=>vp,withCache:()=>vh,withCacheWithDynamicTTL:()=>qDe});function $l(e){let t=Pt();return`${e}:${t}`}a($l,"generateTenantKey");var cy=class{static{a(this,"BaseCache")}constructor(t=void 0){this.client=t}async getClient(){return this.client?this.client:await sz()}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 ly=new cy,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}`},fy=(n=>(n[n.ONE_MINUTE=600]="ONE_MINUTE",n[n.ONE_HOUR=3600]="ONE_HOUR",n[n.ONE_DAY=86400]="ONE_DAY",n))(fy||{}),JN=a((...e)=>ly.keys(...e),"keys"),py=a((...e)=>ly.get(...e),"get"),vp=a((...e)=>ly.store(...e),"store"),ZT=a((...e)=>ly.delete(...e),"destroy"),vh=a((...e)=>ly.withCache(...e),"withCache"),qDe=a((...e)=>ly.withCacheWithDynamicTTL(...e),"withCacheWithDynamicTTL"),Jw=a((...e)=>ly.bustCache(...e),"bustCache");var x9={};oe(x9,{createCode:()=>iGt,deleteCode:()=>oGt,getCode:()=>aGt,getExistingInvites:()=>S9,getInviteCodes:()=>zDe,updateCode:()=>nGt});var $De=gi.fromDays(7).toSeconds();async function nGt(e,t){await(await wg()).store(e,t,$De)}a(nGt,"updateCode");async function iGt(e,t){let r=cn();return await(await wg()).store(r,{email:e,info:t},$De),r}a(iGt,"createCode");async function aGt(e){let r=await(await wg()).get(e);if(!r)throw"Invitation is not valid or has expired, please request a new one.";return r}a(aGt,"getCode");async function oGt(e){await(await wg()).delete(e)}a(oGt,"deleteCode");async function zDe(){let r=(await(await wg()).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(zDe,"getInviteCodes");async function S9(e){return(await zDe()).filter(t=>e.includes(t.email))}a(S9,"getExistingInvites");var T9={};oe(T9,{createCode:()=>uGt,getCode:()=>cGt,invalidateCode:()=>lGt});var sGt=gi.fromHours(1).toSeconds();async function uGt(e,t){let r=cn();return await(await kx()).store(r,{userId:e,info:t},sGt),r}a(uGt,"createCode");async function cGt(e){let r=await(await kx()).get(e);if(!r)throw new Error("Provided information is not valid, cannot reset password - please try again.");return r}a(cGt,"getCode");async function lGt(e){await(await kx()).delete(e)}a(lGt,"invalidateCode");var kh={};oe(kh,{getUser:()=>MA,getUsers:()=>jXt,invalidateUser:()=>jA});var zl={};oe(zl,{addSsoUser:()=>GDe,addUser:()=>gGt,getUserDoc:()=>WDe,lookupTenantId:()=>fGt,removeUser:()=>yGt,updateUserDoc:()=>pGt});function dy(){return Po(vn.PLATFORM_INFO.name)}a(dy,"getPlatformDB");async function fGt(e){return K.MULTI_TENANCY?(await WDe(e)).tenantId:di}a(fGt,"lookupTenantId");async function WDe(e){return dy().get(e)}a(WDe,"getUserDoc");async function pGt(e){await dy().put(e)}a(pGt,"updateUserDoc");function dGt(e,t){return{_id:e,tenantId:t}}a(dGt,"newUserIdDoc");function hGt(e,t,r){return{_id:t,userId:e,tenantId:r}}a(hGt,"newUserEmailDoc");function mGt(e,t,r,n){return{_id:e,userId:r,email:t,tenantId:n}}a(mGt,"newUserSsoIdDoc");async function A9(e,t){let r=dy(),n;try{await r.get(e)}catch(i){if(i.status===404)n=t(),await r.put(n);else throw i}}a(A9,"addUserDoc");async function GDe(e,t,r,n){return A9(e,()=>mGt(e,t,r,n))}a(GDe,"addSsoUser");async function gGt(e,t,r,n){let i=[A9(t,()=>dGt(t,e)),A9(r,()=>hGt(t,r,e))];n&&i.push(GDe(n,r,t,e)),await Promise.all(i)}a(gGt,"addUser");async function yGt(e){let t=dy(),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(yGt,"removeUser");var VDe=ne(require("node-fetch"));var tA=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";$x.setHeader(n.headers);let o={method:t,body:i?JSON.stringify(n.body):n.body,headers:n.headers,credentials:"include"};return await(0,VDe.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 tA(K.INTERNAL_ACCOUNT_PORTAL_URL),KDe=K.SELF_HOSTED||K.DISABLE_ACCOUNT_PORTAL,hy=a(async e=>{if(KDe)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"),rA=a(async e=>{if(KDe)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:()=>Vl,addAppBuilder:()=>LXt,bulkGetGlobalUsersById:()=>KL,bulkUpdateGlobalUsers:()=>FA,cleanseUserObject:()=>sK,creatorsInList:()=>Sy,doesUserExist:()=>kXt,getAccountHolderFromUsers:()=>HL,getAllUserIds:()=>OXt,getAllUsers:()=>IXt,getById:()=>xy,getCreatorCount:()=>PXt,getExistingAccounts:()=>lE,getExistingPlatformUsers:()=>rFe,getExistingTenantUsers:()=>tFe,getFirstPlatformUser:()=>NA,getGlobalUserByAppPage:()=>uFe,getGlobalUserByEmail:()=>$c,getPlatformUsers:()=>zL,getUserCount:()=>DXt,hasAdminPermissions:()=>Oh,hasAppBuilderPermissions:()=>aFe,hasBuilderPermissions:()=>cs,isAdmin:()=>Gl,isAdminOrBuilder:()=>iFe,isAdminOrWorkspaceBuilder:()=>WL,isBuilder:()=>dE,isCreatorAsync:()=>LA,isCreatorSync:()=>GL,isGlobalBuilder:()=>nFe,paginatedUsers:()=>lFe,removeAppBuilder:()=>FXt,removePortalUserPermissions:()=>NXt,searchExistingEmails:()=>nK,searchGlobalUsersByApp:()=>QL,searchGlobalUsersByAppAccess:()=>oK,searchGlobalUsersByEmail:()=>cFe,validateUniqueUser:()=>VL});var XN=class extends Error{constructor(r,n){super(r);this.code=n}static{a(this,"BudibaseError")}},YDe=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 za=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}}},Xw=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")}},wp=class extends Error{static{a(this,"EmailUnavailableError")}constructor(t){super(`Email already in use: '${t}'`)}};var XDe=+(K.PASSWORD_MIN_LENGTH||12),ZDe=+(K.PASSWORD_MAX_LENGTH||512);function ePe(e){return!e||e.length<XDe?{valid:!1,error:`Password invalid. Minimum ${XDe} characters.`}:e.length>ZDe?{valid:!1,error:`Password invalid. Maximum ${ZDe} characters.`}:{valid:!0}}a(ePe,"validatePassword");var vGt=require("uuid");var wGt=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 O9(e){return e?(await(await tw()).scan(e)).map(n=>n.value):(console.trace("Cannot get sessions for undefined userId"),[])}a(O9,"getSessionsForUser");async function iA(e,t={}){try{let r=t?.reason||"unknown",n=t.sessionIds||[],i;if(n.length===0?i=(await O9(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 tw(),s=[];for(let u of i)s.push(o.delete(u.key));K.isTest()||Yw(`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(iA,"invalidateSessions");async function tPe(e){let t=await tw(),r=tL(e.userId,e.sessionId);e.lastAccessedAt=new Date().toISOString(),await t.store(r,e,wGt)}a(tPe,"updateSessionTTL");async function rPe(e,t){if(!e||!t)throw new Error(`Invalid session details - ${e} - ${t}`);let n=await(await tw()).get(tL(e,t));if(!n)throw new Error(`Session not found - ${e} - ${t}`);return n}a(rPe,"getSession");var St={};oe(St,{account:()=>k2e,action:()=>C2e,ai:()=>D2e,analytics:()=>nL,app:()=>P2e,asyncEventQueue:()=>my,auditLog:()=>N2e,auth:()=>$L,automation:()=>L2e,backfill:()=>F2e,backfillCache:()=>aL,backup:()=>U2e,datasource:()=>M2e,email:()=>j2e,environmentVariable:()=>B2e,group:()=>q2e,identification:()=>qc,initAsyncEvents:()=>hXt,installation:()=>OA,layout:()=>$2e,license:()=>z2e,org:()=>W2e,plugin:()=>G2e,processors:()=>C7,publishEvent:()=>de,query:()=>V2e,resource:()=>H2e,role:()=>PA,rowAction:()=>K2e,rows:()=>Q2e,screen:()=>Y2e,serve:()=>J2e,shutdown:()=>mXt,table:()=>X2e,user:()=>ls,view:()=>Z2e,workspace:()=>eFe});var nL={};oe(nL,{enabled:()=>rL});var rL=a(async()=>iL(),"enabled");var my;function I9(){my=new Rc("systemEventQueue",{jobTags:e=>({"event.name":e.event})})}a(I9,"init");async function iPe(e){my||I9();let{event:t,identity:r}=e;yse.indexOf(t)!==-1&&r.tenantId&&await my.add(e)}a(iPe,"publishAsyncEvent");var aL={};oe(aL,{end:()=>_Gt,isAlreadySent:()=>D9,isBackfillingEvent:()=>C9,recordEvent:()=>k9,start:()=>EGt});var EGt=a(async e=>xGt({eventWhitelist:e}),"start"),k9=a(async(e,t)=>{let r=P9(e,t);await vp(r,t,void 0,{useTenancy:!1})},"recordEvent"),_Gt=a(async()=>{await TGt(),await AGt()},"end"),SGt=a(async()=>py(sa.BACKFILL_METADATA),"getBackfillMetadata"),xGt=a(async e=>vp(sa.BACKFILL_METADATA,e),"saveBackfillMetadata"),TGt=a(async()=>{await ZT(sa.BACKFILL_METADATA)},"deleteBackfillMetadata"),AGt=a(async()=>{let e=P9(),t=await JN(e);for(let r of t)await ZT(r,{useTenancy:!1})},"clearEvents"),C9=a(async e=>{let r=(await SGt())?.eventWhitelist;return!!(r&&r.includes(e))},"isBackfillingEvent"),D9=a(async(e,t)=>{let r=P9(e,t);return!!await py(r,{useTenancy:!1})},"isAlreadySent"),RGt={"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}`},P9=a((e,t)=>{let r,n=Pt();if(e){r=`${sa.EVENTS}:${n}:${e}`;let i=RGt[e],o=i?i(t):void 0;o&&(r=`${r}:${o}`)}else r=`${sa.EVENTS}:${n}:*`;return r},"getEventKey");var C7={};oe(C7,{analyticsProcessor:()=>jNe,init:()=>q9t,processors:()=>Ep});var UNe=ne(I7());var D9t=a(e=>e==="served:builder"||e==="served:app:preview"||e==="served:app","isRateLimited"),P9t=a(e=>e==="served:app:preview"||e==="served:app","isPerApp");var NNe={"served:app":"calendarDay","served:app:preview":"calendarDay","served:builder":"calendarDay"},LNe=a(async e=>{if(!D9t(e))return!1;let t=await N9t(e);if(t){let r=new Date(t.timestamp);switch(NNe[e]){case"calendarDay":return r.setDate(r.getDate()+1),r.setHours(0,0,0,0),Date.now()>r.getTime()?(await PNe(e,{timestamp:Date.now()}),!1):!0}}else return await PNe(e,{timestamp:Date.now()}),!1},"limited"),FNe=a(e=>{let t=`${sa.EVENTS_RATE_LIMIT}:${e}`;return P9t(e)&&(t=t+":"+rs()),t},"eventKey"),N9t=a(async e=>{let t=FNe(e);return await py(t)},"readEvent"),PNe=a(async(e,t)=>{let r=FNe(e),n=NNe[e],i;switch(n){case"calendarDay":i=86400}await vp(r,t,i)},"recordEvent");var F9t=["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"],yA=class{static{a(this,"PosthogProcessor")}constructor(t){if(!t)throw new Error("Posthog token is not defined");this.posthog=new UNe.PostHog(t)}async processEvent(t,r,n,i){if(F9t.includes(t)||await LNe(t))return;n=this.clearPIIProperties(n),n.version=K.VERSION,n.service=K.SERVICE,n.environment=r.environment,n.hosting=r.hosting;let o=rs();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 MNe=yA;var U9t=["installation:version:upgraded","installation:version:downgraded"],M9t=["installation","tenant"],bA=class{static{a(this,"AnalyticsProcessor")}constructor(){K.POSTHOG_TOKEN&&!K.isTest()&&(this.posthog=new MNe(K.POSTHOG_TOKEN))}async processEvent(t,r,n,i){!U9t.includes(t)&&!await rL()||this.posthog&&await this.posthog.processEvent(t,r,n,i)}async identify(t,r){!M9t.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 k7=K.SELF_HOSTED&&!K.isDev(),vA=class{static{a(this,"LoggingProcessor")}async processEvent(t,r,n){k7||console.log(`[audit] [identityType=${r.type}] ${t}`,n)}async identify(t){k7||console.log("[audit] identified",t)}async identifyGroup(t){k7||console.log("[audit] group identified",t)}async shutdown(){}};var uE=class e{static{a(this,"AuditLogsProcessor")}static{this.auditLogsEnabled=!1}static init(t){e.auditLogsEnabled=!0;let r=t;return e.auditLogQueue=new Rc("auditLogQueue",{jobTags:n=>({"event.name":n.event})}),e.auditLogQueue.process(async n=>{await ts(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&&xz(t)){let o=r.type==="user"?r.id:void 0;await e.auditLogQueue.add({event:t,properties:n,opts:{userId:o,timestamp:i,appId:rs(),hostInfo:r.hostInfo},tenantId:Pt()})}}async identify(){}async identifyGroup(){}async shutdown(){await e.auditLogQueue?.close()}};var wA=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 jNe=new bA,j9t=new vA,B9t=new uE;function q9t(e){return uE.init(e)}a(q9t,"init");var Ep=new wA([jNe,j9t,B9t]);var Rh={};oe(Rh,{checkInstallVersion:()=>jQt,getInstall:()=>IA,getInstallFromDB:()=>Z7});var X7=ne(J7());var IA=a(async()=>vh(sa.INSTALLATION,86400,Z7,{useTenancy:!1}),"getInstall");async function UQt(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 Z7();throw r}}a(UQt,"createInstallDoc");var Z7=a(async()=>zs(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 UQt(e);else throw r}return t}),"getInstallFromDB"),MQt=a(async e=>{try{await zs(vn.PLATFORM_INFO.name,async t=>{let r=await IA();r.version=e,await t.put(r),await Jw(sa.INSTALLATION)})}catch(t){if(t.status===409)return!1;throw t}return!0},"updateVersion"),jQt=a(async()=>{let e=await IA(),t=e.version,r=K.VERSION;try{if(t!==r){let n=X7.default.gt(r,t),i=X7.default.lt(r,t);await MQt(r)&&(await w0({_id:e.installId,type:"installation"},async()=>{n?await OA.upgraded(t,r):i&&await OA.downgraded(t,r)}),await qc.identifyInstallationGroup(e.installId))}}catch(n){n?.message?.includes("Invalid Version")?uy(`Invalid version "${r}" - is it semver?`):uy("Failed to retrieve version",n)}},"checkInstallVersion");var BQt=a(async()=>{let e=X4(),t=DA(),r;if(e?r=e.type:r="tenant",r==="installation"){let n=await _y(),i=kA();return{id:O2e(n,r),hosting:i,type:r,installationId:n,environment:t}}else if(r==="tenant"){let n=await _y(),i=await qL(Pt()),o=kA();return{id:O2e(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 _y(),s=n.account,u;return s?u=s.hosting:u=kA(),{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"),qQt=a(async(e,t)=>{let r=e,n="installation",i=kA(),o=K.VERSION,s=DA(),u={id:r,type:n,hosting:i,version:o,environment:s};await tK(u,t),await CA({...u,id:`$${n}_${r}`},t)},"identifyInstallationGroup"),$Qt=a(async(e,t,r,n=K.VERSION)=>{let i=await qL(e),o="tenant",s=await _y(),u=DA(),c={id:i,type:o,hosting:t,environment:u,installationId:s,createdAt:r,createdVersion:n};await tK(c,r),await CA({...c,id:`$${o}_${i}`},r)},"identifyTenantGroup"),zQt=a(async(e,t,r)=>{let n=e._id,i=await qL(e.tenantId),o="user",s=cs(e),u=Oh(e),c;Vb(e)&&(c=e.providerType);let f=(await lE([e.email])).length>0,p=!!t&&f&&t.verified,d=await _y(),h=t?t.hosting:kA(),m=DA();await CA({id:n,type:o,hosting:h,installationId:d,tenantId:i,verified:p,accountHolder:f,providerType:c,builder:s,admin:u,environment:m},r)},"identifyUser"),WQt=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 _y(),l=DA();if(fk(e)){let p=await $c(e.email);p?._id&&(t=p._id)}await CA({id:t,type:n,hosting:u,installationId:c,tenantId:r,providerType:i,verified:o,accountHolder:s,environment:l})},"identifyAccount"),CA=a(async(e,t)=>{await Ep.identify(e,t)},"identify"),tK=a(async(e,t)=>{await Ep.identifyGroup(e,t)},"identifyGroup"),DA=a(()=>K.isDev()?"development":K.DEPLOYMENT_ENVIRONMENT,"getDeploymentEnvironment"),kA=a(()=>K.SELF_HOSTED?"self":"cloud","getHostingFromEnv"),_y=a(async()=>GQt()?"account-portal":(await IA()).installId,"getInstallationId"),qL=a(async e=>K.SELF_HOSTED?I2e(e):e,"getEventTenantId"),I2e=a(async e=>ts(e,()=>vh(sa.UNIQUE_TENANT_ID,86400,async()=>{let t=Rr(),r=await fE(),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"),GQt=a(()=>K.SERVICE==="account-portal","isAccountPortal"),O2e=a((e,t)=>t==="installation"||t==="tenant"?`$${t}_${e}`:e,"formatDistinctId"),qc={getCurrentIdentity:BQt,identifyInstallationGroup:qQt,identifyTenantGroup:$Qt,identifyUser:zQt,identifyAccount:WQt,identify:CA,identifyGroup:tK,getInstallationId:_y,getUniqueTenantId:I2e};var de=a(async(e,t,r,n)=>{let i=n||await qc.getCurrentIdentity();if(!(n?!1:await C9(e))){await iPe({event:e,identity:i,properties:t,timestamp:r}),await Ep.processEvent(e,i,t,r);return}await D9(e,t)||(await Ep.processEvent(e,i,t,r),await k9(e,t))},"publishEvent");async function VQt(e,t){let r={tenantId:e.tenantId};await de("account:created",r,void 0,t)}a(VQt,"created");async function HQt(e){let t={tenantId:e.tenantId};await de("account:deleted",t)}a(HQt,"deleted");async function KQt(e){let t={tenantId:e.tenantId};await de("account:verified",t)}a(KQt,"verified");var k2e={created:VQt,deleted:HQt,verified:KQt};async function QQt(e,t){console.info("action:automation_step:executed",`disabled. Action step ${e.stepId} not published at ${t}`)}a(QQt,"automationStepExecuted");async function YQt(e,t){console.info("action:automation_step:executed",`disabled. Action type ${e.type} not published at ${t}`)}a(YQt,"crudExecuted");async function JQt(e,t){console.info("action:automation_step:executed",`disabled. Execution for ai agent ${e.agentId} not published at ${t}`)}a(JQt,"aiAgentExecuted");var C2e={aiAgentExecuted:JQt,automationStepExecuted:QQt,crudExecuted:YQt};async function XQt(e){let t={};await de("ai:config:created",t,e)}a(XQt,"AIConfigCreated");async function ZQt(){let e={};await de("ai:config:updated",e)}a(ZQt,"AIConfigUpdated");var D2e={AIConfigCreated:XQt,AIConfigUpdated:ZQt};var eYt=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 tYt(e){let t={appId:e.appId,version:e.version,audited:{name:e.name}};await de("app:updated",t)}a(tYt,"updated");async function rYt(e){let t={appId:e.appId,audited:{name:e.name}};await de("app:deleted",t)}a(rYt,"deleted");async function nYt(e,t){let r={appId:e.appId,audited:{name:e.name}};await de("app:published",r,t)}a(nYt,"published");async function iYt(e){let t={appId:e.appId,audited:{name:e.name}};await de("app:unpublished",t)}a(iYt,"unpublished");async function aYt(e){let t={appId:e.appId,audited:{name:e.name}};await de("app:file:imported",t)}a(aYt,"fileImported");async function oYt(e,t){let r={duplicateAppId:t,appId:e.appId,audited:{name:e.name}};await de("app:duplicated",r)}a(oYt,"duplicated");async function sYt(e,t){let r={appId:e.appId,templateKey:t,audited:{name:e.name}};await de("app:template:imported",r)}a(sYt,"templateImported");async function uYt(e,t,r){let n={appId:e.appId,currentVersion:t,updatedToVersion:r,audited:{name:e.name}};await de("app:version:updated",n)}a(uYt,"versionUpdated");async function cYt(e,t,r){let n={appId:e.appId,currentVersion:t,revertedToVersion:r,audited:{name:e.name}};await de("app:version:reverted",n)}a(cYt,"versionReverted");async function lYt(e){let t={appId:e.appId,audited:{name:e.name}};await de("app:reverted",t)}a(lYt,"reverted");async function fYt(e){let t={appId:e.appId,audited:{name:e.name}};await de("app:exported",t)}a(fYt,"exported");var P2e={created:eYt,updated:tYt,deleted:rYt,published:nYt,unpublished:iYt,fileImported:aYt,duplicated:oYt,templateImported:sYt,versionUpdated:uYt,versionReverted:cYt,reverted:lYt,exported:fYt};async function pYt(e){let t={filters:e};await de("audit_log:filtered",t)}a(pYt,"filtered");async function dYt(e){let t={filters:e};await de("audit_log:downloaded",t)}a(dYt,"downloaded");var N2e={filtered:pYt,downloaded:dYt};async function hYt(e,t){let n={userId:(await qc.getCurrentIdentity()).id,source:e,audited:{email:t}};await de("auth:login",n)}a(hYt,"login");async function mYt(e){let r={userId:(await qc.getCurrentIdentity()).id,audited:{email:e}};await de("auth:logout",r)}a(mYt,"logout");async function gYt(e,t){let r={type:e};await de("auth:sso:created",r,t)}a(gYt,"SSOCreated");async function yYt(e){let t={type:e};await de("auth:sso:updated",t)}a(yYt,"SSOUpdated");async function bYt(e,t){let r={type:e};await de("auth:sso:activated",r,t)}a(bYt,"SSOActivated");async function vYt(e){let t={type:e};await de("auth:sso:deactivated",t)}a(vYt,"SSODeactivated");var $L={login:hYt,logout:mYt,SSOCreated:gYt,SSOUpdated:yYt,SSOActivated:bYt,SSODeactivated:vYt};async function wYt(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(wYt,"created");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:trigger:updated",t)}a(EYt,"triggerUpdated");async function _Yt(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(_Yt,"deleted");async function SYt(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(SYt,"tested");var xYt=a(async(e,t)=>{let r={count:e};await de("automations:run",r,t)},"run");async function TYt(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(TYt,"stepCreated");async function AYt(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(AYt,"stepDeleted");var L2e={created:wYt,triggerUpdated:EYt,deleted:_Yt,tested:SYt,run:xYt,stepCreated:TYt,stepDeleted:AYt};var pE=!K.SELF_HOSTED&&!K.isDev();async function RYt(e){pE||await de("app:backfill:succeeded",e)}a(RYt,"appSucceeded");async function OYt(e){if(pE)return;let t={error:JSON.stringify(e,Object.getOwnPropertyNames(e))};await de("app:backfill:failed",t)}a(OYt,"appFailed");async function IYt(e){pE||await de("tenant:backfill:succeeded",e)}a(IYt,"tenantSucceeded");async function kYt(e){if(pE)return;let t={error:JSON.stringify(e,Object.getOwnPropertyNames(e))};await de("tenant:backfill:failed",t)}a(kYt,"tenantFailed");async function CYt(){if(pE)return;let e={};await de("installation:backfill:succeeded",e)}a(CYt,"installationSucceeded");async function DYt(e){if(pE)return;let t={error:JSON.stringify(e,Object.getOwnPropertyNames(e))};await de("installation:backfill:failed",t)}a(DYt,"installationFailed");var F2e={appSucceeded:RYt,appFailed:OYt,tenantSucceeded:IYt,tenantFailed:kYt,installationSucceeded:CYt,installationFailed:DYt};async function PYt(e){let t={appId:e.appId,restoreId:e._id,backupCreatedAt:e.timestamp,name:e.name};await de("app:backup:restored",t)}a(PYt,"appBackupRestored");async function NYt(e,t,r,n,i){let o={appId:e,backupId:t,type:r,trigger:n,name:i};await de("app:backup:triggered",o)}a(NYt,"appBackupTriggered");var U2e={appBackupRestored:PYt,appBackupTriggered:NYt};function rK(e){return!Object.values(ya).includes(e.source)}a(rK,"isCustom");async function LYt(e,t){let r={datasourceId:e._id,source:e.source,custom:rK(e)};await de("datasource:created",r,t)}a(LYt,"created");async function FYt(e){let t={datasourceId:e._id,source:e.source,custom:rK(e)};await de("datasource:updated",t)}a(FYt,"updated");async function UYt(e){let t={datasourceId:e._id,source:e.source,custom:rK(e)};await de("datasource:deleted",t)}a(UYt,"deleted");var M2e={created:LYt,updated:FYt,deleted:UYt};async function MYt(e){let t={};await de("email:smtp:created",t,e)}a(MYt,"SMTPCreated");async function jYt(){let e={};await de("email:smtp:updated",e)}a(jYt,"SMTPUpdated");var j2e={SMTPCreated:MYt,SMTPUpdated:jYt};async function BYt(e,t){let r={name:e,environments:t};await de("environment_variable:created",r)}a(BYt,"created");async function qYt(e){let t={name:e};await de("environment_variable:deleted",t)}a(qYt,"deleted");async function $Yt(e){let t={userId:e};await de("environment_variable:upgrade_panel_opened",t)}a($Yt,"upgradePanelOpened");var B2e={created:BYt,deleted:qYt,upgradePanelOpened:$Yt};async function zYt(e,t){let r={groupId:e._id,viaScim:Tc(),audited:{name:e.name}};await de("user_group:created",r,t)}a(zYt,"created");async function WYt(e){let t={groupId:e._id,viaScim:Tc(),audited:{name:e.name}};await de("user_group:updated",t)}a(WYt,"updated");async function GYt(e){let t={groupId:e._id,viaScim:Tc(),audited:{name:e.name}};await de("user_group:deleted",t)}a(GYt,"deleted");async function VYt(e,t,r){let n={count:e,groupId:t._id,userIds:r,viaScim:Tc(),audited:{name:t.name}};await de("user_group:user_added",n)}a(VYt,"usersAdded");async function HYt(e,t,r){let n={count:e,groupId:t._id,userIds:r,viaScim:Tc(),audited:{name:t.name}};await de("user_group:users_deleted",n)}a(HYt,"usersDeleted");async function KYt(e){let t={groupId:e,onboarding:!0};await de("user_group:onboarding_added",t)}a(KYt,"createdOnboarding");async function QYt(e){let t={permissions:e.roles,groupId:e._id,audited:{name:e.name}};await de("user_group:permissions_edited",t)}a(QYt,"permissionsEdited");var q2e={created:zYt,updated:WYt,deleted:GYt,usersAdded:VYt,usersDeleted:HYt,createdOnboarding:KYt,permissionsEdited:QYt};async function YYt(e){let t={currentVersion:e};await de("installation:version:checked",t)}a(YYt,"versionChecked");async function JYt(e,t){let r={from:e,to:t};await de("installation:version:upgraded",r)}a(JYt,"upgraded");async function XYt(e,t){let r={from:e,to:t};await de("installation:version:downgraded",r)}a(XYt,"downgraded");async function ZYt(){let e={};await de("installation:firstStartup",e)}a(ZYt,"firstStartup");var OA={versionChecked:YYt,upgraded:JYt,downgraded:XYt,firstStartup:ZYt};async function eJt(e,t){let r={layoutId:e._id};await de("layout:created",r,t)}a(eJt,"created");async function tJt(e){let t={layoutId:e};await de("layout:deleted",t)}a(tJt,"deleted");var $2e={created:eJt,deleted:tJt};async function rJt(e,t){let r={accountId:e.accountId,...t};await de("license:plan:changed",r)}a(rJt,"planChanged");async function nJt(e){let t={accountId:e.accountId};await de("license:activated",t)}a(nJt,"activated");async function iJt(e){let t={accountId:e.accountId};await de("license:checkout:opened",t)}a(iJt,"checkoutOpened");async function aJt(e){let t={accountId:e.accountId};await de("license:checkout:success",t)}a(aJt,"checkoutSuccess");async function oJt(e){let t={accountId:e.accountId};await de("license:portal:opened",t)}a(oJt,"portalOpened");async function sJt(e){let t={accountId:e.accountId};await de("license:payment:failed",t)}a(sJt,"paymentFailed");async function uJt(e){let t={accountId:e.accountId};await de("license:payment:recovered",t)}a(uJt,"paymentRecovered");var z2e={planChanged:rJt,activated:nJt,checkoutOpened:iJt,checkoutSuccess:aJt,portalOpened:oJt,paymentFailed:sJt,paymentRecovered:uJt};async function cJt(e){let t={};await de("org:info:name:updated",t,e)}a(cJt,"nameUpdated");async function lJt(e){let t={};await de("org:info:logo:updated",t,e)}a(lJt,"logoUpdated");async function fJt(e){let t={};await de("org:platformurl:updated",t,e)}a(fJt,"platformURLUpdated");async function pJt(){let e={};await de("analytics:opt:out",e)}a(pJt,"analyticsOptOut");async function dJt(){let e={};await de("analytics:opt:out",e)}a(dJt,"analyticsOptIn");var W2e={nameUpdated:cJt,logoUpdated:lJt,platformURLUpdated:fJt,analyticsOptOut:pJt,analyticsOptIn:dJt};async function hJt(e){let t={type:e.schema.type,name:e.name,description:e.description,version:e.version};await de("plugin:init",t)}a(hJt,"init");async function mJt(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(mJt,"imported");async function gJt(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(gJt,"deleted");var G2e={init:hJt,imported:mJt,deleted:gJt};var yJt=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"),bJt=a(async(e,t)=>{let r={queryId:t._id,datasourceId:e._id,source:e.source,queryVerb:t.queryVerb};await de("query:updated",r)},"updated"),vJt=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"),wJt=a(async(e,t,r)=>{let n={datasourceId:e._id,source:e.source,count:r,importSource:t};await de("query:import",n)},"imported"),EJt=a(async(e,t)=>{let r={count:e};await de("queries:run",r,t)},"run"),_Jt=a(async(e,t)=>{let r={queryId:t.queryId,datasourceId:e._id,source:e.source,queryVerb:t.queryVerb};await de("query:previewed",r)},"previewed"),V2e={created:yJt,updated:bJt,deleted:vJt,imported:wJt,run:EJt,previewed:_Jt};async function SJt({resource:e,fromWorkspace:t,toWorkspace:r},n){let i={resource:e,fromWorkspace:t,toWorkspace:r};await de("resource:copied_to_workspace",i,n)}a(SJt,"duplicatedToWorkspace");var H2e={duplicatedToWorkspace:SJt};async function xJt(e,t){let r={roleId:e._id,permissionId:e.permissionId,inherits:e.inherits};await de("role:created",r,t)}a(xJt,"created");async function TJt(e){let t={roleId:e._id,permissionId:e.permissionId,inherits:e.inherits};await de("role:updated",t)}a(TJt,"updated");async function AJt(e){let t={roleId:e._id,permissionId:e.permissionId,inherits:e.inherits};await de("role:deleted",t)}a(AJt,"deleted");async function RJt(e,t,r){let n={userId:e._id,roleId:t};await de("role:assigned",n,r)}a(RJt,"assigned");async function OJt(e,t){let r={userId:e._id,roleId:t};await de("role:unassigned",r)}a(OJt,"unassigned");var PA={created:xJt,updated:TJt,deleted:AJt,assigned:RJt,unassigned:OJt};async function IJt(e,t){await de("row_action:created",e,t)}a(IJt,"created");var K2e={created:IJt};var kJt=a(async(e,t)=>{let r={count:e};await de("rows:created",r,t)},"created"),CJt=a(async(e,t)=>{let r={tableId:e._id,count:t};await de("rows:imported",r)},"imported"),Q2e={created:kJt,imported:CJt};async function DJt(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(DJt,"created");async function PJt(e){let t={layoutId:e.layoutId,screenId:e._id,roleId:e.routing.roleId,audited:{name:e.routing?.route}};await de("screen:deleted",t)}a(PJt,"deleted");var Y2e={created:DJt,deleted:PJt};async function NJt(e){let t={timezone:e};await de("served:builder",t)}a(NJt,"servedBuilder");async function LJt(e,t,r){let n={appVersion:e.version,timezone:t,embed:r===!0};await de("served:app",n)}a(LJt,"servedApp");async function FJt(e,t){let r={appId:e.appId,appVersion:e.version,timezone:t};await de("served:app:preview",r)}a(FJt,"servedAppPreview");var J2e={servedBuilder:NJt,servedApp:LJt,servedAppPreview:FJt};async function UJt(e,t){let r={tableId:e._id,audited:{name:e.name}};await de("table:created",r,t)}a(UJt,"created");async function MJt(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(MJt,"updated");async function jJt(e,t){let r={tableId:e._id,audited:{name:e.name},appId:t};await de("table:deleted",r)}a(jJt,"deleted");async function BJt(e,t){let r={tableId:e._id,format:t,audited:{name:e.name}};await de("table:exported",r)}a(BJt,"exported");async function qJt(e){let t={tableId:e._id,audited:{name:e.name}};await de("table:imported",t)}a(qJt,"imported");var X2e={created:UJt,updated:MJt,deleted:jJt,exported:BJt,imported:qJt};async function $Jt(e,t){let r={userId:e._id,viaScim:Tc(),audited:{email:e.email}};await de("user:created",r,t)}a($Jt,"created");async function zJt(e){let t={userId:e._id,viaScim:Tc(),audited:{email:e.email}};await de("user:updated",t)}a(zJt,"updated");async function WJt(e){let t={userId:e._id,viaScim:Tc(),audited:{email:e.email}};await de("user:deleted",t)}a(WJt,"deleted");async function GJt(e,t){let r={userId:e._id,audited:{email:e.email}};await de("user:admin:assigned",r,t)}a(GJt,"permissionAdminAssigned");async function VJt(e){let t={userId:e._id,audited:{email:e.email}};await de("user:admin:removed",t)}a(VJt,"permissionAdminRemoved");async function HJt(e,t){let r={userId:e._id,audited:{email:e.email}};await de("user:builder:assigned",r,t)}a(HJt,"permissionBuilderAssigned");async function KJt(e){let t={userId:e._id,audited:{email:e.email}};await de("user:builder:removed",t)}a(KJt,"permissionBuilderRemoved");async function QJt(e){let t={audited:{email:e}};await de("user:invited",t)}a(QJt,"invited");async function YJt(e){let t={userId:e._id,audited:{email:e.email}};await de("user:invite:accepted",t)}a(YJt,"inviteAccepted");async function JJt(e){let t={userId:e._id,audited:{email:e.email}};await de("user:password:force:reset",t)}a(JJt,"passwordForceReset");async function XJt(e){let t={userId:e._id,audited:{email:e.email}};await de("user:password:updated",t)}a(XJt,"passwordUpdated");async function ZJt(e){let t={userId:e._id,audited:{email:e.email}};await de("user:password:reset:requested",t)}a(ZJt,"passwordResetRequested");async function eXt(e){let t={userId:e._id,audited:{email:e.email}};await de("user:password:reset",t)}a(eXt,"passwordReset");async function tXt(e){let t={users:e};await de("user:data:collaboration",t)}a(tXt,"dataCollaboration");var ls={created:$Jt,updated:zJt,deleted:WJt,permissionAdminAssigned:GJt,permissionAdminRemoved:VJt,permissionBuilderAssigned:HJt,permissionBuilderRemoved:KJt,invited:QJt,inviteAccepted:YJt,passwordForceReset:JJt,passwordUpdated:XJt,passwordResetRequested:ZJt,passwordReset:eXt,dataCollaboration:tXt};async function rXt(e,t){let r={name:e.name,type:e.type,tableId:e.tableId};await de("view:created",r,t)}a(rXt,"created");async function nXt(e){let t={tableId:e.tableId};await de("view:updated",t)}a(nXt,"updated");async function iXt(e,t){let r={...Ye.views.isV2(e)?{id:e.id,tableId:e.tableId,appId:t}:{}};await de("view:deleted",r)}a(iXt,"deleted");async function aXt(e,t){let r={tableId:e._id,format:t};await de("view:exported",r)}a(aXt,"exported");async function oXt({tableId:e,filterGroups:t},r){let n={tableId:e,filterGroups:t};await de("view:filter:created",n,r)}a(oXt,"filterCreated");async function sXt({tableId:e,filterGroups:t}){let r={tableId:e,filterGroups:t};await de("view:filter:updated",r)}a(sXt,"filterUpdated");async function uXt(e){let t={tableId:e.tableId};await de("view:filter:deleted",t)}a(uXt,"filterDeleted");async function cXt({tableId:e,calculationType:t},r){let n={tableId:e,calculation:t};await de("view:calculation:created",n,r)}a(cXt,"calculationCreated");async function lXt(e){let t={tableId:e.tableId,calculation:e.calculation};await de("view:calculation:updated",t)}a(lXt,"calculationUpdated");async function fXt(e){let t={tableId:e.tableId,calculation:e.calculation};await de("view:calculation:deleted",t)}a(fXt,"calculationDeleted");async function pXt(e,t){let r={tableId:e};await de("view:join:created",r,t)}a(pXt,"viewJoinCreated");var Z2e={created:rXt,updated:nXt,deleted:iXt,exported:aXt,filterCreated:oXt,filterUpdated:sXt,filterDeleted:uXt,calculationCreated:cXt,calculationUpdated:lXt,calculationDeleted:fXt,viewJoinCreated:pXt};async function dXt(e,t){let r={workspaceAppId:e._id,audited:{name:e.name},appId:t};await de("workspace_app:deleted",r)}a(dXt,"deleted");var eFe={deleted:dXt};function hXt(){}a(hXt,"initAsyncEvents");var mXt=a(async()=>{await Ep.shutdown(),console.log("Events shutdown")},"shutdown");var Ih={};oe(Ih,{creatorsInList:()=>Sy,getAccountHolderFromUsers:()=>HL,hasAdminPermissions:()=>Oh,hasAppBuilderPermissions:()=>aFe,hasBuilderPermissions:()=>cs,isAdmin:()=>Gl,isAdminOrBuilder:()=>iFe,isAdminOrWorkspaceBuilder:()=>WL,isBuilder:()=>dE,isCreatorAsync:()=>LA,isCreatorSync:()=>GL,isGlobalBuilder:()=>nFe,validateUniqueUser:()=>VL});async function nK(e){let t=[],r=await tFe(e);t.push(...r.map(s=>s.email));let n=await rFe(e);t.push(...n.map(s=>s._id));let i=await lE(e);t.push(...i.map(s=>s.email));let o=await S9(e);return t.push(...o.map(s=>s.email)),[...new Set(t.map(s=>s.toLowerCase()))]}a(nK,"searchExistingEmails");async function zL(e){return await Lx("platform_users_lowercase_2",{keys:[e.toLowerCase()],include_docs:!0})}a(zL,"getPlatformUsers");async function NA(e){return(await zL(e))[0]??null}a(NA,"getFirstPlatformUser");async function tFe(e){let r={keys:e.map(i=>i.toLowerCase()),include_docs:!0},n={arrayResponse:!0};return await ep("by_email2",r,void 0,n)}a(tFe,"getExistingTenantUsers");async function rFe(e){let r={keys:e.map(n=>n.toLowerCase()),include_docs:!0};return await Lx("platform_users_lowercase_2",r)}a(rFe,"getExistingPlatformUsers");async function lE(e){let r={keys:e.map(n=>n.toLowerCase()),include_docs:!0};return await Lx("account_by_email",r)}a(lE,"getExistingAccounts");var dE=Zi.users.isBuilder,Gl=Zi.users.isAdmin,nFe=Zi.users.isGlobalBuilder,iFe=Zi.users.isAdminOrBuilder,Oh=Zi.users.hasAdminPermissions,cs=Zi.users.hasBuilderPermissions,aFe=Zi.users.hasAppBuilderPermissions,WL=Zi.users.isAdminOrWorkspaceBuilder;async function Sy(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(Sy,"creatorsInList");async function LA(e){let t=[];return e.userGroups&&(t=await Rr().getMultiple(e.userGroups)),GL(e,t)}a(LA,"isCreatorAsync");function GL(e,t){let r=Zi.users.isCreator(e);return!r&&e?gXt(e,t):r}a(GL,"isCreatorSync");function gXt(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(gXt,"isCreatorByGroupMembership");async function VL(e,t){if(K.MULTI_TENANCY){let r=await NA(e);if(r!=null&&r.tenantId!==t)throw new wp(e)}if(!K.SELF_HOSTED&&!K.DISABLE_ACCOUNT_PORTAL){let r=await hy(e);if(r&&r.verified&&r.tenantId!==t)throw new wp(e)}}a(VL,"validateUniqueUser");async function HL(e){if(!K.SELF_HOSTED&&!K.DISABLE_ACCOUNT_PORTAL){let t=await lE(e.map(r=>r.email));return e.find(r=>t.map(n=>n.email).includes(r.email))}}a(HL,"getAccountHolderFromUsers");var iK=a(async e=>{await ls.deleted(e),cs(e)&&await ls.permissionBuilderRemoved(e),Oh(e)&&await ls.permissionAdminRemoved(e)},"handleDeleteEvents"),yXt=a(async(e,t,r)=>{for(let[n,i]of Object.entries(t))(!r||r[n]!==i)&&await PA.assigned(e,i)},"assignAppRoleEvents"),bXt=a(async(e,t,r)=>{if(r)for(let[n,i]of Object.entries(r))(!t||t[n]!==i)&&await PA.unassigned(e,i)},"unassignAppRoleEvents"),vXt=a(async(e,t)=>{let r=e.roles,n=t?.roles;await yXt(e,r,n),await bXt(e,r,n)},"handleAppRoleEvents"),aK=a(async(e,t)=>{let r=Pt(),n;!K.SELF_HOSTED&&!K.DISABLE_ACCOUNT_PORTAL&&(n=await rA(r)),await qc.identifyUser(e,n),t?(await ls.updated(e),EXt(e,t)&&await ls.permissionBuilderRemoved(e),SXt(e,t)&&await ls.permissionAdminRemoved(e),!t.forceResetPassword&&e.forceResetPassword&&e.password&&await ls.passwordForceReset(e),e.password!==t.password&&await ls.passwordUpdated(e)):await ls.created(e),wXt(e,t)&&await ls.permissionBuilderAssigned(e),_Xt(e,t)&&await ls.permissionAdminAssigned(e),await vXt(e,t)},"handleSaveEvents"),wXt=a((e,t)=>oFe(e,t,cs),"isAddingBuilder"),EXt=a((e,t)=>sFe(e,t,cs),"isRemovingBuilder"),_Xt=a((e,t)=>oFe(e,t,Oh),"isAddingAdmin"),SXt=a((e,t)=>sFe(e,t,Oh),"isRemovingAdmin"),oFe=a((e,t,r)=>!(!r(e)||t&&r(t)),"isAddingPermission"),sFe=a((e,t,r)=>!(r(e)||!t||!r(t)),"isRemovingPermission");var AXt=a(async e=>{let t=e._id;await zl.removeUser(e),await iK(e),await kh.invalidateUser(t),await iA(t,{reason:"bulk-deletion"})},"bulkDeleteProcessing"),Vl=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()||Vb(t)?!0:(r||(r=await rA(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=ePe(s);if(!p.valid)throw new ve(p.error,400)}c=r.hashPassword?await Y4(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||rw();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(Eg(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 oK(t.appId,{limit:t.limit||50})}static async getUserByEmail(t){return $c(t)}static async getUser(t){let r=await xy(t);return r&&delete r.password,r}static async bulkGet(t){return await KL(t)}static async bulkUpdate(t){return await FA(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 xy(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 $c(o),l&&l._id!==s))throw new wp(o);let f=1,p=0;if((r.isAccountHolder||l)&&(f=0,p=1),l){let[d,h]=await Sy([l,t]);p=d!==h?1:0}return e.quotas.addUsers(f,p,async()=>{r.isAccountHolder||await VL(o,n);let d=await e.buildUser(t,r,n,l);r.currentUserId&&r.currentUserId===l?._id&&(d=sK(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 aK(d,l),l&&d.email!==l.email&&await zl.removeUser({email:l.email}),await zl.addUser(n,d._id,d.email,d.ssoId),await kh.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 nK(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 LA(d)&&s.push(d)}let f=await rA(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 FA(d);for(let m of d)await zl.addUser(n,m._id,m.email),await aK(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 HL(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 FA(u),f=(await Sy(s)).filter(h=>h).length,p=[];for(let h of s){let g=(await NA(h._id)).ssoId;g&&(await zL(g)).filter(b=>b.ssoId==null).forEach(b=>{p.push({...b,_deleted:!0})}),await AXt(h)}await dy().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 hy(s))throw n.userId===$f()._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 LA(n)?1:0;await e.quotas.removeUsers(1,o),await iK(n),await kh.invalidateUser(i),await iA(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 Jw(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 UA(e){return Array.isArray(e)?e.map(t=>{if(t)return delete t.password,t}):e&&(delete e.password,e)}a(UA,"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=UA(n)),n}a(KL,"bulkGetGlobalUsersById");async function OXt(){let e=Rr(),t=`us${Fe}`;return(await e.allDocs({startkey:t,endkey:`${t}${La}`})).rows.map(n=>n.id)}a(OXt,"getAllUserIds");async function IXt(){let e=Rr(),t=`us${Fe}`;return(await e.allDocs({startkey:t,endkey:`${t}${La}`,include_docs:!0})).rows.map(n=>n.doc)}a(IXt,"getAllUsers");async function FA(e){return await Rr().bulkDocs(e)}a(FA,"bulkUpdateGlobalUsers");async function xy(e,t){let n=await Rr().get(e);return t?.cleanup&&(n=UA(n)),n}a(xy,"getById");async function $c(e,t){if(e==null)throw"Must supply an email address to view";let r=await ep("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=UA(n)),n}a($c,"getGlobalUserByEmail");async function kXt(e){try{let t=await $c(e);if(Array.isArray(t)||t!=null)return!0}catch{return!1}return!1}a(kXt,"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 ep("by_app",n);i||(i=[]);let o=Array.isArray(i)?i:[i];return r?.cleanup&&(o=UA(o)),o}a(QL,"searchGlobalUsersByApp");async function oK(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(oK,"searchGlobalUsersByAppAccess");function uFe(e,t){if(t)return I1(Ws(e),t._id)}a(uFe,"getGlobalUserByAppPage");async function cFe(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 ep("by_email2",{...t,startkey:i,endkey:`${n}${La}`});o||(o=[]);let s=Array.isArray(o)?o:[o];return r?.cleanup&&(s=UA(s)),s}a(cFe,"searchGlobalUsersByEmail");var CXt=8;async function lFe({bookmark:e,query:t,appId:r,limit:n}={}){let i=Rr(),o=n??CXt,u={include_docs:!0,limit:o+1};e&&(u.startkey=e);let c,l="_id",f;return t?.equal?._id?c=[await xy(t.equal._id)]:r?(c=await QL(r,u),f=a(p=>uFe(r,p),"getKey")):t?.string?.email?(c=await cFe(t?.string?.email,u),l="email"):t?.oneOf?._id?c=await KL(t?.oneOf?._id,{cleanup:!0}):t?(c=(await i.allDocs(Eg(null,{...u,limit:void 0}))).rows.map(d=>d.doc),c=Lr.search(c,{query:t,limit:u.limit}).rows):c=(await i.allDocs(Eg(null,u))).rows.map(d=>d.doc),hz(c,o,{paginate:!0,property:l,getKey:f})}a(lFe,"paginatedUsers");async function DXt(){return(await yz("by_email2",{limit:0,include_docs:!1})).total_rows}a(DXt,"getUserCount");async function PXt(){let e=0;async function t(r){let n=await lFe({bookmark:r}),i=await Sy(n.data);e+=i.filter(o=>o).length,n.hasNextPage&&await t(n.nextPage)}return a(t,"iterate"),await t(),e}a(PXt,"getCreatorCount");function NXt(e){return delete e.admin,delete e.builder,e}a(NXt,"removePortalUserPermissions");function sK(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(sK,"cleanseUserObject");async function LXt(e,t){let r=Ws(t);e.builder??={},e.builder.creator=!0,e.builder.apps??=[],e.builder.apps.push(r),await Vl.save(e,{hashPassword:!1})}a(LXt,"addAppBuilder");async function FXt(e,t){let r=Ws(t);e.builder&&e.builder.apps?.includes(r)&&(e.builder.apps=e.builder.apps.filter(n=>n!==r)),await Vl.save(e,{hashPassword:!1})}a(FXt,"removeAppBuilder");var fFe=3600;async function UXt(e,t){let n=await Ez(t).get(e);if(n.budibaseAccess=!0,!K.SELF_HOSTED&&!K.DISABLE_ACCOUNT_PORTAL){let i=await hy(n.email);i&&(n.account=i,n.accountPortalAccess=!0)}return n}a(UXt,"populateFromDB");async function MXt(e){let t=await Vl.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 hy(i.email);o&&(i.account=o,i.accountPortalAccess=!0)}})),r.length?{users:n,notFoundIds:r}:{users:n}}a(MXt,"populateUsersFromDB");async function MA({userId:e,tenantId:t,email:r,populateUser:n}){if(n||(n=UXt),!t)try{t=Pt()}catch{t=await zl.lookupTenantId(e)}let i=await Ix(),o=await i.get(e);return o||(o=await n(e,t,r),await i.store(e,o,fFe)),o&&!o.tenantId&&t&&(o.tenantId=t),o.userGroups&&!Zi.users.isGlobalBuilder(o)&&await ts(t,async()=>{let s=await Vl.getGroupBuilderAppIds(o);if(s.length){let u=o.builder?.apps||[];o.builder={apps:[...new Set(u.concat(s))]}}}),o}a(MA,"getUser");async function jXt(e){let t=await Ix(),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 MXt(n);o=s.notFoundIds;for(let u of s.users)await t.store(u._id,u,fFe);i.push(...s.users)}return{users:i,notFoundIds:o}}a(jXt,"getUsers");async function jA(e){await(await Ix()).delete(e)}a(jA,"invalidateUser");var OK={};oe(OK,{Writethrough:()=>TK});var zc={};oe(zc,{AUTO_EXTEND_POLLING_MS:()=>KUe,doWithLock:()=>SK,newRedlock:()=>Ry});var HUe=ne(VUe());async function oZt(e,t){if(e==="custom")return Ry(t);switch(e){case"try_once":return Ry(bE.TRY_ONCE);case"try_twice":return Ry(bE.TRY_TWICE);case"default":return Ry(bE.DEFAULT);case"delay_500":return Ry(bE.DELAY_500);case"auto_extend":return Ry(bE.AUTO_EXTEND);default:throw Mt.unreachable(e)}}a(oZt,"getClient");var bE={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 Ry(e={}){let t={...bE.DEFAULT,...e},n=(await cz()).client;return new HUe.default([n],t)}a(Ry,"newRedlock");function sZt(e){let r=`lock:${e.systemLock?"system":Pt()}_${e.name}`;return e.resource&&(r=r+`_${e.resource}`),r}a(sZt,"getLockName");var KUe=gi.fromSeconds(10).toMs();async function SK(e,t){let r=await oZt(e.type,e.customOptions),n,i;try{let o=sZt(e),s=e.type==="auto_extend"?KUe: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(SK,"doWithLock");var QUe=1e4,xK=null;async function n2(){if(!xK){let e=await uz();xK=new cy(e)}return xK}a(n2,"getCache");function $A(e,t){return e.name+t}a($A,"makeCacheKey");function RK(e,t=null){return{doc:e,lastWrite:t||Date.now()}}a(RK,"makeCacheItem");async function uZt(e,t,r=QUe){let n=await n2(),i=t._id,o;i&&(o=await n.get($A(e,i)));let s=!o||o.lastWrite<Date.now()-r,u=t;return s&&((await SK({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;Yw("Ignoring conflict in write-through cache")}})).executed||Yw("Ignoring redlock conflict in write-through cache")),o=RK(u,s?null:o?.lastWrite),u._id&&await n.store($A(e,u._id),o),{ok:!0,id:u._id,rev:u._rev}}a(uZt,"put");async function cZt(e,t){let r=await n2(),n=$A(e,t),i=await r.get(n);if(!i){let o=await e.get(t);i=RK(o),await r.store(n,i)}return i.doc}a(cZt,"get");async function lZt(e,t){let r=await n2(),n=$A(e,t),i=await r.get(n);if(!i){let o=await e.tryGet(t);if(!o)return null;i=RK(o),await r.store(n,i)}return i.doc}a(lZt,"tryGet");async function fZt(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($A(e,i))}finally{await e.remove(i,r)}}a(fZt,"remove");var TK=class{static{a(this,"Writethrough")}constructor(t,r=QUe){this.db=t,this.writeRateMs=r}async put(t,r=this.writeRateMs){return uZt(this.db,t,r)}async get(t){return cZt(this.db,t)}async tryGet(t){return lZt(this.db,t)}async remove(t,r){return fZt(this.db,t,r)}};function i2(e){return`config${Fe}${e}`}a(i2,"generateConfigID");async function Uu(e){let t=Rr();try{return await t.get(i2(e))}catch(r){if(r.status===404)return;throw r}}a(Uu,"getConfig");async function pZt(e){return e._id||(e._id=i2(e.type)),Rr().put(e)}a(pZt,"save");async function fE(){let e=await Uu("settings");return e||(e={_id:i2("settings"),type:"settings",config:{}}),e.config.platformUrl=await WA({tenantAware:!0,config:e.config}),e.config.analyticsEnabled=await iL({config:e.config}),e}a(fE,"getSettingsConfigDoc");async function kK(){return(await fE()).config}a(kK,"getSettingsConfig");async function WA(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 Uu("settings"))?.config;r?.platformUrl&&(t=r.platformUrl)}return t}a(WA,"getPlatformUrl");var iL=a(async e=>{if(!K.SELF_HOSTED)return!!K.ENABLE_ANALYTICS;let t=await vh(sa.ANALYTICS_ENABLED,86400,async()=>{let n=e?.config?e.config:(await Uu("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 dZt(){return await Uu("google")}a(dZt,"getGoogleConfigDoc");async function a2(){return(await dZt())?.config}a(a2,"getGoogleConfig");async function CK(){if(!K.SELF_HOSTED)return IK();let e=await a2();return(!e||!e.activated)&&(e=IK()),e}a(CK,"getGoogleDatasourceConfig");function IK(){if(K.GOOGLE_CLIENT_ID&&K.GOOGLE_CLIENT_SECRET)return{clientID:K.GOOGLE_CLIENT_ID,clientSecret:K.GOOGLE_CLIENT_SECRET,activated:!0}}a(IK,"getDefaultGoogleConfig");async function hZt(){return Uu("logos_oidc")}a(hZt,"getOIDCLogosDoc");async function mZt(){return Uu("oidc")}a(mZt,"getOIDCConfigDoc");async function gZt(){let e=(await mZt())?.config;return e?.configs&&e.configs[0]}a(gZt,"getOIDCConfig");async function DK(e){let t=(await Uu("oidc"))?.config;return t&&t.configs.filter(r=>r.uuid===e)[0]}a(DK,"getOIDCConfigById");async function YUe(){return Uu("smtp")}a(YUe,"getSMTPConfigDoc");async function yZt(e){let t=await YUe();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(yZt,"getSMTPConfig");async function bZt(){return(await Uu("scim"))?.config}a(bZt,"getSCIMConfig");async function vZt(){return Uu("ai")}a(vZt,"getAIConfig");async function wZt(){return Uu("recaptcha")}a(wZt,"getRecaptchaConfig");var Dr={};oe(Dr,{AccessController:()=>LK,BUILTIN_ROLE_IDS:()=>FK,Role:()=>Ph,RoleHierarchyTraversal:()=>o2,RoleIDVersion:()=>UK,builtinRoleToNumber:()=>GA,checkForRoleResourceArray:()=>eMe,externalRole:()=>AZt,findRole:()=>VA,getAllRoleIds:()=>kZt,getAllRoles:()=>qK,getBuiltinRole:()=>XUe,getBuiltinRoles:()=>jK,getDBRoleID:()=>tMe,getExternalRoleID:()=>Nh,getExternalRoleIDs:()=>rMe,getRole:()=>RZt,getUserRoleHierarchy:()=>BK,getUserRoleIdHierarchy:()=>ZUe,isBuiltin:()=>Oy,lowerBuiltinRoleID:()=>TZt,prefixRoleIDNoBuiltin:()=>NK,roleIDsAreEqual:()=>Mu,roleToNumber:()=>xZt,saveRoles:()=>OZt,validInherits:()=>SZt});var JUe=require("lodash"),s2=ne(require("lodash/fp/cloneDeep")),PK=ne(J7());var FK={ADMIN:"ADMIN",POWER:"POWER",BASIC:"BASIC",PUBLIC:"PUBLIC"},Un={...FK,BUILDER:"BUILDER"},UK={UUID:void 0,NAME:"name"};function _Zt(e,t){return Array.isArray(t)?t.filter(r=>e.includes(r)).length===t.length:e.includes(t)}a(_Zt,"rolesInList");var Ph=class{constructor(t,r,n,i){this.permissions={};this._id=t,this.name=r,this.uiMetadata=i,this.permissionId=n,this.version=UK.NAME}static{a(this,"Role")}addInheritance(t){return t&&typeof t=="string"?t=NK(t):t&&Array.isArray(t)&&(t=t.map(NK)),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=VA(o,n,r);s&&(i=i.concat(this.walk(s)))}else{let o=[],s=t;for(;s&&s.inherits&&!_Zt(o,s.inherits);){if(Array.isArray(s.inherits))return i.concat(this.walk(s));if(o.push(s.inherits),s=VA(s.inherits,n,r),s&&i.push(s),Ye.roles.checkForRoleInheritanceLoops(i))break}}return(0,JUe.uniqBy)(i,o=>o._id)}},MK={ADMIN:new Ph(Un.ADMIN,Un.ADMIN,"admin",{displayName:"App admin",description:"Can do everything",color:"var(--spectrum-global-color-static-red-400)"}).addInheritance(Un.POWER),POWER:new Ph(Un.POWER,Un.POWER,"power",{displayName:"App power user",description:"An app user with more access",color:"var(--spectrum-global-color-static-orange-400)"}).addInheritance(Un.BASIC),BASIC:new Ph(Un.BASIC,Un.BASIC,"write",{displayName:"App user",description:"Any logged in user",color:"var(--spectrum-global-color-static-green-400)"}).addInheritance(Un.PUBLIC),PUBLIC:new Ph(Un.PUBLIC,Un.PUBLIC,"public",{displayName:"Public user",description:"Accessible to anyone",color:"var(--spectrum-global-color-static-blue-400)"}),BUILDER:new Ph(Un.BUILDER,Un.BUILDER,"admin",{displayName:"Builder user",description:"Users that can edit this app",color:"var(--spectrum-global-color-static-magenta-600)"})};function jK(){return(0,s2.default)(MK)}a(jK,"getBuiltinRoles");function Oy(e){return Object.values(FK).includes(e)}a(Oy,"isBuiltin");function NK(e){return Oy(e)?e:Xf(e)}a(NK,"prefixRoleIDNoBuiltin");function XUe(e){let t=Object.values(MK).find(r=>e.includes(r._id));if(t)return(0,s2.default)(t)}a(XUe,"getBuiltinRole");function SZt(e,t){if(!t)return!1;let r=a(n=>e.find(i=>Mu(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(SZt,"validInherits");function GA(e){let t=jK(),r=Object.values(t).length+1;if(Mu(e,Un.ADMIN)||Mu(e,Un.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(GA,"builtinRoleToNumber");async function xZt(e){if(Oy(e))return GA(e);let t=await BK(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=>Mu(u._id,o));if(s)return r(s)+1}).filter(o=>o).sort().pop();if(i!=null)return i}else if(Oy(n.inherits))return GA(n.inherits)+1;return 0},"findNumber");return Math.max(...t.map(r))}a(xZt,"roleToNumber");function TZt(e,t){return e?t&&GA(e)>GA(t)?t:e:t}a(TZt,"lowerBuiltinRoleID");function Mu(e,t){return Xf(e)===Xf(t)}a(Mu,"roleIDsAreEqual");function AZt(e){let t;return e._id&&(t=Nh(e._id)),{...e,_id:t,inherits:rMe(e.inherits,e.version)}}a(AZt,"externalRole");function VA(e,t,r){let n=XUe(e);n||(e=Xf(e));let i=t.find(o=>o._id&&Mu(o._id,e));return!i&&!Oy(e)&&r?.defaultPublic?(0,s2.default)(MK.PUBLIC):(n=Object.assign(n||{},i),n?._id&&(n._id=Nh(n._id,n.version)),Object.keys(n).length===0?void 0:n)}a(VA,"findRole");async function RZt(e,t){let r=ew(),n=[];if(!Oy(e)){let i=await r.tryGet(tMe(e));i&&n.push(i)}return VA(e,n,t)}a(RZt,"getRole");async function OZt(e){await ew().bulkDocs(e.filter(r=>r._id).map(r=>({...r,_id:Xf(r._id)})))}a(OZt,"saveRoles");async function IZt(e,t){let r=await qK();if(Mu(e,Un.ADMIN))return r;let n=VA(e,r,t),i=[];return n&&(i=new o2(r,t).walk(n)),i}a(IZt,"getAllUserRoles");async function ZUe(e){return(await BK(e)).map(r=>r._id)}a(ZUe,"getUserRoleIdHierarchy");async function BK(e,t){return IZt(e,t)}a(BK,"getUserRoleHierarchy");function eMe(e,t){if(e&&!Array.isArray(e[t])){let r=e[t];e[t]=[r],r==="write"&&e[t].push("read")}return e}a(eMe,"checkForRoleResourceArray");async function kZt(e){return(await qK(e)).map(r=>r._id)}a(kZt,"getAllRoleIds");async function qK(e){if(e)return zs(e,t);{let r;try{r=ew()}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=Nh(u._id,u.version)));let i=jK(),o=[];!r||await CZt(r)?o=[Un.ADMIN,Un.POWER,Un.BASIC,Un.PUBLIC]:o=[Un.ADMIN,Un.BASIC,Un.PUBLIC];for(let s of o){let u=i[s],c=n.filter(l=>Mu(l._id,s))[0];c==null?n.push(u||i.BASIC):(n=n.filter(l=>l._id!==c._id),c._id=Nh(u._id,c.version),n.push({...u,...c,name:u.name,_id:Nh(u._id,u.version)}))}for(let s of n)if(s.permissions)for(let u of Object.keys(s.permissions))s.permissions=eMe(s.permissions,u);return n}a(t,"internal")}a(qK,"getAllRoles");async function CZt(e){let r=(await e.tryGet("app_metadata"))?.creationVersion;return!r||!PK.default.valid(r)?!0:!PK.default.gte(r,K.MIN_VERSION_WITHOUT_POWER_ROLE)}a(CZt,"shouldIncludePowerRole");var LK=class{static{a(this,"AccessController")}constructor(){this.userHierarchies={}}async hasAccess(t,r){if(t==null||t===""||Mu(t,Un.BUILDER)||Mu(r,t)||Mu(r,Un.BUILDER))return!0;let n=r?this.userHierarchies[r]:null;return!n&&r&&(n=await ZUe(r),this.userHierarchies[r]=n),n?.find(i=>Mu(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 tMe(e){return e?.startsWith("role")?e:Xf(e)}a(tMe,"getDBRoleID");function Nh(e,t){if(e.startsWith(`role${Fe}`)&&(Oy(e)||t===UK.NAME)){let r=e.split(Fe);return r.shift(),r.join(Fe)}return e}a(Nh,"getExternalRoleID");function rMe(e,t){return e&&(typeof e=="string"?Nh(e,t):e.map(r=>Nh(r,t)))}a(rMe,"getExternalRoleIDs");var Ri={};oe(Ri,{BUILDER:()=>FZt,BUILTIN_PERMISSIONS:()=>u2,CREATOR:()=>UZt,GLOBAL_BUILDER:()=>MZt,PermissionImpl:()=>Mn,PermissionLevel:()=>hd,PermissionType:()=>vS,doesHaveBasePermission:()=>NZt,getAllowedLevels:()=>oMe,getBuiltinPermissionByID:()=>PZt,getBuiltinPermissions:()=>DZt,isPermissionLevelHigherThanRead:()=>LZt,levelToNumber:()=>aMe});var nMe=ne(require("lodash/flatten")),iMe=ne(require("lodash/fp/cloneDeep"));var Mn=class{static{a(this,"PermissionImpl")}constructor(t,r){this.type=t,this.level=r}};function aMe(e){switch(e){case"execute":return 0;case"read":return 1;case"write":return 2;case"admin":return 3;default:return-1}}a(aMe,"levelToNumber");function oMe(e){switch(e){case"execute":return["execute"];case"read":return["execute","read"];case"write":case"admin":return["execute","read","write"];default:return[]}}a(oMe,"getAllowedLevels");var u2={PUBLIC:{_id:"public",name:"Public",permissions:[new Mn("webhook","execute")]},READ_ONLY:{_id:"read_only",name:"Read only",permissions:[new Mn("query","read"),new Mn("table","read"),new Mn("app","read")]},WRITE:{_id:"write",name:"Read/Write",permissions:[new Mn("query","write"),new Mn("table","write"),new Mn("automation","execute"),new Mn("legacy_view","read"),new Mn("app","read")]},POWER:{_id:"power",name:"Power",permissions:[new Mn("table","write"),new Mn("user","read"),new Mn("automation","execute"),new Mn("webhook","read"),new Mn("legacy_view","read"),new Mn("app","read")]},ADMIN:{_id:"admin",name:"Admin",permissions:[new Mn("table","admin"),new Mn("user","admin"),new Mn("automation","admin"),new Mn("webhook","read"),new Mn("query","admin"),new Mn("legacy_view","read"),new Mn("app","read")]}};function DZt(){return(0,iMe.default)(u2)}a(DZt,"getBuiltinPermissions");function PZt(e){return Object.values(u2).find(r=>r._id===e)}a(PZt,"getBuiltinPermissionByID");function NZt(e,t,r){let n=[...new Set(r.map(s=>s.permissionId))],i=Object.values(u2),o=(0,nMe.default)(i.filter(s=>n.indexOf(s._id)!==-1).map(s=>s.permissions));for(let s of o)if(s.type===e&&oMe(s.level).indexOf(t)!==-1)return!0;return!1}a(NZt,"doesHaveBasePermission");function LZt(e){return aMe(e)>1}a(LZt,"isPermissionLevelHigherThanRead");var FZt="builder",UZt="creator",MZt="globalBuilder";var c2=ne(require("crypto")),uMe=ne(require("dd-trace")),cMe=require("lodash"),BZt=ne(I7());var sMe;function lMe(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(lMe,"parseEnvFlags");function qZt(){return lMe(K.TENANT_FEATURE_FLAGS||"")}a(qZt,"getEnvFlags");var $K=class{constructor(t){this.flagSchema=t;this.setId=c2.randomUUID()}static{a(this,"FlagSet")}defaults(){return(0,cMe.cloneDeep)(this.flagSchema)}isFlagName(t){return this.flagSchema[t]!==void 0}async isEnabled(t){return(await this.fetch())[t]}async fetch(){return await uMe.default.trace("features.fetch",async t=>{let r=tz(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 qZt())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=$f(),c=u?._id;if(!c){let p=Z5();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,sMe&&c){n.readFromPostHog=!0;let p=await fE(),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 sMe.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=nz();for(let[p,d]of Object.entries(f))this.isFlagName(p)&&typeof d=="boolean"&&(i[p]=d,n[`flags.${p}.source`]="override");rz(this.setId,i);for(let[p,d]of Object.entries(i))n[`flags.${p}.value`]=d;return t?.addTags(n),i})}},$Zt={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},iun=new $K($Zt);var tr={};oe(tr,{adminOnly:()=>R2,auditLog:()=>O2,authError:()=>Ga,buildAuthMiddleware:()=>xgr,buildCsrfMiddleware:()=>Agr,buildTenancyMiddleware:()=>Tgr,builderOnly:()=>N2,builderOrAdmin:()=>L2,google:()=>kp,internalApi:()=>U2,joiValidator:()=>JA,oidc:()=>$p,passport:()=>Rgr,platformLogout:()=>Dgr,refreshOAuthToken:()=>kgr,ssoCallbackUrl:()=>Fh,updateUserOAuth:()=>Cgr,workspaceBuilderOrAdmin:()=>LU});var FU={};oe(FU,{adminOnly:()=>R2,auditLog:()=>O2,authError:()=>Ga,authenticated:()=>P2,builderOnly:()=>N2,builderOrAdmin:()=>L2,correlation:()=>dMe,csp:()=>kBe,csrf:()=>F2,datasource:()=>sgr,errorHandling:()=>DBe,featureFlagCookie:()=>PBe,google:()=>kp,internalApi:()=>U2,ip:()=>NBe,joiValidator:()=>JA,local:()=>xE,oidc:()=>$p,pino:()=>_Be,querystringToBody:()=>GGe,ssoCallbackUrl:()=>Fh,tenancy:()=>NU,workspaceBuilderOrAdmin:()=>LU});var pMe=require("uuid");var GZt=M1(),dMe=a((e,t)=>{let r=e.headers["x-budibase-correlation-id"];return r||(r=(0,pMe.v4)()),GZt.withId(r,()=>t())},"correlationMiddleware");var Cnr=EBe(),Dnr=M1();function Pnr(){return{logger:KN,genReqId:Dnr.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(Pnr,"pinoSettings");function Nnr(){return K.HTTP_LOGGING?Cnr(Pnr()):(e,t)=>t()}a(Nnr,"getMiddleware");var _Be=Nnr();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 Lnr=/\/:(.*?)(\/.*)?$/g,Dy=a(e=>e?e.map(t=>{let r=t.route,n=t.method,i=r.match(Lnr);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"),Py=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 Gc={};oe(Gc,{SecretOption:()=>TBe,decrypt:()=>BQ,decryptFile:()=>qnr,encrypt:()=>Mnr,encryptFile:()=>jnr,getSecret:()=>jQ});var Tp=ne(require("crypto")),Lh=ne(require("fs")),FQ=require("path"),UQ=ne(require("zlib"));var I2="aes-256-ctr",xBe="-",Fnr=1e4,Unr=32,k2=16,MQ=16,TBe=(r=>(r.API="api",r.ENCRYPTION="encryption",r))(TBe||{});function jQ(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(jQ,"getSecret");function C2(e,t){return Tp.default.pbkdf2Sync(e,new Uint8Array(t),Fnr,Unr,"sha512")}a(C2,"stretchString");function Mnr(e,t="api"){let r=Tp.default.randomBytes(k2),n=C2(jQ(t),r),i=Tp.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")}${xBe}${u}`}a(Mnr,"encrypt");function BQ(e,t="api"){let[r,n]=e.split(xBe),i=Buffer.from(r,"hex"),o=C2(jQ(t),i),s=Tp.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(BQ,"decrypt");async function jnr({dir:e,filename:t},r){let n=`${t}.enc`,i=(0,FQ.join)(e,t);if(Lh.default.lstatSync(i).isDirectory())throw new Error("Unable to encrypt directory");let o=Lh.default.createReadStream(i),s=Lh.default.createWriteStream((0,FQ.join)(e,n)),u=Tp.default.randomBytes(k2),c=Tp.default.randomBytes(MQ),l=C2(r,u),f=Tp.default.createCipheriv(I2,new Uint8Array(l),new Uint8Array(c));return s.write(u),s.write(c),o.pipe(UQ.default.createGzip()).pipe(f).pipe(s),new Promise(p=>{s.on("finish",()=>{p({filename:n,dir:e})})})}a(jnr,"encryptFile");async function Bnr(e){let t=Lh.default.createReadStream(e),r=await SBe(t,k2),n=await SBe(t,MQ);return t.close(),{salt:r,iv:n}}a(Bnr,"getSaltAndIV");async function qnr(e,t,r){if(Lh.default.lstatSync(e).isDirectory())throw new Error("Unable to decrypt directory");let{salt:n,iv:i}=await Bnr(e),o=Lh.default.createReadStream(e,{start:k2+MQ}),s=Lh.default.createWriteStream(t),u=C2(r,n),c=Tp.default.createDecipheriv(I2,new Uint8Array(u),new Uint8Array(i)),l=UQ.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(qnr,"decryptFile");function SBe(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(SBe,"readBytes");var RBe=ne(require("dd-trace"));var znr=K.SESSION_UPDATE_PERIOD?parseInt(K.SESSION_UPDATE_PERIOD):60*1e3;function Wnr(){return new Date(Date.now()-znr).toISOString()}a(Wnr,"timeMinusOneMinute");function ABe(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(ABe,"finalise");async function Gnr(e,t){if(jx(e))return{valid:!0,user:void 0};let n=BQ(e).split(Fe)[0];return ts(n,async()=>{let i;try{let o=Rr();i=await ep("by_api_key",{key:e},o)}catch{i=void 0}if(i)return{valid:!0,user:await MA({userId:i,tenantId:n,populateUser:t})};throw new eL})}a(Gnr,"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?Dy(e):[];return async(n,i)=>{let o=!1,s=D2(n,"x-budibase-api-version");Py(n,r)&&(o=!0);try{let c=D2(n,"x-budibase-token"),l=rp(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 rPe(v,b),t&&t.populateUser?h=await MA({userId:v,tenantId:w.tenantId,email:w.email,populateUser:t.populateUser(n)}):h=await MA({userId:v,tenantId:w.tenantId,email:w.email}),h.csrfToken=w.csrfToken,g="cookie",w?.lastAccessedAt<Wnr()&&await tPe(w),d=!0}catch(x){d=!1,console.error(`Auth Error: ${x.message}`),Jd(n,"budibase:auth")}}if(!d&&f){let b=t.populateUser?t.populateUser(n):null,{valid:v,user:w}=await Gnr(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)&&RBe.default.setUser({id:h._id,tenantId:h.tenantId,budibaseAccess:h.budibaseAccess,status:h.status}),ABe(n,{authenticated:d,user:h,internal:m,version:s,publicEndpoint:o,loginMethod:g}),y(h)?e6(h,n,i):i()}catch(c){if(console.error(`Auth Error: ${c.message}`),c?.name==="JsonWebTokenError"?Jd(n,"budibase:auth"):c?.code==="invalid_api_key"&&n.throw(403,c.message),t&&t.publicAllowed||o)return ABe(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 Sg(e);return!r&&!K.isWorker()?e.throw(403,"This request required a workspace id."):!r&&!cs(e.user)?e.throw(403,"Builder user only endpoint."):r&&!dE(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 Sg(e);return!r&&!K.isWorker()?e.throw(403,"This request required a workspace id."):!r&&!cs(e.user)?e.throw(403,"Admin/Builder user only endpoint."):r&&!dE(e.user,r)&&e.throw(403,"Workspace Admin/Builder user only endpoint."),t()}a(L2,"builderOrAdmin");var IBe=ne(require("crypto"));var OBe={"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'"]},Vnr=/^[A-Za-z0-9-*:/.]+$/,kBe=a(async(e,t)=>{let r=IBe.default.randomBytes(16).toString("base64");e.state.nonce=r;let n={...OBe};if(n["script-src"]=[...OBe["script-src"],`'nonce-${r}'`],e.user?.license?.features.includes("customAppScripts")&&e.appId)try{let s=await Cx.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(JT.default.readFileSync(o))}return e.push(JT.default.readFileSync(DDe(NDe))),Buffer.concat(e.map(n=>new Uint8Array(n)))}a(K8t,"getLogReadStream");function Q8t(e){return typeof e=="object"&&e!==null&&!(e instanceof Error)}a(Q8t,"isPlainObject");function Y8t(e){return e instanceof Error}a(Y8t,"isError");function J8t(e){return typeof e=="string"}a(J8t,"isMessage");var bh;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,MDe.default)({singleLine:!0}),level:e}:{stream:process.stdout,level:e}),K.SELF_HOSTED&&r.push({stream:y9(),level:e}),bh=r.length?(0,HN.default)(t,HN.default.multistream(r)):(0,HN.default)(t);let n=a(c=>{let l,f=[],p="";c.forEach(y=>{J8t(y)&&(p=`${p} ${y}`.trimStart()),Q8t(y)&&f.push(y),Y8t(y)&&(l=y)});let d=u(),h={};h={tenantId:i(),appId:o(),automationId:s(),identityId:d?._id,identityType:d?.type,correlationId:kz()};let m=v9.default.scope().active();m&&v9.default.inject(m.context(),jDe.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);bh?.info(l,f)},console.info=(...c)=>{let[l,f]=n(c);bh?.info(l,f)},console.warn=(...c)=>{let[l,f]=n(c);bh?.warn(l,f)},console.error=(...c)=>{let[l,f]=n(c);bh?.error(l,f)},console.trace=(...c)=>{let[l,f]=n(c);l.err||(l.err=new Error),bh?.trace(l,f)},console.debug=(...c)=>{let[l,f]=n(c);bh?.debug(l,f)};let i=a(()=>{let c;try{c=Pt()}catch{}return c},"getTenantId"),o=a(()=>{let c;try{c=rs()}catch{}return c},"getAppId"),s=a(()=>{let c;try{c=X5()}catch{}return c},"getAutomationId"),u=a(()=>{let c;try{c=$f()}catch{}return c},"getIdentity")}var KN=bh;var X8t=["AccountError"];function Z8t(e){return e&&e.suppressAlert}a(Z8t,"isSuppressed");function uy(e,t){t&&X8t.includes(t.name)&&Z8t(t)||console.error(`bb-alert: ${e}`,t)}a(uy,"logAlert");function eGt(e,t,r,n){e=`${e} - db: ${t} - doc: ${r} - error: `,uy(e,n)}a(eGt,"logAlertWithInfo");function Yw(e,t){console.warn(`bb-warn: ${e}`,t)}a(Yw,"logWarn");var QN=class extends Error{static{a(this,"UnretriableError")}constructor(t){super(t),this.name="PermanentError"}},w9=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 Rc(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(),uy(`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 tGt=100,YN,XT=class e{static{a(this,"DocWritethroughProcessor")}static get queue(){return e._queue||(e._queue=new Rc("docWritethroughQueue",{jobOptions:{attempts:tGt}})),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)}},E9=class{static{a(this,"DocWritethrough")}constructor(t,r){this.db=t,this._docId=r}get docId(){return this._docId}async patch(t){await XT.queue.add({dbName:this.db.name,docId:this.docId,data:t})}};function BDe(){return YN=new XT().init(),YN}a(BDe,"init");function rGt(){return YN||BDe()}a(rGt,"getProcessor");var eA={};oe(eA,{CacheKey:()=>sa,TTL:()=>fy,bustCache:()=>Jw,destroy:()=>ZT,get:()=>py,keys:()=>JN,store:()=>vp,withCache:()=>vh,withCacheWithDynamicTTL:()=>qDe});function $l(e){let t=Pt();return`${e}:${t}`}a($l,"generateTenantKey");var cy=class{static{a(this,"BaseCache")}constructor(t=void 0){this.client=t}async getClient(){return this.client?this.client:await sz()}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 ly=new cy,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}`},fy=(n=>(n[n.ONE_MINUTE=600]="ONE_MINUTE",n[n.ONE_HOUR=3600]="ONE_HOUR",n[n.ONE_DAY=86400]="ONE_DAY",n))(fy||{}),JN=a((...e)=>ly.keys(...e),"keys"),py=a((...e)=>ly.get(...e),"get"),vp=a((...e)=>ly.store(...e),"store"),ZT=a((...e)=>ly.delete(...e),"destroy"),vh=a((...e)=>ly.withCache(...e),"withCache"),qDe=a((...e)=>ly.withCacheWithDynamicTTL(...e),"withCacheWithDynamicTTL"),Jw=a((...e)=>ly.bustCache(...e),"bustCache");var x9={};oe(x9,{createCode:()=>iGt,deleteCode:()=>oGt,getCode:()=>aGt,getExistingInvites:()=>S9,getInviteCodes:()=>zDe,updateCode:()=>nGt});var $De=gi.fromDays(7).toSeconds();async function nGt(e,t){await(await wg()).store(e,t,$De)}a(nGt,"updateCode");async function iGt(e,t){let r=cn();return await(await wg()).store(r,{email:e,info:t},$De),r}a(iGt,"createCode");async function aGt(e){let r=await(await wg()).get(e);if(!r)throw"Invitation is not valid or has expired, please request a new one.";return r}a(aGt,"getCode");async function oGt(e){await(await wg()).delete(e)}a(oGt,"deleteCode");async function zDe(){let r=(await(await wg()).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(zDe,"getInviteCodes");async function S9(e){return(await zDe()).filter(t=>e.includes(t.email))}a(S9,"getExistingInvites");var T9={};oe(T9,{createCode:()=>uGt,getCode:()=>cGt,invalidateCode:()=>lGt});var sGt=gi.fromHours(1).toSeconds();async function uGt(e,t){let r=cn();return await(await kx()).store(r,{userId:e,info:t},sGt),r}a(uGt,"createCode");async function cGt(e){let r=await(await kx()).get(e);if(!r)throw new Error("Provided information is not valid, cannot reset password - please try again.");return r}a(cGt,"getCode");async function lGt(e){await(await kx()).delete(e)}a(lGt,"invalidateCode");var kh={};oe(kh,{getUser:()=>MA,getUsers:()=>jXt,invalidateUser:()=>jA});var zl={};oe(zl,{addSsoUser:()=>GDe,addUser:()=>gGt,getUserDoc:()=>WDe,lookupTenantId:()=>fGt,removeUser:()=>yGt,updateUserDoc:()=>pGt});function dy(){return Po(vn.PLATFORM_INFO.name)}a(dy,"getPlatformDB");async function fGt(e){return K.MULTI_TENANCY?(await WDe(e)).tenantId:di}a(fGt,"lookupTenantId");async function WDe(e){return dy().get(e)}a(WDe,"getUserDoc");async function pGt(e){await dy().put(e)}a(pGt,"updateUserDoc");function dGt(e,t){return{_id:e,tenantId:t}}a(dGt,"newUserIdDoc");function hGt(e,t,r){return{_id:t,userId:e,tenantId:r}}a(hGt,"newUserEmailDoc");function mGt(e,t,r,n){return{_id:e,userId:r,email:t,tenantId:n}}a(mGt,"newUserSsoIdDoc");async function A9(e,t){let r=dy(),n;try{await r.get(e)}catch(i){if(i.status===404)n=t(),await r.put(n);else throw i}}a(A9,"addUserDoc");async function GDe(e,t,r,n){return A9(e,()=>mGt(e,t,r,n))}a(GDe,"addSsoUser");async function gGt(e,t,r,n){let i=[A9(t,()=>dGt(t,e)),A9(r,()=>hGt(t,r,e))];n&&i.push(GDe(n,r,t,e)),await Promise.all(i)}a(gGt,"addUser");async function yGt(e){let t=dy(),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(yGt,"removeUser");var VDe=ne(require("node-fetch"));var tA=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";$x.setHeader(n.headers);let o={method:t,body:i?JSON.stringify(n.body):n.body,headers:n.headers,credentials:"include"};return await(0,VDe.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 tA(K.INTERNAL_ACCOUNT_PORTAL_URL),KDe=K.SELF_HOSTED||K.DISABLE_ACCOUNT_PORTAL,hy=a(async e=>{if(KDe)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"),rA=a(async e=>{if(KDe)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:()=>Vl,addAppBuilder:()=>LXt,bulkGetGlobalUsersById:()=>KL,bulkUpdateGlobalUsers:()=>FA,cleanseUserObject:()=>sK,creatorsInList:()=>Sy,doesUserExist:()=>kXt,getAccountHolderFromUsers:()=>HL,getAllUserIds:()=>OXt,getAllUsers:()=>IXt,getById:()=>xy,getCreatorCount:()=>PXt,getExistingAccounts:()=>lE,getExistingPlatformUsers:()=>rFe,getExistingTenantUsers:()=>tFe,getFirstPlatformUser:()=>NA,getGlobalUserByAppPage:()=>uFe,getGlobalUserByEmail:()=>$c,getPlatformUsers:()=>zL,getUserCount:()=>DXt,hasAdminPermissions:()=>Oh,hasAppBuilderPermissions:()=>aFe,hasBuilderPermissions:()=>cs,isAdmin:()=>Gl,isAdminOrBuilder:()=>iFe,isAdminOrWorkspaceBuilder:()=>WL,isBuilder:()=>dE,isCreatorAsync:()=>LA,isCreatorSync:()=>GL,isGlobalBuilder:()=>nFe,paginatedUsers:()=>lFe,removeAppBuilder:()=>FXt,removePortalUserPermissions:()=>NXt,searchExistingEmails:()=>nK,searchGlobalUsersByApp:()=>QL,searchGlobalUsersByAppAccess:()=>oK,searchGlobalUsersByEmail:()=>cFe,validateUniqueUser:()=>VL});var XN=class extends Error{constructor(r,n){super(r);this.code=n}static{a(this,"BudibaseError")}},YDe=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 za=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}}},Xw=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")}},wp=class extends Error{static{a(this,"EmailUnavailableError")}constructor(t){super(`Email already in use: '${t}'`)}};var XDe=+(K.PASSWORD_MIN_LENGTH||12),ZDe=+(K.PASSWORD_MAX_LENGTH||512);function ePe(e){return!e||e.length<XDe?{valid:!1,error:`Password invalid. Minimum ${XDe} characters.`}:e.length>ZDe?{valid:!1,error:`Password invalid. Maximum ${ZDe} characters.`}:{valid:!0}}a(ePe,"validatePassword");var vGt=require("uuid");var wGt=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 O9(e){return e?(await(await tw()).scan(e)).map(n=>n.value):(console.trace("Cannot get sessions for undefined userId"),[])}a(O9,"getSessionsForUser");async function iA(e,t={}){try{let r=t?.reason||"unknown",n=t.sessionIds||[],i;if(n.length===0?i=(await O9(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 tw(),s=[];for(let u of i)s.push(o.delete(u.key));K.isTest()||Yw(`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(iA,"invalidateSessions");async function tPe(e){let t=await tw(),r=tL(e.userId,e.sessionId);e.lastAccessedAt=new Date().toISOString(),await t.store(r,e,wGt)}a(tPe,"updateSessionTTL");async function rPe(e,t){if(!e||!t)throw new Error(`Invalid session details - ${e} - ${t}`);let n=await(await tw()).get(tL(e,t));if(!n)throw new Error(`Session not found - ${e} - ${t}`);return n}a(rPe,"getSession");var St={};oe(St,{account:()=>k2e,action:()=>C2e,ai:()=>D2e,analytics:()=>nL,app:()=>P2e,asyncEventQueue:()=>my,auditLog:()=>N2e,auth:()=>$L,automation:()=>L2e,backfill:()=>F2e,backfillCache:()=>aL,backup:()=>U2e,datasource:()=>M2e,email:()=>j2e,environmentVariable:()=>B2e,group:()=>q2e,identification:()=>qc,initAsyncEvents:()=>hXt,installation:()=>OA,layout:()=>$2e,license:()=>z2e,org:()=>W2e,plugin:()=>G2e,processors:()=>C7,publishEvent:()=>de,query:()=>V2e,resource:()=>H2e,role:()=>PA,rowAction:()=>K2e,rows:()=>Q2e,screen:()=>Y2e,serve:()=>J2e,shutdown:()=>mXt,table:()=>X2e,user:()=>ls,view:()=>Z2e,workspace:()=>eFe});var nL={};oe(nL,{enabled:()=>rL});var rL=a(async()=>iL(),"enabled");var my;function I9(){my=new Rc("systemEventQueue",{jobTags:e=>({"event.name":e.event})})}a(I9,"init");async function iPe(e){my||I9();let{event:t,identity:r}=e;yse.indexOf(t)!==-1&&r.tenantId&&await my.add(e)}a(iPe,"publishAsyncEvent");var aL={};oe(aL,{end:()=>_Gt,isAlreadySent:()=>D9,isBackfillingEvent:()=>C9,recordEvent:()=>k9,start:()=>EGt});var EGt=a(async e=>xGt({eventWhitelist:e}),"start"),k9=a(async(e,t)=>{let r=P9(e,t);await vp(r,t,void 0,{useTenancy:!1})},"recordEvent"),_Gt=a(async()=>{await TGt(),await AGt()},"end"),SGt=a(async()=>py(sa.BACKFILL_METADATA),"getBackfillMetadata"),xGt=a(async e=>vp(sa.BACKFILL_METADATA,e),"saveBackfillMetadata"),TGt=a(async()=>{await ZT(sa.BACKFILL_METADATA)},"deleteBackfillMetadata"),AGt=a(async()=>{let e=P9(),t=await JN(e);for(let r of t)await ZT(r,{useTenancy:!1})},"clearEvents"),C9=a(async e=>{let r=(await SGt())?.eventWhitelist;return!!(r&&r.includes(e))},"isBackfillingEvent"),D9=a(async(e,t)=>{let r=P9(e,t);return!!await py(r,{useTenancy:!1})},"isAlreadySent"),RGt={"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}`},P9=a((e,t)=>{let r,n=Pt();if(e){r=`${sa.EVENTS}:${n}:${e}`;let i=RGt[e],o=i?i(t):void 0;o&&(r=`${r}:${o}`)}else r=`${sa.EVENTS}:${n}:*`;return r},"getEventKey");var C7={};oe(C7,{analyticsProcessor:()=>jNe,init:()=>q9t,processors:()=>Ep});var UNe=ne(I7());var D9t=a(e=>e==="served:builder"||e==="served:app:preview"||e==="served:app","isRateLimited"),P9t=a(e=>e==="served:app:preview"||e==="served:app","isPerApp");var NNe={"served:app":"calendarDay","served:app:preview":"calendarDay","served:builder":"calendarDay"},LNe=a(async e=>{if(!D9t(e))return!1;let t=await N9t(e);if(t){let r=new Date(t.timestamp);switch(NNe[e]){case"calendarDay":return r.setDate(r.getDate()+1),r.setHours(0,0,0,0),Date.now()>r.getTime()?(await PNe(e,{timestamp:Date.now()}),!1):!0}}else return await PNe(e,{timestamp:Date.now()}),!1},"limited"),FNe=a(e=>{let t=`${sa.EVENTS_RATE_LIMIT}:${e}`;return P9t(e)&&(t=t+":"+rs()),t},"eventKey"),N9t=a(async e=>{let t=FNe(e);return await py(t)},"readEvent"),PNe=a(async(e,t)=>{let r=FNe(e),n=NNe[e],i;switch(n){case"calendarDay":i=86400}await vp(r,t,i)},"recordEvent");var F9t=["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"],yA=class{static{a(this,"PosthogProcessor")}constructor(t){if(!t)throw new Error("Posthog token is not defined");this.posthog=new UNe.PostHog(t)}async processEvent(t,r,n,i){if(F9t.includes(t)||await LNe(t))return;n=this.clearPIIProperties(n),n.version=K.VERSION,n.service=K.SERVICE,n.environment=r.environment,n.hosting=r.hosting;let o=rs();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 MNe=yA;var U9t=["installation:version:upgraded","installation:version:downgraded"],M9t=["installation","tenant"],bA=class{static{a(this,"AnalyticsProcessor")}constructor(){K.POSTHOG_TOKEN&&!K.isTest()&&(this.posthog=new MNe(K.POSTHOG_TOKEN))}async processEvent(t,r,n,i){!U9t.includes(t)&&!await rL()||this.posthog&&await this.posthog.processEvent(t,r,n,i)}async identify(t,r){!M9t.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 k7=K.SELF_HOSTED&&!K.isDev(),vA=class{static{a(this,"LoggingProcessor")}async processEvent(t,r,n){k7||console.log(`[audit] [identityType=${r.type}] ${t}`,n)}async identify(t){k7||console.log("[audit] identified",t)}async identifyGroup(t){k7||console.log("[audit] group identified",t)}async shutdown(){}};var uE=class e{static{a(this,"AuditLogsProcessor")}static{this.auditLogsEnabled=!1}static init(t){e.auditLogsEnabled=!0;let r=t;return e.auditLogQueue=new Rc("auditLogQueue",{jobTags:n=>({"event.name":n.event})}),e.auditLogQueue.process(async n=>{await ts(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&&xz(t)){let o=r.type==="user"?r.id:void 0;await e.auditLogQueue.add({event:t,properties:n,opts:{userId:o,timestamp:i,appId:rs(),hostInfo:r.hostInfo},tenantId:Pt()})}}async identify(){}async identifyGroup(){}async shutdown(){await e.auditLogQueue?.close()}};var wA=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 jNe=new bA,j9t=new vA,B9t=new uE;function q9t(e){return uE.init(e)}a(q9t,"init");var Ep=new wA([jNe,j9t,B9t]);var Rh={};oe(Rh,{checkInstallVersion:()=>jQt,getInstall:()=>IA,getInstallFromDB:()=>Z7});var X7=ne(J7());var IA=a(async()=>vh(sa.INSTALLATION,86400,Z7,{useTenancy:!1}),"getInstall");async function UQt(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 Z7();throw r}}a(UQt,"createInstallDoc");var Z7=a(async()=>zs(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 UQt(e);else throw r}return t}),"getInstallFromDB"),MQt=a(async e=>{try{await zs(vn.PLATFORM_INFO.name,async t=>{let r=await IA();r.version=e,await t.put(r),await Jw(sa.INSTALLATION)})}catch(t){if(t.status===409)return!1;throw t}return!0},"updateVersion"),jQt=a(async()=>{let e=await IA(),t=e.version,r=K.VERSION;try{if(t!==r){let n=X7.default.gt(r,t),i=X7.default.lt(r,t);await MQt(r)&&(await w0({_id:e.installId,type:"installation"},async()=>{n?await OA.upgraded(t,r):i&&await OA.downgraded(t,r)}),await qc.identifyInstallationGroup(e.installId))}}catch(n){n?.message?.includes("Invalid Version")?uy(`Invalid version "${r}" - is it semver?`):uy("Failed to retrieve version",n)}},"checkInstallVersion");var BQt=a(async()=>{let e=X4(),t=DA(),r;if(e?r=e.type:r="tenant",r==="installation"){let n=await _y(),i=kA();return{id:O2e(n,r),hosting:i,type:r,installationId:n,environment:t}}else if(r==="tenant"){let n=await _y(),i=await qL(Pt()),o=kA();return{id:O2e(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 _y(),s=n.account,u;return s?u=s.hosting:u=kA(),{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"),qQt=a(async(e,t)=>{let r=e,n="installation",i=kA(),o=K.VERSION,s=DA(),u={id:r,type:n,hosting:i,version:o,environment:s};await tK(u,t),await CA({...u,id:`$${n}_${r}`},t)},"identifyInstallationGroup"),$Qt=a(async(e,t,r,n=K.VERSION)=>{let i=await qL(e),o="tenant",s=await _y(),u=DA(),c={id:i,type:o,hosting:t,environment:u,installationId:s,createdAt:r,createdVersion:n};await tK(c,r),await CA({...c,id:`$${o}_${i}`},r)},"identifyTenantGroup"),zQt=a(async(e,t,r)=>{let n=e._id,i=await qL(e.tenantId),o="user",s=cs(e),u=Oh(e),c;Vb(e)&&(c=e.providerType);let f=(await lE([e.email])).length>0,p=!!t&&f&&t.verified,d=await _y(),h=t?t.hosting:kA(),m=DA();await CA({id:n,type:o,hosting:h,installationId:d,tenantId:i,verified:p,accountHolder:f,providerType:c,builder:s,admin:u,environment:m},r)},"identifyUser"),WQt=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 _y(),l=DA();if(fk(e)){let p=await $c(e.email);p?._id&&(t=p._id)}await CA({id:t,type:n,hosting:u,installationId:c,tenantId:r,providerType:i,verified:o,accountHolder:s,environment:l})},"identifyAccount"),CA=a(async(e,t)=>{await Ep.identify(e,t)},"identify"),tK=a(async(e,t)=>{await Ep.identifyGroup(e,t)},"identifyGroup"),DA=a(()=>K.isDev()?"development":K.DEPLOYMENT_ENVIRONMENT,"getDeploymentEnvironment"),kA=a(()=>K.SELF_HOSTED?"self":"cloud","getHostingFromEnv"),_y=a(async()=>GQt()?"account-portal":(await IA()).installId,"getInstallationId"),qL=a(async e=>K.SELF_HOSTED?I2e(e):e,"getEventTenantId"),I2e=a(async e=>ts(e,()=>vh(sa.UNIQUE_TENANT_ID,86400,async()=>{let t=Rr(),r=await fE(),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"),GQt=a(()=>K.SERVICE==="account-portal","isAccountPortal"),O2e=a((e,t)=>t==="installation"||t==="tenant"?`$${t}_${e}`:e,"formatDistinctId"),qc={getCurrentIdentity:BQt,identifyInstallationGroup:qQt,identifyTenantGroup:$Qt,identifyUser:zQt,identifyAccount:WQt,identify:CA,identifyGroup:tK,getInstallationId:_y,getUniqueTenantId:I2e};var de=a(async(e,t,r,n)=>{let i=n||await qc.getCurrentIdentity();if(!(n?!1:await C9(e))){await iPe({event:e,identity:i,properties:t,timestamp:r}),await Ep.processEvent(e,i,t,r);return}await D9(e,t)||(await Ep.processEvent(e,i,t,r),await k9(e,t))},"publishEvent");async function VQt(e,t){let r={tenantId:e.tenantId};await de("account:created",r,void 0,t)}a(VQt,"created");async function HQt(e){let t={tenantId:e.tenantId};await de("account:deleted",t)}a(HQt,"deleted");async function KQt(e){let t={tenantId:e.tenantId};await de("account:verified",t)}a(KQt,"verified");var k2e={created:VQt,deleted:HQt,verified:KQt};async function QQt(e,t){console.info("action:automation_step:executed",`disabled. Action step ${e.stepId} not published at ${t}`)}a(QQt,"automationStepExecuted");async function YQt(e,t){console.info("action:automation_step:executed",`disabled. Action type ${e.type} not published at ${t}`)}a(YQt,"crudExecuted");async function JQt(e,t){console.info("action:automation_step:executed",`disabled. Execution for ai agent ${e.agentId} not published at ${t}`)}a(JQt,"aiAgentExecuted");var C2e={aiAgentExecuted:JQt,automationStepExecuted:QQt,crudExecuted:YQt};async function XQt(e){let t={};await de("ai:config:created",t,e)}a(XQt,"AIConfigCreated");async function ZQt(){let e={};await de("ai:config:updated",e)}a(ZQt,"AIConfigUpdated");var D2e={AIConfigCreated:XQt,AIConfigUpdated:ZQt};var eYt=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 tYt(e){let t={appId:e.appId,version:e.version,audited:{name:e.name}};await de("app:updated",t)}a(tYt,"updated");async function rYt(e){let t={appId:e.appId,audited:{name:e.name}};await de("app:deleted",t)}a(rYt,"deleted");async function nYt(e,t){let r={appId:e.appId,audited:{name:e.name}};await de("app:published",r,t)}a(nYt,"published");async function iYt(e){let t={appId:e.appId,audited:{name:e.name}};await de("app:unpublished",t)}a(iYt,"unpublished");async function aYt(e){let t={appId:e.appId,audited:{name:e.name}};await de("app:file:imported",t)}a(aYt,"fileImported");async function oYt(e,t){let r={duplicateAppId:t,appId:e.appId,audited:{name:e.name}};await de("app:duplicated",r)}a(oYt,"duplicated");async function sYt(e,t){let r={appId:e.appId,templateKey:t,audited:{name:e.name}};await de("app:template:imported",r)}a(sYt,"templateImported");async function uYt(e,t,r){let n={appId:e.appId,currentVersion:t,updatedToVersion:r,audited:{name:e.name}};await de("app:version:updated",n)}a(uYt,"versionUpdated");async function cYt(e,t,r){let n={appId:e.appId,currentVersion:t,revertedToVersion:r,audited:{name:e.name}};await de("app:version:reverted",n)}a(cYt,"versionReverted");async function lYt(e){let t={appId:e.appId,audited:{name:e.name}};await de("app:reverted",t)}a(lYt,"reverted");async function fYt(e){let t={appId:e.appId,audited:{name:e.name}};await de("app:exported",t)}a(fYt,"exported");var P2e={created:eYt,updated:tYt,deleted:rYt,published:nYt,unpublished:iYt,fileImported:aYt,duplicated:oYt,templateImported:sYt,versionUpdated:uYt,versionReverted:cYt,reverted:lYt,exported:fYt};async function pYt(e){let t={filters:e};await de("audit_log:filtered",t)}a(pYt,"filtered");async function dYt(e){let t={filters:e};await de("audit_log:downloaded",t)}a(dYt,"downloaded");var N2e={filtered:pYt,downloaded:dYt};async function hYt(e,t){let n={userId:(await qc.getCurrentIdentity()).id,source:e,audited:{email:t}};await de("auth:login",n)}a(hYt,"login");async function mYt(e){let r={userId:(await qc.getCurrentIdentity()).id,audited:{email:e}};await de("auth:logout",r)}a(mYt,"logout");async function gYt(e,t){let r={type:e};await de("auth:sso:created",r,t)}a(gYt,"SSOCreated");async function yYt(e){let t={type:e};await de("auth:sso:updated",t)}a(yYt,"SSOUpdated");async function bYt(e,t){let r={type:e};await de("auth:sso:activated",r,t)}a(bYt,"SSOActivated");async function vYt(e){let t={type:e};await de("auth:sso:deactivated",t)}a(vYt,"SSODeactivated");var $L={login:hYt,logout:mYt,SSOCreated:gYt,SSOUpdated:yYt,SSOActivated:bYt,SSODeactivated:vYt};async function wYt(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(wYt,"created");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:trigger:updated",t)}a(EYt,"triggerUpdated");async function _Yt(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(_Yt,"deleted");async function SYt(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(SYt,"tested");var xYt=a(async(e,t)=>{let r={count:e};await de("automations:run",r,t)},"run");async function TYt(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(TYt,"stepCreated");async function AYt(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(AYt,"stepDeleted");var L2e={created:wYt,triggerUpdated:EYt,deleted:_Yt,tested:SYt,run:xYt,stepCreated:TYt,stepDeleted:AYt};var pE=!K.SELF_HOSTED&&!K.isDev();async function RYt(e){pE||await de("app:backfill:succeeded",e)}a(RYt,"appSucceeded");async function OYt(e){if(pE)return;let t={error:JSON.stringify(e,Object.getOwnPropertyNames(e))};await de("app:backfill:failed",t)}a(OYt,"appFailed");async function IYt(e){pE||await de("tenant:backfill:succeeded",e)}a(IYt,"tenantSucceeded");async function kYt(e){if(pE)return;let t={error:JSON.stringify(e,Object.getOwnPropertyNames(e))};await de("tenant:backfill:failed",t)}a(kYt,"tenantFailed");async function CYt(){if(pE)return;let e={};await de("installation:backfill:succeeded",e)}a(CYt,"installationSucceeded");async function DYt(e){if(pE)return;let t={error:JSON.stringify(e,Object.getOwnPropertyNames(e))};await de("installation:backfill:failed",t)}a(DYt,"installationFailed");var F2e={appSucceeded:RYt,appFailed:OYt,tenantSucceeded:IYt,tenantFailed:kYt,installationSucceeded:CYt,installationFailed:DYt};async function PYt(e){let t={appId:e.appId,restoreId:e._id,backupCreatedAt:e.timestamp,name:e.name};await de("app:backup:restored",t)}a(PYt,"appBackupRestored");async function NYt(e,t,r,n,i){let o={appId:e,backupId:t,type:r,trigger:n,name:i};await de("app:backup:triggered",o)}a(NYt,"appBackupTriggered");var U2e={appBackupRestored:PYt,appBackupTriggered:NYt};function rK(e){return!Object.values(ya).includes(e.source)}a(rK,"isCustom");async function LYt(e,t){let r={datasourceId:e._id,source:e.source,custom:rK(e)};await de("datasource:created",r,t)}a(LYt,"created");async function FYt(e){let t={datasourceId:e._id,source:e.source,custom:rK(e)};await de("datasource:updated",t)}a(FYt,"updated");async function UYt(e){let t={datasourceId:e._id,source:e.source,custom:rK(e)};await de("datasource:deleted",t)}a(UYt,"deleted");var M2e={created:LYt,updated:FYt,deleted:UYt};async function MYt(e){let t={};await de("email:smtp:created",t,e)}a(MYt,"SMTPCreated");async function jYt(){let e={};await de("email:smtp:updated",e)}a(jYt,"SMTPUpdated");var j2e={SMTPCreated:MYt,SMTPUpdated:jYt};async function BYt(e,t){let r={name:e,environments:t};await de("environment_variable:created",r)}a(BYt,"created");async function qYt(e){let t={name:e};await de("environment_variable:deleted",t)}a(qYt,"deleted");async function $Yt(e){let t={userId:e};await de("environment_variable:upgrade_panel_opened",t)}a($Yt,"upgradePanelOpened");var B2e={created:BYt,deleted:qYt,upgradePanelOpened:$Yt};async function zYt(e,t){let r={groupId:e._id,viaScim:Tc(),audited:{name:e.name}};await de("user_group:created",r,t)}a(zYt,"created");async function WYt(e){let t={groupId:e._id,viaScim:Tc(),audited:{name:e.name}};await de("user_group:updated",t)}a(WYt,"updated");async function GYt(e){let t={groupId:e._id,viaScim:Tc(),audited:{name:e.name}};await de("user_group:deleted",t)}a(GYt,"deleted");async function VYt(e,t,r){let n={count:e,groupId:t._id,userIds:r,viaScim:Tc(),audited:{name:t.name}};await de("user_group:user_added",n)}a(VYt,"usersAdded");async function HYt(e,t,r){let n={count:e,groupId:t._id,userIds:r,viaScim:Tc(),audited:{name:t.name}};await de("user_group:users_deleted",n)}a(HYt,"usersDeleted");async function KYt(e){let t={groupId:e,onboarding:!0};await de("user_group:onboarding_added",t)}a(KYt,"createdOnboarding");async function QYt(e){let t={permissions:e.roles,groupId:e._id,audited:{name:e.name}};await de("user_group:permissions_edited",t)}a(QYt,"permissionsEdited");var q2e={created:zYt,updated:WYt,deleted:GYt,usersAdded:VYt,usersDeleted:HYt,createdOnboarding:KYt,permissionsEdited:QYt};async function YYt(e){let t={currentVersion:e};await de("installation:version:checked",t)}a(YYt,"versionChecked");async function JYt(e,t){let r={from:e,to:t};await de("installation:version:upgraded",r)}a(JYt,"upgraded");async function XYt(e,t){let r={from:e,to:t};await de("installation:version:downgraded",r)}a(XYt,"downgraded");async function ZYt(){let e={};await de("installation:firstStartup",e)}a(ZYt,"firstStartup");var OA={versionChecked:YYt,upgraded:JYt,downgraded:XYt,firstStartup:ZYt};async function eJt(e,t){let r={layoutId:e._id};await de("layout:created",r,t)}a(eJt,"created");async function tJt(e){let t={layoutId:e};await de("layout:deleted",t)}a(tJt,"deleted");var $2e={created:eJt,deleted:tJt};async function rJt(e,t){let r={accountId:e.accountId,...t};await de("license:plan:changed",r)}a(rJt,"planChanged");async function nJt(e){let t={accountId:e.accountId};await de("license:activated",t)}a(nJt,"activated");async function iJt(e){let t={accountId:e.accountId};await de("license:checkout:opened",t)}a(iJt,"checkoutOpened");async function aJt(e){let t={accountId:e.accountId};await de("license:checkout:success",t)}a(aJt,"checkoutSuccess");async function oJt(e){let t={accountId:e.accountId};await de("license:portal:opened",t)}a(oJt,"portalOpened");async function sJt(e){let t={accountId:e.accountId};await de("license:payment:failed",t)}a(sJt,"paymentFailed");async function uJt(e){let t={accountId:e.accountId};await de("license:payment:recovered",t)}a(uJt,"paymentRecovered");var z2e={planChanged:rJt,activated:nJt,checkoutOpened:iJt,checkoutSuccess:aJt,portalOpened:oJt,paymentFailed:sJt,paymentRecovered:uJt};async function cJt(e){let t={};await de("org:info:name:updated",t,e)}a(cJt,"nameUpdated");async function lJt(e){let t={};await de("org:info:logo:updated",t,e)}a(lJt,"logoUpdated");async function fJt(e){let t={};await de("org:platformurl:updated",t,e)}a(fJt,"platformURLUpdated");async function pJt(){let e={};await de("analytics:opt:out",e)}a(pJt,"analyticsOptOut");async function dJt(){let e={};await de("analytics:opt:out",e)}a(dJt,"analyticsOptIn");var W2e={nameUpdated:cJt,logoUpdated:lJt,platformURLUpdated:fJt,analyticsOptOut:pJt,analyticsOptIn:dJt};async function hJt(e){let t={type:e.schema.type,name:e.name,description:e.description,version:e.version};await de("plugin:init",t)}a(hJt,"init");async function mJt(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(mJt,"imported");async function gJt(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(gJt,"deleted");var G2e={init:hJt,imported:mJt,deleted:gJt};var yJt=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"),bJt=a(async(e,t)=>{let r={queryId:t._id,datasourceId:e._id,source:e.source,queryVerb:t.queryVerb};await de("query:updated",r)},"updated"),vJt=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"),wJt=a(async(e,t,r)=>{let n={datasourceId:e._id,source:e.source,count:r,importSource:t};await de("query:import",n)},"imported"),EJt=a(async(e,t)=>{let r={count:e};await de("queries:run",r,t)},"run"),_Jt=a(async(e,t)=>{let r={queryId:t.queryId,datasourceId:e._id,source:e.source,queryVerb:t.queryVerb};await de("query:previewed",r)},"previewed"),V2e={created:yJt,updated:bJt,deleted:vJt,imported:wJt,run:EJt,previewed:_Jt};async function SJt({resource:e,fromWorkspace:t,toWorkspace:r},n){let i={resource:e,fromWorkspace:t,toWorkspace:r};await de("resource:copied_to_workspace",i,n)}a(SJt,"duplicatedToWorkspace");var H2e={duplicatedToWorkspace:SJt};async function xJt(e,t){let r={roleId:e._id,permissionId:e.permissionId,inherits:e.inherits};await de("role:created",r,t)}a(xJt,"created");async function TJt(e){let t={roleId:e._id,permissionId:e.permissionId,inherits:e.inherits};await de("role:updated",t)}a(TJt,"updated");async function AJt(e){let t={roleId:e._id,permissionId:e.permissionId,inherits:e.inherits};await de("role:deleted",t)}a(AJt,"deleted");async function RJt(e,t,r){let n={userId:e._id,roleId:t};await de("role:assigned",n,r)}a(RJt,"assigned");async function OJt(e,t){let r={userId:e._id,roleId:t};await de("role:unassigned",r)}a(OJt,"unassigned");var PA={created:xJt,updated:TJt,deleted:AJt,assigned:RJt,unassigned:OJt};async function IJt(e,t){await de("row_action:created",e,t)}a(IJt,"created");var K2e={created:IJt};var kJt=a(async(e,t)=>{let r={count:e};await de("rows:created",r,t)},"created"),CJt=a(async(e,t)=>{let r={tableId:e._id,count:t};await de("rows:imported",r)},"imported"),Q2e={created:kJt,imported:CJt};async function DJt(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(DJt,"created");async function PJt(e){let t={layoutId:e.layoutId,screenId:e._id,roleId:e.routing.roleId,audited:{name:e.routing?.route}};await de("screen:deleted",t)}a(PJt,"deleted");var Y2e={created:DJt,deleted:PJt};async function NJt(e){let t={timezone:e};await de("served:builder",t)}a(NJt,"servedBuilder");async function LJt(e,t,r){let n={appVersion:e.version,timezone:t,embed:r===!0};await de("served:app",n)}a(LJt,"servedApp");async function FJt(e,t){let r={appId:e.appId,appVersion:e.version,timezone:t};await de("served:app:preview",r)}a(FJt,"servedAppPreview");var J2e={servedBuilder:NJt,servedApp:LJt,servedAppPreview:FJt};async function UJt(e,t){let r={tableId:e._id,audited:{name:e.name}};await de("table:created",r,t)}a(UJt,"created");async function MJt(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(MJt,"updated");async function jJt(e,t){let r={tableId:e._id,audited:{name:e.name},appId:t};await de("table:deleted",r)}a(jJt,"deleted");async function BJt(e,t){let r={tableId:e._id,format:t,audited:{name:e.name}};await de("table:exported",r)}a(BJt,"exported");async function qJt(e){let t={tableId:e._id,audited:{name:e.name}};await de("table:imported",t)}a(qJt,"imported");var X2e={created:UJt,updated:MJt,deleted:jJt,exported:BJt,imported:qJt};async function $Jt(e,t){let r={userId:e._id,viaScim:Tc(),audited:{email:e.email}};await de("user:created",r,t)}a($Jt,"created");async function zJt(e){let t={userId:e._id,viaScim:Tc(),audited:{email:e.email}};await de("user:updated",t)}a(zJt,"updated");async function WJt(e){let t={userId:e._id,viaScim:Tc(),audited:{email:e.email}};await de("user:deleted",t)}a(WJt,"deleted");async function GJt(e,t){let r={userId:e._id,audited:{email:e.email}};await de("user:admin:assigned",r,t)}a(GJt,"permissionAdminAssigned");async function VJt(e){let t={userId:e._id,audited:{email:e.email}};await de("user:admin:removed",t)}a(VJt,"permissionAdminRemoved");async function HJt(e,t){let r={userId:e._id,audited:{email:e.email}};await de("user:builder:assigned",r,t)}a(HJt,"permissionBuilderAssigned");async function KJt(e){let t={userId:e._id,audited:{email:e.email}};await de("user:builder:removed",t)}a(KJt,"permissionBuilderRemoved");async function QJt(e){let t={audited:{email:e}};await de("user:invited",t)}a(QJt,"invited");async function YJt(e){let t={userId:e._id,audited:{email:e.email}};await de("user:invite:accepted",t)}a(YJt,"inviteAccepted");async function JJt(e){let t={userId:e._id,audited:{email:e.email}};await de("user:password:force:reset",t)}a(JJt,"passwordForceReset");async function XJt(e){let t={userId:e._id,audited:{email:e.email}};await de("user:password:updated",t)}a(XJt,"passwordUpdated");async function ZJt(e){let t={userId:e._id,audited:{email:e.email}};await de("user:password:reset:requested",t)}a(ZJt,"passwordResetRequested");async function eXt(e){let t={userId:e._id,audited:{email:e.email}};await de("user:password:reset",t)}a(eXt,"passwordReset");async function tXt(e){let t={users:e};await de("user:data:collaboration",t)}a(tXt,"dataCollaboration");var ls={created:$Jt,updated:zJt,deleted:WJt,permissionAdminAssigned:GJt,permissionAdminRemoved:VJt,permissionBuilderAssigned:HJt,permissionBuilderRemoved:KJt,invited:QJt,inviteAccepted:YJt,passwordForceReset:JJt,passwordUpdated:XJt,passwordResetRequested:ZJt,passwordReset:eXt,dataCollaboration:tXt};async function rXt(e,t){let r={name:e.name,type:e.type,tableId:e.tableId};await de("view:created",r,t)}a(rXt,"created");async function nXt(e){let t={tableId:e.tableId};await de("view:updated",t)}a(nXt,"updated");async function iXt(e,t){let r={...Ye.views.isV2(e)?{id:e.id,tableId:e.tableId,appId:t}:{}};await de("view:deleted",r)}a(iXt,"deleted");async function aXt(e,t){let r={tableId:e._id,format:t};await de("view:exported",r)}a(aXt,"exported");async function oXt({tableId:e,filterGroups:t},r){let n={tableId:e,filterGroups:t};await de("view:filter:created",n,r)}a(oXt,"filterCreated");async function sXt({tableId:e,filterGroups:t}){let r={tableId:e,filterGroups:t};await de("view:filter:updated",r)}a(sXt,"filterUpdated");async function uXt(e){let t={tableId:e.tableId};await de("view:filter:deleted",t)}a(uXt,"filterDeleted");async function cXt({tableId:e,calculationType:t},r){let n={tableId:e,calculation:t};await de("view:calculation:created",n,r)}a(cXt,"calculationCreated");async function lXt(e){let t={tableId:e.tableId,calculation:e.calculation};await de("view:calculation:updated",t)}a(lXt,"calculationUpdated");async function fXt(e){let t={tableId:e.tableId,calculation:e.calculation};await de("view:calculation:deleted",t)}a(fXt,"calculationDeleted");async function pXt(e,t){let r={tableId:e};await de("view:join:created",r,t)}a(pXt,"viewJoinCreated");var Z2e={created:rXt,updated:nXt,deleted:iXt,exported:aXt,filterCreated:oXt,filterUpdated:sXt,filterDeleted:uXt,calculationCreated:cXt,calculationUpdated:lXt,calculationDeleted:fXt,viewJoinCreated:pXt};async function dXt(e,t){let r={workspaceAppId:e._id,audited:{name:e.name},appId:t};await de("workspace_app:deleted",r)}a(dXt,"deleted");var eFe={deleted:dXt};function hXt(){}a(hXt,"initAsyncEvents");var mXt=a(async()=>{await Ep.shutdown(),console.log("Events shutdown")},"shutdown");var Ih={};oe(Ih,{creatorsInList:()=>Sy,getAccountHolderFromUsers:()=>HL,hasAdminPermissions:()=>Oh,hasAppBuilderPermissions:()=>aFe,hasBuilderPermissions:()=>cs,isAdmin:()=>Gl,isAdminOrBuilder:()=>iFe,isAdminOrWorkspaceBuilder:()=>WL,isBuilder:()=>dE,isCreatorAsync:()=>LA,isCreatorSync:()=>GL,isGlobalBuilder:()=>nFe,validateUniqueUser:()=>VL});async function nK(e){let t=[],r=await tFe(e);t.push(...r.map(s=>s.email));let n=await rFe(e);t.push(...n.map(s=>s._id));let i=await lE(e);t.push(...i.map(s=>s.email));let o=await S9(e);return t.push(...o.map(s=>s.email)),[...new Set(t.map(s=>s.toLowerCase()))]}a(nK,"searchExistingEmails");async function zL(e){return await Lx("platform_users_lowercase_2",{keys:[e.toLowerCase()],include_docs:!0})}a(zL,"getPlatformUsers");async function NA(e){return(await zL(e))[0]??null}a(NA,"getFirstPlatformUser");async function tFe(e){let r={keys:e.map(i=>i.toLowerCase()),include_docs:!0},n={arrayResponse:!0};return await ep("by_email2",r,void 0,n)}a(tFe,"getExistingTenantUsers");async function rFe(e){let r={keys:e.map(n=>n.toLowerCase()),include_docs:!0};return await Lx("platform_users_lowercase_2",r)}a(rFe,"getExistingPlatformUsers");async function lE(e){let r={keys:e.map(n=>n.toLowerCase()),include_docs:!0};return await Lx("account_by_email",r)}a(lE,"getExistingAccounts");var dE=Zi.users.isBuilder,Gl=Zi.users.isAdmin,nFe=Zi.users.isGlobalBuilder,iFe=Zi.users.isAdminOrBuilder,Oh=Zi.users.hasAdminPermissions,cs=Zi.users.hasBuilderPermissions,aFe=Zi.users.hasAppBuilderPermissions,WL=Zi.users.isAdminOrWorkspaceBuilder;async function Sy(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(Sy,"creatorsInList");async function LA(e){let t=[];return e.userGroups&&(t=await Rr().getMultiple(e.userGroups)),GL(e,t)}a(LA,"isCreatorAsync");function GL(e,t){let r=Zi.users.isCreator(e);return!r&&e?gXt(e,t):r}a(GL,"isCreatorSync");function gXt(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(gXt,"isCreatorByGroupMembership");async function VL(e,t){if(K.MULTI_TENANCY){let r=await NA(e);if(r!=null&&r.tenantId!==t)throw new wp(e)}if(!K.SELF_HOSTED&&!K.DISABLE_ACCOUNT_PORTAL){let r=await hy(e);if(r&&r.verified&&r.tenantId!==t)throw new wp(e)}}a(VL,"validateUniqueUser");async function HL(e){if(!K.SELF_HOSTED&&!K.DISABLE_ACCOUNT_PORTAL){let t=await lE(e.map(r=>r.email));return e.find(r=>t.map(n=>n.email).includes(r.email))}}a(HL,"getAccountHolderFromUsers");var iK=a(async e=>{await ls.deleted(e),cs(e)&&await ls.permissionBuilderRemoved(e),Oh(e)&&await ls.permissionAdminRemoved(e)},"handleDeleteEvents"),yXt=a(async(e,t,r)=>{for(let[n,i]of Object.entries(t))(!r||r[n]!==i)&&await PA.assigned(e,i)},"assignAppRoleEvents"),bXt=a(async(e,t,r)=>{if(r)for(let[n,i]of Object.entries(r))(!t||t[n]!==i)&&await PA.unassigned(e,i)},"unassignAppRoleEvents"),vXt=a(async(e,t)=>{let r=e.roles,n=t?.roles;await yXt(e,r,n),await bXt(e,r,n)},"handleAppRoleEvents"),aK=a(async(e,t)=>{let r=Pt(),n;!K.SELF_HOSTED&&!K.DISABLE_ACCOUNT_PORTAL&&(n=await rA(r)),await qc.identifyUser(e,n),t?(await ls.updated(e),EXt(e,t)&&await ls.permissionBuilderRemoved(e),SXt(e,t)&&await ls.permissionAdminRemoved(e),!t.forceResetPassword&&e.forceResetPassword&&e.password&&await ls.passwordForceReset(e),e.password!==t.password&&await ls.passwordUpdated(e)):await ls.created(e),wXt(e,t)&&await ls.permissionBuilderAssigned(e),_Xt(e,t)&&await ls.permissionAdminAssigned(e),await vXt(e,t)},"handleSaveEvents"),wXt=a((e,t)=>oFe(e,t,cs),"isAddingBuilder"),EXt=a((e,t)=>sFe(e,t,cs),"isRemovingBuilder"),_Xt=a((e,t)=>oFe(e,t,Oh),"isAddingAdmin"),SXt=a((e,t)=>sFe(e,t,Oh),"isRemovingAdmin"),oFe=a((e,t,r)=>!(!r(e)||t&&r(t)),"isAddingPermission"),sFe=a((e,t,r)=>!(r(e)||!t||!r(t)),"isRemovingPermission");var AXt=a(async e=>{let t=e._id;await zl.removeUser(e),await iK(e),await kh.invalidateUser(t),await iA(t,{reason:"bulk-deletion"})},"bulkDeleteProcessing"),Vl=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()||Vb(t)?!0:(r||(r=await rA(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=ePe(s);if(!p.valid)throw new ve(p.error,400)}c=r.hashPassword?await Y4(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||rw();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(Eg(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 oK(t.appId,{limit:t.limit||50})}static async getUserByEmail(t){return $c(t)}static async getUser(t){let r=await xy(t);return r&&delete r.password,r}static async bulkGet(t){return await KL(t)}static async bulkUpdate(t){return await FA(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 xy(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 $c(o),l&&l._id!==s))throw new wp(o);let f=1,p=0;if((r.isAccountHolder||l)&&(f=0,p=1),l){let[d,h]=await Sy([l,t]);p=d!==h?1:0}return e.quotas.addUsers(f,p,async()=>{r.isAccountHolder||await VL(o,n);let d=await e.buildUser(t,r,n,l);r.currentUserId&&r.currentUserId===l?._id&&(d=sK(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 aK(d,l),l&&d.email!==l.email&&await zl.removeUser({email:l.email}),await zl.addUser(n,d._id,d.email,d.ssoId),await kh.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 nK(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 LA(d)&&s.push(d)}let f=await rA(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 FA(d);for(let m of d)await zl.addUser(n,m._id,m.email),await aK(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 HL(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 FA(u),f=(await Sy(s)).filter(h=>h).length,p=[];for(let h of s){let g=(await NA(h._id)).ssoId;g&&(await zL(g)).filter(b=>b.ssoId==null).forEach(b=>{p.push({...b,_deleted:!0})}),await AXt(h)}await dy().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 hy(s))throw n.userId===$f()._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 LA(n)?1:0;await e.quotas.removeUsers(1,o),await iK(n),await kh.invalidateUser(i),await iA(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 Jw(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 UA(e){return Array.isArray(e)?e.map(t=>{if(t)return delete t.password,t}):e&&(delete e.password,e)}a(UA,"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=UA(n)),n}a(KL,"bulkGetGlobalUsersById");async function OXt(){let e=Rr(),t=`us${Fe}`;return(await e.allDocs({startkey:t,endkey:`${t}${La}`})).rows.map(n=>n.id)}a(OXt,"getAllUserIds");async function IXt(){let e=Rr(),t=`us${Fe}`;return(await e.allDocs({startkey:t,endkey:`${t}${La}`,include_docs:!0})).rows.map(n=>n.doc)}a(IXt,"getAllUsers");async function FA(e){return await Rr().bulkDocs(e)}a(FA,"bulkUpdateGlobalUsers");async function xy(e,t){let n=await Rr().get(e);return t?.cleanup&&(n=UA(n)),n}a(xy,"getById");async function $c(e,t){if(e==null)throw"Must supply an email address to view";let r=await ep("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=UA(n)),n}a($c,"getGlobalUserByEmail");async function kXt(e){try{let t=await $c(e);if(Array.isArray(t)||t!=null)return!0}catch{return!1}return!1}a(kXt,"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 ep("by_app",n);i||(i=[]);let o=Array.isArray(i)?i:[i];return r?.cleanup&&(o=UA(o)),o}a(QL,"searchGlobalUsersByApp");async function oK(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(oK,"searchGlobalUsersByAppAccess");function uFe(e,t){if(t)return I1(Ws(e),t._id)}a(uFe,"getGlobalUserByAppPage");async function cFe(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 ep("by_email2",{...t,startkey:i,endkey:`${n}${La}`});o||(o=[]);let s=Array.isArray(o)?o:[o];return r?.cleanup&&(s=UA(s)),s}a(cFe,"searchGlobalUsersByEmail");var CXt=8;async function lFe({bookmark:e,query:t,appId:r,limit:n}={}){let i=Rr(),o=n??CXt,u={include_docs:!0,limit:o+1};e&&(u.startkey=e);let c,l="_id",f;return t?.equal?._id?c=[await xy(t.equal._id)]:r?(c=await QL(r,u),f=a(p=>uFe(r,p),"getKey")):t?.string?.email?(c=await cFe(t?.string?.email,u),l="email"):t?.oneOf?._id?c=await KL(t?.oneOf?._id,{cleanup:!0}):t?(c=(await i.allDocs(Eg(null,{...u,limit:void 0}))).rows.map(d=>d.doc),c=Lr.search(c,{query:t,limit:u.limit}).rows):c=(await i.allDocs(Eg(null,u))).rows.map(d=>d.doc),hz(c,o,{paginate:!0,property:l,getKey:f})}a(lFe,"paginatedUsers");async function DXt(){return(await yz("by_email2",{limit:0,include_docs:!1})).total_rows}a(DXt,"getUserCount");async function PXt(){let e=0;async function t(r){let n=await lFe({bookmark:r}),i=await Sy(n.data);e+=i.filter(o=>o).length,n.hasNextPage&&await t(n.nextPage)}return a(t,"iterate"),await t(),e}a(PXt,"getCreatorCount");function NXt(e){return delete e.admin,delete e.builder,e}a(NXt,"removePortalUserPermissions");function sK(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(sK,"cleanseUserObject");async function LXt(e,t){let r=Ws(t);e.builder??={},e.builder.creator=!0,e.builder.apps??=[],e.builder.apps.push(r),await Vl.save(e,{hashPassword:!1})}a(LXt,"addAppBuilder");async function FXt(e,t){let r=Ws(t);e.builder&&e.builder.apps?.includes(r)&&(e.builder.apps=e.builder.apps.filter(n=>n!==r)),await Vl.save(e,{hashPassword:!1})}a(FXt,"removeAppBuilder");var fFe=3600;async function UXt(e,t){let n=await Ez(t).get(e);if(n.budibaseAccess=!0,!K.SELF_HOSTED&&!K.DISABLE_ACCOUNT_PORTAL){let i=await hy(n.email);i&&(n.account=i,n.accountPortalAccess=!0)}return n}a(UXt,"populateFromDB");async function MXt(e){let t=await Vl.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 hy(i.email);o&&(i.account=o,i.accountPortalAccess=!0)}})),r.length?{users:n,notFoundIds:r}:{users:n}}a(MXt,"populateUsersFromDB");async function MA({userId:e,tenantId:t,email:r,populateUser:n}){if(n||(n=UXt),!t)try{t=Pt()}catch{t=await zl.lookupTenantId(e)}let i=await Ix(),o=await i.get(e);return o||(o=await n(e,t,r),await i.store(e,o,fFe)),o&&!o.tenantId&&t&&(o.tenantId=t),o.userGroups&&!Zi.users.isGlobalBuilder(o)&&await ts(t,async()=>{let s=await Vl.getGroupBuilderAppIds(o);if(s.length){let u=o.builder?.apps||[];o.builder={apps:[...new Set(u.concat(s))]}}}),o}a(MA,"getUser");async function jXt(e){let t=await Ix(),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 MXt(n);o=s.notFoundIds;for(let u of s.users)await t.store(u._id,u,fFe);i.push(...s.users)}return{users:i,notFoundIds:o}}a(jXt,"getUsers");async function jA(e){await(await Ix()).delete(e)}a(jA,"invalidateUser");var OK={};oe(OK,{Writethrough:()=>TK});var zc={};oe(zc,{AUTO_EXTEND_POLLING_MS:()=>KUe,doWithLock:()=>SK,newRedlock:()=>Ry});var HUe=ne(VUe());async function oZt(e,t){if(e==="custom")return Ry(t);switch(e){case"try_once":return Ry(bE.TRY_ONCE);case"try_twice":return Ry(bE.TRY_TWICE);case"default":return Ry(bE.DEFAULT);case"delay_500":return Ry(bE.DELAY_500);case"auto_extend":return Ry(bE.AUTO_EXTEND);default:throw Mt.unreachable(e)}}a(oZt,"getClient");var bE={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 Ry(e={}){let t={...bE.DEFAULT,...e},n=(await cz()).client;return new HUe.default([n],t)}a(Ry,"newRedlock");function sZt(e){let r=`lock:${e.systemLock?"system":Pt()}_${e.name}`;return e.resource&&(r=r+`_${e.resource}`),r}a(sZt,"getLockName");var KUe=gi.fromSeconds(10).toMs();async function SK(e,t){let r=await oZt(e.type,e.customOptions),n,i;try{let o=sZt(e),s=e.type==="auto_extend"?KUe: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(SK,"doWithLock");var QUe=1e4,xK=null;async function n2(){if(!xK){let e=await uz();xK=new cy(e)}return xK}a(n2,"getCache");function $A(e,t){return e.name+t}a($A,"makeCacheKey");function RK(e,t=null){return{doc:e,lastWrite:t||Date.now()}}a(RK,"makeCacheItem");async function uZt(e,t,r=QUe){let n=await n2(),i=t._id,o;i&&(o=await n.get($A(e,i)));let s=!o||o.lastWrite<Date.now()-r,u=t;return s&&((await SK({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;Yw("Ignoring conflict in write-through cache")}})).executed||Yw("Ignoring redlock conflict in write-through cache")),o=RK(u,s?null:o?.lastWrite),u._id&&await n.store($A(e,u._id),o),{ok:!0,id:u._id,rev:u._rev}}a(uZt,"put");async function cZt(e,t){let r=await n2(),n=$A(e,t),i=await r.get(n);if(!i){let o=await e.get(t);i=RK(o),await r.store(n,i)}return i.doc}a(cZt,"get");async function lZt(e,t){let r=await n2(),n=$A(e,t),i=await r.get(n);if(!i){let o=await e.tryGet(t);if(!o)return null;i=RK(o),await r.store(n,i)}return i.doc}a(lZt,"tryGet");async function fZt(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($A(e,i))}finally{await e.remove(i,r)}}a(fZt,"remove");var TK=class{static{a(this,"Writethrough")}constructor(t,r=QUe){this.db=t,this.writeRateMs=r}async put(t,r=this.writeRateMs){return uZt(this.db,t,r)}async get(t){return cZt(this.db,t)}async tryGet(t){return lZt(this.db,t)}async remove(t,r){return fZt(this.db,t,r)}};function i2(e){return`config${Fe}${e}`}a(i2,"generateConfigID");async function Uu(e){let t=Rr();try{return await t.get(i2(e))}catch(r){if(r.status===404)return;throw r}}a(Uu,"getConfig");async function pZt(e){return e._id||(e._id=i2(e.type)),Rr().put(e)}a(pZt,"save");async function fE(){let e=await Uu("settings");return e||(e={_id:i2("settings"),type:"settings",config:{}}),e.config.platformUrl=await WA({tenantAware:!0,config:e.config}),e.config.analyticsEnabled=await iL({config:e.config}),e}a(fE,"getSettingsConfigDoc");async function kK(){return(await fE()).config}a(kK,"getSettingsConfig");async function WA(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 Uu("settings"))?.config;r?.platformUrl&&(t=r.platformUrl)}return t}a(WA,"getPlatformUrl");var iL=a(async e=>{if(!K.SELF_HOSTED)return!!K.ENABLE_ANALYTICS;let t=await vh(sa.ANALYTICS_ENABLED,86400,async()=>{let n=e?.config?e.config:(await Uu("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 dZt(){return await Uu("google")}a(dZt,"getGoogleConfigDoc");async function a2(){return(await dZt())?.config}a(a2,"getGoogleConfig");async function CK(){if(!K.SELF_HOSTED)return IK();let e=await a2();return(!e||!e.activated)&&(e=IK()),e}a(CK,"getGoogleDatasourceConfig");function IK(){if(K.GOOGLE_CLIENT_ID&&K.GOOGLE_CLIENT_SECRET)return{clientID:K.GOOGLE_CLIENT_ID,clientSecret:K.GOOGLE_CLIENT_SECRET,activated:!0}}a(IK,"getDefaultGoogleConfig");async function hZt(){return Uu("logos_oidc")}a(hZt,"getOIDCLogosDoc");async function mZt(){return Uu("oidc")}a(mZt,"getOIDCConfigDoc");async function gZt(){let e=(await mZt())?.config;return e?.configs&&e.configs[0]}a(gZt,"getOIDCConfig");async function DK(e){let t=(await Uu("oidc"))?.config;return t&&t.configs.filter(r=>r.uuid===e)[0]}a(DK,"getOIDCConfigById");async function YUe(){return Uu("smtp")}a(YUe,"getSMTPConfigDoc");async function yZt(e){let t=await YUe();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(yZt,"getSMTPConfig");async function bZt(){return(await Uu("scim"))?.config}a(bZt,"getSCIMConfig");async function vZt(){return Uu("ai")}a(vZt,"getAIConfig");async function wZt(){return Uu("recaptcha")}a(wZt,"getRecaptchaConfig");var Dr={};oe(Dr,{AccessController:()=>LK,BUILTIN_ROLE_IDS:()=>FK,Role:()=>Ph,RoleHierarchyTraversal:()=>o2,RoleIDVersion:()=>UK,builtinRoleToNumber:()=>GA,checkForRoleResourceArray:()=>eMe,externalRole:()=>AZt,findRole:()=>VA,getAllRoleIds:()=>kZt,getAllRoles:()=>qK,getBuiltinRole:()=>XUe,getBuiltinRoles:()=>jK,getDBRoleID:()=>tMe,getExternalRoleID:()=>Nh,getExternalRoleIDs:()=>rMe,getRole:()=>RZt,getUserRoleHierarchy:()=>BK,getUserRoleIdHierarchy:()=>ZUe,isBuiltin:()=>Oy,lowerBuiltinRoleID:()=>TZt,prefixRoleIDNoBuiltin:()=>NK,roleIDsAreEqual:()=>Mu,roleToNumber:()=>xZt,saveRoles:()=>OZt,validInherits:()=>SZt});var JUe=require("lodash"),s2=ne(require("lodash/fp/cloneDeep")),PK=ne(J7());var FK={ADMIN:"ADMIN",POWER:"POWER",BASIC:"BASIC",PUBLIC:"PUBLIC"},Un={...FK,BUILDER:"BUILDER"},UK={UUID:void 0,NAME:"name"};function _Zt(e,t){return Array.isArray(t)?t.filter(r=>e.includes(r)).length===t.length:e.includes(t)}a(_Zt,"rolesInList");var Ph=class{constructor(t,r,n,i){this.permissions={};this._id=t,this.name=r,this.uiMetadata=i,this.permissionId=n,this.version=UK.NAME}static{a(this,"Role")}addInheritance(t){return t&&typeof t=="string"?t=NK(t):t&&Array.isArray(t)&&(t=t.map(NK)),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=VA(o,n,r);s&&(i=i.concat(this.walk(s)))}else{let o=[],s=t;for(;s&&s.inherits&&!_Zt(o,s.inherits);){if(Array.isArray(s.inherits))return i.concat(this.walk(s));if(o.push(s.inherits),s=VA(s.inherits,n,r),s&&i.push(s),Ye.roles.checkForRoleInheritanceLoops(i))break}}return(0,JUe.uniqBy)(i,o=>o._id)}},MK={ADMIN:new Ph(Un.ADMIN,Un.ADMIN,"admin",{displayName:"App admin",description:"Can do everything",color:"var(--spectrum-global-color-static-red-400)"}).addInheritance(Un.POWER),POWER:new Ph(Un.POWER,Un.POWER,"power",{displayName:"App power user",description:"An app user with more access",color:"var(--spectrum-global-color-static-orange-400)"}).addInheritance(Un.BASIC),BASIC:new Ph(Un.BASIC,Un.BASIC,"write",{displayName:"App user",description:"Any logged in user",color:"var(--spectrum-global-color-static-green-400)"}).addInheritance(Un.PUBLIC),PUBLIC:new Ph(Un.PUBLIC,Un.PUBLIC,"public",{displayName:"Public user",description:"Accessible to anyone",color:"var(--spectrum-global-color-static-blue-400)"}),BUILDER:new Ph(Un.BUILDER,Un.BUILDER,"admin",{displayName:"Builder user",description:"Users that can edit this app",color:"var(--spectrum-global-color-static-magenta-600)"})};function jK(){return(0,s2.default)(MK)}a(jK,"getBuiltinRoles");function Oy(e){return Object.values(FK).includes(e)}a(Oy,"isBuiltin");function NK(e){return Oy(e)?e:Xf(e)}a(NK,"prefixRoleIDNoBuiltin");function XUe(e){let t=Object.values(MK).find(r=>e.includes(r._id));if(t)return(0,s2.default)(t)}a(XUe,"getBuiltinRole");function SZt(e,t){if(!t)return!1;let r=a(n=>e.find(i=>Mu(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(SZt,"validInherits");function GA(e){let t=jK(),r=Object.values(t).length+1;if(Mu(e,Un.ADMIN)||Mu(e,Un.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(GA,"builtinRoleToNumber");async function xZt(e){if(Oy(e))return GA(e);let t=await BK(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=>Mu(u._id,o));if(s)return r(s)+1}).filter(o=>o).sort().pop();if(i!=null)return i}else if(Oy(n.inherits))return GA(n.inherits)+1;return 0},"findNumber");return Math.max(...t.map(r))}a(xZt,"roleToNumber");function TZt(e,t){return e?t&&GA(e)>GA(t)?t:e:t}a(TZt,"lowerBuiltinRoleID");function Mu(e,t){return Xf(e)===Xf(t)}a(Mu,"roleIDsAreEqual");function AZt(e){let t;return e._id&&(t=Nh(e._id)),{...e,_id:t,inherits:rMe(e.inherits,e.version)}}a(AZt,"externalRole");function VA(e,t,r){let n=XUe(e);n||(e=Xf(e));let i=t.find(o=>o._id&&Mu(o._id,e));return!i&&!Oy(e)&&r?.defaultPublic?(0,s2.default)(MK.PUBLIC):(n=Object.assign(n||{},i),n?._id&&(n._id=Nh(n._id,n.version)),Object.keys(n).length===0?void 0:n)}a(VA,"findRole");async function RZt(e,t){let r=ew(),n=[];if(!Oy(e)){let i=await r.tryGet(tMe(e));i&&n.push(i)}return VA(e,n,t)}a(RZt,"getRole");async function OZt(e){await ew().bulkDocs(e.filter(r=>r._id).map(r=>({...r,_id:Xf(r._id)})))}a(OZt,"saveRoles");async function IZt(e,t){let r=await qK();if(Mu(e,Un.ADMIN))return r;let n=VA(e,r,t),i=[];return n&&(i=new o2(r,t).walk(n)),i}a(IZt,"getAllUserRoles");async function ZUe(e){return(await BK(e)).map(r=>r._id)}a(ZUe,"getUserRoleIdHierarchy");async function BK(e,t){return IZt(e,t)}a(BK,"getUserRoleHierarchy");function eMe(e,t){if(e&&!Array.isArray(e[t])){let r=e[t];e[t]=[r],r==="write"&&e[t].push("read")}return e}a(eMe,"checkForRoleResourceArray");async function kZt(e){return(await qK(e)).map(r=>r._id)}a(kZt,"getAllRoleIds");async function qK(e){if(e)return zs(e,t);{let r;try{r=ew()}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=Nh(u._id,u.version)));let i=jK(),o=[];!r||await CZt(r)?o=[Un.ADMIN,Un.POWER,Un.BASIC,Un.PUBLIC]:o=[Un.ADMIN,Un.BASIC,Un.PUBLIC];for(let s of o){let u=i[s],c=n.filter(l=>Mu(l._id,s))[0];c==null?n.push(u||i.BASIC):(n=n.filter(l=>l._id!==c._id),c._id=Nh(u._id,c.version),n.push({...u,...c,name:u.name,_id:Nh(u._id,u.version)}))}for(let s of n)if(s.permissions)for(let u of Object.keys(s.permissions))s.permissions=eMe(s.permissions,u);return n}a(t,"internal")}a(qK,"getAllRoles");async function CZt(e){let r=(await e.tryGet("app_metadata"))?.creationVersion;return!r||!PK.default.valid(r)?!0:!PK.default.gte(r,K.MIN_VERSION_WITHOUT_POWER_ROLE)}a(CZt,"shouldIncludePowerRole");var LK=class{static{a(this,"AccessController")}constructor(){this.userHierarchies={}}async hasAccess(t,r){if(t==null||t===""||Mu(t,Un.BUILDER)||Mu(r,t)||Mu(r,Un.BUILDER))return!0;let n=r?this.userHierarchies[r]:null;return!n&&r&&(n=await ZUe(r),this.userHierarchies[r]=n),n?.find(i=>Mu(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 tMe(e){return e?.startsWith("role")?e:Xf(e)}a(tMe,"getDBRoleID");function Nh(e,t){if(e.startsWith(`role${Fe}`)&&(Oy(e)||t===UK.NAME)){let r=e.split(Fe);return r.shift(),r.join(Fe)}return e}a(Nh,"getExternalRoleID");function rMe(e,t){return e&&(typeof e=="string"?Nh(e,t):e.map(r=>Nh(r,t)))}a(rMe,"getExternalRoleIDs");var Ri={};oe(Ri,{BUILDER:()=>FZt,BUILTIN_PERMISSIONS:()=>u2,CREATOR:()=>UZt,GLOBAL_BUILDER:()=>MZt,PermissionImpl:()=>Mn,PermissionLevel:()=>hd,PermissionType:()=>vS,doesHaveBasePermission:()=>NZt,getAllowedLevels:()=>oMe,getBuiltinPermissionByID:()=>PZt,getBuiltinPermissions:()=>DZt,isPermissionLevelHigherThanRead:()=>LZt,levelToNumber:()=>aMe});var nMe=ne(require("lodash/flatten")),iMe=ne(require("lodash/fp/cloneDeep"));var Mn=class{static{a(this,"PermissionImpl")}constructor(t,r){this.type=t,this.level=r}};function aMe(e){switch(e){case"execute":return 0;case"read":return 1;case"write":return 2;case"admin":return 3;default:return-1}}a(aMe,"levelToNumber");function oMe(e){switch(e){case"execute":return["execute"];case"read":return["execute","read"];case"write":case"admin":return["execute","read","write"];default:return[]}}a(oMe,"getAllowedLevels");var u2={PUBLIC:{_id:"public",name:"Public",permissions:[new Mn("webhook","execute")]},READ_ONLY:{_id:"read_only",name:"Read only",permissions:[new Mn("query","read"),new Mn("table","read"),new Mn("app","read")]},WRITE:{_id:"write",name:"Read/Write",permissions:[new Mn("query","write"),new Mn("table","write"),new Mn("automation","execute"),new Mn("legacy_view","read"),new Mn("app","read")]},POWER:{_id:"power",name:"Power",permissions:[new Mn("table","write"),new Mn("user","read"),new Mn("automation","execute"),new Mn("webhook","read"),new Mn("legacy_view","read"),new Mn("app","read")]},ADMIN:{_id:"admin",name:"Admin",permissions:[new Mn("table","admin"),new Mn("user","admin"),new Mn("automation","admin"),new Mn("webhook","read"),new Mn("query","admin"),new Mn("legacy_view","read"),new Mn("app","read")]}};function DZt(){return(0,iMe.default)(u2)}a(DZt,"getBuiltinPermissions");function PZt(e){return Object.values(u2).find(r=>r._id===e)}a(PZt,"getBuiltinPermissionByID");function NZt(e,t,r){let n=[...new Set(r.map(s=>s.permissionId))],i=Object.values(u2),o=(0,nMe.default)(i.filter(s=>n.indexOf(s._id)!==-1).map(s=>s.permissions));for(let s of o)if(s.type===e&&oMe(s.level).indexOf(t)!==-1)return!0;return!1}a(NZt,"doesHaveBasePermission");function LZt(e){return aMe(e)>1}a(LZt,"isPermissionLevelHigherThanRead");var FZt="builder",UZt="creator",MZt="globalBuilder";var c2=ne(require("crypto")),uMe=ne(require("dd-trace")),cMe=require("lodash"),BZt=ne(I7());var sMe;function lMe(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(lMe,"parseEnvFlags");function qZt(){return lMe(K.TENANT_FEATURE_FLAGS||"")}a(qZt,"getEnvFlags");var $K=class{constructor(t){this.flagSchema=t;this.setId=c2.randomUUID()}static{a(this,"FlagSet")}defaults(){return(0,cMe.cloneDeep)(this.flagSchema)}isFlagName(t){return this.flagSchema[t]!==void 0}async isEnabled(t){return(await this.fetch())[t]}async fetch(){return await uMe.default.trace("features.fetch",async t=>{let r=tz(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 qZt())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=$f(),c=u?._id;if(!c){let p=Z5();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,sMe&&c){n.readFromPostHog=!0;let p=await fE(),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 sMe.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=nz();for(let[p,d]of Object.entries(f))this.isFlagName(p)&&typeof d=="boolean"&&(i[p]=d,n[`flags.${p}.source`]="override");rz(this.setId,i);for(let[p,d]of Object.entries(i))n[`flags.${p}.value`]=d;return t?.addTags(n),i})}},$Zt={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},iun=new $K($Zt);var tr={};oe(tr,{adminOnly:()=>R2,auditLog:()=>O2,authError:()=>Ga,buildAuthMiddleware:()=>xgr,buildCsrfMiddleware:()=>Agr,buildTenancyMiddleware:()=>Tgr,builderOnly:()=>N2,builderOrAdmin:()=>L2,google:()=>kp,internalApi:()=>U2,joiValidator:()=>JA,oidc:()=>$p,passport:()=>Rgr,platformLogout:()=>Dgr,refreshOAuthToken:()=>kgr,ssoCallbackUrl:()=>Fh,updateUserOAuth:()=>Cgr,workspaceBuilderOrAdmin:()=>LU});var FU={};oe(FU,{adminOnly:()=>R2,auditLog:()=>O2,authError:()=>Ga,authenticated:()=>P2,builderOnly:()=>N2,builderOrAdmin:()=>L2,correlation:()=>dMe,csp:()=>kBe,csrf:()=>F2,datasource:()=>sgr,errorHandling:()=>DBe,featureFlagCookie:()=>PBe,google:()=>kp,internalApi:()=>U2,ip:()=>NBe,joiValidator:()=>JA,local:()=>xE,oidc:()=>$p,pino:()=>_Be,querystringToBody:()=>GGe,ssoCallbackUrl:()=>Fh,tenancy:()=>NU,workspaceBuilderOrAdmin:()=>LU});var pMe=require("uuid");var GZt=M1(),dMe=a((e,t)=>{let r=e.headers["x-budibase-correlation-id"];return r||(r=(0,pMe.v4)()),GZt.withId(r,()=>t())},"correlationMiddleware");var Cnr=EBe(),Dnr=M1();function Pnr(){return{logger:KN,genReqId:Dnr.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(Pnr,"pinoSettings");function Nnr(){return K.HTTP_LOGGING?Cnr(Pnr()):(e,t)=>t()}a(Nnr,"getMiddleware");var _Be=Nnr();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 Lnr=/\/:(.*?)(\/.*)?$/g,Dy=a(e=>e?e.map(t=>{let r=t.route,n=t.method,i=r.match(Lnr);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"),Py=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 Gc={};oe(Gc,{SecretOption:()=>TBe,decrypt:()=>BQ,decryptFile:()=>qnr,encrypt:()=>Mnr,encryptFile:()=>jnr,getSecret:()=>jQ});var Tp=ne(require("crypto")),Lh=ne(require("fs")),FQ=require("path"),UQ=ne(require("zlib"));var I2="aes-256-ctr",xBe="-",Fnr=1e4,Unr=32,k2=16,MQ=16,TBe=(r=>(r.API="api",r.ENCRYPTION="encryption",r))(TBe||{});function jQ(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(jQ,"getSecret");function C2(e,t){return Tp.default.pbkdf2Sync(e,new Uint8Array(t),Fnr,Unr,"sha512")}a(C2,"stretchString");function Mnr(e,t="api"){let r=Tp.default.randomBytes(k2),n=C2(jQ(t),r),i=Tp.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")}${xBe}${u}`}a(Mnr,"encrypt");function BQ(e,t="api"){let[r,n]=e.split(xBe),i=Buffer.from(r,"hex"),o=C2(jQ(t),i),s=Tp.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(BQ,"decrypt");async function jnr({dir:e,filename:t},r){let n=`${t}.enc`,i=(0,FQ.join)(e,t);if(Lh.default.lstatSync(i).isDirectory())throw new Error("Unable to encrypt directory");let o=Lh.default.createReadStream(i),s=Lh.default.createWriteStream((0,FQ.join)(e,n)),u=Tp.default.randomBytes(k2),c=Tp.default.randomBytes(MQ),l=C2(r,u),f=Tp.default.createCipheriv(I2,new Uint8Array(l),new Uint8Array(c));return s.write(u),s.write(c),o.pipe(UQ.default.createGzip()).pipe(f).pipe(s),new Promise(p=>{s.on("finish",()=>{p({filename:n,dir:e})})})}a(jnr,"encryptFile");async function Bnr(e){let t=Lh.default.createReadStream(e),r=await SBe(t,k2),n=await SBe(t,MQ);return t.close(),{salt:r,iv:n}}a(Bnr,"getSaltAndIV");async function qnr(e,t,r){if(Lh.default.lstatSync(e).isDirectory())throw new Error("Unable to decrypt directory");let{salt:n,iv:i}=await Bnr(e),o=Lh.default.createReadStream(e,{start:k2+MQ}),s=Lh.default.createWriteStream(t),u=C2(r,n),c=Tp.default.createDecipheriv(I2,new Uint8Array(u),new Uint8Array(i)),l=UQ.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(qnr,"decryptFile");function SBe(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(SBe,"readBytes");var RBe=ne(require("dd-trace"));var znr=K.SESSION_UPDATE_PERIOD?parseInt(K.SESSION_UPDATE_PERIOD):60*1e3;function Wnr(){return new Date(Date.now()-znr).toISOString()}a(Wnr,"timeMinusOneMinute");function ABe(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(ABe,"finalise");async function Gnr(e,t){if(jx(e))return{valid:!0,user:void 0};let n=BQ(e).split(Fe)[0];return ts(n,async()=>{let i;try{let o=Rr();i=await ep("by_api_key",{key:e},o)}catch{i=void 0}if(i)return{valid:!0,user:await MA({userId:i,tenantId:n,populateUser:t})};throw new eL})}a(Gnr,"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?Dy(e):[];return async(n,i)=>{let o=!1,s=D2(n,"x-budibase-api-version");Py(n,r)&&(o=!0);try{let c=D2(n,"x-budibase-token"),l=rp(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 rPe(v,b),t&&t.populateUser?h=await MA({userId:v,tenantId:w.tenantId,email:w.email,populateUser:t.populateUser(n)}):h=await MA({userId:v,tenantId:w.tenantId,email:w.email}),h.csrfToken=w.csrfToken,g="cookie",w?.lastAccessedAt<Wnr()&&await tPe(w),d=!0}catch(x){d=!1,console.error(`Auth Error: ${x.message}`),Jd(n,"budibase:auth")}}if(!d&&f){let b=t.populateUser?t.populateUser(n):null,{valid:v,user:w}=await Gnr(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)&&RBe.default.setUser({id:h._id,tenantId:h.tenantId,budibaseAccess:h.budibaseAccess,status:h.status}),ABe(n,{authenticated:d,user:h,internal:m,version:s,publicEndpoint:o,loginMethod:g}),y(h)?e6(h,n,i):i()}catch(c){if(console.error(`Auth Error: ${c.message}`),c?.name==="JsonWebTokenError"?Jd(n,"budibase:auth"):c?.code==="invalid_api_key"&&n.throw(403,c.message),t&&t.publicAllowed||o)return ABe(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 Sg(e);return!r&&!K.isWorker()?e.throw(403,"This request required a workspace id."):!r&&!cs(e.user)?e.throw(403,"Builder user only endpoint."):r&&!dE(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 Sg(e);return!r&&!K.isWorker()?e.throw(403,"This request required a workspace id."):!r&&!cs(e.user)?e.throw(403,"Admin/Builder user only endpoint."):r&&!dE(e.user,r)&&e.throw(403,"Workspace Admin/Builder user only endpoint."),t()}a(L2,"builderOrAdmin");var IBe=ne(require("crypto"));var OBe={"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'"]},Vnr=/^[A-Za-z0-9-*:/.]+$/,kBe=a(async(e,t)=>{let r=IBe.default.randomBytes(16).toString("base64");e.state.nonce=r;let n={...OBe};if(n["script-src"]=[...OBe["script-src"],`'nonce-${r}'`],e.user?.license?.features.includes("customAppScripts")&&e.appId)try{let s=await Cx.getWorkspaceMetadata(e.appId);if("name"in s)for(let u of s.scripts||[]){let c=(u.cspWhitelist||"").split(`
536
536
  `).filter(l=>Vnr.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 Hnr=["GET","HEAD","OPTIONS"],Knr=["application/x-www-form-urlencoded","multipart/form-data","text/plain"];function F2(e={noCsrfPatterns:[]}){let t=Dy(e.noCsrfPatterns);return async(r,n)=>{if(Py(r,t)||Hnr.indexOf(r.method)!==-1)return n();let o=r.get("content-type")?r.get("content-type").toLowerCase():"";if(!Knr.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 CBe(e){if(e.includes("-----BEGIN PRIVATE KEY-----"))return!0;for(let t of zfe){let r=K[t];if(!(typeof r!="string"||r==="")&&e.includes(r))return!0}return!1}a(CBe,"stringContainsSecret");async function DBe(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:YDe(r)};if(CBe(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(DBe,"errorHandling");var PBe=a(async(e,t)=>{let n=rp(e,"budibase:featureflags")?.flags||{};await iz(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"),jx(r)||e.throw(403,"Unauthorized"),t()}a(U2,"internalApi");async function NBe(e,t){return e.ip?await ez(e.ip,()=>t()):t()}a(NBe,"ip");var JA={};oe(JA,{body:()=>Qnr,params:()=>Ynr});var qQ=ne(require("joi"));function LBe(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:qQ.default.any().optional(),updatedAt:qQ.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(LBe,"validate");function Qnr(e,t){return LBe(e,"body",t)}a(Qnr,"body");function Ynr(e,t){return LBe(e,"params",t)}a(Ynr,"params");var xE={};oe(xE,{authenticate:()=>Znr,options:()=>Xnr});function Ga(e,t,r){return e(r,null,{message:t})}a(Ga,"authError");async function Fh(e,t){if(t&&t.callbackURL)return t.callbackURL;let r=await kK(),n="/api/global/auth";return Qd()&&(n+=`/${Pt()}`),n+=`/${e}/callback`,`${r.platformUrl}${n}`}a(Fh,"ssoCallbackUrl");var $Q="Invalid credentials",Jnr="This account has expired. Please reset your password",Xnr={passReqToCallback:!0};async function Znr(e,t,r,n){if(!t)return Ga(n,"Email Required");if(!r)return Ga(n,"Password Required");let i=await $c(t);return i==null?(console.info(`user=${t} could not be found`),Ga(n,$Q)):i.status==="inactive"?(console.info(`user=${t} is inactive`,i),Ga(n,$Q)):i.password?await J4(r,i.password)?(delete i.password,n(null,i)):Ga(n,$Q):(console.info(`user=${t} has no password set`,i),Ga(n,Jnr))}a(Znr,"authenticate");var kp={};oe(kp,{buildVerifyFn:()=>h3e,getCallbackUrl:()=>dar,strategyFactory:()=>AY});var XA=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 Ga(r,"sso user id required");if(!e.email)return Ga(r,"sso user email required");let i=rw(e.userId),o;try{o=await xy(i)}catch(u){if(!u.status||u.status!==404)return Ga(r,"Unexpected error when retrieving existing user",u)}if(o||(o=await $c(e.email)),!o&&t)return Ga(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 eir(o,e);s.forceResetPassword=!1;try{delete s.password,s=await n(s,{hashPassword:!1,requirePassword:!1})}catch(u){return Ga(r,"Error saving user",u)}return r(null,s)}a(M2,"authenticate");async function eir(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(eir,"syncUser");var par=xY().OAuth2Strategy;function h3e(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(h3e,"buildVerifyFn");async function AY(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=h3e(r);return new par({clientID:e.clientID,clientSecret:e.clientSecret,callbackURL:t},o)}catch(n){throw new Error(`Error constructing google authentication strategy: ${n}`)}}a(AY,"strategyFactory");async function dar(e){return Fh("google",e)}a(dar,"getCallbackUrl");var $p={};oe($p,{buildVerifyFn:()=>WGe,fetchStrategyConfig:()=>rgr,getCallbackUrl:()=>ngr,strategyFactory:()=>tgr});var zGe=ne(require("node-fetch"));var Zmr=$Ge().Strategy;function WGe(e){return async(t,r,n,i,o,s,u,c,l)=>{let f={provider:t,providerType:"oidc",userId:n.id,profile:n,email:egr(n,i),oauth2:{accessToken:o,refreshToken:s}};return M2(f,!1,l,e)}}a(WGe,"buildVerifyFn");function egr(e,t){if(e._json.email)return e._json.email;if(t.email)return t.email;let r=t.preferred_username;if(r&&Tz(r))return r;throw new Error(`Could not determine user email from profile ${JSON.stringify(e)} and claims ${JSON.stringify(t)}`)}a(egr,"getEmail");async function tgr(e,t){try{let r=WGe(t),n=new Zmr(e,r);return n.name="oidc",n}catch(r){throw new Error(`Error constructing OIDC authentication strategy - ${r}`)}}a(tgr,"strategyFactory");async function rgr(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,zGe.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(rgr,"fetchStrategyConfig");async function ngr(){return Fh("oidc")}a(ngr,"getCallbackUrl");function GGe(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(GGe,"querystringToBody");function NU(e,t,r={noTenancyRequired:!1}){let n=Dy(e),i=Dy(t);return async function(o,s){let c={allowNoTenant:r.noTenancyRequired||!!Py(o,i)};!!Py(o,n)||(c.excludeStrategies=["query"]);let f=Ux(o,c);return o.set("x-budibase-tenant-id",f),ts(f,s)}}a(NU,"tenancy");async function LU(e,t){if(e.internal||Gl(e.user))return t();let r=await Sg(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&&!cs(e.user)&&e.throw(403,"Admin/Builder user only endpoint."),t()}a(LU,"workspaceBuilderOrAdmin");var pZ={};oe(pZ,{postAuth:()=>ogr,preAuth:()=>agr});var igr=xY().OAuth2Strategy;async function VGe(){let e=await CK();if(!e)throw new Error("No google configuration found");return e}a(VGe,"fetchGoogleCreds");async function agr(e,t,r){let n=await VGe(),o=`${await WA({tenantAware:!1})}/api/global/auth/datasource/google/callback`,s=await AY(n,o,XA);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(agr,"preAuth");async function ogr(e,t,r){let n=await VGe(),o=`${await WA({tenantAware:!1})}/api/global/auth/datasource/google/callback`,s=rp(t,"budibase:datasourceauth");if(!s)throw new Error("Unable to fetch datasource auth cookie");return e.authenticate(new igr({clientID:n.clientID,clientSecret:n.clientSecret,callbackURL:o},(u,c,l,f)=>{Jd(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 vp(`datasource:creation:${s.appId}:google:${f}`,{tokens:c}),t.redirect(`${l}/new?continue_google_setup=${f}`)})(t,r)}a(ogr,"postAuth");var sgr={google:pZ};var LVe=TVe(),Sgr=PVe().Strategy,zU=NVe(),xgr=P2,Tgr=NU,Agr=F2,Rgr=LVe;LVe.use(new Sgr(xE.options,xE.authenticate));async function Ogr(e,t){let r=await $p.getCallbackUrl(),n,i;try{if(n=await $p.fetchStrategyConfig(e,r),!n)throw new Error("OIDC Config contents invalid");i=await $p.strategyFactory(n,XA)}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(Ogr,"refreshOIDCAccessToken");async function Igr(e,t){let r=await kp.getCallbackUrl(e),n;try{n=await kp.strategyFactory(e,r,XA)}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(Igr,"refreshGoogleAccessToken");async function kgr(e,t,r){switch(t){case"oidc":{if(!r)return{err:{data:"OIDC config id not provided"}};let n=await DK(r);return n?Ogr(n,e):{err:{data:"OIDC configuration not found"}}}case"google":{let n=await a2();return n?Igr(n,e):{err:{data:"Google configuration not found"}}}}}a(kgr,"refreshOAuthToken");async function Cgr(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 jA(e)}catch(n){console.error("Could not update OAuth details for current user",n)}}a(Cgr,"updateUserOAuth");async function Dgr(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=rp(t,"budibase:auth"),o=await O9(r);i&&n?o=o.filter(u=>u.sessionId!==i.sessionId):Jd(t,"budibase:auth");let s=o.map(({sessionId:u})=>u);await iA(r,{sessionIds:s,reason:"logout"}),await $L.logout(t.user?.email),await jA(r)}a(Dgr,"platformLogout");var GU={};oe(GU,{validate:()=>Ugr});var nt=ne(require("joi"));var Pgr=["Relational","Non-relational","Spreadsheet","Object store","Graph","API"];function TZ(e,t){let{error:r}=e.validate(t);if(r)throw r}a(TZ,"runJoi");function Ngr(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)});TZ(t,e)}a(Ngr,"validateComponent");function Lgr(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(ba).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(...Pgr),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()}))})});TZ(n,e)}a(Lgr,"validateDatasource");function Fgr(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(...Ose).required(),inputs:nt.default.object().optional(),schema:nt.default.object({inputs:r,outputs:r}).required()})});TZ(n,e)}a(Fgr,"validateAutomation");function Ugr(e){switch(e?.type){case"component":Ngr(e);break;case"datasource":Lgr(e);break;case"automation":Fgr(e);break;default:throw new Error(`Unknown plugin type - check schema.json: ${e.type}`)}}a(Ugr,"validate");var zp={};oe(zp,{Client:()=>oo,clients:()=>Yd,locks:()=>zc,utils:()=>bC});var KU={};oe(KU,{isBlacklisted:()=>jgr,refreshBlacklist:()=>jVe});var FVe=ne(require("dns")),HU=ne(require("net"));var UVe=require("util");var VU,Mgr=(0,UVe.promisify)(FVe.default.lookup);async function MVe(e){return HU.default.isIP(e)||(e.startsWith("http")||(e=`https://${e}`),e=new URL(e).hostname),(await Mgr(e,{all:!0})).map(r=>r.address)}a(MVe,"lookup");async function jVe(){let t=K.BLACKLIST_IPS?.split(",")||[],r=[];for(let n of t){let i=n.trim();if(HU.default.isIP(i))r.push(i);else{let o=await MVe(i);r=r.concat(o)}}VU=r}a(jVe,"refreshBlacklist");async function jgr(e){if(VU||await jVe(),VU?.length===0)return!1;let t;return HU.default.isIP(e)?t=[e]:t=await MVe(e),!!VU?.find(r=>t.includes(r))}a(jgr,"isBlacklisted");var Wwn={"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 Ht={};oe(Ht,{COUNT_FIELD_NAME:()=>DZ,Sql:()=>YVe,SqlTable:()=>QU,designDoc:()=>PZ,utils:()=>H5});var GVe=require("knex");var Bgr=require("knex");function AZ(e){return["link","formula","ai"].indexOf(e)!==-1}a(AZ,"isIgnoredType");function qVe(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}=$5(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&&!AZ(p)&&e.renameColumn(i.old,i.updated),n&&Object.entries(n.schema).filter(([h,m])=>!AZ(m.type)&&t.schema[h]==null).forEach(([h,m])=>{i?.old===h||AZ(m.type)||(n.constrained&&n.constrained.indexOf(h)!==-1&&e.dropForeign(h),e.dropColumn(h))}),e}a(qVe,"generateSchema");function qgr(e,t,r){return e.createTable(t.name,n=>{qVe(n,t,r)})}a(qgr,"buildCreateTable");function $gr(e,t,r,n,i){return e.alterTable(t.name,o=>{qVe(o,t,r,n,i)})}a($gr,"buildUpdateTable");function zgr(e,t){return e.dropTable(t.name)}a(zgr,"buildDeleteTable");var RZ=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,Bgr.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=qgr(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=$gr(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=Jv(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=zgr(r,t.table);break;default:throw new Error("Table operation is of unknown type")}return Jv(n)}},QU=RZ;var VVe=require("lodash");var DZ="__bb_total";function $Ve(){return(K.SQL_MAX_ROWS?parseInt(K.SQL_MAX_ROWS):null)||5e3}a($Ve,"getBaseLimit");function OZ(){return(K.SQL_MAX_RELATED_ROWS?parseInt(K.SQL_MAX_RELATED_ROWS):null)||500}a(OZ,"getRelationshipLimit");function Ggr(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(Ggr,"prioritisedArraySort");function HVe(e){return Array.isArray(e)?e.map(t=>HVe(t)):(e.bindings&&(e.bindings=e.bindings.map(t=>typeof t=="boolean"?t?1:0:t)),e)}a(HVe,"convertBooleans");function zVe(e){return e.sourceType==="internal"||e.sourceId===to}a(zVe,"isSqs");function Vgr(e,t='"'){return e.replace(new RegExp(t,"g"),`${t}${t}`)}a(Vgr,"escapeQuotes");function KVe(e,t='"'){return`${t}${Vgr(e,t)}${t}`}a(KVe,"wrap");function IZ(e,t='"'){for(let r in e)typeof e[r]=="string"&&(e[r]=KVe(e[r],t));return`[${e.join(",")}]`}a(IZ,"stringifyArray");function QVe(e){return _k.includes(e.type)&&!Ye.schema.isDeprecatedSingleUserColumn(e)}a(QVe,"isJsonColumn");var Hgr={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},kZ=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()&&QVe(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(!G5(t))return null}else if(r.dateOnly){let n=W5(t);return n?new Date(n):null}else return r.ignoreTimezones?E1(t)?new Date(t):z5(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,VVe.cloneDeep)(t);for(let r of Object.values(Im)){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(Gb)){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=V5(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=Fx(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,Hgr[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(IZ(w,"'")):this.knex.raw(w)]):b.whereRaw(`COALESCE(??${T} @> '??', FALSE)`,[this.rawQuotedIdentifier(v),T?this.knex.raw(IZ(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(KVe(IZ(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&&!q5(this.table)&&h&&t.andWhereLike(`${h}._id`,`${eo(r.documentType)}%`),t}isSqs(){return zVe(this.table)}getTableName(t){t||(t=this.table);let r=t.name;zVe(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 ${DZ}`)}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=Ggr(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}`,H=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});H=H.join(ae,function(){this.on(`${w}.${b}`,"=",`${T}.${m}`)})}H=H.where(this.rawQuotedIdentifier(Y),"=",this.rawQuotedIdentifier(B));let V=a(ae=>(H=H.select(C.map(Q=>this.rawQuotedIdentifier(Q))).limit(OZ()),o.select(ae).from({[w]:H})),"standardWrap"),Z;switch(i){case"sqlite3":H=this.addJoinFieldCheck(H,p),Z=V(this.knex.raw(`json_group_array(json_object(${F}))`));break;case"pg":Z=V(this.knex.raw(`json_agg(json_build_object(${F}))`));break;case"mariadb":Z=H.select(o.raw(`json_arrayagg(json_object(${F}) LIMIT ${OZ()})`));break;case"mysql2":case"oracledb":Z=V(this.knex.raw(`json_arrayagg(json_object(${F}))`));break;case"mssql":{let ae=o.select("*").from({[x]:H.select(k.map(Q=>o.ref(Q[1]).as(Q[0]))).limit(OZ())});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())}},CZ=class extends QU{constructor(r,n=$Ve()){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=Jv(r);return i==="sqlite3"&&(o=HVe(o)),o}}_query(r,n={}){let i=this.getSqlClient(),o={client:this.getBaseSqlClient()};(i==="sqlite3"||i==="oracledb")&&(o.useNullAsDefault=!0);let s=(0,GVe.knex)(o),u,c=new kZ(i,s,r);switch(this._operation(r)){case"CREATE":u=c.create(n);break;case"READ":u=c.read({limits:{query:this.limit,base:$Ve()}});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(!QVe(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){bx(this.getSqlClient(),r,n)}},YVe=CZ;var PZ={};oe(PZ,{base:()=>Kgr});function Kgr(e){return{_id:Fa,language:"sqlite",sql:{tables:{},options:{table_name:e}}}}a(Kgr,"base");var JR={};oe(JR,{jsonFromCsvString:()=>Qgr});var JVe=ne(require("csvtojson"));async function Qgr(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,JVe.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(Qgr,"jsonFromCsvString");var Jgr=ne(require("@koa/router"));var yt={...Mx,...$},XVe=a((e={})=>{v1(e.db)},"init");var LYe=ne(tHe()),FYe=ne(require("vm")),Ete=ne(fO());var Kp=class{static{a(this,"Helper")}constructor(t,r,n=!0){this.name=t,this.fn=r,this.useValueFallback=n}register(t){t.registerHelper(this.name,(r,n)=>{let i={};n&&n.data&&n.data.root&&(i=n.data.root);let o=this.fn(r,i);return o??(this.useValueFallback?r:null)})}unregister(t){t.unregisterHelper(this.name)}};var JM=ne(fO());var cte=ne(QQe());var Xa=ne(require("dayjs")),YQe=ne(require("dayjs/plugin/duration")),JQe=ne(require("dayjs/plugin/advancedFormat")),XQe=ne(require("dayjs/plugin/isoWeek")),ZQe=ne(require("dayjs/plugin/weekYear")),eYe=ne(require("dayjs/plugin/weekOfYear")),tYe=ne(require("dayjs/plugin/relativeTime")),rYe=ne(require("dayjs/plugin/utc")),nYe=ne(require("dayjs/plugin/timezone"));Xa.default.extend(YQe.default);Xa.default.extend(JQe.default);Xa.default.extend(XQe.default);Xa.default.extend(ZQe.default);Xa.default.extend(eYe.default);Xa.default.extend(tYe.default);Xa.default.extend(rYe.default);Xa.default.extend(nYe.default);function pb(e){return typeof e=="object"&&typeof e.hash=="object"}a(pb,"isOptions");function ate(e){return typeof e=="object"&&typeof e.options=="object"&&typeof e.app=="object"}a(ate,"isApp");function ote(e,t,r){if(pb(e))return ote({},t,e);if(pb(t))return ote(e,r,t);let n=ate(e)?e.context:{};r=r||{},pb(r)||(t=Object.assign({},t,r)),pb(r)&&r.hash.root===!0&&(t=Object.assign({},r.data.root,t));let i=Object.assign({},n,t,r.hash);return ate(e)||(i=Object.assign({},e,i)),ate(e)&&e.view&&e.view.data&&(i=Object.assign({},i,e.view.data)),i}a(ote,"getContext");function ste(e,t,r){return pb(t)&&(r=t,t=aYe),pb(e)&&(r=e,t=null,e=null),{str:e,pattern:t,options:r}}a(ste,"initialConfig");function iYe(e,t,r){let n=ste(e,t,r),i={lang:"en",date:new Date(n.str)},o=ote(this,i,{});Xa.default.locale(o.lang||o.language)}a(iYe,"setLocale");var aYe="MMMM DD, YYYY",VM=a((e,t,r)=>{let n=ste(e,t,r);if(n.str==null&&n.pattern==null)return Xa.default.locale("en"),(0,Xa.default)().format(aYe);iYe(n.str,n.pattern,n.options);let i=(0,Xa.default)(new Date(n.str));return typeof n.options=="string"?i=n.options.toLowerCase()==="utc"?i.utc():i.tz(n.options):i=i.tz(Xa.default.tz.guess()),n.pattern===""?i.toISOString():i.format(n.pattern)},"date"),xO=a((e,t,r)=>{let n=ste(e,t);iYe(n.str,n.pattern);let i=Xa.default.duration(n.str,n.pattern);return r&&!pb(r)?i.format(r):i.humanize()},"duration"),ute=a((e,t,r)=>(0,Xa.default)(new Date(e)).diff((0,Xa.default)(new Date(t)),r),"difference"),oYe=a(e=>{let t=ute(e,new Date().toISOString(),"ms");return xO(t,"ms")},"durationFromNow");var HM=["#if","#unless","#each","#with","lookup","log","blockHelperMissing","each","helperMissing","if","unless","log","lookup","with"],sYe=["math","array","number","url","string","comparison","object","regex","uuid"],hb={OBJECT:"object",ALL:"all",LITERAL:"literal",JS:"js",DECODE_ID:"decodeId"},A_="%LITERAL%";var uYe={date:VM,duration:xO,difference:ute,durationFromNow:oYe};function cYe(e){for(let[r,n]of Object.entries(uYe))e.registerHelper(r,n);let t=[];for(let r of sYe){let n=cte.default[r]();for(let i of Object.entries(n)){let o=i[0];HM.indexOf(o)!==-1||t.indexOf(o)!==-1||t.push(o)}cte.default[r]({handlebars:e})}lte=t.concat(Object.keys(uYe))}a(cYe,"registerAll");var lte=[];function I_r(){return process.env.NODE_ENV==="jest"||process.env.JEST_WORKER_ID!=null&&process.env.JEST_WORKER_ID!=="null"}a(I_r,"isJest");function mb(){return I_r()}a(mb,"isTest");var lYe=a(()=>process&&process.env.BACKEND_JS,"isTestingBackendJS"),fte=a(()=>{process.env.BACKEND_JS="1"},"setTestingBackendJS");var k_r=/^[A-Za-z0-9]+$/g,TO=/{{([^{].*?)}}/g,pte=/{?{{([^{].*?)}}}?/g,C_r=/{{{([^{].*?)}}}/g,AO=a(()=>mb()&&lYe()?!0:mb()?!1:typeof window>"u","isBackendService"),fYe=a(()=>process&&!process.env.NO_JS,"isJSAllowed"),pYe=a(e=>{let t=e,r=new RegExp(TO),n=new RegExp(C_r),i=t.match(n);i&&i.forEach(s=>{t=t.replace(s,"")});let o=t.match(r);return o||[]},"findDoubleHbsInstances"),dYe=a(e=>e.match(k_r),"isAlphaNumeric"),dte=a((e,t,r,n)=>e.slice(0,t)+n+e.slice(t+r),"swapStrings");var KM=a(e=>Buffer.from(e,"base64").toString("utf-8"),"atob"),hYe=a((e,t,r)=>{let n=t.map(o=>o.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")),i=new RegExp(`\\b(${n.join("|")})\\b`,"g");return e.replace(i,`${r}$1`)},"prefixStrings");function QM(e){return`
537
537
  result = {
538
538
  result: null,