@budibase/server 3.26.2 → 3.27.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/builder/assets/{easymde-Ca8CWhdp.js → easymde-C34suCbf.js} +1 -1
- package/builder/assets/{index-D3-uxs1D.css → index-D1_d5ICz.css} +1 -1
- package/builder/assets/{index-hxs_ARmv.js → index-DmmWAnIF.js} +6 -6
- package/builder/index.html +2 -2
- package/client/budibase-client.js +1 -1
- package/client/chunks/{Accordion-BbdcSnjO.js → Accordion-DlzwXUof.js} +1 -1
- package/client/chunks/{ApexChart-8WneJgfP.js → ApexChart-pwWkXq9W.js} +2 -2
- package/client/chunks/{AreaChart-B7Zg7AkW.js → AreaChart-BeICLlJD.js} +2 -2
- package/client/chunks/{AttachmentField-bGTHSVSc.js → AttachmentField-Dsc9lL6d.js} +2 -2
- package/client/chunks/{AttachmentSingleField-D35q3Dvz.js → AttachmentSingleField-BLmg9Q6P.js} +2 -2
- package/client/chunks/{BBReferenceField-DzjDpEYt.js → BBReferenceField-sCmVQug-.js} +3 -3
- package/client/chunks/{BBReferenceSingleField-DqfZ19kA.js → BBReferenceSingleField-Bc6yhE2j.js} +2 -2
- package/client/chunks/{BackgroundImage-FnghCpoD.js → BackgroundImage-BHOTtcEL.js} +1 -1
- package/client/chunks/{BarChart-DApIxJRn.js → BarChart-Cuk8Rlpg.js} +2 -2
- package/client/chunks/{BigIntField-gOcuVwBi.js → BigIntField-v39Z2fPq.js} +2 -2
- package/client/chunks/{BooleanField-GNzZiA4c.js → BooleanField-M6s2UJzd.js} +2 -2
- package/client/chunks/{Button-DQfl9hGj.js → Button-ZPr1XAlI.js} +1 -1
- package/client/chunks/{ButtonGroup-C1lns7Ot.js → ButtonGroup-Dm6k4y_e.js} +2 -2
- package/client/chunks/{CandleStickChart-Db0k5x8x.js → CandleStickChart-BujvyNTa.js} +2 -2
- package/client/chunks/{Card-glnffoHJ.js → Card-svA_TChk.js} +1 -1
- package/client/chunks/{CardHorizontal-BhpVI5LB.js → CardHorizontal-CtbFvR9x.js} +1 -1
- package/client/chunks/{CardStat-Dyf-uiix.js → CardStat-D6GSBMkQ.js} +1 -1
- package/client/chunks/{CardsBlock-BvywZI6v.js → CardsBlock-DDF_hd8U.js} +2 -2
- package/client/chunks/{ChartBlock-CppL455M.js → ChartBlock-D7rC6s_M.js} +1 -1
- package/client/chunks/{Chatbox-BCb8_Ln6.js → Chatbox-DUjY3CSE.js} +1 -1
- package/client/chunks/{CheckboxGroup-CLZ7Jr33.js → CheckboxGroup-BvxrArqf.js} +1 -1
- package/client/chunks/{CodeGenerator-wP4rJaBG.js → CodeGenerator-SS5eL9Vr.js} +1 -1
- package/client/chunks/{CodeScannerField-B5jtPryV.js → CodeScannerField-BLJCEXMU.js} +4 -4
- package/client/chunks/{CollapsedButtonGroup-7Gx77vhe.js → CollapsedButtonGroup-BP1hpuwy.js} +2 -2
- package/client/chunks/{Container-To4fINkM.js → Container-C-baGg8T.js} +1 -1
- package/client/chunks/{DataProvider-Ch5KDV1y.js → DataProvider-DapC8hR2.js} +1 -1
- package/client/chunks/{DatePicker-C_gbW7gS.js → DatePicker-BWAY9T8b.js} +1 -1
- package/client/chunks/{DatePicker-DC3I27eF.js → DatePicker-CV0rau4q.js} +2 -2
- package/client/chunks/{DateRangePicker-BO2K9Put.js → DateRangePicker-D-RAozdJ.js} +2 -2
- package/client/chunks/{DateTimeField-oJD_-Bbz.js → DateTimeField-BSx8TjhT.js} +3 -3
- package/client/chunks/{Divider-wF7v0zR3.js → Divider-CnrAdXfW.js} +1 -1
- package/client/chunks/{DonutChart-BiQLWKv8.js → DonutChart-xkty4tC-.js} +2 -2
- package/client/chunks/{DynamicFilter-Bs8Pwu4z.js → DynamicFilter-BL6NjCRS.js} +4 -4
- package/client/chunks/{Embed-CfDG9EVu.js → Embed-Cx_CgqEA.js} +2 -2
- package/client/chunks/{EmbeddedMap-CRAvWEkD.js → EmbeddedMap-C8zE0li6.js} +2 -2
- package/client/chunks/{Field-D9iGng_I.js → Field-1Gfnwgm_.js} +3 -3
- package/client/chunks/{FieldGroup-zm-407yR.js → FieldGroup-Dx8BGj3u.js} +2 -2
- package/client/chunks/{Filter-CNXdIVd8.js → Filter-CANc_ZKw.js} +8 -8
- package/client/chunks/{Form-SeqWjQna.js → Form-D8GpafBC.js} +2 -2
- package/client/chunks/{FormBlock-BM2_FFsy.js → FormBlock-pIuUvyOH.js} +3 -3
- package/client/chunks/{FormBlockComponent-C9Sg58KC.js → FormBlockComponent-QGu9KzJf.js} +1 -1
- package/client/chunks/{FormStep-x5Ihb5o4.js → FormStep-CtzQfVx4.js} +2 -2
- package/client/chunks/{GaugeChart-hBLYS5pY.js → GaugeChart-UzXACHzo.js} +2 -2
- package/client/chunks/{GridBlock-CDkg9CQe.js → GridBlock-_hRuiZL_.js} +7 -7
- package/client/chunks/{Heading-lWqywCDT.js → Heading-C4SH-IRz.js} +1 -1
- package/client/chunks/{HistogramChart-DTg5GfG7.js → HistogramChart-tmtXOAhl.js} +2 -2
- package/client/chunks/{Icon-BvbAlwYl.js → Icon-DNwXEBxL.js} +2 -2
- package/client/chunks/{IconV2-Bu0t4SHF.js → IconV2-DWuaDiwf.js} +2 -2
- package/client/chunks/{Image-GZo_uOEf.js → Image-BuJlHqAn.js} +2 -2
- package/client/chunks/{InnerForm-BKBgok9R.js → InnerForm-C_M-M6eW.js} +1 -1
- package/client/chunks/{Item-ByYDu0aS.js → Item-DuGLnVNk.js} +1 -1
- package/client/chunks/{JSONField-DqsMOG6r.js → JSONField-CoGDm4yG.js} +3 -3
- package/client/chunks/{Layout-BLHzB4eO.js → Layout-yuve3iYB.js} +4 -4
- package/client/chunks/{LineChart-DOrc1iZC.js → LineChart-WmoeTueH.js} +2 -2
- package/client/chunks/{Link-B3TEhV9b.js → Link-C_B_zmum.js} +1 -1
- package/client/chunks/{LongFormField-7DzfuT9z.js → LongFormField-KBBPOV8G.js} +4 -4
- package/client/chunks/{MarkdownViewer-C_xqulx0.js → MarkdownViewer-DwEeDvaR.js} +2 -2
- package/client/chunks/{Modal-Cy09kC5q.js → Modal-BXYdWZyL.js} +1 -1
- package/client/chunks/{MultiFieldSelect-B57ntjAD.js → MultiFieldSelect-qbxBjY3A.js} +4 -4
- package/client/chunks/{MultiStepFormblock-4cQNF0C9.js → MultiStepFormblock-Cje0YDrU.js} +2 -2
- package/client/chunks/{Multiselect-CCi7OFsZ.js → Multiselect-AcZM12iI.js} +1 -1
- package/client/chunks/{Navigation-JFvPD8vt.js → Navigation-C98D6uBD.js} +1 -1
- package/client/chunks/{NumberField-B28Twnl2.js → NumberField-B3JPOOSc.js} +2 -2
- package/client/chunks/{OptionsField-BSToXCPm.js → OptionsField-rfk05Q4r.js} +3 -3
- package/client/chunks/{PDF-D9MoeJ_P.js → PDF-CyLVAsU6.js} +1 -1
- package/client/chunks/{PDFTable-DW-Y815R.js → PDFTable-D7j8n1PU.js} +1 -1
- package/client/chunks/{PasswordField-CA3gyDFs.js → PasswordField-BVgdB9Ua.js} +2 -2
- package/client/chunks/{PieChart-DKDRVo7P.js → PieChart-DwyvwE_n.js} +2 -2
- package/client/chunks/{Placeholder-DaIadqKC.js → Placeholder-Cex9OEvZ.js} +1 -1
- package/client/chunks/{RadioGroup-BgLT083b.js → RadioGroup-foocZD5R.js} +1 -1
- package/client/chunks/{RatingField-v_PNIygH.js → RatingField-DtDh9esj.js} +2 -2
- package/client/chunks/{RelationshipField-B6x8pT7r.js → RelationshipField-B0AhNIAi.js} +3 -3
- package/client/chunks/{Repeater-hG4Ox2h6.js → Repeater-Bx8oOoDm.js} +3 -3
- package/client/chunks/{RepeaterBlock-LNEujcpn.js → RepeaterBlock-DS_SPIxa.js} +2 -2
- package/client/chunks/{RowExplorer-Da8kpq8E.js → RowExplorer-D3mkNhUu.js} +1 -1
- package/client/chunks/{S3Upload-CdrgNZ_z.js → S3Upload-D-ceG4MJ.js} +2 -2
- package/client/chunks/{ScreenSlot-hGV3_D09.js → ScreenSlot-0lHlLEy9.js} +1 -1
- package/client/chunks/{Section-D4jj8IXl.js → Section-Dwf2Fr2E.js} +2 -2
- package/client/chunks/{SidePanel-BxTYP8nW.js → SidePanel-CQcOnEVB.js} +1 -1
- package/client/chunks/{SignatureField-B8KVt5KJ.js → SignatureField-Br5Lgl8b.js} +2 -2
- package/client/chunks/{SingleRowProvider-CT6_XVFp.js → SingleRowProvider-BOBZHf4Y.js} +1 -1
- package/client/chunks/{Slider-D4iRb5Pq.js → Slider-BlSOc4ns.js} +2 -2
- package/client/chunks/{SpectrumCard-DN72Wfev.js → SpectrumCard-DoABPAhN.js} +1 -1
- package/client/chunks/{StackedList-wX0cz5JC.js → StackedList-DXtZ8YN4.js} +1 -1
- package/client/chunks/{StringField-C5eIBlxU.js → StringField-2blWK2_6.js} +2 -2
- package/client/chunks/{Table-BAyePfxz.js → Table-CVu30F6W.js} +2 -2
- package/client/chunks/{TableBlock-Fn3m_Cal.js → TableBlock-BycIg_wG.js} +2 -2
- package/client/chunks/{Tag-Ccvq-o8T.js → Tag-CKQcnq9s.js} +1 -1
- package/client/chunks/{Text-B3ptOepW.js → Text-B3WF1hIP.js} +1 -1
- package/client/chunks/{Text-2gTwGeM-.js → Text-C7pPzB1Q.js} +1 -1
- package/client/chunks/{TextArea--crnNy6C.js → TextArea-CtxfP53j.js} +1 -1
- package/client/chunks/{UserAvatar-Cq7DStfS.js → UserAvatar-Be7JQUjU.js} +2 -2
- package/client/chunks/{___vite-browser-external_commonjs-proxy-C-WedIVs.js → ___vite-browser-external_commonjs-proxy-DnybQQXm.js} +1 -1
- package/client/chunks/{apexcharts.common-CjVwBkpW.js → apexcharts.common-CMEj47za.js} +1 -1
- package/client/chunks/{blocks-CsX4cNiY.js → blocks-0VbVwG54.js} +1 -1
- package/client/chunks/{easymde-DXXt6saJ.js → easymde-C7dhNFOb.js} +2 -2
- package/client/chunks/{index-DO9Qg5Hf.js → index-BvK0UCZu.js} +4 -5
- package/client/chunks/{index-C8V57NJY.js → index-DLmNnf83.js} +1 -1
- package/client/chunks/{table-BiFg41zj.js → table-C2-1UQAK.js} +1 -1
- package/client/chunks/{users-C-HZcRMi.js → users-C_X-gAar.js} +1 -1
- package/client/chunks/{utc-C1HXJ2Hm.js → utc-BksX2e0i.js} +1 -1
- package/dist/automation.js +4 -4
- package/dist/automation.js.map +2 -2
- package/dist/index.js +5 -5
- package/dist/index.js.map +2 -2
- package/dist/query.js +4 -4
- package/dist/query.js.map +2 -2
- package/dist/yarn.lock +293 -56
- package/package.json +2 -2
- package/src/api/controllers/view/viewsV2.ts +1 -1
- package/src/sdk/workspace/rows/queryUtils.ts +1 -0
- package/src/sdk/workspace/tables/duplicate.ts +1 -0
package/dist/automation.js
CHANGED
|
@@ -430,7 +430,7 @@ $1`)};hv.parseAttributes=o(function(t){return Object.keys(t).map(function(r){var
|
|
|
430
430
|
|
|
431
431
|
Vestibulum ac diam sit amet quam vehicula elementum sed sit amet dui. Curabitur non nulla sit amet nisl tempus convallis quis ac lectus. Nulla quis lorem ut libero malesuada feugiat. Proin eget tortor risus. Cras ultricies ligula sed magna dictum porta. Donec sollicitudin molestie malesuada. Pellentesque in ipsum id orci porta dapibus. Vestibulum ac diam sit amet quam vehicula elementum sed sit amet dui. Curabitur non nulla sit amet nisl tempus convallis quis ac lectus. Nulla quis lorem ut libero malesuada feugiat. Proin eget tortor risus.
|
|
432
432
|
|
|
433
|
-
Curabitur aliquet quam id dui posuere blandit. Vestibulum ac diam sit amet quam vehicula elementum sed sit amet dui. Pellentesque in ipsum id orci porta dapibus. Curabitur non nulla sit amet nisl tempus convallis quis ac lectus. Nulla quis lorem ut libero malesuada feugiat. Proin eget tortor risus. Cras ultricies ligula sed magna dictum porta. Donec sollicitudin molestie malesuada. Pellentesque in ipsum id orci porta dapibus. Vestibulum ac diam sit amet quam vehicula elementum sed sit amet dui. Curabitur non nulla sit amet nisl tempus convallis quis ac lectus. Nulla quis lorem ut libero malesuada feugiat. Proin eget tortor risus. Curabitur aliquet quam id dui posuere blandit. Vestibulum ac diam sit amet quam vehicula elementum sed sit amet dui.`;xqe.exports=HJt});var Fz=v((Pqe,Nqe)=>{"use strict";var Pn=Jn(),mh=pv(),et=Nqe.exports,QJt=Dqe();et.append=function(e,t){return typeof e=="string"&&typeof t=="string"?e+t:e};et.camelcase=function(e){return typeof e!="string"?"":mh.changecase(e,function(t){return t.toUpperCase()})};et.capitalize=function(e){return typeof e!="string"?"":e.charAt(0).toUpperCase()+e.slice(1)};et.capitalizeAll=function(e){if(typeof e!="string")return"";if(Pn.isString(e))return e.replace(/\w\S*/g,function(t){return et.capitalize(t)})};et.center=function(e,t){if(typeof e!="string")return"";for(var r="",n=0;n<t;)r+=" ",n++;return r+e+r};et.chop=function(e){return typeof e!="string"?"":mh.chop(e)};et.dashcase=function(e){return typeof e!="string"?"":mh.changecase(e,function(t){return"-"+t})};et.dotcase=function(e){return typeof e!="string"?"":mh.changecase(e,function(t){return"."+t})};et.downcase=function(){return et.lowercase.apply(this,arguments)};et.ellipsis=function(e,t){if(Pn.isString(e))return e.length<=t?e:et.truncate(e,t)+"\u2026"};et.hyphenate=function(e){return typeof e!="string"?"":e.split(" ").join("-")};et.isString=function(e){return typeof e=="string"};et.lowercase=function(e){return Pn.isObject(e)&&e.fn?e.fn(this).toLowerCase():typeof e!="string"?"":e.toLowerCase()};et.occurrences=function(e,t){if(typeof e!="string")return"";for(var r=t.length,n=0,i=0;(n=e.indexOf(t,n))>-1;)i++,n+=r;return i};et.pascalcase=function(e){return typeof e!="string"?"":(e=mh.changecase(e,function(t){return t.toUpperCase()}),e.charAt(0).toUpperCase()+e.slice(1))};et.pathcase=function(e){return typeof e!="string"?"":mh.changecase(e,function(t){return"/"+t})};et.plusify=function(e,t){return typeof e!="string"?"":(Pn.isString(t)||(t=" "),e.split(t).join("+"))};et.prepend=function(e,t){return typeof e=="string"&&typeof t=="string"?t+e:e};et.raw=function(e){var t=e.fn(),r=Pn.options(this,e);if(r.escape!==!1)for(var n=0;(n=t.indexOf("{{",n))!==-1;)t[n-1]!=="\\"&&(t=t.slice(0,n)+"\\"+t.slice(n)),n+=3;return t};et.remove=function(e,t){return typeof e!="string"?"":Pn.isString(t)?e.split(t).join(""):e};et.removeFirst=function(e,t){return typeof e!="string"?"":Pn.isString(t)?e.replace(t,""):e};et.replace=function(e,t,r){return typeof e!="string"?"":Pn.isString(t)?(Pn.isString(r)||(r=""),e.split(t).join(r)):e};et.replaceFirst=function(e,t,r){return typeof e!="string"?"":Pn.isString(t)?(Pn.isString(r)||(r=""),e.replace(t,r)):e};et.reverse=Hy().reverse;et.sentence=function(e){return typeof e!="string"?"":e.replace(/((?:\S[^\.\?\!]*)[\.\?\!]*)/g,function(t){return t.charAt(0).toUpperCase()+t.substr(1).toLowerCase()})};et.snakecase=function(e){return typeof e!="string"?"":mh.changecase(e,function(t){return"_"+t})};et.split=function(e,t){return typeof e!="string"?"":(Pn.isString(t)||(t=","),e.split(t))};et.startsWith=function(e,t,r){var n=[].slice.call(arguments);return r=n.pop(),Pn.isString(t)&&t.indexOf(e)===0?r.fn(this):typeof r.inverse=="function"?r.inverse(this):""};et.titleize=function(e){if(typeof e!="string")return"";for(var t=e.replace(/[- _]+/g," "),r=t.split(" "),n=r.length,i=[],s=0;n--;){var a=r[s++];i.push(Pqe.capitalize(a))}return i.join(" ")};et.trim=function(e){return typeof e=="string"?e.trim():""};et.trimLeft=function(e){if(Pn.isString(e))return e.replace(/^\s+/,"")};et.trimRight=function(e){if(Pn.isString(e))return e.replace(/\s+$/,"")};et.truncate=function(e,t,r){if(Pn.isString(e))return typeof r!="string"&&(r=""),e.length>t?e.slice(0,t-r.length)+r:e};et.truncateWords=function(e,t,r){if(Pn.isString(e)&&!isNaN(t)){typeof r!="string"&&(r="\u2026");var n=Number(t),i=e.split(/[ \t]/);if(n>=i.length)return e;i=i.slice(0,n);var s=i.join(" ").trim();return s+r}};et.upcase=function(){return et.uppercase.apply(this,arguments)};et.uppercase=function(e){return Pn.isObject(e)&&e.fn?e.fn(this).toUpperCase():typeof e!="string"?"":e.toUpperCase()};et.lorem=function(e){return(isNaN(e)||e<1||!e)&&(e=11),QJt.substring(0,e)}});var qz=v((m7r,Lqe)=>{"use strict";var Bz=require("url"),wv=Jn(),KJt=require("querystring"),gh=Lqe.exports;gh.encodeURI=function(e){if(wv.isString(e))return encodeURIComponent(e)};gh.escape=function(e){if(wv.isString(e))return KJt.escape(e)};gh.decodeURI=function(e){if(wv.isString(e))return decodeURIComponent(e)};gh.urlResolve=function(e,t){return Bz.resolve(e,t)};gh.urlParse=function(e){return Bz.parse(e)};gh.stripQuerystring=function(e){if(wv.isString(e))return e.split("?")[0]};gh.stripProtocol=function(e){if(wv.isString(e)){var t=Bz.parse(e);return t.protocol="",t.format()}}});var jz=v((g7r,kqe)=>{"use strict";var zJt=require("uuid"),YJt=kqe.exports;YJt.uuid=function(){return zJt.v4()}});var Uqe=v((y7r,Mqe)=>{"use strict";Mqe.exports={array:Hy(),code:hBe(),collection:CBe(),comparison:mz(),html:KBe(),i18n:YBe(),inflection:ZBe(),match:fqe(),math:kz(),misc:hqe(),number:Mz(),object:hL(),path:Oqe(),regex:Uz(),string:Fz(),url:qz(),uuid:jz()}});var Fqe=v((b7r,Yy)=>{"use strict";var Ev=Uqe();Yy.exports=o(function(t,r){typeof t=="string"?t=[t]:Array.isArray(t)||(r=t,t=null),r=r||{};var n=r.handlebars||r.hbs||cv();if(Yy.exports.handlebars=n,t)t.forEach(function(i){n.registerHelper(Ev[i])});else for(let i in Ev){let s=Ev[i];n.registerHelper(s)}return n.helpers},"helpers");for(let e in Ev){let t=Ev[e];Yy.exports[e]=function(r){r=r||{};var n=r.handlebars||r.hbs||cv();return Yy.exports.handlebars=n,n.registerHelper(t),t}}Yy.exports.utils=pv()});var _We=v(sr=>{"use strict";Object.defineProperty(sr,"__esModule",{value:!0});sr.InvalidRemoveOpPath=sr.NoTarget=sr.InvalidScimPatchRequest=sr.NoPathInScimPatchOp=sr.FilterArrayTargetNotFound=sr.FilterOnEmptyArray=sr.InvalidScimPatchOp=sr.RemoveValueNotArray=sr.RemoveValueNestedArrayNotSupported=sr.InvalidScimRemoveValue=sr.InvalidScimPatch=sr.ScimError=void 0;var Dv=class extends Error{static{o(this,"ScimError")}constructor(t){super(),this.scimCode=t}};sr.ScimError=Dv;var Df=class extends Dv{static{o(this,"InvalidScimPatch")}constructor(t,r="invalidSyntax"){super(r),this.message=`Invalid SCIM Patch: ${t}`}};sr.InvalidScimPatch=Df;var Pv=class extends Dv{static{o(this,"InvalidScimRemoveValue")}constructor(t,r="invalidSyntax"){super(r),this.message=`Invalid SCIM Remove Operation: ${t}`}};sr.InvalidScimRemoveValue=Pv;var b5=class extends Pv{static{o(this,"RemoveValueNestedArrayNotSupported")}constructor(){super("Invalid patch value, remove does not support arrays inside arrays.")}};sr.RemoveValueNestedArrayNotSupported=b5;var _5=class extends Pv{static{o(this,"RemoveValueNotArray")}constructor(){super("Remove with patch value is supported only for array properties.")}};sr.RemoveValueNotArray=_5;var Nv=class extends Df{static{o(this,"InvalidScimPatchOp")}constructor(t){super(`${t}`,"invalidSyntax")}};sr.InvalidScimPatchOp=Nv;var w5=class extends Nv{static{o(this,"FilterOnEmptyArray")}constructor(t,r,n){super(`${t}`),this.attrName=r,this.valuePath=n}};sr.FilterOnEmptyArray=w5;var E5=class extends Nv{static{o(this,"FilterArrayTargetNotFound")}constructor(t,r,n,i){super(`${t}`),this.attrName=r,this.valuePath=n,this.schema=i}};sr.FilterArrayTargetNotFound=E5;var S5=class extends Df{static{o(this,"NoPathInScimPatchOp")}constructor(){super('Missing path in "remove" patch operation',"noTarget")}};sr.NoPathInScimPatchOp=S5;var T5=class extends Df{static{o(this,"InvalidScimPatchRequest")}constructor(t){super(`The SCIM patch request is invalid: ${t}`)}};sr.InvalidScimPatchRequest=T5;var v5=class extends Df{static{o(this,"NoTarget")}constructor(t){super(`Target location is a multi-valued attribute for which a value selection filter (${t}) has been supplied and no record match was made.`,"noTarget")}};sr.NoTarget=v5;var A5=class extends Df{static{o(this,"InvalidRemoveOpPath")}constructor(){super("Path specified in 'remove' operation doesn't exist")}};sr.InvalidRemoveOpPath=A5});var TWe=v(su=>{"use strict";Object.defineProperty(su,"__esModule",{value:!0});su.parseExpression=su.parseFilter=su.Tokens=su.tokenizer=void 0;var EWe={type:"EOT",literal:""};function _9t(e){let t=[],r=e,n=/^(?:(\s+)|(-?\d+(?:\.\d+)?(?:[eE][-+]?\d+)?(?![-\w._:\/\)\s]))|("(?:[^"\\]|\\.|\n)*")|([[()]|]\.?)|(\w[-\w._:\/%]*))/,i;for(;i=n.exec(r);){if(!(i[1]||i[0].length===0))if(i[2])t.push({literal:i[2],type:"Number"});else if(i[3]){let s=i[3].replace(/\\(?!")/g,"\\\\");t.push({literal:s,type:"Quoted"})}else i[4]?t.push({literal:i[4],type:"Bracket"}):i[5]&&t.push({literal:i[5],type:"Word"});r=r.substring(i.index+i[0].length)}if(r.length!==0)throw new Error(`unexpected token ${r}`);return t.push(EWe),t}o(_9t,"tokenizer");su.tokenizer=_9t;var R5=class{static{o(this,"Tokens")}getList(){return this.list.map((t,r)=>r==this.i?`[${t.literal}]`:t.literal)}peek(){return this.current||EWe}constructor(t){this.list=t,this.i=0,this.current=this.list[this.i]}forward(){return this.current=this.list[++this.i],this}shift(){let t=this.peek();return this.forward(),t}};su.Tokens=R5;var w9t=new Set(["eq","ne","co","sw","ew","gt","lt","ge","le"]),E9t=new Set(["pr"]);function O5(e){return BL(qL(e),e,Ah.LOWEST)}o(O5,"parseFilter");su.parseFilter=O5;function qL(e){let t=e.shift();if(t.literal=="("){let r=O5(e),n=e.shift();if(n.literal!==")")throw new Error(`Unexpected token [${n.literal}(${n.type})] expected ')'`);return r}else if(t.literal.toLowerCase()=="not"){let r={op:"not",filter:qL(e)};return BL(r,e,Ah.NOT)}else{if(t.type=="Word")return SWe(t,e);throw new Error(`Unexpected token ${t.literal} (${t.type})`)}}o(qL,"parseExpression");su.parseExpression=qL;var Ah;(function(e){e[e.LOWEST=1]="LOWEST",e[e.OR=2]="OR",e[e.AND=3]="AND",e[e.NOT=4]="NOT"})(Ah||(Ah={}));var wWe={or:Ah.OR,and:Ah.AND,not:Ah.NOT};function BL(e,t,r){let n=t.peek().literal.toLowerCase(),i=wWe[n];if(!i||r>=i)return e;let s=[e];for(;t.peek().literal.toLowerCase()===n;){let a=qL(t.forward()),u=t.peek().literal.toLowerCase();wWe[u]>i&&(a=BL(a,t,i)),s.push(a)}return BL({op:n,filters:s},t,r)}o(BL,"parseInxif");function SWe(e,t){if(e.type!=="Word")throw new Error(`Unexpected token ${e.literal} expected Word`);let r=e.literal,n=t.shift(),i=n.literal.toLowerCase();if(w9t.has(i)){let s=S9t(t);return{op:i,attrPath:r,compValue:s}}else{if(E9t.has(i))return{op:i,attrPath:r};if(i==="["){let s=O5(t),a=t.shift();if(a.literal[0]!=="]")throw new Error(`Unexpected token ${a.literal} expected ']'`);let u={op:"[]",attrPath:r,valFilter:s};if(a.literal[1]!=="."||t.peek().type!=="Word")return u;let c=t.shift();return c.literal=`${r}.${c.literal}`,{op:"and",filters:[u,SWe(c,t)]}}else throw new Error(`Unexpected token ${r} ${n.literal} as valFilter operator`)}}o(SWe,"readValFilter");function S9t(e){let t=e.shift();try{let r=JSON.parse(t.literal);if(r===null||typeof r=="string"||typeof r=="number"||typeof r=="boolean")return r;throw new Error(`${t.literal} is ${typeof r} (un supported value)`)}catch{throw new Error(`[${t.literal}(${t.type})] is not json`)}}o(S9t,"parseCompValue")});var vWe=v(WL=>{"use strict";Object.defineProperty(WL,"__esModule",{value:!0});WL.Tester=void 0;var jL=class{static{o(this,"Tester")}constructor(){}test(t,r){switch(r.op){case"or":return r.filters.some(n=>this.test(t,n));case"and":return r.filters.every(n=>this.test(t,n));case"not":return!this.test(t,r.filter);case"[]":return this.attrTest(this.attrPath(r.attrPath),t,n=>this.test(n,r.valFilter));case"pr":return this.attrTest(this.attrPath(r.attrPath),t,n=>this[r.op](n));case"eq":case"ne":case"co":case"sw":case"ew":case"gt":case"lt":case"ge":case"le":return this.attrTest(this.attrPath(r.attrPath),t,n=>this[r.op](n,r.compValue))}}attrPath(t){let r=t.lastIndexOf(":");return r===-1?t.split("."):[t.substring(0,r),...t.substring(r+1).split(".")]}attrTest(t,r,n){if(t.length===0)return n(r);if(typeof r!="object"||r===null)return!1;if(Array.isArray(r))return r.some(a=>this.attrTest(t,a,n));let i=t[0].toLowerCase(),s=Object.keys(r).find(a=>a.toLowerCase()===i);return s===void 0?!1:this.attrTest(t.slice(1),r[s],n)}pr(t,r){return t!==void 0}eq(t,r){return t===r}ne(t,r){return t!==r}gt(t,r){return r!==null&&t>r}lt(t,r){return r!==null&&t<r}le(t,r){return r!==null&&t<=r}ge(t,r){return r!==null&&t>=r}sw(t,r){return r!==null&&t!==null&&t.toString().startsWith(r.toString())}ew(t,r){return r!==null&&t!==null&&t.toString().endsWith(r.toString())}co(t,r){return typeof t=="object"||r===null?t==r:(typeof t!="string"&&(t=t.toString()),t.indexOf(r.toString())!==-1)}};WL.Tester=jL;jL.UNDEF=Symbol("undefined")});var AWe=v(au=>{"use strict";Object.defineProperty(au,"__esModule",{value:!0});au.log=au.valfilter=void 0;var T9t=o((e,t)=>{switch(t&&"attrPath"in e&&(e=Object.assign(Object.assign({},e),{attrPath:`${t}.${e.attrPath}`})),e.op){case"and":case"or":return Object.assign(Object.assign({},e),{filters:e.filters.map(r=>(0,au.valfilter)(r,t))});case"not":return Object.assign(Object.assign({},e),{filter:(0,au.valfilter)(e,t)});case"[]":return(0,au.valfilter)(e.valFilter,e.attrPath)}return e},"valfilter");au.valfilter=T9t;var v9t=o(e=>{switch(e.op){case"and":case"or":let t=e.filters.map(au.log),r=[];return t.forEach(n=>{n.op==e.op?n.filters.forEach(i=>r.push(i)):r.push(n)}),Object.assign(Object.assign({},e),{filters:r})}return e},"log");au.log=v9t});var RWe=v(GL=>{"use strict";Object.defineProperty(GL,"__esModule",{value:!0});GL.stringify=void 0;function Lv(e,t=!1){let r="";switch(e.op){case"eq":case"ne":case"co":case"sw":case"ew":case"gt":case"lt":case"ge":case"le":r=`${e.attrPath} ${e.op} ${JSON.stringify(e.compValue)}`;break;case"pr":r=`${e.attrPath} ${e.op}`;break;case"or":let n=e.filters.map(i=>Lv(i)).join(` ${e.op} `);r=t?`(${n})`:n;break;case"and":r=e.filters.map(i=>Lv(i,!0)).join(` ${e.op} `);break;case"not":r=`${e.op} (${Lv(e.filter)})`;break;case"[]":r=`${e.attrPath}[${Lv(e.valFilter)}]`;break}return r}o(Lv,"stringify");GL.stringify=Lv});var $L=v(Wo=>{"use strict";Object.defineProperty(Wo,"__esModule",{value:!0});Wo.flatten=Wo.parse=Wo.filter=Wo.Tester=Wo.stringify=void 0;var I5=TWe(),A9t=vWe(),OWe=AWe(),R9t=RWe();Object.defineProperty(Wo,"stringify",{enumerable:!0,get:function(){return R9t.stringify}});Wo.Tester=A9t.Tester;function O9t(e){let t=new Wo.Tester;return r=>t.test(r,e)}o(O9t,"filter");Wo.filter=O9t;function I9t(e){let t=new I5.Tokens(I5.tokenizer(e)),r=I5.parseFilter(t);if(t.peek().type!=="EOT")throw new Error(`unexpected EOT ${t.getList()}`);return r}o(I9t,"parse");Wo.parse=I9t;function C9t(e){return OWe.log(OWe.valfilter(e))}o(C9t,"flatten");Wo.flatten=C9t});var CWe=v((Pen,IWe)=>{"use strict";IWe.exports=o(function e(t,r){if(t===r)return!0;if(t&&r&&typeof t=="object"&&typeof r=="object"){if(t.constructor!==r.constructor)return!1;var n,i,s;if(Array.isArray(t)){if(n=t.length,n!=r.length)return!1;for(i=n;i--!==0;)if(!e(t[i],r[i]))return!1;return!0}if(t.constructor===RegExp)return t.source===r.source&&t.flags===r.flags;if(t.valueOf!==Object.prototype.valueOf)return t.valueOf()===r.valueOf();if(t.toString!==Object.prototype.toString)return t.toString()===r.toString();if(s=Object.keys(t),n=s.length,n!==Object.keys(r).length)return!1;for(i=n;i--!==0;)if(!Object.prototype.hasOwnProperty.call(r,s[i]))return!1;for(i=n;i--!==0;){var a=s[i];if(!e(t[a],r[a]))return!1}return!0}return t!==t&&r!==r},"equal")});var F5=v(_r=>{"use strict";Object.defineProperty(_r,"__esModule",{value:!0});_r.PATCH_OPERATION_SCHEMA=_r.InvalidScimRemoveValue=_r.RemoveValueNotArray=_r.RemoveValueNestedArrayNotSupported=_r.NoTarget=_r.InvalidScimPatchRequest=_r.NoPathInScimPatchOp=_r.InvalidScimPatchOp=_r.InvalidScimPatch=_r.ScimError=void 0;_r.patchBodyValidation=L9t;_r.scimPatch=k9t;var Pt=_We();Object.defineProperty(_r,"ScimError",{enumerable:!0,get:function(){return Pt.ScimError}});Object.defineProperty(_r,"InvalidScimPatch",{enumerable:!0,get:function(){return Pt.InvalidScimPatch}});Object.defineProperty(_r,"InvalidScimPatchOp",{enumerable:!0,get:function(){return Pt.InvalidScimPatchOp}});Object.defineProperty(_r,"NoPathInScimPatchOp",{enumerable:!0,get:function(){return Pt.NoPathInScimPatchOp}});Object.defineProperty(_r,"InvalidScimPatchRequest",{enumerable:!0,get:function(){return Pt.InvalidScimPatchRequest}});Object.defineProperty(_r,"NoTarget",{enumerable:!0,get:function(){return Pt.NoTarget}});Object.defineProperty(_r,"RemoveValueNestedArrayNotSupported",{enumerable:!0,get:function(){return Pt.RemoveValueNestedArrayNotSupported}});Object.defineProperty(_r,"RemoveValueNotArray",{enumerable:!0,get:function(){return Pt.RemoveValueNotArray}});Object.defineProperty(_r,"InvalidScimRemoveValue",{enumerable:!0,get:function(){return Pt.InvalidScimRemoveValue}});var C5=$L(),x5=CWe(),N5=/(\[|\])/,x9t=/^(.+)\[(.+)\]$/,xWe=/(?!\B"[^[]*)\.(?![^\]]*"\B)/g,D9t=["remove","add","replace"],P9t="urn:ietf:params:scim:schemas:core:2.0:User",N9t="urn:ietf:params:scim:schemas:core:2.0:Group";_r.PATCH_OPERATION_SCHEMA="urn:ietf:params:scim:api:messages:2.0:PatchOp";function L9t(e){if(!e.schemas||!e.schemas.includes(_r.PATCH_OPERATION_SCHEMA))throw new Pt.InvalidScimPatchRequest("Missing schemas.");if(!Array.isArray(e.Operations))throw new Pt.InvalidScimPatchRequest("Operations should be an array.");if(!e.Operations||e.Operations.length<=0)throw new Pt.InvalidScimPatchRequest("Missing operations.");e.Operations.forEach(L5)}o(L9t,"patchBodyValidation");function k9t(e,t,r={mutateDocument:!0,treatMissingAsAdd:!0}){return r.mutateDocument||(e=JSON.parse(JSON.stringify(e))),t.reduce((n,i)=>{switch(i.op){case"remove":case"Remove":return M9t(n,i);case"add":case"Add":case"replace":case"Replace":return PWe(n,i,!!r.treatMissingAsAdd);default:throw new Pt.InvalidScimPatchRequest(`Operator is invalid for SCIM patch request. ${i}`)}},e)}o(k9t,"scimPatch");function L5(e){if(typeof e.op!="string"||!q9t(e.op))throw new Pt.InvalidScimPatchRequest(`Invalid op "${e.op}" in the request.`);if(e.op==="remove"&&!e.path)throw new Pt.NoPathInScimPatchOp;if(Mv(e.op)&&!("value"in e))throw new Pt.InvalidScimPatchRequest(`The operation ${e.op} MUST contain a "value" member whose content specifies the value to be added`);if(e.path&&typeof e.path!="string")throw new Pt.InvalidScimPatchRequest("Path is supposed to be a string")}o(L5,"validatePatchOperation");function k5(e){let t=e.lastIndexOf(":");if(t<0)return e.split(xWe);let r=e.substring(0,t),n=e.substring(t+1).split(xWe);switch(r){case N9t:case P9t:break;default:n.unshift(r);break}return n}o(k5,"resolvePaths");function M9t(e,t){let r;L5(t);let n=k5(t.path);try{r=NWe(e,n,{isRemoveOp:!0})}catch(s){if(s instanceof Pt.InvalidRemoveOpPath)return e;throw s}let i=n[n.length-1];if(!N5.test(i)){for(let s of r)t.value?s[i]=B9t(s[i],t.value):delete s[i];return e}for(let s of r){let{attrName:a,valuePath:u,array:c}=M5(i,s);s[a]=U5(c,u,{excludeIfMatchFilter:!0}),s[a].length===0&&delete s[a]}return e}o(M9t,"applyRemoveOperation");function PWe(e,t,r){var n;let i;if(L5(t),!t.path)return kv(e,t);let s=k5(t.path),a=s[s.length-1];try{i=NWe(e,s)}catch(u){if(u instanceof Pt.FilterOnEmptyArray||u instanceof Pt.FilterArrayTargetNotFound){let c=u.schema,l=(0,C5.parse)(u.valuePath);if(Mv(t.op)&&"compValue"in l&&l.compValue!==void 0&&l.op==="eq"){let f={};return f[l.attrPath]=l.compValue,f[a]=kv(void 0,t,!0),c[u.attrName]=[...(n=c[u.attrName])!==null&&n!==void 0?n:[],f],e}else if(r&&D5(t.op)&&"compValue"in l&&l.compValue!==void 0&&l.op==="eq")return PWe(e,Object.assign(Object.assign({},t),{op:"add"}),!1);throw new Pt.NoTarget(t.path)}throw u}if(!N5.test(a)){for(let u of i)u[a]=kv(u[a],t);return e}for(let u of i){let{valuePath:c,array:l}=M5(a,u),f=U5(l,c);if(D5(t.op)&&f.length===0)throw new Pt.NoTarget(t.path);for(let d=0;d<l.length;d++)f.includes(l[d])&&(l[d]=kv(l[d],t))}return e}o(PWe,"applyAddOrReplaceOperation");function M5(e,t){let r=e.match(x9t);if(!r)throw new Pt.InvalidScimPatchOp(`This part of the path ${e} is invalid for SCIM patch request.`);let[,n,i]=r,s=t[n];if(!Array.isArray(s))throw new Pt.FilterOnEmptyArray("Impossible to search on a mono valued attribute.",n,i);return new P5(n,i,s)}o(M5,"extractArray");function NWe(e,t,r={}){let n=[e];for(let i=0;i<t.length-1;i++){let s=t[i];N5.test(s)?n=n.flatMap(a=>{try{let{attrName:u,valuePath:c,array:l}=M5(s,a),f=U5(l,c);if(f.length===0)throw new Pt.FilterArrayTargetNotFound("A matching array entry was not found using the supplied filter.",u,c,a);return f}catch(u){throw u instanceof Pt.FilterOnEmptyArray&&(u.schema=a),u}}):n=n.flatMap(a=>{if(!a[s]&&r.isRemoveOp)throw new Pt.InvalidRemoveOpPath;return a[s]||(a[s]={})})}return n}o(NWe,"navigate");function kv(e,t,r){if(Array.isArray(e)){if(Array.isArray(t.value)){if(Mv(t.op)){let i=t.value.filter(s=>!DWe(e,s));return e.concat(i)}return t.value}if(D5(t.op))return e.map(i=>kv(i,t,r));let n=e;return DWe(n,t.value)||n.push(t.value),n}return e!==null&&typeof e=="object"?U9t(e,t,r):t.value}o(kv,"addOrReplaceAttribute");function U9t(e,t,r){if(typeof t.value!="object"){if(Mv(t.op)&&!r)throw new Pt.InvalidScimPatchOp("Invalid patch query.");return t.value}for(let[n,i]of Object.entries(t.value))F9t(e,k5(n),i,t.op);return e}o(U9t,"addOrReplaceObjectAttribute");function F9t(e,t,r,n){let i=t.length-1;for(let a=0;a<i;++a){let u=t[a];u in e||(e[u]={}),e=e[u]}let s=e[t[i]];if(Mv(n)&&Array.isArray(s)){if(Array.isArray(r)){e[t[i]]=[...s,...r];return}e[t[i]]=[...s,r];return}e[t[i]]=r}o(F9t,"assign");function U5(e,t,r={}){try{let n=(0,C5.filter)((0,C5.parse)(t));return e.filter(i=>r.excludeIfMatchFilter?!n(i):n(i))}catch(n){throw new Pt.InvalidScimPatchOp(`${n}`)}}o(U5,"filterWithQuery");function B9t(e,t){if(!Array.isArray(e))throw new Pt.RemoveValueNotArray;return Array.isArray(t)?(t.forEach(r=>{if(Array.isArray(r))throw new Pt.RemoveValueNestedArrayNotSupported;e=e.filter(n=>!x5(r,n))}),e):e.filter(r=>!x5(t,r))}o(B9t,"removeWithPatchValue");function DWe(e,t){return e.some(r=>x5(t,r))}o(DWe,"deepIncludes");function q9t(e){return D9t.includes(e.toLowerCase())}o(q9t,"isValidOperation");function Mv(e){return e!==void 0&&e.toLowerCase()==="add"}o(Mv,"isAddOperation");function D5(e){return e!==void 0&&e.toLowerCase()==="replace"}o(D5,"isReplaceOperation");var P5=class{static{o(this,"ScimSearchQuery")}constructor(t,r,n){this.attrName=t,this.valuePath=r,this.array=n}}});var aur={};var IKe,CKe=er(()=>{"use strict";IKe=U(require("dd-trace"));process.env.DD_APM_ENABLED&&(console.log("Starting dd-trace"),IKe.default.init({debug:process.env.DD_ENV==="qa",llmobs:{mlApp:process.env.DD_LLMOBS_ML_APP||"budibase"}}))});var f4e={};G(f4e,{execute:()=>yur,executeInThread:()=>W7,removeStalled:()=>F7});module.exports=qA(f4e);var Qn={};G(Qn,{analyticsEnabled:()=>z0,generateConfigID:()=>rT,getAIConfig:()=>sWt,getConfig:()=>Ii,getDefaultGoogleConfig:()=>F3,getGoogleConfig:()=>UD,getGoogleDatasourceConfig:()=>q3,getOIDCConfig:()=>nWt,getOIDCConfigById:()=>j3,getOIDCLogosDoc:()=>tWt,getPlatformUrl:()=>nT,getRecaptchaConfig:()=>aWt,getSCIMConfig:()=>oWt,getSMTPConfig:()=>iWt,getSMTPConfigDoc:()=>y0e,getSettingsConfig:()=>B3,getSettingsConfigDoc:()=>uy,getTranslationsConfig:()=>Zjt,getTranslationsConfigDoc:()=>g0e,save:()=>Xjt});var uo=(r=>(r.ASCENDING="ascending",r.DESCENDING="descending",r))(uo||{});var ct=(te=>(te.USER_CREATED="user:created",te.USER_UPDATED="user:updated",te.USER_DELETED="user:deleted",te.USER_ONBOARDING_COMPLETE="user:onboarding:complete",te.USER_PERMISSION_ADMIN_ASSIGNED="user:admin:assigned",te.USER_PERMISSION_ADMIN_REMOVED="user:admin:removed",te.USER_PERMISSION_BUILDER_ASSIGNED="user:builder:assigned",te.USER_PERMISSION_BUILDER_REMOVED="user:builder:removed",te.USER_INVITED="user:invited",te.USER_INVITED_ACCEPTED="user:invite:accepted",te.USER_PASSWORD_FORCE_RESET="user:password:force:reset",te.USER_PASSWORD_UPDATED="user:password:updated",te.USER_PASSWORD_RESET_REQUESTED="user:password:reset:requested",te.USER_PASSWORD_RESET="user:password:reset",te.USER_DATA_COLLABORATION="user:data:collaboration",te.EMAIL_SMTP_CREATED="email:smtp:created",te.EMAIL_SMTP_UPDATED="email:smtp:updated",te.AI_CONFIG_CREATED="ai:config:created",te.AI_CONFIG_UPDATED="ai:config:updated",te.AUTH_SSO_CREATED="auth:sso:created",te.AUTH_SSO_UPDATED="auth:sso:updated",te.AUTH_SSO_ACTIVATED="auth:sso:activated",te.AUTH_SSO_DEACTIVATED="auth:sso:deactivated",te.AUTH_LOGIN="auth:login",te.AUTH_LOGOUT="auth:logout",te.ORG_NAME_UPDATED="org:info:name:updated",te.ORG_LOGO_UPDATED="org:info:logo:updated",te.ORG_PLATFORM_URL_UPDATED="org:platformurl:updated",te.INSTALLATION_VERSION_CHECKED="installation:version:checked",te.INSTALLATION_VERSION_UPGRADED="installation:version:upgraded",te.INSTALLATION_VERSION_DOWNGRADED="installation:version:downgraded",te.INSTALLATION_FIRST_STARTUP="installation:firstStartup",te.ANALYTICS_OPT_OUT="analytics:opt:out",te.ANALYTICS_OPT_IN="analytics:opt:in",te.WORKSPACE_CREATED="app:created",te.WORKSPACE_UPDATED="app:updated",te.WORKSPACE_DELETED="app:deleted",te.WORKSPACE_DUPLICATED="app:duplicated",te.WORKSPACE_PUBLISHED="app:published",te.WORKSPACE_UNPUBLISHED="app:unpublished",te.WORKSPACE_TEMPLATE_IMPORTED="app:template:imported",te.WORKSPACE_FILE_IMPORTED="app:file:imported",te.WORKSPACE_APP_VERSION_UPDATED="app:version:updated",te.WORKSPACE_APP_VERSION_REVERTED="app:version:reverted",te.WORKSPACE_REVERTED="app:reverted",te.WORKSPACE_EXPORTED="app:exported",te.ROLE_CREATED="role:created",te.ROLE_UPDATED="role:updated",te.ROLE_DELETED="role:deleted",te.ROLE_ASSIGNED="role:assigned",te.ROLE_UNASSIGNED="role:unassigned",te.SERVED_BUILDER="served:builder",te.SERVED_APP="served:app",te.SERVED_APP_PREVIEW="served:app:preview",te.DATASOURCE_CREATED="datasource:created",te.DATASOURCE_UPDATED="datasource:updated",te.DATASOURCE_DELETED="datasource:deleted",te.QUERY_CREATED="query:created",te.QUERY_UPDATED="query:updated",te.QUERY_DELETED="query:deleted",te.QUERY_IMPORT="query:import",te.QUERIES_RUN="queries:run",te.QUERY_PREVIEWED="query:previewed",te.TABLE_CREATED="table:created",te.TABLE_UPDATED="table:updated",te.TABLE_DELETED="table:deleted",te.TABLE_EXPORTED="table:exported",te.TABLE_IMPORTED="table:imported",te.TABLE_DATA_IMPORTED="table:data:imported",te.VIEW_CREATED="view:created",te.VIEW_UPDATED="view:updated",te.VIEW_DELETED="view:deleted",te.VIEW_EXPORTED="view:exported",te.VIEW_FILTER_CREATED="view:filter:created",te.VIEW_FILTER_UPDATED="view:filter:updated",te.VIEW_FILTER_DELETED="view:filter:deleted",te.VIEW_CALCULATION_CREATED="view:calculation:created",te.VIEW_CALCULATION_UPDATED="view:calculation:updated",te.VIEW_CALCULATION_DELETED="view:calculation:deleted",te.VIEW_JOIN_CREATED="view:join:created",te.ROWS_CREATED="rows:created",te.ROWS_IMPORTED="rows:imported",te.COMPONENT_CREATED="component:created",te.COMPONENT_DELETED="component:deleted",te.SCREEN_CREATED="screen:created",te.SCREEN_DELETED="screen:deleted",te.LAYOUT_CREATED="layout:created",te.LAYOUT_DELETED="layout:deleted",te.AUTOMATION_CREATED="automation:created",te.AUTOMATION_DELETED="automation:deleted",te.AUTOMATION_TESTED="automation:tested",te.AUTOMATIONS_RUN="automations:run",te.AUTOMATION_STEP_CREATED="automation:step:created",te.AUTOMATION_STEP_DELETED="automation:step:deleted",te.AUTOMATION_TRIGGER_UPDATED="automation:trigger:updated",te.LICENSE_PLAN_CHANGED="license:plan:changed",te.LICENSE_ACTIVATED="license:activated",te.LICENSE_PAYMENT_FAILED="license:payment:failed",te.LICENSE_PAYMENT_RECOVERED="license:payment:recovered",te.LICENSE_CHECKOUT_OPENED="license:checkout:opened",te.LICENSE_CHECKOUT_SUCCESS="license:checkout:success",te.LICENSE_PORTAL_OPENED="license:portal:opened",te.ACCOUNT_CREATED="account:created",te.ACCOUNT_DELETED="account:deleted",te.ACCOUNT_VERIFIED="account:verified",te.APP_BACKFILL_SUCCEEDED="app:backfill:succeeded",te.APP_BACKFILL_FAILED="app:backfill:failed",te.TENANT_BACKFILL_SUCCEEDED="tenant:backfill:succeeded",te.TENANT_BACKFILL_FAILED="tenant:backfill:failed",te.INSTALLATION_BACKFILL_SUCCEEDED="installation:backfill:succeeded",te.INSTALLATION_BACKFILL_FAILED="installation:backfill:failed",te.USER_GROUP_CREATED="user_group:created",te.USER_GROUP_UPDATED="user_group:updated",te.USER_GROUP_DELETED="user_group:deleted",te.USER_GROUP_USERS_ADDED="user_group:user_added",te.USER_GROUP_USERS_REMOVED="user_group:users_deleted",te.USER_GROUP_PERMISSIONS_EDITED="user_group:permissions_edited",te.USER_GROUP_ONBOARDING="user_group:onboarding_added",te.PLUGIN_INIT="plugin:init",te.PLUGIN_IMPORTED="plugin:imported",te.PLUGIN_DELETED="plugin:deleted",te.APP_BACKUP_RESTORED="app:backup:restored",te.APP_BACKUP_TRIGGERED="app:backup:triggered",te.ENVIRONMENT_VARIABLE_CREATED="environment_variable:created",te.ENVIRONMENT_VARIABLE_DELETED="environment_variable:deleted",te.ENVIRONMENT_VARIABLE_UPGRADE_PANEL_OPENED="environment_variable:upgrade_panel_opened",te.AUDIT_LOGS_FILTERED="audit_log:filtered",te.AUDIT_LOGS_DOWNLOADED="audit_log:downloaded",te.ROW_ACTION_CREATED="row_action:created",te.ACTION_AUTOMATION_STEP_EXECUTED="action:automation_step:executed",te.ACTION_CRUD_EXECUTED="action:crud:executed",te.ACTION_AI_AGENT_EXECUTED="action:ai_agent:executed",te.WORKSPACE_APP_CREATED="workspace_app:created",te.WORKSPACE_APP_UPDATED="workspace_app:updated",te.WORKSPACE_APP_DELETED="workspace_app:deleted",te.RESOURCE_COPIED_TO_WORKSPACE="resource:copied_to_workspace",te))(ct||{}),TX=["user:created","user:updated","user:deleted","user:admin:assigned","user:admin:removed","user:builder:assigned","user:builder:removed","user_group:created","user_group:updated","user_group:deleted","user_group:user_added","user_group:users_deleted","user_group:permissions_edited"],vX=["automation:deleted","workspace_app:deleted","datasource:deleted","table:deleted","query:deleted","view:deleted"],AX=[...TX,...vX],jh={"user:created":'User "{{ email }}" created{{#if viaScim}} via SCIM{{/if}}',"user:updated":'User "{{ email }}" updated{{#if viaScim}} via SCIM{{/if}}',"user:deleted":'User "{{ email }}" deleted{{#if viaScim}} via SCIM{{/if}}',"user:admin:assigned":'User "{{ email }}" admin role assigned',"user:admin:removed":'User "{{ email }}" admin role removed',"user:builder:assigned":'User "{{ email }}" builder role assigned',"user:builder:removed":'User "{{ email }}" builder role removed',"user:invited":'User "{{ email }}" invited',"user:invite:accepted":'User "{{ email }}" accepted invite',"user:password:updated":'User "{{ email }}" password updated',"user:password:reset:requested":'User "{{ email }}" password reset requested',"user:password:reset":'User "{{ email }}" password reset',"user_group:created":'User group "{{ name }}" created{{#if viaScim}} via SCIM{{/if}}',"user_group:updated":'User group "{{ name }}" updated{{#if viaScim}} via SCIM{{/if}}',"user_group:deleted":'User group "{{ name }}" deleted{{#if viaScim}} via SCIM{{/if}}',"user_group:user_added":'User group "{{ name }}" {{ count }} users added{{#if viaScim}} via SCIM{{/if}}',"user_group:users_deleted":'User group "{{ name }}" {{ count }} users removed{{#if viaScim}} via SCIM{{/if}}',"user_group:permissions_edited":'User group "{{ name }}" permissions edited',"user:password:force:reset":void 0,"user_group:onboarding_added":void 0,"user:onboarding:complete":void 0,"user:data:collaboration":void 0,"email:smtp:created":"Email configuration created","email:smtp:updated":"Email configuration updated","ai:config:created":"AI configuration created","ai:config:updated":"AI configuration updated","auth:sso:created":"SSO configuration created","auth:sso:updated":"SSO configuration updated","auth:sso:activated":"SSO configuration activated","auth:sso:deactivated":"SSO configuration deactivated","auth:login":'User "{{ email }}" logged in',"auth:logout":'User "{{ email }}" logged out',"org:info:name:updated":"Organisation name updated","org:info:logo:updated":"Organisation logo updated","org:platformurl:updated":"Organisation platform URL updated","app:created":'App "{{ name }}" created',"app:updated":'App "{{ name }}" updated',"app:deleted":'App "{{ name }}" deleted',"app:duplicated":'App "{{ name }}" duplicated',"app:published":'App "{{ name }}" published',"app:unpublished":'App "{{ name }}" unpublished',"app:template:imported":'App "{{ name }}" template imported',"app:file:imported":'App "{{ name }}" file imported',"app:version:updated":'App "{{ name }}" version updated',"app:version:reverted":'App "{{ name }}" version reverted',"app:reverted":'App "{{ name }}" reverted',"app:exported":'App "{{ name }}" exported',"app:backup:restored":'App backup "{{ name }}" restored',"app:backup:triggered":'App backup "{{ name }}" triggered',"datasource:created":"Datasource created","datasource:updated":"Datasource updated","datasource:deleted":"Datasource deleted","query:created":"Query created","query:updated":"Query updated","query:deleted":"Query deleted","query:import":"Query import","queries:run":void 0,"query:previewed":void 0,"table:created":'Table "{{ name }}" created',"table:updated":'Table "{{ name }}" updated',"table:deleted":'Table "{{ name }}" deleted',"table:exported":'Table "{{ name }}" exported',"table:imported":'Table "{{ name }}" imported',"table:data:imported":"Data imported to table","rows:created":"Rows created","rows:imported":"Rows imported","automation:created":'Automation "{{ name }}" created',"automation:deleted":'Automation "{{ name }}" deleted',"automation:step:created":'Automation "{{ name }}" step added',"automation:step:deleted":'Automation "{{ name }}" step removed',"automation:tested":void 0,"automations:run":void 0,"automation:trigger:updated":void 0,"screen:created":'Screen "{{ name }}" created',"screen:deleted":'Screen "{{ name }}" deleted',"component:created":"Component created","component:deleted":"Component deleted","environment_variable:created":"Environment variable created","environment_variable:deleted":"Environment variable deleted","environment_variable:upgrade_panel_opened":void 0,"plugin:imported":"Plugin imported","plugin:deleted":"Plugin deleted","plugin:init":void 0,"action:automation_step:executed":void 0,"action:crud:executed":void 0,"action:ai_agent:executed":void 0,"role:created":void 0,"role:updated":void 0,"role:deleted":void 0,"role:assigned":void 0,"role:unassigned":void 0,"license:plan:changed":void 0,"license:activated":void 0,"license:payment:failed":void 0,"license:payment:recovered":void 0,"license:checkout:opened":void 0,"license:checkout:success":void 0,"license:portal:opened":void 0,"account:created":void 0,"account:deleted":void 0,"account:verified":void 0,"app:backfill:succeeded":void 0,"app:backfill:failed":void 0,"tenant:backfill:succeeded":void 0,"tenant:backfill:failed":void 0,"installation:backfill:succeeded":void 0,"installation:backfill:failed":void 0,"layout:created":void 0,"layout:deleted":void 0,"view:created":void 0,"view:updated":void 0,"view:deleted":void 0,"view:exported":void 0,"view:filter:created":void 0,"view:filter:updated":void 0,"view:filter:deleted":void 0,"view:calculation:created":void 0,"view:calculation:updated":void 0,"view:calculation:deleted":void 0,"view:join:created":void 0,"served:builder":void 0,"served:app":void 0,"served:app:preview":void 0,"analytics:opt:out":void 0,"analytics:opt:in":void 0,"installation:version:checked":void 0,"installation:version:upgraded":void 0,"installation:version:downgraded":void 0,"installation:firstStartup":void 0,"audit_log:filtered":void 0,"audit_log:downloaded":void 0,"row_action:created":void 0,"workspace_app:created":void 0,"workspace_app:deleted":void 0,"workspace_app:updated":void 0,"resource:copied_to_workspace":"{{ resource.type }} copied to workspace"};var RX=o((e,t,r)=>e==="usage"&&t==="static","isStaticQuota"),OX=o((e,t,r)=>e==="usage"&&t==="monthly","isMonthlyQuota"),IX=o((e,t)=>e==="constant","isConstantQuota");var Ui="--secret-value--";var an=(n=>(n.SQL="sql",n.JSON="json",n.FIELDS="fields",n))(an||{}),Jr=(h=>(h.STRING="string",h.CODE="code",h.LONGFORM="longForm",h.SENSITIVE_LONGFORM="sensitiveLongForm",h.BOOLEAN="boolean",h.NUMBER="number",h.PASSWORD="password",h.LIST="list",h.OBJECT="object",h.JSON="json",h.FILE="file",h.FIELD_GROUP="fieldGroup",h.SELECT="select",h))(Jr||{}),kn=(b=>(b.AIRTABLE="AIRTABLE",b.ARANGODB="ARANGODB",b.BUDIBASE="BUDIBASE",b.COUCHDB="COUCHDB",b.DYNAMODB="DYNAMODB",b.ELASTICSEARCH="ELASTICSEARCH",b.FIRESTORE="FIRESTORE",b.GOOGLE_SHEETS="GOOGLE_SHEETS",b.MONGODB="MONGODB",b.MYSQL="MYSQL",b.ORACLE="ORACLE",b.POSTGRES="POSTGRES",b.REDIS="REDIS",b.REST="REST",b.S3="S3",b.SNOWFLAKE="SNOWFLAKE",b.SQL_SERVER="SQL_SERVER",b))(kn||{});var Sn=(r=>(r.CONNECTION_CHECKING="connection",r.FETCH_TABLE_NAMES="fetch_table_names",r))(Sn||{});var CX=U(require("lodash/isPlainObject"));var Qf=(a=>(a.EQUAL="equal",a.NOT_EQUAL="notEqual",a.EMPTY="empty",a.NOT_EMPTY="notEmpty",a.FUZZY="fuzzy",a.STRING="string",a))(Qf||{}),wa=(i=>(i.CONTAINS="contains",i.NOT_CONTAINS="notContains",i.CONTAINS_ANY="containsAny",i.ONE_OF="oneOf",i))(wa||{}),Wh=(t=>(t.RANGE="range",t))(Wh||{}),Wb=(r=>(r.AND="$and",r.OR="$or",r))(Wb||{});function $c(e){return Object.values(Wb).includes(e)}o($c,"isLogicalSearchOperator");function xX(e){return Object.values(Qf).includes(e)}o(xX,"isBasicSearchOperator");function DX(e){return Object.values(wa).includes(e)}o(DX,"isArraySearchOperator");function jA(e){return Object.values(Wh).includes(e)}o(jA,"isRangeSearchOperator");function PX(e){return(0,CX.default)(e)&&"conditions"in e}o(PX,"isLogicalFilter");var NX=o(e=>typeof e=="object"&&e._id&&e._rev,"isDocument");var Gb=(s=>(s.USER="user",s.HEADER="header",s.QUERY="query",s.SUBDOMAIN="subdomain",s.PATH="path",s))(Gb||{});var Vc=(i=>(i.READ="read",i.WRITE="write",i.EXECUTE="execute",i.ADMIN="admin",i))(Vc||{});var $b=(d=>(d.WORKSPACE="app",d.TABLE="table",d.USER="user",d.AUTOMATION="automation",d.WEBHOOK="webhook",d.BUILDER="builder",d.CREATOR="creator",d.GLOBAL_BUILDER="globalBuilder",d.QUERY="query",d.VIEW="view",d.LEGACY_VIEW="legacy_view",d))($b||{});var WA=o(e=>e.hosting==="cloud","isCloudAccount");var GA=o(e=>e.authType==="sso","isSSOAccount");var ce="_",Mn="\uFFF0",ti=o(e=>`${e}${ce}`,"prefixed"),Me=(se=>(se.USER="us",se.GROUP="gr",se.CONFIG="config",se.TEMPLATE="template",se.WORKSPACE="app",se.DEV="dev",se.WORKSPACE_DEV="app_dev",se.WORKSPACE_METADATA="app_metadata",se.ROLE="role",se.DEV_INFO="devinfo",se.AUTOMATION_LOG="log_au",se.ACCOUNT_METADATA="acc_metadata",se.PLUGIN="plg",se.DATASOURCE="datasource",se.DATASOURCE_PLUS="datasource_plus",se.APP_BACKUP="backup",se.TABLE="ta",se.ROW="ro",se.AUTOMATION="au",se.LINK="li",se.WEBHOOK="wh",se.INSTANCE="inst",se.LAYOUT="layout",se.SCREEN="screen",se.QUERY="query",se.DEPLOYMENTS="deployments",se.METADATA="metadata",se.MEM_VIEW="view",se.USER_FLAG="flag",se.AUTOMATION_METADATA="meta_au",se.AUDIT_LOG="al",se.SCIM_LOG="scimlog",se.ROW_ACTIONS="ra",se.OAUTH2_CONFIG="oauth2",se.OAUTH2_CONFIG_LOG="oauth2log",se.AGENT="agent",se.CHAT_APP="chatapp",se.CHAT_CONVERSATION="chatconvo",se.AGENT_TOOL_SOURCE="agenttoolsource",se.AGENT_FILE="agentfile",se.AI_CONFIG="aiconfig",se.LITELLM_KEY="litellmkey",se.VECTOR_STORE="vectordb",se.WORKSPACE_APP="workspace_app",se.WORKSPACE_FAVOURITE="workspace_favourite",se.AUTO_COLUMN_STATE="autocolumn_state",se))(Me||{}),DM=["role","datasource","datasource_plus","ta","au","wh","screen","query","metadata","view","workspace_app","workspace_favourite","inst","layout"],Tu=(t=>(t.USER_METADATA="ta_users",t))(Tu||{}),Hc=(r=>(r.VIEW="view",r.ROW_ACTION="row_action",r))(Hc||{});function Gh(e){return!!e.providerType}o(Gh,"isSSOUser");var $h=["rows","queries","automations"],LX=["queries","automations"];var kX="SYSTEM",Kf="auditLog";var He=(f=>(f.OBJECT="object",f.STRING="string",f.BOOLEAN="boolean",f.NUMBER="number",f.ARRAY="array",f.JSON="json",f.DATE="date",f.DATETIME="datetime",f.ATTACHMENT="attachment",f.LONGFORM="longform",f))(He||{}),Bt=(R=>(R.TABLE="table",R.ROW="row",R.ROWS="rows",R.WIDE="wide",R.QUERY="query",R.QUERY_PARAMS="queryParams",R.QUERY_LIMIT="queryLimit",R.LOOP_OPTION="loopOption",R.ITEM="item",R.CODE="code",R.FILTERS="filters",R.COLUMN="column",R.TRIGGER_SCHEMA="triggerSchema",R.CRON="cron",R.WEBHOOK_URL="webhookUrl",R.AUTOMATION="automation",R.AUTOMATION_FIELDS="automationFields",R.MULTI_ATTACHMENTS="multi_attachments",R.TRIGGER_FILTER="trigger_filter",R.CATEGORIES="categories",R.AGENT="agent",R.OUTPUT_SCHEMA="outputSchema",R))(Bt||{}),co=(c=>(c.ROW_SAVED="ROW_SAVED",c.ROW_UPDATED="ROW_UPDATED",c.ROW_DELETED="ROW_DELETED",c.WEBHOOK="WEBHOOK",c.APP="APP",c.CRON="CRON",c.ROW_ACTION="ROW_ACTION",c.EMAIL="EMAIL",c))(co||{});var rt=($=>($.SEND_EMAIL_SMTP="SEND_EMAIL_SMTP",$.CREATE_ROW="CREATE_ROW",$.GET_ROW="GET_ROW",$.UPDATE_ROW="UPDATE_ROW",$.DELETE_ROW="DELETE_ROW",$.QUERY_ROWS="QUERY_ROWS",$.EXECUTE_BASH="EXECUTE_BASH",$.OUTGOING_WEBHOOK="OUTGOING_WEBHOOK",$.EXECUTE_SCRIPT="EXECUTE_SCRIPT",$.EXECUTE_SCRIPT_V2="EXECUTE_SCRIPT_V2",$.EXECUTE_QUERY="EXECUTE_QUERY",$.SERVER_LOG="SERVER_LOG",$.DELAY="DELAY",$.FILTER="FILTER",$.API_REQUEST="API_REQUEST",$.LOOP="LOOP",$.COLLECT="COLLECT",$.OPENAI="OPENAI",$.TRIGGER_AUTOMATION_RUN="TRIGGER_AUTOMATION_RUN",$.BRANCH="BRANCH",$.CLASSIFY_CONTENT="CLASSIFY_CONTENT",$.PROMPT_LLM="PROMPT_LLM",$.TRANSLATE="TRANSLATE",$.SUMMARISE="SUMMARISE",$.GENERATE_TEXT="GENERATE_TEXT",$.EXTRACT_FILE_DATA="EXTRACT_FILE_DATA",$.EXTRACT_STATE="EXTRACT_STATE",$.LOOP_V2="LOOP_V2",$.AGENT="AGENT",$.discord="discord",$.slack="slack",$.zapier="zapier",$.integromat="integromat",$.n8n="n8n",$))(rt||{}),MX=[...Object.values(rt),...Object.values(co)];var $A=(u=>(u.EMAIL="email",u.DOCUMENT="document",u.BLOG_POST="blog_post",u.CHAT_MESSAGE="chat_message",u.LETTER="letter",u.PROPOSAL="proposal",u.OTHER="other",u))($A||{}),UX={email:"Email",document:"Document",blog_post:"Blog post",chat_message:"Chat message",letter:"Letter",proposal:"Proposal",other:"Other"},VA=(r=>(r.URL="URL",r.ATTACHMENT="Attachment",r))(VA||{}),HA=(i=>(i.PDF="pdf",i.JPG="jpg",i.PNG="png",i.JPEG="jpeg",i))(HA||{}),QA=["png","jpg","jpeg","image/png","image/jpeg","image/jpg","image/jpeg"];function FX(e){return e.stepId==="BRANCH"}o(FX,"isBranchStep");function PM(e){return e.stepId==="CRON"}o(PM,"isCronTrigger");function Qc(e){return e?.stepId==="EMAIL"}o(Qc,"isEmailTrigger");var KA=(i=>(i.EQUAL="EQUAL",i.NOT_EQUAL="NOT_EQUAL",i.GREATER_THAN="GREATER_THAN",i.LESS_THAN="LESS_THAN",i))(KA||{});var Vb=(r=>(r.BACKUP="backup",r.RESTORE="restore",r))(Vb||{});var Kc=(i=>(i.PUBLISH="publish",i.MANUAL="manual",i.SCHEDULED="scheduled",i.RESTORING="restoring",i))(Kc||{});var Vh=(a=>(a.NONE="none",a.FORM_DATA="form",a.XML="xml",a.ENCODED="encoded",a.JSON="json",a.TEXT="text",a))(Vh||{}),Hb=(a=>(a.GET="GET",a.POST="POST",a.PATCH="PATCH",a.PUT="PUT",a.HEAD="HEAD",a.DELETE="DELETE",a))(Hb||{});var Un="bb_internal";var zc=(s=>(s.CREATED_BY="createdBy",s.CREATED_AT="createdAt",s.UPDATED_BY="updatedBy",s.UPDATED_AT="updatedAt",s.AUTO_ID="autoID",s))(zc||{});function zA(e){return e.type==="link"}o(zA,"isRelationshipField");function YA(e){return e.relationshipType==="one-to-many"}o(YA,"isOneToMany");function JA(e){return e.relationshipType==="many-to-one"}o(JA,"isManyToOne");var BX="rev",Le=(S=>(S.STRING="string",S.LONGFORM="longform",S.OPTIONS="options",S.NUMBER="number",S.BOOLEAN="boolean",S.ARRAY="array",S.DATETIME="datetime",S.ATTACHMENTS="attachment",S.ATTACHMENT_SINGLE="attachment_single",S.LINK="link",S.FORMULA="formula",S.AUTO="auto",S.AI="ai",S.JSON="json",S.INTERNAL="internal",S.BARCODEQR="barcodeqr",S.SIGNATURE_SINGLE="signature_single",S.BIGINT="bigint",S.BB_REFERENCE="bb_reference",S.BB_REFERENCE_SINGLE="bb_reference_single",S))(Le||{}),XA=["attachment_single","attachment","signature_single","bb_reference","json","array"],FKe=["number","bigint"];function NM(e){return FKe.includes(e)}o(NM,"isNumeric");function qX(e){return e.type==="formula"&&e.formulaType==="static"&&e.responseType&&NM(e.responseType)}o(qX,"isNumericStaticFormula");var BKe=["string","longform","options","number","boolean","datetime","bigint","ai"];function qKe(e){return BKe.includes(e)}o(qKe,"canGroupBy");function LM(e){return e.type==="formula"&&e.formulaType==="static"}o(LM,"isStaticFormula");function jX(e){return qKe(e.type)||LM(e)}o(jX,"canGroupBySchema");var lt={};G(lt,{AutomationViewMode:()=>a1,BUDIBASE_DATASOURCE_TYPE:()=>zre,Config:()=>tne,Cookie:()=>dm,DEFAULT_BB_DATASOURCE_ID:()=>Qb,DEFAULT_EMPLOYEE_TABLE_ID:()=>Zre,DEFAULT_EXPENSES_TABLE_ID:()=>Xre,DEFAULT_INVENTORY_TABLE_ID:()=>Jre,DEFAULT_JOBS_TABLE_ID:()=>Yre,DEFAULT_TENANT_ID:()=>Lr,DeprecatedViews:()=>j_,DesignDocuments:()=>pd,DocumentType:()=>Me,GlobalRole:()=>ene,Header:()=>yi,InternalTable:()=>Tu,MAX_VALID_DATE:()=>l1,MIN_VALID_DATE:()=>U7e,SEPARATOR:()=>ce,SQLITE_DESIGN_DOC_ID:()=>Fn,SQS_DATASOURCE_INTERNAL:()=>sl,StaticDatabases:()=>tr,UNICODE_MAX:()=>Mn,USER_METADATA_PREFIX:()=>VR,UserStatus:()=>c1,ViewName:()=>ol,WORKSPACE_DEV:()=>u1,WORKSPACE_DEV_PREFIX:()=>ks,WORKSPACE_PREFIX:()=>Ls});var GX={SUMMARISE_TEXT:{columns:"columns"},CLEAN_DATA:{column:"column"},TRANSLATE:{column:"column",language:"prompt"},CATEGORISE_TEXT:{columns:"columns",categories:"prompt"},SENTIMENT_ANALYSIS:{column:"column"},PROMPT:{prompt:"prompt"},SEARCH_WEB:{columns:"columns"}};var yi=(E=>(E.API_KEY="x-budibase-api-key",E.LICENSE_KEY="x-budibase-license-key",E.API_VER="x-budibase-api-version",E.APP_ID="x-budibase-app-id",E.SESSION_ID="x-budibase-session-id",E.CLIENT="x-budibase-client",E.TYPE="x-budibase-type",E.PREVIEW_ROLE="x-budibase-role",E.TENANT_ID="x-budibase-tenant-id",E.VERIFICATION_CODE="x-budibase-verification-code",E.RETURN_VERIFICATION_CODE="x-budibase-return-verification-code",E.RESET_PASSWORD_CODE="x-budibase-reset-password-code",E.RETURN_RESET_PASSWORD_CODE="x-budibase-return-reset-password-code",E.TOKEN="x-budibase-token",E.CSRF_TOKEN="x-csrf-token",E.CORRELATION_ID="x-budibase-correlation-id",E.AUTHORIZATION="authorization",E.MIGRATING_APP="x-budibase-migrating-app",E.COOKIE="cookie",E))(yi||{});var Tn=["_id","_rev","type","createdAt","updatedAt","tableId"],Rs=["_id","_rev","tableId"];function zf(e){return Tn.includes(e)}o(zf,"isInternalColumnName");function $X(e){return Rs.includes(e)}o($X,"isExternalColumnName");var Hh={WORKSPACES:"/builder/workspaces",SETTINGS_EMAIL:"/builder/settings/email",SETTINGS_AUTH:"/builder/settings/auth",SETTINGS_PEOPLE_USERS:"/builder/settings/people/users",APPS:"/builder/apps"},ZA={ACCOUNT:"/portal/account",BILLING:"/portal/billing",UPGRADE:"/portal/upgrade"};var lo={Equals:{value:"equal",label:"Equals"},NotEquals:{value:"notEqual",label:"Not equals"},Empty:{value:"empty",label:"Is empty"},NotEmpty:{value:"notEmpty",label:"Is not empty"},StartsWith:{value:"string",label:"Starts with"},Like:{value:"fuzzy",label:"Like"},MoreThan:{value:"rangeLow",label:"More than or equal to"},LessThan:{value:"rangeHigh",label:"Less than or equal to"},Contains:{value:"contains",label:"Contains"},NotContains:{value:"notContains",label:"Does not contain"},In:{value:"oneOf",label:"Is in"},ContainsAny:{value:"containsAny",label:"Has any"}},VX={integer:{max:2147483647,min:-2147483648},int:{max:2147483647,min:-2147483648},smallint:{max:32767,min:-32768},mediumint:{max:8388607,min:-8388608}};var kM=/^[^()]*$/;var Qb="datasource_internal_bb_default";var Tt={};G(Tt,{ColumnSplitter:()=>lF,NoEmptyFilterStrings:()=>Ore,buildQuery:()=>Ire,cleanupQuery:()=>hF,fixupFilterArrays:()=>gF,getKeyNumbering:()=>mF,getValidOperatorsForType:()=>EJe,hasFilters:()=>fF,limit:()=>xre,recurseLogicalOperators:()=>pF,removeKeyNumbering:()=>eR,runQuery:()=>BR,search:()=>vJe,sort:()=>Cre,splitFiltersArray:()=>tR});var lm=U(require("dayjs"));var Fe={};G(Fe,{filterValueToLabel:()=>QKe,hasSchema:()=>KKe,isSupportedUserSearch:()=>QX,nameToUrl:()=>ZKe,parallelForeach:()=>HKe,processSearchFilters:()=>MM,toMap:()=>YKe,trimOtherProps:()=>zKe,unreachable:()=>VKe});var HX=U(require("lodash/pick"));var $Ke=["field","operator","value","type","externalType","valueType","noValue","formulaType"];function VKe(e,t){let r=t?.message||`No such case in exhaustive switch: ${e}`;if(!!!t?.doNotThrow)throw new Error(r)}o(VKe,"unreachable");async function HKe(e,t,r){let n=[],i=Symbol.asyncIterator in e,s=i?e[Symbol.asyncIterator]():e[Symbol.iterator](),a=o(async()=>{let u=await(i?s.next():Promise.resolve(s.next()));for(;!u.done;)await t(u.value),u=await(i?s.next():Promise.resolve(s.next()))},"executeNext");for(let u=0;u<r;u++)n.push(a());await Promise.all(n)}o(HKe,"parallelForeach");function QKe(){return Object.keys(lo).reduce((e,t)=>{let n=lo[t];return e[n.value]=n.label,e},{})}o(QKe,"filterValueToLabel");function KKe(e){return typeof e=="object"&&!Array.isArray(e)&&e!==null&&!(e instanceof Date)&&Object.keys(e).length>0}o(KKe,"hasSchema");function zKe(e,t){return Object.keys(e).filter(n=>t.includes(n)).reduce((n,i)=>({...n,[i]:e[i]}),{})}o(zKe,"trimOtherProps");function QX(e){let t=[{op:"string",key:"email"},{op:"fuzzy",key:"email"},{op:"equal",key:"_id"},{op:"oneOf",key:"_id"}],{allOr:r,onEmptyFilter:n,...i}=e;for(let[s,a]of Object.entries(i)){if(typeof a!="object")return!1;if($c(s)){for(let l of e[s].conditions)if(!QX(l))return!1;return!0}let u=Object.keys(a||{});if(u.length===0)continue;if(!t.find(l=>l.op===s&&u.length===1&&u[0]===l.key))return!1}return!0}o(QX,"isSupportedUserSearch");function MM(e){if(!e||e.length===0)return;let{allOr:t,onEmptyFilter:r,filters:n}=tR(e);return{logicalOperator:"all",onEmptyFilter:r||"all",groups:[{logicalOperator:t?"any":"all",filters:n.map(i=>{let s=(0,HX.default)(i,$Ke);return s.field=eR(s.field),s})}]}}o(MM,"processSearchFilters");function YKe(e,t){return t.reduce((r,n)=>(r[n[e]]=n,r),{})}o(YKe,"toMap");var JKe=o(e=>e?e.trim():null,"resolveWorkspaceName"),XKe=o(e=>{let t,r=JKe(e);t=r?r.toLowerCase():"";let n=t?t.replace(/\s+/g,"-"):"";return encodeURI(n)},"resolveWorkspaceUrl"),ZKe=o(e=>{let t=XKe(e);return e6e(t)},"nameToUrl"),e6e=o(e=>(e&&!e.startsWith("/")&&(e=`/${e}`),e===""?null:e),"tidyUrl");var de={};G(de,{accountPortalAccountUrl:()=>yre,accountPortalBillingUrl:()=>bre,accountPortalUpgradeUrl:()=>_re,builderAppsUrl:()=>vre,builderSettingsAuthUrl:()=>Sre,builderSettingsEmailUrl:()=>Ere,builderSettingsPeopleUsersUrl:()=>Tre,builderWorkspacesUrl:()=>wre,cancelableTimeout:()=>KX,cron:()=>yJe,deepGet:()=>UM,duplicateName:()=>fJe,formatBytes:()=>gJe,getSequentialName:()=>dJe,getUserColor:()=>r6e,getUserInitials:()=>t6e,getUserLabel:()=>n6e,isGoogleSheets:()=>o6e,isSQL:()=>s6e,lists:()=>uF,retry:()=>a6e,roles:()=>aF,schema:()=>M_,structuredOutput:()=>iF,urlHelpers:()=>mJe,views:()=>sF,wait:()=>FM,withTimeout:()=>i6e});var UM=o((e,t)=>{if(!e||!t)return null;if(Object.prototype.hasOwnProperty.call(e,t))return e[t];let r=t.split(".");for(let n=0;n<r.length;n++)e=e?.[r[n]];return e},"deepGet"),t6e=o(e=>{if(!e)return"?";let t="";return t+=e.firstName?e.firstName[0]:"",t+=e.lastName?e.lastName[0]:"",t!==""?t:e.email?.[0]||"U"},"getUserInitials"),r6e=o(e=>{let t=e?._id;if(!t)return"var(--spectrum-global-color-blue-400)";t=t.replace("ro_ta_users_","");let r=1;for(let n=0;n<t.length;n++)r+=t.charCodeAt(n),r=r%36;return`hsl(${r*10}, 50%, 40%)`},"getUserColor"),n6e=o(e=>{if(!e)return"";let{firstName:t,lastName:r,email:n}=e;return t&&r?`${t} ${r}`:t||r||n},"getUserLabel");function KX(e){let t;return[new Promise((r,n)=>{t=setTimeout(()=>{n({status:301,errno:"ETIME"})},e)}),()=>{clearTimeout(t)}]}o(KX,"cancelableTimeout");async function i6e(e,t){let[r,n]=KX(e),i=await Promise.race([t(),r]);return n(),i}o(i6e,"withTimeout");function o6e(e){return e==="GOOGLE_SHEETS"}o(o6e,"isGoogleSheets");function s6e(e){return!e||!e.source?!1:["POSTGRES","SQL_SERVER","MYSQL","ORACLE"].indexOf(e.source)!==-1||e.isSQL===!0}o(s6e,"isSQL");async function FM(e){return new Promise(t=>setTimeout(t,e))}o(FM,"wait");async function a6e(e,t){let{times:r=3}=t||{};if(r<1)throw new Error(`invalid retry count: ${r}`);let n;for(let i=0;i<r;i++){let s=1.5**i*1e3*(Math.random()+.5);await FM(s);try{return await e()}catch(a){n=a}}throw n}o(a6e,"retry");var dre=U(Ea()),pre=U(lre());var fre="(Input cron: ",zYe={"smaller than lower limit":"less than","bigger than upper limit":"greater than",daysOfMonth:"'days of the month'",daysOfWeek:"'days of the week'",years:"'years'",months:"'months'",hours:"'hours'",minutes:"'minutes'",seconds:"'seconds'"};function YYe(e){let t=[];for(let r of e){r.includes(fre)&&(r=r.split(fre)[0].trim());for(let[n,i]of Object.entries(zYe))r.includes(n)&&(r=r.replace(new RegExp(n,"g"),i));t.push(r)}return t}o(YYe,"improveErrors");function hre(e,t=4){let r=pre.default.parseExpression(e),n=[];for(let i=0;i<t;i++)n.push(r.next().toString());return n}o(hre,"getNextExecutionDates");function mre(e){let t=(0,dre.default)(e,{preset:"npm-cron-schedule",override:{useSeconds:!1}});return t.isValid()?{valid:!0}:{valid:!1,err:YYe(t.getError())}}o(mre,"validate");var M_={};G(M_,{decodeNonAscii:()=>nF,encodeNonAscii:()=>ZYe,isDeprecatedSingleUserColumn:()=>JYe,isNumeric:()=>eJe,isRequired:()=>XYe});function JYe(e){return e.type==="bb_reference"&&e.subtype==="user"&&e.constraints?.type!=="array"}o(JYe,"isDeprecatedSingleUserColumn");function XYe(e){return!!e&&(typeof e.presence!="boolean"&&e.presence?.allowEmpty===!1||e.presence===!0)}o(XYe,"isRequired");function ZYe(e){return e.split("").map(t=>t.charCodeAt(0)>127?"\\u"+t.charCodeAt(0).toString(16).padStart(4,"0"):t).join("")}o(ZYe,"encodeNonAscii");function nF(e){return e.replace(/\\u([0-9a-fA-F]{4})/g,(t,r)=>String.fromCharCode(parseInt(r,16)))}o(nF,"decodeNonAscii");function eJe(e){return e.type==="number"||e.type==="bigint"}o(eJe,"isNumeric");var iF={};G(iF,{normalizeSchemaForStructuredOutput:()=>tJe});function tJe(e){function t(n){if(typeof n!="object"||n===null)return n;let i={...n};if(i.type==="object"&&(i.additionalProperties=!1,i.properties&&typeof i.properties=="object"&&i.properties!==null)){let s=i.properties,a=[],u={};for(let[f,d]of Object.entries(s))if(typeof d=="object"&&d!==null){let p=d;if(p.required===!0){a.push(f);let{required:h,...m}=p;u[f]=t(m)}else u[f]=t(p)}else u[f]=d;i.properties=u;let c=Array.isArray(i.required)?i.required:[],l=[...new Set([...c,...a])];l.length>0?i.required=l:i.required=Object.keys(u)}i.type==="array"&&i.items&&typeof i.items=="object"&&i.items!==null&&(i.items=t(i.items));for(let s of["anyOf","oneOf","allOf"])Array.isArray(i[s])&&(i[s]=i[s].map(a=>t(a)));return i}o(t,"processSchema");let r=t(e);return r.type==="array"?r={type:"object",properties:{items:r},required:["items"],additionalProperties:!1}:r.type!=="object"&&(r={type:"object",properties:{value:r},required:["value"],additionalProperties:!1}),r}o(tJe,"normalizeSchemaForStructuredOutput");var sF={};G(sF,{basicFields:()=>sJe,calculationFields:()=>oJe,hasCalculationFields:()=>iJe,isBasicViewField:()=>rJe,isCalculationField:()=>U_,isCalculationView:()=>nJe,isV2:()=>aJe,isVisible:()=>gre});var oF=U(require("lodash/pickBy"));function U_(e){return"calculationType"in e}o(U_,"isCalculationField");function rJe(e){return!U_(e)}o(rJe,"isBasicViewField");function nJe(e){return e.type==="calculation"}o(nJe,"isCalculationView");function iJe(e){return Object.values(e.schema||{}).some(U_)}o(iJe,"hasCalculationFields");function oJe(e){return(0,oF.default)(e.schema||{},U_)}o(oJe,"calculationFields");function gre(e){return e.visible!==!1}o(gre,"isVisible");function sJe(e,t){let{visible:r=!0}=t||{};return(0,oF.default)(e.schema||{},n=>!U_(n)&&(!r||gre(n)))}o(sJe,"basicFields");function aJe(e){return e.version===2}o(aJe,"isV2");var aF={};G(aF,{checkForRoleInheritanceLoops:()=>cJe});function uJe(e){return`role${ce}${e}`}o(uJe,"prefixForCheck");function cJe(e){let t=new Map;e.forEach(s=>{t.set(s._id,s)});let r=new Set,n=new Set;function i(s){let a=uJe(s);if(n.has(s)||n.has(a))return!0;if(r.has(s)||r.has(a))return!1;n.add(s);let u=t.get(a)||t.get(s);if(!u)return n.delete(s),!1;let c=Array.isArray(u.inherits)?u.inherits:[u.inherits];for(let l of c)if(l&&i(l))return!0;return n.delete(s),r.add(s),!1}return o(i,"hasLoop"),!!e.find(s=>i(s._id))}o(cJe,"checkForRoleInheritanceLoops");var uF={};G(uF,{punctuateList:()=>lJe});function lJe(e){return e.length===0?"":e.length===1?e[0]:e.length===2?e.join(" and "):e.slice(0,-1).join(", ")+" and "+e[e.length-1]}o(lJe,"punctuateList");var fJe=o((e,t)=>{let r=new RegExp("\\s(\\d+)$"),n=e.split(r)[0],i=new RegExp(`${n}\\s(\\d+)$`),s=[];t.filter(u=>{if(u===n)return!0;let c=u.match(i);return c?(s.push(parseInt(c[1])),!0):!1}),s.sort((u,c)=>u-c);let a;if(s.length===0)a=1;else{for(let u=0;u<s.length;u++)if(s[u]!==u+1){a=u+1;break}a||(a=s.length+1)}return`${n} ${a}`},"duplicateName"),dJe=o((e,t,{getName:r,numberFirstItem:n,separator:i=""}={})=>{if(!t?.length)return"";let s=t.trim(),a=n?`${t}1`:s;if(!e?.length)return a;let u=0;return e.forEach(c=>{let l=r?.(c)??c;if(typeof l!="string"||!l.startsWith(s))return;let f=l.split(s);if(f.length!==2)return;f[1].trim()===""&&(f[1]="1");let d=parseInt(f[1]);d>u&&(u=d)}),u===0?a:`${t}${i}${u+1}`},"getSequentialName");var pJe=o(e=>e?e.startsWith("/")?e:`/${e}`:"","normalizePath"),hJe=o(e=>e?e.endsWith("/")?e.slice(0,-1):e:"","normalizeBase"),nl=o((e,t)=>{let r=pJe(t);if(!e)return r;let n=hJe(e);return r?`${n}${r}`:n},"joinBaseAndPath"),yre=o(e=>nl(e,ZA.ACCOUNT),"accountPortalAccountUrl"),bre=o(e=>nl(e,ZA.BILLING),"accountPortalBillingUrl"),_re=o(e=>nl(e,ZA.UPGRADE),"accountPortalUpgradeUrl"),wre=o(e=>nl(e,Hh.WORKSPACES),"builderWorkspacesUrl"),Ere=o(e=>nl(e,Hh.SETTINGS_EMAIL),"builderSettingsEmailUrl"),Sre=o(e=>nl(e,Hh.SETTINGS_AUTH),"builderSettingsAuthUrl"),Tre=o(e=>nl(e,Hh.SETTINGS_PEOPLE_USERS),"builderSettingsPeopleUsersUrl"),vre=o(e=>nl(e,Hh.APPS),"builderAppsUrl"),mJe={accountPortalAccountUrl:yre,accountPortalBillingUrl:bre,accountPortalUpgradeUrl:_re,builderWorkspacesUrl:wre,builderSettingsEmailUrl:Ere,builderSettingsAuthUrl:Sre,builderSettingsPeopleUsersUrl:Tre,builderAppsUrl:vre};function gJe(e,t=""){let r=["B","KB","MB","GB","TB","PB","EB","ZB","YB"],i=0,s=typeof e=="string"?parseInt(e,10):e||0;for(;s>=1024&&i<r.length-1&&++i;)s/=1024;return`${s.toFixed(s<10&&i>0?1:0)}${t}${r[i]}`}o(gJe,"formatBytes");var yJe={getNextExecutionDates:hre,validate:mre};var FR=U(require("lodash/isPlainObject")),cF=U(require("lodash/isEmpty"));var _Je=/{{([^{].*?)}}/g,Rre=Object.values(Wb),wJe=[...Object.values(Qf),...Object.values(wa),...Object.values(Wh)],EJe=o((e,t,r)=>{let n=lo,i=[n.Equals,n.NotEquals,n.StartsWith,n.Like,n.Empty,n.NotEmpty,n.In],s=[n.Equals,n.NotEquals,n.MoreThan,n.LessThan,n.Empty,n.NotEmpty,n.In],a=[n.Contains,n.NotContains,n.ContainsAny,n.Empty,n.NotEmpty],u=[],{type:c,formulaType:l,subtype:f}=e;c==="string"?f==="array"?u=a:u=i:c==="number"||c==="bigint"?u=s:c==="options"?u=[n.Equals,n.NotEquals,n.Empty,n.NotEmpty,n.In]:c==="array"?u=a:c==="boolean"?u=[n.Equals,n.NotEquals,n.Empty,n.NotEmpty]:c==="longform"?u=i:c==="datetime"?u=s:c==="formula"&&l==="static"?u=i.concat([n.MoreThan,n.LessThan]):c==="ai"?u=i.concat([n.MoreThan,n.LessThan]):c==="bb_reference_single"||M_.isDeprecatedSingleUserColumn(e)?u=[n.Equals,n.NotEquals,n.Empty,n.NotEmpty,n.In]:c==="bb_reference"?u=a:c==="barcodeqr"&&(u=i);let d=r?.tableId?.includes("datasource_plus");return t==="_id"&&d&&(u=[n.Equals,n.NotEquals,n.In]),u},"getValidOperatorsForType"),Ore=[lo.StartsWith.value,lo.Like.value,lo.Equals.value,lo.NotEquals.value,lo.Contains.value,lo.NotContains.value,lo.ContainsAny.value,lo.In.value];function pF(e,t){for(let r of Rre)e[r]&&(e[r].conditions=e[r].conditions.map(n=>t(n)));return e}o(pF,"recurseLogicalOperators");var hF=o(e=>{for(let t of Ore)if(e[t])for(let r of Object.keys(e)){if(r!==t)continue;if(typeof e[r]=="object")for(let[i,s]of Object.entries(e[r]))(s==null||s===""||SJe(s))&&delete e[t][i]}return e=pF(e,hF),e},"cleanupQuery");function SJe(e){return Array.isArray(e)&&e.length===0}o(SJe,"isEmptyArray");var eR=o(e=>mF(e).key,"removeKeyNumbering"),mF=o(e=>{if(typeof e=="string"&&e.match(/\d[0-9]*:/g)!=null){let t=e.split(":");return{prefix:`${t.shift()}:`,key:t.join(":")}}else return{key:e}},"getKeyNumbering"),lF=class{static{o(this,"ColumnSplitter")}constructor(t,r){if(this.tableNames=t.map(n=>n.name),this.tableIds=t.map(n=>n._id),this.relationshipColumnNames=t.flatMap(n=>Object.keys(n.schema).filter(i=>n.schema[i].type==="link")),this.relationships=this.tableNames.concat(this.tableIds).concat(this.relationshipColumnNames).sort((n,i)=>i.length-n.length),r?.aliases){this.aliases={};for(let[n,i]of Object.entries(r.aliases))this.aliases[i]=n}this.columnPrefix=r?.columnPrefix}run(t){let{prefix:r,key:n}=mF(t),i;if(this.aliases)for(let a of Object.keys(this.aliases||{})){let u=`${a}.`;n.startsWith(u)&&(i=this.aliases[a],n=n.slice(u.length))}let s;for(let a of this.relationships){let u=`${a}.`;if(n.startsWith(u)){let c=n.split(u);c.shift(),s=u,n=c.join(".");break}}return this.columnPrefix&&n.startsWith(this.columnPrefix)&&(n=nF(n.slice(this.columnPrefix.length))),{tableName:i,numberPrefix:r,relationshipPrefix:s,column:n}}};function TJe(e){if(!e||!e?.operator||!e?.field)return;let t={},{operator:r,field:n,type:i,externalType:s}=e,{value:a}=e;(r==="empty"||r==="notEmpty")&&(a=null);let u=typeof a=="string"&&(a.match(_Je)||[]).length>0;switch(i){case"datetime":if(!u&&r!=="empty"&&r!=="notEmpty"){if(!a)return;if(typeof a=="string")a=new Date(a).toISOString();else if(jA(r))return t[r]??={},t[r][n]=a,t}break;case"number":typeof a=="string"&&!u&&(r==="oneOf"?a=a.split(",").map(parseFloat):a=parseFloat(a));break;case"boolean":a=`${a}`.toLowerCase()==="true";break;case"array":["contains","notContains","containsAny"].includes(r.toLocaleString())&&typeof a=="string"&&(a=a.split(","));break}if(jA(r)){let l=VX[s]||{min:Number.MIN_SAFE_INTEGER,max:Number.MAX_SAFE_INTEGER};t[r]??={},t[r][n]={low:i==="number"?l.min:"0000-00-00T00:00:00.000Z",high:i==="number"?l.max:"9999-00-00T00:00:00.000Z"}}else if(r==="rangeHigh"&&a!=null&&a!=="")t.range??={},t.range[n]={...t.range[n],high:a};else if(r==="rangeLow"&&a!=null&&a!=="")t.range??={},t.range[n]={...t.range[n],low:a};else if(xX(r)||DX(r)||jA(r))i==="boolean"?r==="equal"&&a===!1?(t.notEqual=t.notEqual||{},t.notEqual[n]=!0):r==="notEqual"&&a===!1?(t.equal=t.equal||{},t.equal[n]=!0):(t[r]??={},t[r][n]=a):(t[r]??={},t[r][n]=a);else throw new Error(`Unsupported operator: ${r}`);return t}o(TJe,"buildCondition");function tR(e){let t={filters:[]};for(let r of e)"operator"in r&&r.operator==="allOr"?t.allOr=!0:"onEmptyFilter"in r?t.onEmptyFilter=r.onEmptyFilter:t.filters.push(r);return t}o(tR,"splitFiltersArray");function Ire(e){if(!e)return{};if(Array.isArray(e)&&(e=MM(e),!e))return{};let t={};e.onEmptyFilter?t.onEmptyFilter=e.onEmptyFilter:t.onEmptyFilter="all";let r=Are(e.logicalOperator||"all");return t[r]={conditions:(e.groups||[]).map(n=>{if(n.groups){let c=Ire(n);return delete c.onEmptyFilter,c}let{allOr:i,onEmptyFilter:s,filters:a}=tR(n.filters||[]);s&&(t.onEmptyFilter=s);let u=i?"$or":"$and";return n.logicalOperator&&(u=Are(n.logicalOperator)),{[u]:{conditions:a.map(TJe).filter(c=>c)}}})},t}o(Ire,"buildQuery");function Are(e){return e==="all"?"$and":"$or"}o(Are,"logicalOperatorFromUI");function gF(e){if(!e)return e;for(let t of Object.values(wa)){let r=e[t];if(!(r==null||!(0,FR.default)(r)))for(let n of Object.keys(r)){if(Array.isArray(r[n]))continue;let i=r[n];typeof i=="string"?r[n]=i.split(",").map(s=>s.trim()):r[n]=[i]}}return pF(e,gF),e}o(gF,"fixupFilterArrays");function vJe(e,t){let r=BR(e,t.query);t.sort&&(r=Cre(r,t.sort,t.sortOrder||"ascending",t.sortType));let n=r.length;t.limit&&(r=xre(r,t.limit.toString()));let i={rows:r};return t.countRows&&(i.totalRows=n),i}o(vJe,"search");function BR(e,t){if(!e||!Array.isArray(e))return[];if(!t)return e;if(t=hF(t),t=gF(t),!fF(t)&&t.onEmptyFilter==="none")return[];let r=o((T,R)=>A=>{for(let[O,I]of Object.entries(t[T]||{})){let D=$c(T)?A:UM(A,eR(O)),x=R(D,I);if(t.allOr&&x)return!0;if(!t.allOr&&!x)return!1}return!t.allOr},"match"),n=r("string",(T,R)=>typeof T!="string"||typeof R!="string"?!1:T.toLowerCase().startsWith(R.toLowerCase())),i=r("fuzzy",(T,R)=>typeof T!="string"||typeof R!="string"?!1:T.toLowerCase().includes(R.toLowerCase())),s=r("range",(T,R)=>{if(T==null||T===""||((0,FR.default)(R.low)&&(0,cF.default)(R.low)&&(R.low=void 0),(0,FR.default)(R.high)&&(0,cF.default)(R.high)&&(R.high=void 0),R.low==null&&R.high==null))return!1;let A=+T;if(!isNaN(A)){let I=+R.low,D=+R.high;if(!isNaN(I)&&!isNaN(D))return A>=I&&A<=D;if(isNaN(I)){if(!isNaN(D))return A<=D}else return A>=I}let O=(0,lm.default)(T);if(O.isValid()){let I=(0,lm.default)(R.low||"0000-00-00T00:00:00.000Z"),D=(0,lm.default)(R.high||"9999-00-00T00:00:00.000Z");if(I.isValid()&&D.isValid())return O.isAfter(I)&&O.isBefore(D)||O.isSame(I)||O.isSame(D);if(I.isValid())return O.isAfter(I)||O.isSame(I);if(D.isValid())return O.isBefore(D)||O.isSame(D)}return R.low!=null&&R.high!=null?T>=R.low&&T<=R.high:R.low!=null?T>=R.low:R.high!=null?T<=R.high:!1}),a=o((T,R)=>{if(Array.isArray(T)){for(let O of T)if(a(O,R))return!0;return!1}if(T&&typeof T=="object"&&typeof R=="string")return T._id===R;if(T===R)return!0;if(T==null&&R!=null||T!=null&&R==null)return!1;let A=(0,lm.default)(T);if(A.isValid()){let O=(0,lm.default)(R);if(O.isValid())return A.isSame(O)}return!1},"_valueMatches"),u=o(T=>(...R)=>!T(...R),"not"),c=r("equal",a),l=r("notEqual",u(a)),f=o(T=>typeof T=="string"?T==="":Array.isArray(T)?T.length===0:T&&typeof T=="object"?Object.keys(T).length===0:T==null,"_empty"),d=r("empty",f),p=r("notEmpty",u(f)),h=r("oneOf",(T,R)=>(typeof R=="string"&&(R=R.split(",")),typeof T=="number"&&(R=R.map(A=>parseFloat(A))),Array.isArray(R)?R.some(A=>a(T,A)):!1)),m=o(T=>(R,A)=>!Array.isArray(R)||(typeof A=="string"&&(A=A.split(","),typeof R[0]=="number"&&(A=A.map(O=>parseFloat(O)))),!Array.isArray(A))?!1:A.length===0?!0:A[T](O=>a(R,O)),"_contains"),g=r("contains",(T,R)=>Array.isArray(R)&&R.length===0?!0:m("every")(T,R)),y=r("notContains",(T,R)=>Array.isArray(R)&&R.length===0?!0:u(m("every"))(T,R)),b=r("containsAny",m("some")),w=r("$and",(T,R)=>{if(!R.length)return!1;for(let A of R)if(!BR([T],A).length)return!1;return!0}),E=r("$or",(T,R)=>{if(!R.length)return!1;for(let A of R)if(BR([T],{...A,allOr:!0}).length)return!0;return!1}),S=o(T=>{let R={string:n,fuzzy:i,range:s,equal:c,notEqual:l,empty:d,notEmpty:p,oneOf:h,contains:g,containsAny:b,notContains:y,$and:w,$or:E},A=Object.entries(t||{}).filter(([O,I])=>!["allOr","onEmptyFilter"].includes(O)&&I&&Object.keys(I).length>0).map(([O])=>R[O]?.(T)??!1);return fF(t)?t.allOr?A.some(O=>O===!0):A.every(O=>O===!0):!0},"docMatch");return e.filter(S)}o(BR,"runQuery");function Cre(e,t,r,n="string"){if(!t||!r||!n)return e;let i=o(s=>s==null?s:n==="string"?`${s}`:parseFloat(s),"parse");return e.slice().sort((s,a)=>{let u=i(s[t]),c=i(a[t]),l=c==null||u>c?1:-1;return r.toLowerCase()==="descending"?l*-1:l})}o(Cre,"sort");function xre(e,t){let r=typeof t=="number"?t:parseFloat(t);return isNaN(r)?e:e.slice(0,r)}o(xre,"limit");var fF=o(e=>{if(!e)return!1;let t=o(r=>{for(let n of Rre)if(r[n])for(let i of r[n]?.conditions||[]){let s=t(i);if(s)return s}for(let n of wJe){let i=r[n];if(!i||typeof i!="object")continue;if(Object.entries(i).filter(a=>{let u=a[1]!==void 0||a[1]!==null||a[1]!=="";return n==="notEmpty"||u}).length!==0)return!0}return!1},"check");return t(e)},"hasFilters");var cn={};G(cn,{applications:()=>bF,automations:()=>wF,screens:()=>vF,users:()=>TF});var bF={};G(bF,{getDevAppID:()=>AJe,getProdAppID:()=>B_});var yF=ti("app"),F_=ti("app_dev");function AJe(e){if(!e)throw new Error("No app ID provided");if(e.startsWith(F_))return e;let t=e.split(yF);t.shift();let r=t.join(yF);return`${F_}${r}`}o(AJe,"getDevAppID");function B_(e){if(!e)throw new Error("No app ID provided");if(!e.startsWith(F_))return e;let t=e.split(F_);t.shift();let r=t.join(F_);return`${yF}${r}`}o(B_,"getProdAppID");var wF={};G(wF,{checkForCollectStep:()=>_F,isAppAction:()=>IJe,isRowAction:()=>RJe,isWebhookAction:()=>OJe});function RJe(e){return e.definition.trigger?.stepId==="ROW_ACTION"}o(RJe,"isRowAction");function OJe(e){return e.definition.trigger?.stepId==="WEBHOOK"}o(OJe,"isWebhookAction");function IJe(e){return e.definition.trigger?.stepId==="APP"}o(IJe,"isAppAction");function Dre(e){if(!e||!Array.isArray(e))return!1;for(let t of e){if(t.stepId==="COLLECT")return!0;if(FX(t)&&t.inputs.children){for(let r of Object.values(t.inputs.children))if(Dre(r))return!0}}return!1}o(Dre,"hasCollectBlockRecursive");function _F(e){return Dre(e.definition.steps)}o(_F,"checkForCollectStep");var TF={};G(TF,{canCreateApps:()=>CJe,containsUserID:()=>UJe,getGlobalUserID:()=>MJe,getUserAppGroups:()=>FJe,hasAdminPermissions:()=>SF,hasAppBuilderPermissions:()=>WR,hasBuilderPermissions:()=>LJe,hasCreatorPermissions:()=>GR,isAdmin:()=>q_,isAdminOrBuilder:()=>DJe,isAdminOrGlobalBuilder:()=>PJe,isAdminOrWorkspaceBuilder:()=>xJe,isBuilder:()=>EF,isCreator:()=>kJe,isGlobalBuilder:()=>jR,userAppAccessList:()=>BJe});function EF(e,t){return e?e.builder?.global?!0:!!(t&&e.builder?.apps?.includes(B_(t))):!1}o(EF,"isBuilder");function jR(e){return EF(e)&&!WR(e)||q_(e)}o(jR,"isGlobalBuilder");function CJe(e){return jR(e)||GR(e)}o(CJe,"canCreateApps");function q_(e){return e?SF(e):!1}o(q_,"isAdmin");function xJe(e,t){return e?!!(q_(e)||t&&e.builder?.apps?.includes(B_(t))):!1}o(xJe,"isAdminOrWorkspaceBuilder");function DJe(e,t){return EF(e,t)||q_(e)}o(DJe,"isAdminOrBuilder");function PJe(e){return jR(e)||q_(e)}o(PJe,"isAdminOrGlobalBuilder");function WR(e){if(!e)return!1;let t=e.builder?.apps?.length;return!!!e.builder?.global&&t!=null&&t>0}o(WR,"hasAppBuilderPermissions");function NJe(e){return e?!!Object.values(e.roles??{}).find(t=>t==="CREATOR"):!1}o(NJe,"hasAppCreatorPermissions");function LJe(e){return e?e.builder?.global||WR(e)||GR(e):!1}o(LJe,"hasBuilderPermissions");function SF(e){return e?!!e.admin?.global:!1}o(SF,"hasAdminPermissions");function GR(e){return e?!!e.builder?.creator:!1}o(GR,"hasCreatorPermissions");function kJe(e){return e?jR(e)||SF(e)||GR(e)||WR(e)||NJe(e):!1}o(kJe,"isCreator");function MJe(e){if(typeof e!="string")return e;let t=`ro${ce}ta_users${ce}`;return e.startsWith(t)?e.split(t)[1]:e}o(MJe,"getGlobalUserID");function UJe(e){return typeof e!="string"?!1:e.includes(`us${ce}`)}o(UJe,"containsUserID");function Pre(e,t){return t?.filter(r=>r.users?.find(n=>n._id===e))||[]}o(Pre,"getUserGroups");function FJe(e,t,r){let n=B_(e);return Pre(t,r).filter(s=>Object.keys(s.roles||{}).find(a=>a===n))}o(FJe,"getUserAppGroups");function BJe(e,t){let n=Pre(e._id,t).flatMap(s=>Object.keys(s.roles||{})),i=[...Object.keys(e?.roles||{}),...n];return[...new Set(i)]}o(BJe,"userAppAccessList");var vF={};G(vF,{findInSettings:()=>qJe});function qJe(e,t){let r=[];function n(i,s=""){for(let[a,u]of Object.entries(i))u&&(typeof u=="string"&&u.includes(t)?r.push({setting:s?`${s}.${a}`:a,value:u}):typeof u=="object"&&n(u,a))}return o(n,"recurse"),n(e.props),r}o(qJe,"findInSettings");var qdr={string:!0,longform:!0,options:!0,number:!0,datetime:!0,formula:!0,ai:!0,auto:!0,internal:!0,barcodeqr:!0,bigint:!0,boolean:!1,array:!1,attachment:!1,attachment_single:!1,signature_single:!1,link:!1,json:!1,bb_reference:!1,bb_reference_single:!1},jdr={string:!0,longform:!0,options:!0,number:!0,datetime:!0,auto:!0,internal:!0,barcodeqr:!0,bigint:!0,boolean:!0,json:!1,formula:!1,ai:!1,attachment:!1,attachment_single:!1,signature_single:!1,array:!1,link:!1,bb_reference:!1,bb_reference_single:!1},Wdr={number:!0,json:!0,datetime:!0,longform:!0,string:!0,options:!0,array:!0,bigint:!0,boolean:!0,auto:!1,internal:!1,barcodeqr:!1,formula:!1,ai:!1,attachment:!1,attachment_single:!1,signature_single:!1,link:!1,bb_reference:!0,bb_reference_single:!0};function Nre(e){let t=Object.keys(e.schema),r=t.map(s=>s.toLowerCase()),n=new Set(r),i=[];if(n.size!==r.length)for(let s of n.keys())r.filter(u=>u===s).length>1&&i.push(s);for(let s of Tn)t.find(a=>a===s)&&i.push(s);return i}o(Nre,"findDuplicateInternalColumns");var Ve={};G(Ve,{steps:()=>o1,triggers:()=>s1});var o1={};G(o1,{agent:()=>r1,apiRequest:()=>NF,bash:()=>AF,branch:()=>RF,classifyText:()=>YF,collect:()=>OF,createRow:()=>IF,delay:()=>CF,deleteRow:()=>xF,discord:()=>DF,executeQuery:()=>PF,executeScript:()=>LF,executeScriptV2:()=>kF,extract:()=>t1,extractState:()=>n1,filter:()=>MF,generate:()=>e1,getRow:()=>UF,loop:()=>FF,loopV2:()=>i1,make:()=>BF,n8n:()=>qF,openai:()=>jF,outgoingWebhook:()=>WF,promptLLM:()=>JF,queryRows:()=>GF,sendSmtpEmail:()=>$F,serverLog:()=>VF,slack:()=>HF,summarise:()=>ZF,translate:()=>XF,triggerAutomationRun:()=>QF,updateRow:()=>KF,zapier:()=>zF});var AF={};G(AF,{definition:()=>jJe});var jJe={name:"Bash Scripting",tagline:"Execute a bash command",icon:"git-branch",description:"Run a bash script",type:"ACTION",internal:!0,features:{LOOPING:!0},stepId:"EXECUTE_BASH",inputs:{},schema:{inputs:{properties:{code:{type:"string",customType:"code",title:"Code"}},required:["code"]},outputs:{properties:{stdout:{type:"string",description:"Standard output of your bash command or script"},success:{type:"boolean",description:"Whether the command was successful"}},required:["stdout"]}}};var RF={};G(RF,{definition:()=>WJe});var WJe={name:"Branch",icon:"git-branch",tagline:"Branch from this step",description:"Branching",stepId:"BRANCH",internal:!0,features:{},inputs:{},schema:{inputs:{properties:{branches:{properties:{name:{type:"string"},condition:{customType:"filters"}}},children:{type:"array"}},required:["conditions"]},outputs:{properties:{branchName:{type:"string"},status:{type:"string",description:"Branch result"},branchId:{type:"string",description:"Branch ID"},success:{type:"boolean",description:"Branch success"}},required:["output"]}},type:"LOGIC"};var OF={};G(OF,{definition:()=>GJe});var GJe={name:"Collect Data",tagline:"Collect data to be sent to design",icon:"stack",description:"Collects specified data so it can be provided to the design section",type:"ACTION",internal:!0,features:{},stepId:"COLLECT",inputs:{},schema:{inputs:{properties:{collection:{type:"string",title:"What to Collect"}},required:["collection"]},outputs:{properties:{success:{type:"boolean",description:"Whether the action was successful"},value:{type:"string",description:"Collected data"}},required:["success","value"]}}};var IF={};G(IF,{definition:()=>$Je});var $Je={name:"Create Row",tagline:"Create a {{inputs.enriched.table.name}} row",icon:"rows-plus-bottom",description:"Add a row to your database",type:"ACTION",internal:!0,features:{LOOPING:!0},stepId:"CREATE_ROW",inputs:{},schema:{inputs:{properties:{row:{type:"object",properties:{tableId:{type:"string",customType:"table"}},customType:"row",title:"Table",required:["tableId"]}},required:["row"]},outputs:{properties:{row:{type:"object",customType:"row",description:"The new row"},response:{type:"object",description:"The response from the table"},success:{type:"boolean",description:"Whether the row creation was successful"},id:{type:"string",description:"The identifier of the new row"},revision:{type:"string",description:"The revision of the new row"}},required:["success","id","revision"]}}};var CF={};G(CF,{definition:()=>VJe});var VJe={name:"Delay",icon:"clock",tagline:"Delay for {{inputs.time}} milliseconds",description:"Delay the automation until an amount of time has passed",stepId:"DELAY",internal:!0,features:{},inputs:{},schema:{inputs:{properties:{time:{type:"number",title:"Delay in milliseconds"}},required:["time"]},outputs:{properties:{success:{type:"boolean",description:"Whether the delay was successful"}},required:["success"]}},type:"LOGIC"};var xF={};G(xF,{definition:()=>HJe});var HJe={description:"Delete a row from your database",icon:"trash-simple",name:"Delete Row",tagline:"Delete a {{inputs.enriched.table.name}} row",type:"ACTION",stepId:"DELETE_ROW",internal:!0,features:{LOOPING:!0},inputs:{},schema:{inputs:{properties:{tableId:{type:"string",customType:"table",title:"Table"},id:{type:"string",title:"Row ID"}},required:["tableId","id"]},outputs:{properties:{row:{type:"object",customType:"row",description:"The deleted row"},response:{type:"object",description:"The response from the table"},success:{type:"boolean",description:"Whether the deletion was successful"}},required:["row","success"]}}};var DF={};G(DF,{definition:()=>QJe});var QJe={name:"Discord Message",tagline:"Send a message to a Discord server",description:"Send a message to a Discord server",icon:"ri-discord-line",stepId:"discord",type:"ACTION",internal:!1,features:{LOOPING:!0},inputs:{},schema:{inputs:{properties:{url:{type:"string",title:"Discord Webhook URL"},username:{type:"string",title:"Bot Name"},avatar_url:{type:"string",title:"Bot Avatar URL"},content:{type:"string",title:"Message"}},required:["url","content"]},outputs:{properties:{httpStatus:{type:"number",description:"The HTTP status code of the request"},response:{type:"string",description:"The response from the Discord Webhook"},success:{type:"boolean",description:"Whether the message sent successfully"}}}}};var PF={};G(PF,{definition:()=>KJe});var KJe={name:"External Data Connector",tagline:"Execute Data Connector",icon:"database",description:"Execute a query in an external data connector",type:"ACTION",stepId:"EXECUTE_QUERY",internal:!0,features:{LOOPING:!0},inputs:{},schema:{inputs:{properties:{query:{type:"object",properties:{queryId:{type:"string",customType:"query"}},customType:"queryParams",title:"Parameters",required:["queryId"]}},required:["query"]},outputs:{properties:{response:{type:"object",description:"The response from the datasource execution"},info:{type:"object",description:"Some query types may return extra data, like headers from a REST query"},success:{type:"boolean",description:"Whether the action was successful"}},required:["response","success"]}}};var NF={};G(NF,{definition:()=>zJe});var zJe={name:"API Request",tagline:"Execute a REST request",icon:"globe",description:"Execute a HTTP query from a REST datasource",type:"ACTION",stepId:"API_REQUEST",internal:!0,features:{LOOPING:!0},inputs:{},schema:{inputs:{properties:{query:{type:"object",properties:{queryId:{type:"string"}},customType:"queryParams",title:"Parameters",required:["queryId"]}},required:["query"]},outputs:{properties:{response:{type:"object",description:"The response from the datasource execution"},info:{type:"object",description:"Some query types may return extra data, like headers from a REST query"},success:{type:"boolean",description:"Whether the action was successful"}},required:["response","success"]}}};var LF={};G(LF,{definition:()=>YJe});var YJe={name:"JS Scripting",tagline:"Execute JavaScript Code",deprecated:!0,icon:"code",description:"Run a piece of JavaScript code in your automation",type:"ACTION",internal:!0,stepId:"EXECUTE_SCRIPT",inputs:{},features:{LOOPING:!0},schema:{inputs:{properties:{code:{type:"string",customType:"code",title:"Code"}},required:["code"]},outputs:{properties:{value:{type:"string",description:"The result of the return statement"},success:{type:"boolean",description:"Whether the action was successful"}},required:["success"]}}};var kF={};G(kF,{definition:()=>JJe});var JJe={name:"JavaScript",tagline:"Execute JavaScript Code",icon:"brackets-angle",description:"Run a piece of JavaScript code in your automation",type:"ACTION",internal:!0,new:!1,stepId:"EXECUTE_SCRIPT_V2",inputs:{},features:{LOOPING:!0},schema:{inputs:{properties:{code:{type:"string",customType:"code",title:"Code"}},required:["code"]},outputs:{properties:{value:{type:"string",description:"The result of the return statement"},success:{type:"boolean",description:"Whether the action was successful"}},required:["success"]}}};var MF={};G(MF,{PrettyFilterConditions:()=>Lre,definition:()=>XJe});var Lre={EQUAL:"Equals",NOT_EQUAL:"Not equals",GREATER_THAN:"Greater than",LESS_THAN:"Less than"},XJe={name:"Condition",tagline:"{{inputs.field}} {{inputs.condition}} {{inputs.value}}",icon:"git-branch",description:"Conditionally halt automations which do not meet certain conditions",type:"LOGIC",internal:!0,features:{},stepId:"FILTER",inputs:{condition:"EQUAL"},schema:{inputs:{properties:{field:{type:"string",title:"Reference Value"},condition:{type:"string",title:"Condition",enum:Object.values(KA),pretty:Object.values(Lre)},value:{type:"string",title:"Comparison Value"}},required:["field","condition","value"]},outputs:{properties:{success:{type:"boolean",description:"Whether the action was successful"},result:{type:"boolean",description:"Whether the logic block passed"}},required:["success","result"]}}};var UF={};G(UF,{definition:()=>e7e});var ZJe={ascending:"Ascending",descending:"Descending"},e7e={description:"Get a single row from the database",icon:"box-arrow-down",name:"Get Row",tagline:"Get a row from {{inputs.enriched.table.name}} table",type:"ACTION",stepId:"GET_ROW",internal:!0,features:{LOOPING:!0},inputs:{},schema:{inputs:{properties:{tableId:{type:"string",customType:"table",title:"Table"},rowId:{type:"string",title:"Row ID"},filters:{type:"object",customType:"filters",title:"Filtering"},sortColumn:{type:"string",title:"Sort Column",customType:"column"},sortOrder:{type:"string",title:"Sort Order",enum:Object.values(uo),pretty:Object.values(ZJe)}},required:["tableId"]},outputs:{properties:{row:{type:"object",customType:"row",description:"The row that was found"},success:{type:"boolean",description:"Whether the query was successful"}},required:["row","success"]}}};var FF={};G(FF,{definition:()=>t7e});var t7e={name:"Looping",icon:"recycle",tagline:"Loop the block",description:"Loop",stepId:"LOOP",internal:!0,features:{},inputs:{},schema:{inputs:{properties:{option:{customType:"loopOption",title:"Input type"},binding:{type:"string",title:"Binding / Value"},iterations:{type:"number",title:"Max loop iterations"},failure:{type:"string",title:"Failure Condition"}},required:["type","value","iterations","failure"]},outputs:{properties:{items:{customType:"item",description:"The item currently being executed"},success:{type:"boolean",description:"Whether the message loop was successfully"},iterations:{type:"number",description:"The amount of times the block ran"}},required:["success","items","iterations"]}},type:"LOGIC"};var BF={};G(BF,{definition:()=>r7e});var r7e={name:"Make Integration",stepTitle:"Make",tagline:"Trigger a Make scenario",description:"Performs a webhook call to Make and gets the response (if configured)",icon:"ri-shut-down-line",stepId:"integromat",type:"ACTION",internal:!1,features:{LOOPING:!0},inputs:{},schema:{inputs:{properties:{url:{type:"string",title:"Webhook URL"},body:{type:"json",title:"Payload"}},required:["url","body"]},outputs:{properties:{success:{type:"boolean",description:"Whether call was successful"},httpStatus:{type:"number",description:"The HTTP status code returned"},response:{type:"object",description:"The webhook response - this can have properties"}},required:["success","response"]}}};var qF={};G(qF,{definition:()=>n7e});var n7e={name:"n8n Integration",stepTitle:"n8n",tagline:"Trigger an n8n workflow",description:"Performs a webhook call to n8n and gets the response (if configured)",icon:"ri-shut-down-line",stepId:"n8n",type:"ACTION",internal:!1,features:{LOOPING:!0},inputs:{},schema:{inputs:{properties:{url:{type:"string",title:"Webhook URL"},method:{type:"string",title:"Method",enum:Object.values(Hb)},authorization:{type:"string",title:"Authorization"},body:{type:"json",title:"Payload"}},required:["url","method"]},outputs:{properties:{success:{type:"boolean",description:"Whether call was successful"},httpStatus:{type:"number",description:"The HTTP status code returned"},response:{type:"object",description:"The webhook response - this can have properties"}},required:["success","response"]}}};var jF={};G(jF,{definition:()=>i7e});var kre=(u=>(u.GPT_4O_MINI="gpt-4o-mini",u.GPT_4O="gpt-4o",u.GPT_4="gpt-4",u.GPT_35_TURBO="gpt-3.5-turbo",u.GPT_5_MINI="gpt-5-mini",u.GPT_5="gpt-5",u.GPT_5_NANO="gpt-5-nano",u))(kre||{}),i7e={name:"OpenAI",tagline:"Send prompts to ChatGPT",icon:"flow-arrow",description:"Interact with the OpenAI ChatGPT API.",type:"ACTION",internal:!0,features:{},deprecated:!1,stepId:"OPENAI",inputs:{prompt:""},schema:{inputs:{properties:{prompt:{type:"string",title:"Prompt"},model:{type:"string",title:"Model",enum:Object.values(kre)}},required:["prompt","model"]},outputs:{properties:{success:{type:"boolean",description:"Whether the action was successful"},response:{type:"string",description:"What was output"}},required:["success","response"]}}};var WF={};G(WF,{definition:()=>o7e});var Mre=(s=>(s.POST="POST",s.GET="GET",s.PUT="PUT",s.DELETE="DELETE",s.PATCH="PATCH",s))(Mre||{}),o7e={deprecated:!0,name:"Outgoing webhook",tagline:"Send a {{inputs.requestMethod}} request",icon:"paper-plane-right",description:"Send a request of specified method to a URL",type:"ACTION",internal:!0,features:{LOOPING:!0},stepId:"OUTGOING_WEBHOOK",inputs:{requestMethod:"POST",url:"http://",requestBody:"{}",headers:"{}"},schema:{inputs:{properties:{requestMethod:{type:"string",enum:Object.values(Mre),title:"Request method"},url:{type:"string",title:"URL"},requestBody:{type:"string",title:"JSON Body",customType:"wide"},headers:{type:"string",title:"Headers",customType:"wide"}},required:["requestMethod","url"]},outputs:{properties:{response:{type:"object",description:"The response from the webhook"},httpStatus:{type:"number",description:"The HTTP status code returned"},success:{type:"boolean",description:"Whether the action was successful"}},required:["response","success"]}}};var GF={};G(GF,{definition:()=>a7e});var s7e={ascending:"Ascending",descending:"Descending"},a7e={description:"Query rows from the database",icon:"magnifying-glass",name:"Query Rows",tagline:"Query rows from {{inputs.enriched.table.name}} table",type:"ACTION",stepId:"QUERY_ROWS",internal:!0,features:{LOOPING:!0},inputs:{},schema:{inputs:{properties:{tableId:{type:"string",customType:"table",title:"Table"},filters:{type:"object",customType:"filters",title:"Filtering"},sortColumn:{type:"string",title:"Sort Column",customType:"column"},sortOrder:{type:"string",title:"Sort Order",enum:Object.values(uo),pretty:Object.values(s7e)},limit:{type:"number",title:"Limit",customType:"queryLimit"}},required:["tableId"]},outputs:{properties:{rows:{type:"array",customType:"rows",description:"The rows that were found"},success:{type:"boolean",description:"Whether the query was successful"}},required:["rows","success"]}}};var $F={};G($F,{definition:()=>u7e});var u7e={description:"Send an email using SMTP",tagline:"Send SMTP email to {{inputs.to}}",icon:"envelope",name:"Send Email (SMTP)",type:"ACTION",internal:!0,features:{LOOPING:!0},stepId:"SEND_EMAIL_SMTP",inputs:{},schema:{inputs:{properties:{to:{type:"string",title:"Send To"},from:{type:"string",title:"Send From"},cc:{type:"string",title:"CC"},bcc:{type:"string",title:"BCC"},subject:{type:"string",title:"Email Subject"},contents:{type:"longform",title:"Message",description:"Use markdown or HTML for rich text formatting: **bold**, _italics_, # Headings, * Bullets, <br> for line breaks, and more."},addInvite:{type:"boolean",title:"Add calendar invite"},startTime:{type:"date",title:"Start Time",dependsOn:"addInvite"},endTime:{type:"date",title:"End Time",dependsOn:"addInvite"},summary:{type:"string",title:"Meeting Summary",dependsOn:"addInvite"},location:{type:"string",title:"Location",dependsOn:"addInvite"},attachments:{type:"attachment",customType:"multi_attachments",title:"Attachments"}},required:["to","from","subject","contents"]},outputs:{properties:{success:{type:"boolean",description:"Whether the email was sent"},response:{type:"object",description:"A response from the email client, this may be an error"}},required:["success"]}}};var VF={};G(VF,{definition:()=>c7e});var c7e={name:"Backend log",tagline:"Console log a value in the backend",icon:"activity",description:"Logs the given text to the server (using console.log)",type:"ACTION",internal:!0,features:{LOOPING:!0},stepId:"SERVER_LOG",inputs:{text:""},schema:{inputs:{properties:{text:{type:"string",title:"Log"}},required:["text"]},outputs:{properties:{success:{type:"boolean",description:"Whether the action was successful"},message:{type:"string",description:"What was output"}},required:["success","message"]}}};var HF={};G(HF,{definition:()=>l7e});var l7e={name:"Slack Message",tagline:"Send a message to Slack",description:"Send a message to Slack",icon:"ri-slack-line",stepId:"slack",type:"ACTION",internal:!1,features:{LOOPING:!0},inputs:{},schema:{inputs:{properties:{url:{type:"string",title:"Incoming Webhook URL"},text:{type:"string",title:"Message"}},required:["url","text"]},outputs:{properties:{httpStatus:{type:"number",description:"The HTTP status code of the request"},success:{type:"boolean",description:"Whether the message sent successfully"},response:{type:"string",description:"The response from the Slack Webhook"}}}}};var QF={};G(QF,{definition:()=>f7e});var f7e={name:"Trigger an automation",tagline:"Triggers an automation synchronously",icon:"arrows-clockwise",description:"Triggers an automation synchronously",type:"ACTION",internal:!0,features:{},stepId:"TRIGGER_AUTOMATION_RUN",inputs:{},schema:{inputs:{properties:{automation:{type:"object",properties:{automationId:{type:"string",customType:"automation"}},customType:"automationFields",title:"Automation Fields",required:["automationId"]},timeout:{type:"number",title:"Timeout (ms)"}},required:["automationId"]},outputs:{properties:{success:{type:"boolean",description:"Whether the automation was successful"},value:{type:"object",description:"Automation Result"}},required:["success","value"]}}};var KF={};G(KF,{definition:()=>d7e});var d7e={name:"Update Row",tagline:"Update a {{inputs.enriched.table.name}} row",icon:"arrow-clockwise",description:"Update a row in your database",type:"ACTION",internal:!0,features:{LOOPING:!0},stepId:"UPDATE_ROW",inputs:{},schema:{inputs:{properties:{meta:{type:"object",title:"Field settings"},row:{type:"object",customType:"row",title:"Table"},rowId:{type:"string",title:"Row ID"}},required:["row","rowId"]},outputs:{properties:{row:{type:"object",customType:"row",description:"The updated row"},response:{type:"object",description:"The response from the table"},success:{type:"boolean",description:"Whether the action was successful"},id:{type:"string",description:"The identifier of the updated row"},revision:{type:"string",description:"The revision of the updated row"}},required:["success","id","revision"]}}};var zF={};G(zF,{definition:()=>p7e});var p7e={name:"Zapier Webhook",stepId:"zapier",type:"ACTION",internal:!1,features:{LOOPING:!0},description:"Trigger a Zapier Zap via webhooks",tagline:"Trigger a Zapier Zap",icon:"ri-flashlight-line",inputs:{},schema:{inputs:{properties:{url:{type:"string",title:"Webhook URL"},body:{type:"json",title:"Payload"}},required:["url"]},outputs:{properties:{httpStatus:{type:"number",description:"The HTTP status code of the request"},response:{type:"string",description:"The response from Zapier"}}}}};var YF={};G(YF,{definition:()=>h7e});var h7e={name:"Classify Text",icon:"PageTag",tagline:"Classify text into predefined categories using AI",description:"Analyzes text and assigns it to one of the categories you provide.",stepId:"CLASSIFY_CONTENT",internal:!0,inputs:{},features:{LOOPING:!0},schema:{inputs:{properties:{textInput:{type:"longform",title:"Text",description:"The text content you want the AI to classify."},categoryItems:{type:"array",customType:"categories",title:"Categories",description:"Add categories for the AI to use when classifying text."}},required:["textInput","categoryItems"]},outputs:{properties:{category:{type:"string",description:"The category assigned by the AI."},success:{type:"boolean",description:"Whether the classification was successful."}},required:["category","success"]}},type:"ACTION"};var JF={};G(JF,{definition:()=>m7e});var m7e={name:"LLM Prompt",tagline:"Send prompts to LLM",icon:"Algorithm",description:"Interact with an LLM.",type:"ACTION",internal:!0,features:{},stepId:"PROMPT_LLM",inputs:{prompt:""},schema:{inputs:{properties:{prompt:{type:"longform",title:"Prompt"}},required:["prompt","model"]},outputs:{properties:{success:{type:"boolean",description:"Whether the action was successful"},response:{type:"string",description:"What was output"}},required:["success","response"]}}};var XF={};G(XF,{definition:()=>g7e});var g7e={name:"Translate",tagline:"Translate text to a different language",icon:"globe",description:"Translate text to a different language.",type:"ACTION",internal:!0,features:{},stepId:"TRANSLATE",inputs:{prompt:""},schema:{inputs:{properties:{text:{type:"string",title:"Text"},language:{type:"string",title:"Language"}},required:["text","language"]},outputs:{properties:{success:{type:"boolean",description:"Whether the action was successful"},response:{type:"string",description:"What was the translated text"}},required:["success","response"]}}};var ZF={};G(ZF,{definition:()=>y7e});var Ure=(n=>(n.SHORT="Short",n.MEDIUM="Medium",n.LONG="Long",n))(Ure||{}),y7e={name:"Summarise",tagline:"Summarise text",icon:"Summarize",description:"Summarise text.",type:"ACTION",internal:!0,features:{},stepId:"SUMMARISE",inputs:{prompt:""},schema:{inputs:{properties:{text:{type:"longform",title:"Text"},length:{type:"string",title:"Length",enum:Object.values(Ure)}},required:["text","length"]},outputs:{properties:{success:{type:"boolean",description:"Whether the action was successful"},response:{type:"string",description:"What was the summarised text"}},required:["success","response"]}}};var e1={};G(e1,{definition:()=>b7e});var b7e={name:"Generate Text",icon:"Edit",tagline:"Generate contentusing AI",description:"Uses AI to generate text content based on your instructions and chosen format",stepId:"GENERATE_TEXT",internal:!0,inputs:{contentType:"document"},features:{LOOPING:!0},schema:{inputs:{properties:{contentType:{type:"string",title:"Content type",enum:Object.values($A),pretty:Object.values(UX)},instructions:{type:"longform",title:"Instructions",description:"Provide guidance to help the AI produce content in the format that you want"}},required:["contentType","instructions"]},outputs:{properties:{generatedText:{type:"string",description:"The text content generated by the AI"},success:{type:"boolean",description:"Whether the text generation was successful"}},required:["generatedText","success"]}},type:"ACTION"};var t1={};G(t1,{definition:()=>_7e});var _7e={name:"Extract Document Data",icon:"Document",tagline:"Extract structured data from documents using AI",description:"Extracts structured data from PDF or image according to provided schema.",stepId:"EXTRACT_FILE_DATA",internal:!0,inputs:{},features:{LOOPING:!0},schema:{inputs:{properties:{file:{type:"string",title:"Document",description:"Attachment or Link to the document to extract data from."},source:{type:"string",enum:Object.values(VA),title:"Source",description:"The source of the document to extract data from."},fileType:{dependsOn:{field:"source",value:"URL"},type:"string",enum:Object.values(HA),title:"File Type",description:"The type of file at the URL."},schema:{customType:"triggerSchema",title:"Data schema",description:'Schema defining the structure of data to extract. Example: {"name": "string", "price": "number"}.'}},required:["file","schema"]},outputs:{properties:{data:{type:"json",description:"The structured data extracted from the document."},success:{type:"boolean",description:"Whether the extraction was successful."}},required:["data","success"]}},type:"ACTION"};var r1={};G(r1,{definition:()=>w7e});var w7e={name:"Agent",icon:"Effect",tagline:"Run an AI agent with tools",description:"Execute a pre-configured AI agent that can use tools to accomplish tasks",stepId:"AGENT",internal:!0,inputs:{},features:{LOOPING:!0},schema:{inputs:{properties:{agentId:{customType:"agent",title:"Agent",description:"Select the agent to run"},prompt:{type:"longform",title:"Prompt",description:"The task or question to send to the agent"},useStructuredOutput:{type:"boolean",title:"Use structured output",description:"Constrain the agent response to a specific JSON structure"},outputSchema:{type:"object",customType:"outputSchema",title:"Output Schema",description:"Define the structure of the agent's output",dependsOn:"useStructuredOutput"}},required:["agentId","prompt"]},outputs:{properties:{response:{type:"string",description:"The agent's response"},success:{type:"boolean",description:"Whether the agent completed successfully"},steps:{type:"array",description:"The steps taken by the agent"},output:{type:"object",description:"Structured output from the agent (when output schema is defined)"}},required:["response","success"]}},type:"ACTION"};var n1={};G(n1,{definition:()=>E7e});var E7e={name:"State",tagline:"Extract automation state",icon:"brackets-curly",description:"Extract automation state into a named variable",type:"ACTION",internal:!0,new:!1,stepId:"EXTRACT_STATE",inputs:{},features:{LOOPING:!0},schema:{inputs:{properties:{key:{type:"string",title:"Key"},value:{type:"longform",title:"Value"}},required:["value","key"]},outputs:{properties:{value:{type:"string",description:"The result of the return statement"},success:{type:"boolean",description:"Whether the action was successful"}},required:["success"]}}};var i1={};G(i1,{definition:()=>S7e});var S7e={name:"Loop",icon:"recycle",tagline:"Loop the block",description:"Loop",stepId:"LOOP_V2",internal:!0,features:{},inputs:{},schema:{inputs:{properties:{children:{type:"array",title:"Input type"},binding:{type:"string",title:"Binding / Value"},iterations:{type:"number",title:"Max loop iterations"},failure:{type:"string",title:"Failure Condition"}}},outputs:{properties:{success:{type:"boolean",description:"Loop success"},iterations:{type:"number",description:"The number of iterations executed"},items:{type:"json",description:"Per-step iteration results"},summary:{type:"json",description:"Loop summary including per-step counters"}},required:["success"]}},type:"LOGIC"};var s1={};G(s1,{definitions:()=>D7e});var Fre={name:"User action",event:"app:trigger",icon:"cursor-click",tagline:"Automation fired from the frontend",description:"Trigger an automation from an action inside your app",stepId:"APP",inputs:{},schema:{inputs:{properties:{fields:{type:"object",customType:"triggerSchema",title:"Fields"}},required:[]},outputs:{properties:{fields:{type:"object",description:"Fields submitted from the app frontend",customType:"triggerSchema"}},required:["fields"]}},type:"TRIGGER"};var Bre={name:"CRON / Schedule",event:"cron:trigger",icon:"clock",tagline:"Cron Trigger (<b>{{inputs.cron}}</b>)",description:"Triggers automation on a cron schedule.",stepId:"CRON",inputs:{},schema:{inputs:{properties:{cron:{type:"string",customType:"cron",title:"Expression"}},required:["cron"]},outputs:{properties:{timestamp:{type:"number",description:"Timestamp the cron was executed"}},required:["timestamp"]}},type:"TRIGGER"};var qre={name:"Email Received",event:"email:trigger",icon:"envelope",tagline:"Email Trigger",description:"Triggers automation when an email is received",stepId:"EMAIL",inputs:{host:"",port:993,secure:!0,username:"",password:"",mailbox:"INBOX"},schema:{inputs:{properties:{host:{type:"string",description:"IMAP host address"},port:{type:"number",description:"IMAP port"},secure:{type:"boolean",description:"Use TLS/SSL for the IMAP connection"},username:{type:"string",description:"IMAP username"},password:{type:"string",description:"IMAP password"},mailbox:{type:"string",description:"Mailbox to monitor"}},required:["host","port","secure","username","password"]},outputs:{properties:{from:{type:"string",description:"Who sent the email"},to:{type:"string",description:"Who received the email"},cc:{type:"array",subtype:"string",description:"Who was CC'd on the email"},subject:{type:"string",description:"What was the subject of the email"},sentAt:{type:"datetime",description:"When the email was sent"},bodyText:{type:"string",description:"Email content (plain text)"}},required:["from","to"]}},type:"TRIGGER"};var jre={name:"Row Deleted",event:"row:delete",icon:"trash-simple",tagline:"Row is deleted from {{inputs.enriched.table.name}}",description:"Fired when a row is deleted from your database",stepId:"ROW_DELETED",inputs:{},schema:{inputs:{properties:{tableId:{type:"string",customType:"table",title:"Table"}},required:["tableId"]},outputs:{properties:{row:{type:"object",customType:"row",description:"The row that was deleted"}},required:["row"]}},type:"TRIGGER"};var Wre={name:"Row Created",event:"row:save",icon:"rows-plus-bottom",tagline:"Row is added to {{inputs.enriched.table.name}}",description:"Fired when a row is added to your database",stepId:"ROW_SAVED",inputs:{},schema:{inputs:{properties:{tableId:{type:"string",customType:"table",title:"Table"},filters:{type:"object",customType:"trigger_filter",title:"Filtering"}},required:["tableId"]},outputs:{properties:{row:{type:"object",customType:"row",description:"The new row that was created"},id:{type:"string",description:"Row ID - can be used for updating"},revision:{type:"string",description:"Revision of row"}},required:["row","id"]}},type:"TRIGGER"};var Gre={name:"Row Updated",event:"row:update",icon:"arrow-clockwise",tagline:"Row is updated in {{inputs.enriched.table.name}}",description:"Fired when a row is updated in your database",stepId:"ROW_UPDATED",inputs:{},schema:{inputs:{properties:{tableId:{type:"string",customType:"table",title:"Table"},filters:{type:"object",customType:"trigger_filter",title:"Filtering"}},required:["tableId"]},outputs:{properties:{oldRow:{type:"object",customType:"row",description:"The row that was updated",title:"Old Row"},row:{type:"object",customType:"row",description:"The row before it was updated",title:"Row"},id:{type:"string",description:"Row ID - can be used for updating"},revision:{type:"string",description:"Revision of row"}},required:["row","id"]}},type:"TRIGGER"};var $re={name:"Webhook",event:"web:trigger",icon:"paper-plane-right",tagline:"Webhook endpoint is hit",description:"Trigger an automation when a HTTP POST webhook is hit",stepId:"WEBHOOK",inputs:{},schema:{inputs:{properties:{schemaUrl:{type:"string",customType:"webhookUrl",title:"Schema URL"},triggerUrl:{type:"string",customType:"webhookUrl",title:"Trigger URL"}},required:["schemaUrl","triggerUrl"]},outputs:{properties:{body:{type:"object",description:"Body of the request which hit the webhook"}},required:["body"]}},type:"TRIGGER"};var Vre={type:"TRIGGER",name:"Row Action",event:"row:action",icon:"tree-structure",tagline:"Row action triggered in {{inputs.enriched.table.name}} by {{inputs.enriched.row._id}}",description:"row action workflow",stepId:"ROW_ACTION",inputs:{},schema:{inputs:{properties:{tableId:{type:"string",customType:"table",title:"Table",readonly:!0}},required:["tableId"]},outputs:{properties:{id:{type:"string",description:"Row ID - can be used for updating"},revision:{type:"string",description:"Revision of row"},table:{type:"object",customType:"table",title:"The table linked to the row action"},row:{type:"object",customType:"row",description:"The row linked to the row action"}}}}};var D7e={ROW_SAVED:Wre,ROW_UPDATED:Gre,ROW_DELETED:jre,WEBHOOK:$re,APP:Fre,CRON:Bre,EMAIL:qre,ROW_ACTION:Vre};var P7e=Object.values(Me).sort((e,t)=>t.length-e.length);function Hre(e){return P7e.find(t=>e.startsWith(`${t}${ce}`))}o(Hre,"getDocumentType");var N7e=Object.values(Hc).sort((e,t)=>t.length-e.length);function Qre(e){return N7e.find(t=>e.startsWith(`${t}${ce}`))}o(Qre,"getVirtualDocumentType");var L7e=new RegExp("^datasource_plus_(.+)__(.+)$"),$R=o(e=>t=>!!t&&t.startsWith(`${e}${ce}`),"idCheckFor"),k7e=o(e=>{let t=e.match(L7e);return!!e&&t!==null},"isExternalTableId"),Ns=o(e=>M7e(e)||k7e(e),"isTableIdOrExternalTableId"),M7e=$R("ta"),ln=$R("view"),fm=$R("datasource"),Kre=$R("query");function Zr(e){if(!ln(e))throw new Error("Unable to extract table ID, is not a view ID");let t=e.split(ce);return t.shift(),e=t.join(ce),new RegExp(`^(?<tableId>.+)${ce}([^${ce}]+)$`).exec(e).groups.tableId}o(Zr,"getTableIdFromViewId");var a1=(n=>(n.ALL="all",n.AUTOMATION="automation",n.STATUS="status",n))(a1||{}),ol=(f=>(f.USER_BY_WORKSPACE="by_app",f.USER_BY_EMAIL="by_email2",f.BY_API_KEY="by_api_key",f.LINK="by_link",f.ROUTING="screen_routes_2",f.AUTOMATION_LOGS="automation_logs",f.ACCOUNT_BY_EMAIL="account_by_email",f.PLATFORM_USERS_LOWERCASE="platform_users_lowercase_2",f.USER_BY_GROUP="user_by_group",f.WORKSPACE_BACKUP_BY_TRIGGER="by_trigger",f))(ol||{}),j_={by_email2:["by_email"]},tr={GLOBAL:{name:"global-db",docs:{apiKeys:"apikeys",usageQuota:"usage_quota",licenseInfo:"license_info",environmentVariables:"environmentvariables"}},PLATFORM_INFO:{name:"global-info",docs:{tenants:"tenants",install:"install"}},AUDIT_LOGS:{name:"audit-logs"},SCIM_LOGS:{name:"scim-logs"},SELF_HOST_CLOUD:{name:"self-host-cloud"}},Ls=ti("app"),u1=ti("app_dev"),ks=u1,sl="internal",zre="budibase",Fn="_design/sqlite",Yre="ta_bb_jobs",Jre="ta_bb_inventory",Xre="ta_bb_expenses",Zre="ta_bb_employee",VR=`ro${ce}ta_users${ce}`,pd=(r=>(r[r.SQLITE=Fn]="SQLITE",r.MIGRATIONS="_design/migrations",r))(pd||{});var c1=(r=>(r.ACTIVE="active",r.INACTIVE="inactive",r))(c1||{}),dm=(u=>(u.Auth="budibase:auth",u.Init="budibase:init",u.ACCOUNT_RETURN_URL="budibase:account:returnurl",u.DatasourceAuth="budibase:datasourceauth",u.OIDC_CONFIG="budibase:oidc:config",u.FeatureFlags="budibase:featureflags",u.RecaptchaSession="budibase:recaptcha",u))(dm||{}),ene=(i=>(i.OWNER="owner",i.ADMIN="admin",i.BUILDER="builder",i.WORKSPACE_MANAGER="workspace_manager",i))(ene||{}),tne=(c=>(c.SETTINGS="settings",c.ACCOUNT="account",c.SMTP="smtp",c.GOOGLE="google",c.OIDC="oidc",c.OIDC_LOGOS="logos_oidc",c.SCIM="scim",c.AI="AI",c))(tne||{}),U7e=new Date(-2147483647e3),l1=new Date(2147483647e3),Lr="default";var Be={};G(Be,{CacheKey:()=>bn,TTL:()=>Op,bustCache:()=>Yg,destroy:()=>yS,docWritethrough:()=>YH,generic:()=>bS,get:()=>Ip,invite:()=>XH,keys:()=>V0,passwordReset:()=>ZH,store:()=>uc,user:()=>df,withCache:()=>ef,withCacheWithDynamicTTL:()=>YRe,workspace:()=>Kw,writethrough:()=>U3});var YH={};G(YH,{DocWritethrough:()=>zH,DocWritethroughProcessor:()=>gS,getProcessor:()=>kMt,init:()=>zRe});var Vn={};G(Vn,{BudibaseQueue:()=>Gs,InMemoryQueue:()=>AI,JobQueue:()=>ng,QueuedProcessor:()=>KH,UnretriableError:()=>G0,shutdown:()=>lct});var f1=require("crypto"),QR=require("fs"),B7e=require("lodash"),W_=require("path");var q7e=process.env.TOP_LEVEL_PATH||process.env.SERVER_TOP_LEVEL_PATH||(0,W_.resolve)((0,W_.join)(__dirname,"..","..","..")),rne=!1;!rne&&HR()&&!d1()&&(require("dotenv").config({path:(0,W_.join)(q7e,".env")}),rne=!0);function d1(){return ine()}o(d1,"isTest");function ine(){return process.env.NODE_ENV==="jest"||process.env.JEST_WORKER_ID!=null&&process.env.JEST_WORKER_ID!=="null"}o(ine,"isJest");function HR(){return process.env.NODE_ENV!=="production"}o(HR,"isDev");function j7e(e){if(e)return parseInt(e)}o(j7e,"parseIntSafe");var pm={BACKUPS:"backups",APPS:"prod-budi-app-assets",TEMPLATES:"templates",GLOBAL:"global",PLUGINS:"plugins",TEMP:"tmp-file-attachments"},nne=!!parseInt(process.env.SELF_HOSTED||"");function W7e(){return process.env.API_ENCRYPTION_KEY?process.env.API_ENCRYPTION_KEY:process.env.JWT_SECRET}o(W7e,"getAPIEncryptionKey");function G7e(){return process.env.HTTP_LOGGING===void 0?!0:process.env.HTTP_LOGGING}o(G7e,"httpLogging");function $7e(){function e(r){function n(u,c){let l=`${c}/${u}`;if((0,QR.existsSync)(l))return l;let f=`${c}/..`;return f===c?null:n(u,f)}o(n,"findFileInAncestors");let i=n(r,process.cwd()),s=(0,QR.readFileSync)(i,"utf-8");return JSON.parse(s)}o(e,"getParentFile");let t;if(HR()&&!d1())try{t=`${e("lerna.json").version}+local`}catch{}try{let r=e("package.json");return{VERSION:t||process.env.BUDIBASE_VERSION||r.version,SERVICE_NAME:r.name}}catch{return{VERSION:process.env.BUDIBASE_VERSION||"",SERVICE_NAME:""}}}o($7e,"getPackageJsonFields");function V7e(){return al.SERVICE_TYPE==="worker"}o(V7e,"isWorker");function H7e(){return al.SERVICE_TYPE==="apps"}o(H7e,"isApps");function Q7e(){return al.BUDIBASE_ENVIRONMENT==="QA"}o(Q7e,"isQA");function K7e(){return process.env.SERVICE?process.env.SERVICE:process.env.APPS_SERVICE?process.env.APPS_SERVICE:process.env.WORKER_SERVICE?process.env.WORKER_SERVICE:"budibase"}o(K7e,"getServiceName");var al={isTest:d1,isJest:ine,isDev:HR,isWorker:V7e,isApps:H7e,isQA:Q7e,isProd:()=>!HR(),BUDIBASE_ENVIRONMENT:process.env.BUDIBASE_ENVIRONMENT,JWT_SECRET:process.env.JWT_SECRET?(0,f1.createSecretKey)(process.env.JWT_SECRET,"utf8"):void 0,JWT_SECRET_FALLBACK:process.env.JWT_SECRET_FALLBACK?(0,f1.createSecretKey)(process.env.JWT_SECRET_FALLBACK,"utf8"):void 0,ENCRYPTION_KEY:process.env.ENCRYPTION_KEY,API_ENCRYPTION_KEY:W7e(),COUCH_DB_URL:process.env.COUCH_DB_URL||"http://localhost:4005",COUCH_DB_SQL_URL:process.env.COUCH_DB_SQL_URL,COUCH_DB_USERNAME:process.env.COUCH_DB_USER,COUCH_DB_PASSWORD:process.env.COUCH_DB_PASSWORD,GOOGLE_CLIENT_ID:process.env.GOOGLE_CLIENT_ID,GOOGLE_CLIENT_SECRET:process.env.GOOGLE_CLIENT_SECRET,SALT_ROUNDS:process.env.SALT_ROUNDS,REDIS_URL:process.env.REDIS_URL||"localhost:6379",REDIS_PASSWORD:process.env.REDIS_PASSWORD,REDIS_USERNAME:process.env.REDIS_USERNAME,REDIS_CLUSTERED:process.env.REDIS_CLUSTERED,MINIO_ACCESS_KEY:process.env.MINIO_ACCESS_KEY,MINIO_SECRET_KEY:process.env.MINIO_SECRET_KEY,AWS_SESSION_TOKEN:process.env.AWS_SESSION_TOKEN,AWS_REGION:process.env.AWS_REGION||"eu-west-1",MINIO_URL:process.env.MINIO_URL,MINIO_ENABLED:process.env.MINIO_ENABLED||1,S3_IGNORE_SELF_SIGNED:process.env.S3_IGNORE_SELF_SIGNED,INTERNAL_API_KEY:process.env.INTERNAL_API_KEY,INTERNAL_API_KEY_FALLBACK:process.env.INTERNAL_API_KEY_FALLBACK,MULTI_TENANCY:process.env.MULTI_TENANCY,ACCOUNT_PORTAL_URL:process.env.ACCOUNT_PORTAL_URL||"https://account.budibase.app",INTERNAL_ACCOUNT_PORTAL_URL:process.env.INTERNAL_ACCOUNT_PORTAL_URL||process.env.ACCOUNT_PORTAL_URL||"https://account.budibase.app",ACCOUNT_PORTAL_API_KEY:process.env.ACCOUNT_PORTAL_API_KEY||"",BUDICLOUD_URL:process.env.BUDICLOUD_URL||"https://budibase.app",DISABLE_ACCOUNT_PORTAL:process.env.DISABLE_ACCOUNT_PORTAL,SELF_HOSTED:nne,COOKIE_DOMAIN:process.env.COOKIE_DOMAIN,PLATFORM_URL:process.env.PLATFORM_URL||"",POSTHOG_TOKEN:process.env.POSTHOG_TOKEN,POSTHOG_PERSONAL_TOKEN:process.env.POSTHOG_PERSONAL_TOKEN,POSTHOG_API_HOST:process.env.POSTHOG_API_HOST||"https://us.i.posthog.com",POSTHOG_FEATURE_FLAGS_ENABLED:process.env.POSTHOG_FEATURE_FLAGS_ENABLED,ENABLE_ANALYTICS:process.env.ENABLE_ANALYTICS,TENANT_FEATURE_FLAGS:process.env.TENANT_FEATURE_FLAGS,CLOUDFRONT_CDN:process.env.CLOUDFRONT_CDN,CLOUDFRONT_PRIVATE_KEY_64:process.env.CLOUDFRONT_PRIVATE_KEY_64,CLOUDFRONT_PUBLIC_KEY_ID:process.env.CLOUDFRONT_PUBLIC_KEY_ID,BACKUPS_BUCKET_NAME:process.env.BACKUPS_BUCKET_NAME||pm.BACKUPS,APPS_BUCKET_NAME:process.env.APPS_BUCKET_NAME||pm.APPS,TEMPLATES_BUCKET_NAME:process.env.TEMPLATES_BUCKET_NAME||pm.TEMPLATES,GLOBAL_BUCKET_NAME:process.env.GLOBAL_BUCKET_NAME||pm.GLOBAL,PLUGIN_BUCKET_NAME:process.env.PLUGIN_BUCKET_NAME||pm.PLUGINS,TEMP_BUCKET_NAME:process.env.TEMP_BUCKET_NAME||pm.TEMP,USE_COUCH:process.env.USE_COUCH||!0,MOCK_REDIS:process.env.MOCK_REDIS,DEFAULT_LICENSE:process.env.DEFAULT_LICENSE,SERVICE:K7e(),LOG_LEVEL:process.env.LOG_LEVEL||"info",SESSION_UPDATE_PERIOD:process.env.SESSION_UPDATE_PERIOD,DEPLOYMENT_ENVIRONMENT:process.env.DEPLOYMENT_ENVIRONMENT||"docker-compose",HTTP_LOGGING:G7e(),ENABLE_AUDIT_LOG_IP_ADDR:process.env.ENABLE_AUDIT_LOG_IP_ADDR,SQL_LOGGING_ENABLE:process.env.SQL_LOGGING_ENABLE,SQL_MAX_ROWS:process.env.SQL_MAX_ROWS,SQL_MAX_RELATED_ROWS:process.env.MAX_RELATED_ROWS,SMTP_FALLBACK_ENABLED:process.env.SMTP_FALLBACK_ENABLED,SMTP_USER:process.env.SMTP_USER,SMTP_PASSWORD:process.env.SMTP_PASSWORD,SMTP_HOST:process.env.SMTP_HOST,SMTP_PORT:parseInt(process.env.SMTP_PORT||""),SMTP_FROM_ADDRESS:process.env.SMTP_FROM_ADDRESS,DISABLE_JWT_WARNING:process.env.DISABLE_JWT_WARNING,BLACKLIST_IPS:process.env.BLACKLIST_IPS,SERVICE_TYPE:"unknown",PASSWORD_MIN_LENGTH:process.env.PASSWORD_MIN_LENGTH,PASSWORD_MAX_LENGTH:process.env.PASSWORD_MAX_LENGTH,ENABLE_SSO_MAINTENANCE_MODE:nne?process.env.ENABLE_SSO_MAINTENANCE_MODE:!1,...$7e(),DISABLE_PINO_LOGGER:process.env.DISABLE_PINO_LOGGER,OFFLINE_MODE:process.env.OFFLINE_MODE,SESSION_EXPIRY_SECONDS:process.env.SESSION_EXPIRY_SECONDS,_set(e,t){process.env[e]=t,al[e]=t},ROLLING_LOG_MAX_SIZE:process.env.ROLLING_LOG_MAX_SIZE||"10M",ENABLE_SCIM_LOGGER:process.env.ENABLE_SCIM_LOGGER,BB_ADMIN_USER_EMAIL:process.env.BB_ADMIN_USER_EMAIL,BB_ADMIN_USER_PASSWORD:process.env.BB_ADMIN_USER_PASSWORD,OPENAI_API_KEY:process.env.OPENAI_API_KEY,MIN_VERSION_WITHOUT_POWER_ROLE:process.env.MIN_VERSION_WITHOUT_POWER_ROLE||"3.0.0",DISABLE_CONTENT_SECURITY_POLICY:process.env.DISABLE_CONTENT_SECURITY_POLICY,BSON_BUFFER_SIZE:j7e(process.env.BSON_BUFFER_SIZE),CUSTOM_CSP_MEDIA_SRC:process.env.CUSTOM_CSP_MEDIA_SRC,CUSTOM_CSP_SCRIPT_SRC:process.env.CUSTOM_CSP_SCRIPT_SRC,CUSTOM_CSP_CONNECT_SRC:process.env.CUSTOM_CSP_CONNECT_SRC,CUSTOM_CSP_IMG_SRC:process.env.CUSTOM_CSP_IMG_SRC,CUSTOM_CSP_FONT_SRC:process.env.CUSTOM_CSP_FONT_SRC,CUSTOM_CSP_FRAME_SRC:process.env.CUSTOM_CSP_FRAME_SRC};var one=["API_ENCRYPTION_KEY","BB_ADMIN_USER_PASSWORD","COUCH_DB_PASSWORD","COUCH_DB_SQL_URL","COUCH_DB_URL","GOOGLE_CLIENT_SECRET","INTERNAL_API_KEY_FALLBACK","INTERNAL_API_KEY","JWT_SECRET","MINIO_ACCESS_KEY","MINIO_SECRET_KEY","OPENAI_API_KEY","REDIS_PASSWORD","REDIS_USERNAME"];for(let[e,t]of Object.entries(al))t==="0"&&(al[e]=0),t==="false"&&(al[e]=0);var L=al;var YR={};G(YR,{Databases:()=>p1,SEPARATOR:()=>hm,SelectableDatabase:()=>KR,getRedisClusterOptions:()=>h1,getRedisConnectionDetails:()=>zR,getRedisOptions:()=>hd,removeDbPrefix:()=>m1});var hm="-",p1=(E=>(E.PW_RESETS="pwReset",E.VERIFICATIONS="verification",E.INVITATIONS="invitation",E.DEV_LOCKS="devLocks",E.DEBOUNCE="debounce",E.SESSIONS="session",E.USER_CACHE="users",E.FLAGS="flags",E.WORKSPACE_METADATA="appMetadata",E.QUERY_VARS="queryVars",E.LICENSES="license",E.GENERIC_CACHE="data_cache",E.WRITE_THROUGH="writeThrough",E.LOCKS="locks",E.SOCKET_IO="socket_io",E.BPM_EVENTS="bpmEvents",E.DOC_WRITE_THROUGH="docWriteThrough",E.RECAPTCHA_SESSION="recaptchaSession",E.OPENAPI_IMPORT_SPECS="openapiImportSpecs",E))(p1||{}),KR=(y=>(y[y.DEFAULT=0]="DEFAULT",y[y.SOCKET_IO=1]="SOCKET_IO",y[y.RATE_LIMITING=2]="RATE_LIMITING",y[y.OPENAPI_IMPORT_SPECS=3]="OPENAPI_IMPORT_SPECS",y[y.UNUSED_3=4]="UNUSED_3",y[y.UNUSED_4=5]="UNUSED_4",y[y.UNUSED_5=6]="UNUSED_5",y[y.UNUSED_6=7]="UNUSED_6",y[y.UNUSED_7=8]="UNUSED_7",y[y.UNUSED_8=9]="UNUSED_8",y[y.UNUSED_9=10]="UNUSED_9",y[y.UNUSED_10=11]="UNUSED_10",y[y.UNUSED_11=12]="UNUSED_11",y[y.UNUSED_12=13]="UNUSED_12",y[y.UNUSED_13=14]="UNUSED_13",y[y.UNUSED_14=15]="UNUSED_14",y))(KR||{});function zR(){let e=L.REDIS_PASSWORD,t=L.REDIS_USERNAME,r=L.REDIS_URL.split("//");if(r=r.length>1?r[1]:r[0],r=r.split("@"),r.length>1){let a=r[0].split(":");t=t||a[0]||void 0,e=a[1],r=r[1]}else r=r[0];let[n,i]=r.split(":"),s=parseInt(i);return{host:n,password:e,username:t,port:isNaN(s)?6379:s}}o(zR,"getRedisConnectionDetails");function h1(){return{slotsRefreshTimeout:2e3,dnsLookup:(e,t)=>t(null,e),redisOptions:{...hd(),tls:{}}}}o(h1,"getRedisClusterOptions");function hd(){let{host:e,password:t,port:r,username:n}=zR();return{connectTimeout:3e4,port:r,host:e,password:t,...n&&{username:n}}}o(hd,"getRedisOptions");function m1(e){let t=e.split(hm);return t.length>=2?(t.shift(),t.join(hm)):t[0]}o(m1,"removeDbPrefix");var kle=U(require("events"));var nt={};G(nt,{Duration:()=>nr,DurationType:()=>Lle,GZIP_PREFIX:()=>vI,clearCookie:()=>Dl,compare:()=>b1,getCookie:()=>$u,getDispatcher:()=>Jut,getWorkspaceIdFromCtx:()=>Bd,gunzipFromBase64:()=>tct,gzipToBase64:()=>ect,hasCircularStructure:()=>Gut,hash:()=>y1,isAudited:()=>Gq,isClient:()=>Wut,isPublicApiRequest:()=>qut,isServingApp:()=>Uut,isServingBuilder:()=>Fut,isServingBuilderPreview:()=>But,isValidInternalAPIKey:()=>rE,newid:()=>Nt,openJwt:()=>EI,setCookie:()=>Nle,time:()=>Vut,timeout:()=>Wq,urlHasProtocol:()=>$ut,validEmail:()=>$q});var sne=require("uuid");function Nt(){return(0,sne.v4)().replace(/-/g,"")}o(Nt,"newid");var g1=require("bcrypt"),z7e=L.SALT_ROUNDS||10;async function y1(e){let t=await g1.genSalt(z7e);return g1.hash(e,t)}o(y1,"hash");async function b1(e,t){return g1.compare(e,t)}o(b1,"compare");var wI=U(require("jsonwebtoken"));var C={};G(C,{DEFAULT_TENANT_ID:()=>Lr,baseGlobalDBName:()=>Vw,doInAutomationContext:()=>Vat,doInContext:()=>yq,doInEnvironmentContext:()=>rut,doInFeatureFlagOverrideContext:()=>vq,doInIPContext:()=>wq,doInIdentityContext:()=>V_,doInLicenseContext:()=>Qat,doInScimContext:()=>nut,doInSelfHostTenantUsingCloud:()=>Hat,doInTenant:()=>ji,doInWorkspaceContext:()=>Yat,doInWorkspaceMigrationContext:()=>Xat,ensureSnippetContext:()=>Bce,getAuditLogDBName:()=>Uce,getAuditLogsDB:()=>out,getAutomationId:()=>bq,getCurrentContext:()=>kd,getDevWorkspaceDB:()=>aut,getDevWorkspaceId:()=>eut,getEnvironmentVariables:()=>iut,getFeatureFlagOverrides:()=>Tq,getFeatureFlags:()=>Eq,getGlobalDB:()=>gt,getGlobalDBName:()=>Ld,getIP:()=>_q,getIdentity:()=>Du,getLicense:()=>Kat,getOrThrowWorkspaceId:()=>Zat,getPlatformURL:()=>gq,getProdWorkspaceDB:()=>sut,getProdWorkspaceId:()=>tut,getScimDBName:()=>jat,getSelfHostCloudDB:()=>zat,getTableForView:()=>uut,getTenantIDFromWorkspaceID:()=>Jm,getTenantId:()=>Ue,getWorkspaceDB:()=>Xm,getWorkspaceId:()=>Si,identity:()=>$_,isMultiTenant:()=>Cl,isScim:()=>Ws,isSelfHostUsingCloud:()=>nI,isTenancyEnabled:()=>Gat,isTenantIdSet:()=>Wat,setFeatureFlags:()=>Sq,setTableForView:()=>cut});var $_={};G($_,{doInAccountContext:()=>Y7e,doInIdentityContext:()=>w1,doInUserContext:()=>E1,getAccountUserId:()=>ane,getIdentity:()=>_1});function _1(){return Du()}o(_1,"getIdentity");function w1(e,t){return V_(e,t)}o(w1,"doInIdentityContext");function E1(e,t,r){let n={...e,_id:e._id,type:"user",hostInfo:{ipAddress:t.request.ip,userAgent:t.userAgent.source}};return w1(n,r)}o(E1,"doInUserContext");function Y7e(e,t){let r=ane(e),n=e.tenantId,i={_id:r,type:"user",tenantId:n,account:e};return w1(i,t)}o(Y7e,"doInAccountContext");function ane(e){let t;return WA(e)?t=e.budibaseUserId:t=e.accountId,t}o(ane,"getAccountUserId");var Ms=o(e=>{let t=S1(e),r,n;if(t.auth?.username)r=t.auth.username;else if(L.COUCH_DB_USERNAME)r=L.COUCH_DB_USERNAME;else if(!L.isTest())throw new Error("CouchDB username not set");if(t.auth?.password)n=t.auth.password;else if(L.COUCH_DB_PASSWORD)n=L.COUCH_DB_PASSWORD;else if(!L.isTest())throw new Error("CouchDB password not set");let i=Buffer.from(`${r}:${n}`).toString("base64"),s=L.COUCH_DB_SQL_URL;if(L.isDev()&&!s)s="http://localhost:4006";else if(!s&&t.url){let a=new URL(t.url);s=t.url.replace(a.port,"4984")}return{url:t.url,sqlUrl:S1(s).url,auth:{username:r,password:n},cookie:`Basic ${i}`}},"getCouchInfo"),S1=o((e=L.COUCH_DB_URL)=>{let t,r,n,i;if(e){/^https?:\/\//i.test(e)||(e=`http://${e}`);let a=e.split("://"),u=a[0],c=a.slice(1).join("://");if(e.includes("@")){let l=c.split("@");i=l[l.length-1];let f=l.slice(0,-1).join("@");if(f.includes(":")){let d=f.split(":");r=d[0],n=d.slice(1).join(":")}else r=f}else i=c;t=`${u}://${i}`}return{url:t,auth:{username:r,password:n}}},"getUrlInfo");var Lce=U(require("@budibase/nano"));var une=U(require("node-fetch"));function JR(e){return e.replace(/(https?:\/\/)|(\/)+/g,"$1$2")}o(JR,"checkSlashesInUrl");async function cne(e,t="GET",r){let{url:n,cookie:i}=Ms(),s=`${n}/${e}`;return await H_({url:s,cookie:i,method:t,body:r})}o(cne,"directCouchCall");async function H_({url:e,cookie:t,method:r,body:n}){let i={method:r,headers:{Authorization:t}};return n&&r!=="GET"&&(typeof n=="string"?(i.body=n,i.headers["Content-Type"]="text/plain"):(i.body=JSON.stringify(n),i.headers["Content-Type"]="application/json")),await(0,une.default)(JR(encodeURI(e)),i)}o(H_,"directCouchUrlCall");async function T1(e,t="GET",r){let n=await cne(e,t,r);if(n.status<300)return await n.json();throw"Cannot connect to CouchDB instance"}o(T1,"directCouchQuery");var Nd=U(require("pouchdb"));var Cce,xce=!1,oq=o((e={})=>{let{url:t,cookie:r}=Ms(),n={prefix:t,fetch:(i,s)=>(s.headers.set("Authorization",r),Nd.default.fetch(i,s))};if(e.inMemory){let i=Sae();Nd.default.plugin(i),n={adapter:"memory"}}if(e.onDisk&&(n={adapter:"leveldb"}),e.replication){let i=Ice();Nd.default.plugin(i.plugin),Nd.default.adapter("writableStream",i.adapters.writableStream)}if(e.find){let i=require("pouchdb-find");Nd.default.plugin(i)}return Nd.default.defaults(n)},"getPouch");function XO(e){Cce=oq(e),xce=!0}o(XO,"init");var Tat=o(()=>{if(!xce)throw new Error("init has not been called")},"checkInitialised");function es(e,t){Tat();let r=new Cce(e,t),n=r.put;return r.put=async(i,s={})=>(i.createdAt||(i.createdAt=new Date().toISOString()),i.updatedAt=new Date().toISOString(),n(i,s)),r.exists=async()=>!(await r.info()).error,r}o(es,"getPouchDB");async function Ww(e){if(!(!e||L.isTest()))try{return await e.close()}catch{}}o(Ww,"closePouchDB");var Mr=U(require("dd-trace"));var Km=class{constructor(t){this.db=t}static{o(this,"DDInstrumentedDatabase")}get name(){return this.db.name}exists(t){return Mr.default.trace("db.exists",r=>(r.addTags({db_name:this.name,doc_id:t}),t?this.db.exists(t):this.db.exists()))}get(t){return Mr.default.trace("db.get",r=>(r.addTags({db_name:this.name,doc_id:t}),this.db.get(t)))}tryGet(t){return Mr.default.trace("db.tryGet",async r=>{r.addTags({db_name:this.name,doc_id:t});let n=await this.db.tryGet(t);return r.addTags({doc_found:n!==void 0}),n})}getMultiple(t,r){return Mr.default.trace("db.getMultiple",async n=>{n.addTags({db_name:this.name,num_docs:t?.length||0,allow_missing:r?.allowMissing});let i=await this.db.getMultiple(t,r);return n.addTags({num_docs_found:i.length}),i})}remove(t,r){return Mr.default.trace("db.remove",async n=>{n.addTags({db_name:this.name,doc_id:t,rev:r});let i=typeof t=="object",s=i?t._id:t;r=i?t._rev:r;let a=await this.db.remove(s,r);return n.addTags({ok:a.ok}),a})}bulkRemove(t,r){return Mr.default.trace("db.bulkRemove",n=>(n.addTags({db_name:this.name,num_docs:t.length,silence_errors:r?.silenceErrors}),this.db.bulkRemove(t,r)))}put(t,r){return Mr.default.trace("db.put",async n=>{n.addTags({db_name:this.name,doc_id:t._id,force:r?.force,return_doc:r?.returnDoc});let i=await this.db.put(t,r);return n.addTags({ok:i.ok}),i})}bulkDocs(t){return Mr.default.trace("db.bulkDocs",r=>(r.addTags({db_name:this.name,num_docs:t.length}),this.db.bulkDocs(t)))}async find(t){return Mr.default.trace("db.find",async r=>{r.addTags({db_name:this.name,...t});let n=await this.db.find(t);return r.addTags({rows_length:n.docs.length}),n})}allDocs(t){return Mr.default.trace("db.allDocs",async r=>{r.addTags({db_name:this.name,...t});let n=await this.db.allDocs(t);return r.addTags({total_rows:n.total_rows,rows_length:n.rows.length,offset:n.offset}),n})}query(t,r){return Mr.default.trace("db.query",async n=>{n.addTags({db_name:this.name,view_name:t,...r});let i=await this.db.query(t,r);return n.addTags({total_rows:i.total_rows,rows_length:i.rows.length,offset:i.offset}),i})}destroy(){return Mr.default.trace("db.destroy",async t=>{t.addTags({db_name:this.name});let r=await this.db.destroy();return t.addTags({ok:r.ok}),r})}compact(){return Mr.default.trace("db.compact",async t=>{t.addTags({db_name:this.name});let r=await this.db.compact();return t.addTags({ok:r.ok}),r})}dump(t,r){return Mr.default.trace("db.dump",n=>(n.addTags({db_name:this.name,batch_limit:r?.batch_limit,batch_size:r?.batch_size,style:r?.style,timeout:r?.timeout,num_doc_ids:r?.doc_ids?.length,view:r?.view}),this.db.dump(t,r)))}load(...t){return Mr.default.trace("db.load",r=>(r.addTags({db_name:this.name,num_args:t.length}),this.db.load(...t)))}createIndex(...t){return Mr.default.trace("db.createIndex",r=>(r.addTags({db_name:this.name,num_args:t.length}),this.db.createIndex(...t)))}deleteIndex(...t){return Mr.default.trace("db.deleteIndex",r=>(r.addTags({db_name:this.name,num_args:t.length}),this.db.deleteIndex(...t)))}getIndexes(...t){return Mr.default.trace("db.getIndexes",r=>(r.addTags({db_name:this.name,num_args:t.length}),this.db.getIndexes(...t)))}sql(t,r){return Mr.default.trace("db.sql",async n=>{n.addTags({db_name:this.name,num_bindings:r?.length});let i=await this.db.sql(t,r);return n.addTags({num_rows:i.length}),i})}sqlPurgeDocument(t){return Mr.default.trace("db.sqlPurgeDocument",r=>(r.addTags({db_name:this.name,num_docs:Array.isArray(t)?t.length:1}),this.db.sqlPurgeDocument(t)))}sqlDiskCleanup(){return Mr.default.trace("db.sqlDiskCleanup",t=>(t.addTags({db_name:this.name}),this.db.sqlDiskCleanup()))}};var pq={};G(pq,{breakExternalTableId:()=>uq,breakRowIdField:()=>Mat,buildExternalTableId:()=>xat,convertRowId:()=>kat,encodeTableId:()=>Dat,encodeViewId:()=>Pat,extractDate:()=>lq,generateRowIdField:()=>Nat,getNativeSql:()=>zm,isExternalTable:()=>aq,isExternalTableID:()=>ZO,isInternalTableID:()=>Cat,isRowId:()=>Lat,isValidFilter:()=>tI,isValidISODateString:()=>eI,isValidISODateStringWithoutTimezone:()=>cq,isValidTime:()=>fq,sqlLog:()=>Gw,validateManyToMany:()=>dq});var sq=`${ce}${ce}`,Dce=/^\[.*]$/g,vat=encodeURIComponent(" "),Aat=/^\d{4}-\d{2}-\d{2}(?:[T ]\d{2}:\d{2}:\d{2}(?:.\d{3})?Z)?$/,Rat=/^\d{4}-\d{2}-\d{2}(?:[T ]\d{2}:\d{2}:\d{2}(?:.\d{3})?)?$/,Oat=/(\d{4}-\d{2}-\d{2})/,Iat=/^(?:\d{2}:)?(?:\d{2}:)(?:\d{2})$/;function ZO(e){return e.startsWith("datasource"+ce)}o(ZO,"isExternalTableID");function Cat(e){return!ZO(e)}o(Cat,"isInternalTableID");function zm(e){let t=e.toSQL();if(Array.isArray(t))return t;let r;return t.toNative&&(r=t.toNative()),{sql:r?.sql||t.sql,bindings:r?.bindings||t.bindings}}o(zm,"getNativeSql");function aq(e){return e?.sourceId&&e.sourceId.includes("datasource"+ce)&&e?.sourceId!==Qb||e?.sourceType==="external"?!0:!!(e?._id&&ZO(e._id))}o(aq,"isExternalTable");function xat(e,t){return`${e}${sq}${encodeURIComponent(t)}`}o(xat,"buildExternalTableId");function Dat(e){return ZO(e)?encodeURIComponent(e):e}o(Dat,"encodeTableId");function Pat(e){return encodeURIComponent(e)}o(Pat,"encodeViewId");function uq(e){let t=e.split(sq),r=t.shift(),n=t.join(sq);if(n.includes(vat)&&(n=decodeURIComponent(n)),!r||!n)throw new Error("Unable to get datasource/table name from table ID");return{datasourceId:r,tableName:n}}o(uq,"breakExternalTableId");function Nat(e=[]){Array.isArray(e)||(e=[e]);for(let t in e)e[t]instanceof Buffer&&(e[t]=e[t].toString());return encodeURIComponent(JSON.stringify(e).replace(/"/g,"'"))}o(Nat,"generateRowIdField");function Lat(e){return Array.isArray(e)||typeof e=="string"&&e.match(Dce)!=null}o(Lat,"isRowId");function kat(e){return Array.isArray(e)?e[0]:typeof e=="string"&&e.match(Dce)!=null?e.substring(1,e.length-1):e}o(kat,"convertRowId");function Mat(e){if(!e)return[];let t=typeof e=="string"?e:e._id,r=decodeURIComponent(t).replace(/'/g,'"');try{let n=JSON.parse(r);return Array.isArray(n)?n:[n]}catch{return[e]}}o(Mat,"breakRowIdField");function eI(e){let t=e.trim();if(!Aat.test(t))return!1;let r=new Date(t);return!isNaN(r.getTime())}o(eI,"isValidISODateString");function cq(e){let t=e.trim();if(!Rat.test(t))return!1;let r=new Date(t);return!isNaN(r.getTime())}o(cq,"isValidISODateStringWithoutTimezone");function lq(e){let t=e.match(Oat);if(t)return t[0]}o(lq,"extractDate");function tI(e){return e!=null&&e!==""}o(tI,"isValidFilter");function fq(e){return Iat.test(e)}o(fq,"isValidTime");function Gw(e,t,r){if(!L.SQL_LOGGING_ENABLE)return;let n=`[SQL] [${e.toUpperCase()}] query="${t}"`;r&&(n+=` values="${r.join(", ")}"`),console.log(n)}o(Gw,"sqlLog");function Uat(e){return!!e.through&&!!e.fromPrimary&&!!e.from&&!!e.toPrimary&&!!e.to}o(Uat,"isValidManyToManyRelationship");function dq(e){if(Uat(e))return e}o(dq,"validateManyToMany");var Pce="Database does not exist.";function Nce(e){return(0,Lce.default)({url:e.url,requestDefaults:{headers:{Authorization:e.cookie}},parseUrl:!1})}o(Nce,"buildNano");var Ol=class extends Error{constructor(r,n){super(r);let i=n.status||n.statusCode||500;this.status=i,this.statusCode=i,this.reason=n.reason||"Unknown",this.name=n.name,this.errid=n.errid||"Unknown",this.description=n.description||"Unknown",this.error=n.error||"Not found"}static{o(this,"CouchDBError")}};function Fat(e,t,r){if(!e||!t)throw new Error("Unable to create database without database name or connection");let n=new Ym(e,r,t);return new Km(n)}o(Fat,"DatabaseWithConnection");var Ym=class e{constructor(t,r,n){this.couchInfo=Ms();this.name=t,this.pouchOpts=r||{},n&&(this.couchInfo=Ms(n),this.instanceNano=Nce(this.couchInfo)),e.nano||e.init()}static{o(this,"DatabaseImpl")}static init(){let t=Ms();e.nano=Nce(t)}exists(t){return t===void 0?this.dbExists():this.docExists(t)}async dbExists(){return(await H_({url:`${this.couchInfo.url}/${this.name}`,method:"HEAD",cookie:this.couchInfo.cookie})).status===200}async docExists(t){try{return await this.performCall(r=>()=>r.head(t)),!0}catch{return!1}}nano(){return this.instanceNano||e.nano}getDb(){return this.nano().db.use(this.name)}async checkAndCreateDb(){let t=!this.pouchOpts?.skip_setup,r=await this.exists();if(!t&&!r)throw new Error("DB does not exist");if(!r)try{await this.nano().db.create(this.name)}catch(n){if(n.statusCode!==412)throw new Ol(n.message,n)}return this.getDb()}async performCallWithDBCreation(t){let r=this.getDb(),n=await t(r);try{return await n()}catch(i){if(i.statusCode===404&&i.reason===Pce)return await this.checkAndCreateDb(),await this.performCallWithDBCreation(t);throw new Ol(`CouchDB error: ${i.message}`,i)}}async performCall(t){let r=this.getDb(),n=await t(r);try{return await n()}catch(i){throw new Ol(`CouchDB error: ${i.message}`,i)}}async get(t){return this.performCall(r=>{if(!t)throw new Error("Unable to get doc without a valid _id.");return()=>r.get(t)})}async tryGet(t){try{return await this.get(t)}catch(r){if(r.statusCode===404)return;throw r}}async getMultiple(t,r){if(!t||t.length===0)return[];t=[...new Set(t)];let n=!r?.excludeDocs,i=await this.allDocs({keys:t,include_docs:n}),s=o(c=>n&&c.doc==null||c.value&&"deleted"in c.value&&c.value.deleted?!0:c.error==="not_found","rowUnavailable"),a=i.rows.filter(c=>!s(c)),u=a.length!==i.rows.length;if(!r?.allowMissing&&u){let l=i.rows.filter(f=>s(f)).map(f=>f.key).join(", ");throw new Error(`Unable to get bulk documents: ${l}`)}return a.map(c=>n?c.doc:c.value)}async remove(t,r){return this.performCall(n=>{let i,s;if(NX(t)?(i=t._id,s=t._rev):(i=t,s=r),!i||!s)throw new Error("Unable to remove doc without a valid _id and _rev.");return()=>n.destroy(i,s)})}async bulkRemove(t,r){let n=await this.performCall(a=>()=>a.bulk({docs:t.map(u=>({...u,_deleted:!0}))}));if(r?.silenceErrors)return;let i=!1,s="Unable to bulk remove documents: ";for(let a of n)a.error&&(i=!0,s+=a.error);if(i)throw new Ol(s,{name:this.name,status:400})}async post(t,r){return t._id||(t._id=Nt()),this.put(t,r)}async put(t,r){if(!t._id)throw new Error("Cannot store document without _id field.");return this.performCallWithDBCreation(async n=>{if(t.createdAt||(t.createdAt=new Date().toISOString()),t.updatedAt=new Date().toISOString(),r?.force&&t._id)try{let i=await this.get(t._id);i&&(t._rev=i._rev)}catch(i){if(i.status!==404)throw i}return async()=>{let i=await n.insert(t);return r?.returnDoc?{...i,doc:{...t,_rev:i.rev}}:i}})}async bulkDocs(t){let r=new Date().toISOString();return this.performCallWithDBCreation(n=>()=>n.bulk({docs:t.map(i=>({createdAt:r,...i,updatedAt:r}))}))}async find(t){return this.performCall(r=>async()=>r.find(t))}async allDocs(t){return this.performCall(r=>async()=>{try{return await r.list(t)}catch(n){if(n.reason===Pce)return{offset:0,total_rows:0,rows:[]};throw n}})}async _sqlQuery(t,r,n){t=JR(`${this.couchInfo.sqlUrl}/${t}`);let i={url:t,method:r,cookie:this.couchInfo.cookie};return n&&(i.body=n),this.performCall(()=>async()=>{let s=await H_(i),a=await s.text();if(s.status>300){let u;try{u=JSON.parse(a)}catch{throw console.error(`SQS error: ${a}`),new Ol("error while running SQS query, please try again later",{name:"sqs_error",status:s.status})}throw u}return JSON.parse(a)})}async sql(t,r){let i=`/${this.name}/${Fn}`;return Gw("sqlite3",t,r),await this._sqlQuery(i,"POST",{query:t,args:r})}async sqlDiskCleanup(){let r=`/${this.name}/_cleanup`;try{await this._sqlQuery(r,"POST")}catch(n){if(n.status!==500)throw n}}async sqlPurgeDocument(t){Array.isArray(t)||(t=[t]);let n=`/${this.name}/_purge`;return await this._sqlQuery(n,"POST",{docs:t})}async query(t,r){return this.performCall(n=>{let[i,s]=t.split("/");return()=>n.view(i,s,r)})}async destroy(){if(await this.exists(Fn)){let t=await this.get(Fn);t.sql.tables={},await this.put(t),await this.sqlDiskCleanup()}try{return await this.nano().db.destroy(this.name)}catch(t){if(t.statusCode===404)return{ok:!0};throw new Ol(t.message,t)}}async compact(){return this.performCall(t=>()=>t.compact())}async dump(t,r){return es(this.name).dump(t,r)}async load(t){return es(this.name).load(t)}async createIndex(t){return es(this.name).createIndex(t)}async deleteIndex(t){return es(this.name).deleteIndex(t)}async getIndexes(){return es(this.name).getIndexes()}};function Ei(e,t){return new Km(new Ym(e,t))}o(Ei,"getDB");async function Oo(e,t,r){let n=Ei(e,r);return await t(n)}o(Oo,"doWithDB");async function hq(e){let t="/_all_dbs";return e&&(t+=`?${e}`),await T1(t)}o(hq,"directCouchAllDbs");var mq="No app provided";function Il(e){if(!e)throw mq;return e.startsWith(ks)}o(Il,"isDevWorkspaceID");function Bat(e){if(!e)throw mq;return e.startsWith(Ls)&&!Il(e)}o(Bat,"isProdWorkspaceID");function $w(e){if(!e)throw mq;return Il(e.appId)}o($w,"isDevWorkspace");function rI(e){if(!e||e.startsWith(ks))return e;let t=e.split(Ls);t.shift();let r=t.join(Ls);return`${ks}${r}`}o(rI,"getDevWorkspaceID");function Io(e){if(!e||!e.startsWith(ks))return e;let t=e.split(ks);t.shift();let r=t.join(ks);return`${Ls}${r}`}o(Io,"getProdWorkspaceID");var kce=require("async_hooks");var tn=class e{static{o(this,"Context")}static{this.storage=new kce.AsyncLocalStorage}static run(t,r){return e.storage.run(t,()=>r())}static get(){return e.storage.getStore()}};var Mce=null;function Ld(e){return e||(e=Ue()),Vw(e)}o(Ld,"getGlobalDBName");function Uce(e){return e||(e=Ue()),e===Lr?tr.AUDIT_LOGS.name:`${e}${ce}${tr.AUDIT_LOGS.name}`}o(Uce,"getAuditLogDBName");function jat(e){return e||(e=Ue()),e===Lr?tr.SCIM_LOGS.name:`${e}${ce}${tr.SCIM_LOGS.name}`}o(jat,"getScimDBName");function Vw(e){return!e||e===Lr?tr.GLOBAL.name:`${e}${ce}${tr.GLOBAL.name}`}o(Vw,"baseGlobalDBName");function gq(){return L.PLATFORM_URL}o(gq,"getPlatformURL");function Cl(){return!!L.MULTI_TENANCY}o(Cl,"isMultiTenant");function Wat(){return!!tn.get()?.tenantId}o(Wat,"isTenantIdSet");function Gat(){return L.MULTI_TENANCY}o(Gat,"isTenancyEnabled");function Jm(e){if(!e)return;if(!Cl())return Lr;let t=e.split(ce),r=t[1]==="dev";if(!(r&&t.length===3||!r&&t.length===2))return r?t[2]:t[1]}o(Jm,"getTenantIDFromWorkspaceID");function $at(e){let t;try{t=tn.get()}catch{t={}}return t={...t,...e},t}o($at,"updateContext");async function qs(e,t){Jat();let r=$at(e);return tn.run(r,t)}o(qs,"newContext");async function Vat(e){return await Bce(),await qs({tenantId:Jm(e.workspaceId),appId:e.workspaceId,automationId:e.automationId},e.task)}o(Vat,"doInAutomationContext");async function yq(e,t){let r=Jm(e);return qs({tenantId:r,appId:e},t)}o(yq,"doInContext");async function ji(e,t){return L.MULTI_TENANCY||(e=e||Lr),qs(e?{tenantId:e}:{},t)}o(ji,"doInTenant");async function Hat(e,t){return qs({tenantId:e,isSelfHostUsingCloud:!0},t)}o(Hat,"doInSelfHostTenantUsingCloud");async function Qat(e,t){return qs({license:e},t)}o(Qat,"doInLicenseContext");function Kat(){return tn.get()?.license}o(Kat,"getLicense");function nI(){return!!tn.get()?.isSelfHostUsingCloud}o(nI,"isSelfHostUsingCloud");function zat(){let e=tn.get();if(!e||!e.isSelfHostUsingCloud)throw new Error("Self-host cloud DB not found");return Ei(tr.SELF_HOST_CLOUD.name)}o(zat,"getSelfHostCloudDB");async function Yat(e,t){return Fce(e,t)}o(Yat,"doInWorkspaceContext");async function Fce(e,t,r){if(!e)throw new Error("workspaceId is required");let n=Jm(e),i={appId:e,...r};return n&&(i.tenantId=n),qs(i,t)}o(Fce,"_doInWorkspaceContext");async function V_(e,t){if(!e)throw new Error("identity is required");let r={identity:e};return e.tenantId&&(r.tenantId=e.tenantId),qs(r,t)}o(V_,"doInIdentityContext");function Jat(){if(tn.get()?.isMigrating)throw new Error("The context cannot be changed, a migration is currently running")}o(Jat,"guardMigration");async function Xat(e,t){return Fce(e,t,{isMigrating:!0})}o(Xat,"doInWorkspaceMigrationContext");function Du(){try{return tn.get()?.identity}catch{}}o(Du,"getIdentity");function Ue(){if(!Cl())return Lr;let t=tn.get()?.tenantId;if(!t)throw new Error("Tenant id not found");return t}o(Ue,"getTenantId");function bq(){return tn.get()?.automationId}o(bq,"getAutomationId");function Si(){let t=tn.get()?.appId;return!t&&L.isTest()&&Mce?Mce:t}o(Si,"getWorkspaceId");function Zat(){let e=Si();if(!e)throw new Error("Workspace id not set");return e}o(Zat,"getOrThrowWorkspaceId");function _q(){return tn.get()?.ip}o(_q,"getIP");var eut=o(()=>{let e=Si();if(!e)throw new Error("Could not get workspaceId");return rI(e)},"getDevWorkspaceId"),tut=o(()=>{let e=Si();if(!e)throw new Error("Could not get workspaceId");return Io(e)},"getProdWorkspaceId");function rut(e,t){if(!e)throw new Error("Must supply environment variables.");return qs({environmentVariables:e},t)}o(rut,"doInEnvironmentContext");function nut(e){return qs({isScim:!0},e)}o(nut,"doInScimContext");function wq(e,t){return qs({ip:e},t)}o(wq,"doInIPContext");async function Bce(){let e=kd();if(!e||e.snippets)return;let t,r=Xm();r&&(t=(await r.tryGet("app_metadata"))?.snippets),e.snippets=t||[]}o(Bce,"ensureSnippetContext");function iut(){let e=tn.get();return e.environmentVariables?e.environmentVariables:null}o(iut,"getEnvironmentVariables");function gt(){let e=tn.get();if(!e||L.MULTI_TENANCY&&!e.tenantId)throw new Error("Global DB not found");if(e.isSelfHostUsingCloud)throw new Error("Global DB not found - self-host users using cloud don't have a global DB");return Ei(Vw(e?.tenantId))}o(gt,"getGlobalDB");function out(){if(!Ue())throw new Error("No tenant ID found - cannot open audit log DB");return Ei(Uce())}o(out,"getAuditLogsDB");function Xm(e){let t=Si();if(!t)throw new Error("Unable to retrieve workspace DB - no workspace ID.");if(nI())throw new Error("Workspace DB not found - self-host users using cloud don't have workspace DBs");return Ei(t,e)}o(Xm,"getWorkspaceDB");function sut(e){let t=Si();if(!t)throw new Error("Unable to retrieve prod DB - no workspace ID.");return Ei(Io(t),e)}o(sut,"getProdWorkspaceDB");function aut(e){let t=Si();if(!t)throw new Error("Unable to retrieve dev DB - no workspace ID.");return Ei(rI(t),e)}o(aut,"getDevWorkspaceDB");function Ws(){return!!tn.get()?.isScim}o(Ws,"isScim");function kd(){try{return tn.get()}catch{return}}o(kd,"getCurrentContext");function Eq(e){let t=kd();if(t)return t.featureFlagCache?.[e]}o(Eq,"getFeatureFlags");function Sq(e,t){let r=kd();r&&(r.featureFlagCache??={},r.featureFlagCache[e]=t)}o(Sq,"setFeatureFlags");function Tq(){return kd()?.featureFlagOverrides||{}}o(Tq,"getFeatureFlagOverrides");async function vq(e,t){return await qs({featureFlagOverrides:e},t)}o(vq,"doInFeatureFlagOverrideContext");function uut(e){let t=kd();if(t)return t.viewToTableCache?.[e]}o(uut,"getTableForView");function cut(e,t){let r=kd();r&&(r.viewToTableCache??={},r.viewToTableCache[e]=t)}o(cut,"setTableForView");var F={};G(F,{AutomationViewMode:()=>a1,BUDIBASE_DATASOURCE_TYPE:()=>zre,DEFAULT_BB_DATASOURCE_ID:()=>Qb,DEFAULT_EMPLOYEE_TABLE_ID:()=>Zre,DEFAULT_EXPENSES_TABLE_ID:()=>Xre,DEFAULT_INVENTORY_TABLE_ID:()=>Jre,DEFAULT_JOBS_TABLE_ID:()=>Yre,DatabaseImpl:()=>Ym,DatabaseWithConnection:()=>Fat,DeprecatedViews:()=>j_,DesignDocuments:()=>pd,DocumentType:()=>Me,InternalTable:()=>Tu,QueryBuilder:()=>Gu,Replication:()=>Rle,SEPARATOR:()=>ce,SQLITE_DESIGN_DOC_ID:()=>Fn,SQS_DATASOURCE_INTERNAL:()=>sl,StaticDatabases:()=>tr,UNICODE_MAX:()=>Mn,USER_METADATA_PREFIX:()=>VR,ViewName:()=>ol,WORKSPACE_DEV:()=>u1,WORKSPACE_DEV_PREFIX:()=>ks,WORKSPACE_PREFIX:()=>Ls,baseGlobalDBName:()=>Vw,checkErrorCode:()=>xle,closePouchDB:()=>Ww,createApiKeyView:()=>wle,createNewUserEmailView:()=>ble,createPlatformAccountEmailView:()=>Sle,createPlatformUserView:()=>Tle,createUserAppView:()=>_le,createView:()=>rg,dbExists:()=>Aut,directCouchAllDbs:()=>hq,directCouchCall:()=>cne,directCouchQuery:()=>T1,directCouchUrlCall:()=>H_,doWithDB:()=>Oo,fullSearch:()=>xut,generateAIConfigID:()=>ole,generateAgentFileID:()=>ile,generateAgentID:()=>ele,generateAgentToolSourceID:()=>nle,generateAppUserID:()=>yI,generateChatAppID:()=>tle,generateChatConversationID:()=>rle,generateDevInfoID:()=>Jce,generateGlobalUserID:()=>tg,generateOAuth2LogID:()=>Zce,generatePluginID:()=>Xce,generateRoleID:()=>Dq,generateRowID:()=>xq,generateTableID:()=>Hce,generateTemplateID:()=>Yce,generateUserMetadataID:()=>Kce,generateVectorDbID:()=>cle,generateWorkspaceAppID:()=>ale,generateWorkspaceFavouriteID:()=>ule,generateWorkspaceID:()=>Vce,getAllDbs:()=>yle,getAllWorkspaces:()=>Yw,getCouchInfo:()=>Ms,getDB:()=>Ei,getDevWorkspaceID:()=>rI,getDevWorkspaceIDs:()=>Tut,getDocParams:()=>ju,getGlobalDBName:()=>Ld,getGlobalIDFromUserMetadataID:()=>zce,getGlobalUserParams:()=>Ud,getLiteLLMKeyID:()=>sle,getOAuth2ConfigParams:()=>hle,getPluginParams:()=>ple,getPouch:()=>oq,getPouchDB:()=>es,getProdWorkpaceIDs:()=>Sut,getProdWorkspaceID:()=>Io,getQueryIndex:()=>lle,getRoleParams:()=>_I,getRowParams:()=>Pq,getStartEndKeyURL:()=>zw,getTemplateParams:()=>dle,getUrlInfo:()=>S1,getUserMetadataParams:()=>fle,getUsersByWorkspaceParams:()=>bI,getWorkspaceAppParams:()=>mle,getWorkspaceFavouriteParams:()=>gle,getWorkspacesByIDs:()=>Eut,init:()=>XO,isDevWorkspace:()=>$w,isDevWorkspaceID:()=>Il,isDocumentConflictError:()=>Put,isGlobalUserID:()=>Qce,isProdWorkspaceID:()=>Bat,isSameWorkspaceID:()=>vut,paginatedSearch:()=>Cut,pagination:()=>Nq,prefixRoleID:()=>qu,queryGlobalView:()=>Wu,queryGlobalViewRaw:()=>Mq,queryPlatformView:()=>Xw,queryView:()=>kq,queryViewRaw:()=>Jw,removeKeyNumbering:()=>Zw,searchIndexes:()=>Bq});var Kw={};G(Kw,{WorkspaceState:()=>Cq,getWorkspaceMetadata:()=>gI,invalidateWorkspaceMetadata:()=>_ut});var xl={};G(xl,{getCacheClient:()=>Rq,getDocWritethroughClient:()=>mut,getInviteClient:()=>Md,getLockClient:()=>Iq,getOpenapiImportSpecsClient:()=>put,getPasswordResetClient:()=>Qw,getSessionClient:()=>eg,getSocketClient:()=>hut,getUserClient:()=>Hw,getWorkspaceClient:()=>mI,getWritethroughClient:()=>Oq,init:()=>ts,shutdown:()=>Gce});var oI=U(require("ioredis"));var iI=require("dd-trace"),jce=require("lodash");var qce;if(L.MOCK_REDIS)try{qce=require("ioredis-mock")}catch{console.log("Mock redis unavailable")}async function lut(e=0){return await iI.tracer.trace("Redis.init",async t=>{if(L.MOCK_REDIS)return t.addTags({mock:!0}),new qce(hd());let r;if(L.REDIS_CLUSTERED){t.addTags({clustered:!0});let{host:n,port:i}=zR();r=new oI.Cluster([{host:n,port:i}],h1())}else r=new oI.default(hd());return new Promise((n,i)=>{r.on("error",s=>{t.addTags({error:!0}),console.error(`failed to connect to redis (db: ${e})`,s),i(s)}),r.on("reconnecting",()=>{console.log(`Redis reconnecting... (db: ${e})`)}),r.on("ready",()=>{t.addTags({connected:!0}),console.log(`Redis ready to receive commands (db: ${e})`),n(r)})})})}o(lut,"init");function fut(e,t){return new Promise((r,n)=>{let i=new Set;e.on("data",s=>s.forEach(a=>i.add(a))),e.on("error",s=>n(s)),e.on("end",async()=>{try{let s=Array.from(i).map(async a=>{let u=await t.get(a);return u&&(u=JSON.parse(u)),{key:m1(a),value:u}});r(await Promise.all(s))}catch(s){n(s)}})})}o(fut,"promisifyStream");function dut(e){return e.isCluster}o(dut,"isCluster");var Aq=class e{static{o(this,"RedisWrapper")}constructor(t,r){this.client=t,this.db=r}static async init(t,r=0){return await iI.tracer.trace("RedisWrapper.init",async n=>{let i=await lut(r);return r&&!L.isTest()&&(n.addTags({db:t}),i.select(r)),new e(i,t)})}trace(t,r){return iI.tracer.trace(t,async n=>(n.addTags({db:this.db}),await r(n)))}prefixed(t){return t.includes(this.db)?t:`${this.db}${hm}${t}`}async finish(){return await this.trace("RedisWrapper.finish",async()=>{await this.client.quit()})}async scan(t=""){return await this.trace("RedisWrapper.scan",async r=>{r.addTags({key:t}),t=`${this.db}${hm}${t}`;let n;dut(this.client)?n=this.client.nodes("master")[0].scanStream({match:t+"*",count:100}):n=this.client.scanStream({match:t+"*",count:100});let i=await fut(n,this.client);return r.addTags({numKeysFound:i.length}),i})}async keys(t){return await this.trace("RedisWrapper.keys",async r=>(r.addTags({pattern:t}),this.client.keys(this.prefixed(t))))}async exists(t){return await this.trace("RedisWrapper.exists",async r=>(r.addTags({key:t}),await this.client.exists(this.prefixed(t))))}async get(t){return await this.trace("RedisWrapper.get",async r=>{r.addTags({key:t});let n=await this.client.get(this.prefixed(t));n!=null&&n.key&&(n.key=t);try{return JSON.parse(n)}catch{return n}})}async bulkGet(t){return await this.trace("RedisWrapper.bulkGet",async r=>{if(r.addTags({numKeys:t.length}),t.length===0)return{};let n=await this.client.mget(t.map(i=>this.prefixed(i)));return r.addTags({numKeysFound:n.length}),(0,jce.zip)(t,n).reduce((i,[s,a])=>{if(s===void 0||a===void 0)throw new Error(`Keys and response length mismatch: ${t.length} vs ${n.length}`);try{i[s]=a?JSON.parse(a):null}catch{i[s]=a}return i},{})})}async store(t,r,n=null){return await this.trace("RedisWrapper.store",async i=>{i.addTags({key:t,expirySeconds:n}),typeof r=="object"&&(r=JSON.stringify(r)),await this.client.set(this.prefixed(t),r),n&&await this.client.expire(this.prefixed(t),n)})}async bulkStore(t,r=null){return await this.trace("RedisWrapper.bulkStore",async n=>{n.addTags({numKeys:Object.keys(t).length,expirySeconds:r});let i=Object.entries(t).reduce((a,[u,c])=>(a[this.prefixed(u)]=typeof c=="object"?JSON.stringify(c):c,a),{}),s=this.client.pipeline();if(s.mset(i),r!==null)for(let a of Object.keys(i))s.expire(a,r);await s.exec()})}async getTTL(t){return await this.trace("RedisWrapper.getTTL",async r=>(r.addTags({key:t}),await this.client.ttl(this.prefixed(t))))}async setExpiry(t,r){return await this.trace("RedisWrapper.setExpiry",async n=>(n.addTags({key:t,expirySeconds:r}),await this.client.expire(this.prefixed(t),r)))}async delete(t){return await this.trace("RedisWrapper.delete",async r=>{r.addTags({key:t}),await this.client.del(this.prefixed(t))})}async bulkDelete(t){return await this.trace("RedisWrapper.bulkDelete",async r=>{r.addTags({numKeys:t.length}),await this.client.del(t.map(n=>this.prefixed(n)))})}async clear(){return await this.trace("RedisWrapper.clear",async t=>{let r=await this.scan();t.addTags({numKeys:r.length}),await Promise.all(r.map(n=>this.delete(n.key)))})}async increment(t){return await this.trace("RedisWrapper.increment",async r=>{r.addTags({key:t});let n=await this.client.incr(this.prefixed(t));if(isNaN(n))throw new Error(`Redis ${t} does not contain a number`);return n})}async deleteIfValue(t,r){return await this.trace("RedisWrapper.deleteIfValue",async n=>{n.addTags({key:t});let i=`
|
|
433
|
+
Curabitur aliquet quam id dui posuere blandit. Vestibulum ac diam sit amet quam vehicula elementum sed sit amet dui. Pellentesque in ipsum id orci porta dapibus. Curabitur non nulla sit amet nisl tempus convallis quis ac lectus. Nulla quis lorem ut libero malesuada feugiat. Proin eget tortor risus. Cras ultricies ligula sed magna dictum porta. Donec sollicitudin molestie malesuada. Pellentesque in ipsum id orci porta dapibus. Vestibulum ac diam sit amet quam vehicula elementum sed sit amet dui. Curabitur non nulla sit amet nisl tempus convallis quis ac lectus. Nulla quis lorem ut libero malesuada feugiat. Proin eget tortor risus. Curabitur aliquet quam id dui posuere blandit. Vestibulum ac diam sit amet quam vehicula elementum sed sit amet dui.`;xqe.exports=HJt});var Fz=v((Pqe,Nqe)=>{"use strict";var Pn=Jn(),mh=pv(),et=Nqe.exports,QJt=Dqe();et.append=function(e,t){return typeof e=="string"&&typeof t=="string"?e+t:e};et.camelcase=function(e){return typeof e!="string"?"":mh.changecase(e,function(t){return t.toUpperCase()})};et.capitalize=function(e){return typeof e!="string"?"":e.charAt(0).toUpperCase()+e.slice(1)};et.capitalizeAll=function(e){if(typeof e!="string")return"";if(Pn.isString(e))return e.replace(/\w\S*/g,function(t){return et.capitalize(t)})};et.center=function(e,t){if(typeof e!="string")return"";for(var r="",n=0;n<t;)r+=" ",n++;return r+e+r};et.chop=function(e){return typeof e!="string"?"":mh.chop(e)};et.dashcase=function(e){return typeof e!="string"?"":mh.changecase(e,function(t){return"-"+t})};et.dotcase=function(e){return typeof e!="string"?"":mh.changecase(e,function(t){return"."+t})};et.downcase=function(){return et.lowercase.apply(this,arguments)};et.ellipsis=function(e,t){if(Pn.isString(e))return e.length<=t?e:et.truncate(e,t)+"\u2026"};et.hyphenate=function(e){return typeof e!="string"?"":e.split(" ").join("-")};et.isString=function(e){return typeof e=="string"};et.lowercase=function(e){return Pn.isObject(e)&&e.fn?e.fn(this).toLowerCase():typeof e!="string"?"":e.toLowerCase()};et.occurrences=function(e,t){if(typeof e!="string")return"";for(var r=t.length,n=0,i=0;(n=e.indexOf(t,n))>-1;)i++,n+=r;return i};et.pascalcase=function(e){return typeof e!="string"?"":(e=mh.changecase(e,function(t){return t.toUpperCase()}),e.charAt(0).toUpperCase()+e.slice(1))};et.pathcase=function(e){return typeof e!="string"?"":mh.changecase(e,function(t){return"/"+t})};et.plusify=function(e,t){return typeof e!="string"?"":(Pn.isString(t)||(t=" "),e.split(t).join("+"))};et.prepend=function(e,t){return typeof e=="string"&&typeof t=="string"?t+e:e};et.raw=function(e){var t=e.fn(),r=Pn.options(this,e);if(r.escape!==!1)for(var n=0;(n=t.indexOf("{{",n))!==-1;)t[n-1]!=="\\"&&(t=t.slice(0,n)+"\\"+t.slice(n)),n+=3;return t};et.remove=function(e,t){return typeof e!="string"?"":Pn.isString(t)?e.split(t).join(""):e};et.removeFirst=function(e,t){return typeof e!="string"?"":Pn.isString(t)?e.replace(t,""):e};et.replace=function(e,t,r){return typeof e!="string"?"":Pn.isString(t)?(Pn.isString(r)||(r=""),e.split(t).join(r)):e};et.replaceFirst=function(e,t,r){return typeof e!="string"?"":Pn.isString(t)?(Pn.isString(r)||(r=""),e.replace(t,r)):e};et.reverse=Hy().reverse;et.sentence=function(e){return typeof e!="string"?"":e.replace(/((?:\S[^\.\?\!]*)[\.\?\!]*)/g,function(t){return t.charAt(0).toUpperCase()+t.substr(1).toLowerCase()})};et.snakecase=function(e){return typeof e!="string"?"":mh.changecase(e,function(t){return"_"+t})};et.split=function(e,t){return typeof e!="string"?"":(Pn.isString(t)||(t=","),e.split(t))};et.startsWith=function(e,t,r){var n=[].slice.call(arguments);return r=n.pop(),Pn.isString(t)&&t.indexOf(e)===0?r.fn(this):typeof r.inverse=="function"?r.inverse(this):""};et.titleize=function(e){if(typeof e!="string")return"";for(var t=e.replace(/[- _]+/g," "),r=t.split(" "),n=r.length,i=[],s=0;n--;){var a=r[s++];i.push(Pqe.capitalize(a))}return i.join(" ")};et.trim=function(e){return typeof e=="string"?e.trim():""};et.trimLeft=function(e){if(Pn.isString(e))return e.replace(/^\s+/,"")};et.trimRight=function(e){if(Pn.isString(e))return e.replace(/\s+$/,"")};et.truncate=function(e,t,r){if(Pn.isString(e))return typeof r!="string"&&(r=""),e.length>t?e.slice(0,t-r.length)+r:e};et.truncateWords=function(e,t,r){if(Pn.isString(e)&&!isNaN(t)){typeof r!="string"&&(r="\u2026");var n=Number(t),i=e.split(/[ \t]/);if(n>=i.length)return e;i=i.slice(0,n);var s=i.join(" ").trim();return s+r}};et.upcase=function(){return et.uppercase.apply(this,arguments)};et.uppercase=function(e){return Pn.isObject(e)&&e.fn?e.fn(this).toUpperCase():typeof e!="string"?"":e.toUpperCase()};et.lorem=function(e){return(isNaN(e)||e<1||!e)&&(e=11),QJt.substring(0,e)}});var qz=v((m7r,Lqe)=>{"use strict";var Bz=require("url"),wv=Jn(),KJt=require("querystring"),gh=Lqe.exports;gh.encodeURI=function(e){if(wv.isString(e))return encodeURIComponent(e)};gh.escape=function(e){if(wv.isString(e))return KJt.escape(e)};gh.decodeURI=function(e){if(wv.isString(e))return decodeURIComponent(e)};gh.urlResolve=function(e,t){return Bz.resolve(e,t)};gh.urlParse=function(e){return Bz.parse(e)};gh.stripQuerystring=function(e){if(wv.isString(e))return e.split("?")[0]};gh.stripProtocol=function(e){if(wv.isString(e)){var t=Bz.parse(e);return t.protocol="",t.format()}}});var jz=v((g7r,kqe)=>{"use strict";var zJt=require("uuid"),YJt=kqe.exports;YJt.uuid=function(){return zJt.v4()}});var Uqe=v((y7r,Mqe)=>{"use strict";Mqe.exports={array:Hy(),code:hBe(),collection:CBe(),comparison:mz(),html:KBe(),i18n:YBe(),inflection:ZBe(),match:fqe(),math:kz(),misc:hqe(),number:Mz(),object:hL(),path:Oqe(),regex:Uz(),string:Fz(),url:qz(),uuid:jz()}});var Fqe=v((b7r,Yy)=>{"use strict";var Ev=Uqe();Yy.exports=o(function(t,r){typeof t=="string"?t=[t]:Array.isArray(t)||(r=t,t=null),r=r||{};var n=r.handlebars||r.hbs||cv();if(Yy.exports.handlebars=n,t)t.forEach(function(i){n.registerHelper(Ev[i])});else for(let i in Ev){let s=Ev[i];n.registerHelper(s)}return n.helpers},"helpers");for(let e in Ev){let t=Ev[e];Yy.exports[e]=function(r){r=r||{};var n=r.handlebars||r.hbs||cv();return Yy.exports.handlebars=n,n.registerHelper(t),t}}Yy.exports.utils=pv()});var _We=v(sr=>{"use strict";Object.defineProperty(sr,"__esModule",{value:!0});sr.InvalidRemoveOpPath=sr.NoTarget=sr.InvalidScimPatchRequest=sr.NoPathInScimPatchOp=sr.FilterArrayTargetNotFound=sr.FilterOnEmptyArray=sr.InvalidScimPatchOp=sr.RemoveValueNotArray=sr.RemoveValueNestedArrayNotSupported=sr.InvalidScimRemoveValue=sr.InvalidScimPatch=sr.ScimError=void 0;var Dv=class extends Error{static{o(this,"ScimError")}constructor(t){super(),this.scimCode=t}};sr.ScimError=Dv;var Df=class extends Dv{static{o(this,"InvalidScimPatch")}constructor(t,r="invalidSyntax"){super(r),this.message=`Invalid SCIM Patch: ${t}`}};sr.InvalidScimPatch=Df;var Pv=class extends Dv{static{o(this,"InvalidScimRemoveValue")}constructor(t,r="invalidSyntax"){super(r),this.message=`Invalid SCIM Remove Operation: ${t}`}};sr.InvalidScimRemoveValue=Pv;var b5=class extends Pv{static{o(this,"RemoveValueNestedArrayNotSupported")}constructor(){super("Invalid patch value, remove does not support arrays inside arrays.")}};sr.RemoveValueNestedArrayNotSupported=b5;var _5=class extends Pv{static{o(this,"RemoveValueNotArray")}constructor(){super("Remove with patch value is supported only for array properties.")}};sr.RemoveValueNotArray=_5;var Nv=class extends Df{static{o(this,"InvalidScimPatchOp")}constructor(t){super(`${t}`,"invalidSyntax")}};sr.InvalidScimPatchOp=Nv;var w5=class extends Nv{static{o(this,"FilterOnEmptyArray")}constructor(t,r,n){super(`${t}`),this.attrName=r,this.valuePath=n}};sr.FilterOnEmptyArray=w5;var E5=class extends Nv{static{o(this,"FilterArrayTargetNotFound")}constructor(t,r,n,i){super(`${t}`),this.attrName=r,this.valuePath=n,this.schema=i}};sr.FilterArrayTargetNotFound=E5;var S5=class extends Df{static{o(this,"NoPathInScimPatchOp")}constructor(){super('Missing path in "remove" patch operation',"noTarget")}};sr.NoPathInScimPatchOp=S5;var T5=class extends Df{static{o(this,"InvalidScimPatchRequest")}constructor(t){super(`The SCIM patch request is invalid: ${t}`)}};sr.InvalidScimPatchRequest=T5;var v5=class extends Df{static{o(this,"NoTarget")}constructor(t){super(`Target location is a multi-valued attribute for which a value selection filter (${t}) has been supplied and no record match was made.`,"noTarget")}};sr.NoTarget=v5;var A5=class extends Df{static{o(this,"InvalidRemoveOpPath")}constructor(){super("Path specified in 'remove' operation doesn't exist")}};sr.InvalidRemoveOpPath=A5});var TWe=v(su=>{"use strict";Object.defineProperty(su,"__esModule",{value:!0});su.parseExpression=su.parseFilter=su.Tokens=su.tokenizer=void 0;var EWe={type:"EOT",literal:""};function _9t(e){let t=[],r=e,n=/^(?:(\s+)|(-?\d+(?:\.\d+)?(?:[eE][-+]?\d+)?(?![-\w._:\/\)\s]))|("(?:[^"\\]|\\.|\n)*")|([[()]|]\.?)|(\w[-\w._:\/%]*))/,i;for(;i=n.exec(r);){if(!(i[1]||i[0].length===0))if(i[2])t.push({literal:i[2],type:"Number"});else if(i[3]){let s=i[3].replace(/\\(?!")/g,"\\\\");t.push({literal:s,type:"Quoted"})}else i[4]?t.push({literal:i[4],type:"Bracket"}):i[5]&&t.push({literal:i[5],type:"Word"});r=r.substring(i.index+i[0].length)}if(r.length!==0)throw new Error(`unexpected token ${r}`);return t.push(EWe),t}o(_9t,"tokenizer");su.tokenizer=_9t;var R5=class{static{o(this,"Tokens")}getList(){return this.list.map((t,r)=>r==this.i?`[${t.literal}]`:t.literal)}peek(){return this.current||EWe}constructor(t){this.list=t,this.i=0,this.current=this.list[this.i]}forward(){return this.current=this.list[++this.i],this}shift(){let t=this.peek();return this.forward(),t}};su.Tokens=R5;var w9t=new Set(["eq","ne","co","sw","ew","gt","lt","ge","le"]),E9t=new Set(["pr"]);function O5(e){return BL(qL(e),e,Ah.LOWEST)}o(O5,"parseFilter");su.parseFilter=O5;function qL(e){let t=e.shift();if(t.literal=="("){let r=O5(e),n=e.shift();if(n.literal!==")")throw new Error(`Unexpected token [${n.literal}(${n.type})] expected ')'`);return r}else if(t.literal.toLowerCase()=="not"){let r={op:"not",filter:qL(e)};return BL(r,e,Ah.NOT)}else{if(t.type=="Word")return SWe(t,e);throw new Error(`Unexpected token ${t.literal} (${t.type})`)}}o(qL,"parseExpression");su.parseExpression=qL;var Ah;(function(e){e[e.LOWEST=1]="LOWEST",e[e.OR=2]="OR",e[e.AND=3]="AND",e[e.NOT=4]="NOT"})(Ah||(Ah={}));var wWe={or:Ah.OR,and:Ah.AND,not:Ah.NOT};function BL(e,t,r){let n=t.peek().literal.toLowerCase(),i=wWe[n];if(!i||r>=i)return e;let s=[e];for(;t.peek().literal.toLowerCase()===n;){let a=qL(t.forward()),u=t.peek().literal.toLowerCase();wWe[u]>i&&(a=BL(a,t,i)),s.push(a)}return BL({op:n,filters:s},t,r)}o(BL,"parseInxif");function SWe(e,t){if(e.type!=="Word")throw new Error(`Unexpected token ${e.literal} expected Word`);let r=e.literal,n=t.shift(),i=n.literal.toLowerCase();if(w9t.has(i)){let s=S9t(t);return{op:i,attrPath:r,compValue:s}}else{if(E9t.has(i))return{op:i,attrPath:r};if(i==="["){let s=O5(t),a=t.shift();if(a.literal[0]!=="]")throw new Error(`Unexpected token ${a.literal} expected ']'`);let u={op:"[]",attrPath:r,valFilter:s};if(a.literal[1]!=="."||t.peek().type!=="Word")return u;let c=t.shift();return c.literal=`${r}.${c.literal}`,{op:"and",filters:[u,SWe(c,t)]}}else throw new Error(`Unexpected token ${r} ${n.literal} as valFilter operator`)}}o(SWe,"readValFilter");function S9t(e){let t=e.shift();try{let r=JSON.parse(t.literal);if(r===null||typeof r=="string"||typeof r=="number"||typeof r=="boolean")return r;throw new Error(`${t.literal} is ${typeof r} (un supported value)`)}catch{throw new Error(`[${t.literal}(${t.type})] is not json`)}}o(S9t,"parseCompValue")});var vWe=v(WL=>{"use strict";Object.defineProperty(WL,"__esModule",{value:!0});WL.Tester=void 0;var jL=class{static{o(this,"Tester")}constructor(){}test(t,r){switch(r.op){case"or":return r.filters.some(n=>this.test(t,n));case"and":return r.filters.every(n=>this.test(t,n));case"not":return!this.test(t,r.filter);case"[]":return this.attrTest(this.attrPath(r.attrPath),t,n=>this.test(n,r.valFilter));case"pr":return this.attrTest(this.attrPath(r.attrPath),t,n=>this[r.op](n));case"eq":case"ne":case"co":case"sw":case"ew":case"gt":case"lt":case"ge":case"le":return this.attrTest(this.attrPath(r.attrPath),t,n=>this[r.op](n,r.compValue))}}attrPath(t){let r=t.lastIndexOf(":");return r===-1?t.split("."):[t.substring(0,r),...t.substring(r+1).split(".")]}attrTest(t,r,n){if(t.length===0)return n(r);if(typeof r!="object"||r===null)return!1;if(Array.isArray(r))return r.some(a=>this.attrTest(t,a,n));let i=t[0].toLowerCase(),s=Object.keys(r).find(a=>a.toLowerCase()===i);return s===void 0?!1:this.attrTest(t.slice(1),r[s],n)}pr(t,r){return t!==void 0}eq(t,r){return t===r}ne(t,r){return t!==r}gt(t,r){return r!==null&&t>r}lt(t,r){return r!==null&&t<r}le(t,r){return r!==null&&t<=r}ge(t,r){return r!==null&&t>=r}sw(t,r){return r!==null&&t!==null&&t.toString().startsWith(r.toString())}ew(t,r){return r!==null&&t!==null&&t.toString().endsWith(r.toString())}co(t,r){return typeof t=="object"||r===null?t==r:(typeof t!="string"&&(t=t.toString()),t.indexOf(r.toString())!==-1)}};WL.Tester=jL;jL.UNDEF=Symbol("undefined")});var AWe=v(au=>{"use strict";Object.defineProperty(au,"__esModule",{value:!0});au.log=au.valfilter=void 0;var T9t=o((e,t)=>{switch(t&&"attrPath"in e&&(e=Object.assign(Object.assign({},e),{attrPath:`${t}.${e.attrPath}`})),e.op){case"and":case"or":return Object.assign(Object.assign({},e),{filters:e.filters.map(r=>(0,au.valfilter)(r,t))});case"not":return Object.assign(Object.assign({},e),{filter:(0,au.valfilter)(e,t)});case"[]":return(0,au.valfilter)(e.valFilter,e.attrPath)}return e},"valfilter");au.valfilter=T9t;var v9t=o(e=>{switch(e.op){case"and":case"or":let t=e.filters.map(au.log),r=[];return t.forEach(n=>{n.op==e.op?n.filters.forEach(i=>r.push(i)):r.push(n)}),Object.assign(Object.assign({},e),{filters:r})}return e},"log");au.log=v9t});var RWe=v(GL=>{"use strict";Object.defineProperty(GL,"__esModule",{value:!0});GL.stringify=void 0;function Lv(e,t=!1){let r="";switch(e.op){case"eq":case"ne":case"co":case"sw":case"ew":case"gt":case"lt":case"ge":case"le":r=`${e.attrPath} ${e.op} ${JSON.stringify(e.compValue)}`;break;case"pr":r=`${e.attrPath} ${e.op}`;break;case"or":let n=e.filters.map(i=>Lv(i)).join(` ${e.op} `);r=t?`(${n})`:n;break;case"and":r=e.filters.map(i=>Lv(i,!0)).join(` ${e.op} `);break;case"not":r=`${e.op} (${Lv(e.filter)})`;break;case"[]":r=`${e.attrPath}[${Lv(e.valFilter)}]`;break}return r}o(Lv,"stringify");GL.stringify=Lv});var $L=v(Wo=>{"use strict";Object.defineProperty(Wo,"__esModule",{value:!0});Wo.flatten=Wo.parse=Wo.filter=Wo.Tester=Wo.stringify=void 0;var I5=TWe(),A9t=vWe(),OWe=AWe(),R9t=RWe();Object.defineProperty(Wo,"stringify",{enumerable:!0,get:function(){return R9t.stringify}});Wo.Tester=A9t.Tester;function O9t(e){let t=new Wo.Tester;return r=>t.test(r,e)}o(O9t,"filter");Wo.filter=O9t;function I9t(e){let t=new I5.Tokens(I5.tokenizer(e)),r=I5.parseFilter(t);if(t.peek().type!=="EOT")throw new Error(`unexpected EOT ${t.getList()}`);return r}o(I9t,"parse");Wo.parse=I9t;function C9t(e){return OWe.log(OWe.valfilter(e))}o(C9t,"flatten");Wo.flatten=C9t});var CWe=v((Pen,IWe)=>{"use strict";IWe.exports=o(function e(t,r){if(t===r)return!0;if(t&&r&&typeof t=="object"&&typeof r=="object"){if(t.constructor!==r.constructor)return!1;var n,i,s;if(Array.isArray(t)){if(n=t.length,n!=r.length)return!1;for(i=n;i--!==0;)if(!e(t[i],r[i]))return!1;return!0}if(t.constructor===RegExp)return t.source===r.source&&t.flags===r.flags;if(t.valueOf!==Object.prototype.valueOf)return t.valueOf()===r.valueOf();if(t.toString!==Object.prototype.toString)return t.toString()===r.toString();if(s=Object.keys(t),n=s.length,n!==Object.keys(r).length)return!1;for(i=n;i--!==0;)if(!Object.prototype.hasOwnProperty.call(r,s[i]))return!1;for(i=n;i--!==0;){var a=s[i];if(!e(t[a],r[a]))return!1}return!0}return t!==t&&r!==r},"equal")});var F5=v(_r=>{"use strict";Object.defineProperty(_r,"__esModule",{value:!0});_r.PATCH_OPERATION_SCHEMA=_r.InvalidScimRemoveValue=_r.RemoveValueNotArray=_r.RemoveValueNestedArrayNotSupported=_r.NoTarget=_r.InvalidScimPatchRequest=_r.NoPathInScimPatchOp=_r.InvalidScimPatchOp=_r.InvalidScimPatch=_r.ScimError=void 0;_r.patchBodyValidation=L9t;_r.scimPatch=k9t;var Pt=_We();Object.defineProperty(_r,"ScimError",{enumerable:!0,get:function(){return Pt.ScimError}});Object.defineProperty(_r,"InvalidScimPatch",{enumerable:!0,get:function(){return Pt.InvalidScimPatch}});Object.defineProperty(_r,"InvalidScimPatchOp",{enumerable:!0,get:function(){return Pt.InvalidScimPatchOp}});Object.defineProperty(_r,"NoPathInScimPatchOp",{enumerable:!0,get:function(){return Pt.NoPathInScimPatchOp}});Object.defineProperty(_r,"InvalidScimPatchRequest",{enumerable:!0,get:function(){return Pt.InvalidScimPatchRequest}});Object.defineProperty(_r,"NoTarget",{enumerable:!0,get:function(){return Pt.NoTarget}});Object.defineProperty(_r,"RemoveValueNestedArrayNotSupported",{enumerable:!0,get:function(){return Pt.RemoveValueNestedArrayNotSupported}});Object.defineProperty(_r,"RemoveValueNotArray",{enumerable:!0,get:function(){return Pt.RemoveValueNotArray}});Object.defineProperty(_r,"InvalidScimRemoveValue",{enumerable:!0,get:function(){return Pt.InvalidScimRemoveValue}});var C5=$L(),x5=CWe(),N5=/(\[|\])/,x9t=/^(.+)\[(.+)\]$/,xWe=/(?!\B"[^[]*)\.(?![^\]]*"\B)/g,D9t=["remove","add","replace"],P9t="urn:ietf:params:scim:schemas:core:2.0:User",N9t="urn:ietf:params:scim:schemas:core:2.0:Group";_r.PATCH_OPERATION_SCHEMA="urn:ietf:params:scim:api:messages:2.0:PatchOp";function L9t(e){if(!e.schemas||!e.schemas.includes(_r.PATCH_OPERATION_SCHEMA))throw new Pt.InvalidScimPatchRequest("Missing schemas.");if(!Array.isArray(e.Operations))throw new Pt.InvalidScimPatchRequest("Operations should be an array.");if(!e.Operations||e.Operations.length<=0)throw new Pt.InvalidScimPatchRequest("Missing operations.");e.Operations.forEach(L5)}o(L9t,"patchBodyValidation");function k9t(e,t,r={mutateDocument:!0,treatMissingAsAdd:!0}){return r.mutateDocument||(e=JSON.parse(JSON.stringify(e))),t.reduce((n,i)=>{switch(i.op){case"remove":case"Remove":return M9t(n,i);case"add":case"Add":case"replace":case"Replace":return PWe(n,i,!!r.treatMissingAsAdd);default:throw new Pt.InvalidScimPatchRequest(`Operator is invalid for SCIM patch request. ${i}`)}},e)}o(k9t,"scimPatch");function L5(e){if(typeof e.op!="string"||!q9t(e.op))throw new Pt.InvalidScimPatchRequest(`Invalid op "${e.op}" in the request.`);if(e.op==="remove"&&!e.path)throw new Pt.NoPathInScimPatchOp;if(Mv(e.op)&&!("value"in e))throw new Pt.InvalidScimPatchRequest(`The operation ${e.op} MUST contain a "value" member whose content specifies the value to be added`);if(e.path&&typeof e.path!="string")throw new Pt.InvalidScimPatchRequest("Path is supposed to be a string")}o(L5,"validatePatchOperation");function k5(e){let t=e.lastIndexOf(":");if(t<0)return e.split(xWe);let r=e.substring(0,t),n=e.substring(t+1).split(xWe);switch(r){case N9t:case P9t:break;default:n.unshift(r);break}return n}o(k5,"resolvePaths");function M9t(e,t){let r;L5(t);let n=k5(t.path);try{r=NWe(e,n,{isRemoveOp:!0})}catch(s){if(s instanceof Pt.InvalidRemoveOpPath)return e;throw s}let i=n[n.length-1];if(!N5.test(i)){for(let s of r)t.value?s[i]=B9t(s[i],t.value):delete s[i];return e}for(let s of r){let{attrName:a,valuePath:u,array:c}=M5(i,s);s[a]=U5(c,u,{excludeIfMatchFilter:!0}),s[a].length===0&&delete s[a]}return e}o(M9t,"applyRemoveOperation");function PWe(e,t,r){var n;let i;if(L5(t),!t.path)return kv(e,t);let s=k5(t.path),a=s[s.length-1];try{i=NWe(e,s)}catch(u){if(u instanceof Pt.FilterOnEmptyArray||u instanceof Pt.FilterArrayTargetNotFound){let c=u.schema,l=(0,C5.parse)(u.valuePath);if(Mv(t.op)&&"compValue"in l&&l.compValue!==void 0&&l.op==="eq"){let f={};return f[l.attrPath]=l.compValue,f[a]=kv(void 0,t,!0),c[u.attrName]=[...(n=c[u.attrName])!==null&&n!==void 0?n:[],f],e}else if(r&&D5(t.op)&&"compValue"in l&&l.compValue!==void 0&&l.op==="eq")return PWe(e,Object.assign(Object.assign({},t),{op:"add"}),!1);throw new Pt.NoTarget(t.path)}throw u}if(!N5.test(a)){for(let u of i)u[a]=kv(u[a],t);return e}for(let u of i){let{valuePath:c,array:l}=M5(a,u),f=U5(l,c);if(D5(t.op)&&f.length===0)throw new Pt.NoTarget(t.path);for(let d=0;d<l.length;d++)f.includes(l[d])&&(l[d]=kv(l[d],t))}return e}o(PWe,"applyAddOrReplaceOperation");function M5(e,t){let r=e.match(x9t);if(!r)throw new Pt.InvalidScimPatchOp(`This part of the path ${e} is invalid for SCIM patch request.`);let[,n,i]=r,s=t[n];if(!Array.isArray(s))throw new Pt.FilterOnEmptyArray("Impossible to search on a mono valued attribute.",n,i);return new P5(n,i,s)}o(M5,"extractArray");function NWe(e,t,r={}){let n=[e];for(let i=0;i<t.length-1;i++){let s=t[i];N5.test(s)?n=n.flatMap(a=>{try{let{attrName:u,valuePath:c,array:l}=M5(s,a),f=U5(l,c);if(f.length===0)throw new Pt.FilterArrayTargetNotFound("A matching array entry was not found using the supplied filter.",u,c,a);return f}catch(u){throw u instanceof Pt.FilterOnEmptyArray&&(u.schema=a),u}}):n=n.flatMap(a=>{if(!a[s]&&r.isRemoveOp)throw new Pt.InvalidRemoveOpPath;return a[s]||(a[s]={})})}return n}o(NWe,"navigate");function kv(e,t,r){if(Array.isArray(e)){if(Array.isArray(t.value)){if(Mv(t.op)){let i=t.value.filter(s=>!DWe(e,s));return e.concat(i)}return t.value}if(D5(t.op))return e.map(i=>kv(i,t,r));let n=e;return DWe(n,t.value)||n.push(t.value),n}return e!==null&&typeof e=="object"?U9t(e,t,r):t.value}o(kv,"addOrReplaceAttribute");function U9t(e,t,r){if(typeof t.value!="object"){if(Mv(t.op)&&!r)throw new Pt.InvalidScimPatchOp("Invalid patch query.");return t.value}for(let[n,i]of Object.entries(t.value))F9t(e,k5(n),i,t.op);return e}o(U9t,"addOrReplaceObjectAttribute");function F9t(e,t,r,n){let i=t.length-1;for(let a=0;a<i;++a){let u=t[a];u in e||(e[u]={}),e=e[u]}let s=e[t[i]];if(Mv(n)&&Array.isArray(s)){if(Array.isArray(r)){e[t[i]]=[...s,...r];return}e[t[i]]=[...s,r];return}e[t[i]]=r}o(F9t,"assign");function U5(e,t,r={}){try{let n=(0,C5.filter)((0,C5.parse)(t));return e.filter(i=>r.excludeIfMatchFilter?!n(i):n(i))}catch(n){throw new Pt.InvalidScimPatchOp(`${n}`)}}o(U5,"filterWithQuery");function B9t(e,t){if(!Array.isArray(e))throw new Pt.RemoveValueNotArray;return Array.isArray(t)?(t.forEach(r=>{if(Array.isArray(r))throw new Pt.RemoveValueNestedArrayNotSupported;e=e.filter(n=>!x5(r,n))}),e):e.filter(r=>!x5(t,r))}o(B9t,"removeWithPatchValue");function DWe(e,t){return e.some(r=>x5(t,r))}o(DWe,"deepIncludes");function q9t(e){return D9t.includes(e.toLowerCase())}o(q9t,"isValidOperation");function Mv(e){return e!==void 0&&e.toLowerCase()==="add"}o(Mv,"isAddOperation");function D5(e){return e!==void 0&&e.toLowerCase()==="replace"}o(D5,"isReplaceOperation");var P5=class{static{o(this,"ScimSearchQuery")}constructor(t,r,n){this.attrName=t,this.valuePath=r,this.array=n}}});var aur={};var IKe,CKe=er(()=>{"use strict";IKe=U(require("dd-trace"));process.env.DD_APM_ENABLED&&(console.log("Starting dd-trace"),IKe.default.init({debug:process.env.DD_ENV==="qa",llmobs:{mlApp:process.env.DD_LLMOBS_ML_APP||"budibase"}}))});var f4e={};G(f4e,{execute:()=>yur,executeInThread:()=>W7,removeStalled:()=>F7});module.exports=qA(f4e);var Qn={};G(Qn,{analyticsEnabled:()=>z0,generateConfigID:()=>rT,getAIConfig:()=>sWt,getConfig:()=>Ii,getDefaultGoogleConfig:()=>F3,getGoogleConfig:()=>UD,getGoogleDatasourceConfig:()=>q3,getOIDCConfig:()=>nWt,getOIDCConfigById:()=>j3,getOIDCLogosDoc:()=>tWt,getPlatformUrl:()=>nT,getRecaptchaConfig:()=>aWt,getSCIMConfig:()=>oWt,getSMTPConfig:()=>iWt,getSMTPConfigDoc:()=>y0e,getSettingsConfig:()=>B3,getSettingsConfigDoc:()=>uy,getTranslationsConfig:()=>Zjt,getTranslationsConfigDoc:()=>g0e,save:()=>Xjt});var uo=(r=>(r.ASCENDING="ascending",r.DESCENDING="descending",r))(uo||{});var ct=(te=>(te.USER_CREATED="user:created",te.USER_UPDATED="user:updated",te.USER_DELETED="user:deleted",te.USER_ONBOARDING_COMPLETE="user:onboarding:complete",te.USER_PERMISSION_ADMIN_ASSIGNED="user:admin:assigned",te.USER_PERMISSION_ADMIN_REMOVED="user:admin:removed",te.USER_PERMISSION_BUILDER_ASSIGNED="user:builder:assigned",te.USER_PERMISSION_BUILDER_REMOVED="user:builder:removed",te.USER_INVITED="user:invited",te.USER_INVITED_ACCEPTED="user:invite:accepted",te.USER_PASSWORD_FORCE_RESET="user:password:force:reset",te.USER_PASSWORD_UPDATED="user:password:updated",te.USER_PASSWORD_RESET_REQUESTED="user:password:reset:requested",te.USER_PASSWORD_RESET="user:password:reset",te.USER_DATA_COLLABORATION="user:data:collaboration",te.EMAIL_SMTP_CREATED="email:smtp:created",te.EMAIL_SMTP_UPDATED="email:smtp:updated",te.AI_CONFIG_CREATED="ai:config:created",te.AI_CONFIG_UPDATED="ai:config:updated",te.AUTH_SSO_CREATED="auth:sso:created",te.AUTH_SSO_UPDATED="auth:sso:updated",te.AUTH_SSO_ACTIVATED="auth:sso:activated",te.AUTH_SSO_DEACTIVATED="auth:sso:deactivated",te.AUTH_LOGIN="auth:login",te.AUTH_LOGOUT="auth:logout",te.ORG_NAME_UPDATED="org:info:name:updated",te.ORG_LOGO_UPDATED="org:info:logo:updated",te.ORG_PLATFORM_URL_UPDATED="org:platformurl:updated",te.INSTALLATION_VERSION_CHECKED="installation:version:checked",te.INSTALLATION_VERSION_UPGRADED="installation:version:upgraded",te.INSTALLATION_VERSION_DOWNGRADED="installation:version:downgraded",te.INSTALLATION_FIRST_STARTUP="installation:firstStartup",te.ANALYTICS_OPT_OUT="analytics:opt:out",te.ANALYTICS_OPT_IN="analytics:opt:in",te.WORKSPACE_CREATED="app:created",te.WORKSPACE_UPDATED="app:updated",te.WORKSPACE_DELETED="app:deleted",te.WORKSPACE_DUPLICATED="app:duplicated",te.WORKSPACE_PUBLISHED="app:published",te.WORKSPACE_UNPUBLISHED="app:unpublished",te.WORKSPACE_TEMPLATE_IMPORTED="app:template:imported",te.WORKSPACE_FILE_IMPORTED="app:file:imported",te.WORKSPACE_APP_VERSION_UPDATED="app:version:updated",te.WORKSPACE_APP_VERSION_REVERTED="app:version:reverted",te.WORKSPACE_REVERTED="app:reverted",te.WORKSPACE_EXPORTED="app:exported",te.ROLE_CREATED="role:created",te.ROLE_UPDATED="role:updated",te.ROLE_DELETED="role:deleted",te.ROLE_ASSIGNED="role:assigned",te.ROLE_UNASSIGNED="role:unassigned",te.SERVED_BUILDER="served:builder",te.SERVED_APP="served:app",te.SERVED_APP_PREVIEW="served:app:preview",te.DATASOURCE_CREATED="datasource:created",te.DATASOURCE_UPDATED="datasource:updated",te.DATASOURCE_DELETED="datasource:deleted",te.QUERY_CREATED="query:created",te.QUERY_UPDATED="query:updated",te.QUERY_DELETED="query:deleted",te.QUERY_IMPORT="query:import",te.QUERIES_RUN="queries:run",te.QUERY_PREVIEWED="query:previewed",te.TABLE_CREATED="table:created",te.TABLE_UPDATED="table:updated",te.TABLE_DELETED="table:deleted",te.TABLE_EXPORTED="table:exported",te.TABLE_IMPORTED="table:imported",te.TABLE_DATA_IMPORTED="table:data:imported",te.VIEW_CREATED="view:created",te.VIEW_UPDATED="view:updated",te.VIEW_DELETED="view:deleted",te.VIEW_EXPORTED="view:exported",te.VIEW_FILTER_CREATED="view:filter:created",te.VIEW_FILTER_UPDATED="view:filter:updated",te.VIEW_FILTER_DELETED="view:filter:deleted",te.VIEW_CALCULATION_CREATED="view:calculation:created",te.VIEW_CALCULATION_UPDATED="view:calculation:updated",te.VIEW_CALCULATION_DELETED="view:calculation:deleted",te.VIEW_JOIN_CREATED="view:join:created",te.ROWS_CREATED="rows:created",te.ROWS_IMPORTED="rows:imported",te.COMPONENT_CREATED="component:created",te.COMPONENT_DELETED="component:deleted",te.SCREEN_CREATED="screen:created",te.SCREEN_DELETED="screen:deleted",te.LAYOUT_CREATED="layout:created",te.LAYOUT_DELETED="layout:deleted",te.AUTOMATION_CREATED="automation:created",te.AUTOMATION_DELETED="automation:deleted",te.AUTOMATION_TESTED="automation:tested",te.AUTOMATIONS_RUN="automations:run",te.AUTOMATION_STEP_CREATED="automation:step:created",te.AUTOMATION_STEP_DELETED="automation:step:deleted",te.AUTOMATION_TRIGGER_UPDATED="automation:trigger:updated",te.LICENSE_PLAN_CHANGED="license:plan:changed",te.LICENSE_ACTIVATED="license:activated",te.LICENSE_PAYMENT_FAILED="license:payment:failed",te.LICENSE_PAYMENT_RECOVERED="license:payment:recovered",te.LICENSE_CHECKOUT_OPENED="license:checkout:opened",te.LICENSE_CHECKOUT_SUCCESS="license:checkout:success",te.LICENSE_PORTAL_OPENED="license:portal:opened",te.ACCOUNT_CREATED="account:created",te.ACCOUNT_DELETED="account:deleted",te.ACCOUNT_VERIFIED="account:verified",te.APP_BACKFILL_SUCCEEDED="app:backfill:succeeded",te.APP_BACKFILL_FAILED="app:backfill:failed",te.TENANT_BACKFILL_SUCCEEDED="tenant:backfill:succeeded",te.TENANT_BACKFILL_FAILED="tenant:backfill:failed",te.INSTALLATION_BACKFILL_SUCCEEDED="installation:backfill:succeeded",te.INSTALLATION_BACKFILL_FAILED="installation:backfill:failed",te.USER_GROUP_CREATED="user_group:created",te.USER_GROUP_UPDATED="user_group:updated",te.USER_GROUP_DELETED="user_group:deleted",te.USER_GROUP_USERS_ADDED="user_group:user_added",te.USER_GROUP_USERS_REMOVED="user_group:users_deleted",te.USER_GROUP_PERMISSIONS_EDITED="user_group:permissions_edited",te.USER_GROUP_ONBOARDING="user_group:onboarding_added",te.PLUGIN_INIT="plugin:init",te.PLUGIN_IMPORTED="plugin:imported",te.PLUGIN_DELETED="plugin:deleted",te.APP_BACKUP_RESTORED="app:backup:restored",te.APP_BACKUP_TRIGGERED="app:backup:triggered",te.ENVIRONMENT_VARIABLE_CREATED="environment_variable:created",te.ENVIRONMENT_VARIABLE_DELETED="environment_variable:deleted",te.ENVIRONMENT_VARIABLE_UPGRADE_PANEL_OPENED="environment_variable:upgrade_panel_opened",te.AUDIT_LOGS_FILTERED="audit_log:filtered",te.AUDIT_LOGS_DOWNLOADED="audit_log:downloaded",te.ROW_ACTION_CREATED="row_action:created",te.ACTION_AUTOMATION_STEP_EXECUTED="action:automation_step:executed",te.ACTION_CRUD_EXECUTED="action:crud:executed",te.ACTION_AI_AGENT_EXECUTED="action:ai_agent:executed",te.WORKSPACE_APP_CREATED="workspace_app:created",te.WORKSPACE_APP_UPDATED="workspace_app:updated",te.WORKSPACE_APP_DELETED="workspace_app:deleted",te.RESOURCE_COPIED_TO_WORKSPACE="resource:copied_to_workspace",te))(ct||{}),TX=["user:created","user:updated","user:deleted","user:admin:assigned","user:admin:removed","user:builder:assigned","user:builder:removed","user_group:created","user_group:updated","user_group:deleted","user_group:user_added","user_group:users_deleted","user_group:permissions_edited"],vX=["automation:deleted","workspace_app:deleted","datasource:deleted","table:deleted","query:deleted","view:deleted"],AX=[...TX,...vX],jh={"user:created":'User "{{ email }}" created{{#if viaScim}} via SCIM{{/if}}',"user:updated":'User "{{ email }}" updated{{#if viaScim}} via SCIM{{/if}}',"user:deleted":'User "{{ email }}" deleted{{#if viaScim}} via SCIM{{/if}}',"user:admin:assigned":'User "{{ email }}" admin role assigned',"user:admin:removed":'User "{{ email }}" admin role removed',"user:builder:assigned":'User "{{ email }}" builder role assigned',"user:builder:removed":'User "{{ email }}" builder role removed',"user:invited":'User "{{ email }}" invited',"user:invite:accepted":'User "{{ email }}" accepted invite',"user:password:updated":'User "{{ email }}" password updated',"user:password:reset:requested":'User "{{ email }}" password reset requested',"user:password:reset":'User "{{ email }}" password reset',"user_group:created":'User group "{{ name }}" created{{#if viaScim}} via SCIM{{/if}}',"user_group:updated":'User group "{{ name }}" updated{{#if viaScim}} via SCIM{{/if}}',"user_group:deleted":'User group "{{ name }}" deleted{{#if viaScim}} via SCIM{{/if}}',"user_group:user_added":'User group "{{ name }}" {{ count }} users added{{#if viaScim}} via SCIM{{/if}}',"user_group:users_deleted":'User group "{{ name }}" {{ count }} users removed{{#if viaScim}} via SCIM{{/if}}',"user_group:permissions_edited":'User group "{{ name }}" permissions edited',"user:password:force:reset":void 0,"user_group:onboarding_added":void 0,"user:onboarding:complete":void 0,"user:data:collaboration":void 0,"email:smtp:created":"Email configuration created","email:smtp:updated":"Email configuration updated","ai:config:created":"AI configuration created","ai:config:updated":"AI configuration updated","auth:sso:created":"SSO configuration created","auth:sso:updated":"SSO configuration updated","auth:sso:activated":"SSO configuration activated","auth:sso:deactivated":"SSO configuration deactivated","auth:login":'User "{{ email }}" logged in',"auth:logout":'User "{{ email }}" logged out',"org:info:name:updated":"Organisation name updated","org:info:logo:updated":"Organisation logo updated","org:platformurl:updated":"Organisation platform URL updated","app:created":'App "{{ name }}" created',"app:updated":'App "{{ name }}" updated',"app:deleted":'App "{{ name }}" deleted',"app:duplicated":'App "{{ name }}" duplicated',"app:published":'App "{{ name }}" published',"app:unpublished":'App "{{ name }}" unpublished',"app:template:imported":'App "{{ name }}" template imported',"app:file:imported":'App "{{ name }}" file imported',"app:version:updated":'App "{{ name }}" version updated',"app:version:reverted":'App "{{ name }}" version reverted',"app:reverted":'App "{{ name }}" reverted',"app:exported":'App "{{ name }}" exported',"app:backup:restored":'App backup "{{ name }}" restored',"app:backup:triggered":'App backup "{{ name }}" triggered',"datasource:created":"Datasource created","datasource:updated":"Datasource updated","datasource:deleted":"Datasource deleted","query:created":"Query created","query:updated":"Query updated","query:deleted":"Query deleted","query:import":"Query import","queries:run":void 0,"query:previewed":void 0,"table:created":'Table "{{ name }}" created',"table:updated":'Table "{{ name }}" updated',"table:deleted":'Table "{{ name }}" deleted',"table:exported":'Table "{{ name }}" exported',"table:imported":'Table "{{ name }}" imported',"table:data:imported":"Data imported to table","rows:created":"Rows created","rows:imported":"Rows imported","automation:created":'Automation "{{ name }}" created',"automation:deleted":'Automation "{{ name }}" deleted',"automation:step:created":'Automation "{{ name }}" step added',"automation:step:deleted":'Automation "{{ name }}" step removed',"automation:tested":void 0,"automations:run":void 0,"automation:trigger:updated":void 0,"screen:created":'Screen "{{ name }}" created',"screen:deleted":'Screen "{{ name }}" deleted',"component:created":"Component created","component:deleted":"Component deleted","environment_variable:created":"Environment variable created","environment_variable:deleted":"Environment variable deleted","environment_variable:upgrade_panel_opened":void 0,"plugin:imported":"Plugin imported","plugin:deleted":"Plugin deleted","plugin:init":void 0,"action:automation_step:executed":void 0,"action:crud:executed":void 0,"action:ai_agent:executed":void 0,"role:created":void 0,"role:updated":void 0,"role:deleted":void 0,"role:assigned":void 0,"role:unassigned":void 0,"license:plan:changed":void 0,"license:activated":void 0,"license:payment:failed":void 0,"license:payment:recovered":void 0,"license:checkout:opened":void 0,"license:checkout:success":void 0,"license:portal:opened":void 0,"account:created":void 0,"account:deleted":void 0,"account:verified":void 0,"app:backfill:succeeded":void 0,"app:backfill:failed":void 0,"tenant:backfill:succeeded":void 0,"tenant:backfill:failed":void 0,"installation:backfill:succeeded":void 0,"installation:backfill:failed":void 0,"layout:created":void 0,"layout:deleted":void 0,"view:created":void 0,"view:updated":void 0,"view:deleted":void 0,"view:exported":void 0,"view:filter:created":void 0,"view:filter:updated":void 0,"view:filter:deleted":void 0,"view:calculation:created":void 0,"view:calculation:updated":void 0,"view:calculation:deleted":void 0,"view:join:created":void 0,"served:builder":void 0,"served:app":void 0,"served:app:preview":void 0,"analytics:opt:out":void 0,"analytics:opt:in":void 0,"installation:version:checked":void 0,"installation:version:upgraded":void 0,"installation:version:downgraded":void 0,"installation:firstStartup":void 0,"audit_log:filtered":void 0,"audit_log:downloaded":void 0,"row_action:created":void 0,"workspace_app:created":void 0,"workspace_app:deleted":void 0,"workspace_app:updated":void 0,"resource:copied_to_workspace":"{{ resource.type }} copied to workspace"};var RX=o((e,t,r)=>e==="usage"&&t==="static","isStaticQuota"),OX=o((e,t,r)=>e==="usage"&&t==="monthly","isMonthlyQuota"),IX=o((e,t)=>e==="constant","isConstantQuota");var Ui="--secret-value--";var an=(n=>(n.SQL="sql",n.JSON="json",n.FIELDS="fields",n))(an||{}),Jr=(h=>(h.STRING="string",h.CODE="code",h.LONGFORM="longForm",h.SENSITIVE_LONGFORM="sensitiveLongForm",h.BOOLEAN="boolean",h.NUMBER="number",h.PASSWORD="password",h.LIST="list",h.OBJECT="object",h.JSON="json",h.FILE="file",h.FIELD_GROUP="fieldGroup",h.SELECT="select",h))(Jr||{}),kn=(b=>(b.AIRTABLE="AIRTABLE",b.ARANGODB="ARANGODB",b.BUDIBASE="BUDIBASE",b.COUCHDB="COUCHDB",b.DYNAMODB="DYNAMODB",b.ELASTICSEARCH="ELASTICSEARCH",b.FIRESTORE="FIRESTORE",b.GOOGLE_SHEETS="GOOGLE_SHEETS",b.MONGODB="MONGODB",b.MYSQL="MYSQL",b.ORACLE="ORACLE",b.POSTGRES="POSTGRES",b.REDIS="REDIS",b.REST="REST",b.S3="S3",b.SNOWFLAKE="SNOWFLAKE",b.SQL_SERVER="SQL_SERVER",b))(kn||{});var Sn=(r=>(r.CONNECTION_CHECKING="connection",r.FETCH_TABLE_NAMES="fetch_table_names",r))(Sn||{});var CX=U(require("lodash/isPlainObject"));var Qf=(a=>(a.EQUAL="equal",a.NOT_EQUAL="notEqual",a.EMPTY="empty",a.NOT_EMPTY="notEmpty",a.FUZZY="fuzzy",a.STRING="string",a))(Qf||{}),wa=(i=>(i.CONTAINS="contains",i.NOT_CONTAINS="notContains",i.CONTAINS_ANY="containsAny",i.ONE_OF="oneOf",i))(wa||{}),Wh=(t=>(t.RANGE="range",t))(Wh||{}),Wb=(r=>(r.AND="$and",r.OR="$or",r))(Wb||{});function $c(e){return Object.values(Wb).includes(e)}o($c,"isLogicalSearchOperator");function xX(e){return Object.values(Qf).includes(e)}o(xX,"isBasicSearchOperator");function DX(e){return Object.values(wa).includes(e)}o(DX,"isArraySearchOperator");function jA(e){return Object.values(Wh).includes(e)}o(jA,"isRangeSearchOperator");function PX(e){return(0,CX.default)(e)&&"conditions"in e}o(PX,"isLogicalFilter");var NX=o(e=>typeof e=="object"&&e._id&&e._rev,"isDocument");var Gb=(s=>(s.USER="user",s.HEADER="header",s.QUERY="query",s.SUBDOMAIN="subdomain",s.PATH="path",s))(Gb||{});var Vc=(i=>(i.READ="read",i.WRITE="write",i.EXECUTE="execute",i.ADMIN="admin",i))(Vc||{});var $b=(d=>(d.WORKSPACE="app",d.TABLE="table",d.USER="user",d.AUTOMATION="automation",d.WEBHOOK="webhook",d.BUILDER="builder",d.CREATOR="creator",d.GLOBAL_BUILDER="globalBuilder",d.QUERY="query",d.VIEW="view",d.LEGACY_VIEW="legacy_view",d))($b||{});var WA=o(e=>e.hosting==="cloud","isCloudAccount");var GA=o(e=>e.authType==="sso","isSSOAccount");var ce="_",Mn="\uFFF0",ti=o(e=>`${e}${ce}`,"prefixed"),Me=(se=>(se.USER="us",se.GROUP="gr",se.CONFIG="config",se.TEMPLATE="template",se.WORKSPACE="app",se.DEV="dev",se.WORKSPACE_DEV="app_dev",se.WORKSPACE_METADATA="app_metadata",se.ROLE="role",se.DEV_INFO="devinfo",se.AUTOMATION_LOG="log_au",se.ACCOUNT_METADATA="acc_metadata",se.PLUGIN="plg",se.DATASOURCE="datasource",se.DATASOURCE_PLUS="datasource_plus",se.APP_BACKUP="backup",se.TABLE="ta",se.ROW="ro",se.AUTOMATION="au",se.LINK="li",se.WEBHOOK="wh",se.INSTANCE="inst",se.LAYOUT="layout",se.SCREEN="screen",se.QUERY="query",se.DEPLOYMENTS="deployments",se.METADATA="metadata",se.MEM_VIEW="view",se.USER_FLAG="flag",se.AUTOMATION_METADATA="meta_au",se.AUDIT_LOG="al",se.SCIM_LOG="scimlog",se.ROW_ACTIONS="ra",se.OAUTH2_CONFIG="oauth2",se.OAUTH2_CONFIG_LOG="oauth2log",se.AGENT="agent",se.CHAT_APP="chatapp",se.CHAT_CONVERSATION="chatconvo",se.AGENT_TOOL_SOURCE="agenttoolsource",se.AGENT_FILE="agentfile",se.AI_CONFIG="aiconfig",se.LITELLM_KEY="litellmkey",se.VECTOR_STORE="vectordb",se.WORKSPACE_APP="workspace_app",se.WORKSPACE_FAVOURITE="workspace_favourite",se.AUTO_COLUMN_STATE="autocolumn_state",se))(Me||{}),DM=["role","datasource","datasource_plus","ta","au","wh","screen","query","metadata","view","workspace_app","workspace_favourite","inst","layout"],Tu=(t=>(t.USER_METADATA="ta_users",t))(Tu||{}),Hc=(r=>(r.VIEW="view",r.ROW_ACTION="row_action",r))(Hc||{});function Gh(e){return!!e.providerType}o(Gh,"isSSOUser");var $h=["rows","queries","automations"],LX=["queries","automations"];var kX="SYSTEM",Kf="auditLog";var He=(f=>(f.OBJECT="object",f.STRING="string",f.BOOLEAN="boolean",f.NUMBER="number",f.ARRAY="array",f.JSON="json",f.DATE="date",f.DATETIME="datetime",f.ATTACHMENT="attachment",f.LONGFORM="longform",f))(He||{}),Bt=(R=>(R.TABLE="table",R.ROW="row",R.ROWS="rows",R.WIDE="wide",R.QUERY="query",R.QUERY_PARAMS="queryParams",R.QUERY_LIMIT="queryLimit",R.LOOP_OPTION="loopOption",R.ITEM="item",R.CODE="code",R.FILTERS="filters",R.COLUMN="column",R.TRIGGER_SCHEMA="triggerSchema",R.CRON="cron",R.WEBHOOK_URL="webhookUrl",R.AUTOMATION="automation",R.AUTOMATION_FIELDS="automationFields",R.MULTI_ATTACHMENTS="multi_attachments",R.TRIGGER_FILTER="trigger_filter",R.CATEGORIES="categories",R.AGENT="agent",R.OUTPUT_SCHEMA="outputSchema",R))(Bt||{}),co=(c=>(c.ROW_SAVED="ROW_SAVED",c.ROW_UPDATED="ROW_UPDATED",c.ROW_DELETED="ROW_DELETED",c.WEBHOOK="WEBHOOK",c.APP="APP",c.CRON="CRON",c.ROW_ACTION="ROW_ACTION",c.EMAIL="EMAIL",c))(co||{});var rt=($=>($.SEND_EMAIL_SMTP="SEND_EMAIL_SMTP",$.CREATE_ROW="CREATE_ROW",$.GET_ROW="GET_ROW",$.UPDATE_ROW="UPDATE_ROW",$.DELETE_ROW="DELETE_ROW",$.QUERY_ROWS="QUERY_ROWS",$.EXECUTE_BASH="EXECUTE_BASH",$.OUTGOING_WEBHOOK="OUTGOING_WEBHOOK",$.EXECUTE_SCRIPT="EXECUTE_SCRIPT",$.EXECUTE_SCRIPT_V2="EXECUTE_SCRIPT_V2",$.EXECUTE_QUERY="EXECUTE_QUERY",$.SERVER_LOG="SERVER_LOG",$.DELAY="DELAY",$.FILTER="FILTER",$.API_REQUEST="API_REQUEST",$.LOOP="LOOP",$.COLLECT="COLLECT",$.OPENAI="OPENAI",$.TRIGGER_AUTOMATION_RUN="TRIGGER_AUTOMATION_RUN",$.BRANCH="BRANCH",$.CLASSIFY_CONTENT="CLASSIFY_CONTENT",$.PROMPT_LLM="PROMPT_LLM",$.TRANSLATE="TRANSLATE",$.SUMMARISE="SUMMARISE",$.GENERATE_TEXT="GENERATE_TEXT",$.EXTRACT_FILE_DATA="EXTRACT_FILE_DATA",$.EXTRACT_STATE="EXTRACT_STATE",$.LOOP_V2="LOOP_V2",$.AGENT="AGENT",$.discord="discord",$.slack="slack",$.zapier="zapier",$.integromat="integromat",$.n8n="n8n",$))(rt||{}),MX=[...Object.values(rt),...Object.values(co)];var $A=(u=>(u.EMAIL="email",u.DOCUMENT="document",u.BLOG_POST="blog_post",u.CHAT_MESSAGE="chat_message",u.LETTER="letter",u.PROPOSAL="proposal",u.OTHER="other",u))($A||{}),UX={email:"Email",document:"Document",blog_post:"Blog post",chat_message:"Chat message",letter:"Letter",proposal:"Proposal",other:"Other"},VA=(r=>(r.URL="URL",r.ATTACHMENT="Attachment",r))(VA||{}),HA=(i=>(i.PDF="pdf",i.JPG="jpg",i.PNG="png",i.JPEG="jpeg",i))(HA||{}),QA=["png","jpg","jpeg","image/png","image/jpeg","image/jpg","image/jpeg"];function FX(e){return e.stepId==="BRANCH"}o(FX,"isBranchStep");function PM(e){return e.stepId==="CRON"}o(PM,"isCronTrigger");function Qc(e){return e?.stepId==="EMAIL"}o(Qc,"isEmailTrigger");var KA=(i=>(i.EQUAL="EQUAL",i.NOT_EQUAL="NOT_EQUAL",i.GREATER_THAN="GREATER_THAN",i.LESS_THAN="LESS_THAN",i))(KA||{});var Vb=(r=>(r.BACKUP="backup",r.RESTORE="restore",r))(Vb||{});var Kc=(i=>(i.PUBLISH="publish",i.MANUAL="manual",i.SCHEDULED="scheduled",i.RESTORING="restoring",i))(Kc||{});var Vh=(a=>(a.NONE="none",a.FORM_DATA="form",a.XML="xml",a.ENCODED="encoded",a.JSON="json",a.TEXT="text",a))(Vh||{}),Hb=(a=>(a.GET="GET",a.POST="POST",a.PATCH="PATCH",a.PUT="PUT",a.HEAD="HEAD",a.DELETE="DELETE",a))(Hb||{});var Un="bb_internal";var zc=(s=>(s.CREATED_BY="createdBy",s.CREATED_AT="createdAt",s.UPDATED_BY="updatedBy",s.UPDATED_AT="updatedAt",s.AUTO_ID="autoID",s))(zc||{});function zA(e){return e.type==="link"}o(zA,"isRelationshipField");function YA(e){return e.relationshipType==="one-to-many"}o(YA,"isOneToMany");function JA(e){return e.relationshipType==="many-to-one"}o(JA,"isManyToOne");var BX="rev",Le=(S=>(S.STRING="string",S.LONGFORM="longform",S.OPTIONS="options",S.NUMBER="number",S.BOOLEAN="boolean",S.ARRAY="array",S.DATETIME="datetime",S.ATTACHMENTS="attachment",S.ATTACHMENT_SINGLE="attachment_single",S.LINK="link",S.FORMULA="formula",S.AUTO="auto",S.AI="ai",S.JSON="json",S.INTERNAL="internal",S.BARCODEQR="barcodeqr",S.SIGNATURE_SINGLE="signature_single",S.BIGINT="bigint",S.BB_REFERENCE="bb_reference",S.BB_REFERENCE_SINGLE="bb_reference_single",S))(Le||{}),XA=["attachment_single","attachment","signature_single","bb_reference","json","array"],FKe=["number","bigint"];function NM(e){return FKe.includes(e)}o(NM,"isNumeric");function qX(e){return e.type==="formula"&&e.formulaType==="static"&&e.responseType&&NM(e.responseType)}o(qX,"isNumericStaticFormula");var BKe=["string","longform","options","number","boolean","datetime","bigint","ai"];function qKe(e){return BKe.includes(e)}o(qKe,"canGroupBy");function LM(e){return e.type==="formula"&&e.formulaType==="static"}o(LM,"isStaticFormula");function jX(e){return qKe(e.type)||LM(e)}o(jX,"canGroupBySchema");var lt={};G(lt,{AutomationViewMode:()=>a1,BUDIBASE_DATASOURCE_TYPE:()=>zre,Config:()=>tne,Cookie:()=>dm,DEFAULT_BB_DATASOURCE_ID:()=>Qb,DEFAULT_EMPLOYEE_TABLE_ID:()=>Zre,DEFAULT_EXPENSES_TABLE_ID:()=>Xre,DEFAULT_INVENTORY_TABLE_ID:()=>Jre,DEFAULT_JOBS_TABLE_ID:()=>Yre,DEFAULT_TENANT_ID:()=>Lr,DeprecatedViews:()=>j_,DesignDocuments:()=>pd,DocumentType:()=>Me,GlobalRole:()=>ene,Header:()=>yi,InternalTable:()=>Tu,MAX_VALID_DATE:()=>l1,MIN_VALID_DATE:()=>U7e,SEPARATOR:()=>ce,SQLITE_DESIGN_DOC_ID:()=>Fn,SQS_DATASOURCE_INTERNAL:()=>sl,StaticDatabases:()=>tr,UNICODE_MAX:()=>Mn,USER_METADATA_PREFIX:()=>VR,UserStatus:()=>c1,ViewName:()=>ol,WORKSPACE_DEV:()=>u1,WORKSPACE_DEV_PREFIX:()=>ks,WORKSPACE_PREFIX:()=>Ls});var GX={SUMMARISE_TEXT:{columns:"columns"},CLEAN_DATA:{column:"column"},TRANSLATE:{column:"column",language:"prompt"},CATEGORISE_TEXT:{columns:"columns",categories:"prompt"},SENTIMENT_ANALYSIS:{column:"column"},PROMPT:{prompt:"prompt"},SEARCH_WEB:{columns:"columns"}};var yi=(E=>(E.API_KEY="x-budibase-api-key",E.LICENSE_KEY="x-budibase-license-key",E.API_VER="x-budibase-api-version",E.APP_ID="x-budibase-app-id",E.SESSION_ID="x-budibase-session-id",E.CLIENT="x-budibase-client",E.TYPE="x-budibase-type",E.PREVIEW_ROLE="x-budibase-role",E.TENANT_ID="x-budibase-tenant-id",E.VERIFICATION_CODE="x-budibase-verification-code",E.RETURN_VERIFICATION_CODE="x-budibase-return-verification-code",E.RESET_PASSWORD_CODE="x-budibase-reset-password-code",E.RETURN_RESET_PASSWORD_CODE="x-budibase-return-reset-password-code",E.TOKEN="x-budibase-token",E.CSRF_TOKEN="x-csrf-token",E.CORRELATION_ID="x-budibase-correlation-id",E.AUTHORIZATION="authorization",E.MIGRATING_APP="x-budibase-migrating-app",E.COOKIE="cookie",E))(yi||{});var Tn=["_id","_rev","type","createdAt","updatedAt","tableId"],Rs=["_id","_rev","tableId"];function zf(e){return Tn.includes(e)}o(zf,"isInternalColumnName");function $X(e){return Rs.includes(e)}o($X,"isExternalColumnName");var Hh={WORKSPACES:"/builder/workspaces",SETTINGS_EMAIL:"/builder/settings/email",SETTINGS_AUTH:"/builder/settings/auth",SETTINGS_PEOPLE_USERS:"/builder/settings/people/users",APPS:"/builder/apps"},ZA={ACCOUNT:"/portal/account",BILLING:"/portal/billing",UPGRADE:"/portal/upgrade"};var lo={Equals:{value:"equal",label:"Equals"},NotEquals:{value:"notEqual",label:"Not equals"},Empty:{value:"empty",label:"Is empty"},NotEmpty:{value:"notEmpty",label:"Is not empty"},StartsWith:{value:"string",label:"Starts with"},Like:{value:"fuzzy",label:"Like"},MoreThan:{value:"rangeLow",label:"More than or equal to"},LessThan:{value:"rangeHigh",label:"Less than or equal to"},Contains:{value:"contains",label:"Contains"},NotContains:{value:"notContains",label:"Does not contain"},In:{value:"oneOf",label:"Is in"},ContainsAny:{value:"containsAny",label:"Has any"}},VX={integer:{max:2147483647,min:-2147483648},int:{max:2147483647,min:-2147483648},smallint:{max:32767,min:-32768},mediumint:{max:8388607,min:-8388608}};var kM=/^[^()]*$/;var Qb="datasource_internal_bb_default";var Tt={};G(Tt,{ColumnSplitter:()=>lF,NoEmptyFilterStrings:()=>Ore,buildQuery:()=>Ire,cleanupQuery:()=>hF,fixupFilterArrays:()=>gF,getKeyNumbering:()=>mF,getValidOperatorsForType:()=>EJe,hasFilters:()=>fF,limit:()=>xre,recurseLogicalOperators:()=>pF,removeKeyNumbering:()=>eR,runQuery:()=>BR,search:()=>vJe,sort:()=>Cre,splitFiltersArray:()=>tR});var lm=U(require("dayjs"));var Fe={};G(Fe,{filterValueToLabel:()=>QKe,hasSchema:()=>KKe,isSupportedUserSearch:()=>QX,nameToUrl:()=>ZKe,parallelForeach:()=>HKe,processSearchFilters:()=>MM,toMap:()=>YKe,trimOtherProps:()=>zKe,unreachable:()=>VKe});var HX=U(require("lodash/pick"));var $Ke=["field","operator","value","type","externalType","valueType","noValue","formulaType"];function VKe(e,t){let r=t?.message||`No such case in exhaustive switch: ${e}`;if(!!!t?.doNotThrow)throw new Error(r)}o(VKe,"unreachable");async function HKe(e,t,r){let n=[],i=Symbol.asyncIterator in e,s=i?e[Symbol.asyncIterator]():e[Symbol.iterator](),a=o(async()=>{let u=await(i?s.next():Promise.resolve(s.next()));for(;!u.done;)await t(u.value),u=await(i?s.next():Promise.resolve(s.next()))},"executeNext");for(let u=0;u<r;u++)n.push(a());await Promise.all(n)}o(HKe,"parallelForeach");function QKe(){return Object.keys(lo).reduce((e,t)=>{let n=lo[t];return e[n.value]=n.label,e},{})}o(QKe,"filterValueToLabel");function KKe(e){return typeof e=="object"&&!Array.isArray(e)&&e!==null&&!(e instanceof Date)&&Object.keys(e).length>0}o(KKe,"hasSchema");function zKe(e,t){return Object.keys(e).filter(n=>t.includes(n)).reduce((n,i)=>({...n,[i]:e[i]}),{})}o(zKe,"trimOtherProps");function QX(e){let t=[{op:"string",key:"email"},{op:"fuzzy",key:"email"},{op:"equal",key:"_id"},{op:"oneOf",key:"_id"}],{allOr:r,onEmptyFilter:n,...i}=e;for(let[s,a]of Object.entries(i)){if(typeof a!="object")return!1;if($c(s)){for(let l of e[s].conditions)if(!QX(l))return!1;return!0}let u=Object.keys(a||{});if(u.length===0)continue;if(!t.find(l=>l.op===s&&u.length===1&&u[0]===l.key))return!1}return!0}o(QX,"isSupportedUserSearch");function MM(e){if(!e||e.length===0)return;let{allOr:t,onEmptyFilter:r,filters:n}=tR(e);return{logicalOperator:"all",onEmptyFilter:r||"all",groups:[{logicalOperator:t?"any":"all",filters:n.map(i=>{let s=(0,HX.default)(i,$Ke);return s.field=eR(s.field),s})}]}}o(MM,"processSearchFilters");function YKe(e,t){return t.reduce((r,n)=>(r[n[e]]=n,r),{})}o(YKe,"toMap");var JKe=o(e=>e?e.trim():null,"resolveWorkspaceName"),XKe=o(e=>{let t,r=JKe(e);t=r?r.toLowerCase():"";let n=t?t.replace(/\s+/g,"-"):"";return encodeURI(n)},"resolveWorkspaceUrl"),ZKe=o(e=>{let t=XKe(e);return e6e(t)},"nameToUrl"),e6e=o(e=>(e&&!e.startsWith("/")&&(e=`/${e}`),e===""?null:e),"tidyUrl");var de={};G(de,{accountPortalAccountUrl:()=>yre,accountPortalBillingUrl:()=>bre,accountPortalUpgradeUrl:()=>_re,builderAppsUrl:()=>vre,builderSettingsAuthUrl:()=>Sre,builderSettingsEmailUrl:()=>Ere,builderSettingsPeopleUsersUrl:()=>Tre,builderWorkspacesUrl:()=>wre,cancelableTimeout:()=>KX,cron:()=>yJe,deepGet:()=>UM,duplicateName:()=>fJe,formatBytes:()=>gJe,getSequentialName:()=>dJe,getUserColor:()=>r6e,getUserInitials:()=>t6e,getUserLabel:()=>n6e,isGoogleSheets:()=>o6e,isSQL:()=>s6e,lists:()=>uF,retry:()=>a6e,roles:()=>aF,schema:()=>M_,structuredOutput:()=>iF,urlHelpers:()=>mJe,views:()=>sF,wait:()=>FM,withTimeout:()=>i6e});var UM=o((e,t)=>{if(!e||!t)return null;if(Object.prototype.hasOwnProperty.call(e,t))return e[t];let r=t.split(".");for(let n=0;n<r.length;n++)e=e?.[r[n]];return e},"deepGet"),t6e=o(e=>{if(!e)return"?";let t="";return t+=e.firstName?e.firstName[0]:"",t+=e.lastName?e.lastName[0]:"",t!==""?t:e.email?.[0]||"U"},"getUserInitials"),r6e=o(e=>{let t=e?._id;if(!t)return"var(--spectrum-global-color-blue-400)";t=t.replace("ro_ta_users_","");let r=1;for(let n=0;n<t.length;n++)r+=t.charCodeAt(n),r=r%36;return`hsl(${r*10}, 50%, 40%)`},"getUserColor"),n6e=o(e=>{if(!e)return"";let{firstName:t,lastName:r,email:n}=e;return t&&r?`${t} ${r}`:t||r||n},"getUserLabel");function KX(e){let t;return[new Promise((r,n)=>{t=setTimeout(()=>{n({status:301,errno:"ETIME"})},e)}),()=>{clearTimeout(t)}]}o(KX,"cancelableTimeout");async function i6e(e,t){let[r,n]=KX(e),i=await Promise.race([t(),r]);return n(),i}o(i6e,"withTimeout");function o6e(e){return e==="GOOGLE_SHEETS"}o(o6e,"isGoogleSheets");function s6e(e){return!e||!e.source?!1:["POSTGRES","SQL_SERVER","MYSQL","ORACLE"].indexOf(e.source)!==-1||e.isSQL===!0}o(s6e,"isSQL");async function FM(e){return new Promise(t=>setTimeout(t,e))}o(FM,"wait");async function a6e(e,t){let{times:r=3}=t||{};if(r<1)throw new Error(`invalid retry count: ${r}`);let n;for(let i=0;i<r;i++){let s=1.5**i*1e3*(Math.random()+.5);await FM(s);try{return await e()}catch(a){n=a}}throw n}o(a6e,"retry");var dre=U(Ea()),pre=U(lre());var fre="(Input cron: ",zYe={"smaller than lower limit":"less than","bigger than upper limit":"greater than",daysOfMonth:"'days of the month'",daysOfWeek:"'days of the week'",years:"'years'",months:"'months'",hours:"'hours'",minutes:"'minutes'",seconds:"'seconds'"};function YYe(e){let t=[];for(let r of e){r.includes(fre)&&(r=r.split(fre)[0].trim());for(let[n,i]of Object.entries(zYe))r.includes(n)&&(r=r.replace(new RegExp(n,"g"),i));t.push(r)}return t}o(YYe,"improveErrors");function hre(e,t=4){let r=pre.default.parseExpression(e),n=[];for(let i=0;i<t;i++)n.push(r.next().toString());return n}o(hre,"getNextExecutionDates");function mre(e){let t=(0,dre.default)(e,{preset:"npm-cron-schedule",override:{useSeconds:!1}});return t.isValid()?{valid:!0}:{valid:!1,err:YYe(t.getError())}}o(mre,"validate");var M_={};G(M_,{decodeNonAscii:()=>nF,encodeNonAscii:()=>ZYe,isDeprecatedSingleUserColumn:()=>JYe,isNumeric:()=>eJe,isRequired:()=>XYe});function JYe(e){return e.type==="bb_reference"&&e.subtype==="user"&&e.constraints?.type!=="array"}o(JYe,"isDeprecatedSingleUserColumn");function XYe(e){return!!e&&(typeof e.presence!="boolean"&&e.presence?.allowEmpty===!1||e.presence===!0)}o(XYe,"isRequired");function ZYe(e){return e.split("").map(t=>t.charCodeAt(0)>127?"\\u"+t.charCodeAt(0).toString(16).padStart(4,"0"):t).join("")}o(ZYe,"encodeNonAscii");function nF(e){return e.replace(/\\u([0-9a-fA-F]{4})/g,(t,r)=>String.fromCharCode(parseInt(r,16)))}o(nF,"decodeNonAscii");function eJe(e){return e.type==="number"||e.type==="bigint"}o(eJe,"isNumeric");var iF={};G(iF,{normalizeSchemaForStructuredOutput:()=>tJe});function tJe(e){function t(n){if(typeof n!="object"||n===null)return n;let i={...n};if(i.type==="object"&&(i.additionalProperties=!1,i.properties&&typeof i.properties=="object"&&i.properties!==null)){let s=i.properties,a=[],u={};for(let[f,d]of Object.entries(s))if(typeof d=="object"&&d!==null){let p=d;if(p.required===!0){a.push(f);let{required:h,...m}=p;u[f]=t(m)}else u[f]=t(p)}else u[f]=d;i.properties=u;let c=Array.isArray(i.required)?i.required:[],l=[...new Set([...c,...a])];l.length>0?i.required=l:i.required=Object.keys(u)}i.type==="array"&&i.items&&typeof i.items=="object"&&i.items!==null&&(i.items=t(i.items));for(let s of["anyOf","oneOf","allOf"])Array.isArray(i[s])&&(i[s]=i[s].map(a=>t(a)));return i}o(t,"processSchema");let r=t(e);return r.type==="array"?r={type:"object",properties:{items:r},required:["items"],additionalProperties:!1}:r.type!=="object"&&(r={type:"object",properties:{value:r},required:["value"],additionalProperties:!1}),r}o(tJe,"normalizeSchemaForStructuredOutput");var sF={};G(sF,{basicFields:()=>sJe,calculationFields:()=>oJe,hasCalculationFields:()=>iJe,isBasicViewField:()=>rJe,isCalculationField:()=>U_,isCalculationView:()=>nJe,isV2:()=>aJe,isVisible:()=>gre});var oF=U(require("lodash/pickBy"));function U_(e){return"calculationType"in e}o(U_,"isCalculationField");function rJe(e){return!U_(e)}o(rJe,"isBasicViewField");function nJe(e){return e.type==="calculation"}o(nJe,"isCalculationView");function iJe(e){return Object.values(e.schema||{}).some(U_)}o(iJe,"hasCalculationFields");function oJe(e){return(0,oF.default)(e.schema||{},U_)}o(oJe,"calculationFields");function gre(e){return e.visible!==!1}o(gre,"isVisible");function sJe(e,t){let{visible:r=!0}=t||{};return(0,oF.default)(e.schema||{},n=>!U_(n)&&(!r||gre(n)))}o(sJe,"basicFields");function aJe(e){return e.version===2}o(aJe,"isV2");var aF={};G(aF,{checkForRoleInheritanceLoops:()=>cJe});function uJe(e){return`role${ce}${e}`}o(uJe,"prefixForCheck");function cJe(e){let t=new Map;e.forEach(s=>{t.set(s._id,s)});let r=new Set,n=new Set;function i(s){let a=uJe(s);if(n.has(s)||n.has(a))return!0;if(r.has(s)||r.has(a))return!1;n.add(s);let u=t.get(a)||t.get(s);if(!u)return n.delete(s),!1;let c=Array.isArray(u.inherits)?u.inherits:[u.inherits];for(let l of c)if(l&&i(l))return!0;return n.delete(s),r.add(s),!1}return o(i,"hasLoop"),!!e.find(s=>i(s._id))}o(cJe,"checkForRoleInheritanceLoops");var uF={};G(uF,{punctuateList:()=>lJe});function lJe(e){return e.length===0?"":e.length===1?e[0]:e.length===2?e.join(" and "):e.slice(0,-1).join(", ")+" and "+e[e.length-1]}o(lJe,"punctuateList");var fJe=o((e,t)=>{let r=new RegExp("\\s(\\d+)$"),n=e.split(r)[0],i=new RegExp(`${n}\\s(\\d+)$`),s=[];t.filter(u=>{if(u===n)return!0;let c=u.match(i);return c?(s.push(parseInt(c[1])),!0):!1}),s.sort((u,c)=>u-c);let a;if(s.length===0)a=1;else{for(let u=0;u<s.length;u++)if(s[u]!==u+1){a=u+1;break}a||(a=s.length+1)}return`${n} ${a}`},"duplicateName"),dJe=o((e,t,{getName:r,numberFirstItem:n,separator:i=""}={})=>{if(!t?.length)return"";let s=t.trim(),a=n?`${t}1`:s;if(!e?.length)return a;let u=0;return e.forEach(c=>{let l=r?.(c)??c;if(typeof l!="string"||!l.startsWith(s))return;let f=l.split(s);if(f.length!==2)return;f[1].trim()===""&&(f[1]="1");let d=parseInt(f[1]);d>u&&(u=d)}),u===0?a:`${t}${i}${u+1}`},"getSequentialName");var pJe=o(e=>e?e.startsWith("/")?e:`/${e}`:"","normalizePath"),hJe=o(e=>e?e.endsWith("/")?e.slice(0,-1):e:"","normalizeBase"),nl=o((e,t)=>{let r=pJe(t);if(!e)return r;let n=hJe(e);return r?`${n}${r}`:n},"joinBaseAndPath"),yre=o(e=>nl(e,ZA.ACCOUNT),"accountPortalAccountUrl"),bre=o(e=>nl(e,ZA.BILLING),"accountPortalBillingUrl"),_re=o(e=>nl(e,ZA.UPGRADE),"accountPortalUpgradeUrl"),wre=o(e=>nl(e,Hh.WORKSPACES),"builderWorkspacesUrl"),Ere=o(e=>nl(e,Hh.SETTINGS_EMAIL),"builderSettingsEmailUrl"),Sre=o(e=>nl(e,Hh.SETTINGS_AUTH),"builderSettingsAuthUrl"),Tre=o(e=>nl(e,Hh.SETTINGS_PEOPLE_USERS),"builderSettingsPeopleUsersUrl"),vre=o(e=>nl(e,Hh.APPS),"builderAppsUrl"),mJe={accountPortalAccountUrl:yre,accountPortalBillingUrl:bre,accountPortalUpgradeUrl:_re,builderWorkspacesUrl:wre,builderSettingsEmailUrl:Ere,builderSettingsAuthUrl:Sre,builderSettingsPeopleUsersUrl:Tre,builderAppsUrl:vre};function gJe(e,t=""){let r=["B","KB","MB","GB","TB","PB","EB","ZB","YB"],i=0,s=typeof e=="string"?parseInt(e,10):e||0;for(;s>=1024&&i<r.length-1&&++i;)s/=1024;return`${s.toFixed(s<10&&i>0?1:0)}${t}${r[i]}`}o(gJe,"formatBytes");var yJe={getNextExecutionDates:hre,validate:mre};var FR=U(require("lodash/isPlainObject")),cF=U(require("lodash/isEmpty"));var _Je=/{{([^{].*?)}}/g,Rre=Object.values(Wb),wJe=[...Object.values(Qf),...Object.values(wa),...Object.values(Wh)],EJe=o((e,t,r)=>{let n=lo,i=[n.Equals,n.NotEquals,n.StartsWith,n.Like,n.Empty,n.NotEmpty,n.In],s=[n.Equals,n.NotEquals,n.MoreThan,n.LessThan,n.Empty,n.NotEmpty,n.In],a=[n.Contains,n.NotContains,n.ContainsAny,n.Empty,n.NotEmpty],u=[],{type:c,formulaType:l,subtype:f}=e;c==="string"?f==="array"?u=a:u=i:c==="number"||c==="bigint"?u=s:c==="options"?u=[n.Equals,n.NotEquals,n.Empty,n.NotEmpty,n.In]:c==="array"?u=a:c==="boolean"?u=[n.Equals,n.NotEquals,n.Empty,n.NotEmpty]:c==="longform"?u=i:c==="datetime"?u=s:c==="formula"&&l==="static"?u=i.concat([n.MoreThan,n.LessThan]):c==="ai"?u=i.concat([n.MoreThan,n.LessThan]):c==="bb_reference_single"||M_.isDeprecatedSingleUserColumn(e)?u=[n.Equals,n.NotEquals,n.Empty,n.NotEmpty,n.In]:c==="bb_reference"?u=a:c==="barcodeqr"?u=i:c==="link"&&(u=[n.Empty,n.NotEmpty]);let d=r?.tableId?.includes("datasource_plus");return t==="_id"&&d&&(u=[n.Equals,n.NotEquals,n.In]),u},"getValidOperatorsForType"),Ore=[lo.StartsWith.value,lo.Like.value,lo.Equals.value,lo.NotEquals.value,lo.Contains.value,lo.NotContains.value,lo.ContainsAny.value,lo.In.value];function pF(e,t){for(let r of Rre)e[r]&&(e[r].conditions=e[r].conditions.map(n=>t(n)));return e}o(pF,"recurseLogicalOperators");var hF=o(e=>{for(let t of Ore)if(e[t])for(let r of Object.keys(e)){if(r!==t)continue;if(typeof e[r]=="object")for(let[i,s]of Object.entries(e[r]))(s==null||s===""||SJe(s))&&delete e[t][i]}return e=pF(e,hF),e},"cleanupQuery");function SJe(e){return Array.isArray(e)&&e.length===0}o(SJe,"isEmptyArray");var eR=o(e=>mF(e).key,"removeKeyNumbering"),mF=o(e=>{if(typeof e=="string"&&e.match(/\d[0-9]*:/g)!=null){let t=e.split(":");return{prefix:`${t.shift()}:`,key:t.join(":")}}else return{key:e}},"getKeyNumbering"),lF=class{static{o(this,"ColumnSplitter")}constructor(t,r){if(this.tableNames=t.map(n=>n.name),this.tableIds=t.map(n=>n._id),this.relationshipColumnNames=t.flatMap(n=>Object.keys(n.schema).filter(i=>n.schema[i].type==="link")),this.relationships=this.tableNames.concat(this.tableIds).concat(this.relationshipColumnNames).sort((n,i)=>i.length-n.length),r?.aliases){this.aliases={};for(let[n,i]of Object.entries(r.aliases))this.aliases[i]=n}this.columnPrefix=r?.columnPrefix}run(t){let{prefix:r,key:n}=mF(t),i;if(this.aliases)for(let a of Object.keys(this.aliases||{})){let u=`${a}.`;n.startsWith(u)&&(i=this.aliases[a],n=n.slice(u.length))}let s;for(let a of this.relationships){let u=`${a}.`;if(n.startsWith(u)){let c=n.split(u);c.shift(),s=u,n=c.join(".");break}}return this.columnPrefix&&n.startsWith(this.columnPrefix)&&(n=nF(n.slice(this.columnPrefix.length))),{tableName:i,numberPrefix:r,relationshipPrefix:s,column:n}}};function TJe(e){if(!e||!e?.operator||!e?.field)return;let t={},{operator:r,field:n,type:i,externalType:s}=e,{value:a}=e;(r==="empty"||r==="notEmpty")&&(a=null);let u=typeof a=="string"&&(a.match(_Je)||[]).length>0;switch(i){case"datetime":if(!u&&r!=="empty"&&r!=="notEmpty"){if(!a)return;if(typeof a=="string")a=new Date(a).toISOString();else if(jA(r))return t[r]??={},t[r][n]=a,t}break;case"number":typeof a=="string"&&!u&&(r==="oneOf"?a=a.split(",").map(parseFloat):a=parseFloat(a));break;case"boolean":a=`${a}`.toLowerCase()==="true";break;case"array":["contains","notContains","containsAny"].includes(r.toLocaleString())&&typeof a=="string"&&(a=a.split(","));break}if(jA(r)){let l=VX[s]||{min:Number.MIN_SAFE_INTEGER,max:Number.MAX_SAFE_INTEGER};t[r]??={},t[r][n]={low:i==="number"?l.min:"0000-00-00T00:00:00.000Z",high:i==="number"?l.max:"9999-00-00T00:00:00.000Z"}}else if(r==="rangeHigh"&&a!=null&&a!=="")t.range??={},t.range[n]={...t.range[n],high:a};else if(r==="rangeLow"&&a!=null&&a!=="")t.range??={},t.range[n]={...t.range[n],low:a};else if(xX(r)||DX(r)||jA(r))i==="boolean"?r==="equal"&&a===!1?(t.notEqual=t.notEqual||{},t.notEqual[n]=!0):r==="notEqual"&&a===!1?(t.equal=t.equal||{},t.equal[n]=!0):(t[r]??={},t[r][n]=a):(t[r]??={},t[r][n]=a);else throw new Error(`Unsupported operator: ${r}`);return t}o(TJe,"buildCondition");function tR(e){let t={filters:[]};for(let r of e)"operator"in r&&r.operator==="allOr"?t.allOr=!0:"onEmptyFilter"in r?t.onEmptyFilter=r.onEmptyFilter:t.filters.push(r);return t}o(tR,"splitFiltersArray");function Ire(e){if(!e)return{};if(Array.isArray(e)&&(e=MM(e),!e))return{};let t={};e.onEmptyFilter?t.onEmptyFilter=e.onEmptyFilter:t.onEmptyFilter="all";let r=Are(e.logicalOperator||"all");return t[r]={conditions:(e.groups||[]).map(n=>{if(n.groups){let c=Ire(n);return delete c.onEmptyFilter,c}let{allOr:i,onEmptyFilter:s,filters:a}=tR(n.filters||[]);s&&(t.onEmptyFilter=s);let u=i?"$or":"$and";return n.logicalOperator&&(u=Are(n.logicalOperator)),{[u]:{conditions:a.map(TJe).filter(c=>c)}}})},t}o(Ire,"buildQuery");function Are(e){return e==="all"?"$and":"$or"}o(Are,"logicalOperatorFromUI");function gF(e){if(!e)return e;for(let t of Object.values(wa)){let r=e[t];if(!(r==null||!(0,FR.default)(r)))for(let n of Object.keys(r)){if(Array.isArray(r[n]))continue;let i=r[n];typeof i=="string"?r[n]=i.split(",").map(s=>s.trim()):r[n]=[i]}}return pF(e,gF),e}o(gF,"fixupFilterArrays");function vJe(e,t){let r=BR(e,t.query);t.sort&&(r=Cre(r,t.sort,t.sortOrder||"ascending",t.sortType));let n=r.length;t.limit&&(r=xre(r,t.limit.toString()));let i={rows:r};return t.countRows&&(i.totalRows=n),i}o(vJe,"search");function BR(e,t){if(!e||!Array.isArray(e))return[];if(!t)return e;if(t=hF(t),t=gF(t),!fF(t)&&t.onEmptyFilter==="none")return[];let r=o((T,R)=>A=>{for(let[O,I]of Object.entries(t[T]||{})){let D=$c(T)?A:UM(A,eR(O)),x=R(D,I);if(t.allOr&&x)return!0;if(!t.allOr&&!x)return!1}return!t.allOr},"match"),n=r("string",(T,R)=>typeof T!="string"||typeof R!="string"?!1:T.toLowerCase().startsWith(R.toLowerCase())),i=r("fuzzy",(T,R)=>typeof T!="string"||typeof R!="string"?!1:T.toLowerCase().includes(R.toLowerCase())),s=r("range",(T,R)=>{if(T==null||T===""||((0,FR.default)(R.low)&&(0,cF.default)(R.low)&&(R.low=void 0),(0,FR.default)(R.high)&&(0,cF.default)(R.high)&&(R.high=void 0),R.low==null&&R.high==null))return!1;let A=+T;if(!isNaN(A)){let I=+R.low,D=+R.high;if(!isNaN(I)&&!isNaN(D))return A>=I&&A<=D;if(isNaN(I)){if(!isNaN(D))return A<=D}else return A>=I}let O=(0,lm.default)(T);if(O.isValid()){let I=(0,lm.default)(R.low||"0000-00-00T00:00:00.000Z"),D=(0,lm.default)(R.high||"9999-00-00T00:00:00.000Z");if(I.isValid()&&D.isValid())return O.isAfter(I)&&O.isBefore(D)||O.isSame(I)||O.isSame(D);if(I.isValid())return O.isAfter(I)||O.isSame(I);if(D.isValid())return O.isBefore(D)||O.isSame(D)}return R.low!=null&&R.high!=null?T>=R.low&&T<=R.high:R.low!=null?T>=R.low:R.high!=null?T<=R.high:!1}),a=o((T,R)=>{if(Array.isArray(T)){for(let O of T)if(a(O,R))return!0;return!1}if(T&&typeof T=="object"&&typeof R=="string")return T._id===R;if(T===R)return!0;if(T==null&&R!=null||T!=null&&R==null)return!1;let A=(0,lm.default)(T);if(A.isValid()){let O=(0,lm.default)(R);if(O.isValid())return A.isSame(O)}return!1},"_valueMatches"),u=o(T=>(...R)=>!T(...R),"not"),c=r("equal",a),l=r("notEqual",u(a)),f=o(T=>typeof T=="string"?T==="":Array.isArray(T)?T.length===0:T&&typeof T=="object"?Object.keys(T).length===0:T==null,"_empty"),d=r("empty",f),p=r("notEmpty",u(f)),h=r("oneOf",(T,R)=>(typeof R=="string"&&(R=R.split(",")),typeof T=="number"&&(R=R.map(A=>parseFloat(A))),Array.isArray(R)?R.some(A=>a(T,A)):!1)),m=o(T=>(R,A)=>!Array.isArray(R)||(typeof A=="string"&&(A=A.split(","),typeof R[0]=="number"&&(A=A.map(O=>parseFloat(O)))),!Array.isArray(A))?!1:A.length===0?!0:A[T](O=>a(R,O)),"_contains"),g=r("contains",(T,R)=>Array.isArray(R)&&R.length===0?!0:m("every")(T,R)),y=r("notContains",(T,R)=>Array.isArray(R)&&R.length===0?!0:u(m("every"))(T,R)),b=r("containsAny",m("some")),w=r("$and",(T,R)=>{if(!R.length)return!1;for(let A of R)if(!BR([T],A).length)return!1;return!0}),E=r("$or",(T,R)=>{if(!R.length)return!1;for(let A of R)if(BR([T],{...A,allOr:!0}).length)return!0;return!1}),S=o(T=>{let R={string:n,fuzzy:i,range:s,equal:c,notEqual:l,empty:d,notEmpty:p,oneOf:h,contains:g,containsAny:b,notContains:y,$and:w,$or:E},A=Object.entries(t||{}).filter(([O,I])=>!["allOr","onEmptyFilter"].includes(O)&&I&&Object.keys(I).length>0).map(([O])=>R[O]?.(T)??!1);return fF(t)?t.allOr?A.some(O=>O===!0):A.every(O=>O===!0):!0},"docMatch");return e.filter(S)}o(BR,"runQuery");function Cre(e,t,r,n="string"){if(!t||!r||!n)return e;let i=o(s=>s==null?s:n==="string"?`${s}`:parseFloat(s),"parse");return e.slice().sort((s,a)=>{let u=i(s[t]),c=i(a[t]),l=c==null||u>c?1:-1;return r.toLowerCase()==="descending"?l*-1:l})}o(Cre,"sort");function xre(e,t){let r=typeof t=="number"?t:parseFloat(t);return isNaN(r)?e:e.slice(0,r)}o(xre,"limit");var fF=o(e=>{if(!e)return!1;let t=o(r=>{for(let n of Rre)if(r[n])for(let i of r[n]?.conditions||[]){let s=t(i);if(s)return s}for(let n of wJe){let i=r[n];if(!i||typeof i!="object")continue;if(Object.entries(i).filter(a=>{let u=a[1]!==void 0||a[1]!==null||a[1]!=="";return n==="notEmpty"||u}).length!==0)return!0}return!1},"check");return t(e)},"hasFilters");var cn={};G(cn,{applications:()=>bF,automations:()=>wF,screens:()=>vF,users:()=>TF});var bF={};G(bF,{getDevAppID:()=>AJe,getProdAppID:()=>B_});var yF=ti("app"),F_=ti("app_dev");function AJe(e){if(!e)throw new Error("No app ID provided");if(e.startsWith(F_))return e;let t=e.split(yF);t.shift();let r=t.join(yF);return`${F_}${r}`}o(AJe,"getDevAppID");function B_(e){if(!e)throw new Error("No app ID provided");if(!e.startsWith(F_))return e;let t=e.split(F_);t.shift();let r=t.join(F_);return`${yF}${r}`}o(B_,"getProdAppID");var wF={};G(wF,{checkForCollectStep:()=>_F,isAppAction:()=>IJe,isRowAction:()=>RJe,isWebhookAction:()=>OJe});function RJe(e){return e.definition.trigger?.stepId==="ROW_ACTION"}o(RJe,"isRowAction");function OJe(e){return e.definition.trigger?.stepId==="WEBHOOK"}o(OJe,"isWebhookAction");function IJe(e){return e.definition.trigger?.stepId==="APP"}o(IJe,"isAppAction");function Dre(e){if(!e||!Array.isArray(e))return!1;for(let t of e){if(t.stepId==="COLLECT")return!0;if(FX(t)&&t.inputs.children){for(let r of Object.values(t.inputs.children))if(Dre(r))return!0}}return!1}o(Dre,"hasCollectBlockRecursive");function _F(e){return Dre(e.definition.steps)}o(_F,"checkForCollectStep");var TF={};G(TF,{canCreateApps:()=>CJe,containsUserID:()=>UJe,getGlobalUserID:()=>MJe,getUserAppGroups:()=>FJe,hasAdminPermissions:()=>SF,hasAppBuilderPermissions:()=>WR,hasBuilderPermissions:()=>LJe,hasCreatorPermissions:()=>GR,isAdmin:()=>q_,isAdminOrBuilder:()=>DJe,isAdminOrGlobalBuilder:()=>PJe,isAdminOrWorkspaceBuilder:()=>xJe,isBuilder:()=>EF,isCreator:()=>kJe,isGlobalBuilder:()=>jR,userAppAccessList:()=>BJe});function EF(e,t){return e?e.builder?.global?!0:!!(t&&e.builder?.apps?.includes(B_(t))):!1}o(EF,"isBuilder");function jR(e){return EF(e)&&!WR(e)||q_(e)}o(jR,"isGlobalBuilder");function CJe(e){return jR(e)||GR(e)}o(CJe,"canCreateApps");function q_(e){return e?SF(e):!1}o(q_,"isAdmin");function xJe(e,t){return e?!!(q_(e)||t&&e.builder?.apps?.includes(B_(t))):!1}o(xJe,"isAdminOrWorkspaceBuilder");function DJe(e,t){return EF(e,t)||q_(e)}o(DJe,"isAdminOrBuilder");function PJe(e){return jR(e)||q_(e)}o(PJe,"isAdminOrGlobalBuilder");function WR(e){if(!e)return!1;let t=e.builder?.apps?.length;return!!!e.builder?.global&&t!=null&&t>0}o(WR,"hasAppBuilderPermissions");function NJe(e){return e?!!Object.values(e.roles??{}).find(t=>t==="CREATOR"):!1}o(NJe,"hasAppCreatorPermissions");function LJe(e){return e?e.builder?.global||WR(e)||GR(e):!1}o(LJe,"hasBuilderPermissions");function SF(e){return e?!!e.admin?.global:!1}o(SF,"hasAdminPermissions");function GR(e){return e?!!e.builder?.creator:!1}o(GR,"hasCreatorPermissions");function kJe(e){return e?jR(e)||SF(e)||GR(e)||WR(e)||NJe(e):!1}o(kJe,"isCreator");function MJe(e){if(typeof e!="string")return e;let t=`ro${ce}ta_users${ce}`;return e.startsWith(t)?e.split(t)[1]:e}o(MJe,"getGlobalUserID");function UJe(e){return typeof e!="string"?!1:e.includes(`us${ce}`)}o(UJe,"containsUserID");function Pre(e,t){return t?.filter(r=>r.users?.find(n=>n._id===e))||[]}o(Pre,"getUserGroups");function FJe(e,t,r){let n=B_(e);return Pre(t,r).filter(s=>Object.keys(s.roles||{}).find(a=>a===n))}o(FJe,"getUserAppGroups");function BJe(e,t){let n=Pre(e._id,t).flatMap(s=>Object.keys(s.roles||{})),i=[...Object.keys(e?.roles||{}),...n];return[...new Set(i)]}o(BJe,"userAppAccessList");var vF={};G(vF,{findInSettings:()=>qJe});function qJe(e,t){let r=[];function n(i,s=""){for(let[a,u]of Object.entries(i))u&&(typeof u=="string"&&u.includes(t)?r.push({setting:s?`${s}.${a}`:a,value:u}):typeof u=="object"&&n(u,a))}return o(n,"recurse"),n(e.props),r}o(qJe,"findInSettings");var qdr={string:!0,longform:!0,options:!0,number:!0,datetime:!0,formula:!0,ai:!0,auto:!0,internal:!0,barcodeqr:!0,bigint:!0,boolean:!1,array:!1,attachment:!1,attachment_single:!1,signature_single:!1,link:!1,json:!1,bb_reference:!1,bb_reference_single:!1},jdr={string:!0,longform:!0,options:!0,number:!0,datetime:!0,auto:!0,internal:!0,barcodeqr:!0,bigint:!0,boolean:!0,json:!1,formula:!1,ai:!1,attachment:!1,attachment_single:!1,signature_single:!1,array:!1,link:!1,bb_reference:!1,bb_reference_single:!1},Wdr={number:!0,json:!0,datetime:!0,longform:!0,string:!0,options:!0,array:!0,bigint:!0,boolean:!0,auto:!1,internal:!1,barcodeqr:!1,formula:!1,ai:!1,attachment:!1,attachment_single:!1,signature_single:!1,link:!1,bb_reference:!0,bb_reference_single:!0};function Nre(e){let t=Object.keys(e.schema),r=t.map(s=>s.toLowerCase()),n=new Set(r),i=[];if(n.size!==r.length)for(let s of n.keys())r.filter(u=>u===s).length>1&&i.push(s);for(let s of Tn)t.find(a=>a===s)&&i.push(s);return i}o(Nre,"findDuplicateInternalColumns");var Ve={};G(Ve,{steps:()=>o1,triggers:()=>s1});var o1={};G(o1,{agent:()=>r1,apiRequest:()=>NF,bash:()=>AF,branch:()=>RF,classifyText:()=>YF,collect:()=>OF,createRow:()=>IF,delay:()=>CF,deleteRow:()=>xF,discord:()=>DF,executeQuery:()=>PF,executeScript:()=>LF,executeScriptV2:()=>kF,extract:()=>t1,extractState:()=>n1,filter:()=>MF,generate:()=>e1,getRow:()=>UF,loop:()=>FF,loopV2:()=>i1,make:()=>BF,n8n:()=>qF,openai:()=>jF,outgoingWebhook:()=>WF,promptLLM:()=>JF,queryRows:()=>GF,sendSmtpEmail:()=>$F,serverLog:()=>VF,slack:()=>HF,summarise:()=>ZF,translate:()=>XF,triggerAutomationRun:()=>QF,updateRow:()=>KF,zapier:()=>zF});var AF={};G(AF,{definition:()=>jJe});var jJe={name:"Bash Scripting",tagline:"Execute a bash command",icon:"git-branch",description:"Run a bash script",type:"ACTION",internal:!0,features:{LOOPING:!0},stepId:"EXECUTE_BASH",inputs:{},schema:{inputs:{properties:{code:{type:"string",customType:"code",title:"Code"}},required:["code"]},outputs:{properties:{stdout:{type:"string",description:"Standard output of your bash command or script"},success:{type:"boolean",description:"Whether the command was successful"}},required:["stdout"]}}};var RF={};G(RF,{definition:()=>WJe});var WJe={name:"Branch",icon:"git-branch",tagline:"Branch from this step",description:"Branching",stepId:"BRANCH",internal:!0,features:{},inputs:{},schema:{inputs:{properties:{branches:{properties:{name:{type:"string"},condition:{customType:"filters"}}},children:{type:"array"}},required:["conditions"]},outputs:{properties:{branchName:{type:"string"},status:{type:"string",description:"Branch result"},branchId:{type:"string",description:"Branch ID"},success:{type:"boolean",description:"Branch success"}},required:["output"]}},type:"LOGIC"};var OF={};G(OF,{definition:()=>GJe});var GJe={name:"Collect Data",tagline:"Collect data to be sent to design",icon:"stack",description:"Collects specified data so it can be provided to the design section",type:"ACTION",internal:!0,features:{},stepId:"COLLECT",inputs:{},schema:{inputs:{properties:{collection:{type:"string",title:"What to Collect"}},required:["collection"]},outputs:{properties:{success:{type:"boolean",description:"Whether the action was successful"},value:{type:"string",description:"Collected data"}},required:["success","value"]}}};var IF={};G(IF,{definition:()=>$Je});var $Je={name:"Create Row",tagline:"Create a {{inputs.enriched.table.name}} row",icon:"rows-plus-bottom",description:"Add a row to your database",type:"ACTION",internal:!0,features:{LOOPING:!0},stepId:"CREATE_ROW",inputs:{},schema:{inputs:{properties:{row:{type:"object",properties:{tableId:{type:"string",customType:"table"}},customType:"row",title:"Table",required:["tableId"]}},required:["row"]},outputs:{properties:{row:{type:"object",customType:"row",description:"The new row"},response:{type:"object",description:"The response from the table"},success:{type:"boolean",description:"Whether the row creation was successful"},id:{type:"string",description:"The identifier of the new row"},revision:{type:"string",description:"The revision of the new row"}},required:["success","id","revision"]}}};var CF={};G(CF,{definition:()=>VJe});var VJe={name:"Delay",icon:"clock",tagline:"Delay for {{inputs.time}} milliseconds",description:"Delay the automation until an amount of time has passed",stepId:"DELAY",internal:!0,features:{},inputs:{},schema:{inputs:{properties:{time:{type:"number",title:"Delay in milliseconds"}},required:["time"]},outputs:{properties:{success:{type:"boolean",description:"Whether the delay was successful"}},required:["success"]}},type:"LOGIC"};var xF={};G(xF,{definition:()=>HJe});var HJe={description:"Delete a row from your database",icon:"trash-simple",name:"Delete Row",tagline:"Delete a {{inputs.enriched.table.name}} row",type:"ACTION",stepId:"DELETE_ROW",internal:!0,features:{LOOPING:!0},inputs:{},schema:{inputs:{properties:{tableId:{type:"string",customType:"table",title:"Table"},id:{type:"string",title:"Row ID"}},required:["tableId","id"]},outputs:{properties:{row:{type:"object",customType:"row",description:"The deleted row"},response:{type:"object",description:"The response from the table"},success:{type:"boolean",description:"Whether the deletion was successful"}},required:["row","success"]}}};var DF={};G(DF,{definition:()=>QJe});var QJe={name:"Discord Message",tagline:"Send a message to a Discord server",description:"Send a message to a Discord server",icon:"ri-discord-line",stepId:"discord",type:"ACTION",internal:!1,features:{LOOPING:!0},inputs:{},schema:{inputs:{properties:{url:{type:"string",title:"Discord Webhook URL"},username:{type:"string",title:"Bot Name"},avatar_url:{type:"string",title:"Bot Avatar URL"},content:{type:"string",title:"Message"}},required:["url","content"]},outputs:{properties:{httpStatus:{type:"number",description:"The HTTP status code of the request"},response:{type:"string",description:"The response from the Discord Webhook"},success:{type:"boolean",description:"Whether the message sent successfully"}}}}};var PF={};G(PF,{definition:()=>KJe});var KJe={name:"External Data Connector",tagline:"Execute Data Connector",icon:"database",description:"Execute a query in an external data connector",type:"ACTION",stepId:"EXECUTE_QUERY",internal:!0,features:{LOOPING:!0},inputs:{},schema:{inputs:{properties:{query:{type:"object",properties:{queryId:{type:"string",customType:"query"}},customType:"queryParams",title:"Parameters",required:["queryId"]}},required:["query"]},outputs:{properties:{response:{type:"object",description:"The response from the datasource execution"},info:{type:"object",description:"Some query types may return extra data, like headers from a REST query"},success:{type:"boolean",description:"Whether the action was successful"}},required:["response","success"]}}};var NF={};G(NF,{definition:()=>zJe});var zJe={name:"API Request",tagline:"Execute a REST request",icon:"globe",description:"Execute a HTTP query from a REST datasource",type:"ACTION",stepId:"API_REQUEST",internal:!0,features:{LOOPING:!0},inputs:{},schema:{inputs:{properties:{query:{type:"object",properties:{queryId:{type:"string"}},customType:"queryParams",title:"Parameters",required:["queryId"]}},required:["query"]},outputs:{properties:{response:{type:"object",description:"The response from the datasource execution"},info:{type:"object",description:"Some query types may return extra data, like headers from a REST query"},success:{type:"boolean",description:"Whether the action was successful"}},required:["response","success"]}}};var LF={};G(LF,{definition:()=>YJe});var YJe={name:"JS Scripting",tagline:"Execute JavaScript Code",deprecated:!0,icon:"code",description:"Run a piece of JavaScript code in your automation",type:"ACTION",internal:!0,stepId:"EXECUTE_SCRIPT",inputs:{},features:{LOOPING:!0},schema:{inputs:{properties:{code:{type:"string",customType:"code",title:"Code"}},required:["code"]},outputs:{properties:{value:{type:"string",description:"The result of the return statement"},success:{type:"boolean",description:"Whether the action was successful"}},required:["success"]}}};var kF={};G(kF,{definition:()=>JJe});var JJe={name:"JavaScript",tagline:"Execute JavaScript Code",icon:"brackets-angle",description:"Run a piece of JavaScript code in your automation",type:"ACTION",internal:!0,new:!1,stepId:"EXECUTE_SCRIPT_V2",inputs:{},features:{LOOPING:!0},schema:{inputs:{properties:{code:{type:"string",customType:"code",title:"Code"}},required:["code"]},outputs:{properties:{value:{type:"string",description:"The result of the return statement"},success:{type:"boolean",description:"Whether the action was successful"}},required:["success"]}}};var MF={};G(MF,{PrettyFilterConditions:()=>Lre,definition:()=>XJe});var Lre={EQUAL:"Equals",NOT_EQUAL:"Not equals",GREATER_THAN:"Greater than",LESS_THAN:"Less than"},XJe={name:"Condition",tagline:"{{inputs.field}} {{inputs.condition}} {{inputs.value}}",icon:"git-branch",description:"Conditionally halt automations which do not meet certain conditions",type:"LOGIC",internal:!0,features:{},stepId:"FILTER",inputs:{condition:"EQUAL"},schema:{inputs:{properties:{field:{type:"string",title:"Reference Value"},condition:{type:"string",title:"Condition",enum:Object.values(KA),pretty:Object.values(Lre)},value:{type:"string",title:"Comparison Value"}},required:["field","condition","value"]},outputs:{properties:{success:{type:"boolean",description:"Whether the action was successful"},result:{type:"boolean",description:"Whether the logic block passed"}},required:["success","result"]}}};var UF={};G(UF,{definition:()=>e7e});var ZJe={ascending:"Ascending",descending:"Descending"},e7e={description:"Get a single row from the database",icon:"box-arrow-down",name:"Get Row",tagline:"Get a row from {{inputs.enriched.table.name}} table",type:"ACTION",stepId:"GET_ROW",internal:!0,features:{LOOPING:!0},inputs:{},schema:{inputs:{properties:{tableId:{type:"string",customType:"table",title:"Table"},rowId:{type:"string",title:"Row ID"},filters:{type:"object",customType:"filters",title:"Filtering"},sortColumn:{type:"string",title:"Sort Column",customType:"column"},sortOrder:{type:"string",title:"Sort Order",enum:Object.values(uo),pretty:Object.values(ZJe)}},required:["tableId"]},outputs:{properties:{row:{type:"object",customType:"row",description:"The row that was found"},success:{type:"boolean",description:"Whether the query was successful"}},required:["row","success"]}}};var FF={};G(FF,{definition:()=>t7e});var t7e={name:"Looping",icon:"recycle",tagline:"Loop the block",description:"Loop",stepId:"LOOP",internal:!0,features:{},inputs:{},schema:{inputs:{properties:{option:{customType:"loopOption",title:"Input type"},binding:{type:"string",title:"Binding / Value"},iterations:{type:"number",title:"Max loop iterations"},failure:{type:"string",title:"Failure Condition"}},required:["type","value","iterations","failure"]},outputs:{properties:{items:{customType:"item",description:"The item currently being executed"},success:{type:"boolean",description:"Whether the message loop was successfully"},iterations:{type:"number",description:"The amount of times the block ran"}},required:["success","items","iterations"]}},type:"LOGIC"};var BF={};G(BF,{definition:()=>r7e});var r7e={name:"Make Integration",stepTitle:"Make",tagline:"Trigger a Make scenario",description:"Performs a webhook call to Make and gets the response (if configured)",icon:"ri-shut-down-line",stepId:"integromat",type:"ACTION",internal:!1,features:{LOOPING:!0},inputs:{},schema:{inputs:{properties:{url:{type:"string",title:"Webhook URL"},body:{type:"json",title:"Payload"}},required:["url","body"]},outputs:{properties:{success:{type:"boolean",description:"Whether call was successful"},httpStatus:{type:"number",description:"The HTTP status code returned"},response:{type:"object",description:"The webhook response - this can have properties"}},required:["success","response"]}}};var qF={};G(qF,{definition:()=>n7e});var n7e={name:"n8n Integration",stepTitle:"n8n",tagline:"Trigger an n8n workflow",description:"Performs a webhook call to n8n and gets the response (if configured)",icon:"ri-shut-down-line",stepId:"n8n",type:"ACTION",internal:!1,features:{LOOPING:!0},inputs:{},schema:{inputs:{properties:{url:{type:"string",title:"Webhook URL"},method:{type:"string",title:"Method",enum:Object.values(Hb)},authorization:{type:"string",title:"Authorization"},body:{type:"json",title:"Payload"}},required:["url","method"]},outputs:{properties:{success:{type:"boolean",description:"Whether call was successful"},httpStatus:{type:"number",description:"The HTTP status code returned"},response:{type:"object",description:"The webhook response - this can have properties"}},required:["success","response"]}}};var jF={};G(jF,{definition:()=>i7e});var kre=(u=>(u.GPT_4O_MINI="gpt-4o-mini",u.GPT_4O="gpt-4o",u.GPT_4="gpt-4",u.GPT_35_TURBO="gpt-3.5-turbo",u.GPT_5_MINI="gpt-5-mini",u.GPT_5="gpt-5",u.GPT_5_NANO="gpt-5-nano",u))(kre||{}),i7e={name:"OpenAI",tagline:"Send prompts to ChatGPT",icon:"flow-arrow",description:"Interact with the OpenAI ChatGPT API.",type:"ACTION",internal:!0,features:{},deprecated:!1,stepId:"OPENAI",inputs:{prompt:""},schema:{inputs:{properties:{prompt:{type:"string",title:"Prompt"},model:{type:"string",title:"Model",enum:Object.values(kre)}},required:["prompt","model"]},outputs:{properties:{success:{type:"boolean",description:"Whether the action was successful"},response:{type:"string",description:"What was output"}},required:["success","response"]}}};var WF={};G(WF,{definition:()=>o7e});var Mre=(s=>(s.POST="POST",s.GET="GET",s.PUT="PUT",s.DELETE="DELETE",s.PATCH="PATCH",s))(Mre||{}),o7e={deprecated:!0,name:"Outgoing webhook",tagline:"Send a {{inputs.requestMethod}} request",icon:"paper-plane-right",description:"Send a request of specified method to a URL",type:"ACTION",internal:!0,features:{LOOPING:!0},stepId:"OUTGOING_WEBHOOK",inputs:{requestMethod:"POST",url:"http://",requestBody:"{}",headers:"{}"},schema:{inputs:{properties:{requestMethod:{type:"string",enum:Object.values(Mre),title:"Request method"},url:{type:"string",title:"URL"},requestBody:{type:"string",title:"JSON Body",customType:"wide"},headers:{type:"string",title:"Headers",customType:"wide"}},required:["requestMethod","url"]},outputs:{properties:{response:{type:"object",description:"The response from the webhook"},httpStatus:{type:"number",description:"The HTTP status code returned"},success:{type:"boolean",description:"Whether the action was successful"}},required:["response","success"]}}};var GF={};G(GF,{definition:()=>a7e});var s7e={ascending:"Ascending",descending:"Descending"},a7e={description:"Query rows from the database",icon:"magnifying-glass",name:"Query Rows",tagline:"Query rows from {{inputs.enriched.table.name}} table",type:"ACTION",stepId:"QUERY_ROWS",internal:!0,features:{LOOPING:!0},inputs:{},schema:{inputs:{properties:{tableId:{type:"string",customType:"table",title:"Table"},filters:{type:"object",customType:"filters",title:"Filtering"},sortColumn:{type:"string",title:"Sort Column",customType:"column"},sortOrder:{type:"string",title:"Sort Order",enum:Object.values(uo),pretty:Object.values(s7e)},limit:{type:"number",title:"Limit",customType:"queryLimit"}},required:["tableId"]},outputs:{properties:{rows:{type:"array",customType:"rows",description:"The rows that were found"},success:{type:"boolean",description:"Whether the query was successful"}},required:["rows","success"]}}};var $F={};G($F,{definition:()=>u7e});var u7e={description:"Send an email using SMTP",tagline:"Send SMTP email to {{inputs.to}}",icon:"envelope",name:"Send Email (SMTP)",type:"ACTION",internal:!0,features:{LOOPING:!0},stepId:"SEND_EMAIL_SMTP",inputs:{},schema:{inputs:{properties:{to:{type:"string",title:"Send To"},from:{type:"string",title:"Send From"},cc:{type:"string",title:"CC"},bcc:{type:"string",title:"BCC"},subject:{type:"string",title:"Email Subject"},contents:{type:"longform",title:"Message",description:"Use markdown or HTML for rich text formatting: **bold**, _italics_, # Headings, * Bullets, <br> for line breaks, and more."},addInvite:{type:"boolean",title:"Add calendar invite"},startTime:{type:"date",title:"Start Time",dependsOn:"addInvite"},endTime:{type:"date",title:"End Time",dependsOn:"addInvite"},summary:{type:"string",title:"Meeting Summary",dependsOn:"addInvite"},location:{type:"string",title:"Location",dependsOn:"addInvite"},attachments:{type:"attachment",customType:"multi_attachments",title:"Attachments"}},required:["to","from","subject","contents"]},outputs:{properties:{success:{type:"boolean",description:"Whether the email was sent"},response:{type:"object",description:"A response from the email client, this may be an error"}},required:["success"]}}};var VF={};G(VF,{definition:()=>c7e});var c7e={name:"Backend log",tagline:"Console log a value in the backend",icon:"activity",description:"Logs the given text to the server (using console.log)",type:"ACTION",internal:!0,features:{LOOPING:!0},stepId:"SERVER_LOG",inputs:{text:""},schema:{inputs:{properties:{text:{type:"string",title:"Log"}},required:["text"]},outputs:{properties:{success:{type:"boolean",description:"Whether the action was successful"},message:{type:"string",description:"What was output"}},required:["success","message"]}}};var HF={};G(HF,{definition:()=>l7e});var l7e={name:"Slack Message",tagline:"Send a message to Slack",description:"Send a message to Slack",icon:"ri-slack-line",stepId:"slack",type:"ACTION",internal:!1,features:{LOOPING:!0},inputs:{},schema:{inputs:{properties:{url:{type:"string",title:"Incoming Webhook URL"},text:{type:"string",title:"Message"}},required:["url","text"]},outputs:{properties:{httpStatus:{type:"number",description:"The HTTP status code of the request"},success:{type:"boolean",description:"Whether the message sent successfully"},response:{type:"string",description:"The response from the Slack Webhook"}}}}};var QF={};G(QF,{definition:()=>f7e});var f7e={name:"Trigger an automation",tagline:"Triggers an automation synchronously",icon:"arrows-clockwise",description:"Triggers an automation synchronously",type:"ACTION",internal:!0,features:{},stepId:"TRIGGER_AUTOMATION_RUN",inputs:{},schema:{inputs:{properties:{automation:{type:"object",properties:{automationId:{type:"string",customType:"automation"}},customType:"automationFields",title:"Automation Fields",required:["automationId"]},timeout:{type:"number",title:"Timeout (ms)"}},required:["automationId"]},outputs:{properties:{success:{type:"boolean",description:"Whether the automation was successful"},value:{type:"object",description:"Automation Result"}},required:["success","value"]}}};var KF={};G(KF,{definition:()=>d7e});var d7e={name:"Update Row",tagline:"Update a {{inputs.enriched.table.name}} row",icon:"arrow-clockwise",description:"Update a row in your database",type:"ACTION",internal:!0,features:{LOOPING:!0},stepId:"UPDATE_ROW",inputs:{},schema:{inputs:{properties:{meta:{type:"object",title:"Field settings"},row:{type:"object",customType:"row",title:"Table"},rowId:{type:"string",title:"Row ID"}},required:["row","rowId"]},outputs:{properties:{row:{type:"object",customType:"row",description:"The updated row"},response:{type:"object",description:"The response from the table"},success:{type:"boolean",description:"Whether the action was successful"},id:{type:"string",description:"The identifier of the updated row"},revision:{type:"string",description:"The revision of the updated row"}},required:["success","id","revision"]}}};var zF={};G(zF,{definition:()=>p7e});var p7e={name:"Zapier Webhook",stepId:"zapier",type:"ACTION",internal:!1,features:{LOOPING:!0},description:"Trigger a Zapier Zap via webhooks",tagline:"Trigger a Zapier Zap",icon:"ri-flashlight-line",inputs:{},schema:{inputs:{properties:{url:{type:"string",title:"Webhook URL"},body:{type:"json",title:"Payload"}},required:["url"]},outputs:{properties:{httpStatus:{type:"number",description:"The HTTP status code of the request"},response:{type:"string",description:"The response from Zapier"}}}}};var YF={};G(YF,{definition:()=>h7e});var h7e={name:"Classify Text",icon:"PageTag",tagline:"Classify text into predefined categories using AI",description:"Analyzes text and assigns it to one of the categories you provide.",stepId:"CLASSIFY_CONTENT",internal:!0,inputs:{},features:{LOOPING:!0},schema:{inputs:{properties:{textInput:{type:"longform",title:"Text",description:"The text content you want the AI to classify."},categoryItems:{type:"array",customType:"categories",title:"Categories",description:"Add categories for the AI to use when classifying text."}},required:["textInput","categoryItems"]},outputs:{properties:{category:{type:"string",description:"The category assigned by the AI."},success:{type:"boolean",description:"Whether the classification was successful."}},required:["category","success"]}},type:"ACTION"};var JF={};G(JF,{definition:()=>m7e});var m7e={name:"LLM Prompt",tagline:"Send prompts to LLM",icon:"Algorithm",description:"Interact with an LLM.",type:"ACTION",internal:!0,features:{},stepId:"PROMPT_LLM",inputs:{prompt:""},schema:{inputs:{properties:{prompt:{type:"longform",title:"Prompt"}},required:["prompt","model"]},outputs:{properties:{success:{type:"boolean",description:"Whether the action was successful"},response:{type:"string",description:"What was output"}},required:["success","response"]}}};var XF={};G(XF,{definition:()=>g7e});var g7e={name:"Translate",tagline:"Translate text to a different language",icon:"globe",description:"Translate text to a different language.",type:"ACTION",internal:!0,features:{},stepId:"TRANSLATE",inputs:{prompt:""},schema:{inputs:{properties:{text:{type:"string",title:"Text"},language:{type:"string",title:"Language"}},required:["text","language"]},outputs:{properties:{success:{type:"boolean",description:"Whether the action was successful"},response:{type:"string",description:"What was the translated text"}},required:["success","response"]}}};var ZF={};G(ZF,{definition:()=>y7e});var Ure=(n=>(n.SHORT="Short",n.MEDIUM="Medium",n.LONG="Long",n))(Ure||{}),y7e={name:"Summarise",tagline:"Summarise text",icon:"Summarize",description:"Summarise text.",type:"ACTION",internal:!0,features:{},stepId:"SUMMARISE",inputs:{prompt:""},schema:{inputs:{properties:{text:{type:"longform",title:"Text"},length:{type:"string",title:"Length",enum:Object.values(Ure)}},required:["text","length"]},outputs:{properties:{success:{type:"boolean",description:"Whether the action was successful"},response:{type:"string",description:"What was the summarised text"}},required:["success","response"]}}};var e1={};G(e1,{definition:()=>b7e});var b7e={name:"Generate Text",icon:"Edit",tagline:"Generate contentusing AI",description:"Uses AI to generate text content based on your instructions and chosen format",stepId:"GENERATE_TEXT",internal:!0,inputs:{contentType:"document"},features:{LOOPING:!0},schema:{inputs:{properties:{contentType:{type:"string",title:"Content type",enum:Object.values($A),pretty:Object.values(UX)},instructions:{type:"longform",title:"Instructions",description:"Provide guidance to help the AI produce content in the format that you want"}},required:["contentType","instructions"]},outputs:{properties:{generatedText:{type:"string",description:"The text content generated by the AI"},success:{type:"boolean",description:"Whether the text generation was successful"}},required:["generatedText","success"]}},type:"ACTION"};var t1={};G(t1,{definition:()=>_7e});var _7e={name:"Extract Document Data",icon:"Document",tagline:"Extract structured data from documents using AI",description:"Extracts structured data from PDF or image according to provided schema.",stepId:"EXTRACT_FILE_DATA",internal:!0,inputs:{},features:{LOOPING:!0},schema:{inputs:{properties:{file:{type:"string",title:"Document",description:"Attachment or Link to the document to extract data from."},source:{type:"string",enum:Object.values(VA),title:"Source",description:"The source of the document to extract data from."},fileType:{dependsOn:{field:"source",value:"URL"},type:"string",enum:Object.values(HA),title:"File Type",description:"The type of file at the URL."},schema:{customType:"triggerSchema",title:"Data schema",description:'Schema defining the structure of data to extract. Example: {"name": "string", "price": "number"}.'}},required:["file","schema"]},outputs:{properties:{data:{type:"json",description:"The structured data extracted from the document."},success:{type:"boolean",description:"Whether the extraction was successful."}},required:["data","success"]}},type:"ACTION"};var r1={};G(r1,{definition:()=>w7e});var w7e={name:"Agent",icon:"Effect",tagline:"Run an AI agent with tools",description:"Execute a pre-configured AI agent that can use tools to accomplish tasks",stepId:"AGENT",internal:!0,inputs:{},features:{LOOPING:!0},schema:{inputs:{properties:{agentId:{customType:"agent",title:"Agent",description:"Select the agent to run"},prompt:{type:"longform",title:"Prompt",description:"The task or question to send to the agent"},useStructuredOutput:{type:"boolean",title:"Use structured output",description:"Constrain the agent response to a specific JSON structure"},outputSchema:{type:"object",customType:"outputSchema",title:"Output Schema",description:"Define the structure of the agent's output",dependsOn:"useStructuredOutput"}},required:["agentId","prompt"]},outputs:{properties:{response:{type:"string",description:"The agent's response"},success:{type:"boolean",description:"Whether the agent completed successfully"},steps:{type:"array",description:"The steps taken by the agent"},output:{type:"object",description:"Structured output from the agent (when output schema is defined)"}},required:["response","success"]}},type:"ACTION"};var n1={};G(n1,{definition:()=>E7e});var E7e={name:"State",tagline:"Extract automation state",icon:"brackets-curly",description:"Extract automation state into a named variable",type:"ACTION",internal:!0,new:!1,stepId:"EXTRACT_STATE",inputs:{},features:{LOOPING:!0},schema:{inputs:{properties:{key:{type:"string",title:"Key"},value:{type:"longform",title:"Value"}},required:["value","key"]},outputs:{properties:{value:{type:"string",description:"The result of the return statement"},success:{type:"boolean",description:"Whether the action was successful"}},required:["success"]}}};var i1={};G(i1,{definition:()=>S7e});var S7e={name:"Loop",icon:"recycle",tagline:"Loop the block",description:"Loop",stepId:"LOOP_V2",internal:!0,features:{},inputs:{},schema:{inputs:{properties:{children:{type:"array",title:"Input type"},binding:{type:"string",title:"Binding / Value"},iterations:{type:"number",title:"Max loop iterations"},failure:{type:"string",title:"Failure Condition"}}},outputs:{properties:{success:{type:"boolean",description:"Loop success"},iterations:{type:"number",description:"The number of iterations executed"},items:{type:"json",description:"Per-step iteration results"},summary:{type:"json",description:"Loop summary including per-step counters"}},required:["success"]}},type:"LOGIC"};var s1={};G(s1,{definitions:()=>D7e});var Fre={name:"User action",event:"app:trigger",icon:"cursor-click",tagline:"Automation fired from the frontend",description:"Trigger an automation from an action inside your app",stepId:"APP",inputs:{},schema:{inputs:{properties:{fields:{type:"object",customType:"triggerSchema",title:"Fields"}},required:[]},outputs:{properties:{fields:{type:"object",description:"Fields submitted from the app frontend",customType:"triggerSchema"}},required:["fields"]}},type:"TRIGGER"};var Bre={name:"CRON / Schedule",event:"cron:trigger",icon:"clock",tagline:"Cron Trigger (<b>{{inputs.cron}}</b>)",description:"Triggers automation on a cron schedule.",stepId:"CRON",inputs:{},schema:{inputs:{properties:{cron:{type:"string",customType:"cron",title:"Expression"}},required:["cron"]},outputs:{properties:{timestamp:{type:"number",description:"Timestamp the cron was executed"}},required:["timestamp"]}},type:"TRIGGER"};var qre={name:"Email Received",event:"email:trigger",icon:"envelope",tagline:"Email Trigger",description:"Triggers automation when an email is received",stepId:"EMAIL",inputs:{host:"",port:993,secure:!0,username:"",password:"",mailbox:"INBOX"},schema:{inputs:{properties:{host:{type:"string",description:"IMAP host address"},port:{type:"number",description:"IMAP port"},secure:{type:"boolean",description:"Use TLS/SSL for the IMAP connection"},username:{type:"string",description:"IMAP username"},password:{type:"string",description:"IMAP password"},mailbox:{type:"string",description:"Mailbox to monitor"}},required:["host","port","secure","username","password"]},outputs:{properties:{from:{type:"string",description:"Who sent the email"},to:{type:"string",description:"Who received the email"},cc:{type:"array",subtype:"string",description:"Who was CC'd on the email"},subject:{type:"string",description:"What was the subject of the email"},sentAt:{type:"datetime",description:"When the email was sent"},bodyText:{type:"string",description:"Email content (plain text)"}},required:["from","to"]}},type:"TRIGGER"};var jre={name:"Row Deleted",event:"row:delete",icon:"trash-simple",tagline:"Row is deleted from {{inputs.enriched.table.name}}",description:"Fired when a row is deleted from your database",stepId:"ROW_DELETED",inputs:{},schema:{inputs:{properties:{tableId:{type:"string",customType:"table",title:"Table"}},required:["tableId"]},outputs:{properties:{row:{type:"object",customType:"row",description:"The row that was deleted"}},required:["row"]}},type:"TRIGGER"};var Wre={name:"Row Created",event:"row:save",icon:"rows-plus-bottom",tagline:"Row is added to {{inputs.enriched.table.name}}",description:"Fired when a row is added to your database",stepId:"ROW_SAVED",inputs:{},schema:{inputs:{properties:{tableId:{type:"string",customType:"table",title:"Table"},filters:{type:"object",customType:"trigger_filter",title:"Filtering"}},required:["tableId"]},outputs:{properties:{row:{type:"object",customType:"row",description:"The new row that was created"},id:{type:"string",description:"Row ID - can be used for updating"},revision:{type:"string",description:"Revision of row"}},required:["row","id"]}},type:"TRIGGER"};var Gre={name:"Row Updated",event:"row:update",icon:"arrow-clockwise",tagline:"Row is updated in {{inputs.enriched.table.name}}",description:"Fired when a row is updated in your database",stepId:"ROW_UPDATED",inputs:{},schema:{inputs:{properties:{tableId:{type:"string",customType:"table",title:"Table"},filters:{type:"object",customType:"trigger_filter",title:"Filtering"}},required:["tableId"]},outputs:{properties:{oldRow:{type:"object",customType:"row",description:"The row that was updated",title:"Old Row"},row:{type:"object",customType:"row",description:"The row before it was updated",title:"Row"},id:{type:"string",description:"Row ID - can be used for updating"},revision:{type:"string",description:"Revision of row"}},required:["row","id"]}},type:"TRIGGER"};var $re={name:"Webhook",event:"web:trigger",icon:"paper-plane-right",tagline:"Webhook endpoint is hit",description:"Trigger an automation when a HTTP POST webhook is hit",stepId:"WEBHOOK",inputs:{},schema:{inputs:{properties:{schemaUrl:{type:"string",customType:"webhookUrl",title:"Schema URL"},triggerUrl:{type:"string",customType:"webhookUrl",title:"Trigger URL"}},required:["schemaUrl","triggerUrl"]},outputs:{properties:{body:{type:"object",description:"Body of the request which hit the webhook"}},required:["body"]}},type:"TRIGGER"};var Vre={type:"TRIGGER",name:"Row Action",event:"row:action",icon:"tree-structure",tagline:"Row action triggered in {{inputs.enriched.table.name}} by {{inputs.enriched.row._id}}",description:"row action workflow",stepId:"ROW_ACTION",inputs:{},schema:{inputs:{properties:{tableId:{type:"string",customType:"table",title:"Table",readonly:!0}},required:["tableId"]},outputs:{properties:{id:{type:"string",description:"Row ID - can be used for updating"},revision:{type:"string",description:"Revision of row"},table:{type:"object",customType:"table",title:"The table linked to the row action"},row:{type:"object",customType:"row",description:"The row linked to the row action"}}}}};var D7e={ROW_SAVED:Wre,ROW_UPDATED:Gre,ROW_DELETED:jre,WEBHOOK:$re,APP:Fre,CRON:Bre,EMAIL:qre,ROW_ACTION:Vre};var P7e=Object.values(Me).sort((e,t)=>t.length-e.length);function Hre(e){return P7e.find(t=>e.startsWith(`${t}${ce}`))}o(Hre,"getDocumentType");var N7e=Object.values(Hc).sort((e,t)=>t.length-e.length);function Qre(e){return N7e.find(t=>e.startsWith(`${t}${ce}`))}o(Qre,"getVirtualDocumentType");var L7e=new RegExp("^datasource_plus_(.+)__(.+)$"),$R=o(e=>t=>!!t&&t.startsWith(`${e}${ce}`),"idCheckFor"),k7e=o(e=>{let t=e.match(L7e);return!!e&&t!==null},"isExternalTableId"),Ns=o(e=>M7e(e)||k7e(e),"isTableIdOrExternalTableId"),M7e=$R("ta"),ln=$R("view"),fm=$R("datasource"),Kre=$R("query");function Zr(e){if(!ln(e))throw new Error("Unable to extract table ID, is not a view ID");let t=e.split(ce);return t.shift(),e=t.join(ce),new RegExp(`^(?<tableId>.+)${ce}([^${ce}]+)$`).exec(e).groups.tableId}o(Zr,"getTableIdFromViewId");var a1=(n=>(n.ALL="all",n.AUTOMATION="automation",n.STATUS="status",n))(a1||{}),ol=(f=>(f.USER_BY_WORKSPACE="by_app",f.USER_BY_EMAIL="by_email2",f.BY_API_KEY="by_api_key",f.LINK="by_link",f.ROUTING="screen_routes_2",f.AUTOMATION_LOGS="automation_logs",f.ACCOUNT_BY_EMAIL="account_by_email",f.PLATFORM_USERS_LOWERCASE="platform_users_lowercase_2",f.USER_BY_GROUP="user_by_group",f.WORKSPACE_BACKUP_BY_TRIGGER="by_trigger",f))(ol||{}),j_={by_email2:["by_email"]},tr={GLOBAL:{name:"global-db",docs:{apiKeys:"apikeys",usageQuota:"usage_quota",licenseInfo:"license_info",environmentVariables:"environmentvariables"}},PLATFORM_INFO:{name:"global-info",docs:{tenants:"tenants",install:"install"}},AUDIT_LOGS:{name:"audit-logs"},SCIM_LOGS:{name:"scim-logs"},SELF_HOST_CLOUD:{name:"self-host-cloud"}},Ls=ti("app"),u1=ti("app_dev"),ks=u1,sl="internal",zre="budibase",Fn="_design/sqlite",Yre="ta_bb_jobs",Jre="ta_bb_inventory",Xre="ta_bb_expenses",Zre="ta_bb_employee",VR=`ro${ce}ta_users${ce}`,pd=(r=>(r[r.SQLITE=Fn]="SQLITE",r.MIGRATIONS="_design/migrations",r))(pd||{});var c1=(r=>(r.ACTIVE="active",r.INACTIVE="inactive",r))(c1||{}),dm=(u=>(u.Auth="budibase:auth",u.Init="budibase:init",u.ACCOUNT_RETURN_URL="budibase:account:returnurl",u.DatasourceAuth="budibase:datasourceauth",u.OIDC_CONFIG="budibase:oidc:config",u.FeatureFlags="budibase:featureflags",u.RecaptchaSession="budibase:recaptcha",u))(dm||{}),ene=(i=>(i.OWNER="owner",i.ADMIN="admin",i.BUILDER="builder",i.WORKSPACE_MANAGER="workspace_manager",i))(ene||{}),tne=(c=>(c.SETTINGS="settings",c.ACCOUNT="account",c.SMTP="smtp",c.GOOGLE="google",c.OIDC="oidc",c.OIDC_LOGOS="logos_oidc",c.SCIM="scim",c.AI="AI",c))(tne||{}),U7e=new Date(-2147483647e3),l1=new Date(2147483647e3),Lr="default";var Be={};G(Be,{CacheKey:()=>bn,TTL:()=>Op,bustCache:()=>Yg,destroy:()=>yS,docWritethrough:()=>YH,generic:()=>bS,get:()=>Ip,invite:()=>XH,keys:()=>V0,passwordReset:()=>ZH,store:()=>uc,user:()=>df,withCache:()=>ef,withCacheWithDynamicTTL:()=>YRe,workspace:()=>Kw,writethrough:()=>U3});var YH={};G(YH,{DocWritethrough:()=>zH,DocWritethroughProcessor:()=>gS,getProcessor:()=>kMt,init:()=>zRe});var Vn={};G(Vn,{BudibaseQueue:()=>Gs,InMemoryQueue:()=>AI,JobQueue:()=>ng,QueuedProcessor:()=>KH,UnretriableError:()=>G0,shutdown:()=>lct});var f1=require("crypto"),QR=require("fs"),B7e=require("lodash"),W_=require("path");var q7e=process.env.TOP_LEVEL_PATH||process.env.SERVER_TOP_LEVEL_PATH||(0,W_.resolve)((0,W_.join)(__dirname,"..","..","..")),rne=!1;!rne&&HR()&&!d1()&&(require("dotenv").config({path:(0,W_.join)(q7e,".env")}),rne=!0);function d1(){return ine()}o(d1,"isTest");function ine(){return process.env.NODE_ENV==="jest"||process.env.JEST_WORKER_ID!=null&&process.env.JEST_WORKER_ID!=="null"}o(ine,"isJest");function HR(){return process.env.NODE_ENV!=="production"}o(HR,"isDev");function j7e(e){if(e)return parseInt(e)}o(j7e,"parseIntSafe");var pm={BACKUPS:"backups",APPS:"prod-budi-app-assets",TEMPLATES:"templates",GLOBAL:"global",PLUGINS:"plugins",TEMP:"tmp-file-attachments"},nne=!!parseInt(process.env.SELF_HOSTED||"");function W7e(){return process.env.API_ENCRYPTION_KEY?process.env.API_ENCRYPTION_KEY:process.env.JWT_SECRET}o(W7e,"getAPIEncryptionKey");function G7e(){return process.env.HTTP_LOGGING===void 0?!0:process.env.HTTP_LOGGING}o(G7e,"httpLogging");function $7e(){function e(r){function n(u,c){let l=`${c}/${u}`;if((0,QR.existsSync)(l))return l;let f=`${c}/..`;return f===c?null:n(u,f)}o(n,"findFileInAncestors");let i=n(r,process.cwd()),s=(0,QR.readFileSync)(i,"utf-8");return JSON.parse(s)}o(e,"getParentFile");let t;if(HR()&&!d1())try{t=`${e("lerna.json").version}+local`}catch{}try{let r=e("package.json");return{VERSION:t||process.env.BUDIBASE_VERSION||r.version,SERVICE_NAME:r.name}}catch{return{VERSION:process.env.BUDIBASE_VERSION||"",SERVICE_NAME:""}}}o($7e,"getPackageJsonFields");function V7e(){return al.SERVICE_TYPE==="worker"}o(V7e,"isWorker");function H7e(){return al.SERVICE_TYPE==="apps"}o(H7e,"isApps");function Q7e(){return al.BUDIBASE_ENVIRONMENT==="QA"}o(Q7e,"isQA");function K7e(){return process.env.SERVICE?process.env.SERVICE:process.env.APPS_SERVICE?process.env.APPS_SERVICE:process.env.WORKER_SERVICE?process.env.WORKER_SERVICE:"budibase"}o(K7e,"getServiceName");var al={isTest:d1,isJest:ine,isDev:HR,isWorker:V7e,isApps:H7e,isQA:Q7e,isProd:()=>!HR(),BUDIBASE_ENVIRONMENT:process.env.BUDIBASE_ENVIRONMENT,JWT_SECRET:process.env.JWT_SECRET?(0,f1.createSecretKey)(process.env.JWT_SECRET,"utf8"):void 0,JWT_SECRET_FALLBACK:process.env.JWT_SECRET_FALLBACK?(0,f1.createSecretKey)(process.env.JWT_SECRET_FALLBACK,"utf8"):void 0,ENCRYPTION_KEY:process.env.ENCRYPTION_KEY,API_ENCRYPTION_KEY:W7e(),COUCH_DB_URL:process.env.COUCH_DB_URL||"http://localhost:4005",COUCH_DB_SQL_URL:process.env.COUCH_DB_SQL_URL,COUCH_DB_USERNAME:process.env.COUCH_DB_USER,COUCH_DB_PASSWORD:process.env.COUCH_DB_PASSWORD,GOOGLE_CLIENT_ID:process.env.GOOGLE_CLIENT_ID,GOOGLE_CLIENT_SECRET:process.env.GOOGLE_CLIENT_SECRET,SALT_ROUNDS:process.env.SALT_ROUNDS,REDIS_URL:process.env.REDIS_URL||"localhost:6379",REDIS_PASSWORD:process.env.REDIS_PASSWORD,REDIS_USERNAME:process.env.REDIS_USERNAME,REDIS_CLUSTERED:process.env.REDIS_CLUSTERED,MINIO_ACCESS_KEY:process.env.MINIO_ACCESS_KEY,MINIO_SECRET_KEY:process.env.MINIO_SECRET_KEY,AWS_SESSION_TOKEN:process.env.AWS_SESSION_TOKEN,AWS_REGION:process.env.AWS_REGION||"eu-west-1",MINIO_URL:process.env.MINIO_URL,MINIO_ENABLED:process.env.MINIO_ENABLED||1,S3_IGNORE_SELF_SIGNED:process.env.S3_IGNORE_SELF_SIGNED,INTERNAL_API_KEY:process.env.INTERNAL_API_KEY,INTERNAL_API_KEY_FALLBACK:process.env.INTERNAL_API_KEY_FALLBACK,MULTI_TENANCY:process.env.MULTI_TENANCY,ACCOUNT_PORTAL_URL:process.env.ACCOUNT_PORTAL_URL||"https://account.budibase.app",INTERNAL_ACCOUNT_PORTAL_URL:process.env.INTERNAL_ACCOUNT_PORTAL_URL||process.env.ACCOUNT_PORTAL_URL||"https://account.budibase.app",ACCOUNT_PORTAL_API_KEY:process.env.ACCOUNT_PORTAL_API_KEY||"",BUDICLOUD_URL:process.env.BUDICLOUD_URL||"https://budibase.app",DISABLE_ACCOUNT_PORTAL:process.env.DISABLE_ACCOUNT_PORTAL,SELF_HOSTED:nne,COOKIE_DOMAIN:process.env.COOKIE_DOMAIN,PLATFORM_URL:process.env.PLATFORM_URL||"",POSTHOG_TOKEN:process.env.POSTHOG_TOKEN,POSTHOG_PERSONAL_TOKEN:process.env.POSTHOG_PERSONAL_TOKEN,POSTHOG_API_HOST:process.env.POSTHOG_API_HOST||"https://us.i.posthog.com",POSTHOG_FEATURE_FLAGS_ENABLED:process.env.POSTHOG_FEATURE_FLAGS_ENABLED,ENABLE_ANALYTICS:process.env.ENABLE_ANALYTICS,TENANT_FEATURE_FLAGS:process.env.TENANT_FEATURE_FLAGS,CLOUDFRONT_CDN:process.env.CLOUDFRONT_CDN,CLOUDFRONT_PRIVATE_KEY_64:process.env.CLOUDFRONT_PRIVATE_KEY_64,CLOUDFRONT_PUBLIC_KEY_ID:process.env.CLOUDFRONT_PUBLIC_KEY_ID,BACKUPS_BUCKET_NAME:process.env.BACKUPS_BUCKET_NAME||pm.BACKUPS,APPS_BUCKET_NAME:process.env.APPS_BUCKET_NAME||pm.APPS,TEMPLATES_BUCKET_NAME:process.env.TEMPLATES_BUCKET_NAME||pm.TEMPLATES,GLOBAL_BUCKET_NAME:process.env.GLOBAL_BUCKET_NAME||pm.GLOBAL,PLUGIN_BUCKET_NAME:process.env.PLUGIN_BUCKET_NAME||pm.PLUGINS,TEMP_BUCKET_NAME:process.env.TEMP_BUCKET_NAME||pm.TEMP,USE_COUCH:process.env.USE_COUCH||!0,MOCK_REDIS:process.env.MOCK_REDIS,DEFAULT_LICENSE:process.env.DEFAULT_LICENSE,SERVICE:K7e(),LOG_LEVEL:process.env.LOG_LEVEL||"info",SESSION_UPDATE_PERIOD:process.env.SESSION_UPDATE_PERIOD,DEPLOYMENT_ENVIRONMENT:process.env.DEPLOYMENT_ENVIRONMENT||"docker-compose",HTTP_LOGGING:G7e(),ENABLE_AUDIT_LOG_IP_ADDR:process.env.ENABLE_AUDIT_LOG_IP_ADDR,SQL_LOGGING_ENABLE:process.env.SQL_LOGGING_ENABLE,SQL_MAX_ROWS:process.env.SQL_MAX_ROWS,SQL_MAX_RELATED_ROWS:process.env.MAX_RELATED_ROWS,SMTP_FALLBACK_ENABLED:process.env.SMTP_FALLBACK_ENABLED,SMTP_USER:process.env.SMTP_USER,SMTP_PASSWORD:process.env.SMTP_PASSWORD,SMTP_HOST:process.env.SMTP_HOST,SMTP_PORT:parseInt(process.env.SMTP_PORT||""),SMTP_FROM_ADDRESS:process.env.SMTP_FROM_ADDRESS,DISABLE_JWT_WARNING:process.env.DISABLE_JWT_WARNING,BLACKLIST_IPS:process.env.BLACKLIST_IPS,SERVICE_TYPE:"unknown",PASSWORD_MIN_LENGTH:process.env.PASSWORD_MIN_LENGTH,PASSWORD_MAX_LENGTH:process.env.PASSWORD_MAX_LENGTH,ENABLE_SSO_MAINTENANCE_MODE:nne?process.env.ENABLE_SSO_MAINTENANCE_MODE:!1,...$7e(),DISABLE_PINO_LOGGER:process.env.DISABLE_PINO_LOGGER,OFFLINE_MODE:process.env.OFFLINE_MODE,SESSION_EXPIRY_SECONDS:process.env.SESSION_EXPIRY_SECONDS,_set(e,t){process.env[e]=t,al[e]=t},ROLLING_LOG_MAX_SIZE:process.env.ROLLING_LOG_MAX_SIZE||"10M",ENABLE_SCIM_LOGGER:process.env.ENABLE_SCIM_LOGGER,BB_ADMIN_USER_EMAIL:process.env.BB_ADMIN_USER_EMAIL,BB_ADMIN_USER_PASSWORD:process.env.BB_ADMIN_USER_PASSWORD,OPENAI_API_KEY:process.env.OPENAI_API_KEY,MIN_VERSION_WITHOUT_POWER_ROLE:process.env.MIN_VERSION_WITHOUT_POWER_ROLE||"3.0.0",DISABLE_CONTENT_SECURITY_POLICY:process.env.DISABLE_CONTENT_SECURITY_POLICY,BSON_BUFFER_SIZE:j7e(process.env.BSON_BUFFER_SIZE),CUSTOM_CSP_MEDIA_SRC:process.env.CUSTOM_CSP_MEDIA_SRC,CUSTOM_CSP_SCRIPT_SRC:process.env.CUSTOM_CSP_SCRIPT_SRC,CUSTOM_CSP_CONNECT_SRC:process.env.CUSTOM_CSP_CONNECT_SRC,CUSTOM_CSP_IMG_SRC:process.env.CUSTOM_CSP_IMG_SRC,CUSTOM_CSP_FONT_SRC:process.env.CUSTOM_CSP_FONT_SRC,CUSTOM_CSP_FRAME_SRC:process.env.CUSTOM_CSP_FRAME_SRC};var one=["API_ENCRYPTION_KEY","BB_ADMIN_USER_PASSWORD","COUCH_DB_PASSWORD","COUCH_DB_SQL_URL","COUCH_DB_URL","GOOGLE_CLIENT_SECRET","INTERNAL_API_KEY_FALLBACK","INTERNAL_API_KEY","JWT_SECRET","MINIO_ACCESS_KEY","MINIO_SECRET_KEY","OPENAI_API_KEY","REDIS_PASSWORD","REDIS_USERNAME"];for(let[e,t]of Object.entries(al))t==="0"&&(al[e]=0),t==="false"&&(al[e]=0);var L=al;var YR={};G(YR,{Databases:()=>p1,SEPARATOR:()=>hm,SelectableDatabase:()=>KR,getRedisClusterOptions:()=>h1,getRedisConnectionDetails:()=>zR,getRedisOptions:()=>hd,removeDbPrefix:()=>m1});var hm="-",p1=(E=>(E.PW_RESETS="pwReset",E.VERIFICATIONS="verification",E.INVITATIONS="invitation",E.DEV_LOCKS="devLocks",E.DEBOUNCE="debounce",E.SESSIONS="session",E.USER_CACHE="users",E.FLAGS="flags",E.WORKSPACE_METADATA="appMetadata",E.QUERY_VARS="queryVars",E.LICENSES="license",E.GENERIC_CACHE="data_cache",E.WRITE_THROUGH="writeThrough",E.LOCKS="locks",E.SOCKET_IO="socket_io",E.BPM_EVENTS="bpmEvents",E.DOC_WRITE_THROUGH="docWriteThrough",E.RECAPTCHA_SESSION="recaptchaSession",E.OPENAPI_IMPORT_SPECS="openapiImportSpecs",E))(p1||{}),KR=(y=>(y[y.DEFAULT=0]="DEFAULT",y[y.SOCKET_IO=1]="SOCKET_IO",y[y.RATE_LIMITING=2]="RATE_LIMITING",y[y.OPENAPI_IMPORT_SPECS=3]="OPENAPI_IMPORT_SPECS",y[y.UNUSED_3=4]="UNUSED_3",y[y.UNUSED_4=5]="UNUSED_4",y[y.UNUSED_5=6]="UNUSED_5",y[y.UNUSED_6=7]="UNUSED_6",y[y.UNUSED_7=8]="UNUSED_7",y[y.UNUSED_8=9]="UNUSED_8",y[y.UNUSED_9=10]="UNUSED_9",y[y.UNUSED_10=11]="UNUSED_10",y[y.UNUSED_11=12]="UNUSED_11",y[y.UNUSED_12=13]="UNUSED_12",y[y.UNUSED_13=14]="UNUSED_13",y[y.UNUSED_14=15]="UNUSED_14",y))(KR||{});function zR(){let e=L.REDIS_PASSWORD,t=L.REDIS_USERNAME,r=L.REDIS_URL.split("//");if(r=r.length>1?r[1]:r[0],r=r.split("@"),r.length>1){let a=r[0].split(":");t=t||a[0]||void 0,e=a[1],r=r[1]}else r=r[0];let[n,i]=r.split(":"),s=parseInt(i);return{host:n,password:e,username:t,port:isNaN(s)?6379:s}}o(zR,"getRedisConnectionDetails");function h1(){return{slotsRefreshTimeout:2e3,dnsLookup:(e,t)=>t(null,e),redisOptions:{...hd(),tls:{}}}}o(h1,"getRedisClusterOptions");function hd(){let{host:e,password:t,port:r,username:n}=zR();return{connectTimeout:3e4,port:r,host:e,password:t,...n&&{username:n}}}o(hd,"getRedisOptions");function m1(e){let t=e.split(hm);return t.length>=2?(t.shift(),t.join(hm)):t[0]}o(m1,"removeDbPrefix");var kle=U(require("events"));var nt={};G(nt,{Duration:()=>nr,DurationType:()=>Lle,GZIP_PREFIX:()=>vI,clearCookie:()=>Dl,compare:()=>b1,getCookie:()=>$u,getDispatcher:()=>Jut,getWorkspaceIdFromCtx:()=>Bd,gunzipFromBase64:()=>tct,gzipToBase64:()=>ect,hasCircularStructure:()=>Gut,hash:()=>y1,isAudited:()=>Gq,isClient:()=>Wut,isPublicApiRequest:()=>qut,isServingApp:()=>Uut,isServingBuilder:()=>Fut,isServingBuilderPreview:()=>But,isValidInternalAPIKey:()=>rE,newid:()=>Nt,openJwt:()=>EI,setCookie:()=>Nle,time:()=>Vut,timeout:()=>Wq,urlHasProtocol:()=>$ut,validEmail:()=>$q});var sne=require("uuid");function Nt(){return(0,sne.v4)().replace(/-/g,"")}o(Nt,"newid");var g1=require("bcrypt"),z7e=L.SALT_ROUNDS||10;async function y1(e){let t=await g1.genSalt(z7e);return g1.hash(e,t)}o(y1,"hash");async function b1(e,t){return g1.compare(e,t)}o(b1,"compare");var wI=U(require("jsonwebtoken"));var C={};G(C,{DEFAULT_TENANT_ID:()=>Lr,baseGlobalDBName:()=>Vw,doInAutomationContext:()=>Vat,doInContext:()=>yq,doInEnvironmentContext:()=>rut,doInFeatureFlagOverrideContext:()=>vq,doInIPContext:()=>wq,doInIdentityContext:()=>V_,doInLicenseContext:()=>Qat,doInScimContext:()=>nut,doInSelfHostTenantUsingCloud:()=>Hat,doInTenant:()=>ji,doInWorkspaceContext:()=>Yat,doInWorkspaceMigrationContext:()=>Xat,ensureSnippetContext:()=>Bce,getAuditLogDBName:()=>Uce,getAuditLogsDB:()=>out,getAutomationId:()=>bq,getCurrentContext:()=>kd,getDevWorkspaceDB:()=>aut,getDevWorkspaceId:()=>eut,getEnvironmentVariables:()=>iut,getFeatureFlagOverrides:()=>Tq,getFeatureFlags:()=>Eq,getGlobalDB:()=>gt,getGlobalDBName:()=>Ld,getIP:()=>_q,getIdentity:()=>Du,getLicense:()=>Kat,getOrThrowWorkspaceId:()=>Zat,getPlatformURL:()=>gq,getProdWorkspaceDB:()=>sut,getProdWorkspaceId:()=>tut,getScimDBName:()=>jat,getSelfHostCloudDB:()=>zat,getTableForView:()=>uut,getTenantIDFromWorkspaceID:()=>Jm,getTenantId:()=>Ue,getWorkspaceDB:()=>Xm,getWorkspaceId:()=>Si,identity:()=>$_,isMultiTenant:()=>Cl,isScim:()=>Ws,isSelfHostUsingCloud:()=>nI,isTenancyEnabled:()=>Gat,isTenantIdSet:()=>Wat,setFeatureFlags:()=>Sq,setTableForView:()=>cut});var $_={};G($_,{doInAccountContext:()=>Y7e,doInIdentityContext:()=>w1,doInUserContext:()=>E1,getAccountUserId:()=>ane,getIdentity:()=>_1});function _1(){return Du()}o(_1,"getIdentity");function w1(e,t){return V_(e,t)}o(w1,"doInIdentityContext");function E1(e,t,r){let n={...e,_id:e._id,type:"user",hostInfo:{ipAddress:t.request.ip,userAgent:t.userAgent.source}};return w1(n,r)}o(E1,"doInUserContext");function Y7e(e,t){let r=ane(e),n=e.tenantId,i={_id:r,type:"user",tenantId:n,account:e};return w1(i,t)}o(Y7e,"doInAccountContext");function ane(e){let t;return WA(e)?t=e.budibaseUserId:t=e.accountId,t}o(ane,"getAccountUserId");var Ms=o(e=>{let t=S1(e),r,n;if(t.auth?.username)r=t.auth.username;else if(L.COUCH_DB_USERNAME)r=L.COUCH_DB_USERNAME;else if(!L.isTest())throw new Error("CouchDB username not set");if(t.auth?.password)n=t.auth.password;else if(L.COUCH_DB_PASSWORD)n=L.COUCH_DB_PASSWORD;else if(!L.isTest())throw new Error("CouchDB password not set");let i=Buffer.from(`${r}:${n}`).toString("base64"),s=L.COUCH_DB_SQL_URL;if(L.isDev()&&!s)s="http://localhost:4006";else if(!s&&t.url){let a=new URL(t.url);s=t.url.replace(a.port,"4984")}return{url:t.url,sqlUrl:S1(s).url,auth:{username:r,password:n},cookie:`Basic ${i}`}},"getCouchInfo"),S1=o((e=L.COUCH_DB_URL)=>{let t,r,n,i;if(e){/^https?:\/\//i.test(e)||(e=`http://${e}`);let a=e.split("://"),u=a[0],c=a.slice(1).join("://");if(e.includes("@")){let l=c.split("@");i=l[l.length-1];let f=l.slice(0,-1).join("@");if(f.includes(":")){let d=f.split(":");r=d[0],n=d.slice(1).join(":")}else r=f}else i=c;t=`${u}://${i}`}return{url:t,auth:{username:r,password:n}}},"getUrlInfo");var Lce=U(require("@budibase/nano"));var une=U(require("node-fetch"));function JR(e){return e.replace(/(https?:\/\/)|(\/)+/g,"$1$2")}o(JR,"checkSlashesInUrl");async function cne(e,t="GET",r){let{url:n,cookie:i}=Ms(),s=`${n}/${e}`;return await H_({url:s,cookie:i,method:t,body:r})}o(cne,"directCouchCall");async function H_({url:e,cookie:t,method:r,body:n}){let i={method:r,headers:{Authorization:t}};return n&&r!=="GET"&&(typeof n=="string"?(i.body=n,i.headers["Content-Type"]="text/plain"):(i.body=JSON.stringify(n),i.headers["Content-Type"]="application/json")),await(0,une.default)(JR(encodeURI(e)),i)}o(H_,"directCouchUrlCall");async function T1(e,t="GET",r){let n=await cne(e,t,r);if(n.status<300)return await n.json();throw"Cannot connect to CouchDB instance"}o(T1,"directCouchQuery");var Nd=U(require("pouchdb"));var Cce,xce=!1,oq=o((e={})=>{let{url:t,cookie:r}=Ms(),n={prefix:t,fetch:(i,s)=>(s.headers.set("Authorization",r),Nd.default.fetch(i,s))};if(e.inMemory){let i=Sae();Nd.default.plugin(i),n={adapter:"memory"}}if(e.onDisk&&(n={adapter:"leveldb"}),e.replication){let i=Ice();Nd.default.plugin(i.plugin),Nd.default.adapter("writableStream",i.adapters.writableStream)}if(e.find){let i=require("pouchdb-find");Nd.default.plugin(i)}return Nd.default.defaults(n)},"getPouch");function XO(e){Cce=oq(e),xce=!0}o(XO,"init");var Tat=o(()=>{if(!xce)throw new Error("init has not been called")},"checkInitialised");function es(e,t){Tat();let r=new Cce(e,t),n=r.put;return r.put=async(i,s={})=>(i.createdAt||(i.createdAt=new Date().toISOString()),i.updatedAt=new Date().toISOString(),n(i,s)),r.exists=async()=>!(await r.info()).error,r}o(es,"getPouchDB");async function Ww(e){if(!(!e||L.isTest()))try{return await e.close()}catch{}}o(Ww,"closePouchDB");var Mr=U(require("dd-trace"));var Km=class{constructor(t){this.db=t}static{o(this,"DDInstrumentedDatabase")}get name(){return this.db.name}exists(t){return Mr.default.trace("db.exists",r=>(r.addTags({db_name:this.name,doc_id:t}),t?this.db.exists(t):this.db.exists()))}get(t){return Mr.default.trace("db.get",r=>(r.addTags({db_name:this.name,doc_id:t}),this.db.get(t)))}tryGet(t){return Mr.default.trace("db.tryGet",async r=>{r.addTags({db_name:this.name,doc_id:t});let n=await this.db.tryGet(t);return r.addTags({doc_found:n!==void 0}),n})}getMultiple(t,r){return Mr.default.trace("db.getMultiple",async n=>{n.addTags({db_name:this.name,num_docs:t?.length||0,allow_missing:r?.allowMissing});let i=await this.db.getMultiple(t,r);return n.addTags({num_docs_found:i.length}),i})}remove(t,r){return Mr.default.trace("db.remove",async n=>{n.addTags({db_name:this.name,doc_id:t,rev:r});let i=typeof t=="object",s=i?t._id:t;r=i?t._rev:r;let a=await this.db.remove(s,r);return n.addTags({ok:a.ok}),a})}bulkRemove(t,r){return Mr.default.trace("db.bulkRemove",n=>(n.addTags({db_name:this.name,num_docs:t.length,silence_errors:r?.silenceErrors}),this.db.bulkRemove(t,r)))}put(t,r){return Mr.default.trace("db.put",async n=>{n.addTags({db_name:this.name,doc_id:t._id,force:r?.force,return_doc:r?.returnDoc});let i=await this.db.put(t,r);return n.addTags({ok:i.ok}),i})}bulkDocs(t){return Mr.default.trace("db.bulkDocs",r=>(r.addTags({db_name:this.name,num_docs:t.length}),this.db.bulkDocs(t)))}async find(t){return Mr.default.trace("db.find",async r=>{r.addTags({db_name:this.name,...t});let n=await this.db.find(t);return r.addTags({rows_length:n.docs.length}),n})}allDocs(t){return Mr.default.trace("db.allDocs",async r=>{r.addTags({db_name:this.name,...t});let n=await this.db.allDocs(t);return r.addTags({total_rows:n.total_rows,rows_length:n.rows.length,offset:n.offset}),n})}query(t,r){return Mr.default.trace("db.query",async n=>{n.addTags({db_name:this.name,view_name:t,...r});let i=await this.db.query(t,r);return n.addTags({total_rows:i.total_rows,rows_length:i.rows.length,offset:i.offset}),i})}destroy(){return Mr.default.trace("db.destroy",async t=>{t.addTags({db_name:this.name});let r=await this.db.destroy();return t.addTags({ok:r.ok}),r})}compact(){return Mr.default.trace("db.compact",async t=>{t.addTags({db_name:this.name});let r=await this.db.compact();return t.addTags({ok:r.ok}),r})}dump(t,r){return Mr.default.trace("db.dump",n=>(n.addTags({db_name:this.name,batch_limit:r?.batch_limit,batch_size:r?.batch_size,style:r?.style,timeout:r?.timeout,num_doc_ids:r?.doc_ids?.length,view:r?.view}),this.db.dump(t,r)))}load(...t){return Mr.default.trace("db.load",r=>(r.addTags({db_name:this.name,num_args:t.length}),this.db.load(...t)))}createIndex(...t){return Mr.default.trace("db.createIndex",r=>(r.addTags({db_name:this.name,num_args:t.length}),this.db.createIndex(...t)))}deleteIndex(...t){return Mr.default.trace("db.deleteIndex",r=>(r.addTags({db_name:this.name,num_args:t.length}),this.db.deleteIndex(...t)))}getIndexes(...t){return Mr.default.trace("db.getIndexes",r=>(r.addTags({db_name:this.name,num_args:t.length}),this.db.getIndexes(...t)))}sql(t,r){return Mr.default.trace("db.sql",async n=>{n.addTags({db_name:this.name,num_bindings:r?.length});let i=await this.db.sql(t,r);return n.addTags({num_rows:i.length}),i})}sqlPurgeDocument(t){return Mr.default.trace("db.sqlPurgeDocument",r=>(r.addTags({db_name:this.name,num_docs:Array.isArray(t)?t.length:1}),this.db.sqlPurgeDocument(t)))}sqlDiskCleanup(){return Mr.default.trace("db.sqlDiskCleanup",t=>(t.addTags({db_name:this.name}),this.db.sqlDiskCleanup()))}};var pq={};G(pq,{breakExternalTableId:()=>uq,breakRowIdField:()=>Mat,buildExternalTableId:()=>xat,convertRowId:()=>kat,encodeTableId:()=>Dat,encodeViewId:()=>Pat,extractDate:()=>lq,generateRowIdField:()=>Nat,getNativeSql:()=>zm,isExternalTable:()=>aq,isExternalTableID:()=>ZO,isInternalTableID:()=>Cat,isRowId:()=>Lat,isValidFilter:()=>tI,isValidISODateString:()=>eI,isValidISODateStringWithoutTimezone:()=>cq,isValidTime:()=>fq,sqlLog:()=>Gw,validateManyToMany:()=>dq});var sq=`${ce}${ce}`,Dce=/^\[.*]$/g,vat=encodeURIComponent(" "),Aat=/^\d{4}-\d{2}-\d{2}(?:[T ]\d{2}:\d{2}:\d{2}(?:.\d{3})?Z)?$/,Rat=/^\d{4}-\d{2}-\d{2}(?:[T ]\d{2}:\d{2}:\d{2}(?:.\d{3})?)?$/,Oat=/(\d{4}-\d{2}-\d{2})/,Iat=/^(?:\d{2}:)?(?:\d{2}:)(?:\d{2})$/;function ZO(e){return e.startsWith("datasource"+ce)}o(ZO,"isExternalTableID");function Cat(e){return!ZO(e)}o(Cat,"isInternalTableID");function zm(e){let t=e.toSQL();if(Array.isArray(t))return t;let r;return t.toNative&&(r=t.toNative()),{sql:r?.sql||t.sql,bindings:r?.bindings||t.bindings}}o(zm,"getNativeSql");function aq(e){return e?.sourceId&&e.sourceId.includes("datasource"+ce)&&e?.sourceId!==Qb||e?.sourceType==="external"?!0:!!(e?._id&&ZO(e._id))}o(aq,"isExternalTable");function xat(e,t){return`${e}${sq}${encodeURIComponent(t)}`}o(xat,"buildExternalTableId");function Dat(e){return ZO(e)?encodeURIComponent(e):e}o(Dat,"encodeTableId");function Pat(e){return encodeURIComponent(e)}o(Pat,"encodeViewId");function uq(e){let t=e.split(sq),r=t.shift(),n=t.join(sq);if(n.includes(vat)&&(n=decodeURIComponent(n)),!r||!n)throw new Error("Unable to get datasource/table name from table ID");return{datasourceId:r,tableName:n}}o(uq,"breakExternalTableId");function Nat(e=[]){Array.isArray(e)||(e=[e]);for(let t in e)e[t]instanceof Buffer&&(e[t]=e[t].toString());return encodeURIComponent(JSON.stringify(e).replace(/"/g,"'"))}o(Nat,"generateRowIdField");function Lat(e){return Array.isArray(e)||typeof e=="string"&&e.match(Dce)!=null}o(Lat,"isRowId");function kat(e){return Array.isArray(e)?e[0]:typeof e=="string"&&e.match(Dce)!=null?e.substring(1,e.length-1):e}o(kat,"convertRowId");function Mat(e){if(!e)return[];let t=typeof e=="string"?e:e._id,r=decodeURIComponent(t).replace(/'/g,'"');try{let n=JSON.parse(r);return Array.isArray(n)?n:[n]}catch{return[e]}}o(Mat,"breakRowIdField");function eI(e){let t=e.trim();if(!Aat.test(t))return!1;let r=new Date(t);return!isNaN(r.getTime())}o(eI,"isValidISODateString");function cq(e){let t=e.trim();if(!Rat.test(t))return!1;let r=new Date(t);return!isNaN(r.getTime())}o(cq,"isValidISODateStringWithoutTimezone");function lq(e){let t=e.match(Oat);if(t)return t[0]}o(lq,"extractDate");function tI(e){return e!=null&&e!==""}o(tI,"isValidFilter");function fq(e){return Iat.test(e)}o(fq,"isValidTime");function Gw(e,t,r){if(!L.SQL_LOGGING_ENABLE)return;let n=`[SQL] [${e.toUpperCase()}] query="${t}"`;r&&(n+=` values="${r.join(", ")}"`),console.log(n)}o(Gw,"sqlLog");function Uat(e){return!!e.through&&!!e.fromPrimary&&!!e.from&&!!e.toPrimary&&!!e.to}o(Uat,"isValidManyToManyRelationship");function dq(e){if(Uat(e))return e}o(dq,"validateManyToMany");var Pce="Database does not exist.";function Nce(e){return(0,Lce.default)({url:e.url,requestDefaults:{headers:{Authorization:e.cookie}},parseUrl:!1})}o(Nce,"buildNano");var Ol=class extends Error{constructor(r,n){super(r);let i=n.status||n.statusCode||500;this.status=i,this.statusCode=i,this.reason=n.reason||"Unknown",this.name=n.name,this.errid=n.errid||"Unknown",this.description=n.description||"Unknown",this.error=n.error||"Not found"}static{o(this,"CouchDBError")}};function Fat(e,t,r){if(!e||!t)throw new Error("Unable to create database without database name or connection");let n=new Ym(e,r,t);return new Km(n)}o(Fat,"DatabaseWithConnection");var Ym=class e{constructor(t,r,n){this.couchInfo=Ms();this.name=t,this.pouchOpts=r||{},n&&(this.couchInfo=Ms(n),this.instanceNano=Nce(this.couchInfo)),e.nano||e.init()}static{o(this,"DatabaseImpl")}static init(){let t=Ms();e.nano=Nce(t)}exists(t){return t===void 0?this.dbExists():this.docExists(t)}async dbExists(){return(await H_({url:`${this.couchInfo.url}/${this.name}`,method:"HEAD",cookie:this.couchInfo.cookie})).status===200}async docExists(t){try{return await this.performCall(r=>()=>r.head(t)),!0}catch{return!1}}nano(){return this.instanceNano||e.nano}getDb(){return this.nano().db.use(this.name)}async checkAndCreateDb(){let t=!this.pouchOpts?.skip_setup,r=await this.exists();if(!t&&!r)throw new Error("DB does not exist");if(!r)try{await this.nano().db.create(this.name)}catch(n){if(n.statusCode!==412)throw new Ol(n.message,n)}return this.getDb()}async performCallWithDBCreation(t){let r=this.getDb(),n=await t(r);try{return await n()}catch(i){if(i.statusCode===404&&i.reason===Pce)return await this.checkAndCreateDb(),await this.performCallWithDBCreation(t);throw new Ol(`CouchDB error: ${i.message}`,i)}}async performCall(t){let r=this.getDb(),n=await t(r);try{return await n()}catch(i){throw new Ol(`CouchDB error: ${i.message}`,i)}}async get(t){return this.performCall(r=>{if(!t)throw new Error("Unable to get doc without a valid _id.");return()=>r.get(t)})}async tryGet(t){try{return await this.get(t)}catch(r){if(r.statusCode===404)return;throw r}}async getMultiple(t,r){if(!t||t.length===0)return[];t=[...new Set(t)];let n=!r?.excludeDocs,i=await this.allDocs({keys:t,include_docs:n}),s=o(c=>n&&c.doc==null||c.value&&"deleted"in c.value&&c.value.deleted?!0:c.error==="not_found","rowUnavailable"),a=i.rows.filter(c=>!s(c)),u=a.length!==i.rows.length;if(!r?.allowMissing&&u){let l=i.rows.filter(f=>s(f)).map(f=>f.key).join(", ");throw new Error(`Unable to get bulk documents: ${l}`)}return a.map(c=>n?c.doc:c.value)}async remove(t,r){return this.performCall(n=>{let i,s;if(NX(t)?(i=t._id,s=t._rev):(i=t,s=r),!i||!s)throw new Error("Unable to remove doc without a valid _id and _rev.");return()=>n.destroy(i,s)})}async bulkRemove(t,r){let n=await this.performCall(a=>()=>a.bulk({docs:t.map(u=>({...u,_deleted:!0}))}));if(r?.silenceErrors)return;let i=!1,s="Unable to bulk remove documents: ";for(let a of n)a.error&&(i=!0,s+=a.error);if(i)throw new Ol(s,{name:this.name,status:400})}async post(t,r){return t._id||(t._id=Nt()),this.put(t,r)}async put(t,r){if(!t._id)throw new Error("Cannot store document without _id field.");return this.performCallWithDBCreation(async n=>{if(t.createdAt||(t.createdAt=new Date().toISOString()),t.updatedAt=new Date().toISOString(),r?.force&&t._id)try{let i=await this.get(t._id);i&&(t._rev=i._rev)}catch(i){if(i.status!==404)throw i}return async()=>{let i=await n.insert(t);return r?.returnDoc?{...i,doc:{...t,_rev:i.rev}}:i}})}async bulkDocs(t){let r=new Date().toISOString();return this.performCallWithDBCreation(n=>()=>n.bulk({docs:t.map(i=>({createdAt:r,...i,updatedAt:r}))}))}async find(t){return this.performCall(r=>async()=>r.find(t))}async allDocs(t){return this.performCall(r=>async()=>{try{return await r.list(t)}catch(n){if(n.reason===Pce)return{offset:0,total_rows:0,rows:[]};throw n}})}async _sqlQuery(t,r,n){t=JR(`${this.couchInfo.sqlUrl}/${t}`);let i={url:t,method:r,cookie:this.couchInfo.cookie};return n&&(i.body=n),this.performCall(()=>async()=>{let s=await H_(i),a=await s.text();if(s.status>300){let u;try{u=JSON.parse(a)}catch{throw console.error(`SQS error: ${a}`),new Ol("error while running SQS query, please try again later",{name:"sqs_error",status:s.status})}throw u}return JSON.parse(a)})}async sql(t,r){let i=`/${this.name}/${Fn}`;return Gw("sqlite3",t,r),await this._sqlQuery(i,"POST",{query:t,args:r})}async sqlDiskCleanup(){let r=`/${this.name}/_cleanup`;try{await this._sqlQuery(r,"POST")}catch(n){if(n.status!==500)throw n}}async sqlPurgeDocument(t){Array.isArray(t)||(t=[t]);let n=`/${this.name}/_purge`;return await this._sqlQuery(n,"POST",{docs:t})}async query(t,r){return this.performCall(n=>{let[i,s]=t.split("/");return()=>n.view(i,s,r)})}async destroy(){if(await this.exists(Fn)){let t=await this.get(Fn);t.sql.tables={},await this.put(t),await this.sqlDiskCleanup()}try{return await this.nano().db.destroy(this.name)}catch(t){if(t.statusCode===404)return{ok:!0};throw new Ol(t.message,t)}}async compact(){return this.performCall(t=>()=>t.compact())}async dump(t,r){return es(this.name).dump(t,r)}async load(t){return es(this.name).load(t)}async createIndex(t){return es(this.name).createIndex(t)}async deleteIndex(t){return es(this.name).deleteIndex(t)}async getIndexes(){return es(this.name).getIndexes()}};function Ei(e,t){return new Km(new Ym(e,t))}o(Ei,"getDB");async function Oo(e,t,r){let n=Ei(e,r);return await t(n)}o(Oo,"doWithDB");async function hq(e){let t="/_all_dbs";return e&&(t+=`?${e}`),await T1(t)}o(hq,"directCouchAllDbs");var mq="No app provided";function Il(e){if(!e)throw mq;return e.startsWith(ks)}o(Il,"isDevWorkspaceID");function Bat(e){if(!e)throw mq;return e.startsWith(Ls)&&!Il(e)}o(Bat,"isProdWorkspaceID");function $w(e){if(!e)throw mq;return Il(e.appId)}o($w,"isDevWorkspace");function rI(e){if(!e||e.startsWith(ks))return e;let t=e.split(Ls);t.shift();let r=t.join(Ls);return`${ks}${r}`}o(rI,"getDevWorkspaceID");function Io(e){if(!e||!e.startsWith(ks))return e;let t=e.split(ks);t.shift();let r=t.join(ks);return`${Ls}${r}`}o(Io,"getProdWorkspaceID");var kce=require("async_hooks");var tn=class e{static{o(this,"Context")}static{this.storage=new kce.AsyncLocalStorage}static run(t,r){return e.storage.run(t,()=>r())}static get(){return e.storage.getStore()}};var Mce=null;function Ld(e){return e||(e=Ue()),Vw(e)}o(Ld,"getGlobalDBName");function Uce(e){return e||(e=Ue()),e===Lr?tr.AUDIT_LOGS.name:`${e}${ce}${tr.AUDIT_LOGS.name}`}o(Uce,"getAuditLogDBName");function jat(e){return e||(e=Ue()),e===Lr?tr.SCIM_LOGS.name:`${e}${ce}${tr.SCIM_LOGS.name}`}o(jat,"getScimDBName");function Vw(e){return!e||e===Lr?tr.GLOBAL.name:`${e}${ce}${tr.GLOBAL.name}`}o(Vw,"baseGlobalDBName");function gq(){return L.PLATFORM_URL}o(gq,"getPlatformURL");function Cl(){return!!L.MULTI_TENANCY}o(Cl,"isMultiTenant");function Wat(){return!!tn.get()?.tenantId}o(Wat,"isTenantIdSet");function Gat(){return L.MULTI_TENANCY}o(Gat,"isTenancyEnabled");function Jm(e){if(!e)return;if(!Cl())return Lr;let t=e.split(ce),r=t[1]==="dev";if(!(r&&t.length===3||!r&&t.length===2))return r?t[2]:t[1]}o(Jm,"getTenantIDFromWorkspaceID");function $at(e){let t;try{t=tn.get()}catch{t={}}return t={...t,...e},t}o($at,"updateContext");async function qs(e,t){Jat();let r=$at(e);return tn.run(r,t)}o(qs,"newContext");async function Vat(e){return await Bce(),await qs({tenantId:Jm(e.workspaceId),appId:e.workspaceId,automationId:e.automationId},e.task)}o(Vat,"doInAutomationContext");async function yq(e,t){let r=Jm(e);return qs({tenantId:r,appId:e},t)}o(yq,"doInContext");async function ji(e,t){return L.MULTI_TENANCY||(e=e||Lr),qs(e?{tenantId:e}:{},t)}o(ji,"doInTenant");async function Hat(e,t){return qs({tenantId:e,isSelfHostUsingCloud:!0},t)}o(Hat,"doInSelfHostTenantUsingCloud");async function Qat(e,t){return qs({license:e},t)}o(Qat,"doInLicenseContext");function Kat(){return tn.get()?.license}o(Kat,"getLicense");function nI(){return!!tn.get()?.isSelfHostUsingCloud}o(nI,"isSelfHostUsingCloud");function zat(){let e=tn.get();if(!e||!e.isSelfHostUsingCloud)throw new Error("Self-host cloud DB not found");return Ei(tr.SELF_HOST_CLOUD.name)}o(zat,"getSelfHostCloudDB");async function Yat(e,t){return Fce(e,t)}o(Yat,"doInWorkspaceContext");async function Fce(e,t,r){if(!e)throw new Error("workspaceId is required");let n=Jm(e),i={appId:e,...r};return n&&(i.tenantId=n),qs(i,t)}o(Fce,"_doInWorkspaceContext");async function V_(e,t){if(!e)throw new Error("identity is required");let r={identity:e};return e.tenantId&&(r.tenantId=e.tenantId),qs(r,t)}o(V_,"doInIdentityContext");function Jat(){if(tn.get()?.isMigrating)throw new Error("The context cannot be changed, a migration is currently running")}o(Jat,"guardMigration");async function Xat(e,t){return Fce(e,t,{isMigrating:!0})}o(Xat,"doInWorkspaceMigrationContext");function Du(){try{return tn.get()?.identity}catch{}}o(Du,"getIdentity");function Ue(){if(!Cl())return Lr;let t=tn.get()?.tenantId;if(!t)throw new Error("Tenant id not found");return t}o(Ue,"getTenantId");function bq(){return tn.get()?.automationId}o(bq,"getAutomationId");function Si(){let t=tn.get()?.appId;return!t&&L.isTest()&&Mce?Mce:t}o(Si,"getWorkspaceId");function Zat(){let e=Si();if(!e)throw new Error("Workspace id not set");return e}o(Zat,"getOrThrowWorkspaceId");function _q(){return tn.get()?.ip}o(_q,"getIP");var eut=o(()=>{let e=Si();if(!e)throw new Error("Could not get workspaceId");return rI(e)},"getDevWorkspaceId"),tut=o(()=>{let e=Si();if(!e)throw new Error("Could not get workspaceId");return Io(e)},"getProdWorkspaceId");function rut(e,t){if(!e)throw new Error("Must supply environment variables.");return qs({environmentVariables:e},t)}o(rut,"doInEnvironmentContext");function nut(e){return qs({isScim:!0},e)}o(nut,"doInScimContext");function wq(e,t){return qs({ip:e},t)}o(wq,"doInIPContext");async function Bce(){let e=kd();if(!e||e.snippets)return;let t,r=Xm();r&&(t=(await r.tryGet("app_metadata"))?.snippets),e.snippets=t||[]}o(Bce,"ensureSnippetContext");function iut(){let e=tn.get();return e.environmentVariables?e.environmentVariables:null}o(iut,"getEnvironmentVariables");function gt(){let e=tn.get();if(!e||L.MULTI_TENANCY&&!e.tenantId)throw new Error("Global DB not found");if(e.isSelfHostUsingCloud)throw new Error("Global DB not found - self-host users using cloud don't have a global DB");return Ei(Vw(e?.tenantId))}o(gt,"getGlobalDB");function out(){if(!Ue())throw new Error("No tenant ID found - cannot open audit log DB");return Ei(Uce())}o(out,"getAuditLogsDB");function Xm(e){let t=Si();if(!t)throw new Error("Unable to retrieve workspace DB - no workspace ID.");if(nI())throw new Error("Workspace DB not found - self-host users using cloud don't have workspace DBs");return Ei(t,e)}o(Xm,"getWorkspaceDB");function sut(e){let t=Si();if(!t)throw new Error("Unable to retrieve prod DB - no workspace ID.");return Ei(Io(t),e)}o(sut,"getProdWorkspaceDB");function aut(e){let t=Si();if(!t)throw new Error("Unable to retrieve dev DB - no workspace ID.");return Ei(rI(t),e)}o(aut,"getDevWorkspaceDB");function Ws(){return!!tn.get()?.isScim}o(Ws,"isScim");function kd(){try{return tn.get()}catch{return}}o(kd,"getCurrentContext");function Eq(e){let t=kd();if(t)return t.featureFlagCache?.[e]}o(Eq,"getFeatureFlags");function Sq(e,t){let r=kd();r&&(r.featureFlagCache??={},r.featureFlagCache[e]=t)}o(Sq,"setFeatureFlags");function Tq(){return kd()?.featureFlagOverrides||{}}o(Tq,"getFeatureFlagOverrides");async function vq(e,t){return await qs({featureFlagOverrides:e},t)}o(vq,"doInFeatureFlagOverrideContext");function uut(e){let t=kd();if(t)return t.viewToTableCache?.[e]}o(uut,"getTableForView");function cut(e,t){let r=kd();r&&(r.viewToTableCache??={},r.viewToTableCache[e]=t)}o(cut,"setTableForView");var F={};G(F,{AutomationViewMode:()=>a1,BUDIBASE_DATASOURCE_TYPE:()=>zre,DEFAULT_BB_DATASOURCE_ID:()=>Qb,DEFAULT_EMPLOYEE_TABLE_ID:()=>Zre,DEFAULT_EXPENSES_TABLE_ID:()=>Xre,DEFAULT_INVENTORY_TABLE_ID:()=>Jre,DEFAULT_JOBS_TABLE_ID:()=>Yre,DatabaseImpl:()=>Ym,DatabaseWithConnection:()=>Fat,DeprecatedViews:()=>j_,DesignDocuments:()=>pd,DocumentType:()=>Me,InternalTable:()=>Tu,QueryBuilder:()=>Gu,Replication:()=>Rle,SEPARATOR:()=>ce,SQLITE_DESIGN_DOC_ID:()=>Fn,SQS_DATASOURCE_INTERNAL:()=>sl,StaticDatabases:()=>tr,UNICODE_MAX:()=>Mn,USER_METADATA_PREFIX:()=>VR,ViewName:()=>ol,WORKSPACE_DEV:()=>u1,WORKSPACE_DEV_PREFIX:()=>ks,WORKSPACE_PREFIX:()=>Ls,baseGlobalDBName:()=>Vw,checkErrorCode:()=>xle,closePouchDB:()=>Ww,createApiKeyView:()=>wle,createNewUserEmailView:()=>ble,createPlatformAccountEmailView:()=>Sle,createPlatformUserView:()=>Tle,createUserAppView:()=>_le,createView:()=>rg,dbExists:()=>Aut,directCouchAllDbs:()=>hq,directCouchCall:()=>cne,directCouchQuery:()=>T1,directCouchUrlCall:()=>H_,doWithDB:()=>Oo,fullSearch:()=>xut,generateAIConfigID:()=>ole,generateAgentFileID:()=>ile,generateAgentID:()=>ele,generateAgentToolSourceID:()=>nle,generateAppUserID:()=>yI,generateChatAppID:()=>tle,generateChatConversationID:()=>rle,generateDevInfoID:()=>Jce,generateGlobalUserID:()=>tg,generateOAuth2LogID:()=>Zce,generatePluginID:()=>Xce,generateRoleID:()=>Dq,generateRowID:()=>xq,generateTableID:()=>Hce,generateTemplateID:()=>Yce,generateUserMetadataID:()=>Kce,generateVectorDbID:()=>cle,generateWorkspaceAppID:()=>ale,generateWorkspaceFavouriteID:()=>ule,generateWorkspaceID:()=>Vce,getAllDbs:()=>yle,getAllWorkspaces:()=>Yw,getCouchInfo:()=>Ms,getDB:()=>Ei,getDevWorkspaceID:()=>rI,getDevWorkspaceIDs:()=>Tut,getDocParams:()=>ju,getGlobalDBName:()=>Ld,getGlobalIDFromUserMetadataID:()=>zce,getGlobalUserParams:()=>Ud,getLiteLLMKeyID:()=>sle,getOAuth2ConfigParams:()=>hle,getPluginParams:()=>ple,getPouch:()=>oq,getPouchDB:()=>es,getProdWorkpaceIDs:()=>Sut,getProdWorkspaceID:()=>Io,getQueryIndex:()=>lle,getRoleParams:()=>_I,getRowParams:()=>Pq,getStartEndKeyURL:()=>zw,getTemplateParams:()=>dle,getUrlInfo:()=>S1,getUserMetadataParams:()=>fle,getUsersByWorkspaceParams:()=>bI,getWorkspaceAppParams:()=>mle,getWorkspaceFavouriteParams:()=>gle,getWorkspacesByIDs:()=>Eut,init:()=>XO,isDevWorkspace:()=>$w,isDevWorkspaceID:()=>Il,isDocumentConflictError:()=>Put,isGlobalUserID:()=>Qce,isProdWorkspaceID:()=>Bat,isSameWorkspaceID:()=>vut,paginatedSearch:()=>Cut,pagination:()=>Nq,prefixRoleID:()=>qu,queryGlobalView:()=>Wu,queryGlobalViewRaw:()=>Mq,queryPlatformView:()=>Xw,queryView:()=>kq,queryViewRaw:()=>Jw,removeKeyNumbering:()=>Zw,searchIndexes:()=>Bq});var Kw={};G(Kw,{WorkspaceState:()=>Cq,getWorkspaceMetadata:()=>gI,invalidateWorkspaceMetadata:()=>_ut});var xl={};G(xl,{getCacheClient:()=>Rq,getDocWritethroughClient:()=>mut,getInviteClient:()=>Md,getLockClient:()=>Iq,getOpenapiImportSpecsClient:()=>put,getPasswordResetClient:()=>Qw,getSessionClient:()=>eg,getSocketClient:()=>hut,getUserClient:()=>Hw,getWorkspaceClient:()=>mI,getWritethroughClient:()=>Oq,init:()=>ts,shutdown:()=>Gce});var oI=U(require("ioredis"));var iI=require("dd-trace"),jce=require("lodash");var qce;if(L.MOCK_REDIS)try{qce=require("ioredis-mock")}catch{console.log("Mock redis unavailable")}async function lut(e=0){return await iI.tracer.trace("Redis.init",async t=>{if(L.MOCK_REDIS)return t.addTags({mock:!0}),new qce(hd());let r;if(L.REDIS_CLUSTERED){t.addTags({clustered:!0});let{host:n,port:i}=zR();r=new oI.Cluster([{host:n,port:i}],h1())}else r=new oI.default(hd());return new Promise((n,i)=>{r.on("error",s=>{t.addTags({error:!0}),console.error(`failed to connect to redis (db: ${e})`,s),i(s)}),r.on("reconnecting",()=>{console.log(`Redis reconnecting... (db: ${e})`)}),r.on("ready",()=>{t.addTags({connected:!0}),console.log(`Redis ready to receive commands (db: ${e})`),n(r)})})})}o(lut,"init");function fut(e,t){return new Promise((r,n)=>{let i=new Set;e.on("data",s=>s.forEach(a=>i.add(a))),e.on("error",s=>n(s)),e.on("end",async()=>{try{let s=Array.from(i).map(async a=>{let u=await t.get(a);return u&&(u=JSON.parse(u)),{key:m1(a),value:u}});r(await Promise.all(s))}catch(s){n(s)}})})}o(fut,"promisifyStream");function dut(e){return e.isCluster}o(dut,"isCluster");var Aq=class e{static{o(this,"RedisWrapper")}constructor(t,r){this.client=t,this.db=r}static async init(t,r=0){return await iI.tracer.trace("RedisWrapper.init",async n=>{let i=await lut(r);return r&&!L.isTest()&&(n.addTags({db:t}),i.select(r)),new e(i,t)})}trace(t,r){return iI.tracer.trace(t,async n=>(n.addTags({db:this.db}),await r(n)))}prefixed(t){return t.includes(this.db)?t:`${this.db}${hm}${t}`}async finish(){return await this.trace("RedisWrapper.finish",async()=>{await this.client.quit()})}async scan(t=""){return await this.trace("RedisWrapper.scan",async r=>{r.addTags({key:t}),t=`${this.db}${hm}${t}`;let n;dut(this.client)?n=this.client.nodes("master")[0].scanStream({match:t+"*",count:100}):n=this.client.scanStream({match:t+"*",count:100});let i=await fut(n,this.client);return r.addTags({numKeysFound:i.length}),i})}async keys(t){return await this.trace("RedisWrapper.keys",async r=>(r.addTags({pattern:t}),this.client.keys(this.prefixed(t))))}async exists(t){return await this.trace("RedisWrapper.exists",async r=>(r.addTags({key:t}),await this.client.exists(this.prefixed(t))))}async get(t){return await this.trace("RedisWrapper.get",async r=>{r.addTags({key:t});let n=await this.client.get(this.prefixed(t));n!=null&&n.key&&(n.key=t);try{return JSON.parse(n)}catch{return n}})}async bulkGet(t){return await this.trace("RedisWrapper.bulkGet",async r=>{if(r.addTags({numKeys:t.length}),t.length===0)return{};let n=await this.client.mget(t.map(i=>this.prefixed(i)));return r.addTags({numKeysFound:n.length}),(0,jce.zip)(t,n).reduce((i,[s,a])=>{if(s===void 0||a===void 0)throw new Error(`Keys and response length mismatch: ${t.length} vs ${n.length}`);try{i[s]=a?JSON.parse(a):null}catch{i[s]=a}return i},{})})}async store(t,r,n=null){return await this.trace("RedisWrapper.store",async i=>{i.addTags({key:t,expirySeconds:n}),typeof r=="object"&&(r=JSON.stringify(r)),await this.client.set(this.prefixed(t),r),n&&await this.client.expire(this.prefixed(t),n)})}async bulkStore(t,r=null){return await this.trace("RedisWrapper.bulkStore",async n=>{n.addTags({numKeys:Object.keys(t).length,expirySeconds:r});let i=Object.entries(t).reduce((a,[u,c])=>(a[this.prefixed(u)]=typeof c=="object"?JSON.stringify(c):c,a),{}),s=this.client.pipeline();if(s.mset(i),r!==null)for(let a of Object.keys(i))s.expire(a,r);await s.exec()})}async getTTL(t){return await this.trace("RedisWrapper.getTTL",async r=>(r.addTags({key:t}),await this.client.ttl(this.prefixed(t))))}async setExpiry(t,r){return await this.trace("RedisWrapper.setExpiry",async n=>(n.addTags({key:t,expirySeconds:r}),await this.client.expire(this.prefixed(t),r)))}async delete(t){return await this.trace("RedisWrapper.delete",async r=>{r.addTags({key:t}),await this.client.del(this.prefixed(t))})}async bulkDelete(t){return await this.trace("RedisWrapper.bulkDelete",async r=>{r.addTags({numKeys:t.length}),await this.client.del(t.map(n=>this.prefixed(n)))})}async clear(){return await this.trace("RedisWrapper.clear",async t=>{let r=await this.scan();t.addTags({numKeys:r.length}),await Promise.all(r.map(n=>this.delete(n.key)))})}async increment(t){return await this.trace("RedisWrapper.increment",async r=>{r.addTags({key:t});let n=await this.client.incr(this.prefixed(t));if(isNaN(n))throw new Error(`Redis ${t} does not contain a number`);return n})}async deleteIfValue(t,r){return await this.trace("RedisWrapper.deleteIfValue",async n=>{n.addTags({key:t});let i=`
|
|
434
434
|
if redis.call('GET', KEYS[1]) == ARGV[1] then
|
|
435
435
|
redis.call('DEL', KEYS[1])
|
|
436
436
|
end
|
|
@@ -463,7 +463,7 @@ $1`)};hv.parseAttributes=o(function(t){return Object.keys(t).map(function(r){var
|
|
|
463
463
|
}
|
|
464
464
|
}`,"platform_users_lowercase_2")},"createPlatformUserView"),Xw=o(async(e,t)=>{let r={account_by_email:Sle,platform_users_lowercase_2:Tle};return Oo(tr.PLATFORM_INFO.name,async n=>{let i=r[e];return kq(e,t,n,i,{arrayResponse:!0})})},"queryPlatformView"),vle={by_email2:ble,by_api_key:wle,by_app:_le},Wu=o(async(e,t,r,n)=>{r||(r=gt());let i=vle[e];return kq(e,t,r,i,n)},"queryGlobalView");async function Mq(e,t,r){let n=gt(),i=vle[e];return Jw(e,t,n,i,r)}o(Mq,"queryGlobalViewRaw");var Iut=U(require("pouchdb"));var Ale=require("dd-trace");var Uq=class{static{o(this,"Replication")}constructor({source:t,target:r}){this.source=es(t),this.target=es(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([Ww(this.source),Ww(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){for(let r of t)try{let[n,i]=await Promise.all([this.source.get(r),this.target.get(r)]),s=this.replicationDelta(n,i);if(s<0||s===0&&n._rev===i._rev)continue;let a=s+1;await Ale.tracer.trace("Replication.resolveInconsistencies",async u=>{u.addTags({versionsToJump:a,toFix:!0,id:r,sourceRev:n._rev,targetRev:i._rev});for(let c=0;c<a;c++){let l=await this.source.get(i._id);await this.source.put(l)}})}catch{console.warn("Cannot resolve inconsistencies for document",r)}}replicationDelta(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 s=t.isCreation,a=t.tablesToSync;delete t.isCreation,delete t.tablesToSync;let u=!1,c;typeof a=="string"&&a==="all"?u=!0:a&&(c=a);let l=o((d,p)=>d?.startsWith(p+ce),"startsWithID"),f=o(d=>l(d,"ro")||l(d,"li"),"isData");return{...t,filter:(d,p)=>!s&&d._id==="_design/migrations"||i&&d._id.startsWith("_design")?!1:d._deleted||l(d._id,VR)?!0:n==="toProduction"&&!s&&l(d._id,"autocolumn_state")?!1:f(d._id)?!!c?.find(h=>d._id.includes(h))||u:l(d._id,"log_au")||d._id==="app_metadata"?!1:r?r(d,p):!0}}async rollback(){await this.target.destroy(),this.target=es(this.target.name),await this.replicate()}},Rle=Uq;var Ile=U(require("node-fetch"));var Zw=Tt.removeKeyNumbering;function Fd(e){return e==null||e===""}o(Fd,"isEmpty");var Gu=class e{static{o(this,"QueryBuilder")}#l;#f;#e;#r;#n;#i;#o;#s;#t;#d;#a;#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.#o="ascending",this.#s="string",this.#t=!0}disableEscaping(){return this.#u=!0,this}setIndexBuilder(t){return this.#a=t,this}setVersion(t){return t!=null&&(this.#d=t),this}setTable(t){return this.#e.equal.tableId=t,this}setLimit(t){return t!=null&&(this.#r=t),this}setSort(t){return t!=null&&(this.#n=t),this}setSortOrder(t){return t!=null&&(this.#o=t),this}setSortType(t){return t!=null&&(this.#s=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:s}={}){let a=!!this.#d,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)&&!s?t=`"${t}"`:a&&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 s of Object.keys(t)){let a=Zw(s);r[a]?r[a]=r[a].concat(t[s]):r[a]=t[s]}let n={},i=1;for(let[s,a]of Object.entries(r))n[`${i++}:${s}`]=a;return n}buildSearchQuery(){let t=this,r=this.#e&&this.#e.allOr,n=r?"":"*:*",i=!0,s={escape:!0,lowercase:!0,wrap:!0},a="";this.#e.equal.tableId&&(a=this.#e.equal.tableId,delete this.#e.equal.tableId);let u=o((m,g)=>Fd(g)?null:`${m}:${t.preprocess(g,s)}`,"equal"),c=o((m,g,y="AND")=>{if(Fd(g))return null;if(!Array.isArray(g))return`${m}:${g}`;let b=`${t.preprocess(g[0],{escape:!0})}`;for(let w=1;w<g.length;w++)b+=` ${y} ${t.preprocess(g[w],{escape:!0})}`;return`${m}:(${b})`},"contains"),l=o((m,g)=>Fd(g)?null:(g=t.preprocess(g,{escape:!0,lowercase:!0,type:"fuzzy"}),`${m}:/.*${g}.*/`),"fuzzy"),f=o((m,g)=>{let y=r?"*:* AND ":"",b=r?"AND":void 0;return y+"NOT "+c(m,g,b)},"notContains"),d=o((m,g)=>c(m,g,"OR"),"containsAny"),p=o((m,g)=>{if(Fd(g))return"*:*";if(!Array.isArray(g))if(typeof g=="string")g=g.split(",");else return"";let y=`${t.preprocess(g[0],s)}`;for(let b=1;b<g.length;b++)y+=` OR ${t.preprocess(g[b],s)}`;return`${m}:(${y})`},"oneOf");function h(m,g,y){let b="";for(let[w,E]of Object.entries(m)){w=Zw(w),w=t.preprocess(t.handleSpaces(w),{escape:!0});let S=g(w,E);if(S!=null){if(b.length>0||n.length>0){let T=y?.mode?y.mode:r?"OR":"AND";b+=` ${T} `}b+=S,(typeof E!="string"&&E!=null||typeof E=="string"&&E!==a&&E!=="")&&(i=!1)}}if(y?.returnBuilt)return b;n+=b}if(o(h,"build"),this.#e.string&&h(this.#e.string,(m,g)=>Fd(g)?null:(g=t.preprocess(g,{escape:!0,lowercase:!0,type:"string"}),`${m}:${g}*`)),this.#e.range&&h(this.#e.range,(m,g)=>{if(Fd(g)||g.low==null||g.low===""||g.high==null||g.high==="")return null;let y=t.preprocess(g.low,s),b=t.preprocess(g.high,s);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)=>Fd(g)?null:typeof g=="boolean"?`(*:* AND !${m}:${g})`:`!${m}:${t.preprocess(g,s)}`),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,p),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,d),a&&(n=this.isMultiCondition()?`(${n})`:n,r=!1,h({tableId:a},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.#o==="descending"?"-":"",n=`<${this.#s}>`;t.sort=`${r}${this.handleSpaces(this.#n)}${n}`}return t}async run(){return this.#c&&await this.#h(this.#c),await this.#p()}async#h(t){let r=this.#t,n=this.#r;this.excludeDocs();let i=t,s=0;do{let a=Math.min(e.maxLimit,i);this.setLimit(a);let{bookmark:u,rows:c}=await this.#p();this.setBookmark(u),s=c.length,i-=c.length}while(i>0&&s>0);this.#t=r,this.#r=n}async#p(){let{url:t,cookie:r}=Ms(),n=`${t}/${this.#l}/_design/database/_search/${this.#f}`,i=this.buildSearchBody();try{return await Ole(n,i,r)}catch(s){if(s.status===404&&this.#a)return await this.#a(),await Ole(n,i,r);throw s}}};async function Ole(e,t,r){let n=await(0,Ile.default)(e,{body:JSON.stringify(t),method:"POST",headers:{Authorization:r}});if(n.status===404)throw n;let i=await n.json(),s={rows:[],totalRows:0};return i.rows!=null&&i.rows.length>0&&(s.rows=i.rows.map(a=>a.doc)),i.bookmark&&(s.bookmark=i.bookmark),i.total_rows&&(s.totalRows=i.total_rows),s}o(Ole,"runQuery");async function Cle(e,t,r,n){let i=n.bookmark,s=n.rows||[];if(n.limit&&s.length>=n.limit)return s;let a=Gu.maxLimit;n.limit&&s.length>n.limit-Gu.maxLimit&&(a=n.limit-s.length);let u=new Gu(e,t,r);u.setVersion(n.version).setBookmark(i).setLimit(a).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 s;if(c.rows.length<Gu.maxLimit)return[...s,...c.rows];let l={...n,bookmark:c.bookmark,rows:[...s,...c.rows]};return await Cle(e,t,r,l)}o(Cle,"recursiveSearch");async function Cut(e,t,r,n){let i=n.limit;(i==null||isNaN(i)||i<0)&&(i=50),i=Math.min(i,Gu.maxLimit);let s=new Gu(e,t,r);n.version&&s.setVersion(n.version),n.tableId&&s.setTable(n.tableId),n.sort&&s.setSort(n.sort).setSortOrder(n.sortOrder).setSortType(n.sortType),n.indexer&&s.setIndexBuilder(n.indexer),n.disableEscaping&&s.disableEscaping();let a=await s.setBookmark(n.bookmark).setLimit(i).run();s.setBookmark(a.bookmark).setLimit(1),n.tableId&&s.setTable(n.tableId);let u=await s.run();return{...a,hasNextPage:u.rows&&u.rows.length>0}}o(Cut,"paginatedSearch");async function xut(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 Cle(e,t,r,n)}}o(xut,"fullSearch");var Bq={};G(Bq,{createUserIndex:()=>Dut});async function Dut(){let e=gt(),t;try{t=await e.get("_design/database")}catch(n){n.status===404&&(t={_id:"_design/database"})}let r=o(function(n){if(n._id&&!n._id.startsWith("us_"))return;let i=["_id","_rev","password","account","license","budibaseAccess","accountPortalAccess","csrfToken"];function s(a,u){for(let c of Object.keys(a)){if(i.includes(c))continue;let l=u!=null?`${u}.${c}`:c;typeof a[c]=="string"?index(l,a[c].toLowerCase(),{facet:!0}):typeof a[c]!="object"?index(l,a[c],{facet:!0}):s(a[c],l)}}o(s,"idx"),s(n)},"fn");t.indexes={user:{index:r.toString(),analyzer:{default:"keyword",name:"perfield"}}},await e.put(t)}o(Dut,"createUserIndex");function xle(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)}o(xle,"checkErrorCode");function Put(e){return xle(e,409)}o(Put,"isDocumentConflictError");var tE={};G(tE,{addTenantToUrl:()=>Nut,getTenantDB:()=>qq,getTenantIDFromCtx:()=>eE,isUserInWorkspaceTenant:()=>Lut});function qq(e){return Ei(Ld(e))}o(qq,"getTenantDB");function Nut(e){let t=Ue();if(Cl()){let r=e.indexOf("?")===-1?"?":"&";e+=`${r}tenantId=${t}`}return e}o(Nut,"addTenantToUrl");var Lut=o((e,t)=>{let r;return t?r=t.tenantId||Lr:r=Ue(),(Jm(e)||Lr)===r},"isUserInWorkspaceTenant"),kut=Object.values(Gb),eE=o((e,t)=>{if(!Cl())return Lr;t.allowNoTenant===void 0&&(t.allowNoTenant=!1),t.includeStrategies||(t.includeStrategies=kut),t.excludeStrategies||(t.excludeStrategies=[]);let r=o(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(gq()).host.split(":")[0]}catch(s){if(s.code!=="ERR_INVALID_URL")throw s}let i=e.host;if(n&&i.includes(n)){let s=i.substring(0,i.indexOf(`.${n}`));if(s)return s}}if(r("path")){let n=e.matched.find(a=>!!a.paramNames.find(u=>u.name==="tenantId")),i=e.originalUrl,s;if(i.includes("?")?s=i.split("?")[0]:s=i,n){let a=n.params(s,n.captures(s),{});if(a.tenantId)return a.tenantId}}t.allowNoTenant||e.throw(403,"Tenant id not set")},"getTenantIDFromCtx");var jq="app"+ce,Dle="/app/";async function Mut(e){let r=`/${e.path.split("/")[2].toLowerCase()}`,n=Ue();!L.isDev()&&L.MULTI_TENANCY&&(n=eE(e,{includeStrategies:["subdomain"]}));let s=(await ji(n,()=>Yw({dev:!1}))).filter(a=>a.url&&a.url.toLowerCase()===r)[0];return s&&s.appId?s.appId:void 0}o(Mut,"resolveAppUrl");function Uut(e){return e.path.startsWith(`/${jq}`)?!0:e.path.startsWith(Dle)}o(Uut,"isServingApp");function Fut(e){return e.path.startsWith("/builder/workspace/")}o(Fut,"isServingBuilder");function But(e){return Ple(e.path)}o(But,"isServingBuilderPreview");function Ple(e){return new RegExp(/^\/app\/app_\w+\/preview$/).test(e)}o(Ple,"isBuilderPreviewUrl");function qut(e){return e.path.startsWith("/api/public/v")}o(qut,"isPublicApiRequest");async function Bd(e){let t;function r(u){u&&u.startsWith(jq)&&(t&&t!==u&&e.throw("App id conflict",403),t=u)}o(r,"setWorkspaceIdIfValid");function n(u){if(u){typeof u=="string"&&(u=[u]);for(let c of u)r(c)}}o(n,"checkPossibleValues"),n(e.request.headers["x-budibase-app-id"]),r(e.request.body?.appId);let i=jut(e.path);r(i),n(e.query?.appId);let s=Ple(e.path);return e.path.startsWith(Dle)&&!s&&r(await Mut(e)),t}o(Bd,"getWorkspaceIdFromCtx");function jut(e){if(e)return e.split("?")[0].split("/").find(t=>t.startsWith(jq))}o(jut,"parseWorkspaceIdFromUrlPath");function EI(e){if(e)try{return wI.default.verify(e,L.JWT_SECRET)}catch(t){if(L.JWT_SECRET_FALLBACK)return wI.default.verify(e,L.JWT_SECRET_FALLBACK);throw t}}o(EI,"openJwt");function rE(e){return L.INTERNAL_API_KEY&&L.INTERNAL_API_KEY===e?!0:!!(L.INTERNAL_API_KEY_FALLBACK&&L.INTERNAL_API_KEY_FALLBACK===e)}o(rE,"isValidInternalAPIKey");function $u(e,t){let r=e.cookies.get(t);if(r)return EI(r)}o($u,"getCookie");function Nle(e,t,r="builder",n={sign:!0}){t&&n&&n.sign&&(t=wI.default.sign(t,L.JWT_SECRET));let i={expires:l1,path:"/",httpOnly:!1,overwrite:!0};L.COOKIE_DOMAIN&&(i.domain=L.COOKIE_DOMAIN),e.cookies.set(r,t,i)}o(Nle,"setCookie");function Dl(e,t){Nle(e,null,t)}o(Dl,"clearCookie");function Wut(e){return e.headers["x-budibase-type"]==="client"}o(Wut,"isClient");function Wq(e){return new Promise(t=>setTimeout(t,e))}o(Wq,"timeout");function Gq(e){return!!jh[e]}o(Gq,"isAudited");function Gut(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}o(Gut,"hasCircularStructure");function $ut(e){return!!e.match(/^.+:\/\/.+$/)}o($ut,"urlHasProtocol");function $q(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,}))$/)}o($q,"validEmail");var Lle=(s=>(s.MILLISECONDS="milliseconds",s.SECONDS="seconds",s.MINUTES="minutes",s.HOURS="hours",s.DAYS="days",s))(Lle||{}),SI={milliseconds:1,seconds:1e3,minutes:6e4,hours:36e5,days:864e5},nr=class e{constructor(t){this.ms=t}static{o(this,"Duration")}to(t){return this.ms/SI[t]}toMs(){return this.ms}toSeconds(){return this.to("seconds")}static convert(t,r,n){return n*SI[t]/SI[r]}static from(t,r){return new e(r*SI[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 Vut(e){let t=performance.now();return[await e(),nr.fromMilliseconds(performance.now()-t)]}o(Vut,"time");var TI=require("undici");function Hut(e,t){let r,n=null;try{let s=new URL(e);r=s.hostname,n=s.port||null}catch{return!1}let i=t.split(/[\s,]+/).filter(s=>s.length>0);for(let s of i){let u=s.replace(/^\./,"*").match(/^(.+?)(?::(\d+))?$/);if(!u||!u[1])continue;let c=u[1].toLowerCase(),l=u[2]||null,f=!1;if(c==="*")f=!0;else if(c.startsWith("*")){let p=c.slice(1);f=r===p.slice(1)||r.endsWith(p)}else f=r===c;if(f&&(!l||n===l))return!0}return!1}o(Hut,"isUrlMatchingNoProxy");function Qut(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!0;try{new URL(n.trim())}catch{return console.log("[fetch] Invalid proxy URL format:",n),!0}if(e){let i=process.env.GLOBAL_AGENT_NO_PROXY||process.env.NO_PROXY||"";if(i&&Hut(e,i))return console.log("[fetch] URL matches NO_PROXY pattern, bypassing proxy",{url:e,noProxy:i}),!0}return!1}o(Qut,"shouldBypassProxy");function Kut(e){return new TI.Agent({connect:{rejectUnauthorized:e}})}o(Kut,"createDirectAgent");function zut(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).trim();console.log("[fetch] Creating ProxyAgent",{proxyUrl:n,rejectUnauthorized:e});let i={uri:n,requestTls:{rejectUnauthorized:e}};return n.startsWith("https://")&&(i.proxyTls={rejectUnauthorized:e}),new TI.ProxyAgent(i)}o(zut,"createProxyAgent");function Yut(e){let t=e?.rejectUnauthorized??!0;return Qut(e?.url)?Kut(t):zut(t)}o(Yut,"createDispatcher");function Jut(e){return Yut(e)}o(Jut,"getDispatcher");var Vq=require("util"),Hq=U(require("zlib"));var Xut=(0,Vq.promisify)(Hq.default.gzip),Zut=(0,Vq.promisify)(Hq.default.gunzip),vI="gzip:",ect=o(async e=>{let t=await Xut(e);return`${vI}${t.toString("base64")}`},"gzipToBase64"),tct=o(async e=>{let t=e.startsWith(vI)?e.slice(vI.length):e,r=Buffer.from(t,"base64");return(await Zut(new Uint8Array(r))).toString("utf8")},"gunzipFromBase64");function rct(e){let t="",r=-1,n,i,s=e.opts?.repeat;return s&&(i=s.endDate?new Date(s.endDate).getTime():Date.now(),n=s.tz,"cron"in s?t=s.cron:r=s.every),{id:e.id.toString(),name:"",key:e.id.toString(),tz:n,endDate:i,cron:t,every:r,next:0}}o(rct,"jobToJobInformation");var AI=class{static{o(this,"InMemoryQueue")}constructor(t,r){this._name=t,this._opts=r,this._messages=[],this._emitter=new kle.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,o((d,p)=>{d?l(d):c(p)},"done"))})}o(i,"execute");let s=this._attempts;async function a(c,l=0){try{return await c}catch(f){if(l++,l<s&&!n._isDiscarded)return await de.wait(100*l),await a(i(),l);throw f}}o(a,"retryFunc");try{let c=await a(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 s=Nt(),a=o(()=>{let c={id:s,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(a,u):a(),{id:i,finished:()=>new Promise((c,l)=>{let f=o((p,h)=>{p.id===s&&(this._emitter.off("error",f),this._emitter.off("completed",d),l(h))},"errorHandler"),d=o((p,h)=>{p.id===s&&(this._emitter.off("error",f),this._emitter.off("completed",d),c(h))},"completedHandler");this._emitter.on("error",f),this._emitter.on("completed",d)})}}async close(){}async removeRepeatableByKey(t){for(let[r,n]of this._messages.entries())if(n.id===t){this._messages.splice(r,1),this._emitter.emit("removed",n);return}}async removeJobs(t){}async clean(){return[]}async getJob(t){for(let r of this._messages)if(r.id===t)return r;return null}manualTrigger(t){for(let r of this._messages)if(r.id===t){this._emitter.emit("message",{...r,manualTrigger:!0});return}throw new Error(`Job with id ${t} not found`)}on(t,r){return this._emitter.on(t,r),this}off(t,r){return this._emitter.off(t,r),this}async count(){return this._messages.length}async getCompletedCount(){return this._runCount}async getRepeatableJobs(){return this._messages.filter(t=>t.opts?.repeat!=null).map(t=>rct(t))}async whenCurrentJobsFinished(){do await Wq(50);while(this.hasRunningJobs())}hasRunningJobs(){return this._addCount>this._runCount}},Mle=AI;var Kq=U(require("bull"));var ng=(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))(ng||{});function Ule(e,t,r){oct(e,t),r&&nct(e,r)}o(Ule,"addListeners");function nct(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 s of i)s.id===n&&await e.removeRepeatableByKey(s.key);console.log(`jobId=${n} disabled`)}})}o(nct,"handleStalled");function rs(e,t,r={},n={}){let i=`[BULL] ${e}=${t}`,s=r.error,a={_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,s,a,u]}o(rs,"getLogParams");var ict={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 oct(e,t){let r=ict[t];function n(i,s){let a=i.data.event?.appId;if(a)return yq(a,s);s()}o(n,"doInJobContext"),e.on("stalled",async i=>{await n(i,()=>{console.error(...rs(r,"stalled",{job:i}))})}).on("error",i=>{console.error(...rs(r,"error",{error:i}))}),process.env.NODE_DEBUG?.includes("bull")&&e.on("waiting",i=>{console.info(...rs(r,"waiting",{jobId:i}))}).on("active",async i=>{await n(i,()=>{console.info(...rs(r,"active",{job:i}))})}).on("progress",async(i,s)=>{await n(i,()=>{console.info(...rs(r,"progress",{job:i},{progress:s}))})}).on("completed",async(i,s)=>{await n(i,()=>{console.info(...rs(r,"completed",{job:i},{result:s}))})}).on("failed",async(i,s)=>{await n(i,()=>{console.error(...rs(r,"failed",{job:i,error:s}))})}).on("paused",()=>{console.info(...rs(r,"paused"))}).on("resumed",()=>{console.info(...rs(r,"resumed"))}).on("cleaned",(i,s)=>{console.info(...rs(r,"cleaned",{},{length:i.length,type:s}))}).on("drained",()=>{console.info(...rs(r,"drained"))}).on("removed",i=>{console.info(...rs(r,"removed",{job:i}))})}o(oct,"logging");var Qq=[];function Fle(e,t){let r=setInterval(e,t);return Qq.push(r),r}o(Fle,"set");function Ble(e){let t=Qq.indexOf(e);t!==-1&&Qq.splice(t,1),clearInterval(e)}o(Ble,"clear");var Vu=U(require("dd-trace")),nE=U(require("object-sizeof"));var sct=nr.fromMinutes(5).toMs(),act=nr.fromSeconds(30).toMs(),zq=nr.fromSeconds(60).toMs(),iE=[],RI;async function jle(){for(let e of iE)await e.clean(zq,"completed"),await e.clean(zq,"failed")}o(jle,"cleanup");async function uct(e,t,r){let n=performance.now();try{let i=await t();return Vu.default.dogstatsd.increment(`${e}.success`,1,r),i}catch(i){throw Vu.default.dogstatsd.increment(`${e}.error`,1,r),i}finally{let i=performance.now()-n;Vu.default.dogstatsd.distribution(`${e}.duration.ms`,i,r),Vu.default.dogstatsd.increment(e,1,r)}}o(uct,"withMetrics");function Wle(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}}o(Wle,"jobOptsTags");function cct(e){return{"job.id":e.id,"job.attemptsMade":e.attemptsMade,"job.timestamp":e.timestamp,"job.data.sizeBytes":(0,nE.default)(e.data),...Wle(e.opts||{})}}o(cct,"jobTags");var Gs=class{static{o(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:hd(),settings:{maxStalledCount:this.opts.maxStalledCount?this.opts.maxStalledCount:0,lockDuration:sct,lockRenewTime:act}};this.opts.jobOptions&&(r.defaultJobOptions=this.opts.jobOptions);let n;return L.isTest()?process.env.BULL_TEST_REDIS_PORT&&!isNaN(+process.env.BULL_TEST_REDIS_PORT)?n=new Kq.default(this.jobQueue,{...r,redis:{host:"localhost",port:+process.env.BULL_TEST_REDIS_PORT}}):n=new Mle(this.jobQueue,r):n=new Kq.default(this.jobQueue,r),Ule(n,this.jobQueue,this.opts.removeStalledCb),iE.push(n),!RI&&!L.isTest()&&(RI=Fle(jle,zq),jle().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=o(async(a,u)=>{await Vu.default.trace("queue.process",async c=>{if(a.data._parentSpanContext){let l=a.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,...cct(a)}),this.opts.jobTags&&c.addTags(this.opts.jobTags(a.data)),Vu.default.dogstatsd.distribution("queue.process.sizeBytes",(0,nE.default)(a.data),this.metricTags()),await this.withMetrics("queue.process",()=>u?n(a,u):n(a))})},"processCallback"),s;return n.length===1?s=o(a=>i(a),"wrappedCb"):s=i,r?this.queue.process(r,s):this.queue.process(s)}async add(t,r){return await Vu.default.trace("queue.add",async n=>(n.addTags({"queue.name":this.jobQueue,"job.data.sizeBytes":(0,nE.default)(t),...Wle(r||{})}),this.opts.jobTags&&n.addTags(this.opts.jobTags(t)),t._parentSpanContext={traceId:n.context().toTraceId(),spanId:n.context().toSpanId()},Vu.default.dogstatsd.distribution("queue.add.sizeBytes",(0,nE.default)(t),this.metricTags()),await this.withMetrics("queue.add",()=>this.queue.add(t,r))))}withMetrics(t,r){return uct(t,r,this.metricTags())}metricTags(){return{queueName:this.jobQueue}}close(t){return this.queue.close(t)}whenCurrentJobsFinished(){return this.queue.whenCurrentJobsFinished()}};async function lct(){RI&&Ble(RI),console.log("Waiting for current queue jobs to finish...");for(let e of iE)await e.whenCurrentJobsFinished();console.log("Closing queue Redis connections...");for(let e of iE)await e.close();iE=[],console.log("Queues shutdown")}o(lct,"shutdown");var ke={};G(ke,{correlation:()=>oE,logAlert:()=>vp,logAlertWithInfo:()=>NMt,logWarn:()=>zg,logger:()=>W0,system:()=>HH});var oE={};G(oE,{getId:()=>Jq,setHeader:()=>yct});var Vle=OI(),yct=o(e=>{let t=Vle.getId();t&&(e["x-budibase-correlation-id"]=t)},"setHeader");function Jq(){return Vle.getId()}o(Jq,"getId");var j0=U(Yde()),QRe=U(H$()),QH=U(require("dd-trace")),KRe=require("dd-trace/ext");var HH={};G(HH,{getLogReadStream:()=>OMt,getSingleFileMaxSizeInfo:()=>HRe,localFileDestination:()=>VH});var mS=U(require("fs")),$H=U(require("path")),WRe=U(pwe());var Se={};G(Se,{ObjectStore:()=>fs,ObjectStoreBuckets:()=>Okt,SIGNED_FILE_PREFIX:()=>kH,bucketTTLConfig:()=>L0,budibaseTempDir:()=>Sp,client3rdPartyLibrary:()=>wMt,clientLibraryPath:()=>_Mt,clientLibraryUrl:()=>EMt,createBucketIfNotExists:()=>pS,deleteFile:()=>Vkt,deleteFiles:()=>Hkt,deleteFolder:()=>ORe,downloadTarball:()=>Kkt,downloadTarballDirect:()=>Qkt,enrichPWAImages:()=>SMt,enrichPluginURLs:()=>vMt,extractBucketAndPath:()=>CH,getAllFiles:()=>Wkt,getAppFileUrl:()=>LRe,getClientCacheKey:()=>NRe,getGlobalFileS3Key:()=>kRe,getGlobalFileUrl:()=>TMt,getObjectMetadata:()=>zkt,getPluginIconKey:()=>FRe,getPluginJSKey:()=>URe,getPluginS3Dir:()=>qRe,getPresignedUrl:()=>Tp,getReadStream:()=>k0,listAllObjects:()=>MH,objectExists:()=>Ykt,processAutomationAttachment:()=>Ckt,processObjectStoreAttachment:()=>pRe,retrieve:()=>RRe,retrieveDirectory:()=>$kt,retrieveToTmp:()=>Gkt,sanitizeBucket:()=>Ri,sanitizeKey:()=>rn,streamUpload:()=>ARe,streamUploadMany:()=>jkt,upload:()=>qkt,uploadDirectory:()=>UH});var U0=require("@aws-sdk/client-s3"),xH=U(Nve()),wRe=require("@aws-sdk/s3-request-presigner"),ERe=U(_Ae());var ac=U(require("dd-trace")),Qg=U(require("fs")),fS=U(require("fs/promises")),SRe=U(require("https")),DH=U(require("node-fetch")),Jl=require("path"),F0=U(require("stream")),dS=require("stream/promises"),PH=U(uRe()),NH=require("uuid"),LH=U(require("zlib"));var cRe=U(require("fs")),lRe=require("os"),lS=U(require("path")),fRe=U(require("stream"));var Okt={BACKUPS:L.BACKUPS_BUCKET_NAME,APPS:L.APPS_BUCKET_NAME,TEMPLATES:L.TEMPLATES_BUCKET_NAME,GLOBAL:L.GLOBAL_BUCKET_NAME,PLUGINS:L.PLUGIN_BUCKET_NAME,TEMP:L.TEMP_BUCKET_NAME},dRe=(0,lS.join)((0,lRe.tmpdir)(),".budibase");try{cRe.default.mkdirSync(dRe)}catch(e){if(e.code!=="EEXIST")throw e}function Sp(){return dRe}o(Sp,"budibaseTempDir");var L0=o((e,t)=>{let n={Rules:[{ID:`${e}-ExpireAfter${t}days`,Prefix:"",Status:"Enabled",Expiration:{Days:t}}]};return{Bucket:e,LifecycleConfiguration:n}},"bucketTTLConfig");async function Ikt(e){let t=await fetch(e.url);if(!t.ok||!t.body)throw new Error(`Unexpected response ${t.statusText}`);let r=lS.default.basename(new URL(e.url).pathname);if(!t.body)throw new Error("No response received for attachment");return{filename:e.filename||r,content:fRe.default.Readable.fromWeb(t.body)}}o(Ikt,"processUrlAttachment");async function pRe(e){let t=CH(e.url);if(t===null)throw new Error("Invalid signed URL");let{bucket:r,path:n}=t,{stream:i}=await k0(r,n),s=lS.default.basename(n);return{bucket:r,path:n,filename:e.filename||s,content:i}}o(pRe,"processObjectStoreAttachment");async function Ckt(e){return e.url?.startsWith("http://")||e.url?.startsWith("https://")?await Ikt(e):await pRe(e)}o(Ckt,"processAutomationAttachment");var Mkt=_Re(),Ukt={bucketCreationPromises:{}},kH="/files/signed",Yl={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"},Fkt=[Yl.html,Yl.css,Yl.js,Yl.json];function rn(e){return Mkt(Ri(e)).replace(/\\/g,"/")}o(rn,"sanitizeKey");function Ri(e){return e.replace(new RegExp(ks,"g"),Ls)}o(Ri,"sanitizeBucket");function fs(e={presigning:!1}){let t={forcePathStyle:!0,credentials:{accessKeyId:L.MINIO_ACCESS_KEY,secretAccessKey:L.MINIO_SECRET_KEY},region:L.AWS_REGION};if(!L.MINIO_ENABLED&&L.AWS_SESSION_TOKEN&&(t.credentials={accessKeyId:L.MINIO_ACCESS_KEY,secretAccessKey:L.MINIO_SECRET_KEY,sessionToken:L.AWS_SESSION_TOKEN}),L.MINIO_URL&&(e.presigning&&L.MINIO_ENABLED?t.endpoint="http://minio-service":t.endpoint=L.MINIO_URL),L.S3_IGNORE_SELF_SIGNED==="true"){let r=new SRe.default.Agent({rejectUnauthorized:!1});t.requestHandler=new ERe.NodeHttpHandler({httpsAgent:r})}return new U0.S3(t)}o(fs,"ObjectStore");async function pS(e,t){t=Ri(t);try{return await e.headBucket({Bucket:t}),{created:!1,exists:!0}}catch(r){let n=r.statusCode||r.$response?.statusCode,i=Ukt.bucketCreationPromises,s=n===404,a=n===403;if(i[t])return await i[t],{created:!1,exists:!0};if(s||a){if(s)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.")}}o(pS,"createBucketIfNotExists");var Bkt=o((e,t)=>{if(t)return t;let r=e.split(".").pop();return r?Yl[r.toLowerCase()]:Yl.txt},"resolveContentType"),TRe=o(async(e,t,r)=>{let n=Ri(e),i=fs(),s=await pS(i,n);if(r.addTags({bucketCreated:s.created,bucketExists:s.exists}),t&&s.created){let a=L0(n,t);await i.putBucketLifecycleConfiguration(a)}return{bucket:n,client:i,bucketCreated:s}},"initialiseBucket"),vRe=o(async({client:e,bucket:t,filename:r,stream:n,type:i,extra:s})=>{if(!n)throw new Error("Stream to upload is invalid/undefined");let a=Bkt(r,i),u=rn(r),c={Bucket:t,Key:u,Body:n,ContentType:a,...s??{}};return{details:await new xH.Upload({client:e,params:c}).done(),contentType:a}},"streamUploadInternal");async function qkt({bucket:e,filename:t,path:r,type:n,metadata:i,body:s,ttl:a}){let u=t.split(".").pop(),c=r?(await fS.default.open(r)).createReadStream():s,l=fs(),f=await pS(l,e);if(a&&f.created){let g=L0(e,a);await l.putBucketLifecycleConfiguration(g)}let d=n,p=d||(u?Yl[u.toLowerCase()]:Yl.txt),h={Bucket:Ri(e),Key:rn(t),Body:c,ContentType:p};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 xH.Upload({client:l,params:h}).done()}o(qkt,"upload");async function ARe({bucket:e,stream:t,filename:r,type:n,extra:i,ttl:s}){return await ac.default.trace("streamUpload",async a=>{a.addTags({bucketName:e,filename:r,type:n,ttl:s});let u=r.split(".").pop();a.addTags({extension:u});let{bucket:c,client:l}=await TRe(e,s,a),{details:f,contentType:d}=await vRe({client:l,bucket:c,filename:r,stream:t,type:n,extra:i}),p=await l.headObject({Bucket:c,Key:rn(r)});return a.addTags({contentType:d,contentLength:p.ContentLength}),{...f,ContentLength:p.ContentLength}})}o(ARe,"streamUpload");async function jkt({bucket:e,files:t,ttl:r}){return await ac.default.trace("streamUploadMany",async i=>{if(i.addTags({bucketName:e,ttl:r,fileCount:t.length}),!t.length)return[];let{bucket:s,client:a}=await TRe(e,r,i),u=t.map((l,f)=>({...l,index:f})),c=new Array(t.length);return await Fe.parallelForeach(u,async l=>{let{details:f}=await vRe({client:a,bucket:s,filename:l.filename,stream:l.stream,type:l.type,extra:l.extra});c[l.index]=f},10),c})}o(jkt,"streamUploadMany");async function RRe(e,t){return await ac.default.trace("retrieve",async r=>{r.addTags({bucketName:e,filepath:t});let n=fs(),i={Bucket:Ri(e),Key:rn(t)},s=await n.getObject(i);if(!s.Body)throw new Error("Unable to retrieve object");if(r.addTags({contentLength:s.ContentLength,contentType:s.ContentType}),Fkt.includes(s.ContentType))return r.addTags({string:!0}),s.Body.transformToString();{r.addTags({string:!1});let a=s.Body.transformToWebStream();return F0.default.Readable.fromWeb(a)}})}o(RRe,"retrieve");async function*MH(e,t){let r=fs(),n=o((a={})=>r.listObjectsV2({...a,Bucket:Ri(e),Prefix:rn(t)}),"list"),i=!1,s;do{let a={};s&&(a.ContinuationToken=s);let u=await n(a);if(u.Contents)for(let c of u.Contents)yield c;i=!!u.IsTruncated,s=u.NextContinuationToken}while(i&&s)}o(MH,"listAllObjects");async function Wkt(e,t){let r={};return await Fe.parallelForeach(MH(e,t),async n=>{if(!n.Key)throw new Error("file.Key must be defined");r[n.Key]=n},5),r}o(Wkt,"getAllFiles");async function Tp(e,t,r=3600){let n=fs({presigning:!0}),i={Bucket:Ri(e),Key:rn(t)},s=await(0,wRe.getSignedUrl)(n,new U0.GetObjectCommand(i),{expiresIn:r});if(L.MINIO_ENABLED){let a=new URL(s),u=a.pathname,c=a.search;return`${kH}${u}${c}`}else return s}o(Tp,"getPresignedUrl");async function Gkt(e,t){return await ac.default.trace("retrieveToTmp",async r=>{r.addTags({bucketName:e,filepath:t}),e=Ri(e),t=rn(t);let n=await RRe(e,t),i=(0,Jl.join)(Sp(),(0,NH.v4)());return r.addTags({outputPath:i}),n instanceof F0.default.Readable?(r.addTags({stream:!0}),await(0,dS.pipeline)(n,Qg.default.createWriteStream(i))):(r.addTags({stream:!1}),Qg.default.writeFileSync(i,n)),i})}o(Gkt,"retrieveToTmp");async function $kt(e,t,r){return await ac.default.trace("retrieveDirectory",async n=>{n.addTags({bucketName:e,path:t});let i=(0,Jl.join)(Sp(),(0,NH.v4)());await fS.default.mkdir(i,{recursive:!0});let s=0;return await Fe.parallelForeach(MH(e,t),async a=>{let{Key:u}=a;!u||r?.some(c=>c.test(u))||(s++,await ac.default.trace("retrieveDirectory.object",async c=>{let l=a.Key;c.addTags({filename:l});let{stream:f}=await k0(e,l),d=l.split("/"),p=d.slice(0,d.length-1),h=(0,Jl.join)(i,...p);d.length>1&&!Qg.default.existsSync(h)&&await fS.default.mkdir(h,{recursive:!0}),await(0,dS.pipeline)(f,Qg.default.createWriteStream((0,Jl.join)(i,...d),{mode:420}))}))},5),n.addTags({numObjects:s}),i})}o($kt,"retrieveDirectory");async function Vkt(e,t){let r=fs();await pS(r,e);let n={Bucket:e,Key:rn(t)};return r.deleteObject(n)}o(Vkt,"deleteFile");async function Hkt(e,t){let r=fs();await pS(r,e);let n={Bucket:e,Delete:{Objects:t.map(i=>({Key:rn(i)}))}};return r.deleteObjects(n)}o(Hkt,"deleteFiles");async function ORe(e,t){e=Ri(e),t=rn(t);let r=fs(),n={Bucket:e,Prefix:t},i=await r.listObjects(n);if(i.Contents?.length===0)return;let s={Bucket:e,Delete:{Objects:[]}};if(i.Contents?.forEach(a=>{s.Delete.Objects.push({Key:a.Key})}),s.Delete.Objects.length&&(await r.deleteObjects(s)).Deleted?.length===1e3)return ORe(e,t)}o(ORe,"deleteFolder");async function UH(e,t,r){return await ac.default.trace("uploadDirectory",async n=>{n.addTags({bucketName:e,localPath:t,bucketPath:r}),e=Ri(e);let i=await fS.default.readdir(t,{withFileTypes:!0});n.addTags({numFiles:i.length});for(let s of i){let a=rn((0,Jl.join)(r,s.name)),u=(0,Jl.join)(t,s.name);s.isDirectory()?await UH(e,u,a):await ARe({bucket:e,filename:a,stream:Qg.default.createReadStream(u)})}return i})}o(UH,"uploadDirectory");async function Qkt(e,t,r={}){t=rn(t);let n=await(0,DH.default)(e,{headers:r});if(!n.ok)throw new Error(`unexpected response ${n.statusText}`);await(0,dS.pipeline)(n.body,LH.default.createUnzip(),PH.default.extract(t))}o(Qkt,"downloadTarballDirect");async function Kkt(e,t,r){t=Ri(t),r=rn(r);let n=await(0,DH.default)(e);if(!n.ok)throw new Error(`unexpected response ${n.statusText}`);let i=(0,Jl.join)(Sp(),r);return await(0,dS.pipeline)(n.body,LH.default.createUnzip(),PH.default.extract(i)),!L.isTest()&&L.SELF_HOSTED&&await UH(t,i,r),i}o(Kkt,"downloadTarball");async function k0(e,t){return await ac.default.trace("getReadStream",async r=>{e=Ri(e),t=rn(t),r.addTags({bucketName:e,path:t});let n=fs(),i={Bucket:e,Key:t},s=await n.getObject(i);if(!s.Body||!(s.Body instanceof F0.default.Readable))throw new Error("Unable to retrieve stream - invalid response");return r.addTags({contentLength:s.ContentLength,contentType:s.ContentType}),{stream:s.Body,contentLength:s.ContentLength,contentType:s.ContentType}})}o(k0,"getReadStream");async function zkt(e,t){e=Ri(e),t=rn(t);let r=fs(),n={Bucket:e,Key:t};try{return await r.headObject(n)}catch{throw new Error("Unable to retrieve metadata from object")}}o(zkt,"getObjectMetadata");async function Ykt(e,t){e=Ri(e),t=rn(t);let r=fs(),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}}o(Ykt,"objectExists");function CH(e){let t=e.split("?")[0],r=new RegExp(`^${kH}/(?<bucket>[^/]+)/(?<path>.+)$`),n=t.match(r);if(n&&n.groups){let{bucket:i,path:s}=n.groups;return{bucket:i,path:s}}return null}o(CH,"extractBucketAndPath");var PRe=U(require("querystring"));var DRe=U(xRe());var q0;function gMt(){if(!L.CLOUDFRONT_PRIVATE_KEY_64)throw new Error("CLOUDFRONT_PRIVATE_KEY_64 is not set");return q0||(q0=Buffer.from(L.CLOUDFRONT_PRIVATE_KEY_64,"base64").toString("utf-8"),q0)}o(gMt,"getPrivateKey");var yMt=o(()=>({keypairId:L.CLOUDFRONT_PUBLIC_KEY_ID,privateKeyString:gMt(),expireTime:new Date().getTime()+1e3*60*60*24}),"getCloudfrontSignParams"),Kg=o(e=>{let t=bMt(e);return DRe.getSignedUrl(t,yMt())},"getPresignedUrl"),bMt=o(e=>{let t="/";return e.startsWith("/")&&(t=""),`${L.CLOUDFRONT_CDN}${t}${e}`},"getUrl");function _Mt(e){return`${rn(e)}/budibase-client.js`}o(_Mt,"clientLibraryPath");function wMt(e,t){return`${rn(e)}/${t}`}o(wMt,"client3rdPartyLibrary");async function EMt(e,t){return`/api/assets/${e}/client?${await NRe(t)}`}o(EMt,"clientLibraryUrl");async function NRe(e){let t,r;try{t=Ue()}finally{r={version:e}}return t&&t!==Lr&&(r.tenantId=t),PRe.default.encode(r)}o(NRe,"getClientCacheKey");async function LRe(e){return L.CLOUDFRONT_CDN?Kg(e):await Tp(L.APPS_BUCKET_NAME,e)}o(LRe,"getAppFileUrl");async function SMt(e){if(e.length===0)return[];try{return await Promise.all(e.map(async t=>({...t,src:await LRe(t.src),type:t.type||"image/png"})))}catch(t){return console.error("Error enriching PWA images:",t),e}}o(SMt,"enrichPWAImages");var TMt=o(async(e,t,r)=>{let n=kRe(e,t);return L.CLOUDFRONT_CDN?(r&&(n=`${n}?etag=${r}`),Kg(n)):await Tp(L.GLOBAL_BUCKET_NAME,n)},"getGlobalFileUrl"),kRe=o((e,t)=>{let r=`${e}/${t}`;return L.MULTI_TENANCY&&(r=`${Ue()}/${r}`),r},"getGlobalFileS3Key");async function vMt(e){return!e||!e.length?[]:await Promise.all(e.map(async t=>{let r=await AMt(t),n=await RMt(t);return{...t,jsUrl:r,iconUrl:n}}))}o(vMt,"enrichPluginURLs");async function AMt(e){let t=URe(e);return MRe(t)}o(AMt,"getPluginJSUrl");async function RMt(e){let t=FRe(e);if(t)return MRe(t)}o(RMt,"getPluginIconUrl");async function MRe(e){return L.CLOUDFRONT_CDN?Kg(e):await Tp(L.PLUGIN_BUCKET_NAME,e)}o(MRe,"getPluginUrl");function URe(e){return BRe(e,"plugin.min.js")}o(URe,"getPluginJSKey");function FRe(e){let t=e.iconUrl?"icon.svg":e.iconFileName;if(t)return BRe(e,t)}o(FRe,"getPluginIconKey");function BRe(e,t){return`${qRe(e.name)}/${t}`}o(BRe,"getPluginS3Key");function qRe(e){let t=`${e}`;return L.MULTI_TENANCY&&(t=`${Ue()}/${t}`),L.CLOUDFRONT_CDN&&(t=`plugins/${t}`),t}o(qRe,"getPluginS3Dir");var GRe="budibase.log",$Re="budibase-logs-history.txt",VRe=$H.default.join(Sp(),"systemlogs");function jRe(e){return $H.default.join(VRe,e)}o(jRe,"getFullPath");function HRe(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}}o(HRe,"getSingleFileMaxSizeInfo");function VH(){let e=HRe(L.ROLLING_LOG_MAX_SIZE);return WRe.createStream(GRe,{size:e?.size,path:VRe,maxFiles:e?.totalHistoryFiles||1,immutable:!0,history:$Re,initialRotation:!1})}o(VH,"localFileDestination");function OMt(){let e=[],t=jRe($Re);if(mS.default.existsSync(t)){let i=mS.default.readFileSync(t,"utf-8").split(`
|
|
465
465
|
`);for(let s of i.filter(a=>a))e.push(mS.default.readFileSync(s))}return e.push(mS.default.readFileSync(jRe(GRe))),Buffer.concat(e.map(n=>new Uint8Array(n)))}o(OMt,"getLogReadStream");function IMt(e){return typeof e=="object"&&e!==null&&!(e instanceof Error)}o(IMt,"isPlainObject");function CMt(e){return e instanceof Error}o(CMt,"isError");function xMt(e){return typeof e=="string"}o(xMt,"isMessage");var Zl;if(!L.DISABLE_PINO_LOGGER){let e=L.LOG_LEVEL,t={level:e,formatters:{level:c=>({level:c.toUpperCase()}),bindings:()=>L.SELF_HOSTED?{service:L.SERVICE_NAME}:{}},timestamp:()=>`,"timestamp":"${new Date(Date.now()).toISOString()}"`},r=[];r.push(L.isDev()?{stream:(0,QRe.default)({singleLine:!0}),level:e}:{stream:process.stdout,level:e}),L.SELF_HOSTED&&r.push({stream:VH(),level:e}),Zl=r.length?(0,j0.default)(t,j0.default.multistream(r)):(0,j0.default)(t);let n=o(c=>{let l,f=[],d="";c.forEach(y=>{xMt(y)&&(d=`${d} ${y}`.trimStart()),IMt(y)&&f.push(y),CMt(y)&&(l=y)});let p=u(),h={};h={tenantId:i(),appId:s(),automationId:a(),identityId:p?._id,identityType:p?.type,correlationId:Jq()};let m=QH.default.scope().active();m&&QH.default.inject(m.context(),KRe.formats.LOG,h);let g={err:l,pid:process.pid,...h};if(f.length){let y={},b=0;for(let w=0;w<f.length;w++){let E=f[w],S=E._logKey;S?(delete E._logKey,g[S]=E):(y[b]=E,b++)}Object.keys(y).length&&(g.data=y)}return[g,d]},"getLogParams");console.log=(...c)=>{let[l,f]=n(c);Zl?.info(l,f)},console.info=(...c)=>{let[l,f]=n(c);Zl?.info(l,f)},console.warn=(...c)=>{let[l,f]=n(c);Zl?.warn(l,f)},console.error=(...c)=>{let[l,f]=n(c);Zl?.error(l,f)},console.trace=(...c)=>{let[l,f]=n(c);l.err||(l.err=new Error),Zl?.trace(l,f)},console.debug=(...c)=>{let[l,f]=n(c);Zl?.debug(l,f)};let i=o(()=>{let c;try{c=Ue()}catch{}return c},"getTenantId"),s=o(()=>{let c;try{c=Si()}catch{}return c},"getAppId"),a=o(()=>{let c;try{c=bq()}catch{}return c},"getAutomationId"),u=o(()=>{let c;try{c=Du()}catch{}return c},"getIdentity")}var W0=Zl;var DMt=["AccountError"];function PMt(e){return e&&e.suppressAlert}o(PMt,"isSuppressed");function vp(e,t){t&&DMt.includes(t.name)&&PMt(t)||console.error(`bb-alert: ${e}`,t)}o(vp,"logAlert");function NMt(e,t,r,n){e=`${e} - db: ${t} - doc: ${r} - error: `,vp(e,n)}o(NMt,"logAlertWithInfo");function zg(e,t){console.warn(`bb-warn: ${e}`,t)}o(zg,"logWarn");var G0=class extends Error{static{o(this,"UnretriableError")}constructor(t){super(t),this.name="PermanentError"}},KH=class{static{o(this,"QueuedProcessor")}constructor(t,r={}){let{maxAttempts:n=3,removeOnFail:i=!0,removeOnComplete:s=!0,maxStalledCount:a=3}=r;this.waitForCompletionMs=r.waitForCompletionMs||1e4,this._queue=new Gs(t,{maxStalledCount:a,jobOptions:{attempts:n,removeOnFail:i,removeOnComplete:s}}),this._queue.process(async(u,c)=>{try{let l=await this.processFn(u.data);c?.(null,l)}catch(l){l instanceof G0&&await u.discard(),vp(`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 de.withTimeout(this.waitForCompletionMs,()=>r.finished())}}catch(r){if(r.errno!=="ETIME")throw r;return{success:!1,reason:"timeout"}}}};var LMt=100,$0,gS=class e{static{o(this,"DocWritethroughProcessor")}static get queue(){return e._queue||(e._queue=new Gs("docWritethroughQueue",{jobOptions:{attempts:LMt}})),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=Ei(t),s;try{s=await i.get(r)}catch{s={_id:r}}s={...s,...n},await i.put(s)}},zH=class{static{o(this,"DocWritethrough")}constructor(t,r){this.db=t,this._docId=r}get docId(){return this._docId}async patch(t){await gS.queue.add({dbName:this.db.name,docId:this.docId,data:t})}};function zRe(){return $0=new gS().init(),$0}o(zRe,"init");function kMt(){return $0||zRe()}o(kMt,"getProcessor");var bS={};G(bS,{CacheKey:()=>bn,TTL:()=>Op,bustCache:()=>Yg,destroy:()=>yS,get:()=>Ip,keys:()=>V0,store:()=>uc,withCache:()=>ef,withCacheWithDynamicTTL:()=>YRe});function Ka(e){let t=Ue();return`${e}:${t}`}o(Ka,"generateTenantKey");var Ap=class{static{o(this,"BaseCache")}constructor(t=void 0){this.client=t}async getClient(){return this.client?this.client:await Rq()}async keys(t){return(await this.getClient()).keys(t)}async exists(t,r={useTenancy:!0}){return t=r.useTenancy?Ka(t):t,(await this.getClient()).exists(t)}async scan(t,r={useTenancy:!0}){return t=r.useTenancy?Ka(t):t,(await this.getClient()).scan(t)}async get(t,r={useTenancy:!0}){return t=r.useTenancy?Ka(t):t,(await this.getClient()).get(t)}async bulkGet(t,r={useTenancy:!0}){return t=r.useTenancy?t.map(i=>Ka(i)):t,(await this.getClient()).bulkGet(t)}async store(t,r,n=null,i={useTenancy:!0}){t=i.useTenancy?Ka(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((s,[a,u])=>(s[Ka(a)]=u,s),{})),await(await this.getClient()).bulkStore(t,r)}async delete(t,r={useTenancy:!0}){return t=r.useTenancy?Ka(t):t,(await this.getClient()).delete(t)}async bulkDelete(t,r={useTenancy:!0}){return t=r.useTenancy?t.map(i=>Ka(i)):t,(await this.getClient()).bulkDelete(t)}async withCache(t,r=null,n,i={useTenancy:!0}){let s=await this.get(t,i);if(s)return s;try{let a=await n();return await this.store(t,a,r,i),a}catch(a){throw console.error("Error fetching before cache - ",a),a}}async withCacheWithDynamicTTL(t,r,n={useTenancy:!0}){let i=await this.get(t,n);if(i)return i;try{let s=await r(),{value:a,ttl:u}=s;return await this.store(t,a,u,{useTenancy:n.useTenancy}),a}catch(s){throw console.error("Error fetching before cache - ",s),s}}async bustCache(t){let r=await this.getClient();try{await r.delete(Ka(t))}catch(n){throw console.error("Error busting cache - ",n),n}}async deleteIfValue(t,r,n={useTenancy:!0}){t=n.useTenancy?Ka(t):t,await(await this.getClient()).deleteIfValue(t,r)}};var Rp=new Ap,bn={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}`},Op=(n=>(n[n.ONE_MINUTE=600]="ONE_MINUTE",n[n.ONE_HOUR=3600]="ONE_HOUR",n[n.ONE_DAY=86400]="ONE_DAY",n))(Op||{}),V0=o((...e)=>Rp.keys(...e),"keys"),Ip=o((...e)=>Rp.get(...e),"get"),uc=o((...e)=>Rp.store(...e),"store"),yS=o((...e)=>Rp.delete(...e),"destroy"),ef=o((...e)=>Rp.withCache(...e),"withCache"),YRe=o((...e)=>Rp.withCacheWithDynamicTTL(...e),"withCacheWithDynamicTTL"),Yg=o((...e)=>Rp.bustCache(...e),"bustCache");var XH={};G(XH,{createCode:()=>UMt,deleteCode:()=>BMt,getCode:()=>FMt,getExistingInvites:()=>JH,getInviteCodes:()=>XRe,updateCode:()=>MMt});var JRe=nr.fromDays(7).toSeconds();async function MMt(e,t){await(await Md()).store(e,t,JRe)}o(MMt,"updateCode");async function UMt(e,t){let r=Nt();return await(await Md()).store(r,{email:e,info:t},JRe),r}o(UMt,"createCode");async function FMt(e){let r=await(await Md()).get(e);if(!r)throw"Invitation is not valid or has expired, please request a new one.";return r}o(FMt,"getCode");async function BMt(e){await(await Md()).delete(e)}o(BMt,"deleteCode");async function XRe(){let r=(await(await Md()).scan()).map(i=>({...i.value,code:i.key}));if(!L.MULTI_TENANCY)return r;let n=Ue();return r.filter(i=>n===i.info.tenantId)}o(XRe,"getInviteCodes");async function JH(e){return(await XRe()).filter(t=>e.includes(t.email))}o(JH,"getExistingInvites");var ZH={};G(ZH,{createCode:()=>jMt,getCode:()=>WMt,invalidateCode:()=>GMt});var qMt=nr.fromHours(1).toSeconds();async function jMt(e,t){let r=Nt();return await(await Qw()).store(r,{userId:e,info:t},qMt),r}o(jMt,"createCode");async function WMt(e){let r=await(await Qw()).get(e);if(!r)throw new Error("Provided information is not valid, cannot reset password - please try again.");return r}o(WMt,"getCode");async function GMt(e){await(await Qw()).delete(e)}o(GMt,"invalidateCode");var df={};G(df,{getUser:()=>zS,getUsers:()=>Tjt,invalidateUser:()=>YS});var za={};G(za,{addSsoUser:()=>eOe,addUser:()=>zMt,getUserDoc:()=>ZRe,lookupTenantId:()=>$Mt,removeUser:()=>YMt,updateUserDoc:()=>VMt});function Cp(){return Ei(tr.PLATFORM_INFO.name)}o(Cp,"getPlatformDB");async function $Mt(e){return L.MULTI_TENANCY?(await ZRe(e)).tenantId:Lr}o($Mt,"lookupTenantId");async function ZRe(e){return Cp().get(e)}o(ZRe,"getUserDoc");async function VMt(e){await Cp().put(e)}o(VMt,"updateUserDoc");function HMt(e,t){return{_id:e,tenantId:t}}o(HMt,"newUserIdDoc");function QMt(e,t,r){return{_id:t,userId:e,tenantId:r}}o(QMt,"newUserEmailDoc");function KMt(e,t,r,n){return{_id:e,userId:r,email:t,tenantId:n}}o(KMt,"newUserSsoIdDoc");async function e4(e,t){let r=Cp(),n;try{await r.get(e)}catch(i){if(i.status===404)n=t(),await r.put(n);else throw i}}o(e4,"addUserDoc");async function eOe(e,t,r,n){return e4(e,()=>KMt(e,t,r,n))}o(eOe,"addSsoUser");async function zMt(e,t,r,n){let i=[e4(t,()=>HMt(t,e)),e4(r,()=>QMt(t,r,e))];n&&i.push(eOe(n,r,t,e)),await Promise.all(i)}o(zMt,"addUser");async function YMt(e){let t=Cp(),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})}o(YMt,"removeUser");var tOe=U(require("node-fetch"));var _S=class{static{o(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";oE.setHeader(n.headers);let s={method:t,body:i?JSON.stringify(n.body):n.body,headers:n.headers,credentials:"include"};return await(0,tOe.default)(`${this.host}${r}`,s)}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 rOe=new _S(L.INTERNAL_ACCOUNT_PORTAL_URL),nOe=L.SELF_HOSTED||L.DISABLE_ACCOUNT_PORTAL,xp=o(async e=>{if(nOe)return;let t={email:e},r=await rOe.post("/api/accounts/search",{body:t,headers:{"x-budibase-api-key":L.ACCOUNT_PORTAL_API_KEY}});if(r.status!==200)throw new Error(`Error getting account by email ${e}`);return(await r.json())[0]},"getAccount"),wS=o(async e=>{if(nOe)return;let t={tenantId:e},r=await rOe.post("/api/accounts/search",{body:t,headers:{"x-budibase-api-key":L.ACCOUNT_PORTAL_API_KEY}});if(r.status!==200)throw new Error(`Error getting account by tenantId ${e}`);return(await r.json())[0]},"getAccountByTenantId");var Xe={};G(Xe,{UserDB:()=>Ja,addAppBuilder:()=>_jt,bulkGetGlobalUsersById:()=>OD,bulkUpdateGlobalUsers:()=>QS,cleanseUserObject:()=>y3,creatorsInList:()=>Fp,doesUserExist:()=>hjt,getAccountHolderFromUsers:()=>RD,getAllUserIds:()=>djt,getAllUsers:()=>pjt,getById:()=>Bp,getCreatorCount:()=>yjt,getExistingAccounts:()=>ay,getExistingPlatformUsers:()=>SCe,getExistingTenantUsers:()=>ECe,getFirstPlatformUser:()=>VS,getGlobalUserByAppPage:()=>ICe,getGlobalUserByEmail:()=>ia,getPlatformUsers:()=>SD,getUserCount:()=>gjt,hasAdminPermissions:()=>lf,hasAppBuilderPermissions:()=>ACe,hasBuilderPermissions:()=>zi,isAdmin:()=>Ya,isAdminOrBuilder:()=>vCe,isAdminOrWorkspaceBuilder:()=>TD,isBuilder:()=>ly,isCreatorAsync:()=>HS,isCreatorSync:()=>vD,isGlobalBuilder:()=>TCe,paginatedUsers:()=>xCe,removeAppBuilder:()=>wjt,removePortalUserPermissions:()=>bjt,searchExistingEmails:()=>p3,searchGlobalUsersByApp:()=>ID,searchGlobalUsersByAppAccess:()=>g3,searchGlobalUsersByEmail:()=>CCe,validateUniqueUser:()=>AD});var r4=class extends Error{constructor(r,n){super(r);this.code=n}static{o(this,"BudibaseError")}};function n4(e){if(e==null)return"No error provided.";if(e instanceof Error)return e.message;if(typeof e=="string")return e;if(typeof e=="object"&&"message"in e)return String(e.message);try{let r=JSON.stringify(e);if(r!=="{}")return r}catch{}let t=String(e);return t!=="[object Object]"?t:"An unknown error occurred"}o(n4,"getErrorMessage");var iOe=o(e=>{let t;return e.code&&(t={code:e.code},e.getPublicError&&(t={...t,...e.getPublicError()})),t},"getPublicError"),K=class e extends r4{constructor(r,n,i="http"){super(r,i);this.status=n}static{o(this,"HTTPError")}static async fromResponse(r){let n=await r.text(),i=n,s=r.status,a="http";try{let u=JSON.parse(n);i=u.message,s=u.status,a=u.error?.code}catch{}return new e(i,s,a)}};var Hn=class extends K{static{o(this,"BadRequestError")}constructor(t){super(t,400)}};var cc=class extends Error{static{o(this,"EmailUnavailableError")}constructor(t){super(`Email already in use: '${t}'`)}};var oOe=+(L.PASSWORD_MIN_LENGTH||12),sOe=+(L.PASSWORD_MAX_LENGTH||512);function aOe(e){return!e||e.length<oOe?{valid:!1,error:`Password invalid. Minimum ${oOe} characters.`}:e.length>sOe?{valid:!1,error:`Password invalid. Maximum ${sOe} characters.`}:{valid:!0}}o(aOe,"validatePassword");var XMt=require("uuid");var ZMt=L.SESSION_EXPIRY_SECONDS?parseInt(L.SESSION_EXPIRY_SECONDS):nr.fromDays(7).toSeconds();function H0(e,t){return`${e}/${t}`}o(H0,"makeSessionID");async function o4(e){return e?(await(await eg()).scan(e)).map(n=>n.value):(console.trace("Cannot get sessions for undefined userId"),[])}o(o4,"getSessionsForUser");async function SS(e,t={}){try{let r=t?.reason||"unknown",n=t.sessionIds||[],i;if(n.length===0?i=(await o4(e)).map(a=>({key:H0(a.userId,a.sessionId)})):(n=Array.isArray(n)?n:[n],i=n.map(s=>({key:H0(e,s)}))),i&&i.length>0){let s=await eg(),a=[];for(let u of i)a.push(s.delete(u.key));L.isTest()||zg(`Invalidating sessions for ${e} (reason: ${r}) - ${i.map(u=>u.key).join(", ")}`),await Promise.all(a)}}catch(r){console.error(`Error invalidating sessions: ${r}`)}}o(SS,"invalidateSessions");async function uOe(e){let t=await eg(),r=H0(e.userId,e.sessionId);e.lastAccessedAt=new Date().toISOString(),await t.store(r,e,ZMt)}o(uOe,"updateSessionTTL");async function cOe(e,t){if(!e||!t)throw new Error(`Invalid session details - ${e} - ${t}`);let n=await(await eg()).get(H0(e,t));if(!n)throw new Error(`Session not found - ${e} - ${t}`);return n}o(cOe,"getSession");var Oe={};G(Oe,{account:()=>YIe,action:()=>JIe,ai:()=>XIe,analytics:()=>K0,app:()=>ZIe,asyncEventQueue:()=>Dp,auditLog:()=>eCe,auth:()=>ED,automation:()=>tCe,backfill:()=>rCe,backfillCache:()=>Y0,backup:()=>nCe,datasource:()=>iCe,email:()=>oCe,environmentVariable:()=>sCe,group:()=>aCe,identification:()=>na,initAsyncEvents:()=>Xqt,installation:()=>BS,layout:()=>uCe,license:()=>cCe,org:()=>lCe,plugin:()=>fCe,processors:()=>u3,publishEvent:()=>Y,query:()=>dCe,resource:()=>pCe,role:()=>$S,rowAction:()=>hCe,rows:()=>mCe,screen:()=>gCe,serve:()=>yCe,shutdown:()=>Zqt,table:()=>bCe,user:()=>Yi,view:()=>_Ce,workspace:()=>wCe});var K0={};G(K0,{enabled:()=>Q0});var Q0=o(async()=>z0(),"enabled");var Dp;function s4(){Dp=new Gs("systemEventQueue",{jobTags:e=>({"event.name":e.event})})}o(s4,"init");async function fOe(e){Dp||s4();let{event:t,identity:r}=e;AX.indexOf(t)!==-1&&r.tenantId&&await Dp.add(e)}o(fOe,"publishAsyncEvent");var Y0={};G(Y0,{end:()=>tUt,isAlreadySent:()=>c4,isBackfillingEvent:()=>u4,recordEvent:()=>a4,start:()=>eUt});var eUt=o(async e=>nUt({eventWhitelist:e}),"start"),a4=o(async(e,t)=>{let r=l4(e,t);await uc(r,t,void 0,{useTenancy:!1})},"recordEvent"),tUt=o(async()=>{await iUt(),await oUt()},"end"),rUt=o(async()=>Ip(bn.BACKFILL_METADATA),"getBackfillMetadata"),nUt=o(async e=>uc(bn.BACKFILL_METADATA,e),"saveBackfillMetadata"),iUt=o(async()=>{await yS(bn.BACKFILL_METADATA)},"deleteBackfillMetadata"),oUt=o(async()=>{let e=l4(),t=await V0(e);for(let r of t)await yS(r,{useTenancy:!1})},"clearEvents"),u4=o(async e=>{let r=(await rUt())?.eventWhitelist;return!!(r&&r.includes(e))},"isBackfillingEvent"),c4=o(async(e,t)=>{let r=l4(e,t);return!!await Ip(r,{useTenancy:!1})},"isAlreadySent"),sUt={"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}`},l4=o((e,t)=>{let r,n=Ue();if(e){r=`${bn.EVENTS}:${n}:${e}`;let i=sUt[e],s=i?i(t):void 0;s&&(r=`${r}:${s}`)}else r=`${bn.EVENTS}:${n}:*`;return r},"getEventKey");var u3={};G(u3,{analyticsProcessor:()=>HIe,init:()=>wBt,processors:()=>lc});var $Ie=U(s3());var fBt=o(e=>e==="served:builder"||e==="served:app:preview"||e==="served:app","isRateLimited"),dBt=o(e=>e==="served:app:preview"||e==="served:app","isPerApp");var jIe={"served:app":"calendarDay","served:app:preview":"calendarDay","served:builder":"calendarDay"},WIe=o(async e=>{if(!fBt(e))return!1;let t=await pBt(e);if(t){let r=new Date(t.timestamp);switch(jIe[e]){case"calendarDay":return r.setDate(r.getDate()+1),r.setHours(0,0,0,0),Date.now()>r.getTime()?(await qIe(e,{timestamp:Date.now()}),!1):!0}}else return await qIe(e,{timestamp:Date.now()}),!1},"limited"),GIe=o(e=>{let t=`${bn.EVENTS_RATE_LIMIT}:${e}`;return dBt(e)&&(t=t+":"+Si()),t},"eventKey"),pBt=o(async e=>{let t=GIe(e);return await Ip(t)},"readEvent"),qIe=o(async(e,t)=>{let r=GIe(e),n=jIe[e],i;switch(n){case"calendarDay":i=86400}await uc(r,t,i)},"recordEvent");var mBt=["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"],kS=class{static{o(this,"PosthogProcessor")}constructor(t){if(!t)throw new Error("Posthog token is not defined");this.posthog=new $Ie.PostHog(t)}async processEvent(t,r,n,i){if(mBt.includes(t)||await WIe(t))return;n=this.clearPIIProperties(n),n.version=L.VERSION,n.service=L.SERVICE,n.environment=r.environment,n.hosting=r.hosting;let s=Si();s&&(n.appId=s);let a={distinctId:r.id,event:t,properties:n};i&&(a.timestamp=new Date(i)),(r.installationId||r.tenantId)&&(a.groups={},r.installationId&&(a.groups.installation=r.installationId,a.properties.installationId=r.installationId),r.tenantId&&(a.groups.tenant=r.tenantId,a.properties.tenantId=r.tenantId)),this.posthog.capture(a)}clearPIIProperties(t){return t.email&&delete t.email,t.audited&&delete t.audited,t}async identify(t,r){let n={distinctId:t.id,properties:t};r&&(n.timestamp=new Date(r)),this.posthog.identify(n)}async identifyGroup(t,r){let n={distinctId:t.id,groupType:t.type,groupKey:t.id,properties:t};r&&(n.timestamp=new Date(r)),this.posthog.groupIdentify(n)}async shutdown(){await this.posthog.shutdown()}};var VIe=kS;var gBt=["installation:version:upgraded","installation:version:downgraded"],yBt=["installation","tenant"],MS=class{static{o(this,"AnalyticsProcessor")}constructor(){L.POSTHOG_TOKEN&&!L.isTest()&&(this.posthog=new VIe(L.POSTHOG_TOKEN))}async processEvent(t,r,n,i){!gBt.includes(t)&&!await Q0()||this.posthog&&await this.posthog.processEvent(t,r,n,i)}async identify(t,r){!yBt.includes(t.type)&&!await Q0()||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 a3=L.SELF_HOSTED&&!L.isDev(),US=class{static{o(this,"LoggingProcessor")}async processEvent(t,r,n){a3||console.log(`[audit] [identityType=${r.type}] ${t}`,n)}async identify(t){a3||console.log("[audit] identified",t)}async identifyGroup(t){a3||console.log("[audit] group identified",t)}async shutdown(){}};var sy=class e{static{o(this,"AuditLogsProcessor")}static{this.auditLogsEnabled=!1}static init(t){e.auditLogsEnabled=!0;let r=t;return e.auditLogQueue=new Gs("auditLogQueue",{jobTags:n=>({"event.name":n.event})}),e.auditLogQueue.process(async n=>{await ji(n.data.tenantId,async()=>{let i=n.data.properties;i.audited&&(i={...i,...i.audited},delete i.audited);let s={};L.ENABLE_AUDIT_LOG_IP_ADDR&&(s=n.data.opts.hostInfo),await r(n.data.event,i,{userId:n.data.opts.userId,timestamp:n.data.opts.timestamp,appId:n.data.opts.appId,hostInfo:s})})})}async processEvent(t,r,n,i){if(e.auditLogsEnabled&&Gq(t)){let s=r.type==="user"?r.id:void 0;await e.auditLogQueue.add({event:t,properties:n,opts:{userId:s,timestamp:i,appId:Si(),hostInfo:r.hostInfo},tenantId:Ue()})}}async identify(){}async identifyGroup(){}async shutdown(){await e.auditLogQueue?.close()}};var FS=class{constructor(t){this.initialised=!1;this.processors=[];this.processors=t}static{o(this,"Processor")}async processEvent(t,r,n,i){for(let s of this.processors)await s.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 HIe=new MS,bBt=new US,_Bt=new sy;function wBt(e){return sy.init(e)}o(wBt,"init");var lc=new FS([HIe,bBt,_Bt]);var cf={};G(cf,{checkInstallVersion:()=>TBt,getInstall:()=>qS,getInstallFromDB:()=>l3});var c3=U(require("semver"));var qS=o(async()=>ef(bn.INSTALLATION,86400,l3,{useTenancy:!1}),"getInstall");async function EBt(e){let t={_id:tr.PLATFORM_INFO.docs.install,installId:Nt(),version:L.VERSION};try{let r=await e.put(t);return t._rev=r.rev,t}catch(r){if(r.status===409)return l3();throw r}}o(EBt,"createInstallDoc");var l3=o(async()=>Oo(tr.PLATFORM_INFO.name,async e=>{let t;try{t=await e.get(tr.PLATFORM_INFO.docs.install)}catch(r){if(r.status===404)t=await EBt(e);else throw r}return t}),"getInstallFromDB"),SBt=o(async e=>{try{await Oo(tr.PLATFORM_INFO.name,async t=>{let r=await qS();r.version=e,await t.put(r),await Yg(bn.INSTALLATION)})}catch(t){if(t.status===409)return!1;throw t}return!0},"updateVersion"),TBt=o(async()=>{let e=await qS(),t=e.version,r=L.VERSION;try{if(t!==r){let n=c3.default.gt(r,t),i=c3.default.lt(r,t);await SBt(r)&&(await V_({_id:e.installId,type:"installation"},async()=>{n?await BS.upgraded(t,r):i&&await BS.downgraded(t,r)}),await na.identifyInstallationGroup(e.installId))}}catch(n){n?.message?.includes("Invalid Version")?vp(`Invalid version "${r}" - is it semver?`):vp("Failed to retrieve version",n)}},"checkInstallVersion");var vBt=o(async()=>{let e=_1(),t=GS(),r;if(e?r=e.type:r="tenant",r==="installation"){let n=await Up(),i=jS();return{id:QIe(n,r),hosting:i,type:r,installationId:n,environment:t}}else if(r==="tenant"){let n=await Up(),i=await wD(Ue()),s=jS();return{id:QIe(i,r),type:r,hosting:s,installationId:n,tenantId:i,realTenantId:Ue(),environment:t}}else if(r==="user"){let n=e,i=await wD(Ue()),s=await Up(),a=n.account,u;return a?u=a.hosting:u=jS(),{id:n._id,type:r,hosting:u,installationId:s,tenantId:i,environment:t,realTenantId:Ue(),hostInfo:n.hostInfo}}else throw new Error("Unknown identity type")},"getCurrentIdentity"),ABt=o(async(e,t)=>{let r=e,n="installation",i=jS(),s=L.VERSION,a=GS(),u={id:r,type:n,hosting:i,version:s,environment:a};await f3(u,t),await WS({...u,id:`$${n}_${r}`},t)},"identifyInstallationGroup"),RBt=o(async(e,t,r,n=L.VERSION)=>{let i=await wD(e),s="tenant",a=await Up(),u=GS(),c={id:i,type:s,hosting:t,environment:u,installationId:a,createdAt:r,createdVersion:n};await f3(c,r),await WS({...c,id:`$${s}_${i}`},r)},"identifyTenantGroup"),OBt=o(async(e,t,r)=>{let n=e._id,i=await wD(e.tenantId),s="user",a=zi(e),u=lf(e),c;Gh(e)&&(c=e.providerType);let f=(await ay([e.email])).length>0,d=!!t&&f&&t.verified,p=await Up(),h=t?t.hosting:jS(),m=GS();await WS({id:n,type:s,hosting:h,installationId:p,tenantId:i,verified:d,accountHolder:f,providerType:c,builder:a,admin:u,environment:m},r)},"identifyUser"),IBt=o(async e=>{let t=e.accountId,r=e.tenantId,n="user",i=GA(e)?e.providerType:void 0,s=e.verified,a=!0,u=e.hosting,c=await Up(),l=GS();if(WA(e)){let d=await ia(e.email);d?._id&&(t=d._id)}await WS({id:t,type:n,hosting:u,installationId:c,tenantId:r,providerType:i,verified:s,accountHolder:a,environment:l})},"identifyAccount"),WS=o(async(e,t)=>{await lc.identify(e,t)},"identify"),f3=o(async(e,t)=>{await lc.identifyGroup(e,t)},"identifyGroup"),GS=o(()=>L.isDev()?"development":L.DEPLOYMENT_ENVIRONMENT,"getDeploymentEnvironment"),jS=o(()=>L.SELF_HOSTED?"self":"cloud","getHostingFromEnv"),Up=o(async()=>CBt()?"account-portal":(await qS()).installId,"getInstallationId"),wD=o(async e=>L.SELF_HOSTED?zIe(e):e,"getEventTenantId"),zIe=o(async e=>ji(e,()=>ef(bn.UNIQUE_TENANT_ID,86400,async()=>{let t=gt(),r=await uy(),n;return r.config.uniqueTenantId?r.config.uniqueTenantId:(n=`${Nt()}_${e}`,r.config.uniqueTenantId=n,r.config.createdVersion=L.VERSION,await t.put(r),n)})),"getUniqueTenantId"),CBt=o(()=>L.SERVICE==="account-portal","isAccountPortal"),QIe=o((e,t)=>t==="installation"||t==="tenant"?`$${t}_${e}`:e,"formatDistinctId"),na={getCurrentIdentity:vBt,identifyInstallationGroup:ABt,identifyTenantGroup:RBt,identifyUser:OBt,identifyAccount:IBt,identify:WS,identifyGroup:f3,getInstallationId:Up,getUniqueTenantId:zIe};var Y=o(async(e,t,r,n)=>{let i=n||await na.getCurrentIdentity();if(!(n?!1:await u4(e))){await fOe({event:e,identity:i,properties:t,timestamp:r}),await lc.processEvent(e,i,t,r);return}await c4(e,t)||(await lc.processEvent(e,i,t,r),await a4(e,t))},"publishEvent");async function xBt(e,t){let r={tenantId:e.tenantId};await Y("account:created",r,void 0,t)}o(xBt,"created");async function DBt(e){let t={tenantId:e.tenantId};await Y("account:deleted",t)}o(DBt,"deleted");async function PBt(e){let t={tenantId:e.tenantId};await Y("account:verified",t)}o(PBt,"verified");var YIe={created:xBt,deleted:DBt,verified:PBt};async function NBt(e,t){console.info("action:automation_step:executed",`disabled. Action step ${e.stepId} not published at ${t}`)}o(NBt,"automationStepExecuted");async function LBt(e,t){console.info("action:automation_step:executed",`disabled. Action type ${e.type} not published at ${t}`)}o(LBt,"crudExecuted");async function kBt(e,t){console.info("action:automation_step:executed",`disabled. Execution for ai agent ${e.agentId} not published at ${t}`)}o(kBt,"aiAgentExecuted");var JIe={aiAgentExecuted:kBt,automationStepExecuted:NBt,crudExecuted:LBt};async function MBt(e){let t={};await Y("ai:config:created",t,e)}o(MBt,"AIConfigCreated");async function UBt(){let e={};await Y("ai:config:updated",e)}o(UBt,"AIConfigUpdated");var XIe={AIConfigCreated:MBt,AIConfigUpdated:UBt};var FBt=o(async(e,t)=>{let r={appId:e.appId,version:e.version,audited:{name:e.name}};await Y("app:created",r,t)},"created");async function BBt(e){let t={appId:e.appId,version:e.version,audited:{name:e.name}};await Y("app:updated",t)}o(BBt,"updated");async function qBt(e){let t={appId:e.appId,audited:{name:e.name}};await Y("app:deleted",t)}o(qBt,"deleted");async function jBt(e,t){let r={appId:e.appId,audited:{name:e.name}};await Y("app:published",r,t)}o(jBt,"published");async function WBt(e){let t={appId:e.appId,audited:{name:e.name}};await Y("app:unpublished",t)}o(WBt,"unpublished");async function GBt(e){let t={appId:e.appId,audited:{name:e.name}};await Y("app:file:imported",t)}o(GBt,"fileImported");async function $Bt(e,t){let r={duplicateAppId:t,appId:e.appId,audited:{name:e.name}};await Y("app:duplicated",r)}o($Bt,"duplicated");async function VBt(e,t){let r={appId:e.appId,templateKey:t,audited:{name:e.name}};await Y("app:template:imported",r)}o(VBt,"templateImported");async function HBt(e,t,r){let n={appId:e.appId,currentVersion:t,updatedToVersion:r,audited:{name:e.name}};await Y("app:version:updated",n)}o(HBt,"versionUpdated");async function QBt(e,t,r){let n={appId:e.appId,currentVersion:t,revertedToVersion:r,audited:{name:e.name}};await Y("app:version:reverted",n)}o(QBt,"versionReverted");async function KBt(e){let t={appId:e.appId,audited:{name:e.name}};await Y("app:reverted",t)}o(KBt,"reverted");async function zBt(e){let t={appId:e.appId,audited:{name:e.name}};await Y("app:exported",t)}o(zBt,"exported");var ZIe={created:FBt,updated:BBt,deleted:qBt,published:jBt,unpublished:WBt,fileImported:GBt,duplicated:$Bt,templateImported:VBt,versionUpdated:HBt,versionReverted:QBt,reverted:KBt,exported:zBt};async function YBt(e){let t={filters:e};await Y("audit_log:filtered",t)}o(YBt,"filtered");async function JBt(e){let t={filters:e};await Y("audit_log:downloaded",t)}o(JBt,"downloaded");var eCe={filtered:YBt,downloaded:JBt};async function XBt(e,t){let n={userId:(await na.getCurrentIdentity()).id,source:e,audited:{email:t}};await Y("auth:login",n)}o(XBt,"login");async function ZBt(e){let r={userId:(await na.getCurrentIdentity()).id,audited:{email:e}};await Y("auth:logout",r)}o(ZBt,"logout");async function e2t(e,t){let r={type:e};await Y("auth:sso:created",r,t)}o(e2t,"SSOCreated");async function t2t(e){let t={type:e};await Y("auth:sso:updated",t)}o(t2t,"SSOUpdated");async function r2t(e,t){let r={type:e};await Y("auth:sso:activated",r,t)}o(r2t,"SSOActivated");async function n2t(e){let t={type:e};await Y("auth:sso:deactivated",t)}o(n2t,"SSODeactivated");var ED={login:XBt,logout:ZBt,SSOCreated:e2t,SSOUpdated:t2t,SSOActivated:r2t,SSODeactivated:n2t};async function i2t(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 Y("automation:created",r,t)}o(i2t,"created");async function o2t(e){let t={appId:e.appId,automationId:e._id,triggerId:e.definition?.trigger?.id,triggerType:e.definition?.trigger?.stepId};await Y("automation:trigger:updated",t)}o(o2t,"triggerUpdated");async function s2t(e){let t={appId:e.appId,automationId:e._id,triggerId:e.definition?.trigger?.id,triggerType:e.definition?.trigger?.stepId,audited:{name:e.name}};await Y("automation:deleted",t)}o(s2t,"deleted");async function a2t(e){let t={appId:e.appId,automationId:e._id,triggerId:e.definition?.trigger?.id,triggerType:e.definition?.trigger?.stepId};await Y("automation:tested",t)}o(a2t,"tested");var u2t=o(async(e,t)=>{let r={count:e};await Y("automations:run",r,t)},"run");async function c2t(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 Y("automation:step:created",n,r)}o(c2t,"stepCreated");async function l2t(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 Y("automation:step:deleted",r)}o(l2t,"stepDeleted");var tCe={created:i2t,triggerUpdated:o2t,deleted:s2t,tested:a2t,run:u2t,stepCreated:c2t,stepDeleted:l2t};var cy=!L.SELF_HOSTED&&!L.isDev();async function f2t(e){cy||await Y("app:backfill:succeeded",e)}o(f2t,"appSucceeded");async function d2t(e){if(cy)return;let t={error:JSON.stringify(e,Object.getOwnPropertyNames(e))};await Y("app:backfill:failed",t)}o(d2t,"appFailed");async function p2t(e){cy||await Y("tenant:backfill:succeeded",e)}o(p2t,"tenantSucceeded");async function h2t(e){if(cy)return;let t={error:JSON.stringify(e,Object.getOwnPropertyNames(e))};await Y("tenant:backfill:failed",t)}o(h2t,"tenantFailed");async function m2t(){if(cy)return;let e={};await Y("installation:backfill:succeeded",e)}o(m2t,"installationSucceeded");async function g2t(e){if(cy)return;let t={error:JSON.stringify(e,Object.getOwnPropertyNames(e))};await Y("installation:backfill:failed",t)}o(g2t,"installationFailed");var rCe={appSucceeded:f2t,appFailed:d2t,tenantSucceeded:p2t,tenantFailed:h2t,installationSucceeded:m2t,installationFailed:g2t};async function y2t(e){let t={appId:e.appId,restoreId:e._id,backupCreatedAt:e.timestamp,name:e.name};await Y("app:backup:restored",t)}o(y2t,"appBackupRestored");async function b2t(e,t,r,n,i){let s={appId:e,backupId:t,type:r,trigger:n,name:i};await Y("app:backup:triggered",s)}o(b2t,"appBackupTriggered");var nCe={appBackupRestored:y2t,appBackupTriggered:b2t};function d3(e){return!Object.values(kn).includes(e.source)}o(d3,"isCustom");async function _2t(e,t){let r={datasourceId:e._id,source:e.source,custom:d3(e)};await Y("datasource:created",r,t)}o(_2t,"created");async function w2t(e){let t={datasourceId:e._id,source:e.source,custom:d3(e)};await Y("datasource:updated",t)}o(w2t,"updated");async function E2t(e){let t={datasourceId:e._id,source:e.source,custom:d3(e)};await Y("datasource:deleted",t)}o(E2t,"deleted");var iCe={created:_2t,updated:w2t,deleted:E2t};async function S2t(e){let t={};await Y("email:smtp:created",t,e)}o(S2t,"SMTPCreated");async function T2t(){let e={};await Y("email:smtp:updated",e)}o(T2t,"SMTPUpdated");var oCe={SMTPCreated:S2t,SMTPUpdated:T2t};async function v2t(e,t){let r={name:e,environments:t};await Y("environment_variable:created",r)}o(v2t,"created");async function A2t(e){let t={name:e};await Y("environment_variable:deleted",t)}o(A2t,"deleted");async function R2t(e){let t={userId:e};await Y("environment_variable:upgrade_panel_opened",t)}o(R2t,"upgradePanelOpened");var sCe={created:v2t,deleted:A2t,upgradePanelOpened:R2t};async function O2t(e,t){let r={groupId:e._id,viaScim:Ws(),audited:{name:e.name}};await Y("user_group:created",r,t)}o(O2t,"created");async function I2t(e){let t={groupId:e._id,viaScim:Ws(),audited:{name:e.name}};await Y("user_group:updated",t)}o(I2t,"updated");async function C2t(e){let t={groupId:e._id,viaScim:Ws(),audited:{name:e.name}};await Y("user_group:deleted",t)}o(C2t,"deleted");async function x2t(e,t,r){let n={count:e,groupId:t._id,userIds:r,viaScim:Ws(),audited:{name:t.name}};await Y("user_group:user_added",n)}o(x2t,"usersAdded");async function D2t(e,t,r){let n={count:e,groupId:t._id,userIds:r,viaScim:Ws(),audited:{name:t.name}};await Y("user_group:users_deleted",n)}o(D2t,"usersDeleted");async function P2t(e){let t={groupId:e,onboarding:!0};await Y("user_group:onboarding_added",t)}o(P2t,"createdOnboarding");async function N2t(e){let t={permissions:e.roles,groupId:e._id,audited:{name:e.name}};await Y("user_group:permissions_edited",t)}o(N2t,"permissionsEdited");var aCe={created:O2t,updated:I2t,deleted:C2t,usersAdded:x2t,usersDeleted:D2t,createdOnboarding:P2t,permissionsEdited:N2t};async function L2t(e){let t={currentVersion:e};await Y("installation:version:checked",t)}o(L2t,"versionChecked");async function k2t(e,t){let r={from:e,to:t};await Y("installation:version:upgraded",r)}o(k2t,"upgraded");async function M2t(e,t){let r={from:e,to:t};await Y("installation:version:downgraded",r)}o(M2t,"downgraded");async function U2t(){let e={};await Y("installation:firstStartup",e)}o(U2t,"firstStartup");var BS={versionChecked:L2t,upgraded:k2t,downgraded:M2t,firstStartup:U2t};async function F2t(e,t){let r={layoutId:e._id};await Y("layout:created",r,t)}o(F2t,"created");async function B2t(e){let t={layoutId:e};await Y("layout:deleted",t)}o(B2t,"deleted");var uCe={created:F2t,deleted:B2t};async function q2t(e,t){let r={accountId:e.accountId,...t};await Y("license:plan:changed",r)}o(q2t,"planChanged");async function j2t(e){let t={accountId:e.accountId};await Y("license:activated",t)}o(j2t,"activated");async function W2t(e){let t={accountId:e.accountId};await Y("license:checkout:opened",t)}o(W2t,"checkoutOpened");async function G2t(e){let t={accountId:e.accountId};await Y("license:checkout:success",t)}o(G2t,"checkoutSuccess");async function $2t(e){let t={accountId:e.accountId};await Y("license:portal:opened",t)}o($2t,"portalOpened");async function V2t(e){let t={accountId:e.accountId};await Y("license:payment:failed",t)}o(V2t,"paymentFailed");async function H2t(e){let t={accountId:e.accountId};await Y("license:payment:recovered",t)}o(H2t,"paymentRecovered");var cCe={planChanged:q2t,activated:j2t,checkoutOpened:W2t,checkoutSuccess:G2t,portalOpened:$2t,paymentFailed:V2t,paymentRecovered:H2t};async function Q2t(e){let t={};await Y("org:info:name:updated",t,e)}o(Q2t,"nameUpdated");async function K2t(e){let t={};await Y("org:info:logo:updated",t,e)}o(K2t,"logoUpdated");async function z2t(e){let t={};await Y("org:platformurl:updated",t,e)}o(z2t,"platformURLUpdated");async function Y2t(){let e={};await Y("analytics:opt:out",e)}o(Y2t,"analyticsOptOut");async function J2t(){let e={};await Y("analytics:opt:out",e)}o(J2t,"analyticsOptIn");var lCe={nameUpdated:Q2t,logoUpdated:K2t,platformURLUpdated:z2t,analyticsOptOut:Y2t,analyticsOptIn:J2t};async function X2t(e){let t={type:e.schema.type,name:e.name,description:e.description,version:e.version};await Y("plugin:init",t)}o(X2t,"init");async function Z2t(e){let t={pluginId:e._id,type:e.schema.type,source:e.source,name:e.name,description:e.description,version:e.version};await Y("plugin:imported",t)}o(Z2t,"imported");async function eqt(e){let t={pluginId:e._id,type:e.schema.type,name:e.name,description:e.description,version:e.version};await Y("plugin:deleted",t)}o(eqt,"deleted");var fCe={init:X2t,imported:Z2t,deleted:eqt};var tqt=o(async(e,t,r)=>{let n={queryId:t._id,datasourceId:e._id,source:e.source,queryVerb:t.queryVerb};await Y("query:created",n,r)},"created"),rqt=o(async(e,t)=>{let r={queryId:t._id,datasourceId:e._id,source:e.source,queryVerb:t.queryVerb};await Y("query:updated",r)},"updated"),nqt=o(async(e,t,r)=>{let n={queryId:t._id,datasourceId:e._id,source:e.source,queryVerb:t.queryVerb,appId:r};await Y("query:deleted",n)},"deleted"),iqt=o(async(e,t,r)=>{let n={datasourceId:e._id,source:e.source,count:r,importSource:t};await Y("query:import",n)},"imported"),oqt=o(async(e,t)=>{let r={count:e};await Y("queries:run",r,t)},"run"),sqt=o(async(e,t)=>{let r={queryId:t.queryId,datasourceId:e._id,source:e.source,queryVerb:t.queryVerb};await Y("query:previewed",r)},"previewed"),dCe={created:tqt,updated:rqt,deleted:nqt,imported:iqt,run:oqt,previewed:sqt};async function aqt({resource:e,fromWorkspace:t,toWorkspace:r},n){let i={resource:e,fromWorkspace:t,toWorkspace:r};await Y("resource:copied_to_workspace",i,n)}o(aqt,"duplicatedToWorkspace");var pCe={duplicatedToWorkspace:aqt};async function uqt(e,t){let r={roleId:e._id,permissionId:e.permissionId,inherits:e.inherits};await Y("role:created",r,t)}o(uqt,"created");async function cqt(e){let t={roleId:e._id,permissionId:e.permissionId,inherits:e.inherits};await Y("role:updated",t)}o(cqt,"updated");async function lqt(e){let t={roleId:e._id,permissionId:e.permissionId,inherits:e.inherits};await Y("role:deleted",t)}o(lqt,"deleted");async function fqt(e,t,r){let n={userId:e._id,roleId:t};await Y("role:assigned",n,r)}o(fqt,"assigned");async function dqt(e,t){let r={userId:e._id,roleId:t};await Y("role:unassigned",r)}o(dqt,"unassigned");var $S={created:uqt,updated:cqt,deleted:lqt,assigned:fqt,unassigned:dqt};async function pqt(e,t){await Y("row_action:created",e,t)}o(pqt,"created");var hCe={created:pqt};var hqt=o(async(e,t)=>{let r={count:e};await Y("rows:created",r,t)},"created"),mqt=o(async(e,t)=>{let r={tableId:e._id,count:t};await Y("rows:imported",r)},"imported"),mCe={created:hqt,imported:mqt};async function gqt(e,t){let r={layoutId:e.layoutId,screenId:e._id,roleId:e.routing.roleId,audited:{name:e.routing?.route}};await Y("screen:created",r,t)}o(gqt,"created");async function yqt(e){let t={layoutId:e.layoutId,screenId:e._id,roleId:e.routing.roleId,audited:{name:e.routing?.route}};await Y("screen:deleted",t)}o(yqt,"deleted");var gCe={created:gqt,deleted:yqt};async function bqt(e){let t={timezone:e};await Y("served:builder",t)}o(bqt,"servedBuilder");async function _qt(e,t,r){let n={appVersion:e.version,timezone:t,embed:r===!0};await Y("served:app",n)}o(_qt,"servedApp");async function wqt(e,t){let r={appId:e.appId,appVersion:e.version,timezone:t};await Y("served:app:preview",r)}o(wqt,"servedAppPreview");var yCe={servedBuilder:bqt,servedApp:_qt,servedAppPreview:wqt};async function Eqt(e,t){let r={tableId:e._id,audited:{name:e.name}};await Y("table:created",r,t)}o(Eqt,"created");async function Sqt(e,t){let r,n;for(let s in t.schema)if(!e.schema[s]){let a=t.schema[s];"default"in a&&a.default!=null&&(r=!0),a.type==="ai"&&(n=a.operation)}let i={tableId:t._id,defaultValues:r,aiColumn:n,audited:{name:t.name}};(r||n)&&await Y("table:updated",i)}o(Sqt,"updated");async function Tqt(e,t){let r={tableId:e._id,audited:{name:e.name},appId:t};await Y("table:deleted",r)}o(Tqt,"deleted");async function vqt(e,t){let r={tableId:e._id,format:t,audited:{name:e.name}};await Y("table:exported",r)}o(vqt,"exported");async function Aqt(e){let t={tableId:e._id,audited:{name:e.name}};await Y("table:imported",t)}o(Aqt,"imported");var bCe={created:Eqt,updated:Sqt,deleted:Tqt,exported:vqt,imported:Aqt};async function Rqt(e,t){let r={userId:e._id,viaScim:Ws(),audited:{email:e.email}};await Y("user:created",r,t)}o(Rqt,"created");async function Oqt(e){let t={userId:e._id,viaScim:Ws(),audited:{email:e.email}};await Y("user:updated",t)}o(Oqt,"updated");async function Iqt(e){let t={userId:e._id,viaScim:Ws(),audited:{email:e.email}};await Y("user:deleted",t)}o(Iqt,"deleted");async function Cqt(e,t){let r={userId:e._id,audited:{email:e.email}};await Y("user:admin:assigned",r,t)}o(Cqt,"permissionAdminAssigned");async function xqt(e){let t={userId:e._id,audited:{email:e.email}};await Y("user:admin:removed",t)}o(xqt,"permissionAdminRemoved");async function Dqt(e,t){let r={userId:e._id,audited:{email:e.email}};await Y("user:builder:assigned",r,t)}o(Dqt,"permissionBuilderAssigned");async function Pqt(e){let t={userId:e._id,audited:{email:e.email}};await Y("user:builder:removed",t)}o(Pqt,"permissionBuilderRemoved");async function Nqt(e){let t={audited:{email:e}};await Y("user:invited",t)}o(Nqt,"invited");async function Lqt(e){let t={userId:e._id,audited:{email:e.email}};await Y("user:invite:accepted",t)}o(Lqt,"inviteAccepted");async function kqt(e){let t={userId:e._id,audited:{email:e.email}};await Y("user:password:force:reset",t)}o(kqt,"passwordForceReset");async function Mqt(e){let t={userId:e._id,audited:{email:e.email}};await Y("user:password:updated",t)}o(Mqt,"passwordUpdated");async function Uqt(e){let t={userId:e._id,audited:{email:e.email}};await Y("user:password:reset:requested",t)}o(Uqt,"passwordResetRequested");async function Fqt(e){let t={userId:e._id,audited:{email:e.email}};await Y("user:password:reset",t)}o(Fqt,"passwordReset");async function Bqt(e){let t={users:e};await Y("user:data:collaboration",t)}o(Bqt,"dataCollaboration");var Yi={created:Rqt,updated:Oqt,deleted:Iqt,permissionAdminAssigned:Cqt,permissionAdminRemoved:xqt,permissionBuilderAssigned:Dqt,permissionBuilderRemoved:Pqt,invited:Nqt,inviteAccepted:Lqt,passwordForceReset:kqt,passwordUpdated:Mqt,passwordResetRequested:Uqt,passwordReset:Fqt,dataCollaboration:Bqt};async function qqt(e,t){let r={name:e.name,type:e.type,tableId:e.tableId};await Y("view:created",r,t)}o(qqt,"created");async function jqt(e){let t={tableId:e.tableId};await Y("view:updated",t)}o(jqt,"updated");async function Wqt(e,t){let r={...de.views.isV2(e)?{id:e.id,tableId:e.tableId,appId:t}:{}};await Y("view:deleted",r)}o(Wqt,"deleted");async function Gqt(e,t){let r={tableId:e._id,format:t};await Y("view:exported",r)}o(Gqt,"exported");async function $qt({tableId:e,filterGroups:t},r){let n={tableId:e,filterGroups:t};await Y("view:filter:created",n,r)}o($qt,"filterCreated");async function Vqt({tableId:e,filterGroups:t}){let r={tableId:e,filterGroups:t};await Y("view:filter:updated",r)}o(Vqt,"filterUpdated");async function Hqt(e){let t={tableId:e.tableId};await Y("view:filter:deleted",t)}o(Hqt,"filterDeleted");async function Qqt({tableId:e,calculationType:t},r){let n={tableId:e,calculation:t};await Y("view:calculation:created",n,r)}o(Qqt,"calculationCreated");async function Kqt(e){let t={tableId:e.tableId,calculation:e.calculation};await Y("view:calculation:updated",t)}o(Kqt,"calculationUpdated");async function zqt(e){let t={tableId:e.tableId,calculation:e.calculation};await Y("view:calculation:deleted",t)}o(zqt,"calculationDeleted");async function Yqt(e,t){let r={tableId:e};await Y("view:join:created",r,t)}o(Yqt,"viewJoinCreated");var _Ce={created:qqt,updated:jqt,deleted:Wqt,exported:Gqt,filterCreated:$qt,filterUpdated:Vqt,filterDeleted:Hqt,calculationCreated:Qqt,calculationUpdated:Kqt,calculationDeleted:zqt,viewJoinCreated:Yqt};async function Jqt(e,t){let r={workspaceAppId:e._id,audited:{name:e.name},appId:t};await Y("workspace_app:deleted",r)}o(Jqt,"deleted");var wCe={deleted:Jqt};function Xqt(){}o(Xqt,"initAsyncEvents");var Zqt=o(async()=>{await lc.shutdown(),console.log("Events shutdown")},"shutdown");var ff={};G(ff,{creatorsInList:()=>Fp,getAccountHolderFromUsers:()=>RD,hasAdminPermissions:()=>lf,hasAppBuilderPermissions:()=>ACe,hasBuilderPermissions:()=>zi,isAdmin:()=>Ya,isAdminOrBuilder:()=>vCe,isAdminOrWorkspaceBuilder:()=>TD,isBuilder:()=>ly,isCreatorAsync:()=>HS,isCreatorSync:()=>vD,isGlobalBuilder:()=>TCe,validateUniqueUser:()=>AD});async function p3(e){let t=[],r=await ECe(e);t.push(...r.map(a=>a.email));let n=await SCe(e);t.push(...n.map(a=>a._id));let i=await ay(e);t.push(...i.map(a=>a.email));let s=await JH(e);return t.push(...s.map(a=>a.email)),[...new Set(t.map(a=>a.toLowerCase()))]}o(p3,"searchExistingEmails");async function SD(e){return await Xw("platform_users_lowercase_2",{keys:[e.toLowerCase()],include_docs:!0})}o(SD,"getPlatformUsers");async function VS(e){return(await SD(e))[0]??null}o(VS,"getFirstPlatformUser");async function ECe(e){let r={keys:e.map(i=>i.toLowerCase()),include_docs:!0},n={arrayResponse:!0};return await Wu("by_email2",r,void 0,n)}o(ECe,"getExistingTenantUsers");async function SCe(e){let r={keys:e.map(n=>n.toLowerCase()),include_docs:!0};return await Xw("platform_users_lowercase_2",r)}o(SCe,"getExistingPlatformUsers");async function ay(e){let r={keys:e.map(n=>n.toLowerCase()),include_docs:!0};return await Xw("account_by_email",r)}o(ay,"getExistingAccounts");var ly=cn.users.isBuilder,Ya=cn.users.isAdmin,TCe=cn.users.isGlobalBuilder,vCe=cn.users.isAdminOrBuilder,lf=cn.users.hasAdminPermissions,zi=cn.users.hasBuilderPermissions,ACe=cn.users.hasAppBuilderPermissions,TD=cn.users.isAdminOrWorkspaceBuilder;async function Fp(e,t){let r=[...new Set(e.filter(i=>i.userGroups).flatMap(i=>i.userGroups))];return t=await gt().getMultiple(r,{allowMissing:!0}),e.map(i=>vD(i,t))}o(Fp,"creatorsInList");async function HS(e){let t=[];return e.userGroups&&(t=await gt().getMultiple(e.userGroups)),vD(e,t)}o(HS,"isCreatorAsync");function vD(e,t){let r=cn.users.isCreator(e);return!r&&e?ejt(e,t):r}o(vD,"isCreatorSync");function ejt(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}o(ejt,"isCreatorByGroupMembership");async function AD(e,t){if(L.MULTI_TENANCY){let r=await VS(e);if(r!=null&&r.tenantId!==t)throw new cc(e)}if(!L.SELF_HOSTED&&!L.DISABLE_ACCOUNT_PORTAL){let r=await xp(e);if(r&&r.verified&&r.tenantId!==t)throw new cc(e)}}o(AD,"validateUniqueUser");async function RD(e){if(!L.SELF_HOSTED&&!L.DISABLE_ACCOUNT_PORTAL){let t=await ay(e.map(r=>r.email));return e.find(r=>t.map(n=>n.email).includes(r.email))}}o(RD,"getAccountHolderFromUsers");var h3=o(async e=>{await Yi.deleted(e),zi(e)&&await Yi.permissionBuilderRemoved(e),lf(e)&&await Yi.permissionAdminRemoved(e)},"handleDeleteEvents"),tjt=o(async(e,t,r)=>{for(let[n,i]of Object.entries(t))(!r||r[n]!==i)&&await $S.assigned(e,i)},"assignAppRoleEvents"),rjt=o(async(e,t,r)=>{if(r)for(let[n,i]of Object.entries(r))(!t||t[n]!==i)&&await $S.unassigned(e,i)},"unassignAppRoleEvents"),njt=o(async(e,t)=>{let r=e.roles,n=t?.roles;await tjt(e,r,n),await rjt(e,r,n)},"handleAppRoleEvents"),m3=o(async(e,t)=>{let r=Ue(),n;!L.SELF_HOSTED&&!L.DISABLE_ACCOUNT_PORTAL&&(n=await wS(r)),await na.identifyUser(e,n),t?(await Yi.updated(e),ojt(e,t)&&await Yi.permissionBuilderRemoved(e),ajt(e,t)&&await Yi.permissionAdminRemoved(e),!t.forceResetPassword&&e.forceResetPassword&&e.password&&await Yi.passwordForceReset(e),e.password!==t.password&&await Yi.passwordUpdated(e)):await Yi.created(e),ijt(e,t)&&await Yi.permissionBuilderAssigned(e),sjt(e,t)&&await Yi.permissionAdminAssigned(e),await njt(e,t)},"handleSaveEvents"),ijt=o((e,t)=>RCe(e,t,zi),"isAddingBuilder"),ojt=o((e,t)=>OCe(e,t,zi),"isRemovingBuilder"),sjt=o((e,t)=>RCe(e,t,lf),"isAddingAdmin"),ajt=o((e,t)=>OCe(e,t,lf),"isRemovingAdmin"),RCe=o((e,t,r)=>!(!r(e)||t&&r(t)),"isAddingPermission"),OCe=o((e,t,r)=>!(r(e)||!t||!r(t)),"isRemovingPermission");var ljt=o(async e=>{let t=e._id;await za.removeUser(e),await h3(e),await df.invalidateUser(t),await SS(t,{reason:"bulk-deletion"})},"bulkDeleteProcessing"),Ja=class e{static{o(this,"UserDB")}static init(t,r,n){e.quotas=t,e.groups=r,e.features=n}static async isPreventPasswordActions(t,r){return L.ENABLE_SSO_MAINTENANCE_MODE&&Ya(t)?!1:await e.features.isSSOEnforced()||Gh(t)?!0:(r||(r=await wS(Ue())),!!(r&&r.email===t.email&&GA(r)))}static async buildUser(t,r={hashPassword:!0,requirePassword:!0},n,i,s){let{password:a,_id:u}=t;i&&!i.password&&(r.requirePassword=!1);let c;if(a&&a!==i?.password){if(await e.isPreventPasswordActions(t,s))throw new K("Password change is disabled for this user",400);if(!r.skipPasswordValidation){let d=aOe(a);if(!d.valid)throw new K(d.error,400)}c=r.hashPassword?await y1(a):a}else i&&(c=i.password);let l=r.requirePassword&&!await e.features.isSSOEnforced();if(!c&&l)throw"Password must be specified.";u=u||tg();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 gt().allDocs(Ud(null,{include_docs:!0}))).rows.map(n=>n.doc)}static async countUsersByApp(t){return{userCount:(await ID(t,{})).length}}static async getUsersByAppAccess(t){return await g3(t.appId,{limit:t.limit||50})}static async getUserByEmail(t){return ia(t)}static async getUser(t){let r=await Bp(t);return r&&delete r.password,r}static async bulkGet(t){return await OD(t)}static async bulkUpdate(t){return await QS(t)}static async save(t,r={}){r.hashPassword==null&&(r.hashPassword=!0),r.requirePassword==null&&(r.requirePassword=!0);let n=Ue(),i=gt(),{email:s,_id:a,userGroups:u=[],roles:c}=t;if(!s&&!a)throw new Error("_id or email is required");let l;if(a)try{if(l=await Bp(a),s&&l.email!==s&&!r.allowChangingEmail)throw new Error("Email address cannot be changed")}catch(g){if(g.status!==404)throw g}if(!l&&s&&(l=await ia(s),l&&l._id!==a))throw new cc(s);let f=1,d=0;if((r.isAccountHolder||l)&&(f=0,d=1),l){let[g,y]=await Fp([l,t]);d=g!==y?1:0}let p=!l,h=!!l&&!!s&&l.email!==s,m=!r.isAccountHolder&&!!s&&(p||h);return e.quotas.addUsers(f,d,async()=>{m&&await AD(s,n);let g=await e.buildUser(t,r,n,l);r.currentUserId&&r.currentUserId===l?._id&&(g=y3(g,l)),!l&&c?.length&&(g.roles={...c});let y=[];if(!a&&u.length>0)for(let b of u)y.push(e.groups.addUsers(b,[g._id]));try{let b=await i.put(g);return g._rev=b.rev,await m3(g,l),l&&g.email!==l.email&&await za.removeUser({email:l.email}),await za.addUser(n,g._id,g.email,g.ssoId),await df.invalidateUser(b.id),await Promise.all(y),i.get(g._id)}catch(b){throw b.status===409?"User exists already":b}})}static async bulkCreate(t,r){let n=Ue(),i=[],s=[],a=[],u=t.map(p=>p.email),c=await p3(u),l=[];for(let p of t){let h=s.find(g=>g.email.toLowerCase()===p.email.toLowerCase()),m=c.includes(p.email.toLowerCase());if(h||m){l.push({email:p.email,reason:"Unavailable"});continue}p.userGroups=r||[],s.push(p),await HS(p)&&a.push(p)}let f=await wS(n),d=await e.features.isSSOEnforced();return e.quotas.addUsers(s.length,a.length,async()=>{for(let m of s)d&&delete m.password,i.push(e.buildUser(m,{hashPassword:!0,requirePassword:!d},n,void 0,f));let p=await Promise.all(i);await QS(p);for(let m of p)await za.addUser(n,m._id,m.email),await m3(m,void 0);let h=p.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=gt(),n={successful:[],unsuccessful:[]},i=await RD(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 a=(await r.allDocs({include_docs:!0,keys:t.map(h=>h.userId)})).rows.map(h=>h.doc),u=a.map(h=>({...h,_deleted:!0})),c=await QS(u),f=(await Fp(a)).filter(h=>h).length,d=[];for(let h of a){let g=(await VS(h._id)).ssoId;g&&(await SD(g)).filter(b=>b.ssoId==null).forEach(b=>{d.push({...b,_deleted:!0})}),await ljt(h)}await Cp().bulkDocs(d),await e.quotas.removeUsers(u.length,f);let p={};return a.reduce((h,m)=>(h[m._id]=m,h),p),c.forEach(h=>{let m=p[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=gt(),n=await r.get(t),i=n._id;if(!L.SELF_HOSTED&&!L.DISABLE_ACCOUNT_PORTAL){let a=n.email;if(await xp(a))throw n.userId===Du()._id?new K('Please visit "Account" to delete this user',400):new K("Account holder cannot be deleted",400)}await za.removeUser(n),await r.remove(i,n._rev);let s=await HS(n)?1:0;await e.quotas.removeUsers(1,s),await h3(n),await df.invalidateUser(i),await SS(i,{reason:"deletion"})}static async createAdminUser(t,r,n){let i=n?.password,s={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&&(s.ssoId=n.ssoId),await Yg(bn.CHECKLIST),await e.save(s,{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 KS(e){return Array.isArray(e)?e.map(t=>{if(t)return delete t.password,t}):e&&(delete e.password,e)}o(KS,"removeUserPassword");async function OD(e,t){let n=(await gt().allDocs({keys:e,include_docs:!0})).rows.map(i=>i.doc);return t?.cleanup&&(n=KS(n)),n}o(OD,"bulkGetGlobalUsersById");async function djt(){let e=gt(),t=`us${ce}`;return(await e.allDocs({startkey:t,endkey:`${t}${Mn}`})).rows.map(n=>n.id)}o(djt,"getAllUserIds");async function pjt(){let e=gt(),t=`us${ce}`;return(await e.allDocs({startkey:t,endkey:`${t}${Mn}`,include_docs:!0})).rows.map(n=>n.doc)}o(pjt,"getAllUsers");async function QS(e){return await gt().bulkDocs(e)}o(QS,"bulkUpdateGlobalUsers");async function Bp(e,t){let n=await gt().get(e);return t?.cleanup&&(n=KS(n)),n}o(Bp,"getById");async function ia(e,t){if(e==null)throw"Must supply an email address to view";let r=await Wu("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=KS(n)),n}o(ia,"getGlobalUserByEmail");async function hjt(e){try{let t=await ia(e);if(Array.isArray(t)||t!=null)return!0}catch{return!1}return!1}o(hjt,"doesUserExist");async function ID(e,t,r){if(typeof e!="string")throw new Error("Must provide a string based workspace ID");let n=bI(e,{include_docs:!0});n.startkey=t&&t.startkey?t.startkey:n.startkey;let i=await Wu("by_app",n);i||(i=[]);let s=Array.isArray(i)?i:[i];return r?.cleanup&&(s=KS(s)),s}o(ID,"searchGlobalUsersByApp");async function g3(e,t){let r=`roles.${e}`,n=[{"builder.global":!0},{"admin.global":!0}];if(e){let a={[r]:{$exists:!0}};n.push(a)}return(await gt().find({selector:{$or:n,_id:{$regex:"^us_"}},limit:t?.limit||50})).docs}o(g3,"searchGlobalUsersByAppAccess");function ICe(e,t){if(t)return yI(Io(e),t._id)}o(ICe,"getGlobalUserByAppPage");async function CCe(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,s=await Wu("by_email2",{...t,startkey:i,endkey:`${n}${Mn}`});s||(s=[]);let a=Array.isArray(s)?s:[s];return r?.cleanup&&(a=KS(a)),a}o(CCe,"searchGlobalUsersByEmail");var mjt=8;async function xCe({bookmark:e,query:t,appId:r,limit:n}={}){let i=gt(),s=n??mjt,u={include_docs:!0,limit:s+1};e&&(u.startkey=e);let c,l="_id",f;return t?.equal?._id?c=[await Bp(t.equal._id)]:r?(c=await ID(r,u),f=o(d=>ICe(r,d),"getKey")):t?.string?.email?(c=await CCe(t?.string?.email,u),l="email"):t?.oneOf?._id?c=await OD(t?.oneOf?._id,{cleanup:!0}):t?(c=(await i.allDocs(Ud(null,{...u,limit:void 0}))).rows.map(p=>p.doc),c=Tt.search(c,{query:t,limit:u.limit}).rows):c=(await i.allDocs(Ud(null,u))).rows.map(p=>p.doc),Nq(c,s,{paginate:!0,property:l,getKey:f})}o(xCe,"paginatedUsers");async function gjt(){return(await Mq("by_email2",{limit:0,include_docs:!1})).total_rows}o(gjt,"getUserCount");async function yjt(){let e=0;async function t(r){let n=await xCe({bookmark:r}),i=await Fp(n.data);e+=i.filter(s=>s).length,n.hasNextPage&&await t(n.nextPage)}return o(t,"iterate"),await t(),e}o(yjt,"getCreatorCount");function bjt(e){return delete e.admin,delete e.builder,e}o(bjt,"removePortalUserPermissions");function y3(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}o(y3,"cleanseUserObject");async function _jt(e,t){let r=Io(t);e.builder??={},e.builder.creator=!0,e.builder.apps??=[],e.builder.apps.push(r),await Ja.save(e,{hashPassword:!1})}o(_jt,"addAppBuilder");async function wjt(e,t){let r=Io(t);e.builder&&e.builder.apps?.includes(r)&&(e.builder.apps=e.builder.apps.filter(n=>n!==r)),await Ja.save(e,{hashPassword:!1})}o(wjt,"removeAppBuilder");var DCe=3600;async function Ejt(e,t){let n=await qq(t).get(e);if(n.budibaseAccess=!0,!L.SELF_HOSTED&&!L.DISABLE_ACCOUNT_PORTAL){let i=await xp(n.email);i&&(n.account=i,n.accountPortalAccess=!0)}return n}o(Ejt,"populateFromDB");async function Sjt(e){let t=await Ja.bulkGet(e),r=e.filter((i,s)=>!t[s]),n=t.filter(i=>i);return await Promise.all(n.map(async i=>{if(i.budibaseAccess=!0,!L.SELF_HOSTED&&!L.DISABLE_ACCOUNT_PORTAL){let s=await xp(i.email);s&&(i.account=s,i.accountPortalAccess=!0)}})),r.length?{users:n,notFoundIds:r}:{users:n}}o(Sjt,"populateUsersFromDB");async function zS({userId:e,tenantId:t,email:r,populateUser:n}){if(n||(n=Ejt),!t)try{t=Ue()}catch{t=await za.lookupTenantId(e)}let i=await Hw(),s=await i.get(e);return s||(s=await n(e,t,r),await i.store(e,s,DCe)),s&&!s.tenantId&&t&&(s.tenantId=t),s.userGroups&&!cn.users.isGlobalBuilder(s)&&await ji(t,async()=>{let a=await Ja.getGroupBuilderAppIds(s);if(a.length){let u=s.builder?.apps||[];s.builder={apps:[...new Set(u.concat(a))]}}}),s}o(zS,"getUser");async function Tjt(e){let t=await Hw(),r=await t.bulkGet(e),n=e.filter(a=>!r[a]),i=Object.values(r).filter(a=>!!a),s;if(n.length){let a=await Sjt(n);s=a.notFoundIds;for(let u of a.users)await t.store(u._id,u,DCe);i.push(...a.users)}return{users:i,notFoundIds:s}}o(Tjt,"getUsers");async function YS(e){await(await Hw()).delete(e)}o(YS,"invalidateUser");var U3={};G(U3,{Writethrough:()=>k3});var Oi={};G(Oi,{AUTO_EXTEND_POLLING_MS:()=>h0e,doWithLock:()=>N3,newRedlock:()=>Wp});var p0e=U(d0e());async function $jt(e,t){if(e==="custom")return Wp(t);switch(e){case"try_once":return Wp(my.TRY_ONCE);case"try_twice":return Wp(my.TRY_TWICE);case"default":return Wp(my.DEFAULT);case"delay_500":return Wp(my.DELAY_500);case"auto_extend":return Wp(my.AUTO_EXTEND);default:throw Fe.unreachable(e)}}o($jt,"getClient");var my={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 Wp(e={}){let t={...my.DEFAULT,...e},n=(await Iq()).client;return new p0e.default([n],t)}o(Wp,"newRedlock");function Vjt(e){let r=`lock:${e.systemLock?"system":Ue()}_${e.name}`;return e.resource&&(r=r+`_${e.resource}`),r}o(Vjt,"getLockName");var h0e=nr.fromSeconds(10).toMs();async function N3(e,t){let r=await $jt(e.type,e.customOptions),n,i;try{let s=Vjt(e),a=e.type==="auto_extend"?h0e:e.ttl;if(n=await r.lock(s,a),e.type==="auto_extend"){let c=o(()=>{i=setTimeout(async()=>{n=await n.extend(a,()=>e.onExtend&&e.onExtend()),c()},a/2)},"extendInIntervals");c()}return{executed:!0,result:await t()}}catch(s){if(s.name==="LockError"){if(e.type==="try_once")return{executed:!1};throw s}else throw s}finally{clearTimeout(i),await n?.unlock()}}o(N3,"doWithLock");var m0e=1e4,L3=null;async function kD(){if(!L3){let e=await Oq();L3=new Ap(e)}return L3}o(kD,"getCache");function ZS(e,t){return e.name+t}o(ZS,"makeCacheKey");function M3(e,t=null){return{doc:e,lastWrite:t||Date.now()}}o(M3,"makeCacheItem");async function Hjt(e,t,r=m0e){let n=await kD(),i=t._id,s;i&&(s=await n.get(ZS(e,i)));let a=!s||s.lastWrite<Date.now()-r,u=t;return a&&((await N3({type:"try_once",name:"persist_writethrough",resource:i,ttl:15e3},async()=>{let l=o(async f=>{let d=await e.put(f,{force:!0});u._id=d.id,u._rev=d.rev},"writeDb");try{await l(t)}catch(f){if(f.status!==409)throw f;zg("Ignoring conflict in write-through cache")}})).executed||zg("Ignoring redlock conflict in write-through cache")),s=M3(u,a?null:s?.lastWrite),u._id&&await n.store(ZS(e,u._id),s),{ok:!0,id:u._id,rev:u._rev}}o(Hjt,"put");async function Qjt(e,t){let r=await kD(),n=ZS(e,t),i=await r.get(n);if(!i){let s=await e.get(t);i=M3(s),await r.store(n,i)}return i.doc}o(Qjt,"get");async function Kjt(e,t){let r=await kD(),n=ZS(e,t),i=await r.get(n);if(!i){let s=await e.tryGet(t);if(!s)return null;i=M3(s),await r.store(n,i)}return i.doc}o(Kjt,"tryGet");async function zjt(e,t,r){let n=await kD();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(ZS(e,i))}finally{await e.remove(i,r)}}o(zjt,"remove");var k3=class{static{o(this,"Writethrough")}constructor(t,r=m0e){this.db=t,this.writeRateMs=r}async put(t,r=this.writeRateMs){return Hjt(this.db,t,r)}async get(t){return Qjt(this.db,t)}async tryGet(t){return Kjt(this.db,t)}async remove(t,r){return zjt(this.db,t,r)}};function rT(e){return`config${ce}${e}`}o(rT,"generateConfigID");var MD="en";function Yjt(){return{_id:rT("translations"),type:"translations",config:{defaultLocale:MD,locales:{[MD]:{label:"English",overrides:{}}}}}}o(Yjt,"createDefaultTranslationsConfig");function Jjt(e){let t=e?.defaultLocale||MD,r={...e?.locales??{}};r[t]||(r[t]={label:t===MD?"English":t,overrides:{}});for(let n of Object.keys(r))r[n].overrides||(r[n]={...r[n],overrides:{}});return{defaultLocale:t,locales:r}}o(Jjt,"prepareTranslationsConfig");async function Ii(e){let t=gt();try{return await t.get(rT(e))}catch(r){if(r.status===404)return;throw r}}o(Ii,"getConfig");async function Xjt(e){return e._id||(e._id=rT(e.type)),gt().put(e)}o(Xjt,"save");async function g0e(){let e=await Ii("translations");return e?(e.config=Jjt(e.config),e):Yjt()}o(g0e,"getTranslationsConfigDoc");async function Zjt(){return(await g0e()).config}o(Zjt,"getTranslationsConfig");async function uy(){let e=await Ii("settings");return e||(e={_id:rT("settings"),type:"settings",config:{}}),e.config.platformUrl=await nT({tenantAware:!0,config:e.config}),e.config.analyticsEnabled=await z0({config:e.config}),e}o(uy,"getSettingsConfigDoc");async function B3(){return(await uy()).config}o(B3,"getSettingsConfig");async function nT(e={tenantAware:!0}){let t=L.PLATFORM_URL||"http://localhost:10000";if(!L.SELF_HOSTED&&L.MULTI_TENANCY&&e.tenantAware){let r=Ue();t.includes("localhost:")||(t=t.replace("://",`://${r}.`))}else if(L.SELF_HOSTED){let r=e?.config?e.config:(await Ii("settings"))?.config;r?.platformUrl&&(t=r.platformUrl)}return t}o(nT,"getPlatformUrl");var z0=o(async e=>{if(!L.SELF_HOSTED)return!!L.ENABLE_ANALYTICS;let t=await ef(bn.ANALYTICS_ENABLED,86400,async()=>{let n=e?.config?e.config:(await Ii("settings"))?.config;if(n?.analyticsEnabled===!1)return!1;if(n?.analyticsEnabled===!0)return!0});if(t!==void 0)return t;let r=L.ENABLE_ANALYTICS;return!(r===0||r===!1)},"analyticsEnabled");async function eWt(){return await Ii("google")}o(eWt,"getGoogleConfigDoc");async function UD(){return(await eWt())?.config}o(UD,"getGoogleConfig");async function q3(){if(!L.SELF_HOSTED)return F3();let e=await UD();return(!e||!e.activated)&&(e=F3()),e}o(q3,"getGoogleDatasourceConfig");function F3(){if(L.GOOGLE_CLIENT_ID&&L.GOOGLE_CLIENT_SECRET)return{clientID:L.GOOGLE_CLIENT_ID,clientSecret:L.GOOGLE_CLIENT_SECRET,activated:!0}}o(F3,"getDefaultGoogleConfig");async function tWt(){return Ii("logos_oidc")}o(tWt,"getOIDCLogosDoc");async function rWt(){return Ii("oidc")}o(rWt,"getOIDCConfigDoc");async function nWt(){let e=(await rWt())?.config;return e?.configs&&e.configs[0]}o(nWt,"getOIDCConfig");async function j3(e){let t=(await Ii("oidc"))?.config;return t&&t.configs.filter(r=>r.uuid===e)[0]}o(j3,"getOIDCConfigById");async function y0e(){return Ii("smtp")}o(y0e,"getSMTPConfigDoc");async function iWt(e){let t=await y0e();if(t)return t.config;let r=L.SELF_HOSTED||!e;if(L.SMTP_FALLBACK_ENABLED&&r)return{port:L.SMTP_PORT,host:L.SMTP_HOST,secure:!1,from:L.SMTP_FROM_ADDRESS,auth:{user:L.SMTP_USER,pass:L.SMTP_PASSWORD},fallback:!0}}o(iWt,"getSMTPConfig");async function oWt(){return(await Ii("scim"))?.config}o(oWt,"getSCIMConfig");async function sWt(){return Ii("ai")}o(sWt,"getAIConfig");async function aWt(){return Ii("recaptcha")}o(aWt,"getRecaptchaConfig");var Et={};G(Et,{AccessController:()=>$3,BUILTIN_ROLE_IDS:()=>V3,Role:()=>mf,RoleHierarchyTraversal:()=>FD,RoleIDVersion:()=>H3,builtinRoleToNumber:()=>iT,checkForRoleResourceArray:()=>E0e,externalRole:()=>pWt,findRole:()=>oT,getAllRoleIds:()=>yWt,getAllRoles:()=>Y3,getBuiltinRole:()=>_0e,getBuiltinRoles:()=>K3,getDBRoleID:()=>S0e,getExternalRoleID:()=>gf,getExternalRoleIDs:()=>T0e,getRole:()=>hWt,getUserRoleHierarchy:()=>z3,getUserRoleIdHierarchy:()=>w0e,isBuiltin:()=>Gp,lowerBuiltinRoleID:()=>dWt,prefixRoleIDNoBuiltin:()=>G3,roleIDsAreEqual:()=>hs,roleToNumber:()=>fWt,saveRoles:()=>mWt,validInherits:()=>lWt});var b0e=require("lodash"),BD=U(require("lodash/fp/cloneDeep")),W3=U(require("semver"));var V3={ADMIN:"ADMIN",POWER:"POWER",BASIC:"BASIC",PUBLIC:"PUBLIC"},pr={...V3,BUILDER:"BUILDER"},H3={UUID:void 0,NAME:"name"};function cWt(e,t){return Array.isArray(t)?t.filter(r=>e.includes(r)).length===t.length:e.includes(t)}o(cWt,"rolesInList");var mf=class{constructor(t,r,n,i){this.permissions={};this._id=t,this.name=r,this.uiMetadata=i,this.permissionId=n,this.version=H3.NAME}static{o(this,"Role")}addInheritance(t){return t&&typeof t=="string"?t=G3(t):t&&Array.isArray(t)&&(t=t.map(G3)),this.inherits=t,this}},FD=class{static{o(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 s of t.inherits){let a=oT(s,n,r);a&&(i=i.concat(this.walk(a)))}else{let s=[],a=t;for(;a&&a.inherits&&!cWt(s,a.inherits);){if(Array.isArray(a.inherits))return i.concat(this.walk(a));if(s.push(a.inherits),a=oT(a.inherits,n,r),a&&i.push(a),de.roles.checkForRoleInheritanceLoops(i))break}}return(0,b0e.uniqBy)(i,s=>s._id)}},Q3={ADMIN:new mf(pr.ADMIN,pr.ADMIN,"admin",{displayName:"App admin",description:"Can do everything",color:"var(--spectrum-global-color-static-red-400)"}).addInheritance(pr.POWER),POWER:new mf(pr.POWER,pr.POWER,"power",{displayName:"App power user",description:"An app user with more access",color:"var(--spectrum-global-color-static-orange-400)"}).addInheritance(pr.BASIC),BASIC:new mf(pr.BASIC,pr.BASIC,"write",{displayName:"App user",description:"Any logged in user",color:"var(--spectrum-global-color-static-green-400)"}).addInheritance(pr.PUBLIC),PUBLIC:new mf(pr.PUBLIC,pr.PUBLIC,"public",{displayName:"Public user",description:"Accessible to anyone",color:"var(--spectrum-global-color-static-blue-400)"}),BUILDER:new mf(pr.BUILDER,pr.BUILDER,"admin",{displayName:"Builder user",description:"Users that can edit this app",color:"var(--spectrum-global-color-static-magenta-600)"})};function K3(){return(0,BD.default)(Q3)}o(K3,"getBuiltinRoles");function Gp(e){return Object.values(V3).includes(e)}o(Gp,"isBuiltin");function G3(e){return Gp(e)?e:qu(e)}o(G3,"prefixRoleIDNoBuiltin");function _0e(e){let t=Object.values(Q3).find(r=>e.includes(r._id));if(t)return(0,BD.default)(t)}o(_0e,"getBuiltinRole");function lWt(e,t){if(!t)return!1;let r=o(n=>e.find(i=>hs(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)}o(lWt,"validInherits");function iT(e){let t=K3(),r=Object.values(t).length+1;if(hs(e,pr.ADMIN)||hs(e,pr.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}o(iT,"builtinRoleToNumber");async function fWt(e){if(Gp(e))return iT(e);let t=await z3(e,{defaultPublic:!0}),r=o(n=>{if(!n.inherits)return 0;if(Array.isArray(n.inherits)){let i=n.inherits.map(s=>{let a=t.find(u=>hs(u._id,s));if(a)return r(a)+1}).filter(s=>s).sort().pop();if(i!=null)return i}else if(Gp(n.inherits))return iT(n.inherits)+1;return 0},"findNumber");return Math.max(...t.map(r))}o(fWt,"roleToNumber");function dWt(e,t){return e?t&&iT(e)>iT(t)?t:e:t}o(dWt,"lowerBuiltinRoleID");function hs(e,t){return qu(e)===qu(t)}o(hs,"roleIDsAreEqual");function pWt(e){let t;return e._id&&(t=gf(e._id)),{...e,_id:t,inherits:T0e(e.inherits,e.version)}}o(pWt,"externalRole");function oT(e,t,r){let n=_0e(e);n||(e=qu(e));let i=t.find(s=>s._id&&hs(s._id,e));return!i&&!Gp(e)&&r?.defaultPublic?(0,BD.default)(Q3.PUBLIC):(n=Object.assign(n||{},i),n?._id&&(n._id=gf(n._id,n.version)),Object.keys(n).length===0?void 0:n)}o(oT,"findRole");async function hWt(e,t){let r=Xm(),n=[];if(!Gp(e)){let i=await r.tryGet(S0e(e));i&&n.push(i)}return oT(e,n,t)}o(hWt,"getRole");async function mWt(e){await Xm().bulkDocs(e.filter(r=>r._id).map(r=>({...r,_id:qu(r._id)})))}o(mWt,"saveRoles");async function gWt(e,t){let r=await Y3();if(hs(e,pr.ADMIN))return r;let n=oT(e,r,t),i=[];return n&&(i=new FD(r,t).walk(n)),i}o(gWt,"getAllUserRoles");async function w0e(e){return(await z3(e)).map(r=>r._id)}o(w0e,"getUserRoleIdHierarchy");async function z3(e,t){return gWt(e,t)}o(z3,"getUserRoleHierarchy");function E0e(e,t){if(e&&!Array.isArray(e[t])){let r=e[t];e[t]=[r],r==="write"&&e[t].push("read")}return e}o(E0e,"checkForRoleResourceArray");async function yWt(e){return(await Y3(e)).map(r=>r._id)}o(yWt,"getAllRoleIds");async function Y3(e){if(e)return Oo(e,t);{let r;try{r=Xm()}catch{}return t(r)}async function t(r){let n=[];r&&(n=(await r.allDocs(_I(null,{include_docs:!0}))).rows.map(u=>u.doc),n.forEach(u=>u._id=gf(u._id,u.version)));let i=K3(),s=[];!r||await bWt(r)?s=[pr.ADMIN,pr.POWER,pr.BASIC,pr.PUBLIC]:s=[pr.ADMIN,pr.BASIC,pr.PUBLIC];for(let a of s){let u=i[a],c=n.filter(l=>hs(l._id,a))[0];c==null?n.push(u||i.BASIC):(n=n.filter(l=>l._id!==c._id),c._id=gf(u._id,c.version),n.push({...u,...c,name:u.name,_id:gf(u._id,u.version)}))}for(let a of n)if(a.permissions)for(let u of Object.keys(a.permissions))a.permissions=E0e(a.permissions,u);return n}o(t,"internal")}o(Y3,"getAllRoles");async function bWt(e){let r=(await e.tryGet("app_metadata"))?.creationVersion;return!r||!W3.default.valid(r)?!0:!W3.default.gte(r,L.MIN_VERSION_WITHOUT_POWER_ROLE)}o(bWt,"shouldIncludePowerRole");var $3=class{static{o(this,"AccessController")}constructor(){this.userHierarchies={}}async hasAccess(t,r){if(t==null||t===""||hs(t,pr.BUILDER)||hs(r,t)||hs(r,pr.BUILDER))return!0;let n=r?this.userHierarchies[r]:null;return!n&&r&&(n=await w0e(r),this.userHierarchies[r]=n),n?.find(i=>hs(i,t))!==void 0}async checkScreensAccess(t,r){let n=[];for(let i of t){let s=await this.checkScreenAccess(i,r);s&&n.push(s)}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 S0e(e){return e?.startsWith("role")?e:qu(e)}o(S0e,"getDBRoleID");function gf(e,t){if(e.startsWith(`role${ce}`)&&(Gp(e)||t===H3.NAME)){let r=e.split(ce);return r.shift(),r.join(ce)}return e}o(gf,"getExternalRoleID");function T0e(e,t){return e&&(typeof e=="string"?gf(e,t):e.map(r=>gf(r,t)))}o(T0e,"getExternalRoleIDs");var Wr={};G(Wr,{BUILDER:()=>TWt,BUILTIN_PERMISSIONS:()=>qD,CREATOR:()=>vWt,GLOBAL_BUILDER:()=>AWt,PermissionImpl:()=>hr,PermissionLevel:()=>Vc,PermissionType:()=>$b,doesHaveBasePermission:()=>EWt,getAllowedLevels:()=>O0e,getBuiltinPermissionByID:()=>wWt,getBuiltinPermissions:()=>_Wt,isPermissionLevelHigherThanRead:()=>SWt,levelToNumber:()=>R0e});var v0e=U(require("lodash/flatten")),A0e=U(require("lodash/fp/cloneDeep"));var hr=class{static{o(this,"PermissionImpl")}constructor(t,r){this.type=t,this.level=r}};function R0e(e){switch(e){case"execute":return 0;case"read":return 1;case"write":return 2;case"admin":return 3;default:return-1}}o(R0e,"levelToNumber");function O0e(e){switch(e){case"execute":return["execute"];case"read":return["execute","read"];case"write":case"admin":return["execute","read","write"];default:return[]}}o(O0e,"getAllowedLevels");var qD={PUBLIC:{_id:"public",name:"Public",permissions:[new hr("webhook","execute")]},READ_ONLY:{_id:"read_only",name:"Read only",permissions:[new hr("query","read"),new hr("table","read"),new hr("app","read")]},WRITE:{_id:"write",name:"Read/Write",permissions:[new hr("query","write"),new hr("table","write"),new hr("automation","execute"),new hr("legacy_view","read"),new hr("app","read")]},POWER:{_id:"power",name:"Power",permissions:[new hr("table","write"),new hr("user","read"),new hr("automation","execute"),new hr("webhook","read"),new hr("legacy_view","read"),new hr("app","read")]},ADMIN:{_id:"admin",name:"Admin",permissions:[new hr("table","admin"),new hr("user","admin"),new hr("automation","admin"),new hr("webhook","read"),new hr("query","admin"),new hr("legacy_view","read"),new hr("app","read")]}};function _Wt(){return(0,A0e.default)(qD)}o(_Wt,"getBuiltinPermissions");function wWt(e){return Object.values(qD).find(r=>r._id===e)}o(wWt,"getBuiltinPermissionByID");function EWt(e,t,r){let n=[...new Set(r.map(a=>a.permissionId))],i=Object.values(qD),s=(0,v0e.default)(i.filter(a=>n.indexOf(a._id)!==-1).map(a=>a.permissions));for(let a of s)if(a.type===e&&O0e(a.level).indexOf(t)!==-1)return!0;return!1}o(EWt,"doesHaveBasePermission");function SWt(e){return R0e(e)>1}o(SWt,"isPermissionLevelHigherThanRead");var TWt="builder",vWt="creator",AWt="globalBuilder";var jD=U(require("crypto")),x0e=U(require("dd-trace")),D0e=require("lodash"),RWt=U(s3());var I0e;function P0e(e){let t=e.split(",").map(n=>n.split(":")),r=[];for(let[n,...i]of t)for(let s of i){let a=!0;s.startsWith("!")&&(s=s.slice(1),a=!1),r.push({tenantId:n,key:s,value:a})}return r}o(P0e,"parseEnvFlags");function OWt(){return P0e(L.TENANT_FEATURE_FLAGS||"")}o(OWt,"getEnvFlags");var J3=class{constructor(t){this.flagSchema=t;this.setId=jD.randomUUID()}static{o(this,"FlagSet")}defaults(){return(0,D0e.cloneDeep)(this.flagSchema)}isFlagName(t){return this.flagSchema[t]!==void 0}async isEnabled(t){return(await this.fetch())[t]}async fetch(){return await x0e.default.trace("features.fetch",async t=>{let r=Eq(this.setId);if(r)return t?.addTags({fromCache:!0}),r;let n={},i=this.defaults(),s=Ue(),a=new Set;if(nI())return i;for(let{tenantId:d,key:p,value:h}of OWt())if(!(!d||d!=="*"&&d!==s)&&(n.readFromEnvironmentVars=!0,h===!1&&a.add(p),!!this.isFlagName(p))){if(typeof i[p]!="boolean")throw new Error(`Feature: ${p} is not a boolean`);i[p]=h,n[`flags.${p}.source`]="environment"}let u=Du(),c=u?._id;if(!c){let d=_q();d&&(c=jD.createHash("sha512").update(d).digest("hex"))}let l=u?.tenantId;if(l||(l=s),n["identity.type"]=u?.type,n["identity._id"]=u?._id,n.tenantId=l,n.userId=c,I0e&&c){n.readFromPostHog=!0;let d=await uy(),p={tenantId:l},h={tenant:{id:l}};d.config.createdVersion&&(h.tenant.createdVersion=d.config.createdVersion),d.createdAt&&(h.tenant.createdAt=`${d.createdAt}`);let m=await I0e.getAllFlags(c,{personProperties:p,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||a.has(g)))try{i[g]=y,n[`flags.${g}.source`]="posthog"}catch(b){console.warn(`Error parsing posthog flag "${g}": ${y}`,b)}}}let f=Tq();for(let[d,p]of Object.entries(f))this.isFlagName(d)&&typeof p=="boolean"&&(i[d]=p,n[`flags.${d}.source`]="override");Sq(this.setId,i);for(let[d,p]of Object.entries(i))n[`flags.${d}.value`]=p;return t?.addTags(n),i})}},IWt={USE_ZOD_VALIDATOR:!1,AI_AGENTS:!1,DEBUG_UI:L.isDev(),DEV_USE_CLIENT_FROM_STORAGE:!1},Zqr=new J3(IWt);var st={};G(st,{adminOnly:()=>oP,auditLog:()=>sP,authError:()=>zn,buildAuthMiddleware:()=>L3t,buildCsrfMiddleware:()=>M3t,buildTenancyMiddleware:()=>k3t,builderOnly:()=>hP,builderOrAdmin:()=>mP,google:()=>_c,internalApi:()=>yP,joiValidator:()=>fT,oidc:()=>wc,passport:()=>U3t,platformLogout:()=>W3t,refreshOAuthToken:()=>q3t,ssoCallbackUrl:()=>bf,updateUserOAuth:()=>j3t,workspaceBuilderOrAdmin:()=>BP});var qP={};G(qP,{activeTenant:()=>dke,adminOnly:()=>oP,auditLog:()=>sP,authError:()=>zn,authenticated:()=>pP,builderOnly:()=>hP,builderOrAdmin:()=>mP,correlation:()=>L0e,csp:()=>ZPe,csrf:()=>gP,datasource:()=>y3t,errorHandling:()=>tNe,featureFlagCookie:()=>rNe,google:()=>_c,internalApi:()=>yP,ip:()=>nNe,joiValidator:()=>fT,local:()=>Ty,oidc:()=>wc,pino:()=>GPe,querystringToBody:()=>fke,ssoCallbackUrl:()=>bf,tenancy:()=>FP,workspaceBuilderOrAdmin:()=>BP});var N0e=require("uuid");var DWt=OI(),L0e=o((e,t)=>{let r=e.headers["x-budibase-correlation-id"];return r||(r=(0,N0e.v4)()),DWt.withId(r,()=>t())},"correlationMiddleware");var yHt=WPe(),bHt=OI();function _Ht(){return{logger:W0,genReqId:bHt.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})}}}o(_Ht,"pinoSettings");function wHt(){return L.HTTP_LOGGING?yHt(_Ht()):(e,t)=>t()}o(wHt,"getMiddleware");var GPe=wHt();var oP=o(async(e,t)=>(!e.internal&&!Ya(e.user)&&e.throw(403,"Admin user only endpoint."),t()),"adminOnly");var sP=o(async(e,t)=>t(),"auditLog");var EHt=/\/:(.*?)(\/.*)?$/g,Qp=o(e=>e?e.map(t=>{let r=t.route,n=t.method,i=r.match(EHt);if(i)for(let s of i){let u="/.*"+(s.endsWith("/")?"/":"");r=r.replace(s,u)}return{regex:new RegExp(r),method:n,route:r}}):[],"buildMatcherRegex"),Kp=o((e,t)=>t.find(({regex:r,method:n})=>{let i=r.test(e.request.url),s=n==="ALL"?!0:e.request.method.toLowerCase()===n.toLowerCase();return i&&s}),"matches");var sa={};G(sa,{SecretOption:()=>HPe,decrypt:()=>YQ,decryptFile:()=>OHt,encrypt:()=>vHt,encryptFile:()=>AHt,getSecret:()=>zQ});var hc=U(require("crypto")),yf=U(require("fs")),HQ=require("path"),QQ=U(require("zlib"));var aP="aes-256-ctr",VPe="-",SHt=1e4,THt=32,uP=16,KQ=16,HPe=(r=>(r.API="api",r.ENCRYPTION="encryption",r))(HPe||{});function zQ(e){let t,r;switch(e){case"encryption":t=L.ENCRYPTION_KEY,r="ENCRYPTION_KEY";break;case"api":default:t=L.API_ENCRYPTION_KEY,r="API_ENCRYPTION_KEY";break}if(!t)throw new Error(`Secret "${r}" has not been set in environment.`);return t}o(zQ,"getSecret");function cP(e,t){return hc.default.pbkdf2Sync(e,new Uint8Array(t),SHt,THt,"sha512")}o(cP,"stretchString");function vHt(e,t="api"){let r=hc.default.randomBytes(uP),n=cP(zQ(t),r),i=hc.default.createCipheriv(aP,new Uint8Array(n),new Uint8Array(r)),s=i.update(e,"utf8"),a=i.final(),u=Buffer.concat([new Uint8Array(s),new Uint8Array(a)]).toString("hex");return`${r.toString("hex")}${VPe}${u}`}o(vHt,"encrypt");function YQ(e,t="api"){let[r,n]=e.split(VPe),i=Buffer.from(r,"hex"),s=cP(zQ(t),i),a=hc.default.createDecipheriv(aP,new Uint8Array(s),new Uint8Array(i)),u=a.update(n,"hex"),c=a.final();return Buffer.concat([new Uint8Array(u),new Uint8Array(c)]).toString()}o(YQ,"decrypt");async function AHt({dir:e,filename:t},r){let n=`${t}.enc`,i=(0,HQ.join)(e,t);if(yf.default.lstatSync(i).isDirectory())throw new Error("Unable to encrypt directory");let s=yf.default.createReadStream(i),a=yf.default.createWriteStream((0,HQ.join)(e,n)),u=hc.default.randomBytes(uP),c=hc.default.randomBytes(KQ),l=cP(r,u),f=hc.default.createCipheriv(aP,new Uint8Array(l),new Uint8Array(c));return a.write(u),a.write(c),s.pipe(QQ.default.createGzip()).pipe(f).pipe(a),new Promise(d=>{a.on("finish",()=>{d({filename:n,dir:e})})})}o(AHt,"encryptFile");async function RHt(e){let t=yf.default.createReadStream(e),r=await $Pe(t,uP),n=await $Pe(t,KQ);return t.close(),{salt:r,iv:n}}o(RHt,"getSaltAndIV");async function OHt(e,t,r){if(yf.default.lstatSync(e).isDirectory())throw new Error("Unable to decrypt directory");let{salt:n,iv:i}=await RHt(e),s=yf.default.createReadStream(e,{start:uP+KQ}),a=yf.default.createWriteStream(t),u=cP(r,n),c=hc.default.createDecipheriv(aP,new Uint8Array(u),new Uint8Array(i)),l=QQ.default.createGunzip();return s.pipe(c).pipe(l).pipe(a),new Promise((f,d)=>{a.on("finish",()=>{a.close(),f()}),s.on("error",p=>{a.close(),d(p)}),c.on("error",p=>{a.close(),d(p)}),l.on("error",p=>{a.close(),d(p)}),a.on("error",p=>{a.close(),d(p)})})}o(OHt,"decryptFile");function $Pe(e,t){return new Promise((r,n)=>{let i=0,s=[];e.on("readable",()=>{let a;for(;(a=e.read(t-i))!==null;)s.push(a),i+=a.length;r(Buffer.concat(s.map(u=>new Uint8Array(u))))}),e.on("end",()=>{n(new Error("Insufficient data in the stream."))}),e.on("error",a=>{n(a)})})}o($Pe,"readBytes");var cT=class extends Error{constructor(r,n){super(r);this.code=n}static{o(this,"APIWarning")}},lP=class extends cT{static{o(this,"InvalidAPIKeyWarning")}constructor(){super("Invalid API key","invalid_api_key")}},fP=class extends cT{constructor(r){super(`Usage limit exceeded: '${r}'`,"usage_limit_exceeded");this.limitName=r}static{o(this,"UsageLimitWarning")}getPublicWarning(){return{limitName:this.limitName}}},Sy=class extends cT{constructor(r){super(`Feature disabled: '${r}'`,"feature_disabled");this.featureName=r,this.status=400}static{o(this,"FeatureDisabledWarning")}getPublicWarning(){return{featureName:this.featureName}}getPublicError(){return{featureName:this.featureName}}};var zPe=U(require("dd-trace"));var xHt=L.SESSION_UPDATE_PERIOD?parseInt(L.SESSION_UPDATE_PERIOD):60*1e3;function DHt(){return new Date(Date.now()-xHt).toISOString()}o(DHt,"timeMinusOneMinute");function KPe(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}o(KPe,"finalise");async function PHt(e,t){if(rE(e))return{valid:!0,user:void 0};let n=YQ(e).split(ce)[0];return ji(n,async()=>{let i;try{let s=gt();i=await Wu("by_api_key",{key:e},s)}catch{i=void 0}if(i)return{valid:!0,user:await zS({userId:i,tenantId:n,populateUser:t})};throw new lP})}o(PHt,"checkApiKey");function dP(e,t){let r=e.request.headers[t];if(Array.isArray(r))throw new Error("Unexpected header format");return r}o(dP,"getHeader");function pP(e=[],t={publicAllowed:!1}){let r=e?Qp(e):[];return async(n,i)=>{let s=!1,a=dP(n,"x-budibase-api-version");Kp(n,r)&&(s=!0);try{let c=dP(n,"x-budibase-token"),l=$u(n,"budibase:auth")||EI(c),f=dP(n,"x-budibase-api-key");!f&&n.request.headers.authorization&&(f=n.request.headers.authorization.split(" ")[1]);let d=dP(n,"x-budibase-tenant-id"),p=!1,h,m=!1,g;if(l&&!f){let b=l.sessionId,w=l.userId,E;try{E=await cOe(w,b),t&&t.populateUser?h=await zS({userId:w,tenantId:E.tenantId,email:E.email,populateUser:t.populateUser(n)}):h=await zS({userId:w,tenantId:E.tenantId,email:E.email}),h.csrfToken=E.csrfToken,g="cookie",E?.lastAccessedAt<DHt()&&await uOe(E),p=!0}catch(S){p=!1,console.warn(`Auth Error: ${S.message}`),Dl(n,"budibase:auth")}}if(!p&&f){let b=t.populateUser?t.populateUser(n):null,{valid:w,user:E}=await PHt(f,b);w&&(p=!0,g="api_key",h=E,m=!E)}!h&&d?h={tenantId:d}:h&&"password"in h&&delete h.password,p||(p=!1);let y=o(b=>b&&b.email,"isUser");return y(h)&&zPe.default.setUser({id:h._id,tenantId:h.tenantId,budibaseAccess:h.budibaseAccess,status:h.status}),KPe(n,{authenticated:p,user:h,internal:m,version:a,publicEndpoint:s,loginMethod:g}),y(h)?E1(h,n,i):i()}catch(c){if(console.warn(`Auth Error: ${c.message}`),c?.name==="JsonWebTokenError"?Dl(n,"budibase:auth"):c?.code==="invalid_api_key"&&n.throw(403,c.message),t&&t.publicAllowed||s)return KPe(n,{authenticated:!1,version:a,publicEndpoint:s}),i();n.throw(c.status||403,c)}}}o(pP,"authenticated");async function hP(e,t){if(e.internal)return t();let r=await Bd(e);return!r&&!L.isWorker()?e.throw(403,"This request required a workspace id."):!r&&!zi(e.user)?e.throw(403,"Builder user only endpoint."):r&&!ly(e.user,r)&&e.throw(403,"Workspace builder user only endpoint."),t()}o(hP,"builderOnly");async function mP(e,t){if(e.internal||Ya(e.user))return t();let r=await Bd(e);return!r&&!L.isWorker()?e.throw(403,"This request required a workspace id."):!r&&!zi(e.user)?e.throw(403,"Admin/Builder user only endpoint."):r&&!ly(e.user,r)&&e.throw(403,"Workspace Admin/Builder user only endpoint."),t()}o(mP,"builderOrAdmin");var XPe=U(require("crypto"));var YPe={"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'"]},JPe=/^[A-Za-z0-9-*:/.]+$/,ZPe=o(async(e,t)=>{let r=XPe.default.randomBytes(16).toString("base64");e.state.nonce=r;let n={...YPe};n["script-src"]=[...YPe["script-src"],`'nonce-${r}'`];let i={"media-src":L.CUSTOM_CSP_MEDIA_SRC,"script-src":L.CUSTOM_CSP_SCRIPT_SRC,"connect-src":L.CUSTOM_CSP_CONNECT_SRC,"img-src":L.CUSTOM_CSP_IMG_SRC,"font-src":L.CUSTOM_CSP_FONT_SRC,"frame-src":L.CUSTOM_CSP_FRAME_SRC};for(let[u,c]of Object.entries(i))if(c){let l=c.split(",").map(f=>f.trim()).filter(f=>JPe.test(f));n[u]=[...n[u]||[],...l]}if(e.user?.license?.features.includes("customAppScripts")&&e.appId)try{let u=await Kw.getWorkspaceMetadata(e.appId);if("name"in u)for(let c of u.scripts||[]){let l=(c.cspWhitelist||"").split(`
|
|
466
|
-
`).filter(d=>JPe.test(d)),f=["default-src","script-src","connect-src","media-src","img-src","font-src","frame-src"];for(let d of f)n[d]=[...n[d]||[],...l]}}catch(u){console.error(`Error occurred in Content-Security-Policy middleware: ${u}`)}let a=Object.entries(n).map(([u,c])=>`${u} ${c.join(" ")}`).join("; ");e.set("Content-Security-Policy",a),await t()},"contentSecurityPolicy");var NHt=["GET","HEAD","OPTIONS"],LHt=["application/x-www-form-urlencoded","multipart/form-data","text/plain"];function gP(e={noCsrfPatterns:[]}){let t=Qp(e.noCsrfPatterns);return async(r,n)=>{if(Kp(r,t)||NHt.indexOf(r.method)!==-1)return n();let s=r.get("content-type")?r.get("content-type").toLowerCase():"";if(!LHt.filter(c=>s.includes(c)).length||r.internal)return n();let a=r.user?.csrfToken;if(!a)return n();let u=r.get("x-csrf-token");return(!u||u!==a)&&r.throw(403,"Invalid CSRF token"),n()}}o(gP,"csrf");function eNe(e){if(e.includes("-----BEGIN PRIVATE KEY-----"))return!0;for(let t of one){let r=L[t];if(!(typeof r!="string"||r==="")&&e.includes(r))return!0}return!1}o(eNe,"stringContainsSecret");async function tNe(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:iOe(r)};if(eNe(JSON.stringify(i))&&(i={message:"Unexpected error",status:n,error:"Unexpected error"}),L.isTest()&&e.headers["x-budibase-include-stacktrace"]){let s=r;for(;s.cause;)s=s.cause;i.stack=s.stack}e.body=i}}o(tNe,"errorHandling");var rNe=o(async(e,t)=>{let n=$u(e,"budibase:featureflags")?.flags||{};await vq(n,async()=>{await t()})},"featureFlagCookie");async function yP(e,t){let r=e.request.headers["x-budibase-api-key"];return r||e.throw(403,"Unauthorized"),Array.isArray(r)&&e.throw(403,"Unauthorized"),rE(r)||e.throw(403,"Unauthorized"),t()}o(yP,"internalApi");async function nNe(e,t){return e.ip?await wq(e.ip,()=>t()):t()}o(nNe,"ip");var fT={};G(fT,{body:()=>kHt,params:()=>MHt});var JQ=U(require("joi"));function iNe(e,t,r){let n=r?.errorPrefix??`Invalid ${t}`;return(i,s)=>{if(!e)return s();let a=null,u=i.request?.[t];i[t]!=null?a=i[t]:u!=null&&(a=u),e.append&&(e=e.append({createdAt:JQ.default.any().optional(),updatedAt:JQ.default.any().optional()}));let{error:c}=e.validate(a,{allowUnknown:r?.allowUnknown});if(c){let l=c.message;n&&(l=`Invalid ${t} - ${l}`),i.throw(400,l)}return s()}}o(iNe,"validate");function kHt(e,t){return iNe(e,"body",t)}o(kHt,"body");function MHt(e,t){return iNe(e,"params",t)}o(MHt,"params");var Ty={};G(Ty,{authenticate:()=>BHt,options:()=>FHt});function zn(e,t,r){return e(r,null,{message:t})}o(zn,"authError");async function bf(e,t){if(t&&t.callbackURL)return t.callbackURL;let r=await B3(),n="/api/global/auth";return Cl()&&(n+=`/${Ue()}`),n+=`/${e}/callback`,`${r.platformUrl}${n}`}o(bf,"ssoCallbackUrl");var XQ="Invalid credentials",UHt="This account has expired. Please reset your password",FHt={passReqToCallback:!0};async function BHt(e,t,r,n){if(!t)return zn(n,"Email Required");if(!r)return zn(n,"Password Required");let i=await ia(t);return i==null?(console.info(`user=${t} could not be found`),zn(n,XQ)):i.status==="inactive"?(console.info(`user=${t} is inactive`,i),zn(n,XQ)):i.password?await b1(r,i.password)?(delete i.password,n(null,i)):zn(n,XQ):(console.info(`user=${t} has no password set`,i),zn(n,UHt))}o(BHt,"authenticate");var _c={};G(_c,{buildVerifyFn:()=>FLe,getCallbackUrl:()=>Z4t,strategyFactory:()=>kK});var dT=o(e=>Promise.resolve(e),"ssoSaveUserNoOp");async function bP(e,t=!0,r,n){if(!n)throw new Error("Save user function must be provided");if(!e.userId)return zn(r,"sso user id required");if(!e.email)return zn(r,"sso user email required");let i=tg(e.userId),s;try{s=await Bp(i)}catch(u){if(!u.status||u.status!==404)return zn(r,"Unexpected error when retrieving existing user",u)}if(s||(s=await ia(e.email)),!s&&t)return zn(r,"Email does not yet exist. You must set up your local budibase account first.");s||(s={_id:i,email:e.email,roles:{},tenantId:Ue()});let a=await qHt(s,e);a.forceResetPassword=!1;try{delete a.password,a=await n(a,{hashPassword:!1,requirePassword:!1})}catch(u){return zn(r,"Error saving user",u)}return r(null,a)}o(bP,"authenticate");async function qHt(e,t){let r,n,i;if(t.profile){let s=t.profile;if(s.name){let a=s.name;a.givenName&&(r=a.givenName),a.familyName&&(n=a.familyName)}}return t.oauth2&&(i={...t.oauth2}),{...e,provider:t.provider,providerType:t.providerType,firstName:r,lastName:n,oauth2:i}}o(qHt,"syncUser");var X4t=NK().OAuth2Strategy;function FLe(e){return(t,r,n,i)=>{let s={provider:"google",providerType:"google",userId:n.id,profile:n,email:n._json.email,oauth2:{accessToken:t,refreshToken:r}};return bP(s,!0,i,e)}}o(FLe,"buildVerifyFn");async function kK(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 s=FLe(r);return new X4t({clientID:e.clientID,clientSecret:e.clientSecret,callbackURL:t},s)}catch(n){throw new Error(`Error constructing google authentication strategy: ${n}`)}}o(kK,"strategyFactory");async function Z4t(e){return bf("google",e)}o(Z4t,"getCallbackUrl");var wc={};G(wc,{buildVerifyFn:()=>lke,fetchStrategyConfig:()=>d3t,getCallbackUrl:()=>p3t,strategyFactory:()=>f3t});var uke=U(require("node-fetch"));var cke=U(ake());function lke(e){return async(t,r,n,i,s,a,u,c,l)=>{let f=u3t(r,n),d=c3t(r,n),p={provider:t,providerType:"oidc",userId:f.id,profile:f,email:l3t(f,d),oauth2:{accessToken:a,refreshToken:u}};return bP(p,!1,l,e)}}o(lke,"buildVerifyFn");function u3t(e,t){let r={...e?._json||{}};!r.email&&t.emails?.length&&(r.email=t.emails[0].value);let n=e?.displayName||t.displayName;return{id:e?.id||t.id,name:e?.name||t.name||!!n&&{givenName:n,familyName:""}||void 0,_json:r,provider:e?.provider}}o(u3t,"normalizeProfile");function c3t(e,t){return{email:e?._json?.email||t.emails?.[0]?.value,preferred_username:t.username}}o(c3t,"buildJwtClaims");function l3t(e,t){if(e._json.email)return e._json.email;if(t.email)return t.email;let r=t.preferred_username;if(r&&$q(r))return r;throw new Error(`Could not determine user email from profile ${JSON.stringify(e)} and claims ${JSON.stringify(t)}`)}o(l3t,"getEmail");async function f3t(e,t){try{let r=lke(t),n=new cke.Strategy(e,r);return n.name="oidc",n}catch(r){throw new Error(`Error constructing OIDC authentication strategy - ${r}`)}}o(f3t,"strategyFactory");async function d3t(e,t){try{let{clientID:r,clientSecret:n,configUrl:i,pkce:s}=e;if(!r||!n||!t||!i)throw new Error("Configuration invalid. Must contain clientID, clientSecret, callbackUrl and configUrl");let a=await(0,uke.default)(i);if(!a.ok)throw new Error(`Unexpected response when fetching openid-configuration: ${a.statusText}`);let u=await a.json();return{issuer:u.issuer,authorizationURL:u.authorization_endpoint,tokenURL:u.token_endpoint,userInfoURL:u.userinfo_endpoint,clientID:r,clientSecret:n,callbackURL:t,pkce:s}}catch(r){throw new Error(`Error constructing OIDC authentication configuration - ${r}`)}}o(d3t,"fetchStrategyConfig");async function p3t(){return bf("oidc")}o(p3t,"getCallbackUrl");function fke(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()}o(fke,"querystringToBody");function FP(e,t,r={noTenancyRequired:!1}){let n=Qp(e),i=Qp(t);return async function(s,a){let c={allowNoTenant:r.noTenancyRequired||!!Kp(s,i)};!!Kp(s,n)||(c.excludeStrategies=["query"]);let f=eE(s,c);return s.set("x-budibase-tenant-id",f),ji(f,a)}}o(FP,"tenancy");function dke(){return async function(e,t){try{if((await Ii("settings"))?.config?.active===!1){e.status=404,e.body={message:"Tenant not found"};return}}catch(r){if(r.message==="Global DB not found")return t();throw r}return t()}}o(dke,"activeTenant");async function BP(e,t){if(e.internal||Ya(e.user))return t();let r=await Bd(e);return r&&!TD(e.user,r)?e.throw(403,"Workspace Admin/Builder user only endpoint."):!r&&!L.isWorker()?e.throw(403,"This request required a workspace id."):!r&&!zi(e.user)&&e.throw(403,"Admin/Builder user only endpoint."),t()}o(BP,"workspaceBuilderOrAdmin");var qK={};G(qK,{postAuth:()=>g3t,preAuth:()=>m3t});var h3t=NK().OAuth2Strategy;async function pke(){let e=await q3();if(!e)throw new Error("No google configuration found");return e}o(pke,"fetchGoogleCreds");async function m3t(e,t,r){let n=await pke(),s=`${await nT({tenantAware:!1})}/api/global/auth/datasource/google/callback`,a=await kK(n,s,dT);return t.query.appId||t.throw(400,"appId query param not present."),e.authenticate(a,{scope:["profile","email","https://www.googleapis.com/auth/spreadsheets"],accessType:"offline",prompt:"consent"})(t,r)}o(m3t,"preAuth");async function g3t(e,t,r){let n=await pke(),s=`${await nT({tenantAware:!1})}/api/global/auth/datasource/google/callback`,a=$u(t,"budibase:datasourceauth");if(!a)throw new Error("Unable to fetch datasource auth cookie");return e.authenticate(new h3t({clientID:n.clientID,clientSecret:n.clientSecret,callbackURL:s},(u,c,l,f)=>{Dl(t,"budibase:datasourceauth"),f(null,{accessToken:u,refreshToken:c})}),{successRedirect:"/",failureRedirect:"/error"},async(u,c)=>{let l=`/builder/workspace/${a.appId}/data`,f=Nt();await uc(`datasource:creation:${a.appId}:google:${f}`,{tokens:c}),t.redirect(`${l}/new?continue_google_setup=${f}`)})(t,r)}o(g3t,"postAuth");var y3t={google:qK};var rMe=Hke(),N3t=eMe().Strategy,QP=tMe(),L3t=pP,k3t=FP,M3t=gP,U3t=rMe;rMe.use(new N3t(Ty.options,Ty.authenticate));async function F3t(e,t){let r=await wc.getCallbackUrl(),n,i;try{if(n=await wc.fetchStrategyConfig(e,r),!n)throw new Error("OIDC Config contents invalid");i=await wc.strategyFactory(n,dT)}catch{throw new Error("Could not refresh OAuth Token")}return QP.use(i,{setRefreshOAuth2(){return i._getOAuth2Client(n)}}),new Promise(s=>{QP.requestNewAccessToken("oidc",t,(a,u,c,l)=>{s({err:a,accessToken:u,refreshToken:c,params:l})})})}o(F3t,"refreshOIDCAccessToken");async function B3t(e,t){let r=await _c.getCallbackUrl(e),n;try{n=await _c.strategyFactory(e,r,dT)}catch(i){throw new Error(`Error constructing OIDC refresh strategy: message=${i.message}`)}return QP.use(n),new Promise(i=>{QP.requestNewAccessToken("google",t,(s,a,u,c)=>{i({err:s,accessToken:a,refreshToken:u,params:c})})})}o(B3t,"refreshGoogleAccessToken");async function q3t(e,t,r){switch(t){case"oidc":{if(!r)return{err:{data:"OIDC config id not provided"}};let n=await j3(r);return n?F3t(n,e):{err:{data:"OIDC configuration not found"}}}case"google":{let n=await UD();return n?B3t(n,e):{err:{data:"Google configuration not found"}}}}}o(q3t,"refreshOAuthToken");async function j3t(e,t){let r={accessToken:t.accessToken,refreshToken:t.refreshToken};try{let n=gt(),i=await n.get(e);typeof r.refreshToken!="string"&&delete r.refreshToken,i.oauth2={...i.oauth2,...r},await n.put(i),await YS(e)}catch(n){console.error("Could not update OAuth details for current user",n)}}o(j3t,"updateUserOAuth");async function W3t(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=$u(t,"budibase:auth"),s=await o4(r);i&&n?s=s.filter(u=>u.sessionId!==i.sessionId):Dl(t,"budibase:auth");let a=s.map(({sessionId:u})=>u);await SS(r,{sessionIds:a,reason:"logout"}),await ED.logout(t.user?.email),await YS(r)}o(W3t,"platformLogout");var zP={};G(zP,{validate:()=>Q3t});var be=U(require("joi"));var G3t=["Relational","Non-relational","Spreadsheet","Object store","Graph","API"];function ZK(e,t){let{error:r}=e.validate(t);if(r)throw r}o(ZK,"runJoi");function $3t(e){let t=be.default.object({type:be.default.string().allow("component").required(),metadata:be.default.object().unknown(!0).required(),hash:be.default.string().optional(),version:be.default.string().optional(),schema:be.default.object({name:be.default.string().required(),settings:be.default.array().items(be.default.object().unknown(!0)).required()}).unknown(!0)});ZK(t,e)}o($3t,"validateComponent");function V3t(e){let t=be.default.object({type:be.default.string().allow(...Object.values(Jr)).required(),required:be.default.boolean().required(),default:be.default.any(),display:be.default.string()}),r=be.default.object({type:be.default.string().allow(...Object.values(an)),readable:be.default.boolean(),displayName:be.default.string(),fields:be.default.object().pattern(be.default.string(),t)}).required(),n=be.default.object({type:be.default.string().allow("datasource").required(),metadata:be.default.object().unknown(!0).required(),hash:be.default.string().optional(),version:be.default.string().optional(),schema:be.default.object({docs:be.default.string(),plus:be.default.boolean().optional(),isSQL:be.default.boolean().optional(),auth:be.default.object({type:be.default.string().required()}).optional(),features:be.default.object(Object.fromEntries(Object.values(Sn).map(i=>[i,be.default.boolean().optional()]))).optional(),relationships:be.default.boolean().optional(),description:be.default.string().required(),friendlyName:be.default.string().required(),type:be.default.string().allow(...G3t),datasource:be.default.object().pattern(be.default.string(),t).required(),query:be.default.object().pattern(be.default.string(),r).unknown(!0).required(),extra:be.default.object().pattern(be.default.string(),be.default.object({type:be.default.string().required(),displayName:be.default.string().required(),required:be.default.boolean(),data:be.default.object()}))})});ZK(n,e)}o(V3t,"validateDatasource");function H3t(e){let t=be.default.object().pattern(be.default.string(),{type:be.default.string().allow(...Object.values(He)).required(),customType:be.default.string().allow(...Object.values(Bt)),title:be.default.string(),description:be.default.string(),enum:be.default.array().items(be.default.string()),pretty:be.default.array().items(be.default.string())}),r=be.default.object({properties:t,required:be.default.array().items(be.default.string())}).concat(t).required(),n=be.default.object({type:be.default.string().allow("automation").required(),metadata:be.default.object().unknown(!0).required(),hash:be.default.string().optional(),version:be.default.string().optional(),schema:be.default.object({name:be.default.string().required(),tagline:be.default.string().required(),icon:be.default.string().required(),description:be.default.string().required(),type:be.default.string().allow("ACTION","LOGIC").required(),stepId:be.default.string().disallow(...MX).required(),inputs:be.default.object().optional(),schema:be.default.object({inputs:r,outputs:r}).required()})});ZK(n,e)}o(H3t,"validateAutomation");function Q3t(e){switch(e?.type){case"component":$3t(e);break;case"datasource":V3t(e);break;case"automation":H3t(e);break;default:throw new Error(`Unknown plugin type - check schema.json: ${e.type}`)}}o(Q3t,"validate");var Za={};G(Za,{Client:()=>jn,clients:()=>xl,locks:()=>Oi,utils:()=>YR});var XP={};G(XP,{isBlacklisted:()=>z3t,refreshBlacklist:()=>sMe});var nMe=U(require("dns")),JP=U(require("net"));var iMe=require("util");var YP,K3t=(0,iMe.promisify)(nMe.default.lookup);async function oMe(e){return JP.default.isIP(e)||(e.startsWith("http")||(e=`https://${e}`),e=new URL(e).hostname),(await K3t(e,{all:!0})).map(r=>r.address)}o(oMe,"lookup");async function sMe(){let t=L.BLACKLIST_IPS?.split(",")||[],r=[];for(let n of t){let i=n.trim();if(JP.default.isIP(i))r.push(i);else{let s=await oMe(i);r=r.concat(s)}}YP=r}o(sMe,"refreshBlacklist");async function z3t(e){if(YP||await sMe(),YP?.length===0)return!1;let t;return JP.default.isIP(e)?t=[e]:t=await oMe(e),!!YP?.find(r=>t.includes(r))}o(z3t,"isBlacklisted");var B4r={"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 ze={};G(ze,{COUNT_FIELD_NAME:()=>s6,Sql:()=>gMe,SqlTable:()=>ZP,designDoc:()=>a6,utils:()=>pq});var dMe=require("knex");var Y3t=require("knex");function e6(e){return["link","formula","ai"].indexOf(e)!==-1}o(e6,"isIgnoredType");function uMe(e,t,r,n,i){let s=t&&t.primary?t.primary:[],a=Object.values(t.schema),u=a.filter(p=>p.meta),c=u.length===a.length,l=[];n||(c?e.primary(u.map(p=>p.name)):s.length===1?(e.increments(s[0]).primary(),l.push(s[0])):e.primary(s));let f=Object.values(t.schema).map(p=>p.foreignKey);for(let[p,h]of Object.entries(t.schema)){let m=n?.schema[p];if(m&&m.type||l.includes(p)||i?.updated===p)continue;let g=h.type;switch(g){case"string":case"options":case"longform":case"barcodeqr":case"bb_reference_single":s.includes(p)?e.string(p,255):e.text(p);break;case"number":if(h.meta&&h.meta.toKey&&h.meta.toTable){let{toKey:y,toTable:b}=h.meta;e.integer(p).unsigned(),e.foreign(p).references(`${b}.${y}`)}else f.indexOf(p)===-1&&e.float(p);break;case"bigint":e.bigint(p);break;case"boolean":e.boolean(p);break;case"datetime":h.timeOnly?e.time(p):e.datetime(p,{useTz:!h.ignoreTimezones});break;case"array":case"bb_reference":de.schema.isDeprecatedSingleUserColumn(h)?e.text(p):e.json(p);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}=uq(h.tableId),b=r[y];if(!b||!b.primary)throw new Error("Referenced table doesn't exist or has no primary keys");let w=b.primary[0],E=b.schema[w].externalType;E?e.specificType(h.foreignKey,E):e.integer(h.foreignKey).unsigned(),e.foreign(h.foreignKey).references(`${y}.${w}`)}break;case"signature_single":case"attachment":case"attachment_single":e.json(p);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:Fe.unreachable(g)}}let d=i?n?.schema[i.old].type:void 0;return i&&d&&!e6(d)&&e.renameColumn(i.old,i.updated),n&&Object.entries(n.schema).filter(([h,m])=>!e6(m.type)&&t.schema[h]==null).forEach(([h,m])=>{i?.old===h||e6(m.type)||(n.constrained&&n.constrained.indexOf(h)!==-1&&e.dropForeign(h),e.dropColumn(h))}),e}o(uMe,"generateSchema");function J3t(e,t,r){return e.createTable(t.name,n=>{uMe(n,t,r)})}o(J3t,"buildCreateTable");function X3t(e,t,r,n,i){return e.alterTable(t.name,s=>{uMe(s,t,r,n,i)})}o(X3t,"buildUpdateTable");function Z3t(e,t){return e.dropTable(t.name)}o(Z3t,"buildDeleteTable");var t6=class{static{o(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,Y3t.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=J3t(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=X3t(r,t.table,t.tables,t.meta?.oldTable,t.meta?.renamed),this.sqlClient==="mssql"&&t.meta?.renamed){let i=t.meta.renamed.old,s=t.meta.renamed.updated,a=t?.schema?`${t.schema}.${t.table.name}`:`${t.table.name}`,u=zm(n);if(Array.isArray(u))for(let c of u)c.sql.startsWith("exec sp_rename")&&(c.sql=`exec sp_rename '${a}.${i}', '${s}', 'COLUMN'`,c.bindings=[]);return u}break;case"DELETE_TABLE":n=Z3t(r,t.table);break;default:throw new Error("Table operation is of unknown type")}return zm(n)}},ZP=t6;var pMe=require("lodash");var s6="__bb_total";function cMe(){return(L.SQL_MAX_ROWS?parseInt(L.SQL_MAX_ROWS):null)||5e3}o(cMe,"getBaseLimit");function r6(){return(L.SQL_MAX_RELATED_ROWS?parseInt(L.SQL_MAX_RELATED_ROWS):null)||500}o(r6,"getRelationshipLimit");function tQt(e,t){return e.sort((r,n)=>{let i=t.find(a=>a&&r.endsWith(a)),s=t.find(a=>a&&n.endsWith(a));return i&&!s?-1:!i&&s?1:r.localeCompare(n)})}o(tQt,"prioritisedArraySort");function hMe(e){return Array.isArray(e)?e.map(t=>hMe(t)):(e.bindings&&(e.bindings=e.bindings.map(t=>typeof t=="boolean"?t?1:0:t)),e)}o(hMe,"convertBooleans");function lMe(e){return e.sourceType==="internal"||e.sourceId===Un}o(lMe,"isSqs");function rQt(e,t='"'){return e.replace(new RegExp(t,"g"),`${t}${t}`)}o(rQt,"escapeQuotes");function nQt(e,t='"'){return`${t}${rQt(e,t)}${t}`}o(nQt,"wrap");function iQt(e,t='"'){for(let r in e)typeof e[r]=="string"&&(e[r]=nQt(e[r],t));return`[${e.join(",")}]`}o(iQt,"stringifyArray");function n6(e){return`{${(Array.isArray(e)?e:e==null?[]:[e]).map(n=>{if(typeof n=="string"&&n.length>1){let i=n[0],s=n[n.length-1];if(i==='"'&&s==='"'||i==="'"&&s==="'")return n.substring(1,n.length-1)}return`${n}`}).join(",")}}`}o(n6,"toPgArrayLiteral");function mMe(e){return XA.includes(e.type)&&!de.schema.isDeprecatedSingleUserColumn(e)}o(mMe,"isJsonColumn");var oQt={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},i6=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 Tt.ColumnSplitter([this.table],{aliases:this.query.tableAliases,columnPrefix:this.query.meta?.columnPrefix})}static{o(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(a=>{let u=a.split(/\./g),c,l=u[0];return u.length>1&&(c=u[0],l=u.slice(1).join(".")),{table:c,column:l,field:a}}).filter(({table:a})=>!a||a===n).map(({table:a,column:u,field:c})=>{let l=i[u];return this.SPECIAL_SELECT_CASES.POSTGRES_MONEY(l)?this.knex.raw("??::money::numeric as ??",[this.rawQuotedIdentifier([a,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))]):a?this.rawQuotedIdentifier(`${a}.${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(),s=this.table.schema[i],a=this.rawQuotedIdentifier(t);return(s.type==="string"||s.type==="longform"||s.type==="bb_reference_single"||s.type==="bb_reference"||s.type==="options"||s.type==="barcodeqr")&&(r?.forSelect?a=this.knex.raw("to_char(??) as ??",[a,this.rawQuotedIdentifier(i)]):a=this.knex.raw("to_char(??)",[a])),a}parse(t,r){if(Array.isArray(t))return JSON.stringify(t);if(t==null)return null;if(this.requiresJsonAsStringClient()&&mMe(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"),s=t.getSeconds().toString().padStart(2,"0");return`${n}:${i}:${s}`}if(typeof t=="string")return new Date(`1970-01-01T${t}Z`)}if(typeof t=="string"&&r.type==="datetime")if(r.timeOnly){if(!fq(t))return null}else if(r.dateOnly){let n=lq(t);return n?new Date(n):null}else return r.ignoreTimezones?eI(t)?new Date(t):cq(t)?new Date(t+"Z"):null:eI(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),s=this.table.schema[i];s&&(t[r]=this.parse(n,s))}return t}parseFilters(t){t=(0,pMe.cloneDeep)(t);for(let r of Object.values(Qf)){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:s}=this.splitter.run(i),a=this.table.schema[s];a&&(n[i]=this.parse(n[i],a))}}for(let r of Object.values(wa)){let n=t[r];if(n)for(let i of Object.keys(n)){let{column:s}=this.splitter.run(i),a=this.table.schema[s];a&&(n[i]=n[i].map(u=>this.parse(u,a)))}}for(let r of Object.values(Wh)){let n=t[r];if(n)for(let i of Object.keys(n)){let{column:s}=this.splitter.run(i),a=this.table.schema[s];if(!a)continue;let u=n[i];"low"in u&&(u.low=this.parse(u.low,a)),"high"in u&&(u.high=this.parse(u.high,a))}}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:s,schema:a,tableAliases:u,table:c}=this.query,l=u?.[c.name]||c.name,f=o(d=>n.match(new RegExp(`^${d}\\.`)),"matches");if(!s)return t;for(let d of s){let p=d.tableName,h=u?.[p]||p,m=f(p)||f(h),g=f(d.column);if((m||g)&&d.to&&d.tableName){let y=this.knex.select(this.knex.raw(1)).from({[h]:p}),b=y.clone(),w=dq(d),E;if(m?E=n:E=n.replace(new RegExp(`^${d.column}.`),`${u?.[d.tableName]||d.tableName}.`),w){let S=u?.[w.through]||d.through,T=this.tableNameWithSchema(w.through,{alias:S,schema:a});b=b.innerJoin(T,function(){this.on(`${h}.${w.toPrimary}`,"=",`${S}.${w.to}`)}).where(`${S}.${w.from}`,"=",this.rawQuotedIdentifier(`${l}.${w.fromPrimary}`)),this.client==="sqlite3"&&(b=this.addJoinFieldCheck(b,w)),t=t.where(R=>{R.whereExists(i(E,b)),r&&R.orWhereNotExists(y.clone().innerJoin(T,function(){this.on(`${l}.${w.fromPrimary}`,"=",`${S}.${w.from}`)}))})}else{let S=`${h}.${d.to}`,T=`${l}.${d.from}`;b=b.where(S,"=",this.rawQuotedIdentifier(T)),t=t.where(R=>{R.whereExists(i(E,b.clone())),r&&R.orWhereNotExists(b)})}}}return t}addFilters(t,r,n){if(!r)return t;let i=this;r=this.parseFilters({...r});let s=this.query.tableAliases,a=r.allOr,c=this.client==="sqlite3"?this.table._id:this.table.name;function l(g){return s?.[g]||g}o(l,"getTableAlias");function f(g,y,b,w){let E=o((S,T,R)=>{let[A,...O]=T.split("."),I=O.join("."),D=l(A);return S.andWhere(x=>b(x,D?`${D}.${I}`:I,R))},"handleRelationship");for(let S in g){let T=g[S],R=Zw(S),A=R.includes("."),O=n?.relationship&&A,I;if(S==="_complexIdOperator"&&(I=g[S])&&w){let D=l(c);t=w(t,I.id.map(x=>D?`${D}.${x}`:x),I.values)}else if(A)O&&(a&&(t=t.or),t=i.addRelationshipForFilter(t,oQt[y],R,(D,x)=>E(x,D,T)));else{let D=l(c);t=b(t,D?`${D}.${R}`:R,T)}}}o(f,"iterate");let d=this.client==="sqlite3"&&this.query.meta?.sqliteUseLikeWithoutLower,p=o((g,y,b)=>((r?.fuzzyOr||a)&&(g=g.or),d?g.whereRaw("?? LIKE ?",[this.rawQuotedIdentifier(y),`%${b}%`]):this.client==="oracledb"||this.client==="sqlite3"?g.whereRaw("LOWER(??) LIKE ?",[this.rawQuotedIdentifier(y),`%${b.toLowerCase()}%`]):g.whereILike(this.rawQuotedIdentifier(y),this.knex.raw("?",[`%${b}%`]))),"like"),h=o((g,y=!1)=>{function b(w){return(a||g===r?.containsAny)&&(w=w.or),g===r?.notContains&&(w=w.not),w}o(b,"addModifiers"),this.client==="pg"?f(g,"contains",(w,E,S)=>{w=b(w);let T=this.getFieldSchema(E),R=this.rawQuotedIdentifier(E),A=Array.isArray(S)?[...S]:[S],O=this.SPECIAL_SELECT_CASES.POSTGRES_ARRAY(T);return y?O?w.whereRaw("COALESCE(?? && ?::text[], FALSE)",[R,n6(A)]):w.whereRaw("COALESCE(??::jsonb \\?| ?::text[], FALSE)",[R,n6(A)]):O?w.whereRaw("COALESCE(?? @> ?::text[], FALSE)",[R,n6(A)]):w.whereRaw("COALESCE(??::jsonb @> ?::jsonb, FALSE)",[R,iQt(A)])}):this.client==="mysql2"||this.client==="mariadb"?f(g,"contains",(w,E,S)=>{let T=Array.isArray(S)?S:[S];return b(w).whereRaw("COALESCE(?(??, ?), FALSE)",[this.knex.raw(y?"JSON_OVERLAPS":"JSON_CONTAINS"),this.rawQuotedIdentifier(E),JSON.stringify(T)])}):f(g,"contains",(w,E,S)=>(S.length===0||(w=w.where(T=>(g===r?.notContains&&(T=T.not),T=T.where(R=>{for(let A of S){g===r?.containsAny?R=R.or:R=R.and;let O=!d,I=typeof A=="string"?`"${O?A.toLowerCase():A}"`:A,D=O?"COALESCE(LOWER(??), '')":"COALESCE(??, '')";R=R.whereLike(this.knex.raw(D,[this.rawQuotedIdentifier(E)]),`%${I}%`)}}),g===r?.notContains&&(T=T.or.whereNull(this.rawQuotedIdentifier(E))),T))),w))},"contains");if(r.$and){let{$and:g}=r;for(let y of g.conditions)t=t.where(b=>{this.addFilters(b,y,n)})}if(r.$or){let{$or:g}=r;t=t.where(y=>{for(let b of g.conditions)y.orWhere(w=>this.addFilters(w,{...b,allOr:!0},n))})}r.oneOf&&f(r.oneOf,"oneOf",(g,y,b)=>{let w=this.getFieldSchema(y),E=Array.isArray(b)?b:[b];if(a&&(g=g.or),this.client==="oracledb")y=this.convertClobs(y);else if(this.client==="sqlite3"&&w?.type==="datetime"&&w.dateOnly){for(let S of E)S!=null?g=g.or.whereLike(y,`${S.toISOString().slice(0,10)}%`):g=g.or.whereNull(y);return g}return g.whereIn(y,E)},(g,y,b)=>(a&&(g=g.or),this.client==="oracledb"&&(y=y.map(w=>this.convertClobs(w))),g.whereIn(y,Array.isArray(b)?b:[b]))),r.string&&f(r.string,"string",(g,y,b)=>{if(a&&(g=g.or),d)return g.whereRaw("?? LIKE ?",[this.rawQuotedIdentifier(y),`${b}%`]);if(this.client==="oracledb"||this.client==="sqlite3")return g.whereRaw("LOWER(??) LIKE ?",[this.rawQuotedIdentifier(y),`${b.toLowerCase()}%`]);{let w=this.getFieldSchema(y);return this.SPECIAL_SELECT_CASES.POSTGRES_ENUM(w)?g.whereRaw("??::text ilike ?",[this.knex.raw(this.quote(w.name)),`${b}%`]):g.whereILike(y,`${b}%`)}}),r.fuzzy&&f(r.fuzzy,"fuzzy",p),r.range&&f(r.range,"range",(g,y,b)=>{let w=o(I=>I&&Object.keys(I).length===0&&Object.getPrototypeOf(I)===Object.prototype,"isEmptyObject");w(b.low)&&(b.low=""),w(b.high)&&(b.high="");let E=tI(b.low),S=tI(b.high),T=this.getFieldSchema(y),R=y,A=b.high,O=b.low;return this.client==="sqlite3"&&T?.type==="datetime"&&T.dateOnly&&(A!=null&&(A=`${A.toISOString().slice(0,10)}T23:59:59.999Z`),O!=null&&(O=O.toISOString().slice(0,10))),this.client==="oracledb"?R=this.convertClobs(y):this.client==="sqlite3"&&T?.type==="bigint"&&(R=this.knex.raw("CAST(?? AS INTEGER)",[this.rawQuotedIdentifier(y)]),A=this.knex.raw("CAST(? AS INTEGER)",[b.high]),O=this.knex.raw("CAST(? AS INTEGER)",[b.low])),a&&(g=g.or),E&&S?g.whereBetween(R,[O,A]):E?g.where(R,">=",O):S?g.where(R,"<=",A):g}),r.equal&&f(r.equal,"equal",(g,y,b)=>{let w=this.getFieldSchema(y);if(a&&(g=g.or),this.client==="mssql")return g.whereRaw("CASE WHEN ?? = ? THEN 1 ELSE 0 END = 1",[this.rawQuotedIdentifier(y),b]);if(this.client==="oracledb"){let E=this.convertClobs(y);return g.where(S=>S.whereNotNull(E).andWhere(E,b))}else return this.client==="sqlite3"&&w?.type==="datetime"&&w.dateOnly?b!=null?g.whereLike(y,`${b.toISOString().slice(0,10)}%`):g.whereNull(y):g.whereRaw("COALESCE(?? = ?, FALSE)",[this.rawQuotedIdentifier(y),b])}),r.notEqual&&f(r.notEqual,"notEqual",(g,y,b)=>{let w=this.getFieldSchema(y);if(a&&(g=g.or),this.client==="mssql")return g.whereRaw("CASE WHEN ?? = ? THEN 1 ELSE 0 END = 0",[this.rawQuotedIdentifier(y),b]);if(this.client==="oracledb"){let E=this.convertClobs(y);return g.where(S=>S.not.whereNull(E).and.where(E,"!=",b)).or.whereNull(E)}else return this.client==="sqlite3"&&w?.type==="datetime"&&w.dateOnly?b!=null?g.not.whereLike(y,`${b.toISOString().slice(0,10)}%`).or.whereNull(y):g.not.whereNull(y):g.whereRaw("COALESCE(?? != ?, TRUE)",[this.rawQuotedIdentifier(y),b])}),r.empty&&f(r.empty,"empty",(g,y)=>(a&&(g=g.or),g.whereNull(y))),r.notEmpty&&f(r.notEmpty,"notEmpty",(g,y)=>(a&&(g=g.or),g.whereNotNull(y))),r.contains&&h(r.contains),r.notContains&&h(r.notContains),r.containsAny&&h(r.containsAny,!0);let m=s?.[this.table._id]||this.table._id;return r.documentType&&!aq(this.table)&&m&&t.andWhereLike(`${m}._id`,`${ti(r.documentType)}%`),t}isSqs(){return lMe(this.table)}getTableName(t){t||(t=this.table);let r=t.name;lMe(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 ${s6}`)}addAggregations(t,r){let n=this.query.resource?.fields||[],i=this.getTableName();if(n.length>0){let s=n.map(a=>this.qualifyIdentifier(a));if(this.client==="oracledb"){let a=s.map(c=>this.convertClobs(c)),u=s.map(c=>this.convertClobs(c,{forSelect:!0}));t=t.groupBy(a).select(u)}else t=t.groupBy(s).select(s)}for(let s of r){let a=s.calculationType;if(a==="count")if("distinct"in s&&s.distinct)if(this.client==="oracledb"){let u=this.convertClobs(`${i}.${s.field}`);t=t.select(this.knex.raw("COUNT(DISTINCT ??) as ??",[u,s.name]))}else t=t.countDistinct(`${i}.${s.field} as ${s.name}`);else if(this.client==="oracledb"){let u=this.convertClobs(`${i}.${s.field}`);t=t.select(this.knex.raw("COUNT(??) as ??",[u,s.name]))}else t=t.count(`${s.field} as ${s.name}`);else{let u=this.getFieldSchema(s.field);if(!u)throw new Error(`field schema missing for aggregation target: ${s.field}`);let c=this.knex.raw("??(??)",[this.knex.raw(a),this.rawQuotedIdentifier(`${i}.${s.field}`)]);u.type==="bigint"&&(c=this.castIntToString(c)),t=t.select(this.knex.raw("?? as ??",[c,s.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,s=this.getTableName();if(!Array.isArray(i))throw new Error("Sorting requires primary key to be specified for table");if(r&&Object.keys(r||{}).length>0)for(let[u,c]of Object.entries(r)){let l=this.getFieldSchema(u);if(this.isUnsortableField(l))continue;let f=c.direction==="ascending"?"asc":"desc",d;(this.client==="pg"||this.client==="oracledb")&&(d=c.direction==="ascending"?"first":"last");let p=`${s}.${u}`,h;this.isAggregateField(u)?h=this.rawQuotedIdentifier(u):this.client==="oracledb"?h=this.convertClobs(p):h=this.rawQuotedIdentifier(p),t=t.orderByRaw(`?? ?? ${d?"nulls ??":""}`,[h,this.knex.raw(f),...d?[this.knex.raw(d)]:[]])}if(!((n?.aggregations?.length??0)>0)){let u=this.findSortablePrimaryKey(i);if(u&&(!r||r[u]===void 0))t=t.orderBy(`${s}.${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],s,a;if(n.length>1){let l=n.shift();s=n.join("."),a=`${l}.${s}`}else s=n.join("."),a=s;this.query.meta?.columnPrefix&&(i=i.replace(this.query.meta.columnPrefix,""));let u=this.rawQuotedIdentifier(a),c=t.schema[i];return c&&c.type==="bigint"&&(u=this.castIntToString(u)),[s,u]}maxFunctionParameters(){switch(this.client){case"sqlite3":return 127;case"pg":return 100;default:return 200}}addJsonRelationships(t,r,n){let i=this.client,s=this.knex,{resource:a,tableAliases:u,schema:c,tables:l}=this.query,f=a?.fields||[];for(let d of n){let{tableName:p,through:h,to:m,from:g,fromPrimary:y,toPrimary:b}=d;if(!p||!r)continue;let w=l[p];if(!w)throw new Error(`related table "${p}" not found in datasource`);let E=u?.[p]||p,S=u?.[r]||r,T=h&&u?.[h]||h,R=this.tableNameWithSchema(p,{alias:E,schema:c}),A=[...w?.primary||[],w?.primaryDisplay].filter($=>$),O=tQt(f.filter($=>$.split(".")[0]===E),A);O=O.slice(0,Math.floor(this.maxFunctionParameters()/2));let I=O.map($=>this.buildJsonField(w,$));if(!I.length)continue;let D=I.map($=>{let q=this.client==="oracledb"?" VALUE ":",";return this.knex.raw(`?${q}??`,[$[0],$[1]]).toString()}).join(","),x=`${E}.${b||m}`,W=s.from(R).orderBy(x),N=h&&b&&y,V=N?`${T}.${g}`:`${E}.${m}`,k=N?`${S}.${y}`:`${S}.${g}`;if(N){let $=this.tableNameWithSchema(h,{alias:T,schema:c});W=W.join($,function(){this.on(`${E}.${b}`,"=",`${T}.${m}`)})}W=W.where(this.rawQuotedIdentifier(V),"=",this.rawQuotedIdentifier(k));let M=o($=>(W=W.select(O.map(q=>this.rawQuotedIdentifier(q))).limit(r6()),s.select($).from({[E]:W})),"standardWrap"),ee;switch(i){case"sqlite3":W=this.addJoinFieldCheck(W,d),ee=M(this.knex.raw(`json_group_array(json_object(${D}))`));break;case"pg":ee=M(this.knex.raw(`json_agg(json_build_object(${D}))`));break;case"mariadb":ee=W.select(s.raw(`json_arrayagg(json_object(${D}) LIMIT ${r6()})`));break;case"mysql2":case"oracledb":ee=M(this.knex.raw(`json_arrayagg(json_object(${D}))`));break;case"mssql":{let $=s.select("*").from({[S]:W.select(I.map(q=>s.ref(q[1]).as(q[0]))).limit(r6())});ee=s.raw(`(SELECT ?? = (${$} FOR JSON PATH))`,[this.rawQuotedIdentifier(E)]);break}default:throw new Error(`JSON relationships not implement for ${i}`)}t=t.select({[d.column]:ee})}return t}addJoin(t,r,n){let{tableAliases:i,schema:s}=this.query,a=r.to,u=r.from,c=r.through,l=i?.[a]||a,f=c&&i?.[c]||c,d=i?.[u]||u,p=this.tableNameWithSchema(a,{alias:l,schema:s}),h=c?this.tableNameWithSchema(c,{alias:f,schema:s}):void 0;return c?t=t.leftJoin(h,function(){for(let m of n){let g=m.fromPrimary,y=m.from;this.orOn(`${d}.${g}`,"=",`${f}.${y}`)}}).leftJoin(p,function(){for(let m of n){let g=m.toPrimary,y=m.to;this.orOn(`${l}.${g}`,`${f}.${y}`)}}):t=t.leftJoin(p,function(){for(let m of n){let g=m.from,y=m.to;this.orOn(`${d}.${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[s,a]of Object.entries(this.query.table.schema)){if(a.constraints?.presence===!0||a.type==="formula"||a.type==="auto"||a.type==="link"||a.type==="ai")continue;i[s]==null&&(i[s]=null)}else for(let[s,a]of Object.entries(i))a==null&&delete i[s];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:s,table:a}=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 d=this.query.resource?.aggregations||[];if(r==="COUNT"?c=this.addDistinctCount(c):d.length>0?c=this.addAggregations(c,d):c=c.select(this.generateSelectStatement()),r!=="COUNT"&&(c=this.addSorting(c)),c=this.addFilters(c,n,{relationship:!0}),s?.length&&d.length===0){let p=this.query.tableAliases?.[a.name]||a.name,h=this.addSorting(this.knex.with("paginated",c.clone().clearSelect().select("*")).select(this.generateSelectStatement()).from({[p]:"paginated"}));return this.addJsonRelationships(h,a.name,s)}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(),s=this.parseBody(r);return i=this.addFilters(i,n),t.disableReturning?i.update(s):i.update(s).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())}},o6=class extends ZP{constructor(r,n=cMe()){super(r);this.limit=n}static{o(this,"SqlQueryBuilder")}convertToNative(r,n={}){let i=this.getSqlClient();if(n?.disableBindings)return{sql:r.toString()};{let s=zm(r);return i==="sqlite3"&&(s=hMe(s)),s}}_query(r,n={}){let i=this.getSqlClient(),s={client:this.getBaseSqlClient()};(i==="sqlite3"||i==="oracledb")&&(s.useNullAsDefault=!0);let a=(0,dMe.knex)(s),u,c=new i6(i,a,r);switch(this._operation(r)){case"CREATE":u=c.create(n);break;case"READ":u=c.read({limits:{query:this.limit,base:cMe()}});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=s=>s){let s=this.getSqlClient(),a=this._operation(r),u=this._query(r,{disableReturning:!0});if(Array.isArray(u)){let d=[];for(let p of u)d.push(await n(p,a));return d}let c;a==="DELETE"&&(c=i(await this.getReturningRow(n,r)));let l=await n(u,a),f=i(l);if(a==="CREATE"||a==="UPDATE"){let d;s==="mssql"?d=f?.[0].id:(s==="mysql2"||s==="mariadb")&&(d=f?.insertId),c=i(await this.getReturningRow(n,this.checkLookupKeys(d,r)))}return a==="COUNT"?f:a!=="READ"?c:f.length?f:[{[a.toLowerCase()]:!0}]}getTableName(r,n){let i=r.name;if(r.sourceType==="internal"||r.sourceId===Un){if(!r._id)return;i=r._id}return n?.[i]||i}convertJsonStringColumns(r,n,i){let s=this.getTableName(r,i);for(let[a,u]of Object.entries(r.schema)){if(!mMe(u))continue;let c=`${s}.${a}`;for(let l of n)typeof l[c]=="string"&&(l[c]=JSON.parse(l[c])),typeof l[a]=="string"&&(l[a]=JSON.parse(l[a]))}return n}log(r,n){Gw(this.getSqlClient(),r,n)}},gMe=o6;var a6={};G(a6,{base:()=>sQt});function sQt(e){return{_id:Fn,language:"sqlite",sql:{tables:{},options:{table_name:e}}}}o(sQt,"base");var yT={};G(yT,{jsonFromCsvString:()=>aQt});var yMe=U(require("csvtojson"));async function aQt(e,t){let{ignoreEmpty:r=!1,allowSingleColumn:n=!1,possibleDelimiters:i=[",",";",":","|","~"," "," "]}=t||{};for(let s of i){let a,u=!1;try{let c=await(0,yMe.default)({ignoreEmpty:r,delimiter:s}).fromString(e);for(let[,l]of c.entries()){let f=Object.keys(l);if(a==null&&(a=f),!n&&f.length===1){u=!0;break}if(a.length!==f.length){u=!0;break}for(let d of a)(l[d]===void 0||l[d]==="")&&(l[d]=null)}if(u)continue;return c}catch{continue}}throw new Error("Unable to determine delimiter")}o(aQt,"jsonFromCsvString");var cQt=U(require("@koa/router"));var Ae={...tE,...C},bMe=o((e={})=>{XO(e.db)},"init");var Sh={};G(Sh,{ai:()=>Y6,auditLogs:()=>wh,automations:()=>ky,backups:()=>to,branding:()=>K6,environmentVariables:()=>fa,features:()=>Zi,groups:()=>$t,init:()=>K7t,licensing:()=>Sf,logger:()=>eb,plugins:()=>m8,publicApi:()=>p5,quotas:()=>mr,scimGroups:()=>Cv,scimUsers:()=>jo,users:()=>a8,utils:()=>GT});var K6={};G(K6,{getBrandingConfig:()=>UKt});var Zi={};G(Zi,{checkBackups:()=>Di,checkFeature:()=>SN,checkFeatures:()=>W6,checkSCIM:()=>Q6,isAppBuildersEnabled:()=>V6,isAuditLogsEnabled:()=>TN,isBackupsEnabled:()=>G6,isBrandingEnabled:()=>$6,isEnforceableSSO:()=>bUe,isExpandedPublicApiEnabled:()=>Ec,isPWAEnabled:()=>CKt,isPkceOidcEnabled:()=>DKt,isRecaptchaEnabled:()=>xKt,isSSOEnforced:()=>NKt,isSyncAutomationsEnabled:()=>OKt,isTranslationsEnabled:()=>PKt,isTriggerAutomationRunEnabled:()=>IKt,isUserGroupsEnabled:()=>H6,isViewPermissionEnabled:()=>LKt,isViewReadonlyColumnsEnabled:()=>kKt});var Sf={};G(Sf,{cache:()=>la,client:()=>vf,features:()=>gN,getFreeLicense:()=>U6,getLicense:()=>M6,getLicenseFromKey:()=>dUe,keys:()=>B6,offline:()=>bN,quotas:()=>yN});var la={};G(la,{getCachedLicense:()=>gUe,invalidate:()=>yUe,refresh:()=>eh});var EN=U(require("dd-trace"));var vf={};G(vf,{activateLicenseKey:()=>I6,getLicense:()=>xy,getLicenseFromKey:()=>O6,triggerQuota:()=>rKt});var _Me=U(require("node-fetch"));var u6=require("dd-trace"),wMe=require("dd-trace/ext/formats");var c6=class{constructor(t){this.apiCall=t=>async(r="",n={})=>await u6.tracer.trace(`api.${t}`,async i=>{i.setTag("url",r);let s={...n.headers};s["Content-Type"]||(s["Content-Type"]="application/json",s.Accept="application/json");let a=s["Content-Type"]==="application/json";ke.correlation.setHeader(s),u6.tracer.inject(i,wMe.HTTP_HEADERS,s);let u={method:t,body:a?JSON.stringify(n.body):n.body,headers:s,credentials:"include"};return(0,_Me.default)(`${this.host}${r}`,u)});this.post=this.apiCall("POST");this.get=this.apiCall("GET");this.patch=this.apiCall("PATCH");this.del=this.apiCall("DELETE");this.put=this.apiCall("PUT");this.host=t}static{o(this,"API")}},l6=c6;var{getDispatcher:dQt}=nt;async function eN(e,t,r){let n=typeof e=="string"?e:e instanceof URL?e.href:e.url,i=dQt({rejectUnauthorized:r?.rejectUnauthorized,url:n});return fetch(e,{...t,dispatcher:i})}o(eN,"proxyFetch");var ua={};G(ua,{bustCache:()=>p6,getCurrentUsageValues:()=>IMe,getQuotaUsage:()=>Xp,setAllUsage:()=>m6,setAppUsageValue:()=>h6,setUsage:()=>AMe,setUsagePerApp:()=>RMe,utils:()=>wT});var wT={};G(wT,{generateBaseQuotaUsage:()=>rN,generateNewMonthlyQuotas:()=>_T,generateNewQuotaUsage:()=>d6,getBreakdownName:()=>iN,getCurrentMonthString:()=>wf,getQuotaDocId:()=>bT,setCurrentMonth:()=>nN,setQuotaReset:()=>f6});var bT=o(()=>C.isSelfHostUsingCloud()?`quota_usage_${C.getTenantId()}`:F.StaticDatabases.GLOBAL.docs.usageQuota,"getQuotaDocId"),EMe=o(()=>{let e=new Date;return new Date(e.getFullYear(),e.getMonth()+1,1).toISOString()},"getNextQuotaReset"),f6=o(e=>{e.quotaReset=EMe()},"setQuotaReset"),wf=o(()=>{let e=new Date,t=e.getMonth()+1,r=e.getFullYear();return`${t}-${r}`},"getCurrentMonthString"),rN=o(()=>({usageQuota:{apps:0,rows:0,plugins:0,users:0,creators:0,userGroups:0,aiCustomConfigs:0,triggers:{}},monthly:{[wf()]:_T()}}),"generateBaseQuotaUsage"),d6=o(()=>{let e={_id:bT(),quotaReset:EMe(),...rN(),apps:{}};return nN(e),e},"generateNewQuotaUsage"),_T=o(()=>({queries:0,automations:0,budibaseAICredits:0,actions:0,triggers:{}}),"generateNewMonthlyQuotas"),nN=o(e=>{let t=wf();e.monthly||(e.monthly={}),e.monthly[t]||(e.monthly[t]=_T()),e.monthly.current=e.monthly[t]},"setCurrentMonth"),iN=o((e,t)=>{if(!(!t||!e))switch(e){case"automations":return"automations";case"queries":return Ns(t)?"rowQueries":fm(t)?"datasourceQueries":void 0}},"getBreakdownName");var SMe=nr.fromSeconds(60).toMs(),{Writethrough:TMe}=Be.writethrough;function pQt(e){return delete e.usageLimits,delete e.usageQuota.automationRuns,delete e.usageQuota.emails,delete e.usageQuota.storage,delete e.usageQuota.views,delete e.usageQuota.publishedApps,delete e.usageQuota.developers,e}o(pQt,"clearDeprecated");var oN=o(()=>Ae.isSelfHostUsingCloud()?new TMe(Ae.getSelfHostCloudDB(),SMe):new TMe(Ae.getGlobalDB(),SMe),"getDB");async function p6(e=0){let r=oN(),n=bT(),i=await r.tryGet(n);i&&i._rev&&await r.remove(n,i._rev).catch(async s=>{if(e<1)return await p6(e+1);throw s})}o(p6,"bustCache");var Xp=o(async()=>{let e=oN(),t=await e.tryGet(bT());if(!t){t=d6();let{rev:r}=await e.put(t);t._rev=r}return nN(t),f6(t),pQt(t)},"getQuotaUsage"),AMe=o(async(e,t,r)=>m6({name:t,type:r,values:{total:e}}),"setUsage"),RMe=o(async(e,t,r)=>{let n=oN(),i=await Xp(),s=Object.values(e).reduce((u,c)=>u+c,0);for(let[u,c]of Object.entries(e))i=OMe(i,t,r,{total:s,app:c},{appId:u});let a=await n.put(i);return i._rev=a.rev,i},"setUsagePerApp"),hQt=o((e,t,r,n)=>{let i=iN(t,r);if(!i||!n?.breakdown)return e;e.breakdown||(e.breakdown={}),e.breakdown[i]||(e.breakdown[i]={parent:t,values:{}});let s=e.breakdown[i];return s.values[r]=n.breakdown,e},"setBreakdown"),h6=o((e,t,r,n={},i)=>{let s;try{s=F.getProdWorkspaceID(n?.appId||C.getWorkspaceId())}catch{}if(!s||!i.app||!$h.includes(t))return e;e.apps?.[s]||(e.apps={...e.apps,[s]:rN()});let a=e.apps[s];switch(r){case"static":a.usageQuota[t]=i.app;break;case"monthly":{let u=wf(),c=t,l=a.monthly[u];l||(a.monthly[u]=_T(),l=a.monthly[u]),l[c]=i.app,LX.includes(c)&&n?.id&&(l=hQt(l,c,n.id,i));break}}return e},"setAppUsageValue"),vMe=o((e,t,r,n)=>{if(!$h.includes(r))return{};let i;try{i=F.getProdWorkspaceID(C.getWorkspaceId())}catch{}if(!i||!e.apps||!e.apps[i])return{app:0};let s=e.apps[i];switch(t){case"static":if(s.usageQuota?.[r])return{app:s.usageQuota[r]};break;case"monthly":{let a=wf(),u=r;if(!s.monthly?.[a]?.[u])break;let c=s.monthly[a],l=c[u],f,d=iN(u,n);return d&&n&&c.breakdown?.[d]&&(f=c.breakdown[d]?.values[n]),{app:l,breakdown:f||0}}}return{app:0}},"getAppUsageValue"),mQt=o((e,t,r)=>{t.usageQuota.triggers||(t.usageQuota.triggers={}),r&&(t.usageQuota.triggers[e]=r)},"setStaticTriggers"),gQt=o((e,t,r,n)=>{r.monthly[t].triggers||(r.monthly[t].triggers={}),n&&(r.monthly[t].triggers[e]=n)},"setMonthlyTriggers"),OMe=o((e,t,r,n,i={})=>{if(r==="static")t=t,e.usageQuota[t]=n.total,mQt(t,e,n.triggers);else if(r==="monthly"){t=t;let s=wf();e.monthly[s][t]=n.total,gQt(t,s,e,n.triggers)}else throw new Error(`Invalid usage type: ${r}`);return h6(e,t,r,i,n)},"coreUsageUpdate"),m6=o(async e=>{let t=Array.isArray(e)?e:[e],r=oN(),n=await Xp();for(let s of t)n=OMe(n,s.name,s.type,s.values,s.opts);let i=await r.put(n,0);return n._rev=i.rev,n},"setAllUsage"),IMe=o(async(e,t,r)=>{let n=await Xp(),i=0,s={};switch(e){case"static":if(n.usageQuota[t]){let a=t;i=n.usageQuota[a],s=vMe(n,e,t,r)}break;case"monthly":{let a=wf(),u=t;n.monthly[a][u]&&(i=n.monthly[a][u],s=vMe(n,e,t,r));break}default:throw new Error(`Invalid usage type: ${e}`)}return $h.includes(t)&&!(s.app||s.breakdown)&&(s.app=s.app||0,s.breakdown=s.breakdown||0),{total:i,app:s.app,breakdown:s.breakdown}},"getCurrentUsageValues");var ms={};G(ms,{destroy:()=>_Qt,get:()=>g6,save:()=>bQt});var yQt=o(()=>({_id:tr.GLOBAL.docs.licenseInfo}),"newLicenseInfo"),bQt=o(async e=>{let t=await g6();t={...t,...e};let n=await Ae.getGlobalDB().put(t);return t._rev=n.rev,t},"save"),g6=o(async()=>{let e=Ae.getGlobalDB();try{return await e.get(tr.GLOBAL.docs.licenseInfo)}catch(t){if(t.status===404)return yQt();throw t}},"get"),_Qt=o(async()=>{let e=Ae.getGlobalDB(),t=await g6();t&&t._rev&&await e.remove(tr.GLOBAL.docs.licenseInfo,t._rev)},"destroy");var Or={};G(Or,{bulkSave:()=>PQt,destroy:()=>NQt,fetch:()=>IQt,generateUserGroupID:()=>RQt,get:()=>CQt,getBulk:()=>xQt,getByName:()=>y6,getGroupUsers:()=>sN,getGroupUsersParams:()=>NMe,getUserGroupsParams:()=>PMe,save:()=>DQt});async function CMe(){let e=ze.designDoc.base("type");e.sql.tables={[Kf]:{fields:{appId:"VARCHAR",event:"VARCHAR",userId:"VARCHAR",timestamp:"VARCHAR",metadata:"VARCHAR",name:"VARCHAR",type:"VARCHAR",fallback:"VARCHAR"}}};let t=C.getAuditLogsDB(),r;try{r=await t.get(Fn),r={...r,...e}}catch(n){if(n.status===404)r=e;else throw n}await t.put(r)}o(CMe,"createAuditLogDesignDocSQL");var{ViewName:EQt,SEPARATOR:SQt,DocumentType:TQt,createView:vQt}=F,AQt=TQt.USER+SQt;async function xMe(){let e=Ae.getGlobalDB(),t=`function(doc) {
|
|
466
|
+
`).filter(d=>JPe.test(d)),f=["default-src","script-src","connect-src","media-src","img-src","font-src","frame-src"];for(let d of f)n[d]=[...n[d]||[],...l]}}catch(u){console.error(`Error occurred in Content-Security-Policy middleware: ${u}`)}let a=Object.entries(n).map(([u,c])=>`${u} ${c.join(" ")}`).join("; ");e.set("Content-Security-Policy",a),await t()},"contentSecurityPolicy");var NHt=["GET","HEAD","OPTIONS"],LHt=["application/x-www-form-urlencoded","multipart/form-data","text/plain"];function gP(e={noCsrfPatterns:[]}){let t=Qp(e.noCsrfPatterns);return async(r,n)=>{if(Kp(r,t)||NHt.indexOf(r.method)!==-1)return n();let s=r.get("content-type")?r.get("content-type").toLowerCase():"";if(!LHt.filter(c=>s.includes(c)).length||r.internal)return n();let a=r.user?.csrfToken;if(!a)return n();let u=r.get("x-csrf-token");return(!u||u!==a)&&r.throw(403,"Invalid CSRF token"),n()}}o(gP,"csrf");function eNe(e){if(e.includes("-----BEGIN PRIVATE KEY-----"))return!0;for(let t of one){let r=L[t];if(!(typeof r!="string"||r==="")&&e.includes(r))return!0}return!1}o(eNe,"stringContainsSecret");async function tNe(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:iOe(r)};if(eNe(JSON.stringify(i))&&(i={message:"Unexpected error",status:n,error:"Unexpected error"}),L.isTest()&&e.headers["x-budibase-include-stacktrace"]){let s=r;for(;s.cause;)s=s.cause;i.stack=s.stack}e.body=i}}o(tNe,"errorHandling");var rNe=o(async(e,t)=>{let n=$u(e,"budibase:featureflags")?.flags||{};await vq(n,async()=>{await t()})},"featureFlagCookie");async function yP(e,t){let r=e.request.headers["x-budibase-api-key"];return r||e.throw(403,"Unauthorized"),Array.isArray(r)&&e.throw(403,"Unauthorized"),rE(r)||e.throw(403,"Unauthorized"),t()}o(yP,"internalApi");async function nNe(e,t){return e.ip?await wq(e.ip,()=>t()):t()}o(nNe,"ip");var fT={};G(fT,{body:()=>kHt,params:()=>MHt});var JQ=U(require("joi"));function iNe(e,t,r){let n=r?.errorPrefix??`Invalid ${t}`;return(i,s)=>{if(!e)return s();let a=null,u=i.request?.[t];i[t]!=null?a=i[t]:u!=null&&(a=u),e.append&&(e=e.append({createdAt:JQ.default.any().optional(),updatedAt:JQ.default.any().optional()}));let{error:c}=e.validate(a,{allowUnknown:r?.allowUnknown});if(c){let l=c.message;n&&(l=`Invalid ${t} - ${l}`),i.throw(400,l)}return s()}}o(iNe,"validate");function kHt(e,t){return iNe(e,"body",t)}o(kHt,"body");function MHt(e,t){return iNe(e,"params",t)}o(MHt,"params");var Ty={};G(Ty,{authenticate:()=>BHt,options:()=>FHt});function zn(e,t,r){return e(r,null,{message:t})}o(zn,"authError");async function bf(e,t){if(t&&t.callbackURL)return t.callbackURL;let r=await B3(),n="/api/global/auth";return Cl()&&(n+=`/${Ue()}`),n+=`/${e}/callback`,`${r.platformUrl}${n}`}o(bf,"ssoCallbackUrl");var XQ="Invalid credentials",UHt="This account has expired. Please reset your password",FHt={passReqToCallback:!0};async function BHt(e,t,r,n){if(!t)return zn(n,"Email Required");if(!r)return zn(n,"Password Required");let i=await ia(t);return i==null?(console.info(`user=${t} could not be found`),zn(n,XQ)):i.status==="inactive"?(console.info(`user=${t} is inactive`,i),zn(n,XQ)):i.password?await b1(r,i.password)?(delete i.password,n(null,i)):zn(n,XQ):(console.info(`user=${t} has no password set`,i),zn(n,UHt))}o(BHt,"authenticate");var _c={};G(_c,{buildVerifyFn:()=>FLe,getCallbackUrl:()=>Z4t,strategyFactory:()=>kK});var dT=o(e=>Promise.resolve(e),"ssoSaveUserNoOp");async function bP(e,t=!0,r,n){if(!n)throw new Error("Save user function must be provided");if(!e.userId)return zn(r,"sso user id required");if(!e.email)return zn(r,"sso user email required");let i=tg(e.userId),s;try{s=await Bp(i)}catch(u){if(!u.status||u.status!==404)return zn(r,"Unexpected error when retrieving existing user",u)}if(s||(s=await ia(e.email)),!s&&t)return zn(r,"Email does not yet exist. You must set up your local budibase account first.");s||(s={_id:i,email:e.email,roles:{},tenantId:Ue()});let a=await qHt(s,e);a.forceResetPassword=!1;try{delete a.password,a=await n(a,{hashPassword:!1,requirePassword:!1})}catch(u){return zn(r,"Error saving user",u)}return r(null,a)}o(bP,"authenticate");async function qHt(e,t){let r,n,i;if(t.profile){let s=t.profile;if(s.name){let a=s.name;a.givenName&&(r=a.givenName),a.familyName&&(n=a.familyName)}}return t.oauth2&&(i={...t.oauth2}),{...e,provider:t.provider,providerType:t.providerType,firstName:r,lastName:n,oauth2:i}}o(qHt,"syncUser");var X4t=NK().OAuth2Strategy;function FLe(e){return(t,r,n,i)=>{let s={provider:"google",providerType:"google",userId:n.id,profile:n,email:n._json.email,oauth2:{accessToken:t,refreshToken:r}};return bP(s,!0,i,e)}}o(FLe,"buildVerifyFn");async function kK(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 s=FLe(r);return new X4t({clientID:e.clientID,clientSecret:e.clientSecret,callbackURL:t},s)}catch(n){throw new Error(`Error constructing google authentication strategy: ${n}`)}}o(kK,"strategyFactory");async function Z4t(e){return bf("google",e)}o(Z4t,"getCallbackUrl");var wc={};G(wc,{buildVerifyFn:()=>lke,fetchStrategyConfig:()=>d3t,getCallbackUrl:()=>p3t,strategyFactory:()=>f3t});var uke=U(require("node-fetch"));var cke=U(ake());function lke(e){return async(t,r,n,i,s,a,u,c,l)=>{let f=u3t(r,n),d=c3t(r,n),p={provider:t,providerType:"oidc",userId:f.id,profile:f,email:l3t(f,d),oauth2:{accessToken:a,refreshToken:u}};return bP(p,!1,l,e)}}o(lke,"buildVerifyFn");function u3t(e,t){let r={...e?._json||{}};!r.email&&t.emails?.length&&(r.email=t.emails[0].value);let n=e?.displayName||t.displayName;return{id:e?.id||t.id,name:e?.name||t.name||!!n&&{givenName:n,familyName:""}||void 0,_json:r,provider:e?.provider}}o(u3t,"normalizeProfile");function c3t(e,t){return{email:e?._json?.email||t.emails?.[0]?.value,preferred_username:t.username}}o(c3t,"buildJwtClaims");function l3t(e,t){if(e._json.email)return e._json.email;if(t.email)return t.email;let r=t.preferred_username;if(r&&$q(r))return r;throw new Error(`Could not determine user email from profile ${JSON.stringify(e)} and claims ${JSON.stringify(t)}`)}o(l3t,"getEmail");async function f3t(e,t){try{let r=lke(t),n=new cke.Strategy(e,r);return n.name="oidc",n}catch(r){throw new Error(`Error constructing OIDC authentication strategy - ${r}`)}}o(f3t,"strategyFactory");async function d3t(e,t){try{let{clientID:r,clientSecret:n,configUrl:i,pkce:s}=e;if(!r||!n||!t||!i)throw new Error("Configuration invalid. Must contain clientID, clientSecret, callbackUrl and configUrl");let a=await(0,uke.default)(i);if(!a.ok)throw new Error(`Unexpected response when fetching openid-configuration: ${a.statusText}`);let u=await a.json();return{issuer:u.issuer,authorizationURL:u.authorization_endpoint,tokenURL:u.token_endpoint,userInfoURL:u.userinfo_endpoint,clientID:r,clientSecret:n,callbackURL:t,pkce:s}}catch(r){throw new Error(`Error constructing OIDC authentication configuration - ${r}`)}}o(d3t,"fetchStrategyConfig");async function p3t(){return bf("oidc")}o(p3t,"getCallbackUrl");function fke(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()}o(fke,"querystringToBody");function FP(e,t,r={noTenancyRequired:!1}){let n=Qp(e),i=Qp(t);return async function(s,a){let c={allowNoTenant:r.noTenancyRequired||!!Kp(s,i)};!!Kp(s,n)||(c.excludeStrategies=["query"]);let f=eE(s,c);return s.set("x-budibase-tenant-id",f),ji(f,a)}}o(FP,"tenancy");function dke(){return async function(e,t){try{if((await Ii("settings"))?.config?.active===!1){e.status=404,e.body={message:"Tenant not found"};return}}catch(r){if(r.message==="Global DB not found")return t();throw r}return t()}}o(dke,"activeTenant");async function BP(e,t){if(e.internal||Ya(e.user))return t();let r=await Bd(e);return r&&!TD(e.user,r)?e.throw(403,"Workspace Admin/Builder user only endpoint."):!r&&!L.isWorker()?e.throw(403,"This request required a workspace id."):!r&&!zi(e.user)&&e.throw(403,"Admin/Builder user only endpoint."),t()}o(BP,"workspaceBuilderOrAdmin");var qK={};G(qK,{postAuth:()=>g3t,preAuth:()=>m3t});var h3t=NK().OAuth2Strategy;async function pke(){let e=await q3();if(!e)throw new Error("No google configuration found");return e}o(pke,"fetchGoogleCreds");async function m3t(e,t,r){let n=await pke(),s=`${await nT({tenantAware:!1})}/api/global/auth/datasource/google/callback`,a=await kK(n,s,dT);return t.query.appId||t.throw(400,"appId query param not present."),e.authenticate(a,{scope:["profile","email","https://www.googleapis.com/auth/spreadsheets"],accessType:"offline",prompt:"consent"})(t,r)}o(m3t,"preAuth");async function g3t(e,t,r){let n=await pke(),s=`${await nT({tenantAware:!1})}/api/global/auth/datasource/google/callback`,a=$u(t,"budibase:datasourceauth");if(!a)throw new Error("Unable to fetch datasource auth cookie");return e.authenticate(new h3t({clientID:n.clientID,clientSecret:n.clientSecret,callbackURL:s},(u,c,l,f)=>{Dl(t,"budibase:datasourceauth"),f(null,{accessToken:u,refreshToken:c})}),{successRedirect:"/",failureRedirect:"/error"},async(u,c)=>{let l=`/builder/workspace/${a.appId}/data`,f=Nt();await uc(`datasource:creation:${a.appId}:google:${f}`,{tokens:c}),t.redirect(`${l}/new?continue_google_setup=${f}`)})(t,r)}o(g3t,"postAuth");var y3t={google:qK};var rMe=Hke(),N3t=eMe().Strategy,QP=tMe(),L3t=pP,k3t=FP,M3t=gP,U3t=rMe;rMe.use(new N3t(Ty.options,Ty.authenticate));async function F3t(e,t){let r=await wc.getCallbackUrl(),n,i;try{if(n=await wc.fetchStrategyConfig(e,r),!n)throw new Error("OIDC Config contents invalid");i=await wc.strategyFactory(n,dT)}catch{throw new Error("Could not refresh OAuth Token")}return QP.use(i,{setRefreshOAuth2(){return i._getOAuth2Client(n)}}),new Promise(s=>{QP.requestNewAccessToken("oidc",t,(a,u,c,l)=>{s({err:a,accessToken:u,refreshToken:c,params:l})})})}o(F3t,"refreshOIDCAccessToken");async function B3t(e,t){let r=await _c.getCallbackUrl(e),n;try{n=await _c.strategyFactory(e,r,dT)}catch(i){throw new Error(`Error constructing OIDC refresh strategy: message=${i.message}`)}return QP.use(n),new Promise(i=>{QP.requestNewAccessToken("google",t,(s,a,u,c)=>{i({err:s,accessToken:a,refreshToken:u,params:c})})})}o(B3t,"refreshGoogleAccessToken");async function q3t(e,t,r){switch(t){case"oidc":{if(!r)return{err:{data:"OIDC config id not provided"}};let n=await j3(r);return n?F3t(n,e):{err:{data:"OIDC configuration not found"}}}case"google":{let n=await UD();return n?B3t(n,e):{err:{data:"Google configuration not found"}}}}}o(q3t,"refreshOAuthToken");async function j3t(e,t){let r={accessToken:t.accessToken,refreshToken:t.refreshToken};try{let n=gt(),i=await n.get(e);typeof r.refreshToken!="string"&&delete r.refreshToken,i.oauth2={...i.oauth2,...r},await n.put(i),await YS(e)}catch(n){console.error("Could not update OAuth details for current user",n)}}o(j3t,"updateUserOAuth");async function W3t(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=$u(t,"budibase:auth"),s=await o4(r);i&&n?s=s.filter(u=>u.sessionId!==i.sessionId):Dl(t,"budibase:auth");let a=s.map(({sessionId:u})=>u);await SS(r,{sessionIds:a,reason:"logout"}),await ED.logout(t.user?.email),await YS(r)}o(W3t,"platformLogout");var zP={};G(zP,{validate:()=>Q3t});var be=U(require("joi"));var G3t=["Relational","Non-relational","Spreadsheet","Object store","Graph","API"];function ZK(e,t){let{error:r}=e.validate(t);if(r)throw r}o(ZK,"runJoi");function $3t(e){let t=be.default.object({type:be.default.string().allow("component").required(),metadata:be.default.object().unknown(!0).required(),hash:be.default.string().optional(),version:be.default.string().optional(),schema:be.default.object({name:be.default.string().required(),settings:be.default.array().items(be.default.object().unknown(!0)).required()}).unknown(!0)});ZK(t,e)}o($3t,"validateComponent");function V3t(e){let t=be.default.object({type:be.default.string().allow(...Object.values(Jr)).required(),required:be.default.boolean().required(),default:be.default.any(),display:be.default.string()}),r=be.default.object({type:be.default.string().allow(...Object.values(an)),readable:be.default.boolean(),displayName:be.default.string(),fields:be.default.object().pattern(be.default.string(),t)}).required(),n=be.default.object({type:be.default.string().allow("datasource").required(),metadata:be.default.object().unknown(!0).required(),hash:be.default.string().optional(),version:be.default.string().optional(),schema:be.default.object({docs:be.default.string(),plus:be.default.boolean().optional(),isSQL:be.default.boolean().optional(),auth:be.default.object({type:be.default.string().required()}).optional(),features:be.default.object(Object.fromEntries(Object.values(Sn).map(i=>[i,be.default.boolean().optional()]))).optional(),relationships:be.default.boolean().optional(),description:be.default.string().required(),friendlyName:be.default.string().required(),type:be.default.string().allow(...G3t),datasource:be.default.object().pattern(be.default.string(),t).required(),query:be.default.object().pattern(be.default.string(),r).unknown(!0).required(),extra:be.default.object().pattern(be.default.string(),be.default.object({type:be.default.string().required(),displayName:be.default.string().required(),required:be.default.boolean(),data:be.default.object()}))})});ZK(n,e)}o(V3t,"validateDatasource");function H3t(e){let t=be.default.object().pattern(be.default.string(),{type:be.default.string().allow(...Object.values(He)).required(),customType:be.default.string().allow(...Object.values(Bt)),title:be.default.string(),description:be.default.string(),enum:be.default.array().items(be.default.string()),pretty:be.default.array().items(be.default.string())}),r=be.default.object({properties:t,required:be.default.array().items(be.default.string())}).concat(t).required(),n=be.default.object({type:be.default.string().allow("automation").required(),metadata:be.default.object().unknown(!0).required(),hash:be.default.string().optional(),version:be.default.string().optional(),schema:be.default.object({name:be.default.string().required(),tagline:be.default.string().required(),icon:be.default.string().required(),description:be.default.string().required(),type:be.default.string().allow("ACTION","LOGIC").required(),stepId:be.default.string().disallow(...MX).required(),inputs:be.default.object().optional(),schema:be.default.object({inputs:r,outputs:r}).required()})});ZK(n,e)}o(H3t,"validateAutomation");function Q3t(e){switch(e?.type){case"component":$3t(e);break;case"datasource":V3t(e);break;case"automation":H3t(e);break;default:throw new Error(`Unknown plugin type - check schema.json: ${e.type}`)}}o(Q3t,"validate");var Za={};G(Za,{Client:()=>jn,clients:()=>xl,locks:()=>Oi,utils:()=>YR});var XP={};G(XP,{isBlacklisted:()=>z3t,refreshBlacklist:()=>sMe});var nMe=U(require("dns")),JP=U(require("net"));var iMe=require("util");var YP,K3t=(0,iMe.promisify)(nMe.default.lookup);async function oMe(e){return JP.default.isIP(e)||(e.startsWith("http")||(e=`https://${e}`),e=new URL(e).hostname),(await K3t(e,{all:!0})).map(r=>r.address)}o(oMe,"lookup");async function sMe(){let t=L.BLACKLIST_IPS?.split(",")||[],r=[];for(let n of t){let i=n.trim();if(JP.default.isIP(i))r.push(i);else{let s=await oMe(i);r=r.concat(s)}}YP=r}o(sMe,"refreshBlacklist");async function z3t(e){if(YP||await sMe(),YP?.length===0)return!1;let t;return JP.default.isIP(e)?t=[e]:t=await oMe(e),!!YP?.find(r=>t.includes(r))}o(z3t,"isBlacklisted");var B4r={"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 ze={};G(ze,{COUNT_FIELD_NAME:()=>s6,Sql:()=>gMe,SqlTable:()=>ZP,designDoc:()=>a6,utils:()=>pq});var dMe=require("knex");var Y3t=require("knex");function e6(e){return["link","formula","ai"].indexOf(e)!==-1}o(e6,"isIgnoredType");function uMe(e,t,r,n,i){let s=t&&t.primary?t.primary:[],a=Object.values(t.schema),u=a.filter(p=>p.meta),c=u.length===a.length,l=[];n||(c?e.primary(u.map(p=>p.name)):s.length===1?(e.increments(s[0]).primary(),l.push(s[0])):e.primary(s));let f=Object.values(t.schema).map(p=>p.foreignKey);for(let[p,h]of Object.entries(t.schema)){let m=n?.schema[p];if(m&&m.type||l.includes(p)||i?.updated===p)continue;let g=h.type;switch(g){case"string":case"options":case"longform":case"barcodeqr":case"bb_reference_single":s.includes(p)?e.string(p,255):e.text(p);break;case"number":if(h.meta&&h.meta.toKey&&h.meta.toTable){let{toKey:y,toTable:b}=h.meta;e.integer(p).unsigned(),e.foreign(p).references(`${b}.${y}`)}else f.indexOf(p)===-1&&e.float(p);break;case"bigint":e.bigint(p);break;case"boolean":e.boolean(p);break;case"datetime":h.timeOnly?e.time(p):e.datetime(p,{useTz:!h.ignoreTimezones});break;case"array":case"bb_reference":de.schema.isDeprecatedSingleUserColumn(h)?e.text(p):e.json(p);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}=uq(h.tableId),b=r[y];if(!b||!b.primary)throw new Error("Referenced table doesn't exist or has no primary keys");let w=b.primary[0],E=b.schema[w].externalType;E?e.specificType(h.foreignKey,E):e.integer(h.foreignKey).unsigned(),e.foreign(h.foreignKey).references(`${y}.${w}`)}break;case"signature_single":case"attachment":case"attachment_single":e.json(p);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:Fe.unreachable(g)}}let d=i?n?.schema[i.old].type:void 0;return i&&d&&!e6(d)&&e.renameColumn(i.old,i.updated),n&&Object.entries(n.schema).filter(([h,m])=>!e6(m.type)&&t.schema[h]==null).forEach(([h,m])=>{i?.old===h||e6(m.type)||(n.constrained&&n.constrained.indexOf(h)!==-1&&e.dropForeign(h),e.dropColumn(h))}),e}o(uMe,"generateSchema");function J3t(e,t,r){return e.createTable(t.name,n=>{uMe(n,t,r)})}o(J3t,"buildCreateTable");function X3t(e,t,r,n,i){return e.alterTable(t.name,s=>{uMe(s,t,r,n,i)})}o(X3t,"buildUpdateTable");function Z3t(e,t){return e.dropTable(t.name)}o(Z3t,"buildDeleteTable");var t6=class{static{o(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,Y3t.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=J3t(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=X3t(r,t.table,t.tables,t.meta?.oldTable,t.meta?.renamed),this.sqlClient==="mssql"&&t.meta?.renamed){let i=t.meta.renamed.old,s=t.meta.renamed.updated,a=t?.schema?`${t.schema}.${t.table.name}`:`${t.table.name}`,u=zm(n);if(Array.isArray(u))for(let c of u)c.sql.startsWith("exec sp_rename")&&(c.sql=`exec sp_rename '${a}.${i}', '${s}', 'COLUMN'`,c.bindings=[]);return u}break;case"DELETE_TABLE":n=Z3t(r,t.table);break;default:throw new Error("Table operation is of unknown type")}return zm(n)}},ZP=t6;var pMe=require("lodash");var s6="__bb_total";function cMe(){return(L.SQL_MAX_ROWS?parseInt(L.SQL_MAX_ROWS):null)||5e3}o(cMe,"getBaseLimit");function r6(){return(L.SQL_MAX_RELATED_ROWS?parseInt(L.SQL_MAX_RELATED_ROWS):null)||500}o(r6,"getRelationshipLimit");function tQt(e,t){return e.sort((r,n)=>{let i=t.find(a=>a&&r.endsWith(a)),s=t.find(a=>a&&n.endsWith(a));return i&&!s?-1:!i&&s?1:r.localeCompare(n)})}o(tQt,"prioritisedArraySort");function hMe(e){return Array.isArray(e)?e.map(t=>hMe(t)):(e.bindings&&(e.bindings=e.bindings.map(t=>typeof t=="boolean"?t?1:0:t)),e)}o(hMe,"convertBooleans");function lMe(e){return e.sourceType==="internal"||e.sourceId===Un}o(lMe,"isSqs");function rQt(e,t='"'){return e.replace(new RegExp(t,"g"),`${t}${t}`)}o(rQt,"escapeQuotes");function nQt(e,t='"'){return`${t}${rQt(e,t)}${t}`}o(nQt,"wrap");function iQt(e,t='"'){for(let r in e)typeof e[r]=="string"&&(e[r]=nQt(e[r],t));return`[${e.join(",")}]`}o(iQt,"stringifyArray");function n6(e){return`{${(Array.isArray(e)?e:e==null?[]:[e]).map(n=>{if(typeof n=="string"&&n.length>1){let i=n[0],s=n[n.length-1];if(i==='"'&&s==='"'||i==="'"&&s==="'")return n.substring(1,n.length-1)}return`${n}`}).join(",")}}`}o(n6,"toPgArrayLiteral");function mMe(e){return XA.includes(e.type)&&!de.schema.isDeprecatedSingleUserColumn(e)}o(mMe,"isJsonColumn");var oQt={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},i6=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 Tt.ColumnSplitter([this.table],{aliases:this.query.tableAliases,columnPrefix:this.query.meta?.columnPrefix})}static{o(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(a=>{let u=a.split(/\./g),c,l=u[0];return u.length>1&&(c=u[0],l=u.slice(1).join(".")),{table:c,column:l,field:a}}).filter(({table:a})=>!a||a===n).map(({table:a,column:u,field:c})=>{let l=i[u];return this.SPECIAL_SELECT_CASES.POSTGRES_MONEY(l)?this.knex.raw("??::money::numeric as ??",[this.rawQuotedIdentifier([a,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))]):a?this.rawQuotedIdentifier(`${a}.${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(),s=this.table.schema[i],a=this.rawQuotedIdentifier(t);return(s.type==="string"||s.type==="longform"||s.type==="bb_reference_single"||s.type==="bb_reference"||s.type==="options"||s.type==="barcodeqr")&&(r?.forSelect?a=this.knex.raw("to_char(??) as ??",[a,this.rawQuotedIdentifier(i)]):a=this.knex.raw("to_char(??)",[a])),a}parse(t,r){if(Array.isArray(t))return JSON.stringify(t);if(t==null)return null;if(this.requiresJsonAsStringClient()&&mMe(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"),s=t.getSeconds().toString().padStart(2,"0");return`${n}:${i}:${s}`}if(typeof t=="string")return new Date(`1970-01-01T${t}Z`)}if(typeof t=="string"&&r.type==="datetime")if(r.timeOnly){if(!fq(t))return null}else if(r.dateOnly){let n=lq(t);return n?new Date(n):null}else return r.ignoreTimezones?eI(t)?new Date(t):cq(t)?new Date(t+"Z"):null:eI(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),s=this.table.schema[i];s&&(t[r]=this.parse(n,s))}return t}parseFilters(t){t=(0,pMe.cloneDeep)(t);for(let r of Object.values(Qf)){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:s}=this.splitter.run(i),a=this.table.schema[s];a&&(n[i]=this.parse(n[i],a))}}for(let r of Object.values(wa)){let n=t[r];if(n)for(let i of Object.keys(n)){let{column:s}=this.splitter.run(i),a=this.table.schema[s];a&&(n[i]=n[i].map(u=>this.parse(u,a)))}}for(let r of Object.values(Wh)){let n=t[r];if(n)for(let i of Object.keys(n)){let{column:s}=this.splitter.run(i),a=this.table.schema[s];if(!a)continue;let u=n[i];"low"in u&&(u.low=this.parse(u.low,a)),"high"in u&&(u.high=this.parse(u.high,a))}}return t}addJoinFieldCheck(t,r){let n=r.from?.split(".")[0]||"";return t.andWhere(`${n}.fieldName`,"=",r.column)}addRelationshipForFilter(t,r,n,i,s){let{relationships:a,schema:u,tableAliases:c,table:l}=this.query,f=c?.[l.name]||l.name,d=o(p=>n.match(new RegExp(`^${p}\\.`)),"matches");if(!a)return t;for(let p of a){let h=p.tableName,m=c?.[h]||h,g=d(h)||d(m),y=d(p.column),b=p.column===this.splitter.run(n).column&&!this.splitter.run(n).tableName;if((g||y||b)&&p.to&&p.tableName){let w=this.knex.select(this.knex.raw(1)).from({[m]:h}),E=w.clone(),S=dq(p),T;if(g?T=n:T=n.replace(new RegExp(`^${p.column}.`),`${c?.[p.tableName]||p.tableName}.`),S){let R=c?.[S.through]||p.through,A=this.tableNameWithSchema(S.through,{alias:R,schema:u});E=E.innerJoin(A,function(){this.on(`${m}.${S.toPrimary}`,"=",`${R}.${S.to}`)}).where(`${R}.${S.from}`,"=",this.rawQuotedIdentifier(`${f}.${S.fromPrimary}`)),this.client==="sqlite3"&&(E=this.addJoinFieldCheck(E,S)),b&&i==="empty"?t=t.whereNotExists(E):b&&i==="notEmpty"?t=t.whereExists(E):t=t.where(O=>{O.whereExists(s(T,E)),r&&O.orWhereNotExists(w.clone().innerJoin(A,function(){this.on(`${f}.${S.fromPrimary}`,"=",`${R}.${S.from}`)}))})}else{let R=`${m}.${p.to}`,A=`${f}.${p.from}`;E=E.where(R,"=",this.rawQuotedIdentifier(A)),b&&i==="empty"?t=t.whereNotExists(E):b&&i==="notEmpty"?t=t.whereExists(E):t=t.where(O=>{O.whereExists(s(T,E.clone())),r&&O.orWhereNotExists(E)})}}}return t}addFilters(t,r,n){if(!r)return t;let i=this;r=this.parseFilters({...r});let s=this.query.tableAliases,a=r.allOr,c=this.client==="sqlite3"?this.table._id:this.table.name;function l(g){return s?.[g]||g}o(l,"getTableAlias");function f(g,y,b,w){let E=o((S,T,R)=>{let[A,...O]=T.split("."),I=O.join("."),D=l(A);return S.andWhere(x=>b(x,D?`${D}.${I}`:I,R))},"handleRelationship");for(let S in g){let T=g[S],R=Zw(S),A=R.includes(".")||i.getFieldSchema(R)?.type==="link",O=n?.relationship&&A,I;if(S==="_complexIdOperator"&&(I=g[S])&&w){let D=l(c);t=w(t,I.id.map(x=>D?`${D}.${x}`:x),I.values)}else if(A)O&&(a&&(t=t.or),t=i.addRelationshipForFilter(t,oQt[y],R,y,(D,x)=>E(x,D,T)));else{let D=l(c);t=b(t,D?`${D}.${R}`:R,T)}}}o(f,"iterate");let d=this.client==="sqlite3"&&this.query.meta?.sqliteUseLikeWithoutLower,p=o((g,y,b)=>((r?.fuzzyOr||a)&&(g=g.or),d?g.whereRaw("?? LIKE ?",[this.rawQuotedIdentifier(y),`%${b}%`]):this.client==="oracledb"||this.client==="sqlite3"?g.whereRaw("LOWER(??) LIKE ?",[this.rawQuotedIdentifier(y),`%${b.toLowerCase()}%`]):g.whereILike(this.rawQuotedIdentifier(y),this.knex.raw("?",[`%${b}%`]))),"like"),h=o((g,y=!1)=>{function b(w){return(a||g===r?.containsAny)&&(w=w.or),g===r?.notContains&&(w=w.not),w}o(b,"addModifiers"),this.client==="pg"?f(g,"contains",(w,E,S)=>{w=b(w);let T=this.getFieldSchema(E),R=this.rawQuotedIdentifier(E),A=Array.isArray(S)?[...S]:[S],O=this.SPECIAL_SELECT_CASES.POSTGRES_ARRAY(T);return y?O?w.whereRaw("COALESCE(?? && ?::text[], FALSE)",[R,n6(A)]):w.whereRaw("COALESCE(??::jsonb \\?| ?::text[], FALSE)",[R,n6(A)]):O?w.whereRaw("COALESCE(?? @> ?::text[], FALSE)",[R,n6(A)]):w.whereRaw("COALESCE(??::jsonb @> ?::jsonb, FALSE)",[R,iQt(A)])}):this.client==="mysql2"||this.client==="mariadb"?f(g,"contains",(w,E,S)=>{let T=Array.isArray(S)?S:[S];return b(w).whereRaw("COALESCE(?(??, ?), FALSE)",[this.knex.raw(y?"JSON_OVERLAPS":"JSON_CONTAINS"),this.rawQuotedIdentifier(E),JSON.stringify(T)])}):f(g,"contains",(w,E,S)=>(S.length===0||(w=w.where(T=>(g===r?.notContains&&(T=T.not),T=T.where(R=>{for(let A of S){g===r?.containsAny?R=R.or:R=R.and;let O=!d,I=typeof A=="string"?`"${O?A.toLowerCase():A}"`:A,D=O?"COALESCE(LOWER(??), '')":"COALESCE(??, '')";R=R.whereLike(this.knex.raw(D,[this.rawQuotedIdentifier(E)]),`%${I}%`)}}),g===r?.notContains&&(T=T.or.whereNull(this.rawQuotedIdentifier(E))),T))),w))},"contains");if(r.$and){let{$and:g}=r;for(let y of g.conditions)t=t.where(b=>{this.addFilters(b,y,n)})}if(r.$or){let{$or:g}=r;t=t.where(y=>{for(let b of g.conditions)y.orWhere(w=>this.addFilters(w,{...b,allOr:!0},n))})}r.oneOf&&f(r.oneOf,"oneOf",(g,y,b)=>{let w=this.getFieldSchema(y),E=Array.isArray(b)?b:[b];if(a&&(g=g.or),this.client==="oracledb")y=this.convertClobs(y);else if(this.client==="sqlite3"&&w?.type==="datetime"&&w.dateOnly){for(let S of E)S!=null?g=g.or.whereLike(y,`${S.toISOString().slice(0,10)}%`):g=g.or.whereNull(y);return g}return g.whereIn(y,E)},(g,y,b)=>(a&&(g=g.or),this.client==="oracledb"&&(y=y.map(w=>this.convertClobs(w))),g.whereIn(y,Array.isArray(b)?b:[b]))),r.string&&f(r.string,"string",(g,y,b)=>{if(a&&(g=g.or),d)return g.whereRaw("?? LIKE ?",[this.rawQuotedIdentifier(y),`${b}%`]);if(this.client==="oracledb"||this.client==="sqlite3")return g.whereRaw("LOWER(??) LIKE ?",[this.rawQuotedIdentifier(y),`${b.toLowerCase()}%`]);{let w=this.getFieldSchema(y);return this.SPECIAL_SELECT_CASES.POSTGRES_ENUM(w)?g.whereRaw("??::text ilike ?",[this.knex.raw(this.quote(w.name)),`${b}%`]):g.whereILike(y,`${b}%`)}}),r.fuzzy&&f(r.fuzzy,"fuzzy",p),r.range&&f(r.range,"range",(g,y,b)=>{let w=o(I=>I&&Object.keys(I).length===0&&Object.getPrototypeOf(I)===Object.prototype,"isEmptyObject");w(b.low)&&(b.low=""),w(b.high)&&(b.high="");let E=tI(b.low),S=tI(b.high),T=this.getFieldSchema(y),R=y,A=b.high,O=b.low;return this.client==="sqlite3"&&T?.type==="datetime"&&T.dateOnly&&(A!=null&&(A=`${A.toISOString().slice(0,10)}T23:59:59.999Z`),O!=null&&(O=O.toISOString().slice(0,10))),this.client==="oracledb"?R=this.convertClobs(y):this.client==="sqlite3"&&T?.type==="bigint"&&(R=this.knex.raw("CAST(?? AS INTEGER)",[this.rawQuotedIdentifier(y)]),A=this.knex.raw("CAST(? AS INTEGER)",[b.high]),O=this.knex.raw("CAST(? AS INTEGER)",[b.low])),a&&(g=g.or),E&&S?g.whereBetween(R,[O,A]):E?g.where(R,">=",O):S?g.where(R,"<=",A):g}),r.equal&&f(r.equal,"equal",(g,y,b)=>{let w=this.getFieldSchema(y);if(a&&(g=g.or),this.client==="mssql")return g.whereRaw("CASE WHEN ?? = ? THEN 1 ELSE 0 END = 1",[this.rawQuotedIdentifier(y),b]);if(this.client==="oracledb"){let E=this.convertClobs(y);return g.where(S=>S.whereNotNull(E).andWhere(E,b))}else return this.client==="sqlite3"&&w?.type==="datetime"&&w.dateOnly?b!=null?g.whereLike(y,`${b.toISOString().slice(0,10)}%`):g.whereNull(y):g.whereRaw("COALESCE(?? = ?, FALSE)",[this.rawQuotedIdentifier(y),b])}),r.notEqual&&f(r.notEqual,"notEqual",(g,y,b)=>{let w=this.getFieldSchema(y);if(a&&(g=g.or),this.client==="mssql")return g.whereRaw("CASE WHEN ?? = ? THEN 1 ELSE 0 END = 0",[this.rawQuotedIdentifier(y),b]);if(this.client==="oracledb"){let E=this.convertClobs(y);return g.where(S=>S.not.whereNull(E).and.where(E,"!=",b)).or.whereNull(E)}else return this.client==="sqlite3"&&w?.type==="datetime"&&w.dateOnly?b!=null?g.not.whereLike(y,`${b.toISOString().slice(0,10)}%`).or.whereNull(y):g.not.whereNull(y):g.whereRaw("COALESCE(?? != ?, TRUE)",[this.rawQuotedIdentifier(y),b])}),r.empty&&f(r.empty,"empty",(g,y)=>(a&&(g=g.or),g.whereNull(y))),r.notEmpty&&f(r.notEmpty,"notEmpty",(g,y)=>(a&&(g=g.or),g.whereNotNull(y))),r.contains&&h(r.contains),r.notContains&&h(r.notContains),r.containsAny&&h(r.containsAny,!0);let m=s?.[this.table._id]||this.table._id;return r.documentType&&!aq(this.table)&&m&&t.andWhereLike(`${m}._id`,`${ti(r.documentType)}%`),t}isSqs(){return lMe(this.table)}getTableName(t){t||(t=this.table);let r=t.name;lMe(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 ${s6}`)}addAggregations(t,r){let n=this.query.resource?.fields||[],i=this.getTableName();if(n.length>0){let s=n.map(a=>this.qualifyIdentifier(a));if(this.client==="oracledb"){let a=s.map(c=>this.convertClobs(c)),u=s.map(c=>this.convertClobs(c,{forSelect:!0}));t=t.groupBy(a).select(u)}else t=t.groupBy(s).select(s)}for(let s of r){let a=s.calculationType;if(a==="count")if("distinct"in s&&s.distinct)if(this.client==="oracledb"){let u=this.convertClobs(`${i}.${s.field}`);t=t.select(this.knex.raw("COUNT(DISTINCT ??) as ??",[u,s.name]))}else t=t.countDistinct(`${i}.${s.field} as ${s.name}`);else if(this.client==="oracledb"){let u=this.convertClobs(`${i}.${s.field}`);t=t.select(this.knex.raw("COUNT(??) as ??",[u,s.name]))}else t=t.count(`${s.field} as ${s.name}`);else{let u=this.getFieldSchema(s.field);if(!u)throw new Error(`field schema missing for aggregation target: ${s.field}`);let c=this.knex.raw("??(??)",[this.knex.raw(a),this.rawQuotedIdentifier(`${i}.${s.field}`)]);u.type==="bigint"&&(c=this.castIntToString(c)),t=t.select(this.knex.raw("?? as ??",[c,s.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,s=this.getTableName();if(!Array.isArray(i))throw new Error("Sorting requires primary key to be specified for table");if(r&&Object.keys(r||{}).length>0)for(let[u,c]of Object.entries(r)){let l=this.getFieldSchema(u);if(this.isUnsortableField(l))continue;let f=c.direction==="ascending"?"asc":"desc",d;(this.client==="pg"||this.client==="oracledb")&&(d=c.direction==="ascending"?"first":"last");let p=`${s}.${u}`,h;this.isAggregateField(u)?h=this.rawQuotedIdentifier(u):this.client==="oracledb"?h=this.convertClobs(p):h=this.rawQuotedIdentifier(p),t=t.orderByRaw(`?? ?? ${d?"nulls ??":""}`,[h,this.knex.raw(f),...d?[this.knex.raw(d)]:[]])}if(!((n?.aggregations?.length??0)>0)){let u=this.findSortablePrimaryKey(i);if(u&&(!r||r[u]===void 0))t=t.orderBy(`${s}.${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],s,a;if(n.length>1){let l=n.shift();s=n.join("."),a=`${l}.${s}`}else s=n.join("."),a=s;this.query.meta?.columnPrefix&&(i=i.replace(this.query.meta.columnPrefix,""));let u=this.rawQuotedIdentifier(a),c=t.schema[i];return c&&c.type==="bigint"&&(u=this.castIntToString(u)),[s,u]}maxFunctionParameters(){switch(this.client){case"sqlite3":return 127;case"pg":return 100;default:return 200}}addJsonRelationships(t,r,n){let i=this.client,s=this.knex,{resource:a,tableAliases:u,schema:c,tables:l}=this.query,f=a?.fields||[];for(let d of n){let{tableName:p,through:h,to:m,from:g,fromPrimary:y,toPrimary:b}=d;if(!p||!r)continue;let w=l[p];if(!w)throw new Error(`related table "${p}" not found in datasource`);let E=u?.[p]||p,S=u?.[r]||r,T=h&&u?.[h]||h,R=this.tableNameWithSchema(p,{alias:E,schema:c}),A=[...w?.primary||[],w?.primaryDisplay].filter($=>$),O=tQt(f.filter($=>$.split(".")[0]===E),A);O=O.slice(0,Math.floor(this.maxFunctionParameters()/2));let I=O.map($=>this.buildJsonField(w,$));if(!I.length)continue;let D=I.map($=>{let q=this.client==="oracledb"?" VALUE ":",";return this.knex.raw(`?${q}??`,[$[0],$[1]]).toString()}).join(","),x=`${E}.${b||m}`,W=s.from(R).orderBy(x),N=h&&b&&y,V=N?`${T}.${g}`:`${E}.${m}`,k=N?`${S}.${y}`:`${S}.${g}`;if(N){let $=this.tableNameWithSchema(h,{alias:T,schema:c});W=W.join($,function(){this.on(`${E}.${b}`,"=",`${T}.${m}`)})}W=W.where(this.rawQuotedIdentifier(V),"=",this.rawQuotedIdentifier(k));let M=o($=>(W=W.select(O.map(q=>this.rawQuotedIdentifier(q))).limit(r6()),s.select($).from({[E]:W})),"standardWrap"),ee;switch(i){case"sqlite3":W=this.addJoinFieldCheck(W,d),ee=M(this.knex.raw(`json_group_array(json_object(${D}))`));break;case"pg":ee=M(this.knex.raw(`json_agg(json_build_object(${D}))`));break;case"mariadb":ee=W.select(s.raw(`json_arrayagg(json_object(${D}) LIMIT ${r6()})`));break;case"mysql2":case"oracledb":ee=M(this.knex.raw(`json_arrayagg(json_object(${D}))`));break;case"mssql":{let $=s.select("*").from({[S]:W.select(I.map(q=>s.ref(q[1]).as(q[0]))).limit(r6())});ee=s.raw(`(SELECT ?? = (${$} FOR JSON PATH))`,[this.rawQuotedIdentifier(E)]);break}default:throw new Error(`JSON relationships not implement for ${i}`)}t=t.select({[d.column]:ee})}return t}addJoin(t,r,n){let{tableAliases:i,schema:s}=this.query,a=r.to,u=r.from,c=r.through,l=i?.[a]||a,f=c&&i?.[c]||c,d=i?.[u]||u,p=this.tableNameWithSchema(a,{alias:l,schema:s}),h=c?this.tableNameWithSchema(c,{alias:f,schema:s}):void 0;return c?t=t.leftJoin(h,function(){for(let m of n){let g=m.fromPrimary,y=m.from;this.orOn(`${d}.${g}`,"=",`${f}.${y}`)}}).leftJoin(p,function(){for(let m of n){let g=m.toPrimary,y=m.to;this.orOn(`${l}.${g}`,`${f}.${y}`)}}):t=t.leftJoin(p,function(){for(let m of n){let g=m.from,y=m.to;this.orOn(`${d}.${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[s,a]of Object.entries(this.query.table.schema)){if(a.constraints?.presence===!0||a.type==="formula"||a.type==="auto"||a.type==="link"||a.type==="ai")continue;i[s]==null&&(i[s]=null)}else for(let[s,a]of Object.entries(i))a==null&&delete i[s];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:s,table:a}=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 d=this.query.resource?.aggregations||[];if(r==="COUNT"?c=this.addDistinctCount(c):d.length>0?c=this.addAggregations(c,d):c=c.select(this.generateSelectStatement()),r!=="COUNT"&&(c=this.addSorting(c)),c=this.addFilters(c,n,{relationship:!0}),s?.length&&d.length===0){let p=this.query.tableAliases?.[a.name]||a.name,h=this.addSorting(this.knex.with("paginated",c.clone().clearSelect().select("*")).select(this.generateSelectStatement()).from({[p]:"paginated"}));return this.addJsonRelationships(h,a.name,s)}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(),s=this.parseBody(r);return i=this.addFilters(i,n,{relationship:!0}),t.disableReturning?i.update(s):i.update(s).returning("*")}delete(t){let{filters:r}=this.query,n=this.qualifiedKnex();return n=this.addFilters(n,r,{relationship:!0}),t.disableReturning?n.delete():n.delete().returning(this.generateSelectStatement())}},o6=class extends ZP{constructor(r,n=cMe()){super(r);this.limit=n}static{o(this,"SqlQueryBuilder")}convertToNative(r,n={}){let i=this.getSqlClient();if(n?.disableBindings)return{sql:r.toString()};{let s=zm(r);return i==="sqlite3"&&(s=hMe(s)),s}}_query(r,n={}){let i=this.getSqlClient(),s={client:this.getBaseSqlClient()};(i==="sqlite3"||i==="oracledb")&&(s.useNullAsDefault=!0);let a=(0,dMe.knex)(s),u,c=new i6(i,a,r);switch(this._operation(r)){case"CREATE":u=c.create(n);break;case"READ":u=c.read({limits:{query:this.limit,base:cMe()}});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=s=>s){let s=this.getSqlClient(),a=this._operation(r),u=this._query(r,{disableReturning:!0});if(Array.isArray(u)){let d=[];for(let p of u)d.push(await n(p,a));return d}let c;a==="DELETE"&&(c=i(await this.getReturningRow(n,r)));let l=await n(u,a),f=i(l);if(a==="CREATE"||a==="UPDATE"){let d;s==="mssql"?d=f?.[0].id:(s==="mysql2"||s==="mariadb")&&(d=f?.insertId),c=i(await this.getReturningRow(n,this.checkLookupKeys(d,r)))}return a==="COUNT"?f:a!=="READ"?c:f.length?f:[{[a.toLowerCase()]:!0}]}getTableName(r,n){let i=r.name;if(r.sourceType==="internal"||r.sourceId===Un){if(!r._id)return;i=r._id}return n?.[i]||i}convertJsonStringColumns(r,n,i){let s=this.getTableName(r,i);for(let[a,u]of Object.entries(r.schema)){if(!mMe(u))continue;let c=`${s}.${a}`;for(let l of n)typeof l[c]=="string"&&(l[c]=JSON.parse(l[c])),typeof l[a]=="string"&&(l[a]=JSON.parse(l[a]))}return n}log(r,n){Gw(this.getSqlClient(),r,n)}},gMe=o6;var a6={};G(a6,{base:()=>sQt});function sQt(e){return{_id:Fn,language:"sqlite",sql:{tables:{},options:{table_name:e}}}}o(sQt,"base");var yT={};G(yT,{jsonFromCsvString:()=>aQt});var yMe=U(require("csvtojson"));async function aQt(e,t){let{ignoreEmpty:r=!1,allowSingleColumn:n=!1,possibleDelimiters:i=[",",";",":","|","~"," "," "]}=t||{};for(let s of i){let a,u=!1;try{let c=await(0,yMe.default)({ignoreEmpty:r,delimiter:s}).fromString(e);for(let[,l]of c.entries()){let f=Object.keys(l);if(a==null&&(a=f),!n&&f.length===1){u=!0;break}if(a.length!==f.length){u=!0;break}for(let d of a)(l[d]===void 0||l[d]==="")&&(l[d]=null)}if(u)continue;return c}catch{continue}}throw new Error("Unable to determine delimiter")}o(aQt,"jsonFromCsvString");var cQt=U(require("@koa/router"));var Ae={...tE,...C},bMe=o((e={})=>{XO(e.db)},"init");var Sh={};G(Sh,{ai:()=>Y6,auditLogs:()=>wh,automations:()=>ky,backups:()=>to,branding:()=>K6,environmentVariables:()=>fa,features:()=>Zi,groups:()=>$t,init:()=>K7t,licensing:()=>Sf,logger:()=>eb,plugins:()=>m8,publicApi:()=>p5,quotas:()=>mr,scimGroups:()=>Cv,scimUsers:()=>jo,users:()=>a8,utils:()=>GT});var K6={};G(K6,{getBrandingConfig:()=>UKt});var Zi={};G(Zi,{checkBackups:()=>Di,checkFeature:()=>SN,checkFeatures:()=>W6,checkSCIM:()=>Q6,isAppBuildersEnabled:()=>V6,isAuditLogsEnabled:()=>TN,isBackupsEnabled:()=>G6,isBrandingEnabled:()=>$6,isEnforceableSSO:()=>bUe,isExpandedPublicApiEnabled:()=>Ec,isPWAEnabled:()=>CKt,isPkceOidcEnabled:()=>DKt,isRecaptchaEnabled:()=>xKt,isSSOEnforced:()=>NKt,isSyncAutomationsEnabled:()=>OKt,isTranslationsEnabled:()=>PKt,isTriggerAutomationRunEnabled:()=>IKt,isUserGroupsEnabled:()=>H6,isViewPermissionEnabled:()=>LKt,isViewReadonlyColumnsEnabled:()=>kKt});var Sf={};G(Sf,{cache:()=>la,client:()=>vf,features:()=>gN,getFreeLicense:()=>U6,getLicense:()=>M6,getLicenseFromKey:()=>dUe,keys:()=>B6,offline:()=>bN,quotas:()=>yN});var la={};G(la,{getCachedLicense:()=>gUe,invalidate:()=>yUe,refresh:()=>eh});var EN=U(require("dd-trace"));var vf={};G(vf,{activateLicenseKey:()=>I6,getLicense:()=>xy,getLicenseFromKey:()=>O6,triggerQuota:()=>rKt});var _Me=U(require("node-fetch"));var u6=require("dd-trace"),wMe=require("dd-trace/ext/formats");var c6=class{constructor(t){this.apiCall=t=>async(r="",n={})=>await u6.tracer.trace(`api.${t}`,async i=>{i.setTag("url",r);let s={...n.headers};s["Content-Type"]||(s["Content-Type"]="application/json",s.Accept="application/json");let a=s["Content-Type"]==="application/json";ke.correlation.setHeader(s),u6.tracer.inject(i,wMe.HTTP_HEADERS,s);let u={method:t,body:a?JSON.stringify(n.body):n.body,headers:s,credentials:"include"};return(0,_Me.default)(`${this.host}${r}`,u)});this.post=this.apiCall("POST");this.get=this.apiCall("GET");this.patch=this.apiCall("PATCH");this.del=this.apiCall("DELETE");this.put=this.apiCall("PUT");this.host=t}static{o(this,"API")}},l6=c6;var{getDispatcher:dQt}=nt;async function eN(e,t,r){let n=typeof e=="string"?e:e instanceof URL?e.href:e.url,i=dQt({rejectUnauthorized:r?.rejectUnauthorized,url:n});return fetch(e,{...t,dispatcher:i})}o(eN,"proxyFetch");var ua={};G(ua,{bustCache:()=>p6,getCurrentUsageValues:()=>IMe,getQuotaUsage:()=>Xp,setAllUsage:()=>m6,setAppUsageValue:()=>h6,setUsage:()=>AMe,setUsagePerApp:()=>RMe,utils:()=>wT});var wT={};G(wT,{generateBaseQuotaUsage:()=>rN,generateNewMonthlyQuotas:()=>_T,generateNewQuotaUsage:()=>d6,getBreakdownName:()=>iN,getCurrentMonthString:()=>wf,getQuotaDocId:()=>bT,setCurrentMonth:()=>nN,setQuotaReset:()=>f6});var bT=o(()=>C.isSelfHostUsingCloud()?`quota_usage_${C.getTenantId()}`:F.StaticDatabases.GLOBAL.docs.usageQuota,"getQuotaDocId"),EMe=o(()=>{let e=new Date;return new Date(e.getFullYear(),e.getMonth()+1,1).toISOString()},"getNextQuotaReset"),f6=o(e=>{e.quotaReset=EMe()},"setQuotaReset"),wf=o(()=>{let e=new Date,t=e.getMonth()+1,r=e.getFullYear();return`${t}-${r}`},"getCurrentMonthString"),rN=o(()=>({usageQuota:{apps:0,rows:0,plugins:0,users:0,creators:0,userGroups:0,aiCustomConfigs:0,triggers:{}},monthly:{[wf()]:_T()}}),"generateBaseQuotaUsage"),d6=o(()=>{let e={_id:bT(),quotaReset:EMe(),...rN(),apps:{}};return nN(e),e},"generateNewQuotaUsage"),_T=o(()=>({queries:0,automations:0,budibaseAICredits:0,actions:0,triggers:{}}),"generateNewMonthlyQuotas"),nN=o(e=>{let t=wf();e.monthly||(e.monthly={}),e.monthly[t]||(e.monthly[t]=_T()),e.monthly.current=e.monthly[t]},"setCurrentMonth"),iN=o((e,t)=>{if(!(!t||!e))switch(e){case"automations":return"automations";case"queries":return Ns(t)?"rowQueries":fm(t)?"datasourceQueries":void 0}},"getBreakdownName");var SMe=nr.fromSeconds(60).toMs(),{Writethrough:TMe}=Be.writethrough;function pQt(e){return delete e.usageLimits,delete e.usageQuota.automationRuns,delete e.usageQuota.emails,delete e.usageQuota.storage,delete e.usageQuota.views,delete e.usageQuota.publishedApps,delete e.usageQuota.developers,e}o(pQt,"clearDeprecated");var oN=o(()=>Ae.isSelfHostUsingCloud()?new TMe(Ae.getSelfHostCloudDB(),SMe):new TMe(Ae.getGlobalDB(),SMe),"getDB");async function p6(e=0){let r=oN(),n=bT(),i=await r.tryGet(n);i&&i._rev&&await r.remove(n,i._rev).catch(async s=>{if(e<1)return await p6(e+1);throw s})}o(p6,"bustCache");var Xp=o(async()=>{let e=oN(),t=await e.tryGet(bT());if(!t){t=d6();let{rev:r}=await e.put(t);t._rev=r}return nN(t),f6(t),pQt(t)},"getQuotaUsage"),AMe=o(async(e,t,r)=>m6({name:t,type:r,values:{total:e}}),"setUsage"),RMe=o(async(e,t,r)=>{let n=oN(),i=await Xp(),s=Object.values(e).reduce((u,c)=>u+c,0);for(let[u,c]of Object.entries(e))i=OMe(i,t,r,{total:s,app:c},{appId:u});let a=await n.put(i);return i._rev=a.rev,i},"setUsagePerApp"),hQt=o((e,t,r,n)=>{let i=iN(t,r);if(!i||!n?.breakdown)return e;e.breakdown||(e.breakdown={}),e.breakdown[i]||(e.breakdown[i]={parent:t,values:{}});let s=e.breakdown[i];return s.values[r]=n.breakdown,e},"setBreakdown"),h6=o((e,t,r,n={},i)=>{let s;try{s=F.getProdWorkspaceID(n?.appId||C.getWorkspaceId())}catch{}if(!s||!i.app||!$h.includes(t))return e;e.apps?.[s]||(e.apps={...e.apps,[s]:rN()});let a=e.apps[s];switch(r){case"static":a.usageQuota[t]=i.app;break;case"monthly":{let u=wf(),c=t,l=a.monthly[u];l||(a.monthly[u]=_T(),l=a.monthly[u]),l[c]=i.app,LX.includes(c)&&n?.id&&(l=hQt(l,c,n.id,i));break}}return e},"setAppUsageValue"),vMe=o((e,t,r,n)=>{if(!$h.includes(r))return{};let i;try{i=F.getProdWorkspaceID(C.getWorkspaceId())}catch{}if(!i||!e.apps||!e.apps[i])return{app:0};let s=e.apps[i];switch(t){case"static":if(s.usageQuota?.[r])return{app:s.usageQuota[r]};break;case"monthly":{let a=wf(),u=r;if(!s.monthly?.[a]?.[u])break;let c=s.monthly[a],l=c[u],f,d=iN(u,n);return d&&n&&c.breakdown?.[d]&&(f=c.breakdown[d]?.values[n]),{app:l,breakdown:f||0}}}return{app:0}},"getAppUsageValue"),mQt=o((e,t,r)=>{t.usageQuota.triggers||(t.usageQuota.triggers={}),r&&(t.usageQuota.triggers[e]=r)},"setStaticTriggers"),gQt=o((e,t,r,n)=>{r.monthly[t].triggers||(r.monthly[t].triggers={}),n&&(r.monthly[t].triggers[e]=n)},"setMonthlyTriggers"),OMe=o((e,t,r,n,i={})=>{if(r==="static")t=t,e.usageQuota[t]=n.total,mQt(t,e,n.triggers);else if(r==="monthly"){t=t;let s=wf();e.monthly[s][t]=n.total,gQt(t,s,e,n.triggers)}else throw new Error(`Invalid usage type: ${r}`);return h6(e,t,r,i,n)},"coreUsageUpdate"),m6=o(async e=>{let t=Array.isArray(e)?e:[e],r=oN(),n=await Xp();for(let s of t)n=OMe(n,s.name,s.type,s.values,s.opts);let i=await r.put(n,0);return n._rev=i.rev,n},"setAllUsage"),IMe=o(async(e,t,r)=>{let n=await Xp(),i=0,s={};switch(e){case"static":if(n.usageQuota[t]){let a=t;i=n.usageQuota[a],s=vMe(n,e,t,r)}break;case"monthly":{let a=wf(),u=t;n.monthly[a][u]&&(i=n.monthly[a][u],s=vMe(n,e,t,r));break}default:throw new Error(`Invalid usage type: ${e}`)}return $h.includes(t)&&!(s.app||s.breakdown)&&(s.app=s.app||0,s.breakdown=s.breakdown||0),{total:i,app:s.app,breakdown:s.breakdown}},"getCurrentUsageValues");var ms={};G(ms,{destroy:()=>_Qt,get:()=>g6,save:()=>bQt});var yQt=o(()=>({_id:tr.GLOBAL.docs.licenseInfo}),"newLicenseInfo"),bQt=o(async e=>{let t=await g6();t={...t,...e};let n=await Ae.getGlobalDB().put(t);return t._rev=n.rev,t},"save"),g6=o(async()=>{let e=Ae.getGlobalDB();try{return await e.get(tr.GLOBAL.docs.licenseInfo)}catch(t){if(t.status===404)return yQt();throw t}},"get"),_Qt=o(async()=>{let e=Ae.getGlobalDB(),t=await g6();t&&t._rev&&await e.remove(tr.GLOBAL.docs.licenseInfo,t._rev)},"destroy");var Or={};G(Or,{bulkSave:()=>PQt,destroy:()=>NQt,fetch:()=>IQt,generateUserGroupID:()=>RQt,get:()=>CQt,getBulk:()=>xQt,getByName:()=>y6,getGroupUsers:()=>sN,getGroupUsersParams:()=>NMe,getUserGroupsParams:()=>PMe,save:()=>DQt});async function CMe(){let e=ze.designDoc.base("type");e.sql.tables={[Kf]:{fields:{appId:"VARCHAR",event:"VARCHAR",userId:"VARCHAR",timestamp:"VARCHAR",metadata:"VARCHAR",name:"VARCHAR",type:"VARCHAR",fallback:"VARCHAR"}}};let t=C.getAuditLogsDB(),r;try{r=await t.get(Fn),r={...r,...e}}catch(n){if(n.status===404)r=e;else throw n}await t.put(r)}o(CMe,"createAuditLogDesignDocSQL");var{ViewName:EQt,SEPARATOR:SQt,DocumentType:TQt,createView:vQt}=F,AQt=TQt.USER+SQt;async function xMe(){let e=Ae.getGlobalDB(),t=`function(doc) {
|
|
467
467
|
if (doc._id.startsWith("${AQt}") && Array.isArray(doc.userGroups)) {
|
|
468
468
|
for (let groupId of doc.userGroups) {
|
|
469
469
|
emit("g_" + groupId, { email: doc.email, userId: doc._id })
|
|
@@ -1010,7 +1010,7 @@ Example: return $("Score") + $("Weight")
|
|
|
1010
1010
|
if (${h} ${f}) {
|
|
1011
1011
|
${d}
|
|
1012
1012
|
}
|
|
1013
|
-
}`,...m}}o(yb,"default");async function lHe(){let e=C.getWorkspaceDB(),t=[];if(ie.SELF_HOSTED){let r=await e.get("_design/database");for(let n of Object.keys(r.views||{})){if(Object.values(kc).indexOf(n)!==-1)continue;let s=r.views?.[n];s&&t.push({name:n,...s})}}else{let r=(await e.allDocs(FGe({include_docs:!0}))).rows.map(n=>n.doc);for(let n of r)t.push({name:n.name,...n.view})}return t}o(lHe,"getViews");async function r7(e,t,r){let n=C.getWorkspaceDB();if(ie.SELF_HOSTED){let i=await n.get("_design/database");i.views={...i.views,[t]:r},e&&delete i.views[e],await n.put(i)}else{let i=Vv(t),s=e?Vv(e):null,a={_id:i,view:r,name:t,tableId:r.meta.tableId};try{let u=await n.get(i);if(s){let c=await n.get(s);await n.remove(c._id,c._rev)}u&&u._rev&&(a._rev=u._rev)}catch{}await n.put(a)}}o(r7,"saveView");async function fHe(e,t){let r=await e.get("_design/database"),n=r.views?.[t].meta;if(!n)throw new Error("Unable to migrate view - no metadata");let i=yb(n);delete r.views?.[t],await e.put(r),await r7(null,t,i)}o(fHe,"migrateToInMemoryView");async function dHe(e,t){let r=await e.get(Vv(t)),n=await e.get("_design/database"),i=r.view.meta;if(!i)throw new Error("Unable to migrate view - no metadata");n.views||(n.views={}),n.views[t]=yb(i),await e.put(n),await e.remove(r._id,r._rev)}o(dHe,"migrateToDesignView");async function n7(e,t){let n=(await e.get("_design/database")).views?.[t];if(n==null)throw{status:404,message:"Unable to get view"};return n}o(n7,"getFromDesignDoc");async function i7(e,t){let r=await e.get(Vv(t));if(r)return r.view;throw{status:404,message:"Unable to get view"}}o(i7,"getFromMemoryDoc");var hHe=require("lodash/fp"),u7=U(require("lodash/isEqual")),mHe=U(require("lodash/uniq"));var bb=require("lodash/fp"),pHe=U(require("lodash/isEqual"));function Atr(e,t){let r=(0,bb.merge)(e,t);for(let n of Object.keys(t))t[n]===void 0&&delete r[n];return r}o(Atr,"mergeRows");async function $k(e,t){let r=C.getWorkspaceDB();if(!e.relatedFormula)return;let n=[];for(let i of Array.isArray(t)?t:[t]){let s={};for(let[a,u]of Object.entries(i)){let c=e.schema[a];if(c&&c.type==="link"){let l=c.tableId;s[l]||(s[l]=[]);let f=s[l].map(p=>p._id),d=u.filter(p=>!f.includes(p._id));s[l]=s[l].concat(d)}}for(let a of e.relatedFormula){let u;try{if(!s[a]||s[a].length===0)continue;u=await r.get(a)}catch{}for(let c of Object.values(u.schema))if(c.type==="formula"&&c.formulaType==="static"){n=n.concat(s[a].map(l=>sA(u,l,{updateFormula:!1,updateAIColumns:!1})));break}}}await Promise.all(n)}o($k,"updateRelatedFormula");async function o7(e){let t=C.getWorkspaceDB(),r=(await t.allDocs(sn(e._id,null,{include_docs:!0}))).rows.map(s=>s.doc),n=await Jt(e,(0,bb.cloneDeep)(r),{squash:!1}),i=[];for(let s of r){let a=n.find(u=>u._id===s._id);if(a){let u=await pu(e,(0,bb.cloneDeep)(s),{dynamic:!1,contextRows:[a]});(0,pHe.default)(u,s)||i.push(u)}}await t.bulkDocs(i)}o(o7,"updateAllFormulasInTable");async function sA(e,t,r){let n=C.getWorkspaceDB(),{updateFormula:i=!0,updateAIColumns:s=!0}=r||{},a=P.views.isView(e)?await P.views.getTable(e.id):e;t.type="row";let u=await Jt(e,(0,bb.cloneDeep)(t),{squash:!1});t=await pu(a,t,{dynamic:!1,contextRows:[u]}),s&&(t=await G$e(a,t,{contextRows:[u]})),await n.put(t);let c=await n.tryGet(t._id);if(!c)throw new Error(`Unable to retrieve row ${t._id} after saving.`);delete u._rev,u=Atr(c,u),u=await pu(a,u,{dynamic:!1}),i&&await $k(a,u);let l=await gk(e,u);return{row:u,squashed:l,table:a}}o(sA,"finaliseRow");function gHe(e){return e.type==="formula"&&e.formulaType==="static"}o(gHe,"isStaticFormula");function s7(e,t){let r=[];t=Array.isArray(t)?t:[t];for(let n of Object.values(e.schema))gHe(n)&&Oje(n?.formula??"",t)&&r.push(n.name);return r}o(s7,"getFormulaThatUseColumn");async function Rtr(e,{oldTable:t,deletion:r}){let n=(await P.tables.getAllInternalTables()).filter(a=>a._id!==e._id),i=t?t.schema:e.schema,s=Object.values(i).filter(a=>r||!e.schema[a.name]);for(let a of s){let u=e;if(a.type==="link"){let l=a.tableId;u=n.find(f=>f._id===l)}if(!u)continue;let c=s7(u,a.name);if(c.length>0&&await a7(e,c),!!e.relatedFormula)for(let l of e.relatedFormula){let f=Object.values(e.schema).filter(p=>p.type==="link"&&p.tableId===l),d=n.find(p=>p._id===l);if(d&&f&&a.type!=="link"){let p=[];for(let h of f)p=p.concat(s7(d,[h.fieldName,a.name]));p.length>0&&await a7(d,(0,mHe.default)(p))}}}}o(Rtr,"checkIfFormulaNeedsCleared");async function Otr(e,{deletion:t}={}){let r=e._id,n=C.getWorkspaceDB(),i=(await P.tables.getAllInternalTables()).filter(u=>u._id!==r),s=(0,hHe.cloneDeep)(i),a=Object.values(e.schema).filter(Uf);for(let u of i){if(!u.relatedFormula)continue;let c=u.relatedFormula.indexOf(r);c!==-1&&u.relatedFormula.splice(c,1)}if(!t)for(let u of a){let c=s7(e,u.name);if(!c||c.length===0)continue;let l=i.find(f=>f._id===u.tableId);l&&(!l.relatedFormula||!l.relatedFormula.includes(r))&&(l.relatedFormula=l.relatedFormula?[...l.relatedFormula,r]:[r])}for(let u of s){let c=i.find(l=>u._id===l._id);c&&!(0,u7.default)(u,c)&&await n.put(c)}}o(Otr,"updateRelatedFormulaLinksOnTables");async function Itr(e,{oldTable:t}){Object.values(e.schema).find(n=>gHe(n)&&(!t||!t.schema[n.name]||!(0,u7.default)(t.schema[n.name],n)))!=null&&await o7(e)}o(Itr,"checkIfFormulaUpdated");async function Vk(e,{oldTable:t,deletion:r}){await Otr(e,{deletion:r}),await Rtr(e,{oldTable:t,deletion:r}),r||await Itr(e,{oldTable:t})}o(Vk,"runStaticFormulaChecks");async function a7(e,t){let r=C.getWorkspaceDB(),n=await r.allDocs(sn(e._id,null,{include_docs:!0}));return await r.bulkDocs(n.rows.map(({doc:i})=>(t.forEach(s=>delete i[s]),i)))}o(a7,"clearColumns");async function Ctr(e,t,r){let n=C.getWorkspaceDB(),i=[],s=[];if(t&&t.schema&&e.schema&&(s=Object.keys(t.schema).filter(a=>e.schema[a]==null)),r||s.length!==0){let u=(await n.allDocs(sn(e._id,null,{include_docs:!0}))).rows.map(({doc:c})=>c);i=u.map(c=>{if(c=(0,yHe.cloneDeep)(c),r){let l=c[r.updated]!==void 0,f=c[r.old]!==void 0;!l&&f&&(c[r.updated]=c[r.old]),delete c[r.old]}else s.length!==0&&s.forEach(l=>delete c[l]);return c}),await Fc.tableUpdate(e,u,{oldTable:t,rename:r}),await Ntr(e,s,r)}return{rows:i,table:e}}o(Ctr,"checkForColumnUpdates");function xtr(e,t){if(!e)return t;t._rev=e._rev;let r,n;for([r,n]of Object.entries(e.schema))if(n.autocolumn&&n.subtype==="autoID"&&t.schema[r]){let i=t.schema[r];i.lastID=n.lastID}return t}o(xtr,"makeSureTableUpToDate");async function _He(e,t,r,n){let i=t,s=[],a=!!n?.keepCouchId;for(let u=0;u<e.length;u++){let c=e[u];c._id=a&&c._id||CGe(t._id),c.type="row",c.tableId=t._id,c=await ba(r,t,c,{noAutoRelationships:!0});for(let[l,f]of Object.entries(i.schema)){if(f.type==="link"&&e.find(d=>d[l]))throw new K(`Can't bulk import relationship fields for internal databases, found value in field "${l}"`,400);if((f.type==="options"||f.type==="array")&&c[l]){let d=Array.isArray(c[l]),p=d?c[l]:[c[l]],h=[...f.constraints.inclusion,...p],m=new Set(h);f.constraints.inclusion=Array.from(m),f.constraints.inclusion.sort(),!d&&f.type==="array"&&(c[l]=p)}}s.push(c)}return s}o(_He,"importToRows");async function l7(e,t){let r=e.schema,n=t?.identifierFields||[],i=t?.importRows;if(!i||!Gk(i)||!Wk(r))return e;let s=C.getWorkspaceDB(),a=e7(i,e),u=await _He(a,e,t?.userId,{keepCouchId:n.includes("_id")}),c=u.length;return n.length>0&&(await s.allDocs(sn(e._id,null,{include_docs:!0}))).rows.map(f=>f.doc).forEach(f=>{u.forEach(d=>{let p=!0;for(let h of n)if(d[h]!==f[h]){p=!1;break}p&&(d._id=f._id,d._rev=f._rev,c--)})}),await mr.addRows(c,()=>s.bulkDocs(u),{tableId:e._id}),await Oe.rows.imported(e,u.length),e}o(l7,"handleDataImport");async function Dtr(e){let t=C.getWorkspaceDB();if(e.indexes&&e.indexes.length>0){let r=await t.getIndexes(),n=`search:${e._id}`,i=r.indexes.find(s=>s.name===n);if(i){let s=i.def.fields.map(a=>Object.keys(a)[0]);(0,bHe.default)(s,e.indexes)||(await t.deleteIndex(i),await t.createIndex({index:{fields:e.indexes,name:n,ddoc:"search_ddoc",type:"json"}}))}else await t.createIndex({index:{fields:e.indexes,name:n,ddoc:"search_ddoc",type:"json"}})}return e}o(Dtr,"handleSearchIndexes");function Ptr(e){if(e._id===Vt.USER_METADATA)for(let[t,r]of Object.entries(lGe.schema))e.schema[t]==null&&(e.schema[t]=r);return e}o(Ptr,"checkStaticTables");var c7=class{static{o(this,"TableSaveFunctions")}constructor({userId:t,oldTable:r,importRows:n}){this.db=C.getWorkspaceDB(),this.userId=t,this.oldTable=r,this.importRows=n,this.rows=[]}async before(t){return this.oldTable&&(t=xtr(this.oldTable,t)),t=Ptr(t),t}async mid(t,r){let n=await Ctr(t,this.oldTable,r);return this.rows=this.rows.concat(n.rows),t}async after(t){return t=await Dtr(t),t=await l7(t,{importRows:this.importRows,userId:this.userId}),await P.tables.sqs.addTable(t),t}getUpdatedRows(){return this.rows}};async function Ntr(e,t,r){let i=(await lHe()).filter(s=>s.meta?.tableId===e._id);for(let s of i){let a=!1,u=s.meta;if(u&&(r?(u.field===r.old&&(u.field=r.updated,a=!0),u.groupBy===r.old&&(u.groupBy=r.updated,a=!0),u.filters&&u.filters.forEach(c=>{c.key===r.old&&(c.key=r.updated,a=!0)})):t&&t.forEach(c=>{if(u.field===c&&(delete u.field,delete u.calculation,delete u.groupBy,a=!0),u.groupBy===c&&(delete u.groupBy,a=!0),u.filters&&u.filters.length){let l=u.filters.length;u.filters=u.filters.filter(f=>f.key!==c),l!==u.filters.length&&(a=!0)}}),a)){let c=Object.values(e.schema).find(d=>d.name==s.groupBy),l=yb(u,c?.type==="array"),f=s.name;await r7(null,f,l),l.meta?.schema||(l.meta.schema=e.schema),e.views?.[f]&&(e.views[f]=l.meta)}}}o(Ntr,"checkForViewUpdates");function wHe(e,t){let r=e?[...e]:[];return r.push(t),r}o(wHe,"mergePendingColumnRenames");function EHe(e,t){return`fk_${t.name}_${e.fieldName}`}o(EHe,"generateForeignKey");function SHe(e,t,r){return`jt_${t.name}_${r.name}_${e.name}_${e.fieldName}`}o(SHe,"generateJunctionTableName");function aA(e,t){let r={type:"number",constraints:{},name:e};return t&&(r.meta=t),r}o(aA,"foreignKeyStructure");function Ltr(e,t){if(dY.indexOf(e)===-1&&dY.indexOf(t)===-1)return!1;for(let r of fY){let n=r.indexOf(e),i=r.indexOf(t);if(n!==-1&&i!==-1&&n!==i)return!0}return!1}o(Ltr,"areSwitchableTypes");function Hk(e,t){if(!t)return!1;for(let[r,n]of Object.entries(t.schema)){if(!e.schema[r])continue;let i=n.type,s=e.schema[r].type;if(i!==s&&!Ltr(i,s))return!0}return!1}o(Hk,"hasTypeChanged");function THe(e,t){return t&&e.source==="GOOGLE_SHEETS"&&(t.primary=[Wv],delete t.schema?.id),t}o(THe,"setStaticSchemas");async function vHe(e,t){let r=C.getWorkspaceDB(),n=e._id;if(!ie.isTest()||ie.COUCH_DB_URL){let s=(await r.getIndexes()).indexes.find(a=>a.name===`search:${n}`);s&&await r.deleteIndex(s)}await Vk(e,{deletion:!0}),t&&await Fc.tableDelete(e,t),await P.tables.sqs.removeTable(e)}o(vHe,"internalTableCleanup");var AHe=c7;var f7=require("lodash/fp");function d7(e,t,r){let n=r?.oldTable,i=n||e;for(let[s,a]of Object.entries(i.schema))if(a.type==="link"&&(r?.deleting||n?.schema[s]!=null)&&e.schema[s]==null){let u=a.tableId,c=Object.values(t).find(f=>f._id===u),l=a.relationshipType!=="many-to-many"&&a.foreignKey;if(!c||!l)continue;for(let[f,d]of Object.entries(c.schema)){if(d.type!=="link")continue;let p=d.name===a.name;d.fieldName===l&&!p&&delete c.schema[f]}}}o(d7,"cleanupRelationships");function ktr(e){return e==="many-to-many"?"many-to-many":e==="one-to-many"?"many-to-one":"one-to-many"}o(ktr,"otherRelationshipType");function RHe(e,t,r,n){if(!r.primary||!n.primary){let l=r.primary?n.name:r.name;throw new Error(`Unable to generate many link schema, "${l}" does not have a primary key`)}let i=r.name+r.primary[0],s=n.name+n.primary[0],a=SHe(t,r,n),u=e._id,c={type:"table",_id:io(u,a),name:a,primary:[i,s],constrained:[i,s],sourceId:u,sourceType:"external",schema:{[i]:aA(i,{toTable:r.name,toKey:r.primary[0]}),[s]:aA(s,{toTable:n.name,toKey:n.primary[0]})}};return t.through=c._id,t.throughFrom=s,t.throughTo=i,t.fieldName=s,c}o(RHe,"generateManyLinkSchema");function OHe(e,t,r,n){if(!t.primary||!r.primary)throw new Error("Unable to generate link schema, no primary keys");let i=n==="one-to-many",s=i?r.primary[0]:t.primary[0],a=EHe(e,r);return e.relationshipType=n,e.foreignKey=i?a:s,e.fieldName=i?s:a,a}o(OHe,"generateLinkSchema");function IHe(e,t,r,n){let i;if(!(e.relationshipType==="many-to-many")&&e.foreignKey)i=(0,f7.cloneDeep)(e),i.fieldName=e.foreignKey,i.foreignKey=e.fieldName;else{let a=e;i=(0,f7.cloneDeep)(e),i.fieldName=a.throughTo,i.throughTo=a.throughFrom,i.throughFrom=a.throughTo}i.relationshipType=ktr(e.relationshipType),i.tableId=r._id,i.name=n,t.schema[n]=i}o(IHe,"generateRelatedSchema");function CHe(e){return e.foreignKey||e.through}o(CHe,"isRelationshipSetup");var fA={};G(fA,{allowedFields:()=>orr,create:()=>rrr,enrichSchema:()=>wb,get:()=>$tr,getAllEnriched:()=>Htr,getEnriched:()=>Vtr,getTable:()=>Qtr,isInternal:()=>ztr,isV2:()=>Hr,isView:()=>Ktr,remove:()=>irr,renameLinkedViews:()=>srr,syncSchema:()=>lA,update:()=>nrr});var p7={};G(p7,{create:()=>Utr,get:()=>DHe,getEnriched:()=>Mtr,remove:()=>Btr,update:()=>Ftr});var uA=require("lodash");function xHe(e){return e&&(0,uA.isPlainObject)(e)&&Object.keys(e).length===0}o(xHe,"isEmptyObject");function oo(e){let t=(0,uA.cloneDeep)(e);if(!t.queryUI&&t.query&&!xHe(t.query)){if(!Array.isArray(t.query))throw new K("view is missing queryUI field",400);t.queryUI=Fe.processSearchFilters(t.query)}return t}o(oo,"ensureQueryUISet");function _b(e){let t=(0,uA.cloneDeep)(e);return t.queryUI&&!xHe(t.queryUI)&&(t.query=Tt.buildQuery(t.queryUI)),t}o(_b,"ensureQuerySet");async function DHe(e){let t=Zr(e),{datasourceId:r,tableName:n}=wr(t),s=(await P.datasources.get(r)).entities[n],u=Object.values(s.views).filter(Hr).find(c=>c.id===e);if(!u)throw new Error("No view found");return oo(u)}o(DHe,"get");async function Mtr(e){let t=Zr(e),{datasourceId:r,tableName:n}=wr(t),s=(await P.datasources.get(r)).entities[n],u=Object.values(s.views).filter(Hr).find(c=>c.id===e);if(u)return await wb(oo(u),s.schema)}o(Mtr,"getEnriched");async function Utr(e,t){let r={...t,id:ok(e),version:2};r=_b(r),r=oo(r);let n=C.getWorkspaceDB(),{datasourceId:i,tableName:s}=wr(e),a=await P.datasources.get(i);return a.entities[s].views??={},a.entities[s].views[r.name]=r,await n.put(a),r}o(Utr,"create");async function Ftr(e,t){let r=C.getWorkspaceDB(),{datasourceId:n,tableName:i}=wr(e),s=await P.datasources.get(n);s.entities[i].views??={};let a=s.entities[i].views,u=Object.values(a).find(c=>Hr(c)&&c.id===t.id);if(!u||!u.name)throw new K(`View ${t.id} not found in table ${e}`,404);if(Hr(u)&&u.type!==t.type)throw new K("Cannot update view type after creation",400);return t=_b(t),t=oo(t),delete a[u.name],a[t.name]=t,await r.put(s),{view:t,existingView:u}}o(Ftr,"update");async function Btr(e){let t=C.getWorkspaceDB(),r=await DHe(e);if(!r)throw new K(`View ${e} not found`,404);let{datasourceId:n,tableName:i}=wr(r.tableId),s=await P.datasources.get(n);return delete s.entities[i].views[r?.name],await t.put(s),r}o(Btr,"remove");var h7={};G(h7,{create:()=>jtr,get:()=>PHe,getEnriched:()=>qtr,remove:()=>Gtr,update:()=>Wtr});async function PHe(e){let t=Zr(e),r=await P.tables.getTable(t),i=Object.values(r.views).filter(Hr).find(s=>s.id===e);if(!i)throw new Error("No view found");return oo(i)}o(PHe,"get");async function qtr(e){let t=Zr(e),r=await P.tables.getTable(t),i=Object.values(r.views).filter(Hr).find(s=>s.id===e);if(i)return await wb(oo(i),r.schema)}o(qtr,"getEnriched");async function jtr(e,t){let r={...t,id:ok(e),version:2};r=_b(r),r=oo(r);let n=C.getWorkspaceDB(),i=await P.tables.getTable(e);return i.views??={},i.views[r.name]=r,await n.put(i),r}o(jtr,"create");async function Wtr(e,t){let r=C.getWorkspaceDB(),n=await P.tables.getTable(e);n.views??={};let i=Object.values(n.views).find(s=>Hr(s)&&s.id===t.id);if(!i||!i.name)throw new K(`View ${t.id} not found in table ${e}`,404);if(Hr(i)&&i.type!==t.type)throw new K("Cannot update view type after creation",400);return t=_b(t),t=oo(t),delete n.views[i.name],n.views[t.name]=t,await r.put(n),{view:t,existingView:i}}o(Wtr,"update");async function Gtr(e){let t=C.getWorkspaceDB(),r=await PHe(e),n=await P.tables.getTable(r?.tableId);if(!r)throw new K(`View ${e} not found`,404);return delete n.views[r?.name],await t.put(n),r}o(Gtr,"remove");function cA(e){return Mt(e)?p7:h7}o(cA,"pickApi");async function $tr(e){let t=Zr(e);return cA(t).get(e)}o($tr,"get");async function Vtr(e){let t=Zr(e);return cA(t).getEnriched(e)}o(Vtr,"getEnriched");async function Htr(){let e=await P.tables.getAllTables(),t=[];for(let r of e){if(!r.views||Object.keys(r.views).length===0)continue;let n=Object.values(r.views).filter(Hr),i=await Promise.all(n.map(s=>wb(oo(s),r.schema,e)));t=t.concat(i)}return t}o(Htr,"getAllEnriched");async function Qtr(e){let t=typeof e=="string"?e:e.id,r=C.getTableForView(t);if(r)return r;let n=Zr(t),i=await P.tables.getTable(n);return C.setTableForView(t,i),i}o(Qtr,"getTable");function Ktr(e){return e.id&&ln(e.id)&&e.version===2}o(Ktr,"isView");function ztr(e){if(!ln(e))return!1;let t=Zr(e);return!Mt(t)}o(ztr,"isInternal");function Ytr(e){let t={},r=de.views.calculationFields(e);for(let n of Object.keys(r)){let i=r[n],s=i.calculationType==="count",a="distinct"in i;if(!(s&&a)){if(t[i.field]?.[i.calculationType])throw new K(`Duplicate calculation on field "${i.field}", calculation type "${i.calculationType}"`,400);t[i.field]??={},t[i.field][i.calculationType]=!0}}}o(Ytr,"guardDuplicateCalculationFields");function Jtr(e){let t={},r=de.views.calculationFields(e);for(let n of Object.keys(r)){let i=r[n];if(!(!(i.calculationType==="count")||!("distinct"in i))){if(t[i.field]?.[i.calculationType])throw new K(`Duplicate calculation on field "${i.field}", calculation type "${i.calculationType} distinct"`,400);t[i.field]??={},t[i.field][i.calculationType]=!0}}}o(Jtr,"guardDuplicateCountDistinctFields");async function Xtr(e,t){let r=de.views.calculationFields(t);if(Ytr(t),Jtr(t),Object.keys(r).length>5)throw new K("Calculation views can only have a maximum of 5 fields",400);for(let i of Object.keys(r)){let s=r[i];if(!s.field)throw new K(`Calculation field "${i}" is missing a "field" property`,400);let a=e.schema[s.field];if(!a)throw new K(`Calculation field "${i}" references field "${s.field}" which does not exist in the table schema`,400);if(!(s.calculationType==="count")&&!NM(a.type)&&!qX(a))throw new K(`Calculation field "${i}" references field "${s.field}" which is not a numeric field`,400)}let n=de.views.basicFields(t);for(let i of Object.keys(n)){let s=e.schema[i];if(!s)throw new K(`Group by field "${i}" does not exist in the table schema`,400);if(!jX(s))throw new K(`Grouping by fields of type "${s.type}" is not supported`,400)}}o(Xtr,"guardCalculationViewSchema");async function NHe(e,t){let r=await P.tables.getTable(e);if(de.views.isCalculationView(t))await Xtr(r,t);else if(de.views.hasCalculationFields(t))throw new K("Calculation fields are not allowed in non-calculation views",400);await Ztr(r,t),de.views.isCalculationView(t)||trr(r,t),err(t)}o(NHe,"guardViewSchema");async function Ztr(e,t){let r=t.schema||{};for(let n of Object.keys(r)){let i=r[n];if(de.views.isCalculationField(i))continue;if(!e.schema[n])throw new K(`Field "${n}" is not valid for the requested table`,400);if(r[n].readonly&&!r[n].visible)throw new K(`Field "${n}" must be visible if you want to make it readonly`,400)}}o(Ztr,"checkReadonlyFields");function err(e){if(e.primaryDisplay&&!e.schema?.[e.primaryDisplay]?.visible)throw new K(`You can't hide "${e.primaryDisplay}" because it is the display column.`,400)}o(err,"checkDisplayField");function trr(e,t){let r=e.views?.[t.name];for(let n of Object.values(e.schema)){if(!de.schema.isRequired(n.constraints))continue;let i=t.schema?.[n.name],s=r?.schema?.[n.name];if(!(!i&&!s?.visible)){if(!i?.visible)throw new K(`You can't hide "${n.name}" because it is a required field.`,400);if(de.views.isBasicViewField(i)&&i.readonly)throw new K(`You can't make "${n.name}" readonly because it is a required field.`,400)}}}o(trr,"checkRequiredFields");async function rrr(e,t){await NHe(e,t);let r=await cA(e).create(e,t),n=await P.permissions.getResourcePerms(e);return await P.permissions.setPermissions(r.id,{writeRole:n.write.role,readRole:n.read.role}),r}o(rrr,"create");async function nrr(e,t){return await NHe(e,t),cA(e).update(e,t)}o(nrr,"update");function Hr(e){return de.views.isV2(e)}o(Hr,"isV2");async function irr(e){let t=Zr(e);return cA(t).remove(e)}o(irr,"remove");function orr(e,t){return[...Object.keys(e?.schema||{}).filter(r=>{if(!Hr(e))return!0;let n=e.schema[r];return t==="WRITE"?n.visible&&!n.readonly:n.visible}),...Rs,...Tn]}o(orr,"allowedFields");async function wb(e,t,r){async function n(f,d){let p=r?r?.find(m=>m._id===f):await P.tables.getTable(f);if(!p)throw new Error("Cannot enrich relationship, table not found");let h={};for(let m of Object.keys(p.schema)){let g=p.schema[m];if(["link","formula","ai"].includes(g.type)||g.visible===!1)continue;let y=d[m],b=!!y?.visible,w=!!y?.readonly,E={visible:b,readonly:w,order:y?.order,width:y?.width,displayName:y?.displayName,icon:g.icon,type:g.type,subtype:g.subtype};!E.icon&&g.type==="bb_reference"&&g.subtype==="user"&&!de.schema.isDeprecatedSingleUserColumn(g)&&(E.icon="users-three"),h[m]=E}return h}o(n,"populateRelTableSchema");let i={},s=e.schema||{},a=Object.values(s).some(f=>f.order!=null),u=Object.keys(s).filter(f=>de.views.isCalculationField(s[f])?s[f].visible!==!1:f in t&&t[f].visible!==!1),c=Object.keys(t).filter(f=>t[f].visible!==!1),l=new Set([...u,...c]);for(let f of l){let d=s[f]||{visible:!1};i[f]={...t[f],...d,order:a?d?.order??void 0:t[f]?.order,columns:void 0},i[f].type==="link"&&(i[f].columns=await n(i[f].tableId,s[f]?.columns||{}))}return{...e,schema:i}}o(wb,"enrichSchema");function lA(e,t,r={}){let{renameColumn:n,primaryDisplay:i,previousPrimaryDisplay:s}=r;if(n&&e.schema&&e.schema[n.old]!=null&&(e.schema[n.updated]||(e.schema[n.updated]=e.schema[n.old]),delete e.schema[n.old]),n&&e.primaryDisplay===n.old&&(e.primaryDisplay=n.updated),e.schema){for(let a of Object.keys(e.schema)){let u=e.schema[a];if(!u){delete e.schema[a];continue}!de.views.isCalculationField(u)&&!t[a]&&delete e.schema[a]}for(let a of Object.keys(t))e.schema[a]||(e.schema[a]={visible:!1})}if(i&&(e.primaryDisplay==null||e.primaryDisplay===s)){e.primaryDisplay=i,e.schema??={};let a=e.schema[i]||{};e.schema[i]={...a,visible:!0,readonly:!1}}return e}o(lA,"syncSchema");async function srr(e,t){let r={};for(let n of Object.values(e.schema))n.type==="link"&&(r[n.tableId]??=await P.tables.getTable(n.tableId));for(let n of Object.values(r)){let i=!1,s=Object.values(n.views||{}).filter(P.views.isV2);if(s){for(let a of s)for(let u of Object.keys(a.schema||{}).filter(c=>{let l=n.schema[c];return!l||l.type!=="link"?!1:l.tableId===e._id})){let c=a.schema?.[u]?.columns;c&&c[t.old]&&(c[t.updated]=c[t.old],delete c[t.old],i=!0)}i&&await P.tables.saveTable(n)}}}o(srr,"renameLinkedViews");var dA="id";function kHe(e){return e.primary==null||e.primary.length===0}o(kHe,"noPrimaryKey");function arr(e,t){if(!t&&e.schema[dA]&&kHe(e))throw new Error("External tables with no `primary` column set will define an `id` column, but we found an `id` column in the supplied schema. Either set a `primary` column or remove the `id` column.");if(Hk(e,t))throw new Error("A column type has changed.");let r=Object.values(zc);for(let[n,i]of Object.entries(e.schema))if(n!==dA){if(i.type==="auto")throw new Error(`Column "${n}" has type "auto" - this is not supported.`);if(i.subtype&&r.includes(i.subtype))throw new Error(`Column "${n}" has subtype "${i.subtype}" - this is not supported.`);if(i.type==="datetime"){let s=t?.schema[n];if(s&&i.timeOnly!==s.timeOnly)throw new Error(`Column "${n}" can not change from time to datetime or viceversa.`)}}}o(arr,"validate");function urr(e){if(!e)throw new Error("No table supplied");if(e.sourceId)return e.sourceId;if(!e._id)throw new Error("No table ID supplied");return wr(e._id).datasourceId}o(urr,"getDatasourceId");async function m7(e){let t=urr(e),r={...e,created:!0};try{return(await Qk(t,r)).table}catch(n){throw n instanceof Error?new K(n.message,400):new K(n?.message||n,n.status||500)}}o(m7,"create");async function Qk(e,t,r){let n={...t,type:"table",_id:io(e,t.name),sourceId:e},i=r?.tableId||t._id,s;i&&(s=await Eb(i)),arr(n,s),!s&&kHe(n)&&(n.primary=[dA],n.schema[dA]={type:"number",autocolumn:!0,name:dA});for(let h in n.views){let m=n.views[h];!m||!Hr(m)||(n.views[h]=lA(s.views[h],n.schema,{renameColumn:r?.renaming,primaryDisplay:n.primaryDisplay,previousPrimaryDisplay:s?.primaryDisplay}))}let a=C.getWorkspaceDB(),u=await yu.get(e);u.entities||(u.entities={}),n=THe(u,n);let c=(0,LHe.cloneDeep)(u.entities),l=u.entities,f=[];for(let h of Object.values(n.schema)){if(h.type!=="link"||CHe(h))continue;let m=h.tableId,g=Object.values(l).find(w=>w._id===m);if(!g)continue;let y=h.fieldName,b=h.relationshipType;if(b==="many-to-many"){let w=RHe(u,h,n,g);if(l[w.name])throw new Error("Junction table already exists, cannot create another relationship.");l[w.name]=w,f.push(w)}else{let w=b==="one-to-many"?n:g,E=OHe(h,n,g,b);if(w.schema[E]!=null)throw new Error(`Unable to generate foreign key - column ${E} already in use.`);w.schema[E]=aA(E),w.constrained==null&&(w.constrained=[]),w.constrained.indexOf(E)===-1&&w.constrained.push(E),w._id!==n._id&&f.push(w)}IHe(h,g,n,y),l[g.name]=g,h.main=!0}l[n.name]=n,s&&d7(n,l,{oldTable:s});let d=i?"UPDATE_TABLE":"CREATE_TABLE";await qk(u,d,n,s,r?.renaming);for(let h of f){let m=c[h.name],g=m?"UPDATE_TABLE":"CREATE_TABLE";await qk(u,g,h,m)}Array.isArray(n.constrained)&&(n.constrained=n.constrained.filter(h=>Object.keys(n.schema).includes(h))),delete n._rename,u.entities={...u.entities,...l},await a.put(rA(u));let p=await yu.get(u._id);return p.isSQL&&(n.sql=!0),{datasource:p,table:n,oldTable:s}}o(Qk,"save");async function crr(e,t){let r=C.getWorkspaceDB(),n=await yu.get(e),i=n.entities,s="DELETE_TABLE";return i&&(await qk(n,s,t),d7(t,i,{deleting:!0}),delete i[t.name],n.entities=i),await r.put(rA(n)),{datasource:await yu.get(n._id),table:t}}o(crr,"destroy");var hA={};G(hA,{create:()=>g7,destroy:()=>lrr,save:()=>Kk});var UHe=require("lodash/fp"),FHe=U(require("lodash/isEqual"));function MHe(e,t){if(!e.schema)return e;for(let[r,n]of Object.entries(e.schema)){if(!n.autocolumn||n.subtype)continue;let i=t&&t.schema[r];i&&i.subtype?e.schema[r].subtype=i.subtype:e.schema[r]=Jv(n)}return e}o(MHe,"checkAutoColumns");async function g7(e,t,r){let i={_id:yY(),...e,type:e.type||"table",sourceType:"internal"},s=!!t;i.views||(i.views={});try{let{table:a}=await Kk(i,{userId:r,rowsToImport:t,isImport:s});return a}catch(a){throw a instanceof Error?new K(a.message,400):new K(a.message||a,a.status||500)}}o(g7,"create");async function Kk(e,t){let r=C.getWorkspaceDB(),n;if(t?.tableId&&(n=await Eb(t.tableId)),Hk(e,n))throw new Error("A column type has changed.");let i=Nre(e);if(i.length)throw new Error(`Column(s) "${i.join(", ")}" are duplicated - check for other columns with these name (case in-sensitive)`);e=MHe(e,n);let s=new AHe({userId:t?.userId,oldTable:n,importRows:t?.rowsToImport});e=await s.before(e);let a=t?.renaming;if(a&&a.old===a.updated&&(a=void 0),a&&e.schema[a.updated]?.type==="link")throw new Error("Cannot rename a linked column.");let u=n?.pendingColumnRenames?n.pendingColumnRenames:[];a&&(u=wHe(u,a)),u.length>0?e.pendingColumnRenames=u:delete e.pendingColumnRenames,e=await s.mid(e,a);for(let p in e.views){let h=e.views[p];if(h){if(Hr(h)){n?.views&&n.views[p]&&(e.views[p]=lA(n.views[p],e.schema,{renameColumn:a,primaryDisplay:e.primaryDisplay,previousPrimaryDisplay:n?.primaryDisplay}));continue}h.schema.group||h.schema.field||(h.schema=e.schema)}}let c=await ya({eventType:n?"table:updated":"table:save",table:e,oldTable:n});c!=null&&c._rev&&(e._rev=c._rev);let l=s.getUpdatedRows();l&&l.length!==0&&await r.bulkDocs(l);let f=await r.put(e);e._rev=f.rev;let d=(0,UHe.cloneDeep)(e);return e=await s.after(e),(0,FHe.default)(d,e)||(f=await r.put(e),e._rev=f.rev),await Vk(e,{oldTable:n,deletion:!1}),{table:e,oldTable:n}}o(Kk,"save");async function lrr(e){let t=C.getWorkspaceDB(),r=e._id,n=(await t.allDocs(sn(r,null,{include_docs:!0}))).rows.map(i=>i.doc);return await t.bulkDocs(n.map(i=>({...i,_deleted:!0}))),await mr.removeRows(n.length,{tableId:r}),await ya({eventType:"table:delete",table:e}),await t.remove(r,e._rev),await vHe(e,n),{table:e}}o(lrr,"destroy");var b7={};G(b7,{isExternal:()=>Sb,isInternal:()=>y7,isTable:()=>frr});function Sb(e){return e.table&&e.table.sourceType==="external"?!0:!!(e.tableId&&Mt(e.tableId))}o(Sb,"isExternal");function y7(e){return!Sb(e)}o(y7,"isInternal");function frr(e){return e._id&&Ns(e._id)}o(frr,"isTable");var T7={};G(T7,{PermissionUpdateType:()=>qHe,getAllDBRoles:()=>WHe,getDependantResources:()=>prr,getInheritablePermissions:()=>jHe,getResourcePerms:()=>E7,setPermissions:()=>S7,updatePermissionOnRole:()=>w7});var _7=[Wr.PermissionLevel.WRITE,Wr.PermissionLevel.READ,Wr.PermissionLevel.EXECUTE];function drr(e){switch(Qre(e)){case"view":return Wr.PermissionType.TABLE}switch(Hre(e)){case"ta":case"ro":case"datasource_plus":return Wr.PermissionType.TABLE;case"au":return Wr.PermissionType.AUTOMATION;case"wh":return Wr.PermissionType.WEBHOOK;case"query":case"datasource":return Wr.PermissionType.QUERY;default:return Wr.PermissionType.LEGACY_VIEW}}o(drr,"getPermissionType");function BHe(e){let t=drr(e),r={};for(let[n,i]of Object.entries(Et.getBuiltinRoles())){if(!i.permissionId)continue;let s=Wr.getBuiltinPermissionByID(i.permissionId);if(!s)continue;let a=s.permissions.find(u=>u.type===t);if(a&&_7.includes(a.level)){let u=a.level;r[u]=Et.lowerBuiltinRoleID(r[u],n),Wr.isPermissionLevelHigherThanRead(u)&&(r[Wr.PermissionLevel.READ]=Et.lowerBuiltinRoleID(r[Wr.PermissionLevel.READ],n))}}return r}o(BHe,"getBasePermissions");var qHe=(r=>(r.REMOVE="remove",r.ADD="add",r))(qHe||{});async function jHe(e){if(ln(e))return await E7(Zr(e))}o(jHe,"getInheritablePermissions");async function E7(e){let t=await Et.getAllRoles(),r={},n=await jHe(e);for(let s of _7)for(let a of t)Et.checkForRoleResourceArray(a.permissions||{},e)[e]?.indexOf(s)>-1?r[s]={role:Et.getExternalRoleID(a._id,a.version),type:"EXPLICIT"}:!r[s]&&n&&n[s]&&(r[s]={role:n[s].role,type:"INHERITED"});let i=Object.entries(BHe(e)).reduce((s,[a,u])=>(s[a]={role:u,type:"BASE"},s),{});return Object.assign(i,r)}o(E7,"getResourcePerms");async function prr(e){if(Ns(e)){let t={},r=await P.tables.getTable(e),n=Object.values(r.views||{});for(let i of n){if(!Hr(i))continue;let s=await E7(i.id);for(let[,a]of Object.entries(s))a.type==="INHERITED"&&(t.view??=new Set,t.view.add(i.id))}return Object.entries(t).reduce((i,[s,a])=>(i[s]=a.size,i),{})}}o(prr,"getDependantResources");async function w7({roleId:e,resourceId:t,level:r},n){let i=C.getWorkspaceDB(),s=n==="remove",a=Et.isBuiltin(e),u=Et.getDBRoleID(e),c=await WHe(i),l=[];if(a&&!c.some(d=>d._id===u)){let d=Et.getBuiltinRoles()[e];d._id=Et.getDBRoleID(d._id),c.push(d)}for(let d of c){let p=!1,h=d.permissions?d.permissions:{};if((!h[t]||!Array.isArray(h[t]))&&(h[t]=typeof h[t]=="string"?[h[t]]:[]),(d._id!==u||s)&&h[t].indexOf(r)!==-1&&($Ge(h[t],r),p=!0),!s&&d._id===u){let m=new Set(h[t]);h[t]=[...m.add(r)],p=!0}p&&(d.permissions=h,l.push(d))}return(await i.bulkDocs(l)).map(d=>{let p=l.find(m=>m._id===d.id)?.version;return{_id:Et.getExternalRoleID(d.id,p),rev:d.rev,error:d.error,reason:d.reason}})}o(w7,"updatePermissionOnRole");async function S7(e,{writeRole:t,readRole:r}){await w7({roleId:t,resourceId:e,level:"write"},"add"),await w7({roleId:r,resourceId:e,level:"read"},"add")}o(S7,"setPermissions");async function WHe(e){return(await e.allDocs(IGe(null,{include_docs:!0}))).rows.map(r=>r.doc)}o(WHe,"getAllDBRoles");async function v7(e,t,r){let n;return Sb({table:e})?n=await m7(e):n=await g7(e,t,r),await S7(n._id,{writeRole:Et.BUILTIN_ROLE_IDS.ADMIN,readRole:Et.BUILTIN_ROLE_IDS.ADMIN}),n}o(v7,"create");var R7={};G(R7,{external:()=>pA,internal:()=>hA,saveTable:()=>hrr,update:()=>mrr});var GHe=require("lodash");async function hrr(e){let t=C.getWorkspaceDB(),r;if(Mt(e._id)){let i=await P.datasources.get(e.sourceId);i.entities[e.name]=e,r=await t.put(i)}else r=await t.put(e);let n=(0,GHe.cloneDeep)(e);return n._rev=r.rev,n}o(hrr,"saveTable");async function mrr(e,t){let r=e._id;if(Sb({table:e})){let n=e.sourceId;await Qk(n,e,{tableId:r,renaming:t})}else await Kk(e,{tableId:r,renaming:t})}o(mrr,"update");var $He=require("lodash");async function VHe(e,t,r){if(r in e.schema)throw new Hn(`Column "${r}" already exists`);if(r==="")throw new Hn("Column name cannot be empty");if(zf(r))throw new Hn("Column name cannot be a reserved column name");let n=e.schema[t];if(!n)throw new Hn(`Column "${t}" does not exist on table "${e.name}"`);if(n.type!=="link"||n.tableId!=="ta_users")throw new Hn("Only user relationship migration columns is currently supported");let i=n.relationshipType==="one-to-many"?"bb_reference_single":"bb_reference",s={name:r,type:i,subtype:"user"};s.type==="bb_reference"&&(s.constraints={type:"array"}),e.schema[s.name]=s,e=await P.tables.saveTable(e);let a=grr(e,n,s);try{return await a.doMigration()}catch(u){throw delete e.schema[s.name],await P.tables.saveTable(e),u}}o(VHe,"migrate");function grr(e,t,r){if(Mt(e._id))throw new Hn("External tables cannot be migrated");if(!(t.name in e.schema))throw new Hn(`Column "${t.name}" does not exist`);if(r.type!=="bb_reference_single"&&r.type!=="bb_reference")throw new Hn(`Column "${r.name}" is not a user column`);if(r.subtype!=="user")throw new Hn(`Column "${r.name}" is not a user column`);if(!zA(t))throw new Hn(`Column "${t.name}" is not a user relationship`);if(t.tableId!=="ta_users")throw new Hn(`Column "${t.name}" is not a user relationship`);if(t.relationshipType==="one-to-many"){if(r.type!=="bb_reference_single")throw new Hn(`Column "${t.name}" is a one-to-many column but "${r.name}" is not a single user column`);return new O7(e,t,r)}if(t.relationshipType==="many-to-many"||t.relationshipType==="many-to-one"){if(r.type!=="bb_reference")throw new Hn(`Column "${t.name}" is a ${t.relationshipType} column but "${r.name}" is not a multi user column`);return new I7(e,t,r)}throw new Hn("Unknown migration type")}o(grr,"getColumnMigrator");var zk=class{constructor(t,r,n){this.table=t;this.oldColumn=r;this.newColumn=n}static{o(this,"UserColumnMigrator")}pickUserTableLinkSide(t){return t.doc1.tableId==="ta_users"?t.doc1:t.doc2}pickOtherTableLinkSide(t){return t.doc1.tableId==="ta_users"?t.doc2:t.doc1}async doMigration(){let t=(0,$He.cloneDeep)(this.table),r=await P.rows.fetchRaw(this.table._id),n=r.reduce((u,c)=>(u[c._id]=c,u),{}),i=await P.links.fetchWithDocument(this.table._id);for(let u of i){let c=this.pickUserTableLinkSide(u),l=this.pickOtherTableLinkSide(u);if(l.tableId!==this.table._id||l.fieldName!==this.oldColumn.name||c.tableId!=="ta_users")continue;let f=n[l.rowId];f&&this.updateRow(f,c)}await C.getWorkspaceDB().bulkDocs(r),delete this.table.schema[this.oldColumn.name],this.table=await P.tables.saveTable(this.table),await ya({eventType:"table:updated",table:this.table,oldTable:t});let a=await P.tables.getTable(this.oldColumn.tableId);return{tablesUpdated:[this.table,a]}}},O7=class extends zk{static{o(this,"SingleUserColumnMigrator")}updateRow(t,r){t[this.newColumn.name]=F.getGlobalIDFromUserMetadataID(r.rowId)}},I7=class extends zk{static{o(this,"MultiUserColumnMigrator")}updateRow(t,r){t[this.newColumn.name]||(t[this.newColumn.name]=[]),t[this.newColumn.name].push(F.getGlobalIDFromUserMetadataID(r.rowId))}};var C7={};G(C7,{USER_COLUMN_PREFIX:()=>Tb,addTable:()=>vrr,mapToUserColumn:()=>bu,removeTable:()=>Arr,syncDefinition:()=>Trr});var KHe=require("lodash");var yrr=require("lodash/fp");var USn={_id:rb,type:F.BUDIBASE_DATASOURCE_TYPE,name:"Sample Data",source:"BUDIBASE",config:{}};var Yk={"Created At":{name:"Created At",type:"datetime",subtype:"createdAt",icon:"ri-magic-line",autocolumn:!0,constraints:{type:"string",length:{},presence:!1,datetime:{latest:"",earliest:""}}},"Updated At":{name:"Updated At",type:"datetime",subtype:"updatedAt",icon:"ri-magic-line",autocolumn:!0,constraints:{type:"string",length:{},presence:!1,datetime:{latest:"",earliest:""}}}},brr={_id:dGe,type:"table",views:{},sourceId:rb,sourceType:"internal",primaryDisplay:"Item Name",name:"Inventory",schema:{"Item ID":{name:"Item ID",type:"number",subtype:"autoID",icon:"ri-magic-line",width:120,autocolumn:!0,constraints:{type:"number",presence:!1,numericality:{greaterThanOrEqualTo:"",lessThanOrEqualTo:""}}},"Item Name":{type:"string",constraints:{type:"string",length:{maximum:null},presence:{allowEmpty:!1}},name:"Item Name",width:160},"Item Tags":{type:"array",constraints:{type:"array",presence:{allowEmpty:!1},inclusion:["Electrical","Material","Vehicle","Office","Tools"]},name:"Item Tags",sortable:!1},Notes:{type:"longform",constraints:{type:"string",length:{},presence:!1},name:"Notes",useRichText:null,width:220},Status:{type:"options",constraints:{type:"string",presence:{allowEmpty:!1},inclusion:["Available","Repair","Broken"]},name:"Status",width:110,sortable:!1},SKU:{type:"barcodeqr",constraints:{type:"string",length:{},presence:!1},name:"SKU",width:130},"Purchase Date":{type:"datetime",constraints:{type:"string",length:{},presence:!1,datetime:{latest:"",earliest:""}},name:"Purchase Date",ignoreTimezones:!0},"Purchase Price":{type:"number",constraints:{type:"number",presence:!1,numericality:{greaterThanOrEqualTo:null,lessThanOrEqualTo:""}},name:"Purchase Price",width:160},...Yk}},_rr={_id:mY,type:"table",views:{},name:"Employees",sourceId:rb,sourceType:"internal",primaryDisplay:"First Name",schema:{"First Name":{name:"First Name",type:"string",constraints:{type:"string",length:{},presence:!1}},"Last Name":{name:"Last Name",type:"string",constraints:{type:"string",length:{},presence:!1}},Email:{name:"Email",type:"string",constraints:{type:"string",length:{},presence:!1}},Address:{name:"Address",type:"string",constraints:{type:"string",length:{},presence:!1}},City:{name:"City",type:"string",constraints:{type:"string",length:{},presence:!1}},Postcode:{name:"Postcode",type:"string",constraints:{type:"string",length:{},presence:!1}},Phone:{name:"Phone",type:"string",constraints:{type:"string",length:{},presence:!1}},"EMPLOYEE ID":{name:"EMPLOYEE ID",type:"number",subtype:"autoID",icon:"ri-magic-line",autocolumn:!0,constraints:{type:"number",presence:!1,numericality:{greaterThanOrEqualTo:"",lessThanOrEqualTo:""}}},"Employee Level":{type:"options",constraints:{type:"string",presence:!1,inclusion:["Manager","Junior","Senior","Apprentice","Contractor"]},name:"Employee Level",sortable:!1},"Badge Photo":{type:"attachment",constraints:{type:"array",presence:!1},name:"Badge Photo",sortable:!1},Jobs:{type:"link",constraints:{type:"array",presence:!1},fieldName:"Assigned",name:"Jobs",relationshipType:"many-to-many",tableId:hY},"Start Date":{type:"datetime",constraints:{type:"string",length:{},presence:!1,datetime:{latest:"",earliest:""}},name:"Start Date",ignoreTimezones:!0},"End Date":{type:"datetime",constraints:{type:"string",length:{},presence:!1,datetime:{latest:"",earliest:""}},name:"End Date",ignoreTimezones:!0},...Yk}},wrr={_id:hY,type:"table",name:"Jobs",sourceId:rb,sourceType:"internal",primaryDisplay:"Job ID",schema:{"Job ID":{name:"Job ID",type:"number",subtype:"autoID",icon:"ri-magic-line",autocolumn:!0,constraints:{type:"number",presence:!1,numericality:{greaterThanOrEqualTo:"",lessThanOrEqualTo:""}}},"Quote Date":{type:"datetime",constraints:{type:"string",length:{},presence:{allowEmpty:!1},datetime:{latest:"",earliest:""}},name:"Quote Date",ignoreTimezones:!0},"Quote Price":{type:"number",constraints:{type:"number",presence:{allowEmpty:!1},numericality:{greaterThanOrEqualTo:"",lessThanOrEqualTo:""}},name:"Quote Price"},"Works Start":{type:"datetime",constraints:{type:"string",length:{},presence:!1,datetime:{latest:"",earliest:""}},name:"Works Start",ignoreTimezones:!0},Address:{type:"longform",constraints:{type:"string",length:{},presence:!1},name:"Address",useRichText:null},"Customer Name":{type:"string",constraints:{type:"string",length:{maximum:null},presence:!1},name:"Customer Name"},Notes:{type:"longform",constraints:{type:"string",length:{},presence:!1},name:"Notes",useRichText:null},"Customer Phone":{type:"string",constraints:{type:"string",length:{maximum:null},presence:!1},name:"Customer Phone"},"Customer Email":{type:"string",constraints:{type:"string",length:{maximum:null},presence:!1},name:"Customer Email"},Assigned:{name:"Assigned",type:"link",tableId:mY,fieldName:"Jobs",relationshipType:"many-to-many"},"Works End":{type:"datetime",constraints:{type:"string",length:{},presence:!1,datetime:{latest:"",earliest:""}},name:"Works End",ignoreTimezones:!0},"Updated Price":{type:"number",constraints:{type:"number",presence:!1,numericality:{greaterThanOrEqualTo:"",lessThanOrEqualTo:""}},name:"Updated Price"},...Yk}},Err={_id:pGe,type:"table",views:{},name:"Expenses",sourceId:rb,sourceType:"internal",primaryDisplay:"Expense ID",schema:{"Expense ID":{name:"Expense ID",type:"number",subtype:"autoID",icon:"ri-magic-line",autocolumn:!0,constraints:{type:"number",presence:!1,numericality:{greaterThanOrEqualTo:"",lessThanOrEqualTo:""}}},"Expense Tags":{type:"array",constraints:{type:"array",presence:{allowEmpty:!1},inclusion:["Fuel","Food","Materials","Repair","Equipment","Fees","Service","Office","Other"]},name:"Expense Tags",sortable:!1},Cost:{type:"number",constraints:{type:"number",presence:{allowEmpty:!1},numericality:{greaterThanOrEqualTo:"",lessThanOrEqualTo:""}},name:"Cost"},Notes:{type:"longform",constraints:{type:"string",length:{},presence:!1},name:"Notes",useRichText:null},"Payment Due":{type:"datetime",constraints:{type:"string",length:{},presence:!1,datetime:{latest:"",earliest:""}},name:"Payment Due",ignoreTimezones:!0},"Date Paid":{type:"datetime",constraints:{type:"string",length:{},presence:!1,datetime:{latest:"",earliest:""}},name:"Date Paid",ignoreTimezones:!0},Attachment:{type:"attachment",constraints:{type:"array",presence:!1},name:"Attachment",sortable:!1},...Yk}},HHe=[brr,_rr,wrr,Err];var QHe={boolean:"NUMERIC",datetime:"VARCHAR",formula:"VARCHAR",ai:"VARCHAR",longform:"VARCHAR",number:"REAL",string:"VARCHAR",auto:"REAL",options:"VARCHAR",json:"BLOB",internal:"BLOB",barcodeqr:"BLOB",attachment:"BLOB",attachment_single:"BLOB",signature_single:"BLOB",array:"BLOB",link:"BLOB",bigint:"VARCHAR",bb_reference:"VARCHAR",bb_reference_single:"VARCHAR"};function Srr(e,t){let r=e._id,n=t.tableId;return{tableId:Mf(r,n),definition:{"doc1.rowId":"VARCHAR","doc1.tableId":"VARCHAR","doc1.fieldName":"VARCHAR","doc2.rowId":"VARCHAR","doc2.tableId":"VARCHAR","doc2.fieldName":"VARCHAR",tableId:"VARCHAR"}}}o(Srr,"buildRelationshipDefinitions");var Tb="data_";function bu(e){return`${Tb}${de.schema.encodeNonAscii(e)}`}o(bu,"mapToUserColumn");function zHe(e){let t={},r={},n=[];for(let[a,u]of Object.entries(e.schema)){if(u.type==="link"){let{tableId:l,definition:f}=Srr(e,u);t[l]={fields:f}}if(!QHe[u.type])throw new Error(`Unable to map type "${u.type}" to SQLite type`);let c=a.toLowerCase();n.includes(c)||(n.push(c),r[bu(a)]={field:a,type:QHe[u.type]})}let i={};Tn.forEach(a=>{i[a]="VARCHAR"});let s={...i,...r};return t[e._id]={fields:s},t}o(zHe,"mapTable");async function YHe(){let e=await Mh.getAllInternalTables();for(let r of HHe)e.find(n=>n._id===r._id)||e.push(r);let t=ze.designDoc.base("tableId");for(let r of e)t.sql.tables={...t.sql.tables,...zHe(r)};return t}o(YHe,"buildBaseDefinition");async function Trr(){let e=C.getWorkspaceDB(),t;try{t=await e.get(Fn)}catch(n){if(n.status!==404)throw n}let r=await YHe();t&&(r._rev=t._rev),(!t||!(0,KHe.isEqual)(t.sql,r.sql))&&await e.put(r)}o(Trr,"syncDefinition");async function vrr(e){let t=C.getWorkspaceDB(),r;try{r=await t.get(Fn)}catch{r=await YHe()}r.sql.tables={...r.sql.tables,...zHe(e)},await t.put(r)}o(vrr,"addTable");async function Arr(e){let t=C.getWorkspaceDB();try{let[r,n]=await Promise.all([Mh.getAllInternalTables(),t.get(Fn)]),i=r.map(a=>a._id).filter(a=>!a.includes(e._id)),s=!1;for(let a of Object.keys(n.sql?.tables||{}))i.find(u=>a.includes(u))||(delete n.sql.tables[a],s=!0);s&&(await t.put(n),await t.sqlDiskCleanup())}catch(r){if(r?.status===404)return;throw r}}o(Arr,"removeTable");async function JHe(e,t){let r=await mA(),i={name:de.duplicateName(e.name,r.map(a=>a.name)),type:e.type,sourceType:e.sourceType,sourceId:e.sourceId,schema:{...e.schema},views:{},indexes:e.indexes?{...e.indexes}:void 0},s=await v7(i,void 0,t);return await Oe.table.created(s),s}o(JHe,"duplicate");var Mh={populateExternalTableSchemas:rA,...A7,...R7,...x7,...b7,migrate:VHe,sqs:C7,duplicate:JHe};function Rrr(e){let t={};for(let[r,n]of Object.entries(e))if(r.includes("."))t[r]="Table names containing dots are not supported.";else{let s=Object.keys(n.schema).find(a=>a.includes("."));s&&(t[r]=`Column '${s}' is not supported as it contains a dot.`)}return t}o(Rrr,"checkForSchemaErrors");async function XHe(e,t){let r=await Orr(e,t);if(!t)return r;let n={tables:{},errors:{}};for(let i in r.tables)t.some(s=>s.toLowerCase()===i.toLowerCase())&&(n.tables[i]=r.tables[i]);for(let i in r.errors)t.some(s=>s.toLowerCase()===i.toLowerCase())&&(n.errors[i]=r.errors[i]);return{...n,errors:{...n.errors,...Rrr(n.tables)}}}o(XHe,"buildFilteredSchema");async function Orr(e,t){return await(await ZHe(e)).buildSchema(e._id,e.entities,t)}o(Orr,"buildSchemaHelper");async function ZHe(e){let t=await hb(e.source);return e._id&&(e=await Nk(e)),new t(e.config)}o(ZHe,"getConnector");async function Irr(e){if(e._id){let t=await Lk(e._id);e=KJ(e,t)}return await Nk(e)}o(Irr,"getAndMergeDatasource");async function Crr(e,t){let r=C.getWorkspaceDB(),n=await Lk(e),{tables:i,errors:s}=await XHe(n,t),a=n.entities||{},u=Object.keys(a).filter(l=>!Object.keys(i).includes(l));for(let l of u)await P.rowActions.deleteAll(a[l]._id);n.entities=i,kk(n);let c=await r.put(Mh.populateExternalTableSchemas(n));return n._rev=c.rev,{datasource:n,errors:s}}o(Crr,"buildSchemaFromSource");var yu={...Mk,...D7};async function Uh(e){return await so.tracer.trace("processTable",async t=>{if(!e)return e;if(t.addTags({tableId:e._id}),e={...e},e.views){t.addTags({numViews:Object.keys(e.views).length});for(let[r,n]of Object.entries(e.views))Hr(n)&&(e.views[r]=oo(n))}return e._id&&Mt(e._id)?(t.addTags({isExternal:!0}),e.schema.id&&!e.schema.id.name&&(e.schema.id.name="id"),{...e,type:"table",sourceType:"external"}):(t.addTags({isExternal:!1}),{...e,type:"table",primary:["_id"],sourceId:e.sourceId||Un,sourceType:"internal",sql:!0})})}o(Uh,"processTable");async function gA(e){return await so.tracer.trace("processTables",async t=>(t.addTags({numTables:e.length}),await Promise.all(e.map(r=>Uh(r)))))}o(gA,"processTables");async function xrr(e){return await so.tracer.trace("processEntities",async t=>{t.addTags({numTables:Object.keys(e).length});for(let r of Object.keys(e))e[r]=await Uh(e[r]);return e})}o(xrr,"processEntities");async function mA(e){return await so.tracer.trace("getAllInternalTables",async t=>{e||(e=C.getWorkspaceDB()),t.addTags({db:e.name});let r=await e.allDocs(kf(null,{include_docs:!0}));return t.addTags({numTables:r.rows.length}),await gA(r.rows.map(n=>n.doc))})}o(mA,"getAllInternalTables");async function Drr(e){return await so.tracer.trace("getAllInternalTableIds",async t=>{let r=e||C.getWorkspaceDB();t.addTags({db:r.name});let{rows:n}=await r.allDocs(kf(null,{include_docs:!1})),i=n.map(({id:s})=>s);return t.addTags({numTableIds:i.length}),i})}o(Drr,"getAllInternalTableIds");async function Prr(){let e=await mA(),t=[];return C.doInWorkspaceContext(C.getProdWorkspaceId(),async()=>{let r=C.getWorkspaceDB(),n=o(async i=>{let a=0;for(;;){let{rows:u}=await r.allDocs(sn(i,null,{include_docs:!1,limit:25,skip:a}));if(u.length===0)return!1;if(u.some(l=>!l.value?.deleted))return!0;if(u.length<25)return!1;a+=25}},"hasNonDeletedRows");for(let i of e){if(i._id===Vt.USER_METADATA||!i._id)continue;await n(i._id)||t.push(i._id)}return t})}o(Prr,"listEmptyProductionTables");async function e4e(){return await so.tracer.trace("getAllExternalTables",async e=>{let t=await P.datasources.fetch({enriched:!0});e.addTags({numDatasources:t.length});let r=t.filter(i=>i._id!==Un).map(i=>i.entities);e.addTags({numEntities:r.length});let n=[];for(let i of r)i&&(n=n.concat(Object.values(i)));return e.addTags({numTables:n.length}),await gA(n)})}o(e4e,"getAllExternalTables");async function t4e(e,t){return await so.tracer.trace("getExternalTable",async r=>{r.addTags({datasourceId:e,tableName:t});let n=await r4e(e);if(!n[t])throw new Error(`Unable to find table named "${t}"`);let i=await Uh(n[t]);return i.sourceId||(i.sourceId=e),i})}o(t4e,"getExternalTable");async function Eb(e){return await so.tracer.trace("getTable",async t=>{let r=C.getWorkspaceDB();t.addTags({tableId:e,db:r.name});let n;if(e&&Mt(e)){let{datasourceId:i,tableName:s}=wr(e);t.addTags({isExternal:!0,datasourceId:i,tableName:s});let a=await yu.get(i);n={...await t4e(i,s),sql:Bf(a)},t.addTags({isSQL:Bf(a)})}else n=await r.get(e);return await Uh(n)})}o(Eb,"getTable");async function P7(e){return await so.tracer.trace("doesTableExist",async t=>{t.addTags({tableId:e});try{let r=await Eb(e);return t.addTags({tableExists:!!r}),!!r}catch{return t.addTags({tableExists:!1}),!1}})}o(P7,"doesTableExist");async function Nrr(){return await so.tracer.trace("getAllTables",async e=>{let[t,r]=await Promise.all([mA(),e4e()]);return e.addTags({numInternalTables:t.length,numExternalTables:r.length}),await gA([...t,...r])})}o(Nrr,"getAllTables");async function r4e(e){return await so.tracer.trace("getExternalTablesInDatasource",async t=>{let r=await yu.get(e,{enriched:!0});if(!r||!r.entities)throw new Error("Datasource is not configured fully.");return t.addTags({datasourceId:e,numEntities:Object.keys(r.entities).length}),await xrr(r.entities)})}o(r4e,"getExternalTablesInDatasource");async function Lrr(e){return so.tracer.trace("getTables",async t=>{t.addTags({numTableIds:e.length});let r=e.filter(s=>Mt(s)),n=e.filter(s=>!Mt(s)),i=[];if(r.length){let s=await e4e();i=i.concat(s.filter(a=>r.indexOf(a._id)!==-1))}if(n.length){let a=await C.getWorkspaceDB().getMultiple(n,{allowMissing:!0});i=i.concat(a)}return t.addTags({numTables:i.length}),await gA(i)})}o(Lrr,"getTables");async function krr(e){return await so.tracer.trace("enrichViewSchemas",async t=>{t.addTags({tableId:e._id});let r=[];for(let n of Object.values(e.views??[]))P.views.isV2(n)?r.push(await P.views.enrichSchema(n,e.schema)):r.push(n);return{...e,views:r.reduce((n,i)=>(n[i.name]=i,n),{})}})}o(krr,"enrichViewSchemas");var $rr=require("@bull-board/api"),Vrr=require("@bull-board/api/bullAdapter"),Hrr=require("@bull-board/koa");var Xk=U(require("dd-trace"));var Mrr=o(async()=>{let e=await PGe(),t=[];for(let n of e)if(!n.tableId&&!n.tableId){let i=new zv(n.doc1.tableId,n.doc1.fieldName,n.doc1.rowId,n.doc2.tableId,n.doc2.fieldName,n.doc2.rowId);i._id=n._id,i._rev=n._rev,t.push(i)}let r=C.getWorkspaceDB();t.length&&await r.bulkDocs(t),await P.tables.sqs.syncDefinition()},"migration"),n4e=Mrr;var Urr=o(async()=>{let e=await P.screens.fetch(),t=await P.workspaces.metadata.get(),r=await P.workspaceApps.fetch(C.getWorkspaceDB()),[n]=r;n||(n=await P.workspaceApps.create({name:t.name,url:"/",navigation:t.navigation,isDefault:!0}));let i=C.getWorkspaceDB(),s=e.filter(u=>!u.workspaceAppId).map(u=>({...u,workspaceAppId:n._id}));for(let u of r)u.url||s.push({...u,url:u.urlPrefix||"/",urlPrefix:void 0});let a=await i.get("_design/database");a.views?.screen_routes_2&&a.views.screen_routes_2.version===void 0&&(delete a.views?.screen_routes_2,s.push(a)),await i.bulkDocs(s)},"migration"),i4e=Urr;var Frr=o(async()=>{let t=(await P.workspaceApps.fetch()).filter(r=>r.isDefault);if(t.length>1){let[r,...n]=t.sort((u,c)=>c.updatedAt.localeCompare(u.updatedAt)),i=C.getWorkspaceDB(),s=[],a=await P.screens.fetch();for(let u of n)s.push({...u,_deleted:!0}),s.push(...a.filter(c=>c.workspaceAppId===u._id).map(c=>({...c,workspaceAppId:r._id})));await i.bulkDocs(s)}},"migration"),o4e=Frr;var N7=[{id:"20240604153647_initial_sqs",func:n4e},{id:"20250618162639_workspace_apps",func:i4e},{id:"20250729134531_workspace_cleanups",func:o4e}];var Brr=nr.fromDays(1).toSeconds();async function L7(e){return F.doWithDB(e,t=>t.get("_design/migrations"),{skip_setup:!0})}o(L7,"getFromDB");var Jk=o(e=>`appmigrations_${L.VERSION}_${e}`,"getWorkspaceMigrationCacheKey");async function k7(e){let t=Jk(e),r=await Be.get(t);if(r)return r;try{r=(await L7(e)).version||""}catch(n){if(n.status!==404)throw n;r=""}return r&&await Be.store(t,r,Brr),r}o(k7,"getWorkspaceMigrationVerions");async function s4e({workspaceId:e,version:t,skipHistory:r}){let n=F.getDB(e),i;try{i=await L7(e)}catch(u){if(u.status!==404)throw u;i={_id:"_design/migrations",version:"",initialVersion:t,history:{}},await n.put(i),i=await L7(e)}let s={...i,version:t};r||(s.history[t]={runAt:new Date().toISOString()}),await n.put(s);let a=Jk(e);await Be.destroy(a)}o(s4e,"updateWorkspaceMigrationMetadata");async function M7(e,t){if(ie.isTest()&&ie.SKIP_MIGRATION_LOCKS_IN_TESTS)return console.log("Bypassing lock for in test environment"),t();console.log(`Acquiring app migration lock for "${e}"`);let r=F.getProdWorkspaceID(e),{result:n}=await Oi.doWithLock({name:"app_migrations",type:"auto_extend",resource:r},async()=>(console.log(`Migration lock acquired for app "${r}"`),await t()));return n}o(M7,"doInMigrationLock");var avn=new RegExp(["appPackage"].join("|"));async function a4e(e,t){let r=await k7(e),n=t.findIndex(i=>i.id===r);return t.slice(n+1)}o(a4e,"getPendingMigrationsForWorkspace");function jrr(e){return Object.values(e).flatMap(t=>t).map(t=>t.id)}o(jrr,"getAllPendingMigrationIds");function Wrr(e,t){return e.filter(r=>t.includes(r.id))}o(Wrr,"getUniquePendingMigrations");async function u4e({migrationId:e,migrationFunc:t,workspaceId:r}){await Xk.default.trace("runMigrationForApp",async n=>{n.addTags({appId:r,migrationId:e}),await C.doInWorkspaceMigrationContext(r,async()=>{console.log(`Running migration "${e}" for app "${r}"`),await t(),console.log(`Migration "${e}" ran for app "${r}"`)})})}o(u4e,"runMigrationForApp");async function Grr(e){await Xk.default.trace("runMigrationForApp",async t=>{t.addTags({appId:e}),await C.doInWorkspaceMigrationContext(e,async()=>{await P.workspaces.syncWorkspace(e),console.log(`Workspace synchronized for dev "${e}"`)})})}o(Grr,"syncDevApp");async function c4e(e,t){await C.doInWorkspaceMigrationContext(e,()=>s4e({workspaceId:e,version:t}))}o(c4e,"updateMigrationVersion");async function U7(e,t=N7){console.log(`Processing workspace migration for "${e}"`),await Xk.default.trace("runMigrationForApp",async r=>{r.addTags({appId:e});try{await C.doInWorkspaceContext(e,()=>M7(e,async()=>{let n=F.getDevWorkspaceID(e),i=F.getProdWorkspaceID(e),s=await P.workspaces.isWorkspacePublished(i),a=s?i:n;console.log(`Starting workspace migration for "${a}"`);let u={[n]:await a4e(n,t),[i]:s?await a4e(i,t):[]};function c(p,h){return u[h].some(m=>m.id===p)}o(c,"needsToRun");let l=jrr(u),f=Wrr(t,l);r.addTags({migrationsToRun:f.length}),console.log(`Workspace migrations to run for "${a}" - ${f.map(p=>p.id).join(",")}`);let d=0;for(let{id:p,func:h,disabled:m}of f){if(m){console.log(`Migration ${p} is disabled, stopping migration process`);return}let g=`(${++d}/${f.length})`;console.info(`Running migration ${p}... ${g}`,{migrationId:p,workspaceId:a});let y=c(p,a),b=s&&c(p,n);y&&await u4e({migrationId:p,migrationFunc:h,workspaceId:a}),b&&(await Grr(n),await u4e({migrationId:p,migrationFunc:h,workspaceId:n})),y&&await c4e(a,p),b&&await c4e(n,p)}console.log(`Workspace migration for "${a}" processed`)}))}catch(n){throw ke.logAlert("Failed to run workspace migration",n),n}})}o(U7,"processMigrations");var l4e=3;var Svn=new Vn.BudibaseQueue(Vn.JobQueue.APP_MIGRATION,{jobOptions:{attempts:l4e,removeOnComplete:!0,removeOnFail:!0},maxStalledCount:l4e,removeStalledCb:async e=>{ke.logAlert(`App migration failed, queue job ID: ${e.id} - reason: ${e.failedReason}`)}});var vb=new Vn.BudibaseQueue(Vn.JobQueue.AUTOMATION,{removeStalledCb:e=>F7(e),jobTags:e=>({"automation.id":e.automation._id,"automation.name":e.automation.name,"automation.appId":e.automation.appId,"automation.createdAt":e.automation.createdAt,"automation.trigger":e.automation.definition.trigger.stepId})});var enr=U(require("dd-trace"));var d4e=(r=>(r.API="api",r.AUTOMATIONS="automations",r))(d4e||{});function Qrr(e,t){let r;t?r=t.split(","):r=e;for(let n of r)if(!e.includes(n))throw new Error(`Feature: ${n} is not an allowed option`);return r}o(Qrr,"processFeatureEnvVar");var Krr=Qrr(Object.values(d4e),ie.APP_FEATURES);function p4e(){return Krr.includes("automations")}o(p4e,"automationsEnabled");var B7=U(require("worker-farm"));function h4e(e){let t=null;switch(e){case"query":t="./query";break;case"automation":t="./automation";break;default:throw"Unknown thread type"}return require.resolve(t)}o(h4e,"typeToFile");var Ab=class e{static{o(this,"Thread")}static{this.workerRefs=[]}constructor(t,r={timeoutMs:null,count:1}){if(this.type=t,this.count=r.count?r.count:1,this.disableThreading=this.shouldDisableThreading(),this.disableThreading)console.log(`[${ie.FORKED_PROCESS_NAME}] skipping worker farm type=${t}`);else{console.log(`[${ie.FORKED_PROCESS_NAME}] initialising worker farm type=${t}`);let n={autoStart:!0,maxConcurrentWorkers:this.count,workerOptions:{env:{...process.env,FORKED_PROCESS:"1",FORKED_PROCESS_NAME:t},execArgv:process.execArgv.some(i=>i.startsWith("--enable-source-maps"))?["--enable-source-maps"]:void 0}};r.timeoutMs&&(this.timeoutMs=r.timeoutMs,n.maxCallTime=r.timeoutMs),this.workers=(0,B7.default)(n,h4e(t),["execute"]),e.workerRefs.push(this.workers)}}shouldDisableThreading(){return!!(ie.isTest()||ie.DISABLE_THREADING||this.count===0||ie.isInThread())}run(t){let r=this.timeoutMs;return new Promise((n,i)=>{function s(a){a.execute(t,(u,c)=>{u&&u.type==="TimeoutError"?i(new Error(`Thread timeout exceeded ${r}ms timeout.`)):u?i(u):n(c)})}o(s,"fire"),this.disableThreading?import(h4e(this.type)).then(a=>{s(a)}):s(this.workers)})}static stopThreads(){return new Promise(t=>{e.workerRefs.length===0&&t();let r=0;function n(){r++,r>=e.workerRefs.length&&t()}o(n,"complete");for(let i of e.workerRefs)B7.default.end(i,n);e.workerRefs=[]})}static async shutdown(){await e.stopThreads(),console.log("Threads shutdown")}};var zrr=require("mailparser"),Yrr=require("html-to-text");var Jrr=require("imapflow");var q7=o(async e=>{let t=C.getWorkspaceDB(),r=ik("automationEmailState",`${e}:`),n=`${r}${OGe}`,i=await t.allDocs({startkey:r,endkey:n,include_docs:!1});if(!i.rows.length)return;let s=i.rows.map(a=>{let u=a.value?._rev;if(u)return{_id:a.id,_rev:u,_deleted:!0}}).filter(a=>!!a);s.length&&await t.bulkDocs(s)},"deleteAutomationMailboxState");var tnr=require("lodash");var rnr;p4e()&&(rnr=new Ab("automation"));async function g4e(e){let t=await vb.getBullQueue().getRepeatableJobs();for(let r of t)r.id===e&&await vb.getBullQueue().removeRepeatableByKey(r.key);console.log(`jobId=${e} disabled`)}o(g4e,"disableCronById");var sRn=Ve.triggers.definitions,y4e={removeOnComplete:!0,removeOnFail:!0};async function inr(){return(await C.getWorkspaceDB().allDocs(Mc(null,{include_docs:!0}))).rows.map(r=>r.doc)}o(inr,"getAllAutomations");async function onr(e,t){let r=e.row.tableId;if(e.appId==null)throw`No appId specified for ${t} - check event emitters.`;!r||!await P7(r)||await C.doInWorkspaceContext(e.appId,async()=>{let n=await inr();n=n.filter(i=>{let s=i.definition.trigger,a=s?.inputs;return s&&s.event===t&&!i.disabled&&a?.tableId===e.row.tableId});for(let i of n){if(!ie.ALLOW_DEV_AUTOMATIONS&&gY(e.appId)&&!await xY(i._id))continue;if(await b4e(i,{row:e.row,oldRow:e.oldRow}))try{await vb.add({automation:i,event:e},y4e)}catch(a){ke.logAlert("Failed to queue automation",a)}}})}o(onr,"queueRelevantRowAutomations");async function j7(e,t){try{await onr(e,t)}catch(r){ke.logWarn("Unable to process row event",r)}}o(j7,"queueRowAutomations");Dh.on("row:save",async function(e){!e||!e.row||!e.row.tableId||await j7(e,"row:save")});Dh.on("row:update",async function(e){!e||!e.row||!e.row.tableId||await j7(e,"row:update")});Dh.on("row:delete",async function(e){!e||!e.row||!e.row.tableId||await j7(e,"row:delete")});function snr(e,t){return Tt.runQuery([e],t).length>0}o(snr,"rowPassesFilters");function Zk(e){return e!==null&&"steps"in e&&Array.isArray(e.steps)}o(Zk,"isAutomationResults");async function jc(e,t,{getResponses:r,onProgress:n}={}){if(e.disabled)throw new Error("Automation is disabled");if(cn.automations.isAppAction(e)&&!await xY(e._id)){t.fields==null&&(t.fields={});let a={},u=e.definition.trigger.inputs||{},c="fields"in u?u.fields:{};for(let l of Object.keys(c||{}))a[l]=Oh(t.fields[l],c[l]);t.fields=a}else(cn.automations.isRowAction(e)||cn.automations.isWebhookAction(e))&&(t={...t,...t.fields,fields:{}});let i={automation:e,event:t};return await b4e(e,{row:i.event?.row??{},oldRow:i.event?.oldRow??{}})?r?(i.event={...i.event,appId:C.getWorkspaceId(),automation:e},W7({data:i},{onProgress:n})):vb.add(i,y4e):{outputs:{success:!1,status:"stopped"},message:"Automation did not run. Filter conditions in trigger were not met."}}o(jc,"externalTrigger");async function b4e(e,t){let r=e.definition.trigger,n=r.inputs,i=n?.filters,s=n?.tableId;if(!i)return!0;if(r.stepId===Ve.triggers.definitions.ROW_UPDATED.stepId||r.stepId===Ve.triggers.definitions.ROW_SAVED.stepId){let a=await Rb(s,t.row);return snr(a,i)}return!0}o(b4e,"checkTriggerFilters");var anr=[{name:"list_automations",sourceType:"BUDIBASE",sourceLabel:"Budibase",description:"List all automations in the current app",tool:(0,tM.tool)({description:"List all automations in the current app",inputSchema:Wf.z.object({}),execute:async()=>({automations:await P.automations.fetch()})})},{name:"get_automation",sourceType:"BUDIBASE",sourceLabel:"Budibase",description:"Get details about a specific automation by ID",tool:(0,tM.tool)({description:"Get details about a specific automation by ID",inputSchema:Wf.z.object({automationId:Wf.z.string().describe("The ID of the automation to retrieve")}),execute:async e=>{let{automationId:t}=e;return{automation:await P.automations.get(t)}}})},{name:"trigger_automation",sourceType:"BUDIBASE",sourceLabel:"Budibase",description:"Trigger an automation and wait for its completion. Returns all step outputs. Only works for APP trigger type automations. IMPORTANT: You must use list_automations first to get the exact _id of the automation you want to trigger.",tool:(0,tM.tool)({description:"Trigger an automation and wait for its completion. Returns all step outputs. Only works for APP trigger type automations. IMPORTANT: You must use list_automations first to get the exact _id of the automation you want to trigger.",inputSchema:Wf.z.object({automationId:Wf.z.string().describe("The exact _id of the automation to trigger (obtained from list_automations)"),fields:Wf.z.string().describe("Input fields/data to pass to the app action automation trigger as JSON object. Ensure the schema for the automation is known before triggering it."),timeout:Wf.z.number().nullish().describe("Timeout in seconds (optional)")}),execute:async e=>{let{automationId:t,fields:r,timeout:n}=e,i;try{i=JSON.parse(r)}catch(l){return{error:`Invalid JSON in fields parameter: ${l}`}}let a=await C.getWorkspaceDB().tryGet(t);if(!a)return{error:`Automation with ID ${t} not found`};let u=a.definition?.trigger?.stepId;if(u!=="APP")return{error:`Cannot trigger automation '${a.name}'. Only APP trigger type supported. This automation has: ${u}`};let c=await jc(a,{fields:i||{},timeout:n?n*1e3:ie.AUTOMATION_THREAD_TIMEOUT},{getResponses:!0});return Zk(c)?{success:c.status==="success",status:c.status,steps:c.steps}:{success:!1,error:c.message||"Automation did not trigger"}}})}],_4e=anr;var G7=require("ai"),bA=require("zod");var unr=[{name:"list_tables",sourceType:"BUDIBASE",sourceLabel:"Budibase",description:"List all tables in the current app",tool:(0,G7.tool)({description:"List all tables in the current app",inputSchema:bA.z.object({showSchema:bA.z.boolean().describe("Whether to show the schema of the tables. This can be extemely large. Default to false to save on tokens.").default(!1)}),execute:async e=>{let{showSchema:t}=e,r=await P.tables.getAllTables();return t?{tables:r}:{tables:r.map(n=>({id:n._id,tableName:n.name}))}}})},{name:"get_table",sourceType:"BUDIBASE",sourceLabel:"Budibase",description:"Get details about a specific table by ID",tool:(0,G7.tool)({description:"Get details about a specific table by ID",inputSchema:bA.z.object({tableId:bA.z.string().describe("The ID of the table to retrieve")}),execute:async e=>{let{tableId:t}=e;return{table:await P.tables.getTable(t)}}})}],w4e=unr;var Ob=require("ai"),Ft=require("zod");var cnr={list_rows:{sourceType:"BUDIBASE",sourceLabel:"Budibase",description:"List rows in a given table",tool:(0,Ob.tool)({description:"List rows in a given table",inputSchema:Ft.z.object({tableId:Ft.z.string().describe("The ID of the table to list rows from"),limit:Ft.z.number().nullish().describe("Maximum number of rows to return"),startKey:Ft.z.string().nullish().describe("Start key for pagination")}),execute:async e=>{let{tableId:t}=e;return{rows:await P.rows.fetch(t)}}})},get_row:{sourceType:"BUDIBASE",sourceLabel:"Budibase",description:"Get a specific row by ID",tool:(0,Ob.tool)({description:"Get a specific row by ID",inputSchema:Ft.z.object({tableId:Ft.z.string().describe("The ID of the table"),rowId:Ft.z.string().describe("The ID of the row to retrieve")}),execute:async e=>{let{tableId:t,rowId:r}=e;return{row:await P.rows.find(t,r)}}})},create_row:{sourceType:"BUDIBASE",sourceLabel:"Budibase",description:"Create a new row. Only include fields that match the table schema. CRITICAL: Use plain text values only. Do NOT include HTML tags, markdown formatting, or content containing quotes, backslashes, or special characters - these break JSON parsing. Summarize or strip complex content. Max 500 characters per field.",tool:(0,Ob.tool)({description:"Create a new row. Only include fields that match the table schema. CRITICAL: Use plain text values only. Do NOT include HTML tags, markdown formatting, or content containing quotes, backslashes, or special characters - these break JSON parsing. Summarize or strip complex content. Max 500 characters per field.",inputSchema:Ft.z.object({tableId:Ft.z.string().describe("The ID of the table to create the row in"),data:Ft.z.record(Ft.z.string(),Ft.z.any()).describe('Row data as a JSON object. Example: {"name": "John", "age": 30}. Do NOT nest this inside a string; pass the object directly. Values must be plain text - no HTML, markdown, or special characters.')}),execute:async e=>{let{tableId:t,data:r}=e;return{row:await P.rows.save(t,r,void 0)}}})},update_row:{sourceType:"BUDIBASE",sourceLabel:"Budibase",description:"Update an existing row. CRITICAL: Use plain text values only. Do NOT include HTML tags, markdown formatting, or content containing quotes, backslashes, or special characters - these break JSON parsing. Summarize or strip complex content. Max 500 characters per field.",tool:(0,Ob.tool)({description:"Update an existing row. CRITICAL: Use plain text values only. Do NOT include HTML tags, markdown formatting, or content containing quotes, backslashes, or special characters - these break JSON parsing. Summarize or strip complex content. Max 500 characters per field.",inputSchema:Ft.z.object({tableId:Ft.z.string().describe("The ID of the table"),rowId:Ft.z.string().describe("The ID of the row to update"),rowRev:Ft.z.string().describe("The current _rev of the row (if known)"),data:Ft.z.record(Ft.z.string(),Ft.z.any()).describe('The updated data as a JSON object. Example: {"name": "Jane"}. Do NOT nest this inside a string; pass the object directly. Values must be plain text - no HTML, markdown, or special characters.')}),execute:async e=>{let{tableId:t,rowId:r,rowRev:n,data:i}=e,a={...await P.rows.find(t,r),...i,_id:r,_rev:n},{row:u}=await P.rows.save(t,a,void 0);return{row:u}}})},search_rows:{sourceType:"BUDIBASE",sourceLabel:"Budibase",description:"Search for rows in a table based on criteria. IMPORTANT: You can ONLY filter on fields that exist in the table schema. Use get_table or list_tables first to see available field names. Searching on non-existent fields will fail.",tool:(0,Ob.tool)({description:"Search for rows in a table based on criteria. IMPORTANT: You can ONLY filter on fields that exist in the table schema. Use get_table or list_tables first to see available field names. Searching on non-existent fields will fail.",inputSchema:Ft.z.object({tableId:Ft.z.string().describe("The ID of the table to search"),query:Ft.z.record(Ft.z.string(),Ft.z.any()).nullish().describe('Query filters object. Structure: { operator: { fieldName: value } }. CRITICAL: fieldName must match an existing column in the table schema exactly (case-sensitive). Valid operators: "equal", "notEqual", "empty", "notEmpty", "fuzzy", "string", "contains", "notContains", "containsAny", "oneOf", "range". Examples: Find where status equals "active": {"equal": {"status": "active"}}. Find where name is not empty: {"notEmpty": {"name": true}}. Find where price is within the range of 10 to 100: {"range": {"price": {"low": 10, "high": 100}}}.'),sort:Ft.z.object({column:Ft.z.string().describe("Column to sort by"),order:Ft.z.enum(["ascending","descending"]).describe("Sort order")}).nullish().describe("Sort configuration"),limit:Ft.z.number().nullish().describe("Maximum number of results")}),execute:async e=>{let{tableId:t,query:r,sort:n,limit:i}=e,s={tableId:t,query:r||{},limit:i??void 0};return n&&(s.sort=n.column,s.sortOrder=n.order==="ascending"?"ascending":"descending"),{rows:(await P.rows.search(s)).rows}}})}},E4e=cnr;var lnr=[..._4e,...w4e,...Object.entries(E4e).map(([e,t])=>({name:e,...t}))],$7=lnr;var Y4e=require("ai"),s9=require("zod");var i9=require("lodash"),eir=require("mongodb");function S4e(){let e={replication:!0,find:!0};ie.isTest()&&!ie.COUCH_DB_URL&&(e.inMemory=!0,e.allDbs=!0),bMe({db:e})}o(S4e,"init");var O4e=require("serialize-error");var I4e=U(require("dd-trace"));var V7=U(require("isolated-vm")),A4e=U(require("bson")),rM=U(require("url")),_A=U(require("crypto")),R4e=U(require("querystring"));var v4e=U(require("fs"));var dnr={helpers:"./index-helpers.ivm.bundle.js",bson:"./bson.ivm.bundle.js",snippets:"./snippets.ivm.bundle.js",buffer:"./buffer.ivm.bundle.js",bson_polyfills:"./bson-polyfills.ivm.bundle.js"},T4e={};function Ib(e){let t=T4e[e];return t||(t=v4e.default.readFileSync(require.resolve(dnr[e]),"utf-8"),T4e[e]=t,t)}o(Ib,"loadBundle");var H7=class e extends Error{constructor(){super(...arguments);this.code=e.code}static{o(this,"JsRequestTimeoutError")}static{this.code="JS_REQUEST_TIMEOUT_ERROR"}},Cb=class{constructor({memoryLimit:t,invocationTimeout:r,isolateAccumulatedTimeout:n}={}){this.codeWrapper=t=>t;this.resultKey="results";this.isolate=new V7.default.Isolate({memoryLimit:t||ie.JS_RUNNER_MEMORY_LIMIT}),this.vm=this.isolate.createContextSync(),this.jail=this.vm.global,this.jail.setSync("global",this.jail.derefInto()),this.runResultKey=_A.default.randomUUID(),this.runErrorKey=_A.default.randomUUID(),this.addToContext({[this.resultKey]:{[this.runResultKey]:""}}),this.invocationTimeout=r||ie.JS_PER_INVOCATION_TIMEOUT_MS,this.isolateAccumulatedTimeout=n}static{o(this,"IsolatedVM")}withHelpers(){let t=this.registerCallbacks({resolve:rM.default.resolve,parse:rM.default.parse}),r=this.registerCallbacks({escape:R4e.default.escape}),n=this.registerCallbacks({randomUUID:_A.default.randomUUID});this.addToContext({helpersStripProtocol:u=>{let c=rM.default.parse(u);return c.protocol="",c.format()}});let i=`require=function req(val) {
|
|
1013
|
+
}`,...m}}o(yb,"default");async function lHe(){let e=C.getWorkspaceDB(),t=[];if(ie.SELF_HOSTED){let r=await e.get("_design/database");for(let n of Object.keys(r.views||{})){if(Object.values(kc).indexOf(n)!==-1)continue;let s=r.views?.[n];s&&t.push({name:n,...s})}}else{let r=(await e.allDocs(FGe({include_docs:!0}))).rows.map(n=>n.doc);for(let n of r)t.push({name:n.name,...n.view})}return t}o(lHe,"getViews");async function r7(e,t,r){let n=C.getWorkspaceDB();if(ie.SELF_HOSTED){let i=await n.get("_design/database");i.views={...i.views,[t]:r},e&&delete i.views[e],await n.put(i)}else{let i=Vv(t),s=e?Vv(e):null,a={_id:i,view:r,name:t,tableId:r.meta.tableId};try{let u=await n.get(i);if(s){let c=await n.get(s);await n.remove(c._id,c._rev)}u&&u._rev&&(a._rev=u._rev)}catch{}await n.put(a)}}o(r7,"saveView");async function fHe(e,t){let r=await e.get("_design/database"),n=r.views?.[t].meta;if(!n)throw new Error("Unable to migrate view - no metadata");let i=yb(n);delete r.views?.[t],await e.put(r),await r7(null,t,i)}o(fHe,"migrateToInMemoryView");async function dHe(e,t){let r=await e.get(Vv(t)),n=await e.get("_design/database"),i=r.view.meta;if(!i)throw new Error("Unable to migrate view - no metadata");n.views||(n.views={}),n.views[t]=yb(i),await e.put(n),await e.remove(r._id,r._rev)}o(dHe,"migrateToDesignView");async function n7(e,t){let n=(await e.get("_design/database")).views?.[t];if(n==null)throw{status:404,message:"Unable to get view"};return n}o(n7,"getFromDesignDoc");async function i7(e,t){let r=await e.get(Vv(t));if(r)return r.view;throw{status:404,message:"Unable to get view"}}o(i7,"getFromMemoryDoc");var hHe=require("lodash/fp"),u7=U(require("lodash/isEqual")),mHe=U(require("lodash/uniq"));var bb=require("lodash/fp"),pHe=U(require("lodash/isEqual"));function Atr(e,t){let r=(0,bb.merge)(e,t);for(let n of Object.keys(t))t[n]===void 0&&delete r[n];return r}o(Atr,"mergeRows");async function $k(e,t){let r=C.getWorkspaceDB();if(!e.relatedFormula)return;let n=[];for(let i of Array.isArray(t)?t:[t]){let s={};for(let[a,u]of Object.entries(i)){let c=e.schema[a];if(c&&c.type==="link"){let l=c.tableId;s[l]||(s[l]=[]);let f=s[l].map(p=>p._id),d=u.filter(p=>!f.includes(p._id));s[l]=s[l].concat(d)}}for(let a of e.relatedFormula){let u;try{if(!s[a]||s[a].length===0)continue;u=await r.get(a)}catch{}for(let c of Object.values(u.schema))if(c.type==="formula"&&c.formulaType==="static"){n=n.concat(s[a].map(l=>sA(u,l,{updateFormula:!1,updateAIColumns:!1})));break}}}await Promise.all(n)}o($k,"updateRelatedFormula");async function o7(e){let t=C.getWorkspaceDB(),r=(await t.allDocs(sn(e._id,null,{include_docs:!0}))).rows.map(s=>s.doc),n=await Jt(e,(0,bb.cloneDeep)(r),{squash:!1}),i=[];for(let s of r){let a=n.find(u=>u._id===s._id);if(a){let u=await pu(e,(0,bb.cloneDeep)(s),{dynamic:!1,contextRows:[a]});(0,pHe.default)(u,s)||i.push(u)}}await t.bulkDocs(i)}o(o7,"updateAllFormulasInTable");async function sA(e,t,r){let n=C.getWorkspaceDB(),{updateFormula:i=!0,updateAIColumns:s=!0}=r||{},a=P.views.isView(e)?await P.views.getTable(e.id):e;t.type="row";let u=await Jt(e,(0,bb.cloneDeep)(t),{squash:!1});t=await pu(a,t,{dynamic:!1,contextRows:[u]}),s&&(t=await G$e(a,t,{contextRows:[u]})),await n.put(t);let c=await n.tryGet(t._id);if(!c)throw new Error(`Unable to retrieve row ${t._id} after saving.`);delete u._rev,u=Atr(c,u),u=await pu(a,u,{dynamic:!1}),i&&await $k(a,u);let l=await gk(e,u);return{row:u,squashed:l,table:a}}o(sA,"finaliseRow");function gHe(e){return e.type==="formula"&&e.formulaType==="static"}o(gHe,"isStaticFormula");function s7(e,t){let r=[];t=Array.isArray(t)?t:[t];for(let n of Object.values(e.schema))gHe(n)&&Oje(n?.formula??"",t)&&r.push(n.name);return r}o(s7,"getFormulaThatUseColumn");async function Rtr(e,{oldTable:t,deletion:r}){let n=(await P.tables.getAllInternalTables()).filter(a=>a._id!==e._id),i=t?t.schema:e.schema,s=Object.values(i).filter(a=>r||!e.schema[a.name]);for(let a of s){let u=e;if(a.type==="link"){let l=a.tableId;u=n.find(f=>f._id===l)}if(!u)continue;let c=s7(u,a.name);if(c.length>0&&await a7(e,c),!!e.relatedFormula)for(let l of e.relatedFormula){let f=Object.values(e.schema).filter(p=>p.type==="link"&&p.tableId===l),d=n.find(p=>p._id===l);if(d&&f&&a.type!=="link"){let p=[];for(let h of f)p=p.concat(s7(d,[h.fieldName,a.name]));p.length>0&&await a7(d,(0,mHe.default)(p))}}}}o(Rtr,"checkIfFormulaNeedsCleared");async function Otr(e,{deletion:t}={}){let r=e._id,n=C.getWorkspaceDB(),i=(await P.tables.getAllInternalTables()).filter(u=>u._id!==r),s=(0,hHe.cloneDeep)(i),a=Object.values(e.schema).filter(Uf);for(let u of i){if(!u.relatedFormula)continue;let c=u.relatedFormula.indexOf(r);c!==-1&&u.relatedFormula.splice(c,1)}if(!t)for(let u of a){let c=s7(e,u.name);if(!c||c.length===0)continue;let l=i.find(f=>f._id===u.tableId);l&&(!l.relatedFormula||!l.relatedFormula.includes(r))&&(l.relatedFormula=l.relatedFormula?[...l.relatedFormula,r]:[r])}for(let u of s){let c=i.find(l=>u._id===l._id);c&&!(0,u7.default)(u,c)&&await n.put(c)}}o(Otr,"updateRelatedFormulaLinksOnTables");async function Itr(e,{oldTable:t}){Object.values(e.schema).find(n=>gHe(n)&&(!t||!t.schema[n.name]||!(0,u7.default)(t.schema[n.name],n)))!=null&&await o7(e)}o(Itr,"checkIfFormulaUpdated");async function Vk(e,{oldTable:t,deletion:r}){await Otr(e,{deletion:r}),await Rtr(e,{oldTable:t,deletion:r}),r||await Itr(e,{oldTable:t})}o(Vk,"runStaticFormulaChecks");async function a7(e,t){let r=C.getWorkspaceDB(),n=await r.allDocs(sn(e._id,null,{include_docs:!0}));return await r.bulkDocs(n.rows.map(({doc:i})=>(t.forEach(s=>delete i[s]),i)))}o(a7,"clearColumns");async function Ctr(e,t,r){let n=C.getWorkspaceDB(),i=[],s=[];if(t&&t.schema&&e.schema&&(s=Object.keys(t.schema).filter(a=>e.schema[a]==null)),r||s.length!==0){let u=(await n.allDocs(sn(e._id,null,{include_docs:!0}))).rows.map(({doc:c})=>c);i=u.map(c=>{if(c=(0,yHe.cloneDeep)(c),r){let l=c[r.updated]!==void 0,f=c[r.old]!==void 0;!l&&f&&(c[r.updated]=c[r.old]),delete c[r.old]}else s.length!==0&&s.forEach(l=>delete c[l]);return c}),await Fc.tableUpdate(e,u,{oldTable:t,rename:r}),await Ntr(e,s,r)}return{rows:i,table:e}}o(Ctr,"checkForColumnUpdates");function xtr(e,t){if(!e)return t;t._rev=e._rev;let r,n;for([r,n]of Object.entries(e.schema))if(n.autocolumn&&n.subtype==="autoID"&&t.schema[r]){let i=t.schema[r];i.lastID=n.lastID}return t}o(xtr,"makeSureTableUpToDate");async function _He(e,t,r,n){let i=t,s=[],a=!!n?.keepCouchId;for(let u=0;u<e.length;u++){let c=e[u];c._id=a&&c._id||CGe(t._id),c.type="row",c.tableId=t._id,c=await ba(r,t,c,{noAutoRelationships:!0});for(let[l,f]of Object.entries(i.schema)){if(f.type==="link"&&e.find(d=>d[l]))throw new K(`Can't bulk import relationship fields for internal databases, found value in field "${l}"`,400);if((f.type==="options"||f.type==="array")&&c[l]){let d=Array.isArray(c[l]),p=d?c[l]:[c[l]],h=[...f.constraints.inclusion,...p],m=new Set(h);f.constraints.inclusion=Array.from(m),f.constraints.inclusion.sort(),!d&&f.type==="array"&&(c[l]=p)}}s.push(c)}return s}o(_He,"importToRows");async function l7(e,t){let r=e.schema,n=t?.identifierFields||[],i=t?.importRows;if(!i||!Gk(i)||!Wk(r))return e;let s=C.getWorkspaceDB(),a=e7(i,e),u=await _He(a,e,t?.userId,{keepCouchId:n.includes("_id")}),c=u.length;return n.length>0&&(await s.allDocs(sn(e._id,null,{include_docs:!0}))).rows.map(f=>f.doc).forEach(f=>{u.forEach(d=>{let p=!0;for(let h of n)if(d[h]!==f[h]){p=!1;break}p&&(d._id=f._id,d._rev=f._rev,c--)})}),await mr.addRows(c,()=>s.bulkDocs(u),{tableId:e._id}),await Oe.rows.imported(e,u.length),e}o(l7,"handleDataImport");async function Dtr(e){let t=C.getWorkspaceDB();if(e.indexes&&e.indexes.length>0){let r=await t.getIndexes(),n=`search:${e._id}`,i=r.indexes.find(s=>s.name===n);if(i){let s=i.def.fields.map(a=>Object.keys(a)[0]);(0,bHe.default)(s,e.indexes)||(await t.deleteIndex(i),await t.createIndex({index:{fields:e.indexes,name:n,ddoc:"search_ddoc",type:"json"}}))}else await t.createIndex({index:{fields:e.indexes,name:n,ddoc:"search_ddoc",type:"json"}})}return e}o(Dtr,"handleSearchIndexes");function Ptr(e){if(e._id===Vt.USER_METADATA)for(let[t,r]of Object.entries(lGe.schema))e.schema[t]==null&&(e.schema[t]=r);return e}o(Ptr,"checkStaticTables");var c7=class{static{o(this,"TableSaveFunctions")}constructor({userId:t,oldTable:r,importRows:n}){this.db=C.getWorkspaceDB(),this.userId=t,this.oldTable=r,this.importRows=n,this.rows=[]}async before(t){return this.oldTable&&(t=xtr(this.oldTable,t)),t=Ptr(t),t}async mid(t,r){let n=await Ctr(t,this.oldTable,r);return this.rows=this.rows.concat(n.rows),t}async after(t){return t=await Dtr(t),t=await l7(t,{importRows:this.importRows,userId:this.userId}),await P.tables.sqs.addTable(t),t}getUpdatedRows(){return this.rows}};async function Ntr(e,t,r){let i=(await lHe()).filter(s=>s.meta?.tableId===e._id);for(let s of i){let a=!1,u=s.meta;if(u&&(r?(u.field===r.old&&(u.field=r.updated,a=!0),u.groupBy===r.old&&(u.groupBy=r.updated,a=!0),u.filters&&u.filters.forEach(c=>{c.key===r.old&&(c.key=r.updated,a=!0)})):t&&t.forEach(c=>{if(u.field===c&&(delete u.field,delete u.calculation,delete u.groupBy,a=!0),u.groupBy===c&&(delete u.groupBy,a=!0),u.filters&&u.filters.length){let l=u.filters.length;u.filters=u.filters.filter(f=>f.key!==c),l!==u.filters.length&&(a=!0)}}),a)){let c=Object.values(e.schema).find(d=>d.name==s.groupBy),l=yb(u,c?.type==="array"),f=s.name;await r7(null,f,l),l.meta?.schema||(l.meta.schema=e.schema),e.views?.[f]&&(e.views[f]=l.meta)}}}o(Ntr,"checkForViewUpdates");function wHe(e,t){let r=e?[...e]:[];return r.push(t),r}o(wHe,"mergePendingColumnRenames");function EHe(e,t){return`fk_${t.name}_${e.fieldName}`}o(EHe,"generateForeignKey");function SHe(e,t,r){return`jt_${t.name}_${r.name}_${e.name}_${e.fieldName}`}o(SHe,"generateJunctionTableName");function aA(e,t){let r={type:"number",constraints:{},name:e};return t&&(r.meta=t),r}o(aA,"foreignKeyStructure");function Ltr(e,t){if(dY.indexOf(e)===-1&&dY.indexOf(t)===-1)return!1;for(let r of fY){let n=r.indexOf(e),i=r.indexOf(t);if(n!==-1&&i!==-1&&n!==i)return!0}return!1}o(Ltr,"areSwitchableTypes");function Hk(e,t){if(!t)return!1;for(let[r,n]of Object.entries(t.schema)){if(!e.schema[r])continue;let i=n.type,s=e.schema[r].type;if(i!==s&&!Ltr(i,s))return!0}return!1}o(Hk,"hasTypeChanged");function THe(e,t){return t&&e.source==="GOOGLE_SHEETS"&&(t.primary=[Wv],delete t.schema?.id),t}o(THe,"setStaticSchemas");async function vHe(e,t){let r=C.getWorkspaceDB(),n=e._id;if(!ie.isTest()||ie.COUCH_DB_URL){let s=(await r.getIndexes()).indexes.find(a=>a.name===`search:${n}`);s&&await r.deleteIndex(s)}await Vk(e,{deletion:!0}),t&&await Fc.tableDelete(e,t),await P.tables.sqs.removeTable(e)}o(vHe,"internalTableCleanup");var AHe=c7;var f7=require("lodash/fp");function d7(e,t,r){let n=r?.oldTable,i=n||e;for(let[s,a]of Object.entries(i.schema))if(a.type==="link"&&(r?.deleting||n?.schema[s]!=null)&&e.schema[s]==null){let u=a.tableId,c=Object.values(t).find(f=>f._id===u),l=a.relationshipType!=="many-to-many"&&a.foreignKey;if(!c||!l)continue;for(let[f,d]of Object.entries(c.schema)){if(d.type!=="link")continue;let p=d.name===a.name;d.fieldName===l&&!p&&delete c.schema[f]}}}o(d7,"cleanupRelationships");function ktr(e){return e==="many-to-many"?"many-to-many":e==="one-to-many"?"many-to-one":"one-to-many"}o(ktr,"otherRelationshipType");function RHe(e,t,r,n){if(!r.primary||!n.primary){let l=r.primary?n.name:r.name;throw new Error(`Unable to generate many link schema, "${l}" does not have a primary key`)}let i=r.name+r.primary[0],s=n.name+n.primary[0],a=SHe(t,r,n),u=e._id,c={type:"table",_id:io(u,a),name:a,primary:[i,s],constrained:[i,s],sourceId:u,sourceType:"external",schema:{[i]:aA(i,{toTable:r.name,toKey:r.primary[0]}),[s]:aA(s,{toTable:n.name,toKey:n.primary[0]})}};return t.through=c._id,t.throughFrom=s,t.throughTo=i,t.fieldName=s,c}o(RHe,"generateManyLinkSchema");function OHe(e,t,r,n){if(!t.primary||!r.primary)throw new Error("Unable to generate link schema, no primary keys");let i=n==="one-to-many",s=i?r.primary[0]:t.primary[0],a=EHe(e,r);return e.relationshipType=n,e.foreignKey=i?a:s,e.fieldName=i?s:a,a}o(OHe,"generateLinkSchema");function IHe(e,t,r,n){let i;if(!(e.relationshipType==="many-to-many")&&e.foreignKey)i=(0,f7.cloneDeep)(e),i.fieldName=e.foreignKey,i.foreignKey=e.fieldName;else{let a=e;i=(0,f7.cloneDeep)(e),i.fieldName=a.throughTo,i.throughTo=a.throughFrom,i.throughFrom=a.throughTo}i.relationshipType=ktr(e.relationshipType),i.tableId=r._id,i.name=n,t.schema[n]=i}o(IHe,"generateRelatedSchema");function CHe(e){return e.foreignKey||e.through}o(CHe,"isRelationshipSetup");var fA={};G(fA,{allowedFields:()=>orr,create:()=>rrr,enrichSchema:()=>wb,get:()=>$tr,getAllEnriched:()=>Htr,getEnriched:()=>Vtr,getTable:()=>Qtr,isInternal:()=>ztr,isV2:()=>Hr,isView:()=>Ktr,remove:()=>irr,renameLinkedViews:()=>srr,syncSchema:()=>lA,update:()=>nrr});var p7={};G(p7,{create:()=>Utr,get:()=>DHe,getEnriched:()=>Mtr,remove:()=>Btr,update:()=>Ftr});var uA=require("lodash");function xHe(e){return e&&(0,uA.isPlainObject)(e)&&Object.keys(e).length===0}o(xHe,"isEmptyObject");function oo(e){let t=(0,uA.cloneDeep)(e);if(!t.queryUI&&t.query&&!xHe(t.query)){if(!Array.isArray(t.query))throw new K("view is missing queryUI field",400);t.queryUI=Fe.processSearchFilters(t.query)}return t}o(oo,"ensureQueryUISet");function _b(e){let t=(0,uA.cloneDeep)(e);return t.queryUI&&!xHe(t.queryUI)&&(t.query=Tt.buildQuery(t.queryUI)),t}o(_b,"ensureQuerySet");async function DHe(e){let t=Zr(e),{datasourceId:r,tableName:n}=wr(t),s=(await P.datasources.get(r)).entities[n],u=Object.values(s.views).filter(Hr).find(c=>c.id===e);if(!u)throw new Error("No view found");return oo(u)}o(DHe,"get");async function Mtr(e){let t=Zr(e),{datasourceId:r,tableName:n}=wr(t),s=(await P.datasources.get(r)).entities[n],u=Object.values(s.views).filter(Hr).find(c=>c.id===e);if(u)return await wb(oo(u),s.schema)}o(Mtr,"getEnriched");async function Utr(e,t){let r={...t,id:ok(e),version:2};r=_b(r),r=oo(r);let n=C.getWorkspaceDB(),{datasourceId:i,tableName:s}=wr(e),a=await P.datasources.get(i);return a.entities[s].views??={},a.entities[s].views[r.name]=r,await n.put(a),r}o(Utr,"create");async function Ftr(e,t){let r=C.getWorkspaceDB(),{datasourceId:n,tableName:i}=wr(e),s=await P.datasources.get(n);s.entities[i].views??={};let a=s.entities[i].views,u=Object.values(a).find(c=>Hr(c)&&c.id===t.id);if(!u||!u.name)throw new K(`View ${t.id} not found in table ${e}`,404);if(Hr(u)&&u.type!==t.type)throw new K("Cannot update view type after creation",400);return t=_b(t),t=oo(t),delete a[u.name],a[t.name]=t,await r.put(s),{view:t,existingView:u}}o(Ftr,"update");async function Btr(e){let t=C.getWorkspaceDB(),r=await DHe(e);if(!r)throw new K(`View ${e} not found`,404);let{datasourceId:n,tableName:i}=wr(r.tableId),s=await P.datasources.get(n);return delete s.entities[i].views[r?.name],await t.put(s),r}o(Btr,"remove");var h7={};G(h7,{create:()=>jtr,get:()=>PHe,getEnriched:()=>qtr,remove:()=>Gtr,update:()=>Wtr});async function PHe(e){let t=Zr(e),r=await P.tables.getTable(t),i=Object.values(r.views).filter(Hr).find(s=>s.id===e);if(!i)throw new Error("No view found");return oo(i)}o(PHe,"get");async function qtr(e){let t=Zr(e),r=await P.tables.getTable(t),i=Object.values(r.views).filter(Hr).find(s=>s.id===e);if(i)return await wb(oo(i),r.schema)}o(qtr,"getEnriched");async function jtr(e,t){let r={...t,id:ok(e),version:2};r=_b(r),r=oo(r);let n=C.getWorkspaceDB(),i=await P.tables.getTable(e);return i.views??={},i.views[r.name]=r,await n.put(i),r}o(jtr,"create");async function Wtr(e,t){let r=C.getWorkspaceDB(),n=await P.tables.getTable(e);n.views??={};let i=Object.values(n.views).find(s=>Hr(s)&&s.id===t.id);if(!i||!i.name)throw new K(`View ${t.id} not found in table ${e}`,404);if(Hr(i)&&i.type!==t.type)throw new K("Cannot update view type after creation",400);return t=_b(t),t=oo(t),delete n.views[i.name],n.views[t.name]=t,await r.put(n),{view:t,existingView:i}}o(Wtr,"update");async function Gtr(e){let t=C.getWorkspaceDB(),r=await PHe(e),n=await P.tables.getTable(r?.tableId);if(!r)throw new K(`View ${e} not found`,404);return delete n.views[r?.name],await t.put(n),r}o(Gtr,"remove");function cA(e){return Mt(e)?p7:h7}o(cA,"pickApi");async function $tr(e){let t=Zr(e);return cA(t).get(e)}o($tr,"get");async function Vtr(e){let t=Zr(e);return cA(t).getEnriched(e)}o(Vtr,"getEnriched");async function Htr(){let e=await P.tables.getAllTables(),t=[];for(let r of e){if(!r.views||Object.keys(r.views).length===0)continue;let n=Object.values(r.views).filter(Hr),i=await Promise.all(n.map(s=>wb(oo(s),r.schema,e)));t=t.concat(i)}return t}o(Htr,"getAllEnriched");async function Qtr(e){let t=typeof e=="string"?e:e.id,r=C.getTableForView(t);if(r)return r;let n=Zr(t),i=await P.tables.getTable(n);return C.setTableForView(t,i),i}o(Qtr,"getTable");function Ktr(e){return e.id&&ln(e.id)&&e.version===2}o(Ktr,"isView");function ztr(e){if(!ln(e))return!1;let t=Zr(e);return!Mt(t)}o(ztr,"isInternal");function Ytr(e){let t={},r=de.views.calculationFields(e);for(let n of Object.keys(r)){let i=r[n],s=i.calculationType==="count",a="distinct"in i;if(!(s&&a)){if(t[i.field]?.[i.calculationType])throw new K(`Duplicate calculation on field "${i.field}", calculation type "${i.calculationType}"`,400);t[i.field]??={},t[i.field][i.calculationType]=!0}}}o(Ytr,"guardDuplicateCalculationFields");function Jtr(e){let t={},r=de.views.calculationFields(e);for(let n of Object.keys(r)){let i=r[n];if(!(!(i.calculationType==="count")||!("distinct"in i))){if(t[i.field]?.[i.calculationType])throw new K(`Duplicate calculation on field "${i.field}", calculation type "${i.calculationType} distinct"`,400);t[i.field]??={},t[i.field][i.calculationType]=!0}}}o(Jtr,"guardDuplicateCountDistinctFields");async function Xtr(e,t){let r=de.views.calculationFields(t);if(Ytr(t),Jtr(t),Object.keys(r).length>5)throw new K("Calculation views can only have a maximum of 5 fields",400);for(let i of Object.keys(r)){let s=r[i];if(!s.field)throw new K(`Calculation field "${i}" is missing a "field" property`,400);let a=e.schema[s.field];if(!a)throw new K(`Calculation field "${i}" references field "${s.field}" which does not exist in the table schema`,400);if(!(s.calculationType==="count")&&!NM(a.type)&&!qX(a))throw new K(`Calculation field "${i}" references field "${s.field}" which is not a numeric field`,400)}let n=de.views.basicFields(t);for(let i of Object.keys(n)){let s=e.schema[i];if(!s)throw new K(`Group by field "${i}" does not exist in the table schema`,400);if(!jX(s))throw new K(`Grouping by fields of type "${s.type}" is not supported`,400)}}o(Xtr,"guardCalculationViewSchema");async function NHe(e,t){let r=await P.tables.getTable(e);if(de.views.isCalculationView(t))await Xtr(r,t);else if(de.views.hasCalculationFields(t))throw new K("Calculation fields are not allowed in non-calculation views",400);await Ztr(r,t),de.views.isCalculationView(t)||trr(r,t),err(t)}o(NHe,"guardViewSchema");async function Ztr(e,t){let r=t.schema||{};for(let n of Object.keys(r)){let i=r[n];if(de.views.isCalculationField(i))continue;if(!e.schema[n])throw new K(`Field "${n}" is not valid for the requested table`,400);if(r[n].readonly&&!r[n].visible)throw new K(`Field "${n}" must be visible if you want to make it readonly`,400)}}o(Ztr,"checkReadonlyFields");function err(e){if(e.primaryDisplay&&!e.schema?.[e.primaryDisplay]?.visible)throw new K(`You can't hide "${e.primaryDisplay}" because it is the display column.`,400)}o(err,"checkDisplayField");function trr(e,t){let r=e.views?.[t.name];for(let n of Object.values(e.schema)){if(!de.schema.isRequired(n.constraints))continue;let i=t.schema?.[n.name],s=r?.schema?.[n.name];if(!(!i&&!s?.visible)){if(!i?.visible)throw new K(`You can't hide "${n.name}" because it is a required field.`,400);if(de.views.isBasicViewField(i)&&i.readonly)throw new K(`You can't make "${n.name}" readonly because it is a required field.`,400)}}}o(trr,"checkRequiredFields");async function rrr(e,t){await NHe(e,t);let r=await cA(e).create(e,t),n=await P.permissions.getResourcePerms(e);return await P.permissions.setPermissions(r.id,{writeRole:n.write.role,readRole:n.read.role}),r}o(rrr,"create");async function nrr(e,t){return await NHe(e,t),cA(e).update(e,t)}o(nrr,"update");function Hr(e){return de.views.isV2(e)}o(Hr,"isV2");async function irr(e){let t=Zr(e);return cA(t).remove(e)}o(irr,"remove");function orr(e,t){return[...Object.keys(e?.schema||{}).filter(r=>{if(!Hr(e))return!0;let n=e.schema[r];return t==="WRITE"?n.visible&&!n.readonly:n.visible}),...Rs,...Tn]}o(orr,"allowedFields");async function wb(e,t,r){async function n(f,d){let p=r?r?.find(m=>m._id===f):await P.tables.getTable(f);if(!p)throw new Error("Cannot enrich relationship, table not found");let h={};for(let m of Object.keys(p.schema)){let g=p.schema[m];if(["link","formula","ai"].includes(g.type)||g.visible===!1)continue;let y=d[m],b=!!y?.visible,w=!!y?.readonly,E={visible:b,readonly:w,order:y?.order,width:y?.width,displayName:y?.displayName,icon:g.icon,type:g.type,subtype:g.subtype};!E.icon&&g.type==="bb_reference"&&g.subtype==="user"&&!de.schema.isDeprecatedSingleUserColumn(g)&&(E.icon="users-three"),h[m]=E}return h}o(n,"populateRelTableSchema");let i={},s=e.schema||{},a=Object.values(s).some(f=>f.order!=null),u=Object.keys(s).filter(f=>de.views.isCalculationField(s[f])?s[f].visible!==!1:f in t&&t[f].visible!==!1),c=Object.keys(t).filter(f=>t[f].visible!==!1),l=new Set([...u,...c]);for(let f of l){let d=s[f]||{visible:!1};i[f]={...t[f],...d,order:a?d?.order??void 0:t[f]?.order,columns:void 0},i[f].type==="link"&&(i[f].columns=await n(i[f].tableId,s[f]?.columns||{}))}return{...e,schema:i}}o(wb,"enrichSchema");function lA(e,t,r={}){let{renameColumn:n,primaryDisplay:i,previousPrimaryDisplay:s}=r;if(n&&e.schema&&e.schema[n.old]!=null&&(e.schema[n.updated]||(e.schema[n.updated]=e.schema[n.old]),delete e.schema[n.old]),n&&e.primaryDisplay===n.old&&(e.primaryDisplay=n.updated),e.schema){for(let a of Object.keys(e.schema)){let u=e.schema[a];if(!u){delete e.schema[a];continue}!de.views.isCalculationField(u)&&!t[a]&&delete e.schema[a]}for(let a of Object.keys(t))e.schema[a]||(e.schema[a]={visible:!1})}if(i&&(e.primaryDisplay==null||e.primaryDisplay===s)){e.primaryDisplay=i,e.schema??={};let a=e.schema[i]||{};e.schema[i]={...a,visible:!0,readonly:!1}}return e}o(lA,"syncSchema");async function srr(e,t){let r={};for(let n of Object.values(e.schema))n.type==="link"&&(r[n.tableId]??=await P.tables.getTable(n.tableId));for(let n of Object.values(r)){let i=!1,s=Object.values(n.views||{}).filter(P.views.isV2);if(s){for(let a of s)for(let u of Object.keys(a.schema||{}).filter(c=>{let l=n.schema[c];return!l||l.type!=="link"?!1:l.tableId===e._id})){let c=a.schema?.[u]?.columns;c&&c[t.old]&&(c[t.updated]=c[t.old],delete c[t.old],i=!0)}i&&await P.tables.saveTable(n)}}}o(srr,"renameLinkedViews");var dA="id";function kHe(e){return e.primary==null||e.primary.length===0}o(kHe,"noPrimaryKey");function arr(e,t){if(!t&&e.schema[dA]&&kHe(e))throw new Error("External tables with no `primary` column set will define an `id` column, but we found an `id` column in the supplied schema. Either set a `primary` column or remove the `id` column.");if(Hk(e,t))throw new Error("A column type has changed.");let r=Object.values(zc);for(let[n,i]of Object.entries(e.schema))if(n!==dA){if(i.type==="auto")throw new Error(`Column "${n}" has type "auto" - this is not supported.`);if(i.subtype&&r.includes(i.subtype))throw new Error(`Column "${n}" has subtype "${i.subtype}" - this is not supported.`);if(i.type==="datetime"){let s=t?.schema[n];if(s&&i.timeOnly!==s.timeOnly)throw new Error(`Column "${n}" can not change from time to datetime or viceversa.`)}}}o(arr,"validate");function urr(e){if(!e)throw new Error("No table supplied");if(e.sourceId)return e.sourceId;if(!e._id)throw new Error("No table ID supplied");return wr(e._id).datasourceId}o(urr,"getDatasourceId");async function m7(e){let t=urr(e),r={...e,created:!0};try{return(await Qk(t,r)).table}catch(n){throw n instanceof Error?new K(n.message,400):new K(n?.message||n,n.status||500)}}o(m7,"create");async function Qk(e,t,r){let n={...t,type:"table",_id:io(e,t.name),sourceId:e},i=r?.tableId||t._id,s;i&&(s=await Eb(i)),arr(n,s),!s&&kHe(n)&&(n.primary=[dA],n.schema[dA]={type:"number",autocolumn:!0,name:dA});for(let h in n.views){let m=n.views[h];!m||!Hr(m)||(n.views[h]=lA(s.views[h],n.schema,{renameColumn:r?.renaming,primaryDisplay:n.primaryDisplay,previousPrimaryDisplay:s?.primaryDisplay}))}let a=C.getWorkspaceDB(),u=await yu.get(e);u.entities||(u.entities={}),n=THe(u,n);let c=(0,LHe.cloneDeep)(u.entities),l=u.entities,f=[];for(let h of Object.values(n.schema)){if(h.type!=="link"||CHe(h))continue;let m=h.tableId,g=Object.values(l).find(w=>w._id===m);if(!g)continue;let y=h.fieldName,b=h.relationshipType;if(b==="many-to-many"){let w=RHe(u,h,n,g);if(l[w.name])throw new Error("Junction table already exists, cannot create another relationship.");l[w.name]=w,f.push(w)}else{let w=b==="one-to-many"?n:g,E=OHe(h,n,g,b);if(w.schema[E]!=null)throw new Error(`Unable to generate foreign key - column ${E} already in use.`);w.schema[E]=aA(E),w.constrained==null&&(w.constrained=[]),w.constrained.indexOf(E)===-1&&w.constrained.push(E),w._id!==n._id&&f.push(w)}IHe(h,g,n,y),l[g.name]=g,h.main=!0}l[n.name]=n,s&&d7(n,l,{oldTable:s});let d=i?"UPDATE_TABLE":"CREATE_TABLE";await qk(u,d,n,s,r?.renaming);for(let h of f){let m=c[h.name],g=m?"UPDATE_TABLE":"CREATE_TABLE";await qk(u,g,h,m)}Array.isArray(n.constrained)&&(n.constrained=n.constrained.filter(h=>Object.keys(n.schema).includes(h))),delete n._rename,u.entities={...u.entities,...l},await a.put(rA(u));let p=await yu.get(u._id);return p.isSQL&&(n.sql=!0),{datasource:p,table:n,oldTable:s}}o(Qk,"save");async function crr(e,t){let r=C.getWorkspaceDB(),n=await yu.get(e),i=n.entities,s="DELETE_TABLE";return i&&(await qk(n,s,t),d7(t,i,{deleting:!0}),delete i[t.name],n.entities=i),await r.put(rA(n)),{datasource:await yu.get(n._id),table:t}}o(crr,"destroy");var hA={};G(hA,{create:()=>g7,destroy:()=>lrr,save:()=>Kk});var UHe=require("lodash/fp"),FHe=U(require("lodash/isEqual"));function MHe(e,t){if(!e.schema)return e;for(let[r,n]of Object.entries(e.schema)){if(!n.autocolumn||n.subtype)continue;let i=t&&t.schema[r];i&&i.subtype?e.schema[r].subtype=i.subtype:e.schema[r]=Jv(n)}return e}o(MHe,"checkAutoColumns");async function g7(e,t,r){let i={_id:yY(),...e,type:e.type||"table",sourceType:"internal"},s=!!t;i.views||(i.views={});try{let{table:a}=await Kk(i,{userId:r,rowsToImport:t,isImport:s});return a}catch(a){throw a instanceof Error?new K(a.message,400):new K(a.message||a,a.status||500)}}o(g7,"create");async function Kk(e,t){let r=C.getWorkspaceDB(),n;if(t?.tableId&&(n=await Eb(t.tableId)),Hk(e,n))throw new Error("A column type has changed.");let i=Nre(e);if(i.length)throw new Error(`Column(s) "${i.join(", ")}" are duplicated - check for other columns with these name (case in-sensitive)`);e=MHe(e,n);let s=new AHe({userId:t?.userId,oldTable:n,importRows:t?.rowsToImport});e=await s.before(e);let a=t?.renaming;if(a&&a.old===a.updated&&(a=void 0),a&&e.schema[a.updated]?.type==="link")throw new Error("Cannot rename a linked column.");let u=n?.pendingColumnRenames?n.pendingColumnRenames:[];a&&(u=wHe(u,a)),u.length>0?e.pendingColumnRenames=u:delete e.pendingColumnRenames,e=await s.mid(e,a);for(let p in e.views){let h=e.views[p];if(h){if(Hr(h)){n?.views&&n.views[p]&&(e.views[p]=lA(n.views[p],e.schema,{renameColumn:a,primaryDisplay:e.primaryDisplay,previousPrimaryDisplay:n?.primaryDisplay}));continue}h.schema.group||h.schema.field||(h.schema=e.schema)}}let c=await ya({eventType:n?"table:updated":"table:save",table:e,oldTable:n});c!=null&&c._rev&&(e._rev=c._rev);let l=s.getUpdatedRows();l&&l.length!==0&&await r.bulkDocs(l);let f=await r.put(e);e._rev=f.rev;let d=(0,UHe.cloneDeep)(e);return e=await s.after(e),(0,FHe.default)(d,e)||(f=await r.put(e),e._rev=f.rev),await Vk(e,{oldTable:n,deletion:!1}),{table:e,oldTable:n}}o(Kk,"save");async function lrr(e){let t=C.getWorkspaceDB(),r=e._id,n=(await t.allDocs(sn(r,null,{include_docs:!0}))).rows.map(i=>i.doc);return await t.bulkDocs(n.map(i=>({...i,_deleted:!0}))),await mr.removeRows(n.length,{tableId:r}),await ya({eventType:"table:delete",table:e}),await t.remove(r,e._rev),await vHe(e,n),{table:e}}o(lrr,"destroy");var b7={};G(b7,{isExternal:()=>Sb,isInternal:()=>y7,isTable:()=>frr});function Sb(e){return e.table&&e.table.sourceType==="external"?!0:!!(e.tableId&&Mt(e.tableId))}o(Sb,"isExternal");function y7(e){return!Sb(e)}o(y7,"isInternal");function frr(e){return e._id&&Ns(e._id)}o(frr,"isTable");var T7={};G(T7,{PermissionUpdateType:()=>qHe,getAllDBRoles:()=>WHe,getDependantResources:()=>prr,getInheritablePermissions:()=>jHe,getResourcePerms:()=>E7,setPermissions:()=>S7,updatePermissionOnRole:()=>w7});var _7=[Wr.PermissionLevel.WRITE,Wr.PermissionLevel.READ,Wr.PermissionLevel.EXECUTE];function drr(e){switch(Qre(e)){case"view":return Wr.PermissionType.TABLE}switch(Hre(e)){case"ta":case"ro":case"datasource_plus":return Wr.PermissionType.TABLE;case"au":return Wr.PermissionType.AUTOMATION;case"wh":return Wr.PermissionType.WEBHOOK;case"query":case"datasource":return Wr.PermissionType.QUERY;default:return Wr.PermissionType.LEGACY_VIEW}}o(drr,"getPermissionType");function BHe(e){let t=drr(e),r={};for(let[n,i]of Object.entries(Et.getBuiltinRoles())){if(!i.permissionId)continue;let s=Wr.getBuiltinPermissionByID(i.permissionId);if(!s)continue;let a=s.permissions.find(u=>u.type===t);if(a&&_7.includes(a.level)){let u=a.level;r[u]=Et.lowerBuiltinRoleID(r[u],n),Wr.isPermissionLevelHigherThanRead(u)&&(r[Wr.PermissionLevel.READ]=Et.lowerBuiltinRoleID(r[Wr.PermissionLevel.READ],n))}}return r}o(BHe,"getBasePermissions");var qHe=(r=>(r.REMOVE="remove",r.ADD="add",r))(qHe||{});async function jHe(e){if(ln(e))return await E7(Zr(e))}o(jHe,"getInheritablePermissions");async function E7(e){let t=await Et.getAllRoles(),r={},n=await jHe(e);for(let s of _7)for(let a of t)Et.checkForRoleResourceArray(a.permissions||{},e)[e]?.indexOf(s)>-1?r[s]={role:Et.getExternalRoleID(a._id,a.version),type:"EXPLICIT"}:!r[s]&&n&&n[s]&&(r[s]={role:n[s].role,type:"INHERITED"});let i=Object.entries(BHe(e)).reduce((s,[a,u])=>(s[a]={role:u,type:"BASE"},s),{});return Object.assign(i,r)}o(E7,"getResourcePerms");async function prr(e){if(Ns(e)){let t={},r=await P.tables.getTable(e),n=Object.values(r.views||{});for(let i of n){if(!Hr(i))continue;let s=await E7(i.id);for(let[,a]of Object.entries(s))a.type==="INHERITED"&&(t.view??=new Set,t.view.add(i.id))}return Object.entries(t).reduce((i,[s,a])=>(i[s]=a.size,i),{})}}o(prr,"getDependantResources");async function w7({roleId:e,resourceId:t,level:r},n){let i=C.getWorkspaceDB(),s=n==="remove",a=Et.isBuiltin(e),u=Et.getDBRoleID(e),c=await WHe(i),l=[];if(a&&!c.some(d=>d._id===u)){let d=Et.getBuiltinRoles()[e];d._id=Et.getDBRoleID(d._id),c.push(d)}for(let d of c){let p=!1,h=d.permissions?d.permissions:{};if((!h[t]||!Array.isArray(h[t]))&&(h[t]=typeof h[t]=="string"?[h[t]]:[]),(d._id!==u||s)&&h[t].indexOf(r)!==-1&&($Ge(h[t],r),p=!0),!s&&d._id===u){let m=new Set(h[t]);h[t]=[...m.add(r)],p=!0}p&&(d.permissions=h,l.push(d))}return(await i.bulkDocs(l)).map(d=>{let p=l.find(m=>m._id===d.id)?.version;return{_id:Et.getExternalRoleID(d.id,p),rev:d.rev,error:d.error,reason:d.reason}})}o(w7,"updatePermissionOnRole");async function S7(e,{writeRole:t,readRole:r}){await w7({roleId:t,resourceId:e,level:"write"},"add"),await w7({roleId:r,resourceId:e,level:"read"},"add")}o(S7,"setPermissions");async function WHe(e){return(await e.allDocs(IGe(null,{include_docs:!0}))).rows.map(r=>r.doc)}o(WHe,"getAllDBRoles");async function v7(e,t,r){let n;return Sb({table:e})?n=await m7(e):n=await g7(e,t,r),await S7(n._id,{writeRole:Et.BUILTIN_ROLE_IDS.ADMIN,readRole:Et.BUILTIN_ROLE_IDS.ADMIN}),n}o(v7,"create");var R7={};G(R7,{external:()=>pA,internal:()=>hA,saveTable:()=>hrr,update:()=>mrr});var GHe=require("lodash");async function hrr(e){let t=C.getWorkspaceDB(),r;if(Mt(e._id)){let i=await P.datasources.get(e.sourceId);i.entities[e.name]=e,r=await t.put(i)}else r=await t.put(e);let n=(0,GHe.cloneDeep)(e);return n._rev=r.rev,n}o(hrr,"saveTable");async function mrr(e,t){let r=e._id;if(Sb({table:e})){let n=e.sourceId;await Qk(n,e,{tableId:r,renaming:t})}else await Kk(e,{tableId:r,renaming:t})}o(mrr,"update");var $He=require("lodash");async function VHe(e,t,r){if(r in e.schema)throw new Hn(`Column "${r}" already exists`);if(r==="")throw new Hn("Column name cannot be empty");if(zf(r))throw new Hn("Column name cannot be a reserved column name");let n=e.schema[t];if(!n)throw new Hn(`Column "${t}" does not exist on table "${e.name}"`);if(n.type!=="link"||n.tableId!=="ta_users")throw new Hn("Only user relationship migration columns is currently supported");let i=n.relationshipType==="one-to-many"?"bb_reference_single":"bb_reference",s={name:r,type:i,subtype:"user"};s.type==="bb_reference"&&(s.constraints={type:"array"}),e.schema[s.name]=s,e=await P.tables.saveTable(e);let a=grr(e,n,s);try{return await a.doMigration()}catch(u){throw delete e.schema[s.name],await P.tables.saveTable(e),u}}o(VHe,"migrate");function grr(e,t,r){if(Mt(e._id))throw new Hn("External tables cannot be migrated");if(!(t.name in e.schema))throw new Hn(`Column "${t.name}" does not exist`);if(r.type!=="bb_reference_single"&&r.type!=="bb_reference")throw new Hn(`Column "${r.name}" is not a user column`);if(r.subtype!=="user")throw new Hn(`Column "${r.name}" is not a user column`);if(!zA(t))throw new Hn(`Column "${t.name}" is not a user relationship`);if(t.tableId!=="ta_users")throw new Hn(`Column "${t.name}" is not a user relationship`);if(t.relationshipType==="one-to-many"){if(r.type!=="bb_reference_single")throw new Hn(`Column "${t.name}" is a one-to-many column but "${r.name}" is not a single user column`);return new O7(e,t,r)}if(t.relationshipType==="many-to-many"||t.relationshipType==="many-to-one"){if(r.type!=="bb_reference")throw new Hn(`Column "${t.name}" is a ${t.relationshipType} column but "${r.name}" is not a multi user column`);return new I7(e,t,r)}throw new Hn("Unknown migration type")}o(grr,"getColumnMigrator");var zk=class{constructor(t,r,n){this.table=t;this.oldColumn=r;this.newColumn=n}static{o(this,"UserColumnMigrator")}pickUserTableLinkSide(t){return t.doc1.tableId==="ta_users"?t.doc1:t.doc2}pickOtherTableLinkSide(t){return t.doc1.tableId==="ta_users"?t.doc2:t.doc1}async doMigration(){let t=(0,$He.cloneDeep)(this.table),r=await P.rows.fetchRaw(this.table._id),n=r.reduce((u,c)=>(u[c._id]=c,u),{}),i=await P.links.fetchWithDocument(this.table._id);for(let u of i){let c=this.pickUserTableLinkSide(u),l=this.pickOtherTableLinkSide(u);if(l.tableId!==this.table._id||l.fieldName!==this.oldColumn.name||c.tableId!=="ta_users")continue;let f=n[l.rowId];f&&this.updateRow(f,c)}await C.getWorkspaceDB().bulkDocs(r),delete this.table.schema[this.oldColumn.name],this.table=await P.tables.saveTable(this.table),await ya({eventType:"table:updated",table:this.table,oldTable:t});let a=await P.tables.getTable(this.oldColumn.tableId);return{tablesUpdated:[this.table,a]}}},O7=class extends zk{static{o(this,"SingleUserColumnMigrator")}updateRow(t,r){t[this.newColumn.name]=F.getGlobalIDFromUserMetadataID(r.rowId)}},I7=class extends zk{static{o(this,"MultiUserColumnMigrator")}updateRow(t,r){t[this.newColumn.name]||(t[this.newColumn.name]=[]),t[this.newColumn.name].push(F.getGlobalIDFromUserMetadataID(r.rowId))}};var C7={};G(C7,{USER_COLUMN_PREFIX:()=>Tb,addTable:()=>vrr,mapToUserColumn:()=>bu,removeTable:()=>Arr,syncDefinition:()=>Trr});var KHe=require("lodash");var yrr=require("lodash/fp");var USn={_id:rb,type:F.BUDIBASE_DATASOURCE_TYPE,name:"Sample Data",source:"BUDIBASE",config:{}};var Yk={"Created At":{name:"Created At",type:"datetime",subtype:"createdAt",icon:"ri-magic-line",autocolumn:!0,constraints:{type:"string",length:{},presence:!1,datetime:{latest:"",earliest:""}}},"Updated At":{name:"Updated At",type:"datetime",subtype:"updatedAt",icon:"ri-magic-line",autocolumn:!0,constraints:{type:"string",length:{},presence:!1,datetime:{latest:"",earliest:""}}}},brr={_id:dGe,type:"table",views:{},sourceId:rb,sourceType:"internal",primaryDisplay:"Item Name",name:"Inventory",schema:{"Item ID":{name:"Item ID",type:"number",subtype:"autoID",icon:"ri-magic-line",width:120,autocolumn:!0,constraints:{type:"number",presence:!1,numericality:{greaterThanOrEqualTo:"",lessThanOrEqualTo:""}}},"Item Name":{type:"string",constraints:{type:"string",length:{maximum:null},presence:{allowEmpty:!1}},name:"Item Name",width:160},"Item Tags":{type:"array",constraints:{type:"array",presence:{allowEmpty:!1},inclusion:["Electrical","Material","Vehicle","Office","Tools"]},name:"Item Tags",sortable:!1},Notes:{type:"longform",constraints:{type:"string",length:{},presence:!1},name:"Notes",useRichText:null,width:220},Status:{type:"options",constraints:{type:"string",presence:{allowEmpty:!1},inclusion:["Available","Repair","Broken"]},name:"Status",width:110,sortable:!1},SKU:{type:"barcodeqr",constraints:{type:"string",length:{},presence:!1},name:"SKU",width:130},"Purchase Date":{type:"datetime",constraints:{type:"string",length:{},presence:!1,datetime:{latest:"",earliest:""}},name:"Purchase Date",ignoreTimezones:!0},"Purchase Price":{type:"number",constraints:{type:"number",presence:!1,numericality:{greaterThanOrEqualTo:null,lessThanOrEqualTo:""}},name:"Purchase Price",width:160},...Yk}},_rr={_id:mY,type:"table",views:{},name:"Employees",sourceId:rb,sourceType:"internal",primaryDisplay:"First Name",schema:{"First Name":{name:"First Name",type:"string",constraints:{type:"string",length:{},presence:!1}},"Last Name":{name:"Last Name",type:"string",constraints:{type:"string",length:{},presence:!1}},Email:{name:"Email",type:"string",constraints:{type:"string",length:{},presence:!1}},Address:{name:"Address",type:"string",constraints:{type:"string",length:{},presence:!1}},City:{name:"City",type:"string",constraints:{type:"string",length:{},presence:!1}},Postcode:{name:"Postcode",type:"string",constraints:{type:"string",length:{},presence:!1}},Phone:{name:"Phone",type:"string",constraints:{type:"string",length:{},presence:!1}},"EMPLOYEE ID":{name:"EMPLOYEE ID",type:"number",subtype:"autoID",icon:"ri-magic-line",autocolumn:!0,constraints:{type:"number",presence:!1,numericality:{greaterThanOrEqualTo:"",lessThanOrEqualTo:""}}},"Employee Level":{type:"options",constraints:{type:"string",presence:!1,inclusion:["Manager","Junior","Senior","Apprentice","Contractor"]},name:"Employee Level",sortable:!1},"Badge Photo":{type:"attachment",constraints:{type:"array",presence:!1},name:"Badge Photo",sortable:!1},Jobs:{type:"link",constraints:{type:"array",presence:!1},fieldName:"Assigned",name:"Jobs",relationshipType:"many-to-many",tableId:hY},"Start Date":{type:"datetime",constraints:{type:"string",length:{},presence:!1,datetime:{latest:"",earliest:""}},name:"Start Date",ignoreTimezones:!0},"End Date":{type:"datetime",constraints:{type:"string",length:{},presence:!1,datetime:{latest:"",earliest:""}},name:"End Date",ignoreTimezones:!0},...Yk}},wrr={_id:hY,type:"table",name:"Jobs",sourceId:rb,sourceType:"internal",primaryDisplay:"Job ID",schema:{"Job ID":{name:"Job ID",type:"number",subtype:"autoID",icon:"ri-magic-line",autocolumn:!0,constraints:{type:"number",presence:!1,numericality:{greaterThanOrEqualTo:"",lessThanOrEqualTo:""}}},"Quote Date":{type:"datetime",constraints:{type:"string",length:{},presence:{allowEmpty:!1},datetime:{latest:"",earliest:""}},name:"Quote Date",ignoreTimezones:!0},"Quote Price":{type:"number",constraints:{type:"number",presence:{allowEmpty:!1},numericality:{greaterThanOrEqualTo:"",lessThanOrEqualTo:""}},name:"Quote Price"},"Works Start":{type:"datetime",constraints:{type:"string",length:{},presence:!1,datetime:{latest:"",earliest:""}},name:"Works Start",ignoreTimezones:!0},Address:{type:"longform",constraints:{type:"string",length:{},presence:!1},name:"Address",useRichText:null},"Customer Name":{type:"string",constraints:{type:"string",length:{maximum:null},presence:!1},name:"Customer Name"},Notes:{type:"longform",constraints:{type:"string",length:{},presence:!1},name:"Notes",useRichText:null},"Customer Phone":{type:"string",constraints:{type:"string",length:{maximum:null},presence:!1},name:"Customer Phone"},"Customer Email":{type:"string",constraints:{type:"string",length:{maximum:null},presence:!1},name:"Customer Email"},Assigned:{name:"Assigned",type:"link",tableId:mY,fieldName:"Jobs",relationshipType:"many-to-many"},"Works End":{type:"datetime",constraints:{type:"string",length:{},presence:!1,datetime:{latest:"",earliest:""}},name:"Works End",ignoreTimezones:!0},"Updated Price":{type:"number",constraints:{type:"number",presence:!1,numericality:{greaterThanOrEqualTo:"",lessThanOrEqualTo:""}},name:"Updated Price"},...Yk}},Err={_id:pGe,type:"table",views:{},name:"Expenses",sourceId:rb,sourceType:"internal",primaryDisplay:"Expense ID",schema:{"Expense ID":{name:"Expense ID",type:"number",subtype:"autoID",icon:"ri-magic-line",autocolumn:!0,constraints:{type:"number",presence:!1,numericality:{greaterThanOrEqualTo:"",lessThanOrEqualTo:""}}},"Expense Tags":{type:"array",constraints:{type:"array",presence:{allowEmpty:!1},inclusion:["Fuel","Food","Materials","Repair","Equipment","Fees","Service","Office","Other"]},name:"Expense Tags",sortable:!1},Cost:{type:"number",constraints:{type:"number",presence:{allowEmpty:!1},numericality:{greaterThanOrEqualTo:"",lessThanOrEqualTo:""}},name:"Cost"},Notes:{type:"longform",constraints:{type:"string",length:{},presence:!1},name:"Notes",useRichText:null},"Payment Due":{type:"datetime",constraints:{type:"string",length:{},presence:!1,datetime:{latest:"",earliest:""}},name:"Payment Due",ignoreTimezones:!0},"Date Paid":{type:"datetime",constraints:{type:"string",length:{},presence:!1,datetime:{latest:"",earliest:""}},name:"Date Paid",ignoreTimezones:!0},Attachment:{type:"attachment",constraints:{type:"array",presence:!1},name:"Attachment",sortable:!1},...Yk}},HHe=[brr,_rr,wrr,Err];var QHe={boolean:"NUMERIC",datetime:"VARCHAR",formula:"VARCHAR",ai:"VARCHAR",longform:"VARCHAR",number:"REAL",string:"VARCHAR",auto:"REAL",options:"VARCHAR",json:"BLOB",internal:"BLOB",barcodeqr:"BLOB",attachment:"BLOB",attachment_single:"BLOB",signature_single:"BLOB",array:"BLOB",link:"BLOB",bigint:"VARCHAR",bb_reference:"VARCHAR",bb_reference_single:"VARCHAR"};function Srr(e,t){let r=e._id,n=t.tableId;return{tableId:Mf(r,n),definition:{"doc1.rowId":"VARCHAR","doc1.tableId":"VARCHAR","doc1.fieldName":"VARCHAR","doc2.rowId":"VARCHAR","doc2.tableId":"VARCHAR","doc2.fieldName":"VARCHAR",tableId:"VARCHAR"}}}o(Srr,"buildRelationshipDefinitions");var Tb="data_";function bu(e){return`${Tb}${de.schema.encodeNonAscii(e)}`}o(bu,"mapToUserColumn");function zHe(e){let t={},r={},n=[];for(let[a,u]of Object.entries(e.schema)){if(u.type==="link"){let{tableId:l,definition:f}=Srr(e,u);t[l]={fields:f}}if(!QHe[u.type])throw new Error(`Unable to map type "${u.type}" to SQLite type`);let c=a.toLowerCase();n.includes(c)||(n.push(c),r[bu(a)]={field:a,type:QHe[u.type]})}let i={};Tn.forEach(a=>{i[a]="VARCHAR"});let s={...i,...r};return t[e._id]={fields:s},t}o(zHe,"mapTable");async function YHe(){let e=await Mh.getAllInternalTables();for(let r of HHe)e.find(n=>n._id===r._id)||e.push(r);let t=ze.designDoc.base("tableId");for(let r of e)t.sql.tables={...t.sql.tables,...zHe(r)};return t}o(YHe,"buildBaseDefinition");async function Trr(){let e=C.getWorkspaceDB(),t;try{t=await e.get(Fn)}catch(n){if(n.status!==404)throw n}let r=await YHe();t&&(r._rev=t._rev),(!t||!(0,KHe.isEqual)(t.sql,r.sql))&&await e.put(r)}o(Trr,"syncDefinition");async function vrr(e){let t=C.getWorkspaceDB(),r;try{r=await t.get(Fn)}catch{r=await YHe()}r.sql.tables={...r.sql.tables,...zHe(e)},await t.put(r)}o(vrr,"addTable");async function Arr(e){let t=C.getWorkspaceDB();try{let[r,n]=await Promise.all([Mh.getAllInternalTables(),t.get(Fn)]),i=r.map(a=>a._id).filter(a=>!a.includes(e._id)),s=!1;for(let a of Object.keys(n.sql?.tables||{}))i.find(u=>a.includes(u))||(delete n.sql.tables[a],s=!0);s&&(await t.put(n),await t.sqlDiskCleanup())}catch(r){if(r?.status===404)return;throw r}}o(Arr,"removeTable");async function JHe(e,t){let r=await mA(),i={name:de.duplicateName(e.name,r.map(a=>a.name)),type:e.type,sourceType:e.sourceType,sourceId:e.sourceId,schema:{...e.schema},primaryDisplay:e.primaryDisplay,views:{},indexes:e.indexes?{...e.indexes}:void 0},s=await v7(i,void 0,t);return await Oe.table.created(s),s}o(JHe,"duplicate");var Mh={populateExternalTableSchemas:rA,...A7,...R7,...x7,...b7,migrate:VHe,sqs:C7,duplicate:JHe};function Rrr(e){let t={};for(let[r,n]of Object.entries(e))if(r.includes("."))t[r]="Table names containing dots are not supported.";else{let s=Object.keys(n.schema).find(a=>a.includes("."));s&&(t[r]=`Column '${s}' is not supported as it contains a dot.`)}return t}o(Rrr,"checkForSchemaErrors");async function XHe(e,t){let r=await Orr(e,t);if(!t)return r;let n={tables:{},errors:{}};for(let i in r.tables)t.some(s=>s.toLowerCase()===i.toLowerCase())&&(n.tables[i]=r.tables[i]);for(let i in r.errors)t.some(s=>s.toLowerCase()===i.toLowerCase())&&(n.errors[i]=r.errors[i]);return{...n,errors:{...n.errors,...Rrr(n.tables)}}}o(XHe,"buildFilteredSchema");async function Orr(e,t){return await(await ZHe(e)).buildSchema(e._id,e.entities,t)}o(Orr,"buildSchemaHelper");async function ZHe(e){let t=await hb(e.source);return e._id&&(e=await Nk(e)),new t(e.config)}o(ZHe,"getConnector");async function Irr(e){if(e._id){let t=await Lk(e._id);e=KJ(e,t)}return await Nk(e)}o(Irr,"getAndMergeDatasource");async function Crr(e,t){let r=C.getWorkspaceDB(),n=await Lk(e),{tables:i,errors:s}=await XHe(n,t),a=n.entities||{},u=Object.keys(a).filter(l=>!Object.keys(i).includes(l));for(let l of u)await P.rowActions.deleteAll(a[l]._id);n.entities=i,kk(n);let c=await r.put(Mh.populateExternalTableSchemas(n));return n._rev=c.rev,{datasource:n,errors:s}}o(Crr,"buildSchemaFromSource");var yu={...Mk,...D7};async function Uh(e){return await so.tracer.trace("processTable",async t=>{if(!e)return e;if(t.addTags({tableId:e._id}),e={...e},e.views){t.addTags({numViews:Object.keys(e.views).length});for(let[r,n]of Object.entries(e.views))Hr(n)&&(e.views[r]=oo(n))}return e._id&&Mt(e._id)?(t.addTags({isExternal:!0}),e.schema.id&&!e.schema.id.name&&(e.schema.id.name="id"),{...e,type:"table",sourceType:"external"}):(t.addTags({isExternal:!1}),{...e,type:"table",primary:["_id"],sourceId:e.sourceId||Un,sourceType:"internal",sql:!0})})}o(Uh,"processTable");async function gA(e){return await so.tracer.trace("processTables",async t=>(t.addTags({numTables:e.length}),await Promise.all(e.map(r=>Uh(r)))))}o(gA,"processTables");async function xrr(e){return await so.tracer.trace("processEntities",async t=>{t.addTags({numTables:Object.keys(e).length});for(let r of Object.keys(e))e[r]=await Uh(e[r]);return e})}o(xrr,"processEntities");async function mA(e){return await so.tracer.trace("getAllInternalTables",async t=>{e||(e=C.getWorkspaceDB()),t.addTags({db:e.name});let r=await e.allDocs(kf(null,{include_docs:!0}));return t.addTags({numTables:r.rows.length}),await gA(r.rows.map(n=>n.doc))})}o(mA,"getAllInternalTables");async function Drr(e){return await so.tracer.trace("getAllInternalTableIds",async t=>{let r=e||C.getWorkspaceDB();t.addTags({db:r.name});let{rows:n}=await r.allDocs(kf(null,{include_docs:!1})),i=n.map(({id:s})=>s);return t.addTags({numTableIds:i.length}),i})}o(Drr,"getAllInternalTableIds");async function Prr(){let e=await mA(),t=[];return C.doInWorkspaceContext(C.getProdWorkspaceId(),async()=>{let r=C.getWorkspaceDB(),n=o(async i=>{let a=0;for(;;){let{rows:u}=await r.allDocs(sn(i,null,{include_docs:!1,limit:25,skip:a}));if(u.length===0)return!1;if(u.some(l=>!l.value?.deleted))return!0;if(u.length<25)return!1;a+=25}},"hasNonDeletedRows");for(let i of e){if(i._id===Vt.USER_METADATA||!i._id)continue;await n(i._id)||t.push(i._id)}return t})}o(Prr,"listEmptyProductionTables");async function e4e(){return await so.tracer.trace("getAllExternalTables",async e=>{let t=await P.datasources.fetch({enriched:!0});e.addTags({numDatasources:t.length});let r=t.filter(i=>i._id!==Un).map(i=>i.entities);e.addTags({numEntities:r.length});let n=[];for(let i of r)i&&(n=n.concat(Object.values(i)));return e.addTags({numTables:n.length}),await gA(n)})}o(e4e,"getAllExternalTables");async function t4e(e,t){return await so.tracer.trace("getExternalTable",async r=>{r.addTags({datasourceId:e,tableName:t});let n=await r4e(e);if(!n[t])throw new Error(`Unable to find table named "${t}"`);let i=await Uh(n[t]);return i.sourceId||(i.sourceId=e),i})}o(t4e,"getExternalTable");async function Eb(e){return await so.tracer.trace("getTable",async t=>{let r=C.getWorkspaceDB();t.addTags({tableId:e,db:r.name});let n;if(e&&Mt(e)){let{datasourceId:i,tableName:s}=wr(e);t.addTags({isExternal:!0,datasourceId:i,tableName:s});let a=await yu.get(i);n={...await t4e(i,s),sql:Bf(a)},t.addTags({isSQL:Bf(a)})}else n=await r.get(e);return await Uh(n)})}o(Eb,"getTable");async function P7(e){return await so.tracer.trace("doesTableExist",async t=>{t.addTags({tableId:e});try{let r=await Eb(e);return t.addTags({tableExists:!!r}),!!r}catch{return t.addTags({tableExists:!1}),!1}})}o(P7,"doesTableExist");async function Nrr(){return await so.tracer.trace("getAllTables",async e=>{let[t,r]=await Promise.all([mA(),e4e()]);return e.addTags({numInternalTables:t.length,numExternalTables:r.length}),await gA([...t,...r])})}o(Nrr,"getAllTables");async function r4e(e){return await so.tracer.trace("getExternalTablesInDatasource",async t=>{let r=await yu.get(e,{enriched:!0});if(!r||!r.entities)throw new Error("Datasource is not configured fully.");return t.addTags({datasourceId:e,numEntities:Object.keys(r.entities).length}),await xrr(r.entities)})}o(r4e,"getExternalTablesInDatasource");async function Lrr(e){return so.tracer.trace("getTables",async t=>{t.addTags({numTableIds:e.length});let r=e.filter(s=>Mt(s)),n=e.filter(s=>!Mt(s)),i=[];if(r.length){let s=await e4e();i=i.concat(s.filter(a=>r.indexOf(a._id)!==-1))}if(n.length){let a=await C.getWorkspaceDB().getMultiple(n,{allowMissing:!0});i=i.concat(a)}return t.addTags({numTables:i.length}),await gA(i)})}o(Lrr,"getTables");async function krr(e){return await so.tracer.trace("enrichViewSchemas",async t=>{t.addTags({tableId:e._id});let r=[];for(let n of Object.values(e.views??[]))P.views.isV2(n)?r.push(await P.views.enrichSchema(n,e.schema)):r.push(n);return{...e,views:r.reduce((n,i)=>(n[i.name]=i,n),{})}})}o(krr,"enrichViewSchemas");var $rr=require("@bull-board/api"),Vrr=require("@bull-board/api/bullAdapter"),Hrr=require("@bull-board/koa");var Xk=U(require("dd-trace"));var Mrr=o(async()=>{let e=await PGe(),t=[];for(let n of e)if(!n.tableId&&!n.tableId){let i=new zv(n.doc1.tableId,n.doc1.fieldName,n.doc1.rowId,n.doc2.tableId,n.doc2.fieldName,n.doc2.rowId);i._id=n._id,i._rev=n._rev,t.push(i)}let r=C.getWorkspaceDB();t.length&&await r.bulkDocs(t),await P.tables.sqs.syncDefinition()},"migration"),n4e=Mrr;var Urr=o(async()=>{let e=await P.screens.fetch(),t=await P.workspaces.metadata.get(),r=await P.workspaceApps.fetch(C.getWorkspaceDB()),[n]=r;n||(n=await P.workspaceApps.create({name:t.name,url:"/",navigation:t.navigation,isDefault:!0}));let i=C.getWorkspaceDB(),s=e.filter(u=>!u.workspaceAppId).map(u=>({...u,workspaceAppId:n._id}));for(let u of r)u.url||s.push({...u,url:u.urlPrefix||"/",urlPrefix:void 0});let a=await i.get("_design/database");a.views?.screen_routes_2&&a.views.screen_routes_2.version===void 0&&(delete a.views?.screen_routes_2,s.push(a)),await i.bulkDocs(s)},"migration"),i4e=Urr;var Frr=o(async()=>{let t=(await P.workspaceApps.fetch()).filter(r=>r.isDefault);if(t.length>1){let[r,...n]=t.sort((u,c)=>c.updatedAt.localeCompare(u.updatedAt)),i=C.getWorkspaceDB(),s=[],a=await P.screens.fetch();for(let u of n)s.push({...u,_deleted:!0}),s.push(...a.filter(c=>c.workspaceAppId===u._id).map(c=>({...c,workspaceAppId:r._id})));await i.bulkDocs(s)}},"migration"),o4e=Frr;var N7=[{id:"20240604153647_initial_sqs",func:n4e},{id:"20250618162639_workspace_apps",func:i4e},{id:"20250729134531_workspace_cleanups",func:o4e}];var Brr=nr.fromDays(1).toSeconds();async function L7(e){return F.doWithDB(e,t=>t.get("_design/migrations"),{skip_setup:!0})}o(L7,"getFromDB");var Jk=o(e=>`appmigrations_${L.VERSION}_${e}`,"getWorkspaceMigrationCacheKey");async function k7(e){let t=Jk(e),r=await Be.get(t);if(r)return r;try{r=(await L7(e)).version||""}catch(n){if(n.status!==404)throw n;r=""}return r&&await Be.store(t,r,Brr),r}o(k7,"getWorkspaceMigrationVerions");async function s4e({workspaceId:e,version:t,skipHistory:r}){let n=F.getDB(e),i;try{i=await L7(e)}catch(u){if(u.status!==404)throw u;i={_id:"_design/migrations",version:"",initialVersion:t,history:{}},await n.put(i),i=await L7(e)}let s={...i,version:t};r||(s.history[t]={runAt:new Date().toISOString()}),await n.put(s);let a=Jk(e);await Be.destroy(a)}o(s4e,"updateWorkspaceMigrationMetadata");async function M7(e,t){if(ie.isTest()&&ie.SKIP_MIGRATION_LOCKS_IN_TESTS)return console.log("Bypassing lock for in test environment"),t();console.log(`Acquiring app migration lock for "${e}"`);let r=F.getProdWorkspaceID(e),{result:n}=await Oi.doWithLock({name:"app_migrations",type:"auto_extend",resource:r},async()=>(console.log(`Migration lock acquired for app "${r}"`),await t()));return n}o(M7,"doInMigrationLock");var avn=new RegExp(["appPackage"].join("|"));async function a4e(e,t){let r=await k7(e),n=t.findIndex(i=>i.id===r);return t.slice(n+1)}o(a4e,"getPendingMigrationsForWorkspace");function jrr(e){return Object.values(e).flatMap(t=>t).map(t=>t.id)}o(jrr,"getAllPendingMigrationIds");function Wrr(e,t){return e.filter(r=>t.includes(r.id))}o(Wrr,"getUniquePendingMigrations");async function u4e({migrationId:e,migrationFunc:t,workspaceId:r}){await Xk.default.trace("runMigrationForApp",async n=>{n.addTags({appId:r,migrationId:e}),await C.doInWorkspaceMigrationContext(r,async()=>{console.log(`Running migration "${e}" for app "${r}"`),await t(),console.log(`Migration "${e}" ran for app "${r}"`)})})}o(u4e,"runMigrationForApp");async function Grr(e){await Xk.default.trace("runMigrationForApp",async t=>{t.addTags({appId:e}),await C.doInWorkspaceMigrationContext(e,async()=>{await P.workspaces.syncWorkspace(e),console.log(`Workspace synchronized for dev "${e}"`)})})}o(Grr,"syncDevApp");async function c4e(e,t){await C.doInWorkspaceMigrationContext(e,()=>s4e({workspaceId:e,version:t}))}o(c4e,"updateMigrationVersion");async function U7(e,t=N7){console.log(`Processing workspace migration for "${e}"`),await Xk.default.trace("runMigrationForApp",async r=>{r.addTags({appId:e});try{await C.doInWorkspaceContext(e,()=>M7(e,async()=>{let n=F.getDevWorkspaceID(e),i=F.getProdWorkspaceID(e),s=await P.workspaces.isWorkspacePublished(i),a=s?i:n;console.log(`Starting workspace migration for "${a}"`);let u={[n]:await a4e(n,t),[i]:s?await a4e(i,t):[]};function c(p,h){return u[h].some(m=>m.id===p)}o(c,"needsToRun");let l=jrr(u),f=Wrr(t,l);r.addTags({migrationsToRun:f.length}),console.log(`Workspace migrations to run for "${a}" - ${f.map(p=>p.id).join(",")}`);let d=0;for(let{id:p,func:h,disabled:m}of f){if(m){console.log(`Migration ${p} is disabled, stopping migration process`);return}let g=`(${++d}/${f.length})`;console.info(`Running migration ${p}... ${g}`,{migrationId:p,workspaceId:a});let y=c(p,a),b=s&&c(p,n);y&&await u4e({migrationId:p,migrationFunc:h,workspaceId:a}),b&&(await Grr(n),await u4e({migrationId:p,migrationFunc:h,workspaceId:n})),y&&await c4e(a,p),b&&await c4e(n,p)}console.log(`Workspace migration for "${a}" processed`)}))}catch(n){throw ke.logAlert("Failed to run workspace migration",n),n}})}o(U7,"processMigrations");var l4e=3;var Svn=new Vn.BudibaseQueue(Vn.JobQueue.APP_MIGRATION,{jobOptions:{attempts:l4e,removeOnComplete:!0,removeOnFail:!0},maxStalledCount:l4e,removeStalledCb:async e=>{ke.logAlert(`App migration failed, queue job ID: ${e.id} - reason: ${e.failedReason}`)}});var vb=new Vn.BudibaseQueue(Vn.JobQueue.AUTOMATION,{removeStalledCb:e=>F7(e),jobTags:e=>({"automation.id":e.automation._id,"automation.name":e.automation.name,"automation.appId":e.automation.appId,"automation.createdAt":e.automation.createdAt,"automation.trigger":e.automation.definition.trigger.stepId})});var enr=U(require("dd-trace"));var d4e=(r=>(r.API="api",r.AUTOMATIONS="automations",r))(d4e||{});function Qrr(e,t){let r;t?r=t.split(","):r=e;for(let n of r)if(!e.includes(n))throw new Error(`Feature: ${n} is not an allowed option`);return r}o(Qrr,"processFeatureEnvVar");var Krr=Qrr(Object.values(d4e),ie.APP_FEATURES);function p4e(){return Krr.includes("automations")}o(p4e,"automationsEnabled");var B7=U(require("worker-farm"));function h4e(e){let t=null;switch(e){case"query":t="./query";break;case"automation":t="./automation";break;default:throw"Unknown thread type"}return require.resolve(t)}o(h4e,"typeToFile");var Ab=class e{static{o(this,"Thread")}static{this.workerRefs=[]}constructor(t,r={timeoutMs:null,count:1}){if(this.type=t,this.count=r.count?r.count:1,this.disableThreading=this.shouldDisableThreading(),this.disableThreading)console.log(`[${ie.FORKED_PROCESS_NAME}] skipping worker farm type=${t}`);else{console.log(`[${ie.FORKED_PROCESS_NAME}] initialising worker farm type=${t}`);let n={autoStart:!0,maxConcurrentWorkers:this.count,workerOptions:{env:{...process.env,FORKED_PROCESS:"1",FORKED_PROCESS_NAME:t},execArgv:process.execArgv.some(i=>i.startsWith("--enable-source-maps"))?["--enable-source-maps"]:void 0}};r.timeoutMs&&(this.timeoutMs=r.timeoutMs,n.maxCallTime=r.timeoutMs),this.workers=(0,B7.default)(n,h4e(t),["execute"]),e.workerRefs.push(this.workers)}}shouldDisableThreading(){return!!(ie.isTest()||ie.DISABLE_THREADING||this.count===0||ie.isInThread())}run(t){let r=this.timeoutMs;return new Promise((n,i)=>{function s(a){a.execute(t,(u,c)=>{u&&u.type==="TimeoutError"?i(new Error(`Thread timeout exceeded ${r}ms timeout.`)):u?i(u):n(c)})}o(s,"fire"),this.disableThreading?import(h4e(this.type)).then(a=>{s(a)}):s(this.workers)})}static stopThreads(){return new Promise(t=>{e.workerRefs.length===0&&t();let r=0;function n(){r++,r>=e.workerRefs.length&&t()}o(n,"complete");for(let i of e.workerRefs)B7.default.end(i,n);e.workerRefs=[]})}static async shutdown(){await e.stopThreads(),console.log("Threads shutdown")}};var zrr=require("mailparser"),Yrr=require("html-to-text");var Jrr=require("imapflow");var q7=o(async e=>{let t=C.getWorkspaceDB(),r=ik("automationEmailState",`${e}:`),n=`${r}${OGe}`,i=await t.allDocs({startkey:r,endkey:n,include_docs:!1});if(!i.rows.length)return;let s=i.rows.map(a=>{let u=a.value?._rev;if(u)return{_id:a.id,_rev:u,_deleted:!0}}).filter(a=>!!a);s.length&&await t.bulkDocs(s)},"deleteAutomationMailboxState");var tnr=require("lodash");var rnr;p4e()&&(rnr=new Ab("automation"));async function g4e(e){let t=await vb.getBullQueue().getRepeatableJobs();for(let r of t)r.id===e&&await vb.getBullQueue().removeRepeatableByKey(r.key);console.log(`jobId=${e} disabled`)}o(g4e,"disableCronById");var sRn=Ve.triggers.definitions,y4e={removeOnComplete:!0,removeOnFail:!0};async function inr(){return(await C.getWorkspaceDB().allDocs(Mc(null,{include_docs:!0}))).rows.map(r=>r.doc)}o(inr,"getAllAutomations");async function onr(e,t){let r=e.row.tableId;if(e.appId==null)throw`No appId specified for ${t} - check event emitters.`;!r||!await P7(r)||await C.doInWorkspaceContext(e.appId,async()=>{let n=await inr();n=n.filter(i=>{let s=i.definition.trigger,a=s?.inputs;return s&&s.event===t&&!i.disabled&&a?.tableId===e.row.tableId});for(let i of n){if(!ie.ALLOW_DEV_AUTOMATIONS&&gY(e.appId)&&!await xY(i._id))continue;if(await b4e(i,{row:e.row,oldRow:e.oldRow}))try{await vb.add({automation:i,event:e},y4e)}catch(a){ke.logAlert("Failed to queue automation",a)}}})}o(onr,"queueRelevantRowAutomations");async function j7(e,t){try{await onr(e,t)}catch(r){ke.logWarn("Unable to process row event",r)}}o(j7,"queueRowAutomations");Dh.on("row:save",async function(e){!e||!e.row||!e.row.tableId||await j7(e,"row:save")});Dh.on("row:update",async function(e){!e||!e.row||!e.row.tableId||await j7(e,"row:update")});Dh.on("row:delete",async function(e){!e||!e.row||!e.row.tableId||await j7(e,"row:delete")});function snr(e,t){return Tt.runQuery([e],t).length>0}o(snr,"rowPassesFilters");function Zk(e){return e!==null&&"steps"in e&&Array.isArray(e.steps)}o(Zk,"isAutomationResults");async function jc(e,t,{getResponses:r,onProgress:n}={}){if(e.disabled)throw new Error("Automation is disabled");if(cn.automations.isAppAction(e)&&!await xY(e._id)){t.fields==null&&(t.fields={});let a={},u=e.definition.trigger.inputs||{},c="fields"in u?u.fields:{};for(let l of Object.keys(c||{}))a[l]=Oh(t.fields[l],c[l]);t.fields=a}else(cn.automations.isRowAction(e)||cn.automations.isWebhookAction(e))&&(t={...t,...t.fields,fields:{}});let i={automation:e,event:t};return await b4e(e,{row:i.event?.row??{},oldRow:i.event?.oldRow??{}})?r?(i.event={...i.event,appId:C.getWorkspaceId(),automation:e},W7({data:i},{onProgress:n})):vb.add(i,y4e):{outputs:{success:!1,status:"stopped"},message:"Automation did not run. Filter conditions in trigger were not met."}}o(jc,"externalTrigger");async function b4e(e,t){let r=e.definition.trigger,n=r.inputs,i=n?.filters,s=n?.tableId;if(!i)return!0;if(r.stepId===Ve.triggers.definitions.ROW_UPDATED.stepId||r.stepId===Ve.triggers.definitions.ROW_SAVED.stepId){let a=await Rb(s,t.row);return snr(a,i)}return!0}o(b4e,"checkTriggerFilters");var anr=[{name:"list_automations",sourceType:"BUDIBASE",sourceLabel:"Budibase",description:"List all automations in the current app",tool:(0,tM.tool)({description:"List all automations in the current app",inputSchema:Wf.z.object({}),execute:async()=>({automations:await P.automations.fetch()})})},{name:"get_automation",sourceType:"BUDIBASE",sourceLabel:"Budibase",description:"Get details about a specific automation by ID",tool:(0,tM.tool)({description:"Get details about a specific automation by ID",inputSchema:Wf.z.object({automationId:Wf.z.string().describe("The ID of the automation to retrieve")}),execute:async e=>{let{automationId:t}=e;return{automation:await P.automations.get(t)}}})},{name:"trigger_automation",sourceType:"BUDIBASE",sourceLabel:"Budibase",description:"Trigger an automation and wait for its completion. Returns all step outputs. Only works for APP trigger type automations. IMPORTANT: You must use list_automations first to get the exact _id of the automation you want to trigger.",tool:(0,tM.tool)({description:"Trigger an automation and wait for its completion. Returns all step outputs. Only works for APP trigger type automations. IMPORTANT: You must use list_automations first to get the exact _id of the automation you want to trigger.",inputSchema:Wf.z.object({automationId:Wf.z.string().describe("The exact _id of the automation to trigger (obtained from list_automations)"),fields:Wf.z.string().describe("Input fields/data to pass to the app action automation trigger as JSON object. Ensure the schema for the automation is known before triggering it."),timeout:Wf.z.number().nullish().describe("Timeout in seconds (optional)")}),execute:async e=>{let{automationId:t,fields:r,timeout:n}=e,i;try{i=JSON.parse(r)}catch(l){return{error:`Invalid JSON in fields parameter: ${l}`}}let a=await C.getWorkspaceDB().tryGet(t);if(!a)return{error:`Automation with ID ${t} not found`};let u=a.definition?.trigger?.stepId;if(u!=="APP")return{error:`Cannot trigger automation '${a.name}'. Only APP trigger type supported. This automation has: ${u}`};let c=await jc(a,{fields:i||{},timeout:n?n*1e3:ie.AUTOMATION_THREAD_TIMEOUT},{getResponses:!0});return Zk(c)?{success:c.status==="success",status:c.status,steps:c.steps}:{success:!1,error:c.message||"Automation did not trigger"}}})}],_4e=anr;var G7=require("ai"),bA=require("zod");var unr=[{name:"list_tables",sourceType:"BUDIBASE",sourceLabel:"Budibase",description:"List all tables in the current app",tool:(0,G7.tool)({description:"List all tables in the current app",inputSchema:bA.z.object({showSchema:bA.z.boolean().describe("Whether to show the schema of the tables. This can be extemely large. Default to false to save on tokens.").default(!1)}),execute:async e=>{let{showSchema:t}=e,r=await P.tables.getAllTables();return t?{tables:r}:{tables:r.map(n=>({id:n._id,tableName:n.name}))}}})},{name:"get_table",sourceType:"BUDIBASE",sourceLabel:"Budibase",description:"Get details about a specific table by ID",tool:(0,G7.tool)({description:"Get details about a specific table by ID",inputSchema:bA.z.object({tableId:bA.z.string().describe("The ID of the table to retrieve")}),execute:async e=>{let{tableId:t}=e;return{table:await P.tables.getTable(t)}}})}],w4e=unr;var Ob=require("ai"),Ft=require("zod");var cnr={list_rows:{sourceType:"BUDIBASE",sourceLabel:"Budibase",description:"List rows in a given table",tool:(0,Ob.tool)({description:"List rows in a given table",inputSchema:Ft.z.object({tableId:Ft.z.string().describe("The ID of the table to list rows from"),limit:Ft.z.number().nullish().describe("Maximum number of rows to return"),startKey:Ft.z.string().nullish().describe("Start key for pagination")}),execute:async e=>{let{tableId:t}=e;return{rows:await P.rows.fetch(t)}}})},get_row:{sourceType:"BUDIBASE",sourceLabel:"Budibase",description:"Get a specific row by ID",tool:(0,Ob.tool)({description:"Get a specific row by ID",inputSchema:Ft.z.object({tableId:Ft.z.string().describe("The ID of the table"),rowId:Ft.z.string().describe("The ID of the row to retrieve")}),execute:async e=>{let{tableId:t,rowId:r}=e;return{row:await P.rows.find(t,r)}}})},create_row:{sourceType:"BUDIBASE",sourceLabel:"Budibase",description:"Create a new row. Only include fields that match the table schema. CRITICAL: Use plain text values only. Do NOT include HTML tags, markdown formatting, or content containing quotes, backslashes, or special characters - these break JSON parsing. Summarize or strip complex content. Max 500 characters per field.",tool:(0,Ob.tool)({description:"Create a new row. Only include fields that match the table schema. CRITICAL: Use plain text values only. Do NOT include HTML tags, markdown formatting, or content containing quotes, backslashes, or special characters - these break JSON parsing. Summarize or strip complex content. Max 500 characters per field.",inputSchema:Ft.z.object({tableId:Ft.z.string().describe("The ID of the table to create the row in"),data:Ft.z.record(Ft.z.string(),Ft.z.any()).describe('Row data as a JSON object. Example: {"name": "John", "age": 30}. Do NOT nest this inside a string; pass the object directly. Values must be plain text - no HTML, markdown, or special characters.')}),execute:async e=>{let{tableId:t,data:r}=e;return{row:await P.rows.save(t,r,void 0)}}})},update_row:{sourceType:"BUDIBASE",sourceLabel:"Budibase",description:"Update an existing row. CRITICAL: Use plain text values only. Do NOT include HTML tags, markdown formatting, or content containing quotes, backslashes, or special characters - these break JSON parsing. Summarize or strip complex content. Max 500 characters per field.",tool:(0,Ob.tool)({description:"Update an existing row. CRITICAL: Use plain text values only. Do NOT include HTML tags, markdown formatting, or content containing quotes, backslashes, or special characters - these break JSON parsing. Summarize or strip complex content. Max 500 characters per field.",inputSchema:Ft.z.object({tableId:Ft.z.string().describe("The ID of the table"),rowId:Ft.z.string().describe("The ID of the row to update"),rowRev:Ft.z.string().describe("The current _rev of the row (if known)"),data:Ft.z.record(Ft.z.string(),Ft.z.any()).describe('The updated data as a JSON object. Example: {"name": "Jane"}. Do NOT nest this inside a string; pass the object directly. Values must be plain text - no HTML, markdown, or special characters.')}),execute:async e=>{let{tableId:t,rowId:r,rowRev:n,data:i}=e,a={...await P.rows.find(t,r),...i,_id:r,_rev:n},{row:u}=await P.rows.save(t,a,void 0);return{row:u}}})},search_rows:{sourceType:"BUDIBASE",sourceLabel:"Budibase",description:"Search for rows in a table based on criteria. IMPORTANT: You can ONLY filter on fields that exist in the table schema. Use get_table or list_tables first to see available field names. Searching on non-existent fields will fail.",tool:(0,Ob.tool)({description:"Search for rows in a table based on criteria. IMPORTANT: You can ONLY filter on fields that exist in the table schema. Use get_table or list_tables first to see available field names. Searching on non-existent fields will fail.",inputSchema:Ft.z.object({tableId:Ft.z.string().describe("The ID of the table to search"),query:Ft.z.record(Ft.z.string(),Ft.z.any()).nullish().describe('Query filters object. Structure: { operator: { fieldName: value } }. CRITICAL: fieldName must match an existing column in the table schema exactly (case-sensitive). Valid operators: "equal", "notEqual", "empty", "notEmpty", "fuzzy", "string", "contains", "notContains", "containsAny", "oneOf", "range". Examples: Find where status equals "active": {"equal": {"status": "active"}}. Find where name is not empty: {"notEmpty": {"name": true}}. Find where price is within the range of 10 to 100: {"range": {"price": {"low": 10, "high": 100}}}.'),sort:Ft.z.object({column:Ft.z.string().describe("Column to sort by"),order:Ft.z.enum(["ascending","descending"]).describe("Sort order")}).nullish().describe("Sort configuration"),limit:Ft.z.number().nullish().describe("Maximum number of results")}),execute:async e=>{let{tableId:t,query:r,sort:n,limit:i}=e,s={tableId:t,query:r||{},limit:i??void 0};return n&&(s.sort=n.column,s.sortOrder=n.order==="ascending"?"ascending":"descending"),{rows:(await P.rows.search(s)).rows}}})}},E4e=cnr;var lnr=[..._4e,...w4e,...Object.entries(E4e).map(([e,t])=>({name:e,...t}))],$7=lnr;var Y4e=require("ai"),s9=require("zod");var i9=require("lodash"),eir=require("mongodb");function S4e(){let e={replication:!0,find:!0};ie.isTest()&&!ie.COUCH_DB_URL&&(e.inMemory=!0,e.allDbs=!0),bMe({db:e})}o(S4e,"init");var O4e=require("serialize-error");var I4e=U(require("dd-trace"));var V7=U(require("isolated-vm")),A4e=U(require("bson")),rM=U(require("url")),_A=U(require("crypto")),R4e=U(require("querystring"));var v4e=U(require("fs"));var dnr={helpers:"./index-helpers.ivm.bundle.js",bson:"./bson.ivm.bundle.js",snippets:"./snippets.ivm.bundle.js",buffer:"./buffer.ivm.bundle.js",bson_polyfills:"./bson-polyfills.ivm.bundle.js"},T4e={};function Ib(e){let t=T4e[e];return t||(t=v4e.default.readFileSync(require.resolve(dnr[e]),"utf-8"),T4e[e]=t,t)}o(Ib,"loadBundle");var H7=class e extends Error{constructor(){super(...arguments);this.code=e.code}static{o(this,"JsRequestTimeoutError")}static{this.code="JS_REQUEST_TIMEOUT_ERROR"}},Cb=class{constructor({memoryLimit:t,invocationTimeout:r,isolateAccumulatedTimeout:n}={}){this.codeWrapper=t=>t;this.resultKey="results";this.isolate=new V7.default.Isolate({memoryLimit:t||ie.JS_RUNNER_MEMORY_LIMIT}),this.vm=this.isolate.createContextSync(),this.jail=this.vm.global,this.jail.setSync("global",this.jail.derefInto()),this.runResultKey=_A.default.randomUUID(),this.runErrorKey=_A.default.randomUUID(),this.addToContext({[this.resultKey]:{[this.runResultKey]:""}}),this.invocationTimeout=r||ie.JS_PER_INVOCATION_TIMEOUT_MS,this.isolateAccumulatedTimeout=n}static{o(this,"IsolatedVM")}withHelpers(){let t=this.registerCallbacks({resolve:rM.default.resolve,parse:rM.default.parse}),r=this.registerCallbacks({escape:R4e.default.escape}),n=this.registerCallbacks({randomUUID:_A.default.randomUUID});this.addToContext({helpersStripProtocol:u=>{let c=rM.default.parse(u);return c.protocol="",c.format()}});let i=`require=function req(val) {
|
|
1014
1014
|
switch (val) {
|
|
1015
1015
|
case "url": return ${t};
|
|
1016
1016
|
case "querystring": return ${r};
|
|
@@ -1035,7 +1035,7 @@ Example: return $("Score") + $("Weight")
|
|
|
1035
1035
|
} catch (e) {
|
|
1036
1036
|
results['${this.runErrorKey}']=e
|
|
1037
1037
|
}
|
|
1038
|
-
`;let r=this.isolate.compileScriptSync(t);r.runSync(this.vm,{timeout:this.invocationTimeout,release:!1}),new Promise(()=>{r.release()});let n=this.getFromContext(this.resultKey);if(n[this.runErrorKey])throw new pa(n[this.runErrorKey]);return n[this.runResultKey]}close(){this.vm.release(),this.isolate.dispose()}registerCallbacks(t){let r=_A.default.randomUUID().replace(/-/g,""),n={};for(let[s,a]of Object.entries(t)){let u=`f${r}${s}cb`;n[s]=u,this.addToContext({[u]:(...c)=>a(...c)})}return"{"+Object.entries(n).map(([s,a])=>`${s}: ${a}`).join()+"}"}addToContext(t){for(let r in t){let n=t[r];this.jail.setSync(r,typeof n=="function"?n:new V7.default.ExternalCopy(n).copyInto({release:!0}))}}removeFromContext(t){for(let r of t)this.jail.deleteSync(r)}getFromContext(t){let r=this.vm.global.getSync(t,{reference:!0}),n=r.copySync();return new Promise(()=>{r.release()}),n}};function C4e(){ie.isTest()&&Qz(),Ov((e,t)=>I4e.default.trace("runJS",{},()=>{try{let r=C.getCurrentContext(),n=r?.vm||new Cb({memoryLimit:ie.JS_RUNNER_MEMORY_LIMIT,invocationTimeout:ie.JS_PER_INVOCATION_TIMEOUT_MS,isolateAccumulatedTimeout:ie.JS_PER_REQUEST_TIMEOUT_MS}).withHelpers().withBuffer().withSnippets(r?.snippets);r&&!r.vm&&(r.vm=n,r.cleanup=r.cleanup||[],r.cleanup.push(()=>n.close()));let{helpers:i,snippets:s,...a}=t;return n.withContext(a,()=>n.execute(e))}catch(r){throw r.message==="Script execution timed out."?new xf:r}})),ie.LOG_JS_ERRORS&&Jz(e=>{ke.logWarn(`Error while executing js: ${JSON.stringify((0,O4e.serializeError)(e))}`)})}o(C4e,"init");var hnr=3600,wA=null;async function Q7(){return wA||(wA=await Za.Client.init(Za.utils.Databases.QUERY_VARS)),wA}o(Q7,"getClient");process.on("exit",async()=>{wA&&await wA.finish()});function K7(e,t){return`${e}${F.SEPARATOR}${t}`}o(K7,"makeVariableKey");function mnr(){if(ie.isTest()||ie.DISABLE_THREADING||!ie.isInThread()){console.debug(`[${ie.FORKED_PROCESS_NAME}] thread setup skipped`);return}console.debug(`[${ie.FORKED_PROCESS_NAME}] thread setup running`),C4e(),S4e()}o(mnr,"threadSetup");async function gnr(e,t){return(await Q7()).get(K7(e,t))}o(gnr,"getCachedVariable");async function z7(e){let t=await Q7();await Promise.all(e.map(r=>t.delete(K7(r.queryId,r.name))))}o(z7,"invalidateCachedVariable");async function ynr(e,t,r){await(await Q7()).store(K7(e,t),r,hnr)}o(ynr,"storeDynamicVariable");function bnr(e){if(typeof e=="string")try{e=JSON.parse(e)}catch{e={response:e}}return e}o(bnr,"formatResponse");function _nr(e){return typeof e=="object"&&!Array.isArray(e)&&e&&e.data!=null&&e.info!=null}o(_nr,"hasExtraData");var x4e={hasExtraData:_nr,formatResponse:bnr,storeDynamicVariable:ynr,invalidateCachedVariable:z7,getCachedVariable:gnr,threadSetup:mnr};var wnr=require("lodash");var ki=U(require("joi"));var nM=ki.default.string().optional().allow(null).allow("");function Enr(){return{_id:nM,_rev:nM,fields:ki.default.object().required(),datasourceId:ki.default.string().required(),readable:ki.default.boolean(),parameters:ki.default.array().items(ki.default.object({name:ki.default.string(),default:ki.default.string().allow("")})),queryVerb:ki.default.string().required(),extra:ki.default.object().optional(),schema:ki.default.object({}).required().unknown(!0),transformer:nM,flags:ki.default.object().optional(),queryId:nM}}o(Enr,"baseQueryValidation");function D4e(){return ki.default.object({...Enr(),name:ki.default.string().required()}).unknown(!0)}o(D4e,"queryValidation");var r9="__BUDIBASE_BINDING__",Snr=new RegExp(`"${r9}(string|integer|number|boolean)__([A-Za-z0-9_]+)__"`,"g"),Tnr=new RegExp(`${r9}(string|integer|number|boolean)__([A-Za-z0-9_]+)__`),P4e=o(e=>e.replace(/[^A-Za-z0-9_]/g,"_"),"sanitizeSegment"),vnr=o(e=>!e||typeof e!="object"?!1:"$ref"in e,"isReferenceObject"),L4e=o(e=>{if(!(!e||vnr(e)))return e},"toSchemaObject"),Anr=o(e=>{let t=e.slice(1).map(n=>P4e(n)).filter(n=>n&&n!=="item");if(t.length===0){let n=e[e.length-1]??"value";t.push(P4e(n)||"value")}let r=t.join("_")||"value";return/^[0-9]/.test(r)?`_${r}`:r},"buildBindingName"),Rnr=o((e,t)=>({toJSON(){return`${r9}${t}__${e}__`}}),"createBindingPlaceholder"),xb=o(e=>{switch(e){case"boolean":return"false";case"integer":case"number":return"0";default:return""}},"defaultValueForType"),Gf=o(e=>{let t=L4e(e);if(t){if(Array.isArray(t.allOf)&&t.allOf.length>0){let r=t.allOf.reduce((n,i)=>{let s=Gf(i);if(!s)return n;if(!n)return{...s};let a={...n},u={...iM(n),...iM(s)};Object.keys(u).length>0&&(a.properties=u);let c=n.required??[],l=s.required??[],f=new Set([...c,...l]);return f.size>0&&(a.required=Array.from(f)),!a.type&&s.type&&(a.type=s.type),a.items===void 0&&s.items!==void 0&&(a.items=s.items),a},void 0);if(r)return r}if(Array.isArray(t.oneOf)){let[r]=t.oneOf;if(r)return Gf(r)}if(Array.isArray(t.anyOf)){let[r]=t.anyOf;if(r)return Gf(r)}return t}},"pickSchema"),Y7=o(e=>{if(!e)return;let{type:t}=e;if(Array.isArray(t))return t[0];if(!t){if(Object.keys(iM(e)).length>0)return"object";if(k4e(e))return"array"}return typeof t=="string"?t:void 0},"getSchemaType"),Onr=o(e=>e?.required?Array.isArray(e.required)?[...e.required]:[]:[],"getRequiredProperties"),iM=o(e=>{if(!e?.properties)return{};let t=Object.entries(e.properties),r={};for(let[n,i]of t){let s=L4e(i);s&&(r[n]=s)}return r},"getProperties"),k4e=o(e=>{if(!e)return;let t=e.items;if(t){if(Array.isArray(t)){let r=t;for(let n of r){let i=Gf(n);if(i)return i}return}return Gf(t)}},"getItemsSchema"),EA=o(e=>e==="integer"||e==="number"||e==="boolean"?e:"string","normalisePrimitiveType"),J7=o((e,t)=>{if(e){if(e.example!==void 0&&e.example!==null)return String(e.example);if(e.default!==void 0&&e.default!==null)return String(e.default);let r=e.enum;if(Array.isArray(r)&&r.length>0){let[n]=r;if(n!=null)return String(n)}}return xb(t)},"getPrimitiveDefaultFromSchema"),oM=o((e,t)=>{for(let[r,n]of Object.entries(t))r in e||(e[r]=n)},"mergeBindings"),_a=o((e,t,r)=>{let n=Anr(e);return{value:Rnr(n,t),bindings:{[n]:r}}},"createPrimitiveBindingResult"),X7=o((e,t,r,n,i)=>{let{totalLimit:s=12}=i,a=Gf(e);if(!a){let f=EA(void 0);return _a(t,f,xb(f))}if(n.has(a)){let f=EA(Y7(a));return _a(t,f,J7(a,f))}if(r>5){let f=EA(Y7(a));return _a(t,f,J7(a,f))}n.add(a);let u=Y7(a);if(u==="object"){let f=iM(a),d=Object.keys(f);if(d.length===0)return n.delete(a),{value:{},bindings:{}};let p=Onr(a).filter(E=>d.includes(E)),h=d.filter(E=>!p.includes(E)),m=[];if(h.length>0){let E=Math.max(s-p.length,0);E>0&&(m=h.slice(0,E))}let g=[...p,...m],y=new Set(g);g=Array.from(y),g.length===0&&(g=d.slice(0,1));let b={},w={};for(let E of g){let S=Gf(f[E]),T=X7(S,[...t,E],r+1,n,i);if(T.value===void 0){let R=_a([...t,E],"string",xb("string"));b[E]=R.value,oM(w,R.bindings)}else b[E]=T.value,oM(w,T.bindings)}return n.delete(a),{value:b,bindings:w}}if(u==="array"){let f=k4e(a),d=X7(f,[...t,"item"],r+1,n,i),p=d.value===void 0?[]:[d.value];return n.delete(a),{value:p,bindings:d.bindings}}let c=EA(u),l=_a(t,c,J7(a,c));return n.delete(a),l},"buildFromSchema"),Z7=o((e,t,r,n)=>{if(r>5)return _a(t,"string",xb("string"));if(e==null||typeof e=="bigint"||typeof e=="symbol"||typeof e=="function")return{value:e,bindings:{}};if(typeof e=="string")return _a(t,"string",e);if(typeof e=="number")return _a(t,"number",String(e));if(typeof e=="boolean")return _a(t,"boolean",e?"true":"false");if(typeof e!="object")return{value:e,bindings:{}};let i=e;if(n.has(i))return _a(t,"string",xb("string"));if(n.add(i),Array.isArray(e)){if(e.length===0)return n.delete(i),{value:[],bindings:{}};let c=Z7(e[0],[...t,"item"],r+1,n);return n.delete(i),{value:c.value===void 0?[]:[c.value],bindings:c.bindings}}let s={},a={},u=e;for(let[c,l]of Object.entries(u)){let f=Z7(l,[...t,c],r+1,n);f.value!==void 0?s[c]=f.value:s[c]=l,oM(a,f.bindings)}return n.delete(i),{value:s,bindings:a}},"buildFromExample"),sM=o((e,t="body",r={})=>{let n=Gf(e);if(!n)return;let i=new Set,s={totalLimit:r.totalLimit??12},a=X7(n,[t],0,i,s);if(a.value!==void 0)return{body:a.value,bindings:a.bindings}},"generateRequestBodyFromSchema"),SA=o((e,t="body")=>{if(e===void 0)return;let n=Z7(e,[t],0,new WeakSet);if(n.value!==void 0)return{body:n.value,bindings:n.bindings}},"generateRequestBodyFromExample"),M4e=o(e=>{if(e===void 0)return;if(typeof e=="string")return e;let t=JSON.stringify(e,null,2);if(typeof t=="string")return t.replace(Snr,(r,n,i)=>{let s=`{{ ${i} }}`;return n==="string"?`"${s}"`:s})},"serialiseRequestBody"),e9=o(e=>{if(e==null)return e;if(Array.isArray(e))return e.map(t=>e9(t));if(typeof e=="object"){let t=U4e(e);return t?`{{ ${t} }}`:Object.entries(e).reduce((r,[n,i])=>(r[n]=e9(i),r),{})}return e},"cloneSerializableRequestBody"),aM=o(e=>{if(e!==void 0)return e9(e)},"buildSerializableRequestBody"),U4e=o(e=>{if(!e||typeof e!="object")return;let t=e;if(typeof t.toJSON!="function")return;let r=t.toJSON();if(typeof r!="string")return;let n=r.match(Tnr);if(n)return n[2]},"extractBindingFromPlaceholder"),N4e=o(e=>{if(e.length===0)return"";let[t,...r]=e,n=t;for(let i of r){if(i==="item"){n+="[]";continue}n+=`[${i}]`}return n},"buildFormKey"),t9=o((e,t,r)=>{if(e==null)return;if(Array.isArray(e)){e.forEach(s=>t9(s,[...t,"item"],r));return}let n=U4e(e);if(n){let s=N4e(t);s&&(r[s]=`{{ ${n} }}`);return}if(typeof e=="object"){for(let[s,a]of Object.entries(e))t9(a,[...t,s],r);return}let i=N4e(t);i&&(r[i]=String(e))},"collectKeyValuePairs"),Db=o(e=>{if(!e||typeof e!="object")return;let t={};for(let[r,n]of Object.entries(e))t9(n,[r],t);if(Object.keys(t).length!==0)return t},"buildKeyValueRequestBody"),Inr=o(e=>e.type?e:{...e,type:"string"},"toFormDataParameter"),F4e=o(e=>{if(!Array.isArray(e)||e.length===0)return;let t={},r={};for(let n of e){let i=Inr(n);if(!i?.name)continue;let s=EA(i.type),a=i.default?String(i.default):xb(s),{value:u,bindings:c}=_a(["form",i.name],s,a);t[i.name]=u,oM(r,c)}if(Object.keys(t).length!==0)return{body:t,bindings:r}},"buildRequestBodyFromFormDataParameters");var n9=(s=>(s.get="read",s.post="create",s.put="update",s.patch="patch",s.delete="delete",s))(n9||{}),Cnr=/[()]/g,xnr=o((e,t)=>{let r=e?.trim();return r&&kM.test(r)?r:(r||t).replace(Cnr,"").replace(/\s+/g," ").trim()||"Query"},"sanitizeQueryName"),Pb=class{constructor(){this.buildEndpointId=(t,r)=>`${this.normalizeMethod(t)||t.toLowerCase()}::${r}`;this.convertPathVariables=t=>t&&t.replace(/\{([^{}]+)\}/g,(r,n)=>{let i=n.trim(),s=i.match(/^[A-Za-z0-9._-]+/);return`{{${s?s[0]:i}}}`});this.normalizeMethod=t=>{if(t)return t.toLowerCase()};this.isSupportedMethod=t=>{let r=this.normalizeMethod(t);return r?Object.prototype.hasOwnProperty.call(n9,r):!1};this.methodHasRequestBody=t=>{let r=this.normalizeMethod(t);return r?["post","put","patch"].includes(r):!1};this.bodyTypeFromMimeType=t=>{if(!t)return"json";let r=t.split(";")[0].trim().toLowerCase();return r==="application/x-www-form-urlencoded"?"encoded":r==="multipart/form-data"?"form":r==="text/plain"||r.startsWith("text/")?"text":r==="application/xml"||r==="text/xml"||r.endsWith("+xml")?"xml":r.endsWith("+json")||r==="application/json"?"json":"json"};this.constructQuery=(t,r,n,i,s,a,u={},c=[],l=void 0,f={},d,p)=>{let m=this.verbFromMethod(n),g="return data",y={},b=`${n?.toUpperCase?.()||""} ${i}`.trim(),w=xnr(r,b);if(i=this.processPath(i),s)if(typeof s=="string"){let O=this.convertPathVariables(s);O.endsWith("/")&&(O=O.slice(0,-1)),i=i?`${O}/${i}`:O}else{let O=s.href;O.endsWith("/")&&(O=O.slice(0,-1)),i=i?`${O}/${i}`:O}a=this.processQuery(a);let E=[...c];for(let[O,I]of Object.entries(f))!O||E.find(x=>x.name===O)||E.push({name:O,default:I});let S,T,R=o(O=>O==="form"||O==="encoded","isKeyValueBodyType");R(d)?(S=Db(l),(!S||Object.keys(S).length===0)&&l&&(S=Object.keys(f).reduce((O,I)=>(O[I]=`{{ ${I} }}`,O),{})),T=d):(S=M4e(l),T=d||(S?"json":"none")),(!S||typeof S=="object"&&Object.keys(S).length===0)&&R(d)&&(S=void 0),S===void 0&&(T="none");let A={datasourceId:t,name:w,parameters:E,fields:{headers:u,queryString:a,path:i,requestBody:S,bodyType:T},transformer:g,schema:y,readable:!0,queryVerb:m};return p&&(A.restTemplateMetadata=p),A};this.verbFromMethod=t=>{let r=this.normalizeMethod(t);if(!r)throw new Error(`Unsupported method: ${t}`);return n9[r]};this.processPath=t=>(t?.startsWith("/")&&(t=t.substring(1)),t=this.convertPathVariables(t),t);this.processQuery=t=>t?.startsWith("?")?t.substring(1):t}static{o(this,"ImportSource")}buildDefaultBindings(t,r){let n={};for(let i of t)i?.name&&(n[i.name]=`${i.default??""}`);if(r)for(let[i,s]of Object.entries(r))i&&(n[i]=s);return Object.keys(n).length?n:void 0}getSecurityHeaders(){return[]}};var B4e=require("url");var Dnr=require("curlconverter"),Pnr=o(e=>{let t=Dnr.toJsonString(e);return JSON.parse(t)},"parseCurl"),Nnr=o(e=>{if(e.data){let t=Object.keys(e.data);if(t.length){let r=t[0];try{return r.startsWith("$")&&(r=r.substring(1)),JSON.parse(r)}catch{}}}},"parseBody"),Lnr=o(e=>e.cookies?Object.entries(e.cookies).reduce((t,r)=>{let[n,i]=r;return t+`${n}=${i}; `},""):null,"parseCookie"),TA=class extends Pb{constructor(){super(...arguments);this.tryLoad=async r=>{try{this.curl=Pnr(r)}catch{return!1}return!0};this.load=async r=>{if(!await this.tryLoad(r))throw new Error("Failed to load CURL document")};this.getUrl=()=>new B4e.URL(this.curl.raw_url);this.getInfo=()=>{let r=this.getUrl(),n=this.curl.method,i=r.pathname;return{name:r.hostname,url:r.origin,securityHeaders:this.getSecurityHeaders(),endpoints:[{id:this.buildEndpointId(n,i),name:i||r.hostname,method:n?.toUpperCase(),path:i,description:this.curl.description,queryVerb:this.verbFromMethod(n)}]}};this.getQueries=(r,n)=>{let i=this.getUrl(),s=i.pathname,a=i.origin+i.pathname,u=this.curl.method,c=i.search,l=this.curl.headers,f=Nnr(this.curl),d=n?.filterIds,p=this.buildEndpointId(u,i.pathname);if(d&&!d.has(p))return[];let h=Lnr(this.curl);return h&&(l.Cookie=h),[this.constructQuery(r,s,u,a,void 0,c,l,[],f)]}}static{o(this,"Curl")}getImportSource(){return"curl"}};var $4e=require("openapi-types");var uM=U(require("@apidevtools/swagger-parser")),q4e=require("js-yaml"),j4e=U(require("lodash/isObject"));var knr=o(e=>!!(0,j4e.default)(e),"isYamlDocument"),Mnr=o(e=>{let t=e.trim();if(!t)throw new Error("Empty OpenAPI document");try{let r=(0,q4e.load)(t,{json:!0});if(knr(r))return r}catch{}return e},"prepareDocument"),Nb=class extends Pb{constructor(){super(...arguments);this.parseData=async r=>{let n={resolve:{external:!1}},i=Mnr(r);return await uM.default.parse(i,n)};this.validate=async r=>{let n={resolve:{external:!1}};try{return await uM.default.validate(r)}catch{console.log("[OpenAPI Import] Schema validation failed, continuing without validation");try{return await uM.default.dereference(r,n)}catch{return console.log("[OpenAPI Import] Dereference failed, continuing with parsed document"),r}}}}static{o(this,"OpenAPISource")}};var V4e=require("url");var Unr=o(e=>{if(!e)return!1;let t=e.trim();return!(!t||t.length>60||/[{}]/.test(t))},"isSimpleOperationId"),W4e=o(e=>{if(!e)return;let t=e.trim();if(!t)return;let r=t.split(/\r?\n/).map(n=>n.trim()).find(n=>n.length>0);if(r)return r.length>80?`${r.slice(0,80-3).trim()}...`:r},"getShortText"),Fnr=o(e=>{let t=e.toLowerCase();return/^v\d+$/.test(t)||/^\d{4}-\d{2}(-\d{2})?$/.test(t)||/^\d+$/.test(t)},"isVersionSegment"),Bnr=o(e=>/^\{[^{}]+\}$/.test(e),"isPathParamSegment"),qnr=o(e=>e.replace(/([a-z0-9])([A-Z])/g,"$1 $2").replace(/[-_]/g," ").split(/\s+/).filter(Boolean).map(r=>`${r[0].toUpperCase()}${r.slice(1)}`).join(" "),"humanizeSegment"),jnr=o(e=>e.length?(e.length>2?e.slice(-2):e).map(qnr).join(" "):"","buildResourceName"),Wnr=o((e,t)=>{let r=e.trim(),n=t.split("/").filter(Boolean);n=n.filter(a=>!Fnr(a)&&!Bnr(a));let i=jnr(n),s=r?`${r[0].toUpperCase()}${r.slice(1).toLowerCase()}`:"Call";return i?`${s} ${i}`:s},"buildFallbackName"),cM=o((e,t,r)=>{if(Unr(e.operationId))return e.operationId?.trim()||r;let n=W4e(e.summary);if(n)return n;let i=W4e(e.description);return i||Wnr(t,r)},"buildEndpointName");var Gnr=o(e=>!0,"parameterNotRef"),G4e=o(e=>e.swagger==="2.0","isOpenAPI2"),$nr=Object.values($4e.OpenAPIV2.HttpMethods),Vnr=o((e,t)=>$nr.includes(e),"isOperation"),Hnr=o((e,t)=>!Vnr(e,t),"isParameter"),vA=class extends Nb{constructor(){super(...arguments);this.securityHeaders=new Map;this.getDocsUrl=r=>r.externalDocs?.url||this.document.externalDocs?.url||this.document.info?.termsOfService||this.document.info?.contact?.url;this.setSecurityHeaders=()=>{this.securityHeaders=new Map;let r=this.document.securityDefinitions;if(r)for(let n of Object.values(r)){let i=this.getSecuritySchemeHeader(n);i&&this.securityHeaders.set(i.toLowerCase(),i)}};this.buildRestTemplateMetadata=(r,n,i,s,a,u)=>{let c={originalName:n,operationId:r.operationId,docsUrl:this.getDocsUrl(r),description:r.summary||r.description,originalPath:i},l=aM(s?.body);l!==void 0&&u&&(u==="form"||u==="encoded")&&(l=Db(l)),l!==void 0&&(c.originalRequestBody=l);let f=this.buildDefaultBindings(a,s?.bindings);return f&&(c.defaultBindings=f),c};this.tryLoad=async r=>{try{let n=await this.parseData(r);return n=await this.validate(n),G4e(n)?(this.loadDocument(n),!0):!1}catch{return!1}};this.load=async r=>{let n=await this.parseData(r);if(G4e(n)){this.loadDocument(n);return}throw new Error("Failed to load OpenAPI 2 document")};this.loadDocument=r=>{this.document=r,this.setSecurityHeaders()};this.getUrl=()=>{let r=this.document.schemes?.includes("https")?"https":"http",n=this.document.basePath||"",i=this.document.host;if(!i)return;let s=n?n.startsWith("/")?n:`/${n}`:"";try{return new V4e.URL(`${r}://${i}${s}`)}catch{return}};this.getEndpoints=()=>{let r=this.getQueries(""),n=[];for(let i of r){let s=i.restTemplateMetadata;if(!s)continue;let a=s.originalPath||i.fields.path||"",u=tk[i.queryVerb];this.isSupportedMethod(u)&&n.push({id:this.buildEndpointId(u||"",a),name:i.name,method:u?.toUpperCase()||"",path:a,description:s.description,queryVerb:i.queryVerb,operationId:s.operationId,docsUrl:s.docsUrl,originalPath:s.originalPath,originalRequestBody:s.originalRequestBody,defaultBindings:s.defaultBindings,bodyType:i.fields.bodyType,headers:i.fields.headers&&Object.keys(i.fields.headers).length>0?i.fields.headers:void 0,queryString:i.fields.queryString||void 0})}return n};this.getInfo=()=>{let r=this.document.info.title||"Swagger Import",n=this.getUrl()?.href,i=n?this.convertPathVariables(n):void 0,s=this.document.externalDocs?.url||this.document.info?.termsOfService||this.document.info?.contact?.url;return{name:r,url:i,docsUrl:s,endpoints:this.getEndpoints(),securityHeaders:this.getSecurityHeaders()}};this.getQueries=(r,n)=>{let i=this.getUrl(),s=[],a=n?.filterIds;for(let[u,c]of Object.entries(this.document.paths)){let l=[];for(let[f,d]of Object.entries(c)){if(Hnr(f,d)){let W=d;l.push(...W);continue}let p=d,h=f;if(!this.isSupportedMethod(h))continue;let m=this.buildEndpointId(h,u);if(a&&!a.has(m))continue;let g=cM(p,h,u),y="",b={},w=o((W,N)=>{if(!W)return;let V=W.toLowerCase(),k=Object.keys(b).find(M=>M.toLowerCase()===V);b[k||W]=N},"setHeader"),E,S,T=[];p.consumes&&(E=p.consumes[0],w("Content-Type",E));let R=[],A=p.parameters||[],O=[...l,...A];for(let W of O)if(Gnr(W)){let N=!1;switch(W.in){case"query":{let V="";y&&(V="&"),y=`${y}${V}${W.name}={{${W.name}}}`;break}case"header":if(this.isSecurityHeader(W.name)){N=!0;break}w(W.name,`{{${W.name}}}`);break;case"path":break;case"formData":R.push({...W,in:"formData"});break;case"body":{let V=W,k=V.schema;if(k)if(k.example!==void 0)S=SA(k.example,V.name||"body");else{let M=sM(k,V.name||"body");M!==void 0&&(S=M)}break}}if(!N&&["query","header","path","formData"].includes(W.in)){let V=W.default!==void 0?String(W.default):"";T.push({name:W.name,default:V})}}if(!S&&R.length>0){let W=F4e(R);W&&(S=W,E||(E=R.some(N=>N.type==="file")?"multipart/form-data":"application/x-www-form-urlencoded"),E&&w("Content-Type",E))}let I=E?this.bodyTypeFromMimeType(E):void 0,D=this.buildRestTemplateMetadata(p,g,u,S,T,I),x=this.constructQuery(r,g,h,u,i,y,b,T,S?.body,S?.bindings??{},I,D);s.push(x)}}return s}}static{o(this,"OpenAPI2")}getSecuritySchemeHeader(r){if(r&&r.type==="apiKey"&&r.in==="header"&&r.name)return r.name}isSecurityHeader(r){return r?this.securityHeaders.has(r.toLowerCase()):!1}getSecurityHeaders(){return Array.from(new Set(this.securityHeaders.values()))}getImportSource(){return"openapi2.0"}};var Q4e=require("openapi-types");var Qnr=o(e=>e!=null&&typeof e=="object"&&Object.prototype.hasOwnProperty.call(e,"$ref"),"isReferenceObject"),H4e=o(e=>{if(!("openapi"in e))return!1;let{openapi:t}=e;return t.startsWith("3.")},"isOpenAPI3"),Knr=Object.values(Q4e.OpenAPIV3.HttpMethods),znr=o((e,t)=>Knr.includes(e),"isOperation"),AA=class extends Nb{constructor(){super(...arguments);this.serverVariableBindings={};this.securityHeaders=new Map;this.getDocsUrl=r=>r.externalDocs?.url||this.document.externalDocs?.url||this.document.info?.termsOfService||this.document.info?.contact?.url;this.buildRestTemplateMetadata=(r,n,i,s,a,u)=>{let c={originalName:n,operationId:r.operationId,docsUrl:this.getDocsUrl(r),description:r.description||r.summary,originalPath:i},l=aM(s?.body);l!==void 0&&u&&(u==="form"||u==="encoded")&&(l=Db(l)),l!==void 0&&(c.originalRequestBody=l);let f=this.buildDefaultBindings(a,s?.bindings);return f&&(c.defaultBindings=f),c};this.getPrimaryServer=()=>{if(this.document?.servers?.length)return this.document.servers[0]};this.shouldAddBaseUrlBinding=r=>{let n=r?.url;return n?n.trim().length===0:!0};this.setServerVariableBindings=r=>{this.serverVariableBindings={};let n=r?.variables||{};for(let[i,s]of Object.entries(n))this.serverVariableBindings[i]=s?.default||""};this.setSecurityHeaders=()=>{this.securityHeaders=new Map;let r=this.document.components?.securitySchemes;if(r)for(let n of Object.values(r)){let i=this.resolveMaybeRef(n),s=this.getSecuritySchemeHeader(i);s&&this.securityHeaders.set(s.toLowerCase(),s)}};this.tryLoad=async r=>{try{let n=await this.parseData(r);return n=await this.validate(n),H4e(n)?(this.loadDocument(n),!0):!1}catch{return!1}};this.load=async r=>{let n=await this.parseData(r);if(H4e(n)){this.loadDocument(n);return}throw new Error("Failed to load OpenAPI 3 document")};this.loadDocument=r=>{this.document=r,this.serverVariableBindings={},this.setSecurityHeaders()};this.getServerVariableBindings=()=>{let r=this.getPrimaryServer();Object.keys(this.serverVariableBindings).length||this.setServerVariableBindings(r);let n={...this.serverVariableBindings};return this.shouldAddBaseUrlBinding(r)&&(n.baseUrl=n.baseUrl??""),n};this.getEndpoints=()=>{let r=this.getQueries(""),n=[];for(let i of r){let s=i.restTemplateMetadata;if(!s)continue;let a=s.originalPath||i.fields.path||"",u=tk[i.queryVerb];this.isSupportedMethod(u)&&n.push({id:this.buildEndpointId(u||"",a),name:i.name,method:u?.toUpperCase()||"",path:a,description:s.description,queryVerb:i.queryVerb,operationId:s.operationId,docsUrl:s.docsUrl,originalPath:s.originalPath,originalRequestBody:s.originalRequestBody,defaultBindings:s.defaultBindings,bodyType:i.fields.bodyType,headers:i.fields.headers&&Object.keys(i.fields.headers).length>0?i.fields.headers:void 0,queryString:i.fields.queryString||void 0})}return n};this.getInfo=()=>{let r=this.document.info.title||"OpenAPI Import",n;if(this.document.servers?.length){let s=this.document.servers[0]?.url;n=s?this.convertPathVariables(s):void 0}let i=this.document.externalDocs?.url||this.document.info?.termsOfService||this.document.info?.contact?.url;return{name:r,url:n,docsUrl:i,endpoints:this.getEndpoints(),securityHeaders:this.getSecurityHeaders(),staticVariables:this.getServerVariableBindings()}};this.getQueries=(r,n)=>{let i,s={},a=this.getPrimaryServer(),u=a?.url,c=this.shouldAddBaseUrlBinding(a);a&&(s=a.variables||{},u&&(i=u)),this.setServerVariableBindings(a),c&&(i="{baseUrl}");let l=[],f=n?.filterIds,d=n?.staticVariables||{};for(let[p,h]of Object.entries(this.document.paths)){if(!h)continue;let m=h,g=this.normalizeParameters(m.parameters);for(let[y,b]of Object.entries(m)){if(!znr(y,b))continue;let w=b;if(!this.isSupportedMethod(y))continue;let E=this.buildEndpointId(y,p);if(f&&!f.has(E))continue;let S=cM(w,y,p),T="",R={},A=o(($,q)=>{if(!$)return;let Te=$.toLowerCase(),we=Object.keys(R).find(Ce=>Ce.toLowerCase()===Te);R[we||$]=q},"setHeader"),O=this.getMimeTypes(w),I=O[0],D=this.methodHasRequestBody(y)?this.getRequestBody(w,w.operationId||p,I):void 0,x=[],W=o(($,q="")=>{x.some(Te=>Te.name===$)||x.push({name:$,default:q})},"ensureParameter");I&&A("Content-Type",I);let N=this.normalizeParameters(w.parameters),V=[...g,...N];for(let $ of V){let q=!1;switch($.in){case"query":{let Te="";T&&(Te="&"),T=`${T}${Te}${$.name}={{${$.name}}}`;break}case"header":if(this.isSecurityHeader($.name)){q=!0;break}A($.name,`{{${$.name}}}`);break;case"path":break;case"formData":break}if(!q&&["query","header","path"].includes($.in)){let Te="",we=this.resolveMaybeRef($.schema);we?.default!==void 0&&(Te=String(we.default)),W($.name,Te)}}for(let[$,q]of Object.entries(s)){let we=Object.prototype.hasOwnProperty.call(d,$)?`{{ ${$} }}`:q?.default??"";W($,we)}let k=O.length>0?this.bodyTypeFromMimeType(I):void 0,M=this.buildRestTemplateMetadata(w,S,p,D,x,k),ee=this.constructQuery(r,S,y,p,i,T,R,x,D?.body,D?.bindings??{},k,M);l.push(ee)}}return l}}static{o(this,"OpenAPI3")}resolveRef(r){if(!r||!r.startsWith("#/"))return;let n=r.slice(2).split("/").map(s=>s.replace(/~1/g,"/").replace(/~0/g,"~")),i=this.document;for(let s of n){if(i==null||typeof i!="object")return;i=i[s]}return i}resolveMaybeRef(r){if(r)return Qnr(r)?this.resolveRef(r.$ref):r}normalizeParameters(r){if(!Array.isArray(r))return[];let n=[];for(let i of r){let s=this.resolveMaybeRef(i);s&&n.push(s)}return n}getMimeTypes(r){let n=this.resolveMaybeRef(r.requestBody);return n?.content?Object.keys(n.content):[]}getRequestBody(r,n,i){let s=this.resolveMaybeRef(r.requestBody);if(!s)return;let a=this.getMimeTypes(r),u=i||a[0];if(!u)return;let c=s.content[u];if(!c)return;if(c.example)return SA(c.example,n);let l=this.resolveMaybeRef(c.schema);if(l)return l.example?SA(l.example,n):sM(l,n)}getSecuritySchemeHeader(r){if(r&&r.type==="apiKey"&&r.in==="header"&&r.name)return r.name}isSecurityHeader(r){return r?this.securityHeaders.has(r.toLowerCase()):!1}getSecurityHeaders(){return Array.from(new Set(this.securityHeaders.values()))}getImportSource(){return"openapi3.0"}};var Ynr=U(require("node-fetch"));var Jnr={"openapi2.0":()=>new vA,"openapi3.0":()=>new AA,curl:()=>new TA},Xnr=o((e,t,r)=>{let n=!1;for(let i of t)e[i]==null&&(e[i]=r[i]??"",n=!0);return n},"assignStaticVariableDefaults"),Znr=o((e,t)=>{for(let r of t){if(!r)continue;let n=r.toLowerCase();Object.keys(e).find(s=>s?.toLowerCase()===n)||(e[r]=e[r]??"")}},"assignDatasourceHeaderDefaults");var K4e=class e{constructor(){this.getSource=()=>this.source;this.getInfo=()=>this.source.getInfo();this.importQueries=async(t,r)=>{let n=r?new Set([r]):void 0,i=await this.getDatasourceStaticVariables(t),s=this.source.getQueries(t,{filterIds:n,staticVariables:i});if(n&&s.length===0)throw new Error("Selected endpoint could not be imported");let a=[],u=D4e();s=s.filter(g=>u.validate(g).error?(a.push(g),!1):!0).map(g=>(g._id=bY(g.datasourceId),g));let l=await C.getWorkspaceDB().bulkDocs(s),f=s.reduce((g,y)=>(y._id&&(g[y._id]=y),g),{});l.forEach(g=>{g.ok||(a.push(f[g.id]),delete f[g.id])});let d=Object.values(f),p=d.length,h=this.source.getImportSource(),m=await P.datasources.get(t);await Oe.query.imported(m,h,p);for(let g of d)await Oe.query.created(m,g);return{errorQueries:a,queries:d}};this.prepareDatasourceConfig=t=>{if(!t)return;let r=t.config||(t.config={}),n=this.getStaticServerVariables(),i=Object.keys(n||{}).filter(Boolean);if(i.length){r.staticVariables=r.staticVariables||{},Xnr(r.staticVariables,i,n);let a=new Set(r.templateStaticVariables||[]);i.forEach(u=>a.add(u)),r.templateStaticVariables=Array.from(a)}let s=this.source.getSecurityHeaders();s.length&&((!r.defaultHeaders||typeof r.defaultHeaders!="object"||Array.isArray(r.defaultHeaders))&&(r.defaultHeaders={}),Znr(r.defaultHeaders,s))};this.getStaticServerVariables=()=>{let t=this.source;return t&&typeof t.getServerVariableBindings=="function"?t.getServerVariableBindings():{}}}static{o(this,"RestImporter")}static{this.init=async(t,r)=>{let n=new e;if(r){let i=Jnr[r];if(!i)throw new K("Unsupported import type",400);let s=i();return await s.load(t),n.source=s,n}else for(let i of[new AA,new vA,new TA])if(await i.tryLoad(t)){n.source=i;break}if(!n.source)throw new K("Unsupported import data",400);return n}}async getDatasourceStaticVariables(t){if(!t)return{};let r;try{r=await P.datasources.get(t)}catch{return{}}let n=r?.config?.staticVariables;return!n||typeof n!="object"?{}:{...n}}};var z4e=new Ab("query",{timeoutMs:ie.QUERY_THREAD_TIMEOUT});function tir(e){let t=(0,i9.cloneDeep)(e);return delete t.roles,delete t.account,delete t.license,t}o(tir,"sanitiseUserStructure");function rir(e){for(let t of Object.entries(e)){let[r,n]=t;if(typeof n=="string"&&ha(n).length!==0)throw new Error(`Parameter '${r}' input contains a handlebars binding - this is not allowed.`)}}o(rir,"validateQueryInputs");function nir(e){if(e.user.providerType==="oidc")return nt.getCookie(e,lt.Cookie.OIDC_CONFIG)}o(nir,"getOAuthConfigCookieId");function iir(e){let t=nt.getCookie(e,lt.Cookie.Auth);return{configId:nir(e),sessionId:t?t.sessionId:void 0}}o(iir,"getAuthConfig");function oir(e,t={}){let r=o(n=>n===""||n==null,"paramNotSet");rir(t);for(let n of e.parameters){let i=t[n.name];(i==null||i==="")&&(i=n.default),e.nullDefaultSupport&&r(i)&&(i=null),t[n.name]=i}return t}o(oir,"enrichParameters");async function sir(e,t={rowsOnly:!1,isAutomation:!1}){let n=await C.getWorkspaceDB().get(e.params.queryId),{datasource:i,envVars:s}=await P.datasources.getWithEnvVars(n.datasourceId),a={};t.isAutomation||(a=iir(e));try{let u={appId:e.appId,datasource:i,queryVerb:n.queryVerb,fields:n.fields,pagination:e.request.body.pagination,parameters:oir(n,e.request.body.parameters),transformer:n.transformer,queryId:e.params.queryId,environmentVariables:s,nullDefaultSupport:n.nullDefaultSupport,ctx:{user:tir(e.user),auth:{...a}},schema:n.schema},{rows:c,pagination:l,extra:f,info:d}=n.queryVerb==="read"||t.isAutomation?await z4e.run(u):await mr.addAction(async()=>{let p=await z4e.run(u);return Oe.action.crudExecuted({type:n.queryVerb}),p});f?.raw&&delete f.raw,t&&t.rowsOnly?e.body=c:e.body={data:c,pagination:l,...f,...d}}catch(u){e.throw(400,u)}}o(sir,"execute");async function Lb(e){return sir(e,{rowsOnly:!1,isAutomation:!0})}o(Lb,"executeV2AsAutomation");function lM(e=[]){return e.length===0||e.some(t=>t.value===null||t.value==="")}o(lM,"hasNullFilters");async function vs(e){let t=e.status,r,n=e.headers.get("content-type");try{n&&n.indexOf("application/json")!==-1?r=await e.json():r=await e.text()}catch{r="Failed to retrieve response"}return{status:t,message:r}}o(vs,"getFetchResponse");function Kr(e,t,r={}){let n={appId:e,user:r.user||{appId:e},eventEmitter:t,throw:(i,s)=>{throw s}};return r.body&&(n.request={body:r.body}),r.params&&(n.params=r.params),r.version&&(n.version=r.version),n}o(Kr,"buildCtx");var air=o(e=>e.length>64?e.substring(0,64)+"...":e.replace(/[^a-zA-Z0-9_-]/g,"_"),"sanitiseToolName"),uir=o(e=>{let t={};for(let r of e.parameters||[])t[r.name]=s9.z.string().optional().describe(`Parameter: ${r.name}`);return s9.z.object(t)},"buildParametersSchema"),J4e=o((e,t)=>{let r=air(e.name),n=uir(e),i=e.restTemplateMetadata?.description?`${e.name}: ${e.restTemplateMetadata.description}`:`Execute REST query: ${e.name}`;return{name:r,description:i,sourceType:"REST_QUERY",sourceLabel:t||"API",tool:(0,Y4e.tool)({description:i,inputSchema:n,execute:async s=>{let a=C.getWorkspaceId();if(!a)return{success:!1,error:"No app context available"};let u=Kr(a,null,{body:{parameters:s},params:{queryId:e._id}});try{await Lb(u);let{data:c,...l}=u.body||{};return{success:!0,data:c,info:l}}catch(c){return{success:!1,error:(c instanceof Error?c.message:String(c))||"Query execution failed"}}}})}},"createRestQueryTool");var X4e=o(e=>Object.fromEntries(e.map(t=>[t.name,t.tool])),"toToolSet");var Z4e=require("ai"),fM=require("zod");var cir=fM.z.object({query:fM.z.string().describe("The search query to find relevant information"),num_results:fM.z.number().optional().default(10).describe("Number of results to return")}),a9=o(e=>({name:"exa_search",sourceType:"SEARCH",sourceLabel:"Exa",description:"Search the web using Exa",tool:(0,Z4e.tool)({description:"Search the web using Exa",inputSchema:cir,execute:async t=>{let r=await fetch("https://api.exa.ai/search",{method:"POST",headers:{Authorization:`Bearer ${e}`,"Content-Type":"application/json"},body:JSON.stringify({query:t.query,num_results:t.num_results})});if(!r.ok){let n=await r.text();throw new Error(`Exa error: ${r.status} ${r.statusText} - ${n}`)}return r.json()}})}),"createExaTool");var kb=require("zod"),e3e=require("ai");var lir=kb.z.object({objective:kb.z.string().describe("Natural language description of what to search for"),search_queries:kb.z.array(kb.z.string()).describe("Array of search query strings"),max_results:kb.z.number().optional().default(10).describe("Maximum number of results to return")}),u9=o(e=>({name:"parallel_search",description:"Search the web using Parallel AI",sourceType:"SEARCH",sourceLabel:"Parallel Search",tool:(0,e3e.tool)({description:"Search the web using Parallel AI",inputSchema:lir,execute:async t=>{let r=await fetch("https://api.parallel.ai/v1beta/search",{method:"POST",headers:{"x-api-key":e,"parallel-beta":"search-extract-2025-10-10","Content-Type":"application/json"},body:JSON.stringify({objective:t.objective,search_queries:t.search_queries,max_results:t.max_results,excerpts:{max_chars_per_result:2e3}})});if(!r.ok)throw new Error(`Parallel error: ${r.status} ${r.statusText}`);return r.json()}})}),"createParallelTool");var t3e=U(require("dd-trace"));function r3e(e){return{name:e.name,description:e.description,sourceType:e.sourceType,sourceLabel:e.sourceLabel}}o(r3e,"toToolMetadata");async function c9(e){let[t,r,n]=await Promise.all([P.queries.fetch(),P.datasources.fetch(),e?P.ai.configs.find(e):Promise.resolve(void 0)]),i=n?.webSearchConfig,s=new Map(r.filter(c=>c.source==="REST").map(c=>[c._id,c.name||"API"])),a=t.filter(c=>s.has(c.datasourceId)).map(c=>J4e(c,s.get(c.datasourceId))),u=[...$7,...a];return i?.apiKey&&(i.provider==="exa"?u.push(a9(i.apiKey)):i.provider==="parallel"&&u.push(u9(i.apiKey))),u}o(c9,"getAvailableTools");async function fir(e){return(await c9(e)).map(r3e)}o(fir,"getAvailableToolsMetadata");async function dir(e,t={}){let{baseSystemPrompt:r,includeGoal:n=!0}=t,i=await c9(e.aiconfig),s=new Set(e.enabledTools||[]),a=kt.composeAutomationAgentSystemPrompt({baseSystemPrompt:r,goal:n?e.goal:void 0,promptInstructions:e.promptInstructions,includeGoal:n}),u=s.size>0?i.filter(c=>s.has(c.name)):i;return{systemPrompt:a,tools:X4e(u)}}o(dir,"buildPromptAndTools");function pir(e){let t=o(async(r,n)=>{let i=t3e.default.scope().active(),s=n;if(typeof n?.body=="string")try{let c=JSON.parse(n.body);c.litellm_session_id=e,i&&(c.metadata={...c.metadata,dd_trace_id:i.context().toTraceId(),dd_span_id:i.context().toSpanId(),session_id:e}),s={...n,body:JSON.stringify(c)}}catch{}let a=await fetch(r,s),u=a.headers.get("x-litellm-call-id");return u&&i&&i.setTag("litellm.call_id",u),a},"liteFetch");return typeof fetch.preconnect=="function"&&(t.preconnect=fetch.preconnect.bind(fetch)),t}o(pir,"createLiteLLMFetch");var d9={};G(d9,{create:()=>gir,getOrThrow:()=>mir,getSingle:()=>i3e,update:()=>yir});var f9=o(e=>({...e,live:e.live??!1,agents:e.agents??[]}),"withDefaults"),hir=o(e=>{if(e!==void 0){if(!Array.isArray(e))throw new K("conversationStarters must contain prompt entries",400);if(e.length>3)throw new K("conversationStarters may contain at most 3 starters",400);return e.map(t=>{if(!t||typeof t!="object")throw new K("conversationStarters must contain prompt entries",400);if(typeof t.prompt!="string")throw new K("conversationStarters must contain prompt entries",400);return{prompt:t.prompt}})}},"normalizeConversationStarters"),n3e=o(e=>{if(e===void 0)return;if(!Array.isArray(e))throw new K("agents must contain valid agentId entries",400);if(e.length===0)return[];if(!e.every(r=>typeof r?.agentId=="string"&&r.agentId.trim().length))throw new K("agents must contain valid agentId entries",400);return e.map(r=>({agentId:r.agentId,isEnabled:r.isEnabled===!0,isDefault:r.isDefault===!0,conversationStarters:hir(r.conversationStarters)}))},"normalizeAgents");async function i3e(){let r=(await C.getWorkspaceDB().allDocs(yt.getDocParams("chatapp",void 0,{include_docs:!0,limit:1}))).rows[0]?.doc;return r?f9(r):void 0}o(i3e,"getSingle");async function mir(e){if(!e)throw new K("chatAppId is required",400);let r=await C.getWorkspaceDB().tryGet(e);if(!r)throw new K("Chat App not found",404);return f9(r)}o(mir,"getOrThrow");async function gir(e){let t=C.getWorkspaceDB();if(await i3e())throw new K("Chat App already exists for this workspace",400);let n=n3e(e.agents===void 0?void 0:e.agents),i=new Date().toISOString(),s={_id:yt.generateChatAppID(),createdAt:i,updatedAt:i,...e,agents:n??[]},{rev:a}=await t.put(s);return{...s,_rev:a}}o(gir,"create");async function yir(e){if(!e._id||!e._rev)throw new K("_id and _rev are required",400);let t=C.getWorkspaceDB(),r=await t.tryGet(e._id);if(!r)throw new K("Chat App not found",404);let n=n3e(e.agents===void 0?r.agents??[]:e.agents),i=new Date().toISOString(),s={...r,...e,agents:n??[],updatedAt:i},{rev:a}=await t.put(s);return s._rev=a,f9(s)}o(yir,"update");var p9={};G(p9,{buildLiteLLMParams:()=>wk,generateRows:()=>_ir,generateTables:()=>bir});async function bir(e){let t=[],r={};try{for(let i of e)for(let s of Object.values(i.schema).filter(a=>a.type==="link")){if(!e.find(a=>a.name===s.tableId))throw new Error(`Table ${s.tableId} not found in the json response.`);if(s.tableId===i.name)throw new Error(`Self-referential relationships are not supported. Table ${i.name} cannot link to itself.`)}let n=(await P.tables.getAllInternalTables()).map(i=>i.name);for(let i of e){let s=de.getSequentialName(n,i.name,{separator:" "}),a=await P.tables.create({...i,name:s,schema:{},primaryDisplay:void 0,sourceType:"internal",sourceId:Un,type:"table",aiGenerated:!0});t.push({id:a._id,name:i.name}),r[i.name]=a._id}for(let i of e)for(let s of Object.values(i.schema))s.type==="link"?s.tableId=r[s.tableId]:s.type==="formula"&&(s.formula=`{{ js "${Buffer.from(s.formula).toString("base64")}" }}`);for(let i of e){let s=await P.tables.getTable(r[i.name]),a={...s.schema,...i.schema};for(let u of Object.keys(a))a[u].aiGenerated=!0;await P.tables.update({...s,schema:a,primaryDisplay:i.primaryDisplay})}}catch(n){console.log("Error generating tables, cleaning up created tables",n);let i=await P.tables.getTables(t.map(s=>s.id));throw await Promise.all(i.map(P.tables.internal.destroy)),n}return t}o(bir,"generateTables");async function _ir(e,t,r){let n={},i=[],s=[];for(let a of Object.keys(e)){let u=r[a],c={};for(let f of Object.values(u.schema).filter(d=>d.type==="link"))c[f.name]=null;let l=Object.values(u.schema).filter(f=>["attachment","attachment_single"].includes(f.type));s.push(...e[a].map(async f=>{await wir(f,l);let d=u._id,p=await P.rows.save(d,{...f,...c,_id:void 0},t);n[d]??={},n[d][f._id]=p.row._id;let h=Object.keys(c).reduce((m,g)=>(f[g]&&(m[g]={tableId:u.schema[g].tableId,rowId:f[g]}),m),{});Object.keys(h).length&&i.push({tableId:p.table._id,rowId:p.row._id,data:h})}))}await Promise.all(s),await Promise.all(i.map(async a=>{let u=await P.rows.find(a.tableId,a.rowId),c=Object.keys(a.data).reduce((l,f)=>(l[f]=[...u[f]||[],...a.data[f].rowId.map(d=>n[a.data[f].tableId][d])],l),{});await P.rows.save(a.tableId,{...u,...c},t,{updateAIColumns:!1})}))}o(_ir,"generateRows");async function wir(e,t){function r(n){return typeof n=="object"?wGe(n):_Ge(n)}o(r,"processAttachment");for(let n of t)Array.isArray(e[n.name])?e[n.name]=await Promise.all(e[n.name].map(i=>r(i))):e[n.name]=await r(e[n.name])}o(wir,"processAttachments");var h9={};G(h9,{deleteAgentFileChunks:()=>Zv,ingestAgentFile:()=>ier,retrieveContextForSources:()=>oer});var m9={};G(m9,{create:()=>GZt,createVectorDb:()=>Xv,fetch:()=>WZt,find:()=>Tk,remove:()=>VZt,update:()=>$Zt});var b9={};G(b9,{create:()=>Air,fetch:()=>Sir,find:()=>vir,get:()=>Tir,remove:()=>Oir,update:()=>Rir});var o3e=U(require("lodash/cloneDeep"));var s3e="********";function Fh(){return C.getWorkspaceDB()}o(Fh,"getDb");function a3e(e){if(e==null)return e;let t=e.definition.steps,r=e.definition.trigger,n=[...t,r];e.live!=null&&delete e.live;for(let i of n)if(i!=null)for(let s of Object.keys(i.inputs||{})){let a=s;(!i.inputs[a]||i.inputs[a]==="")&&delete i.inputs[a]}return e}o(a3e,"cleanAutomationInputs");async function Eir(e,t){let r=o((a,u)=>{let c=a.definition.steps.map(l=>l.id);return u.definition.steps.filter(l=>!c.includes(l.id))},"getNewSteps"),n=o((a,u)=>{let c=u.definition.steps.map(l=>l.id);return a.definition.steps.filter(l=>!c.includes(l.id))},"getDeletedSteps"),i=r(e,t);for(let a of i)await Oe.automation.stepCreated(t,a);let s=n(e,t);for(let a of s)await Oe.automation.stepDeleted(t,a)}o(Eir,"handleStepEvents");async function Sir(){return(await Fh().allDocs(Mc(null,{include_docs:!0}))).rows.filter(n=>!!n.doc).map(n=>n.doc).map(RA).map(OA)}o(Sir,"fetch");async function Tir(e){let r=await Fh().get(e);return OA(RA(r))}o(Tir,"get");async function vir(e,t){return(await Fh().getMultiple(e,t)).map(RA).map(OA)}o(vir,"find");async function Air(e){e=RA(e);let t=Fh();e._id||(e._id=xGe()),e.type="automation",e=u3e(e),e=a3e(e),e=await y9({newAuto:e});let r=await t.put(e);await Oe.automation.created(e);for(let n of e.definition.steps)await Oe.automation.stepCreated(e,n);return e._rev=r.rev,e._id=r.id,OA(e)}o(Air,"create");async function Rir(e){if(e=RA(e),!e._id||!e._rev)throw new K("_id or _rev fields missing",400);let t=Fh(),r=await t.get(e._id);Iir(e,r),e=u3e(e,r),e=a3e(e),e=await y9({oldAuto:r,newAuto:e});let n=await t.put(e);e._rev=n.rev;let i=r&&r.definition.trigger?r.definition.trigger:void 0,s=e&&e.definition.trigger?e.definition.trigger:void 0;return i&&i.id!==s?.id&&(await Oe.automation.triggerUpdated(e),await ak("automationTestInput",e._id),await q7(e._id)),await Eir(r,e),OA({...e,_rev:n.rev,_id:n.id})}o(Rir,"update");async function Oir(e,t){let r=Fh(),n=await r.get(e);await y9({oldAuto:n}),await ak("automationTestInput",e),await ak("automationTestHistory",e),await q7(e);let i=await r.remove(e,t);return await Oe.automation.deleted(n),i}o(Oir,"remove");async function y9({oldAuto:e,newAuto:t}){let r=Ve.triggers.definitions.WEBHOOK.stepId,n=C.getWorkspaceId();if(!n)throw new Error("Unable to check webhooks - no app ID in context.");let i=e?e.definition.trigger:null,s=t?t.definition.trigger:null,a=i&&s&&i.id!==s.id;function u(c){return c&&c.definition.trigger&&c.definition.trigger.stepId===r}if(o(u,"isWebhookTrigger"),u(e)&&(!u(t)||a)&&i.webhookId)try{let l=await Fh().get(i.webhookId);s&&(delete s.webhookId,s.inputs={}),await _u.webhook.destroy(l._id,l._rev)}catch{}if((!u(e)||a)&&u(t)){let l=(await _u.webhook.save(_u.webhook.newDoc("Automation webhook","automation",t._id)))._id;s.webhookId=l;let f=F.getProdWorkspaceID(n);s.inputs={schemaUrl:`api/webhooks/schema/${n}/${l}`,triggerUrl:`api/webhooks/trigger/${f}/${l}`}}return t}o(y9,"checkForWebhooks");function Iir(e,t){let r=[e.definition.trigger,...e.definition.steps],n=[t.definition.trigger,...t.definition.steps];for(let i of r)Object.keys(i.schema.inputs.properties||{}).filter(a=>i.schema.inputs.properties[a].readonly).forEach(a=>{let u=a,c=n.find(l=>l.id===i.id);if(i.inputs[u]!==c?.inputs[u])throw new K(`Field ${u} is readonly and it cannot be modified`,400)})}o(Iir,"guardInvalidUpdatesAndThrow");function RA(e){let r={...{_id:e._id,_rev:e._rev,definition:e.definition,screenId:e.screenId,uiTree:e.uiTree,appId:e.appId,live:e.live,name:e.name,internal:e.internal,type:e.type,disabled:e.disabled,testData:e.testData,createdAt:e.createdAt,updatedAt:e.updatedAt,layoutDirection:e.layoutDirection}};for(let n in r)Object.prototype.hasOwnProperty.call(e,n)||delete r[n];return r}o(RA,"trimUnexpectedObjectFields");function u3e(e,t){let r=e.definition?.trigger;if(!r||!Qc(r)||!r.inputs||!Cir(r.inputs.password))return e;if(!t||!Qc(t.definition?.trigger))throw new K("IMAP password is required",400);let n=t.definition.trigger.inputs?.password;if(!n)throw new K("IMAP password is required",400);let i=(0,o3e.default)(e),s=i.definition?.trigger;if(!Qc(s)||!s.inputs)throw new K("IMAP password is required",400);return s.inputs.password=n,i}o(u3e,"hydrateAutomationSecrets");function OA(e){let t=e.definition?.trigger;return Qc(t)&&t.inputs?.password&&(t.inputs.password=s3e),e}o(OA,"maskAutomationSecrets");function Cir(e){return e===Ui||e===s3e}o(Cir,"isMaskedPassword");var _9={};G(_9,{destroy:()=>Pir,newDoc:()=>xir,save:()=>Dir});function c3e(e){return e.startsWith(F.DocumentType.WEBHOOK)}o(c3e,"isWebhookID");function xir(e,t,r){return{live:!0,name:e,action:{type:t,target:r}}}o(xir,"newDoc");async function Dir(e){let t=C.getWorkspaceDB();e._id&&c3e(e._id)?await t.get(e._id):e._id=kGe();let r=await t.put(e);return e._rev=r.rev,e}o(Dir,"save");async function Pir(e,t){let r=C.getWorkspaceDB();if(!e||!c3e(e))throw new Error("Provided webhook ID is not valid.");return await r.remove(e,t)}o(Pir,"destroy");var w9={};G(w9,{checkForCollectStep:()=>_F});var E9={};G(E9,{trigger:()=>Nir});async function Nir(e,t={},r){let i=await C.getWorkspaceDB().get(e);if(!i)throw new Error(`Automation with ID ${e} not found`);let s=i.definition?.trigger?.stepId;if(s!=="APP")throw new Error(`Cannot manually trigger automation '${i.name}'. Only automations with APP trigger type can be manually triggered. This automation has trigger type: ${s}`);if(P.automations.utils.checkForCollectStep(i)&&await Zi.isSyncAutomationsEnabled()){let u=await jc(i,{fields:t,timeout:r?r*1e3:ie.AUTOMATION_THREAD_TIMEOUT},{getResponses:!0});if(!("steps"in u))throw new Error("Unable to collect response");return u.steps.find(l=>l.stepId==="COLLECT")?.outputs}else{let u=C.getWorkspaceId();return await jc(i,{fields:t,appId:u}),{message:`Automation ${i._id} has been triggered.`,automation:i}}}o(Nir,"trigger");var _u={...b9,webhook:_9,utils:w9,execution:E9};var T9={};G(T9,{exportApp:()=>h3e,exportDB:()=>p3e,streamExportApp:()=>Uir});var l3e=require("dd-trace"),S9=U(require("fs")),Wc=U(require("fs/promises")),$f=require("path"),f3e=U(require("tar")),d3e=require("uuid");var Mb="db.txt",dM="global.txt",pM="attachments";var Lir=require("memorystream");async function kir(e,t){let r=`${(0,d3e.v4)()}.tar.gz`,n=(0,$f.join)(cu(),r);return await f3e.create({gzip:!0,file:n,noDirRecurse:!1,cwd:e},t),n}o(kir,"tarFilesToTmp");async function p3e(e,t={}){let r={filter:t?.filter,batch_size:1e3,batch_limit:5,style:"main_only"};return F.doWithDB(e,async n=>{if(t?.exportPath){let i=t?.exportPath,s=S9.default.createWriteStream(i);return await n.dump(s,r),i}else{let i=new Lir,s="";return i.on("data",a=>{s+=a.toString()}),await n.dump(i,r),s}})}o(p3e,"exportDB");function Mir(e){let t=[rk,vGe,RGe];return e&&t.push(AGe),r=>!t.map(n=>r._id.includes(n)).reduce((n,i)=>n||i)}o(Mir,"defineFilter");async function h3e(e,t){return await l3e.tracer.trace("exportApp",async r=>{r.addTags({"config.excludeRows":t?.excludeRows,"config.tar":t?.tar,"config.encryptPassword":!!t?.encryptPassword,"config.exportPath":t?.exportPath,"config.filter":!!t?.filter});let n=F.getProdWorkspaceID(e),i=`${n}/`,s=[/\/\..+/];t?.excludeRows&&s.push(/\/attachments\/.*/);let a=await Se.retrieveDirectory(Nn.APPS,i,s);r.addTags({prodAppId:n,tmpPath:a});let u=(0,$f.join)(a,i);if(S9.default.existsSync(u)){let l=await Wc.default.readdir(u);for(let f of l){let d=(0,$f.join)(u,f);await Wc.default.rename(d,(0,$f.join)(u,"..",f))}await Wc.default.rmdir(u)}let c=(0,$f.join)(a,Mb);if(await p3e(e,{filter:Mir(t?.excludeRows),exportPath:c}),t?.encryptPassword){let l=o(async(f,d="")=>{for(let p of await Wc.default.readdir(f)){let h=(0,$f.join)(f,p),m=d?(0,$f.join)(d,p):p;if(p!==pM){let g=await Wc.default.lstat(h);g.isFile()?(await sa.encryptFile({dir:f,filename:p},t.encryptPassword),await Wc.default.rm(h)):g.isDirectory()&&await l(h,m)}}},"processDirectory");await l(a)}if(t?.tar){let l=await kir(a,await Wc.default.readdir(a));return await Wc.default.rm(a,{recursive:!0,force:!0}),l}else return a})}o(h3e,"exportApp");async function Uir({appId:e,excludeRows:t,encryptPassword:r}){let n=await h3e(e,{excludeRows:t,tar:!0,encryptPassword:r});return JGe(n)}o(Uir,"streamExportApp");var v9={};G(v9,{getGlobalDBFile:()=>jir,getListOfAppsInMulti:()=>Wir,importApp:()=>Gir,untarFile:()=>_3e,updateAttachmentColumns:()=>b3e});var Ub=U(require("fs")),wu=U(require("fs/promises")),Vf=require("path"),g3e=U(require("tar")),y3e=require("uuid");function m3e(e,t){let r=t.key?.split("/")||[];r.shift(),r.unshift(e);let n=r.join("/");return{...t,key:n,url:""}}o(m3e,"rewriteAttachmentUrl");async function b3e(e,t){let r=await P.tables.getAllInternalTables(t),n=[];for(let i of r){let{rows:s,columns:a}=await P.rows.getRowsWithAttachments(t.name,i);n=n.concat(s.map(u=>{for(let c of a){let l=i.schema[c].type;l==="attachment"&&Array.isArray(u[c])?u[c]=u[c].map(f=>m3e(e,f)):(l==="attachment_single"||l==="signature_single")&&u[c]&&(u[c]=m3e(e,u[c]))}return u}))}await t.bulkDocs(n)}o(b3e,"updateAttachmentColumns");async function Fir(e,t){let r=(await t.allDocs(Mc(null,{include_docs:!0}))).rows.map(s=>s.doc),n=F.getDevWorkspaceID(e),i=[];for(let s of r){let a=s.appId,u=F.getProdWorkspaceID(s.appId);if(s.definition.trigger?.stepId==="WEBHOOK"){let c=s.definition.trigger.inputs;s.definition.trigger.inputs={schemaUrl:c.schemaUrl.replace(a,n),triggerUrl:c.triggerUrl.replace(u,e)}}s.appId=n,i.push(s)}await t.bulkDocs(i)}o(Fir,"updateAutomations");async function Bir(e){if(e.file&&e.file.type!=="text/plain")throw new Error("Cannot import a non-text based file.");if(e.file)return Ub.default.createReadStream(e.file.path);if(e.key){let[t,r]=e.key.split("/"),n=await s$e(t,r);return Ub.default.createReadStream((0,Vf.join)(n,r,"db","dump.txt"))}else throw new Error("Either file or key is required.")}o(Bir,"getTemplateStream");async function _3e(e){let t=(0,Vf.join)(cu(),(0,y3e.v4)());return await wu.default.mkdir(t),await g3e.extract({cwd:t,file:e.path}),t}o(_3e,"untarFile");async function qir(e,t){try{let r=o(async n=>{for(let i of await wu.default.readdir(n)){let s=(0,Vf.join)(n,i);if(!s.endsWith(pM)){let a=await wu.default.lstat(s);if(a.isFile()&&s.endsWith(".enc")){let u=s.replace(/\.enc$/,"");await sa.decryptFile(s,u,t),await wu.default.rm(s)}else a.isDirectory()&&await r(s)}}},"processDirectory");await r(e)}catch(r){throw r.message==="incorrect header check"?new Error("File cannot be imported"):r}}o(qir,"decryptFiles");function jir(e){return Ub.default.readFileSync((0,Vf.join)(e,dM),"utf8")}o(jir,"getGlobalDBFile");function Wir(e){return Ub.default.readdirSync(e).filter(t=>t!==dM)}o(Wir,"getListOfAppsInMulti");async function Gir(e,t,r,n={updateAttachmentColumns:!0}){let i=F.getProdWorkspaceID(e),s,a=r.file&&r?.file?.type?.endsWith("gzip"),u=r.file&&(await wu.default.lstat(r.file.path)).isDirectory(),c;if(r.file&&(a||u)){c=a?await _3e(r.file):r.file.path,a&&r.file.password&&await qir(c,r.file.password);let f=await wu.default.readdir(c);if(!!f.find(m=>m.endsWith(".enc")))throw new Error("Files are encrypted but no password has been supplied.");if(!!f.find(m=>m==="plugin.min.js"))throw new Error("Supplied file is a plugin - cannot import as app.");if(!f.find(m=>m===Mb))throw new Error("App export does not appear to be valid - no DB file found.");{let m=[],g=[dM,Mb];for(let w of f){let E=(0,Vf.join)(c,w);g.includes(w)||(w=(0,Vf.join)(i,w),(await wu.default.lstat(E)).isDirectory()?m.push(Se.uploadDirectory(Nn.APPS,E,w)):m.push(Se.upload({bucket:Nn.APPS,path:E,filename:w})))}await Promise.all(m);let y=await wu.default.readdir(c,{recursive:!0}),b=[];await Fe.parallelForeach(Se.listAllObjects(Se.ObjectStoreBuckets.APPS,i),async w=>{w.Key&&!y.includes(w.Key.replace(new RegExp(`^${i}/`),""))&&b.push(w.Key)},5),b.length&&await Se.deleteFiles(Se.ObjectStoreBuckets.APPS,b)}s=Ub.default.createReadStream((0,Vf.join)(c,Mb))}else s=await Bir(r);let{ok:l}=await t.load(s);if(!l)throw"Error loading database dump from template.";return n.updateAttachmentColumns&&await b3e(i,t),await Fir(i,t),c&&await wu.default.rm(c,{recursive:!0,force:!0}),l}o(Gir,"importApp");var A9={};G(A9,{calculateAutomationCount:()=>E3e,calculateBackupStats:()=>$ir,calculateDatasourceCount:()=>w3e,calculateScreenCount:()=>S3e});async function hM(e,t,r){if(r)return t(r);{let n=F.getDevWorkspaceID(e);return C.doInWorkspaceContext(n,()=>{let i=C.getWorkspaceDB();return t(i)})}}o(hM,"runInContext");async function w3e(e,t){return hM(e,async r=>{let n=await r.allDocs($v()),i=await r.allDocs(kf());return n.rows.length+i.rows.length},t)}o(w3e,"calculateDatasourceCount");async function E3e(e,t){return hM(e,async r=>(await r.allDocs(Mc())).rows.length,t)}o(E3e,"calculateAutomationCount");async function S3e(e,t){return hM(e,async r=>(await P.screens.fetch(r)).length,t)}o(S3e,"calculateScreenCount");async function $ir(e){return hM(e,async t=>{let r=[];r.push(w3e(e,t)),r.push(E3e(e,t)),r.push(S3e(e,t));let n=await Promise.all(r);return{datasources:n[0],automations:n[1],screens:n[2]}})}o($ir,"calculateBackupStats");var R9={};G(R9,{clearErrors:()=>Vir});async function Vir(e){let t=C.getProdWorkspaceDB(),r=await t.get("app_metadata");e?r.backupErrors&&r.backupErrors[e]&&delete r.backupErrors[e]:delete r.backupErrors,await t.put(r),await Be.workspace.invalidateWorkspaceMetadata(r.appId,r)}o(Vir,"clearErrors");var mM={...T9,...v9,...A9,...R9};var O9={};G(O9,{getSourceType:()=>Hir});function Hir(e){if(Ns(e))return"table";if(ln(e))return"view";if(fm(e))return"datasource";if(Kre(e))return"query";throw new Error(`Unknown source type for source "${e}"`)}o(Hir,"getSourceType");function T3e(e,t){return!e.disabled&&t?"published":"disabled"}o(T3e,"getPublishedState");async function v3e(){let e=C.getProdWorkspaceId(),t=await P.workspaces.isWorkspacePublished(e),r={automations:[],workspaceApps:[],screens:[],tables:[]},n={automations:[],workspaceApps:[],screens:[],tables:[]},i=o(async h=>{let[m,g,y,b]=await Promise.all([P.automations.fetch(),P.workspaceApps.fetch(),P.screens.fetch(),P.tables.getAllInternalTables()]);h.automations=m,h.workspaceApps=g,h.screens=y,h.tables=b},"updateState");await C.doInWorkspaceContext(C.getDevWorkspaceId(),async()=>i(r));let s;t&&(s=await P.workspaces.metadata.tryGet({production:!0}),await C.doInWorkspaceContext(C.getProdWorkspaceId(),async()=>i(n)));let a=new Set(n.automations.map(h=>h._id)),u=new Set(n.workspaceApps.map(h=>h._id)),c=new Set(n.tables.map(h=>h._id)),l=o((h,m,g)=>{let y=g._id,b=s?.resourcesPublishedAt?.[y],w=m.has(y)||!!b;h[y]={published:w,name:g.name,publishedAt:b,unpublishedChanges:!b||g.updatedAt>b,state:T3e(g,b)}},"processResource"),f={};for(let h of r.automations)l(f,a,h);let d={};for(let h of r.tables)l(d,c,h);let p={};for(let h of r.workspaceApps){let m=s?.resourcesPublishedAt?.[h._id],g=r.screens.filter(y=>y.workspaceAppId===h._id);p[h._id]={published:u.has(h._id),name:h.name,publishedAt:m,unpublishedChanges:!m||!!g.find(y=>y.updatedAt>m),state:T3e(h,m)}}return{automations:f,workspaceApps:p,tables:d}}o(v3e,"status");var A3e={status:v3e};var I9={};G(I9,{create:()=>Kir,fetch:()=>Qir,findByResourceId:()=>Yir,remove:()=>zir});async function Qir(e){return(await C.getWorkspaceDB().find({selector:{_id:{$regex:`^workspace_favourite${ce}`},...e?{createdBy:e}:{}}})).docs}o(Qir,"fetch");async function Kir(e){let r=await C.getWorkspaceDB().put({_id:F.generateWorkspaceFavouriteID(),...e});return{...e,_id:r.id,_rev:r.rev}}o(Kir,"create");async function zir(e,t){return await C.getWorkspaceDB().remove(e,t)}o(zir,"remove");async function Yir(e){return(await C.getWorkspaceDB().find({selector:{_id:{$regex:`^workspace_favourite${ce}`},resourceId:e},limit:1})).docs}o(Yir,"findByResourceId");var C9={};G(C9,{fetch:()=>Jir,fetchWithDocument:()=>Xir});async function Jir(e){if(!Ns(e))throw new Error(`Invalid tableId: ${e}`);let t=C.getWorkspaceDB(),r={startkey:[e],endkey:[e,{}]};return(await t.query(Gv(kc.LINK),r)).rows.map(i=>i.value)}o(Jir,"fetch");async function Xir(e){if(!Ns(e))throw new Error(`Invalid tableId: ${e}`);let t=C.getWorkspaceDB(),r={startkey:[e],endkey:[e,{}],include_docs:!0};return(await t.query(Gv(kc.LINK),r)).rows.map(i=>i.doc)}o(Xir,"fetchWithDocument");var R3e={...C9};var x9={};G(x9,{addLink:()=>Zir,deleteLink:()=>eor,update:()=>tor});async function Zir({label:e,url:t,roleId:r,workspaceAppId:n}){let i=await P.workspaceApps.get(n);if(!i)throw new K("Workspace app should be defined",500);i.navigation.links??=[],i.navigation.links.push({text:e,url:t,roleId:r,type:"link"}),await P.workspaceApps.update(i)}o(Zir,"addLink");async function eor(e,t){let r=await P.workspaceApps.get(t);r.navigation.links??=[];let n=r.navigation.links.filter(i=>i.url!==e);n.forEach(i=>{i.type==="sublinks"&&i.subLinks?.length&&(i.subLinks=i.subLinks.filter(s=>s.url!==e))}),await P.workspaceApps.update({...r,navigation:{...r.navigation,links:n}})}o(eor,"deleteLink");async function tor(e,t){let r=await P.workspaceApps.get(e);if(!r)throw new K("Workspace app not found",400);await P.workspaceApps.update({...r,navigation:t})}o(tor,"update");var D9={};G(D9,{cleanStoredToken:()=>lor,create:()=>ror,fetch:()=>I3e,get:()=>gM,getLastUsages:()=>cor,getToken:()=>aor,remove:()=>ior,update:()=>nor,validateConfig:()=>uor});async function O3e(e,t){if((await I3e()).find(n=>n.name===e&&n._id!==t))throw new K(`OAuth2 config with name '${e}' is already taken.`,400)}o(O3e,"guardName");async function I3e(){return(await C.getWorkspaceDB().allDocs(yt.getOAuth2ConfigParams(null,{include_docs:!0}))).rows.map(n=>({...n.doc,_id:n.doc._id,_rev:n.doc._rev}))}o(I3e,"fetch");async function ror(e){let t=C.getWorkspaceDB();await O3e(e.name);let r=await t.put({_id:`oauth2${ce}${nt.newid()}`,...e});return{_id:r.id,_rev:r.rev,...e}}o(ror,"create");async function gM(e){return await C.getWorkspaceDB().tryGet(e)}o(gM,"get");async function nor(e){let t=C.getWorkspaceDB();await O3e(e.name,e._id);let r=await gM(e._id);if(!r)throw new K(`OAuth2 config with id '${e._id}' not found.`,404);let n={...e,clientSecret:e.clientSecret===Ui?r.clientSecret:e.clientSecret},i=await t.put(n);return await C3e(e._id),{...n,_rev:i.rev}}o(nor,"update");async function ior(e,t){let r=C.getWorkspaceDB();try{await r.remove(e,t)}catch(i){throw i.status===404?new K(`OAuth2 config with id '${e}' not found.`,404):i}await C3e(e);let n=await r.tryGet(yt.generateOAuth2LogID(e));n&&await r.remove(n)}o(ior,"remove");async function C3e(e){let t=Be.CacheKey.OAUTH2_TOKEN(e);await Be.destroy(t)}o(C3e,"cleanCache");var x3e=require("koa"),D3e=U(require("node-fetch"));var{DocWritethrough:oor}=Be.docWritethrough;async function P3e(e){e=await ZVe(e);let t={method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"client_credentials"}),redirect:"follow"},r={grant_type:e.grantType};return e.method==="HEADER"?t.headers={"Content-Type":"application/x-www-form-urlencoded",Authorization:`Basic ${Buffer.from(`${e.clientId}:${e.clientSecret}`,"utf-8").toString("base64")}`}:(r.client_id=e.clientId,r.client_secret=e.clientSecret),e.scope&&(r.scope=e.scope),t.body=new URLSearchParams(r),await(0,D3e.default)(e.url,t)}o(P3e,"fetchToken");var sor=o(async e=>{await new oor(C.getWorkspaceDB(),yt.generateOAuth2LogID(e)).patch({lastUsage:Date.now()})},"trackUsage");async function aor(e){let t=await Be.withCacheWithDynamicTTL(Be.CacheKey.OAUTH2_TOKEN(e),async()=>{let r=await gM(e);if(!r)throw new x3e.HttpError(`oAuth config ${e} count not be found`);let n=await P3e(r),i=await n.json();if(!n.ok){let u=i.error_description??n.statusText;throw new Error(`Error fetching oauth2 token: ${u}`)}let s=`${i.token_type} ${i.access_token}`,a=i.expires_in??-1;return{value:s,ttl:a}});return await sor(e),t}o(aor,"getToken");async function uor(e){try{let t=await P3e(e),r=await t.json();return t.ok?{valid:!0}:{valid:!1,message:r.error_description??t.statusText}}catch(t){return{valid:!1,message:t.message}}}o(uor,"validateConfig");async function cor(e){let t=await C.getWorkspaceDB().getMultiple(e.map(yt.generateOAuth2LogID),{allowMissing:!0}),r=await C.getProdWorkspaceDB().getMultiple(e.map(yt.generateOAuth2LogID),{allowMissing:!0});return e.reduce((i,s)=>{let a=t.find(c=>c._id===yt.generateOAuth2LogID(s));a&&(i[s]=a.lastUsage);let u=r.find(c=>c._id===yt.generateOAuth2LogID(s));return u&&(!i[s]||i[s]<u.lastUsage)&&(i[s]=u.lastUsage),i},{})}o(cor,"getLastUsages");async function lor(e){await Be.destroy(Be.CacheKey.OAUTH2_TOKEN(e),{useTenancy:!0})}o(lor,"cleanStoredToken");var N9={};G(N9,{enrichArrayContext:()=>k3e,enrichContext:()=>P9,fetch:()=>hor,find:()=>por});function N3e(e){if(!e.schema)return e;let t={};for(let r of Object.keys(e.schema))typeof e.schema[r]=="string"?t[r]={type:e.schema[r],name:r}:t[r]=e.schema[r];return e.schema=t,e}o(N3e,"updateSchema");function dor(e){return e.map(t=>N3e(t))}o(dor,"updateSchemas");function L3e(e){let t=Array.isArray(e),r=t?e:[e];for(let n of r)n.queryVerb==="read"&&(n.readable=!0);return t?r:r[0]}o(L3e,"enrichQueries");async function por(e){let t=C.getWorkspaceDB(),r=C.getWorkspaceId(),n=L3e(await t.get(e));return Lf(r)&&(delete n.fields,delete n.parameters),N3e(n)}o(por,"find");async function hor(e={enrich:!0}){let n=(await C.getWorkspaceDB().allDocs(_Y(null,{include_docs:!0}))).rows.map(i=>i.doc);return e.enrich&&(n=await L3e(n)),dor(n)}o(hor,"fetch");async function k3e(e,t={}){let r={};for(let s in e)r[s]=e[s];let n=await P9(r,t),i=[];for(let[s,a]of Object.entries(n))i[parseInt(s)]=a;return i}o(k3e,"enrichArrayContext");async function P9(e,t={}){let r={};if(!e||!t)return r;if(Array.isArray(e))return k3e(e,t);let n=await mu(),i={...t,env:n};for(let s of Object.keys(e))e[s]!=null&&(typeof e[s]=="object"?r[s]=await P9(e[s],i):typeof e[s]=="string"?r[s]=Cr(e[s],i,{noEscaping:!0,noHelpers:!0,escapeNewlines:!0}):r[s]=e[s]);if(r.json||r.customData||r.requestBody){try{r.json=JSON.parse(r.json||r.customData||r.requestBody)}catch{}delete r.customData}return r}o(P9,"enrichContext");var M3e={...N9};var k9={};G(k9,{duplicateResourcesToWorkspace:()=>Dor,getResourcesInfo:()=>mor});var B3e=U(require("lodash/chunk"));async function mor(){let e=await P.automations.fetch(),t=await P.workspaceApps.fetch(),r={},n=[],i=await P.tables.getAllInternalTables(),s=await P.rowActions.getAll();n.push(...i.map(d=>({id:d._id,idToSearch:d._id,name:d.name,type:"table"})));let a=await P.datasources.fetch();n.push(...a.filter(d=>d._id!==Un).map(d=>({id:d._id,idToSearch:d._id,name:d.name,type:"datasource"}))),n.push(...e.map(d=>({id:d._id,idToSearch:d._id,name:d.name,type:"automation"})));let u=await P.queries.fetch();if(n.push(...u.map(d=>({id:d._id,idToSearch:d._id,name:d.name,type:"query"}))),s.length){let d=await P.rowActions.getNames(Object.values(s).flatMap(p=>Object.values(p.actions)));for(let p of s){let h=Object.entries(p.actions).flatMap(([m,g])=>e.filter(y=>y._id===g.automationId).map(y=>({id:y._id,name:y.name,type:"automation"})));for(let[m,g]of Object.entries(p.actions))for(let y of[m,BGe(p._id)])n.push({id:p._id,idToSearch:y,name:d[g.automationId],type:"row_action",extraDependencies:h})}}let c=o((d,p)=>{let h=JSON.stringify(p);r[d]??={dependencies:[]};for(let m of n)if(h.includes(m.idToSearch)&&!r[d].dependencies.find(g=>g.id===m.id)){r[d].dependencies.push({id:m.id,name:m.name,type:m.type});let g=[...m.extraDependencies||[],...r[m.id]?.dependencies||[]].filter(({id:y})=>!r[d].dependencies.some(b=>b.id===y));r[d].dependencies.push(...g)}},"searchForUsages");for(let d of i)c(d._id,d);for(let d of e)c(d._id,d);for(let d of u)c(d._id,d);let l=await P.screens.fetch(),f={};for(let d of l)d.workspaceAppId&&(f[d.workspaceAppId]||(f[d.workspaceAppId]=[]),f[d.workspaceAppId].push(d));for(let d of t){let p=f[d._id]||[];r[d._id]??={dependencies:[]},r[d._id].dependencies.push(...p.map(h=>({id:h._id,name:h.name,type:"screen"})));for(let h of p)c(d._id,h)}for(let d of Object.values(r).flatMap(p=>p.dependencies).filter(p=>p.type==="row_action")){let p=s.find(h=>h._id===d.id);if(p)for(let h of Object.values(p.actions)){if(r[d.id]?.dependencies.some(g=>g.id===h.automationId))continue;let m=e.find(g=>g._id===h.automationId);m&&(r[d.id]??={dependencies:[]},r[d.id].dependencies.push({id:m._id,name:m.name,type:"automation"}))}}return r}o(mor,"getResourcesInfo");async function gor(e){let t=F.getDB(F.getDevWorkspaceID(e),{skip_setup:!0});if(!await t.exists())throw new K("Destination workspace does not exist",400);return t}o(gor,"getDestinationDb");var yor={datasource:ti("datasource"),table:ti("ta"),row_action:ti("ra"),query:ti("query"),automation:ti("au"),workspace_app:ti("workspace_app"),screen:ti("screen")};function bM(e){return Object.entries(yor).find(([r,n])=>e.startsWith(n))?.[0]}o(bM,"getResourceType");function U3e(e){return e._id?bM(e._id)==="automation":!1}o(U3e,"isAutomation");function bor(e){return e._id?bM(e._id)==="workspace_app":!1}o(bor,"isWorkspaceApp");function _or(e){return e._id?bM(e._id)==="table":!1}o(_or,"isTable");var wor=new Set(["attachment","attachment_single","signature_single"]),Eor=o(e=>!!e?.type&&wor.has(e.type),"isAttachmentColumn"),Sor=o(e=>e.schema?Object.entries(e.schema).filter(([,t])=>Eor(t)).map(([t,r])=>({field:t,type:r.type})):[],"getAttachmentColumns"),Tor=o((e,t,r)=>{if(!e?.startsWith(`${t}/`)||t===r)return e;let n=e.slice(t.length);return`${r}${n}`},"buildDestinationAttachmentKey");async function vor(e,t,r){if(!e||e===t)return e;r.has(e)||r.set(e,(async()=>{try{if(await Se.objectExists(Nn.APPS,t))return t}catch(i){ke.logWarn("Resource duplication: failed to check attachment existence",{err:i,key:e,destinationKey:t})}try{let{stream:i,contentType:s}=await Se.getReadStream(Nn.APPS,e);return await Se.streamUpload({bucket:Nn.APPS,stream:i,filename:t,type:s}),t}catch(i){ke.logWarn("Resource duplication: failed to copy attachment",{err:i,key:e,destinationKey:t});return}})());let n=await r.get(e);return n===void 0&&r.delete(e),n}o(vor,"copyAttachmentToWorkspace");async function F3e(e,t){if(!e?.key||!t.sourceProdWorkspaceId||!t.destinationProdWorkspaceId||t.sourceProdWorkspaceId===t.destinationProdWorkspaceId)return e;let r=Tor(e.key,t.sourceProdWorkspaceId,t.destinationProdWorkspaceId);if(!r||r===e.key)return e;let n=await vor(e.key,r,t.cache);return n?{...e,key:n,url:""}:e}o(F3e,"remapAttachmentValue");async function Aor(e,t,r){if(!t.length)return;let n=e;for(let i of t){let s=n[i.field];if(s)if(i.type==="attachment"&&Array.isArray(s)){let a=[];for(let u of s){let c=await F3e(u,r);a.push(c)}n[i.field]=a}else(i.type==="attachment_single"||i.type==="signature_single")&&s&&(n[i.field]=await F3e(s,r))}}o(Aor,"remapRowAttachments");var yM=1e3,Ror=250,L9=3,Oor=o(e=>new Promise(t=>setTimeout(t,e)),"delay");async function Ior(e,t){let r=C.getWorkspaceDB(),n={include_docs:!0,limit:yM+(t?1:0)};t&&(n.startkey=t,n.skip=1);let s=(await r.allDocs(sn(e,null,n))).rows.map(c=>c.doc).filter(c=>!!c),a=s.length>yM?s.slice(0,yM):s,u=a.length===yM?a[a.length-1]._id:void 0;return{rows:a,nextStartAfter:u}}o(Ior,"fetchTableRowsPage");async function Cor(e,t){let r=(0,B3e.default)(t,Ror);for(let n of r){let i=n,s=0;for(;i.length&&s<L9;){s++;let a=await e.bulkDocs(i),u=[];if(a.forEach((c,l)=>{c.error&&u.push(i[l])}),!u.length)break;if(s>=L9)throw new Error(`Failed to copy ${u.length} row(s) after ${L9} attempts.`);await Oor(s*250),i=u}}}o(Cor,"bulkInsertRows");async function xor(e,t,r,n){if(!e.length)return;let i=F.getProdWorkspaceID(r),s=F.getProdWorkspaceID(n),a=new Map;for(let u of e){if(u.sourceId!==Un)continue;if(!!(await t.allDocs(sn(u._id,null,{include_docs:!1,limit:1}))).rows.length){ke.logWarn("Resource duplication: destination table already contains rows, skipping copy",{tableId:u._id,tableName:u.name});continue}let l=Sor(u),f;do{let{rows:d,nextStartAfter:p}=await Ior(u._id,f);if(f=p,!d.length)break;let h=[];for(let m of d){await Aor(m,l,{sourceProdWorkspaceId:i,destinationProdWorkspaceId:s,cache:a});let g={...m,fromWorkspace:r};delete g._rev,delete g.createdAt,delete g.updatedAt,h.push(g)}await Cor(t,h)}while(f)}}o(xor,"duplicateInternalTableRows");async function Dor(e,t,r){e=Array.from(new Set(e).keys());let n=await gor(t),i=await n.getMultiple(e,{allowMissing:!0}),s=new Set(i.map(p=>p._id)),a=e.filter(p=>!s.has(p)),u=await C.getWorkspaceDB().getMultiple(e,{allowMissing:!1}),c=u.filter(p=>p._id&&a.includes(p._id)),l=C.getWorkspaceId();if(!l)throw new Error("Could not get workspaceId");if(c.length&&await n.bulkDocs(c.map(p=>{let h={...p,fromWorkspace:l};return delete h._rev,delete h.createdAt,delete h.updatedAt,(U3e(h)||bor(h))&&(h.disabled=!0),U3e(h)&&(h.appId=t),h})),(r?.copyRows??!0)&&await xor(u.filter(_or),n,l,t),!c.length)return;let f=(await P.workspaces.metadata.tryGet())?.name||l,d=await C.doInContext(t,async()=>(await P.workspaces.metadata.tryGet())?.name||t);for(let p of c){let h,m;switch(bM(p._id)){case"automation":h=p.name,m="Automation";break;case"datasource":h=p.name||"Unknown",m="Datasource";break;case"query":h=p.name,m="Query";break;case"row_action":h=p._id,m="Row action";break;case"table":h=p.name,m="Table";break;case"screen":h=p.name||"Unkown",m="Screen";break;case"workspace_app":h=p.name,m="App";break;case void 0:throw new Error("Resource type could not be infered");default:throw new Error("Unreachable")}let y={id:p._id,name:h,type:m};await Oe.resource.duplicatedToWorkspace({resource:y,fromWorkspace:f,toWorkspace:d})}}o(Dor,"duplicateResourcesToWorkspace");var M9={};G(M9,{create:()=>Nor,deleteAll:()=>kor,deleteAllForDatasource:()=>Gor,docExists:()=>Mor,get:()=>q3e,getAll:()=>Lor,getAllForTable:()=>_M,getNames:()=>W3e,remove:()=>jor,run:()=>Wor,setTablePermission:()=>Uor,setViewPermission:()=>Bor,unsetTablePermission:()=>For,unsetViewPermission:()=>qor});async function Por(e,t,r){let n=await W3e(Object.values(e.actions));if(t=t.toLowerCase().trim(),Object.entries(n).find(([i,s])=>s.toLowerCase().trim()===t&&i!==r))throw new K("A row action with the same name already exists.",409)}o(Por,"ensureUniqueAndThrow");async function Nor(e,t){let r={name:t.name.trim()},n=C.getWorkspaceDB(),i=sk(e),s=await n.tryGet(i);s||(s={_id:i,actions:{}}),await Por(s,r.name);let a=C.getWorkspaceId();if(!a)throw new Error("Could not get the current appId");let u=`row_action${ce}${nt.newid()}`,c=await _u.create({name:r.name,appId:a,definition:{trigger:{id:"trigger",...Ve.triggers.definitions.ROW_ACTION,stepId:"ROW_ACTION",inputs:{tableId:e,rowActionId:u}},steps:[]}});return s.actions[u]={automationId:c._id,permissions:{table:{runAllowed:!0},views:{}}},await n.put(s),{id:u,name:c.name,...s.actions[u]}}o(Nor,"create");async function q3e(e,t){let n=(await _M(e))?.actions[t];if(!n)throw new K(`Row action '${t}' not found in '${e}'`,400);return n}o(q3e,"get");async function _M(e){let t=C.getWorkspaceDB(),r=sk(e);return await t.tryGet(r)}o(_M,"getAllForTable");async function Lor(){return(await C.getWorkspaceDB().allDocs(yt.getDocParams("ra",void 0,{include_docs:!0}))).rows.map(t=>t.doc)}o(Lor,"getAll");async function kor(e){let t=C.getWorkspaceDB(),r=await _M(e);if(!r)return;let n=Object.values(r.actions).map(s=>s.automationId),i=await t.getMultiple(n);for(let s of i)await P.automations.remove(s._id,s._rev);await t.remove(r)}o(kor,"deleteAll");async function Mor(e){let t=C.getWorkspaceDB(),r=sk(e);return await t.exists(r)}o(Mor,"docExists");async function IA(e,t,r){let n=await _M(e);if(!n?.actions[t])throw new K(`Row action '${t}' not found in '${e}'`,400);let s=await r(n);return await C.getWorkspaceDB().put(s),{id:t,...s.actions[t]}}o(IA,"updateDoc");async function j3e(e,t){let r;if(ln(t)&&(r=await P.views.get(t)),!r||r.tableId!==e)throw new K(`View '${t}' not found in '${e}'`,400)}o(j3e,"guardView");async function Uor(e,t){return await IA(e,t,async r=>(r.actions[t].permissions.table.runAllowed=!0,r))}o(Uor,"setTablePermission");async function For(e,t){return await IA(e,t,async r=>(r.actions[t].permissions.table.runAllowed=!1,r))}o(For,"unsetTablePermission");async function Bor(e,t,r){return await j3e(e,r),await IA(e,t,async n=>(n.actions[t].permissions.views[r]={runAllowed:!0},n))}o(Bor,"setViewPermission");async function qor(e,t,r){return await j3e(e,r),await IA(e,t,async n=>(delete n.actions[t].permissions.views[r],n))}o(qor,"unsetViewPermission");async function jor(e,t){return await IA(e,t,async r=>{let{automationId:n}=r.actions[t],i=await _u.get(n);return await _u.remove(i._id,i._rev),delete r.actions[t],r})}o(jor,"remove");async function Wor(e,t,r,n){let i=await P.tables.getTable(e);if(!i)throw new K("Table not found",404);let{automationId:s}=await q3e(e,t),a=await P.automations.get(s),u=await P.rows.find(e,r);await jc(a,{fields:{id:u._id,revision:u._rev,row:u,table:i},user:n,appId:C.getWorkspaceId()},{getResponses:!0})}o(Wor,"run");async function W3e(e){return(await P.automations.find(e.map(({automationId:n})=>n))).reduce((n,i)=>(n[i._id]=i.name,n),{})}o(W3e,"getNames");async function Gor(e){let r=(await P.tables.getAllTables()).filter(n=>n.sourceId===e);for(let n of Object.values(r))await P.rowActions.deleteAll(n._id)}o(Gor,"deleteAllForDatasource");var F9={};G(F9,{FIND_LIMIT:()=>U9,getRowsWithAttachments:()=>Vor});var U9=25;function $or(e,t,r){let n={selector:{$or:t.map(i=>({[i]:{$exists:!0}})),_id:{$regex:`^ro${St}${e}`}},limit:U9};return r&&(n.bookmark=r),n}o($or,"generateAttachmentFindParams");async function Vor(e,t){let r=F.getDB(e),n=[];for(let[u,c]of Object.entries(t.schema))(c.type==="attachment"||c.type==="attachment_single"||c.type==="signature_single")&&n.push(u);if(n.length===0)return{rows:[],columns:[]};let i,s=0,a=[];do{let u=$or(t._id,n,i),c=await r.find(u);i=c.bookmark,s=c.docs.length;let l=c.docs;a=a.concat(l)}while(s===U9);return{rows:a,columns:n}}o(Vor,"getRowsWithAttachments");var H9={};G(H9,{find:()=>isr,getAllInternalRows:()=>rsr,save:()=>nsr});var DA={};G(DA,{find:()=>Zor,getRow:()=>G9,save:()=>Xor});var V3e=U(require("lodash/fp/cloneDeep"));var W9={};G(W9,{bulkDestroy:()=>Yor,destroy:()=>zor,fetchEnrichedRow:()=>Jor,handleRequest:()=>Mi,patch:()=>Kor});var B9=U(require("dayjs")),xA=require("lodash"),$3e=require("lodash/fp");function Hor(e,t){let r=["string","longform","options","number"],n=Object.entries(t.schema).filter(s=>r.find(a=>a===s[1].type)).map(s=>s[0]),i=o(s=>{for(let[a,u]of Object.entries(s))n.find(c=>c===a)&&g$e(u)&&(s[a]=y$e(u))},"iterateObject");if(e.filters)for(let[s,a]of Object.entries(e.filters))typeof a!="object"||Object.keys(a).length===0||s==="oneOf"||i(a);return e.row&&i(e.row),e}o(Hor,"cleanupConfig");function CA(e,t){let{datasourceId:r,tableName:n}=wr(e);return{datasourceId:r,entityId:n,operation:t}}o(CA,"getEndpoint");function G3e(e){return e.relationshipType&&e.relationshipType.split("-")[0]==="one"}o(G3e,"isOneSide");function Qor(e){let t=e.autocolumn&&e.autoReason!=="foreign_key"&&e.subtype!=="autoID",r=e.type==="formula",n=e.type==="ai";return!(t||r||n)}o(Qor,"isEditableColumn");var wM=class e{static{o(this,"ExternalRequest")}static async for(t,r,n={}){if(!n.datasource)if(P.views.isView(r)){let i=await P.views.getTable(r.id);n.datasource=await P.datasources.get(i.sourceId)}else n.datasource=await P.datasources.get(r.sourceId);return new e(t,r,n.datasource)}get tables(){if(!this.datasource.entities)throw new Error("Datasource does not have entities");return this.datasource.entities}constructor(t,r,n){this.operation=t,this.source=r,this.datasource=n}prepareFilters(t,r,n){let i=n.primary,s=(0,$3e.cloneDeep)(t);if(r){let u=1,c=o(l=>{for(let[f,d]of Object.entries(l)){let p=P.rows.utils.isArrayFilter(f);for(let h of Object.keys(d||{}))if(F.removeKeyNumbering(h)==="_id"){if(i){let m=Ln(d[h]);if(i.length>1&&p)d._complexIdOperator={id:i,values:m[0]};else{for(let g of i)d[`${u}:${g}`]=m.shift();u++}}delete d[h]}}return Tt.recurseLogicalOperators(l,c)},"checkFilters");c(r)}if(!s||!n)return r;Array.isArray(s)||(s=Ln(s));let a={};if(i&&s)for(let u of i)a[u]=s.shift();return{equal:a}}async removeManyToManyRelationships(t,r){let n=this.prepareFilters(t,{},r);if(Object.keys(n).length!==0){let i=CA(r._id,"DELETE");await gu({endpoint:i,filters:n})}}async removeOneToManyRelationships(t,r,n){let i=r._id,s=this.prepareFilters(t,{},r);Object.keys(s).length!==0&&await gu({endpoint:CA(i,"UPDATE"),body:{[n]:null},filters:s})}getTable(t){if(!t)throw new Error("Table ID is unknown, cannot find table");let{tableName:r}=wr(t);return this.tables[r]}async getRow(t,r){let n=await gu({endpoint:CA(t._id,"READ"),filters:this.prepareFilters(r,{},t)});if(Array.isArray(n)&&n.length>0)return n[0];throw new Error(`Cannot fetch row by ID "${r}"`)}inputProcessing(t,r){if(!t)return{row:t,manyRelationships:[]};let n=r.primary[0],i={},s=[];for(let[a,u]of Object.entries(r.schema))if(!(t[a]===void 0||i[a])&&!(this.operation!=="BULK_UPSERT"&&!Qor(u)))if(u.type==="number"&&!isNaN(parseFloat(t[a])))i[a]=parseFloat(t[a]);else if(u.type==="link"){let{tableName:c}=wr(u.tableId);if(!c||!this.tables[c])continue;let f=this.tables[c].primary[0];if(G3e(u)){let d=t[a][0];d?(typeof t[a]=="string"&&(d=decodeURIComponent(t[a]).match(/\[(.*?)\]/)?.[1]),i[u.foreignKey||f]=Ln(d)[0]):(t[u.foreignKey||f]=null,i[u.foreignKey||f]=null)}else if(Kv(u)){let d=u.throughFrom||f,p=u.throughTo||n;for(let h of t[a])s.push({tableId:u.through||u.tableId,isUpdate:!1,key:u.fieldName,[d]:Ln(h)[0],[p]:`{{ literal ${n} }}`,relationshipType:"many-to-many"})}else for(let d of t[a])s.push({id:Ln(d)[0],tableId:u.tableId,isUpdate:!0,key:u.fieldName,[u.fieldName]:`{{ literal ${n} }}`,relationshipType:"many-to-one"})}else u.type==="datetime"&&u.timeOnly&&t[a]&&(0,B9.default)(t[a]).isValid()?i[a]=(0,B9.default)(t[a]).format("HH:mm"):i[a]=t[a];return{row:i,manyRelationships:s}}getLookupRelationsKey(t){return t.relationshipType==="many-to-many"?`${t.through}_${t.fieldName}`:t.fieldName}async lookupRelations(t,r){let n={},{tableName:i}=wr(t),s=this.tables[i],a=s.primary?.[0];for(let u of Object.values(s.schema)){if(u.type!=="link"||!u.fieldName||G3e(u))continue;let c,l,f;if(Kv(u)?(c=u.through,l=a,f=u.throughTo||a):JA(u)&&(c=u.tableId,l=u.foreignKey,f=u.fieldName),!c||!l||!f)throw new Error("Unable to lookup relationships - undefined column properties.");if(!l||!r?.[l])continue;let d=CA(c,"READ");if(!this.tables[d.entityId])throw new Error("unable to find related table");let h=await gu({endpoint:d,filters:{equal:{[f]:r[l]}}}),m=!Array.isArray(h)||NY(h)?[]:h,g=this.getLookupRelationsKey(u);n[g]={rows:m,isMany:Kv(u),tableId:c}}return n}async handleManyRelationships(t,r,n){let i=await this.lookupRelations(t,r);for(let a of n){let{key:u,tableId:c,isUpdate:l,id:f,relationshipType:d,...p}=a;if(!c)throw new Error("Table ID is unknown, cannot find table");let h=Iv(p,r,{}),m=this.getTable(c),g=m?.primary||[],y=g[0];if(!m||!y)return;let b=g[1],w=this.getLookupRelationsKey({relationshipType:d,fieldName:u,through:a.tableId}),E=i[w]?.rows||[],S=o(({row:O,linkPrimary:I,linkSecondary:D,relationshipType:x})=>{if(x==="many-to-many")return(0,xA.isEqual)((0,xA.omit)(O,[I]),(0,xA.omit)(h,[I]));let W=O[I]===a.id||O[I]===h?.[I];if(!W||!D)return W;let N=O[D]===h?.[D];return W&&N},"relationshipMatchPredicate"),T=E.find(O=>S({row:O,linkPrimary:y,linkSecondary:b,relationshipType:a.relationshipType})),R=l?"UPDATE":"CREATE",A=[];T?E.splice(E.indexOf(T),1):A.push(gu({endpoint:CA(c,R),body:h,filters:this.prepareFilters(f,{},m)})),await Promise.all(A)}let s=[];for(let[a,{isMany:u,rows:c,tableId:l}]of Object.entries(i)){let f=this.getTable(l);if(!(!f||!u&&f.primary&&f.primary.indexOf(a)!==-1))for(let d of c){let p=Uc(d,f);u?s.push(this.removeManyToManyRelationships(p,f)):s.push(this.removeOneToManyRelationships(p,f,a))}}await Promise.all(s)}async removeRelationshipsToRow(t,r){let n=await this.getRow(t,r),i=await this.lookupRelations(t._id,n),s=[];for(let a of Object.values(t.schema)){if(!Uf(a)||YA(a))continue;let u=this.getLookupRelationsKey(a);if(!i[u])continue;let{rows:c,isMany:l,tableId:f}=i[u],d=this.getTable(f);for(let p of c){let h=Uc(p,d);l?s.push(this.removeManyToManyRelationships(h,d)):s.push(this.removeOneToManyRelationships(h,d,a.fieldName))}}await Promise.all(s)}async run(t){let{operation:r}=this,n;P.views.isView(this.source)?n=await P.views.getTable(this.source.id):n=this.source;let i=Bf(this.datasource),{id:s,row:a,filters:u,sort:c,paginate:l,rows:f}=Hor(t,n);for(let R of Object.keys(c||{}))if(c?.[R])switch(n.schema[R]?.type){case"formula":delete c?.[R];break;case"number":c&&c[R]&&(c[R].type="number");break}u=this.prepareFilters(s,u||{},n);let d=S$e(n,this.tables),p=[];if(P.views.isView(this.source)){let R=de.views.calculationFields(this.source);for(let[A,O]of Object.entries(R))p.push({...O,name:A})}let h=p.length===0&&t.includeSqlRelationships===1,m=t.row,g=this.inputProcessing(a,n);a=g.row;let y=g.manyRelationships;if(!a&&f){y=[];for(let R=0;R<f.length;R++){let A=this.inputProcessing(f[R],n);f[R]=A.row,A.manyRelationships.length&&y.push(...A.manyRelationships)}}if(r==="DELETE"&&(u==null||Object.keys(u).length===0))throw"Deletion must be filtered";let b={endpoint:{datasourceId:this.datasource,entityId:n,operation:r},resource:{fields:i?await v$e(this.source,this.tables,{relationships:h}):[],aggregations:p},filters:u,sort:c,paginate:l,relationships:d,body:a||f,extra:{idFilter:this.prepareFilters(s||Uc(a,n),{},n)}};r==="DELETE"&&s&&await this.removeRelationshipsToRow(n,lk(s));let w=new P.rows.AliasTables(Object.keys(this.tables)),E;if(this.operation==="UPDATE"&&Object.keys(a||{}).length===0&&m?E=[m]:E=ie.SQL_ALIASING_DISABLE?await gu(b):await w.queryWithAliasing(await Lh(b),gu),this.operation==="COUNT")return iA(E);let S=Array.isArray(E)?E:[];r!=="READ"&&await this.handleManyRelationships(n._id||"",S[0],g.manyRelationships);let T=await _k(E,this.source,this.tables,d);return r==="READ"?{rows:Array.isArray(T)?T:[T],rawResponseSize:S.length}:{row:T[0],table:n}}};var j9=require("lodash");async function Mi(e,t,r){return(await wM.for(e,t,{datasource:r?.datasource})).run(r||{})}o(Mi,"handleRequest");async function Kor(e){let t=await Bc(e),{viewId:r,tableId:n}=ei(e),i=r||n;P.views.isView(t)&&de.views.isCalculationView(t)&&e.throw(400,"Cannot update rows through a calculation view");let s=await Ih(t),{_id:a,...u}=e.request.body,c=await P.rows.external.getRow(s._id,a,{relationships:!0}),l=(0,j9.cloneDeep)(c),f=V$e(t);for(let b of Object.keys(u))f.includes(b)&&(l[b]=u[b]);l=await ba(e.user?._id,(0,j9.cloneDeep)(t),l);let d=await P.rows.utils.validate({row:l,source:t});if(!d.valid)throw{validation:d.errors};let p=await Mi("UPDATE",t,{id:Ln(a),row:l}),h=Uc({...c,...l},s)||a,m=await P.rows.external.getRow(i,h,{relationships:!0}),[g,y]=await Promise.all([Jt(t,m,{squash:!0,preserveLinks:!0}),Jt(t,c,{squash:!0,preserveLinks:!0})]);return{...p,row:g,table:s,oldRow:y}}o(Kor,"patch");async function zor(e){let t=await Bc(e);if(P.views.isView(t)&&de.views.isCalculationView(t))throw new K("Cannot delete rows through a calculation view",400);let r=e.request.body._id,{row:n}=await Mi("DELETE",t,{id:Ln(r),includeSqlRelationships:0});return{response:{ok:!0,id:r},row:n}}o(zor,"destroy");async function Yor(e){let{rows:t}=e.request.body,r=await Bc(e),n=[];for(let a of t)n.push(Mi("DELETE",r,{id:Ln(a._id),includeSqlRelationships:0}));let s=(await Promise.all(n)).map(a=>a.row).filter(a=>a&&a._id);return{response:{ok:!0},rows:s}}o(Yor,"bulkDestroy");async function Jor(e){let t=e.params.rowId,r=await Bc(e),{tableId:n}=ei(e),{datasourceId:i,tableName:s}=wr(n),a=await P.datasources.get(i);(!a||!a.entities)&&e.throw(400,"Datasource has not been configured for plus API.");let u=a.entities,c=await Mi("READ",r,{id:t,datasource:a,includeSqlRelationships:1}),l=u[s],f=c.rows[0];for(let[d,p]of Object.entries(l.schema)){if(p.type!=="link"||!f[d]||f[d].length===0)continue;let h=f[d],m=p.tableId,g=wr(m).tableName,y=u[g],b=h.map(S=>Ln(S._id)[0]),w=y.primary?.[0],E=await Mi("READ",y,{tables:u,filters:{oneOf:{[w]:b}},includeSqlRelationships:1});f[d]=await Jt(y,E.rows,{squash:!0,preserveLinks:!0})}return f}o(Jor,"fetchEnrichedRow");async function G9(e,t,r){let n;return typeof e=="string"?ln(e)?n=await P.views.get(e):n=await P.tables.getTable(e):n=e,((await Mi("READ",n,{id:Ln(t),includeSqlRelationships:r?.relationships?1:0}))?.rows||[])[0]}o(G9,"getRow");async function Xor(e,t,r){let{tableId:n,viewId:i}=kh(e),s;if(i?s=await P.views.get(i):s=await P.tables.getTable(n),P.views.isView(s)&&de.views.isCalculationView(s))throw new K("Cannot insert rows through a calculation view",400);let a=await ba(r,(0,V3e.default)(s),t),u=await P.rows.utils.validate({row:a,source:s});if(!u.valid)throw{validation:u.errors};let c=await Mi("CREATE",s,{row:a}),l=c.row._id;if(l){let f=await G9(s,l,{relationships:!0});return{...c,row:await Jt(s,f,{preserveLinks:!0,squash:!0})}}else return c}o(Xor,"save");async function Zor(e,t){let{tableId:r,viewId:n}=kh(e),i;n?i=await P.views.get(n):i=await P.tables.getTable(r);let s=await G9(i,t,{relationships:!0});if(!s)throw new K("Row not found",404);return await Jt(i,s,{squash:!0,preserveLinks:!0})}o(Zor,"find");var V9={};G(V9,{find:()=>tsr,findRow:()=>PA,save:()=>esr});async function $9(e){let t=await O$e(e),r;delete t._id,delete t._rev;try{r=await C.getWorkspaceDB().get(e),delete r.csrfToken}catch{}return{...r,...t,roleId:t.roleId||Et.BUILTIN_ROLE_IDS.PUBLIC,tableId:Vt.USER_METADATA,_id:e}}o($9,"getFullUser");async function esr(e,t,r,n){let{tableId:i,viewId:s}=kh(e);t.tableId=i;let a,u;if(s?(a=await P.views.get(s),u=await P.views.getTable(s)):(a=await P.tables.getTable(i),u=a),P.views.isView(a)&&de.views.isCalculationView(a))throw new K("Cannot insert rows through a calculation view",400);!t._rev&&!t._id&&(t._id=F.generateRowID(t.tableId));let c=await ba(r,a,t),l=await P.rows.utils.validate({row:c,source:a});if(!l.valid)throw{validation:l.errors};return c=await ya({eventType:"row:save",row:c,tableId:c.tableId,table:u}),sA(a,c,{updateFormula:!0,updateAIColumns:n?.updateAIColumns||!0})}o(esr,"save");async function tsr(e,t){let r=await XJ(e);return await Jt(r,await PA(e,t),{squash:!0})}o(tsr,"find");async function PA(e,t){let{tableId:r}=kh(e),n=C.getWorkspaceDB(),i;if(r===Vt.USER_METADATA?i=await $9(t):i=await n.get(t),i.tableId!==r)throw"Supplied tableId does not match the rows tableId";return i}o(PA,"findRow");async function rsr(e){let t;return e?t=F.getDB(e):t=C.getWorkspaceDB(),(await t.allDocs(sn(null,null,{include_docs:!0}))).rows.map(n=>n.doc)}o(rsr,"getAllInternalRows");function H3e(e){let t=e;return ln(e)&&(t=Zr(e)),Mt(t)?DA:V9}o(H3e,"pickApi");async function nsr(e,t,r,n){return H3e(e).save(e,t,r,n)}o(nsr,"save");async function isr(e,t){return H3e(e).find(e,t)}o(isr,"find");var rX={};G(rX,{exportRows:()=>Rsr,fetch:()=>Osr,fetchLegacyView:()=>Csr,fetchRaw:()=>Isr,isValidFilter:()=>b$e,search:()=>Asr});var X9={};G(X9,{exportRows:()=>gsr,fetch:()=>oQe,fetchLegacyView:()=>J9,fetchRaw:()=>Y9,sqs:()=>NA});var NA={};G(NA,{buildInternalFieldList:()=>K9,search:()=>nQe});var J3e=U(require("dd-trace")),X3e=require("lodash"),Z3e=U(require("lodash/pick"));var Q3e=require("lodash");var osr=["CREATE","UPDATE","DELETE"],ssr=["mysql2","mssql","oracledb"],asr=["CREATE_TABLE","UPDATE_TABLE","DELETE_TABLE"],Q9=class e{static{o(this,"CharSequence")}static{this.alphabet="abcdefghijklmnopqrstuvwxyz"}constructor(){this.counters=[0]}getCharacter(){let t=this.counters.map(r=>e.alphabet[r]).join("");for(let r=this.counters.length-1;r>=0;r--){if(this.counters[r]<e.alphabet.length-1)return this.counters[r]++,t;this.counters[r]=0}return this.counters.unshift(0),t}},Bh=class{static{o(this,"AliasTables")}constructor(t){this.tableNames=t,this.aliases={},this.tableAliases={},this.charSeq=new Q9}isAliasingEnabled(t,r){let n=t.resource?.fields?.length;if(!n||n<=0||asr.includes(t.operation))return!1;if(!r)return!0;try{let i=JJ(r),s=osr.includes(t.operation),a=ssr.includes(i);if(s&&a)return!1}catch{return!1}return!0}getAlias(t){if(typeof t=="object"&&(t=t.name),this.aliases[t])return this.aliases[t];let r=this.charSeq.getCharacter();return this.aliases[t]=r,this.tableAliases[r]=t,r}aliasField(t){let r=this.tableNames;if(t.includes(".")){let[n,...i]=t.split("."),s=i.join("."),a=r.find(u=>{let c=n.indexOf(u);if(c===-1||c>1)return;let l=c*2;return Math.abs(n.length-u.length)<=l});a&&(t=`${n.replace(a,this.getAlias(a))}.${s}`)}return t}reverse(t){let r=new Map,n=o(i=>{let s={};for(let a of Object.keys(i)){let u=r.get(a);if(!u){let c=a.indexOf(".");if(c===-1)u=a;else{let l=a.slice(0,c),f=a.slice(c+1);u=`${this.tableAliases[l]||l}.${f}`}r.set(a,u)}s[u]=i[a]}return s},"process");return Array.isArray(t)?t.map(i=>n(i)):n(t)}aliasMap(t){let r={};for(let n of t)n&&(r[n]=this.getAlias(n));return r}async queryWithAliasing(t,r){let n=t.datasource,i=n===void 0,s;if(i?s=this.isAliasingEnabled(t):s=this.isAliasingEnabled(t,n),s){if(t=(0,Q3e.cloneDeep)(t),t.resource?.fields&&(t.resource.fields=t.resource.fields.map(c=>this.aliasField(c))),t.filters){let c=o(l=>{for(let[f,d]of Object.entries(l)){if(typeof d!="object")continue;let p={};for(let h of Object.keys(d))p[this.aliasField(h)]=d[h];l[f]=p}return Tt.recurseLogicalOperators(l,c)},"aliasFilters");t.filters=c(t.filters)}t.relationships&&(t.relationships=t.relationships.map(c=>({...c,aliases:this.aliasMap([c.through,c.tableName,t.table.name])}))),this.getAlias(t.table);for(let c of Object.keys(t.tables))this.getAlias(c);let u={};for(let[c,l]of Object.entries(this.tableAliases))u[l]=c;t.tableAliases=u}let a=await r(t);return Array.isArray(a)&&s?this.reverse(a):a}};function usr(e,t,r){if(t){for(let n of Object.values(t))if(typeof n=="object")for(let[i,s]of Object.entries(n))i.endsWith(e)&&(n[i]=r(s))}}o(usr,"findColumnInQueries");function K3e(e,t){usr(e,t,r=>{let n=Array.isArray(r);if(!(typeof r=="string")&&!n)return r;let s=o(a=>{let u="ro"+ce;return a.startsWith(u)?F.getGlobalIDFromUserMetadataID(a):a},"processString");return n?r.map(a=>typeof a=="string"?s(a):a):s(r)})}o(K3e,"userColumnMapping");function EM(e,t){for(let[r,n]of Object.entries(e.schema||{}))switch(n.type){case"bb_reference_single":{let i=n.subtype;switch(i){case"user":K3e(r,t);break;default:Fe.unreachable(i)}break}case"bb_reference":{K3e(r,t);break}}return Tt.recurseLogicalOperators(t,r=>EM(e,r))}o(EM,"checkFilters");function z3e(e,t){return t.query&&(t.query=EM(e,t.query)),t}o(z3e,"searchInputMapping");function SM(e){for(let t of Object.values(e)){if(typeof t!="object")continue;if(Object.keys(t).find(n=>F.removeKeyNumbering(n)==="_id"&&t[n]))return!0}return!1}o(SM,"isSearchingByRowID");var eQe=new ze.Sql("sqlite3"),csr=2e3,tQe=new RegExp("no such column: .+"),lsr=new RegExp("no such table: .+"),fsr=new RegExp("duplicate column name: .+");async function K9(e,t,r){let{relationships:n,allowedFields:i,includeHiddenFields:s}=r||{},a=[],u=P.views.isView(e),c;u?c=await P.views.getTable(e.id):c=e,u?a=Object.keys(de.views.basicFields(e)):a=Object.keys(e.schema).filter(p=>s||e.schema[p].visible!==!1);let l=a.some(p=>c.schema[p]?.type==="formula");l?a=Object.keys(c.schema):i&&(a=a.filter(p=>i.includes(p)));let f=[],d=o((p,h)=>{let m=[];return h.forEach(g=>{m.push(`${Mf(c._id,p._id)}.${g}`)}),m},"getJunctionFields");if(P.tables.isTable(e))for(let p of Tn)i&&!i.includes(p)||f.push(`${c._id}.${p}`);for(let p of a){let h=c.schema[p];if(!h)continue;let m=h.type==="link";if(!(!n&&m))if(!m)f.push(`${c._id}.${bu(p)}`);else{let g=h,y=t.find(w=>w._id===g.tableId);if(!y)continue;let b=(await K9(y,t,{includeHiddenFields:l})).concat(d(y,["doc1.fieldName","doc2.fieldName"]));if(b.length+f.length>csr)break;f=f.concat(b)}}if(!u||!de.views.isCalculationView(e))for(let p of Tn)f.push(`${c._id}.${p}`);return[...new Set(f)]}o(K9,"buildInternalFieldList");function dsr(e,t){let r={};for(let a of t)for(let u of Object.keys(a.schema))zf(u)||(r[u]=bu(u));let n=o(a=>zf(a)?!1:t.some(u=>u.schema[a]),"keyInAnyTable"),i=new Tt.ColumnSplitter(t),s=o(a=>{for(let u of Object.keys(a))if($c(u))for(let c of a[u].conditions)s(c);else{let c=a[u];if(typeof c!="object")continue;for(let l of Object.keys(c)){let{numberPrefix:f,relationshipPrefix:d,column:p}=i.run(l);n(p)&&(c[`${f||""}${d||""}${bu(p)}`]=c[l],delete c[l])}}},"prefixFilters");return s(e),e}o(dsr,"cleanupFilters");function rQe(e,t){let r=Tb.length;return e.map(n=>{let i={};for(let s of Object.keys(n)){t?.schema[s]?.type==="link"&&typeof n[s]=="string"&&(n[s]=rQe(JSON.parse(n[s])));let a=s.indexOf(Tb);if(a!==-1){let u=s.slice(0,a)+s.slice(a+r),c=de.schema.decodeNonAscii(u);i[c]=n[s]}else i[s]=n[s]}return i})}o(rQe,"reverseUserColumnMapping");async function Y3e(e,t,r,n){let i=r.map(c=>c.through),s=new Bh(t.map(c=>c._id).concat(i));n?.countTotalRows&&(e.operation="COUNT");let a=o(async c=>{let l=eQe._query(c,{disableReturning:!0});if(Array.isArray(l))throw new Error("SQS cannot currently handle multiple queries");let f=l.sql,d=l.bindings,p=o(m=>["doc1","doc2"].forEach(g=>{f=f.replaceAll(`\`${g}\`.\`${m}\``,`\`${g}.${m}\``)}),"fixJunctionDocs");if(p("rowId"),p("fieldName"),Array.isArray(l))throw new Error("SQS cannot currently handle multiple queries");let h=C.getWorkspaceDB();return await J3e.default.trace("sqs.runSqlQuery",async m=>(m?.addTags({sql:f}),await h.sql(f,d)))},"processSQLQuery"),u=await s.queryWithAliasing(e,a);return n?.countTotalRows?iA(u):Array.isArray(u)?rQe(u,e.table):u}o(Y3e,"runSqlQuery");function psr(e,t){return e===400&&t?.match(lsr)||e===400&&t?.match(tQe)||e===400&&t?.match(fsr)||e===404&&t?.includes(Fn)}o(psr,"resyncDefinitionsRequired");async function nQe(e,t,r){let{paginate:n,query:i,...s}=(0,X3e.cloneDeep)(e),a;P.views.isView(t)?a=await P.views.getTable(t.id):a=t;let u=await P.tables.getAllInternalTables(),c=u.reduce((g,y)=>(g[y._id]=y,g),{});if(a._id&&(a=c[a._id]),!a)throw new Error("Unable to find table");let l=T$e(a,u),f={...dsr(i,u),documentType:"ro"},d=[];if(P.views.isView(t)&&de.views.isCalculationView(t)){let g=de.views.calculationFields(t);for(let[y,b]of Object.entries(g))e.fields&&!e.fields.includes(y)||(b.calculationType==="count"?"distinct"in b&&b.distinct?d.push({name:y,distinct:!0,field:bu(b.field),calculationType:b.calculationType}):d.push({name:y,calculationType:b.calculationType,field:bu(b.field)}):d.push({name:y,field:bu(b.field),calculationType:b.calculationType}))}let p={endpoint:{datasourceId:sl,entityId:a._id,operation:"READ"},filters:f,meta:{columnPrefix:Tb,sqliteUseLikeWithoutLower:!0},resource:{fields:await K9(t,u,{relationships:l,allowedFields:e.fields}),aggregations:d},relationships:l};if(s.sort){let g=a.schema[s.sort];if(d.some(b=>b.name===s.sort))p.sort={[s.sort]:{direction:s.sortOrder||"ascending",type:"number"}};else if(g){let w=(LM(g)?g.responseType:g.type)==="number"?"number":"string";p.sort={[bu(g.name)]:{direction:s.sortOrder||"ascending",type:w}}}else throw new Error(`Unable to sort by ${s.sort}`)}if(s.bookmark&&typeof s.bookmark!="number")throw new Error("Unable to paginate with string based bookmarks");let h=s.bookmark||0;!SM(f)&&s.limit&&(n=!0,p.paginate={limit:s.limit+1,offset:h});let m=await Lh(p);try{let[g,y]=await Promise.all([Y3e(m,u,l),e.countRows?Y3e(m,u,l,{countTotalRows:!0}):Promise.resolve(void 0)]),b=eQe.convertJsonStringColumns(a,await _k(g,t,c,l,{sqs:!0})),w=!1;n&&s.limit&&g.length>s.limit&&(w=!0,b.length>s.limit&&b.pop());let E=await Jt(t,b,{preserveLinks:!0,squash:!0}),T=[...e.fields||Object.keys(t.schema||{}).filter(A=>t.schema?.[A].visible!==!1),...Tn];E=E.map(A=>(0,Z3e.default)(A,T));let R={rows:E};return y!=null&&(R.totalRows=y),n&&w&&(R.hasNextPage=!0,R.bookmark=h+b.length),n&&!w&&(R.hasNextPage=!1),R}catch(g){let y=typeof g=="string"?g:g.message;if(!r?.retrying&&psr(g.status,y))return await Oi.doWithLock({type:"auto_extend",name:"sys_sync_definitions",resource:C.getWorkspaceId()},P.tables.sqs.syncDefinition),nQe(e,t,{retrying:!0});if(g.status===400&&y?.match(tQe))return{rows:[]};throw new Error(`Unable to search by SQL - ${y}`,{cause:g})}}o(nQe,"search");var hsr=F.getPouch({inMemory:!0});async function iQe(view,calculation,group,data){let db=new hsr(nt.newid());try{await db.bulkDocs(data.map(e=>({...e,_rev:void 0})));let fn=o((e,t)=>t(e._id),"fn");eval("fn = "+view?.map?.replace("function (doc)","function (doc, emit)"));let queryFns={meta:view.meta,map:fn};view.reduce&&(queryFns.reduce=view.reduce);let response=await db.query(queryFns,{include_docs:!calculation,group:!!group});for(let e of response.rows){if(!e._rev||!e._id)continue;let t=data.find(r=>r._id===e._id);t&&(e._rev=t._rev)}return response}finally{await db.destroy(),await F.closePouchDB(db)}}o(iQe,"runView");async function gsr(e){let{tableId:t,format:r,rowIds:n,columns:i,query:s,sort:a,sortOrder:u,delimiter:c,customHeaders:l}=e,f=C.getWorkspaceDB(),d=await P.tables.getTable(t),p=[];if(n){let b=(await f.allDocs({include_docs:!0,keys:n.map(w=>{let E=Ln(w);if(E.length>1)throw new K("Export data does not support composite keys.",400);return E[0]})})).rows.map(w=>w.doc);p=await Jt(d,b)}else p=(await P.rows.search({tableId:t,query:s||{},sort:a,sortOrder:u})).rows;let h=[],m=d.schema,g;if(p=wsr(p,m),i&&i.length){for(let b=0;b<p.length;b++){h[b]={};for(let w of i)h[b][w]=p[b][w]}g=i}else h=p;let y=P.rows.utils.cleanExportRows(h,m,r,i,l);if(r==="csv")return{fileName:"export.csv",content:Uk(g??Object.keys(h[0]),y,c,l)};if(r==="json")return{fileName:"export.json",content:Fk(y)};if(r==="jsonWithSchema")return{fileName:"export.json",content:Bk(m,y)};throw"Format not recognised"}o(gsr,"exportRows");async function oQe(e){let t=await ysr(e),r=await Y9(e);return await Jt(t,r)}o(oQe,"fetch");async function ysr(e){try{return await P.tables.getTable(e)}catch(t){if(t.status!==404)throw t;let i=await bsr(e);if(!i)throw t;return i}}o(ysr,"getTableForFetch");async function bsr(e){let t=C.getWorkspaceId();if(!t||!Lf(t))return;let r=C.getDevWorkspaceId();return await C.doInWorkspaceContext(r,async()=>{if(await P.tables.doesTableExist(e))return await P.tables.getTable(e)})}o(bsr,"getDevTableWhenProdMissing");async function Y9(e,t){let r=C.getWorkspaceDB(),n;return e===Vt.USER_METADATA?n=await P.users.fetchMetadata():n=(await r.allDocs(sn(e,null,{include_docs:!0,limit:t}))).rows.map(s=>s.doc),n}o(Y9,"fetchRaw");async function J9(e,t){if(e.startsWith("ta"))return oQe(e);let r=C.getWorkspaceDB(),{calculation:n,group:i,field:s}=t,a=await _sr(r,e),u;if(ie.SELF_HOSTED)u=await r.query(`database/${e}`,{include_docs:!n,group:!!i});else{let l=a.meta.tableId,f=await Y9(l);u=await iQe(a,n,!!i,f)}let c=[];if(!n){u.rows=u.rows.map(f=>f.doc);let l;try{l=await P.tables.getTable(a.meta.tableId)}catch{throw new Error("Unable to retrieve view table.")}c=await Jt(l,u.rows)}return n===z9.STATS&&(u.rows=u.rows.map(l=>({group:l.key,field:s,...l.value,avg:l.value.sum/l.value.count})),c=u.rows),(n===z9.COUNT||n===z9.SUM)&&(c=u.rows.map(l=>({group:l.key,field:s,value:l.value}))),c}o(J9,"fetchLegacyView");var z9={SUM:"sum",COUNT:"count",STATS:"stats"};async function _sr(e,t){let r=ie.SELF_HOSTED?n7:i7,n=ie.SELF_HOSTED?i7:n7,i=ie.SELF_HOSTED?dHe:fHe,s,a=!1;try{s=await r(e,t)}catch(u){u.status!==404?s=null:(s=await n(e,t),a=!!s)}if(a&&await i(e,t),!s)throw"View does not exist.";return s}o(_sr,"getView");function wsr(e,t){let r=["_id",...Object.keys(t)];return e.map(i=>Object.keys(i).filter(s=>r.includes(s)).reduce((s,a)=>({...s,[a]:i[a]}),{}))}o(wsr,"trimFields");var Z9={};G(Z9,{exportRows:()=>Ssr,fetch:()=>Tsr,fetchRaw:()=>vsr,search:()=>TM});var sQe=U(require("lodash/pick"));function Esr(e,t,r,n){let i;if(!SM(e)){if(t&&!n)throw new Error("Cannot paginate query without a limit");return t&&n?(i={limit:n+1},r&&(i.offset=r)):n&&(i={limit:n}),i}}o(Esr,"getPaginationAndLimitParameters");async function TM(e,t){let{countRows:r,paginate:n,query:i,...s}=e,{limit:a}=s,u=s.bookmark&&parseInt(s.bookmark)||void 0;n&&!u&&(u=0);let c=Esr(i,n,u,a),l;if(s.sort){let f=s.sortOrder==="descending"?"descending":"ascending";l={[s.sort]:{direction:f}}}if(i?.oneOf?._id){let f=i.oneOf._id;i.oneOf._id=f.map(d=>Ln(d)[0])}try{let f={filters:i,sort:l,paginate:c,includeSqlRelationships:1},[{rows:d,rawResponseSize:p},h]=await Promise.all([Mi("READ",t,f),r?Mi("COUNT",t,f):Promise.resolve(void 0)]),m=await Jt(t,d,{preserveLinks:!0,squash:!0}),g=!1;n&&a&&p>a&&(g=!0,m.length>a&&m.pop());let b=[...e.fields||Object.keys(t.schema||{}).filter(E=>t.schema?.[E].visible!==!1),...Rs];m=m.map(E=>(0,sQe.default)(E,b));let w={rows:m,hasNextPage:g};return g&&u!=null&&(w.bookmark=u+m.length),h!=null&&(w.totalRows=h),n&&!g&&(w.hasNextPage=!1),w}catch(f){throw f.message&&f.message.includes("does not exist")?new Error(`Table updated externally, please re-fetch - ${f.message}`,{cause:f}):f}}o(TM,"search");async function Ssr(e){let{tableId:t,format:r,columns:n,rowIds:i,query:s,sort:a,sortOrder:u,delimiter:c,customHeaders:l}=e;if(!t)throw new K("No table ID for search provided.",400);let{datasourceId:f,tableName:d}=wr(t),p={};i?.length?p={oneOf:{_id:i.map(R=>{let A=Ln(R);return A.length>1?A:A[0]})}}:p=s||{};let h=await P.datasources.get(f),m=await P.tables.getTable(t);if(!h||!h.entities)throw new K("Datasource has not been configured for plus API.",400);let g=await TM({tableId:m._id,query:p,sort:a,sortOrder:u},m),y=[],b;if(n&&n.length){for(let R=0;R<g.rows.length;R++){y[R]={};for(let A of n)y[R][A]=g.rows[R][A]}b=n}else y=g.rows;let w=h.entities[d].schema,E=P.rows.utils.cleanExportRows(y,w,r,n,l),S;switch(r){case"csv":S=Uk(b??Object.keys(w),E,c,l);break;case"json":S=Fk(E);break;case"jsonWithSchema":S=Bk(w,E);break;default:throw Fe.unreachable(r)}return{fileName:`export.${r}`,content:S}}o(Ssr,"exportRows");async function Tsr(e){let t=await P.tables.getTable(e),r=await Mi("READ",t,{includeSqlRelationships:1});return await Jt(t,r.rows,{preserveLinks:!0,squash:!0})}o(Tsr,"fetch");async function vsr(e,t){let r=await P.tables.getTable(e),n;return t&&(n={limit:t}),(await Mi("READ",r,{includeSqlRelationships:1,paginate:n})).rows}o(vsr,"fetchRaw");var uQe=U(require("dd-trace"));var eX=o((e,t)=>{t=t.map(r=>r.toLowerCase());for(let r of Object.keys(e||{}))if($c(r)){let n=e[r];if(!n)continue;for(let i of n.conditions)eX(i,t)}else{let n=e[r];if(!n||typeof n!="object")continue;for(let i of Object.keys(n))if(!t.includes(i.toLowerCase())&&!t.includes(F.removeKeyNumbering(i).toLowerCase()))throw new K(`Invalid filter field: ${i}`,400)}},"validateFilters"),aQe=o(async(e,t)=>{let r=o(async(i,s,a,u)=>{let c=[];y7({table:i})&&c.push("_id");for(let l of Object.keys(i.schema).filter(f=>s.includes(f)&&i.schema[f].visible!==!1)){let f=i.schema[l],d=f.type==="link";if(!(d&&(u?.noRelationships||a.includes(f.tableId))))if(d)try{let p=await P.tables.getTable(f.tableId),h=await r(p,Object.keys(p.schema),[...a,f.tableId],{noRelationships:!0});c.push(...h.flatMap(m=>[`${f.name}.${m}`,`${p.name}.${m}`]))}catch(p){if(p.status!==404)throw p}else c.push(l)}return c},"extractTableFields"),n=["_id"];return t==null&&(t=Object.keys(e.schema)),n.push(...await r(e,t,[e._id])),Array.from(new Set(n))},"getQueryableFields");function tX(e){return Mt(e)?Z9:X9}o(tX,"pickApi");async function Asr(e,t){return await uQe.default.trace("search",async r=>{r?.addTags({tableId:e.tableId,viewId:e.viewId,query:e.query,sort:e.sort,sortOrder:e.sortOrder,sortType:e.sortType,limit:e.limit,bookmark:e.bookmark,paginate:e.paginate,fields:e.fields,countRows:e.countRows});let n,i;if(e.viewId)n=await P.views.get(e.viewId),i=await P.views.getTable(n);else if(e.tableId)n=await P.tables.getTable(e.tableId),i=n;else throw new Error("Must supply either a view ID or a table ID");let s=Mt(i._id);if(e.query){let u=(e.fields||Object.keys(i.schema)).filter(l=>i.schema[l]?.visible!==!1),c=await aQe(i,u);eX(e.query,c)}else e.query={};if(t&&(e.query=await Ch(e.query,t)),e=z3e(i,e),e.viewId){let c=await Ch(n.query||{},t);Array.isArray(c)&&(c=Tt.buildQuery(c)),c=EM(i,c);let l=c?[c]:[];e.query={$and:{conditions:[...l,e.query]}},c.onEmptyFilter&&(e.query.onEmptyFilter=c.onEmptyFilter)}if(e.query=Tt.cleanupQuery(e.query),e.query=Tt.fixupFilterArrays(e.query),r.addTags({cleanedQuery:e.query}),!Tt.hasFilters(e.query)&&e.query.onEmptyFilter==="none")return r.addTags({emptyQuery:!0}),{rows:[]};e.sortOrder&&(e.sortOrder=e.sortOrder.toLowerCase());let a;return s?(r?.addTags({searchType:"external"}),a=await TM(e,n)):(r?.addTags({searchType:"sqs"}),a=await NA.search(e,n)),r.addTags({foundRows:a.rows.length,totalRows:a.totalRows}),a})}o(Asr,"search");async function Rsr(e){return tX(e.tableId).exportRows(e)}o(Rsr,"exportRows");async function Osr(e){return tX(e).fetch(e)}o(Osr,"fetch");async function Isr(e,t){return tX(e).fetchRaw(e,t)}o(Isr,"fetchRaw");async function Csr(e,t){return J9(e,t)}o(Csr,"fetchLegacyView");var cQe={...F9,...H9,...rX,utils:ZJ,external:DA,AliasTables:Bh};var nX={};G(nX,{create:()=>Dsr,ensureHomepageUniqueness:()=>Nsr,fetch:()=>xsr,update:()=>Psr});async function xsr(e=C.getWorkspaceDB()){let t=(await e.allDocs(LGe(null,{include_docs:!0}))).rows.map(n=>n.doc),r=t.filter(n=>!n.workspaceAppId);if(r.length){let n=await P.workspaceApps.fetch(),i=n.find(s=>s.isDefault)||n[0];i&&r.forEach(s=>{s.workspaceAppId=i._id})}return t}o(xsr,"fetch");async function Dsr(e){let r=await C.getWorkspaceDB().put({...e,_id:NGe()});return{...e,_id:r.id,_rev:r.rev}}o(Dsr,"create");async function Psr(e){let r=await C.getWorkspaceDB().put(e);return{...e,_rev:r.rev}}o(Psr,"update");async function Nsr(e){let n=(await P.screens.fetch()).filter(i=>i._id!==e._id&&i.workspaceAppId===e.workspaceAppId).filter(i=>i.routing.homeScreen&&i.routing.roleId===e.routing.roleId);if(n.length)for(let i of n)i.routing.homeScreen=!1,await P.screens.update(i)}o(Nsr,"ensureHomepageUniqueness");var iX={};G(iX,{create:()=>Usr,duplicate:()=>Fsr,fetch:()=>fQe,get:()=>dQe,getMatchedWorkspaceApp:()=>jsr,remove:()=>qsr,update:()=>Bsr});async function lQe(e,t){if((await fQe()).find(n=>n.name===e&&n._id!==t))throw new K(`App with name '${e}' is already taken.`,400)}o(lQe,"guardName");var Lsr=o(async(e,t)=>{let n=(await P.screens.fetch()).filter(s=>s.workspaceAppId===e),i=[];for(let s=0;s<n.length;s++){let a=n[s],u=await P.screens.create({layoutId:a.layoutId,showNavigation:a.showNavigation,width:a.width,routing:a.routing,props:a.props,name:a.name,pluginAdded:a.pluginAdded,onLoad:a.onLoad,variant:a.variant,workspaceAppId:t});i.push(u)}return i},"duplicateScreens"),ksr=o(async e=>{let t=await P.workspaceApps.fetch(),r=de.duplicateName(e.name,t.map(i=>i.name)),n={name:r,url:`/${Msr(r)}`,disabled:!0,navigation:e.navigation,isDefault:!1};return P.workspaceApps.create(n)},"createDuplicatedApp"),Msr=o(e=>e.toLowerCase().replaceAll(" ","-"),"slugify");async function fQe(e=C.getWorkspaceDB()){return(await e.allDocs(yt.getWorkspaceAppParams(null,{include_docs:!0}))).rows.map(n=>({...n.doc,_id:n.doc._id,_rev:n.doc._rev}))}o(fQe,"fetch");async function dQe(e){return await C.getWorkspaceDB().tryGet(e)}o(dQe,"get");async function Usr(e){let t=C.getWorkspaceDB();return await lQe(e.name),(await t.put({...e,_id:yt.generateWorkspaceAppID()},{returnDoc:!0})).doc}o(Usr,"create");async function Fsr(e){let t=await ksr(e);return await Lsr(e._id,t._id),t}o(Fsr,"duplicate");async function Bsr(e){let t=C.getWorkspaceDB(),r=await dQe(e._id);if(!r)throw new K(`Project app with id '${e._id}' not found.`,404);e.name!==r.name&&await lQe(e.name,e._id);let n={_id:e._id,_rev:e._rev,name:e.name,url:e.url,navigation:e.navigation,disabled:e.disabled,createdAt:r.createdAt,updatedAt:r.updatedAt,isDefault:r.isDefault,_deleted:void 0};return(await t.put(n,{returnDoc:!0})).doc}o(Bsr,"update");async function qsr(e,t){let r=C.getWorkspaceDB();try{let i=await r.tryGet(e);if(!i)throw new K(`Project app with id '${e}' not found.`,404);await r.remove(e,t),Oe.workspace.deleted(i,C.getWorkspaceId())}catch(i){throw i.status===404?new K(`Project app with id '${e}' not found.`,404):i}let n=(await P.screens.fetch()).filter(i=>i.workspaceAppId===e);await r.bulkRemove(n)}o(qsr,"remove");async function jsr(e){let t=await P.workspaces.metadata.get(),r=F.isProdWorkspaceID(t.appId)?`/app/${t.url}`.replace("//","/"):`/${t.appId}`,n=F.isProdWorkspaceID(t.appId)?`/embed/${t.url}`.replace("//","/"):null,i=await P.workspaceApps.fetch();function s({url:u,isDefault:c}){return e.replace(/\/$/,"")===`${r}${u.replace(/\/$/,"")}`||n&&e.replace(/\/$/,"")===`${n}${u.replace(/\/$/,"")}`||!e&&c}return o(s,"isWorkspaceAppMatch"),i.find(s)}o(jsr,"getMatchedWorkspaceApp");var oX={};G(oX,{updateWithExport:()=>Hsr});var pQe=[pd.SQLITE,"_design/migrations"];async function Wsr(e,t){let r="app_metadata";try{let[n,i]=await Promise.all([e.get(r),t.get(r)]);return{...i,automationErrors:void 0,theme:n.theme,customTheme:n.customTheme,features:n.features,icon:n.icon,navigation:n.navigation,scripts:n.scripts,type:n.type,version:n.version}}catch(n){throw new Error(`Unable to retrieve workspace metadata for import - ${n.message}`)}}o(Wsr,"getNewWorkspaceMetadata");function Gsr(e,t,r){let n=[];for(let s of t){let a=e.find(u=>u._id===s._id);a?a._rev=s._rev:n.push(s)}return[...e,...n,r]}o(Gsr,"mergeUpdateAndDeleteDocuments");async function $sr(e){let t=[];for(let s of DM)t.push(e.allDocs(F.getDocParams(s)));let r=[];for(let s of await Promise.all(t))r=r.concat(s.rows.map(a=>({_id:a.id,_rev:a.value.rev})));let n=await e.getMultiple(pQe,{allowMissing:!0});r.push(...n.map(s=>({_id:s._id,_rev:s._rev})));let i=new Map;return r.forEach(s=>{i.set(s._id,s)}),Array.from(i.values()).map(s=>({_deleted:!0,...s}))}o($sr,"removeImportableDocuments");async function Vsr(e){let t=[];for(let s of DM)t.push(e.allDocs(F.getDocParams(s,null,{include_docs:!0})));let r=[];for(let s of await Promise.all(t))r=r.concat(s.rows.map(a=>a.doc));let n=await e.getMultiple(pQe,{allowMissing:!0});r.push(...n);let i=new Map;return r.forEach(s=>{delete s._rev,i.set(s._id,s)}),Array.from(i.values())}o(Vsr,"getImportableDocuments");async function Hsr(e,t,r){let n=F.getDevWorkspaceID(e),i=`temp_${n}`,s=F.getDB(i),a=F.getDB(n);try{let u={file:{type:t.type,path:t.path,password:r}};await mM.importApp(n,s,u,{updateAttachmentColumns:!0});let c=await Wsr(s,a),l=await Vsr(s),f=await $sr(a);if((await a.bulkDocs(Gsr(l,f,c))).some(p=>p.error))throw new K("Error importing documents",500);await Be.destroy(Jk(n)),await U7(n)}finally{await s.destroy()}}o(Hsr,"updateWithExport");var sX={};G(sX,{get:()=>Qsr,tryGet:()=>Ksr});async function Qsr(e){return await(e?.production?C.getProdWorkspaceDB():C.getWorkspaceDB()).get("app_metadata")}o(Qsr,"get");async function Ksr(e){return await(e?.production?C.getProdWorkspaceDB():C.getWorkspaceDB()).tryGet("app_metadata")}o(Ksr,"tryGet");var aX={};G(aX,{enrichWithDefaultWorkspaceAppUrl:()=>Xsr,fetch:()=>Jsr,filterAppList:()=>yQe});var hQe=U(require("object-sizeof"));var zsr=1024*1024;function Ysr(e,t){let r=`[removed] - max results size of ${t}MB exceeded`;for(let n of e.steps)n.inputs={message:r},n.outputs={message:r,success:n.outputs.success}}o(Ysr,"sanitiseResults");async function mQe(e,t){if(ie.DISABLE_AUTOMATION_LOGS)return;let r=ie.AUTOMATION_MAX_LOG_SIZE_MB;(0,hQe.default)(t)/zsr>r&&Ysr(t,r);try{await ky.logs.storeLog(e,t)}catch(i){i.status===413&&i.request?.data&&(delete i.request.data,i.request.data={message:"removed due to large size"}),ke.logAlert("Error writing automation log",i)}}o(mQe,"storeLog");async function gQe(e){let t=await ky.logs.oldestLogDate();for(let r of e)if(r.automationErrors)for(let[n,i]of Object.entries(r.automationErrors)){let s=[];for(let a of i){if(!a)continue;a.split(F.SEPARATOR)[2]>t&&s.push(a)}r.automationErrors[n]=s}return e}o(gQe,"checkAppMetadata");function yQe(e,t){let r=[],n=Object.keys(e.roles);if(Xe.hasAppBuilderPermissions(e))r=e.builder?.apps||[],r=r.concat(n);else if(!Xe.isAdminOrBuilder(e))r=n;else return t;return t.filter(i=>r.includes(F.getProdWorkspaceID(i.appId)))}o(yQe,"filterAppList");async function Jsr(e,t){let r=e==="development",n=e==="all",i=await F.getAllWorkspaces({dev:r,all:n}),s={...t,roles:t?.roles||{}},a=await $t.enrichUserRolesFromGroups(s);i=yQe(a,i);let u=i.filter(l=>l.status==="development").map(l=>l.appId);if(r||n){let l=await u$e(u);for(let f of i){let d=l[f.appId];d?f.lockedBy=d:delete f.lockedBy}}let c=await HY(i);return await gQe(c)}o(Jsr,"fetch");async function Xsr(e){let t=[];for(let r of e){let n=await F.doWithDB(r.appId,i=>P.workspaceApps.fetch(i));t.push({...r,defaultWorkspaceAppUrl:n[0]?.url||""})}return t}o(Xsr,"enrichWithDefaultWorkspaceAppUrl");var bQe={...sJ,...vY,...aX,...oX,metadata:sX};var Zsr={backups:mM,tables:Mh,automations:_u,workspaces:bQe,rows:cQe,users:J$e,datasources:yu,queries:M3e,plugins:GY,screens:nX,views:fA,permissions:T7,links:R3e,rowActions:M9,common:O9,oauth2:D9,ai:g9,workspaceApps:iX,navigation:x9,resources:k9,deployment:A3e,dev:IY,workspace:I9},P=Zsr;function cX(e,t){let r=Object.keys(e);for(let n of r){let i=e[n];if(typeof i!="string")continue;let s=t?.[n];if(s){if(s.type==="boolean"){let a=i.toLowerCase();a==="true"&&(e[n]=!0),a==="false"&&(e[n]=!1)}if(s.type==="number"){let a=parseFloat(i);isNaN(a)||(e[n]=a)}}}if(e?.row){for(let n in e.row)if(e.schema?.[n]?.type==="link"&&e.row[n]&&typeof e.row[n]=="string")try{e.row[n]=JSON.parse(e.row[n])}catch{}}return e}o(cX,"cleanInputValues");async function Rb(e,t){let r=await P.tables.getTable(e);return cX(t,r.schema)}o(Rb,"cleanUpRow");function Ye(e){return e==null?"No error provided.":typeof e=="object"&&(e.toString==null||e.toString()==="[object Object]")?JSON.stringify(e):typeof e!="string"?e.toString():e}o(Ye,"getError");function LA(e){return!!e}o(LA,"guardAttachment");function _Qe(e){try{let r=(e.startsWith("http")?new URL(e).pathname:e).split("/");return r[r.length-1]||""}catch{return""}}o(_Qe,"deriveFilenameFromUrl");function vM(e){if(typeof e=="string")try{let n=JSON.parse(e);return vM(n)}catch{return{url:e,filename:_Qe(e)}}let t=e.url;if(!t){let n=Object.keys(e).join(", ");throw new Error(`Attachments must have both "url" and "filename" keys. You have provided: ${n}`)}let r=e.filename??e.name??_Qe(t);return{url:t,filename:r}}o(vM,"normalizeSingleAttachment");function TQe(e){if(e==null)return null;if(typeof e=="string")try{let t=JSON.parse(e);return TQe(t)}catch{return vM(e)}return Array.isArray(e)?e.map(r=>vM(r)).filter(Boolean):vM(e)}o(TQe,"normalizeAttachmentValue");async function RM(e,t){let r=await P.tables.getTable(e),n={};for(let[i,s]of Object.entries(t)){let a=r.schema[i];if(a?.type==="attachment"||a?.type==="attachment_single"||a?.type==="signature_single"){let u=TQe(s);Array.isArray(u)?u.forEach(c=>LA(c)):u&&LA(u),n[i]=u}}for(let[i,s]of Object.entries(n))if(s)Array.isArray(s)?s.length&&(t[i]=await Promise.all(s.map(a=>wQe(a)))):Object.keys(t[i]).length>0&&(t[i]=await wQe(s));else continue;return t}o(RM,"sendAutomationAttachmentsToStorage");async function wQe(e){let t=C.getProdWorkspaceId();async function r(i,s){let a=`${SQe.v4()}${i}`,u=`${t}/attachments/${a}`;return await Se.streamUpload({bucket:Se.ObjectStoreBuckets.APPS,stream:s,filename:u}),u}o(r,"uploadToS3");async function n(i){return(await Se.getObjectMetadata(Se.ObjectStoreBuckets.APPS,i)).ContentLength}o(n,"getSize");try{let{filename:i}=e,s=EQe.default.extname(i);s.startsWith(".")&&(s=s.substring(1,s.length));let a=await Se.processAutomationAttachment(e),u="";return"path"in a&&a.path.startsWith(`${t}/attachments/`)?u=a.path:u=await r(s,a.content),{size:await n(u),extension:s,name:i,key:u}}catch(i){throw console.error("Failed to process attachment:",i),i}}o(wQe,"generateAttachmentRow");function tar(e){if(e==null)return[];if(Array.isArray(e))return e;if(typeof e!="string")throw new Error(`Unable to split value of type ${typeof e}: ${e}`);let t=e.split(`
|
|
1038
|
+
`;let r=this.isolate.compileScriptSync(t);r.runSync(this.vm,{timeout:this.invocationTimeout,release:!1}),new Promise(()=>{r.release()});let n=this.getFromContext(this.resultKey);if(n[this.runErrorKey])throw new pa(n[this.runErrorKey]);return n[this.runResultKey]}close(){this.vm.release(),this.isolate.dispose()}registerCallbacks(t){let r=_A.default.randomUUID().replace(/-/g,""),n={};for(let[s,a]of Object.entries(t)){let u=`f${r}${s}cb`;n[s]=u,this.addToContext({[u]:(...c)=>a(...c)})}return"{"+Object.entries(n).map(([s,a])=>`${s}: ${a}`).join()+"}"}addToContext(t){for(let r in t){let n=t[r];this.jail.setSync(r,typeof n=="function"?n:new V7.default.ExternalCopy(n).copyInto({release:!0}))}}removeFromContext(t){for(let r of t)this.jail.deleteSync(r)}getFromContext(t){let r=this.vm.global.getSync(t,{reference:!0}),n=r.copySync();return new Promise(()=>{r.release()}),n}};function C4e(){ie.isTest()&&Qz(),Ov((e,t)=>I4e.default.trace("runJS",{},()=>{try{let r=C.getCurrentContext(),n=r?.vm||new Cb({memoryLimit:ie.JS_RUNNER_MEMORY_LIMIT,invocationTimeout:ie.JS_PER_INVOCATION_TIMEOUT_MS,isolateAccumulatedTimeout:ie.JS_PER_REQUEST_TIMEOUT_MS}).withHelpers().withBuffer().withSnippets(r?.snippets);r&&!r.vm&&(r.vm=n,r.cleanup=r.cleanup||[],r.cleanup.push(()=>n.close()));let{helpers:i,snippets:s,...a}=t;return n.withContext(a,()=>n.execute(e))}catch(r){throw r.message==="Script execution timed out."?new xf:r}})),ie.LOG_JS_ERRORS&&Jz(e=>{ke.logWarn(`Error while executing js: ${JSON.stringify((0,O4e.serializeError)(e))}`)})}o(C4e,"init");var hnr=3600,wA=null;async function Q7(){return wA||(wA=await Za.Client.init(Za.utils.Databases.QUERY_VARS)),wA}o(Q7,"getClient");process.on("exit",async()=>{wA&&await wA.finish()});function K7(e,t){return`${e}${F.SEPARATOR}${t}`}o(K7,"makeVariableKey");function mnr(){if(ie.isTest()||ie.DISABLE_THREADING||!ie.isInThread()){console.debug(`[${ie.FORKED_PROCESS_NAME}] thread setup skipped`);return}console.debug(`[${ie.FORKED_PROCESS_NAME}] thread setup running`),C4e(),S4e()}o(mnr,"threadSetup");async function gnr(e,t){return(await Q7()).get(K7(e,t))}o(gnr,"getCachedVariable");async function z7(e){let t=await Q7();await Promise.all(e.map(r=>t.delete(K7(r.queryId,r.name))))}o(z7,"invalidateCachedVariable");async function ynr(e,t,r){await(await Q7()).store(K7(e,t),r,hnr)}o(ynr,"storeDynamicVariable");function bnr(e){if(typeof e=="string")try{e=JSON.parse(e)}catch{e={response:e}}return e}o(bnr,"formatResponse");function _nr(e){return typeof e=="object"&&!Array.isArray(e)&&e&&e.data!=null&&e.info!=null}o(_nr,"hasExtraData");var x4e={hasExtraData:_nr,formatResponse:bnr,storeDynamicVariable:ynr,invalidateCachedVariable:z7,getCachedVariable:gnr,threadSetup:mnr};var wnr=require("lodash");var ki=U(require("joi"));var nM=ki.default.string().optional().allow(null).allow("");function Enr(){return{_id:nM,_rev:nM,fields:ki.default.object().required(),datasourceId:ki.default.string().required(),readable:ki.default.boolean(),parameters:ki.default.array().items(ki.default.object({name:ki.default.string(),default:ki.default.string().allow("")})),queryVerb:ki.default.string().required(),extra:ki.default.object().optional(),schema:ki.default.object({}).required().unknown(!0),transformer:nM,flags:ki.default.object().optional(),queryId:nM}}o(Enr,"baseQueryValidation");function D4e(){return ki.default.object({...Enr(),name:ki.default.string().required()}).unknown(!0)}o(D4e,"queryValidation");var r9="__BUDIBASE_BINDING__",Snr=new RegExp(`"${r9}(string|integer|number|boolean)__([A-Za-z0-9_]+)__"`,"g"),Tnr=new RegExp(`${r9}(string|integer|number|boolean)__([A-Za-z0-9_]+)__`),P4e=o(e=>e.replace(/[^A-Za-z0-9_]/g,"_"),"sanitizeSegment"),vnr=o(e=>!e||typeof e!="object"?!1:"$ref"in e,"isReferenceObject"),L4e=o(e=>{if(!(!e||vnr(e)))return e},"toSchemaObject"),Anr=o(e=>{let t=e.slice(1).map(n=>P4e(n)).filter(n=>n&&n!=="item");if(t.length===0){let n=e[e.length-1]??"value";t.push(P4e(n)||"value")}let r=t.join("_")||"value";return/^[0-9]/.test(r)?`_${r}`:r},"buildBindingName"),Rnr=o((e,t)=>({toJSON(){return`${r9}${t}__${e}__`}}),"createBindingPlaceholder"),xb=o(e=>{switch(e){case"boolean":return"false";case"integer":case"number":return"0";default:return""}},"defaultValueForType"),Gf=o(e=>{let t=L4e(e);if(t){if(Array.isArray(t.allOf)&&t.allOf.length>0){let r=t.allOf.reduce((n,i)=>{let s=Gf(i);if(!s)return n;if(!n)return{...s};let a={...n},u={...iM(n),...iM(s)};Object.keys(u).length>0&&(a.properties=u);let c=n.required??[],l=s.required??[],f=new Set([...c,...l]);return f.size>0&&(a.required=Array.from(f)),!a.type&&s.type&&(a.type=s.type),a.items===void 0&&s.items!==void 0&&(a.items=s.items),a},void 0);if(r)return r}if(Array.isArray(t.oneOf)){let[r]=t.oneOf;if(r)return Gf(r)}if(Array.isArray(t.anyOf)){let[r]=t.anyOf;if(r)return Gf(r)}return t}},"pickSchema"),Y7=o(e=>{if(!e)return;let{type:t}=e;if(Array.isArray(t))return t[0];if(!t){if(Object.keys(iM(e)).length>0)return"object";if(k4e(e))return"array"}return typeof t=="string"?t:void 0},"getSchemaType"),Onr=o(e=>e?.required?Array.isArray(e.required)?[...e.required]:[]:[],"getRequiredProperties"),iM=o(e=>{if(!e?.properties)return{};let t=Object.entries(e.properties),r={};for(let[n,i]of t){let s=L4e(i);s&&(r[n]=s)}return r},"getProperties"),k4e=o(e=>{if(!e)return;let t=e.items;if(t){if(Array.isArray(t)){let r=t;for(let n of r){let i=Gf(n);if(i)return i}return}return Gf(t)}},"getItemsSchema"),EA=o(e=>e==="integer"||e==="number"||e==="boolean"?e:"string","normalisePrimitiveType"),J7=o((e,t)=>{if(e){if(e.example!==void 0&&e.example!==null)return String(e.example);if(e.default!==void 0&&e.default!==null)return String(e.default);let r=e.enum;if(Array.isArray(r)&&r.length>0){let[n]=r;if(n!=null)return String(n)}}return xb(t)},"getPrimitiveDefaultFromSchema"),oM=o((e,t)=>{for(let[r,n]of Object.entries(t))r in e||(e[r]=n)},"mergeBindings"),_a=o((e,t,r)=>{let n=Anr(e);return{value:Rnr(n,t),bindings:{[n]:r}}},"createPrimitiveBindingResult"),X7=o((e,t,r,n,i)=>{let{totalLimit:s=12}=i,a=Gf(e);if(!a){let f=EA(void 0);return _a(t,f,xb(f))}if(n.has(a)){let f=EA(Y7(a));return _a(t,f,J7(a,f))}if(r>5){let f=EA(Y7(a));return _a(t,f,J7(a,f))}n.add(a);let u=Y7(a);if(u==="object"){let f=iM(a),d=Object.keys(f);if(d.length===0)return n.delete(a),{value:{},bindings:{}};let p=Onr(a).filter(E=>d.includes(E)),h=d.filter(E=>!p.includes(E)),m=[];if(h.length>0){let E=Math.max(s-p.length,0);E>0&&(m=h.slice(0,E))}let g=[...p,...m],y=new Set(g);g=Array.from(y),g.length===0&&(g=d.slice(0,1));let b={},w={};for(let E of g){let S=Gf(f[E]),T=X7(S,[...t,E],r+1,n,i);if(T.value===void 0){let R=_a([...t,E],"string",xb("string"));b[E]=R.value,oM(w,R.bindings)}else b[E]=T.value,oM(w,T.bindings)}return n.delete(a),{value:b,bindings:w}}if(u==="array"){let f=k4e(a),d=X7(f,[...t,"item"],r+1,n,i),p=d.value===void 0?[]:[d.value];return n.delete(a),{value:p,bindings:d.bindings}}let c=EA(u),l=_a(t,c,J7(a,c));return n.delete(a),l},"buildFromSchema"),Z7=o((e,t,r,n)=>{if(r>5)return _a(t,"string",xb("string"));if(e==null||typeof e=="bigint"||typeof e=="symbol"||typeof e=="function")return{value:e,bindings:{}};if(typeof e=="string")return _a(t,"string",e);if(typeof e=="number")return _a(t,"number",String(e));if(typeof e=="boolean")return _a(t,"boolean",e?"true":"false");if(typeof e!="object")return{value:e,bindings:{}};let i=e;if(n.has(i))return _a(t,"string",xb("string"));if(n.add(i),Array.isArray(e)){if(e.length===0)return n.delete(i),{value:[],bindings:{}};let c=Z7(e[0],[...t,"item"],r+1,n);return n.delete(i),{value:c.value===void 0?[]:[c.value],bindings:c.bindings}}let s={},a={},u=e;for(let[c,l]of Object.entries(u)){let f=Z7(l,[...t,c],r+1,n);f.value!==void 0?s[c]=f.value:s[c]=l,oM(a,f.bindings)}return n.delete(i),{value:s,bindings:a}},"buildFromExample"),sM=o((e,t="body",r={})=>{let n=Gf(e);if(!n)return;let i=new Set,s={totalLimit:r.totalLimit??12},a=X7(n,[t],0,i,s);if(a.value!==void 0)return{body:a.value,bindings:a.bindings}},"generateRequestBodyFromSchema"),SA=o((e,t="body")=>{if(e===void 0)return;let n=Z7(e,[t],0,new WeakSet);if(n.value!==void 0)return{body:n.value,bindings:n.bindings}},"generateRequestBodyFromExample"),M4e=o(e=>{if(e===void 0)return;if(typeof e=="string")return e;let t=JSON.stringify(e,null,2);if(typeof t=="string")return t.replace(Snr,(r,n,i)=>{let s=`{{ ${i} }}`;return n==="string"?`"${s}"`:s})},"serialiseRequestBody"),e9=o(e=>{if(e==null)return e;if(Array.isArray(e))return e.map(t=>e9(t));if(typeof e=="object"){let t=U4e(e);return t?`{{ ${t} }}`:Object.entries(e).reduce((r,[n,i])=>(r[n]=e9(i),r),{})}return e},"cloneSerializableRequestBody"),aM=o(e=>{if(e!==void 0)return e9(e)},"buildSerializableRequestBody"),U4e=o(e=>{if(!e||typeof e!="object")return;let t=e;if(typeof t.toJSON!="function")return;let r=t.toJSON();if(typeof r!="string")return;let n=r.match(Tnr);if(n)return n[2]},"extractBindingFromPlaceholder"),N4e=o(e=>{if(e.length===0)return"";let[t,...r]=e,n=t;for(let i of r){if(i==="item"){n+="[]";continue}n+=`[${i}]`}return n},"buildFormKey"),t9=o((e,t,r)=>{if(e==null)return;if(Array.isArray(e)){e.forEach(s=>t9(s,[...t,"item"],r));return}let n=U4e(e);if(n){let s=N4e(t);s&&(r[s]=`{{ ${n} }}`);return}if(typeof e=="object"){for(let[s,a]of Object.entries(e))t9(a,[...t,s],r);return}let i=N4e(t);i&&(r[i]=String(e))},"collectKeyValuePairs"),Db=o(e=>{if(!e||typeof e!="object")return;let t={};for(let[r,n]of Object.entries(e))t9(n,[r],t);if(Object.keys(t).length!==0)return t},"buildKeyValueRequestBody"),Inr=o(e=>e.type?e:{...e,type:"string"},"toFormDataParameter"),F4e=o(e=>{if(!Array.isArray(e)||e.length===0)return;let t={},r={};for(let n of e){let i=Inr(n);if(!i?.name)continue;let s=EA(i.type),a=i.default?String(i.default):xb(s),{value:u,bindings:c}=_a(["form",i.name],s,a);t[i.name]=u,oM(r,c)}if(Object.keys(t).length!==0)return{body:t,bindings:r}},"buildRequestBodyFromFormDataParameters");var n9=(s=>(s.get="read",s.post="create",s.put="update",s.patch="patch",s.delete="delete",s))(n9||{}),Cnr=/[()]/g,xnr=o((e,t)=>{let r=e?.trim();return r&&kM.test(r)?r:(r||t).replace(Cnr,"").replace(/\s+/g," ").trim()||"Query"},"sanitizeQueryName"),Pb=class{constructor(){this.buildEndpointId=(t,r)=>`${this.normalizeMethod(t)||t.toLowerCase()}::${r}`;this.convertPathVariables=t=>t&&t.replace(/\{([^{}]+)\}/g,(r,n)=>{let i=n.trim(),s=i.match(/^[A-Za-z0-9._-]+/);return`{{${s?s[0]:i}}}`});this.normalizeMethod=t=>{if(t)return t.toLowerCase()};this.isSupportedMethod=t=>{let r=this.normalizeMethod(t);return r?Object.prototype.hasOwnProperty.call(n9,r):!1};this.methodHasRequestBody=t=>{let r=this.normalizeMethod(t);return r?["post","put","patch"].includes(r):!1};this.bodyTypeFromMimeType=t=>{if(!t)return"json";let r=t.split(";")[0].trim().toLowerCase();return r==="application/x-www-form-urlencoded"?"encoded":r==="multipart/form-data"?"form":r==="text/plain"||r.startsWith("text/")?"text":r==="application/xml"||r==="text/xml"||r.endsWith("+xml")?"xml":r.endsWith("+json")||r==="application/json"?"json":"json"};this.constructQuery=(t,r,n,i,s,a,u={},c=[],l=void 0,f={},d,p)=>{let m=this.verbFromMethod(n),g="return data",y={},b=`${n?.toUpperCase?.()||""} ${i}`.trim(),w=xnr(r,b);if(i=this.processPath(i),s)if(typeof s=="string"){let O=this.convertPathVariables(s);O.endsWith("/")&&(O=O.slice(0,-1)),i=i?`${O}/${i}`:O}else{let O=s.href;O.endsWith("/")&&(O=O.slice(0,-1)),i=i?`${O}/${i}`:O}a=this.processQuery(a);let E=[...c];for(let[O,I]of Object.entries(f))!O||E.find(x=>x.name===O)||E.push({name:O,default:I});let S,T,R=o(O=>O==="form"||O==="encoded","isKeyValueBodyType");R(d)?(S=Db(l),(!S||Object.keys(S).length===0)&&l&&(S=Object.keys(f).reduce((O,I)=>(O[I]=`{{ ${I} }}`,O),{})),T=d):(S=M4e(l),T=d||(S?"json":"none")),(!S||typeof S=="object"&&Object.keys(S).length===0)&&R(d)&&(S=void 0),S===void 0&&(T="none");let A={datasourceId:t,name:w,parameters:E,fields:{headers:u,queryString:a,path:i,requestBody:S,bodyType:T},transformer:g,schema:y,readable:!0,queryVerb:m};return p&&(A.restTemplateMetadata=p),A};this.verbFromMethod=t=>{let r=this.normalizeMethod(t);if(!r)throw new Error(`Unsupported method: ${t}`);return n9[r]};this.processPath=t=>(t?.startsWith("/")&&(t=t.substring(1)),t=this.convertPathVariables(t),t);this.processQuery=t=>t?.startsWith("?")?t.substring(1):t}static{o(this,"ImportSource")}buildDefaultBindings(t,r){let n={};for(let i of t)i?.name&&(n[i.name]=`${i.default??""}`);if(r)for(let[i,s]of Object.entries(r))i&&(n[i]=s);return Object.keys(n).length?n:void 0}getSecurityHeaders(){return[]}};var B4e=require("url");var Dnr=require("curlconverter"),Pnr=o(e=>{let t=Dnr.toJsonString(e);return JSON.parse(t)},"parseCurl"),Nnr=o(e=>{if(e.data){let t=Object.keys(e.data);if(t.length){let r=t[0];try{return r.startsWith("$")&&(r=r.substring(1)),JSON.parse(r)}catch{}}}},"parseBody"),Lnr=o(e=>e.cookies?Object.entries(e.cookies).reduce((t,r)=>{let[n,i]=r;return t+`${n}=${i}; `},""):null,"parseCookie"),TA=class extends Pb{constructor(){super(...arguments);this.tryLoad=async r=>{try{this.curl=Pnr(r)}catch{return!1}return!0};this.load=async r=>{if(!await this.tryLoad(r))throw new Error("Failed to load CURL document")};this.getUrl=()=>new B4e.URL(this.curl.raw_url);this.getInfo=()=>{let r=this.getUrl(),n=this.curl.method,i=r.pathname;return{name:r.hostname,url:r.origin,securityHeaders:this.getSecurityHeaders(),endpoints:[{id:this.buildEndpointId(n,i),name:i||r.hostname,method:n?.toUpperCase(),path:i,description:this.curl.description,queryVerb:this.verbFromMethod(n)}]}};this.getQueries=(r,n)=>{let i=this.getUrl(),s=i.pathname,a=i.origin+i.pathname,u=this.curl.method,c=i.search,l=this.curl.headers,f=Nnr(this.curl),d=n?.filterIds,p=this.buildEndpointId(u,i.pathname);if(d&&!d.has(p))return[];let h=Lnr(this.curl);return h&&(l.Cookie=h),[this.constructQuery(r,s,u,a,void 0,c,l,[],f)]}}static{o(this,"Curl")}getImportSource(){return"curl"}};var $4e=require("openapi-types");var uM=U(require("@apidevtools/swagger-parser")),q4e=require("js-yaml"),j4e=U(require("lodash/isObject"));var knr=o(e=>!!(0,j4e.default)(e),"isYamlDocument"),Mnr=o(e=>{let t=e.trim();if(!t)throw new Error("Empty OpenAPI document");try{let r=(0,q4e.load)(t,{json:!0});if(knr(r))return r}catch{}return e},"prepareDocument"),Nb=class extends Pb{constructor(){super(...arguments);this.parseData=async r=>{let n={resolve:{external:!1}},i=Mnr(r);return await uM.default.parse(i,n)};this.validate=async r=>{let n={resolve:{external:!1}};try{return await uM.default.validate(r)}catch{console.log("[OpenAPI Import] Schema validation failed, continuing without validation");try{return await uM.default.dereference(r,n)}catch{return console.log("[OpenAPI Import] Dereference failed, continuing with parsed document"),r}}}}static{o(this,"OpenAPISource")}};var V4e=require("url");var Unr=o(e=>{if(!e)return!1;let t=e.trim();return!(!t||t.length>60||/[{}]/.test(t))},"isSimpleOperationId"),W4e=o(e=>{if(!e)return;let t=e.trim();if(!t)return;let r=t.split(/\r?\n/).map(n=>n.trim()).find(n=>n.length>0);if(r)return r.length>80?`${r.slice(0,80-3).trim()}...`:r},"getShortText"),Fnr=o(e=>{let t=e.toLowerCase();return/^v\d+$/.test(t)||/^\d{4}-\d{2}(-\d{2})?$/.test(t)||/^\d+$/.test(t)},"isVersionSegment"),Bnr=o(e=>/^\{[^{}]+\}$/.test(e),"isPathParamSegment"),qnr=o(e=>e.replace(/([a-z0-9])([A-Z])/g,"$1 $2").replace(/[-_]/g," ").split(/\s+/).filter(Boolean).map(r=>`${r[0].toUpperCase()}${r.slice(1)}`).join(" "),"humanizeSegment"),jnr=o(e=>e.length?(e.length>2?e.slice(-2):e).map(qnr).join(" "):"","buildResourceName"),Wnr=o((e,t)=>{let r=e.trim(),n=t.split("/").filter(Boolean);n=n.filter(a=>!Fnr(a)&&!Bnr(a));let i=jnr(n),s=r?`${r[0].toUpperCase()}${r.slice(1).toLowerCase()}`:"Call";return i?`${s} ${i}`:s},"buildFallbackName"),cM=o((e,t,r)=>{if(Unr(e.operationId))return e.operationId?.trim()||r;let n=W4e(e.summary);if(n)return n;let i=W4e(e.description);return i||Wnr(t,r)},"buildEndpointName");var Gnr=o(e=>!0,"parameterNotRef"),G4e=o(e=>e.swagger==="2.0","isOpenAPI2"),$nr=Object.values($4e.OpenAPIV2.HttpMethods),Vnr=o((e,t)=>$nr.includes(e),"isOperation"),Hnr=o((e,t)=>!Vnr(e,t),"isParameter"),vA=class extends Nb{constructor(){super(...arguments);this.securityHeaders=new Map;this.getDocsUrl=r=>r.externalDocs?.url||this.document.externalDocs?.url||this.document.info?.termsOfService||this.document.info?.contact?.url;this.setSecurityHeaders=()=>{this.securityHeaders=new Map;let r=this.document.securityDefinitions;if(r)for(let n of Object.values(r)){let i=this.getSecuritySchemeHeader(n);i&&this.securityHeaders.set(i.toLowerCase(),i)}};this.buildRestTemplateMetadata=(r,n,i,s,a,u)=>{let c={originalName:n,operationId:r.operationId,docsUrl:this.getDocsUrl(r),description:r.summary||r.description,originalPath:i},l=aM(s?.body);l!==void 0&&u&&(u==="form"||u==="encoded")&&(l=Db(l)),l!==void 0&&(c.originalRequestBody=l);let f=this.buildDefaultBindings(a,s?.bindings);return f&&(c.defaultBindings=f),c};this.tryLoad=async r=>{try{let n=await this.parseData(r);return n=await this.validate(n),G4e(n)?(this.loadDocument(n),!0):!1}catch{return!1}};this.load=async r=>{let n=await this.parseData(r);if(G4e(n)){this.loadDocument(n);return}throw new Error("Failed to load OpenAPI 2 document")};this.loadDocument=r=>{this.document=r,this.setSecurityHeaders()};this.getUrl=()=>{let r=this.document.schemes?.includes("https")?"https":"http",n=this.document.basePath||"",i=this.document.host;if(!i)return;let s=n?n.startsWith("/")?n:`/${n}`:"";try{return new V4e.URL(`${r}://${i}${s}`)}catch{return}};this.getEndpoints=()=>{let r=this.getQueries(""),n=[];for(let i of r){let s=i.restTemplateMetadata;if(!s)continue;let a=s.originalPath||i.fields.path||"",u=tk[i.queryVerb];this.isSupportedMethod(u)&&n.push({id:this.buildEndpointId(u||"",a),name:i.name,method:u?.toUpperCase()||"",path:a,description:s.description,queryVerb:i.queryVerb,operationId:s.operationId,docsUrl:s.docsUrl,originalPath:s.originalPath,originalRequestBody:s.originalRequestBody,defaultBindings:s.defaultBindings,bodyType:i.fields.bodyType,headers:i.fields.headers&&Object.keys(i.fields.headers).length>0?i.fields.headers:void 0,queryString:i.fields.queryString||void 0})}return n};this.getInfo=()=>{let r=this.document.info.title||"Swagger Import",n=this.getUrl()?.href,i=n?this.convertPathVariables(n):void 0,s=this.document.externalDocs?.url||this.document.info?.termsOfService||this.document.info?.contact?.url;return{name:r,url:i,docsUrl:s,endpoints:this.getEndpoints(),securityHeaders:this.getSecurityHeaders()}};this.getQueries=(r,n)=>{let i=this.getUrl(),s=[],a=n?.filterIds;for(let[u,c]of Object.entries(this.document.paths)){let l=[];for(let[f,d]of Object.entries(c)){if(Hnr(f,d)){let W=d;l.push(...W);continue}let p=d,h=f;if(!this.isSupportedMethod(h))continue;let m=this.buildEndpointId(h,u);if(a&&!a.has(m))continue;let g=cM(p,h,u),y="",b={},w=o((W,N)=>{if(!W)return;let V=W.toLowerCase(),k=Object.keys(b).find(M=>M.toLowerCase()===V);b[k||W]=N},"setHeader"),E,S,T=[];p.consumes&&(E=p.consumes[0],w("Content-Type",E));let R=[],A=p.parameters||[],O=[...l,...A];for(let W of O)if(Gnr(W)){let N=!1;switch(W.in){case"query":{let V="";y&&(V="&"),y=`${y}${V}${W.name}={{${W.name}}}`;break}case"header":if(this.isSecurityHeader(W.name)){N=!0;break}w(W.name,`{{${W.name}}}`);break;case"path":break;case"formData":R.push({...W,in:"formData"});break;case"body":{let V=W,k=V.schema;if(k)if(k.example!==void 0)S=SA(k.example,V.name||"body");else{let M=sM(k,V.name||"body");M!==void 0&&(S=M)}break}}if(!N&&["query","header","path","formData"].includes(W.in)){let V=W.default!==void 0?String(W.default):"";T.push({name:W.name,default:V})}}if(!S&&R.length>0){let W=F4e(R);W&&(S=W,E||(E=R.some(N=>N.type==="file")?"multipart/form-data":"application/x-www-form-urlencoded"),E&&w("Content-Type",E))}let I=E?this.bodyTypeFromMimeType(E):void 0,D=this.buildRestTemplateMetadata(p,g,u,S,T,I),x=this.constructQuery(r,g,h,u,i,y,b,T,S?.body,S?.bindings??{},I,D);s.push(x)}}return s}}static{o(this,"OpenAPI2")}getSecuritySchemeHeader(r){if(r&&r.type==="apiKey"&&r.in==="header"&&r.name)return r.name}isSecurityHeader(r){return r?this.securityHeaders.has(r.toLowerCase()):!1}getSecurityHeaders(){return Array.from(new Set(this.securityHeaders.values()))}getImportSource(){return"openapi2.0"}};var Q4e=require("openapi-types");var Qnr=o(e=>e!=null&&typeof e=="object"&&Object.prototype.hasOwnProperty.call(e,"$ref"),"isReferenceObject"),H4e=o(e=>{if(!("openapi"in e))return!1;let{openapi:t}=e;return t.startsWith("3.")},"isOpenAPI3"),Knr=Object.values(Q4e.OpenAPIV3.HttpMethods),znr=o((e,t)=>Knr.includes(e),"isOperation"),AA=class extends Nb{constructor(){super(...arguments);this.serverVariableBindings={};this.securityHeaders=new Map;this.getDocsUrl=r=>r.externalDocs?.url||this.document.externalDocs?.url||this.document.info?.termsOfService||this.document.info?.contact?.url;this.buildRestTemplateMetadata=(r,n,i,s,a,u)=>{let c={originalName:n,operationId:r.operationId,docsUrl:this.getDocsUrl(r),description:r.description||r.summary,originalPath:i},l=aM(s?.body);l!==void 0&&u&&(u==="form"||u==="encoded")&&(l=Db(l)),l!==void 0&&(c.originalRequestBody=l);let f=this.buildDefaultBindings(a,s?.bindings);return f&&(c.defaultBindings=f),c};this.getPrimaryServer=()=>{if(this.document?.servers?.length)return this.document.servers[0]};this.shouldAddBaseUrlBinding=r=>{let n=r?.url;return n?n.trim().length===0:!0};this.setServerVariableBindings=r=>{this.serverVariableBindings={};let n=r?.variables||{};for(let[i,s]of Object.entries(n))this.serverVariableBindings[i]=s?.default||""};this.setSecurityHeaders=()=>{this.securityHeaders=new Map;let r=this.document.components?.securitySchemes;if(r)for(let n of Object.values(r)){let i=this.resolveMaybeRef(n),s=this.getSecuritySchemeHeader(i);s&&this.securityHeaders.set(s.toLowerCase(),s)}};this.tryLoad=async r=>{try{let n=await this.parseData(r);return n=await this.validate(n),H4e(n)?(this.loadDocument(n),!0):!1}catch{return!1}};this.load=async r=>{let n=await this.parseData(r);if(H4e(n)){this.loadDocument(n);return}throw new Error("Failed to load OpenAPI 3 document")};this.loadDocument=r=>{this.document=r,this.serverVariableBindings={},this.setSecurityHeaders()};this.getServerVariableBindings=()=>{let r=this.getPrimaryServer();Object.keys(this.serverVariableBindings).length||this.setServerVariableBindings(r);let n={...this.serverVariableBindings};return this.shouldAddBaseUrlBinding(r)&&(n.baseUrl=n.baseUrl??""),n};this.getEndpoints=()=>{let r=this.getQueries(""),n=[];for(let i of r){let s=i.restTemplateMetadata;if(!s)continue;let a=s.originalPath||i.fields.path||"",u=tk[i.queryVerb];this.isSupportedMethod(u)&&n.push({id:this.buildEndpointId(u||"",a),name:i.name,method:u?.toUpperCase()||"",path:a,description:s.description,queryVerb:i.queryVerb,operationId:s.operationId,docsUrl:s.docsUrl,originalPath:s.originalPath,originalRequestBody:s.originalRequestBody,defaultBindings:s.defaultBindings,bodyType:i.fields.bodyType,headers:i.fields.headers&&Object.keys(i.fields.headers).length>0?i.fields.headers:void 0,queryString:i.fields.queryString||void 0})}return n};this.getInfo=()=>{let r=this.document.info.title||"OpenAPI Import",n;if(this.document.servers?.length){let s=this.document.servers[0]?.url;n=s?this.convertPathVariables(s):void 0}let i=this.document.externalDocs?.url||this.document.info?.termsOfService||this.document.info?.contact?.url;return{name:r,url:n,docsUrl:i,endpoints:this.getEndpoints(),securityHeaders:this.getSecurityHeaders(),staticVariables:this.getServerVariableBindings()}};this.getQueries=(r,n)=>{let i,s={},a=this.getPrimaryServer(),u=a?.url,c=this.shouldAddBaseUrlBinding(a);a&&(s=a.variables||{},u&&(i=u)),this.setServerVariableBindings(a),c&&(i="{baseUrl}");let l=[],f=n?.filterIds,d=n?.staticVariables||{};for(let[p,h]of Object.entries(this.document.paths)){if(!h)continue;let m=h,g=this.normalizeParameters(m.parameters);for(let[y,b]of Object.entries(m)){if(!znr(y,b))continue;let w=b;if(!this.isSupportedMethod(y))continue;let E=this.buildEndpointId(y,p);if(f&&!f.has(E))continue;let S=cM(w,y,p),T="",R={},A=o(($,q)=>{if(!$)return;let Te=$.toLowerCase(),we=Object.keys(R).find(Ce=>Ce.toLowerCase()===Te);R[we||$]=q},"setHeader"),O=this.getMimeTypes(w),I=O[0],D=this.methodHasRequestBody(y)?this.getRequestBody(w,w.operationId||p,I):void 0,x=[],W=o(($,q="")=>{x.some(Te=>Te.name===$)||x.push({name:$,default:q})},"ensureParameter");I&&A("Content-Type",I);let N=this.normalizeParameters(w.parameters),V=[...g,...N];for(let $ of V){let q=!1;switch($.in){case"query":{let Te="";T&&(Te="&"),T=`${T}${Te}${$.name}={{${$.name}}}`;break}case"header":if(this.isSecurityHeader($.name)){q=!0;break}A($.name,`{{${$.name}}}`);break;case"path":break;case"formData":break}if(!q&&["query","header","path"].includes($.in)){let Te="",we=this.resolveMaybeRef($.schema);we?.default!==void 0&&(Te=String(we.default)),W($.name,Te)}}for(let[$,q]of Object.entries(s)){let we=Object.prototype.hasOwnProperty.call(d,$)?`{{ ${$} }}`:q?.default??"";W($,we)}let k=O.length>0?this.bodyTypeFromMimeType(I):void 0,M=this.buildRestTemplateMetadata(w,S,p,D,x,k),ee=this.constructQuery(r,S,y,p,i,T,R,x,D?.body,D?.bindings??{},k,M);l.push(ee)}}return l}}static{o(this,"OpenAPI3")}resolveRef(r){if(!r||!r.startsWith("#/"))return;let n=r.slice(2).split("/").map(s=>s.replace(/~1/g,"/").replace(/~0/g,"~")),i=this.document;for(let s of n){if(i==null||typeof i!="object")return;i=i[s]}return i}resolveMaybeRef(r){if(r)return Qnr(r)?this.resolveRef(r.$ref):r}normalizeParameters(r){if(!Array.isArray(r))return[];let n=[];for(let i of r){let s=this.resolveMaybeRef(i);s&&n.push(s)}return n}getMimeTypes(r){let n=this.resolveMaybeRef(r.requestBody);return n?.content?Object.keys(n.content):[]}getRequestBody(r,n,i){let s=this.resolveMaybeRef(r.requestBody);if(!s)return;let a=this.getMimeTypes(r),u=i||a[0];if(!u)return;let c=s.content[u];if(!c)return;if(c.example)return SA(c.example,n);let l=this.resolveMaybeRef(c.schema);if(l)return l.example?SA(l.example,n):sM(l,n)}getSecuritySchemeHeader(r){if(r&&r.type==="apiKey"&&r.in==="header"&&r.name)return r.name}isSecurityHeader(r){return r?this.securityHeaders.has(r.toLowerCase()):!1}getSecurityHeaders(){return Array.from(new Set(this.securityHeaders.values()))}getImportSource(){return"openapi3.0"}};var Ynr=U(require("node-fetch"));var Jnr={"openapi2.0":()=>new vA,"openapi3.0":()=>new AA,curl:()=>new TA},Xnr=o((e,t,r)=>{let n=!1;for(let i of t)e[i]==null&&(e[i]=r[i]??"",n=!0);return n},"assignStaticVariableDefaults"),Znr=o((e,t)=>{for(let r of t){if(!r)continue;let n=r.toLowerCase();Object.keys(e).find(s=>s?.toLowerCase()===n)||(e[r]=e[r]??"")}},"assignDatasourceHeaderDefaults");var K4e=class e{constructor(){this.getSource=()=>this.source;this.getInfo=()=>this.source.getInfo();this.importQueries=async(t,r)=>{let n=r?new Set([r]):void 0,i=await this.getDatasourceStaticVariables(t),s=this.source.getQueries(t,{filterIds:n,staticVariables:i});if(n&&s.length===0)throw new Error("Selected endpoint could not be imported");let a=[],u=D4e();s=s.filter(g=>u.validate(g).error?(a.push(g),!1):!0).map(g=>(g._id=bY(g.datasourceId),g));let l=await C.getWorkspaceDB().bulkDocs(s),f=s.reduce((g,y)=>(y._id&&(g[y._id]=y),g),{});l.forEach(g=>{g.ok||(a.push(f[g.id]),delete f[g.id])});let d=Object.values(f),p=d.length,h=this.source.getImportSource(),m=await P.datasources.get(t);await Oe.query.imported(m,h,p);for(let g of d)await Oe.query.created(m,g);return{errorQueries:a,queries:d}};this.prepareDatasourceConfig=t=>{if(!t)return;let r=t.config||(t.config={}),n=this.getStaticServerVariables(),i=Object.keys(n||{}).filter(Boolean);if(i.length){r.staticVariables=r.staticVariables||{},Xnr(r.staticVariables,i,n);let a=new Set(r.templateStaticVariables||[]);i.forEach(u=>a.add(u)),r.templateStaticVariables=Array.from(a)}let s=this.source.getSecurityHeaders();s.length&&((!r.defaultHeaders||typeof r.defaultHeaders!="object"||Array.isArray(r.defaultHeaders))&&(r.defaultHeaders={}),Znr(r.defaultHeaders,s))};this.getStaticServerVariables=()=>{let t=this.source;return t&&typeof t.getServerVariableBindings=="function"?t.getServerVariableBindings():{}}}static{o(this,"RestImporter")}static{this.init=async(t,r)=>{let n=new e;if(r){let i=Jnr[r];if(!i)throw new K("Unsupported import type",400);let s=i();return await s.load(t),n.source=s,n}else for(let i of[new AA,new vA,new TA])if(await i.tryLoad(t)){n.source=i;break}if(!n.source)throw new K("Unsupported import data",400);return n}}async getDatasourceStaticVariables(t){if(!t)return{};let r;try{r=await P.datasources.get(t)}catch{return{}}let n=r?.config?.staticVariables;return!n||typeof n!="object"?{}:{...n}}};var z4e=new Ab("query",{timeoutMs:ie.QUERY_THREAD_TIMEOUT});function tir(e){let t=(0,i9.cloneDeep)(e);return delete t.roles,delete t.account,delete t.license,t}o(tir,"sanitiseUserStructure");function rir(e){for(let t of Object.entries(e)){let[r,n]=t;if(typeof n=="string"&&ha(n).length!==0)throw new Error(`Parameter '${r}' input contains a handlebars binding - this is not allowed.`)}}o(rir,"validateQueryInputs");function nir(e){if(e.user.providerType==="oidc")return nt.getCookie(e,lt.Cookie.OIDC_CONFIG)}o(nir,"getOAuthConfigCookieId");function iir(e){let t=nt.getCookie(e,lt.Cookie.Auth);return{configId:nir(e),sessionId:t?t.sessionId:void 0}}o(iir,"getAuthConfig");function oir(e,t={}){let r=o(n=>n===""||n==null,"paramNotSet");rir(t);for(let n of e.parameters){let i=t[n.name];(i==null||i==="")&&(i=n.default),e.nullDefaultSupport&&r(i)&&(i=null),t[n.name]=i}return t}o(oir,"enrichParameters");async function sir(e,t={rowsOnly:!1,isAutomation:!1}){let n=await C.getWorkspaceDB().get(e.params.queryId),{datasource:i,envVars:s}=await P.datasources.getWithEnvVars(n.datasourceId),a={};t.isAutomation||(a=iir(e));try{let u={appId:e.appId,datasource:i,queryVerb:n.queryVerb,fields:n.fields,pagination:e.request.body.pagination,parameters:oir(n,e.request.body.parameters),transformer:n.transformer,queryId:e.params.queryId,environmentVariables:s,nullDefaultSupport:n.nullDefaultSupport,ctx:{user:tir(e.user),auth:{...a}},schema:n.schema},{rows:c,pagination:l,extra:f,info:d}=n.queryVerb==="read"||t.isAutomation?await z4e.run(u):await mr.addAction(async()=>{let p=await z4e.run(u);return Oe.action.crudExecuted({type:n.queryVerb}),p});f?.raw&&delete f.raw,t&&t.rowsOnly?e.body=c:e.body={data:c,pagination:l,...f,...d}}catch(u){e.throw(400,u)}}o(sir,"execute");async function Lb(e){return sir(e,{rowsOnly:!1,isAutomation:!0})}o(Lb,"executeV2AsAutomation");function lM(e=[]){return e.length===0||e.some(t=>t.value===null||t.value==="")}o(lM,"hasNullFilters");async function vs(e){let t=e.status,r,n=e.headers.get("content-type");try{n&&n.indexOf("application/json")!==-1?r=await e.json():r=await e.text()}catch{r="Failed to retrieve response"}return{status:t,message:r}}o(vs,"getFetchResponse");function Kr(e,t,r={}){let n={appId:e,user:r.user||{appId:e},eventEmitter:t,throw:(i,s)=>{throw s}};return r.body&&(n.request={body:r.body}),r.params&&(n.params=r.params),r.version&&(n.version=r.version),n}o(Kr,"buildCtx");var air=o(e=>e.length>64?e.substring(0,64)+"...":e.replace(/[^a-zA-Z0-9_-]/g,"_"),"sanitiseToolName"),uir=o(e=>{let t={};for(let r of e.parameters||[])t[r.name]=s9.z.string().optional().describe(`Parameter: ${r.name}`);return s9.z.object(t)},"buildParametersSchema"),J4e=o((e,t)=>{let r=air(e.name),n=uir(e),i=e.restTemplateMetadata?.description?`${e.name}: ${e.restTemplateMetadata.description}`:`Execute REST query: ${e.name}`;return{name:r,description:i,sourceType:"REST_QUERY",sourceLabel:t||"API",tool:(0,Y4e.tool)({description:i,inputSchema:n,execute:async s=>{let a=C.getWorkspaceId();if(!a)return{success:!1,error:"No app context available"};let u=Kr(a,null,{body:{parameters:s},params:{queryId:e._id}});try{await Lb(u);let{data:c,...l}=u.body||{};return{success:!0,data:c,info:l}}catch(c){return{success:!1,error:(c instanceof Error?c.message:String(c))||"Query execution failed"}}}})}},"createRestQueryTool");var X4e=o(e=>Object.fromEntries(e.map(t=>[t.name,t.tool])),"toToolSet");var Z4e=require("ai"),fM=require("zod");var cir=fM.z.object({query:fM.z.string().describe("The search query to find relevant information"),num_results:fM.z.number().optional().default(10).describe("Number of results to return")}),a9=o(e=>({name:"exa_search",sourceType:"SEARCH",sourceLabel:"Exa",description:"Search the web using Exa",tool:(0,Z4e.tool)({description:"Search the web using Exa",inputSchema:cir,execute:async t=>{let r=await fetch("https://api.exa.ai/search",{method:"POST",headers:{Authorization:`Bearer ${e}`,"Content-Type":"application/json"},body:JSON.stringify({query:t.query,num_results:t.num_results})});if(!r.ok){let n=await r.text();throw new Error(`Exa error: ${r.status} ${r.statusText} - ${n}`)}return r.json()}})}),"createExaTool");var kb=require("zod"),e3e=require("ai");var lir=kb.z.object({objective:kb.z.string().describe("Natural language description of what to search for"),search_queries:kb.z.array(kb.z.string()).describe("Array of search query strings"),max_results:kb.z.number().optional().default(10).describe("Maximum number of results to return")}),u9=o(e=>({name:"parallel_search",description:"Search the web using Parallel AI",sourceType:"SEARCH",sourceLabel:"Parallel Search",tool:(0,e3e.tool)({description:"Search the web using Parallel AI",inputSchema:lir,execute:async t=>{let r=await fetch("https://api.parallel.ai/v1beta/search",{method:"POST",headers:{"x-api-key":e,"parallel-beta":"search-extract-2025-10-10","Content-Type":"application/json"},body:JSON.stringify({objective:t.objective,search_queries:t.search_queries,max_results:t.max_results,excerpts:{max_chars_per_result:2e3}})});if(!r.ok)throw new Error(`Parallel error: ${r.status} ${r.statusText}`);return r.json()}})}),"createParallelTool");var t3e=U(require("dd-trace"));function r3e(e){return{name:e.name,description:e.description,sourceType:e.sourceType,sourceLabel:e.sourceLabel}}o(r3e,"toToolMetadata");async function c9(e){let[t,r,n]=await Promise.all([P.queries.fetch(),P.datasources.fetch(),e?P.ai.configs.find(e):Promise.resolve(void 0)]),i=n?.webSearchConfig,s=new Map(r.filter(c=>c.source==="REST").map(c=>[c._id,c.name||"API"])),a=t.filter(c=>s.has(c.datasourceId)).map(c=>J4e(c,s.get(c.datasourceId))),u=[...$7,...a];return i?.apiKey&&(i.provider==="exa"?u.push(a9(i.apiKey)):i.provider==="parallel"&&u.push(u9(i.apiKey))),u}o(c9,"getAvailableTools");async function fir(e){return(await c9(e)).map(r3e)}o(fir,"getAvailableToolsMetadata");async function dir(e,t={}){let{baseSystemPrompt:r,includeGoal:n=!0}=t,i=await c9(e.aiconfig),s=new Set(e.enabledTools||[]),a=kt.composeAutomationAgentSystemPrompt({baseSystemPrompt:r,goal:n?e.goal:void 0,promptInstructions:e.promptInstructions,includeGoal:n}),u=s.size>0?i.filter(c=>s.has(c.name)):i;return{systemPrompt:a,tools:X4e(u)}}o(dir,"buildPromptAndTools");function pir(e){let t=o(async(r,n)=>{let i=t3e.default.scope().active(),s=n;if(typeof n?.body=="string")try{let c=JSON.parse(n.body);c.litellm_session_id=e,i&&(c.metadata={...c.metadata,dd_trace_id:i.context().toTraceId(),dd_span_id:i.context().toSpanId(),session_id:e}),s={...n,body:JSON.stringify(c)}}catch{}let a=await fetch(r,s),u=a.headers.get("x-litellm-call-id");return u&&i&&i.setTag("litellm.call_id",u),a},"liteFetch");return typeof fetch.preconnect=="function"&&(t.preconnect=fetch.preconnect.bind(fetch)),t}o(pir,"createLiteLLMFetch");var d9={};G(d9,{create:()=>gir,getOrThrow:()=>mir,getSingle:()=>i3e,update:()=>yir});var f9=o(e=>({...e,live:e.live??!1,agents:e.agents??[]}),"withDefaults"),hir=o(e=>{if(e!==void 0){if(!Array.isArray(e))throw new K("conversationStarters must contain prompt entries",400);if(e.length>3)throw new K("conversationStarters may contain at most 3 starters",400);return e.map(t=>{if(!t||typeof t!="object")throw new K("conversationStarters must contain prompt entries",400);if(typeof t.prompt!="string")throw new K("conversationStarters must contain prompt entries",400);return{prompt:t.prompt}})}},"normalizeConversationStarters"),n3e=o(e=>{if(e===void 0)return;if(!Array.isArray(e))throw new K("agents must contain valid agentId entries",400);if(e.length===0)return[];if(!e.every(r=>typeof r?.agentId=="string"&&r.agentId.trim().length))throw new K("agents must contain valid agentId entries",400);return e.map(r=>({agentId:r.agentId,isEnabled:r.isEnabled===!0,isDefault:r.isDefault===!0,conversationStarters:hir(r.conversationStarters)}))},"normalizeAgents");async function i3e(){let r=(await C.getWorkspaceDB().allDocs(yt.getDocParams("chatapp",void 0,{include_docs:!0,limit:1}))).rows[0]?.doc;return r?f9(r):void 0}o(i3e,"getSingle");async function mir(e){if(!e)throw new K("chatAppId is required",400);let r=await C.getWorkspaceDB().tryGet(e);if(!r)throw new K("Chat App not found",404);return f9(r)}o(mir,"getOrThrow");async function gir(e){let t=C.getWorkspaceDB();if(await i3e())throw new K("Chat App already exists for this workspace",400);let n=n3e(e.agents===void 0?void 0:e.agents),i=new Date().toISOString(),s={_id:yt.generateChatAppID(),createdAt:i,updatedAt:i,...e,agents:n??[]},{rev:a}=await t.put(s);return{...s,_rev:a}}o(gir,"create");async function yir(e){if(!e._id||!e._rev)throw new K("_id and _rev are required",400);let t=C.getWorkspaceDB(),r=await t.tryGet(e._id);if(!r)throw new K("Chat App not found",404);let n=n3e(e.agents===void 0?r.agents??[]:e.agents),i=new Date().toISOString(),s={...r,...e,agents:n??[],updatedAt:i},{rev:a}=await t.put(s);return s._rev=a,f9(s)}o(yir,"update");var p9={};G(p9,{buildLiteLLMParams:()=>wk,generateRows:()=>_ir,generateTables:()=>bir});async function bir(e){let t=[],r={};try{for(let i of e)for(let s of Object.values(i.schema).filter(a=>a.type==="link")){if(!e.find(a=>a.name===s.tableId))throw new Error(`Table ${s.tableId} not found in the json response.`);if(s.tableId===i.name)throw new Error(`Self-referential relationships are not supported. Table ${i.name} cannot link to itself.`)}let n=(await P.tables.getAllInternalTables()).map(i=>i.name);for(let i of e){let s=de.getSequentialName(n,i.name,{separator:" "}),a=await P.tables.create({...i,name:s,schema:{},primaryDisplay:void 0,sourceType:"internal",sourceId:Un,type:"table",aiGenerated:!0});t.push({id:a._id,name:i.name}),r[i.name]=a._id}for(let i of e)for(let s of Object.values(i.schema))s.type==="link"?s.tableId=r[s.tableId]:s.type==="formula"&&(s.formula=`{{ js "${Buffer.from(s.formula).toString("base64")}" }}`);for(let i of e){let s=await P.tables.getTable(r[i.name]),a={...s.schema,...i.schema};for(let u of Object.keys(a))a[u].aiGenerated=!0;await P.tables.update({...s,schema:a,primaryDisplay:i.primaryDisplay})}}catch(n){console.log("Error generating tables, cleaning up created tables",n);let i=await P.tables.getTables(t.map(s=>s.id));throw await Promise.all(i.map(P.tables.internal.destroy)),n}return t}o(bir,"generateTables");async function _ir(e,t,r){let n={},i=[],s=[];for(let a of Object.keys(e)){let u=r[a],c={};for(let f of Object.values(u.schema).filter(d=>d.type==="link"))c[f.name]=null;let l=Object.values(u.schema).filter(f=>["attachment","attachment_single"].includes(f.type));s.push(...e[a].map(async f=>{await wir(f,l);let d=u._id,p=await P.rows.save(d,{...f,...c,_id:void 0},t);n[d]??={},n[d][f._id]=p.row._id;let h=Object.keys(c).reduce((m,g)=>(f[g]&&(m[g]={tableId:u.schema[g].tableId,rowId:f[g]}),m),{});Object.keys(h).length&&i.push({tableId:p.table._id,rowId:p.row._id,data:h})}))}await Promise.all(s),await Promise.all(i.map(async a=>{let u=await P.rows.find(a.tableId,a.rowId),c=Object.keys(a.data).reduce((l,f)=>(l[f]=[...u[f]||[],...a.data[f].rowId.map(d=>n[a.data[f].tableId][d])],l),{});await P.rows.save(a.tableId,{...u,...c},t,{updateAIColumns:!1})}))}o(_ir,"generateRows");async function wir(e,t){function r(n){return typeof n=="object"?wGe(n):_Ge(n)}o(r,"processAttachment");for(let n of t)Array.isArray(e[n.name])?e[n.name]=await Promise.all(e[n.name].map(i=>r(i))):e[n.name]=await r(e[n.name])}o(wir,"processAttachments");var h9={};G(h9,{deleteAgentFileChunks:()=>Zv,ingestAgentFile:()=>ier,retrieveContextForSources:()=>oer});var m9={};G(m9,{create:()=>GZt,createVectorDb:()=>Xv,fetch:()=>WZt,find:()=>Tk,remove:()=>VZt,update:()=>$Zt});var b9={};G(b9,{create:()=>Air,fetch:()=>Sir,find:()=>vir,get:()=>Tir,remove:()=>Oir,update:()=>Rir});var o3e=U(require("lodash/cloneDeep"));var s3e="********";function Fh(){return C.getWorkspaceDB()}o(Fh,"getDb");function a3e(e){if(e==null)return e;let t=e.definition.steps,r=e.definition.trigger,n=[...t,r];e.live!=null&&delete e.live;for(let i of n)if(i!=null)for(let s of Object.keys(i.inputs||{})){let a=s;(!i.inputs[a]||i.inputs[a]==="")&&delete i.inputs[a]}return e}o(a3e,"cleanAutomationInputs");async function Eir(e,t){let r=o((a,u)=>{let c=a.definition.steps.map(l=>l.id);return u.definition.steps.filter(l=>!c.includes(l.id))},"getNewSteps"),n=o((a,u)=>{let c=u.definition.steps.map(l=>l.id);return a.definition.steps.filter(l=>!c.includes(l.id))},"getDeletedSteps"),i=r(e,t);for(let a of i)await Oe.automation.stepCreated(t,a);let s=n(e,t);for(let a of s)await Oe.automation.stepDeleted(t,a)}o(Eir,"handleStepEvents");async function Sir(){return(await Fh().allDocs(Mc(null,{include_docs:!0}))).rows.filter(n=>!!n.doc).map(n=>n.doc).map(RA).map(OA)}o(Sir,"fetch");async function Tir(e){let r=await Fh().get(e);return OA(RA(r))}o(Tir,"get");async function vir(e,t){return(await Fh().getMultiple(e,t)).map(RA).map(OA)}o(vir,"find");async function Air(e){e=RA(e);let t=Fh();e._id||(e._id=xGe()),e.type="automation",e=u3e(e),e=a3e(e),e=await y9({newAuto:e});let r=await t.put(e);await Oe.automation.created(e);for(let n of e.definition.steps)await Oe.automation.stepCreated(e,n);return e._rev=r.rev,e._id=r.id,OA(e)}o(Air,"create");async function Rir(e){if(e=RA(e),!e._id||!e._rev)throw new K("_id or _rev fields missing",400);let t=Fh(),r=await t.get(e._id);Iir(e,r),e=u3e(e,r),e=a3e(e),e=await y9({oldAuto:r,newAuto:e});let n=await t.put(e);e._rev=n.rev;let i=r&&r.definition.trigger?r.definition.trigger:void 0,s=e&&e.definition.trigger?e.definition.trigger:void 0;return i&&i.id!==s?.id&&(await Oe.automation.triggerUpdated(e),await ak("automationTestInput",e._id),await q7(e._id)),await Eir(r,e),OA({...e,_rev:n.rev,_id:n.id})}o(Rir,"update");async function Oir(e,t){let r=Fh(),n=await r.get(e);await y9({oldAuto:n}),await ak("automationTestInput",e),await ak("automationTestHistory",e),await q7(e);let i=await r.remove(e,t);return await Oe.automation.deleted(n),i}o(Oir,"remove");async function y9({oldAuto:e,newAuto:t}){let r=Ve.triggers.definitions.WEBHOOK.stepId,n=C.getWorkspaceId();if(!n)throw new Error("Unable to check webhooks - no app ID in context.");let i=e?e.definition.trigger:null,s=t?t.definition.trigger:null,a=i&&s&&i.id!==s.id;function u(c){return c&&c.definition.trigger&&c.definition.trigger.stepId===r}if(o(u,"isWebhookTrigger"),u(e)&&(!u(t)||a)&&i.webhookId)try{let l=await Fh().get(i.webhookId);s&&(delete s.webhookId,s.inputs={}),await _u.webhook.destroy(l._id,l._rev)}catch{}if((!u(e)||a)&&u(t)){let l=(await _u.webhook.save(_u.webhook.newDoc("Automation webhook","automation",t._id)))._id;s.webhookId=l;let f=F.getProdWorkspaceID(n);s.inputs={schemaUrl:`api/webhooks/schema/${n}/${l}`,triggerUrl:`api/webhooks/trigger/${f}/${l}`}}return t}o(y9,"checkForWebhooks");function Iir(e,t){let r=[e.definition.trigger,...e.definition.steps],n=[t.definition.trigger,...t.definition.steps];for(let i of r)Object.keys(i.schema.inputs.properties||{}).filter(a=>i.schema.inputs.properties[a].readonly).forEach(a=>{let u=a,c=n.find(l=>l.id===i.id);if(i.inputs[u]!==c?.inputs[u])throw new K(`Field ${u} is readonly and it cannot be modified`,400)})}o(Iir,"guardInvalidUpdatesAndThrow");function RA(e){let r={...{_id:e._id,_rev:e._rev,definition:e.definition,screenId:e.screenId,uiTree:e.uiTree,appId:e.appId,live:e.live,name:e.name,internal:e.internal,type:e.type,disabled:e.disabled,testData:e.testData,createdAt:e.createdAt,updatedAt:e.updatedAt,layoutDirection:e.layoutDirection}};for(let n in r)Object.prototype.hasOwnProperty.call(e,n)||delete r[n];return r}o(RA,"trimUnexpectedObjectFields");function u3e(e,t){let r=e.definition?.trigger;if(!r||!Qc(r)||!r.inputs||!Cir(r.inputs.password))return e;if(!t||!Qc(t.definition?.trigger))throw new K("IMAP password is required",400);let n=t.definition.trigger.inputs?.password;if(!n)throw new K("IMAP password is required",400);let i=(0,o3e.default)(e),s=i.definition?.trigger;if(!Qc(s)||!s.inputs)throw new K("IMAP password is required",400);return s.inputs.password=n,i}o(u3e,"hydrateAutomationSecrets");function OA(e){let t=e.definition?.trigger;return Qc(t)&&t.inputs?.password&&(t.inputs.password=s3e),e}o(OA,"maskAutomationSecrets");function Cir(e){return e===Ui||e===s3e}o(Cir,"isMaskedPassword");var _9={};G(_9,{destroy:()=>Pir,newDoc:()=>xir,save:()=>Dir});function c3e(e){return e.startsWith(F.DocumentType.WEBHOOK)}o(c3e,"isWebhookID");function xir(e,t,r){return{live:!0,name:e,action:{type:t,target:r}}}o(xir,"newDoc");async function Dir(e){let t=C.getWorkspaceDB();e._id&&c3e(e._id)?await t.get(e._id):e._id=kGe();let r=await t.put(e);return e._rev=r.rev,e}o(Dir,"save");async function Pir(e,t){let r=C.getWorkspaceDB();if(!e||!c3e(e))throw new Error("Provided webhook ID is not valid.");return await r.remove(e,t)}o(Pir,"destroy");var w9={};G(w9,{checkForCollectStep:()=>_F});var E9={};G(E9,{trigger:()=>Nir});async function Nir(e,t={},r){let i=await C.getWorkspaceDB().get(e);if(!i)throw new Error(`Automation with ID ${e} not found`);let s=i.definition?.trigger?.stepId;if(s!=="APP")throw new Error(`Cannot manually trigger automation '${i.name}'. Only automations with APP trigger type can be manually triggered. This automation has trigger type: ${s}`);if(P.automations.utils.checkForCollectStep(i)&&await Zi.isSyncAutomationsEnabled()){let u=await jc(i,{fields:t,timeout:r?r*1e3:ie.AUTOMATION_THREAD_TIMEOUT},{getResponses:!0});if(!("steps"in u))throw new Error("Unable to collect response");return u.steps.find(l=>l.stepId==="COLLECT")?.outputs}else{let u=C.getWorkspaceId();return await jc(i,{fields:t,appId:u}),{message:`Automation ${i._id} has been triggered.`,automation:i}}}o(Nir,"trigger");var _u={...b9,webhook:_9,utils:w9,execution:E9};var T9={};G(T9,{exportApp:()=>h3e,exportDB:()=>p3e,streamExportApp:()=>Uir});var l3e=require("dd-trace"),S9=U(require("fs")),Wc=U(require("fs/promises")),$f=require("path"),f3e=U(require("tar")),d3e=require("uuid");var Mb="db.txt",dM="global.txt",pM="attachments";var Lir=require("memorystream");async function kir(e,t){let r=`${(0,d3e.v4)()}.tar.gz`,n=(0,$f.join)(cu(),r);return await f3e.create({gzip:!0,file:n,noDirRecurse:!1,cwd:e},t),n}o(kir,"tarFilesToTmp");async function p3e(e,t={}){let r={filter:t?.filter,batch_size:1e3,batch_limit:5,style:"main_only"};return F.doWithDB(e,async n=>{if(t?.exportPath){let i=t?.exportPath,s=S9.default.createWriteStream(i);return await n.dump(s,r),i}else{let i=new Lir,s="";return i.on("data",a=>{s+=a.toString()}),await n.dump(i,r),s}})}o(p3e,"exportDB");function Mir(e){let t=[rk,vGe,RGe];return e&&t.push(AGe),r=>!t.map(n=>r._id.includes(n)).reduce((n,i)=>n||i)}o(Mir,"defineFilter");async function h3e(e,t){return await l3e.tracer.trace("exportApp",async r=>{r.addTags({"config.excludeRows":t?.excludeRows,"config.tar":t?.tar,"config.encryptPassword":!!t?.encryptPassword,"config.exportPath":t?.exportPath,"config.filter":!!t?.filter});let n=F.getProdWorkspaceID(e),i=`${n}/`,s=[/\/\..+/];t?.excludeRows&&s.push(/\/attachments\/.*/);let a=await Se.retrieveDirectory(Nn.APPS,i,s);r.addTags({prodAppId:n,tmpPath:a});let u=(0,$f.join)(a,i);if(S9.default.existsSync(u)){let l=await Wc.default.readdir(u);for(let f of l){let d=(0,$f.join)(u,f);await Wc.default.rename(d,(0,$f.join)(u,"..",f))}await Wc.default.rmdir(u)}let c=(0,$f.join)(a,Mb);if(await p3e(e,{filter:Mir(t?.excludeRows),exportPath:c}),t?.encryptPassword){let l=o(async(f,d="")=>{for(let p of await Wc.default.readdir(f)){let h=(0,$f.join)(f,p),m=d?(0,$f.join)(d,p):p;if(p!==pM){let g=await Wc.default.lstat(h);g.isFile()?(await sa.encryptFile({dir:f,filename:p},t.encryptPassword),await Wc.default.rm(h)):g.isDirectory()&&await l(h,m)}}},"processDirectory");await l(a)}if(t?.tar){let l=await kir(a,await Wc.default.readdir(a));return await Wc.default.rm(a,{recursive:!0,force:!0}),l}else return a})}o(h3e,"exportApp");async function Uir({appId:e,excludeRows:t,encryptPassword:r}){let n=await h3e(e,{excludeRows:t,tar:!0,encryptPassword:r});return JGe(n)}o(Uir,"streamExportApp");var v9={};G(v9,{getGlobalDBFile:()=>jir,getListOfAppsInMulti:()=>Wir,importApp:()=>Gir,untarFile:()=>_3e,updateAttachmentColumns:()=>b3e});var Ub=U(require("fs")),wu=U(require("fs/promises")),Vf=require("path"),g3e=U(require("tar")),y3e=require("uuid");function m3e(e,t){let r=t.key?.split("/")||[];r.shift(),r.unshift(e);let n=r.join("/");return{...t,key:n,url:""}}o(m3e,"rewriteAttachmentUrl");async function b3e(e,t){let r=await P.tables.getAllInternalTables(t),n=[];for(let i of r){let{rows:s,columns:a}=await P.rows.getRowsWithAttachments(t.name,i);n=n.concat(s.map(u=>{for(let c of a){let l=i.schema[c].type;l==="attachment"&&Array.isArray(u[c])?u[c]=u[c].map(f=>m3e(e,f)):(l==="attachment_single"||l==="signature_single")&&u[c]&&(u[c]=m3e(e,u[c]))}return u}))}await t.bulkDocs(n)}o(b3e,"updateAttachmentColumns");async function Fir(e,t){let r=(await t.allDocs(Mc(null,{include_docs:!0}))).rows.map(s=>s.doc),n=F.getDevWorkspaceID(e),i=[];for(let s of r){let a=s.appId,u=F.getProdWorkspaceID(s.appId);if(s.definition.trigger?.stepId==="WEBHOOK"){let c=s.definition.trigger.inputs;s.definition.trigger.inputs={schemaUrl:c.schemaUrl.replace(a,n),triggerUrl:c.triggerUrl.replace(u,e)}}s.appId=n,i.push(s)}await t.bulkDocs(i)}o(Fir,"updateAutomations");async function Bir(e){if(e.file&&e.file.type!=="text/plain")throw new Error("Cannot import a non-text based file.");if(e.file)return Ub.default.createReadStream(e.file.path);if(e.key){let[t,r]=e.key.split("/"),n=await s$e(t,r);return Ub.default.createReadStream((0,Vf.join)(n,r,"db","dump.txt"))}else throw new Error("Either file or key is required.")}o(Bir,"getTemplateStream");async function _3e(e){let t=(0,Vf.join)(cu(),(0,y3e.v4)());return await wu.default.mkdir(t),await g3e.extract({cwd:t,file:e.path}),t}o(_3e,"untarFile");async function qir(e,t){try{let r=o(async n=>{for(let i of await wu.default.readdir(n)){let s=(0,Vf.join)(n,i);if(!s.endsWith(pM)){let a=await wu.default.lstat(s);if(a.isFile()&&s.endsWith(".enc")){let u=s.replace(/\.enc$/,"");await sa.decryptFile(s,u,t),await wu.default.rm(s)}else a.isDirectory()&&await r(s)}}},"processDirectory");await r(e)}catch(r){throw r.message==="incorrect header check"?new Error("File cannot be imported"):r}}o(qir,"decryptFiles");function jir(e){return Ub.default.readFileSync((0,Vf.join)(e,dM),"utf8")}o(jir,"getGlobalDBFile");function Wir(e){return Ub.default.readdirSync(e).filter(t=>t!==dM)}o(Wir,"getListOfAppsInMulti");async function Gir(e,t,r,n={updateAttachmentColumns:!0}){let i=F.getProdWorkspaceID(e),s,a=r.file&&r?.file?.type?.endsWith("gzip"),u=r.file&&(await wu.default.lstat(r.file.path)).isDirectory(),c;if(r.file&&(a||u)){c=a?await _3e(r.file):r.file.path,a&&r.file.password&&await qir(c,r.file.password);let f=await wu.default.readdir(c);if(!!f.find(m=>m.endsWith(".enc")))throw new Error("Files are encrypted but no password has been supplied.");if(!!f.find(m=>m==="plugin.min.js"))throw new Error("Supplied file is a plugin - cannot import as app.");if(!f.find(m=>m===Mb))throw new Error("App export does not appear to be valid - no DB file found.");{let m=[],g=[dM,Mb];for(let w of f){let E=(0,Vf.join)(c,w);g.includes(w)||(w=(0,Vf.join)(i,w),(await wu.default.lstat(E)).isDirectory()?m.push(Se.uploadDirectory(Nn.APPS,E,w)):m.push(Se.upload({bucket:Nn.APPS,path:E,filename:w})))}await Promise.all(m);let y=await wu.default.readdir(c,{recursive:!0}),b=[];await Fe.parallelForeach(Se.listAllObjects(Se.ObjectStoreBuckets.APPS,i),async w=>{w.Key&&!y.includes(w.Key.replace(new RegExp(`^${i}/`),""))&&b.push(w.Key)},5),b.length&&await Se.deleteFiles(Se.ObjectStoreBuckets.APPS,b)}s=Ub.default.createReadStream((0,Vf.join)(c,Mb))}else s=await Bir(r);let{ok:l}=await t.load(s);if(!l)throw"Error loading database dump from template.";return n.updateAttachmentColumns&&await b3e(i,t),await Fir(i,t),c&&await wu.default.rm(c,{recursive:!0,force:!0}),l}o(Gir,"importApp");var A9={};G(A9,{calculateAutomationCount:()=>E3e,calculateBackupStats:()=>$ir,calculateDatasourceCount:()=>w3e,calculateScreenCount:()=>S3e});async function hM(e,t,r){if(r)return t(r);{let n=F.getDevWorkspaceID(e);return C.doInWorkspaceContext(n,()=>{let i=C.getWorkspaceDB();return t(i)})}}o(hM,"runInContext");async function w3e(e,t){return hM(e,async r=>{let n=await r.allDocs($v()),i=await r.allDocs(kf());return n.rows.length+i.rows.length},t)}o(w3e,"calculateDatasourceCount");async function E3e(e,t){return hM(e,async r=>(await r.allDocs(Mc())).rows.length,t)}o(E3e,"calculateAutomationCount");async function S3e(e,t){return hM(e,async r=>(await P.screens.fetch(r)).length,t)}o(S3e,"calculateScreenCount");async function $ir(e){return hM(e,async t=>{let r=[];r.push(w3e(e,t)),r.push(E3e(e,t)),r.push(S3e(e,t));let n=await Promise.all(r);return{datasources:n[0],automations:n[1],screens:n[2]}})}o($ir,"calculateBackupStats");var R9={};G(R9,{clearErrors:()=>Vir});async function Vir(e){let t=C.getProdWorkspaceDB(),r=await t.get("app_metadata");e?r.backupErrors&&r.backupErrors[e]&&delete r.backupErrors[e]:delete r.backupErrors,await t.put(r),await Be.workspace.invalidateWorkspaceMetadata(r.appId,r)}o(Vir,"clearErrors");var mM={...T9,...v9,...A9,...R9};var O9={};G(O9,{getSourceType:()=>Hir});function Hir(e){if(Ns(e))return"table";if(ln(e))return"view";if(fm(e))return"datasource";if(Kre(e))return"query";throw new Error(`Unknown source type for source "${e}"`)}o(Hir,"getSourceType");function T3e(e,t){return!e.disabled&&t?"published":"disabled"}o(T3e,"getPublishedState");async function v3e(){let e=C.getProdWorkspaceId(),t=await P.workspaces.isWorkspacePublished(e),r={automations:[],workspaceApps:[],screens:[],tables:[]},n={automations:[],workspaceApps:[],screens:[],tables:[]},i=o(async h=>{let[m,g,y,b]=await Promise.all([P.automations.fetch(),P.workspaceApps.fetch(),P.screens.fetch(),P.tables.getAllInternalTables()]);h.automations=m,h.workspaceApps=g,h.screens=y,h.tables=b},"updateState");await C.doInWorkspaceContext(C.getDevWorkspaceId(),async()=>i(r));let s;t&&(s=await P.workspaces.metadata.tryGet({production:!0}),await C.doInWorkspaceContext(C.getProdWorkspaceId(),async()=>i(n)));let a=new Set(n.automations.map(h=>h._id)),u=new Set(n.workspaceApps.map(h=>h._id)),c=new Set(n.tables.map(h=>h._id)),l=o((h,m,g)=>{let y=g._id,b=s?.resourcesPublishedAt?.[y],w=m.has(y)||!!b;h[y]={published:w,name:g.name,publishedAt:b,unpublishedChanges:!b||g.updatedAt>b,state:T3e(g,b)}},"processResource"),f={};for(let h of r.automations)l(f,a,h);let d={};for(let h of r.tables)l(d,c,h);let p={};for(let h of r.workspaceApps){let m=s?.resourcesPublishedAt?.[h._id],g=r.screens.filter(y=>y.workspaceAppId===h._id);p[h._id]={published:u.has(h._id),name:h.name,publishedAt:m,unpublishedChanges:!m||!!g.find(y=>y.updatedAt>m),state:T3e(h,m)}}return{automations:f,workspaceApps:p,tables:d}}o(v3e,"status");var A3e={status:v3e};var I9={};G(I9,{create:()=>Kir,fetch:()=>Qir,findByResourceId:()=>Yir,remove:()=>zir});async function Qir(e){return(await C.getWorkspaceDB().find({selector:{_id:{$regex:`^workspace_favourite${ce}`},...e?{createdBy:e}:{}}})).docs}o(Qir,"fetch");async function Kir(e){let r=await C.getWorkspaceDB().put({_id:F.generateWorkspaceFavouriteID(),...e});return{...e,_id:r.id,_rev:r.rev}}o(Kir,"create");async function zir(e,t){return await C.getWorkspaceDB().remove(e,t)}o(zir,"remove");async function Yir(e){return(await C.getWorkspaceDB().find({selector:{_id:{$regex:`^workspace_favourite${ce}`},resourceId:e},limit:1})).docs}o(Yir,"findByResourceId");var C9={};G(C9,{fetch:()=>Jir,fetchWithDocument:()=>Xir});async function Jir(e){if(!Ns(e))throw new Error(`Invalid tableId: ${e}`);let t=C.getWorkspaceDB(),r={startkey:[e],endkey:[e,{}]};return(await t.query(Gv(kc.LINK),r)).rows.map(i=>i.value)}o(Jir,"fetch");async function Xir(e){if(!Ns(e))throw new Error(`Invalid tableId: ${e}`);let t=C.getWorkspaceDB(),r={startkey:[e],endkey:[e,{}],include_docs:!0};return(await t.query(Gv(kc.LINK),r)).rows.map(i=>i.doc)}o(Xir,"fetchWithDocument");var R3e={...C9};var x9={};G(x9,{addLink:()=>Zir,deleteLink:()=>eor,update:()=>tor});async function Zir({label:e,url:t,roleId:r,workspaceAppId:n}){let i=await P.workspaceApps.get(n);if(!i)throw new K("Workspace app should be defined",500);i.navigation.links??=[],i.navigation.links.push({text:e,url:t,roleId:r,type:"link"}),await P.workspaceApps.update(i)}o(Zir,"addLink");async function eor(e,t){let r=await P.workspaceApps.get(t);r.navigation.links??=[];let n=r.navigation.links.filter(i=>i.url!==e);n.forEach(i=>{i.type==="sublinks"&&i.subLinks?.length&&(i.subLinks=i.subLinks.filter(s=>s.url!==e))}),await P.workspaceApps.update({...r,navigation:{...r.navigation,links:n}})}o(eor,"deleteLink");async function tor(e,t){let r=await P.workspaceApps.get(e);if(!r)throw new K("Workspace app not found",400);await P.workspaceApps.update({...r,navigation:t})}o(tor,"update");var D9={};G(D9,{cleanStoredToken:()=>lor,create:()=>ror,fetch:()=>I3e,get:()=>gM,getLastUsages:()=>cor,getToken:()=>aor,remove:()=>ior,update:()=>nor,validateConfig:()=>uor});async function O3e(e,t){if((await I3e()).find(n=>n.name===e&&n._id!==t))throw new K(`OAuth2 config with name '${e}' is already taken.`,400)}o(O3e,"guardName");async function I3e(){return(await C.getWorkspaceDB().allDocs(yt.getOAuth2ConfigParams(null,{include_docs:!0}))).rows.map(n=>({...n.doc,_id:n.doc._id,_rev:n.doc._rev}))}o(I3e,"fetch");async function ror(e){let t=C.getWorkspaceDB();await O3e(e.name);let r=await t.put({_id:`oauth2${ce}${nt.newid()}`,...e});return{_id:r.id,_rev:r.rev,...e}}o(ror,"create");async function gM(e){return await C.getWorkspaceDB().tryGet(e)}o(gM,"get");async function nor(e){let t=C.getWorkspaceDB();await O3e(e.name,e._id);let r=await gM(e._id);if(!r)throw new K(`OAuth2 config with id '${e._id}' not found.`,404);let n={...e,clientSecret:e.clientSecret===Ui?r.clientSecret:e.clientSecret},i=await t.put(n);return await C3e(e._id),{...n,_rev:i.rev}}o(nor,"update");async function ior(e,t){let r=C.getWorkspaceDB();try{await r.remove(e,t)}catch(i){throw i.status===404?new K(`OAuth2 config with id '${e}' not found.`,404):i}await C3e(e);let n=await r.tryGet(yt.generateOAuth2LogID(e));n&&await r.remove(n)}o(ior,"remove");async function C3e(e){let t=Be.CacheKey.OAUTH2_TOKEN(e);await Be.destroy(t)}o(C3e,"cleanCache");var x3e=require("koa"),D3e=U(require("node-fetch"));var{DocWritethrough:oor}=Be.docWritethrough;async function P3e(e){e=await ZVe(e);let t={method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"client_credentials"}),redirect:"follow"},r={grant_type:e.grantType};return e.method==="HEADER"?t.headers={"Content-Type":"application/x-www-form-urlencoded",Authorization:`Basic ${Buffer.from(`${e.clientId}:${e.clientSecret}`,"utf-8").toString("base64")}`}:(r.client_id=e.clientId,r.client_secret=e.clientSecret),e.scope&&(r.scope=e.scope),t.body=new URLSearchParams(r),await(0,D3e.default)(e.url,t)}o(P3e,"fetchToken");var sor=o(async e=>{await new oor(C.getWorkspaceDB(),yt.generateOAuth2LogID(e)).patch({lastUsage:Date.now()})},"trackUsage");async function aor(e){let t=await Be.withCacheWithDynamicTTL(Be.CacheKey.OAUTH2_TOKEN(e),async()=>{let r=await gM(e);if(!r)throw new x3e.HttpError(`oAuth config ${e} count not be found`);let n=await P3e(r),i=await n.json();if(!n.ok){let u=i.error_description??n.statusText;throw new Error(`Error fetching oauth2 token: ${u}`)}let s=`${i.token_type} ${i.access_token}`,a=i.expires_in??-1;return{value:s,ttl:a}});return await sor(e),t}o(aor,"getToken");async function uor(e){try{let t=await P3e(e),r=await t.json();return t.ok?{valid:!0}:{valid:!1,message:r.error_description??t.statusText}}catch(t){return{valid:!1,message:t.message}}}o(uor,"validateConfig");async function cor(e){let t=await C.getWorkspaceDB().getMultiple(e.map(yt.generateOAuth2LogID),{allowMissing:!0}),r=await C.getProdWorkspaceDB().getMultiple(e.map(yt.generateOAuth2LogID),{allowMissing:!0});return e.reduce((i,s)=>{let a=t.find(c=>c._id===yt.generateOAuth2LogID(s));a&&(i[s]=a.lastUsage);let u=r.find(c=>c._id===yt.generateOAuth2LogID(s));return u&&(!i[s]||i[s]<u.lastUsage)&&(i[s]=u.lastUsage),i},{})}o(cor,"getLastUsages");async function lor(e){await Be.destroy(Be.CacheKey.OAUTH2_TOKEN(e),{useTenancy:!0})}o(lor,"cleanStoredToken");var N9={};G(N9,{enrichArrayContext:()=>k3e,enrichContext:()=>P9,fetch:()=>hor,find:()=>por});function N3e(e){if(!e.schema)return e;let t={};for(let r of Object.keys(e.schema))typeof e.schema[r]=="string"?t[r]={type:e.schema[r],name:r}:t[r]=e.schema[r];return e.schema=t,e}o(N3e,"updateSchema");function dor(e){return e.map(t=>N3e(t))}o(dor,"updateSchemas");function L3e(e){let t=Array.isArray(e),r=t?e:[e];for(let n of r)n.queryVerb==="read"&&(n.readable=!0);return t?r:r[0]}o(L3e,"enrichQueries");async function por(e){let t=C.getWorkspaceDB(),r=C.getWorkspaceId(),n=L3e(await t.get(e));return Lf(r)&&(delete n.fields,delete n.parameters),N3e(n)}o(por,"find");async function hor(e={enrich:!0}){let n=(await C.getWorkspaceDB().allDocs(_Y(null,{include_docs:!0}))).rows.map(i=>i.doc);return e.enrich&&(n=await L3e(n)),dor(n)}o(hor,"fetch");async function k3e(e,t={}){let r={};for(let s in e)r[s]=e[s];let n=await P9(r,t),i=[];for(let[s,a]of Object.entries(n))i[parseInt(s)]=a;return i}o(k3e,"enrichArrayContext");async function P9(e,t={}){let r={};if(!e||!t)return r;if(Array.isArray(e))return k3e(e,t);let n=await mu(),i={...t,env:n};for(let s of Object.keys(e))e[s]!=null&&(typeof e[s]=="object"?r[s]=await P9(e[s],i):typeof e[s]=="string"?r[s]=Cr(e[s],i,{noEscaping:!0,noHelpers:!0,escapeNewlines:!0}):r[s]=e[s]);if(r.json||r.customData||r.requestBody){try{r.json=JSON.parse(r.json||r.customData||r.requestBody)}catch{}delete r.customData}return r}o(P9,"enrichContext");var M3e={...N9};var k9={};G(k9,{duplicateResourcesToWorkspace:()=>Dor,getResourcesInfo:()=>mor});var B3e=U(require("lodash/chunk"));async function mor(){let e=await P.automations.fetch(),t=await P.workspaceApps.fetch(),r={},n=[],i=await P.tables.getAllInternalTables(),s=await P.rowActions.getAll();n.push(...i.map(d=>({id:d._id,idToSearch:d._id,name:d.name,type:"table"})));let a=await P.datasources.fetch();n.push(...a.filter(d=>d._id!==Un).map(d=>({id:d._id,idToSearch:d._id,name:d.name,type:"datasource"}))),n.push(...e.map(d=>({id:d._id,idToSearch:d._id,name:d.name,type:"automation"})));let u=await P.queries.fetch();if(n.push(...u.map(d=>({id:d._id,idToSearch:d._id,name:d.name,type:"query"}))),s.length){let d=await P.rowActions.getNames(Object.values(s).flatMap(p=>Object.values(p.actions)));for(let p of s){let h=Object.entries(p.actions).flatMap(([m,g])=>e.filter(y=>y._id===g.automationId).map(y=>({id:y._id,name:y.name,type:"automation"})));for(let[m,g]of Object.entries(p.actions))for(let y of[m,BGe(p._id)])n.push({id:p._id,idToSearch:y,name:d[g.automationId],type:"row_action",extraDependencies:h})}}let c=o((d,p)=>{let h=JSON.stringify(p);r[d]??={dependencies:[]};for(let m of n)if(h.includes(m.idToSearch)&&!r[d].dependencies.find(g=>g.id===m.id)){r[d].dependencies.push({id:m.id,name:m.name,type:m.type});let g=[...m.extraDependencies||[],...r[m.id]?.dependencies||[]].filter(({id:y})=>!r[d].dependencies.some(b=>b.id===y));r[d].dependencies.push(...g)}},"searchForUsages");for(let d of i)c(d._id,d);for(let d of e)c(d._id,d);for(let d of u)c(d._id,d);let l=await P.screens.fetch(),f={};for(let d of l)d.workspaceAppId&&(f[d.workspaceAppId]||(f[d.workspaceAppId]=[]),f[d.workspaceAppId].push(d));for(let d of t){let p=f[d._id]||[];r[d._id]??={dependencies:[]},r[d._id].dependencies.push(...p.map(h=>({id:h._id,name:h.name,type:"screen"})));for(let h of p)c(d._id,h)}for(let d of Object.values(r).flatMap(p=>p.dependencies).filter(p=>p.type==="row_action")){let p=s.find(h=>h._id===d.id);if(p)for(let h of Object.values(p.actions)){if(r[d.id]?.dependencies.some(g=>g.id===h.automationId))continue;let m=e.find(g=>g._id===h.automationId);m&&(r[d.id]??={dependencies:[]},r[d.id].dependencies.push({id:m._id,name:m.name,type:"automation"}))}}return r}o(mor,"getResourcesInfo");async function gor(e){let t=F.getDB(F.getDevWorkspaceID(e),{skip_setup:!0});if(!await t.exists())throw new K("Destination workspace does not exist",400);return t}o(gor,"getDestinationDb");var yor={datasource:ti("datasource"),table:ti("ta"),row_action:ti("ra"),query:ti("query"),automation:ti("au"),workspace_app:ti("workspace_app"),screen:ti("screen")};function bM(e){return Object.entries(yor).find(([r,n])=>e.startsWith(n))?.[0]}o(bM,"getResourceType");function U3e(e){return e._id?bM(e._id)==="automation":!1}o(U3e,"isAutomation");function bor(e){return e._id?bM(e._id)==="workspace_app":!1}o(bor,"isWorkspaceApp");function _or(e){return e._id?bM(e._id)==="table":!1}o(_or,"isTable");var wor=new Set(["attachment","attachment_single","signature_single"]),Eor=o(e=>!!e?.type&&wor.has(e.type),"isAttachmentColumn"),Sor=o(e=>e.schema?Object.entries(e.schema).filter(([,t])=>Eor(t)).map(([t,r])=>({field:t,type:r.type})):[],"getAttachmentColumns"),Tor=o((e,t,r)=>{if(!e?.startsWith(`${t}/`)||t===r)return e;let n=e.slice(t.length);return`${r}${n}`},"buildDestinationAttachmentKey");async function vor(e,t,r){if(!e||e===t)return e;r.has(e)||r.set(e,(async()=>{try{if(await Se.objectExists(Nn.APPS,t))return t}catch(i){ke.logWarn("Resource duplication: failed to check attachment existence",{err:i,key:e,destinationKey:t})}try{let{stream:i,contentType:s}=await Se.getReadStream(Nn.APPS,e);return await Se.streamUpload({bucket:Nn.APPS,stream:i,filename:t,type:s}),t}catch(i){ke.logWarn("Resource duplication: failed to copy attachment",{err:i,key:e,destinationKey:t});return}})());let n=await r.get(e);return n===void 0&&r.delete(e),n}o(vor,"copyAttachmentToWorkspace");async function F3e(e,t){if(!e?.key||!t.sourceProdWorkspaceId||!t.destinationProdWorkspaceId||t.sourceProdWorkspaceId===t.destinationProdWorkspaceId)return e;let r=Tor(e.key,t.sourceProdWorkspaceId,t.destinationProdWorkspaceId);if(!r||r===e.key)return e;let n=await vor(e.key,r,t.cache);return n?{...e,key:n,url:""}:e}o(F3e,"remapAttachmentValue");async function Aor(e,t,r){if(!t.length)return;let n=e;for(let i of t){let s=n[i.field];if(s)if(i.type==="attachment"&&Array.isArray(s)){let a=[];for(let u of s){let c=await F3e(u,r);a.push(c)}n[i.field]=a}else(i.type==="attachment_single"||i.type==="signature_single")&&s&&(n[i.field]=await F3e(s,r))}}o(Aor,"remapRowAttachments");var yM=1e3,Ror=250,L9=3,Oor=o(e=>new Promise(t=>setTimeout(t,e)),"delay");async function Ior(e,t){let r=C.getWorkspaceDB(),n={include_docs:!0,limit:yM+(t?1:0)};t&&(n.startkey=t,n.skip=1);let s=(await r.allDocs(sn(e,null,n))).rows.map(c=>c.doc).filter(c=>!!c),a=s.length>yM?s.slice(0,yM):s,u=a.length===yM?a[a.length-1]._id:void 0;return{rows:a,nextStartAfter:u}}o(Ior,"fetchTableRowsPage");async function Cor(e,t){let r=(0,B3e.default)(t,Ror);for(let n of r){let i=n,s=0;for(;i.length&&s<L9;){s++;let a=await e.bulkDocs(i),u=[];if(a.forEach((c,l)=>{c.error&&u.push(i[l])}),!u.length)break;if(s>=L9)throw new Error(`Failed to copy ${u.length} row(s) after ${L9} attempts.`);await Oor(s*250),i=u}}}o(Cor,"bulkInsertRows");async function xor(e,t,r,n){if(!e.length)return;let i=F.getProdWorkspaceID(r),s=F.getProdWorkspaceID(n),a=new Map;for(let u of e){if(u.sourceId!==Un)continue;if(!!(await t.allDocs(sn(u._id,null,{include_docs:!1,limit:1}))).rows.length){ke.logWarn("Resource duplication: destination table already contains rows, skipping copy",{tableId:u._id,tableName:u.name});continue}let l=Sor(u),f;do{let{rows:d,nextStartAfter:p}=await Ior(u._id,f);if(f=p,!d.length)break;let h=[];for(let m of d){await Aor(m,l,{sourceProdWorkspaceId:i,destinationProdWorkspaceId:s,cache:a});let g={...m,fromWorkspace:r};delete g._rev,delete g.createdAt,delete g.updatedAt,h.push(g)}await Cor(t,h)}while(f)}}o(xor,"duplicateInternalTableRows");async function Dor(e,t,r){e=Array.from(new Set(e).keys());let n=await gor(t),i=await n.getMultiple(e,{allowMissing:!0}),s=new Set(i.map(p=>p._id)),a=e.filter(p=>!s.has(p)),u=await C.getWorkspaceDB().getMultiple(e,{allowMissing:!1}),c=u.filter(p=>p._id&&a.includes(p._id)),l=C.getWorkspaceId();if(!l)throw new Error("Could not get workspaceId");if(c.length&&await n.bulkDocs(c.map(p=>{let h={...p,fromWorkspace:l};return delete h._rev,delete h.createdAt,delete h.updatedAt,(U3e(h)||bor(h))&&(h.disabled=!0),U3e(h)&&(h.appId=t),h})),(r?.copyRows??!0)&&await xor(u.filter(_or),n,l,t),!c.length)return;let f=(await P.workspaces.metadata.tryGet())?.name||l,d=await C.doInContext(t,async()=>(await P.workspaces.metadata.tryGet())?.name||t);for(let p of c){let h,m;switch(bM(p._id)){case"automation":h=p.name,m="Automation";break;case"datasource":h=p.name||"Unknown",m="Datasource";break;case"query":h=p.name,m="Query";break;case"row_action":h=p._id,m="Row action";break;case"table":h=p.name,m="Table";break;case"screen":h=p.name||"Unkown",m="Screen";break;case"workspace_app":h=p.name,m="App";break;case void 0:throw new Error("Resource type could not be infered");default:throw new Error("Unreachable")}let y={id:p._id,name:h,type:m};await Oe.resource.duplicatedToWorkspace({resource:y,fromWorkspace:f,toWorkspace:d})}}o(Dor,"duplicateResourcesToWorkspace");var M9={};G(M9,{create:()=>Nor,deleteAll:()=>kor,deleteAllForDatasource:()=>Gor,docExists:()=>Mor,get:()=>q3e,getAll:()=>Lor,getAllForTable:()=>_M,getNames:()=>W3e,remove:()=>jor,run:()=>Wor,setTablePermission:()=>Uor,setViewPermission:()=>Bor,unsetTablePermission:()=>For,unsetViewPermission:()=>qor});async function Por(e,t,r){let n=await W3e(Object.values(e.actions));if(t=t.toLowerCase().trim(),Object.entries(n).find(([i,s])=>s.toLowerCase().trim()===t&&i!==r))throw new K("A row action with the same name already exists.",409)}o(Por,"ensureUniqueAndThrow");async function Nor(e,t){let r={name:t.name.trim()},n=C.getWorkspaceDB(),i=sk(e),s=await n.tryGet(i);s||(s={_id:i,actions:{}}),await Por(s,r.name);let a=C.getWorkspaceId();if(!a)throw new Error("Could not get the current appId");let u=`row_action${ce}${nt.newid()}`,c=await _u.create({name:r.name,appId:a,definition:{trigger:{id:"trigger",...Ve.triggers.definitions.ROW_ACTION,stepId:"ROW_ACTION",inputs:{tableId:e,rowActionId:u}},steps:[]}});return s.actions[u]={automationId:c._id,permissions:{table:{runAllowed:!0},views:{}}},await n.put(s),{id:u,name:c.name,...s.actions[u]}}o(Nor,"create");async function q3e(e,t){let n=(await _M(e))?.actions[t];if(!n)throw new K(`Row action '${t}' not found in '${e}'`,400);return n}o(q3e,"get");async function _M(e){let t=C.getWorkspaceDB(),r=sk(e);return await t.tryGet(r)}o(_M,"getAllForTable");async function Lor(){return(await C.getWorkspaceDB().allDocs(yt.getDocParams("ra",void 0,{include_docs:!0}))).rows.map(t=>t.doc)}o(Lor,"getAll");async function kor(e){let t=C.getWorkspaceDB(),r=await _M(e);if(!r)return;let n=Object.values(r.actions).map(s=>s.automationId),i=await t.getMultiple(n);for(let s of i)await P.automations.remove(s._id,s._rev);await t.remove(r)}o(kor,"deleteAll");async function Mor(e){let t=C.getWorkspaceDB(),r=sk(e);return await t.exists(r)}o(Mor,"docExists");async function IA(e,t,r){let n=await _M(e);if(!n?.actions[t])throw new K(`Row action '${t}' not found in '${e}'`,400);let s=await r(n);return await C.getWorkspaceDB().put(s),{id:t,...s.actions[t]}}o(IA,"updateDoc");async function j3e(e,t){let r;if(ln(t)&&(r=await P.views.get(t)),!r||r.tableId!==e)throw new K(`View '${t}' not found in '${e}'`,400)}o(j3e,"guardView");async function Uor(e,t){return await IA(e,t,async r=>(r.actions[t].permissions.table.runAllowed=!0,r))}o(Uor,"setTablePermission");async function For(e,t){return await IA(e,t,async r=>(r.actions[t].permissions.table.runAllowed=!1,r))}o(For,"unsetTablePermission");async function Bor(e,t,r){return await j3e(e,r),await IA(e,t,async n=>(n.actions[t].permissions.views[r]={runAllowed:!0},n))}o(Bor,"setViewPermission");async function qor(e,t,r){return await j3e(e,r),await IA(e,t,async n=>(delete n.actions[t].permissions.views[r],n))}o(qor,"unsetViewPermission");async function jor(e,t){return await IA(e,t,async r=>{let{automationId:n}=r.actions[t],i=await _u.get(n);return await _u.remove(i._id,i._rev),delete r.actions[t],r})}o(jor,"remove");async function Wor(e,t,r,n){let i=await P.tables.getTable(e);if(!i)throw new K("Table not found",404);let{automationId:s}=await q3e(e,t),a=await P.automations.get(s),u=await P.rows.find(e,r);await jc(a,{fields:{id:u._id,revision:u._rev,row:u,table:i},user:n,appId:C.getWorkspaceId()},{getResponses:!0})}o(Wor,"run");async function W3e(e){return(await P.automations.find(e.map(({automationId:n})=>n))).reduce((n,i)=>(n[i._id]=i.name,n),{})}o(W3e,"getNames");async function Gor(e){let r=(await P.tables.getAllTables()).filter(n=>n.sourceId===e);for(let n of Object.values(r))await P.rowActions.deleteAll(n._id)}o(Gor,"deleteAllForDatasource");var F9={};G(F9,{FIND_LIMIT:()=>U9,getRowsWithAttachments:()=>Vor});var U9=25;function $or(e,t,r){let n={selector:{$or:t.map(i=>({[i]:{$exists:!0}})),_id:{$regex:`^ro${St}${e}`}},limit:U9};return r&&(n.bookmark=r),n}o($or,"generateAttachmentFindParams");async function Vor(e,t){let r=F.getDB(e),n=[];for(let[u,c]of Object.entries(t.schema))(c.type==="attachment"||c.type==="attachment_single"||c.type==="signature_single")&&n.push(u);if(n.length===0)return{rows:[],columns:[]};let i,s=0,a=[];do{let u=$or(t._id,n,i),c=await r.find(u);i=c.bookmark,s=c.docs.length;let l=c.docs;a=a.concat(l)}while(s===U9);return{rows:a,columns:n}}o(Vor,"getRowsWithAttachments");var H9={};G(H9,{find:()=>isr,getAllInternalRows:()=>rsr,save:()=>nsr});var DA={};G(DA,{find:()=>Zor,getRow:()=>G9,save:()=>Xor});var V3e=U(require("lodash/fp/cloneDeep"));var W9={};G(W9,{bulkDestroy:()=>Yor,destroy:()=>zor,fetchEnrichedRow:()=>Jor,handleRequest:()=>Mi,patch:()=>Kor});var B9=U(require("dayjs")),xA=require("lodash"),$3e=require("lodash/fp");function Hor(e,t){let r=["string","longform","options","number"],n=Object.entries(t.schema).filter(s=>r.find(a=>a===s[1].type)).map(s=>s[0]),i=o(s=>{for(let[a,u]of Object.entries(s))n.find(c=>c===a)&&g$e(u)&&(s[a]=y$e(u))},"iterateObject");if(e.filters)for(let[s,a]of Object.entries(e.filters))typeof a!="object"||Object.keys(a).length===0||s==="oneOf"||i(a);return e.row&&i(e.row),e}o(Hor,"cleanupConfig");function CA(e,t){let{datasourceId:r,tableName:n}=wr(e);return{datasourceId:r,entityId:n,operation:t}}o(CA,"getEndpoint");function G3e(e){return e.relationshipType&&e.relationshipType.split("-")[0]==="one"}o(G3e,"isOneSide");function Qor(e){let t=e.autocolumn&&e.autoReason!=="foreign_key"&&e.subtype!=="autoID",r=e.type==="formula",n=e.type==="ai";return!(t||r||n)}o(Qor,"isEditableColumn");var wM=class e{static{o(this,"ExternalRequest")}static async for(t,r,n={}){if(!n.datasource)if(P.views.isView(r)){let i=await P.views.getTable(r.id);n.datasource=await P.datasources.get(i.sourceId)}else n.datasource=await P.datasources.get(r.sourceId);return new e(t,r,n.datasource)}get tables(){if(!this.datasource.entities)throw new Error("Datasource does not have entities");return this.datasource.entities}constructor(t,r,n){this.operation=t,this.source=r,this.datasource=n}prepareFilters(t,r,n){let i=n.primary,s=(0,$3e.cloneDeep)(t);if(r){let u=1,c=o(l=>{for(let[f,d]of Object.entries(l)){let p=P.rows.utils.isArrayFilter(f);for(let h of Object.keys(d||{}))if(F.removeKeyNumbering(h)==="_id"){if(i){let m=Ln(d[h]);if(i.length>1&&p)d._complexIdOperator={id:i,values:m[0]};else{for(let g of i)d[`${u}:${g}`]=m.shift();u++}}delete d[h]}}return Tt.recurseLogicalOperators(l,c)},"checkFilters");c(r)}if(!s||!n)return r;Array.isArray(s)||(s=Ln(s));let a={};if(i&&s)for(let u of i)a[u]=s.shift();return{equal:a}}async removeManyToManyRelationships(t,r){let n=this.prepareFilters(t,{},r);if(Object.keys(n).length!==0){let i=CA(r._id,"DELETE");await gu({endpoint:i,filters:n})}}async removeOneToManyRelationships(t,r,n){let i=r._id,s=this.prepareFilters(t,{},r);Object.keys(s).length!==0&&await gu({endpoint:CA(i,"UPDATE"),body:{[n]:null},filters:s})}getTable(t){if(!t)throw new Error("Table ID is unknown, cannot find table");let{tableName:r}=wr(t);return this.tables[r]}async getRow(t,r){let n=await gu({endpoint:CA(t._id,"READ"),filters:this.prepareFilters(r,{},t)});if(Array.isArray(n)&&n.length>0)return n[0];throw new Error(`Cannot fetch row by ID "${r}"`)}inputProcessing(t,r){if(!t)return{row:t,manyRelationships:[]};let n=r.primary[0],i={},s=[];for(let[a,u]of Object.entries(r.schema))if(!(t[a]===void 0||i[a])&&!(this.operation!=="BULK_UPSERT"&&!Qor(u)))if(u.type==="number"&&!isNaN(parseFloat(t[a])))i[a]=parseFloat(t[a]);else if(u.type==="link"){let{tableName:c}=wr(u.tableId);if(!c||!this.tables[c])continue;let f=this.tables[c].primary[0];if(G3e(u)){let d=t[a][0];d?(typeof t[a]=="string"&&(d=decodeURIComponent(t[a]).match(/\[(.*?)\]/)?.[1]),i[u.foreignKey||f]=Ln(d)[0]):(t[u.foreignKey||f]=null,i[u.foreignKey||f]=null)}else if(Kv(u)){let d=u.throughFrom||f,p=u.throughTo||n;for(let h of t[a])s.push({tableId:u.through||u.tableId,isUpdate:!1,key:u.fieldName,[d]:Ln(h)[0],[p]:`{{ literal ${n} }}`,relationshipType:"many-to-many"})}else for(let d of t[a])s.push({id:Ln(d)[0],tableId:u.tableId,isUpdate:!0,key:u.fieldName,[u.fieldName]:`{{ literal ${n} }}`,relationshipType:"many-to-one"})}else u.type==="datetime"&&u.timeOnly&&t[a]&&(0,B9.default)(t[a]).isValid()?i[a]=(0,B9.default)(t[a]).format("HH:mm"):i[a]=t[a];return{row:i,manyRelationships:s}}getLookupRelationsKey(t){return t.relationshipType==="many-to-many"?`${t.through}_${t.fieldName}`:t.fieldName}async lookupRelations(t,r){let n={},{tableName:i}=wr(t),s=this.tables[i],a=s.primary?.[0];for(let u of Object.values(s.schema)){if(u.type!=="link"||!u.fieldName||G3e(u))continue;let c,l,f;if(Kv(u)?(c=u.through,l=a,f=u.throughTo||a):JA(u)&&(c=u.tableId,l=u.foreignKey,f=u.fieldName),!c||!l||!f)throw new Error("Unable to lookup relationships - undefined column properties.");if(!l||!r?.[l])continue;let d=CA(c,"READ");if(!this.tables[d.entityId])throw new Error("unable to find related table");let h=await gu({endpoint:d,filters:{equal:{[f]:r[l]}}}),m=!Array.isArray(h)||NY(h)?[]:h,g=this.getLookupRelationsKey(u);n[g]={rows:m,isMany:Kv(u),tableId:c}}return n}async handleManyRelationships(t,r,n){let i=await this.lookupRelations(t,r);for(let a of n){let{key:u,tableId:c,isUpdate:l,id:f,relationshipType:d,...p}=a;if(!c)throw new Error("Table ID is unknown, cannot find table");let h=Iv(p,r,{}),m=this.getTable(c),g=m?.primary||[],y=g[0];if(!m||!y)return;let b=g[1],w=this.getLookupRelationsKey({relationshipType:d,fieldName:u,through:a.tableId}),E=i[w]?.rows||[],S=o(({row:O,linkPrimary:I,linkSecondary:D,relationshipType:x})=>{if(x==="many-to-many")return(0,xA.isEqual)((0,xA.omit)(O,[I]),(0,xA.omit)(h,[I]));let W=O[I]===a.id||O[I]===h?.[I];if(!W||!D)return W;let N=O[D]===h?.[D];return W&&N},"relationshipMatchPredicate"),T=E.find(O=>S({row:O,linkPrimary:y,linkSecondary:b,relationshipType:a.relationshipType})),R=l?"UPDATE":"CREATE",A=[];T?E.splice(E.indexOf(T),1):A.push(gu({endpoint:CA(c,R),body:h,filters:this.prepareFilters(f,{},m)})),await Promise.all(A)}let s=[];for(let[a,{isMany:u,rows:c,tableId:l}]of Object.entries(i)){let f=this.getTable(l);if(!(!f||!u&&f.primary&&f.primary.indexOf(a)!==-1))for(let d of c){let p=Uc(d,f);u?s.push(this.removeManyToManyRelationships(p,f)):s.push(this.removeOneToManyRelationships(p,f,a))}}await Promise.all(s)}async removeRelationshipsToRow(t,r){let n=await this.getRow(t,r),i=await this.lookupRelations(t._id,n),s=[];for(let a of Object.values(t.schema)){if(!Uf(a)||YA(a))continue;let u=this.getLookupRelationsKey(a);if(!i[u])continue;let{rows:c,isMany:l,tableId:f}=i[u],d=this.getTable(f);for(let p of c){let h=Uc(p,d);l?s.push(this.removeManyToManyRelationships(h,d)):s.push(this.removeOneToManyRelationships(h,d,a.fieldName))}}await Promise.all(s)}async run(t){let{operation:r}=this,n;P.views.isView(this.source)?n=await P.views.getTable(this.source.id):n=this.source;let i=Bf(this.datasource),{id:s,row:a,filters:u,sort:c,paginate:l,rows:f}=Hor(t,n);for(let R of Object.keys(c||{}))if(c?.[R])switch(n.schema[R]?.type){case"formula":delete c?.[R];break;case"number":c&&c[R]&&(c[R].type="number");break}u=this.prepareFilters(s,u||{},n);let d=S$e(n,this.tables),p=[];if(P.views.isView(this.source)){let R=de.views.calculationFields(this.source);for(let[A,O]of Object.entries(R))p.push({...O,name:A})}let h=p.length===0&&t.includeSqlRelationships===1,m=t.row,g=this.inputProcessing(a,n);a=g.row;let y=g.manyRelationships;if(!a&&f){y=[];for(let R=0;R<f.length;R++){let A=this.inputProcessing(f[R],n);f[R]=A.row,A.manyRelationships.length&&y.push(...A.manyRelationships)}}if(r==="DELETE"&&(u==null||Object.keys(u).length===0))throw"Deletion must be filtered";let b={endpoint:{datasourceId:this.datasource,entityId:n,operation:r},resource:{fields:i?await v$e(this.source,this.tables,{relationships:h}):[],aggregations:p},filters:u,sort:c,paginate:l,relationships:d,body:a||f,extra:{idFilter:this.prepareFilters(s||Uc(a,n),{},n)}};r==="DELETE"&&s&&await this.removeRelationshipsToRow(n,lk(s));let w=new P.rows.AliasTables(Object.keys(this.tables)),E;if(this.operation==="UPDATE"&&Object.keys(a||{}).length===0&&m?E=[m]:E=ie.SQL_ALIASING_DISABLE?await gu(b):await w.queryWithAliasing(await Lh(b),gu),this.operation==="COUNT")return iA(E);let S=Array.isArray(E)?E:[];r!=="READ"&&await this.handleManyRelationships(n._id||"",S[0],g.manyRelationships);let T=await _k(E,this.source,this.tables,d);return r==="READ"?{rows:Array.isArray(T)?T:[T],rawResponseSize:S.length}:{row:T[0],table:n}}};var j9=require("lodash");async function Mi(e,t,r){return(await wM.for(e,t,{datasource:r?.datasource})).run(r||{})}o(Mi,"handleRequest");async function Kor(e){let t=await Bc(e),{viewId:r,tableId:n}=ei(e),i=r||n;P.views.isView(t)&&de.views.isCalculationView(t)&&e.throw(400,"Cannot update rows through a calculation view");let s=await Ih(t),{_id:a,...u}=e.request.body,c=await P.rows.external.getRow(s._id,a,{relationships:!0}),l=(0,j9.cloneDeep)(c),f=V$e(t);for(let b of Object.keys(u))f.includes(b)&&(l[b]=u[b]);l=await ba(e.user?._id,(0,j9.cloneDeep)(t),l);let d=await P.rows.utils.validate({row:l,source:t});if(!d.valid)throw{validation:d.errors};let p=await Mi("UPDATE",t,{id:Ln(a),row:l}),h=Uc({...c,...l},s)||a,m=await P.rows.external.getRow(i,h,{relationships:!0}),[g,y]=await Promise.all([Jt(t,m,{squash:!0,preserveLinks:!0}),Jt(t,c,{squash:!0,preserveLinks:!0})]);return{...p,row:g,table:s,oldRow:y}}o(Kor,"patch");async function zor(e){let t=await Bc(e);if(P.views.isView(t)&&de.views.isCalculationView(t))throw new K("Cannot delete rows through a calculation view",400);let r=e.request.body._id,{row:n}=await Mi("DELETE",t,{id:Ln(r),includeSqlRelationships:0});return{response:{ok:!0,id:r},row:n}}o(zor,"destroy");async function Yor(e){let{rows:t}=e.request.body,r=await Bc(e),n=[];for(let a of t)n.push(Mi("DELETE",r,{id:Ln(a._id),includeSqlRelationships:0}));let s=(await Promise.all(n)).map(a=>a.row).filter(a=>a&&a._id);return{response:{ok:!0},rows:s}}o(Yor,"bulkDestroy");async function Jor(e){let t=e.params.rowId,r=await Bc(e),{tableId:n}=ei(e),{datasourceId:i,tableName:s}=wr(n),a=await P.datasources.get(i);(!a||!a.entities)&&e.throw(400,"Datasource has not been configured for plus API.");let u=a.entities,c=await Mi("READ",r,{id:t,datasource:a,includeSqlRelationships:1}),l=u[s],f=c.rows[0];for(let[d,p]of Object.entries(l.schema)){if(p.type!=="link"||!f[d]||f[d].length===0)continue;let h=f[d],m=p.tableId,g=wr(m).tableName,y=u[g],b=h.map(S=>Ln(S._id)[0]),w=y.primary?.[0],E=await Mi("READ",y,{tables:u,filters:{oneOf:{[w]:b}},includeSqlRelationships:1});f[d]=await Jt(y,E.rows,{squash:!0,preserveLinks:!0})}return f}o(Jor,"fetchEnrichedRow");async function G9(e,t,r){let n;return typeof e=="string"?ln(e)?n=await P.views.get(e):n=await P.tables.getTable(e):n=e,((await Mi("READ",n,{id:Ln(t),includeSqlRelationships:r?.relationships?1:0}))?.rows||[])[0]}o(G9,"getRow");async function Xor(e,t,r){let{tableId:n,viewId:i}=kh(e),s;if(i?s=await P.views.get(i):s=await P.tables.getTable(n),P.views.isView(s)&&de.views.isCalculationView(s))throw new K("Cannot insert rows through a calculation view",400);let a=await ba(r,(0,V3e.default)(s),t),u=await P.rows.utils.validate({row:a,source:s});if(!u.valid)throw{validation:u.errors};let c=await Mi("CREATE",s,{row:a}),l=c.row._id;if(l){let f=await G9(s,l,{relationships:!0});return{...c,row:await Jt(s,f,{preserveLinks:!0,squash:!0})}}else return c}o(Xor,"save");async function Zor(e,t){let{tableId:r,viewId:n}=kh(e),i;n?i=await P.views.get(n):i=await P.tables.getTable(r);let s=await G9(i,t,{relationships:!0});if(!s)throw new K("Row not found",404);return await Jt(i,s,{squash:!0,preserveLinks:!0})}o(Zor,"find");var V9={};G(V9,{find:()=>tsr,findRow:()=>PA,save:()=>esr});async function $9(e){let t=await O$e(e),r;delete t._id,delete t._rev;try{r=await C.getWorkspaceDB().get(e),delete r.csrfToken}catch{}return{...r,...t,roleId:t.roleId||Et.BUILTIN_ROLE_IDS.PUBLIC,tableId:Vt.USER_METADATA,_id:e}}o($9,"getFullUser");async function esr(e,t,r,n){let{tableId:i,viewId:s}=kh(e);t.tableId=i;let a,u;if(s?(a=await P.views.get(s),u=await P.views.getTable(s)):(a=await P.tables.getTable(i),u=a),P.views.isView(a)&&de.views.isCalculationView(a))throw new K("Cannot insert rows through a calculation view",400);!t._rev&&!t._id&&(t._id=F.generateRowID(t.tableId));let c=await ba(r,a,t),l=await P.rows.utils.validate({row:c,source:a});if(!l.valid)throw{validation:l.errors};return c=await ya({eventType:"row:save",row:c,tableId:c.tableId,table:u}),sA(a,c,{updateFormula:!0,updateAIColumns:n?.updateAIColumns||!0})}o(esr,"save");async function tsr(e,t){let r=await XJ(e);return await Jt(r,await PA(e,t),{squash:!0})}o(tsr,"find");async function PA(e,t){let{tableId:r}=kh(e),n=C.getWorkspaceDB(),i;if(r===Vt.USER_METADATA?i=await $9(t):i=await n.get(t),i.tableId!==r)throw"Supplied tableId does not match the rows tableId";return i}o(PA,"findRow");async function rsr(e){let t;return e?t=F.getDB(e):t=C.getWorkspaceDB(),(await t.allDocs(sn(null,null,{include_docs:!0}))).rows.map(n=>n.doc)}o(rsr,"getAllInternalRows");function H3e(e){let t=e;return ln(e)&&(t=Zr(e)),Mt(t)?DA:V9}o(H3e,"pickApi");async function nsr(e,t,r,n){return H3e(e).save(e,t,r,n)}o(nsr,"save");async function isr(e,t){return H3e(e).find(e,t)}o(isr,"find");var rX={};G(rX,{exportRows:()=>Rsr,fetch:()=>Osr,fetchLegacyView:()=>Csr,fetchRaw:()=>Isr,isValidFilter:()=>b$e,search:()=>Asr});var X9={};G(X9,{exportRows:()=>gsr,fetch:()=>oQe,fetchLegacyView:()=>J9,fetchRaw:()=>Y9,sqs:()=>NA});var NA={};G(NA,{buildInternalFieldList:()=>K9,search:()=>nQe});var J3e=U(require("dd-trace")),X3e=require("lodash"),Z3e=U(require("lodash/pick"));var Q3e=require("lodash");var osr=["CREATE","UPDATE","DELETE"],ssr=["mysql2","mssql","oracledb"],asr=["CREATE_TABLE","UPDATE_TABLE","DELETE_TABLE"],Q9=class e{static{o(this,"CharSequence")}static{this.alphabet="abcdefghijklmnopqrstuvwxyz"}constructor(){this.counters=[0]}getCharacter(){let t=this.counters.map(r=>e.alphabet[r]).join("");for(let r=this.counters.length-1;r>=0;r--){if(this.counters[r]<e.alphabet.length-1)return this.counters[r]++,t;this.counters[r]=0}return this.counters.unshift(0),t}},Bh=class{static{o(this,"AliasTables")}constructor(t){this.tableNames=t,this.aliases={},this.tableAliases={},this.charSeq=new Q9}isAliasingEnabled(t,r){let n=t.resource?.fields?.length;if(!n||n<=0||asr.includes(t.operation))return!1;if(!r)return!0;try{let i=JJ(r),s=osr.includes(t.operation),a=ssr.includes(i);if(s&&a)return!1}catch{return!1}return!0}getAlias(t){if(typeof t=="object"&&(t=t.name),this.aliases[t])return this.aliases[t];let r=this.charSeq.getCharacter();return this.aliases[t]=r,this.tableAliases[r]=t,r}aliasField(t){let r=this.tableNames;if(t.includes(".")){let[n,...i]=t.split("."),s=i.join("."),a=r.find(u=>{let c=n.indexOf(u);if(c===-1||c>1)return;let l=c*2;return Math.abs(n.length-u.length)<=l});a&&(t=`${n.replace(a,this.getAlias(a))}.${s}`)}return t}reverse(t){let r=new Map,n=o(i=>{let s={};for(let a of Object.keys(i)){let u=r.get(a);if(!u){let c=a.indexOf(".");if(c===-1)u=a;else{let l=a.slice(0,c),f=a.slice(c+1);u=`${this.tableAliases[l]||l}.${f}`}r.set(a,u)}s[u]=i[a]}return s},"process");return Array.isArray(t)?t.map(i=>n(i)):n(t)}aliasMap(t){let r={};for(let n of t)n&&(r[n]=this.getAlias(n));return r}async queryWithAliasing(t,r){let n=t.datasource,i=n===void 0,s;if(i?s=this.isAliasingEnabled(t):s=this.isAliasingEnabled(t,n),s){if(t=(0,Q3e.cloneDeep)(t),t.resource?.fields&&(t.resource.fields=t.resource.fields.map(c=>this.aliasField(c))),t.filters){let c=o(l=>{for(let[f,d]of Object.entries(l)){if(typeof d!="object")continue;let p={};for(let h of Object.keys(d))p[this.aliasField(h)]=d[h];l[f]=p}return Tt.recurseLogicalOperators(l,c)},"aliasFilters");t.filters=c(t.filters)}t.relationships&&(t.relationships=t.relationships.map(c=>({...c,aliases:this.aliasMap([c.through,c.tableName,t.table.name])}))),this.getAlias(t.table);for(let c of Object.keys(t.tables))this.getAlias(c);let u={};for(let[c,l]of Object.entries(this.tableAliases))u[l]=c;t.tableAliases=u}let a=await r(t);return Array.isArray(a)&&s?this.reverse(a):a}};function usr(e,t,r){if(t){for(let n of Object.values(t))if(typeof n=="object")for(let[i,s]of Object.entries(n))i.endsWith(e)&&(n[i]=r(s))}}o(usr,"findColumnInQueries");function K3e(e,t){usr(e,t,r=>{let n=Array.isArray(r);if(!(typeof r=="string")&&!n)return r;let s=o(a=>{let u="ro"+ce;return a.startsWith(u)?F.getGlobalIDFromUserMetadataID(a):a},"processString");return n?r.map(a=>typeof a=="string"?s(a):a):s(r)})}o(K3e,"userColumnMapping");function EM(e,t){for(let[r,n]of Object.entries(e.schema||{}))switch(n.type){case"bb_reference_single":{let i=n.subtype;switch(i){case"user":K3e(r,t);break;default:Fe.unreachable(i)}break}case"bb_reference":{K3e(r,t);break}}return Tt.recurseLogicalOperators(t,r=>EM(e,r))}o(EM,"checkFilters");function z3e(e,t){return t.query&&(t.query=EM(e,t.query)),t}o(z3e,"searchInputMapping");function SM(e){for(let t of Object.values(e)){if(typeof t!="object")continue;if(Object.keys(t).find(n=>F.removeKeyNumbering(n)==="_id"&&t[n]))return!0}return!1}o(SM,"isSearchingByRowID");var eQe=new ze.Sql("sqlite3"),csr=2e3,tQe=new RegExp("no such column: .+"),lsr=new RegExp("no such table: .+"),fsr=new RegExp("duplicate column name: .+");async function K9(e,t,r){let{relationships:n,allowedFields:i,includeHiddenFields:s}=r||{},a=[],u=P.views.isView(e),c;u?c=await P.views.getTable(e.id):c=e,u?a=Object.keys(de.views.basicFields(e)):a=Object.keys(e.schema).filter(p=>s||e.schema[p].visible!==!1);let l=a.some(p=>c.schema[p]?.type==="formula");l?a=Object.keys(c.schema):i&&(a=a.filter(p=>i.includes(p)));let f=[],d=o((p,h)=>{let m=[];return h.forEach(g=>{m.push(`${Mf(c._id,p._id)}.${g}`)}),m},"getJunctionFields");if(P.tables.isTable(e))for(let p of Tn)i&&!i.includes(p)||f.push(`${c._id}.${p}`);for(let p of a){let h=c.schema[p];if(!h)continue;let m=h.type==="link";if(!(!n&&m))if(!m)f.push(`${c._id}.${bu(p)}`);else{let g=h,y=t.find(w=>w._id===g.tableId);if(!y)continue;let b=(await K9(y,t,{includeHiddenFields:l})).concat(d(y,["doc1.fieldName","doc2.fieldName"]));if(b.length+f.length>csr)break;f=f.concat(b)}}if(!u||!de.views.isCalculationView(e))for(let p of Tn)f.push(`${c._id}.${p}`);return[...new Set(f)]}o(K9,"buildInternalFieldList");function dsr(e,t){let r={};for(let a of t)for(let u of Object.keys(a.schema))zf(u)||(r[u]=bu(u));let n=o(a=>zf(a)?!1:t.some(u=>u.schema[a]),"keyInAnyTable"),i=new Tt.ColumnSplitter(t),s=o(a=>{for(let u of Object.keys(a))if($c(u))for(let c of a[u].conditions)s(c);else{let c=a[u];if(typeof c!="object")continue;for(let l of Object.keys(c)){let{numberPrefix:f,relationshipPrefix:d,column:p}=i.run(l);n(p)&&(c[`${f||""}${d||""}${bu(p)}`]=c[l],delete c[l])}}},"prefixFilters");return s(e),e}o(dsr,"cleanupFilters");function rQe(e,t){let r=Tb.length;return e.map(n=>{let i={};for(let s of Object.keys(n)){t?.schema[s]?.type==="link"&&typeof n[s]=="string"&&(n[s]=rQe(JSON.parse(n[s])));let a=s.indexOf(Tb);if(a!==-1){let u=s.slice(0,a)+s.slice(a+r),c=de.schema.decodeNonAscii(u);i[c]=n[s]}else i[s]=n[s]}return i})}o(rQe,"reverseUserColumnMapping");async function Y3e(e,t,r,n){let i=r.map(c=>c.through),s=new Bh(t.map(c=>c._id).concat(i));n?.countTotalRows&&(e.operation="COUNT");let a=o(async c=>{let l=eQe._query(c,{disableReturning:!0});if(Array.isArray(l))throw new Error("SQS cannot currently handle multiple queries");let f=l.sql,d=l.bindings,p=o(m=>["doc1","doc2"].forEach(g=>{f=f.replaceAll(`\`${g}\`.\`${m}\``,`\`${g}.${m}\``)}),"fixJunctionDocs");if(p("rowId"),p("fieldName"),Array.isArray(l))throw new Error("SQS cannot currently handle multiple queries");let h=C.getWorkspaceDB();return await J3e.default.trace("sqs.runSqlQuery",async m=>(m?.addTags({sql:f}),await h.sql(f,d)))},"processSQLQuery"),u=await s.queryWithAliasing(e,a);return n?.countTotalRows?iA(u):Array.isArray(u)?rQe(u,e.table):u}o(Y3e,"runSqlQuery");function psr(e,t){return e===400&&t?.match(lsr)||e===400&&t?.match(tQe)||e===400&&t?.match(fsr)||e===404&&t?.includes(Fn)}o(psr,"resyncDefinitionsRequired");async function nQe(e,t,r){let{paginate:n,query:i,...s}=(0,X3e.cloneDeep)(e),a;P.views.isView(t)?a=await P.views.getTable(t.id):a=t;let u=await P.tables.getAllInternalTables(),c=u.reduce((g,y)=>(g[y._id]=y,g),{});if(a._id&&(a=c[a._id]),!a)throw new Error("Unable to find table");let l=T$e(a,u),f={...dsr(i,u),documentType:"ro"},d=[];if(P.views.isView(t)&&de.views.isCalculationView(t)){let g=de.views.calculationFields(t);for(let[y,b]of Object.entries(g))e.fields&&!e.fields.includes(y)||(b.calculationType==="count"?"distinct"in b&&b.distinct?d.push({name:y,distinct:!0,field:bu(b.field),calculationType:b.calculationType}):d.push({name:y,calculationType:b.calculationType,field:bu(b.field)}):d.push({name:y,field:bu(b.field),calculationType:b.calculationType}))}let p={endpoint:{datasourceId:sl,entityId:a._id,operation:"READ"},filters:f,meta:{columnPrefix:Tb,sqliteUseLikeWithoutLower:!0},resource:{fields:await K9(t,u,{relationships:l,allowedFields:e.fields}),aggregations:d},relationships:l};if(s.sort){let g=a.schema[s.sort];if(d.some(b=>b.name===s.sort))p.sort={[s.sort]:{direction:s.sortOrder||"ascending",type:"number"}};else if(g){let w=(LM(g)?g.responseType:g.type)==="number"?"number":"string";p.sort={[bu(g.name)]:{direction:s.sortOrder||"ascending",type:w}}}else throw new Error(`Unable to sort by ${s.sort}`)}if(s.bookmark&&typeof s.bookmark!="number")throw new Error("Unable to paginate with string based bookmarks");let h=s.bookmark||0;!SM(f)&&s.limit&&(n=!0,p.paginate={limit:s.limit+1,offset:h});let m=await Lh(p);try{let[g,y]=await Promise.all([Y3e(m,u,l),e.countRows?Y3e(m,u,l,{countTotalRows:!0}):Promise.resolve(void 0)]),b=eQe.convertJsonStringColumns(a,await _k(g,t,c,l,{sqs:!0})),w=!1;n&&s.limit&&g.length>s.limit&&(w=!0,b.length>s.limit&&b.pop());let E=await Jt(t,b,{preserveLinks:!0,squash:!0}),T=[...e.fields||Object.keys(t.schema||{}).filter(A=>t.schema?.[A].visible!==!1),...Tn];E=E.map(A=>(0,Z3e.default)(A,T));let R={rows:E};return y!=null&&(R.totalRows=y),n&&w&&(R.hasNextPage=!0,R.bookmark=h+b.length),n&&!w&&(R.hasNextPage=!1),R}catch(g){let y=typeof g=="string"?g:g.message;if(!r?.retrying&&psr(g.status,y))return await Oi.doWithLock({type:"auto_extend",name:"sys_sync_definitions",resource:C.getWorkspaceId()},P.tables.sqs.syncDefinition),nQe(e,t,{retrying:!0});if(g.status===400&&y?.match(tQe))return{rows:[]};throw new Error(`Unable to search by SQL - ${y}`,{cause:g})}}o(nQe,"search");var hsr=F.getPouch({inMemory:!0});async function iQe(view,calculation,group,data){let db=new hsr(nt.newid());try{await db.bulkDocs(data.map(e=>({...e,_rev:void 0})));let fn=o((e,t)=>t(e._id),"fn");eval("fn = "+view?.map?.replace("function (doc)","function (doc, emit)"));let queryFns={meta:view.meta,map:fn};view.reduce&&(queryFns.reduce=view.reduce);let response=await db.query(queryFns,{include_docs:!calculation,group:!!group});for(let e of response.rows){if(!e._rev||!e._id)continue;let t=data.find(r=>r._id===e._id);t&&(e._rev=t._rev)}return response}finally{await db.destroy(),await F.closePouchDB(db)}}o(iQe,"runView");async function gsr(e){let{tableId:t,format:r,rowIds:n,columns:i,query:s,sort:a,sortOrder:u,delimiter:c,customHeaders:l}=e,f=C.getWorkspaceDB(),d=await P.tables.getTable(t),p=[];if(n){let b=(await f.allDocs({include_docs:!0,keys:n.map(w=>{let E=Ln(w);if(E.length>1)throw new K("Export data does not support composite keys.",400);return E[0]})})).rows.map(w=>w.doc);p=await Jt(d,b)}else p=(await P.rows.search({tableId:t,query:s||{},sort:a,sortOrder:u})).rows;let h=[],m=d.schema,g;if(p=wsr(p,m),i&&i.length){for(let b=0;b<p.length;b++){h[b]={};for(let w of i)h[b][w]=p[b][w]}g=i}else h=p;let y=P.rows.utils.cleanExportRows(h,m,r,i,l);if(r==="csv")return{fileName:"export.csv",content:Uk(g??Object.keys(h[0]),y,c,l)};if(r==="json")return{fileName:"export.json",content:Fk(y)};if(r==="jsonWithSchema")return{fileName:"export.json",content:Bk(m,y)};throw"Format not recognised"}o(gsr,"exportRows");async function oQe(e){let t=await ysr(e),r=await Y9(e);return await Jt(t,r)}o(oQe,"fetch");async function ysr(e){try{return await P.tables.getTable(e)}catch(t){if(t.status!==404)throw t;let i=await bsr(e);if(!i)throw t;return i}}o(ysr,"getTableForFetch");async function bsr(e){let t=C.getWorkspaceId();if(!t||!Lf(t))return;let r=C.getDevWorkspaceId();return await C.doInWorkspaceContext(r,async()=>{if(await P.tables.doesTableExist(e))return await P.tables.getTable(e)})}o(bsr,"getDevTableWhenProdMissing");async function Y9(e,t){let r=C.getWorkspaceDB(),n;return e===Vt.USER_METADATA?n=await P.users.fetchMetadata():n=(await r.allDocs(sn(e,null,{include_docs:!0,limit:t}))).rows.map(s=>s.doc),n}o(Y9,"fetchRaw");async function J9(e,t){if(e.startsWith("ta"))return oQe(e);let r=C.getWorkspaceDB(),{calculation:n,group:i,field:s}=t,a=await _sr(r,e),u;if(ie.SELF_HOSTED)u=await r.query(`database/${e}`,{include_docs:!n,group:!!i});else{let l=a.meta.tableId,f=await Y9(l);u=await iQe(a,n,!!i,f)}let c=[];if(!n){u.rows=u.rows.map(f=>f.doc);let l;try{l=await P.tables.getTable(a.meta.tableId)}catch{throw new Error("Unable to retrieve view table.")}c=await Jt(l,u.rows)}return n===z9.STATS&&(u.rows=u.rows.map(l=>({group:l.key,field:s,...l.value,avg:l.value.sum/l.value.count})),c=u.rows),(n===z9.COUNT||n===z9.SUM)&&(c=u.rows.map(l=>({group:l.key,field:s,value:l.value}))),c}o(J9,"fetchLegacyView");var z9={SUM:"sum",COUNT:"count",STATS:"stats"};async function _sr(e,t){let r=ie.SELF_HOSTED?n7:i7,n=ie.SELF_HOSTED?i7:n7,i=ie.SELF_HOSTED?dHe:fHe,s,a=!1;try{s=await r(e,t)}catch(u){u.status!==404?s=null:(s=await n(e,t),a=!!s)}if(a&&await i(e,t),!s)throw"View does not exist.";return s}o(_sr,"getView");function wsr(e,t){let r=["_id",...Object.keys(t)];return e.map(i=>Object.keys(i).filter(s=>r.includes(s)).reduce((s,a)=>({...s,[a]:i[a]}),{}))}o(wsr,"trimFields");var Z9={};G(Z9,{exportRows:()=>Ssr,fetch:()=>Tsr,fetchRaw:()=>vsr,search:()=>TM});var sQe=U(require("lodash/pick"));function Esr(e,t,r,n){let i;if(!SM(e)){if(t&&!n)throw new Error("Cannot paginate query without a limit");return t&&n?(i={limit:n+1},r&&(i.offset=r)):n&&(i={limit:n}),i}}o(Esr,"getPaginationAndLimitParameters");async function TM(e,t){let{countRows:r,paginate:n,query:i,...s}=e,{limit:a}=s,u=s.bookmark&&parseInt(s.bookmark)||void 0;n&&!u&&(u=0);let c=Esr(i,n,u,a),l;if(s.sort){let f=s.sortOrder==="descending"?"descending":"ascending";l={[s.sort]:{direction:f}}}if(i?.oneOf?._id){let f=i.oneOf._id;i.oneOf._id=f.map(d=>Ln(d)[0])}try{let f={filters:i,sort:l,paginate:c,includeSqlRelationships:1},[{rows:d,rawResponseSize:p},h]=await Promise.all([Mi("READ",t,f),r?Mi("COUNT",t,f):Promise.resolve(void 0)]),m=await Jt(t,d,{preserveLinks:!0,squash:!0}),g=!1;n&&a&&p>a&&(g=!0,m.length>a&&m.pop());let b=[...e.fields||Object.keys(t.schema||{}).filter(E=>t.schema?.[E].visible!==!1),...Rs];m=m.map(E=>(0,sQe.default)(E,b));let w={rows:m,hasNextPage:g};return g&&u!=null&&(w.bookmark=u+m.length),h!=null&&(w.totalRows=h),n&&!g&&(w.hasNextPage=!1),w}catch(f){throw f.message&&f.message.includes("does not exist")?new Error(`Table updated externally, please re-fetch - ${f.message}`,{cause:f}):f}}o(TM,"search");async function Ssr(e){let{tableId:t,format:r,columns:n,rowIds:i,query:s,sort:a,sortOrder:u,delimiter:c,customHeaders:l}=e;if(!t)throw new K("No table ID for search provided.",400);let{datasourceId:f,tableName:d}=wr(t),p={};i?.length?p={oneOf:{_id:i.map(R=>{let A=Ln(R);return A.length>1?A:A[0]})}}:p=s||{};let h=await P.datasources.get(f),m=await P.tables.getTable(t);if(!h||!h.entities)throw new K("Datasource has not been configured for plus API.",400);let g=await TM({tableId:m._id,query:p,sort:a,sortOrder:u},m),y=[],b;if(n&&n.length){for(let R=0;R<g.rows.length;R++){y[R]={};for(let A of n)y[R][A]=g.rows[R][A]}b=n}else y=g.rows;let w=h.entities[d].schema,E=P.rows.utils.cleanExportRows(y,w,r,n,l),S;switch(r){case"csv":S=Uk(b??Object.keys(w),E,c,l);break;case"json":S=Fk(E);break;case"jsonWithSchema":S=Bk(w,E);break;default:throw Fe.unreachable(r)}return{fileName:`export.${r}`,content:S}}o(Ssr,"exportRows");async function Tsr(e){let t=await P.tables.getTable(e),r=await Mi("READ",t,{includeSqlRelationships:1});return await Jt(t,r.rows,{preserveLinks:!0,squash:!0})}o(Tsr,"fetch");async function vsr(e,t){let r=await P.tables.getTable(e),n;return t&&(n={limit:t}),(await Mi("READ",r,{includeSqlRelationships:1,paginate:n})).rows}o(vsr,"fetchRaw");var uQe=U(require("dd-trace"));var eX=o((e,t)=>{t=t.map(r=>r.toLowerCase());for(let r of Object.keys(e||{}))if($c(r)){let n=e[r];if(!n)continue;for(let i of n.conditions)eX(i,t)}else{let n=e[r];if(!n||typeof n!="object")continue;for(let i of Object.keys(n))if(!t.includes(i.toLowerCase())&&!t.includes(F.removeKeyNumbering(i).toLowerCase()))throw new K(`Invalid filter field: ${i}`,400)}},"validateFilters"),aQe=o(async(e,t)=>{let r=o(async(i,s,a,u)=>{let c=[];y7({table:i})&&c.push("_id");for(let l of Object.keys(i.schema).filter(f=>s.includes(f)&&i.schema[f].visible!==!1)){let f=i.schema[l],d=f.type==="link";if(!(d&&(u?.noRelationships||a.includes(f.tableId))))if(d){c.push(l);try{let p=await P.tables.getTable(f.tableId),h=await r(p,Object.keys(p.schema),[...a,f.tableId],{noRelationships:!0});c.push(...h.flatMap(m=>[`${f.name}.${m}`,`${p.name}.${m}`]))}catch(p){if(p.status!==404)throw p}}else c.push(l)}return c},"extractTableFields"),n=["_id"];return t==null&&(t=Object.keys(e.schema)),n.push(...await r(e,t,[e._id])),Array.from(new Set(n))},"getQueryableFields");function tX(e){return Mt(e)?Z9:X9}o(tX,"pickApi");async function Asr(e,t){return await uQe.default.trace("search",async r=>{r?.addTags({tableId:e.tableId,viewId:e.viewId,query:e.query,sort:e.sort,sortOrder:e.sortOrder,sortType:e.sortType,limit:e.limit,bookmark:e.bookmark,paginate:e.paginate,fields:e.fields,countRows:e.countRows});let n,i;if(e.viewId)n=await P.views.get(e.viewId),i=await P.views.getTable(n);else if(e.tableId)n=await P.tables.getTable(e.tableId),i=n;else throw new Error("Must supply either a view ID or a table ID");let s=Mt(i._id);if(e.query){let u=(e.fields||Object.keys(i.schema)).filter(l=>i.schema[l]?.visible!==!1),c=await aQe(i,u);eX(e.query,c)}else e.query={};if(t&&(e.query=await Ch(e.query,t)),e=z3e(i,e),e.viewId){let c=await Ch(n.query||{},t);Array.isArray(c)&&(c=Tt.buildQuery(c)),c=EM(i,c);let l=c?[c]:[];e.query={$and:{conditions:[...l,e.query]}},c.onEmptyFilter&&(e.query.onEmptyFilter=c.onEmptyFilter)}if(e.query=Tt.cleanupQuery(e.query),e.query=Tt.fixupFilterArrays(e.query),r.addTags({cleanedQuery:e.query}),!Tt.hasFilters(e.query)&&e.query.onEmptyFilter==="none")return r.addTags({emptyQuery:!0}),{rows:[]};e.sortOrder&&(e.sortOrder=e.sortOrder.toLowerCase());let a;return s?(r?.addTags({searchType:"external"}),a=await TM(e,n)):(r?.addTags({searchType:"sqs"}),a=await NA.search(e,n)),r.addTags({foundRows:a.rows.length,totalRows:a.totalRows}),a})}o(Asr,"search");async function Rsr(e){return tX(e.tableId).exportRows(e)}o(Rsr,"exportRows");async function Osr(e){return tX(e).fetch(e)}o(Osr,"fetch");async function Isr(e,t){return tX(e).fetchRaw(e,t)}o(Isr,"fetchRaw");async function Csr(e,t){return J9(e,t)}o(Csr,"fetchLegacyView");var cQe={...F9,...H9,...rX,utils:ZJ,external:DA,AliasTables:Bh};var nX={};G(nX,{create:()=>Dsr,ensureHomepageUniqueness:()=>Nsr,fetch:()=>xsr,update:()=>Psr});async function xsr(e=C.getWorkspaceDB()){let t=(await e.allDocs(LGe(null,{include_docs:!0}))).rows.map(n=>n.doc),r=t.filter(n=>!n.workspaceAppId);if(r.length){let n=await P.workspaceApps.fetch(),i=n.find(s=>s.isDefault)||n[0];i&&r.forEach(s=>{s.workspaceAppId=i._id})}return t}o(xsr,"fetch");async function Dsr(e){let r=await C.getWorkspaceDB().put({...e,_id:NGe()});return{...e,_id:r.id,_rev:r.rev}}o(Dsr,"create");async function Psr(e){let r=await C.getWorkspaceDB().put(e);return{...e,_rev:r.rev}}o(Psr,"update");async function Nsr(e){let n=(await P.screens.fetch()).filter(i=>i._id!==e._id&&i.workspaceAppId===e.workspaceAppId).filter(i=>i.routing.homeScreen&&i.routing.roleId===e.routing.roleId);if(n.length)for(let i of n)i.routing.homeScreen=!1,await P.screens.update(i)}o(Nsr,"ensureHomepageUniqueness");var iX={};G(iX,{create:()=>Usr,duplicate:()=>Fsr,fetch:()=>fQe,get:()=>dQe,getMatchedWorkspaceApp:()=>jsr,remove:()=>qsr,update:()=>Bsr});async function lQe(e,t){if((await fQe()).find(n=>n.name===e&&n._id!==t))throw new K(`App with name '${e}' is already taken.`,400)}o(lQe,"guardName");var Lsr=o(async(e,t)=>{let n=(await P.screens.fetch()).filter(s=>s.workspaceAppId===e),i=[];for(let s=0;s<n.length;s++){let a=n[s],u=await P.screens.create({layoutId:a.layoutId,showNavigation:a.showNavigation,width:a.width,routing:a.routing,props:a.props,name:a.name,pluginAdded:a.pluginAdded,onLoad:a.onLoad,variant:a.variant,workspaceAppId:t});i.push(u)}return i},"duplicateScreens"),ksr=o(async e=>{let t=await P.workspaceApps.fetch(),r=de.duplicateName(e.name,t.map(i=>i.name)),n={name:r,url:`/${Msr(r)}`,disabled:!0,navigation:e.navigation,isDefault:!1};return P.workspaceApps.create(n)},"createDuplicatedApp"),Msr=o(e=>e.toLowerCase().replaceAll(" ","-"),"slugify");async function fQe(e=C.getWorkspaceDB()){return(await e.allDocs(yt.getWorkspaceAppParams(null,{include_docs:!0}))).rows.map(n=>({...n.doc,_id:n.doc._id,_rev:n.doc._rev}))}o(fQe,"fetch");async function dQe(e){return await C.getWorkspaceDB().tryGet(e)}o(dQe,"get");async function Usr(e){let t=C.getWorkspaceDB();return await lQe(e.name),(await t.put({...e,_id:yt.generateWorkspaceAppID()},{returnDoc:!0})).doc}o(Usr,"create");async function Fsr(e){let t=await ksr(e);return await Lsr(e._id,t._id),t}o(Fsr,"duplicate");async function Bsr(e){let t=C.getWorkspaceDB(),r=await dQe(e._id);if(!r)throw new K(`Project app with id '${e._id}' not found.`,404);e.name!==r.name&&await lQe(e.name,e._id);let n={_id:e._id,_rev:e._rev,name:e.name,url:e.url,navigation:e.navigation,disabled:e.disabled,createdAt:r.createdAt,updatedAt:r.updatedAt,isDefault:r.isDefault,_deleted:void 0};return(await t.put(n,{returnDoc:!0})).doc}o(Bsr,"update");async function qsr(e,t){let r=C.getWorkspaceDB();try{let i=await r.tryGet(e);if(!i)throw new K(`Project app with id '${e}' not found.`,404);await r.remove(e,t),Oe.workspace.deleted(i,C.getWorkspaceId())}catch(i){throw i.status===404?new K(`Project app with id '${e}' not found.`,404):i}let n=(await P.screens.fetch()).filter(i=>i.workspaceAppId===e);await r.bulkRemove(n)}o(qsr,"remove");async function jsr(e){let t=await P.workspaces.metadata.get(),r=F.isProdWorkspaceID(t.appId)?`/app/${t.url}`.replace("//","/"):`/${t.appId}`,n=F.isProdWorkspaceID(t.appId)?`/embed/${t.url}`.replace("//","/"):null,i=await P.workspaceApps.fetch();function s({url:u,isDefault:c}){return e.replace(/\/$/,"")===`${r}${u.replace(/\/$/,"")}`||n&&e.replace(/\/$/,"")===`${n}${u.replace(/\/$/,"")}`||!e&&c}return o(s,"isWorkspaceAppMatch"),i.find(s)}o(jsr,"getMatchedWorkspaceApp");var oX={};G(oX,{updateWithExport:()=>Hsr});var pQe=[pd.SQLITE,"_design/migrations"];async function Wsr(e,t){let r="app_metadata";try{let[n,i]=await Promise.all([e.get(r),t.get(r)]);return{...i,automationErrors:void 0,theme:n.theme,customTheme:n.customTheme,features:n.features,icon:n.icon,navigation:n.navigation,scripts:n.scripts,type:n.type,version:n.version}}catch(n){throw new Error(`Unable to retrieve workspace metadata for import - ${n.message}`)}}o(Wsr,"getNewWorkspaceMetadata");function Gsr(e,t,r){let n=[];for(let s of t){let a=e.find(u=>u._id===s._id);a?a._rev=s._rev:n.push(s)}return[...e,...n,r]}o(Gsr,"mergeUpdateAndDeleteDocuments");async function $sr(e){let t=[];for(let s of DM)t.push(e.allDocs(F.getDocParams(s)));let r=[];for(let s of await Promise.all(t))r=r.concat(s.rows.map(a=>({_id:a.id,_rev:a.value.rev})));let n=await e.getMultiple(pQe,{allowMissing:!0});r.push(...n.map(s=>({_id:s._id,_rev:s._rev})));let i=new Map;return r.forEach(s=>{i.set(s._id,s)}),Array.from(i.values()).map(s=>({_deleted:!0,...s}))}o($sr,"removeImportableDocuments");async function Vsr(e){let t=[];for(let s of DM)t.push(e.allDocs(F.getDocParams(s,null,{include_docs:!0})));let r=[];for(let s of await Promise.all(t))r=r.concat(s.rows.map(a=>a.doc));let n=await e.getMultiple(pQe,{allowMissing:!0});r.push(...n);let i=new Map;return r.forEach(s=>{delete s._rev,i.set(s._id,s)}),Array.from(i.values())}o(Vsr,"getImportableDocuments");async function Hsr(e,t,r){let n=F.getDevWorkspaceID(e),i=`temp_${n}`,s=F.getDB(i),a=F.getDB(n);try{let u={file:{type:t.type,path:t.path,password:r}};await mM.importApp(n,s,u,{updateAttachmentColumns:!0});let c=await Wsr(s,a),l=await Vsr(s),f=await $sr(a);if((await a.bulkDocs(Gsr(l,f,c))).some(p=>p.error))throw new K("Error importing documents",500);await Be.destroy(Jk(n)),await U7(n)}finally{await s.destroy()}}o(Hsr,"updateWithExport");var sX={};G(sX,{get:()=>Qsr,tryGet:()=>Ksr});async function Qsr(e){return await(e?.production?C.getProdWorkspaceDB():C.getWorkspaceDB()).get("app_metadata")}o(Qsr,"get");async function Ksr(e){return await(e?.production?C.getProdWorkspaceDB():C.getWorkspaceDB()).tryGet("app_metadata")}o(Ksr,"tryGet");var aX={};G(aX,{enrichWithDefaultWorkspaceAppUrl:()=>Xsr,fetch:()=>Jsr,filterAppList:()=>yQe});var hQe=U(require("object-sizeof"));var zsr=1024*1024;function Ysr(e,t){let r=`[removed] - max results size of ${t}MB exceeded`;for(let n of e.steps)n.inputs={message:r},n.outputs={message:r,success:n.outputs.success}}o(Ysr,"sanitiseResults");async function mQe(e,t){if(ie.DISABLE_AUTOMATION_LOGS)return;let r=ie.AUTOMATION_MAX_LOG_SIZE_MB;(0,hQe.default)(t)/zsr>r&&Ysr(t,r);try{await ky.logs.storeLog(e,t)}catch(i){i.status===413&&i.request?.data&&(delete i.request.data,i.request.data={message:"removed due to large size"}),ke.logAlert("Error writing automation log",i)}}o(mQe,"storeLog");async function gQe(e){let t=await ky.logs.oldestLogDate();for(let r of e)if(r.automationErrors)for(let[n,i]of Object.entries(r.automationErrors)){let s=[];for(let a of i){if(!a)continue;a.split(F.SEPARATOR)[2]>t&&s.push(a)}r.automationErrors[n]=s}return e}o(gQe,"checkAppMetadata");function yQe(e,t){let r=[],n=Object.keys(e.roles);if(Xe.hasAppBuilderPermissions(e))r=e.builder?.apps||[],r=r.concat(n);else if(!Xe.isAdminOrBuilder(e))r=n;else return t;return t.filter(i=>r.includes(F.getProdWorkspaceID(i.appId)))}o(yQe,"filterAppList");async function Jsr(e,t){let r=e==="development",n=e==="all",i=await F.getAllWorkspaces({dev:r,all:n}),s={...t,roles:t?.roles||{}},a=await $t.enrichUserRolesFromGroups(s);i=yQe(a,i);let u=i.filter(l=>l.status==="development").map(l=>l.appId);if(r||n){let l=await u$e(u);for(let f of i){let d=l[f.appId];d?f.lockedBy=d:delete f.lockedBy}}let c=await HY(i);return await gQe(c)}o(Jsr,"fetch");async function Xsr(e){let t=[];for(let r of e){let n=await F.doWithDB(r.appId,i=>P.workspaceApps.fetch(i));t.push({...r,defaultWorkspaceAppUrl:n[0]?.url||""})}return t}o(Xsr,"enrichWithDefaultWorkspaceAppUrl");var bQe={...sJ,...vY,...aX,...oX,metadata:sX};var Zsr={backups:mM,tables:Mh,automations:_u,workspaces:bQe,rows:cQe,users:J$e,datasources:yu,queries:M3e,plugins:GY,screens:nX,views:fA,permissions:T7,links:R3e,rowActions:M9,common:O9,oauth2:D9,ai:g9,workspaceApps:iX,navigation:x9,resources:k9,deployment:A3e,dev:IY,workspace:I9},P=Zsr;function cX(e,t){let r=Object.keys(e);for(let n of r){let i=e[n];if(typeof i!="string")continue;let s=t?.[n];if(s){if(s.type==="boolean"){let a=i.toLowerCase();a==="true"&&(e[n]=!0),a==="false"&&(e[n]=!1)}if(s.type==="number"){let a=parseFloat(i);isNaN(a)||(e[n]=a)}}}if(e?.row){for(let n in e.row)if(e.schema?.[n]?.type==="link"&&e.row[n]&&typeof e.row[n]=="string")try{e.row[n]=JSON.parse(e.row[n])}catch{}}return e}o(cX,"cleanInputValues");async function Rb(e,t){let r=await P.tables.getTable(e);return cX(t,r.schema)}o(Rb,"cleanUpRow");function Ye(e){return e==null?"No error provided.":typeof e=="object"&&(e.toString==null||e.toString()==="[object Object]")?JSON.stringify(e):typeof e!="string"?e.toString():e}o(Ye,"getError");function LA(e){return!!e}o(LA,"guardAttachment");function _Qe(e){try{let r=(e.startsWith("http")?new URL(e).pathname:e).split("/");return r[r.length-1]||""}catch{return""}}o(_Qe,"deriveFilenameFromUrl");function vM(e){if(typeof e=="string")try{let n=JSON.parse(e);return vM(n)}catch{return{url:e,filename:_Qe(e)}}let t=e.url;if(!t){let n=Object.keys(e).join(", ");throw new Error(`Attachments must have both "url" and "filename" keys. You have provided: ${n}`)}let r=e.filename??e.name??_Qe(t);return{url:t,filename:r}}o(vM,"normalizeSingleAttachment");function TQe(e){if(e==null)return null;if(typeof e=="string")try{let t=JSON.parse(e);return TQe(t)}catch{return vM(e)}return Array.isArray(e)?e.map(r=>vM(r)).filter(Boolean):vM(e)}o(TQe,"normalizeAttachmentValue");async function RM(e,t){let r=await P.tables.getTable(e),n={};for(let[i,s]of Object.entries(t)){let a=r.schema[i];if(a?.type==="attachment"||a?.type==="attachment_single"||a?.type==="signature_single"){let u=TQe(s);Array.isArray(u)?u.forEach(c=>LA(c)):u&&LA(u),n[i]=u}}for(let[i,s]of Object.entries(n))if(s)Array.isArray(s)?s.length&&(t[i]=await Promise.all(s.map(a=>wQe(a)))):Object.keys(t[i]).length>0&&(t[i]=await wQe(s));else continue;return t}o(RM,"sendAutomationAttachmentsToStorage");async function wQe(e){let t=C.getProdWorkspaceId();async function r(i,s){let a=`${SQe.v4()}${i}`,u=`${t}/attachments/${a}`;return await Se.streamUpload({bucket:Se.ObjectStoreBuckets.APPS,stream:s,filename:u}),u}o(r,"uploadToS3");async function n(i){return(await Se.getObjectMetadata(Se.ObjectStoreBuckets.APPS,i)).ContentLength}o(n,"getSize");try{let{filename:i}=e,s=EQe.default.extname(i);s.startsWith(".")&&(s=s.substring(1,s.length));let a=await Se.processAutomationAttachment(e),u="";return"path"in a&&a.path.startsWith(`${t}/attachments/`)?u=a.path:u=await r(s,a.content),{size:await n(u),extension:s,name:i,key:u}}catch(i){throw console.error("Failed to process attachment:",i),i}}o(wQe,"generateAttachmentRow");function tar(e){if(e==null)return[];if(Array.isArray(e))return e;if(typeof e!="string")throw new Error(`Unable to split value of type ${typeof e}: ${e}`);let t=e.split(`
|
|
1039
1039
|
`);return t.length>1?t:e.split(",")}o(tar,"stringSplit");function vQe(e,t){let{failure:r}=e.inputs;return r?(0,AM.isPlainObject)(t)?Object.values(t).some(n=>n===r):t===r:!1}o(vQe,"matchesLoopFailureCondition");function AQe(e){let t=e.inputs.binding;if(Array.isArray(t))return t;if(typeof t=="string")if(t==="")t=[];else try{t=JSON.parse(t)}catch{t=tar(t)}return Array.isArray(t)?t:[t]}o(AQe,"getLoopIterable");function RQe(e){let t=typeof e.inputs.iterations=="string"?parseInt(e.inputs.iterations):e.inputs.iterations;return Math.min(t||ie.AUTOMATION_MAX_ITERATIONS,ie.AUTOMATION_MAX_ITERATIONS)}o(RQe,"getLoopMaxIterations");function OQe(e){let t=ie.AUTOMATION_MAX_STORED_LOOP_RESULTS,r=e.inputs.resultOptions;if(r?.summarizeOnly)return 0;let n=r?.maxStoredIterations;return n!==void 0&&n>0?Math.min(n,t):t}o(OQe,"getMaxStoredResults");function lX(e){let t=Object.keys(e)[0];return e=e[t].map(({outputs:r})=>r),e}o(lX,"convertLegacyLoopOutputs");function IQe(e,t){let r={results:{},summary:{totalProcessed:0,successCount:0,failureCount:0},nestedSummaries:{},maxStoredResults:t};for(let{id:n}of e)r.results[n]=[],r.nestedSummaries[n]=[];return r}o(IQe,"initializeLoopStorage");function CQe(e,t,r){let n=t;if(t.stepId==="BRANCH"){let i=t.outputs||{},s={success:i.success!==!1};i.status!==void 0&&(s.status=i.status),i.branchName!==void 0&&(s.branchName=i.branchName),n={id:t.id,stepId:t.stepId,inputs:{},outputs:s}}e.summary.totalProcessed++,n.outputs.success?e.summary.successCount++:(e.summary.failureCount++,e.summary.firstFailure||(e.summary.firstFailure={iteration:r,error:n.outputs.response||n.outputs.error||n.outputs.response?.message||"Unknown error"})),n.outputs.summary&&e.nestedSummaries[n.id].push(n.outputs.summary),e.results[n.id]||(e.results[n.id]=[]),e.results[n.id].push(n),e.results[n.id].length>e.maxStoredResults&&e.results[n.id].shift()}o(CQe,"processStandardResult");function kA(e,t,r,n=!1){let{summary:i}=e,s=i.failureCount===0;(n||t==="max_iterations_reached"||t==="FAILURE_CONDITION_MET")&&(s=!1);let a={success:s,iterations:r||i.totalProcessed,summary:i};return t&&(a.status=t),Object.keys(e.results).length>0&&e.maxStoredResults>0&&(a.items=e.results),Object.values(e.nestedSummaries).some(u=>u.length>0)&&(a.nestedSummaries=e.nestedSummaries),a}o(kA,"buildLoopOutput");function xQe(e){let t=(0,AM.cloneDeep)(e);return t.definition.steps=uX(t.definition.steps),t}o(xQe,"preprocessAutomation");function uX(e){let t=[],r=0;for(;r<e.length;){let n=e[r];if(n.stepId==="LOOP"){let i=e[r+1],s=uX([i])[0],a={...n,stepId:"LOOP_V2",inputs:{...n.inputs,children:[s]},isLegacyLoop:!0};t.push(a),r+=2}else if(n.stepId==="BRANCH"){let i=n,s={...i};if(i.inputs?.children){let a={};for(let[u,c]of Object.entries(i.inputs.children))a[u]=uX(c);s.inputs={...i.inputs,children:a}}t.push(s),r++}else t.push(n),r++}return t}o(uX,"preprocessSteps");async function DQe({inputs:e}){let{to:t,from:r,subject:n,contents:i,cc:s,bcc:a,addInvite:u,startTime:c,endTime:l,summary:f,location:d,url:p,attachments:h}=e;i||(i="<h1>No content</h1>");try{return h&&(Array.isArray(h)?h.forEach(g=>LA(g)):LA(h)),{success:!0,response:await KGe({to:t,from:r,subject:n,contents:i,cc:s,bcc:a,automation:!0,attachments:h,invite:u?{startTime:c,endTime:l,summary:f,location:d,url:p}:void 0})}}catch(m){return{success:!1,response:Ye(m)}}}o(DQe,"run");var uar=U(require("archiver"));async function fX(e,t){if(!e._id||t&&Mt(t))return e;let r=e._id;e._id.startsWith(TGe)&&(r="app_metadata");let i=await C.getWorkspaceDB().get(r);return e._rev=i._rev,e._id=r,e}o(fX,"addRev");function dX(e,t){return!t||!e||(t.rowId&&(e._id=t.rowId),t.tableId&&(e.tableId=t.tableId),e.type||(e.type="row")),e}o(dX,"fixRow");var gX={};G(gX,{bulkDestroy:()=>sar,destroy:()=>oar,fetchEnrichedRow:()=>aar,patch:()=>iar});var LQe=require("lodash"),mX=require("lodash/fp");async function NQe(e){let t=C.getWorkspaceDB(),r=e.request.body,n={tableId:Vt.USER_METADATA,...r};delete n.roles,e.body=await t.put(n)}o(NQe,"updateMetadata");async function hX(e){let t=C.getWorkspaceDB();try{let r=await P.users.get(e.params.id);await t.remove(r._id,r._rev)}catch{}e.body={message:`User metadata ${e.params.id} deleted.`}}o(hX,"destroyMetadata");async function iar(e){let{tableId:t}=ei(e),r=await Bc(e);P.views.isView(r)&&de.views.isCalculationView(r)&&e.throw(400,"Cannot update rows through a calculation view");let n=P.views.isView(r)?await P.views.getTable(r.id):r,i=e.request.body,s=t===Vt.USER_METADATA,a;try{a=await Jt(r,await PA(t,i._id))}catch{if(s)a={_id:i._id};else throw"Row does not exist"}let u=(0,mX.cloneDeep)(a);for(let d of Object.keys(i))n.schema[d]&&(u[d]=i[d]);let c=await ba(e.user?._id,r,u),l=await P.rows.utils.validate({row:c,source:r});return l.valid||e.throw(400,{validation:l.errors}),c=await ya({eventType:"row:update",row:c,tableId:c.tableId,table:n}),await Fc.rowUpdate(n,{row:c,oldRow:a}),s?(e.request.body=c,await NQe(e),{row:e.body,table:n,oldRow:a}):{...await sA(r,c,{updateFormula:!0,updateAIColumns:!0}),oldRow:a}}o(iar,"patch");async function oar(e){let t=C.getWorkspaceDB(),r=await Bc(e);if(P.views.isView(r)&&de.views.isCalculationView(r))throw new K("Cannot delete rows through a calculation view",400);let n;P.views.isView(r)?n=await P.views.getTable(r.id):n=r;let{_id:i}=e.request.body,s=await t.get(i),a=e.request.body._rev||s._rev;if(s.tableId!==n._id)throw"Supplied tableId doesn't match the row's tableId";s=await Jt(n,s,{squash:!1,skipBBReferences:!0}),await ya({eventType:"row:delete",row:s,tableId:n._id}),await Fc.rowDelete(n,[s]),await $k(n,s);let u;return n._id===Vt.USER_METADATA?(e.params={id:i},await hX(e),u=e.body):u=await t.remove(i,a),{response:u,row:s}}o(oar,"destroy");async function sar(e){let{tableId:t}=ei(e),r=await P.tables.getTable(t),{rows:n}=e.request.body,i=await Jt(r,n,{squash:!1,skipBBReferences:!0}),s=i.map(a=>ya({eventType:"row:delete",row:a,tableId:a.tableId}));return t===Vt.USER_METADATA?s=s.concat(i.map(a=>(e.params={id:a._id},hX(e)))):await C.getWorkspaceDB().bulkDocs(i.map(u=>({...u,_deleted:!0}))),await Fc.rowDelete(r,i),await $k(r,i),await Promise.all(s),{response:{ok:!0},rows:i}}o(sar,"bulkDestroy");async function aar(e){let t=e.request.query.field,r=C.getWorkspaceDB(),{tableId:n}=ei(e),i=e.params.rowId,[s,a]=await Promise.all([P.tables.getTable(n),du({tableId:n,rowId:i,fieldName:t})]),u=await PA(n,i);u=await Jt(s,u);let c=a,l=await r.getMultiple(c.map(h=>h.id),{allowMissing:!0}),f=mk(s.schema),d=await P.tables.getTables(f),p=[];for(let h of d){let m=l.filter(g=>g.tableId===h._id);p=p.concat(Jt(h,m,{fromRow:(0,mX.cloneDeep)(u),squash:!0}))}l=(0,LQe.flatten)(await Promise.all(p));for(let h of Object.keys(s.schema))if(s.schema[h].type==="link"){let g=c.filter(y=>y.fieldName===h);u[h]=l.filter(y=>g.find(b=>b.id===y._id))}return u}o(aar,"fetchEnrichedRow");function CM(e){return Mt(e)?W9:gX}o(CM,"pickApi");async function yX(e){let t=e.appId,{tableId:r}=ei(e),n=e.request.body;if(n&&!n._id)return OM(e);try{let i=CM(r),{row:s,table:a,oldRow:u}=Mt(r)?await i.patch(e):await mr.addAction(async()=>{let c=await i.patch(e);return Oe.action.crudExecuted({type:"update"}),c});s||e.throw(404,"Row not found"),e.eventEmitter?.emitRow({eventName:"row:update",appId:t,row:s,table:a,oldRow:u,user:P.users.getUserContextBindings(e.user)}),e.message=`${a.name} updated successfully.`,e.body=s,fb?.emitRowUpdate(e,s)}catch(i){e.throw(400,i)}}o(yX,"patch");var OM=o(async e=>{let{tableId:t,viewId:r}=ei(e),n=r||t,i=e.appId,s=e.request.body;if(bk(t)&&!s._rev&&e.throw(400,"Cannot create new user entry."),s&&s._id)return yX(e);let{row:a,table:u,squashed:c}=t.includes("datasource_plus")?await P.rows.save(n,e.request.body,e.user?._id):await mr.addAction(async()=>{let l=await mr.addRow(()=>P.rows.save(n,e.request.body,e.user?._id));return Oe.action.crudExecuted({type:"create"}),l});e.eventEmitter?.emitRow({eventName:"row:save",appId:i,row:a,table:u,user:P.users.getUserContextBindings(e.user)}),e.message=`${u.name} saved successfully`,e.body=a||c,fb?.emitRowUpdate(e,a||c)},"save");async function kQe(e){let{tableId:t,viewId:r}=ei(e),n=r||t,i=e.params.rowId;try{e.body=await P.rows.find(n,i)}catch{e.throw(404,"That row couldn't be found")}}o(kQe,"find");function car(e){return e.rows!==void 0&&Array.isArray(e.rows)}o(car,"isDeleteRows");function lar(e){return e._id!==void 0}o(lar,"isDeleteRow");async function far(e){let t=e.request.body,{tableId:r}=ei(e),n=t.rows.map(s=>{let a=typeof s=="string"?{_id:s,tableId:r}:s;return a._rev?dX(a,e.params):fX(dX(a,e.params),r)});return(await Promise.allSettled(n)).filter(s=>s.status==="fulfilled").map(s=>s.value)}o(far,"processDeleteRowsRequest");async function dar(e){let{tableId:t}=ei(e),r=e.appId,n=e.request.body;n.rows=await far(e);let{rows:i}=Mt(t)?await CM(t).bulkDestroy(e):await mr.addAction(async()=>{let s=await CM(t).bulkDestroy(e);return Oe.action.crudExecuted({type:"delete"}),s});t.includes("datasource_plus")||await mr.removeRows(i.length);for(let s of i)e.eventEmitter?.emitRow({eventName:"row:delete",appId:r,row:s,user:P.users.getUserContextBindings(e.user)}),fb?.emitRowDeletion(e,s);return i}o(dar,"deleteRows");async function par(e){let t=e.appId,{tableId:r}=ei(e),n=CM(r),i=Mt(r)?await n.destroy(e):await mr.addAction(async()=>{let s=await n.destroy(e);return Oe.action.crudExecuted({type:"delete"}),s});return r.includes("datasource_plus")||await mr.removeRow(),e.eventEmitter?.emitRow({eventName:"row:delete",appId:t,row:i.row,user:P.users.getUserContextBindings(e.user)}),fb?.emitRowDeletion(e,i.row),i}o(par,"deleteRow");async function pX(e){let t,r;if(car(e.request.body))t=await dar(e);else if(lar(e.request.body)){let n=await par(e);t=n.response,r=n.row}else e.status=400,t={message:"Invalid delete rows request"};e.row=r||{},e.body=t}o(pX,"destroy");async function MA(e){let{tableId:t,viewId:r}=ei(e);await C.ensureSnippetContext();let n=e.request.body,{query:i}=n;if(i){let u=await P.tables.getAllTables();i=MQe(t,i,u)}let a={query:await Ch(i,{user:P.users.getUserContextBindings(e.user)}),tableId:t,viewId:r,bookmark:n.bookmark??void 0,paginate:n.paginate,limit:n.limit,sort:n.sort??void 0,sortOrder:n.sortOrder,sortType:n.sortType??void 0,countRows:n.countRows,version:n.version,disableEscaping:n.disableEscaping,fields:void 0,indexer:void 0,rows:void 0};e.body=await P.rows.search(a)}o(MA,"search");function MQe(e,t,r){for(let n of Object.values(t))for(let i of Object.keys(n)){let s=i.match("^(?<relation>.+)\\.(?<field>.+)"),a=s?.groups?.relation,u=s?.groups?.field;if(!a||!u)continue;let c=r.find(h=>h._id===e),l=!!c?.schema[a];if(!c||l)continue;let f=r.find(h=>h.name===a),d=Object.values(c.schema).find(h=>zA(h)&&h.tableId===f?._id);if(!d)continue;let p=`${d.name}.${u}`;p&&p!==i&&(n[p]=n[i],delete n[i])}return Tt.recurseLogicalOperators(t,n=>MQe(e,n,r))}o(MQe,"replaceTableNamesInFilters");async function UQe({inputs:e,appId:t,emitter:r}){if(e.row==null||e.row.tableId==null)return{success:!1,response:{message:"Invalid inputs"}};let n=Kr(t,r,{body:e.row,params:{tableId:decodeURIComponent(e.row.tableId)}});try{return e.row=await Rb(e.row.tableId,e.row),e.row=await RM(e.row.tableId,e.row),await OM(n),{row:e.row,response:n.body,id:n.body._id,revision:n.body._rev,success:!!n.body._id}}catch(i){return{success:!1,response:Ye(i)}}}o(UQe,"run");async function FQe({inputs:e,appId:t,emitter:r}){if(e.rowId==null||e.row==null)return{success:!1,response:{message:"Invalid inputs"}};let n=e.row.tableId?decodeURIComponent(e.row.tableId):e.row.tableId,i,s=Object.keys(e.row||{}).reduce((u,c)=>{let l=e.row[c]==null||e.row[c]?.length===0,f=e.meta?.fields||{};return l?Object.hasOwn(f,c)&&f[c].clearRelationships===!0&&(u[c]=[]):u[c]=e.row[c],u},{}),a=Object.keys(e.meta?.fields||{}).reduce((u,c)=>{let l=e.meta?.fields?.[c]||{};return Object.hasOwn(l,"clearRelationships")||(u[c]=!e.row[c]||e.row[c]?.length===0?"":e.row[c]),u},{});i={tableId:n,...a,...s};try{n&&(i=await Rb(n,i),i=await RM(n,i));let u=Kr(t,r,{body:{...i,_id:e.rowId},params:{rowId:e.rowId,tableId:n}});return await yX(u),{row:u.body,response:u.message,id:u.body._id,revision:u.body._rev,success:!!u.body._id}}catch(u){return{success:!1,response:Ye(u)}}}o(FQe,"run");async function BQe({inputs:e,appId:t,emitter:r}){if(e.id==null)return{success:!1,response:{message:"Invalid inputs"}};let n=Kr(t,r,{body:{_id:e.id,_rev:e.revision},params:{tableId:decodeURIComponent(e.tableId)}});try{return await pX(n),{response:n.body,row:n.row,success:n.body.ok}}catch(i){return{success:!1,response:Ye(i)}}}o(BQe,"run");async function qQe(e){let{script:t,context:r}=e.request.body,n=new Cb;try{e.body=n.withContext(r,()=>n.execute(Cf(t)))}catch(i){throw i.code===pa.code?i.userScriptError:i}}o(qQe,"execute");async function jQe({inputs:e,appId:t,context:r,emitter:n}){if(e.code==null)return{success:!1,response:{message:"Invalid inputs"}};let i=Kr(t,n,{body:{script:e.code,context:r}});try{return await qQe(i),{success:!0,value:i.body}}catch(s){return{success:!1,response:Ye(s)}}}o(jQe,"run");async function WQe({inputs:e,context:t}){let{code:r}=e;if(r==null)return{success:!1,response:{message:"Invalid inputs"}};if(r=r.trim(),!r.startsWith("{{ js "))return{success:!1,response:{message:"Expected code to be a {{ js }} template block"}};try{return{success:!0,value:Cr(e.code,t,{noThrow:!1})}}catch(n){return{success:!1,response:Ye(n)}}}o(WQe,"run");async function GQe({inputs:e,appId:t,emitter:r,context:n}){if(e.query==null)return{success:!1,response:{message:"Invalid inputs"}};let{queryId:i,...s}=e.query,a=Kr(t,r,{body:{parameters:s},params:{queryId:i},user:n.user});try{await Lb(a);let{data:u,...c}=a.body;return{response:u,info:c,success:!0}}catch(u){return{success:!1,info:{},response:Ye(u)}}}o(GQe,"run");async function $Qe({inputs:e,appId:t,emitter:r,context:n}){if(e.query==null)return{success:!1,response:{message:"Invalid inputs"}};let{queryId:i,...s}=e.query,a=Kr(t,r,{body:{parameters:s},params:{queryId:i},user:n.user});try{await Lb(a);let{data:u,...c}=a.body;return{response:u,info:c,success:!0}}catch(u){return{success:!1,info:{},response:Ye(u)}}}o($Qe,"run");var VQe=U(require("node-fetch"));var Sar=["POST","PUT","PATCH"];async function HQe({inputs:e}){let{requestMethod:t,url:r,requestBody:n,headers:i}=e;r.startsWith("http")||(r=`http://${r}`);let s={method:t};if(i)try{let a=typeof i=="string"?JSON.parse(i):i;s.headers={...s.headers,...a}}catch{return{success:!1,response:"Unable to process headers, must be a JSON object."}}n&&n.length!==0&&Sar.indexOf(t)!==-1&&(s.body=typeof n=="string"?n:JSON.stringify(n),s.headers={...s.headers,"Content-Type":"application/json"});try{s.body&&JSON.parse(s.body);let a=await(0,VQe.default)(r,s),{status:u,message:c}=await vs(a);return{httpStatus:u,response:c,success:u>=200&&u<=206}}catch(a){return{success:!1,response:Ye(a)}}}o(HQe,"run");async function QQe({inputs:e,appId:t}){typeof e.text!="string"&&(e.text=JSON.stringify(e.text));let r=`App ${t} - ${e.text}`;return console.log(r),{success:!0,message:r}}o(QQe,"run");var KQe=U(require("node-fetch"));var Rar="Budibase Automate",Oar="https://i.imgur.com/a1cmTKM.png";async function zQe({inputs:e}){let{url:t,username:r,avatar_url:n,content:i}=e;if(r||(r=Rar),n||(n=Oar),!t?.trim()?.length)return{httpStatus:400,response:"Missing Webhook URL",success:!1};let s;try{s=await(0,KQe.default)(t,{method:"post",body:JSON.stringify({username:r,avatar_url:n,content:i}),headers:{"Content-Type":"application/json"}})}catch(c){return{httpStatus:400,response:c.message,success:!1}}let{status:a,message:u}=await vs(s);return{httpStatus:a,success:a===200||a===204,response:u}}o(zQe,"run");var YQe=U(require("node-fetch"));async function JQe({inputs:e}){let{url:t,text:r}=e;if(!t?.trim()?.length)return{httpStatus:400,response:"Missing Webhook URL",success:!1};let n;try{n=await(0,YQe.default)(t,{method:"post",body:JSON.stringify({text:r}),headers:{"Content-Type":"application/json"}})}catch(a){return{httpStatus:400,response:a.message,success:!1}}let{status:i,message:s}=await vs(n);return{httpStatus:i,response:s,success:i===200}}o(JQe,"run");var XQe=U(require("node-fetch"));async function ZQe({inputs:e}){let{url:t,body:r}=e,n={};try{n=r?.value?JSON.parse(r?.value):{}}catch{return{httpStatus:400,response:"Invalid payload JSON",success:!1}}if(!t?.trim()?.length)return{httpStatus:400,response:"Missing Webhook URL",success:!1};let i;try{i=await(0,XQe.default)(t,{method:"post",body:JSON.stringify({platform:"budibase",...n}),headers:{"Content-Type":"application/json"}})}catch(u){return{httpStatus:400,response:u.message,success:!1}}let{status:s,message:a}=await vs(i);return{success:s===200,httpStatus:s,response:a}}o(ZQe,"run");var eKe=U(require("node-fetch"));async function tKe({inputs:e}){let{url:t,body:r,method:n,authorization:i}=e,s={};try{s=r?.value?JSON.parse(r?.value):{}}catch{return{httpStatus:400,response:"Invalid payload JSON",success:!1}}if(!t?.trim()?.length)return{httpStatus:400,response:"Missing Webhook URL",success:!1};let a,u={method:n||"GET",headers:{"Content-Type":"application/json",Authorization:i}};["GET","HEAD"].includes(u.method)||(u.body=JSON.stringify({...s}));try{a=await(0,eKe.default)(t,u)}catch(f){return{httpStatus:400,response:f.message,success:!1}}let{status:c,message:l}=await vs(a);return{httpStatus:c,success:c===200,response:l}}o(tKe,"run");var rKe=U(require("node-fetch"));async function nKe({inputs:e}){let{url:t,body:r}=e,n={};try{r?.value&&(typeof r.value=="string"?n=JSON.parse(r.value):n=r.value,Object.keys(n).forEach(u=>{if(typeof n[u]=="string")try{let c=JSON.parse(n[u]);n[u]=c}catch{}}))}catch{return{httpStatus:400,response:"Invalid payload JSON",success:!1}}if(!t?.trim()?.length)return{httpStatus:400,response:"Missing Webhook URL",success:!1};let i;try{i=await(0,rKe.default)(t,{method:"post",body:JSON.stringify({...n}),headers:{"Content-Type":"application/json"}})}catch(u){return{httpStatus:400,response:u.message,success:!1}}let{status:s,message:a}=await vs(i);return{httpStatus:s,success:s===200,response:a}}o(nKe,"run");async function iKe({inputs:e}){try{let{field:t,condition:r,value:n}=e;!isNaN(n)&&!isNaN(t)&&typeof t!="boolean"&&typeof n!="boolean"?(n=parseFloat(n),t=parseFloat(t)):!isNaN(Date.parse(n))&&!isNaN(Date.parse(t))&&(n=Date.parse(n),t=Date.parse(t));let i=!1;if(typeof t!="object"&&typeof n!="object")switch(r){case"EQUAL":i=t===n;break;case"NOT_EQUAL":i=t!==n;break;case"GREATER_THAN":i=t>n;break;case"LESS_THAN":i=t<n;break}else i=!1;return{success:!0,result:i,refValue:t,comparisonValue:n}}catch{return{success:!1,result:!1}}}o(iKe,"run");async function oKe({inputs:e}){return await jGe(e.time),{success:!0}}o(oKe,"run");var Far=require("lodash");var K1n=30*6e4;var kar=require("lodash");async function xM(e){let t=e.params.tableId,r=await P.tables.getTable(t),n=await P.tables.enrichViewSchemas(r);e.body=n}o(xM,"find");async function Bar(e,t){let r=Kr(e,null,{params:{tableId:t}});return await xM(r),r.body}o(Bar,"getTable");async function aKe({inputs:e,appId:t}){let{tableId:r,filters:n,sortColumn:i,sortOrder:s,limit:a}=e;if(!r)return{success:!1,response:{message:"You must select a table to query."}};let u=await Bar(t,r),c="string";i&&u&&u.schema&&u.schema[i]&&(c=u.schema[i].type==="number"?"number":"string");let l=Kr(t,null,{params:{tableId:decodeURIComponent(r)},body:{sortType:c,limit:a,sort:i,query:n||{},sortOrder:s||"ascending"},version:"1"});try{let f;return e.onEmptyFilter==="none"&&e["filters-def"]&&lM(e["filters-def"])?f=[]:(await MA(l),f=l.body?l.body.rows:[]),{rows:f,success:!0}}catch(f){return{success:!1,response:Ye(f)}}}o(aKe,"run");async function jar(e,t){let r=Kr(e,null,{params:{tableId:t}});return await xM(r),r.body}o(jar,"getTable");async function uKe({inputs:e,appId:t}){let{tableId:r,rowId:n,filters:i,sortColumn:s,sortOrder:a}=e;if(!r)return{success:!1,row:null,response:{message:"You must select a table to query."}};if(n){let d=Kr(t,null,{params:{tableId:decodeURIComponent(r),rowId:n}});try{return await kQe(d),{row:d.body||null,success:!0}}catch{}}if(!(i&&Object.keys(i).length>0||e["filters-def"]&&e["filters-def"].length>0))return{success:!1,row:null,response:{message:"You must provide a matching row ID or at least one filter to get row."}};let c=await jar(t,r),l="string";s&&c&&c.schema&&c.schema[s]&&(l=c.schema[s].type==="number"?"number":"string");let f=Kr(t,null,{params:{tableId:decodeURIComponent(r)},body:{sortType:l,limit:1,sort:s,query:i||{},sortOrder:a||"ascending"},version:"1"});try{let d;return e.onEmptyFilter==="none"&&e["filters-def"]&&lM(e["filters-def"])?d=[]:(await MA(f),d=f.body?f.body.rows:[]),{row:d&&d.length>0?d[0]:null,success:!0}}catch(d){return{success:!1,row:null,response:Ye(d)}}}o(uKe,"run");async function cKe({inputs:e}){return e.collection?{success:!0,value:e.collection}:{success:!1}}o(cKe,"run");async function lKe({inputs:e}){let{automationId:t,...r}=e.automation;if(await Zi.isTriggerAutomationRunEnabled())if(e.automation.automationId){let i=await C.getWorkspaceDB().tryGet(e.automation.automationId);if(!i)return{success:!1,status:"error"};let s=ie.AUTOMATION_THREAD_TIMEOUT;e.timeout!==void 0&&(s=e.timeout*1e3);let a=await jc(i,{fields:{...r},timeout:s},{getResponses:!0});if(Zk(a))return{success:a.status==="success",value:a.steps,status:a.status};throw new Error("Automation did not have a collect block")}else return{success:!1,status:"error"};else return{success:!1,status:"error"}}o(lKe,"run");var fKe=require("openai");async function Var(e){return(await new fKe.OpenAI({apiKey:L.OPENAI_API_KEY}).chat.completions.create({model:e.model,messages:[{role:"user",content:e.prompt}]}))?.choices[0]?.message?.content}o(Var,"legacyOpenAIPrompt");async function dKe({inputs:e}){if(e.prompt==null)return{success:!1,response:"Budibase OpenAI Automation Failed: No prompt supplied"};try{let t,r=await kt.getLLM({model:e.model});return t=r?(await r.prompt(e.prompt)).message:await Var(e),{response:t,success:!0}}catch(t){return{success:!1,response:Ye(t)}}}o(dKe,"run");var pKe=require("child_process");async function hKe({inputs:e,context:t}){if(e.code==null)return{stdout:"Budibase bash automation failed: Invalid inputs"};try{let r=Cr(e.code,t),n,i=!0;try{n=(0,pKe.execSync)(r,{timeout:ie.QUERY_THREAD_TIMEOUT}).toString()}catch(s){n=s.message,i=!1}return{stdout:n,success:i}}catch(r){return{success:!1,response:Ye(r)}}}o(hKe,"run");async function mKe({inputs:e}){if(!e.textInput||!e.categoryItems||e.categoryItems.length===0)return{success:!1,response:"Classify Text AI Step Failed: Text Input and Categories (non-empty) are required."};try{let t=await kt.getLLMOrThrow(),r=e.categoryItems.map(a=>a.category),n=kt.classifyText(e.textInput,r),s=(await t.prompt(n))?.message?.trim();return s&&r.includes(s)?{response:s,category:s,success:!0}:s?{success:!1,response:`Classify Text AI Step Failed: AI returned category '${s}', which is not in the provided list: [${r.join(", ")}]. Ensure the AI is constrained to the list or check AI response variability.`}:{success:!1,response:"Classify Text AI Step Failed: AI did not return a category."}}catch(t){return{success:!1,response:Ye(t)}}}o(mKe,"run");async function gKe({inputs:e}){if(e.prompt==null)return{success:!1,response:"No prompt supplied"};try{return{response:(await(await kt.getLLM())?.prompt(e.prompt))?.message,success:!0}}catch(t){return{success:!1,response:Ye(t)}}}o(gKe,"run");async function yKe({inputs:e}){if(e.text==null||e.language==null)return{success:!1,response:"No text or language supplied"};try{let t=await kt.getLLMOrThrow(),r=kt.translate(e.text,e.language);return{response:(await t?.prompt(r))?.message,success:!0}}catch(t){return{success:!1,response:Ye(t)}}}o(yKe,"run");async function bKe({inputs:e}){if(e.text==null)return{success:!1,response:"No text supplied"};try{let t=await kt.getLLMOrThrow(),r=kt.summarizeText(e.text,e.length);return{response:(await t?.prompt(r))?.message,success:!0}}catch(t){return{success:!1,response:Ye(t)}}}o(bKe,"run");async function _Ke({inputs:e}){if(!e.contentType||!e.instructions)return{success:!1,response:"Generate Text AI Step Failed: Content Type and Instructions are required."};try{let t=await kt.getLLMOrThrow(),r=Xar(e.contentType),n=new kt.LLMRequest().addUserMessage(`${r}
|
|
1040
1040
|
|
|
1041
1041
|
Instructions: ${e.instructions}
|