@budibase/server 3.26.3 → 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-C9bKjJHx.js → easymde-C34suCbf.js} +1 -1
- package/builder/assets/{index-BKCzmkUd.js → index-DmmWAnIF.js} +5 -5
- package/builder/index.html +1 -1
- 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 +157 -157
- package/dist/index.js.map +2 -2
- package/dist/query.js +4 -4
- package/dist/query.js.map +2 -2
- package/dist/yarn.lock +309 -67
- package/package.json +3 -4
- package/src/api/controllers/assets.ts +2 -1
- package/src/api/controllers/dev.ts +3 -1
- package/src/api/controllers/static/index.ts +3 -1
- package/src/api/controllers/view/viewsV2.ts +1 -1
- package/src/api/routes/assets.ts +2 -1
- package/src/api/routes/dev.ts +3 -3
- package/src/api/routes/static.ts +5 -3
- package/src/api/utils.ts +5 -1
- package/src/constants/paths.ts +1 -1
- package/src/sdk/workspace/rows/queryUtils.ts +1 -0
- package/src/sdk/workspace/tables/duplicate.ts +1 -0
package/dist/query.js
CHANGED
|
@@ -430,7 +430,7 @@ $1`)};UT.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.`;u2e.exports=M5t});var x8=v((l2e,f2e)=>{"use strict";var Pn=Jn(),ph=MT(),tt=f2e.exports,U5t=c2e();tt.append=function(e,t){return typeof e=="string"&&typeof t=="string"?e+t:e};tt.camelcase=function(e){return typeof e!="string"?"":ph.changecase(e,function(t){return t.toUpperCase()})};tt.capitalize=function(e){return typeof e!="string"?"":e.charAt(0).toUpperCase()+e.slice(1)};tt.capitalizeAll=function(e){if(typeof e!="string")return"";if(Pn.isString(e))return e.replace(/\w\S*/g,function(t){return tt.capitalize(t)})};tt.center=function(e,t){if(typeof e!="string")return"";for(var r="",n=0;n<t;)r+=" ",n++;return r+e+r};tt.chop=function(e){return typeof e!="string"?"":ph.chop(e)};tt.dashcase=function(e){return typeof e!="string"?"":ph.changecase(e,function(t){return"-"+t})};tt.dotcase=function(e){return typeof e!="string"?"":ph.changecase(e,function(t){return"."+t})};tt.downcase=function(){return tt.lowercase.apply(this,arguments)};tt.ellipsis=function(e,t){if(Pn.isString(e))return e.length<=t?e:tt.truncate(e,t)+"\u2026"};tt.hyphenate=function(e){return typeof e!="string"?"":e.split(" ").join("-")};tt.isString=function(e){return typeof e=="string"};tt.lowercase=function(e){return Pn.isObject(e)&&e.fn?e.fn(this).toLowerCase():typeof e!="string"?"":e.toLowerCase()};tt.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};tt.pascalcase=function(e){return typeof e!="string"?"":(e=ph.changecase(e,function(t){return t.toUpperCase()}),e.charAt(0).toUpperCase()+e.slice(1))};tt.pathcase=function(e){return typeof e!="string"?"":ph.changecase(e,function(t){return"/"+t})};tt.plusify=function(e,t){return typeof e!="string"?"":(Pn.isString(t)||(t=" "),e.split(t).join("+"))};tt.prepend=function(e,t){return typeof e=="string"&&typeof t=="string"?t+e:e};tt.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};tt.remove=function(e,t){return typeof e!="string"?"":Pn.isString(t)?e.split(t).join(""):e};tt.removeFirst=function(e,t){return typeof e!="string"?"":Pn.isString(t)?e.replace(t,""):e};tt.replace=function(e,t,r){return typeof e!="string"?"":Pn.isString(t)?(Pn.isString(r)||(r=""),e.split(t).join(r)):e};tt.replaceFirst=function(e,t,r){return typeof e!="string"?"":Pn.isString(t)?(Pn.isString(r)||(r=""),e.replace(t,r)):e};tt.reverse=Wy().reverse;tt.sentence=function(e){return typeof e!="string"?"":e.replace(/((?:\S[^\.\?\!]*)[\.\?\!]*)/g,function(t){return t.charAt(0).toUpperCase()+t.substr(1).toLowerCase()})};tt.snakecase=function(e){return typeof e!="string"?"":ph.changecase(e,function(t){return"_"+t})};tt.split=function(e,t){return typeof e!="string"?"":(Pn.isString(t)||(t=","),e.split(t))};tt.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):""};tt.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(l2e.capitalize(a))}return i.join(" ")};tt.trim=function(e){return typeof e=="string"?e.trim():""};tt.trimLeft=function(e){if(Pn.isString(e))return e.replace(/^\s+/,"")};tt.trimRight=function(e){if(Pn.isString(e))return e.replace(/\s+$/,"")};tt.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};tt.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}};tt.upcase=function(){return tt.uppercase.apply(this,arguments)};tt.uppercase=function(e){return Pn.isObject(e)&&e.fn?e.fn(this).toUpperCase():typeof e!="string"?"":e.toUpperCase()};tt.lorem=function(e){return(isNaN(e)||e<1||!e)&&(e=11),U5t.substring(0,e)}});var P8=v((a8r,d2e)=>{"use strict";var D8=require("url"),GT=Jn(),F5t=require("querystring"),hh=d2e.exports;hh.encodeURI=function(e){if(GT.isString(e))return encodeURIComponent(e)};hh.escape=function(e){if(GT.isString(e))return F5t.escape(e)};hh.decodeURI=function(e){if(GT.isString(e))return decodeURIComponent(e)};hh.urlResolve=function(e,t){return D8.resolve(e,t)};hh.urlParse=function(e){return D8.parse(e)};hh.stripQuerystring=function(e){if(GT.isString(e))return e.split("?")[0]};hh.stripProtocol=function(e){if(GT.isString(e)){var t=D8.parse(e);return t.protocol="",t.format()}}});var N8=v((u8r,p2e)=>{"use strict";var B5t=require("uuid"),q5t=p2e.exports;q5t.uuid=function(){return B5t.v4()}});var m2e=v((c8r,h2e)=>{"use strict";h2e.exports={array:Wy(),code:HFe(),collection:a1e(),comparison:a8(),html:R1e(),i18n:I1e(),inflection:D1e(),match:GBe(),math:O8(),misc:HBe(),number:I8(),object:FN(),path:o2e(),regex:C8(),string:x8(),url:P8(),uuid:N8()}});var g2e=v((l8r,Hy)=>{"use strict";var $T=m2e();Hy.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||PT();if(Hy.exports.handlebars=n,t)t.forEach(function(i){n.registerHelper($T[i])});else for(let i in $T){let s=$T[i];n.registerHelper(s)}return n.helpers},"helpers");for(let e in $T){let t=$T[e];Hy.exports[e]=function(r){r=r||{};var n=r.handlebars||r.hbs||PT();return Hy.exports.handlebars=n,n.registerHelper(t),t}}Hy.exports.utils=MT()});var KGe=v(ar=>{"use strict";Object.defineProperty(ar,"__esModule",{value:!0});ar.InvalidRemoveOpPath=ar.NoTarget=ar.InvalidScimPatchRequest=ar.NoPathInScimPatchOp=ar.FilterArrayTargetNotFound=ar.FilterOnEmptyArray=ar.InvalidScimPatchOp=ar.RemoveValueNotArray=ar.RemoveValueNestedArrayNotSupported=ar.InvalidScimRemoveValue=ar.InvalidScimPatch=ar.ScimError=void 0;var Wv=class extends Error{static{o(this,"ScimError")}constructor(t){super(),this.scimCode=t}};ar.ScimError=Wv;var Bf=class extends Wv{static{o(this,"InvalidScimPatch")}constructor(t,r="invalidSyntax"){super(r),this.message=`Invalid SCIM Patch: ${t}`}};ar.InvalidScimPatch=Bf;var Gv=class extends Wv{static{o(this,"InvalidScimRemoveValue")}constructor(t,r="invalidSyntax"){super(r),this.message=`Invalid SCIM Remove Operation: ${t}`}};ar.InvalidScimRemoveValue=Gv;var lY=class extends Gv{static{o(this,"RemoveValueNestedArrayNotSupported")}constructor(){super("Invalid patch value, remove does not support arrays inside arrays.")}};ar.RemoveValueNestedArrayNotSupported=lY;var fY=class extends Gv{static{o(this,"RemoveValueNotArray")}constructor(){super("Remove with patch value is supported only for array properties.")}};ar.RemoveValueNotArray=fY;var $v=class extends Bf{static{o(this,"InvalidScimPatchOp")}constructor(t){super(`${t}`,"invalidSyntax")}};ar.InvalidScimPatchOp=$v;var dY=class extends $v{static{o(this,"FilterOnEmptyArray")}constructor(t,r,n){super(`${t}`),this.attrName=r,this.valuePath=n}};ar.FilterOnEmptyArray=dY;var pY=class extends $v{static{o(this,"FilterArrayTargetNotFound")}constructor(t,r,n,i){super(`${t}`),this.attrName=r,this.valuePath=n,this.schema=i}};ar.FilterArrayTargetNotFound=pY;var hY=class extends Bf{static{o(this,"NoPathInScimPatchOp")}constructor(){super('Missing path in "remove" patch operation',"noTarget")}};ar.NoPathInScimPatchOp=hY;var mY=class extends Bf{static{o(this,"InvalidScimPatchRequest")}constructor(t){super(`The SCIM patch request is invalid: ${t}`)}};ar.InvalidScimPatchRequest=mY;var gY=class extends Bf{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")}};ar.NoTarget=gY;var yY=class extends Bf{static{o(this,"InvalidRemoveOpPath")}constructor(){super("Path specified in 'remove' operation doesn't exist")}};ar.InvalidRemoveOpPath=yY});var XGe=v(fu=>{"use strict";Object.defineProperty(fu,"__esModule",{value:!0});fu.parseExpression=fu.parseFilter=fu.Tokens=fu.tokenizer=void 0;var YGe={type:"EOT",literal:""};function AXt(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(YGe),t}o(AXt,"tokenizer");fu.tokenizer=AXt;var bY=class{static{o(this,"Tokens")}getList(){return this.list.map((t,r)=>r==this.i?`[${t.literal}]`:t.literal)}peek(){return this.current||YGe}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}};fu.Tokens=bY;var RXt=new Set(["eq","ne","co","sw","ew","gt","lt","ge","le"]),OXt=new Set(["pr"]);function _Y(e){return XL(ZL(e),e,Dh.LOWEST)}o(_Y,"parseFilter");fu.parseFilter=_Y;function ZL(e){let t=e.shift();if(t.literal=="("){let r=_Y(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:ZL(e)};return XL(r,e,Dh.NOT)}else{if(t.type=="Word")return JGe(t,e);throw new Error(`Unexpected token ${t.literal} (${t.type})`)}}o(ZL,"parseExpression");fu.parseExpression=ZL;var Dh;(function(e){e[e.LOWEST=1]="LOWEST",e[e.OR=2]="OR",e[e.AND=3]="AND",e[e.NOT=4]="NOT"})(Dh||(Dh={}));var zGe={or:Dh.OR,and:Dh.AND,not:Dh.NOT};function XL(e,t,r){let n=t.peek().literal.toLowerCase(),i=zGe[n];if(!i||r>=i)return e;let s=[e];for(;t.peek().literal.toLowerCase()===n;){let a=ZL(t.forward()),u=t.peek().literal.toLowerCase();zGe[u]>i&&(a=XL(a,t,i)),s.push(a)}return XL({op:n,filters:s},t,r)}o(XL,"parseInxif");function JGe(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(RXt.has(i)){let s=IXt(t);return{op:i,attrPath:r,compValue:s}}else{if(OXt.has(i))return{op:i,attrPath:r};if(i==="["){let s=_Y(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,JGe(c,t)]}}else throw new Error(`Unexpected token ${r} ${n.literal} as valFilter operator`)}}o(JGe,"readValFilter");function IXt(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(IXt,"parseCompValue")});var ZGe=v(tk=>{"use strict";Object.defineProperty(tk,"__esModule",{value:!0});tk.Tester=void 0;var ek=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)}};tk.Tester=ek;ek.UNDEF=Symbol("undefined")});var e$e=v(du=>{"use strict";Object.defineProperty(du,"__esModule",{value:!0});du.log=du.valfilter=void 0;var CXt=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,du.valfilter)(r,t))});case"not":return Object.assign(Object.assign({},e),{filter:(0,du.valfilter)(e,t)});case"[]":return(0,du.valfilter)(e.valFilter,e.attrPath)}return e},"valfilter");du.valfilter=CXt;var xXt=o(e=>{switch(e.op){case"and":case"or":let t=e.filters.map(du.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");du.log=xXt});var t$e=v(rk=>{"use strict";Object.defineProperty(rk,"__esModule",{value:!0});rk.stringify=void 0;function Vv(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=>Vv(i)).join(` ${e.op} `);r=t?`(${n})`:n;break;case"and":r=e.filters.map(i=>Vv(i,!0)).join(` ${e.op} `);break;case"not":r=`${e.op} (${Vv(e.filter)})`;break;case"[]":r=`${e.attrPath}[${Vv(e.valFilter)}]`;break}return r}o(Vv,"stringify");rk.stringify=Vv});var nk=v(Go=>{"use strict";Object.defineProperty(Go,"__esModule",{value:!0});Go.flatten=Go.parse=Go.filter=Go.Tester=Go.stringify=void 0;var wY=XGe(),DXt=ZGe(),r$e=e$e(),PXt=t$e();Object.defineProperty(Go,"stringify",{enumerable:!0,get:function(){return PXt.stringify}});Go.Tester=DXt.Tester;function NXt(e){let t=new Go.Tester;return r=>t.test(r,e)}o(NXt,"filter");Go.filter=NXt;function LXt(e){let t=new wY.Tokens(wY.tokenizer(e)),r=wY.parseFilter(t);if(t.peek().type!=="EOT")throw new Error(`unexpected EOT ${t.getList()}`);return r}o(LXt,"parse");Go.parse=LXt;function kXt(e){return r$e.log(r$e.valfilter(e))}o(kXt,"flatten");Go.flatten=kXt});var i$e=v((Psn,n$e)=>{"use strict";n$e.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 xY=v(Er=>{"use strict";Object.defineProperty(Er,"__esModule",{value:!0});Er.PATCH_OPERATION_SCHEMA=Er.InvalidScimRemoveValue=Er.RemoveValueNotArray=Er.RemoveValueNestedArrayNotSupported=Er.NoTarget=Er.InvalidScimPatchRequest=Er.NoPathInScimPatchOp=Er.InvalidScimPatchOp=Er.InvalidScimPatch=Er.ScimError=void 0;Er.patchBodyValidation=qXt;Er.scimPatch=jXt;var Pt=KGe();Object.defineProperty(Er,"ScimError",{enumerable:!0,get:function(){return Pt.ScimError}});Object.defineProperty(Er,"InvalidScimPatch",{enumerable:!0,get:function(){return Pt.InvalidScimPatch}});Object.defineProperty(Er,"InvalidScimPatchOp",{enumerable:!0,get:function(){return Pt.InvalidScimPatchOp}});Object.defineProperty(Er,"NoPathInScimPatchOp",{enumerable:!0,get:function(){return Pt.NoPathInScimPatchOp}});Object.defineProperty(Er,"InvalidScimPatchRequest",{enumerable:!0,get:function(){return Pt.InvalidScimPatchRequest}});Object.defineProperty(Er,"NoTarget",{enumerable:!0,get:function(){return Pt.NoTarget}});Object.defineProperty(Er,"RemoveValueNestedArrayNotSupported",{enumerable:!0,get:function(){return Pt.RemoveValueNestedArrayNotSupported}});Object.defineProperty(Er,"RemoveValueNotArray",{enumerable:!0,get:function(){return Pt.RemoveValueNotArray}});Object.defineProperty(Er,"InvalidScimRemoveValue",{enumerable:!0,get:function(){return Pt.InvalidScimRemoveValue}});var EY=nk(),SY=i$e(),AY=/(\[|\])/,MXt=/^(.+)\[(.+)\]$/,o$e=/(?!\B"[^[]*)\.(?![^\]]*"\B)/g,UXt=["remove","add","replace"],FXt="urn:ietf:params:scim:schemas:core:2.0:User",BXt="urn:ietf:params:scim:schemas:core:2.0:Group";Er.PATCH_OPERATION_SCHEMA="urn:ietf:params:scim:api:messages:2.0:PatchOp";function qXt(e){if(!e.schemas||!e.schemas.includes(Er.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(RY)}o(qXt,"patchBodyValidation");function jXt(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 WXt(n,i);case"add":case"Add":case"replace":case"Replace":return a$e(n,i,!!r.treatMissingAsAdd);default:throw new Pt.InvalidScimPatchRequest(`Operator is invalid for SCIM patch request. ${i}`)}},e)}o(jXt,"scimPatch");function RY(e){if(typeof e.op!="string"||!HXt(e.op))throw new Pt.InvalidScimPatchRequest(`Invalid op "${e.op}" in the request.`);if(e.op==="remove"&&!e.path)throw new Pt.NoPathInScimPatchOp;if(Qv(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(RY,"validatePatchOperation");function OY(e){let t=e.lastIndexOf(":");if(t<0)return e.split(o$e);let r=e.substring(0,t),n=e.substring(t+1).split(o$e);switch(r){case BXt:case FXt:break;default:n.unshift(r);break}return n}o(OY,"resolvePaths");function WXt(e,t){let r;RY(t);let n=OY(t.path);try{r=u$e(e,n,{isRemoveOp:!0})}catch(s){if(s instanceof Pt.InvalidRemoveOpPath)return e;throw s}let i=n[n.length-1];if(!AY.test(i)){for(let s of r)t.value?s[i]=VXt(s[i],t.value):delete s[i];return e}for(let s of r){let{attrName:a,valuePath:u,array:c}=IY(i,s);s[a]=CY(c,u,{excludeIfMatchFilter:!0}),s[a].length===0&&delete s[a]}return e}o(WXt,"applyRemoveOperation");function a$e(e,t,r){var n;let i;if(RY(t),!t.path)return Hv(e,t);let s=OY(t.path),a=s[s.length-1];try{i=u$e(e,s)}catch(u){if(u instanceof Pt.FilterOnEmptyArray||u instanceof Pt.FilterArrayTargetNotFound){let c=u.schema,l=(0,EY.parse)(u.valuePath);if(Qv(t.op)&&"compValue"in l&&l.compValue!==void 0&&l.op==="eq"){let f={};return f[l.attrPath]=l.compValue,f[a]=Hv(void 0,t,!0),c[u.attrName]=[...(n=c[u.attrName])!==null&&n!==void 0?n:[],f],e}else if(r&&TY(t.op)&&"compValue"in l&&l.compValue!==void 0&&l.op==="eq")return a$e(e,Object.assign(Object.assign({},t),{op:"add"}),!1);throw new Pt.NoTarget(t.path)}throw u}if(!AY.test(a)){for(let u of i)u[a]=Hv(u[a],t);return e}for(let u of i){let{valuePath:c,array:l}=IY(a,u),f=CY(l,c);if(TY(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]=Hv(l[d],t))}return e}o(a$e,"applyAddOrReplaceOperation");function IY(e,t){let r=e.match(MXt);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 vY(n,i,s)}o(IY,"extractArray");function u$e(e,t,r={}){let n=[e];for(let i=0;i<t.length-1;i++){let s=t[i];AY.test(s)?n=n.flatMap(a=>{try{let{attrName:u,valuePath:c,array:l}=IY(s,a),f=CY(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(u$e,"navigate");function Hv(e,t,r){if(Array.isArray(e)){if(Array.isArray(t.value)){if(Qv(t.op)){let i=t.value.filter(s=>!s$e(e,s));return e.concat(i)}return t.value}if(TY(t.op))return e.map(i=>Hv(i,t,r));let n=e;return s$e(n,t.value)||n.push(t.value),n}return e!==null&&typeof e=="object"?GXt(e,t,r):t.value}o(Hv,"addOrReplaceAttribute");function GXt(e,t,r){if(typeof t.value!="object"){if(Qv(t.op)&&!r)throw new Pt.InvalidScimPatchOp("Invalid patch query.");return t.value}for(let[n,i]of Object.entries(t.value))$Xt(e,OY(n),i,t.op);return e}o(GXt,"addOrReplaceObjectAttribute");function $Xt(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(Qv(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($Xt,"assign");function CY(e,t,r={}){try{let n=(0,EY.filter)((0,EY.parse)(t));return e.filter(i=>r.excludeIfMatchFilter?!n(i):n(i))}catch(n){throw new Pt.InvalidScimPatchOp(`${n}`)}}o(CY,"filterWithQuery");function VXt(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=>!SY(r,n))}),e):e.filter(r=>!SY(t,r))}o(VXt,"removeWithPatchValue");function s$e(e,t){return e.some(r=>SY(t,r))}o(s$e,"deepIncludes");function HXt(e){return UXt.includes(e.toLowerCase())}o(HXt,"isValidOperation");function Qv(e){return e!==void 0&&e.toLowerCase()==="add"}o(Qv,"isAddOperation");function TY(e){return e!==void 0&&e.toLowerCase()==="replace"}o(TY,"isReplaceOperation");var vY=class{static{o(this,"ScimSearchQuery")}constructor(t,r,n){this.attrName=t,this.valuePath=r,this.array=n}}});var lor={};var K3e,z3e=er(()=>{"use strict";K3e=U(require("dd-trace"));process.env.DD_APM_ENABLED&&(console.log("Starting dd-trace"),K3e.default.init({debug:process.env.DD_ENV==="qa",llmobs:{mlApp:process.env.DD_LLMOBS_ML_APP||"budibase"}}))});var Sur={};G(Sur,{execute:()=>Eur});module.exports=qA(Sur);var Qn={};G(Qn,{analyticsEnabled:()=>z0,generateConfigID:()=>nT,getAIConfig:()=>aWt,getConfig:()=>Ii,getDefaultGoogleConfig:()=>B3,getGoogleConfig:()=>UD,getGoogleDatasourceConfig:()=>j3,getOIDCConfig:()=>iWt,getOIDCConfigById:()=>W3,getOIDCLogosDoc:()=>rWt,getPlatformUrl:()=>iT,getRecaptchaConfig:()=>uWt,getSCIMConfig:()=>sWt,getSMTPConfig:()=>oWt,getSMTPConfigDoc:()=>b0e,getSettingsConfig:()=>q3,getSettingsConfigDoc:()=>dy,getTranslationsConfig:()=>eWt,getTranslationsConfigDoc:()=>y0e,save:()=>Zjt});var co=(r=>(r.ASCENDING="ascending",r.DESCENDING="descending",r))(co||{});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||{}),vX=["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"],AX=["automation:deleted","workspace_app:deleted","datasource:deleted","table:deleted","query:deleted","view:deleted"],RX=[...vX,...AX],Vh={"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 OX=o((e,t,r)=>e==="usage"&&t==="static","isStaticQuota"),IX=o((e,t,r)=>e==="usage"&&t==="monthly","isMonthlyQuota"),CX=o((e,t)=>e==="constant","isConstantQuota");var Fi="--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||{}),un=(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))(un||{});var Tn=(r=>(r.CONNECTION_CHECKING="connection",r.FETCH_TABLE_NAMES="fetch_table_names",r))(Tn||{});var xX=U(require("lodash/isPlainObject"));var Jf=(a=>(a.EQUAL="equal",a.NOT_EQUAL="notEqual",a.EMPTY="empty",a.NOT_EMPTY="notEmpty",a.FUZZY="fuzzy",a.STRING="string",a))(Jf||{}),wa=(i=>(i.CONTAINS="contains",i.NOT_CONTAINS="notContains",i.CONTAINS_ANY="containsAny",i.ONE_OF="oneOf",i))(wa||{}),Hh=(t=>(t.RANGE="range",t))(Hh||{}),Gb=(r=>(r.AND="$and",r.OR="$or",r))(Gb||{});function Hc(e){return Object.values(Gb).includes(e)}o(Hc,"isLogicalSearchOperator");function DX(e){return Object.values(Jf).includes(e)}o(DX,"isBasicSearchOperator");function PX(e){return Object.values(wa).includes(e)}o(PX,"isArraySearchOperator");function jA(e){return Object.values(Hh).includes(e)}o(jA,"isRangeSearchOperator");function NX(e){return(0,xX.default)(e)&&"conditions"in e}o(NX,"isLogicalFilter");var LX=o(e=>typeof e=="object"&&e._id&&e._rev,"isDocument");var $b=(s=>(s.USER="user",s.HEADER="header",s.QUERY="query",s.SUBDOMAIN="subdomain",s.PATH="path",s))($b||{});var Qc=(i=>(i.READ="read",i.WRITE="write",i.EXECUTE="execute",i.ADMIN="admin",i))(Qc||{});var Vb=(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))(Vb||{});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||{}),PM=["role","datasource","datasource_plus","ta","au","wh","screen","query","metadata","view","workspace_app","workspace_favourite","inst","layout"],vu=(t=>(t.USER_METADATA="ta_users",t))(vu||{}),Kc=(r=>(r.VIEW="view",r.ROW_ACTION="row_action",r))(Kc||{});function Qh(e){return!!e.providerType}o(Qh,"isSSOUser");var Kh=["rows","queries","automations"],kX=["queries","automations"];var MX="SYSTEM",Xf="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||{}),lo=(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))(lo||{});var nt=($=>($.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",$))(nt||{}),UX=[...Object.values(nt),...Object.values(lo)];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||{}),FX={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 BX(e){return e.stepId==="BRANCH"}o(BX,"isBranchStep");function NM(e){return e.stepId==="CRON"}o(NM,"isCronTrigger");function zc(e){return e?.stepId==="EMAIL"}o(zc,"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 Hb=(r=>(r.BACKUP="backup",r.RESTORE="restore",r))(Hb||{});var Yc=(i=>(i.PUBLISH="publish",i.MANUAL="manual",i.SCHEDULED="scheduled",i.RESTORING="restoring",i))(Yc||{});var zh=(a=>(a.NONE="none",a.FORM_DATA="form",a.XML="xml",a.ENCODED="encoded",a.JSON="json",a.TEXT="text",a))(zh||{}),Qb=(a=>(a.GET="GET",a.POST="POST",a.PATCH="PATCH",a.PUT="PUT",a.HEAD="HEAD",a.DELETE="DELETE",a))(Qb||{});var Un="bb_internal";var Jc=(s=>(s.CREATED_BY="createdBy",s.CREATED_AT="createdAt",s.UPDATED_BY="updatedBy",s.UPDATED_AT="updatedAt",s.AUTO_ID="autoID",s))(Jc||{});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 qX="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"],BKe=["number","bigint"];function LM(e){return BKe.includes(e)}o(LM,"isNumeric");function jX(e){return e.type==="formula"&&e.formulaType==="static"&&e.responseType&&LM(e.responseType)}o(jX,"isNumericStaticFormula");var qKe=["string","longform","options","number","boolean","datetime","bigint","ai"];function jKe(e){return qKe.includes(e)}o(jKe,"canGroupBy");function kM(e){return e.type==="formula"&&e.formulaType==="static"}o(kM,"isStaticFormula");function WX(e){return jKe(e.type)||kM(e)}o(WX,"canGroupBySchema");var lt={};G(lt,{AutomationViewMode:()=>u1,BUDIBASE_DATASOURCE_TYPE:()=>Yre,Config:()=>rne,Cookie:()=>gm,DEFAULT_BB_DATASOURCE_ID:()=>Kb,DEFAULT_EMPLOYEE_TABLE_ID:()=>ene,DEFAULT_EXPENSES_TABLE_ID:()=>Zre,DEFAULT_INVENTORY_TABLE_ID:()=>Xre,DEFAULT_JOBS_TABLE_ID:()=>Jre,DEFAULT_TENANT_ID:()=>Lr,DeprecatedViews:()=>W_,DesignDocuments:()=>yd,DocumentType:()=>Me,GlobalRole:()=>tne,Header:()=>yi,InternalTable:()=>vu,MAX_VALID_DATE:()=>f1,MIN_VALID_DATE:()=>F7e,SEPARATOR:()=>ce,SQLITE_DESIGN_DOC_ID:()=>Fn,SQS_DATASOURCE_INTERNAL:()=>ul,StaticDatabases:()=>tr,UNICODE_MAX:()=>Mn,USER_METADATA_PREFIX:()=>VR,UserStatus:()=>l1,ViewName:()=>al,WORKSPACE_DEV:()=>c1,WORKSPACE_DEV_PREFIX:()=>Ms,WORKSPACE_PREFIX:()=>ks});var $X={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 vn=["_id","_rev","type","createdAt","updatedAt","tableId"],Os=["_id","_rev","tableId"];function Zf(e){return vn.includes(e)}o(Zf,"isInternalColumnName");function VX(e){return Os.includes(e)}o(VX,"isExternalColumnName");var Yh={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 fo={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"}},HX={integer:{max:2147483647,min:-2147483648},int:{max:2147483647,min:-2147483648},smallint:{max:32767,min:-32768},mediumint:{max:8388607,min:-8388608}};var MM=/^[^()]*$/;var Kb="datasource_internal_bb_default";var Tt={};G(Tt,{ColumnSplitter:()=>fF,NoEmptyFilterStrings:()=>Ire,buildQuery:()=>Cre,cleanupQuery:()=>mF,fixupFilterArrays:()=>yF,getKeyNumbering:()=>gF,getValidOperatorsForType:()=>SJe,hasFilters:()=>dF,limit:()=>Dre,recurseLogicalOperators:()=>hF,removeKeyNumbering:()=>eR,runQuery:()=>BR,search:()=>AJe,sort:()=>xre,splitFiltersArray:()=>tR});var hm=U(require("dayjs"));var Be={};G(Be,{filterValueToLabel:()=>KKe,hasSchema:()=>zKe,isSupportedUserSearch:()=>KX,nameToUrl:()=>e6e,parallelForeach:()=>QKe,processSearchFilters:()=>UM,toMap:()=>JKe,trimOtherProps:()=>YKe,unreachable:()=>HKe});var QX=U(require("lodash/pick"));var VKe=["field","operator","value","type","externalType","valueType","noValue","formulaType"];function HKe(e,t){let r=t?.message||`No such case in exhaustive switch: ${e}`;if(!!!t?.doNotThrow)throw new Error(r)}o(HKe,"unreachable");async function QKe(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(QKe,"parallelForeach");function KKe(){return Object.keys(fo).reduce((e,t)=>{let n=fo[t];return e[n.value]=n.label,e},{})}o(KKe,"filterValueToLabel");function zKe(e){return typeof e=="object"&&!Array.isArray(e)&&e!==null&&!(e instanceof Date)&&Object.keys(e).length>0}o(zKe,"hasSchema");function YKe(e,t){return Object.keys(e).filter(n=>t.includes(n)).reduce((n,i)=>({...n,[i]:e[i]}),{})}o(YKe,"trimOtherProps");function KX(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(Hc(s)){for(let l of e[s].conditions)if(!KX(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(KX,"isSupportedUserSearch");function UM(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,QX.default)(i,VKe);return s.field=eR(s.field),s})}]}}o(UM,"processSearchFilters");function JKe(e,t){return t.reduce((r,n)=>(r[n[e]]=n,r),{})}o(JKe,"toMap");var XKe=o(e=>e?e.trim():null,"resolveWorkspaceName"),ZKe=o(e=>{let t,r=XKe(e);t=r?r.toLowerCase():"";let n=t?t.replace(/\s+/g,"-"):"";return encodeURI(n)},"resolveWorkspaceUrl"),e6e=o(e=>{let t=ZKe(e);return t6e(t)},"nameToUrl"),t6e=o(e=>(e&&!e.startsWith("/")&&(e=`/${e}`),e===""?null:e),"tidyUrl");var de={};G(de,{accountPortalAccountUrl:()=>bre,accountPortalBillingUrl:()=>_re,accountPortalUpgradeUrl:()=>wre,builderAppsUrl:()=>Are,builderSettingsAuthUrl:()=>Tre,builderSettingsEmailUrl:()=>Sre,builderSettingsPeopleUsersUrl:()=>vre,builderWorkspacesUrl:()=>Ere,cancelableTimeout:()=>zX,cron:()=>bJe,deepGet:()=>FM,duplicateName:()=>dJe,formatBytes:()=>yJe,getSequentialName:()=>pJe,getUserColor:()=>n6e,getUserInitials:()=>r6e,getUserLabel:()=>i6e,isGoogleSheets:()=>s6e,isSQL:()=>a6e,lists:()=>cF,retry:()=>u6e,roles:()=>uF,schema:()=>U_,structuredOutput:()=>oF,urlHelpers:()=>gJe,views:()=>aF,wait:()=>BM,withTimeout:()=>o6e});var FM=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"),r6e=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"),n6e=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"),i6e=o(e=>{if(!e)return"";let{firstName:t,lastName:r,email:n}=e;return t&&r?`${t} ${r}`:t||r||n},"getUserLabel");function zX(e){let t;return[new Promise((r,n)=>{t=setTimeout(()=>{n({status:301,errno:"ETIME"})},e)}),()=>{clearTimeout(t)}]}o(zX,"cancelableTimeout");async function o6e(e,t){let[r,n]=zX(e),i=await Promise.race([t(),r]);return n(),i}o(o6e,"withTimeout");function s6e(e){return e==="GOOGLE_SHEETS"}o(s6e,"isGoogleSheets");function a6e(e){return!e||!e.source?!1:["POSTGRES","SQL_SERVER","MYSQL","ORACLE"].indexOf(e.source)!==-1||e.isSQL===!0}o(a6e,"isSQL");async function BM(e){return new Promise(t=>setTimeout(t,e))}o(BM,"wait");async function u6e(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 BM(s);try{return await e()}catch(a){n=a}}throw n}o(u6e,"retry");var pre=U(Ea()),hre=U(fre());var dre="(Input cron: ",YYe={"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 JYe(e){let t=[];for(let r of e){r.includes(dre)&&(r=r.split(dre)[0].trim());for(let[n,i]of Object.entries(YYe))r.includes(n)&&(r=r.replace(new RegExp(n,"g"),i));t.push(r)}return t}o(JYe,"improveErrors");function mre(e,t=4){let r=hre.default.parseExpression(e),n=[];for(let i=0;i<t;i++)n.push(r.next().toString());return n}o(mre,"getNextExecutionDates");function gre(e){let t=(0,pre.default)(e,{preset:"npm-cron-schedule",override:{useSeconds:!1}});return t.isValid()?{valid:!0}:{valid:!1,err:JYe(t.getError())}}o(gre,"validate");var U_={};G(U_,{decodeNonAscii:()=>iF,encodeNonAscii:()=>eJe,isDeprecatedSingleUserColumn:()=>XYe,isNumeric:()=>tJe,isRequired:()=>ZYe});function XYe(e){return e.type==="bb_reference"&&e.subtype==="user"&&e.constraints?.type!=="array"}o(XYe,"isDeprecatedSingleUserColumn");function ZYe(e){return!!e&&(typeof e.presence!="boolean"&&e.presence?.allowEmpty===!1||e.presence===!0)}o(ZYe,"isRequired");function eJe(e){return e.split("").map(t=>t.charCodeAt(0)>127?"\\u"+t.charCodeAt(0).toString(16).padStart(4,"0"):t).join("")}o(eJe,"encodeNonAscii");function iF(e){return e.replace(/\\u([0-9a-fA-F]{4})/g,(t,r)=>String.fromCharCode(parseInt(r,16)))}o(iF,"decodeNonAscii");function tJe(e){return e.type==="number"||e.type==="bigint"}o(tJe,"isNumeric");var oF={};G(oF,{normalizeSchemaForStructuredOutput:()=>rJe});function rJe(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(rJe,"normalizeSchemaForStructuredOutput");var aF={};G(aF,{basicFields:()=>aJe,calculationFields:()=>sJe,hasCalculationFields:()=>oJe,isBasicViewField:()=>nJe,isCalculationField:()=>F_,isCalculationView:()=>iJe,isV2:()=>uJe,isVisible:()=>yre});var sF=U(require("lodash/pickBy"));function F_(e){return"calculationType"in e}o(F_,"isCalculationField");function nJe(e){return!F_(e)}o(nJe,"isBasicViewField");function iJe(e){return e.type==="calculation"}o(iJe,"isCalculationView");function oJe(e){return Object.values(e.schema||{}).some(F_)}o(oJe,"hasCalculationFields");function sJe(e){return(0,sF.default)(e.schema||{},F_)}o(sJe,"calculationFields");function yre(e){return e.visible!==!1}o(yre,"isVisible");function aJe(e,t){let{visible:r=!0}=t||{};return(0,sF.default)(e.schema||{},n=>!F_(n)&&(!r||yre(n)))}o(aJe,"basicFields");function uJe(e){return e.version===2}o(uJe,"isV2");var uF={};G(uF,{checkForRoleInheritanceLoops:()=>lJe});function cJe(e){return`role${ce}${e}`}o(cJe,"prefixForCheck");function lJe(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=cJe(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(lJe,"checkForRoleInheritanceLoops");var cF={};G(cF,{punctuateList:()=>fJe});function fJe(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(fJe,"punctuateList");var dJe=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"),pJe=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 hJe=o(e=>e?e.startsWith("/")?e:`/${e}`:"","normalizePath"),mJe=o(e=>e?e.endsWith("/")?e.slice(0,-1):e:"","normalizeBase"),ol=o((e,t)=>{let r=hJe(t);if(!e)return r;let n=mJe(e);return r?`${n}${r}`:n},"joinBaseAndPath"),bre=o(e=>ol(e,ZA.ACCOUNT),"accountPortalAccountUrl"),_re=o(e=>ol(e,ZA.BILLING),"accountPortalBillingUrl"),wre=o(e=>ol(e,ZA.UPGRADE),"accountPortalUpgradeUrl"),Ere=o(e=>ol(e,Yh.WORKSPACES),"builderWorkspacesUrl"),Sre=o(e=>ol(e,Yh.SETTINGS_EMAIL),"builderSettingsEmailUrl"),Tre=o(e=>ol(e,Yh.SETTINGS_AUTH),"builderSettingsAuthUrl"),vre=o(e=>ol(e,Yh.SETTINGS_PEOPLE_USERS),"builderSettingsPeopleUsersUrl"),Are=o(e=>ol(e,Yh.APPS),"builderAppsUrl"),gJe={accountPortalAccountUrl:bre,accountPortalBillingUrl:_re,accountPortalUpgradeUrl:wre,builderWorkspacesUrl:Ere,builderSettingsEmailUrl:Sre,builderSettingsAuthUrl:Tre,builderSettingsPeopleUsersUrl:vre,builderAppsUrl:Are};function yJe(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(yJe,"formatBytes");var bJe={getNextExecutionDates:mre,validate:gre};var FR=U(require("lodash/isPlainObject")),lF=U(require("lodash/isEmpty"));var wJe=/{{([^{].*?)}}/g,Ore=Object.values(Gb),EJe=[...Object.values(Jf),...Object.values(wa),...Object.values(Hh)],SJe=o((e,t,r)=>{let n=fo,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"||U_.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"),Ire=[fo.StartsWith.value,fo.Like.value,fo.Equals.value,fo.NotEquals.value,fo.Contains.value,fo.NotContains.value,fo.ContainsAny.value,fo.In.value];function hF(e,t){for(let r of Ore)e[r]&&(e[r].conditions=e[r].conditions.map(n=>t(n)));return e}o(hF,"recurseLogicalOperators");var mF=o(e=>{for(let t of Ire)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===""||TJe(s))&&delete e[t][i]}return e=hF(e,mF),e},"cleanupQuery");function TJe(e){return Array.isArray(e)&&e.length===0}o(TJe,"isEmptyArray");var eR=o(e=>gF(e).key,"removeKeyNumbering"),gF=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"),fF=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}=gF(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=iF(n.slice(this.columnPrefix.length))),{tableName:i,numberPrefix:r,relationshipPrefix:s,column:n}}};function vJe(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(wJe)||[]).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=HX[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(DX(r)||PX(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(vJe,"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 Cre(e){if(!e)return{};if(Array.isArray(e)&&(e=UM(e),!e))return{};let t={};e.onEmptyFilter?t.onEmptyFilter=e.onEmptyFilter:t.onEmptyFilter="all";let r=Rre(e.logicalOperator||"all");return t[r]={conditions:(e.groups||[]).map(n=>{if(n.groups){let c=Cre(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=Rre(n.logicalOperator)),{[u]:{conditions:a.map(vJe).filter(c=>c)}}})},t}o(Cre,"buildQuery");function Rre(e){return e==="all"?"$and":"$or"}o(Rre,"logicalOperatorFromUI");function yF(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 hF(e,yF),e}o(yF,"fixupFilterArrays");function AJe(e,t){let r=BR(e,t.query);t.sort&&(r=xre(r,t.sort,t.sortOrder||"ascending",t.sortType));let n=r.length;t.limit&&(r=Dre(r,t.limit.toString()));let i={rows:r};return t.countRows&&(i.totalRows=n),i}o(AJe,"search");function BR(e,t){if(!e||!Array.isArray(e))return[];if(!t)return e;if(t=mF(t),t=yF(t),!dF(t)&&t.onEmptyFilter==="none")return[];let r=o((T,R)=>A=>{for(let[O,I]of Object.entries(t[T]||{})){let D=Hc(T)?A:FM(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,lF.default)(R.low)&&(R.low=void 0),(0,FR.default)(R.high)&&(0,lF.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,hm.default)(T);if(O.isValid()){let I=(0,hm.default)(R.low||"0000-00-00T00:00:00.000Z"),D=(0,hm.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,hm.default)(T);if(A.isValid()){let O=(0,hm.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 dF(t)?t.allOr?A.some(O=>O===!0):A.every(O=>O===!0):!0},"docMatch");return e.filter(S)}o(BR,"runQuery");function xre(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(xre,"sort");function Dre(e,t){let r=typeof t=="number"?t:parseFloat(t);return isNaN(r)?e:e.slice(0,r)}o(Dre,"limit");var dF=o(e=>{if(!e)return!1;let t=o(r=>{for(let n of Ore)if(r[n])for(let i of r[n]?.conditions||[]){let s=t(i);if(s)return s}for(let n of EJe){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 ln={};G(ln,{applications:()=>_F,automations:()=>EF,screens:()=>AF,users:()=>vF});var _F={};G(_F,{getDevAppID:()=>RJe,getProdAppID:()=>q_});var bF=ti("app"),B_=ti("app_dev");function RJe(e){if(!e)throw new Error("No app ID provided");if(e.startsWith(B_))return e;let t=e.split(bF);t.shift();let r=t.join(bF);return`${B_}${r}`}o(RJe,"getDevAppID");function q_(e){if(!e)throw new Error("No app ID provided");if(!e.startsWith(B_))return e;let t=e.split(B_);t.shift();let r=t.join(B_);return`${bF}${r}`}o(q_,"getProdAppID");var EF={};G(EF,{checkForCollectStep:()=>wF,isAppAction:()=>CJe,isRowAction:()=>OJe,isWebhookAction:()=>IJe});function OJe(e){return e.definition.trigger?.stepId==="ROW_ACTION"}o(OJe,"isRowAction");function IJe(e){return e.definition.trigger?.stepId==="WEBHOOK"}o(IJe,"isWebhookAction");function CJe(e){return e.definition.trigger?.stepId==="APP"}o(CJe,"isAppAction");function Pre(e){if(!e||!Array.isArray(e))return!1;for(let t of e){if(t.stepId==="COLLECT")return!0;if(BX(t)&&t.inputs.children){for(let r of Object.values(t.inputs.children))if(Pre(r))return!0}}return!1}o(Pre,"hasCollectBlockRecursive");function wF(e){return Pre(e.definition.steps)}o(wF,"checkForCollectStep");var vF={};G(vF,{canCreateApps:()=>xJe,containsUserID:()=>FJe,getGlobalUserID:()=>UJe,getUserAppGroups:()=>BJe,hasAdminPermissions:()=>TF,hasAppBuilderPermissions:()=>WR,hasBuilderPermissions:()=>kJe,hasCreatorPermissions:()=>GR,isAdmin:()=>j_,isAdminOrBuilder:()=>PJe,isAdminOrGlobalBuilder:()=>NJe,isAdminOrWorkspaceBuilder:()=>DJe,isBuilder:()=>SF,isCreator:()=>MJe,isGlobalBuilder:()=>jR,userAppAccessList:()=>qJe});function SF(e,t){return e?e.builder?.global?!0:!!(t&&e.builder?.apps?.includes(q_(t))):!1}o(SF,"isBuilder");function jR(e){return SF(e)&&!WR(e)||j_(e)}o(jR,"isGlobalBuilder");function xJe(e){return jR(e)||GR(e)}o(xJe,"canCreateApps");function j_(e){return e?TF(e):!1}o(j_,"isAdmin");function DJe(e,t){return e?!!(j_(e)||t&&e.builder?.apps?.includes(q_(t))):!1}o(DJe,"isAdminOrWorkspaceBuilder");function PJe(e,t){return SF(e,t)||j_(e)}o(PJe,"isAdminOrBuilder");function NJe(e){return jR(e)||j_(e)}o(NJe,"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 LJe(e){return e?!!Object.values(e.roles??{}).find(t=>t==="CREATOR"):!1}o(LJe,"hasAppCreatorPermissions");function kJe(e){return e?e.builder?.global||WR(e)||GR(e):!1}o(kJe,"hasBuilderPermissions");function TF(e){return e?!!e.admin?.global:!1}o(TF,"hasAdminPermissions");function GR(e){return e?!!e.builder?.creator:!1}o(GR,"hasCreatorPermissions");function MJe(e){return e?jR(e)||TF(e)||GR(e)||WR(e)||LJe(e):!1}o(MJe,"isCreator");function UJe(e){if(typeof e!="string")return e;let t=`ro${ce}ta_users${ce}`;return e.startsWith(t)?e.split(t)[1]:e}o(UJe,"getGlobalUserID");function FJe(e){return typeof e!="string"?!1:e.includes(`us${ce}`)}o(FJe,"containsUserID");function Nre(e,t){return t?.filter(r=>r.users?.find(n=>n._id===e))||[]}o(Nre,"getUserGroups");function BJe(e,t,r){let n=q_(e);return Nre(t,r).filter(s=>Object.keys(s.roles||{}).find(a=>a===n))}o(BJe,"getUserAppGroups");function qJe(e,t){let n=Nre(e._id,t).flatMap(s=>Object.keys(s.roles||{})),i=[...Object.keys(e?.roles||{}),...n];return[...new Set(i)]}o(qJe,"userAppAccessList");var AF={};G(AF,{findInSettings:()=>jJe});function jJe(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(jJe,"findInSettings");var Vdr={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},Hdr={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},Qdr={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 Lre(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 vn)t.find(a=>a===s)&&i.push(s);return i}o(Lre,"findDuplicateInternalColumns");var Ve={};G(Ve,{steps:()=>s1,triggers:()=>a1});var s1={};G(s1,{agent:()=>n1,apiRequest:()=>LF,bash:()=>RF,branch:()=>OF,classifyText:()=>JF,collect:()=>IF,createRow:()=>CF,delay:()=>xF,deleteRow:()=>DF,discord:()=>PF,executeQuery:()=>NF,executeScript:()=>kF,executeScriptV2:()=>MF,extract:()=>r1,extractState:()=>i1,filter:()=>UF,generate:()=>t1,getRow:()=>FF,loop:()=>BF,loopV2:()=>o1,make:()=>qF,n8n:()=>jF,openai:()=>WF,outgoingWebhook:()=>GF,promptLLM:()=>XF,queryRows:()=>$F,sendSmtpEmail:()=>VF,serverLog:()=>HF,slack:()=>QF,summarise:()=>e1,translate:()=>ZF,triggerAutomationRun:()=>KF,updateRow:()=>zF,zapier:()=>YF});var RF={};G(RF,{definition:()=>WJe});var WJe={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 OF={};G(OF,{definition:()=>GJe});var GJe={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 IF={};G(IF,{definition:()=>$Je});var $Je={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 CF={};G(CF,{definition:()=>VJe});var VJe={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 xF={};G(xF,{definition:()=>HJe});var HJe={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 DF={};G(DF,{definition:()=>QJe});var QJe={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 PF={};G(PF,{definition:()=>KJe});var KJe={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 NF={};G(NF,{definition:()=>zJe});var zJe={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 LF={};G(LF,{definition:()=>YJe});var YJe={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 kF={};G(kF,{definition:()=>JJe});var JJe={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 MF={};G(MF,{definition:()=>XJe});var XJe={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 UF={};G(UF,{PrettyFilterConditions:()=>kre,definition:()=>ZJe});var kre={EQUAL:"Equals",NOT_EQUAL:"Not equals",GREATER_THAN:"Greater than",LESS_THAN:"Less than"},ZJe={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(kre)},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 FF={};G(FF,{definition:()=>t7e});var e7e={ascending:"Ascending",descending:"Descending"},t7e={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(co),pretty:Object.values(e7e)}},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 BF={};G(BF,{definition:()=>r7e});var r7e={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 qF={};G(qF,{definition:()=>n7e});var n7e={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 jF={};G(jF,{definition:()=>i7e});var i7e={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(Qb)},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 WF={};G(WF,{definition:()=>o7e});var Mre=(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))(Mre||{}),o7e={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(Mre)}},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 GF={};G(GF,{definition:()=>s7e});var Ure=(s=>(s.POST="POST",s.GET="GET",s.PUT="PUT",s.DELETE="DELETE",s.PATCH="PATCH",s))(Ure||{}),s7e={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(Ure),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 $F={};G($F,{definition:()=>u7e});var a7e={ascending:"Ascending",descending:"Descending"},u7e={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(co),pretty:Object.values(a7e)},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 VF={};G(VF,{definition:()=>c7e});var c7e={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 HF={};G(HF,{definition:()=>l7e});var l7e={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 QF={};G(QF,{definition:()=>f7e});var f7e={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 KF={};G(KF,{definition:()=>d7e});var d7e={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 zF={};G(zF,{definition:()=>p7e});var p7e={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 YF={};G(YF,{definition:()=>h7e});var h7e={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 JF={};G(JF,{definition:()=>m7e});var m7e={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 XF={};G(XF,{definition:()=>g7e});var g7e={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 ZF={};G(ZF,{definition:()=>y7e});var y7e={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 e1={};G(e1,{definition:()=>b7e});var Fre=(n=>(n.SHORT="Short",n.MEDIUM="Medium",n.LONG="Long",n))(Fre||{}),b7e={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(Fre)}},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 t1={};G(t1,{definition:()=>_7e});var _7e={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(FX)},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 r1={};G(r1,{definition:()=>w7e});var w7e={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 n1={};G(n1,{definition:()=>E7e});var E7e={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 i1={};G(i1,{definition:()=>S7e});var S7e={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 o1={};G(o1,{definition:()=>T7e});var T7e={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 a1={};G(a1,{definitions:()=>P7e});var Bre={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 qre={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 jre={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 Wre={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 Gre={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 $re={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 Vre={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 Hre={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 P7e={ROW_SAVED:Gre,ROW_UPDATED:$re,ROW_DELETED:Wre,WEBHOOK:Vre,APP:Bre,CRON:qre,EMAIL:jre,ROW_ACTION:Hre};var N7e=Object.values(Me).sort((e,t)=>t.length-e.length);function Qre(e){return N7e.find(t=>e.startsWith(`${t}${ce}`))}o(Qre,"getDocumentType");var L7e=Object.values(Kc).sort((e,t)=>t.length-e.length);function Kre(e){return L7e.find(t=>e.startsWith(`${t}${ce}`))}o(Kre,"getVirtualDocumentType");var k7e=new RegExp("^datasource_plus_(.+)__(.+)$"),$R=o(e=>t=>!!t&&t.startsWith(`${e}${ce}`),"idCheckFor"),M7e=o(e=>{let t=e.match(k7e);return!!e&&t!==null},"isExternalTableId"),Ls=o(e=>U7e(e)||M7e(e),"isTableIdOrExternalTableId"),U7e=$R("ta"),dn=$R("view"),mm=$R("datasource"),zre=$R("query");function Zr(e){if(!dn(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 u1=(n=>(n.ALL="all",n.AUTOMATION="automation",n.STATUS="status",n))(u1||{}),al=(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))(al||{}),W_={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"}},ks=ti("app"),c1=ti("app_dev"),Ms=c1,ul="internal",Yre="budibase",Fn="_design/sqlite",Jre="ta_bb_jobs",Xre="ta_bb_inventory",Zre="ta_bb_expenses",ene="ta_bb_employee",VR=`ro${ce}ta_users${ce}`,yd=(r=>(r[r.SQLITE=Fn]="SQLITE",r.MIGRATIONS="_design/migrations",r))(yd||{});var l1=(r=>(r.ACTIVE="active",r.INACTIVE="inactive",r))(l1||{}),gm=(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))(gm||{}),tne=(i=>(i.OWNER="owner",i.ADMIN="admin",i.BUILDER="builder",i.WORKSPACE_MANAGER="workspace_manager",i))(tne||{}),rne=(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))(rne||{}),F7e=new Date(-2147483647e3),f1=new Date(2147483647e3),Lr="default";var Fe={};G(Fe,{CacheKey:()=>_n,TTL:()=>Dp,bustCache:()=>ey,destroy:()=>bS,docWritethrough:()=>JH,generic:()=>_S,get:()=>Pp,invite:()=>ZH,keys:()=>V0,passwordReset:()=>e4,store:()=>cc,user:()=>hf,withCache:()=>rf,withCacheWithDynamicTTL:()=>JRe,workspace:()=>zw,writethrough:()=>F3});var JH={};G(JH,{DocWritethrough:()=>YH,DocWritethroughProcessor:()=>yS,getProcessor:()=>MMt,init:()=>YRe});var Vn={};G(Vn,{BudibaseQueue:()=>$s,InMemoryQueue:()=>AI,JobQueue:()=>ag,QueuedProcessor:()=>zH,UnretriableError:()=>G0,shutdown:()=>fct});var d1=require("crypto"),QR=require("fs"),q7e=require("lodash"),G_=require("path");var j7e=process.env.TOP_LEVEL_PATH||process.env.SERVER_TOP_LEVEL_PATH||(0,G_.resolve)((0,G_.join)(__dirname,"..","..","..")),nne=!1;!nne&&HR()&&!p1()&&(require("dotenv").config({path:(0,G_.join)(j7e,".env")}),nne=!0);function p1(){return one()}o(p1,"isTest");function one(){return process.env.NODE_ENV==="jest"||process.env.JEST_WORKER_ID!=null&&process.env.JEST_WORKER_ID!=="null"}o(one,"isJest");function HR(){return process.env.NODE_ENV!=="production"}o(HR,"isDev");function W7e(e){if(e)return parseInt(e)}o(W7e,"parseIntSafe");var ym={BACKUPS:"backups",APPS:"prod-budi-app-assets",TEMPLATES:"templates",GLOBAL:"global",PLUGINS:"plugins",TEMP:"tmp-file-attachments"},ine=!!parseInt(process.env.SELF_HOSTED||"");function G7e(){return process.env.API_ENCRYPTION_KEY?process.env.API_ENCRYPTION_KEY:process.env.JWT_SECRET}o(G7e,"getAPIEncryptionKey");function $7e(){return process.env.HTTP_LOGGING===void 0?!0:process.env.HTTP_LOGGING}o($7e,"httpLogging");function V7e(){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()&&!p1())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(V7e,"getPackageJsonFields");function H7e(){return cl.SERVICE_TYPE==="worker"}o(H7e,"isWorker");function Q7e(){return cl.SERVICE_TYPE==="apps"}o(Q7e,"isApps");function K7e(){return cl.BUDIBASE_ENVIRONMENT==="QA"}o(K7e,"isQA");function z7e(){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(z7e,"getServiceName");var cl={isTest:p1,isJest:one,isDev:HR,isWorker:H7e,isApps:Q7e,isQA:K7e,isProd:()=>!HR(),BUDIBASE_ENVIRONMENT:process.env.BUDIBASE_ENVIRONMENT,JWT_SECRET:process.env.JWT_SECRET?(0,d1.createSecretKey)(process.env.JWT_SECRET,"utf8"):void 0,JWT_SECRET_FALLBACK:process.env.JWT_SECRET_FALLBACK?(0,d1.createSecretKey)(process.env.JWT_SECRET_FALLBACK,"utf8"):void 0,ENCRYPTION_KEY:process.env.ENCRYPTION_KEY,API_ENCRYPTION_KEY:G7e(),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:ine,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||ym.BACKUPS,APPS_BUCKET_NAME:process.env.APPS_BUCKET_NAME||ym.APPS,TEMPLATES_BUCKET_NAME:process.env.TEMPLATES_BUCKET_NAME||ym.TEMPLATES,GLOBAL_BUCKET_NAME:process.env.GLOBAL_BUCKET_NAME||ym.GLOBAL,PLUGIN_BUCKET_NAME:process.env.PLUGIN_BUCKET_NAME||ym.PLUGINS,TEMP_BUCKET_NAME:process.env.TEMP_BUCKET_NAME||ym.TEMP,USE_COUCH:process.env.USE_COUCH||!0,MOCK_REDIS:process.env.MOCK_REDIS,DEFAULT_LICENSE:process.env.DEFAULT_LICENSE,SERVICE:z7e(),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:$7e(),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:ine?process.env.ENABLE_SSO_MAINTENANCE_MODE:!1,...V7e(),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,cl[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:W7e(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 sne=["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(cl))t==="0"&&(cl[e]=0),t==="false"&&(cl[e]=0);var L=cl;var YR={};G(YR,{Databases:()=>h1,SEPARATOR:()=>bm,SelectableDatabase:()=>KR,getRedisClusterOptions:()=>m1,getRedisConnectionDetails:()=>zR,getRedisOptions:()=>bd,removeDbPrefix:()=>g1});var bm="-",h1=(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))(h1||{}),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 m1(){return{slotsRefreshTimeout:2e3,dnsLookup:(e,t)=>t(null,e),redisOptions:{...bd(),tls:{}}}}o(m1,"getRedisClusterOptions");function bd(){let{host:e,password:t,port:r,username:n}=zR();return{connectTimeout:3e4,port:r,host:e,password:t,...n&&{username:n}}}o(bd,"getRedisOptions");function g1(e){let t=e.split(bm);return t.length>=2?(t.shift(),t.join(bm)):t[0]}o(g1,"removeDbPrefix");var Mle=U(require("events"));var it={};G(it,{Duration:()=>nr,DurationType:()=>kle,GZIP_PREFIX:()=>vI,clearCookie:()=>Nl,compare:()=>_1,getCookie:()=>Vu,getDispatcher:()=>Xut,getWorkspaceIdFromCtx:()=>Gd,gunzipFromBase64:()=>rct,gzipToBase64:()=>tct,hasCircularStructure:()=>$ut,hash:()=>b1,isAudited:()=>$q,isClient:()=>Gut,isPublicApiRequest:()=>jut,isServingApp:()=>Fut,isServingBuilder:()=>But,isServingBuilderPreview:()=>qut,isValidInternalAPIKey:()=>nE,newid:()=>Nt,openJwt:()=>EI,setCookie:()=>Lle,time:()=>Hut,timeout:()=>Gq,urlHasProtocol:()=>Vut,validEmail:()=>Vq});var ane=require("uuid");function Nt(){return(0,ane.v4)().replace(/-/g,"")}o(Nt,"newid");var y1=require("bcrypt"),Y7e=L.SALT_ROUNDS||10;async function b1(e){let t=await y1.genSalt(Y7e);return y1.hash(e,t)}o(b1,"hash");async function _1(e,t){return y1.compare(e,t)}o(_1,"compare");var wI=U(require("jsonwebtoken"));var C={};G(C,{DEFAULT_TENANT_ID:()=>Lr,baseGlobalDBName:()=>Hw,doInAutomationContext:()=>Hat,doInContext:()=>bq,doInEnvironmentContext:()=>nut,doInFeatureFlagOverrideContext:()=>Aq,doInIPContext:()=>Eq,doInIdentityContext:()=>H_,doInLicenseContext:()=>Kat,doInScimContext:()=>iut,doInSelfHostTenantUsingCloud:()=>Qat,doInTenant:()=>Wi,doInWorkspaceContext:()=>Jat,doInWorkspaceMigrationContext:()=>Zat,ensureSnippetContext:()=>qce,getAuditLogDBName:()=>Fce,getAuditLogsDB:()=>sut,getAutomationId:()=>_q,getCurrentContext:()=>Bd,getDevWorkspaceDB:()=>uut,getDevWorkspaceId:()=>tut,getEnvironmentVariables:()=>out,getFeatureFlagOverrides:()=>vq,getFeatureFlags:()=>Sq,getGlobalDB:()=>gt,getGlobalDBName:()=>Fd,getIP:()=>wq,getIdentity:()=>Pu,getLicense:()=>zat,getOrThrowWorkspaceId:()=>eut,getPlatformURL:()=>yq,getProdWorkspaceDB:()=>aut,getProdWorkspaceId:()=>rut,getScimDBName:()=>Wat,getSelfHostCloudDB:()=>Yat,getTableForView:()=>cut,getTenantIDFromWorkspaceID:()=>tg,getTenantId:()=>Ue,getWorkspaceDB:()=>rg,getWorkspaceId:()=>Si,identity:()=>V_,isMultiTenant:()=>Dl,isScim:()=>Gs,isSelfHostUsingCloud:()=>nI,isTenancyEnabled:()=>$at,isTenantIdSet:()=>Gat,setFeatureFlags:()=>Tq,setTableForView:()=>lut});var V_={};G(V_,{doInAccountContext:()=>J7e,doInIdentityContext:()=>E1,doInUserContext:()=>S1,getAccountUserId:()=>une,getIdentity:()=>w1});function w1(){return Pu()}o(w1,"getIdentity");function E1(e,t){return H_(e,t)}o(E1,"doInIdentityContext");function S1(e,t,r){let n={...e,_id:e._id,type:"user",hostInfo:{ipAddress:t.request.ip,userAgent:t.userAgent.source}};return E1(n,r)}o(S1,"doInUserContext");function J7e(e,t){let r=une(e),n=e.tenantId,i={_id:r,type:"user",tenantId:n,account:e};return E1(i,t)}o(J7e,"doInAccountContext");function une(e){let t;return WA(e)?t=e.budibaseUserId:t=e.accountId,t}o(une,"getAccountUserId");var Us=o(e=>{let t=T1(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:T1(s).url,auth:{username:r,password:n},cookie:`Basic ${i}`}},"getCouchInfo"),T1=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 kce=U(require("@budibase/nano"));var cne=U(require("node-fetch"));function JR(e){return e.replace(/(https?:\/\/)|(\/)+/g,"$1$2")}o(JR,"checkSlashesInUrl");async function lne(e,t="GET",r){let{url:n,cookie:i}=Us(),s=`${n}/${e}`;return await Q_({url:s,cookie:i,method:t,body:r})}o(lne,"directCouchCall");async function Q_({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,cne.default)(JR(encodeURI(e)),i)}o(Q_,"directCouchUrlCall");async function v1(e,t="GET",r){let n=await lne(e,t,r);if(n.status<300)return await n.json();throw"Cannot connect to CouchDB instance"}o(v1,"directCouchQuery");var Ud=U(require("pouchdb"));var xce,Dce=!1,sq=o((e={})=>{let{url:t,cookie:r}=Us(),n={prefix:t,fetch:(i,s)=>(s.headers.set("Authorization",r),Ud.default.fetch(i,s))};if(e.inMemory){let i=Tae();Ud.default.plugin(i),n={adapter:"memory"}}if(e.onDisk&&(n={adapter:"leveldb"}),e.replication){let i=Cce();Ud.default.plugin(i.plugin),Ud.default.adapter("writableStream",i.adapters.writableStream)}if(e.find){let i=require("pouchdb-find");Ud.default.plugin(i)}return Ud.default.defaults(n)},"getPouch");function XO(e){xce=sq(e),Dce=!0}o(XO,"init");var vat=o(()=>{if(!Dce)throw new Error("init has not been called")},"checkInitialised");function ts(e,t){vat();let r=new xce(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(ts,"getPouchDB");async function Gw(e){if(!(!e||L.isTest()))try{return await e.close()}catch{}}o(Gw,"closePouchDB");var Mr=U(require("dd-trace"));var Xm=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 hq={};G(hq,{breakExternalTableId:()=>cq,breakRowIdField:()=>Uat,buildExternalTableId:()=>Dat,convertRowId:()=>Mat,encodeTableId:()=>Pat,encodeViewId:()=>Nat,extractDate:()=>fq,generateRowIdField:()=>Lat,getNativeSql:()=>Zm,isExternalTable:()=>uq,isExternalTableID:()=>ZO,isInternalTableID:()=>xat,isRowId:()=>kat,isValidFilter:()=>tI,isValidISODateString:()=>eI,isValidISODateStringWithoutTimezone:()=>lq,isValidTime:()=>dq,sqlLog:()=>$w,validateManyToMany:()=>pq});var aq=`${ce}${ce}`,Pce=/^\[.*]$/g,Aat=encodeURIComponent(" "),Rat=/^\d{4}-\d{2}-\d{2}(?:[T ]\d{2}:\d{2}:\d{2}(?:.\d{3})?Z)?$/,Oat=/^\d{4}-\d{2}-\d{2}(?:[T ]\d{2}:\d{2}:\d{2}(?:.\d{3})?)?$/,Iat=/(\d{4}-\d{2}-\d{2})/,Cat=/^(?:\d{2}:)?(?:\d{2}:)(?:\d{2})$/;function ZO(e){return e.startsWith("datasource"+ce)}o(ZO,"isExternalTableID");function xat(e){return!ZO(e)}o(xat,"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 uq(e){return e?.sourceId&&e.sourceId.includes("datasource"+ce)&&e?.sourceId!==Kb||e?.sourceType==="external"?!0:!!(e?._id&&ZO(e._id))}o(uq,"isExternalTable");function Dat(e,t){return`${e}${aq}${encodeURIComponent(t)}`}o(Dat,"buildExternalTableId");function Pat(e){return ZO(e)?encodeURIComponent(e):e}o(Pat,"encodeTableId");function Nat(e){return encodeURIComponent(e)}o(Nat,"encodeViewId");function cq(e){let t=e.split(aq),r=t.shift(),n=t.join(aq);if(n.includes(Aat)&&(n=decodeURIComponent(n)),!r||!n)throw new Error("Unable to get datasource/table name from table ID");return{datasourceId:r,tableName:n}}o(cq,"breakExternalTableId");function Lat(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(Lat,"generateRowIdField");function kat(e){return Array.isArray(e)||typeof e=="string"&&e.match(Pce)!=null}o(kat,"isRowId");function Mat(e){return Array.isArray(e)?e[0]:typeof e=="string"&&e.match(Pce)!=null?e.substring(1,e.length-1):e}o(Mat,"convertRowId");function Uat(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(Uat,"breakRowIdField");function eI(e){let t=e.trim();if(!Rat.test(t))return!1;let r=new Date(t);return!isNaN(r.getTime())}o(eI,"isValidISODateString");function lq(e){let t=e.trim();if(!Oat.test(t))return!1;let r=new Date(t);return!isNaN(r.getTime())}o(lq,"isValidISODateStringWithoutTimezone");function fq(e){let t=e.match(Iat);if(t)return t[0]}o(fq,"extractDate");function tI(e){return e!=null&&e!==""}o(tI,"isValidFilter");function dq(e){return Cat.test(e)}o(dq,"isValidTime");function $w(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($w,"sqlLog");function Fat(e){return!!e.through&&!!e.fromPrimary&&!!e.from&&!!e.toPrimary&&!!e.to}o(Fat,"isValidManyToManyRelationship");function pq(e){if(Fat(e))return e}o(pq,"validateManyToMany");var Nce="Database does not exist.";function Lce(e){return(0,kce.default)({url:e.url,requestDefaults:{headers:{Authorization:e.cookie}},parseUrl:!1})}o(Lce,"buildNano");var Cl=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 Bat(e,t,r){if(!e||!t)throw new Error("Unable to create database without database name or connection");let n=new eg(e,r,t);return new Xm(n)}o(Bat,"DatabaseWithConnection");var eg=class e{constructor(t,r,n){this.couchInfo=Us();this.name=t,this.pouchOpts=r||{},n&&(this.couchInfo=Us(n),this.instanceNano=Lce(this.couchInfo)),e.nano||e.init()}static{o(this,"DatabaseImpl")}static init(){let t=Us();e.nano=Lce(t)}exists(t){return t===void 0?this.dbExists():this.docExists(t)}async dbExists(){return(await Q_({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 Cl(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===Nce)return await this.checkAndCreateDb(),await this.performCallWithDBCreation(t);throw new Cl(`CouchDB error: ${i.message}`,i)}}async performCall(t){let r=this.getDb(),n=await t(r);try{return await n()}catch(i){throw new Cl(`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(LX(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 Cl(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===Nce)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 Q_(i),a=await s.text();if(s.status>300){let u;try{u=JSON.parse(a)}catch{throw console.error(`SQS error: ${a}`),new Cl("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 $w("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 Cl(t.message,t)}}async compact(){return this.performCall(t=>()=>t.compact())}async dump(t,r){return ts(this.name).dump(t,r)}async load(t){return ts(this.name).load(t)}async createIndex(t){return ts(this.name).createIndex(t)}async deleteIndex(t){return ts(this.name).deleteIndex(t)}async getIndexes(){return ts(this.name).getIndexes()}};function Ei(e,t){return new Xm(new eg(e,t))}o(Ei,"getDB");async function Io(e,t,r){let n=Ei(e,r);return await t(n)}o(Io,"doWithDB");async function mq(e){let t="/_all_dbs";return e&&(t+=`?${e}`),await v1(t)}o(mq,"directCouchAllDbs");var gq="No app provided";function xl(e){if(!e)throw gq;return e.startsWith(Ms)}o(xl,"isDevWorkspaceID");function qat(e){if(!e)throw gq;return e.startsWith(ks)&&!xl(e)}o(qat,"isProdWorkspaceID");function Vw(e){if(!e)throw gq;return xl(e.appId)}o(Vw,"isDevWorkspace");function rI(e){if(!e||e.startsWith(Ms))return e;let t=e.split(ks);t.shift();let r=t.join(ks);return`${Ms}${r}`}o(rI,"getDevWorkspaceID");function Co(e){if(!e||!e.startsWith(Ms))return e;let t=e.split(Ms);t.shift();let r=t.join(Ms);return`${ks}${r}`}o(Co,"getProdWorkspaceID");var Mce=require("async_hooks");var tn=class e{static{o(this,"Context")}static{this.storage=new Mce.AsyncLocalStorage}static run(t,r){return e.storage.run(t,()=>r())}static get(){return e.storage.getStore()}};var Uce=null;function Fd(e){return e||(e=Ue()),Hw(e)}o(Fd,"getGlobalDBName");function Fce(e){return e||(e=Ue()),e===Lr?tr.AUDIT_LOGS.name:`${e}${ce}${tr.AUDIT_LOGS.name}`}o(Fce,"getAuditLogDBName");function Wat(e){return e||(e=Ue()),e===Lr?tr.SCIM_LOGS.name:`${e}${ce}${tr.SCIM_LOGS.name}`}o(Wat,"getScimDBName");function Hw(e){return!e||e===Lr?tr.GLOBAL.name:`${e}${ce}${tr.GLOBAL.name}`}o(Hw,"baseGlobalDBName");function yq(){return L.PLATFORM_URL}o(yq,"getPlatformURL");function Dl(){return!!L.MULTI_TENANCY}o(Dl,"isMultiTenant");function Gat(){return!!tn.get()?.tenantId}o(Gat,"isTenantIdSet");function $at(){return L.MULTI_TENANCY}o($at,"isTenancyEnabled");function tg(e){if(!e)return;if(!Dl())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(tg,"getTenantIDFromWorkspaceID");function Vat(e){let t;try{t=tn.get()}catch{t={}}return t={...t,...e},t}o(Vat,"updateContext");async function Ws(e,t){Xat();let r=Vat(e);return tn.run(r,t)}o(Ws,"newContext");async function Hat(e){return await qce(),await Ws({tenantId:tg(e.workspaceId),appId:e.workspaceId,automationId:e.automationId},e.task)}o(Hat,"doInAutomationContext");async function bq(e,t){let r=tg(e);return Ws({tenantId:r,appId:e},t)}o(bq,"doInContext");async function Wi(e,t){return L.MULTI_TENANCY||(e=e||Lr),Ws(e?{tenantId:e}:{},t)}o(Wi,"doInTenant");async function Qat(e,t){return Ws({tenantId:e,isSelfHostUsingCloud:!0},t)}o(Qat,"doInSelfHostTenantUsingCloud");async function Kat(e,t){return Ws({license:e},t)}o(Kat,"doInLicenseContext");function zat(){return tn.get()?.license}o(zat,"getLicense");function nI(){return!!tn.get()?.isSelfHostUsingCloud}o(nI,"isSelfHostUsingCloud");function Yat(){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(Yat,"getSelfHostCloudDB");async function Jat(e,t){return Bce(e,t)}o(Jat,"doInWorkspaceContext");async function Bce(e,t,r){if(!e)throw new Error("workspaceId is required");let n=tg(e),i={appId:e,...r};return n&&(i.tenantId=n),Ws(i,t)}o(Bce,"_doInWorkspaceContext");async function H_(e,t){if(!e)throw new Error("identity is required");let r={identity:e};return e.tenantId&&(r.tenantId=e.tenantId),Ws(r,t)}o(H_,"doInIdentityContext");function Xat(){if(tn.get()?.isMigrating)throw new Error("The context cannot be changed, a migration is currently running")}o(Xat,"guardMigration");async function Zat(e,t){return Bce(e,t,{isMigrating:!0})}o(Zat,"doInWorkspaceMigrationContext");function Pu(){try{return tn.get()?.identity}catch{}}o(Pu,"getIdentity");function Ue(){if(!Dl())return Lr;let t=tn.get()?.tenantId;if(!t)throw new Error("Tenant id not found");return t}o(Ue,"getTenantId");function _q(){return tn.get()?.automationId}o(_q,"getAutomationId");function Si(){let t=tn.get()?.appId;return!t&&L.isTest()&&Uce?Uce:t}o(Si,"getWorkspaceId");function eut(){let e=Si();if(!e)throw new Error("Workspace id not set");return e}o(eut,"getOrThrowWorkspaceId");function wq(){return tn.get()?.ip}o(wq,"getIP");var tut=o(()=>{let e=Si();if(!e)throw new Error("Could not get workspaceId");return rI(e)},"getDevWorkspaceId"),rut=o(()=>{let e=Si();if(!e)throw new Error("Could not get workspaceId");return Co(e)},"getProdWorkspaceId");function nut(e,t){if(!e)throw new Error("Must supply environment variables.");return Ws({environmentVariables:e},t)}o(nut,"doInEnvironmentContext");function iut(e){return Ws({isScim:!0},e)}o(iut,"doInScimContext");function Eq(e,t){return Ws({ip:e},t)}o(Eq,"doInIPContext");async function qce(){let e=Bd();if(!e||e.snippets)return;let t,r=rg();r&&(t=(await r.tryGet("app_metadata"))?.snippets),e.snippets=t||[]}o(qce,"ensureSnippetContext");function out(){let e=tn.get();return e.environmentVariables?e.environmentVariables:null}o(out,"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(Hw(e?.tenantId))}o(gt,"getGlobalDB");function sut(){if(!Ue())throw new Error("No tenant ID found - cannot open audit log DB");return Ei(Fce())}o(sut,"getAuditLogsDB");function rg(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(rg,"getWorkspaceDB");function aut(e){let t=Si();if(!t)throw new Error("Unable to retrieve prod DB - no workspace ID.");return Ei(Co(t),e)}o(aut,"getProdWorkspaceDB");function uut(e){let t=Si();if(!t)throw new Error("Unable to retrieve dev DB - no workspace ID.");return Ei(rI(t),e)}o(uut,"getDevWorkspaceDB");function Gs(){return!!tn.get()?.isScim}o(Gs,"isScim");function Bd(){try{return tn.get()}catch{return}}o(Bd,"getCurrentContext");function Sq(e){let t=Bd();if(t)return t.featureFlagCache?.[e]}o(Sq,"getFeatureFlags");function Tq(e,t){let r=Bd();r&&(r.featureFlagCache??={},r.featureFlagCache[e]=t)}o(Tq,"setFeatureFlags");function vq(){return Bd()?.featureFlagOverrides||{}}o(vq,"getFeatureFlagOverrides");async function Aq(e,t){return await Ws({featureFlagOverrides:e},t)}o(Aq,"doInFeatureFlagOverrideContext");function cut(e){let t=Bd();if(t)return t.viewToTableCache?.[e]}o(cut,"getTableForView");function lut(e,t){let r=Bd();r&&(r.viewToTableCache??={},r.viewToTableCache[e]=t)}o(lut,"setTableForView");var F={};G(F,{AutomationViewMode:()=>u1,BUDIBASE_DATASOURCE_TYPE:()=>Yre,DEFAULT_BB_DATASOURCE_ID:()=>Kb,DEFAULT_EMPLOYEE_TABLE_ID:()=>ene,DEFAULT_EXPENSES_TABLE_ID:()=>Zre,DEFAULT_INVENTORY_TABLE_ID:()=>Xre,DEFAULT_JOBS_TABLE_ID:()=>Jre,DatabaseImpl:()=>eg,DatabaseWithConnection:()=>Bat,DeprecatedViews:()=>W_,DesignDocuments:()=>yd,DocumentType:()=>Me,InternalTable:()=>vu,QueryBuilder:()=>$u,Replication:()=>Ole,SEPARATOR:()=>ce,SQLITE_DESIGN_DOC_ID:()=>Fn,SQS_DATASOURCE_INTERNAL:()=>ul,StaticDatabases:()=>tr,UNICODE_MAX:()=>Mn,USER_METADATA_PREFIX:()=>VR,ViewName:()=>al,WORKSPACE_DEV:()=>c1,WORKSPACE_DEV_PREFIX:()=>Ms,WORKSPACE_PREFIX:()=>ks,baseGlobalDBName:()=>Hw,checkErrorCode:()=>Dle,closePouchDB:()=>Gw,createApiKeyView:()=>Ele,createNewUserEmailView:()=>_le,createPlatformAccountEmailView:()=>Tle,createPlatformUserView:()=>vle,createUserAppView:()=>wle,createView:()=>sg,dbExists:()=>Rut,directCouchAllDbs:()=>mq,directCouchCall:()=>lne,directCouchQuery:()=>v1,directCouchUrlCall:()=>Q_,doWithDB:()=>Io,fullSearch:()=>Dut,generateAIConfigID:()=>sle,generateAgentFileID:()=>ole,generateAgentID:()=>tle,generateAgentToolSourceID:()=>ile,generateAppUserID:()=>yI,generateChatAppID:()=>rle,generateChatConversationID:()=>nle,generateDevInfoID:()=>Xce,generateGlobalUserID:()=>og,generateOAuth2LogID:()=>ele,generatePluginID:()=>Zce,generateRoleID:()=>Pq,generateRowID:()=>Dq,generateTableID:()=>Qce,generateTemplateID:()=>Jce,generateUserMetadataID:()=>zce,generateVectorDbID:()=>lle,generateWorkspaceAppID:()=>ule,generateWorkspaceFavouriteID:()=>cle,generateWorkspaceID:()=>Hce,getAllDbs:()=>ble,getAllWorkspaces:()=>Jw,getCouchInfo:()=>Us,getDB:()=>Ei,getDevWorkspaceID:()=>rI,getDevWorkspaceIDs:()=>vut,getDocParams:()=>Wu,getGlobalDBName:()=>Fd,getGlobalIDFromUserMetadataID:()=>Yce,getGlobalUserParams:()=>jd,getLiteLLMKeyID:()=>ale,getOAuth2ConfigParams:()=>mle,getPluginParams:()=>hle,getPouch:()=>sq,getPouchDB:()=>ts,getProdWorkpaceIDs:()=>Tut,getProdWorkspaceID:()=>Co,getQueryIndex:()=>fle,getRoleParams:()=>_I,getRowParams:()=>Nq,getStartEndKeyURL:()=>Yw,getTemplateParams:()=>ple,getUrlInfo:()=>T1,getUserMetadataParams:()=>dle,getUsersByWorkspaceParams:()=>bI,getWorkspaceAppParams:()=>gle,getWorkspaceFavouriteParams:()=>yle,getWorkspacesByIDs:()=>Sut,init:()=>XO,isDevWorkspace:()=>Vw,isDevWorkspaceID:()=>xl,isDocumentConflictError:()=>Nut,isGlobalUserID:()=>Kce,isProdWorkspaceID:()=>qat,isSameWorkspaceID:()=>Aut,paginatedSearch:()=>xut,pagination:()=>Lq,prefixRoleID:()=>ju,queryGlobalView:()=>Gu,queryGlobalViewRaw:()=>Uq,queryPlatformView:()=>Zw,queryView:()=>Mq,queryViewRaw:()=>Xw,removeKeyNumbering:()=>eE,searchIndexes:()=>qq});var zw={};G(zw,{WorkspaceState:()=>xq,getWorkspaceMetadata:()=>gI,invalidateWorkspaceMetadata:()=>wut});var Pl={};G(Pl,{getCacheClient:()=>Oq,getDocWritethroughClient:()=>gut,getInviteClient:()=>qd,getLockClient:()=>Cq,getOpenapiImportSpecsClient:()=>hut,getPasswordResetClient:()=>Kw,getSessionClient:()=>ig,getSocketClient:()=>mut,getUserClient:()=>Qw,getWorkspaceClient:()=>mI,getWritethroughClient:()=>Iq,init:()=>rs,shutdown:()=>$ce});var oI=U(require("ioredis"));var iI=require("dd-trace"),Wce=require("lodash");var jce;if(L.MOCK_REDIS)try{jce=require("ioredis-mock")}catch{console.log("Mock redis unavailable")}async function fut(e=0){return await iI.tracer.trace("Redis.init",async t=>{if(L.MOCK_REDIS)return t.addTags({mock:!0}),new jce(bd());let r;if(L.REDIS_CLUSTERED){t.addTags({clustered:!0});let{host:n,port:i}=zR();r=new oI.Cluster([{host:n,port:i}],m1())}else r=new oI.default(bd());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(fut,"init");function dut(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:g1(a),value:u}});r(await Promise.all(s))}catch(s){n(s)}})})}o(dut,"promisifyStream");function put(e){return e.isCluster}o(put,"isCluster");var Rq=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 fut(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}${bm}${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}${bm}${t}`;let n;put(this.client)?n=this.client.nodes("master")[0].scanStream({match:t+"*",count:100}):n=this.client.scanStream({match:t+"*",count:100});let i=await dut(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,Wce.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.`;u2e.exports=M5t});var x8=v((l2e,f2e)=>{"use strict";var Pn=Jn(),ph=MT(),tt=f2e.exports,U5t=c2e();tt.append=function(e,t){return typeof e=="string"&&typeof t=="string"?e+t:e};tt.camelcase=function(e){return typeof e!="string"?"":ph.changecase(e,function(t){return t.toUpperCase()})};tt.capitalize=function(e){return typeof e!="string"?"":e.charAt(0).toUpperCase()+e.slice(1)};tt.capitalizeAll=function(e){if(typeof e!="string")return"";if(Pn.isString(e))return e.replace(/\w\S*/g,function(t){return tt.capitalize(t)})};tt.center=function(e,t){if(typeof e!="string")return"";for(var r="",n=0;n<t;)r+=" ",n++;return r+e+r};tt.chop=function(e){return typeof e!="string"?"":ph.chop(e)};tt.dashcase=function(e){return typeof e!="string"?"":ph.changecase(e,function(t){return"-"+t})};tt.dotcase=function(e){return typeof e!="string"?"":ph.changecase(e,function(t){return"."+t})};tt.downcase=function(){return tt.lowercase.apply(this,arguments)};tt.ellipsis=function(e,t){if(Pn.isString(e))return e.length<=t?e:tt.truncate(e,t)+"\u2026"};tt.hyphenate=function(e){return typeof e!="string"?"":e.split(" ").join("-")};tt.isString=function(e){return typeof e=="string"};tt.lowercase=function(e){return Pn.isObject(e)&&e.fn?e.fn(this).toLowerCase():typeof e!="string"?"":e.toLowerCase()};tt.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};tt.pascalcase=function(e){return typeof e!="string"?"":(e=ph.changecase(e,function(t){return t.toUpperCase()}),e.charAt(0).toUpperCase()+e.slice(1))};tt.pathcase=function(e){return typeof e!="string"?"":ph.changecase(e,function(t){return"/"+t})};tt.plusify=function(e,t){return typeof e!="string"?"":(Pn.isString(t)||(t=" "),e.split(t).join("+"))};tt.prepend=function(e,t){return typeof e=="string"&&typeof t=="string"?t+e:e};tt.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};tt.remove=function(e,t){return typeof e!="string"?"":Pn.isString(t)?e.split(t).join(""):e};tt.removeFirst=function(e,t){return typeof e!="string"?"":Pn.isString(t)?e.replace(t,""):e};tt.replace=function(e,t,r){return typeof e!="string"?"":Pn.isString(t)?(Pn.isString(r)||(r=""),e.split(t).join(r)):e};tt.replaceFirst=function(e,t,r){return typeof e!="string"?"":Pn.isString(t)?(Pn.isString(r)||(r=""),e.replace(t,r)):e};tt.reverse=Wy().reverse;tt.sentence=function(e){return typeof e!="string"?"":e.replace(/((?:\S[^\.\?\!]*)[\.\?\!]*)/g,function(t){return t.charAt(0).toUpperCase()+t.substr(1).toLowerCase()})};tt.snakecase=function(e){return typeof e!="string"?"":ph.changecase(e,function(t){return"_"+t})};tt.split=function(e,t){return typeof e!="string"?"":(Pn.isString(t)||(t=","),e.split(t))};tt.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):""};tt.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(l2e.capitalize(a))}return i.join(" ")};tt.trim=function(e){return typeof e=="string"?e.trim():""};tt.trimLeft=function(e){if(Pn.isString(e))return e.replace(/^\s+/,"")};tt.trimRight=function(e){if(Pn.isString(e))return e.replace(/\s+$/,"")};tt.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};tt.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}};tt.upcase=function(){return tt.uppercase.apply(this,arguments)};tt.uppercase=function(e){return Pn.isObject(e)&&e.fn?e.fn(this).toUpperCase():typeof e!="string"?"":e.toUpperCase()};tt.lorem=function(e){return(isNaN(e)||e<1||!e)&&(e=11),U5t.substring(0,e)}});var P8=v((a8r,d2e)=>{"use strict";var D8=require("url"),GT=Jn(),F5t=require("querystring"),hh=d2e.exports;hh.encodeURI=function(e){if(GT.isString(e))return encodeURIComponent(e)};hh.escape=function(e){if(GT.isString(e))return F5t.escape(e)};hh.decodeURI=function(e){if(GT.isString(e))return decodeURIComponent(e)};hh.urlResolve=function(e,t){return D8.resolve(e,t)};hh.urlParse=function(e){return D8.parse(e)};hh.stripQuerystring=function(e){if(GT.isString(e))return e.split("?")[0]};hh.stripProtocol=function(e){if(GT.isString(e)){var t=D8.parse(e);return t.protocol="",t.format()}}});var N8=v((u8r,p2e)=>{"use strict";var B5t=require("uuid"),q5t=p2e.exports;q5t.uuid=function(){return B5t.v4()}});var m2e=v((c8r,h2e)=>{"use strict";h2e.exports={array:Wy(),code:HFe(),collection:a1e(),comparison:a8(),html:R1e(),i18n:I1e(),inflection:D1e(),match:GBe(),math:O8(),misc:HBe(),number:I8(),object:FN(),path:o2e(),regex:C8(),string:x8(),url:P8(),uuid:N8()}});var g2e=v((l8r,Hy)=>{"use strict";var $T=m2e();Hy.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||PT();if(Hy.exports.handlebars=n,t)t.forEach(function(i){n.registerHelper($T[i])});else for(let i in $T){let s=$T[i];n.registerHelper(s)}return n.helpers},"helpers");for(let e in $T){let t=$T[e];Hy.exports[e]=function(r){r=r||{};var n=r.handlebars||r.hbs||PT();return Hy.exports.handlebars=n,n.registerHelper(t),t}}Hy.exports.utils=MT()});var KGe=v(ar=>{"use strict";Object.defineProperty(ar,"__esModule",{value:!0});ar.InvalidRemoveOpPath=ar.NoTarget=ar.InvalidScimPatchRequest=ar.NoPathInScimPatchOp=ar.FilterArrayTargetNotFound=ar.FilterOnEmptyArray=ar.InvalidScimPatchOp=ar.RemoveValueNotArray=ar.RemoveValueNestedArrayNotSupported=ar.InvalidScimRemoveValue=ar.InvalidScimPatch=ar.ScimError=void 0;var Wv=class extends Error{static{o(this,"ScimError")}constructor(t){super(),this.scimCode=t}};ar.ScimError=Wv;var Bf=class extends Wv{static{o(this,"InvalidScimPatch")}constructor(t,r="invalidSyntax"){super(r),this.message=`Invalid SCIM Patch: ${t}`}};ar.InvalidScimPatch=Bf;var Gv=class extends Wv{static{o(this,"InvalidScimRemoveValue")}constructor(t,r="invalidSyntax"){super(r),this.message=`Invalid SCIM Remove Operation: ${t}`}};ar.InvalidScimRemoveValue=Gv;var lY=class extends Gv{static{o(this,"RemoveValueNestedArrayNotSupported")}constructor(){super("Invalid patch value, remove does not support arrays inside arrays.")}};ar.RemoveValueNestedArrayNotSupported=lY;var fY=class extends Gv{static{o(this,"RemoveValueNotArray")}constructor(){super("Remove with patch value is supported only for array properties.")}};ar.RemoveValueNotArray=fY;var $v=class extends Bf{static{o(this,"InvalidScimPatchOp")}constructor(t){super(`${t}`,"invalidSyntax")}};ar.InvalidScimPatchOp=$v;var dY=class extends $v{static{o(this,"FilterOnEmptyArray")}constructor(t,r,n){super(`${t}`),this.attrName=r,this.valuePath=n}};ar.FilterOnEmptyArray=dY;var pY=class extends $v{static{o(this,"FilterArrayTargetNotFound")}constructor(t,r,n,i){super(`${t}`),this.attrName=r,this.valuePath=n,this.schema=i}};ar.FilterArrayTargetNotFound=pY;var hY=class extends Bf{static{o(this,"NoPathInScimPatchOp")}constructor(){super('Missing path in "remove" patch operation',"noTarget")}};ar.NoPathInScimPatchOp=hY;var mY=class extends Bf{static{o(this,"InvalidScimPatchRequest")}constructor(t){super(`The SCIM patch request is invalid: ${t}`)}};ar.InvalidScimPatchRequest=mY;var gY=class extends Bf{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")}};ar.NoTarget=gY;var yY=class extends Bf{static{o(this,"InvalidRemoveOpPath")}constructor(){super("Path specified in 'remove' operation doesn't exist")}};ar.InvalidRemoveOpPath=yY});var XGe=v(fu=>{"use strict";Object.defineProperty(fu,"__esModule",{value:!0});fu.parseExpression=fu.parseFilter=fu.Tokens=fu.tokenizer=void 0;var YGe={type:"EOT",literal:""};function AXt(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(YGe),t}o(AXt,"tokenizer");fu.tokenizer=AXt;var bY=class{static{o(this,"Tokens")}getList(){return this.list.map((t,r)=>r==this.i?`[${t.literal}]`:t.literal)}peek(){return this.current||YGe}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}};fu.Tokens=bY;var RXt=new Set(["eq","ne","co","sw","ew","gt","lt","ge","le"]),OXt=new Set(["pr"]);function _Y(e){return XL(ZL(e),e,Dh.LOWEST)}o(_Y,"parseFilter");fu.parseFilter=_Y;function ZL(e){let t=e.shift();if(t.literal=="("){let r=_Y(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:ZL(e)};return XL(r,e,Dh.NOT)}else{if(t.type=="Word")return JGe(t,e);throw new Error(`Unexpected token ${t.literal} (${t.type})`)}}o(ZL,"parseExpression");fu.parseExpression=ZL;var Dh;(function(e){e[e.LOWEST=1]="LOWEST",e[e.OR=2]="OR",e[e.AND=3]="AND",e[e.NOT=4]="NOT"})(Dh||(Dh={}));var zGe={or:Dh.OR,and:Dh.AND,not:Dh.NOT};function XL(e,t,r){let n=t.peek().literal.toLowerCase(),i=zGe[n];if(!i||r>=i)return e;let s=[e];for(;t.peek().literal.toLowerCase()===n;){let a=ZL(t.forward()),u=t.peek().literal.toLowerCase();zGe[u]>i&&(a=XL(a,t,i)),s.push(a)}return XL({op:n,filters:s},t,r)}o(XL,"parseInxif");function JGe(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(RXt.has(i)){let s=IXt(t);return{op:i,attrPath:r,compValue:s}}else{if(OXt.has(i))return{op:i,attrPath:r};if(i==="["){let s=_Y(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,JGe(c,t)]}}else throw new Error(`Unexpected token ${r} ${n.literal} as valFilter operator`)}}o(JGe,"readValFilter");function IXt(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(IXt,"parseCompValue")});var ZGe=v(tk=>{"use strict";Object.defineProperty(tk,"__esModule",{value:!0});tk.Tester=void 0;var ek=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)}};tk.Tester=ek;ek.UNDEF=Symbol("undefined")});var e$e=v(du=>{"use strict";Object.defineProperty(du,"__esModule",{value:!0});du.log=du.valfilter=void 0;var CXt=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,du.valfilter)(r,t))});case"not":return Object.assign(Object.assign({},e),{filter:(0,du.valfilter)(e,t)});case"[]":return(0,du.valfilter)(e.valFilter,e.attrPath)}return e},"valfilter");du.valfilter=CXt;var xXt=o(e=>{switch(e.op){case"and":case"or":let t=e.filters.map(du.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");du.log=xXt});var t$e=v(rk=>{"use strict";Object.defineProperty(rk,"__esModule",{value:!0});rk.stringify=void 0;function Vv(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=>Vv(i)).join(` ${e.op} `);r=t?`(${n})`:n;break;case"and":r=e.filters.map(i=>Vv(i,!0)).join(` ${e.op} `);break;case"not":r=`${e.op} (${Vv(e.filter)})`;break;case"[]":r=`${e.attrPath}[${Vv(e.valFilter)}]`;break}return r}o(Vv,"stringify");rk.stringify=Vv});var nk=v(Go=>{"use strict";Object.defineProperty(Go,"__esModule",{value:!0});Go.flatten=Go.parse=Go.filter=Go.Tester=Go.stringify=void 0;var wY=XGe(),DXt=ZGe(),r$e=e$e(),PXt=t$e();Object.defineProperty(Go,"stringify",{enumerable:!0,get:function(){return PXt.stringify}});Go.Tester=DXt.Tester;function NXt(e){let t=new Go.Tester;return r=>t.test(r,e)}o(NXt,"filter");Go.filter=NXt;function LXt(e){let t=new wY.Tokens(wY.tokenizer(e)),r=wY.parseFilter(t);if(t.peek().type!=="EOT")throw new Error(`unexpected EOT ${t.getList()}`);return r}o(LXt,"parse");Go.parse=LXt;function kXt(e){return r$e.log(r$e.valfilter(e))}o(kXt,"flatten");Go.flatten=kXt});var i$e=v((Psn,n$e)=>{"use strict";n$e.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 xY=v(Er=>{"use strict";Object.defineProperty(Er,"__esModule",{value:!0});Er.PATCH_OPERATION_SCHEMA=Er.InvalidScimRemoveValue=Er.RemoveValueNotArray=Er.RemoveValueNestedArrayNotSupported=Er.NoTarget=Er.InvalidScimPatchRequest=Er.NoPathInScimPatchOp=Er.InvalidScimPatchOp=Er.InvalidScimPatch=Er.ScimError=void 0;Er.patchBodyValidation=qXt;Er.scimPatch=jXt;var Pt=KGe();Object.defineProperty(Er,"ScimError",{enumerable:!0,get:function(){return Pt.ScimError}});Object.defineProperty(Er,"InvalidScimPatch",{enumerable:!0,get:function(){return Pt.InvalidScimPatch}});Object.defineProperty(Er,"InvalidScimPatchOp",{enumerable:!0,get:function(){return Pt.InvalidScimPatchOp}});Object.defineProperty(Er,"NoPathInScimPatchOp",{enumerable:!0,get:function(){return Pt.NoPathInScimPatchOp}});Object.defineProperty(Er,"InvalidScimPatchRequest",{enumerable:!0,get:function(){return Pt.InvalidScimPatchRequest}});Object.defineProperty(Er,"NoTarget",{enumerable:!0,get:function(){return Pt.NoTarget}});Object.defineProperty(Er,"RemoveValueNestedArrayNotSupported",{enumerable:!0,get:function(){return Pt.RemoveValueNestedArrayNotSupported}});Object.defineProperty(Er,"RemoveValueNotArray",{enumerable:!0,get:function(){return Pt.RemoveValueNotArray}});Object.defineProperty(Er,"InvalidScimRemoveValue",{enumerable:!0,get:function(){return Pt.InvalidScimRemoveValue}});var EY=nk(),SY=i$e(),AY=/(\[|\])/,MXt=/^(.+)\[(.+)\]$/,o$e=/(?!\B"[^[]*)\.(?![^\]]*"\B)/g,UXt=["remove","add","replace"],FXt="urn:ietf:params:scim:schemas:core:2.0:User",BXt="urn:ietf:params:scim:schemas:core:2.0:Group";Er.PATCH_OPERATION_SCHEMA="urn:ietf:params:scim:api:messages:2.0:PatchOp";function qXt(e){if(!e.schemas||!e.schemas.includes(Er.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(RY)}o(qXt,"patchBodyValidation");function jXt(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 WXt(n,i);case"add":case"Add":case"replace":case"Replace":return a$e(n,i,!!r.treatMissingAsAdd);default:throw new Pt.InvalidScimPatchRequest(`Operator is invalid for SCIM patch request. ${i}`)}},e)}o(jXt,"scimPatch");function RY(e){if(typeof e.op!="string"||!HXt(e.op))throw new Pt.InvalidScimPatchRequest(`Invalid op "${e.op}" in the request.`);if(e.op==="remove"&&!e.path)throw new Pt.NoPathInScimPatchOp;if(Qv(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(RY,"validatePatchOperation");function OY(e){let t=e.lastIndexOf(":");if(t<0)return e.split(o$e);let r=e.substring(0,t),n=e.substring(t+1).split(o$e);switch(r){case BXt:case FXt:break;default:n.unshift(r);break}return n}o(OY,"resolvePaths");function WXt(e,t){let r;RY(t);let n=OY(t.path);try{r=u$e(e,n,{isRemoveOp:!0})}catch(s){if(s instanceof Pt.InvalidRemoveOpPath)return e;throw s}let i=n[n.length-1];if(!AY.test(i)){for(let s of r)t.value?s[i]=VXt(s[i],t.value):delete s[i];return e}for(let s of r){let{attrName:a,valuePath:u,array:c}=IY(i,s);s[a]=CY(c,u,{excludeIfMatchFilter:!0}),s[a].length===0&&delete s[a]}return e}o(WXt,"applyRemoveOperation");function a$e(e,t,r){var n;let i;if(RY(t),!t.path)return Hv(e,t);let s=OY(t.path),a=s[s.length-1];try{i=u$e(e,s)}catch(u){if(u instanceof Pt.FilterOnEmptyArray||u instanceof Pt.FilterArrayTargetNotFound){let c=u.schema,l=(0,EY.parse)(u.valuePath);if(Qv(t.op)&&"compValue"in l&&l.compValue!==void 0&&l.op==="eq"){let f={};return f[l.attrPath]=l.compValue,f[a]=Hv(void 0,t,!0),c[u.attrName]=[...(n=c[u.attrName])!==null&&n!==void 0?n:[],f],e}else if(r&&TY(t.op)&&"compValue"in l&&l.compValue!==void 0&&l.op==="eq")return a$e(e,Object.assign(Object.assign({},t),{op:"add"}),!1);throw new Pt.NoTarget(t.path)}throw u}if(!AY.test(a)){for(let u of i)u[a]=Hv(u[a],t);return e}for(let u of i){let{valuePath:c,array:l}=IY(a,u),f=CY(l,c);if(TY(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]=Hv(l[d],t))}return e}o(a$e,"applyAddOrReplaceOperation");function IY(e,t){let r=e.match(MXt);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 vY(n,i,s)}o(IY,"extractArray");function u$e(e,t,r={}){let n=[e];for(let i=0;i<t.length-1;i++){let s=t[i];AY.test(s)?n=n.flatMap(a=>{try{let{attrName:u,valuePath:c,array:l}=IY(s,a),f=CY(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(u$e,"navigate");function Hv(e,t,r){if(Array.isArray(e)){if(Array.isArray(t.value)){if(Qv(t.op)){let i=t.value.filter(s=>!s$e(e,s));return e.concat(i)}return t.value}if(TY(t.op))return e.map(i=>Hv(i,t,r));let n=e;return s$e(n,t.value)||n.push(t.value),n}return e!==null&&typeof e=="object"?GXt(e,t,r):t.value}o(Hv,"addOrReplaceAttribute");function GXt(e,t,r){if(typeof t.value!="object"){if(Qv(t.op)&&!r)throw new Pt.InvalidScimPatchOp("Invalid patch query.");return t.value}for(let[n,i]of Object.entries(t.value))$Xt(e,OY(n),i,t.op);return e}o(GXt,"addOrReplaceObjectAttribute");function $Xt(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(Qv(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($Xt,"assign");function CY(e,t,r={}){try{let n=(0,EY.filter)((0,EY.parse)(t));return e.filter(i=>r.excludeIfMatchFilter?!n(i):n(i))}catch(n){throw new Pt.InvalidScimPatchOp(`${n}`)}}o(CY,"filterWithQuery");function VXt(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=>!SY(r,n))}),e):e.filter(r=>!SY(t,r))}o(VXt,"removeWithPatchValue");function s$e(e,t){return e.some(r=>SY(t,r))}o(s$e,"deepIncludes");function HXt(e){return UXt.includes(e.toLowerCase())}o(HXt,"isValidOperation");function Qv(e){return e!==void 0&&e.toLowerCase()==="add"}o(Qv,"isAddOperation");function TY(e){return e!==void 0&&e.toLowerCase()==="replace"}o(TY,"isReplaceOperation");var vY=class{static{o(this,"ScimSearchQuery")}constructor(t,r,n){this.attrName=t,this.valuePath=r,this.array=n}}});var lor={};var K3e,z3e=er(()=>{"use strict";K3e=U(require("dd-trace"));process.env.DD_APM_ENABLED&&(console.log("Starting dd-trace"),K3e.default.init({debug:process.env.DD_ENV==="qa",llmobs:{mlApp:process.env.DD_LLMOBS_ML_APP||"budibase"}}))});var Sur={};G(Sur,{execute:()=>Eur});module.exports=qA(Sur);var Qn={};G(Qn,{analyticsEnabled:()=>z0,generateConfigID:()=>nT,getAIConfig:()=>aWt,getConfig:()=>Ii,getDefaultGoogleConfig:()=>B3,getGoogleConfig:()=>UD,getGoogleDatasourceConfig:()=>j3,getOIDCConfig:()=>iWt,getOIDCConfigById:()=>W3,getOIDCLogosDoc:()=>rWt,getPlatformUrl:()=>iT,getRecaptchaConfig:()=>uWt,getSCIMConfig:()=>sWt,getSMTPConfig:()=>oWt,getSMTPConfigDoc:()=>b0e,getSettingsConfig:()=>q3,getSettingsConfigDoc:()=>dy,getTranslationsConfig:()=>eWt,getTranslationsConfigDoc:()=>y0e,save:()=>Zjt});var co=(r=>(r.ASCENDING="ascending",r.DESCENDING="descending",r))(co||{});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||{}),vX=["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"],AX=["automation:deleted","workspace_app:deleted","datasource:deleted","table:deleted","query:deleted","view:deleted"],RX=[...vX,...AX],Vh={"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 OX=o((e,t,r)=>e==="usage"&&t==="static","isStaticQuota"),IX=o((e,t,r)=>e==="usage"&&t==="monthly","isMonthlyQuota"),CX=o((e,t)=>e==="constant","isConstantQuota");var Fi="--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||{}),un=(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))(un||{});var Tn=(r=>(r.CONNECTION_CHECKING="connection",r.FETCH_TABLE_NAMES="fetch_table_names",r))(Tn||{});var xX=U(require("lodash/isPlainObject"));var Jf=(a=>(a.EQUAL="equal",a.NOT_EQUAL="notEqual",a.EMPTY="empty",a.NOT_EMPTY="notEmpty",a.FUZZY="fuzzy",a.STRING="string",a))(Jf||{}),wa=(i=>(i.CONTAINS="contains",i.NOT_CONTAINS="notContains",i.CONTAINS_ANY="containsAny",i.ONE_OF="oneOf",i))(wa||{}),Hh=(t=>(t.RANGE="range",t))(Hh||{}),Gb=(r=>(r.AND="$and",r.OR="$or",r))(Gb||{});function Hc(e){return Object.values(Gb).includes(e)}o(Hc,"isLogicalSearchOperator");function DX(e){return Object.values(Jf).includes(e)}o(DX,"isBasicSearchOperator");function PX(e){return Object.values(wa).includes(e)}o(PX,"isArraySearchOperator");function jA(e){return Object.values(Hh).includes(e)}o(jA,"isRangeSearchOperator");function NX(e){return(0,xX.default)(e)&&"conditions"in e}o(NX,"isLogicalFilter");var LX=o(e=>typeof e=="object"&&e._id&&e._rev,"isDocument");var $b=(s=>(s.USER="user",s.HEADER="header",s.QUERY="query",s.SUBDOMAIN="subdomain",s.PATH="path",s))($b||{});var Qc=(i=>(i.READ="read",i.WRITE="write",i.EXECUTE="execute",i.ADMIN="admin",i))(Qc||{});var Vb=(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))(Vb||{});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||{}),PM=["role","datasource","datasource_plus","ta","au","wh","screen","query","metadata","view","workspace_app","workspace_favourite","inst","layout"],vu=(t=>(t.USER_METADATA="ta_users",t))(vu||{}),Kc=(r=>(r.VIEW="view",r.ROW_ACTION="row_action",r))(Kc||{});function Qh(e){return!!e.providerType}o(Qh,"isSSOUser");var Kh=["rows","queries","automations"],kX=["queries","automations"];var MX="SYSTEM",Xf="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||{}),lo=(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))(lo||{});var nt=($=>($.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",$))(nt||{}),UX=[...Object.values(nt),...Object.values(lo)];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||{}),FX={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 BX(e){return e.stepId==="BRANCH"}o(BX,"isBranchStep");function NM(e){return e.stepId==="CRON"}o(NM,"isCronTrigger");function zc(e){return e?.stepId==="EMAIL"}o(zc,"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 Hb=(r=>(r.BACKUP="backup",r.RESTORE="restore",r))(Hb||{});var Yc=(i=>(i.PUBLISH="publish",i.MANUAL="manual",i.SCHEDULED="scheduled",i.RESTORING="restoring",i))(Yc||{});var zh=(a=>(a.NONE="none",a.FORM_DATA="form",a.XML="xml",a.ENCODED="encoded",a.JSON="json",a.TEXT="text",a))(zh||{}),Qb=(a=>(a.GET="GET",a.POST="POST",a.PATCH="PATCH",a.PUT="PUT",a.HEAD="HEAD",a.DELETE="DELETE",a))(Qb||{});var Un="bb_internal";var Jc=(s=>(s.CREATED_BY="createdBy",s.CREATED_AT="createdAt",s.UPDATED_BY="updatedBy",s.UPDATED_AT="updatedAt",s.AUTO_ID="autoID",s))(Jc||{});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 qX="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"],BKe=["number","bigint"];function LM(e){return BKe.includes(e)}o(LM,"isNumeric");function jX(e){return e.type==="formula"&&e.formulaType==="static"&&e.responseType&&LM(e.responseType)}o(jX,"isNumericStaticFormula");var qKe=["string","longform","options","number","boolean","datetime","bigint","ai"];function jKe(e){return qKe.includes(e)}o(jKe,"canGroupBy");function kM(e){return e.type==="formula"&&e.formulaType==="static"}o(kM,"isStaticFormula");function WX(e){return jKe(e.type)||kM(e)}o(WX,"canGroupBySchema");var lt={};G(lt,{AutomationViewMode:()=>u1,BUDIBASE_DATASOURCE_TYPE:()=>Yre,Config:()=>rne,Cookie:()=>gm,DEFAULT_BB_DATASOURCE_ID:()=>Kb,DEFAULT_EMPLOYEE_TABLE_ID:()=>ene,DEFAULT_EXPENSES_TABLE_ID:()=>Zre,DEFAULT_INVENTORY_TABLE_ID:()=>Xre,DEFAULT_JOBS_TABLE_ID:()=>Jre,DEFAULT_TENANT_ID:()=>Lr,DeprecatedViews:()=>W_,DesignDocuments:()=>yd,DocumentType:()=>Me,GlobalRole:()=>tne,Header:()=>yi,InternalTable:()=>vu,MAX_VALID_DATE:()=>f1,MIN_VALID_DATE:()=>F7e,SEPARATOR:()=>ce,SQLITE_DESIGN_DOC_ID:()=>Fn,SQS_DATASOURCE_INTERNAL:()=>ul,StaticDatabases:()=>tr,UNICODE_MAX:()=>Mn,USER_METADATA_PREFIX:()=>VR,UserStatus:()=>l1,ViewName:()=>al,WORKSPACE_DEV:()=>c1,WORKSPACE_DEV_PREFIX:()=>Ms,WORKSPACE_PREFIX:()=>ks});var $X={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 vn=["_id","_rev","type","createdAt","updatedAt","tableId"],Os=["_id","_rev","tableId"];function Zf(e){return vn.includes(e)}o(Zf,"isInternalColumnName");function VX(e){return Os.includes(e)}o(VX,"isExternalColumnName");var Yh={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 fo={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"}},HX={integer:{max:2147483647,min:-2147483648},int:{max:2147483647,min:-2147483648},smallint:{max:32767,min:-32768},mediumint:{max:8388607,min:-8388608}};var MM=/^[^()]*$/;var Kb="datasource_internal_bb_default";var Tt={};G(Tt,{ColumnSplitter:()=>fF,NoEmptyFilterStrings:()=>Ire,buildQuery:()=>Cre,cleanupQuery:()=>mF,fixupFilterArrays:()=>yF,getKeyNumbering:()=>gF,getValidOperatorsForType:()=>SJe,hasFilters:()=>dF,limit:()=>Dre,recurseLogicalOperators:()=>hF,removeKeyNumbering:()=>eR,runQuery:()=>BR,search:()=>AJe,sort:()=>xre,splitFiltersArray:()=>tR});var hm=U(require("dayjs"));var Be={};G(Be,{filterValueToLabel:()=>KKe,hasSchema:()=>zKe,isSupportedUserSearch:()=>KX,nameToUrl:()=>e6e,parallelForeach:()=>QKe,processSearchFilters:()=>UM,toMap:()=>JKe,trimOtherProps:()=>YKe,unreachable:()=>HKe});var QX=U(require("lodash/pick"));var VKe=["field","operator","value","type","externalType","valueType","noValue","formulaType"];function HKe(e,t){let r=t?.message||`No such case in exhaustive switch: ${e}`;if(!!!t?.doNotThrow)throw new Error(r)}o(HKe,"unreachable");async function QKe(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(QKe,"parallelForeach");function KKe(){return Object.keys(fo).reduce((e,t)=>{let n=fo[t];return e[n.value]=n.label,e},{})}o(KKe,"filterValueToLabel");function zKe(e){return typeof e=="object"&&!Array.isArray(e)&&e!==null&&!(e instanceof Date)&&Object.keys(e).length>0}o(zKe,"hasSchema");function YKe(e,t){return Object.keys(e).filter(n=>t.includes(n)).reduce((n,i)=>({...n,[i]:e[i]}),{})}o(YKe,"trimOtherProps");function KX(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(Hc(s)){for(let l of e[s].conditions)if(!KX(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(KX,"isSupportedUserSearch");function UM(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,QX.default)(i,VKe);return s.field=eR(s.field),s})}]}}o(UM,"processSearchFilters");function JKe(e,t){return t.reduce((r,n)=>(r[n[e]]=n,r),{})}o(JKe,"toMap");var XKe=o(e=>e?e.trim():null,"resolveWorkspaceName"),ZKe=o(e=>{let t,r=XKe(e);t=r?r.toLowerCase():"";let n=t?t.replace(/\s+/g,"-"):"";return encodeURI(n)},"resolveWorkspaceUrl"),e6e=o(e=>{let t=ZKe(e);return t6e(t)},"nameToUrl"),t6e=o(e=>(e&&!e.startsWith("/")&&(e=`/${e}`),e===""?null:e),"tidyUrl");var de={};G(de,{accountPortalAccountUrl:()=>bre,accountPortalBillingUrl:()=>_re,accountPortalUpgradeUrl:()=>wre,builderAppsUrl:()=>Are,builderSettingsAuthUrl:()=>Tre,builderSettingsEmailUrl:()=>Sre,builderSettingsPeopleUsersUrl:()=>vre,builderWorkspacesUrl:()=>Ere,cancelableTimeout:()=>zX,cron:()=>bJe,deepGet:()=>FM,duplicateName:()=>dJe,formatBytes:()=>yJe,getSequentialName:()=>pJe,getUserColor:()=>n6e,getUserInitials:()=>r6e,getUserLabel:()=>i6e,isGoogleSheets:()=>s6e,isSQL:()=>a6e,lists:()=>cF,retry:()=>u6e,roles:()=>uF,schema:()=>U_,structuredOutput:()=>oF,urlHelpers:()=>gJe,views:()=>aF,wait:()=>BM,withTimeout:()=>o6e});var FM=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"),r6e=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"),n6e=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"),i6e=o(e=>{if(!e)return"";let{firstName:t,lastName:r,email:n}=e;return t&&r?`${t} ${r}`:t||r||n},"getUserLabel");function zX(e){let t;return[new Promise((r,n)=>{t=setTimeout(()=>{n({status:301,errno:"ETIME"})},e)}),()=>{clearTimeout(t)}]}o(zX,"cancelableTimeout");async function o6e(e,t){let[r,n]=zX(e),i=await Promise.race([t(),r]);return n(),i}o(o6e,"withTimeout");function s6e(e){return e==="GOOGLE_SHEETS"}o(s6e,"isGoogleSheets");function a6e(e){return!e||!e.source?!1:["POSTGRES","SQL_SERVER","MYSQL","ORACLE"].indexOf(e.source)!==-1||e.isSQL===!0}o(a6e,"isSQL");async function BM(e){return new Promise(t=>setTimeout(t,e))}o(BM,"wait");async function u6e(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 BM(s);try{return await e()}catch(a){n=a}}throw n}o(u6e,"retry");var pre=U(Ea()),hre=U(fre());var dre="(Input cron: ",YYe={"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 JYe(e){let t=[];for(let r of e){r.includes(dre)&&(r=r.split(dre)[0].trim());for(let[n,i]of Object.entries(YYe))r.includes(n)&&(r=r.replace(new RegExp(n,"g"),i));t.push(r)}return t}o(JYe,"improveErrors");function mre(e,t=4){let r=hre.default.parseExpression(e),n=[];for(let i=0;i<t;i++)n.push(r.next().toString());return n}o(mre,"getNextExecutionDates");function gre(e){let t=(0,pre.default)(e,{preset:"npm-cron-schedule",override:{useSeconds:!1}});return t.isValid()?{valid:!0}:{valid:!1,err:JYe(t.getError())}}o(gre,"validate");var U_={};G(U_,{decodeNonAscii:()=>iF,encodeNonAscii:()=>eJe,isDeprecatedSingleUserColumn:()=>XYe,isNumeric:()=>tJe,isRequired:()=>ZYe});function XYe(e){return e.type==="bb_reference"&&e.subtype==="user"&&e.constraints?.type!=="array"}o(XYe,"isDeprecatedSingleUserColumn");function ZYe(e){return!!e&&(typeof e.presence!="boolean"&&e.presence?.allowEmpty===!1||e.presence===!0)}o(ZYe,"isRequired");function eJe(e){return e.split("").map(t=>t.charCodeAt(0)>127?"\\u"+t.charCodeAt(0).toString(16).padStart(4,"0"):t).join("")}o(eJe,"encodeNonAscii");function iF(e){return e.replace(/\\u([0-9a-fA-F]{4})/g,(t,r)=>String.fromCharCode(parseInt(r,16)))}o(iF,"decodeNonAscii");function tJe(e){return e.type==="number"||e.type==="bigint"}o(tJe,"isNumeric");var oF={};G(oF,{normalizeSchemaForStructuredOutput:()=>rJe});function rJe(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(rJe,"normalizeSchemaForStructuredOutput");var aF={};G(aF,{basicFields:()=>aJe,calculationFields:()=>sJe,hasCalculationFields:()=>oJe,isBasicViewField:()=>nJe,isCalculationField:()=>F_,isCalculationView:()=>iJe,isV2:()=>uJe,isVisible:()=>yre});var sF=U(require("lodash/pickBy"));function F_(e){return"calculationType"in e}o(F_,"isCalculationField");function nJe(e){return!F_(e)}o(nJe,"isBasicViewField");function iJe(e){return e.type==="calculation"}o(iJe,"isCalculationView");function oJe(e){return Object.values(e.schema||{}).some(F_)}o(oJe,"hasCalculationFields");function sJe(e){return(0,sF.default)(e.schema||{},F_)}o(sJe,"calculationFields");function yre(e){return e.visible!==!1}o(yre,"isVisible");function aJe(e,t){let{visible:r=!0}=t||{};return(0,sF.default)(e.schema||{},n=>!F_(n)&&(!r||yre(n)))}o(aJe,"basicFields");function uJe(e){return e.version===2}o(uJe,"isV2");var uF={};G(uF,{checkForRoleInheritanceLoops:()=>lJe});function cJe(e){return`role${ce}${e}`}o(cJe,"prefixForCheck");function lJe(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=cJe(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(lJe,"checkForRoleInheritanceLoops");var cF={};G(cF,{punctuateList:()=>fJe});function fJe(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(fJe,"punctuateList");var dJe=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"),pJe=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 hJe=o(e=>e?e.startsWith("/")?e:`/${e}`:"","normalizePath"),mJe=o(e=>e?e.endsWith("/")?e.slice(0,-1):e:"","normalizeBase"),ol=o((e,t)=>{let r=hJe(t);if(!e)return r;let n=mJe(e);return r?`${n}${r}`:n},"joinBaseAndPath"),bre=o(e=>ol(e,ZA.ACCOUNT),"accountPortalAccountUrl"),_re=o(e=>ol(e,ZA.BILLING),"accountPortalBillingUrl"),wre=o(e=>ol(e,ZA.UPGRADE),"accountPortalUpgradeUrl"),Ere=o(e=>ol(e,Yh.WORKSPACES),"builderWorkspacesUrl"),Sre=o(e=>ol(e,Yh.SETTINGS_EMAIL),"builderSettingsEmailUrl"),Tre=o(e=>ol(e,Yh.SETTINGS_AUTH),"builderSettingsAuthUrl"),vre=o(e=>ol(e,Yh.SETTINGS_PEOPLE_USERS),"builderSettingsPeopleUsersUrl"),Are=o(e=>ol(e,Yh.APPS),"builderAppsUrl"),gJe={accountPortalAccountUrl:bre,accountPortalBillingUrl:_re,accountPortalUpgradeUrl:wre,builderWorkspacesUrl:Ere,builderSettingsEmailUrl:Sre,builderSettingsAuthUrl:Tre,builderSettingsPeopleUsersUrl:vre,builderAppsUrl:Are};function yJe(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(yJe,"formatBytes");var bJe={getNextExecutionDates:mre,validate:gre};var FR=U(require("lodash/isPlainObject")),lF=U(require("lodash/isEmpty"));var wJe=/{{([^{].*?)}}/g,Ore=Object.values(Gb),EJe=[...Object.values(Jf),...Object.values(wa),...Object.values(Hh)],SJe=o((e,t,r)=>{let n=fo,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"||U_.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"),Ire=[fo.StartsWith.value,fo.Like.value,fo.Equals.value,fo.NotEquals.value,fo.Contains.value,fo.NotContains.value,fo.ContainsAny.value,fo.In.value];function hF(e,t){for(let r of Ore)e[r]&&(e[r].conditions=e[r].conditions.map(n=>t(n)));return e}o(hF,"recurseLogicalOperators");var mF=o(e=>{for(let t of Ire)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===""||TJe(s))&&delete e[t][i]}return e=hF(e,mF),e},"cleanupQuery");function TJe(e){return Array.isArray(e)&&e.length===0}o(TJe,"isEmptyArray");var eR=o(e=>gF(e).key,"removeKeyNumbering"),gF=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"),fF=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}=gF(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=iF(n.slice(this.columnPrefix.length))),{tableName:i,numberPrefix:r,relationshipPrefix:s,column:n}}};function vJe(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(wJe)||[]).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=HX[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(DX(r)||PX(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(vJe,"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 Cre(e){if(!e)return{};if(Array.isArray(e)&&(e=UM(e),!e))return{};let t={};e.onEmptyFilter?t.onEmptyFilter=e.onEmptyFilter:t.onEmptyFilter="all";let r=Rre(e.logicalOperator||"all");return t[r]={conditions:(e.groups||[]).map(n=>{if(n.groups){let c=Cre(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=Rre(n.logicalOperator)),{[u]:{conditions:a.map(vJe).filter(c=>c)}}})},t}o(Cre,"buildQuery");function Rre(e){return e==="all"?"$and":"$or"}o(Rre,"logicalOperatorFromUI");function yF(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 hF(e,yF),e}o(yF,"fixupFilterArrays");function AJe(e,t){let r=BR(e,t.query);t.sort&&(r=xre(r,t.sort,t.sortOrder||"ascending",t.sortType));let n=r.length;t.limit&&(r=Dre(r,t.limit.toString()));let i={rows:r};return t.countRows&&(i.totalRows=n),i}o(AJe,"search");function BR(e,t){if(!e||!Array.isArray(e))return[];if(!t)return e;if(t=mF(t),t=yF(t),!dF(t)&&t.onEmptyFilter==="none")return[];let r=o((T,R)=>A=>{for(let[O,I]of Object.entries(t[T]||{})){let D=Hc(T)?A:FM(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,lF.default)(R.low)&&(R.low=void 0),(0,FR.default)(R.high)&&(0,lF.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,hm.default)(T);if(O.isValid()){let I=(0,hm.default)(R.low||"0000-00-00T00:00:00.000Z"),D=(0,hm.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,hm.default)(T);if(A.isValid()){let O=(0,hm.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 dF(t)?t.allOr?A.some(O=>O===!0):A.every(O=>O===!0):!0},"docMatch");return e.filter(S)}o(BR,"runQuery");function xre(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(xre,"sort");function Dre(e,t){let r=typeof t=="number"?t:parseFloat(t);return isNaN(r)?e:e.slice(0,r)}o(Dre,"limit");var dF=o(e=>{if(!e)return!1;let t=o(r=>{for(let n of Ore)if(r[n])for(let i of r[n]?.conditions||[]){let s=t(i);if(s)return s}for(let n of EJe){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 ln={};G(ln,{applications:()=>_F,automations:()=>EF,screens:()=>AF,users:()=>vF});var _F={};G(_F,{getDevAppID:()=>RJe,getProdAppID:()=>q_});var bF=ti("app"),B_=ti("app_dev");function RJe(e){if(!e)throw new Error("No app ID provided");if(e.startsWith(B_))return e;let t=e.split(bF);t.shift();let r=t.join(bF);return`${B_}${r}`}o(RJe,"getDevAppID");function q_(e){if(!e)throw new Error("No app ID provided");if(!e.startsWith(B_))return e;let t=e.split(B_);t.shift();let r=t.join(B_);return`${bF}${r}`}o(q_,"getProdAppID");var EF={};G(EF,{checkForCollectStep:()=>wF,isAppAction:()=>CJe,isRowAction:()=>OJe,isWebhookAction:()=>IJe});function OJe(e){return e.definition.trigger?.stepId==="ROW_ACTION"}o(OJe,"isRowAction");function IJe(e){return e.definition.trigger?.stepId==="WEBHOOK"}o(IJe,"isWebhookAction");function CJe(e){return e.definition.trigger?.stepId==="APP"}o(CJe,"isAppAction");function Pre(e){if(!e||!Array.isArray(e))return!1;for(let t of e){if(t.stepId==="COLLECT")return!0;if(BX(t)&&t.inputs.children){for(let r of Object.values(t.inputs.children))if(Pre(r))return!0}}return!1}o(Pre,"hasCollectBlockRecursive");function wF(e){return Pre(e.definition.steps)}o(wF,"checkForCollectStep");var vF={};G(vF,{canCreateApps:()=>xJe,containsUserID:()=>FJe,getGlobalUserID:()=>UJe,getUserAppGroups:()=>BJe,hasAdminPermissions:()=>TF,hasAppBuilderPermissions:()=>WR,hasBuilderPermissions:()=>kJe,hasCreatorPermissions:()=>GR,isAdmin:()=>j_,isAdminOrBuilder:()=>PJe,isAdminOrGlobalBuilder:()=>NJe,isAdminOrWorkspaceBuilder:()=>DJe,isBuilder:()=>SF,isCreator:()=>MJe,isGlobalBuilder:()=>jR,userAppAccessList:()=>qJe});function SF(e,t){return e?e.builder?.global?!0:!!(t&&e.builder?.apps?.includes(q_(t))):!1}o(SF,"isBuilder");function jR(e){return SF(e)&&!WR(e)||j_(e)}o(jR,"isGlobalBuilder");function xJe(e){return jR(e)||GR(e)}o(xJe,"canCreateApps");function j_(e){return e?TF(e):!1}o(j_,"isAdmin");function DJe(e,t){return e?!!(j_(e)||t&&e.builder?.apps?.includes(q_(t))):!1}o(DJe,"isAdminOrWorkspaceBuilder");function PJe(e,t){return SF(e,t)||j_(e)}o(PJe,"isAdminOrBuilder");function NJe(e){return jR(e)||j_(e)}o(NJe,"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 LJe(e){return e?!!Object.values(e.roles??{}).find(t=>t==="CREATOR"):!1}o(LJe,"hasAppCreatorPermissions");function kJe(e){return e?e.builder?.global||WR(e)||GR(e):!1}o(kJe,"hasBuilderPermissions");function TF(e){return e?!!e.admin?.global:!1}o(TF,"hasAdminPermissions");function GR(e){return e?!!e.builder?.creator:!1}o(GR,"hasCreatorPermissions");function MJe(e){return e?jR(e)||TF(e)||GR(e)||WR(e)||LJe(e):!1}o(MJe,"isCreator");function UJe(e){if(typeof e!="string")return e;let t=`ro${ce}ta_users${ce}`;return e.startsWith(t)?e.split(t)[1]:e}o(UJe,"getGlobalUserID");function FJe(e){return typeof e!="string"?!1:e.includes(`us${ce}`)}o(FJe,"containsUserID");function Nre(e,t){return t?.filter(r=>r.users?.find(n=>n._id===e))||[]}o(Nre,"getUserGroups");function BJe(e,t,r){let n=q_(e);return Nre(t,r).filter(s=>Object.keys(s.roles||{}).find(a=>a===n))}o(BJe,"getUserAppGroups");function qJe(e,t){let n=Nre(e._id,t).flatMap(s=>Object.keys(s.roles||{})),i=[...Object.keys(e?.roles||{}),...n];return[...new Set(i)]}o(qJe,"userAppAccessList");var AF={};G(AF,{findInSettings:()=>jJe});function jJe(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(jJe,"findInSettings");var Vdr={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},Hdr={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},Qdr={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 Lre(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 vn)t.find(a=>a===s)&&i.push(s);return i}o(Lre,"findDuplicateInternalColumns");var Ve={};G(Ve,{steps:()=>s1,triggers:()=>a1});var s1={};G(s1,{agent:()=>n1,apiRequest:()=>LF,bash:()=>RF,branch:()=>OF,classifyText:()=>JF,collect:()=>IF,createRow:()=>CF,delay:()=>xF,deleteRow:()=>DF,discord:()=>PF,executeQuery:()=>NF,executeScript:()=>kF,executeScriptV2:()=>MF,extract:()=>r1,extractState:()=>i1,filter:()=>UF,generate:()=>t1,getRow:()=>FF,loop:()=>BF,loopV2:()=>o1,make:()=>qF,n8n:()=>jF,openai:()=>WF,outgoingWebhook:()=>GF,promptLLM:()=>XF,queryRows:()=>$F,sendSmtpEmail:()=>VF,serverLog:()=>HF,slack:()=>QF,summarise:()=>e1,translate:()=>ZF,triggerAutomationRun:()=>KF,updateRow:()=>zF,zapier:()=>YF});var RF={};G(RF,{definition:()=>WJe});var WJe={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 OF={};G(OF,{definition:()=>GJe});var GJe={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 IF={};G(IF,{definition:()=>$Je});var $Je={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 CF={};G(CF,{definition:()=>VJe});var VJe={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 xF={};G(xF,{definition:()=>HJe});var HJe={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 DF={};G(DF,{definition:()=>QJe});var QJe={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 PF={};G(PF,{definition:()=>KJe});var KJe={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 NF={};G(NF,{definition:()=>zJe});var zJe={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 LF={};G(LF,{definition:()=>YJe});var YJe={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 kF={};G(kF,{definition:()=>JJe});var JJe={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 MF={};G(MF,{definition:()=>XJe});var XJe={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 UF={};G(UF,{PrettyFilterConditions:()=>kre,definition:()=>ZJe});var kre={EQUAL:"Equals",NOT_EQUAL:"Not equals",GREATER_THAN:"Greater than",LESS_THAN:"Less than"},ZJe={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(kre)},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 FF={};G(FF,{definition:()=>t7e});var e7e={ascending:"Ascending",descending:"Descending"},t7e={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(co),pretty:Object.values(e7e)}},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 BF={};G(BF,{definition:()=>r7e});var r7e={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 qF={};G(qF,{definition:()=>n7e});var n7e={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 jF={};G(jF,{definition:()=>i7e});var i7e={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(Qb)},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 WF={};G(WF,{definition:()=>o7e});var Mre=(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))(Mre||{}),o7e={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(Mre)}},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 GF={};G(GF,{definition:()=>s7e});var Ure=(s=>(s.POST="POST",s.GET="GET",s.PUT="PUT",s.DELETE="DELETE",s.PATCH="PATCH",s))(Ure||{}),s7e={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(Ure),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 $F={};G($F,{definition:()=>u7e});var a7e={ascending:"Ascending",descending:"Descending"},u7e={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(co),pretty:Object.values(a7e)},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 VF={};G(VF,{definition:()=>c7e});var c7e={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 HF={};G(HF,{definition:()=>l7e});var l7e={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 QF={};G(QF,{definition:()=>f7e});var f7e={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 KF={};G(KF,{definition:()=>d7e});var d7e={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 zF={};G(zF,{definition:()=>p7e});var p7e={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 YF={};G(YF,{definition:()=>h7e});var h7e={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 JF={};G(JF,{definition:()=>m7e});var m7e={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 XF={};G(XF,{definition:()=>g7e});var g7e={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 ZF={};G(ZF,{definition:()=>y7e});var y7e={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 e1={};G(e1,{definition:()=>b7e});var Fre=(n=>(n.SHORT="Short",n.MEDIUM="Medium",n.LONG="Long",n))(Fre||{}),b7e={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(Fre)}},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 t1={};G(t1,{definition:()=>_7e});var _7e={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(FX)},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 r1={};G(r1,{definition:()=>w7e});var w7e={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 n1={};G(n1,{definition:()=>E7e});var E7e={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 i1={};G(i1,{definition:()=>S7e});var S7e={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 o1={};G(o1,{definition:()=>T7e});var T7e={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 a1={};G(a1,{definitions:()=>P7e});var Bre={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 qre={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 jre={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 Wre={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 Gre={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 $re={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 Vre={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 Hre={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 P7e={ROW_SAVED:Gre,ROW_UPDATED:$re,ROW_DELETED:Wre,WEBHOOK:Vre,APP:Bre,CRON:qre,EMAIL:jre,ROW_ACTION:Hre};var N7e=Object.values(Me).sort((e,t)=>t.length-e.length);function Qre(e){return N7e.find(t=>e.startsWith(`${t}${ce}`))}o(Qre,"getDocumentType");var L7e=Object.values(Kc).sort((e,t)=>t.length-e.length);function Kre(e){return L7e.find(t=>e.startsWith(`${t}${ce}`))}o(Kre,"getVirtualDocumentType");var k7e=new RegExp("^datasource_plus_(.+)__(.+)$"),$R=o(e=>t=>!!t&&t.startsWith(`${e}${ce}`),"idCheckFor"),M7e=o(e=>{let t=e.match(k7e);return!!e&&t!==null},"isExternalTableId"),Ls=o(e=>U7e(e)||M7e(e),"isTableIdOrExternalTableId"),U7e=$R("ta"),dn=$R("view"),mm=$R("datasource"),zre=$R("query");function Zr(e){if(!dn(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 u1=(n=>(n.ALL="all",n.AUTOMATION="automation",n.STATUS="status",n))(u1||{}),al=(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))(al||{}),W_={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"}},ks=ti("app"),c1=ti("app_dev"),Ms=c1,ul="internal",Yre="budibase",Fn="_design/sqlite",Jre="ta_bb_jobs",Xre="ta_bb_inventory",Zre="ta_bb_expenses",ene="ta_bb_employee",VR=`ro${ce}ta_users${ce}`,yd=(r=>(r[r.SQLITE=Fn]="SQLITE",r.MIGRATIONS="_design/migrations",r))(yd||{});var l1=(r=>(r.ACTIVE="active",r.INACTIVE="inactive",r))(l1||{}),gm=(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))(gm||{}),tne=(i=>(i.OWNER="owner",i.ADMIN="admin",i.BUILDER="builder",i.WORKSPACE_MANAGER="workspace_manager",i))(tne||{}),rne=(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))(rne||{}),F7e=new Date(-2147483647e3),f1=new Date(2147483647e3),Lr="default";var Fe={};G(Fe,{CacheKey:()=>_n,TTL:()=>Dp,bustCache:()=>ey,destroy:()=>bS,docWritethrough:()=>JH,generic:()=>_S,get:()=>Pp,invite:()=>ZH,keys:()=>V0,passwordReset:()=>e4,store:()=>cc,user:()=>hf,withCache:()=>rf,withCacheWithDynamicTTL:()=>JRe,workspace:()=>zw,writethrough:()=>F3});var JH={};G(JH,{DocWritethrough:()=>YH,DocWritethroughProcessor:()=>yS,getProcessor:()=>MMt,init:()=>YRe});var Vn={};G(Vn,{BudibaseQueue:()=>$s,InMemoryQueue:()=>AI,JobQueue:()=>ag,QueuedProcessor:()=>zH,UnretriableError:()=>G0,shutdown:()=>fct});var d1=require("crypto"),QR=require("fs"),q7e=require("lodash"),G_=require("path");var j7e=process.env.TOP_LEVEL_PATH||process.env.SERVER_TOP_LEVEL_PATH||(0,G_.resolve)((0,G_.join)(__dirname,"..","..","..")),nne=!1;!nne&&HR()&&!p1()&&(require("dotenv").config({path:(0,G_.join)(j7e,".env")}),nne=!0);function p1(){return one()}o(p1,"isTest");function one(){return process.env.NODE_ENV==="jest"||process.env.JEST_WORKER_ID!=null&&process.env.JEST_WORKER_ID!=="null"}o(one,"isJest");function HR(){return process.env.NODE_ENV!=="production"}o(HR,"isDev");function W7e(e){if(e)return parseInt(e)}o(W7e,"parseIntSafe");var ym={BACKUPS:"backups",APPS:"prod-budi-app-assets",TEMPLATES:"templates",GLOBAL:"global",PLUGINS:"plugins",TEMP:"tmp-file-attachments"},ine=!!parseInt(process.env.SELF_HOSTED||"");function G7e(){return process.env.API_ENCRYPTION_KEY?process.env.API_ENCRYPTION_KEY:process.env.JWT_SECRET}o(G7e,"getAPIEncryptionKey");function $7e(){return process.env.HTTP_LOGGING===void 0?!0:process.env.HTTP_LOGGING}o($7e,"httpLogging");function V7e(){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()&&!p1())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(V7e,"getPackageJsonFields");function H7e(){return cl.SERVICE_TYPE==="worker"}o(H7e,"isWorker");function Q7e(){return cl.SERVICE_TYPE==="apps"}o(Q7e,"isApps");function K7e(){return cl.BUDIBASE_ENVIRONMENT==="QA"}o(K7e,"isQA");function z7e(){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(z7e,"getServiceName");var cl={isTest:p1,isJest:one,isDev:HR,isWorker:H7e,isApps:Q7e,isQA:K7e,isProd:()=>!HR(),BUDIBASE_ENVIRONMENT:process.env.BUDIBASE_ENVIRONMENT,JWT_SECRET:process.env.JWT_SECRET?(0,d1.createSecretKey)(process.env.JWT_SECRET,"utf8"):void 0,JWT_SECRET_FALLBACK:process.env.JWT_SECRET_FALLBACK?(0,d1.createSecretKey)(process.env.JWT_SECRET_FALLBACK,"utf8"):void 0,ENCRYPTION_KEY:process.env.ENCRYPTION_KEY,API_ENCRYPTION_KEY:G7e(),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:ine,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||ym.BACKUPS,APPS_BUCKET_NAME:process.env.APPS_BUCKET_NAME||ym.APPS,TEMPLATES_BUCKET_NAME:process.env.TEMPLATES_BUCKET_NAME||ym.TEMPLATES,GLOBAL_BUCKET_NAME:process.env.GLOBAL_BUCKET_NAME||ym.GLOBAL,PLUGIN_BUCKET_NAME:process.env.PLUGIN_BUCKET_NAME||ym.PLUGINS,TEMP_BUCKET_NAME:process.env.TEMP_BUCKET_NAME||ym.TEMP,USE_COUCH:process.env.USE_COUCH||!0,MOCK_REDIS:process.env.MOCK_REDIS,DEFAULT_LICENSE:process.env.DEFAULT_LICENSE,SERVICE:z7e(),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:$7e(),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:ine?process.env.ENABLE_SSO_MAINTENANCE_MODE:!1,...V7e(),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,cl[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:W7e(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 sne=["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(cl))t==="0"&&(cl[e]=0),t==="false"&&(cl[e]=0);var L=cl;var YR={};G(YR,{Databases:()=>h1,SEPARATOR:()=>bm,SelectableDatabase:()=>KR,getRedisClusterOptions:()=>m1,getRedisConnectionDetails:()=>zR,getRedisOptions:()=>bd,removeDbPrefix:()=>g1});var bm="-",h1=(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))(h1||{}),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 m1(){return{slotsRefreshTimeout:2e3,dnsLookup:(e,t)=>t(null,e),redisOptions:{...bd(),tls:{}}}}o(m1,"getRedisClusterOptions");function bd(){let{host:e,password:t,port:r,username:n}=zR();return{connectTimeout:3e4,port:r,host:e,password:t,...n&&{username:n}}}o(bd,"getRedisOptions");function g1(e){let t=e.split(bm);return t.length>=2?(t.shift(),t.join(bm)):t[0]}o(g1,"removeDbPrefix");var Mle=U(require("events"));var it={};G(it,{Duration:()=>nr,DurationType:()=>kle,GZIP_PREFIX:()=>vI,clearCookie:()=>Nl,compare:()=>_1,getCookie:()=>Vu,getDispatcher:()=>Xut,getWorkspaceIdFromCtx:()=>Gd,gunzipFromBase64:()=>rct,gzipToBase64:()=>tct,hasCircularStructure:()=>$ut,hash:()=>b1,isAudited:()=>$q,isClient:()=>Gut,isPublicApiRequest:()=>jut,isServingApp:()=>Fut,isServingBuilder:()=>But,isServingBuilderPreview:()=>qut,isValidInternalAPIKey:()=>nE,newid:()=>Nt,openJwt:()=>EI,setCookie:()=>Lle,time:()=>Hut,timeout:()=>Gq,urlHasProtocol:()=>Vut,validEmail:()=>Vq});var ane=require("uuid");function Nt(){return(0,ane.v4)().replace(/-/g,"")}o(Nt,"newid");var y1=require("bcrypt"),Y7e=L.SALT_ROUNDS||10;async function b1(e){let t=await y1.genSalt(Y7e);return y1.hash(e,t)}o(b1,"hash");async function _1(e,t){return y1.compare(e,t)}o(_1,"compare");var wI=U(require("jsonwebtoken"));var C={};G(C,{DEFAULT_TENANT_ID:()=>Lr,baseGlobalDBName:()=>Hw,doInAutomationContext:()=>Hat,doInContext:()=>bq,doInEnvironmentContext:()=>nut,doInFeatureFlagOverrideContext:()=>Aq,doInIPContext:()=>Eq,doInIdentityContext:()=>H_,doInLicenseContext:()=>Kat,doInScimContext:()=>iut,doInSelfHostTenantUsingCloud:()=>Qat,doInTenant:()=>Wi,doInWorkspaceContext:()=>Jat,doInWorkspaceMigrationContext:()=>Zat,ensureSnippetContext:()=>qce,getAuditLogDBName:()=>Fce,getAuditLogsDB:()=>sut,getAutomationId:()=>_q,getCurrentContext:()=>Bd,getDevWorkspaceDB:()=>uut,getDevWorkspaceId:()=>tut,getEnvironmentVariables:()=>out,getFeatureFlagOverrides:()=>vq,getFeatureFlags:()=>Sq,getGlobalDB:()=>gt,getGlobalDBName:()=>Fd,getIP:()=>wq,getIdentity:()=>Pu,getLicense:()=>zat,getOrThrowWorkspaceId:()=>eut,getPlatformURL:()=>yq,getProdWorkspaceDB:()=>aut,getProdWorkspaceId:()=>rut,getScimDBName:()=>Wat,getSelfHostCloudDB:()=>Yat,getTableForView:()=>cut,getTenantIDFromWorkspaceID:()=>tg,getTenantId:()=>Ue,getWorkspaceDB:()=>rg,getWorkspaceId:()=>Si,identity:()=>V_,isMultiTenant:()=>Dl,isScim:()=>Gs,isSelfHostUsingCloud:()=>nI,isTenancyEnabled:()=>$at,isTenantIdSet:()=>Gat,setFeatureFlags:()=>Tq,setTableForView:()=>lut});var V_={};G(V_,{doInAccountContext:()=>J7e,doInIdentityContext:()=>E1,doInUserContext:()=>S1,getAccountUserId:()=>une,getIdentity:()=>w1});function w1(){return Pu()}o(w1,"getIdentity");function E1(e,t){return H_(e,t)}o(E1,"doInIdentityContext");function S1(e,t,r){let n={...e,_id:e._id,type:"user",hostInfo:{ipAddress:t.request.ip,userAgent:t.userAgent.source}};return E1(n,r)}o(S1,"doInUserContext");function J7e(e,t){let r=une(e),n=e.tenantId,i={_id:r,type:"user",tenantId:n,account:e};return E1(i,t)}o(J7e,"doInAccountContext");function une(e){let t;return WA(e)?t=e.budibaseUserId:t=e.accountId,t}o(une,"getAccountUserId");var Us=o(e=>{let t=T1(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:T1(s).url,auth:{username:r,password:n},cookie:`Basic ${i}`}},"getCouchInfo"),T1=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 kce=U(require("@budibase/nano"));var cne=U(require("node-fetch"));function JR(e){return e.replace(/(https?:\/\/)|(\/)+/g,"$1$2")}o(JR,"checkSlashesInUrl");async function lne(e,t="GET",r){let{url:n,cookie:i}=Us(),s=`${n}/${e}`;return await Q_({url:s,cookie:i,method:t,body:r})}o(lne,"directCouchCall");async function Q_({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,cne.default)(JR(encodeURI(e)),i)}o(Q_,"directCouchUrlCall");async function v1(e,t="GET",r){let n=await lne(e,t,r);if(n.status<300)return await n.json();throw"Cannot connect to CouchDB instance"}o(v1,"directCouchQuery");var Ud=U(require("pouchdb"));var xce,Dce=!1,sq=o((e={})=>{let{url:t,cookie:r}=Us(),n={prefix:t,fetch:(i,s)=>(s.headers.set("Authorization",r),Ud.default.fetch(i,s))};if(e.inMemory){let i=Tae();Ud.default.plugin(i),n={adapter:"memory"}}if(e.onDisk&&(n={adapter:"leveldb"}),e.replication){let i=Cce();Ud.default.plugin(i.plugin),Ud.default.adapter("writableStream",i.adapters.writableStream)}if(e.find){let i=require("pouchdb-find");Ud.default.plugin(i)}return Ud.default.defaults(n)},"getPouch");function XO(e){xce=sq(e),Dce=!0}o(XO,"init");var vat=o(()=>{if(!Dce)throw new Error("init has not been called")},"checkInitialised");function ts(e,t){vat();let r=new xce(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(ts,"getPouchDB");async function Gw(e){if(!(!e||L.isTest()))try{return await e.close()}catch{}}o(Gw,"closePouchDB");var Mr=U(require("dd-trace"));var Xm=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 hq={};G(hq,{breakExternalTableId:()=>cq,breakRowIdField:()=>Uat,buildExternalTableId:()=>Dat,convertRowId:()=>Mat,encodeTableId:()=>Pat,encodeViewId:()=>Nat,extractDate:()=>fq,generateRowIdField:()=>Lat,getNativeSql:()=>Zm,isExternalTable:()=>uq,isExternalTableID:()=>ZO,isInternalTableID:()=>xat,isRowId:()=>kat,isValidFilter:()=>tI,isValidISODateString:()=>eI,isValidISODateStringWithoutTimezone:()=>lq,isValidTime:()=>dq,sqlLog:()=>$w,validateManyToMany:()=>pq});var aq=`${ce}${ce}`,Pce=/^\[.*]$/g,Aat=encodeURIComponent(" "),Rat=/^\d{4}-\d{2}-\d{2}(?:[T ]\d{2}:\d{2}:\d{2}(?:.\d{3})?Z)?$/,Oat=/^\d{4}-\d{2}-\d{2}(?:[T ]\d{2}:\d{2}:\d{2}(?:.\d{3})?)?$/,Iat=/(\d{4}-\d{2}-\d{2})/,Cat=/^(?:\d{2}:)?(?:\d{2}:)(?:\d{2})$/;function ZO(e){return e.startsWith("datasource"+ce)}o(ZO,"isExternalTableID");function xat(e){return!ZO(e)}o(xat,"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 uq(e){return e?.sourceId&&e.sourceId.includes("datasource"+ce)&&e?.sourceId!==Kb||e?.sourceType==="external"?!0:!!(e?._id&&ZO(e._id))}o(uq,"isExternalTable");function Dat(e,t){return`${e}${aq}${encodeURIComponent(t)}`}o(Dat,"buildExternalTableId");function Pat(e){return ZO(e)?encodeURIComponent(e):e}o(Pat,"encodeTableId");function Nat(e){return encodeURIComponent(e)}o(Nat,"encodeViewId");function cq(e){let t=e.split(aq),r=t.shift(),n=t.join(aq);if(n.includes(Aat)&&(n=decodeURIComponent(n)),!r||!n)throw new Error("Unable to get datasource/table name from table ID");return{datasourceId:r,tableName:n}}o(cq,"breakExternalTableId");function Lat(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(Lat,"generateRowIdField");function kat(e){return Array.isArray(e)||typeof e=="string"&&e.match(Pce)!=null}o(kat,"isRowId");function Mat(e){return Array.isArray(e)?e[0]:typeof e=="string"&&e.match(Pce)!=null?e.substring(1,e.length-1):e}o(Mat,"convertRowId");function Uat(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(Uat,"breakRowIdField");function eI(e){let t=e.trim();if(!Rat.test(t))return!1;let r=new Date(t);return!isNaN(r.getTime())}o(eI,"isValidISODateString");function lq(e){let t=e.trim();if(!Oat.test(t))return!1;let r=new Date(t);return!isNaN(r.getTime())}o(lq,"isValidISODateStringWithoutTimezone");function fq(e){let t=e.match(Iat);if(t)return t[0]}o(fq,"extractDate");function tI(e){return e!=null&&e!==""}o(tI,"isValidFilter");function dq(e){return Cat.test(e)}o(dq,"isValidTime");function $w(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($w,"sqlLog");function Fat(e){return!!e.through&&!!e.fromPrimary&&!!e.from&&!!e.toPrimary&&!!e.to}o(Fat,"isValidManyToManyRelationship");function pq(e){if(Fat(e))return e}o(pq,"validateManyToMany");var Nce="Database does not exist.";function Lce(e){return(0,kce.default)({url:e.url,requestDefaults:{headers:{Authorization:e.cookie}},parseUrl:!1})}o(Lce,"buildNano");var Cl=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 Bat(e,t,r){if(!e||!t)throw new Error("Unable to create database without database name or connection");let n=new eg(e,r,t);return new Xm(n)}o(Bat,"DatabaseWithConnection");var eg=class e{constructor(t,r,n){this.couchInfo=Us();this.name=t,this.pouchOpts=r||{},n&&(this.couchInfo=Us(n),this.instanceNano=Lce(this.couchInfo)),e.nano||e.init()}static{o(this,"DatabaseImpl")}static init(){let t=Us();e.nano=Lce(t)}exists(t){return t===void 0?this.dbExists():this.docExists(t)}async dbExists(){return(await Q_({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 Cl(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===Nce)return await this.checkAndCreateDb(),await this.performCallWithDBCreation(t);throw new Cl(`CouchDB error: ${i.message}`,i)}}async performCall(t){let r=this.getDb(),n=await t(r);try{return await n()}catch(i){throw new Cl(`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(LX(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 Cl(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===Nce)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 Q_(i),a=await s.text();if(s.status>300){let u;try{u=JSON.parse(a)}catch{throw console.error(`SQS error: ${a}`),new Cl("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 $w("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 Cl(t.message,t)}}async compact(){return this.performCall(t=>()=>t.compact())}async dump(t,r){return ts(this.name).dump(t,r)}async load(t){return ts(this.name).load(t)}async createIndex(t){return ts(this.name).createIndex(t)}async deleteIndex(t){return ts(this.name).deleteIndex(t)}async getIndexes(){return ts(this.name).getIndexes()}};function Ei(e,t){return new Xm(new eg(e,t))}o(Ei,"getDB");async function Io(e,t,r){let n=Ei(e,r);return await t(n)}o(Io,"doWithDB");async function mq(e){let t="/_all_dbs";return e&&(t+=`?${e}`),await v1(t)}o(mq,"directCouchAllDbs");var gq="No app provided";function xl(e){if(!e)throw gq;return e.startsWith(Ms)}o(xl,"isDevWorkspaceID");function qat(e){if(!e)throw gq;return e.startsWith(ks)&&!xl(e)}o(qat,"isProdWorkspaceID");function Vw(e){if(!e)throw gq;return xl(e.appId)}o(Vw,"isDevWorkspace");function rI(e){if(!e||e.startsWith(Ms))return e;let t=e.split(ks);t.shift();let r=t.join(ks);return`${Ms}${r}`}o(rI,"getDevWorkspaceID");function Co(e){if(!e||!e.startsWith(Ms))return e;let t=e.split(Ms);t.shift();let r=t.join(Ms);return`${ks}${r}`}o(Co,"getProdWorkspaceID");var Mce=require("async_hooks");var tn=class e{static{o(this,"Context")}static{this.storage=new Mce.AsyncLocalStorage}static run(t,r){return e.storage.run(t,()=>r())}static get(){return e.storage.getStore()}};var Uce=null;function Fd(e){return e||(e=Ue()),Hw(e)}o(Fd,"getGlobalDBName");function Fce(e){return e||(e=Ue()),e===Lr?tr.AUDIT_LOGS.name:`${e}${ce}${tr.AUDIT_LOGS.name}`}o(Fce,"getAuditLogDBName");function Wat(e){return e||(e=Ue()),e===Lr?tr.SCIM_LOGS.name:`${e}${ce}${tr.SCIM_LOGS.name}`}o(Wat,"getScimDBName");function Hw(e){return!e||e===Lr?tr.GLOBAL.name:`${e}${ce}${tr.GLOBAL.name}`}o(Hw,"baseGlobalDBName");function yq(){return L.PLATFORM_URL}o(yq,"getPlatformURL");function Dl(){return!!L.MULTI_TENANCY}o(Dl,"isMultiTenant");function Gat(){return!!tn.get()?.tenantId}o(Gat,"isTenantIdSet");function $at(){return L.MULTI_TENANCY}o($at,"isTenancyEnabled");function tg(e){if(!e)return;if(!Dl())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(tg,"getTenantIDFromWorkspaceID");function Vat(e){let t;try{t=tn.get()}catch{t={}}return t={...t,...e},t}o(Vat,"updateContext");async function Ws(e,t){Xat();let r=Vat(e);return tn.run(r,t)}o(Ws,"newContext");async function Hat(e){return await qce(),await Ws({tenantId:tg(e.workspaceId),appId:e.workspaceId,automationId:e.automationId},e.task)}o(Hat,"doInAutomationContext");async function bq(e,t){let r=tg(e);return Ws({tenantId:r,appId:e},t)}o(bq,"doInContext");async function Wi(e,t){return L.MULTI_TENANCY||(e=e||Lr),Ws(e?{tenantId:e}:{},t)}o(Wi,"doInTenant");async function Qat(e,t){return Ws({tenantId:e,isSelfHostUsingCloud:!0},t)}o(Qat,"doInSelfHostTenantUsingCloud");async function Kat(e,t){return Ws({license:e},t)}o(Kat,"doInLicenseContext");function zat(){return tn.get()?.license}o(zat,"getLicense");function nI(){return!!tn.get()?.isSelfHostUsingCloud}o(nI,"isSelfHostUsingCloud");function Yat(){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(Yat,"getSelfHostCloudDB");async function Jat(e,t){return Bce(e,t)}o(Jat,"doInWorkspaceContext");async function Bce(e,t,r){if(!e)throw new Error("workspaceId is required");let n=tg(e),i={appId:e,...r};return n&&(i.tenantId=n),Ws(i,t)}o(Bce,"_doInWorkspaceContext");async function H_(e,t){if(!e)throw new Error("identity is required");let r={identity:e};return e.tenantId&&(r.tenantId=e.tenantId),Ws(r,t)}o(H_,"doInIdentityContext");function Xat(){if(tn.get()?.isMigrating)throw new Error("The context cannot be changed, a migration is currently running")}o(Xat,"guardMigration");async function Zat(e,t){return Bce(e,t,{isMigrating:!0})}o(Zat,"doInWorkspaceMigrationContext");function Pu(){try{return tn.get()?.identity}catch{}}o(Pu,"getIdentity");function Ue(){if(!Dl())return Lr;let t=tn.get()?.tenantId;if(!t)throw new Error("Tenant id not found");return t}o(Ue,"getTenantId");function _q(){return tn.get()?.automationId}o(_q,"getAutomationId");function Si(){let t=tn.get()?.appId;return!t&&L.isTest()&&Uce?Uce:t}o(Si,"getWorkspaceId");function eut(){let e=Si();if(!e)throw new Error("Workspace id not set");return e}o(eut,"getOrThrowWorkspaceId");function wq(){return tn.get()?.ip}o(wq,"getIP");var tut=o(()=>{let e=Si();if(!e)throw new Error("Could not get workspaceId");return rI(e)},"getDevWorkspaceId"),rut=o(()=>{let e=Si();if(!e)throw new Error("Could not get workspaceId");return Co(e)},"getProdWorkspaceId");function nut(e,t){if(!e)throw new Error("Must supply environment variables.");return Ws({environmentVariables:e},t)}o(nut,"doInEnvironmentContext");function iut(e){return Ws({isScim:!0},e)}o(iut,"doInScimContext");function Eq(e,t){return Ws({ip:e},t)}o(Eq,"doInIPContext");async function qce(){let e=Bd();if(!e||e.snippets)return;let t,r=rg();r&&(t=(await r.tryGet("app_metadata"))?.snippets),e.snippets=t||[]}o(qce,"ensureSnippetContext");function out(){let e=tn.get();return e.environmentVariables?e.environmentVariables:null}o(out,"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(Hw(e?.tenantId))}o(gt,"getGlobalDB");function sut(){if(!Ue())throw new Error("No tenant ID found - cannot open audit log DB");return Ei(Fce())}o(sut,"getAuditLogsDB");function rg(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(rg,"getWorkspaceDB");function aut(e){let t=Si();if(!t)throw new Error("Unable to retrieve prod DB - no workspace ID.");return Ei(Co(t),e)}o(aut,"getProdWorkspaceDB");function uut(e){let t=Si();if(!t)throw new Error("Unable to retrieve dev DB - no workspace ID.");return Ei(rI(t),e)}o(uut,"getDevWorkspaceDB");function Gs(){return!!tn.get()?.isScim}o(Gs,"isScim");function Bd(){try{return tn.get()}catch{return}}o(Bd,"getCurrentContext");function Sq(e){let t=Bd();if(t)return t.featureFlagCache?.[e]}o(Sq,"getFeatureFlags");function Tq(e,t){let r=Bd();r&&(r.featureFlagCache??={},r.featureFlagCache[e]=t)}o(Tq,"setFeatureFlags");function vq(){return Bd()?.featureFlagOverrides||{}}o(vq,"getFeatureFlagOverrides");async function Aq(e,t){return await Ws({featureFlagOverrides:e},t)}o(Aq,"doInFeatureFlagOverrideContext");function cut(e){let t=Bd();if(t)return t.viewToTableCache?.[e]}o(cut,"getTableForView");function lut(e,t){let r=Bd();r&&(r.viewToTableCache??={},r.viewToTableCache[e]=t)}o(lut,"setTableForView");var F={};G(F,{AutomationViewMode:()=>u1,BUDIBASE_DATASOURCE_TYPE:()=>Yre,DEFAULT_BB_DATASOURCE_ID:()=>Kb,DEFAULT_EMPLOYEE_TABLE_ID:()=>ene,DEFAULT_EXPENSES_TABLE_ID:()=>Zre,DEFAULT_INVENTORY_TABLE_ID:()=>Xre,DEFAULT_JOBS_TABLE_ID:()=>Jre,DatabaseImpl:()=>eg,DatabaseWithConnection:()=>Bat,DeprecatedViews:()=>W_,DesignDocuments:()=>yd,DocumentType:()=>Me,InternalTable:()=>vu,QueryBuilder:()=>$u,Replication:()=>Ole,SEPARATOR:()=>ce,SQLITE_DESIGN_DOC_ID:()=>Fn,SQS_DATASOURCE_INTERNAL:()=>ul,StaticDatabases:()=>tr,UNICODE_MAX:()=>Mn,USER_METADATA_PREFIX:()=>VR,ViewName:()=>al,WORKSPACE_DEV:()=>c1,WORKSPACE_DEV_PREFIX:()=>Ms,WORKSPACE_PREFIX:()=>ks,baseGlobalDBName:()=>Hw,checkErrorCode:()=>Dle,closePouchDB:()=>Gw,createApiKeyView:()=>Ele,createNewUserEmailView:()=>_le,createPlatformAccountEmailView:()=>Tle,createPlatformUserView:()=>vle,createUserAppView:()=>wle,createView:()=>sg,dbExists:()=>Rut,directCouchAllDbs:()=>mq,directCouchCall:()=>lne,directCouchQuery:()=>v1,directCouchUrlCall:()=>Q_,doWithDB:()=>Io,fullSearch:()=>Dut,generateAIConfigID:()=>sle,generateAgentFileID:()=>ole,generateAgentID:()=>tle,generateAgentToolSourceID:()=>ile,generateAppUserID:()=>yI,generateChatAppID:()=>rle,generateChatConversationID:()=>nle,generateDevInfoID:()=>Xce,generateGlobalUserID:()=>og,generateOAuth2LogID:()=>ele,generatePluginID:()=>Zce,generateRoleID:()=>Pq,generateRowID:()=>Dq,generateTableID:()=>Qce,generateTemplateID:()=>Jce,generateUserMetadataID:()=>zce,generateVectorDbID:()=>lle,generateWorkspaceAppID:()=>ule,generateWorkspaceFavouriteID:()=>cle,generateWorkspaceID:()=>Hce,getAllDbs:()=>ble,getAllWorkspaces:()=>Jw,getCouchInfo:()=>Us,getDB:()=>Ei,getDevWorkspaceID:()=>rI,getDevWorkspaceIDs:()=>vut,getDocParams:()=>Wu,getGlobalDBName:()=>Fd,getGlobalIDFromUserMetadataID:()=>Yce,getGlobalUserParams:()=>jd,getLiteLLMKeyID:()=>ale,getOAuth2ConfigParams:()=>mle,getPluginParams:()=>hle,getPouch:()=>sq,getPouchDB:()=>ts,getProdWorkpaceIDs:()=>Tut,getProdWorkspaceID:()=>Co,getQueryIndex:()=>fle,getRoleParams:()=>_I,getRowParams:()=>Nq,getStartEndKeyURL:()=>Yw,getTemplateParams:()=>ple,getUrlInfo:()=>T1,getUserMetadataParams:()=>dle,getUsersByWorkspaceParams:()=>bI,getWorkspaceAppParams:()=>gle,getWorkspaceFavouriteParams:()=>yle,getWorkspacesByIDs:()=>Sut,init:()=>XO,isDevWorkspace:()=>Vw,isDevWorkspaceID:()=>xl,isDocumentConflictError:()=>Nut,isGlobalUserID:()=>Kce,isProdWorkspaceID:()=>qat,isSameWorkspaceID:()=>Aut,paginatedSearch:()=>xut,pagination:()=>Lq,prefixRoleID:()=>ju,queryGlobalView:()=>Gu,queryGlobalViewRaw:()=>Uq,queryPlatformView:()=>Zw,queryView:()=>Mq,queryViewRaw:()=>Xw,removeKeyNumbering:()=>eE,searchIndexes:()=>qq});var zw={};G(zw,{WorkspaceState:()=>xq,getWorkspaceMetadata:()=>gI,invalidateWorkspaceMetadata:()=>wut});var Pl={};G(Pl,{getCacheClient:()=>Oq,getDocWritethroughClient:()=>gut,getInviteClient:()=>qd,getLockClient:()=>Cq,getOpenapiImportSpecsClient:()=>hut,getPasswordResetClient:()=>Kw,getSessionClient:()=>ig,getSocketClient:()=>mut,getUserClient:()=>Qw,getWorkspaceClient:()=>mI,getWritethroughClient:()=>Iq,init:()=>rs,shutdown:()=>$ce});var oI=U(require("ioredis"));var iI=require("dd-trace"),Wce=require("lodash");var jce;if(L.MOCK_REDIS)try{jce=require("ioredis-mock")}catch{console.log("Mock redis unavailable")}async function fut(e=0){return await iI.tracer.trace("Redis.init",async t=>{if(L.MOCK_REDIS)return t.addTags({mock:!0}),new jce(bd());let r;if(L.REDIS_CLUSTERED){t.addTags({clustered:!0});let{host:n,port:i}=zR();r=new oI.Cluster([{host:n,port:i}],m1())}else r=new oI.default(bd());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(fut,"init");function dut(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:g1(a),value:u}});r(await Promise.all(s))}catch(s){n(s)}})})}o(dut,"promisifyStream");function put(e){return e.isCluster}o(put,"isCluster");var Rq=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 fut(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}${bm}${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}${bm}${t}`;let n;put(this.client)?n=this.client.nodes("master")[0].scanStream({match:t+"*",count:100}):n=this.client.scanStream({match:t+"*",count:100});let i=await dut(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,Wce.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`)};UT.parseAttributes=o(function(t){return Object.keys(t).map(function(r){var
|
|
|
463
463
|
}
|
|
464
464
|
}`,"platform_users_lowercase_2")},"createPlatformUserView"),Zw=o(async(e,t)=>{let r={account_by_email:Tle,platform_users_lowercase_2:vle};return Io(tr.PLATFORM_INFO.name,async n=>{let i=r[e];return Mq(e,t,n,i,{arrayResponse:!0})})},"queryPlatformView"),Ale={by_email2:_le,by_api_key:Ele,by_app:wle},Gu=o(async(e,t,r,n)=>{r||(r=gt());let i=Ale[e];return Mq(e,t,r,i,n)},"queryGlobalView");async function Uq(e,t,r){let n=gt(),i=Ale[e];return Xw(e,t,n,i,r)}o(Uq,"queryGlobalViewRaw");var Cut=U(require("pouchdb"));var Rle=require("dd-trace");var Fq=class{static{o(this,"Replication")}constructor({source:t,target:r}){this.source=ts(t),this.target=ts(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([Gw(this.source),Gw(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 Rle.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=ts(this.target.name),await this.replicate()}},Ole=Fq;var Cle=U(require("node-fetch"));var eE=Tt.removeKeyNumbering;function Wd(e){return e==null||e===""}o(Wd,"isEmpty");var $u=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=eE(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)=>Wd(g)?null:`${m}:${t.preprocess(g,s)}`,"equal"),c=o((m,g,y="AND")=>{if(Wd(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)=>Wd(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(Wd(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=eE(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)=>Wd(g)?null:(g=t.preprocess(g,{escape:!0,lowercase:!0,type:"string"}),`${m}:${g}*`)),this.#e.range&&h(this.#e.range,(m,g)=>{if(Wd(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)=>Wd(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}=Us(),n=`${t}/${this.#l}/_design/database/_search/${this.#f}`,i=this.buildSearchBody();try{return await Ile(n,i,r)}catch(s){if(s.status===404&&this.#a)return await this.#a(),await Ile(n,i,r);throw s}}};async function Ile(e,t,r){let n=await(0,Cle.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(Ile,"runQuery");async function xle(e,t,r,n){let i=n.bookmark,s=n.rows||[];if(n.limit&&s.length>=n.limit)return s;let a=$u.maxLimit;n.limit&&s.length>n.limit-$u.maxLimit&&(a=n.limit-s.length);let u=new $u(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<$u.maxLimit)return[...s,...c.rows];let l={...n,bookmark:c.bookmark,rows:[...s,...c.rows]};return await xle(e,t,r,l)}o(xle,"recursiveSearch");async function xut(e,t,r,n){let i=n.limit;(i==null||isNaN(i)||i<0)&&(i=50),i=Math.min(i,$u.maxLimit);let s=new $u(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(xut,"paginatedSearch");async function Dut(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 xle(e,t,r,n)}}o(Dut,"fullSearch");var qq={};G(qq,{createUserIndex:()=>Put});async function Put(){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(Put,"createUserIndex");function Dle(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(Dle,"checkErrorCode");function Nut(e){return Dle(e,409)}o(Nut,"isDocumentConflictError");var rE={};G(rE,{addTenantToUrl:()=>Lut,getTenantDB:()=>jq,getTenantIDFromCtx:()=>tE,isUserInWorkspaceTenant:()=>kut});function jq(e){return Ei(Fd(e))}o(jq,"getTenantDB");function Lut(e){let t=Ue();if(Dl()){let r=e.indexOf("?")===-1?"?":"&";e+=`${r}tenantId=${t}`}return e}o(Lut,"addTenantToUrl");var kut=o((e,t)=>{let r;return t?r=t.tenantId||Lr:r=Ue(),(tg(e)||Lr)===r},"isUserInWorkspaceTenant"),Mut=Object.values($b),tE=o((e,t)=>{if(!Dl())return Lr;t.allowNoTenant===void 0&&(t.allowNoTenant=!1),t.includeStrategies||(t.includeStrategies=Mut),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(yq()).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 Wq="app"+ce,Ple="/app/";async function Uut(e){let r=`/${e.path.split("/")[2].toLowerCase()}`,n=Ue();!L.isDev()&&L.MULTI_TENANCY&&(n=tE(e,{includeStrategies:["subdomain"]}));let s=(await Wi(n,()=>Jw({dev:!1}))).filter(a=>a.url&&a.url.toLowerCase()===r)[0];return s&&s.appId?s.appId:void 0}o(Uut,"resolveAppUrl");function Fut(e){return e.path.startsWith(`/${Wq}`)?!0:e.path.startsWith(Ple)}o(Fut,"isServingApp");function But(e){return e.path.startsWith("/builder/workspace/")}o(But,"isServingBuilder");function qut(e){return Nle(e.path)}o(qut,"isServingBuilderPreview");function Nle(e){return new RegExp(/^\/app\/app_\w+\/preview$/).test(e)}o(Nle,"isBuilderPreviewUrl");function jut(e){return e.path.startsWith("/api/public/v")}o(jut,"isPublicApiRequest");async function Gd(e){let t;function r(u){u&&u.startsWith(Wq)&&(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=Wut(e.path);r(i),n(e.query?.appId);let s=Nle(e.path);return e.path.startsWith(Ple)&&!s&&r(await Uut(e)),t}o(Gd,"getWorkspaceIdFromCtx");function Wut(e){if(e)return e.split("?")[0].split("/").find(t=>t.startsWith(Wq))}o(Wut,"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 nE(e){return L.INTERNAL_API_KEY&&L.INTERNAL_API_KEY===e?!0:!!(L.INTERNAL_API_KEY_FALLBACK&&L.INTERNAL_API_KEY_FALLBACK===e)}o(nE,"isValidInternalAPIKey");function Vu(e,t){let r=e.cookies.get(t);if(r)return EI(r)}o(Vu,"getCookie");function Lle(e,t,r="builder",n={sign:!0}){t&&n&&n.sign&&(t=wI.default.sign(t,L.JWT_SECRET));let i={expires:f1,path:"/",httpOnly:!1,overwrite:!0};L.COOKIE_DOMAIN&&(i.domain=L.COOKIE_DOMAIN),e.cookies.set(r,t,i)}o(Lle,"setCookie");function Nl(e,t){Lle(e,null,t)}o(Nl,"clearCookie");function Gut(e){return e.headers["x-budibase-type"]==="client"}o(Gut,"isClient");function Gq(e){return new Promise(t=>setTimeout(t,e))}o(Gq,"timeout");function $q(e){return!!Vh[e]}o($q,"isAudited");function $ut(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($ut,"hasCircularStructure");function Vut(e){return!!e.match(/^.+:\/\/.+$/)}o(Vut,"urlHasProtocol");function Vq(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(Vq,"validEmail");var kle=(s=>(s.MILLISECONDS="milliseconds",s.SECONDS="seconds",s.MINUTES="minutes",s.HOURS="hours",s.DAYS="days",s))(kle||{}),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 Hut(e){let t=performance.now();return[await e(),nr.fromMilliseconds(performance.now()-t)]}o(Hut,"time");var TI=require("undici");function Qut(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(Qut,"isUrlMatchingNoProxy");function Kut(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&&Qut(e,i))return console.log("[fetch] URL matches NO_PROXY pattern, bypassing proxy",{url:e,noProxy:i}),!0}return!1}o(Kut,"shouldBypassProxy");function zut(e){return new TI.Agent({connect:{rejectUnauthorized:e}})}o(zut,"createDirectAgent");function Yut(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(Yut,"createProxyAgent");function Jut(e){let t=e?.rejectUnauthorized??!0;return Kut(e?.url)?zut(t):Yut(t)}o(Jut,"createDispatcher");function Xut(e){return Jut(e)}o(Xut,"getDispatcher");var Hq=require("util"),Qq=U(require("zlib"));var Zut=(0,Hq.promisify)(Qq.default.gzip),ect=(0,Hq.promisify)(Qq.default.gunzip),vI="gzip:",tct=o(async e=>{let t=await Zut(e);return`${vI}${t.toString("base64")}`},"gzipToBase64"),rct=o(async e=>{let t=e.startsWith(vI)?e.slice(vI.length):e,r=Buffer.from(t,"base64");return(await ect(new Uint8Array(r))).toString("utf8")},"gunzipFromBase64");function nct(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(nct,"jobToJobInformation");var AI=class{static{o(this,"InMemoryQueue")}constructor(t,r){this._name=t,this._opts=r,this._messages=[],this._emitter=new Mle.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=>nct(t))}async whenCurrentJobsFinished(){do await Gq(50);while(this.hasRunningJobs())}hasRunningJobs(){return this._addCount>this._runCount}},Ule=AI;var zq=U(require("bull"));var ag=(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))(ag||{});function Fle(e,t,r){sct(e,t),r&&ict(e,r)}o(Fle,"addListeners");function ict(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(ict,"handleStalled");function ns(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(ns,"getLogParams");var oct={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 sct(e,t){let r=oct[t];function n(i,s){let a=i.data.event?.appId;if(a)return bq(a,s);s()}o(n,"doInJobContext"),e.on("stalled",async i=>{await n(i,()=>{console.error(...ns(r,"stalled",{job:i}))})}).on("error",i=>{console.error(...ns(r,"error",{error:i}))}),process.env.NODE_DEBUG?.includes("bull")&&e.on("waiting",i=>{console.info(...ns(r,"waiting",{jobId:i}))}).on("active",async i=>{await n(i,()=>{console.info(...ns(r,"active",{job:i}))})}).on("progress",async(i,s)=>{await n(i,()=>{console.info(...ns(r,"progress",{job:i},{progress:s}))})}).on("completed",async(i,s)=>{await n(i,()=>{console.info(...ns(r,"completed",{job:i},{result:s}))})}).on("failed",async(i,s)=>{await n(i,()=>{console.error(...ns(r,"failed",{job:i,error:s}))})}).on("paused",()=>{console.info(...ns(r,"paused"))}).on("resumed",()=>{console.info(...ns(r,"resumed"))}).on("cleaned",(i,s)=>{console.info(...ns(r,"cleaned",{},{length:i.length,type:s}))}).on("drained",()=>{console.info(...ns(r,"drained"))}).on("removed",i=>{console.info(...ns(r,"removed",{job:i}))})}o(sct,"logging");var Kq=[];function Ble(e,t){let r=setInterval(e,t);return Kq.push(r),r}o(Ble,"set");function qle(e){let t=Kq.indexOf(e);t!==-1&&Kq.splice(t,1),clearInterval(e)}o(qle,"clear");var Hu=U(require("dd-trace")),iE=U(require("object-sizeof"));var act=nr.fromMinutes(5).toMs(),uct=nr.fromSeconds(30).toMs(),Yq=nr.fromSeconds(60).toMs(),oE=[],RI;async function Wle(){for(let e of oE)await e.clean(Yq,"completed"),await e.clean(Yq,"failed")}o(Wle,"cleanup");async function cct(e,t,r){let n=performance.now();try{let i=await t();return Hu.default.dogstatsd.increment(`${e}.success`,1,r),i}catch(i){throw Hu.default.dogstatsd.increment(`${e}.error`,1,r),i}finally{let i=performance.now()-n;Hu.default.dogstatsd.distribution(`${e}.duration.ms`,i,r),Hu.default.dogstatsd.increment(e,1,r)}}o(cct,"withMetrics");function Gle(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(Gle,"jobOptsTags");function lct(e){return{"job.id":e.id,"job.attemptsMade":e.attemptsMade,"job.timestamp":e.timestamp,"job.data.sizeBytes":(0,iE.default)(e.data),...Gle(e.opts||{})}}o(lct,"jobTags");var $s=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:bd(),settings:{maxStalledCount:this.opts.maxStalledCount?this.opts.maxStalledCount:0,lockDuration:act,lockRenewTime:uct}};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 zq.default(this.jobQueue,{...r,redis:{host:"localhost",port:+process.env.BULL_TEST_REDIS_PORT}}):n=new Ule(this.jobQueue,r):n=new zq.default(this.jobQueue,r),Fle(n,this.jobQueue,this.opts.removeStalledCb),oE.push(n),!RI&&!L.isTest()&&(RI=Ble(Wle,Yq),Wle().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 Hu.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,...lct(a)}),this.opts.jobTags&&c.addTags(this.opts.jobTags(a.data)),Hu.default.dogstatsd.distribution("queue.process.sizeBytes",(0,iE.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 Hu.default.trace("queue.add",async n=>(n.addTags({"queue.name":this.jobQueue,"job.data.sizeBytes":(0,iE.default)(t),...Gle(r||{})}),this.opts.jobTags&&n.addTags(this.opts.jobTags(t)),t._parentSpanContext={traceId:n.context().toTraceId(),spanId:n.context().toSpanId()},Hu.default.dogstatsd.distribution("queue.add.sizeBytes",(0,iE.default)(t),this.metricTags()),await this.withMetrics("queue.add",()=>this.queue.add(t,r))))}withMetrics(t,r){return cct(t,r,this.metricTags())}metricTags(){return{queueName:this.jobQueue}}close(t){return this.queue.close(t)}whenCurrentJobsFinished(){return this.queue.whenCurrentJobsFinished()}};async function fct(){RI&&qle(RI),console.log("Waiting for current queue jobs to finish...");for(let e of oE)await e.whenCurrentJobsFinished();console.log("Closing queue Redis connections...");for(let e of oE)await e.close();oE=[],console.log("Queues shutdown")}o(fct,"shutdown");var ke={};G(ke,{correlation:()=>sE,logAlert:()=>Ip,logAlertWithInfo:()=>LMt,logWarn:()=>Zg,logger:()=>W0,system:()=>QH});var sE={};G(sE,{getId:()=>Xq,setHeader:()=>bct});var Hle=OI(),bct=o(e=>{let t=Hle.getId();t&&(e["x-budibase-correlation-id"]=t)},"setHeader");function Xq(){return Hle.getId()}o(Xq,"getId");var j0=U(Jde()),KRe=U(Q$()),KH=U(require("dd-trace")),zRe=require("dd-trace/ext");var QH={};G(QH,{getLogReadStream:()=>IMt,getSingleFileMaxSizeInfo:()=>QRe,localFileDestination:()=>HH});var gS=U(require("fs")),VH=U(require("path")),GRe=U(hwe());var Se={};G(Se,{ObjectStore:()=>ds,ObjectStoreBuckets:()=>Ikt,SIGNED_FILE_PREFIX:()=>MH,bucketTTLConfig:()=>L0,budibaseTempDir:()=>Rp,client3rdPartyLibrary:()=>EMt,clientLibraryPath:()=>wMt,clientLibraryUrl:()=>SMt,createBucketIfNotExists:()=>hS,deleteFile:()=>Hkt,deleteFiles:()=>Qkt,deleteFolder:()=>IRe,downloadTarball:()=>zkt,downloadTarballDirect:()=>Kkt,enrichPWAImages:()=>TMt,enrichPluginURLs:()=>AMt,extractBucketAndPath:()=>xH,getAllFiles:()=>Gkt,getAppFileUrl:()=>kRe,getClientCacheKey:()=>LRe,getGlobalFileS3Key:()=>MRe,getGlobalFileUrl:()=>vMt,getObjectMetadata:()=>Ykt,getPluginIconKey:()=>BRe,getPluginJSKey:()=>FRe,getPluginS3Dir:()=>jRe,getPresignedUrl:()=>Op,getReadStream:()=>k0,listAllObjects:()=>UH,objectExists:()=>Jkt,processAutomationAttachment:()=>xkt,processObjectStoreAttachment:()=>hRe,retrieve:()=>ORe,retrieveDirectory:()=>Vkt,retrieveToTmp:()=>$kt,sanitizeBucket:()=>Ri,sanitizeKey:()=>rn,streamUpload:()=>RRe,streamUploadMany:()=>Wkt,upload:()=>jkt,uploadDirectory:()=>FH});var U0=require("@aws-sdk/client-s3"),DH=U(Lve()),ERe=require("@aws-sdk/s3-request-presigner"),SRe=U(wAe());var uc=U(require("dd-trace")),Jg=U(require("fs")),dS=U(require("fs/promises")),TRe=U(require("https")),PH=U(require("node-fetch")),Zl=require("path"),F0=U(require("stream")),pS=require("stream/promises"),NH=U(cRe()),LH=require("uuid"),kH=U(require("zlib"));var lRe=U(require("fs")),fRe=require("os"),fS=U(require("path")),dRe=U(require("stream"));var Ikt={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},pRe=(0,fS.join)((0,fRe.tmpdir)(),".budibase");try{lRe.default.mkdirSync(pRe)}catch(e){if(e.code!=="EEXIST")throw e}function Rp(){return pRe}o(Rp,"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 Ckt(e){let t=await fetch(e.url);if(!t.ok||!t.body)throw new Error(`Unexpected response ${t.statusText}`);let r=fS.default.basename(new URL(e.url).pathname);if(!t.body)throw new Error("No response received for attachment");return{filename:e.filename||r,content:dRe.default.Readable.fromWeb(t.body)}}o(Ckt,"processUrlAttachment");async function hRe(e){let t=xH(e.url);if(t===null)throw new Error("Invalid signed URL");let{bucket:r,path:n}=t,{stream:i}=await k0(r,n),s=fS.default.basename(n);return{bucket:r,path:n,filename:e.filename||s,content:i}}o(hRe,"processObjectStoreAttachment");async function xkt(e){return e.url?.startsWith("http://")||e.url?.startsWith("https://")?await Ckt(e):await hRe(e)}o(xkt,"processAutomationAttachment");var Ukt=wRe(),Fkt={bucketCreationPromises:{}},MH="/files/signed",Xl={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"},Bkt=[Xl.html,Xl.css,Xl.js,Xl.json];function rn(e){return Ukt(Ri(e)).replace(/\\/g,"/")}o(rn,"sanitizeKey");function Ri(e){return e.replace(new RegExp(Ms,"g"),ks)}o(Ri,"sanitizeBucket");function ds(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 TRe.default.Agent({rejectUnauthorized:!1});t.requestHandler=new SRe.NodeHttpHandler({httpsAgent:r})}return new U0.S3(t)}o(ds,"ObjectStore");async function hS(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=Fkt.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(hS,"createBucketIfNotExists");var qkt=o((e,t)=>{if(t)return t;let r=e.split(".").pop();return r?Xl[r.toLowerCase()]:Xl.txt},"resolveContentType"),vRe=o(async(e,t,r)=>{let n=Ri(e),i=ds(),s=await hS(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"),ARe=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=qkt(r,i),u=rn(r),c={Bucket:t,Key:u,Body:n,ContentType:a,...s??{}};return{details:await new DH.Upload({client:e,params:c}).done(),contentType:a}},"streamUploadInternal");async function jkt({bucket:e,filename:t,path:r,type:n,metadata:i,body:s,ttl:a}){let u=t.split(".").pop(),c=r?(await dS.default.open(r)).createReadStream():s,l=ds(),f=await hS(l,e);if(a&&f.created){let g=L0(e,a);await l.putBucketLifecycleConfiguration(g)}let d=n,p=d||(u?Xl[u.toLowerCase()]:Xl.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 DH.Upload({client:l,params:h}).done()}o(jkt,"upload");async function RRe({bucket:e,stream:t,filename:r,type:n,extra:i,ttl:s}){return await uc.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 vRe(e,s,a),{details:f,contentType:d}=await ARe({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(RRe,"streamUpload");async function Wkt({bucket:e,files:t,ttl:r}){return await uc.default.trace("streamUploadMany",async i=>{if(i.addTags({bucketName:e,ttl:r,fileCount:t.length}),!t.length)return[];let{bucket:s,client:a}=await vRe(e,r,i),u=t.map((l,f)=>({...l,index:f})),c=new Array(t.length);return await Be.parallelForeach(u,async l=>{let{details:f}=await ARe({client:a,bucket:s,filename:l.filename,stream:l.stream,type:l.type,extra:l.extra});c[l.index]=f},10),c})}o(Wkt,"streamUploadMany");async function ORe(e,t){return await uc.default.trace("retrieve",async r=>{r.addTags({bucketName:e,filepath:t});let n=ds(),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}),Bkt.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(ORe,"retrieve");async function*UH(e,t){let r=ds(),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(UH,"listAllObjects");async function Gkt(e,t){let r={};return await Be.parallelForeach(UH(e,t),async n=>{if(!n.Key)throw new Error("file.Key must be defined");r[n.Key]=n},5),r}o(Gkt,"getAllFiles");async function Op(e,t,r=3600){let n=ds({presigning:!0}),i={Bucket:Ri(e),Key:rn(t)},s=await(0,ERe.getSignedUrl)(n,new U0.GetObjectCommand(i),{expiresIn:r});if(L.MINIO_ENABLED){let a=new URL(s),u=a.pathname,c=a.search;return`${MH}${u}${c}`}else return s}o(Op,"getPresignedUrl");async function $kt(e,t){return await uc.default.trace("retrieveToTmp",async r=>{r.addTags({bucketName:e,filepath:t}),e=Ri(e),t=rn(t);let n=await ORe(e,t),i=(0,Zl.join)(Rp(),(0,LH.v4)());return r.addTags({outputPath:i}),n instanceof F0.default.Readable?(r.addTags({stream:!0}),await(0,pS.pipeline)(n,Jg.default.createWriteStream(i))):(r.addTags({stream:!1}),Jg.default.writeFileSync(i,n)),i})}o($kt,"retrieveToTmp");async function Vkt(e,t,r){return await uc.default.trace("retrieveDirectory",async n=>{n.addTags({bucketName:e,path:t});let i=(0,Zl.join)(Rp(),(0,LH.v4)());await dS.default.mkdir(i,{recursive:!0});let s=0;return await Be.parallelForeach(UH(e,t),async a=>{let{Key:u}=a;!u||r?.some(c=>c.test(u))||(s++,await uc.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,Zl.join)(i,...p);d.length>1&&!Jg.default.existsSync(h)&&await dS.default.mkdir(h,{recursive:!0}),await(0,pS.pipeline)(f,Jg.default.createWriteStream((0,Zl.join)(i,...d),{mode:420}))}))},5),n.addTags({numObjects:s}),i})}o(Vkt,"retrieveDirectory");async function Hkt(e,t){let r=ds();await hS(r,e);let n={Bucket:e,Key:rn(t)};return r.deleteObject(n)}o(Hkt,"deleteFile");async function Qkt(e,t){let r=ds();await hS(r,e);let n={Bucket:e,Delete:{Objects:t.map(i=>({Key:rn(i)}))}};return r.deleteObjects(n)}o(Qkt,"deleteFiles");async function IRe(e,t){e=Ri(e),t=rn(t);let r=ds(),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 IRe(e,t)}o(IRe,"deleteFolder");async function FH(e,t,r){return await uc.default.trace("uploadDirectory",async n=>{n.addTags({bucketName:e,localPath:t,bucketPath:r}),e=Ri(e);let i=await dS.default.readdir(t,{withFileTypes:!0});n.addTags({numFiles:i.length});for(let s of i){let a=rn((0,Zl.join)(r,s.name)),u=(0,Zl.join)(t,s.name);s.isDirectory()?await FH(e,u,a):await RRe({bucket:e,filename:a,stream:Jg.default.createReadStream(u)})}return i})}o(FH,"uploadDirectory");async function Kkt(e,t,r={}){t=rn(t);let n=await(0,PH.default)(e,{headers:r});if(!n.ok)throw new Error(`unexpected response ${n.statusText}`);await(0,pS.pipeline)(n.body,kH.default.createUnzip(),NH.default.extract(t))}o(Kkt,"downloadTarballDirect");async function zkt(e,t,r){t=Ri(t),r=rn(r);let n=await(0,PH.default)(e);if(!n.ok)throw new Error(`unexpected response ${n.statusText}`);let i=(0,Zl.join)(Rp(),r);return await(0,pS.pipeline)(n.body,kH.default.createUnzip(),NH.default.extract(i)),!L.isTest()&&L.SELF_HOSTED&&await FH(t,i,r),i}o(zkt,"downloadTarball");async function k0(e,t){return await uc.default.trace("getReadStream",async r=>{e=Ri(e),t=rn(t),r.addTags({bucketName:e,path:t});let n=ds(),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 Ykt(e,t){e=Ri(e),t=rn(t);let r=ds(),n={Bucket:e,Key:t};try{return await r.headObject(n)}catch{throw new Error("Unable to retrieve metadata from object")}}o(Ykt,"getObjectMetadata");async function Jkt(e,t){e=Ri(e),t=rn(t);let r=ds(),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(Jkt,"objectExists");function xH(e){let t=e.split("?")[0],r=new RegExp(`^${MH}/(?<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(xH,"extractBucketAndPath");var NRe=U(require("querystring"));var PRe=U(DRe());var q0;function yMt(){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(yMt,"getPrivateKey");var bMt=o(()=>({keypairId:L.CLOUDFRONT_PUBLIC_KEY_ID,privateKeyString:yMt(),expireTime:new Date().getTime()+1e3*60*60*24}),"getCloudfrontSignParams"),Xg=o(e=>{let t=_Mt(e);return PRe.getSignedUrl(t,bMt())},"getPresignedUrl"),_Mt=o(e=>{let t="/";return e.startsWith("/")&&(t=""),`${L.CLOUDFRONT_CDN}${t}${e}`},"getUrl");function wMt(e){return`${rn(e)}/budibase-client.js`}o(wMt,"clientLibraryPath");function EMt(e,t){return`${rn(e)}/${t}`}o(EMt,"client3rdPartyLibrary");async function SMt(e,t){return`/api/assets/${e}/client?${await LRe(t)}`}o(SMt,"clientLibraryUrl");async function LRe(e){let t,r;try{t=Ue()}finally{r={version:e}}return t&&t!==Lr&&(r.tenantId=t),NRe.default.encode(r)}o(LRe,"getClientCacheKey");async function kRe(e){return L.CLOUDFRONT_CDN?Xg(e):await Op(L.APPS_BUCKET_NAME,e)}o(kRe,"getAppFileUrl");async function TMt(e){if(e.length===0)return[];try{return await Promise.all(e.map(async t=>({...t,src:await kRe(t.src),type:t.type||"image/png"})))}catch(t){return console.error("Error enriching PWA images:",t),e}}o(TMt,"enrichPWAImages");var vMt=o(async(e,t,r)=>{let n=MRe(e,t);return L.CLOUDFRONT_CDN?(r&&(n=`${n}?etag=${r}`),Xg(n)):await Op(L.GLOBAL_BUCKET_NAME,n)},"getGlobalFileUrl"),MRe=o((e,t)=>{let r=`${e}/${t}`;return L.MULTI_TENANCY&&(r=`${Ue()}/${r}`),r},"getGlobalFileS3Key");async function AMt(e){return!e||!e.length?[]:await Promise.all(e.map(async t=>{let r=await RMt(t),n=await OMt(t);return{...t,jsUrl:r,iconUrl:n}}))}o(AMt,"enrichPluginURLs");async function RMt(e){let t=FRe(e);return URe(t)}o(RMt,"getPluginJSUrl");async function OMt(e){let t=BRe(e);if(t)return URe(t)}o(OMt,"getPluginIconUrl");async function URe(e){return L.CLOUDFRONT_CDN?Xg(e):await Op(L.PLUGIN_BUCKET_NAME,e)}o(URe,"getPluginUrl");function FRe(e){return qRe(e,"plugin.min.js")}o(FRe,"getPluginJSKey");function BRe(e){let t=e.iconUrl?"icon.svg":e.iconFileName;if(t)return qRe(e,t)}o(BRe,"getPluginIconKey");function qRe(e,t){return`${jRe(e.name)}/${t}`}o(qRe,"getPluginS3Key");function jRe(e){let t=`${e}`;return L.MULTI_TENANCY&&(t=`${Ue()}/${t}`),L.CLOUDFRONT_CDN&&(t=`plugins/${t}`),t}o(jRe,"getPluginS3Dir");var $Re="budibase.log",VRe="budibase-logs-history.txt",HRe=VH.default.join(Rp(),"systemlogs");function WRe(e){return VH.default.join(HRe,e)}o(WRe,"getFullPath");function QRe(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(QRe,"getSingleFileMaxSizeInfo");function HH(){let e=QRe(L.ROLLING_LOG_MAX_SIZE);return GRe.createStream($Re,{size:e?.size,path:HRe,maxFiles:e?.totalHistoryFiles||1,immutable:!0,history:VRe,initialRotation:!1})}o(HH,"localFileDestination");function IMt(){let e=[],t=WRe(VRe);if(gS.default.existsSync(t)){let i=gS.default.readFileSync(t,"utf-8").split(`
|
|
465
465
|
`);for(let s of i.filter(a=>a))e.push(gS.default.readFileSync(s))}return e.push(gS.default.readFileSync(WRe($Re))),Buffer.concat(e.map(n=>new Uint8Array(n)))}o(IMt,"getLogReadStream");function CMt(e){return typeof e=="object"&&e!==null&&!(e instanceof Error)}o(CMt,"isPlainObject");function xMt(e){return e instanceof Error}o(xMt,"isError");function DMt(e){return typeof e=="string"}o(DMt,"isMessage");var tf;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,KRe.default)({singleLine:!0}),level:e}:{stream:process.stdout,level:e}),L.SELF_HOSTED&&r.push({stream:HH(),level:e}),tf=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=>{DMt(y)&&(d=`${d} ${y}`.trimStart()),CMt(y)&&f.push(y),xMt(y)&&(l=y)});let p=u(),h={};h={tenantId:i(),appId:s(),automationId:a(),identityId:p?._id,identityType:p?.type,correlationId:Xq()};let m=KH.default.scope().active();m&&KH.default.inject(m.context(),zRe.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);tf?.info(l,f)},console.info=(...c)=>{let[l,f]=n(c);tf?.info(l,f)},console.warn=(...c)=>{let[l,f]=n(c);tf?.warn(l,f)},console.error=(...c)=>{let[l,f]=n(c);tf?.error(l,f)},console.trace=(...c)=>{let[l,f]=n(c);l.err||(l.err=new Error),tf?.trace(l,f)},console.debug=(...c)=>{let[l,f]=n(c);tf?.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=_q()}catch{}return c},"getAutomationId"),u=o(()=>{let c;try{c=Pu()}catch{}return c},"getIdentity")}var W0=tf;var PMt=["AccountError"];function NMt(e){return e&&e.suppressAlert}o(NMt,"isSuppressed");function Ip(e,t){t&&PMt.includes(t.name)&&NMt(t)||console.error(`bb-alert: ${e}`,t)}o(Ip,"logAlert");function LMt(e,t,r,n){e=`${e} - db: ${t} - doc: ${r} - error: `,Ip(e,n)}o(LMt,"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"}},zH=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 $s(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(),Ip(`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 kMt=100,$0,yS=class e{static{o(this,"DocWritethroughProcessor")}static get queue(){return e._queue||(e._queue=new $s("docWritethroughQueue",{jobOptions:{attempts:kMt}})),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)}},YH=class{static{o(this,"DocWritethrough")}constructor(t,r){this.db=t,this._docId=r}get docId(){return this._docId}async patch(t){await yS.queue.add({dbName:this.db.name,docId:this.docId,data:t})}};function YRe(){return $0=new yS().init(),$0}o(YRe,"init");function MMt(){return $0||YRe()}o(MMt,"getProcessor");var _S={};G(_S,{CacheKey:()=>_n,TTL:()=>Dp,bustCache:()=>ey,destroy:()=>bS,get:()=>Pp,keys:()=>V0,store:()=>cc,withCache:()=>rf,withCacheWithDynamicTTL:()=>JRe});function Ka(e){let t=Ue();return`${e}:${t}`}o(Ka,"generateTenantKey");var Cp=class{static{o(this,"BaseCache")}constructor(t=void 0){this.client=t}async getClient(){return this.client?this.client:await Oq()}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 xp=new Cp,_n={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}`},Dp=(n=>(n[n.ONE_MINUTE=600]="ONE_MINUTE",n[n.ONE_HOUR=3600]="ONE_HOUR",n[n.ONE_DAY=86400]="ONE_DAY",n))(Dp||{}),V0=o((...e)=>xp.keys(...e),"keys"),Pp=o((...e)=>xp.get(...e),"get"),cc=o((...e)=>xp.store(...e),"store"),bS=o((...e)=>xp.delete(...e),"destroy"),rf=o((...e)=>xp.withCache(...e),"withCache"),JRe=o((...e)=>xp.withCacheWithDynamicTTL(...e),"withCacheWithDynamicTTL"),ey=o((...e)=>xp.bustCache(...e),"bustCache");var ZH={};G(ZH,{createCode:()=>FMt,deleteCode:()=>qMt,getCode:()=>BMt,getExistingInvites:()=>XH,getInviteCodes:()=>ZRe,updateCode:()=>UMt});var XRe=nr.fromDays(7).toSeconds();async function UMt(e,t){await(await qd()).store(e,t,XRe)}o(UMt,"updateCode");async function FMt(e,t){let r=Nt();return await(await qd()).store(r,{email:e,info:t},XRe),r}o(FMt,"createCode");async function BMt(e){let r=await(await qd()).get(e);if(!r)throw"Invitation is not valid or has expired, please request a new one.";return r}o(BMt,"getCode");async function qMt(e){await(await qd()).delete(e)}o(qMt,"deleteCode");async function ZRe(){let r=(await(await qd()).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(ZRe,"getInviteCodes");async function XH(e){return(await ZRe()).filter(t=>e.includes(t.email))}o(XH,"getExistingInvites");var e4={};G(e4,{createCode:()=>WMt,getCode:()=>GMt,invalidateCode:()=>$Mt});var jMt=nr.fromHours(1).toSeconds();async function WMt(e,t){let r=Nt();return await(await Kw()).store(r,{userId:e,info:t},jMt),r}o(WMt,"createCode");async function GMt(e){let r=await(await Kw()).get(e);if(!r)throw new Error("Provided information is not valid, cannot reset password - please try again.");return r}o(GMt,"getCode");async function $Mt(e){await(await Kw()).delete(e)}o($Mt,"invalidateCode");var hf={};G(hf,{getUser:()=>YS,getUsers:()=>vjt,invalidateUser:()=>JS});var za={};G(za,{addSsoUser:()=>tOe,addUser:()=>YMt,getUserDoc:()=>eOe,lookupTenantId:()=>VMt,removeUser:()=>JMt,updateUserDoc:()=>HMt});function Np(){return Ei(tr.PLATFORM_INFO.name)}o(Np,"getPlatformDB");async function VMt(e){return L.MULTI_TENANCY?(await eOe(e)).tenantId:Lr}o(VMt,"lookupTenantId");async function eOe(e){return Np().get(e)}o(eOe,"getUserDoc");async function HMt(e){await Np().put(e)}o(HMt,"updateUserDoc");function QMt(e,t){return{_id:e,tenantId:t}}o(QMt,"newUserIdDoc");function KMt(e,t,r){return{_id:t,userId:e,tenantId:r}}o(KMt,"newUserEmailDoc");function zMt(e,t,r,n){return{_id:e,userId:r,email:t,tenantId:n}}o(zMt,"newUserSsoIdDoc");async function t4(e,t){let r=Np(),n;try{await r.get(e)}catch(i){if(i.status===404)n=t(),await r.put(n);else throw i}}o(t4,"addUserDoc");async function tOe(e,t,r,n){return t4(e,()=>zMt(e,t,r,n))}o(tOe,"addSsoUser");async function YMt(e,t,r,n){let i=[t4(t,()=>QMt(t,e)),t4(r,()=>KMt(t,r,e))];n&&i.push(tOe(n,r,t,e)),await Promise.all(i)}o(YMt,"addUser");async function JMt(e){let t=Np(),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(JMt,"removeUser");var rOe=U(require("node-fetch"));var wS=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";sE.setHeader(n.headers);let s={method:t,body:i?JSON.stringify(n.body):n.body,headers:n.headers,credentials:"include"};return await(0,rOe.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 nOe=new wS(L.INTERNAL_ACCOUNT_PORTAL_URL),iOe=L.SELF_HOSTED||L.DISABLE_ACCOUNT_PORTAL,Lp=o(async e=>{if(iOe)return;let t={email:e},r=await nOe.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"),ES=o(async e=>{if(iOe)return;let t={tenantId:e},r=await nOe.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:()=>wjt,bulkGetGlobalUsersById:()=>OD,bulkUpdateGlobalUsers:()=>KS,cleanseUserObject:()=>b3,creatorsInList:()=>Wp,doesUserExist:()=>mjt,getAccountHolderFromUsers:()=>RD,getAllUserIds:()=>pjt,getAllUsers:()=>hjt,getById:()=>Gp,getCreatorCount:()=>bjt,getExistingAccounts:()=>fy,getExistingPlatformUsers:()=>TCe,getExistingTenantUsers:()=>SCe,getFirstPlatformUser:()=>HS,getGlobalUserByAppPage:()=>CCe,getGlobalUserByEmail:()=>oa,getPlatformUsers:()=>SD,getUserCount:()=>yjt,hasAdminPermissions:()=>df,hasAppBuilderPermissions:()=>RCe,hasBuilderPermissions:()=>Yi,isAdmin:()=>Ya,isAdminOrBuilder:()=>ACe,isAdminOrWorkspaceBuilder:()=>TD,isBuilder:()=>hy,isCreatorAsync:()=>QS,isCreatorSync:()=>vD,isGlobalBuilder:()=>vCe,paginatedUsers:()=>DCe,removeAppBuilder:()=>Ejt,removePortalUserPermissions:()=>_jt,searchExistingEmails:()=>h3,searchGlobalUsersByApp:()=>ID,searchGlobalUsersByAppAccess:()=>y3,searchGlobalUsersByEmail:()=>xCe,validateUniqueUser:()=>AD});var n4=class extends Error{constructor(r,n){super(r);this.code=n}static{o(this,"BudibaseError")}};function i4(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(i4,"getErrorMessage");var oOe=o(e=>{let t;return e.code&&(t={code:e.code},e.getPublicError&&(t={...t,...e.getPublicError()})),t},"getPublicError"),K=class e extends n4{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 lc=class extends Error{static{o(this,"EmailUnavailableError")}constructor(t){super(`Email already in use: '${t}'`)}};var sOe=+(L.PASSWORD_MIN_LENGTH||12),aOe=+(L.PASSWORD_MAX_LENGTH||512);function uOe(e){return!e||e.length<sOe?{valid:!1,error:`Password invalid. Minimum ${sOe} characters.`}:e.length>aOe?{valid:!1,error:`Password invalid. Maximum ${aOe} characters.`}:{valid:!0}}o(uOe,"validatePassword");var ZMt=require("uuid");var eUt=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 s4(e){return e?(await(await ig()).scan(e)).map(n=>n.value):(console.trace("Cannot get sessions for undefined userId"),[])}o(s4,"getSessionsForUser");async function TS(e,t={}){try{let r=t?.reason||"unknown",n=t.sessionIds||[],i;if(n.length===0?i=(await s4(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 ig(),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(TS,"invalidateSessions");async function cOe(e){let t=await ig(),r=H0(e.userId,e.sessionId);e.lastAccessedAt=new Date().toISOString(),await t.store(r,e,eUt)}o(cOe,"updateSessionTTL");async function lOe(e,t){if(!e||!t)throw new Error(`Invalid session details - ${e} - ${t}`);let n=await(await ig()).get(H0(e,t));if(!n)throw new Error(`Session not found - ${e} - ${t}`);return n}o(lOe,"getSession");var Oe={};G(Oe,{account:()=>JIe,action:()=>XIe,ai:()=>ZIe,analytics:()=>K0,app:()=>eCe,asyncEventQueue:()=>kp,auditLog:()=>tCe,auth:()=>ED,automation:()=>rCe,backfill:()=>nCe,backfillCache:()=>Y0,backup:()=>iCe,datasource:()=>oCe,email:()=>sCe,environmentVariable:()=>aCe,group:()=>uCe,identification:()=>ia,initAsyncEvents:()=>Zqt,installation:()=>qS,layout:()=>cCe,license:()=>lCe,org:()=>fCe,plugin:()=>dCe,processors:()=>c3,publishEvent:()=>Y,query:()=>pCe,resource:()=>hCe,role:()=>VS,rowAction:()=>mCe,rows:()=>gCe,screen:()=>yCe,serve:()=>bCe,shutdown:()=>ejt,table:()=>_Ce,user:()=>Ji,view:()=>wCe,workspace:()=>ECe});var K0={};G(K0,{enabled:()=>Q0});var Q0=o(async()=>z0(),"enabled");var kp;function a4(){kp=new $s("systemEventQueue",{jobTags:e=>({"event.name":e.event})})}o(a4,"init");async function dOe(e){kp||a4();let{event:t,identity:r}=e;RX.indexOf(t)!==-1&&r.tenantId&&await kp.add(e)}o(dOe,"publishAsyncEvent");var Y0={};G(Y0,{end:()=>rUt,isAlreadySent:()=>l4,isBackfillingEvent:()=>c4,recordEvent:()=>u4,start:()=>tUt});var tUt=o(async e=>iUt({eventWhitelist:e}),"start"),u4=o(async(e,t)=>{let r=f4(e,t);await cc(r,t,void 0,{useTenancy:!1})},"recordEvent"),rUt=o(async()=>{await oUt(),await sUt()},"end"),nUt=o(async()=>Pp(_n.BACKFILL_METADATA),"getBackfillMetadata"),iUt=o(async e=>cc(_n.BACKFILL_METADATA,e),"saveBackfillMetadata"),oUt=o(async()=>{await bS(_n.BACKFILL_METADATA)},"deleteBackfillMetadata"),sUt=o(async()=>{let e=f4(),t=await V0(e);for(let r of t)await bS(r,{useTenancy:!1})},"clearEvents"),c4=o(async e=>{let r=(await nUt())?.eventWhitelist;return!!(r&&r.includes(e))},"isBackfillingEvent"),l4=o(async(e,t)=>{let r=f4(e,t);return!!await Pp(r,{useTenancy:!1})},"isAlreadySent"),aUt={"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}`},f4=o((e,t)=>{let r,n=Ue();if(e){r=`${_n.EVENTS}:${n}:${e}`;let i=aUt[e],s=i?i(t):void 0;s&&(r=`${r}:${s}`)}else r=`${_n.EVENTS}:${n}:*`;return r},"getEventKey");var c3={};G(c3,{analyticsProcessor:()=>QIe,init:()=>EBt,processors:()=>fc});var VIe=U(a3());var dBt=o(e=>e==="served:builder"||e==="served:app:preview"||e==="served:app","isRateLimited"),pBt=o(e=>e==="served:app:preview"||e==="served:app","isPerApp");var WIe={"served:app":"calendarDay","served:app:preview":"calendarDay","served:builder":"calendarDay"},GIe=o(async e=>{if(!dBt(e))return!1;let t=await hBt(e);if(t){let r=new Date(t.timestamp);switch(WIe[e]){case"calendarDay":return r.setDate(r.getDate()+1),r.setHours(0,0,0,0),Date.now()>r.getTime()?(await jIe(e,{timestamp:Date.now()}),!1):!0}}else return await jIe(e,{timestamp:Date.now()}),!1},"limited"),$Ie=o(e=>{let t=`${_n.EVENTS_RATE_LIMIT}:${e}`;return pBt(e)&&(t=t+":"+Si()),t},"eventKey"),hBt=o(async e=>{let t=$Ie(e);return await Pp(t)},"readEvent"),jIe=o(async(e,t)=>{let r=$Ie(e),n=WIe[e],i;switch(n){case"calendarDay":i=86400}await cc(r,t,i)},"recordEvent");var gBt=["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"],MS=class{static{o(this,"PosthogProcessor")}constructor(t){if(!t)throw new Error("Posthog token is not defined");this.posthog=new VIe.PostHog(t)}async processEvent(t,r,n,i){if(gBt.includes(t)||await GIe(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 HIe=MS;var yBt=["installation:version:upgraded","installation:version:downgraded"],bBt=["installation","tenant"],US=class{static{o(this,"AnalyticsProcessor")}constructor(){L.POSTHOG_TOKEN&&!L.isTest()&&(this.posthog=new HIe(L.POSTHOG_TOKEN))}async processEvent(t,r,n,i){!yBt.includes(t)&&!await Q0()||this.posthog&&await this.posthog.processEvent(t,r,n,i)}async identify(t,r){!bBt.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 u3=L.SELF_HOSTED&&!L.isDev(),FS=class{static{o(this,"LoggingProcessor")}async processEvent(t,r,n){u3||console.log(`[audit] [identityType=${r.type}] ${t}`,n)}async identify(t){u3||console.log("[audit] identified",t)}async identifyGroup(t){u3||console.log("[audit] group identified",t)}async shutdown(){}};var ly=class e{static{o(this,"AuditLogsProcessor")}static{this.auditLogsEnabled=!1}static init(t){e.auditLogsEnabled=!0;let r=t;return e.auditLogQueue=new $s("auditLogQueue",{jobTags:n=>({"event.name":n.event})}),e.auditLogQueue.process(async n=>{await Wi(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&&$q(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 BS=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 QIe=new US,_Bt=new FS,wBt=new ly;function EBt(e){return ly.init(e)}o(EBt,"init");var fc=new BS([QIe,_Bt,wBt]);var ff={};G(ff,{checkInstallVersion:()=>vBt,getInstall:()=>jS,getInstallFromDB:()=>f3});var l3=U(require("semver"));var jS=o(async()=>rf(_n.INSTALLATION,86400,f3,{useTenancy:!1}),"getInstall");async function SBt(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 f3();throw r}}o(SBt,"createInstallDoc");var f3=o(async()=>Io(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 SBt(e);else throw r}return t}),"getInstallFromDB"),TBt=o(async e=>{try{await Io(tr.PLATFORM_INFO.name,async t=>{let r=await jS();r.version=e,await t.put(r),await ey(_n.INSTALLATION)})}catch(t){if(t.status===409)return!1;throw t}return!0},"updateVersion"),vBt=o(async()=>{let e=await jS(),t=e.version,r=L.VERSION;try{if(t!==r){let n=l3.default.gt(r,t),i=l3.default.lt(r,t);await TBt(r)&&(await H_({_id:e.installId,type:"installation"},async()=>{n?await qS.upgraded(t,r):i&&await qS.downgraded(t,r)}),await ia.identifyInstallationGroup(e.installId))}}catch(n){n?.message?.includes("Invalid Version")?Ip(`Invalid version "${r}" - is it semver?`):Ip("Failed to retrieve version",n)}},"checkInstallVersion");var ABt=o(async()=>{let e=w1(),t=$S(),r;if(e?r=e.type:r="tenant",r==="installation"){let n=await jp(),i=WS();return{id:KIe(n,r),hosting:i,type:r,installationId:n,environment:t}}else if(r==="tenant"){let n=await jp(),i=await wD(Ue()),s=WS();return{id:KIe(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 jp(),a=n.account,u;return a?u=a.hosting:u=WS(),{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"),RBt=o(async(e,t)=>{let r=e,n="installation",i=WS(),s=L.VERSION,a=$S(),u={id:r,type:n,hosting:i,version:s,environment:a};await d3(u,t),await GS({...u,id:`$${n}_${r}`},t)},"identifyInstallationGroup"),OBt=o(async(e,t,r,n=L.VERSION)=>{let i=await wD(e),s="tenant",a=await jp(),u=$S(),c={id:i,type:s,hosting:t,environment:u,installationId:a,createdAt:r,createdVersion:n};await d3(c,r),await GS({...c,id:`$${s}_${i}`},r)},"identifyTenantGroup"),IBt=o(async(e,t,r)=>{let n=e._id,i=await wD(e.tenantId),s="user",a=Yi(e),u=df(e),c;Qh(e)&&(c=e.providerType);let f=(await fy([e.email])).length>0,d=!!t&&f&&t.verified,p=await jp(),h=t?t.hosting:WS(),m=$S();await GS({id:n,type:s,hosting:h,installationId:p,tenantId:i,verified:d,accountHolder:f,providerType:c,builder:a,admin:u,environment:m},r)},"identifyUser"),CBt=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 jp(),l=$S();if(WA(e)){let d=await oa(e.email);d?._id&&(t=d._id)}await GS({id:t,type:n,hosting:u,installationId:c,tenantId:r,providerType:i,verified:s,accountHolder:a,environment:l})},"identifyAccount"),GS=o(async(e,t)=>{await fc.identify(e,t)},"identify"),d3=o(async(e,t)=>{await fc.identifyGroup(e,t)},"identifyGroup"),$S=o(()=>L.isDev()?"development":L.DEPLOYMENT_ENVIRONMENT,"getDeploymentEnvironment"),WS=o(()=>L.SELF_HOSTED?"self":"cloud","getHostingFromEnv"),jp=o(async()=>xBt()?"account-portal":(await jS()).installId,"getInstallationId"),wD=o(async e=>L.SELF_HOSTED?YIe(e):e,"getEventTenantId"),YIe=o(async e=>Wi(e,()=>rf(_n.UNIQUE_TENANT_ID,86400,async()=>{let t=gt(),r=await dy(),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"),xBt=o(()=>L.SERVICE==="account-portal","isAccountPortal"),KIe=o((e,t)=>t==="installation"||t==="tenant"?`$${t}_${e}`:e,"formatDistinctId"),ia={getCurrentIdentity:ABt,identifyInstallationGroup:RBt,identifyTenantGroup:OBt,identifyUser:IBt,identifyAccount:CBt,identify:GS,identifyGroup:d3,getInstallationId:jp,getUniqueTenantId:YIe};var Y=o(async(e,t,r,n)=>{let i=n||await ia.getCurrentIdentity();if(!(n?!1:await c4(e))){await dOe({event:e,identity:i,properties:t,timestamp:r}),await fc.processEvent(e,i,t,r);return}await l4(e,t)||(await fc.processEvent(e,i,t,r),await u4(e,t))},"publishEvent");async function DBt(e,t){let r={tenantId:e.tenantId};await Y("account:created",r,void 0,t)}o(DBt,"created");async function PBt(e){let t={tenantId:e.tenantId};await Y("account:deleted",t)}o(PBt,"deleted");async function NBt(e){let t={tenantId:e.tenantId};await Y("account:verified",t)}o(NBt,"verified");var JIe={created:DBt,deleted:PBt,verified:NBt};async function LBt(e,t){console.info("action:automation_step:executed",`disabled. Action step ${e.stepId} not published at ${t}`)}o(LBt,"automationStepExecuted");async function kBt(e,t){console.info("action:automation_step:executed",`disabled. Action type ${e.type} not published at ${t}`)}o(kBt,"crudExecuted");async function MBt(e,t){console.info("action:automation_step:executed",`disabled. Execution for ai agent ${e.agentId} not published at ${t}`)}o(MBt,"aiAgentExecuted");var XIe={aiAgentExecuted:MBt,automationStepExecuted:LBt,crudExecuted:kBt};async function UBt(e){let t={};await Y("ai:config:created",t,e)}o(UBt,"AIConfigCreated");async function FBt(){let e={};await Y("ai:config:updated",e)}o(FBt,"AIConfigUpdated");var ZIe={AIConfigCreated:UBt,AIConfigUpdated:FBt};var BBt=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 qBt(e){let t={appId:e.appId,version:e.version,audited:{name:e.name}};await Y("app:updated",t)}o(qBt,"updated");async function jBt(e){let t={appId:e.appId,audited:{name:e.name}};await Y("app:deleted",t)}o(jBt,"deleted");async function WBt(e,t){let r={appId:e.appId,audited:{name:e.name}};await Y("app:published",r,t)}o(WBt,"published");async function GBt(e){let t={appId:e.appId,audited:{name:e.name}};await Y("app:unpublished",t)}o(GBt,"unpublished");async function $Bt(e){let t={appId:e.appId,audited:{name:e.name}};await Y("app:file:imported",t)}o($Bt,"fileImported");async function VBt(e,t){let r={duplicateAppId:t,appId:e.appId,audited:{name:e.name}};await Y("app:duplicated",r)}o(VBt,"duplicated");async function HBt(e,t){let r={appId:e.appId,templateKey:t,audited:{name:e.name}};await Y("app:template:imported",r)}o(HBt,"templateImported");async function QBt(e,t,r){let n={appId:e.appId,currentVersion:t,updatedToVersion:r,audited:{name:e.name}};await Y("app:version:updated",n)}o(QBt,"versionUpdated");async function KBt(e,t,r){let n={appId:e.appId,currentVersion:t,revertedToVersion:r,audited:{name:e.name}};await Y("app:version:reverted",n)}o(KBt,"versionReverted");async function zBt(e){let t={appId:e.appId,audited:{name:e.name}};await Y("app:reverted",t)}o(zBt,"reverted");async function YBt(e){let t={appId:e.appId,audited:{name:e.name}};await Y("app:exported",t)}o(YBt,"exported");var eCe={created:BBt,updated:qBt,deleted:jBt,published:WBt,unpublished:GBt,fileImported:$Bt,duplicated:VBt,templateImported:HBt,versionUpdated:QBt,versionReverted:KBt,reverted:zBt,exported:YBt};async function JBt(e){let t={filters:e};await Y("audit_log:filtered",t)}o(JBt,"filtered");async function XBt(e){let t={filters:e};await Y("audit_log:downloaded",t)}o(XBt,"downloaded");var tCe={filtered:JBt,downloaded:XBt};async function ZBt(e,t){let n={userId:(await ia.getCurrentIdentity()).id,source:e,audited:{email:t}};await Y("auth:login",n)}o(ZBt,"login");async function e2t(e){let r={userId:(await ia.getCurrentIdentity()).id,audited:{email:e}};await Y("auth:logout",r)}o(e2t,"logout");async function t2t(e,t){let r={type:e};await Y("auth:sso:created",r,t)}o(t2t,"SSOCreated");async function r2t(e){let t={type:e};await Y("auth:sso:updated",t)}o(r2t,"SSOUpdated");async function n2t(e,t){let r={type:e};await Y("auth:sso:activated",r,t)}o(n2t,"SSOActivated");async function i2t(e){let t={type:e};await Y("auth:sso:deactivated",t)}o(i2t,"SSODeactivated");var ED={login:ZBt,logout:e2t,SSOCreated:t2t,SSOUpdated:r2t,SSOActivated:n2t,SSODeactivated:i2t};async function o2t(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(o2t,"created");async function s2t(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(s2t,"triggerUpdated");async function a2t(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(a2t,"deleted");async function u2t(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(u2t,"tested");var c2t=o(async(e,t)=>{let r={count:e};await Y("automations:run",r,t)},"run");async function l2t(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(l2t,"stepCreated");async function f2t(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(f2t,"stepDeleted");var rCe={created:o2t,triggerUpdated:s2t,deleted:a2t,tested:u2t,run:c2t,stepCreated:l2t,stepDeleted:f2t};var py=!L.SELF_HOSTED&&!L.isDev();async function d2t(e){py||await Y("app:backfill:succeeded",e)}o(d2t,"appSucceeded");async function p2t(e){if(py)return;let t={error:JSON.stringify(e,Object.getOwnPropertyNames(e))};await Y("app:backfill:failed",t)}o(p2t,"appFailed");async function h2t(e){py||await Y("tenant:backfill:succeeded",e)}o(h2t,"tenantSucceeded");async function m2t(e){if(py)return;let t={error:JSON.stringify(e,Object.getOwnPropertyNames(e))};await Y("tenant:backfill:failed",t)}o(m2t,"tenantFailed");async function g2t(){if(py)return;let e={};await Y("installation:backfill:succeeded",e)}o(g2t,"installationSucceeded");async function y2t(e){if(py)return;let t={error:JSON.stringify(e,Object.getOwnPropertyNames(e))};await Y("installation:backfill:failed",t)}o(y2t,"installationFailed");var nCe={appSucceeded:d2t,appFailed:p2t,tenantSucceeded:h2t,tenantFailed:m2t,installationSucceeded:g2t,installationFailed:y2t};async function b2t(e){let t={appId:e.appId,restoreId:e._id,backupCreatedAt:e.timestamp,name:e.name};await Y("app:backup:restored",t)}o(b2t,"appBackupRestored");async function _2t(e,t,r,n,i){let s={appId:e,backupId:t,type:r,trigger:n,name:i};await Y("app:backup:triggered",s)}o(_2t,"appBackupTriggered");var iCe={appBackupRestored:b2t,appBackupTriggered:_2t};function p3(e){return!Object.values(un).includes(e.source)}o(p3,"isCustom");async function w2t(e,t){let r={datasourceId:e._id,source:e.source,custom:p3(e)};await Y("datasource:created",r,t)}o(w2t,"created");async function E2t(e){let t={datasourceId:e._id,source:e.source,custom:p3(e)};await Y("datasource:updated",t)}o(E2t,"updated");async function S2t(e){let t={datasourceId:e._id,source:e.source,custom:p3(e)};await Y("datasource:deleted",t)}o(S2t,"deleted");var oCe={created:w2t,updated:E2t,deleted:S2t};async function T2t(e){let t={};await Y("email:smtp:created",t,e)}o(T2t,"SMTPCreated");async function v2t(){let e={};await Y("email:smtp:updated",e)}o(v2t,"SMTPUpdated");var sCe={SMTPCreated:T2t,SMTPUpdated:v2t};async function A2t(e,t){let r={name:e,environments:t};await Y("environment_variable:created",r)}o(A2t,"created");async function R2t(e){let t={name:e};await Y("environment_variable:deleted",t)}o(R2t,"deleted");async function O2t(e){let t={userId:e};await Y("environment_variable:upgrade_panel_opened",t)}o(O2t,"upgradePanelOpened");var aCe={created:A2t,deleted:R2t,upgradePanelOpened:O2t};async function I2t(e,t){let r={groupId:e._id,viaScim:Gs(),audited:{name:e.name}};await Y("user_group:created",r,t)}o(I2t,"created");async function C2t(e){let t={groupId:e._id,viaScim:Gs(),audited:{name:e.name}};await Y("user_group:updated",t)}o(C2t,"updated");async function x2t(e){let t={groupId:e._id,viaScim:Gs(),audited:{name:e.name}};await Y("user_group:deleted",t)}o(x2t,"deleted");async function D2t(e,t,r){let n={count:e,groupId:t._id,userIds:r,viaScim:Gs(),audited:{name:t.name}};await Y("user_group:user_added",n)}o(D2t,"usersAdded");async function P2t(e,t,r){let n={count:e,groupId:t._id,userIds:r,viaScim:Gs(),audited:{name:t.name}};await Y("user_group:users_deleted",n)}o(P2t,"usersDeleted");async function N2t(e){let t={groupId:e,onboarding:!0};await Y("user_group:onboarding_added",t)}o(N2t,"createdOnboarding");async function L2t(e){let t={permissions:e.roles,groupId:e._id,audited:{name:e.name}};await Y("user_group:permissions_edited",t)}o(L2t,"permissionsEdited");var uCe={created:I2t,updated:C2t,deleted:x2t,usersAdded:D2t,usersDeleted:P2t,createdOnboarding:N2t,permissionsEdited:L2t};async function k2t(e){let t={currentVersion:e};await Y("installation:version:checked",t)}o(k2t,"versionChecked");async function M2t(e,t){let r={from:e,to:t};await Y("installation:version:upgraded",r)}o(M2t,"upgraded");async function U2t(e,t){let r={from:e,to:t};await Y("installation:version:downgraded",r)}o(U2t,"downgraded");async function F2t(){let e={};await Y("installation:firstStartup",e)}o(F2t,"firstStartup");var qS={versionChecked:k2t,upgraded:M2t,downgraded:U2t,firstStartup:F2t};async function B2t(e,t){let r={layoutId:e._id};await Y("layout:created",r,t)}o(B2t,"created");async function q2t(e){let t={layoutId:e};await Y("layout:deleted",t)}o(q2t,"deleted");var cCe={created:B2t,deleted:q2t};async function j2t(e,t){let r={accountId:e.accountId,...t};await Y("license:plan:changed",r)}o(j2t,"planChanged");async function W2t(e){let t={accountId:e.accountId};await Y("license:activated",t)}o(W2t,"activated");async function G2t(e){let t={accountId:e.accountId};await Y("license:checkout:opened",t)}o(G2t,"checkoutOpened");async function $2t(e){let t={accountId:e.accountId};await Y("license:checkout:success",t)}o($2t,"checkoutSuccess");async function V2t(e){let t={accountId:e.accountId};await Y("license:portal:opened",t)}o(V2t,"portalOpened");async function H2t(e){let t={accountId:e.accountId};await Y("license:payment:failed",t)}o(H2t,"paymentFailed");async function Q2t(e){let t={accountId:e.accountId};await Y("license:payment:recovered",t)}o(Q2t,"paymentRecovered");var lCe={planChanged:j2t,activated:W2t,checkoutOpened:G2t,checkoutSuccess:$2t,portalOpened:V2t,paymentFailed:H2t,paymentRecovered:Q2t};async function K2t(e){let t={};await Y("org:info:name:updated",t,e)}o(K2t,"nameUpdated");async function z2t(e){let t={};await Y("org:info:logo:updated",t,e)}o(z2t,"logoUpdated");async function Y2t(e){let t={};await Y("org:platformurl:updated",t,e)}o(Y2t,"platformURLUpdated");async function J2t(){let e={};await Y("analytics:opt:out",e)}o(J2t,"analyticsOptOut");async function X2t(){let e={};await Y("analytics:opt:out",e)}o(X2t,"analyticsOptIn");var fCe={nameUpdated:K2t,logoUpdated:z2t,platformURLUpdated:Y2t,analyticsOptOut:J2t,analyticsOptIn:X2t};async function Z2t(e){let t={type:e.schema.type,name:e.name,description:e.description,version:e.version};await Y("plugin:init",t)}o(Z2t,"init");async function eqt(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(eqt,"imported");async function tqt(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(tqt,"deleted");var dCe={init:Z2t,imported:eqt,deleted:tqt};var rqt=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"),nqt=o(async(e,t)=>{let r={queryId:t._id,datasourceId:e._id,source:e.source,queryVerb:t.queryVerb};await Y("query:updated",r)},"updated"),iqt=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"),oqt=o(async(e,t,r)=>{let n={datasourceId:e._id,source:e.source,count:r,importSource:t};await Y("query:import",n)},"imported"),sqt=o(async(e,t)=>{let r={count:e};await Y("queries:run",r,t)},"run"),aqt=o(async(e,t)=>{let r={queryId:t.queryId,datasourceId:e._id,source:e.source,queryVerb:t.queryVerb};await Y("query:previewed",r)},"previewed"),pCe={created:rqt,updated:nqt,deleted:iqt,imported:oqt,run:sqt,previewed:aqt};async function uqt({resource:e,fromWorkspace:t,toWorkspace:r},n){let i={resource:e,fromWorkspace:t,toWorkspace:r};await Y("resource:copied_to_workspace",i,n)}o(uqt,"duplicatedToWorkspace");var hCe={duplicatedToWorkspace:uqt};async function cqt(e,t){let r={roleId:e._id,permissionId:e.permissionId,inherits:e.inherits};await Y("role:created",r,t)}o(cqt,"created");async function lqt(e){let t={roleId:e._id,permissionId:e.permissionId,inherits:e.inherits};await Y("role:updated",t)}o(lqt,"updated");async function fqt(e){let t={roleId:e._id,permissionId:e.permissionId,inherits:e.inherits};await Y("role:deleted",t)}o(fqt,"deleted");async function dqt(e,t,r){let n={userId:e._id,roleId:t};await Y("role:assigned",n,r)}o(dqt,"assigned");async function pqt(e,t){let r={userId:e._id,roleId:t};await Y("role:unassigned",r)}o(pqt,"unassigned");var VS={created:cqt,updated:lqt,deleted:fqt,assigned:dqt,unassigned:pqt};async function hqt(e,t){await Y("row_action:created",e,t)}o(hqt,"created");var mCe={created:hqt};var mqt=o(async(e,t)=>{let r={count:e};await Y("rows:created",r,t)},"created"),gqt=o(async(e,t)=>{let r={tableId:e._id,count:t};await Y("rows:imported",r)},"imported"),gCe={created:mqt,imported:gqt};async function yqt(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(yqt,"created");async function bqt(e){let t={layoutId:e.layoutId,screenId:e._id,roleId:e.routing.roleId,audited:{name:e.routing?.route}};await Y("screen:deleted",t)}o(bqt,"deleted");var yCe={created:yqt,deleted:bqt};async function _qt(e){let t={timezone:e};await Y("served:builder",t)}o(_qt,"servedBuilder");async function wqt(e,t,r){let n={appVersion:e.version,timezone:t,embed:r===!0};await Y("served:app",n)}o(wqt,"servedApp");async function Eqt(e,t){let r={appId:e.appId,appVersion:e.version,timezone:t};await Y("served:app:preview",r)}o(Eqt,"servedAppPreview");var bCe={servedBuilder:_qt,servedApp:wqt,servedAppPreview:Eqt};async function Sqt(e,t){let r={tableId:e._id,audited:{name:e.name}};await Y("table:created",r,t)}o(Sqt,"created");async function Tqt(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(Tqt,"updated");async function vqt(e,t){let r={tableId:e._id,audited:{name:e.name},appId:t};await Y("table:deleted",r)}o(vqt,"deleted");async function Aqt(e,t){let r={tableId:e._id,format:t,audited:{name:e.name}};await Y("table:exported",r)}o(Aqt,"exported");async function Rqt(e){let t={tableId:e._id,audited:{name:e.name}};await Y("table:imported",t)}o(Rqt,"imported");var _Ce={created:Sqt,updated:Tqt,deleted:vqt,exported:Aqt,imported:Rqt};async function Oqt(e,t){let r={userId:e._id,viaScim:Gs(),audited:{email:e.email}};await Y("user:created",r,t)}o(Oqt,"created");async function Iqt(e){let t={userId:e._id,viaScim:Gs(),audited:{email:e.email}};await Y("user:updated",t)}o(Iqt,"updated");async function Cqt(e){let t={userId:e._id,viaScim:Gs(),audited:{email:e.email}};await Y("user:deleted",t)}o(Cqt,"deleted");async function xqt(e,t){let r={userId:e._id,audited:{email:e.email}};await Y("user:admin:assigned",r,t)}o(xqt,"permissionAdminAssigned");async function Dqt(e){let t={userId:e._id,audited:{email:e.email}};await Y("user:admin:removed",t)}o(Dqt,"permissionAdminRemoved");async function Pqt(e,t){let r={userId:e._id,audited:{email:e.email}};await Y("user:builder:assigned",r,t)}o(Pqt,"permissionBuilderAssigned");async function Nqt(e){let t={userId:e._id,audited:{email:e.email}};await Y("user:builder:removed",t)}o(Nqt,"permissionBuilderRemoved");async function Lqt(e){let t={audited:{email:e}};await Y("user:invited",t)}o(Lqt,"invited");async function kqt(e){let t={userId:e._id,audited:{email:e.email}};await Y("user:invite:accepted",t)}o(kqt,"inviteAccepted");async function Mqt(e){let t={userId:e._id,audited:{email:e.email}};await Y("user:password:force:reset",t)}o(Mqt,"passwordForceReset");async function Uqt(e){let t={userId:e._id,audited:{email:e.email}};await Y("user:password:updated",t)}o(Uqt,"passwordUpdated");async function Fqt(e){let t={userId:e._id,audited:{email:e.email}};await Y("user:password:reset:requested",t)}o(Fqt,"passwordResetRequested");async function Bqt(e){let t={userId:e._id,audited:{email:e.email}};await Y("user:password:reset",t)}o(Bqt,"passwordReset");async function qqt(e){let t={users:e};await Y("user:data:collaboration",t)}o(qqt,"dataCollaboration");var Ji={created:Oqt,updated:Iqt,deleted:Cqt,permissionAdminAssigned:xqt,permissionAdminRemoved:Dqt,permissionBuilderAssigned:Pqt,permissionBuilderRemoved:Nqt,invited:Lqt,inviteAccepted:kqt,passwordForceReset:Mqt,passwordUpdated:Uqt,passwordResetRequested:Fqt,passwordReset:Bqt,dataCollaboration:qqt};async function jqt(e,t){let r={name:e.name,type:e.type,tableId:e.tableId};await Y("view:created",r,t)}o(jqt,"created");async function Wqt(e){let t={tableId:e.tableId};await Y("view:updated",t)}o(Wqt,"updated");async function Gqt(e,t){let r={...de.views.isV2(e)?{id:e.id,tableId:e.tableId,appId:t}:{}};await Y("view:deleted",r)}o(Gqt,"deleted");async function $qt(e,t){let r={tableId:e._id,format:t};await Y("view:exported",r)}o($qt,"exported");async function Vqt({tableId:e,filterGroups:t},r){let n={tableId:e,filterGroups:t};await Y("view:filter:created",n,r)}o(Vqt,"filterCreated");async function Hqt({tableId:e,filterGroups:t}){let r={tableId:e,filterGroups:t};await Y("view:filter:updated",r)}o(Hqt,"filterUpdated");async function Qqt(e){let t={tableId:e.tableId};await Y("view:filter:deleted",t)}o(Qqt,"filterDeleted");async function Kqt({tableId:e,calculationType:t},r){let n={tableId:e,calculation:t};await Y("view:calculation:created",n,r)}o(Kqt,"calculationCreated");async function zqt(e){let t={tableId:e.tableId,calculation:e.calculation};await Y("view:calculation:updated",t)}o(zqt,"calculationUpdated");async function Yqt(e){let t={tableId:e.tableId,calculation:e.calculation};await Y("view:calculation:deleted",t)}o(Yqt,"calculationDeleted");async function Jqt(e,t){let r={tableId:e};await Y("view:join:created",r,t)}o(Jqt,"viewJoinCreated");var wCe={created:jqt,updated:Wqt,deleted:Gqt,exported:$qt,filterCreated:Vqt,filterUpdated:Hqt,filterDeleted:Qqt,calculationCreated:Kqt,calculationUpdated:zqt,calculationDeleted:Yqt,viewJoinCreated:Jqt};async function Xqt(e,t){let r={workspaceAppId:e._id,audited:{name:e.name},appId:t};await Y("workspace_app:deleted",r)}o(Xqt,"deleted");var ECe={deleted:Xqt};function Zqt(){}o(Zqt,"initAsyncEvents");var ejt=o(async()=>{await fc.shutdown(),console.log("Events shutdown")},"shutdown");var pf={};G(pf,{creatorsInList:()=>Wp,getAccountHolderFromUsers:()=>RD,hasAdminPermissions:()=>df,hasAppBuilderPermissions:()=>RCe,hasBuilderPermissions:()=>Yi,isAdmin:()=>Ya,isAdminOrBuilder:()=>ACe,isAdminOrWorkspaceBuilder:()=>TD,isBuilder:()=>hy,isCreatorAsync:()=>QS,isCreatorSync:()=>vD,isGlobalBuilder:()=>vCe,validateUniqueUser:()=>AD});async function h3(e){let t=[],r=await SCe(e);t.push(...r.map(a=>a.email));let n=await TCe(e);t.push(...n.map(a=>a._id));let i=await fy(e);t.push(...i.map(a=>a.email));let s=await XH(e);return t.push(...s.map(a=>a.email)),[...new Set(t.map(a=>a.toLowerCase()))]}o(h3,"searchExistingEmails");async function SD(e){return await Zw("platform_users_lowercase_2",{keys:[e.toLowerCase()],include_docs:!0})}o(SD,"getPlatformUsers");async function HS(e){return(await SD(e))[0]??null}o(HS,"getFirstPlatformUser");async function SCe(e){let r={keys:e.map(i=>i.toLowerCase()),include_docs:!0},n={arrayResponse:!0};return await Gu("by_email2",r,void 0,n)}o(SCe,"getExistingTenantUsers");async function TCe(e){let r={keys:e.map(n=>n.toLowerCase()),include_docs:!0};return await Zw("platform_users_lowercase_2",r)}o(TCe,"getExistingPlatformUsers");async function fy(e){let r={keys:e.map(n=>n.toLowerCase()),include_docs:!0};return await Zw("account_by_email",r)}o(fy,"getExistingAccounts");var hy=ln.users.isBuilder,Ya=ln.users.isAdmin,vCe=ln.users.isGlobalBuilder,ACe=ln.users.isAdminOrBuilder,df=ln.users.hasAdminPermissions,Yi=ln.users.hasBuilderPermissions,RCe=ln.users.hasAppBuilderPermissions,TD=ln.users.isAdminOrWorkspaceBuilder;async function Wp(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(Wp,"creatorsInList");async function QS(e){let t=[];return e.userGroups&&(t=await gt().getMultiple(e.userGroups)),vD(e,t)}o(QS,"isCreatorAsync");function vD(e,t){let r=ln.users.isCreator(e);return!r&&e?tjt(e,t):r}o(vD,"isCreatorSync");function tjt(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(tjt,"isCreatorByGroupMembership");async function AD(e,t){if(L.MULTI_TENANCY){let r=await HS(e);if(r!=null&&r.tenantId!==t)throw new lc(e)}if(!L.SELF_HOSTED&&!L.DISABLE_ACCOUNT_PORTAL){let r=await Lp(e);if(r&&r.verified&&r.tenantId!==t)throw new lc(e)}}o(AD,"validateUniqueUser");async function RD(e){if(!L.SELF_HOSTED&&!L.DISABLE_ACCOUNT_PORTAL){let t=await fy(e.map(r=>r.email));return e.find(r=>t.map(n=>n.email).includes(r.email))}}o(RD,"getAccountHolderFromUsers");var m3=o(async e=>{await Ji.deleted(e),Yi(e)&&await Ji.permissionBuilderRemoved(e),df(e)&&await Ji.permissionAdminRemoved(e)},"handleDeleteEvents"),rjt=o(async(e,t,r)=>{for(let[n,i]of Object.entries(t))(!r||r[n]!==i)&&await VS.assigned(e,i)},"assignAppRoleEvents"),njt=o(async(e,t,r)=>{if(r)for(let[n,i]of Object.entries(r))(!t||t[n]!==i)&&await VS.unassigned(e,i)},"unassignAppRoleEvents"),ijt=o(async(e,t)=>{let r=e.roles,n=t?.roles;await rjt(e,r,n),await njt(e,r,n)},"handleAppRoleEvents"),g3=o(async(e,t)=>{let r=Ue(),n;!L.SELF_HOSTED&&!L.DISABLE_ACCOUNT_PORTAL&&(n=await ES(r)),await ia.identifyUser(e,n),t?(await Ji.updated(e),sjt(e,t)&&await Ji.permissionBuilderRemoved(e),ujt(e,t)&&await Ji.permissionAdminRemoved(e),!t.forceResetPassword&&e.forceResetPassword&&e.password&&await Ji.passwordForceReset(e),e.password!==t.password&&await Ji.passwordUpdated(e)):await Ji.created(e),ojt(e,t)&&await Ji.permissionBuilderAssigned(e),ajt(e,t)&&await Ji.permissionAdminAssigned(e),await ijt(e,t)},"handleSaveEvents"),ojt=o((e,t)=>OCe(e,t,Yi),"isAddingBuilder"),sjt=o((e,t)=>ICe(e,t,Yi),"isRemovingBuilder"),ajt=o((e,t)=>OCe(e,t,df),"isAddingAdmin"),ujt=o((e,t)=>ICe(e,t,df),"isRemovingAdmin"),OCe=o((e,t,r)=>!(!r(e)||t&&r(t)),"isAddingPermission"),ICe=o((e,t,r)=>!(r(e)||!t||!r(t)),"isRemovingPermission");var fjt=o(async e=>{let t=e._id;await za.removeUser(e),await m3(e),await hf.invalidateUser(t),await TS(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()||Qh(t)?!0:(r||(r=await ES(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=uOe(a);if(!d.valid)throw new K(d.error,400)}c=r.hashPassword?await b1(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||og();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(jd(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 y3(t.appId,{limit:t.limit||50})}static async getUserByEmail(t){return oa(t)}static async getUser(t){let r=await Gp(t);return r&&delete r.password,r}static async bulkGet(t){return await OD(t)}static async bulkUpdate(t){return await KS(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 Gp(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 oa(s),l&&l._id!==a))throw new lc(s);let f=1,d=0;if((r.isAccountHolder||l)&&(f=0,d=1),l){let[g,y]=await Wp([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=b3(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 g3(g,l),l&&g.email!==l.email&&await za.removeUser({email:l.email}),await za.addUser(n,g._id,g.email,g.ssoId),await hf.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 h3(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 QS(p)&&a.push(p)}let f=await ES(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 KS(p);for(let m of p)await za.addUser(n,m._id,m.email),await g3(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 KS(u),f=(await Wp(a)).filter(h=>h).length,d=[];for(let h of a){let g=(await HS(h._id)).ssoId;g&&(await SD(g)).filter(b=>b.ssoId==null).forEach(b=>{d.push({...b,_deleted:!0})}),await fjt(h)}await Np().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 Lp(a))throw n.userId===Pu()._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 QS(n)?1:0;await e.quotas.removeUsers(1,s),await m3(n),await hf.invalidateUser(i),await TS(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 ey(_n.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 zS(e){return Array.isArray(e)?e.map(t=>{if(t)return delete t.password,t}):e&&(delete e.password,e)}o(zS,"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=zS(n)),n}o(OD,"bulkGetGlobalUsersById");async function pjt(){let e=gt(),t=`us${ce}`;return(await e.allDocs({startkey:t,endkey:`${t}${Mn}`})).rows.map(n=>n.id)}o(pjt,"getAllUserIds");async function hjt(){let e=gt(),t=`us${ce}`;return(await e.allDocs({startkey:t,endkey:`${t}${Mn}`,include_docs:!0})).rows.map(n=>n.doc)}o(hjt,"getAllUsers");async function KS(e){return await gt().bulkDocs(e)}o(KS,"bulkUpdateGlobalUsers");async function Gp(e,t){let n=await gt().get(e);return t?.cleanup&&(n=zS(n)),n}o(Gp,"getById");async function oa(e,t){if(e==null)throw"Must supply an email address to view";let r=await Gu("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=zS(n)),n}o(oa,"getGlobalUserByEmail");async function mjt(e){try{let t=await oa(e);if(Array.isArray(t)||t!=null)return!0}catch{return!1}return!1}o(mjt,"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 Gu("by_app",n);i||(i=[]);let s=Array.isArray(i)?i:[i];return r?.cleanup&&(s=zS(s)),s}o(ID,"searchGlobalUsersByApp");async function y3(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(y3,"searchGlobalUsersByAppAccess");function CCe(e,t){if(t)return yI(Co(e),t._id)}o(CCe,"getGlobalUserByAppPage");async function xCe(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 Gu("by_email2",{...t,startkey:i,endkey:`${n}${Mn}`});s||(s=[]);let a=Array.isArray(s)?s:[s];return r?.cleanup&&(a=zS(a)),a}o(xCe,"searchGlobalUsersByEmail");var gjt=8;async function DCe({bookmark:e,query:t,appId:r,limit:n}={}){let i=gt(),s=n??gjt,u={include_docs:!0,limit:s+1};e&&(u.startkey=e);let c,l="_id",f;return t?.equal?._id?c=[await Gp(t.equal._id)]:r?(c=await ID(r,u),f=o(d=>CCe(r,d),"getKey")):t?.string?.email?(c=await xCe(t?.string?.email,u),l="email"):t?.oneOf?._id?c=await OD(t?.oneOf?._id,{cleanup:!0}):t?(c=(await i.allDocs(jd(null,{...u,limit:void 0}))).rows.map(p=>p.doc),c=Tt.search(c,{query:t,limit:u.limit}).rows):c=(await i.allDocs(jd(null,u))).rows.map(p=>p.doc),Lq(c,s,{paginate:!0,property:l,getKey:f})}o(DCe,"paginatedUsers");async function yjt(){return(await Uq("by_email2",{limit:0,include_docs:!1})).total_rows}o(yjt,"getUserCount");async function bjt(){let e=0;async function t(r){let n=await DCe({bookmark:r}),i=await Wp(n.data);e+=i.filter(s=>s).length,n.hasNextPage&&await t(n.nextPage)}return o(t,"iterate"),await t(),e}o(bjt,"getCreatorCount");function _jt(e){return delete e.admin,delete e.builder,e}o(_jt,"removePortalUserPermissions");function b3(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(b3,"cleanseUserObject");async function wjt(e,t){let r=Co(t);e.builder??={},e.builder.creator=!0,e.builder.apps??=[],e.builder.apps.push(r),await Ja.save(e,{hashPassword:!1})}o(wjt,"addAppBuilder");async function Ejt(e,t){let r=Co(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(Ejt,"removeAppBuilder");var PCe=3600;async function Sjt(e,t){let n=await jq(t).get(e);if(n.budibaseAccess=!0,!L.SELF_HOSTED&&!L.DISABLE_ACCOUNT_PORTAL){let i=await Lp(n.email);i&&(n.account=i,n.accountPortalAccess=!0)}return n}o(Sjt,"populateFromDB");async function Tjt(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 Lp(i.email);s&&(i.account=s,i.accountPortalAccess=!0)}})),r.length?{users:n,notFoundIds:r}:{users:n}}o(Tjt,"populateUsersFromDB");async function YS({userId:e,tenantId:t,email:r,populateUser:n}){if(n||(n=Sjt),!t)try{t=Ue()}catch{t=await za.lookupTenantId(e)}let i=await Qw(),s=await i.get(e);return s||(s=await n(e,t,r),await i.store(e,s,PCe)),s&&!s.tenantId&&t&&(s.tenantId=t),s.userGroups&&!ln.users.isGlobalBuilder(s)&&await Wi(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(YS,"getUser");async function vjt(e){let t=await Qw(),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 Tjt(n);s=a.notFoundIds;for(let u of a.users)await t.store(u._id,u,PCe);i.push(...a.users)}return{users:i,notFoundIds:s}}o(vjt,"getUsers");async function JS(e){await(await Qw()).delete(e)}o(JS,"invalidateUser");var F3={};G(F3,{Writethrough:()=>M3});var Oi={};G(Oi,{AUTO_EXTEND_POLLING_MS:()=>m0e,doWithLock:()=>L3,newRedlock:()=>Hp});var h0e=U(p0e());async function Vjt(e,t){if(e==="custom")return Hp(t);switch(e){case"try_once":return Hp(_y.TRY_ONCE);case"try_twice":return Hp(_y.TRY_TWICE);case"default":return Hp(_y.DEFAULT);case"delay_500":return Hp(_y.DELAY_500);case"auto_extend":return Hp(_y.AUTO_EXTEND);default:throw Be.unreachable(e)}}o(Vjt,"getClient");var _y={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 Hp(e={}){let t={..._y.DEFAULT,...e},n=(await Cq()).client;return new h0e.default([n],t)}o(Hp,"newRedlock");function Hjt(e){let r=`lock:${e.systemLock?"system":Ue()}_${e.name}`;return e.resource&&(r=r+`_${e.resource}`),r}o(Hjt,"getLockName");var m0e=nr.fromSeconds(10).toMs();async function L3(e,t){let r=await Vjt(e.type,e.customOptions),n,i;try{let s=Hjt(e),a=e.type==="auto_extend"?m0e: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(L3,"doWithLock");var g0e=1e4,k3=null;async function kD(){if(!k3){let e=await Iq();k3=new Cp(e)}return k3}o(kD,"getCache");function eT(e,t){return e.name+t}o(eT,"makeCacheKey");function U3(e,t=null){return{doc:e,lastWrite:t||Date.now()}}o(U3,"makeCacheItem");async function Qjt(e,t,r=g0e){let n=await kD(),i=t._id,s;i&&(s=await n.get(eT(e,i)));let a=!s||s.lastWrite<Date.now()-r,u=t;return a&&((await L3({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=U3(u,a?null:s?.lastWrite),u._id&&await n.store(eT(e,u._id),s),{ok:!0,id:u._id,rev:u._rev}}o(Qjt,"put");async function Kjt(e,t){let r=await kD(),n=eT(e,t),i=await r.get(n);if(!i){let s=await e.get(t);i=U3(s),await r.store(n,i)}return i.doc}o(Kjt,"get");async function zjt(e,t){let r=await kD(),n=eT(e,t),i=await r.get(n);if(!i){let s=await e.tryGet(t);if(!s)return null;i=U3(s),await r.store(n,i)}return i.doc}o(zjt,"tryGet");async function Yjt(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(eT(e,i))}finally{await e.remove(i,r)}}o(Yjt,"remove");var M3=class{static{o(this,"Writethrough")}constructor(t,r=g0e){this.db=t,this.writeRateMs=r}async put(t,r=this.writeRateMs){return Qjt(this.db,t,r)}async get(t){return Kjt(this.db,t)}async tryGet(t){return zjt(this.db,t)}async remove(t,r){return Yjt(this.db,t,r)}};function nT(e){return`config${ce}${e}`}o(nT,"generateConfigID");var MD="en";function Jjt(){return{_id:nT("translations"),type:"translations",config:{defaultLocale:MD,locales:{[MD]:{label:"English",overrides:{}}}}}}o(Jjt,"createDefaultTranslationsConfig");function Xjt(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(Xjt,"prepareTranslationsConfig");async function Ii(e){let t=gt();try{return await t.get(nT(e))}catch(r){if(r.status===404)return;throw r}}o(Ii,"getConfig");async function Zjt(e){return e._id||(e._id=nT(e.type)),gt().put(e)}o(Zjt,"save");async function y0e(){let e=await Ii("translations");return e?(e.config=Xjt(e.config),e):Jjt()}o(y0e,"getTranslationsConfigDoc");async function eWt(){return(await y0e()).config}o(eWt,"getTranslationsConfig");async function dy(){let e=await Ii("settings");return e||(e={_id:nT("settings"),type:"settings",config:{}}),e.config.platformUrl=await iT({tenantAware:!0,config:e.config}),e.config.analyticsEnabled=await z0({config:e.config}),e}o(dy,"getSettingsConfigDoc");async function q3(){return(await dy()).config}o(q3,"getSettingsConfig");async function iT(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(iT,"getPlatformUrl");var z0=o(async e=>{if(!L.SELF_HOSTED)return!!L.ENABLE_ANALYTICS;let t=await rf(_n.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 tWt(){return await Ii("google")}o(tWt,"getGoogleConfigDoc");async function UD(){return(await tWt())?.config}o(UD,"getGoogleConfig");async function j3(){if(!L.SELF_HOSTED)return B3();let e=await UD();return(!e||!e.activated)&&(e=B3()),e}o(j3,"getGoogleDatasourceConfig");function B3(){if(L.GOOGLE_CLIENT_ID&&L.GOOGLE_CLIENT_SECRET)return{clientID:L.GOOGLE_CLIENT_ID,clientSecret:L.GOOGLE_CLIENT_SECRET,activated:!0}}o(B3,"getDefaultGoogleConfig");async function rWt(){return Ii("logos_oidc")}o(rWt,"getOIDCLogosDoc");async function nWt(){return Ii("oidc")}o(nWt,"getOIDCConfigDoc");async function iWt(){let e=(await nWt())?.config;return e?.configs&&e.configs[0]}o(iWt,"getOIDCConfig");async function W3(e){let t=(await Ii("oidc"))?.config;return t&&t.configs.filter(r=>r.uuid===e)[0]}o(W3,"getOIDCConfigById");async function b0e(){return Ii("smtp")}o(b0e,"getSMTPConfigDoc");async function oWt(e){let t=await b0e();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(oWt,"getSMTPConfig");async function sWt(){return(await Ii("scim"))?.config}o(sWt,"getSCIMConfig");async function aWt(){return Ii("ai")}o(aWt,"getAIConfig");async function uWt(){return Ii("recaptcha")}o(uWt,"getRecaptchaConfig");var Et={};G(Et,{AccessController:()=>V3,BUILTIN_ROLE_IDS:()=>H3,Role:()=>yf,RoleHierarchyTraversal:()=>FD,RoleIDVersion:()=>Q3,builtinRoleToNumber:()=>oT,checkForRoleResourceArray:()=>S0e,externalRole:()=>hWt,findRole:()=>sT,getAllRoleIds:()=>bWt,getAllRoles:()=>J3,getBuiltinRole:()=>w0e,getBuiltinRoles:()=>z3,getDBRoleID:()=>T0e,getExternalRoleID:()=>bf,getExternalRoleIDs:()=>v0e,getRole:()=>mWt,getUserRoleHierarchy:()=>Y3,getUserRoleIdHierarchy:()=>E0e,isBuiltin:()=>Qp,lowerBuiltinRoleID:()=>pWt,prefixRoleIDNoBuiltin:()=>$3,roleIDsAreEqual:()=>ms,roleToNumber:()=>dWt,saveRoles:()=>gWt,validInherits:()=>fWt});var _0e=require("lodash"),BD=U(require("lodash/fp/cloneDeep")),G3=U(require("semver"));var H3={ADMIN:"ADMIN",POWER:"POWER",BASIC:"BASIC",PUBLIC:"PUBLIC"},hr={...H3,BUILDER:"BUILDER"},Q3={UUID:void 0,NAME:"name"};function lWt(e,t){return Array.isArray(t)?t.filter(r=>e.includes(r)).length===t.length:e.includes(t)}o(lWt,"rolesInList");var yf=class{constructor(t,r,n,i){this.permissions={};this._id=t,this.name=r,this.uiMetadata=i,this.permissionId=n,this.version=Q3.NAME}static{o(this,"Role")}addInheritance(t){return t&&typeof t=="string"?t=$3(t):t&&Array.isArray(t)&&(t=t.map($3)),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=sT(s,n,r);a&&(i=i.concat(this.walk(a)))}else{let s=[],a=t;for(;a&&a.inherits&&!lWt(s,a.inherits);){if(Array.isArray(a.inherits))return i.concat(this.walk(a));if(s.push(a.inherits),a=sT(a.inherits,n,r),a&&i.push(a),de.roles.checkForRoleInheritanceLoops(i))break}}return(0,_0e.uniqBy)(i,s=>s._id)}},K3={ADMIN:new yf(hr.ADMIN,hr.ADMIN,"admin",{displayName:"App admin",description:"Can do everything",color:"var(--spectrum-global-color-static-red-400)"}).addInheritance(hr.POWER),POWER:new yf(hr.POWER,hr.POWER,"power",{displayName:"App power user",description:"An app user with more access",color:"var(--spectrum-global-color-static-orange-400)"}).addInheritance(hr.BASIC),BASIC:new yf(hr.BASIC,hr.BASIC,"write",{displayName:"App user",description:"Any logged in user",color:"var(--spectrum-global-color-static-green-400)"}).addInheritance(hr.PUBLIC),PUBLIC:new yf(hr.PUBLIC,hr.PUBLIC,"public",{displayName:"Public user",description:"Accessible to anyone",color:"var(--spectrum-global-color-static-blue-400)"}),BUILDER:new yf(hr.BUILDER,hr.BUILDER,"admin",{displayName:"Builder user",description:"Users that can edit this app",color:"var(--spectrum-global-color-static-magenta-600)"})};function z3(){return(0,BD.default)(K3)}o(z3,"getBuiltinRoles");function Qp(e){return Object.values(H3).includes(e)}o(Qp,"isBuiltin");function $3(e){return Qp(e)?e:ju(e)}o($3,"prefixRoleIDNoBuiltin");function w0e(e){let t=Object.values(K3).find(r=>e.includes(r._id));if(t)return(0,BD.default)(t)}o(w0e,"getBuiltinRole");function fWt(e,t){if(!t)return!1;let r=o(n=>e.find(i=>ms(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(fWt,"validInherits");function oT(e){let t=z3(),r=Object.values(t).length+1;if(ms(e,hr.ADMIN)||ms(e,hr.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(oT,"builtinRoleToNumber");async function dWt(e){if(Qp(e))return oT(e);let t=await Y3(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=>ms(u._id,s));if(a)return r(a)+1}).filter(s=>s).sort().pop();if(i!=null)return i}else if(Qp(n.inherits))return oT(n.inherits)+1;return 0},"findNumber");return Math.max(...t.map(r))}o(dWt,"roleToNumber");function pWt(e,t){return e?t&&oT(e)>oT(t)?t:e:t}o(pWt,"lowerBuiltinRoleID");function ms(e,t){return ju(e)===ju(t)}o(ms,"roleIDsAreEqual");function hWt(e){let t;return e._id&&(t=bf(e._id)),{...e,_id:t,inherits:v0e(e.inherits,e.version)}}o(hWt,"externalRole");function sT(e,t,r){let n=w0e(e);n||(e=ju(e));let i=t.find(s=>s._id&&ms(s._id,e));return!i&&!Qp(e)&&r?.defaultPublic?(0,BD.default)(K3.PUBLIC):(n=Object.assign(n||{},i),n?._id&&(n._id=bf(n._id,n.version)),Object.keys(n).length===0?void 0:n)}o(sT,"findRole");async function mWt(e,t){let r=rg(),n=[];if(!Qp(e)){let i=await r.tryGet(T0e(e));i&&n.push(i)}return sT(e,n,t)}o(mWt,"getRole");async function gWt(e){await rg().bulkDocs(e.filter(r=>r._id).map(r=>({...r,_id:ju(r._id)})))}o(gWt,"saveRoles");async function yWt(e,t){let r=await J3();if(ms(e,hr.ADMIN))return r;let n=sT(e,r,t),i=[];return n&&(i=new FD(r,t).walk(n)),i}o(yWt,"getAllUserRoles");async function E0e(e){return(await Y3(e)).map(r=>r._id)}o(E0e,"getUserRoleIdHierarchy");async function Y3(e,t){return yWt(e,t)}o(Y3,"getUserRoleHierarchy");function S0e(e,t){if(e&&!Array.isArray(e[t])){let r=e[t];e[t]=[r],r==="write"&&e[t].push("read")}return e}o(S0e,"checkForRoleResourceArray");async function bWt(e){return(await J3(e)).map(r=>r._id)}o(bWt,"getAllRoleIds");async function J3(e){if(e)return Io(e,t);{let r;try{r=rg()}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=bf(u._id,u.version)));let i=z3(),s=[];!r||await _Wt(r)?s=[hr.ADMIN,hr.POWER,hr.BASIC,hr.PUBLIC]:s=[hr.ADMIN,hr.BASIC,hr.PUBLIC];for(let a of s){let u=i[a],c=n.filter(l=>ms(l._id,a))[0];c==null?n.push(u||i.BASIC):(n=n.filter(l=>l._id!==c._id),c._id=bf(u._id,c.version),n.push({...u,...c,name:u.name,_id:bf(u._id,u.version)}))}for(let a of n)if(a.permissions)for(let u of Object.keys(a.permissions))a.permissions=S0e(a.permissions,u);return n}o(t,"internal")}o(J3,"getAllRoles");async function _Wt(e){let r=(await e.tryGet("app_metadata"))?.creationVersion;return!r||!G3.default.valid(r)?!0:!G3.default.gte(r,L.MIN_VERSION_WITHOUT_POWER_ROLE)}o(_Wt,"shouldIncludePowerRole");var V3=class{static{o(this,"AccessController")}constructor(){this.userHierarchies={}}async hasAccess(t,r){if(t==null||t===""||ms(t,hr.BUILDER)||ms(r,t)||ms(r,hr.BUILDER))return!0;let n=r?this.userHierarchies[r]:null;return!n&&r&&(n=await E0e(r),this.userHierarchies[r]=n),n?.find(i=>ms(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 T0e(e){return e?.startsWith("role")?e:ju(e)}o(T0e,"getDBRoleID");function bf(e,t){if(e.startsWith(`role${ce}`)&&(Qp(e)||t===Q3.NAME)){let r=e.split(ce);return r.shift(),r.join(ce)}return e}o(bf,"getExternalRoleID");function v0e(e,t){return e&&(typeof e=="string"?bf(e,t):e.map(r=>bf(r,t)))}o(v0e,"getExternalRoleIDs");var Wr={};G(Wr,{BUILDER:()=>vWt,BUILTIN_PERMISSIONS:()=>qD,CREATOR:()=>AWt,GLOBAL_BUILDER:()=>RWt,PermissionImpl:()=>mr,PermissionLevel:()=>Qc,PermissionType:()=>Vb,doesHaveBasePermission:()=>SWt,getAllowedLevels:()=>I0e,getBuiltinPermissionByID:()=>EWt,getBuiltinPermissions:()=>wWt,isPermissionLevelHigherThanRead:()=>TWt,levelToNumber:()=>O0e});var A0e=U(require("lodash/flatten")),R0e=U(require("lodash/fp/cloneDeep"));var mr=class{static{o(this,"PermissionImpl")}constructor(t,r){this.type=t,this.level=r}};function O0e(e){switch(e){case"execute":return 0;case"read":return 1;case"write":return 2;case"admin":return 3;default:return-1}}o(O0e,"levelToNumber");function I0e(e){switch(e){case"execute":return["execute"];case"read":return["execute","read"];case"write":case"admin":return["execute","read","write"];default:return[]}}o(I0e,"getAllowedLevels");var qD={PUBLIC:{_id:"public",name:"Public",permissions:[new mr("webhook","execute")]},READ_ONLY:{_id:"read_only",name:"Read only",permissions:[new mr("query","read"),new mr("table","read"),new mr("app","read")]},WRITE:{_id:"write",name:"Read/Write",permissions:[new mr("query","write"),new mr("table","write"),new mr("automation","execute"),new mr("legacy_view","read"),new mr("app","read")]},POWER:{_id:"power",name:"Power",permissions:[new mr("table","write"),new mr("user","read"),new mr("automation","execute"),new mr("webhook","read"),new mr("legacy_view","read"),new mr("app","read")]},ADMIN:{_id:"admin",name:"Admin",permissions:[new mr("table","admin"),new mr("user","admin"),new mr("automation","admin"),new mr("webhook","read"),new mr("query","admin"),new mr("legacy_view","read"),new mr("app","read")]}};function wWt(){return(0,R0e.default)(qD)}o(wWt,"getBuiltinPermissions");function EWt(e){return Object.values(qD).find(r=>r._id===e)}o(EWt,"getBuiltinPermissionByID");function SWt(e,t,r){let n=[...new Set(r.map(a=>a.permissionId))],i=Object.values(qD),s=(0,A0e.default)(i.filter(a=>n.indexOf(a._id)!==-1).map(a=>a.permissions));for(let a of s)if(a.type===e&&I0e(a.level).indexOf(t)!==-1)return!0;return!1}o(SWt,"doesHaveBasePermission");function TWt(e){return O0e(e)>1}o(TWt,"isPermissionLevelHigherThanRead");var vWt="builder",AWt="creator",RWt="globalBuilder";var jD=U(require("crypto")),D0e=U(require("dd-trace")),P0e=require("lodash"),OWt=U(a3());var C0e;function N0e(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(N0e,"parseEnvFlags");function IWt(){return N0e(L.TENANT_FEATURE_FLAGS||"")}o(IWt,"getEnvFlags");var X3=class{constructor(t){this.flagSchema=t;this.setId=jD.randomUUID()}static{o(this,"FlagSet")}defaults(){return(0,P0e.cloneDeep)(this.flagSchema)}isFlagName(t){return this.flagSchema[t]!==void 0}async isEnabled(t){return(await this.fetch())[t]}async fetch(){return await D0e.default.trace("features.fetch",async t=>{let r=Sq(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 IWt())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=Pu(),c=u?._id;if(!c){let d=wq();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,C0e&&c){n.readFromPostHog=!0;let d=await dy(),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 C0e.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=vq();for(let[d,p]of Object.entries(f))this.isFlagName(d)&&typeof p=="boolean"&&(i[d]=p,n[`flags.${d}.source`]="override");Tq(this.setId,i);for(let[d,p]of Object.entries(i))n[`flags.${d}.value`]=p;return t?.addTags(n),i})}},CWt={USE_ZOD_VALIDATOR:!1,AI_AGENTS:!1,DEBUG_UI:L.isDev(),DEV_USE_CLIENT_FROM_STORAGE:!1},ijr=new X3(CWt);var Ze={};G(Ze,{adminOnly:()=>oP,auditLog:()=>sP,authError:()=>zn,buildAuthMiddleware:()=>k3t,buildCsrfMiddleware:()=>U3t,buildTenancyMiddleware:()=>M3t,builderOnly:()=>hP,builderOrAdmin:()=>mP,google:()=>wc,internalApi:()=>yP,joiValidator:()=>dT,oidc:()=>Ec,passport:()=>F3t,platformLogout:()=>G3t,refreshOAuthToken:()=>j3t,ssoCallbackUrl:()=>wf,updateUserOAuth:()=>W3t,workspaceBuilderOrAdmin:()=>BP});var qP={};G(qP,{activeTenant:()=>pke,adminOnly:()=>oP,auditLog:()=>sP,authError:()=>zn,authenticated:()=>pP,builderOnly:()=>hP,builderOrAdmin:()=>mP,correlation:()=>k0e,csp:()=>eNe,csrf:()=>gP,datasource:()=>b3t,errorHandling:()=>rNe,featureFlagCookie:()=>nNe,google:()=>wc,internalApi:()=>yP,ip:()=>iNe,joiValidator:()=>dT,local:()=>Oy,oidc:()=>Ec,pino:()=>$Pe,querystringToBody:()=>dke,ssoCallbackUrl:()=>wf,tenancy:()=>FP,workspaceBuilderOrAdmin:()=>BP});var L0e=require("uuid");var PWt=OI(),k0e=o((e,t)=>{let r=e.headers["x-budibase-correlation-id"];return r||(r=(0,L0e.v4)()),PWt.withId(r,()=>t())},"correlationMiddleware");var bHt=GPe(),_Ht=OI();function wHt(){return{logger:W0,genReqId:_Ht.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(wHt,"pinoSettings");function EHt(){return L.HTTP_LOGGING?bHt(wHt()):(e,t)=>t()}o(EHt,"getMiddleware");var $Pe=EHt();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 SHt=/\/:(.*?)(\/.*)?$/g,Jp=o(e=>e?e.map(t=>{let r=t.route,n=t.method,i=r.match(SHt);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"),Xp=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 aa={};G(aa,{SecretOption:()=>QPe,decrypt:()=>JQ,decryptFile:()=>IHt,encrypt:()=>AHt,encryptFile:()=>RHt,getSecret:()=>YQ});var mc=U(require("crypto")),_f=U(require("fs")),QQ=require("path"),KQ=U(require("zlib"));var aP="aes-256-ctr",HPe="-",THt=1e4,vHt=32,uP=16,zQ=16,QPe=(r=>(r.API="api",r.ENCRYPTION="encryption",r))(QPe||{});function YQ(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(YQ,"getSecret");function cP(e,t){return mc.default.pbkdf2Sync(e,new Uint8Array(t),THt,vHt,"sha512")}o(cP,"stretchString");function AHt(e,t="api"){let r=mc.default.randomBytes(uP),n=cP(YQ(t),r),i=mc.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")}${HPe}${u}`}o(AHt,"encrypt");function JQ(e,t="api"){let[r,n]=e.split(HPe),i=Buffer.from(r,"hex"),s=cP(YQ(t),i),a=mc.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(JQ,"decrypt");async function RHt({dir:e,filename:t},r){let n=`${t}.enc`,i=(0,QQ.join)(e,t);if(_f.default.lstatSync(i).isDirectory())throw new Error("Unable to encrypt directory");let s=_f.default.createReadStream(i),a=_f.default.createWriteStream((0,QQ.join)(e,n)),u=mc.default.randomBytes(uP),c=mc.default.randomBytes(zQ),l=cP(r,u),f=mc.default.createCipheriv(aP,new Uint8Array(l),new Uint8Array(c));return a.write(u),a.write(c),s.pipe(KQ.default.createGzip()).pipe(f).pipe(a),new Promise(d=>{a.on("finish",()=>{d({filename:n,dir:e})})})}o(RHt,"encryptFile");async function OHt(e){let t=_f.default.createReadStream(e),r=await VPe(t,uP),n=await VPe(t,zQ);return t.close(),{salt:r,iv:n}}o(OHt,"getSaltAndIV");async function IHt(e,t,r){if(_f.default.lstatSync(e).isDirectory())throw new Error("Unable to decrypt directory");let{salt:n,iv:i}=await OHt(e),s=_f.default.createReadStream(e,{start:uP+zQ}),a=_f.default.createWriteStream(t),u=cP(r,n),c=mc.default.createDecipheriv(aP,new Uint8Array(u),new Uint8Array(i)),l=KQ.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(IHt,"decryptFile");function VPe(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(VPe,"readBytes");var lT=class extends Error{constructor(r,n){super(r);this.code=n}static{o(this,"APIWarning")}},lP=class extends lT{static{o(this,"InvalidAPIKeyWarning")}constructor(){super("Invalid API key","invalid_api_key")}},fP=class extends lT{constructor(r){super(`Usage limit exceeded: '${r}'`,"usage_limit_exceeded");this.limitName=r}static{o(this,"UsageLimitWarning")}getPublicWarning(){return{limitName:this.limitName}}},Ry=class extends lT{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 YPe=U(require("dd-trace"));var DHt=L.SESSION_UPDATE_PERIOD?parseInt(L.SESSION_UPDATE_PERIOD):60*1e3;function PHt(){return new Date(Date.now()-DHt).toISOString()}o(PHt,"timeMinusOneMinute");function zPe(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(zPe,"finalise");async function NHt(e,t){if(nE(e))return{valid:!0,user:void 0};let n=JQ(e).split(ce)[0];return Wi(n,async()=>{let i;try{let s=gt();i=await Gu("by_api_key",{key:e},s)}catch{i=void 0}if(i)return{valid:!0,user:await YS({userId:i,tenantId:n,populateUser:t})};throw new lP})}o(NHt,"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?Jp(e):[];return async(n,i)=>{let s=!1,a=dP(n,"x-budibase-api-version");Xp(n,r)&&(s=!0);try{let c=dP(n,"x-budibase-token"),l=Vu(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 lOe(w,b),t&&t.populateUser?h=await YS({userId:w,tenantId:E.tenantId,email:E.email,populateUser:t.populateUser(n)}):h=await YS({userId:w,tenantId:E.tenantId,email:E.email}),h.csrfToken=E.csrfToken,g="cookie",E?.lastAccessedAt<PHt()&&await cOe(E),p=!0}catch(S){p=!1,console.warn(`Auth Error: ${S.message}`),Nl(n,"budibase:auth")}}if(!p&&f){let b=t.populateUser?t.populateUser(n):null,{valid:w,user:E}=await NHt(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)&&YPe.default.setUser({id:h._id,tenantId:h.tenantId,budibaseAccess:h.budibaseAccess,status:h.status}),zPe(n,{authenticated:p,user:h,internal:m,version:a,publicEndpoint:s,loginMethod:g}),y(h)?S1(h,n,i):i()}catch(c){if(console.warn(`Auth Error: ${c.message}`),c?.name==="JsonWebTokenError"?Nl(n,"budibase:auth"):c?.code==="invalid_api_key"&&n.throw(403,c.message),t&&t.publicAllowed||s)return zPe(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 Gd(e);return!r&&!L.isWorker()?e.throw(403,"This request required a workspace id."):!r&&!Yi(e.user)?e.throw(403,"Builder user only endpoint."):r&&!hy(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 Gd(e);return!r&&!L.isWorker()?e.throw(403,"This request required a workspace id."):!r&&!Yi(e.user)?e.throw(403,"Admin/Builder user only endpoint."):r&&!hy(e.user,r)&&e.throw(403,"Workspace Admin/Builder user only endpoint."),t()}o(mP,"builderOrAdmin");var ZPe=U(require("crypto"));var JPe={"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'"]},XPe=/^[A-Za-z0-9-*:/.]+$/,eNe=o(async(e,t)=>{let r=ZPe.default.randomBytes(16).toString("base64");e.state.nonce=r;let n={...JPe};n["script-src"]=[...JPe["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=>XPe.test(f));n[u]=[...n[u]||[],...l]}if(e.user?.license?.features.includes("customAppScripts")&&e.appId)try{let u=await zw.getWorkspaceMetadata(e.appId);if("name"in u)for(let c of u.scripts||[]){let l=(c.cspWhitelist||"").split(`
|
|
466
|
-
`).filter(d=>XPe.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 LHt=["GET","HEAD","OPTIONS"],kHt=["application/x-www-form-urlencoded","multipart/form-data","text/plain"];function gP(e={noCsrfPatterns:[]}){let t=Jp(e.noCsrfPatterns);return async(r,n)=>{if(Xp(r,t)||LHt.indexOf(r.method)!==-1)return n();let s=r.get("content-type")?r.get("content-type").toLowerCase():"";if(!kHt.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 tNe(e){if(e.includes("-----BEGIN PRIVATE KEY-----"))return!0;for(let t of sne){let r=L[t];if(!(typeof r!="string"||r==="")&&e.includes(r))return!0}return!1}o(tNe,"stringContainsSecret");async function rNe(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:oOe(r)};if(tNe(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(rNe,"errorHandling");var nNe=o(async(e,t)=>{let n=Vu(e,"budibase:featureflags")?.flags||{};await Aq(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"),nE(r)||e.throw(403,"Unauthorized"),t()}o(yP,"internalApi");async function iNe(e,t){return e.ip?await Eq(e.ip,()=>t()):t()}o(iNe,"ip");var dT={};G(dT,{body:()=>MHt,params:()=>UHt});var XQ=U(require("joi"));function oNe(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:XQ.default.any().optional(),updatedAt:XQ.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(oNe,"validate");function MHt(e,t){return oNe(e,"body",t)}o(MHt,"body");function UHt(e,t){return oNe(e,"params",t)}o(UHt,"params");var Oy={};G(Oy,{authenticate:()=>qHt,options:()=>BHt});function zn(e,t,r){return e(r,null,{message:t})}o(zn,"authError");async function wf(e,t){if(t&&t.callbackURL)return t.callbackURL;let r=await q3(),n="/api/global/auth";return Dl()&&(n+=`/${Ue()}`),n+=`/${e}/callback`,`${r.platformUrl}${n}`}o(wf,"ssoCallbackUrl");var ZQ="Invalid credentials",FHt="This account has expired. Please reset your password",BHt={passReqToCallback:!0};async function qHt(e,t,r,n){if(!t)return zn(n,"Email Required");if(!r)return zn(n,"Password Required");let i=await oa(t);return i==null?(console.info(`user=${t} could not be found`),zn(n,ZQ)):i.status==="inactive"?(console.info(`user=${t} is inactive`,i),zn(n,ZQ)):i.password?await _1(r,i.password)?(delete i.password,n(null,i)):zn(n,ZQ):(console.info(`user=${t} has no password set`,i),zn(n,FHt))}o(qHt,"authenticate");var wc={};G(wc,{buildVerifyFn:()=>BLe,getCallbackUrl:()=>e3t,strategyFactory:()=>MK});var pT=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=og(e.userId),s;try{s=await Gp(i)}catch(u){if(!u.status||u.status!==404)return zn(r,"Unexpected error when retrieving existing user",u)}if(s||(s=await oa(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 jHt(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 jHt(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(jHt,"syncUser");var Z4t=LK().OAuth2Strategy;function BLe(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(BLe,"buildVerifyFn");async function MK(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=BLe(r);return new Z4t({clientID:e.clientID,clientSecret:e.clientSecret,callbackURL:t},s)}catch(n){throw new Error(`Error constructing google authentication strategy: ${n}`)}}o(MK,"strategyFactory");async function e3t(e){return wf("google",e)}o(e3t,"getCallbackUrl");var Ec={};G(Ec,{buildVerifyFn:()=>fke,fetchStrategyConfig:()=>p3t,getCallbackUrl:()=>h3t,strategyFactory:()=>d3t});var cke=U(require("node-fetch"));var lke=U(uke());function fke(e){return async(t,r,n,i,s,a,u,c,l)=>{let f=c3t(r,n),d=l3t(r,n),p={provider:t,providerType:"oidc",userId:f.id,profile:f,email:f3t(f,d),oauth2:{accessToken:a,refreshToken:u}};return bP(p,!1,l,e)}}o(fke,"buildVerifyFn");function c3t(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(c3t,"normalizeProfile");function l3t(e,t){return{email:e?._json?.email||t.emails?.[0]?.value,preferred_username:t.username}}o(l3t,"buildJwtClaims");function f3t(e,t){if(e._json.email)return e._json.email;if(t.email)return t.email;let r=t.preferred_username;if(r&&Vq(r))return r;throw new Error(`Could not determine user email from profile ${JSON.stringify(e)} and claims ${JSON.stringify(t)}`)}o(f3t,"getEmail");async function d3t(e,t){try{let r=fke(t),n=new lke.Strategy(e,r);return n.name="oidc",n}catch(r){throw new Error(`Error constructing OIDC authentication strategy - ${r}`)}}o(d3t,"strategyFactory");async function p3t(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,cke.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(p3t,"fetchStrategyConfig");async function h3t(){return wf("oidc")}o(h3t,"getCallbackUrl");function dke(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(dke,"querystringToBody");function FP(e,t,r={noTenancyRequired:!1}){let n=Jp(e),i=Jp(t);return async function(s,a){let c={allowNoTenant:r.noTenancyRequired||!!Xp(s,i)};!!Xp(s,n)||(c.excludeStrategies=["query"]);let f=tE(s,c);return s.set("x-budibase-tenant-id",f),Wi(f,a)}}o(FP,"tenancy");function pke(){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(pke,"activeTenant");async function BP(e,t){if(e.internal||Ya(e.user))return t();let r=await Gd(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&&!Yi(e.user)&&e.throw(403,"Admin/Builder user only endpoint."),t()}o(BP,"workspaceBuilderOrAdmin");var jK={};G(jK,{postAuth:()=>y3t,preAuth:()=>g3t});var m3t=LK().OAuth2Strategy;async function hke(){let e=await j3();if(!e)throw new Error("No google configuration found");return e}o(hke,"fetchGoogleCreds");async function g3t(e,t,r){let n=await hke(),s=`${await iT({tenantAware:!1})}/api/global/auth/datasource/google/callback`,a=await MK(n,s,pT);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(g3t,"preAuth");async function y3t(e,t,r){let n=await hke(),s=`${await iT({tenantAware:!1})}/api/global/auth/datasource/google/callback`,a=Vu(t,"budibase:datasourceauth");if(!a)throw new Error("Unable to fetch datasource auth cookie");return e.authenticate(new m3t({clientID:n.clientID,clientSecret:n.clientSecret,callbackURL:s},(u,c,l,f)=>{Nl(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 cc(`datasource:creation:${a.appId}:google:${f}`,{tokens:c}),t.redirect(`${l}/new?continue_google_setup=${f}`)})(t,r)}o(y3t,"postAuth");var b3t={google:jK};var nMe=Qke(),L3t=tMe().Strategy,QP=rMe(),k3t=pP,M3t=FP,U3t=gP,F3t=nMe;nMe.use(new L3t(Oy.options,Oy.authenticate));async function B3t(e,t){let r=await Ec.getCallbackUrl(),n,i;try{if(n=await Ec.fetchStrategyConfig(e,r),!n)throw new Error("OIDC Config contents invalid");i=await Ec.strategyFactory(n,pT)}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(B3t,"refreshOIDCAccessToken");async function q3t(e,t){let r=await wc.getCallbackUrl(e),n;try{n=await wc.strategyFactory(e,r,pT)}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(q3t,"refreshGoogleAccessToken");async function j3t(e,t,r){switch(t){case"oidc":{if(!r)return{err:{data:"OIDC config id not provided"}};let n=await W3(r);return n?B3t(n,e):{err:{data:"OIDC configuration not found"}}}case"google":{let n=await UD();return n?q3t(n,e):{err:{data:"Google configuration not found"}}}}}o(j3t,"refreshOAuthToken");async function W3t(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 JS(e)}catch(n){console.error("Could not update OAuth details for current user",n)}}o(W3t,"updateUserOAuth");async function G3t(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=Vu(t,"budibase:auth"),s=await s4(r);i&&n?s=s.filter(u=>u.sessionId!==i.sessionId):Nl(t,"budibase:auth");let a=s.map(({sessionId:u})=>u);await TS(r,{sessionIds:a,reason:"logout"}),await ED.logout(t.user?.email),await JS(r)}o(G3t,"platformLogout");var zP={};G(zP,{validate:()=>K3t});var be=U(require("joi"));var $3t=["Relational","Non-relational","Spreadsheet","Object store","Graph","API"];function e6(e,t){let{error:r}=e.validate(t);if(r)throw r}o(e6,"runJoi");function V3t(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)});e6(t,e)}o(V3t,"validateComponent");function H3t(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(Tn).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(...$3t),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()}))})});e6(n,e)}o(H3t,"validateDatasource");function Q3t(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(...UX).required(),inputs:be.default.object().optional(),schema:be.default.object({inputs:r,outputs:r}).required()})});e6(n,e)}o(Q3t,"validateAutomation");function K3t(e){switch(e?.type){case"component":V3t(e);break;case"datasource":H3t(e);break;case"automation":Q3t(e);break;default:throw new Error(`Unknown plugin type - check schema.json: ${e.type}`)}}o(K3t,"validate");var Za={};G(Za,{Client:()=>jn,clients:()=>Pl,locks:()=>Oi,utils:()=>YR});var XP={};G(XP,{isBlacklisted:()=>Y3t,refreshBlacklist:()=>aMe});var iMe=U(require("dns")),JP=U(require("net"));var oMe=require("util");var YP,z3t=(0,oMe.promisify)(iMe.default.lookup);async function sMe(e){return JP.default.isIP(e)||(e.startsWith("http")||(e=`https://${e}`),e=new URL(e).hostname),(await z3t(e,{all:!0})).map(r=>r.address)}o(sMe,"lookup");async function aMe(){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 sMe(i);r=r.concat(s)}}YP=r}o(aMe,"refreshBlacklist");async function Y3t(e){if(YP||await aMe(),YP?.length===0)return!1;let t;return JP.default.isIP(e)?t=[e]:t=await sMe(e),!!YP?.find(r=>t.includes(r))}o(Y3t,"isBlacklisted");var $4r={"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:()=>a6,Sql:()=>yMe,SqlTable:()=>ZP,designDoc:()=>u6,utils:()=>hq});var pMe=require("knex");var J3t=require("knex");function t6(e){return["link","formula","ai"].indexOf(e)!==-1}o(t6,"isIgnoredType");function cMe(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}=cq(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:Be.unreachable(g)}}let d=i?n?.schema[i.old].type:void 0;return i&&d&&!t6(d)&&e.renameColumn(i.old,i.updated),n&&Object.entries(n.schema).filter(([h,m])=>!t6(m.type)&&t.schema[h]==null).forEach(([h,m])=>{i?.old===h||t6(m.type)||(n.constrained&&n.constrained.indexOf(h)!==-1&&e.dropForeign(h),e.dropColumn(h))}),e}o(cMe,"generateSchema");function X3t(e,t,r){return e.createTable(t.name,n=>{cMe(n,t,r)})}o(X3t,"buildCreateTable");function Z3t(e,t,r,n,i){return e.alterTable(t.name,s=>{cMe(s,t,r,n,i)})}o(Z3t,"buildUpdateTable");function eQt(e,t){return e.dropTable(t.name)}o(eQt,"buildDeleteTable");var r6=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,J3t.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=X3t(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=Z3t(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=eQt(r,t.table);break;default:throw new Error("Table operation is of unknown type")}return Zm(n)}},ZP=r6;var hMe=require("lodash");var a6="__bb_total";function lMe(){return(L.SQL_MAX_ROWS?parseInt(L.SQL_MAX_ROWS):null)||5e3}o(lMe,"getBaseLimit");function n6(){return(L.SQL_MAX_RELATED_ROWS?parseInt(L.SQL_MAX_RELATED_ROWS):null)||500}o(n6,"getRelationshipLimit");function rQt(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(rQt,"prioritisedArraySort");function mMe(e){return Array.isArray(e)?e.map(t=>mMe(t)):(e.bindings&&(e.bindings=e.bindings.map(t=>typeof t=="boolean"?t?1:0:t)),e)}o(mMe,"convertBooleans");function fMe(e){return e.sourceType==="internal"||e.sourceId===Un}o(fMe,"isSqs");function nQt(e,t='"'){return e.replace(new RegExp(t,"g"),`${t}${t}`)}o(nQt,"escapeQuotes");function iQt(e,t='"'){return`${t}${nQt(e,t)}${t}`}o(iQt,"wrap");function oQt(e,t='"'){for(let r in e)typeof e[r]=="string"&&(e[r]=iQt(e[r],t));return`[${e.join(",")}]`}o(oQt,"stringifyArray");function i6(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(i6,"toPgArrayLiteral");function gMe(e){return XA.includes(e.type)&&!de.schema.isDeprecatedSingleUserColumn(e)}o(gMe,"isJsonColumn");var sQt={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},o6=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()&&gMe(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(!dq(t))return null}else if(r.dateOnly){let n=fq(t);return n?new Date(n):null}else return r.ignoreTimezones?eI(t)?new Date(t):lq(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,hMe.cloneDeep)(t);for(let r of Object.values(Jf)){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(Hh)){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=pq(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=eE(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,sQt[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,i6(A)]):w.whereRaw("COALESCE(??::jsonb \\?| ?::text[], FALSE)",[R,i6(A)]):O?w.whereRaw("COALESCE(?? @> ?::text[], FALSE)",[R,i6(A)]):w.whereRaw("COALESCE(??::jsonb @> ?::jsonb, FALSE)",[R,oQt(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&&!uq(this.table)&&m&&t.andWhereLike(`${m}._id`,`${ti(r.documentType)}%`),t}isSqs(){return fMe(this.table)}getTableName(t){t||(t=this.table);let r=t.name;fMe(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 ${a6}`)}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=rQt(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(n6()),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 ${n6()})`));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(n6())});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())}},s6=class extends ZP{constructor(r,n=lMe()){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=mMe(s)),s}}_query(r,n={}){let i=this.getSqlClient(),s={client:this.getBaseSqlClient()};(i==="sqlite3"||i==="oracledb")&&(s.useNullAsDefault=!0);let a=(0,pMe.knex)(s),u,c=new o6(i,a,r);switch(this._operation(r)){case"CREATE":u=c.create(n);break;case"READ":u=c.read({limits:{query:this.limit,base:lMe()}});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(!gMe(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){$w(this.getSqlClient(),r,n)}},yMe=s6;var u6={};G(u6,{base:()=>aQt});function aQt(e){return{_id:Fn,language:"sqlite",sql:{tables:{},options:{table_name:e}}}}o(aQt,"base");var bT={};G(bT,{jsonFromCsvString:()=>uQt});var bMe=U(require("csvtojson"));async function uQt(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,bMe.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(uQt,"jsonFromCsvString");var lQt=U(require("@koa/router"));var Ae={...rE,...C},_Me=o((e={})=>{XO(e.db)},"init");var tqe=U(SMe()),rqe=U(require("vm")),z8=U(PT());var Rc=class{static{o(this,"Helper")}constructor(t,r,n=!0){this.name=t,this.fn=r,this.useValueFallback=n}register(t){t.registerHelper(this.name,(r,n)=>{let i={};n&&n.data&&n.data.root&&(i=n.data.root);let s=this.fn(r,i);return s??(this.useValueFallback?r:null)})}unregister(t){t.unregisterHelper(this.name)}};var rL=U(PT());var U8=U(g2e());var Zn=U(require("dayjs")),y2e=U(require("dayjs/plugin/duration")),b2e=U(require("dayjs/plugin/advancedFormat")),_2e=U(require("dayjs/plugin/isoWeek")),w2e=U(require("dayjs/plugin/weekYear")),E2e=U(require("dayjs/plugin/weekOfYear")),S2e=U(require("dayjs/plugin/relativeTime")),T2e=U(require("dayjs/plugin/utc")),v2e=U(require("dayjs/plugin/timezone"));Zn.default.extend(y2e.default);Zn.default.extend(b2e.default);Zn.default.extend(_2e.default);Zn.default.extend(w2e.default);Zn.default.extend(E2e.default);Zn.default.extend(S2e.default);Zn.default.extend(T2e.default);Zn.default.extend(v2e.default);function mh(e){return typeof e=="object"&&typeof e.hash=="object"}o(mh,"isOptions");function L8(e){return typeof e=="object"&&typeof e.options=="object"&&typeof e.app=="object"}o(L8,"isApp");function k8(e,t,r){if(mh(e))return k8({},t,e);if(mh(t))return k8(e,r,t);let n=L8(e)?e.context:{};r=r||{},mh(r)||(t=Object.assign({},t,r)),mh(r)&&r.hash.root===!0&&(t=Object.assign({},r.data.root,t));let i=Object.assign({},n,t,r.hash);return L8(e)||(i=Object.assign({},e,i)),L8(e)&&e.view&&e.view.data&&(i=Object.assign({},i,e.view.data)),i}o(k8,"getContext");function M8(e,t,r){return mh(t)&&(r=t,t=R2e),mh(e)&&(r=e,t=null,e=null),{str:e,pattern:t,options:r}}o(M8,"initialConfig");function A2e(e,t,r){let n=M8(e,t,r),i={lang:"en",date:new Date(n.str)},s=k8(this,i,{});Zn.default.locale(s.lang||s.language)}o(A2e,"setLocale");var R2e="MMMM DD, YYYY",YN=o((e,t,r)=>{let n=M8(e,t,r);if(n.str==null&&n.pattern==null)return Zn.default.locale("en"),(0,Zn.default)().format(R2e);A2e(n.str,n.pattern,n.options);let i=(0,Zn.default)(new Date(n.str));return typeof n.options=="string"?i=n.options.toLowerCase()==="utc"?i.utc():i.tz(n.options):i=i.tz(Zn.default.tz.guess()),n.pattern===""?i.toISOString():i.format(n.pattern)},"date"),VT=o((e,t,r)=>{let n=M8(e,t);A2e(n.str,n.pattern);let i=Zn.default.duration(n.str,n.pattern);return r&&!mh(r)?i.format(r):i.humanize()},"duration"),HT=o((e,t,r)=>(0,Zn.default)(new Date(e)).diff((0,Zn.default)(new Date(t)),r),"difference"),JN=o(e=>{let t=HT(e,new Date().toISOString(),"ms");return VT(t,"ms")},"durationFromNow");var XN=["#if","#unless","#each","#with","lookup","log","blockHelperMissing","each","helperMissing","if","unless","log","lookup","with"],O2e=["math","array","number","url","string","comparison","object","regex","uuid"],gh={OBJECT:"object",ALL:"all",LITERAL:"literal",JS:"js",DECODE_ID:"decodeId"},Qy="%LITERAL%";var I2e={date:YN,duration:VT,difference:HT,durationFromNow:JN};function C2e(e){for(let[r,n]of Object.entries(I2e))e.registerHelper(r,n);let t=[];for(let r of O2e){let n=U8.default[r]();for(let i of Object.entries(n)){let s=i[0];XN.indexOf(s)!==-1||t.indexOf(s)!==-1||t.push(s)}U8.default[r]({handlebars:e})}F8=t.concat(Object.keys(I2e))}o(C2e,"registerAll");var F8=[];function W5t(){return process.env.NODE_ENV==="jest"||process.env.JEST_WORKER_ID!=null&&process.env.JEST_WORKER_ID!=="null"}o(W5t,"isJest");function yh(){return W5t()}o(yh,"isTest");var x2e=o(()=>process&&process.env.BACKEND_JS,"isTestingBackendJS"),B8=o(()=>{process.env.BACKEND_JS="1"},"setTestingBackendJS");var G5t=/^[A-Za-z0-9]+$/g,QT=/{{([^{].*?)}}/g,q8=/{?{{([^{].*?)}}}?/g,$5t=/{{{([^{].*?)}}}/g,KT=o(()=>yh()&&x2e()?!0:yh()?!1:typeof window>"u","isBackendService"),D2e=o(()=>process&&!process.env.NO_JS,"isJSAllowed"),P2e=o(e=>{let t=e,r=new RegExp(QT),n=new RegExp($5t),i=t.match(n);i&&i.forEach(a=>{t=t.replace(a,"")});let s=t.match(r);return s||[]},"findDoubleHbsInstances"),N2e=o(e=>e.match(G5t),"isAlphaNumeric"),j8=o((e,t,r,n)=>e.slice(0,t)+n+e.slice(t+r),"swapStrings");var ZN=o(e=>Buffer.from(e,"base64").toString("utf-8"),"atob"),L2e=o((e,t,r)=>{let n=t.map(s=>s.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")),i=new RegExp(`\\b(${n.join("|")})\\b`,"g");return e.replace(i,`${r}$1`)},"prefixStrings");function eL(e){return`
|
|
466
|
+
`).filter(d=>XPe.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 LHt=["GET","HEAD","OPTIONS"],kHt=["application/x-www-form-urlencoded","multipart/form-data","text/plain"];function gP(e={noCsrfPatterns:[]}){let t=Jp(e.noCsrfPatterns);return async(r,n)=>{if(Xp(r,t)||LHt.indexOf(r.method)!==-1)return n();let s=r.get("content-type")?r.get("content-type").toLowerCase():"";if(!kHt.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 tNe(e){if(e.includes("-----BEGIN PRIVATE KEY-----"))return!0;for(let t of sne){let r=L[t];if(!(typeof r!="string"||r==="")&&e.includes(r))return!0}return!1}o(tNe,"stringContainsSecret");async function rNe(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:oOe(r)};if(tNe(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(rNe,"errorHandling");var nNe=o(async(e,t)=>{let n=Vu(e,"budibase:featureflags")?.flags||{};await Aq(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"),nE(r)||e.throw(403,"Unauthorized"),t()}o(yP,"internalApi");async function iNe(e,t){return e.ip?await Eq(e.ip,()=>t()):t()}o(iNe,"ip");var dT={};G(dT,{body:()=>MHt,params:()=>UHt});var XQ=U(require("joi"));function oNe(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:XQ.default.any().optional(),updatedAt:XQ.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(oNe,"validate");function MHt(e,t){return oNe(e,"body",t)}o(MHt,"body");function UHt(e,t){return oNe(e,"params",t)}o(UHt,"params");var Oy={};G(Oy,{authenticate:()=>qHt,options:()=>BHt});function zn(e,t,r){return e(r,null,{message:t})}o(zn,"authError");async function wf(e,t){if(t&&t.callbackURL)return t.callbackURL;let r=await q3(),n="/api/global/auth";return Dl()&&(n+=`/${Ue()}`),n+=`/${e}/callback`,`${r.platformUrl}${n}`}o(wf,"ssoCallbackUrl");var ZQ="Invalid credentials",FHt="This account has expired. Please reset your password",BHt={passReqToCallback:!0};async function qHt(e,t,r,n){if(!t)return zn(n,"Email Required");if(!r)return zn(n,"Password Required");let i=await oa(t);return i==null?(console.info(`user=${t} could not be found`),zn(n,ZQ)):i.status==="inactive"?(console.info(`user=${t} is inactive`,i),zn(n,ZQ)):i.password?await _1(r,i.password)?(delete i.password,n(null,i)):zn(n,ZQ):(console.info(`user=${t} has no password set`,i),zn(n,FHt))}o(qHt,"authenticate");var wc={};G(wc,{buildVerifyFn:()=>BLe,getCallbackUrl:()=>e3t,strategyFactory:()=>MK});var pT=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=og(e.userId),s;try{s=await Gp(i)}catch(u){if(!u.status||u.status!==404)return zn(r,"Unexpected error when retrieving existing user",u)}if(s||(s=await oa(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 jHt(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 jHt(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(jHt,"syncUser");var Z4t=LK().OAuth2Strategy;function BLe(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(BLe,"buildVerifyFn");async function MK(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=BLe(r);return new Z4t({clientID:e.clientID,clientSecret:e.clientSecret,callbackURL:t},s)}catch(n){throw new Error(`Error constructing google authentication strategy: ${n}`)}}o(MK,"strategyFactory");async function e3t(e){return wf("google",e)}o(e3t,"getCallbackUrl");var Ec={};G(Ec,{buildVerifyFn:()=>fke,fetchStrategyConfig:()=>p3t,getCallbackUrl:()=>h3t,strategyFactory:()=>d3t});var cke=U(require("node-fetch"));var lke=U(uke());function fke(e){return async(t,r,n,i,s,a,u,c,l)=>{let f=c3t(r,n),d=l3t(r,n),p={provider:t,providerType:"oidc",userId:f.id,profile:f,email:f3t(f,d),oauth2:{accessToken:a,refreshToken:u}};return bP(p,!1,l,e)}}o(fke,"buildVerifyFn");function c3t(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(c3t,"normalizeProfile");function l3t(e,t){return{email:e?._json?.email||t.emails?.[0]?.value,preferred_username:t.username}}o(l3t,"buildJwtClaims");function f3t(e,t){if(e._json.email)return e._json.email;if(t.email)return t.email;let r=t.preferred_username;if(r&&Vq(r))return r;throw new Error(`Could not determine user email from profile ${JSON.stringify(e)} and claims ${JSON.stringify(t)}`)}o(f3t,"getEmail");async function d3t(e,t){try{let r=fke(t),n=new lke.Strategy(e,r);return n.name="oidc",n}catch(r){throw new Error(`Error constructing OIDC authentication strategy - ${r}`)}}o(d3t,"strategyFactory");async function p3t(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,cke.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(p3t,"fetchStrategyConfig");async function h3t(){return wf("oidc")}o(h3t,"getCallbackUrl");function dke(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(dke,"querystringToBody");function FP(e,t,r={noTenancyRequired:!1}){let n=Jp(e),i=Jp(t);return async function(s,a){let c={allowNoTenant:r.noTenancyRequired||!!Xp(s,i)};!!Xp(s,n)||(c.excludeStrategies=["query"]);let f=tE(s,c);return s.set("x-budibase-tenant-id",f),Wi(f,a)}}o(FP,"tenancy");function pke(){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(pke,"activeTenant");async function BP(e,t){if(e.internal||Ya(e.user))return t();let r=await Gd(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&&!Yi(e.user)&&e.throw(403,"Admin/Builder user only endpoint."),t()}o(BP,"workspaceBuilderOrAdmin");var jK={};G(jK,{postAuth:()=>y3t,preAuth:()=>g3t});var m3t=LK().OAuth2Strategy;async function hke(){let e=await j3();if(!e)throw new Error("No google configuration found");return e}o(hke,"fetchGoogleCreds");async function g3t(e,t,r){let n=await hke(),s=`${await iT({tenantAware:!1})}/api/global/auth/datasource/google/callback`,a=await MK(n,s,pT);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(g3t,"preAuth");async function y3t(e,t,r){let n=await hke(),s=`${await iT({tenantAware:!1})}/api/global/auth/datasource/google/callback`,a=Vu(t,"budibase:datasourceauth");if(!a)throw new Error("Unable to fetch datasource auth cookie");return e.authenticate(new m3t({clientID:n.clientID,clientSecret:n.clientSecret,callbackURL:s},(u,c,l,f)=>{Nl(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 cc(`datasource:creation:${a.appId}:google:${f}`,{tokens:c}),t.redirect(`${l}/new?continue_google_setup=${f}`)})(t,r)}o(y3t,"postAuth");var b3t={google:jK};var nMe=Qke(),L3t=tMe().Strategy,QP=rMe(),k3t=pP,M3t=FP,U3t=gP,F3t=nMe;nMe.use(new L3t(Oy.options,Oy.authenticate));async function B3t(e,t){let r=await Ec.getCallbackUrl(),n,i;try{if(n=await Ec.fetchStrategyConfig(e,r),!n)throw new Error("OIDC Config contents invalid");i=await Ec.strategyFactory(n,pT)}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(B3t,"refreshOIDCAccessToken");async function q3t(e,t){let r=await wc.getCallbackUrl(e),n;try{n=await wc.strategyFactory(e,r,pT)}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(q3t,"refreshGoogleAccessToken");async function j3t(e,t,r){switch(t){case"oidc":{if(!r)return{err:{data:"OIDC config id not provided"}};let n=await W3(r);return n?B3t(n,e):{err:{data:"OIDC configuration not found"}}}case"google":{let n=await UD();return n?q3t(n,e):{err:{data:"Google configuration not found"}}}}}o(j3t,"refreshOAuthToken");async function W3t(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 JS(e)}catch(n){console.error("Could not update OAuth details for current user",n)}}o(W3t,"updateUserOAuth");async function G3t(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=Vu(t,"budibase:auth"),s=await s4(r);i&&n?s=s.filter(u=>u.sessionId!==i.sessionId):Nl(t,"budibase:auth");let a=s.map(({sessionId:u})=>u);await TS(r,{sessionIds:a,reason:"logout"}),await ED.logout(t.user?.email),await JS(r)}o(G3t,"platformLogout");var zP={};G(zP,{validate:()=>K3t});var be=U(require("joi"));var $3t=["Relational","Non-relational","Spreadsheet","Object store","Graph","API"];function e6(e,t){let{error:r}=e.validate(t);if(r)throw r}o(e6,"runJoi");function V3t(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)});e6(t,e)}o(V3t,"validateComponent");function H3t(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(Tn).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(...$3t),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()}))})});e6(n,e)}o(H3t,"validateDatasource");function Q3t(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(...UX).required(),inputs:be.default.object().optional(),schema:be.default.object({inputs:r,outputs:r}).required()})});e6(n,e)}o(Q3t,"validateAutomation");function K3t(e){switch(e?.type){case"component":V3t(e);break;case"datasource":H3t(e);break;case"automation":Q3t(e);break;default:throw new Error(`Unknown plugin type - check schema.json: ${e.type}`)}}o(K3t,"validate");var Za={};G(Za,{Client:()=>jn,clients:()=>Pl,locks:()=>Oi,utils:()=>YR});var XP={};G(XP,{isBlacklisted:()=>Y3t,refreshBlacklist:()=>aMe});var iMe=U(require("dns")),JP=U(require("net"));var oMe=require("util");var YP,z3t=(0,oMe.promisify)(iMe.default.lookup);async function sMe(e){return JP.default.isIP(e)||(e.startsWith("http")||(e=`https://${e}`),e=new URL(e).hostname),(await z3t(e,{all:!0})).map(r=>r.address)}o(sMe,"lookup");async function aMe(){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 sMe(i);r=r.concat(s)}}YP=r}o(aMe,"refreshBlacklist");async function Y3t(e){if(YP||await aMe(),YP?.length===0)return!1;let t;return JP.default.isIP(e)?t=[e]:t=await sMe(e),!!YP?.find(r=>t.includes(r))}o(Y3t,"isBlacklisted");var $4r={"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:()=>a6,Sql:()=>yMe,SqlTable:()=>ZP,designDoc:()=>u6,utils:()=>hq});var pMe=require("knex");var J3t=require("knex");function t6(e){return["link","formula","ai"].indexOf(e)!==-1}o(t6,"isIgnoredType");function cMe(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}=cq(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:Be.unreachable(g)}}let d=i?n?.schema[i.old].type:void 0;return i&&d&&!t6(d)&&e.renameColumn(i.old,i.updated),n&&Object.entries(n.schema).filter(([h,m])=>!t6(m.type)&&t.schema[h]==null).forEach(([h,m])=>{i?.old===h||t6(m.type)||(n.constrained&&n.constrained.indexOf(h)!==-1&&e.dropForeign(h),e.dropColumn(h))}),e}o(cMe,"generateSchema");function X3t(e,t,r){return e.createTable(t.name,n=>{cMe(n,t,r)})}o(X3t,"buildCreateTable");function Z3t(e,t,r,n,i){return e.alterTable(t.name,s=>{cMe(s,t,r,n,i)})}o(Z3t,"buildUpdateTable");function eQt(e,t){return e.dropTable(t.name)}o(eQt,"buildDeleteTable");var r6=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,J3t.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=X3t(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=Z3t(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=eQt(r,t.table);break;default:throw new Error("Table operation is of unknown type")}return Zm(n)}},ZP=r6;var hMe=require("lodash");var a6="__bb_total";function lMe(){return(L.SQL_MAX_ROWS?parseInt(L.SQL_MAX_ROWS):null)||5e3}o(lMe,"getBaseLimit");function n6(){return(L.SQL_MAX_RELATED_ROWS?parseInt(L.SQL_MAX_RELATED_ROWS):null)||500}o(n6,"getRelationshipLimit");function rQt(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(rQt,"prioritisedArraySort");function mMe(e){return Array.isArray(e)?e.map(t=>mMe(t)):(e.bindings&&(e.bindings=e.bindings.map(t=>typeof t=="boolean"?t?1:0:t)),e)}o(mMe,"convertBooleans");function fMe(e){return e.sourceType==="internal"||e.sourceId===Un}o(fMe,"isSqs");function nQt(e,t='"'){return e.replace(new RegExp(t,"g"),`${t}${t}`)}o(nQt,"escapeQuotes");function iQt(e,t='"'){return`${t}${nQt(e,t)}${t}`}o(iQt,"wrap");function oQt(e,t='"'){for(let r in e)typeof e[r]=="string"&&(e[r]=iQt(e[r],t));return`[${e.join(",")}]`}o(oQt,"stringifyArray");function i6(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(i6,"toPgArrayLiteral");function gMe(e){return XA.includes(e.type)&&!de.schema.isDeprecatedSingleUserColumn(e)}o(gMe,"isJsonColumn");var sQt={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},o6=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()&&gMe(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(!dq(t))return null}else if(r.dateOnly){let n=fq(t);return n?new Date(n):null}else return r.ignoreTimezones?eI(t)?new Date(t):lq(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,hMe.cloneDeep)(t);for(let r of Object.values(Jf)){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(Hh)){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=pq(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=eE(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,sQt[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,i6(A)]):w.whereRaw("COALESCE(??::jsonb \\?| ?::text[], FALSE)",[R,i6(A)]):O?w.whereRaw("COALESCE(?? @> ?::text[], FALSE)",[R,i6(A)]):w.whereRaw("COALESCE(??::jsonb @> ?::jsonb, FALSE)",[R,oQt(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&&!uq(this.table)&&m&&t.andWhereLike(`${m}._id`,`${ti(r.documentType)}%`),t}isSqs(){return fMe(this.table)}getTableName(t){t||(t=this.table);let r=t.name;fMe(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 ${a6}`)}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=rQt(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(n6()),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 ${n6()})`));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(n6())});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())}},s6=class extends ZP{constructor(r,n=lMe()){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=mMe(s)),s}}_query(r,n={}){let i=this.getSqlClient(),s={client:this.getBaseSqlClient()};(i==="sqlite3"||i==="oracledb")&&(s.useNullAsDefault=!0);let a=(0,pMe.knex)(s),u,c=new o6(i,a,r);switch(this._operation(r)){case"CREATE":u=c.create(n);break;case"READ":u=c.read({limits:{query:this.limit,base:lMe()}});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(!gMe(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){$w(this.getSqlClient(),r,n)}},yMe=s6;var u6={};G(u6,{base:()=>aQt});function aQt(e){return{_id:Fn,language:"sqlite",sql:{tables:{},options:{table_name:e}}}}o(aQt,"base");var bT={};G(bT,{jsonFromCsvString:()=>uQt});var bMe=U(require("csvtojson"));async function uQt(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,bMe.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(uQt,"jsonFromCsvString");var lQt=U(require("@koa/router"));var Ae={...rE,...C},_Me=o((e={})=>{XO(e.db)},"init");var tqe=U(SMe()),rqe=U(require("vm")),z8=U(PT());var Rc=class{static{o(this,"Helper")}constructor(t,r,n=!0){this.name=t,this.fn=r,this.useValueFallback=n}register(t){t.registerHelper(this.name,(r,n)=>{let i={};n&&n.data&&n.data.root&&(i=n.data.root);let s=this.fn(r,i);return s??(this.useValueFallback?r:null)})}unregister(t){t.unregisterHelper(this.name)}};var rL=U(PT());var U8=U(g2e());var Zn=U(require("dayjs")),y2e=U(require("dayjs/plugin/duration")),b2e=U(require("dayjs/plugin/advancedFormat")),_2e=U(require("dayjs/plugin/isoWeek")),w2e=U(require("dayjs/plugin/weekYear")),E2e=U(require("dayjs/plugin/weekOfYear")),S2e=U(require("dayjs/plugin/relativeTime")),T2e=U(require("dayjs/plugin/utc")),v2e=U(require("dayjs/plugin/timezone"));Zn.default.extend(y2e.default);Zn.default.extend(b2e.default);Zn.default.extend(_2e.default);Zn.default.extend(w2e.default);Zn.default.extend(E2e.default);Zn.default.extend(S2e.default);Zn.default.extend(T2e.default);Zn.default.extend(v2e.default);function mh(e){return typeof e=="object"&&typeof e.hash=="object"}o(mh,"isOptions");function L8(e){return typeof e=="object"&&typeof e.options=="object"&&typeof e.app=="object"}o(L8,"isApp");function k8(e,t,r){if(mh(e))return k8({},t,e);if(mh(t))return k8(e,r,t);let n=L8(e)?e.context:{};r=r||{},mh(r)||(t=Object.assign({},t,r)),mh(r)&&r.hash.root===!0&&(t=Object.assign({},r.data.root,t));let i=Object.assign({},n,t,r.hash);return L8(e)||(i=Object.assign({},e,i)),L8(e)&&e.view&&e.view.data&&(i=Object.assign({},i,e.view.data)),i}o(k8,"getContext");function M8(e,t,r){return mh(t)&&(r=t,t=R2e),mh(e)&&(r=e,t=null,e=null),{str:e,pattern:t,options:r}}o(M8,"initialConfig");function A2e(e,t,r){let n=M8(e,t,r),i={lang:"en",date:new Date(n.str)},s=k8(this,i,{});Zn.default.locale(s.lang||s.language)}o(A2e,"setLocale");var R2e="MMMM DD, YYYY",YN=o((e,t,r)=>{let n=M8(e,t,r);if(n.str==null&&n.pattern==null)return Zn.default.locale("en"),(0,Zn.default)().format(R2e);A2e(n.str,n.pattern,n.options);let i=(0,Zn.default)(new Date(n.str));return typeof n.options=="string"?i=n.options.toLowerCase()==="utc"?i.utc():i.tz(n.options):i=i.tz(Zn.default.tz.guess()),n.pattern===""?i.toISOString():i.format(n.pattern)},"date"),VT=o((e,t,r)=>{let n=M8(e,t);A2e(n.str,n.pattern);let i=Zn.default.duration(n.str,n.pattern);return r&&!mh(r)?i.format(r):i.humanize()},"duration"),HT=o((e,t,r)=>(0,Zn.default)(new Date(e)).diff((0,Zn.default)(new Date(t)),r),"difference"),JN=o(e=>{let t=HT(e,new Date().toISOString(),"ms");return VT(t,"ms")},"durationFromNow");var XN=["#if","#unless","#each","#with","lookup","log","blockHelperMissing","each","helperMissing","if","unless","log","lookup","with"],O2e=["math","array","number","url","string","comparison","object","regex","uuid"],gh={OBJECT:"object",ALL:"all",LITERAL:"literal",JS:"js",DECODE_ID:"decodeId"},Qy="%LITERAL%";var I2e={date:YN,duration:VT,difference:HT,durationFromNow:JN};function C2e(e){for(let[r,n]of Object.entries(I2e))e.registerHelper(r,n);let t=[];for(let r of O2e){let n=U8.default[r]();for(let i of Object.entries(n)){let s=i[0];XN.indexOf(s)!==-1||t.indexOf(s)!==-1||t.push(s)}U8.default[r]({handlebars:e})}F8=t.concat(Object.keys(I2e))}o(C2e,"registerAll");var F8=[];function W5t(){return process.env.NODE_ENV==="jest"||process.env.JEST_WORKER_ID!=null&&process.env.JEST_WORKER_ID!=="null"}o(W5t,"isJest");function yh(){return W5t()}o(yh,"isTest");var x2e=o(()=>process&&process.env.BACKEND_JS,"isTestingBackendJS"),B8=o(()=>{process.env.BACKEND_JS="1"},"setTestingBackendJS");var G5t=/^[A-Za-z0-9]+$/g,QT=/{{([^{].*?)}}/g,q8=/{?{{([^{].*?)}}}?/g,$5t=/{{{([^{].*?)}}}/g,KT=o(()=>yh()&&x2e()?!0:yh()?!1:typeof window>"u","isBackendService"),D2e=o(()=>process&&!process.env.NO_JS,"isJSAllowed"),P2e=o(e=>{let t=e,r=new RegExp(QT),n=new RegExp($5t),i=t.match(n);i&&i.forEach(a=>{t=t.replace(a,"")});let s=t.match(r);return s||[]},"findDoubleHbsInstances"),N2e=o(e=>e.match(G5t),"isAlphaNumeric"),j8=o((e,t,r,n)=>e.slice(0,t)+n+e.slice(t+r),"swapStrings");var ZN=o(e=>Buffer.from(e,"base64").toString("utf-8"),"atob"),L2e=o((e,t,r)=>{let n=t.map(s=>s.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")),i=new RegExp(`\\b(${n.join("|")})\\b`,"g");return e.replace(i,`${r}$1`)},"prefixStrings");function eL(e){return`
|
|
467
467
|
result = {
|
|
468
468
|
result: null,
|
|
469
469
|
error: null,
|
|
@@ -972,7 +972,7 @@ Example: return $("Score") + $("Weight")
|
|
|
972
972
|
if (${h} ${f}) {
|
|
973
973
|
${d}
|
|
974
974
|
}
|
|
975
|
-
}`,...m}}o(wb,"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(Pc).indexOf(n)!==-1)continue;let s=r.views?.[n];s&&t.push({name:n,...s})}}else{let r=(await e.allDocs(Sqe({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 VJ(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=ev(t),s=e?ev(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(VJ,"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=wb(n);delete r.views?.[t],await e.put(r),await VJ(null,t,i)}o(fHe,"migrateToInMemoryView");async function dHe(e,t){let r=await e.get(ev(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]=wb(i),await e.put(n),await e.remove(r._id,r._rev)}o(dHe,"migrateToDesignView");async function HJ(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(HJ,"getFromDesignDoc");async function QJ(e,t){let r=await e.get(ev(t));if(r)return r.view;throw{status:404,message:"Unable to get view"}}o(QJ,"getFromMemoryDoc");var hHe=require("lodash/fp"),JJ=U(require("lodash/isEqual")),mHe=U(require("lodash/uniq"));var Eb=require("lodash/fp"),pHe=U(require("lodash/isEqual"));function btr(e,t){let r=(0,Eb.merge)(e,t);for(let n of Object.keys(t))t[n]===void 0&&delete r[n];return r}o(btr,"mergeRows");async function Hk(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=>uA(u,l,{updateFormula:!1,updateAIColumns:!1})));break}}}await Promise.all(n)}o(Hk,"updateRelatedFormula");async function KJ(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,Eb.cloneDeep)(r),{squash:!1}),i=[];for(let s of r){let a=n.find(u=>u._id===s._id);if(a){let u=await mu(e,(0,Eb.cloneDeep)(s),{dynamic:!1,contextRows:[a]});(0,pHe.default)(u,s)||i.push(u)}}await t.bulkDocs(i)}o(KJ,"updateAllFormulasInTable");async function uA(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,Eb.cloneDeep)(t),{squash:!1});t=await mu(a,t,{dynamic:!1,contextRows:[u]}),s&&(t=await X$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=btr(c,u),u=await mu(a,u,{dynamic:!1}),i&&await Hk(a,u);let l=await _k(e,u);return{row:u,squashed:l,table:a}}o(uA,"finaliseRow");function gHe(e){return e.type==="formula"&&e.formulaType==="static"}o(gHe,"isStaticFormula");function zJ(e,t){let r=[];t=Array.isArray(t)?t:[t];for(let n of Object.values(e.schema))gHe(n)&&oqe(n?.formula??"",t)&&r.push(n.name);return r}o(zJ,"getFormulaThatUseColumn");async function _tr(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=zJ(u,a.name);if(c.length>0&&await YJ(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(zJ(d,[h.fieldName,a.name]));p.length>0&&await YJ(d,(0,mHe.default)(p))}}}}o(_tr,"checkIfFormulaNeedsCleared");async function wtr(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(xf);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=zJ(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,JJ.default)(u,c)&&await n.put(c)}}o(wtr,"updateRelatedFormulaLinksOnTables");async function Etr(e,{oldTable:t}){Object.values(e.schema).find(n=>gHe(n)&&(!t||!t.schema[n.name]||!(0,JJ.default)(t.schema[n.name],n)))!=null&&await KJ(e)}o(Etr,"checkIfFormulaUpdated");async function Qk(e,{oldTable:t,deletion:r}){await wtr(e,{deletion:r}),await _tr(e,{oldTable:t,deletion:r}),r||await Etr(e,{oldTable:t})}o(Qk,"runStaticFormulaChecks");async function YJ(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(YJ,"clearColumns");async function Str(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 Bc.tableUpdate(e,u,{oldTable:t,rename:r}),await Rtr(e,s,r)}return{rows:i,table:e}}o(Str,"checkForColumnUpdates");function Ttr(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(Ttr,"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||pqe(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 ZJ(e,t){let r=e.schema,n=t?.identifierFields||[],i=t?.importRows;if(!i||!Vk(i)||!$k(r))return e;let s=C.getWorkspaceDB(),a=GJ(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 wr.addRows(c,()=>s.bulkDocs(u),{tableId:e._id}),await Oe.rows.imported(e,u.length),e}o(ZJ,"handleDataImport");async function vtr(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(vtr,"handleSearchIndexes");function Atr(e){if(e._id===$t.USER_METADATA)for(let[t,r]of Object.entries(Iqe.schema))e.schema[t]==null&&(e.schema[t]=r);return e}o(Atr,"checkStaticTables");var XJ=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=Ttr(this.oldTable,t)),t=Atr(t),t}async mid(t,r){let n=await Str(t,this.oldTable,r);return this.rows=this.rows.concat(n.rows),t}async after(t){return t=await vtr(t),t=await ZJ(t,{importRows:this.importRows,userId:this.userId}),await P.tables.sqs.addTable(t),t}getUpdatedRows(){return this.rows}};async function Rtr(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=wb(u,c?.type==="array"),f=s.name;await VJ(null,f,l),l.meta?.schema||(l.meta.schema=e.schema),e.views?.[f]&&(e.views[f]=l.meta)}}}o(Rtr,"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 cA(e,t){let r={type:"number",constraints:{},name:e};return t&&(r.meta=t),r}o(cA,"foreignKeyStructure");function Otr(e,t){if(az.indexOf(e)===-1&&az.indexOf(t)===-1)return!1;for(let r of sz){let n=r.indexOf(e),i=r.indexOf(t);if(n!==-1&&i!==-1&&n!==i)return!0}return!1}o(Otr,"areSwitchableTypes");function Kk(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&&!Otr(i,s))return!0}return!1}o(Kk,"hasTypeChanged");function THe(e,t){return t&&e.source==="GOOGLE_SHEETS"&&(t.primary=[nv],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 Qk(e,{deletion:!0}),t&&await Bc.tableDelete(e,t),await P.tables.sqs.removeTable(e)}o(vHe,"internalTableCleanup");var AHe=XJ;var e7=require("lodash/fp");function t7(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(t7,"cleanupRelationships");function Itr(e){return e==="many-to-many"?"many-to-many":e==="one-to-many"?"many-to-one":"one-to-many"}o(Itr,"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:ro(u,a),name:a,primary:[i,s],constrained:[i,s],sourceId:u,sourceType:"external",schema:{[i]:cA(i,{toTable:r.name,toKey:r.primary[0]}),[s]:cA(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,e7.cloneDeep)(e),i.fieldName=e.foreignKey,i.foreignKey=e.fieldName;else{let a=e;i=(0,e7.cloneDeep)(e),i.fieldName=a.throughTo,i.throughTo=a.throughFrom,i.throughFrom=a.throughTo}i.relationshipType=Itr(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 pA={};G(pA,{allowedFields:()=>Xtr,create:()=>ztr,enrichSchema:()=>Tb,get:()=>Utr,getAllEnriched:()=>Btr,getEnriched:()=>Ftr,getTable:()=>qtr,isInternal:()=>Wtr,isV2:()=>Qr,isView:()=>jtr,remove:()=>Jtr,renameLinkedViews:()=>Ztr,syncSchema:()=>dA,update:()=>Ytr});var r7={};G(r7,{create:()=>xtr,get:()=>DHe,getEnriched:()=>Ctr,remove:()=>Ptr,update:()=>Dtr});var lA=require("lodash");function xHe(e){return e&&(0,lA.isPlainObject)(e)&&Object.keys(e).length===0}o(xHe,"isEmptyObject");function so(e){let t=(0,lA.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=Be.processSearchFilters(t.query)}return t}o(so,"ensureQueryUISet");function Sb(e){let t=(0,lA.cloneDeep)(e);return t.queryUI&&!xHe(t.queryUI)&&(t.query=Tt.buildQuery(t.queryUI)),t}o(Sb,"ensureQuerySet");async function DHe(e){let t=Zr(e),{datasourceId:r,tableName:n}=_r(t),s=(await P.datasources.get(r)).entities[n],u=Object.values(s.views).filter(Qr).find(c=>c.id===e);if(!u)throw new Error("No view found");return so(u)}o(DHe,"get");async function Ctr(e){let t=Zr(e),{datasourceId:r,tableName:n}=_r(t),s=(await P.datasources.get(r)).entities[n],u=Object.values(s.views).filter(Qr).find(c=>c.id===e);if(u)return await Tb(so(u),s.schema)}o(Ctr,"getEnriched");async function xtr(e,t){let r={...t,id:uL(e),version:2};r=Sb(r),r=so(r);let n=C.getWorkspaceDB(),{datasourceId:i,tableName:s}=_r(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(xtr,"create");async function Dtr(e,t){let r=C.getWorkspaceDB(),{datasourceId:n,tableName:i}=_r(e),s=await P.datasources.get(n);s.entities[i].views??={};let a=s.entities[i].views,u=Object.values(a).find(c=>Qr(c)&&c.id===t.id);if(!u||!u.name)throw new K(`View ${t.id} not found in table ${e}`,404);if(Qr(u)&&u.type!==t.type)throw new K("Cannot update view type after creation",400);return t=Sb(t),t=so(t),delete a[u.name],a[t.name]=t,await r.put(s),{view:t,existingView:u}}o(Dtr,"update");async function Ptr(e){let t=C.getWorkspaceDB(),r=await DHe(e);if(!r)throw new K(`View ${e} not found`,404);let{datasourceId:n,tableName:i}=_r(r.tableId),s=await P.datasources.get(n);return delete s.entities[i].views[r?.name],await t.put(s),r}o(Ptr,"remove");var n7={};G(n7,{create:()=>Ltr,get:()=>PHe,getEnriched:()=>Ntr,remove:()=>Mtr,update:()=>ktr});async function PHe(e){let t=Zr(e),r=await P.tables.getTable(t),i=Object.values(r.views).filter(Qr).find(s=>s.id===e);if(!i)throw new Error("No view found");return so(i)}o(PHe,"get");async function Ntr(e){let t=Zr(e),r=await P.tables.getTable(t),i=Object.values(r.views).filter(Qr).find(s=>s.id===e);if(i)return await Tb(so(i),r.schema)}o(Ntr,"getEnriched");async function Ltr(e,t){let r={...t,id:uL(e),version:2};r=Sb(r),r=so(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(Ltr,"create");async function ktr(e,t){let r=C.getWorkspaceDB(),n=await P.tables.getTable(e);n.views??={};let i=Object.values(n.views).find(s=>Qr(s)&&s.id===t.id);if(!i||!i.name)throw new K(`View ${t.id} not found in table ${e}`,404);if(Qr(i)&&i.type!==t.type)throw new K("Cannot update view type after creation",400);return t=Sb(t),t=so(t),delete n.views[i.name],n.views[t.name]=t,await r.put(n),{view:t,existingView:i}}o(ktr,"update");async function Mtr(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(Mtr,"remove");function fA(e){return kt(e)?r7:n7}o(fA,"pickApi");async function Utr(e){let t=Zr(e);return fA(t).get(e)}o(Utr,"get");async function Ftr(e){let t=Zr(e);return fA(t).getEnriched(e)}o(Ftr,"getEnriched");async function Btr(){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(Qr),i=await Promise.all(n.map(s=>Tb(so(s),r.schema,e)));t=t.concat(i)}return t}o(Btr,"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 jtr(e){return e.id&&dn(e.id)&&e.version===2}o(jtr,"isView");function Wtr(e){if(!dn(e))return!1;let t=Zr(e);return!kt(t)}o(Wtr,"isInternal");function Gtr(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(Gtr,"guardDuplicateCalculationFields");function $tr(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($tr,"guardDuplicateCountDistinctFields");async function Vtr(e,t){let r=de.views.calculationFields(t);if(Gtr(t),$tr(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")&&!LM(a.type)&&!jX(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(!WX(s))throw new K(`Grouping by fields of type "${s.type}" is not supported`,400)}}o(Vtr,"guardCalculationViewSchema");async function NHe(e,t){let r=await P.tables.getTable(e);if(de.views.isCalculationView(t))await Vtr(r,t);else if(de.views.hasCalculationFields(t))throw new K("Calculation fields are not allowed in non-calculation views",400);await Htr(r,t),de.views.isCalculationView(t)||Ktr(r,t),Qtr(t)}o(NHe,"guardViewSchema");async function Htr(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(Htr,"checkReadonlyFields");function Qtr(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(Qtr,"checkDisplayField");function Ktr(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(Ktr,"checkRequiredFields");async function ztr(e,t){await NHe(e,t);let r=await fA(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(ztr,"create");async function Ytr(e,t){return await NHe(e,t),fA(e).update(e,t)}o(Ytr,"update");function Qr(e){return de.views.isV2(e)}o(Qr,"isV2");async function Jtr(e){let t=Zr(e);return fA(t).remove(e)}o(Jtr,"remove");function Xtr(e,t){return[...Object.keys(e?.schema||{}).filter(r=>{if(!Qr(e))return!0;let n=e.schema[r];return t==="WRITE"?n.visible&&!n.readonly:n.visible}),...Os,...vn]}o(Xtr,"allowedFields");async function Tb(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(Tb,"enrichSchema");function dA(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(dA,"syncSchema");async function Ztr(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(Ztr,"renameLinkedViews");var hA="id";function kHe(e){return e.primary==null||e.primary.length===0}o(kHe,"noPrimaryKey");function err(e,t){if(!t&&e.schema[hA]&&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(Kk(e,t))throw new Error("A column type has changed.");let r=Object.values(Jc);for(let[n,i]of Object.entries(e.schema))if(n!==hA){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(err,"validate");function trr(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 _r(e._id).datasourceId}o(trr,"getDatasourceId");async function i7(e){let t=trr(e),r={...e,created:!0};try{return(await zk(t,r)).table}catch(n){throw n instanceof Error?new K(n.message,400):new K(n?.message||n,n.status||500)}}o(i7,"create");async function zk(e,t,r){let n={...t,type:"table",_id:ro(e,t.name),sourceId:e},i=r?.tableId||t._id,s;i&&(s=await vb(i)),err(n,s),!s&&kHe(n)&&(n.primary=[hA],n.schema[hA]={type:"number",autocolumn:!0,name:hA});for(let h in n.views){let m=n.views[h];!m||!Qr(m)||(n.views[h]=dA(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]=cA(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&&t7(n,l,{oldTable:s});let d=i?"UPDATE_TABLE":"CREATE_TABLE";await Wk(u,d,n,s,r?.renaming);for(let h of f){let m=c[h.name],g=m?"UPDATE_TABLE":"CREATE_TABLE";await Wk(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(iA(u));let p=await yu.get(u._id);return p.isSQL&&(n.sql=!0),{datasource:p,table:n,oldTable:s}}o(zk,"save");async function rrr(e,t){let r=C.getWorkspaceDB(),n=await yu.get(e),i=n.entities,s="DELETE_TABLE";return i&&(await Wk(n,s,t),t7(t,i,{deleting:!0}),delete i[t.name],n.entities=i),await r.put(iA(n)),{datasource:await yu.get(n._id),table:t}}o(rrr,"destroy");var gA={};G(gA,{create:()=>o7,destroy:()=>nrr,save:()=>Yk});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]=Zv(n)}return e}o(MHe,"checkAutoColumns");async function o7(e,t,r){let i={_id:ez(),...e,type:e.type||"table",sourceType:"internal"},s=!!t;i.views||(i.views={});try{let{table:a}=await Yk(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(o7,"create");async function Yk(e,t){let r=C.getWorkspaceDB(),n;if(t?.tableId&&(n=await vb(t.tableId)),Kk(e,n))throw new Error("A column type has changed.");let i=Lre(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(Qr(h)){n?.views&&n.views[p]&&(e.views[p]=dA(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 Qk(e,{oldTable:n,deletion:!1}),{table:e,oldTable:n}}o(Yk,"save");async function nrr(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 wr.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(nrr,"destroy");var a7={};G(a7,{isExternal:()=>Ab,isInternal:()=>s7,isTable:()=>irr});function Ab(e){return e.table&&e.table.sourceType==="external"?!0:!!(e.tableId&&kt(e.tableId))}o(Ab,"isExternal");function s7(e){return!Ab(e)}o(s7,"isInternal");function irr(e){return e._id&&Ls(e._id)}o(irr,"isTable");var d7={};G(d7,{PermissionUpdateType:()=>qHe,getAllDBRoles:()=>WHe,getDependantResources:()=>srr,getInheritablePermissions:()=>jHe,getResourcePerms:()=>l7,setPermissions:()=>f7,updatePermissionOnRole:()=>c7});var u7=[Wr.PermissionLevel.WRITE,Wr.PermissionLevel.READ,Wr.PermissionLevel.EXECUTE];function orr(e){switch(Kre(e)){case"view":return Wr.PermissionType.TABLE}switch(Qre(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(orr,"getPermissionType");function BHe(e){let t=orr(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&&u7.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(dn(e))return await l7(Zr(e))}o(jHe,"getInheritablePermissions");async function l7(e){let t=await Et.getAllRoles(),r={},n=await jHe(e);for(let s of u7)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(l7,"getResourcePerms");async function srr(e){if(Ls(e)){let t={},r=await P.tables.getTable(e),n=Object.values(r.views||{});for(let i of n){if(!Qr(i))continue;let s=await l7(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(srr,"getDependantResources");async function c7({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&&(eje(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(c7,"updatePermissionOnRole");async function f7(e,{writeRole:t,readRole:r}){await c7({roleId:t,resourceId:e,level:"write"},"add"),await c7({roleId:r,resourceId:e,level:"read"},"add")}o(f7,"setPermissions");async function WHe(e){return(await e.allDocs(dqe(null,{include_docs:!0}))).rows.map(r=>r.doc)}o(WHe,"getAllDBRoles");async function p7(e,t,r){let n;return Ab({table:e})?n=await i7(e):n=await o7(e,t,r),await f7(n._id,{writeRole:Et.BUILTIN_ROLE_IDS.ADMIN,readRole:Et.BUILTIN_ROLE_IDS.ADMIN}),n}o(p7,"create");var m7={};G(m7,{external:()=>mA,internal:()=>gA,saveTable:()=>arr,update:()=>urr});var GHe=require("lodash");async function arr(e){let t=C.getWorkspaceDB(),r;if(kt(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(arr,"saveTable");async function urr(e,t){let r=e._id;if(Ab({table:e})){let n=e.sourceId;await zk(n,e,{tableId:r,renaming:t})}else await Yk(e,{tableId:r,renaming:t})}o(urr,"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=crr(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 crr(e,t,r){if(kt(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 g7(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 y7(e,t,r)}throw new Hn("Unknown migration type")}o(crr,"getColumnMigrator");var Jk=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]}}},g7=class extends Jk{static{o(this,"SingleUserColumnMigrator")}updateRow(t,r){t[this.newColumn.name]=F.getGlobalIDFromUserMetadataID(r.rowId)}},y7=class extends Jk{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 b7={};G(b7,{USER_COLUMN_PREFIX:()=>Rb,addTable:()=>yrr,mapToUserColumn:()=>bu,removeTable:()=>brr,syncDefinition:()=>grr});var KHe=require("lodash");var lrr=require("lodash/fp");var cEn={_id:Jy,type:F.BUDIBASE_DATASOURCE_TYPE,name:"Sample Data",source:"BUDIBASE",config:{}};var Xk={"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:""}}}},frr={_id:xqe,type:"table",views:{},sourceId:Jy,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},...Xk}},drr={_id:lz,type:"table",views:{},name:"Employees",sourceId:Jy,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:cz},"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},...Xk}},prr={_id:cz,type:"table",name:"Jobs",sourceId:Jy,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:lz,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"},...Xk}},hrr={_id:Dqe,type:"table",views:{},name:"Expenses",sourceId:Jy,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},...Xk}},HHe=[frr,drr,prr,hrr];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 mrr(e,t){let r=e._id,n=t.tableId;return{tableId:Cf(r,n),definition:{"doc1.rowId":"VARCHAR","doc1.tableId":"VARCHAR","doc1.fieldName":"VARCHAR","doc2.rowId":"VARCHAR","doc2.tableId":"VARCHAR","doc2.fieldName":"VARCHAR",tableId:"VARCHAR"}}}o(mrr,"buildRelationshipDefinitions");var Rb="data_";function bu(e){return`${Rb}${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}=mrr(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={};vn.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 qh.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 grr(){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(grr,"syncDefinition");async function yrr(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(yrr,"addTable");async function brr(e){let t=C.getWorkspaceDB();try{let[r,n]=await Promise.all([qh.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(brr,"removeTable");async function JHe(e,t){let r=await yA(),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 p7(i,void 0,t);return await Oe.table.created(s),s}o(JHe,"duplicate");var qh={populateExternalTableSchemas:iA,...h7,...m7,..._7,...a7,migrate:VHe,sqs:b7,duplicate:JHe};function _rr(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(_rr,"checkForSchemaErrors");async function XHe(e,t){let r=await wrr(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,..._rr(n.tables)}}}o(XHe,"buildFilteredSchema");async function wrr(e,t){return await(await ZHe(e)).buildSchema(e._id,e.entities,t)}o(wrr,"buildSchemaHelper");async function ZHe(e){let t=await Wf(e.source);return e._id&&(e=await kk(e)),new t(e.config)}o(ZHe,"getConnector");async function Err(e){if(e._id){let t=await Mk(e._id);e=MJ(e,t)}return await kk(e)}o(Err,"getAndMergeDatasource");async function Srr(e,t){let r=C.getWorkspaceDB(),n=await Mk(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,Uk(n);let c=await r.put(qh.populateExternalTableSchemas(n));return n._rev=c.rev,{datasource:n,errors:s}}o(Srr,"buildSchemaFromSource");var yu={...Fk,...w7};async function jh(e){return await ao.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))Qr(n)&&(e.views[r]=so(n))}return e._id&&kt(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(jh,"processTable");async function bA(e){return await ao.tracer.trace("processTables",async t=>(t.addTags({numTables:e.length}),await Promise.all(e.map(r=>jh(r)))))}o(bA,"processTables");async function Trr(e){return await ao.tracer.trace("processEntities",async t=>{t.addTags({numTables:Object.keys(e).length});for(let r of Object.keys(e))e[r]=await jh(e[r]);return e})}o(Trr,"processEntities");async function yA(e){return await ao.tracer.trace("getAllInternalTables",async t=>{e||(e=C.getWorkspaceDB()),t.addTags({db:e.name});let r=await e.allDocs(If(null,{include_docs:!0}));return t.addTags({numTables:r.rows.length}),await bA(r.rows.map(n=>n.doc))})}o(yA,"getAllInternalTables");async function vrr(e){return await ao.tracer.trace("getAllInternalTableIds",async t=>{let r=e||C.getWorkspaceDB();t.addTags({db:r.name});let{rows:n}=await r.allDocs(If(null,{include_docs:!1})),i=n.map(({id:s})=>s);return t.addTags({numTableIds:i.length}),i})}o(vrr,"getAllInternalTableIds");async function Arr(){let e=await yA(),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===$t.USER_METADATA||!i._id)continue;await n(i._id)||t.push(i._id)}return t})}o(Arr,"listEmptyProductionTables");async function e4e(){return await ao.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 bA(n)})}o(e4e,"getAllExternalTables");async function t4e(e,t){return await ao.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 jh(n[t]);return i.sourceId||(i.sourceId=e),i})}o(t4e,"getExternalTable");async function vb(e){return await ao.tracer.trace("getTable",async t=>{let r=C.getWorkspaceDB();t.addTags({tableId:e,db:r.name});let n;if(e&&kt(e)){let{datasourceId:i,tableName:s}=_r(e);t.addTags({isExternal:!0,datasourceId:i,tableName:s});let a=await yu.get(i);n={...await t4e(i,s),sql:su(a)},t.addTags({isSQL:su(a)})}else n=await r.get(e);return await jh(n)})}o(vb,"getTable");async function E7(e){return await ao.tracer.trace("doesTableExist",async t=>{t.addTags({tableId:e});try{let r=await vb(e);return t.addTags({tableExists:!!r}),!!r}catch{return t.addTags({tableExists:!1}),!1}})}o(E7,"doesTableExist");async function Rrr(){return await ao.tracer.trace("getAllTables",async e=>{let[t,r]=await Promise.all([yA(),e4e()]);return e.addTags({numInternalTables:t.length,numExternalTables:r.length}),await bA([...t,...r])})}o(Rrr,"getAllTables");async function r4e(e){return await ao.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 Trr(r.entities)})}o(r4e,"getExternalTablesInDatasource");async function Orr(e){return ao.tracer.trace("getTables",async t=>{t.addTags({numTableIds:e.length});let r=e.filter(s=>kt(s)),n=e.filter(s=>!kt(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 bA(i)})}o(Orr,"getTables");async function Irr(e){return await ao.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(Irr,"enrichViewSchemas");var Hf=U(require("dd-trace")),xA=require("lodash/fp");var n4e=U(require("node-fetch"));function Crr(e){let t={},r={method:e.method},n=e.ctx;if(!n&&L.INTERNAL_API_KEY)t[lt.Header.API_KEY]=L.INTERNAL_API_KEY;else if(n&&n.headers){for(let a of Object.values(lt.Header)){let u=n.headers[a];u!==void 0&&(t[a]=Array.isArray(u)?u[0]:u)}let i=n.headers[lt.Header.COOKIE],s=n.headers[lt.Header.API_KEY];i?t[lt.Header.COOKIE]=i:s&&(t[lt.Header.API_KEY]=Array.isArray(s)?s[0]:s)}return Ae.isTenantIdSet()&&(t[lt.Header.TENANT_ID]=Ae.getTenantId()),e.body&&Object.keys(e.body).length>0&&(t["Content-Type"]="application/json",r.body=JSON.stringify(e.body)),ke.correlation.setHeader(t),r.headers=t,r}o(Crr,"createRequest");async function xrr(e,t,{ctx:r}={}){if(e.status>=300){let n;if(e.headers.get("content-type")?.includes("json")){let s=await e.json();n=s.message??JSON.stringify(s)}else n=await e.text();let i=`Unable to ${t} - ${n}`;if(r)r.throw(e.status||500,i);else throw i}return e.json()}o(xrr,"checkResponse");async function i4e({to:e,from:t,subject:r,contents:n,cc:i,bcc:s,automation:a,invite:u,attachments:c}){let l={email:e,from:t,contents:n,subject:r,cc:i,bcc:s,purpose:"custom",automation:a,invite:u,attachments:c},f=await(0,n4e.default)(tje(ie.WORKER_URL+"/api/global/email/send"),Crr({method:"POST",body:l}));return await xrr(f,"send email")}o(i4e,"sendSmtpEmail");async function o4e({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=>rA(g)):rA(h)),{success:!0,response:await i4e({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(o4e,"run");var Vrr=U(require("archiver"));async function S7(e,t){if(!e._id||t&&kt(t))return e;let r=e._id;e._id.startsWith(aqe)&&(r="app_metadata");let i=await C.getWorkspaceDB().get(r);return e._rev=i._rev,e._id=r,e}o(S7,"addRev");function T7(e,t){return!t||!e||(t.rowId&&(e._id=t.rowId),t.tableId&&(e.tableId=t.tableId),e.type||(e.type="row")),e}o(T7,"fixRow");var I7={};G(I7,{bulkDestroy:()=>Mrr,destroy:()=>krr,fetchEnrichedRow:()=>Urr,handleRequest:()=>Mi,patch:()=>Lrr});var A7=U(require("dayjs")),EA=require("lodash"),u4e=require("lodash/fp");function Prr(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)&&Uqe(u)&&(s[a]=Fqe(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(Prr,"cleanupConfig");function wA(e,t){let{datasourceId:r,tableName:n}=_r(e);return{datasourceId:r,entityId:n,operation:t}}o(wA,"getEndpoint");function a4e(e){return e.relationshipType&&e.relationshipType.split("-")[0]==="one"}o(a4e,"isOneSide");function Nrr(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(Nrr,"isEditableColumn");var tM=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,u4e.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=wA(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:wA(i,"UPDATE"),body:{[n]:null},filters:s})}getTable(t){if(!t)throw new Error("Table ID is unknown, cannot find table");let{tableName:r}=_r(t);return this.tables[r]}async getRow(t,r){let n=await gu({endpoint:wA(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"&&!Nrr(u)))if(u.type==="number"&&!isNaN(parseFloat(t[a])))i[a]=parseFloat(t[a]);else if(u.type==="link"){let{tableName:c}=_r(u.tableId);if(!c||!this.tables[c])continue;let f=this.tables[c].primary[0];if(a4e(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(av(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,A7.default)(t[a]).isValid()?i[a]=(0,A7.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}=_r(t),s=this.tables[i],a=s.primary?.[0];for(let u of Object.values(s.schema)){if(u.type!=="link"||!u.fieldName||a4e(u))continue;let c,l,f;if(av(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=wA(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)||Gz(h)?[]:h,g=this.getLookupRelationsKey(u);n[g]={rows:m,isMany:av(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=JT(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,EA.isEqual)((0,EA.omit)(O,[I]),(0,EA.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:wA(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=Lc(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(!xf(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=Lc(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=su(this.datasource),{id:s,row:a,filters:u,sort:c,paginate:l,rows:f}=Prr(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=xje(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 Pje(this.source,this.tables,{relationships:h}):[],aggregations:p},filters:u,sort:c,paginate:l,relationships:d,body:a||f,extra:{idFilter:this.prepareFilters(s||Lc(a,n),{},n)}};r==="DELETE"&&s&&await this.removeRelationshipsToRow(n,dL(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 Fh(b),gu),this.operation==="COUNT")return sA(E);let S=Array.isArray(E)?E:[];r!=="READ"&&await this.handleManyRelationships(n._id||"",S[0],g.manyRelationships);let T=await Sk(E,this.source,this.tables,d);return r==="READ"?{rows:Array.isArray(T)?T:[T],rawResponseSize:S.length}:{row:T[0],table:n}}};var O7=require("lodash");async function Mi(e,t,r){return(await tM.for(e,t,{datasource:r?.datasource})).run(r||{})}o(Mi,"handleRequest");async function Lrr(e){let t=await qc(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 Lh(t),{_id:a,...u}=e.request.body,c=await P.rows.external.getRow(s._id,a,{relationships:!0}),l=(0,O7.cloneDeep)(c),f=eVe(t);for(let b of Object.keys(u))f.includes(b)&&(l[b]=u[b]);l=await ba(e.user?._id,(0,O7.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=Lc({...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(Lrr,"patch");async function krr(e){let t=await qc(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(krr,"destroy");async function Mrr(e){let{rows:t}=e.request.body,r=await qc(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(Mrr,"bulkDestroy");async function Urr(e){let t=e.params.rowId,r=await qc(e),{tableId:n}=ei(e),{datasourceId:i,tableName:s}=_r(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=_r(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(Urr,"fetchEnrichedRow");var N7={};G(N7,{bulkDestroy:()=>Grr,destroy:()=>Wrr,fetchEnrichedRow:()=>$rr,patch:()=>jrr});var l4e=require("lodash"),P7=require("lodash/fp");var x7={};G(x7,{find:()=>Brr,findRow:()=>SA,save:()=>Frr});async function C7(e){let t=await M$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:$t.USER_METADATA,_id:e}}o(C7,"getFullUser");async function Frr(e,t,r,n){let{tableId:i,viewId:s}=Bh(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}),uA(a,c,{updateFormula:!0,updateAIColumns:n?.updateAIColumns||!0})}o(Frr,"save");async function Brr(e,t){let r=await jJ(e);return await Jt(r,await SA(e,t),{squash:!0})}o(Brr,"find");async function SA(e,t){let{tableId:r}=Bh(e),n=C.getWorkspaceDB(),i;if(r===$t.USER_METADATA?i=await C7(t):i=await n.get(t),i.tableId!==r)throw"Supplied tableId does not match the rows tableId";return i}o(SA,"findRow");async function c4e(e){let t=C.getWorkspaceDB(),r=e.request.body,n={tableId:$t.USER_METADATA,...r};delete n.roles,e.body=await t.put(n)}o(c4e,"updateMetadata");async function D7(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(D7,"destroyMetadata");async function jrr(e){let{tableId:t}=ei(e),r=await qc(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===$t.USER_METADATA,a;try{a=await Jt(r,await SA(t,i._id))}catch{if(s)a={_id:i._id};else throw"Row does not exist"}let u=(0,P7.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 Bc.rowUpdate(n,{row:c,oldRow:a}),s?(e.request.body=c,await c4e(e),{row:e.body,table:n,oldRow:a}):{...await uA(r,c,{updateFormula:!0,updateAIColumns:!0}),oldRow:a}}o(jrr,"patch");async function Wrr(e){let t=C.getWorkspaceDB(),r=await qc(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 Bc.rowDelete(n,[s]),await Hk(n,s);let u;return n._id===$t.USER_METADATA?(e.params={id:i},await D7(e),u=e.body):u=await t.remove(i,a),{response:u,row:s}}o(Wrr,"destroy");async function Grr(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===$t.USER_METADATA?s=s.concat(i.map(a=>(e.params={id:a._id},D7(e)))):await C.getWorkspaceDB().bulkDocs(i.map(u=>({...u,_deleted:!0}))),await Bc.rowDelete(r,i),await Hk(r,i),await Promise.all(s),{response:{ok:!0},rows:i}}o(Grr,"bulkDestroy");async function $rr(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),hu({tableId:n,rowId:i,fieldName:t})]),u=await SA(n,i);u=await Jt(s,u);let c=a,l=await r.getMultiple(c.map(h=>h.id),{allowMissing:!0}),f=bk(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,P7.cloneDeep)(u),squash:!0}))}l=(0,l4e.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($rr,"fetchEnrichedRow");function rM(e){return kt(e)?I7:N7}o(rM,"pickApi");async function L7(e){let t=e.appId,{tableId:r}=ei(e),n=e.request.body;if(n&&!n._id)return Zk(e);try{let i=rM(r),{row:s,table:a,oldRow:u}=kt(r)?await i.patch(e):await wr.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,mb?.emitRowUpdate(e,s)}catch(i){e.throw(400,i)}}o(L7,"patch");var Zk=o(async e=>{let{tableId:t,viewId:r}=ei(e),n=r||t,i=e.appId,s=e.request.body;if(Ek(t)&&!s._rev&&e.throw(400,"Cannot create new user entry."),s&&s._id)return L7(e);let{row:a,table:u,squashed:c}=t.includes("datasource_plus")?await P.rows.save(n,e.request.body,e.user?._id):await wr.addAction(async()=>{let l=await wr.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,mb?.emitRowUpdate(e,a||c)},"save");async function f4e(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(f4e,"find");function Hrr(e){return e.rows!==void 0&&Array.isArray(e.rows)}o(Hrr,"isDeleteRows");function Qrr(e){return e._id!==void 0}o(Qrr,"isDeleteRow");async function Krr(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?T7(a,e.params):S7(T7(a,e.params),r)});return(await Promise.allSettled(n)).filter(s=>s.status==="fulfilled").map(s=>s.value)}o(Krr,"processDeleteRowsRequest");async function zrr(e){let{tableId:t}=ei(e),r=e.appId,n=e.request.body;n.rows=await Krr(e);let{rows:i}=kt(t)?await rM(t).bulkDestroy(e):await wr.addAction(async()=>{let s=await rM(t).bulkDestroy(e);return Oe.action.crudExecuted({type:"delete"}),s});t.includes("datasource_plus")||await wr.removeRows(i.length);for(let s of i)e.eventEmitter?.emitRow({eventName:"row:delete",appId:r,row:s,user:P.users.getUserContextBindings(e.user)}),mb?.emitRowDeletion(e,s);return i}o(zrr,"deleteRows");async function Yrr(e){let t=e.appId,{tableId:r}=ei(e),n=rM(r),i=kt(r)?await n.destroy(e):await wr.addAction(async()=>{let s=await n.destroy(e);return Oe.action.crudExecuted({type:"delete"}),s});return r.includes("datasource_plus")||await wr.removeRow(),e.eventEmitter?.emitRow({eventName:"row:delete",appId:t,row:i.row,user:P.users.getUserContextBindings(e.user)}),mb?.emitRowDeletion(e,i.row),i}o(Yrr,"deleteRow");async function v7(e){let t,r;if(Hrr(e.request.body))t=await zrr(e);else if(Qrr(e.request.body)){let n=await Yrr(e);t=n.response,r=n.row}else e.status=400,t={message:"Invalid delete rows request"};e.row=r||{},e.body=t}o(v7,"destroy");async function _A(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=d4e(t,i,u)}let a={query:await kh(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(_A,"search");function d4e(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=>d4e(e,n,r))}o(d4e,"replaceTableNamesInFilters");function nM(e=[]){return e.length===0||e.some(t=>t.value===null||t.value==="")}o(nM,"hasNullFilters");async function As(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(As,"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");async function p4e({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 yb(e.row.tableId,e.row),e.row=await Nk(e.row.tableId,e.row),await Zk(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(p4e,"run");async function h4e({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 yb(n,i),i=await Nk(n,i));let u=Kr(t,r,{body:{...i,_id:e.rowId},params:{rowId:e.rowId,tableId:n}});return await L7(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(h4e,"run");async function m4e({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 v7(n),{response:n.body,row:n.row,success:n.body.ok}}catch(i){return{success:!1,response:Ye(i)}}}o(m4e,"run");var k7=U(require("isolated-vm")),b4e=U(require("bson")),iM=U(require("url")),TA=U(require("crypto")),_4e=U(require("querystring"));var y4e=U(require("fs"));var enr={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"},g4e={};function Ob(e){let t=g4e[e];return t||(t=y4e.default.readFileSync(require.resolve(enr[e]),"utf-8"),g4e[e]=t,t)}o(Ob,"loadBundle");var M7=class e extends Error{constructor(){super(...arguments);this.code=e.code}static{o(this,"JsRequestTimeoutError")}static{this.code="JS_REQUEST_TIMEOUT_ERROR"}},Gf=class{constructor({memoryLimit:t,invocationTimeout:r,isolateAccumulatedTimeout:n}={}){this.codeWrapper=t=>t;this.resultKey="results";this.isolate=new k7.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=TA.default.randomUUID(),this.runErrorKey=TA.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:iM.default.resolve,parse:iM.default.parse}),r=this.registerCallbacks({escape:_4e.default.escape}),n=this.registerCallbacks({randomUUID:TA.default.randomUUID});this.addToContext({helpersStripProtocol:u=>{let c=iM.default.parse(u);return c.protocol="",c.format()}});let i=`require=function req(val) {
|
|
975
|
+
}`,...m}}o(wb,"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(Pc).indexOf(n)!==-1)continue;let s=r.views?.[n];s&&t.push({name:n,...s})}}else{let r=(await e.allDocs(Sqe({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 VJ(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=ev(t),s=e?ev(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(VJ,"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=wb(n);delete r.views?.[t],await e.put(r),await VJ(null,t,i)}o(fHe,"migrateToInMemoryView");async function dHe(e,t){let r=await e.get(ev(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]=wb(i),await e.put(n),await e.remove(r._id,r._rev)}o(dHe,"migrateToDesignView");async function HJ(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(HJ,"getFromDesignDoc");async function QJ(e,t){let r=await e.get(ev(t));if(r)return r.view;throw{status:404,message:"Unable to get view"}}o(QJ,"getFromMemoryDoc");var hHe=require("lodash/fp"),JJ=U(require("lodash/isEqual")),mHe=U(require("lodash/uniq"));var Eb=require("lodash/fp"),pHe=U(require("lodash/isEqual"));function btr(e,t){let r=(0,Eb.merge)(e,t);for(let n of Object.keys(t))t[n]===void 0&&delete r[n];return r}o(btr,"mergeRows");async function Hk(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=>uA(u,l,{updateFormula:!1,updateAIColumns:!1})));break}}}await Promise.all(n)}o(Hk,"updateRelatedFormula");async function KJ(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,Eb.cloneDeep)(r),{squash:!1}),i=[];for(let s of r){let a=n.find(u=>u._id===s._id);if(a){let u=await mu(e,(0,Eb.cloneDeep)(s),{dynamic:!1,contextRows:[a]});(0,pHe.default)(u,s)||i.push(u)}}await t.bulkDocs(i)}o(KJ,"updateAllFormulasInTable");async function uA(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,Eb.cloneDeep)(t),{squash:!1});t=await mu(a,t,{dynamic:!1,contextRows:[u]}),s&&(t=await X$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=btr(c,u),u=await mu(a,u,{dynamic:!1}),i&&await Hk(a,u);let l=await _k(e,u);return{row:u,squashed:l,table:a}}o(uA,"finaliseRow");function gHe(e){return e.type==="formula"&&e.formulaType==="static"}o(gHe,"isStaticFormula");function zJ(e,t){let r=[];t=Array.isArray(t)?t:[t];for(let n of Object.values(e.schema))gHe(n)&&oqe(n?.formula??"",t)&&r.push(n.name);return r}o(zJ,"getFormulaThatUseColumn");async function _tr(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=zJ(u,a.name);if(c.length>0&&await YJ(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(zJ(d,[h.fieldName,a.name]));p.length>0&&await YJ(d,(0,mHe.default)(p))}}}}o(_tr,"checkIfFormulaNeedsCleared");async function wtr(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(xf);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=zJ(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,JJ.default)(u,c)&&await n.put(c)}}o(wtr,"updateRelatedFormulaLinksOnTables");async function Etr(e,{oldTable:t}){Object.values(e.schema).find(n=>gHe(n)&&(!t||!t.schema[n.name]||!(0,JJ.default)(t.schema[n.name],n)))!=null&&await KJ(e)}o(Etr,"checkIfFormulaUpdated");async function Qk(e,{oldTable:t,deletion:r}){await wtr(e,{deletion:r}),await _tr(e,{oldTable:t,deletion:r}),r||await Etr(e,{oldTable:t})}o(Qk,"runStaticFormulaChecks");async function YJ(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(YJ,"clearColumns");async function Str(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 Bc.tableUpdate(e,u,{oldTable:t,rename:r}),await Rtr(e,s,r)}return{rows:i,table:e}}o(Str,"checkForColumnUpdates");function Ttr(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(Ttr,"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||pqe(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 ZJ(e,t){let r=e.schema,n=t?.identifierFields||[],i=t?.importRows;if(!i||!Vk(i)||!$k(r))return e;let s=C.getWorkspaceDB(),a=GJ(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 wr.addRows(c,()=>s.bulkDocs(u),{tableId:e._id}),await Oe.rows.imported(e,u.length),e}o(ZJ,"handleDataImport");async function vtr(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(vtr,"handleSearchIndexes");function Atr(e){if(e._id===$t.USER_METADATA)for(let[t,r]of Object.entries(Iqe.schema))e.schema[t]==null&&(e.schema[t]=r);return e}o(Atr,"checkStaticTables");var XJ=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=Ttr(this.oldTable,t)),t=Atr(t),t}async mid(t,r){let n=await Str(t,this.oldTable,r);return this.rows=this.rows.concat(n.rows),t}async after(t){return t=await vtr(t),t=await ZJ(t,{importRows:this.importRows,userId:this.userId}),await P.tables.sqs.addTable(t),t}getUpdatedRows(){return this.rows}};async function Rtr(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=wb(u,c?.type==="array"),f=s.name;await VJ(null,f,l),l.meta?.schema||(l.meta.schema=e.schema),e.views?.[f]&&(e.views[f]=l.meta)}}}o(Rtr,"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 cA(e,t){let r={type:"number",constraints:{},name:e};return t&&(r.meta=t),r}o(cA,"foreignKeyStructure");function Otr(e,t){if(az.indexOf(e)===-1&&az.indexOf(t)===-1)return!1;for(let r of sz){let n=r.indexOf(e),i=r.indexOf(t);if(n!==-1&&i!==-1&&n!==i)return!0}return!1}o(Otr,"areSwitchableTypes");function Kk(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&&!Otr(i,s))return!0}return!1}o(Kk,"hasTypeChanged");function THe(e,t){return t&&e.source==="GOOGLE_SHEETS"&&(t.primary=[nv],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 Qk(e,{deletion:!0}),t&&await Bc.tableDelete(e,t),await P.tables.sqs.removeTable(e)}o(vHe,"internalTableCleanup");var AHe=XJ;var e7=require("lodash/fp");function t7(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(t7,"cleanupRelationships");function Itr(e){return e==="many-to-many"?"many-to-many":e==="one-to-many"?"many-to-one":"one-to-many"}o(Itr,"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:ro(u,a),name:a,primary:[i,s],constrained:[i,s],sourceId:u,sourceType:"external",schema:{[i]:cA(i,{toTable:r.name,toKey:r.primary[0]}),[s]:cA(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,e7.cloneDeep)(e),i.fieldName=e.foreignKey,i.foreignKey=e.fieldName;else{let a=e;i=(0,e7.cloneDeep)(e),i.fieldName=a.throughTo,i.throughTo=a.throughFrom,i.throughFrom=a.throughTo}i.relationshipType=Itr(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 pA={};G(pA,{allowedFields:()=>Xtr,create:()=>ztr,enrichSchema:()=>Tb,get:()=>Utr,getAllEnriched:()=>Btr,getEnriched:()=>Ftr,getTable:()=>qtr,isInternal:()=>Wtr,isV2:()=>Qr,isView:()=>jtr,remove:()=>Jtr,renameLinkedViews:()=>Ztr,syncSchema:()=>dA,update:()=>Ytr});var r7={};G(r7,{create:()=>xtr,get:()=>DHe,getEnriched:()=>Ctr,remove:()=>Ptr,update:()=>Dtr});var lA=require("lodash");function xHe(e){return e&&(0,lA.isPlainObject)(e)&&Object.keys(e).length===0}o(xHe,"isEmptyObject");function so(e){let t=(0,lA.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=Be.processSearchFilters(t.query)}return t}o(so,"ensureQueryUISet");function Sb(e){let t=(0,lA.cloneDeep)(e);return t.queryUI&&!xHe(t.queryUI)&&(t.query=Tt.buildQuery(t.queryUI)),t}o(Sb,"ensureQuerySet");async function DHe(e){let t=Zr(e),{datasourceId:r,tableName:n}=_r(t),s=(await P.datasources.get(r)).entities[n],u=Object.values(s.views).filter(Qr).find(c=>c.id===e);if(!u)throw new Error("No view found");return so(u)}o(DHe,"get");async function Ctr(e){let t=Zr(e),{datasourceId:r,tableName:n}=_r(t),s=(await P.datasources.get(r)).entities[n],u=Object.values(s.views).filter(Qr).find(c=>c.id===e);if(u)return await Tb(so(u),s.schema)}o(Ctr,"getEnriched");async function xtr(e,t){let r={...t,id:uL(e),version:2};r=Sb(r),r=so(r);let n=C.getWorkspaceDB(),{datasourceId:i,tableName:s}=_r(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(xtr,"create");async function Dtr(e,t){let r=C.getWorkspaceDB(),{datasourceId:n,tableName:i}=_r(e),s=await P.datasources.get(n);s.entities[i].views??={};let a=s.entities[i].views,u=Object.values(a).find(c=>Qr(c)&&c.id===t.id);if(!u||!u.name)throw new K(`View ${t.id} not found in table ${e}`,404);if(Qr(u)&&u.type!==t.type)throw new K("Cannot update view type after creation",400);return t=Sb(t),t=so(t),delete a[u.name],a[t.name]=t,await r.put(s),{view:t,existingView:u}}o(Dtr,"update");async function Ptr(e){let t=C.getWorkspaceDB(),r=await DHe(e);if(!r)throw new K(`View ${e} not found`,404);let{datasourceId:n,tableName:i}=_r(r.tableId),s=await P.datasources.get(n);return delete s.entities[i].views[r?.name],await t.put(s),r}o(Ptr,"remove");var n7={};G(n7,{create:()=>Ltr,get:()=>PHe,getEnriched:()=>Ntr,remove:()=>Mtr,update:()=>ktr});async function PHe(e){let t=Zr(e),r=await P.tables.getTable(t),i=Object.values(r.views).filter(Qr).find(s=>s.id===e);if(!i)throw new Error("No view found");return so(i)}o(PHe,"get");async function Ntr(e){let t=Zr(e),r=await P.tables.getTable(t),i=Object.values(r.views).filter(Qr).find(s=>s.id===e);if(i)return await Tb(so(i),r.schema)}o(Ntr,"getEnriched");async function Ltr(e,t){let r={...t,id:uL(e),version:2};r=Sb(r),r=so(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(Ltr,"create");async function ktr(e,t){let r=C.getWorkspaceDB(),n=await P.tables.getTable(e);n.views??={};let i=Object.values(n.views).find(s=>Qr(s)&&s.id===t.id);if(!i||!i.name)throw new K(`View ${t.id} not found in table ${e}`,404);if(Qr(i)&&i.type!==t.type)throw new K("Cannot update view type after creation",400);return t=Sb(t),t=so(t),delete n.views[i.name],n.views[t.name]=t,await r.put(n),{view:t,existingView:i}}o(ktr,"update");async function Mtr(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(Mtr,"remove");function fA(e){return kt(e)?r7:n7}o(fA,"pickApi");async function Utr(e){let t=Zr(e);return fA(t).get(e)}o(Utr,"get");async function Ftr(e){let t=Zr(e);return fA(t).getEnriched(e)}o(Ftr,"getEnriched");async function Btr(){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(Qr),i=await Promise.all(n.map(s=>Tb(so(s),r.schema,e)));t=t.concat(i)}return t}o(Btr,"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 jtr(e){return e.id&&dn(e.id)&&e.version===2}o(jtr,"isView");function Wtr(e){if(!dn(e))return!1;let t=Zr(e);return!kt(t)}o(Wtr,"isInternal");function Gtr(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(Gtr,"guardDuplicateCalculationFields");function $tr(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($tr,"guardDuplicateCountDistinctFields");async function Vtr(e,t){let r=de.views.calculationFields(t);if(Gtr(t),$tr(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")&&!LM(a.type)&&!jX(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(!WX(s))throw new K(`Grouping by fields of type "${s.type}" is not supported`,400)}}o(Vtr,"guardCalculationViewSchema");async function NHe(e,t){let r=await P.tables.getTable(e);if(de.views.isCalculationView(t))await Vtr(r,t);else if(de.views.hasCalculationFields(t))throw new K("Calculation fields are not allowed in non-calculation views",400);await Htr(r,t),de.views.isCalculationView(t)||Ktr(r,t),Qtr(t)}o(NHe,"guardViewSchema");async function Htr(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(Htr,"checkReadonlyFields");function Qtr(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(Qtr,"checkDisplayField");function Ktr(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(Ktr,"checkRequiredFields");async function ztr(e,t){await NHe(e,t);let r=await fA(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(ztr,"create");async function Ytr(e,t){return await NHe(e,t),fA(e).update(e,t)}o(Ytr,"update");function Qr(e){return de.views.isV2(e)}o(Qr,"isV2");async function Jtr(e){let t=Zr(e);return fA(t).remove(e)}o(Jtr,"remove");function Xtr(e,t){return[...Object.keys(e?.schema||{}).filter(r=>{if(!Qr(e))return!0;let n=e.schema[r];return t==="WRITE"?n.visible&&!n.readonly:n.visible}),...Os,...vn]}o(Xtr,"allowedFields");async function Tb(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(Tb,"enrichSchema");function dA(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(dA,"syncSchema");async function Ztr(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(Ztr,"renameLinkedViews");var hA="id";function kHe(e){return e.primary==null||e.primary.length===0}o(kHe,"noPrimaryKey");function err(e,t){if(!t&&e.schema[hA]&&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(Kk(e,t))throw new Error("A column type has changed.");let r=Object.values(Jc);for(let[n,i]of Object.entries(e.schema))if(n!==hA){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(err,"validate");function trr(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 _r(e._id).datasourceId}o(trr,"getDatasourceId");async function i7(e){let t=trr(e),r={...e,created:!0};try{return(await zk(t,r)).table}catch(n){throw n instanceof Error?new K(n.message,400):new K(n?.message||n,n.status||500)}}o(i7,"create");async function zk(e,t,r){let n={...t,type:"table",_id:ro(e,t.name),sourceId:e},i=r?.tableId||t._id,s;i&&(s=await vb(i)),err(n,s),!s&&kHe(n)&&(n.primary=[hA],n.schema[hA]={type:"number",autocolumn:!0,name:hA});for(let h in n.views){let m=n.views[h];!m||!Qr(m)||(n.views[h]=dA(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]=cA(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&&t7(n,l,{oldTable:s});let d=i?"UPDATE_TABLE":"CREATE_TABLE";await Wk(u,d,n,s,r?.renaming);for(let h of f){let m=c[h.name],g=m?"UPDATE_TABLE":"CREATE_TABLE";await Wk(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(iA(u));let p=await yu.get(u._id);return p.isSQL&&(n.sql=!0),{datasource:p,table:n,oldTable:s}}o(zk,"save");async function rrr(e,t){let r=C.getWorkspaceDB(),n=await yu.get(e),i=n.entities,s="DELETE_TABLE";return i&&(await Wk(n,s,t),t7(t,i,{deleting:!0}),delete i[t.name],n.entities=i),await r.put(iA(n)),{datasource:await yu.get(n._id),table:t}}o(rrr,"destroy");var gA={};G(gA,{create:()=>o7,destroy:()=>nrr,save:()=>Yk});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]=Zv(n)}return e}o(MHe,"checkAutoColumns");async function o7(e,t,r){let i={_id:ez(),...e,type:e.type||"table",sourceType:"internal"},s=!!t;i.views||(i.views={});try{let{table:a}=await Yk(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(o7,"create");async function Yk(e,t){let r=C.getWorkspaceDB(),n;if(t?.tableId&&(n=await vb(t.tableId)),Kk(e,n))throw new Error("A column type has changed.");let i=Lre(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(Qr(h)){n?.views&&n.views[p]&&(e.views[p]=dA(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 Qk(e,{oldTable:n,deletion:!1}),{table:e,oldTable:n}}o(Yk,"save");async function nrr(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 wr.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(nrr,"destroy");var a7={};G(a7,{isExternal:()=>Ab,isInternal:()=>s7,isTable:()=>irr});function Ab(e){return e.table&&e.table.sourceType==="external"?!0:!!(e.tableId&&kt(e.tableId))}o(Ab,"isExternal");function s7(e){return!Ab(e)}o(s7,"isInternal");function irr(e){return e._id&&Ls(e._id)}o(irr,"isTable");var d7={};G(d7,{PermissionUpdateType:()=>qHe,getAllDBRoles:()=>WHe,getDependantResources:()=>srr,getInheritablePermissions:()=>jHe,getResourcePerms:()=>l7,setPermissions:()=>f7,updatePermissionOnRole:()=>c7});var u7=[Wr.PermissionLevel.WRITE,Wr.PermissionLevel.READ,Wr.PermissionLevel.EXECUTE];function orr(e){switch(Kre(e)){case"view":return Wr.PermissionType.TABLE}switch(Qre(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(orr,"getPermissionType");function BHe(e){let t=orr(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&&u7.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(dn(e))return await l7(Zr(e))}o(jHe,"getInheritablePermissions");async function l7(e){let t=await Et.getAllRoles(),r={},n=await jHe(e);for(let s of u7)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(l7,"getResourcePerms");async function srr(e){if(Ls(e)){let t={},r=await P.tables.getTable(e),n=Object.values(r.views||{});for(let i of n){if(!Qr(i))continue;let s=await l7(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(srr,"getDependantResources");async function c7({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&&(eje(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(c7,"updatePermissionOnRole");async function f7(e,{writeRole:t,readRole:r}){await c7({roleId:t,resourceId:e,level:"write"},"add"),await c7({roleId:r,resourceId:e,level:"read"},"add")}o(f7,"setPermissions");async function WHe(e){return(await e.allDocs(dqe(null,{include_docs:!0}))).rows.map(r=>r.doc)}o(WHe,"getAllDBRoles");async function p7(e,t,r){let n;return Ab({table:e})?n=await i7(e):n=await o7(e,t,r),await f7(n._id,{writeRole:Et.BUILTIN_ROLE_IDS.ADMIN,readRole:Et.BUILTIN_ROLE_IDS.ADMIN}),n}o(p7,"create");var m7={};G(m7,{external:()=>mA,internal:()=>gA,saveTable:()=>arr,update:()=>urr});var GHe=require("lodash");async function arr(e){let t=C.getWorkspaceDB(),r;if(kt(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(arr,"saveTable");async function urr(e,t){let r=e._id;if(Ab({table:e})){let n=e.sourceId;await zk(n,e,{tableId:r,renaming:t})}else await Yk(e,{tableId:r,renaming:t})}o(urr,"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=crr(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 crr(e,t,r){if(kt(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 g7(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 y7(e,t,r)}throw new Hn("Unknown migration type")}o(crr,"getColumnMigrator");var Jk=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]}}},g7=class extends Jk{static{o(this,"SingleUserColumnMigrator")}updateRow(t,r){t[this.newColumn.name]=F.getGlobalIDFromUserMetadataID(r.rowId)}},y7=class extends Jk{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 b7={};G(b7,{USER_COLUMN_PREFIX:()=>Rb,addTable:()=>yrr,mapToUserColumn:()=>bu,removeTable:()=>brr,syncDefinition:()=>grr});var KHe=require("lodash");var lrr=require("lodash/fp");var cEn={_id:Jy,type:F.BUDIBASE_DATASOURCE_TYPE,name:"Sample Data",source:"BUDIBASE",config:{}};var Xk={"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:""}}}},frr={_id:xqe,type:"table",views:{},sourceId:Jy,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},...Xk}},drr={_id:lz,type:"table",views:{},name:"Employees",sourceId:Jy,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:cz},"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},...Xk}},prr={_id:cz,type:"table",name:"Jobs",sourceId:Jy,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:lz,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"},...Xk}},hrr={_id:Dqe,type:"table",views:{},name:"Expenses",sourceId:Jy,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},...Xk}},HHe=[frr,drr,prr,hrr];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 mrr(e,t){let r=e._id,n=t.tableId;return{tableId:Cf(r,n),definition:{"doc1.rowId":"VARCHAR","doc1.tableId":"VARCHAR","doc1.fieldName":"VARCHAR","doc2.rowId":"VARCHAR","doc2.tableId":"VARCHAR","doc2.fieldName":"VARCHAR",tableId:"VARCHAR"}}}o(mrr,"buildRelationshipDefinitions");var Rb="data_";function bu(e){return`${Rb}${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}=mrr(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={};vn.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 qh.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 grr(){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(grr,"syncDefinition");async function yrr(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(yrr,"addTable");async function brr(e){let t=C.getWorkspaceDB();try{let[r,n]=await Promise.all([qh.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(brr,"removeTable");async function JHe(e,t){let r=await yA(),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 p7(i,void 0,t);return await Oe.table.created(s),s}o(JHe,"duplicate");var qh={populateExternalTableSchemas:iA,...h7,...m7,..._7,...a7,migrate:VHe,sqs:b7,duplicate:JHe};function _rr(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(_rr,"checkForSchemaErrors");async function XHe(e,t){let r=await wrr(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,..._rr(n.tables)}}}o(XHe,"buildFilteredSchema");async function wrr(e,t){return await(await ZHe(e)).buildSchema(e._id,e.entities,t)}o(wrr,"buildSchemaHelper");async function ZHe(e){let t=await Wf(e.source);return e._id&&(e=await kk(e)),new t(e.config)}o(ZHe,"getConnector");async function Err(e){if(e._id){let t=await Mk(e._id);e=MJ(e,t)}return await kk(e)}o(Err,"getAndMergeDatasource");async function Srr(e,t){let r=C.getWorkspaceDB(),n=await Mk(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,Uk(n);let c=await r.put(qh.populateExternalTableSchemas(n));return n._rev=c.rev,{datasource:n,errors:s}}o(Srr,"buildSchemaFromSource");var yu={...Fk,...w7};async function jh(e){return await ao.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))Qr(n)&&(e.views[r]=so(n))}return e._id&&kt(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(jh,"processTable");async function bA(e){return await ao.tracer.trace("processTables",async t=>(t.addTags({numTables:e.length}),await Promise.all(e.map(r=>jh(r)))))}o(bA,"processTables");async function Trr(e){return await ao.tracer.trace("processEntities",async t=>{t.addTags({numTables:Object.keys(e).length});for(let r of Object.keys(e))e[r]=await jh(e[r]);return e})}o(Trr,"processEntities");async function yA(e){return await ao.tracer.trace("getAllInternalTables",async t=>{e||(e=C.getWorkspaceDB()),t.addTags({db:e.name});let r=await e.allDocs(If(null,{include_docs:!0}));return t.addTags({numTables:r.rows.length}),await bA(r.rows.map(n=>n.doc))})}o(yA,"getAllInternalTables");async function vrr(e){return await ao.tracer.trace("getAllInternalTableIds",async t=>{let r=e||C.getWorkspaceDB();t.addTags({db:r.name});let{rows:n}=await r.allDocs(If(null,{include_docs:!1})),i=n.map(({id:s})=>s);return t.addTags({numTableIds:i.length}),i})}o(vrr,"getAllInternalTableIds");async function Arr(){let e=await yA(),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===$t.USER_METADATA||!i._id)continue;await n(i._id)||t.push(i._id)}return t})}o(Arr,"listEmptyProductionTables");async function e4e(){return await ao.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 bA(n)})}o(e4e,"getAllExternalTables");async function t4e(e,t){return await ao.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 jh(n[t]);return i.sourceId||(i.sourceId=e),i})}o(t4e,"getExternalTable");async function vb(e){return await ao.tracer.trace("getTable",async t=>{let r=C.getWorkspaceDB();t.addTags({tableId:e,db:r.name});let n;if(e&&kt(e)){let{datasourceId:i,tableName:s}=_r(e);t.addTags({isExternal:!0,datasourceId:i,tableName:s});let a=await yu.get(i);n={...await t4e(i,s),sql:su(a)},t.addTags({isSQL:su(a)})}else n=await r.get(e);return await jh(n)})}o(vb,"getTable");async function E7(e){return await ao.tracer.trace("doesTableExist",async t=>{t.addTags({tableId:e});try{let r=await vb(e);return t.addTags({tableExists:!!r}),!!r}catch{return t.addTags({tableExists:!1}),!1}})}o(E7,"doesTableExist");async function Rrr(){return await ao.tracer.trace("getAllTables",async e=>{let[t,r]=await Promise.all([yA(),e4e()]);return e.addTags({numInternalTables:t.length,numExternalTables:r.length}),await bA([...t,...r])})}o(Rrr,"getAllTables");async function r4e(e){return await ao.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 Trr(r.entities)})}o(r4e,"getExternalTablesInDatasource");async function Orr(e){return ao.tracer.trace("getTables",async t=>{t.addTags({numTableIds:e.length});let r=e.filter(s=>kt(s)),n=e.filter(s=>!kt(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 bA(i)})}o(Orr,"getTables");async function Irr(e){return await ao.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(Irr,"enrichViewSchemas");var Hf=U(require("dd-trace")),xA=require("lodash/fp");var n4e=U(require("node-fetch"));function Crr(e){let t={},r={method:e.method},n=e.ctx;if(!n&&L.INTERNAL_API_KEY)t[lt.Header.API_KEY]=L.INTERNAL_API_KEY;else if(n&&n.headers){for(let a of Object.values(lt.Header)){let u=n.headers[a];u!==void 0&&(t[a]=Array.isArray(u)?u[0]:u)}let i=n.headers[lt.Header.COOKIE],s=n.headers[lt.Header.API_KEY];i?t[lt.Header.COOKIE]=i:s&&(t[lt.Header.API_KEY]=Array.isArray(s)?s[0]:s)}return Ae.isTenantIdSet()&&(t[lt.Header.TENANT_ID]=Ae.getTenantId()),e.body&&Object.keys(e.body).length>0&&(t["Content-Type"]="application/json",r.body=JSON.stringify(e.body)),ke.correlation.setHeader(t),r.headers=t,r}o(Crr,"createRequest");async function xrr(e,t,{ctx:r}={}){if(e.status>=300){let n;if(e.headers.get("content-type")?.includes("json")){let s=await e.json();n=s.message??JSON.stringify(s)}else n=await e.text();let i=`Unable to ${t} - ${n}`;if(r)r.throw(e.status||500,i);else throw i}return e.json()}o(xrr,"checkResponse");async function i4e({to:e,from:t,subject:r,contents:n,cc:i,bcc:s,automation:a,invite:u,attachments:c}){let l={email:e,from:t,contents:n,subject:r,cc:i,bcc:s,purpose:"custom",automation:a,invite:u,attachments:c},f=await(0,n4e.default)(tje(ie.WORKER_URL+"/api/global/email/send"),Crr({method:"POST",body:l}));return await xrr(f,"send email")}o(i4e,"sendSmtpEmail");async function o4e({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=>rA(g)):rA(h)),{success:!0,response:await i4e({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(o4e,"run");var Vrr=U(require("archiver"));async function S7(e,t){if(!e._id||t&&kt(t))return e;let r=e._id;e._id.startsWith(aqe)&&(r="app_metadata");let i=await C.getWorkspaceDB().get(r);return e._rev=i._rev,e._id=r,e}o(S7,"addRev");function T7(e,t){return!t||!e||(t.rowId&&(e._id=t.rowId),t.tableId&&(e.tableId=t.tableId),e.type||(e.type="row")),e}o(T7,"fixRow");var I7={};G(I7,{bulkDestroy:()=>Mrr,destroy:()=>krr,fetchEnrichedRow:()=>Urr,handleRequest:()=>Mi,patch:()=>Lrr});var A7=U(require("dayjs")),EA=require("lodash"),u4e=require("lodash/fp");function Prr(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)&&Uqe(u)&&(s[a]=Fqe(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(Prr,"cleanupConfig");function wA(e,t){let{datasourceId:r,tableName:n}=_r(e);return{datasourceId:r,entityId:n,operation:t}}o(wA,"getEndpoint");function a4e(e){return e.relationshipType&&e.relationshipType.split("-")[0]==="one"}o(a4e,"isOneSide");function Nrr(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(Nrr,"isEditableColumn");var tM=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,u4e.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=wA(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:wA(i,"UPDATE"),body:{[n]:null},filters:s})}getTable(t){if(!t)throw new Error("Table ID is unknown, cannot find table");let{tableName:r}=_r(t);return this.tables[r]}async getRow(t,r){let n=await gu({endpoint:wA(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"&&!Nrr(u)))if(u.type==="number"&&!isNaN(parseFloat(t[a])))i[a]=parseFloat(t[a]);else if(u.type==="link"){let{tableName:c}=_r(u.tableId);if(!c||!this.tables[c])continue;let f=this.tables[c].primary[0];if(a4e(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(av(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,A7.default)(t[a]).isValid()?i[a]=(0,A7.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}=_r(t),s=this.tables[i],a=s.primary?.[0];for(let u of Object.values(s.schema)){if(u.type!=="link"||!u.fieldName||a4e(u))continue;let c,l,f;if(av(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=wA(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)||Gz(h)?[]:h,g=this.getLookupRelationsKey(u);n[g]={rows:m,isMany:av(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=JT(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,EA.isEqual)((0,EA.omit)(O,[I]),(0,EA.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:wA(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=Lc(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(!xf(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=Lc(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=su(this.datasource),{id:s,row:a,filters:u,sort:c,paginate:l,rows:f}=Prr(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=xje(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 Pje(this.source,this.tables,{relationships:h}):[],aggregations:p},filters:u,sort:c,paginate:l,relationships:d,body:a||f,extra:{idFilter:this.prepareFilters(s||Lc(a,n),{},n)}};r==="DELETE"&&s&&await this.removeRelationshipsToRow(n,dL(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 Fh(b),gu),this.operation==="COUNT")return sA(E);let S=Array.isArray(E)?E:[];r!=="READ"&&await this.handleManyRelationships(n._id||"",S[0],g.manyRelationships);let T=await Sk(E,this.source,this.tables,d);return r==="READ"?{rows:Array.isArray(T)?T:[T],rawResponseSize:S.length}:{row:T[0],table:n}}};var O7=require("lodash");async function Mi(e,t,r){return(await tM.for(e,t,{datasource:r?.datasource})).run(r||{})}o(Mi,"handleRequest");async function Lrr(e){let t=await qc(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 Lh(t),{_id:a,...u}=e.request.body,c=await P.rows.external.getRow(s._id,a,{relationships:!0}),l=(0,O7.cloneDeep)(c),f=eVe(t);for(let b of Object.keys(u))f.includes(b)&&(l[b]=u[b]);l=await ba(e.user?._id,(0,O7.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=Lc({...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(Lrr,"patch");async function krr(e){let t=await qc(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(krr,"destroy");async function Mrr(e){let{rows:t}=e.request.body,r=await qc(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(Mrr,"bulkDestroy");async function Urr(e){let t=e.params.rowId,r=await qc(e),{tableId:n}=ei(e),{datasourceId:i,tableName:s}=_r(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=_r(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(Urr,"fetchEnrichedRow");var N7={};G(N7,{bulkDestroy:()=>Grr,destroy:()=>Wrr,fetchEnrichedRow:()=>$rr,patch:()=>jrr});var l4e=require("lodash"),P7=require("lodash/fp");var x7={};G(x7,{find:()=>Brr,findRow:()=>SA,save:()=>Frr});async function C7(e){let t=await M$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:$t.USER_METADATA,_id:e}}o(C7,"getFullUser");async function Frr(e,t,r,n){let{tableId:i,viewId:s}=Bh(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}),uA(a,c,{updateFormula:!0,updateAIColumns:n?.updateAIColumns||!0})}o(Frr,"save");async function Brr(e,t){let r=await jJ(e);return await Jt(r,await SA(e,t),{squash:!0})}o(Brr,"find");async function SA(e,t){let{tableId:r}=Bh(e),n=C.getWorkspaceDB(),i;if(r===$t.USER_METADATA?i=await C7(t):i=await n.get(t),i.tableId!==r)throw"Supplied tableId does not match the rows tableId";return i}o(SA,"findRow");async function c4e(e){let t=C.getWorkspaceDB(),r=e.request.body,n={tableId:$t.USER_METADATA,...r};delete n.roles,e.body=await t.put(n)}o(c4e,"updateMetadata");async function D7(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(D7,"destroyMetadata");async function jrr(e){let{tableId:t}=ei(e),r=await qc(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===$t.USER_METADATA,a;try{a=await Jt(r,await SA(t,i._id))}catch{if(s)a={_id:i._id};else throw"Row does not exist"}let u=(0,P7.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 Bc.rowUpdate(n,{row:c,oldRow:a}),s?(e.request.body=c,await c4e(e),{row:e.body,table:n,oldRow:a}):{...await uA(r,c,{updateFormula:!0,updateAIColumns:!0}),oldRow:a}}o(jrr,"patch");async function Wrr(e){let t=C.getWorkspaceDB(),r=await qc(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 Bc.rowDelete(n,[s]),await Hk(n,s);let u;return n._id===$t.USER_METADATA?(e.params={id:i},await D7(e),u=e.body):u=await t.remove(i,a),{response:u,row:s}}o(Wrr,"destroy");async function Grr(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===$t.USER_METADATA?s=s.concat(i.map(a=>(e.params={id:a._id},D7(e)))):await C.getWorkspaceDB().bulkDocs(i.map(u=>({...u,_deleted:!0}))),await Bc.rowDelete(r,i),await Hk(r,i),await Promise.all(s),{response:{ok:!0},rows:i}}o(Grr,"bulkDestroy");async function $rr(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),hu({tableId:n,rowId:i,fieldName:t})]),u=await SA(n,i);u=await Jt(s,u);let c=a,l=await r.getMultiple(c.map(h=>h.id),{allowMissing:!0}),f=bk(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,P7.cloneDeep)(u),squash:!0}))}l=(0,l4e.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($rr,"fetchEnrichedRow");function rM(e){return kt(e)?I7:N7}o(rM,"pickApi");async function L7(e){let t=e.appId,{tableId:r}=ei(e),n=e.request.body;if(n&&!n._id)return Zk(e);try{let i=rM(r),{row:s,table:a,oldRow:u}=kt(r)?await i.patch(e):await wr.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,mb?.emitRowUpdate(e,s)}catch(i){e.throw(400,i)}}o(L7,"patch");var Zk=o(async e=>{let{tableId:t,viewId:r}=ei(e),n=r||t,i=e.appId,s=e.request.body;if(Ek(t)&&!s._rev&&e.throw(400,"Cannot create new user entry."),s&&s._id)return L7(e);let{row:a,table:u,squashed:c}=t.includes("datasource_plus")?await P.rows.save(n,e.request.body,e.user?._id):await wr.addAction(async()=>{let l=await wr.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,mb?.emitRowUpdate(e,a||c)},"save");async function f4e(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(f4e,"find");function Hrr(e){return e.rows!==void 0&&Array.isArray(e.rows)}o(Hrr,"isDeleteRows");function Qrr(e){return e._id!==void 0}o(Qrr,"isDeleteRow");async function Krr(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?T7(a,e.params):S7(T7(a,e.params),r)});return(await Promise.allSettled(n)).filter(s=>s.status==="fulfilled").map(s=>s.value)}o(Krr,"processDeleteRowsRequest");async function zrr(e){let{tableId:t}=ei(e),r=e.appId,n=e.request.body;n.rows=await Krr(e);let{rows:i}=kt(t)?await rM(t).bulkDestroy(e):await wr.addAction(async()=>{let s=await rM(t).bulkDestroy(e);return Oe.action.crudExecuted({type:"delete"}),s});t.includes("datasource_plus")||await wr.removeRows(i.length);for(let s of i)e.eventEmitter?.emitRow({eventName:"row:delete",appId:r,row:s,user:P.users.getUserContextBindings(e.user)}),mb?.emitRowDeletion(e,s);return i}o(zrr,"deleteRows");async function Yrr(e){let t=e.appId,{tableId:r}=ei(e),n=rM(r),i=kt(r)?await n.destroy(e):await wr.addAction(async()=>{let s=await n.destroy(e);return Oe.action.crudExecuted({type:"delete"}),s});return r.includes("datasource_plus")||await wr.removeRow(),e.eventEmitter?.emitRow({eventName:"row:delete",appId:t,row:i.row,user:P.users.getUserContextBindings(e.user)}),mb?.emitRowDeletion(e,i.row),i}o(Yrr,"deleteRow");async function v7(e){let t,r;if(Hrr(e.request.body))t=await zrr(e);else if(Qrr(e.request.body)){let n=await Yrr(e);t=n.response,r=n.row}else e.status=400,t={message:"Invalid delete rows request"};e.row=r||{},e.body=t}o(v7,"destroy");async function _A(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=d4e(t,i,u)}let a={query:await kh(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(_A,"search");function d4e(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=>d4e(e,n,r))}o(d4e,"replaceTableNamesInFilters");function nM(e=[]){return e.length===0||e.some(t=>t.value===null||t.value==="")}o(nM,"hasNullFilters");async function As(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(As,"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");async function p4e({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 yb(e.row.tableId,e.row),e.row=await Nk(e.row.tableId,e.row),await Zk(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(p4e,"run");async function h4e({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 yb(n,i),i=await Nk(n,i));let u=Kr(t,r,{body:{...i,_id:e.rowId},params:{rowId:e.rowId,tableId:n}});return await L7(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(h4e,"run");async function m4e({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 v7(n),{response:n.body,row:n.row,success:n.body.ok}}catch(i){return{success:!1,response:Ye(i)}}}o(m4e,"run");var k7=U(require("isolated-vm")),b4e=U(require("bson")),iM=U(require("url")),TA=U(require("crypto")),_4e=U(require("querystring"));var y4e=U(require("fs"));var enr={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"},g4e={};function Ob(e){let t=g4e[e];return t||(t=y4e.default.readFileSync(require.resolve(enr[e]),"utf-8"),g4e[e]=t,t)}o(Ob,"loadBundle");var M7=class e extends Error{constructor(){super(...arguments);this.code=e.code}static{o(this,"JsRequestTimeoutError")}static{this.code="JS_REQUEST_TIMEOUT_ERROR"}},Gf=class{constructor({memoryLimit:t,invocationTimeout:r,isolateAccumulatedTimeout:n}={}){this.codeWrapper=t=>t;this.resultKey="results";this.isolate=new k7.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=TA.default.randomUUID(),this.runErrorKey=TA.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:iM.default.resolve,parse:iM.default.parse}),r=this.registerCallbacks({escape:_4e.default.escape}),n=this.registerCallbacks({randomUUID:TA.default.randomUUID});this.addToContext({helpersStripProtocol:u=>{let c=iM.default.parse(u);return c.protocol="",c.format()}});let i=`require=function req(val) {
|
|
976
976
|
switch (val) {
|
|
977
977
|
case "url": return ${t};
|
|
978
978
|
case "querystring": return ${r};
|
|
@@ -1001,7 +1001,7 @@ Example: return $("Score") + $("Weight")
|
|
|
1001
1001
|
|
|
1002
1002
|
Instructions: ${e.instructions}
|
|
1003
1003
|
|
|
1004
|
-
Generate the content based on these instructions. Format appropriately for a ${e.contentType}.`),s=(await t.prompt(n))?.message?.trim();return s?{response:s,success:!0}:{success:!1,response:"Generate Text AI Step Failed: AI did not return any content."}}catch(t){return{success:!1,response:Ye(t)}}}o(M3e,"run");function Zir(e){switch(e){case"email":return"You are writing an email. Include an appropriate, greeting, body, and signature.";case"document":return"You are writing a formal document. Include appropriate headings, sections, and formatting.";case"blog_post":return"You are writing a blog post. Include an engaging title, introduction, body with subheadings, and conclusion.";case"chat_message":return"You are writing a chat message. Keep it conversational, concise, and appropriate for instant messaging.";case"letter":return"You are writing a letter. Include a date, recipient address, greeting, body, complimentary close, and signature.";case"proposal":return"You are writing a proposal. Include an executive summary, problem statement, proposed solution, benefits, and conclusion.";case"other":return"You are generating text content.";default:return Be.unreachable(e)}}o(Zir,"getContentTypePrompt");var U3e=U(require("node-fetch"));async function tor(e,t,r){let n=await(0,U3e.default)(e);if(!n.ok)throw new Error(`Failed to fetch file from URL: ${n.statusText}`);let i=n.body,s=n.headers.get("content-type")||t,a=`document.${t}`;return await r.uploadFile(i,a,s)}o(tor,"processUrlFile");async function ror(e,t){let r=Se.ObjectStoreBuckets.APPS,{stream:n}=await Se.getReadStream(r,e.key),i=e.name||"document";return await t.uploadFile(n,i,e.extension)}o(ror,"processAttachmentFile");async function nor(e){try{return JSON.parse(e.message).data}catch(t){throw console.error("Error parsing JSON response:",t),new Error("Could not parse AI response as valid JSON.")}}o(nor,"parseAIResponse");async function F3e({inputs:e}){if(!e.file||!e.schema)return{success:!1,data:{},response:"Extract Document Data AI Step Failed: File and Schema are required."};try{let t=await Mt.getLLMOrThrow(),r;if(e.source==="URL"&&typeof e.file=="string")r=await tor(e.file,e.fileType,t);else if(e.source==="Attachment"&&typeof e.file!="string")r=await ror(e.file,t);else throw new Error("Invalid file input \u2013 source and file type do not match");let n=Mt.extractFileData(e.schema,r),i=await t.prompt(n);return{data:await nor(i),success:!0}}catch(t){return console.error("Document extraction error:",t),{success:!1,data:{},response:Ye(t)}}}o(F3e,"run");var uo=require("ai"),B3e=require("uuid");var Vf=U(require("dd-trace"));async function q3e({inputs:e,appId:t}){let{agentId:r,prompt:n,useStructuredOutput:i,outputSchema:s}=e;if(!r)return{success:!1,response:"Agent step failed: No agent selected"};if(!n)return{success:!1,response:"Agent step failed: No prompt provided"};let a=(0,B3e.v4)();return Vf.default.llmobs.trace({kind:"agent",name:"automation.agent",sessionId:a},async u=>{try{let c=await P.ai.agents.getOrThrow(r);if(Vf.default.llmobs.annotate(u,{inputData:n,metadata:{agentId:r,agentName:c.name,appId:t,isForkedProcess:ie.isInThread(),forkedProcessName:process.env.FORKED_PROCESS_NAME||"main"}}),t&&Rf(t)&&c.live!==!0)return Vf.default.llmobs.annotate(u,{outputData:"Agent is paused",tags:{error:"agent_paused"}}),{success:!1,response:"Agent is paused. Set it live to use it in published automations."};let{systemPrompt:l,tools:f}=await P.ai.agents.buildPromptAndTools(c),{modelId:d,apiKey:p,baseUrl:h,modelName:m}=await P.ai.configs.getLiteLLMModelConfigOrThrow(c.aiconfig);Vf.default.llmobs.annotate(u,{metadata:{modelId:d,modelName:m,baseUrl:h,envLiteLLMUrl:ie.LITELLM_URL,toolCount:Object.keys(f).length}});let g=Mt.createLiteLLMOpenAI({apiKey:p,baseUrl:h,fetch:P.ai.agents.createLiteLLMFetch(a)}),y;if(i&&s&&Object.keys(s).length>0){let D=de.structuredOutput.normalizeSchemaForStructuredOutput(s);y=uo.Output.object({schema:(0,uo.jsonSchema)(D)})}let w=await new uo.ToolLoopAgent({model:(0,uo.wrapLanguageModel)({model:g.chat(d),middleware:(0,uo.extractReasoningMiddleware)({tagName:"think"})}),instructions:l||void 0,tools:f,stopWhen:(0,uo.stepCountIs)(30),providerOptions:Mt.getLiteLLMProviderOptions(),output:y}).stream({prompt:n}),E,S;for await(let D of(0,uo.readUIMessageStream)({stream:w.toUIMessageStream({sendReasoning:!0,onError:x=>{let W=i4(x);return S=W,W}})}))E=D;let T,R;try{T=await w.text}catch(D){R=i4(D)}let A=S||R;if(A&&!T)return Vf.default.llmobs.annotate(u,{outputData:A,tags:{error:"1","error.type":"StreamingError"}}),{success:!1,response:A};let O=await w.usage,I=y?await w.output:void 0;return Vf.default.llmobs.annotate(u,{outputData:T,metadata:{stepCount:E?.parts?.length??0}}),{success:!0,response:T,usage:O,message:E,output:I}}catch(c){let l=Ye(c);return Vf.default.llmobs.annotate(u,{outputData:l,tags:{error:"1","error.type":c?.name||"UnknownError"}}),console.error("Agent step failed",{agentId:r,appId:t,liteLLMUrl:ie.LITELLM_URL,errorName:c?.name,errorMessage:l}),{success:!1,response:l}}})}o(q3e,"run");async function j3e({inputs:e,context:t}){let{value:r}=e;if(r==null)return{success:!1,response:{message:"Invalid inputs"}};r=r.trim();try{return{success:!0,value:sr(e.value,t,{noThrow:!1})}}catch(n){return{success:!1,response:Ye(n)}}}o(j3e,"run");var i9={SEND_EMAIL_SMTP:o4e,CREATE_ROW:p4e,GET_ROW:A3e,UPDATE_ROW:h4e,DELETE_ROW:m4e,QUERY_ROWS:v3e,OUTGOING_WEBHOOK:Y4e,EXECUTE_SCRIPT:E4e,EXECUTE_SCRIPT_V2:S4e,EXECUTE_QUERY:Q4e,API_REQUEST:K4e,SERVER_LOG:J4e,DELAY:c3e,FILTER:u3e,COLLECT:R3e,TRIGGER_AUTOMATION_RUN:O3e,OPENAI:C3e,CLASSIFY_CONTENT:P3e,PROMPT_LLM:N3e,TRANSLATE:L3e,SUMMARISE:k3e,GENERATE_TEXT:M3e,EXTRACT_FILE_DATA:F3e,AGENT:q3e,EXTRACT_STATE:j3e,discord:Z4e,slack:t3e,zapier:n3e,integromat:a3e,n8n:o3e},n9={SEND_EMAIL_SMTP:Ve.steps.sendSmtpEmail.definition,CREATE_ROW:Ve.steps.createRow.definition,GET_ROW:Ve.steps.getRow.definition,UPDATE_ROW:Ve.steps.updateRow.definition,DELETE_ROW:Ve.steps.deleteRow.definition,QUERY_ROWS:Ve.steps.queryRows.definition,OUTGOING_WEBHOOK:Ve.steps.outgoingWebhook.definition,EXECUTE_SCRIPT:Ve.steps.executeScript.definition,EXECUTE_SCRIPT_V2:Ve.steps.executeScriptV2.definition,EXECUTE_QUERY:Ve.steps.executeQuery.definition,API_REQUEST:Ve.steps.apiRequest.definition,SERVER_LOG:Ve.steps.serverLog.definition,DELAY:Ve.steps.delay.definition,FILTER:Ve.steps.filter.definition,LOOP:Ve.steps.loop.definition,COLLECT:Ve.steps.collect.definition,TRIGGER_AUTOMATION_RUN:Ve.steps.triggerAutomationRun.definition,BRANCH:Ve.steps.branch.definition,CLASSIFY_CONTENT:Ve.steps.classifyText.definition,PROMPT_LLM:Ve.steps.promptLLM.definition,TRANSLATE:Ve.steps.translate.definition,SUMMARISE:Ve.steps.summarise.definition,GENERATE_TEXT:Ve.steps.generate.definition,EXTRACT_FILE_DATA:Ve.steps.extract.definition,EXTRACT_STATE:Ve.steps.extractState.definition,LOOP_V2:Ve.steps.loopV2.definition,discord:Ve.steps.discord.definition,slack:Ve.steps.slack.definition,zapier:Ve.steps.zapier.definition,integromat:Ve.steps.make.definition,n8n:Ve.steps.n8n.definition};ie.SELF_HOSTED&&(i9.EXECUTE_BASH=D3e,n9.EXECUTE_BASH=Ve.steps.bash.definition,ie.isTest()&&(n9.OPENAI=Ve.steps.openai.definition,n9.AGENT=Ve.steps.agent.definition));async function W3e(e){if(i9[e]!=null)return i9[e];if(ie.SELF_HOSTED){let r=(await P.plugins.fetch("automation")).find(n=>n.schema.schema.stepId===e);if(!r)throw new Error(`Unable to find action implementation for "${e}"`);return(await Tje(r)).action}}o(W3e,"getAction");var G3e=U(require("object-sizeof"));var uor=1024*1024;function cor(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(cor,"sanitiseResults");async function $3e(e,t){if(ie.DISABLE_AUTOMATION_LOGS)return;let r=ie.AUTOMATION_MAX_LOG_SIZE_MB;(0,G3e.default)(t)/uor>r&&cor(t,r);try{await ub.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($3e,"storeLog");async function V3e(e){let t=await ub.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(V3e,"checkAppMetadata");var H3e=5,o9=class{static{o(this,"AutomationEmitter")}constructor(t){this.chainCount=t,this.metadata={automationChainCount:t}}async getMaxAutomationChain(){let n=(await C.getWorkspaceDB().get("app_metadata"))?.automations?.chainAutomations;return n===!0?H3e:ie.isTest()?0:n===void 0&&ie.SELF_HOSTED?H3e:0}async emitRow({eventName:t,appId:r,row:n,table:i,oldRow:s,user:a}){let u=await this.getMaxAutomationChain();this.chainCount>=u||Ck({emitter:Uh,eventName:t,appId:r,row:n,table:i,oldRow:s,metadata:this.metadata,user:a})}async emitTable(t,r,n){let i=await this.getMaxAutomationChain();this.chainCount>=i||xk({emitter:Uh,eventName:t,appId:r,table:n,metadata:this.metadata})}},Q3e=o9;process.env.DD_APM_ENABLED&&(z3e(),qA(lor));Gc.threadSetup();var dor=Ve.triggers.definitions.CRON.stepId,por={success:!0,status:"stopped"};function s9(e,t,r){if(e.isLegacyLoop){t.items=DJ(t.items);let n=e?.inputs?.children?.[0],i=n?.id||e.id,s=n?.stepId||e.stepId,a=r||n?.inputs||e.inputs;return{id:i,stepId:s,inputs:a,outputs:{success:!0,...t}}}return{id:e.id,stepId:e.stepId,inputs:r||e.inputs,outputs:{success:!0,...t}}}o(s9,"stepSuccess");function kb(e,t,r){if(e.isLegacyLoop){t.items=DJ(t.items);let n=e?.inputs?.children?.[0],i=n?.id||e.id,s=n?.stepId||e.stepId,a=r||n?.inputs||e.inputs;return{id:i,stepId:s,inputs:a,outputs:{success:!1,...t}}}return{id:e.id,stepId:e.stepId,inputs:r||e.inputs,outputs:{success:!1,...t}}}o(kb,"stepFailure");function hor(e){return{id:e.id,stepId:e.stepId,inputs:e.inputs,outputs:por}}o(hor,"stepStopped");async function mor(e,t){if(!o(a=>!a||typeof a!="object"?!1:Object.entries(a).some(([u,c])=>{if(u==="onEmptyFilter"||c===void 0||c===null)return!1;if(u==="$and"||u==="$or"){let l=c;return Array.isArray(l?.conditions)&&l.conditions.length>0}return typeof c=="object"?Object.keys(c).length>0:!0}),"requiresEvaluation")(t.condition))return!0;let n={},i=o(a=>{let u=(0,xA.cloneDeep)(a);for(let c of Object.values(u))if(c)if(NX(c))c.conditions=c.conditions.map(i);else for(let[l,f]of Object.entries(c))n[l]=sr(l,e),typeof f=="string"&&Pi(f).length>0&&(c[l]=sr(f,e));return u},"evaluateBindings");return Tt.runQuery([n],i(t.condition)).length>0}o(mor,"branchMatches");async function gor(e){e.env=await Wc();try{let{config:t}=await Qn.getSettingsConfigDoc();e.settings={url:t.platformUrl,logo:t.logoUrl,company:t.company}}catch{e.settings={}}}o(gor,"enrichBaseContext");function yor(e,t){e.trigger.outputs={...e.trigger.outputs,...t},e.steps[0]=e.trigger}o(yor,"setTriggerOutput");async function bor(e){let t=e.data.automation?.definition?.trigger;if(!t||!NM(t)&&!zc(t))return;let r=e.data.event.appId,n=e.data.automation._id;if(!r)throw new Error("Unable to execute, event doesn't contain app ID.");if(!n)throw new Error("Unable to execute, event doesn't contain automation ID.");e.data.automation=await P.automations.get(n)}o(bor,"reloadAutomation");var yM=class{static{o(this,"Orchestrator")}constructor(t,r={}){this.job=t,this.stopped=!1,this.onProgress=r.onProgress,this.job.data.automation=VVe(t.data.automation);let n=t.data.event.metadata?.automationChainCount||0;this.emitter=new Q3e(n+1)}get automation(){return this.job.data.automation}get appId(){return this.job.data.event.appId}isCron(){return this.automation.definition.trigger.stepId===dor}async stopCron(t,r){if(!this.isCron())return;let n=`CRON disabled reason=${t} - ${this.appId}/${this.automation._id}`;ke.logWarn(n),await S3e(this.job.id);let{result:i}=r||{};i&&(yor(i,{success:!1,status:"stopped_error"}),i.status="stopped_error",await this.logResult(i))}async logResult(t){await $3e(this.automation,t)}async getMetadata(){let t=Eqe(this.automation._id);return await C.getWorkspaceDB().tryGet(t)||{_id:t,errorCount:0}}async incrementErrorCount(){let t=C.getWorkspaceDB(),r;for(let n=0;n<10;n++){let i=await this.getMetadata();i.errorCount||=0,i.errorCount++;try{return await t.put(i),i.errorCount}catch(s){r=s,await de.wait(1e3+Math.random()*1e3)}}ke.logAlertWithInfo("Failed to update error count in automation metadata",t.name,this.automation._id,r)}isProd(){return Rf(this.appId)}hasErrored(t){return t._error===!0}reportStepProgress(t,r,n,i){if(!this.onProgress)return;let s=i?._loopIteration;this.onProgress({automationId:this.automation._id,appId:this.appId,blockId:t.id,stepId:t.stepId,status:r,occurredAt:Date.now(),result:n,...s?{loop:s}:{}})}async execute(){return await Hf.default.trace("execute",async t=>{t.addTags({appId:this.appId,automationId:this.automation._id});let r=(0,xA.cloneDeep)(this.job.data);delete r.event.appId,delete r.event.metadata,this.isCron()&&!r.event.timestamp&&(r.event.timestamp=Date.now());let n={id:r.automation.definition.trigger.id,stepId:r.automation.definition.trigger.stepId,inputs:null,outputs:r.event},i={trigger:n,steps:[n],status:"success"};this.onProgress?.({automationId:this.automation._id,appId:this.appId,blockId:r.automation.definition.trigger.id,stepId:r.automation.definition.trigger.stepId,status:"running",occurredAt:Date.now()});let s={trigger:n.outputs,steps:{0:n.outputs},stepsByName:{},stepsById:{},user:n.outputs.user,state:{},_error:!1,_stepIndex:1,_stepResults:[]};await gor(s);let a=this.job.data.event.timeout||ie.AUTOMATION_THREAD_TIMEOUT,u=[];try{u=await de.withTimeout(a,()=>this.executeSteps(s,r.automation.definition.steps)),this.stopped?i.status="stopped":this.hasErrored(s)&&(i.status="error")}catch(f){if(f.errno==="ETIME")t.addTags({timeout:!0}),i.status="timed_out",u=s._stepResults;else throw f}i.steps.push(...u);let c=0;this.isProd()&&this.isCron()&&this.hasErrored(s)&&(c=await this.incrementErrorCount()||0),c>=Cqe?(await this.stopCron("errors",{result:i}),t?.addTags({shouldStop:!0})):await this.logResult(i),Object.keys(s?.state||{}).length>0&&(i.state=s.state);let l={success:"success",error:"error",stopped:"stopped"};return this.onProgress?.({automationId:this.automation._id,appId:this.appId,blockId:n.id,stepId:n.stepId,status:l[i.status]||"error",occurredAt:Date.now(),result:n}),i})}async executeSteps(t,r){return await Hf.default.trace("executeSteps",async()=>{let n=0,i=[],s=o(u=>u.outputs.success===!1?"error":u.outputs.status==="stopped"?"stopped":"success","progressStatus");function a(u,c,l=!1){u.stepId==="EXTRACT_STATE"&&!l&&(t.state??={},t.state[c.inputs.key]=c.outputs.value),t.steps[u.id]=c.outputs,t.steps[u.name||u.id]=c.outputs,t.stepsById[u.id]=c.outputs,t.stepsByName[u.name||u.id]=c.outputs,t.previous=c.outputs,t._stepIndex||=0,t.steps[t._stepIndex]=c.outputs,t._stepIndex++,c.outputs.success===!1&&(t._error=!0),t._stepResults.push(c),i.push(c)}for(o(a,"addToContext");n<r.length&&!this.stopped;){let u=r[n];switch(u.stepId){case"BRANCH":{let c=await this.executeBranchStep(t,u);t._stepResults.push(...c),i.push(...c),c[0]&&this.reportStepProgress(u,s(c[0]),c[0],t),n++;break}case"LOOP_V2":{this.reportStepProgress(u,"running",void 0,t);let c=await this.executeLoopStep(t,u);if(u.isLegacyLoop){let l=u.inputs.children?.[0];l&&a(l,c,!0)}else a(u,c,!0);this.reportStepProgress(u,s(c),c,t),n++;break}default:{this.reportStepProgress(u,"running",void 0,t),a(u,await wr.addAction(async()=>{let l=await this.executeStep(t,u);return u.stepId==="EXTRACT_STATE"&&(t.state??={},t.state[l.inputs.key]=l.outputs.value),Oe.action.automationStepExecuted({stepId:u.stepId}),l}));let c=i.at(-1);c&&this.reportStepProgress(u,s(c),c,t),n++;break}}}return i})}async executeLoopStep(t,r){return await Hf.default.trace("executeLoopStep",async n=>{let i=(0,xA.cloneDeep)(r.inputs.children)||[],s=r.inputs;await nL(s,t);let a=jVe(r),u=(t._loopDepth||0)+1;t._loopDepth=u;try{let c=0,l=[];try{l=qVe(r)}catch{return n.addTags({status:"INCORRECT_TYPE",iterations:c}),kb(r,{status:"INCORRECT_TYPE"})}let d=r.isLegacyLoop?Number.MAX_SAFE_INTEGER:WVe(r),p=GVe(i,d),h=Math.min(l.length,a);for(;c<l.length;c++){let g=l[c];if(c===a)return n.addTags({status:"max_iterations_reached",iterations:c}),kb(r,nA(p,"max_iterations_reached",c));if(BVe(r,g))return n.addTags({status:"FAILURE_CONDITION_MET",iterations:c}),kb(r,nA(p,"FAILURE_CONDITION_MET",c));let y=t.loop,b=t._loopIteration;t.loop={currentItem:g},t._loopIteration={current:c+1,total:h};try{let w=t._stepIndex,E=await this.executeSteps(t,i);t._stepIndex=w;for(let T of E)i.some(A=>A.id===T.id)&&$Ve(p,T,c);if(E.some(T=>T.outputs.success===!1))return kb(r,nA(p,void 0,void 0,!0))}finally{t.loop=y,t._loopIteration=b}}let m=c===0?"no_iterations":void 0;return s9(r,nA(p,m,c))}finally{t._loopDepth=u-1}})}async executeBranchStep(t,r){return await Hf.default.trace("executeBranchStep",async n=>{let{branches:i,children:s}=r.inputs;for(let a of i)if(await mor(t,a)){n.addTags({branchName:a.name,branchId:a.id});let u=s9(r,{branchName:a.name,status:`${a.name} branch taken`,branchId:`${a.id}`});this.reportStepProgress(r,"running",u,t);let c=await this.executeSteps(t,s?.[a.id]||[]);return[u,...c]}return n.addTags({status:"No branch condition met"}),[kb(r,{status:"No branch condition met"})]})}async executeStep(t,r){return await Hf.default.trace(r.stepId,async n=>{if(n.addTags({step:{stepId:r.stepId,id:r.id,name:r.name,type:r.type,title:r.stepTitle,internal:r.internal,deprecated:r.deprecated},inputsKeys:Object.keys(r.inputs)}),this.stopped)return n.addTags({stopped:!0}),hor(r);let i=await W3e(r.stepId);if(i==null)throw new Error(`Cannot find automation step by name ${r.stepId}`);let s=(0,xA.cloneDeep)(r.inputs);r.stepId!=="EXECUTE_SCRIPT_V2"&&r.stepId!=="EXTRACT_STATE"&&(s=await nL(s,t)),s=xJ(s,r.schema.inputs.properties);let a;try{a=await Hf.default.trace("fn",()=>i({inputs:s,appId:this.appId,emitter:this.emitter,context:t}))}catch(u){return kb(r,{status:"error",error:Ye(u)})}return r.stepId==="FILTER"&&"result"in a&&a.result===!1&&(this.stopped=!0,a.status="stopped"),n.addTags({outputsKeys:Object.keys(a)}),s9(r,a,s)})}};async function Y3e(e,t={}){let r=e.data.event.appId;if(!r)throw new Error("Unable to execute, event doesn't contain workspace ID.");return await Hf.default.trace("automation.executeInThread",async n=>(n.addTags({workspaceId:r,automationId:e.data.automation?._id}),await C.doInWorkspaceContext(r,async()=>{await bor(e),await C.ensureSnippetContext();let i=await Wc();return await C.doInEnvironmentContext(i,async()=>new yM(e,t).execute())})))}o(Y3e,"executeInThread");var w3e=o(async e=>{let t=e.data.event.appId;if(!t)throw new Error("Unable to execute, event doesn't contain app ID.");await C.doInWorkspaceContext(t,async()=>{await new yM(e).stopCron("stalled")})},"removeStalled");var XNn=Ve.triggers.definitions,J3e={removeOnComplete:!0,removeOnFail:!0};async function _or(){return(await C.getWorkspaceDB().allDocs(Nc(null,{include_docs:!0}))).rows.map(r=>r.doc)}o(_or,"getAllAutomations");async function wor(e,t){let r=e.row.tableId;if(e.appId==null)throw`No appId specified for ${t} - check event emitters.`;!r||!await E7(r)||await C.doInWorkspaceContext(e.appId,async()=>{let n=await _or();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&&Z8(e.appId)&&!await jz(i._id))continue;if(await X3e(i,{row:e.row,oldRow:e.oldRow}))try{await Lb.add({automation:i,event:e},J3e)}catch(a){ke.logAlert("Failed to queue automation",a)}}})}o(wor,"queueRelevantRowAutomations");async function a9(e,t){try{await wor(e,t)}catch(r){ke.logWarn("Unable to process row event",r)}}o(a9,"queueRowAutomations");Uh.on("row:save",async function(e){!e||!e.row||!e.row.tableId||await a9(e,"row:save")});Uh.on("row:update",async function(e){!e||!e.row||!e.row.tableId||await a9(e,"row:update")});Uh.on("row:delete",async function(e){!e||!e.row||!e.row.tableId||await a9(e,"row:delete")});function Eor(e,t){return Tt.runQuery([e],t).length>0}o(Eor,"rowPassesFilters");function mM(e){return e!==null&&"steps"in e&&Array.isArray(e.steps)}o(mM,"isAutomationResults");async function $c(e,t,{getResponses:r,onProgress:n}={}){if(e.disabled)throw new Error("Automation is disabled");if(ln.automations.isAppAction(e)&&!await jz(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]=Nh(t.fields[l],c[l]);t.fields=a}else(ln.automations.isRowAction(e)||ln.automations.isWebhookAction(e))&&(t={...t,...t.fields,fields:{}});let i={automation:e,event:t};return await X3e(e,{row:i.event?.row??{},oldRow:i.event?.oldRow??{}})?r?(i.event={...i.event,appId:C.getWorkspaceId(),automation:e},Y3e({data:i},{onProgress:n})):Lb.add(i,J3e):{outputs:{success:!1,status:"stopped"},message:"Automation did not run. Filter conditions in trigger were not met."}}o($c,"externalTrigger");async function X3e(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 yb(s,t.row);return Eor(a,i)}return!0}o(X3e,"checkTriggerFilters");var Sor=[{name:"list_automations",sourceType:"BUDIBASE",sourceLabel:"Budibase",description:"List all automations in the current app",tool:(0,bM.tool)({description:"List all automations in the current app",inputSchema:Qf.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,bM.tool)({description:"Get details about a specific automation by ID",inputSchema:Qf.z.object({automationId:Qf.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,bM.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:Qf.z.object({automationId:Qf.z.string().describe("The exact _id of the automation to trigger (obtained from list_automations)"),fields:Qf.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:Qf.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 $c(a,{fields:i||{},timeout:n?n*1e3:ie.AUTOMATION_THREAD_TIMEOUT},{getResponses:!0});return mM(c)?{success:c.status==="success",status:c.status,steps:c.steps}:{success:!1,error:c.message||"Automation did not trigger"}}})}],Z3e=Sor;var u9=require("ai"),PA=require("zod");var Tor=[{name:"list_tables",sourceType:"BUDIBASE",sourceLabel:"Budibase",description:"List all tables in the current app",tool:(0,u9.tool)({description:"List all tables in the current app",inputSchema:PA.z.object({showSchema:PA.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,u9.tool)({description:"Get details about a specific table by ID",inputSchema:PA.z.object({tableId:PA.z.string().describe("The ID of the table to retrieve")}),execute:async e=>{let{tableId:t}=e;return{table:await P.tables.getTable(t)}}})}],eQe=Tor;var Mb=require("ai"),Ft=require("zod");var vor={list_rows:{sourceType:"BUDIBASE",sourceLabel:"Budibase",description:"List rows in a given table",tool:(0,Mb.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,Mb.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,Mb.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,Mb.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,Mb.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}}})}},tQe=vor;var Aor=[...Z3e,...eQe,...Object.entries(tQe).map(([e,t])=>({name:e,...t}))],c9=Aor;var rQe=require("ai"),l9=require("zod");var Ror=o(e=>e.length>64?e.substring(0,64)+"...":e.replace(/[^a-zA-Z0-9_-]/g,"_"),"sanitiseToolName"),Oor=o(e=>{let t={};for(let r of e.parameters||[])t[r.name]=l9.z.string().optional().describe(`Parameter: ${r.name}`);return l9.z.object(t)},"buildParametersSchema"),nQe=o((e,t)=>{let r=Ror(e.name),n=Oor(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,rQe.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 Nb(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 iQe=o(e=>Object.fromEntries(e.map(t=>[t.name,t.tool])),"toToolSet");var oQe=require("ai"),_M=require("zod");var Ior=_M.z.object({query:_M.z.string().describe("The search query to find relevant information"),num_results:_M.z.number().optional().default(10).describe("Number of results to return")}),f9=o(e=>({name:"exa_search",sourceType:"SEARCH",sourceLabel:"Exa",description:"Search the web using Exa",tool:(0,oQe.tool)({description:"Search the web using Exa",inputSchema:Ior,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 Ub=require("zod"),sQe=require("ai");var Cor=Ub.z.object({objective:Ub.z.string().describe("Natural language description of what to search for"),search_queries:Ub.z.array(Ub.z.string()).describe("Array of search query strings"),max_results:Ub.z.number().optional().default(10).describe("Maximum number of results to return")}),d9=o(e=>({name:"parallel_search",description:"Search the web using Parallel AI",sourceType:"SEARCH",sourceLabel:"Parallel Search",tool:(0,sQe.tool)({description:"Search the web using Parallel AI",inputSchema:Cor,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 aQe=U(require("dd-trace"));function uQe(e){return{name:e.name,description:e.description,sourceType:e.sourceType,sourceLabel:e.sourceLabel}}o(uQe,"toToolMetadata");async function p9(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=>nQe(c,s.get(c.datasourceId))),u=[...c9,...a];return i?.apiKey&&(i.provider==="exa"?u.push(f9(i.apiKey)):i.provider==="parallel"&&u.push(d9(i.apiKey))),u}o(p9,"getAvailableTools");async function xor(e){return(await p9(e)).map(uQe)}o(xor,"getAvailableToolsMetadata");async function Dor(e,t={}){let{baseSystemPrompt:r,includeGoal:n=!0}=t,i=await p9(e.aiconfig),s=new Set(e.enabledTools||[]),a=Mt.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:iQe(u)}}o(Dor,"buildPromptAndTools");function Por(e){let t=o(async(r,n)=>{let i=aQe.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(Por,"createLiteLLMFetch");var g9={};G(g9,{create:()=>kor,getOrThrow:()=>Lor,getSingle:()=>lQe,update:()=>Mor});var m9=o(e=>({...e,live:e.live??!1,agents:e.agents??[]}),"withDefaults"),Nor=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"),cQe=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:Nor(r.conversationStarters)}))},"normalizeAgents");async function lQe(){let r=(await C.getWorkspaceDB().allDocs(yt.getDocParams("chatapp",void 0,{include_docs:!0,limit:1}))).rows[0]?.doc;return r?m9(r):void 0}o(lQe,"getSingle");async function Lor(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 m9(r)}o(Lor,"getOrThrow");async function kor(e){let t=C.getWorkspaceDB();if(await lQe())throw new K("Chat App already exists for this workspace",400);let n=cQe(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(kor,"create");async function Mor(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=cQe(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,m9(s)}o(Mor,"update");var y9={};G(y9,{buildLiteLLMParams:()=>Tk,generateRows:()=>For,generateTables:()=>Uor});async function Uor(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(Uor,"generateTables");async function For(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 Bor(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(For,"generateRows");async function Bor(e,t){function r(n){return typeof n=="object"?Kqe(n):Qqe(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(Bor,"processAttachments");var b9={};G(b9,{deleteAgentFileChunks:()=>tA,ingestAgentFile:()=>Aer,retrieveContextForSources:()=>Rer});var _9={};G(_9,{create:()=>ler,createVectorDb:()=>eA,fetch:()=>cer,find:()=>Rk,remove:()=>der,update:()=>fer});var S9={};G(S9,{create:()=>$or,fetch:()=>jor,find:()=>Gor,get:()=>Wor,remove:()=>Hor,update:()=>Vor});var fQe=U(require("lodash/cloneDeep"));var dQe="********";function Wh(){return C.getWorkspaceDB()}o(Wh,"getDb");function pQe(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(pQe,"cleanAutomationInputs");async function qor(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(qor,"handleStepEvents");async function jor(){return(await Wh().allDocs(Nc(null,{include_docs:!0}))).rows.filter(n=>!!n.doc).map(n=>n.doc).map(NA).map(LA)}o(jor,"fetch");async function Wor(e){let r=await Wh().get(e);return LA(NA(r))}o(Wor,"get");async function Gor(e,t){return(await Wh().getMultiple(e,t)).map(NA).map(LA)}o(Gor,"find");async function $or(e){e=NA(e);let t=Wh();e._id||(e._id=hqe()),e.type="automation",e=hQe(e),e=pQe(e),e=await E9({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,LA(e)}o($or,"create");async function Vor(e){if(e=NA(e),!e._id||!e._rev)throw new K("_id or _rev fields missing",400);let t=Wh(),r=await t.get(e._id);Qor(e,r),e=hQe(e,r),e=pQe(e),e=await E9({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 pL("automationTestInput",e._id),await r9(e._id)),await qor(r,e),LA({...e,_rev:n.rev,_id:n.id})}o(Vor,"update");async function Hor(e,t){let r=Wh(),n=await r.get(e);await E9({oldAuto:n}),await pL("automationTestInput",e),await pL("automationTestHistory",e),await r9(e);let i=await r.remove(e,t);return await Oe.automation.deleted(n),i}o(Hor,"remove");async function E9({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 Wh().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(E9,"checkForWebhooks");function Qor(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(Qor,"guardInvalidUpdatesAndThrow");function NA(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(NA,"trimUnexpectedObjectFields");function hQe(e,t){let r=e.definition?.trigger;if(!r||!zc(r)||!r.inputs||!Kor(r.inputs.password))return e;if(!t||!zc(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,fQe.default)(e),s=i.definition?.trigger;if(!zc(s)||!s.inputs)throw new K("IMAP password is required",400);return s.inputs.password=n,i}o(hQe,"hydrateAutomationSecrets");function LA(e){let t=e.definition?.trigger;return zc(t)&&t.inputs?.password&&(t.inputs.password=dQe),e}o(LA,"maskAutomationSecrets");function Kor(e){return e===Fi||e===dQe}o(Kor,"isMaskedPassword");var T9={};G(T9,{destroy:()=>Jor,newDoc:()=>zor,save:()=>Yor});function mQe(e){return e.startsWith(F.DocumentType.WEBHOOK)}o(mQe,"isWebhookID");function zor(e,t,r){return{live:!0,name:e,action:{type:t,target:r}}}o(zor,"newDoc");async function Yor(e){let t=C.getWorkspaceDB();e._id&&mQe(e._id)?await t.get(e._id):e._id=_qe();let r=await t.put(e);return e._rev=r.rev,e}o(Yor,"save");async function Jor(e,t){let r=C.getWorkspaceDB();if(!e||!mQe(e))throw new Error("Provided webhook ID is not valid.");return await r.remove(e,t)}o(Jor,"destroy");var v9={};G(v9,{checkForCollectStep:()=>wF});var A9={};G(A9,{trigger:()=>Xor});async function Xor(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 no.isSyncAutomationsEnabled()){let u=await $c(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 $c(i,{fields:t,appId:u}),{message:`Automation ${i._id} has been triggered.`,automation:i}}}o(Xor,"trigger");var _u={...S9,webhook:T9,utils:v9,execution:A9};var O9={};G(O9,{exportApp:()=>wQe,exportDB:()=>_Qe,streamExportApp:()=>rsr});var gQe=require("dd-trace"),R9=U(require("fs")),Vc=U(require("fs/promises")),Kf=require("path"),yQe=U(require("tar")),bQe=require("uuid");var Fb="db.txt",wM="global.txt",EM="attachments";var Zor=require("memorystream");async function esr(e,t){let r=`${(0,bQe.v4)()}.tar.gz`,n=(0,Kf.join)(cu(),r);return await yQe.create({gzip:!0,file:n,noDirRecurse:!1,cwd:e},t),n}o(esr,"tarFilesToTmp");async function _Qe(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=R9.default.createWriteStream(i);return await n.dump(s,r),i}else{let i=new Zor,s="";return i.on("data",a=>{s+=a.toString()}),await n.dump(i,r),s}})}o(_Qe,"exportDB");function tsr(e){let t=[oL,uqe,lqe];return e&&t.push(cqe),r=>!t.map(n=>r._id.includes(n)).reduce((n,i)=>n||i)}o(tsr,"defineFilter");async function wQe(e,t){return await gQe.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,Kf.join)(a,i);if(R9.default.existsSync(u)){let l=await Vc.default.readdir(u);for(let f of l){let d=(0,Kf.join)(u,f);await Vc.default.rename(d,(0,Kf.join)(u,"..",f))}await Vc.default.rmdir(u)}let c=(0,Kf.join)(a,Fb);if(await _Qe(e,{filter:tsr(t?.excludeRows),exportPath:c}),t?.encryptPassword){let l=o(async(f,d="")=>{for(let p of await Vc.default.readdir(f)){let h=(0,Kf.join)(f,p),m=d?(0,Kf.join)(d,p):p;if(p!==EM){let g=await Vc.default.lstat(h);g.isFile()?(await aa.encryptFile({dir:f,filename:p},t.encryptPassword),await Vc.default.rm(h)):g.isDirectory()&&await l(h,m)}}},"processDirectory");await l(a)}if(t?.tar){let l=await esr(a,await Vc.default.readdir(a));return await Vc.default.rm(a,{recursive:!0,force:!0}),l}else return a})}o(wQe,"exportApp");async function rsr({appId:e,excludeRows:t,encryptPassword:r}){let n=await wQe(e,{excludeRows:t,tar:!0,encryptPassword:r});return mje(n)}o(rsr,"streamExportApp");var I9={};G(I9,{getGlobalDBFile:()=>ssr,getListOfAppsInMulti:()=>asr,importApp:()=>usr,untarFile:()=>AQe,updateAttachmentColumns:()=>vQe});var Bb=U(require("fs")),wu=U(require("fs/promises")),zf=require("path"),SQe=U(require("tar")),TQe=require("uuid");function EQe(e,t){let r=t.key?.split("/")||[];r.shift(),r.unshift(e);let n=r.join("/");return{...t,key:n,url:""}}o(EQe,"rewriteAttachmentUrl");async function vQe(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=>EQe(e,f)):(l==="attachment_single"||l==="signature_single")&&u[c]&&(u[c]=EQe(e,u[c]))}return u}))}await t.bulkDocs(n)}o(vQe,"updateAttachmentColumns");async function nsr(e,t){let r=(await t.allDocs(Nc(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(nsr,"updateAutomations");async function isr(e){if(e.file&&e.file.type!=="text/plain")throw new Error("Cannot import a non-text based file.");if(e.file)return Bb.default.createReadStream(e.file.path);if(e.key){let[t,r]=e.key.split("/"),n=await vje(t,r);return Bb.default.createReadStream((0,zf.join)(n,r,"db","dump.txt"))}else throw new Error("Either file or key is required.")}o(isr,"getTemplateStream");async function AQe(e){let t=(0,zf.join)(cu(),(0,TQe.v4)());return await wu.default.mkdir(t),await SQe.extract({cwd:t,file:e.path}),t}o(AQe,"untarFile");async function osr(e,t){try{let r=o(async n=>{for(let i of await wu.default.readdir(n)){let s=(0,zf.join)(n,i);if(!s.endsWith(EM)){let a=await wu.default.lstat(s);if(a.isFile()&&s.endsWith(".enc")){let u=s.replace(/\.enc$/,"");await aa.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(osr,"decryptFiles");function ssr(e){return Bb.default.readFileSync((0,zf.join)(e,wM),"utf8")}o(ssr,"getGlobalDBFile");function asr(e){return Bb.default.readdirSync(e).filter(t=>t!==wM)}o(asr,"getListOfAppsInMulti");async function usr(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 AQe(r.file):r.file.path,a&&r.file.password&&await osr(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===Fb))throw new Error("App export does not appear to be valid - no DB file found.");{let m=[],g=[wM,Fb];for(let w of f){let E=(0,zf.join)(c,w);g.includes(w)||(w=(0,zf.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 Be.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=Bb.default.createReadStream((0,zf.join)(c,Fb))}else s=await isr(r);let{ok:l}=await t.load(s);if(!l)throw"Error loading database dump from template.";return n.updateAttachmentColumns&&await vQe(i,t),await nsr(i,t),c&&await wu.default.rm(c,{recursive:!0,force:!0}),l}o(usr,"importApp");var C9={};G(C9,{calculateAutomationCount:()=>OQe,calculateBackupStats:()=>csr,calculateDatasourceCount:()=>RQe,calculateScreenCount:()=>IQe});async function SM(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(SM,"runInContext");async function RQe(e,t){return SM(e,async r=>{let n=await r.allDocs(ZT()),i=await r.allDocs(If());return n.rows.length+i.rows.length},t)}o(RQe,"calculateDatasourceCount");async function OQe(e,t){return SM(e,async r=>(await r.allDocs(Nc())).rows.length,t)}o(OQe,"calculateAutomationCount");async function IQe(e,t){return SM(e,async r=>(await P.screens.fetch(r)).length,t)}o(IQe,"calculateScreenCount");async function csr(e){return SM(e,async t=>{let r=[];r.push(RQe(e,t)),r.push(OQe(e,t)),r.push(IQe(e,t));let n=await Promise.all(r);return{datasources:n[0],automations:n[1],screens:n[2]}})}o(csr,"calculateBackupStats");var x9={};G(x9,{clearErrors:()=>lsr});async function lsr(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 Fe.workspace.invalidateWorkspaceMetadata(r.appId,r)}o(lsr,"clearErrors");var TM={...O9,...I9,...C9,...x9};var D9={};G(D9,{getSourceType:()=>fsr});function fsr(e){if(Ls(e))return"table";if(dn(e))return"view";if(mm(e))return"datasource";if(zre(e))return"query";throw new Error(`Unknown source type for source "${e}"`)}o(fsr,"getSourceType");function CQe(e,t){return!e.disabled&&t?"published":"disabled"}o(CQe,"getPublishedState");async function xQe(){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:CQe(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:CQe(h,m)}}return{automations:f,workspaceApps:p,tables:d}}o(xQe,"status");var DQe={status:xQe};var P9={};G(P9,{create:()=>psr,fetch:()=>dsr,findByResourceId:()=>msr,remove:()=>hsr});async function dsr(e){return(await C.getWorkspaceDB().find({selector:{_id:{$regex:`^workspace_favourite${ce}`},...e?{createdBy:e}:{}}})).docs}o(dsr,"fetch");async function psr(e){let r=await C.getWorkspaceDB().put({_id:F.generateWorkspaceFavouriteID(),...e});return{...e,_id:r.id,_rev:r.rev}}o(psr,"create");async function hsr(e,t){return await C.getWorkspaceDB().remove(e,t)}o(hsr,"remove");async function msr(e){return(await C.getWorkspaceDB().find({selector:{_id:{$regex:`^workspace_favourite${ce}`},resourceId:e},limit:1})).docs}o(msr,"findByResourceId");var N9={};G(N9,{fetch:()=>gsr,fetchWithDocument:()=>ysr});async function gsr(e){if(!Ls(e))throw new Error(`Invalid tableId: ${e}`);let t=C.getWorkspaceDB(),r={startkey:[e],endkey:[e,{}]};return(await t.query(XT(Pc.LINK),r)).rows.map(i=>i.value)}o(gsr,"fetch");async function ysr(e){if(!Ls(e))throw new Error(`Invalid tableId: ${e}`);let t=C.getWorkspaceDB(),r={startkey:[e],endkey:[e,{}],include_docs:!0};return(await t.query(XT(Pc.LINK),r)).rows.map(i=>i.doc)}o(ysr,"fetchWithDocument");var PQe={...N9};var L9={};G(L9,{addLink:()=>bsr,deleteLink:()=>_sr,update:()=>wsr});async function bsr({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(bsr,"addLink");async function _sr(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(_sr,"deleteLink");async function wsr(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(wsr,"update");var k9={};G(k9,{cleanStoredToken:()=>Csr,create:()=>Esr,fetch:()=>LQe,get:()=>vM,getLastUsages:()=>Isr,getToken:()=>Rsr,remove:()=>Tsr,update:()=>Ssr,validateConfig:()=>Osr});async function NQe(e,t){if((await LQe()).find(n=>n.name===e&&n._id!==t))throw new K(`OAuth2 config with name '${e}' is already taken.`,400)}o(NQe,"guardName");async function LQe(){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(LQe,"fetch");async function Esr(e){let t=C.getWorkspaceDB();await NQe(e.name);let r=await t.put({_id:`oauth2${ce}${it.newid()}`,...e});return{_id:r.id,_rev:r.rev,...e}}o(Esr,"create");async function vM(e){return await C.getWorkspaceDB().tryGet(e)}o(vM,"get");async function Ssr(e){let t=C.getWorkspaceDB();await NQe(e.name,e._id);let r=await vM(e._id);if(!r)throw new K(`OAuth2 config with id '${e._id}' not found.`,404);let n={...e,clientSecret:e.clientSecret===Fi?r.clientSecret:e.clientSecret},i=await t.put(n);return await kQe(e._id),{...n,_rev:i.rev}}o(Ssr,"update");async function Tsr(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 kQe(e);let n=await r.tryGet(yt.generateOAuth2LogID(e));n&&await r.remove(n)}o(Tsr,"remove");async function kQe(e){let t=Fe.CacheKey.OAUTH2_TOKEN(e);await Fe.destroy(t)}o(kQe,"cleanCache");var MQe=require("koa"),UQe=U(require("node-fetch"));var{DocWritethrough:vsr}=Fe.docWritethrough;async function FQe(e){e=await JVe(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,UQe.default)(e.url,t)}o(FQe,"fetchToken");var Asr=o(async e=>{await new vsr(C.getWorkspaceDB(),yt.generateOAuth2LogID(e)).patch({lastUsage:Date.now()})},"trackUsage");async function Rsr(e){let t=await Fe.withCacheWithDynamicTTL(Fe.CacheKey.OAUTH2_TOKEN(e),async()=>{let r=await vM(e);if(!r)throw new MQe.HttpError(`oAuth config ${e} count not be found`);let n=await FQe(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 Asr(e),t}o(Rsr,"getToken");async function Osr(e){try{let t=await FQe(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(Osr,"validateConfig");async function Isr(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(Isr,"getLastUsages");async function Csr(e){await Fe.destroy(Fe.CacheKey.OAUTH2_TOKEN(e),{useTenancy:!0})}o(Csr,"cleanStoredToken");var U9={};G(U9,{enrichArrayContext:()=>jQe,enrichContext:()=>M9,fetch:()=>Psr,find:()=>Dsr});function BQe(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(BQe,"updateSchema");function xsr(e){return e.map(t=>BQe(t))}o(xsr,"updateSchemas");function qQe(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(qQe,"enrichQueries");async function Dsr(e){let t=C.getWorkspaceDB(),r=C.getWorkspaceId(),n=qQe(await t.get(e));return Rf(r)&&(delete n.fields,delete n.parameters),BQe(n)}o(Dsr,"find");async function Psr(e={enrich:!0}){let n=(await C.getWorkspaceDB().allDocs(rz(null,{include_docs:!0}))).rows.map(i=>i.doc);return e.enrich&&(n=await qQe(n)),xsr(n)}o(Psr,"fetch");async function jQe(e,t={}){let r={};for(let s in e)r[s]=e[s];let n=await M9(r,t),i=[];for(let[s,a]of Object.entries(n))i[parseInt(s)]=a;return i}o(jQe,"enrichArrayContext");async function M9(e,t={}){let r={};if(!e||!t)return r;if(Array.isArray(e))return jQe(e,t);let n=await Wc(),i={...t,env:n};for(let s of Object.keys(e))e[s]!=null&&(typeof e[s]=="object"?r[s]=await M9(e[s],i):typeof e[s]=="string"?r[s]=sr(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(M9,"enrichContext");var WQe={...U9};var B9={};G(B9,{duplicateResourcesToWorkspace:()=>zsr,getResourcesInfo:()=>Nsr});var VQe=U(require("lodash/chunk"));async function Nsr(){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,Tqe(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(Nsr,"getResourcesInfo");async function Lsr(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(Lsr,"getDestinationDb");var ksr={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 RM(e){return Object.entries(ksr).find(([r,n])=>e.startsWith(n))?.[0]}o(RM,"getResourceType");function GQe(e){return e._id?RM(e._id)==="automation":!1}o(GQe,"isAutomation");function Msr(e){return e._id?RM(e._id)==="workspace_app":!1}o(Msr,"isWorkspaceApp");function Usr(e){return e._id?RM(e._id)==="table":!1}o(Usr,"isTable");var Fsr=new Set(["attachment","attachment_single","signature_single"]),Bsr=o(e=>!!e?.type&&Fsr.has(e.type),"isAttachmentColumn"),qsr=o(e=>e.schema?Object.entries(e.schema).filter(([,t])=>Bsr(t)).map(([t,r])=>({field:t,type:r.type})):[],"getAttachmentColumns"),jsr=o((e,t,r)=>{if(!e?.startsWith(`${t}/`)||t===r)return e;let n=e.slice(t.length);return`${r}${n}`},"buildDestinationAttachmentKey");async function Wsr(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(Wsr,"copyAttachmentToWorkspace");async function $Qe(e,t){if(!e?.key||!t.sourceProdWorkspaceId||!t.destinationProdWorkspaceId||t.sourceProdWorkspaceId===t.destinationProdWorkspaceId)return e;let r=jsr(e.key,t.sourceProdWorkspaceId,t.destinationProdWorkspaceId);if(!r||r===e.key)return e;let n=await Wsr(e.key,r,t.cache);return n?{...e,key:n,url:""}:e}o($Qe,"remapAttachmentValue");async function Gsr(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 $Qe(u,r);a.push(c)}n[i.field]=a}else(i.type==="attachment_single"||i.type==="signature_single")&&s&&(n[i.field]=await $Qe(s,r))}}o(Gsr,"remapRowAttachments");var AM=1e3,$sr=250,F9=3,Vsr=o(e=>new Promise(t=>setTimeout(t,e)),"delay");async function Hsr(e,t){let r=C.getWorkspaceDB(),n={include_docs:!0,limit:AM+(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>AM?s.slice(0,AM):s,u=a.length===AM?a[a.length-1]._id:void 0;return{rows:a,nextStartAfter:u}}o(Hsr,"fetchTableRowsPage");async function Qsr(e,t){let r=(0,VQe.default)(t,$sr);for(let n of r){let i=n,s=0;for(;i.length&&s<F9;){s++;let a=await e.bulkDocs(i),u=[];if(a.forEach((c,l)=>{c.error&&u.push(i[l])}),!u.length)break;if(s>=F9)throw new Error(`Failed to copy ${u.length} row(s) after ${F9} attempts.`);await Vsr(s*250),i=u}}}o(Qsr,"bulkInsertRows");async function Ksr(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=qsr(u),f;do{let{rows:d,nextStartAfter:p}=await Hsr(u._id,f);if(f=p,!d.length)break;let h=[];for(let m of d){await Gsr(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 Qsr(t,h)}while(f)}}o(Ksr,"duplicateInternalTableRows");async function zsr(e,t,r){e=Array.from(new Set(e).keys());let n=await Lsr(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,(GQe(h)||Msr(h))&&(h.disabled=!0),GQe(h)&&(h.appId=t),h})),(r?.copyRows??!0)&&await Ksr(u.filter(Usr),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(RM(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(zsr,"duplicateResourcesToWorkspace");var q9={};G(q9,{create:()=>Jsr,deleteAll:()=>Zsr,deleteAllForDatasource:()=>aar,docExists:()=>ear,get:()=>HQe,getAll:()=>Xsr,getAllForTable:()=>OM,getNames:()=>KQe,remove:()=>oar,run:()=>sar,setTablePermission:()=>tar,setViewPermission:()=>nar,unsetTablePermission:()=>rar,unsetViewPermission:()=>iar});async function Ysr(e,t,r){let n=await KQe(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(Ysr,"ensureUniqueAndThrow");async function Jsr(e,t){let r={name:t.name.trim()},n=C.getWorkspaceDB(),i=cL(e),s=await n.tryGet(i);s||(s={_id:i,actions:{}}),await Ysr(s,r.name);let a=C.getWorkspaceId();if(!a)throw new Error("Could not get the current appId");let u=`row_action${ce}${it.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(Jsr,"create");async function HQe(e,t){let n=(await OM(e))?.actions[t];if(!n)throw new K(`Row action '${t}' not found in '${e}'`,400);return n}o(HQe,"get");async function OM(e){let t=C.getWorkspaceDB(),r=cL(e);return await t.tryGet(r)}o(OM,"getAllForTable");async function Xsr(){return(await C.getWorkspaceDB().allDocs(yt.getDocParams("ra",void 0,{include_docs:!0}))).rows.map(t=>t.doc)}o(Xsr,"getAll");async function Zsr(e){let t=C.getWorkspaceDB(),r=await OM(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(Zsr,"deleteAll");async function ear(e){let t=C.getWorkspaceDB(),r=cL(e);return await t.exists(r)}o(ear,"docExists");async function kA(e,t,r){let n=await OM(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(kA,"updateDoc");async function QQe(e,t){let r;if(dn(t)&&(r=await P.views.get(t)),!r||r.tableId!==e)throw new K(`View '${t}' not found in '${e}'`,400)}o(QQe,"guardView");async function tar(e,t){return await kA(e,t,async r=>(r.actions[t].permissions.table.runAllowed=!0,r))}o(tar,"setTablePermission");async function rar(e,t){return await kA(e,t,async r=>(r.actions[t].permissions.table.runAllowed=!1,r))}o(rar,"unsetTablePermission");async function nar(e,t,r){return await QQe(e,r),await kA(e,t,async n=>(n.actions[t].permissions.views[r]={runAllowed:!0},n))}o(nar,"setViewPermission");async function iar(e,t,r){return await QQe(e,r),await kA(e,t,async n=>(delete n.actions[t].permissions.views[r],n))}o(iar,"unsetViewPermission");async function oar(e,t){return await kA(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(oar,"remove");async function sar(e,t,r,n){let i=await P.tables.getTable(e);if(!i)throw new K("Table not found",404);let{automationId:s}=await HQe(e,t),a=await P.automations.get(s),u=await P.rows.find(e,r);await $c(a,{fields:{id:u._id,revision:u._rev,row:u,table:i},user:n,appId:C.getWorkspaceId()},{getResponses:!0})}o(sar,"run");async function KQe(e){return(await P.automations.find(e.map(({automationId:n})=>n))).reduce((n,i)=>(n[i._id]=i.name,n),{})}o(KQe,"getNames");async function aar(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(aar,"deleteAllForDatasource");var W9={};G(W9,{FIND_LIMIT:()=>j9,getRowsWithAttachments:()=>car});var j9=25;function uar(e,t,r){let n={selector:{$or:t.map(i=>({[i]:{$exists:!0}})),_id:{$regex:`^ro${St}${e}`}},limit:j9};return r&&(n.bookmark=r),n}o(uar,"generateAttachmentFindParams");async function car(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=uar(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===j9);return{rows:a,columns:n}}o(car,"getRowsWithAttachments");var $9={};G($9,{find:()=>har,getAllInternalRows:()=>dar,save:()=>par});var MA={};G(MA,{find:()=>far,getRow:()=>G9,save:()=>lar});var zQe=U(require("lodash/fp/cloneDeep"));async function G9(e,t,r){let n;return typeof e=="string"?dn(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 lar(e,t,r){let{tableId:n,viewId:i}=Bh(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,zQe.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(lar,"save");async function far(e,t){let{tableId:r,viewId:n}=Bh(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(far,"find");async function dar(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(dar,"getAllInternalRows");function YQe(e){let t=e;return dn(e)&&(t=Zr(e)),kt(t)?MA:x7}o(YQe,"pickApi");async function par(e,t,r,n){return YQe(e).save(e,t,r,n)}o(par,"save");async function har(e,t){return YQe(e).find(e,t)}o(har,"find");var eX={};G(eX,{exportRows:()=>Uar,fetch:()=>Far,fetchLegacyView:()=>qar,fetchRaw:()=>Bar,isValidFilter:()=>Bqe,search:()=>Mar});var Y9={};G(Y9,{exportRows:()=>Oar,fetch:()=>cKe,fetchLegacyView:()=>z9,fetchRaw:()=>K9,sqs:()=>UA});var UA={};G(UA,{buildInternalFieldList:()=>H9,search:()=>aKe});var tKe=U(require("dd-trace")),rKe=require("lodash"),nKe=U(require("lodash/pick"));var JQe=require("lodash");var mar=["CREATE","UPDATE","DELETE"],gar=["mysql2","mssql","oracledb"],yar=["CREATE_TABLE","UPDATE_TABLE","DELETE_TABLE"],V9=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}},Gh=class{static{o(this,"AliasTables")}constructor(t){this.tableNames=t,this.aliases={},this.tableAliases={},this.charSeq=new V9}isAliasingEnabled(t,r){let n=t.resource?.fields?.length;if(!n||n<=0||yar.includes(t.operation))return!1;if(!r)return!0;try{let i=qJ(r),s=mar.includes(t.operation),a=gar.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,JQe.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 bar(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(bar,"findColumnInQueries");function XQe(e,t){bar(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(XQe,"userColumnMapping");function IM(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":XQe(r,t);break;default:Be.unreachable(i)}break}case"bb_reference":{XQe(r,t);break}}return Tt.recurseLogicalOperators(t,r=>IM(e,r))}o(IM,"checkFilters");function ZQe(e,t){return t.query&&(t.query=IM(e,t.query)),t}o(ZQe,"searchInputMapping");function CM(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(CM,"isSearchingByRowID");var iKe=new ze.Sql("sqlite3"),_ar=2e3,oKe=new RegExp("no such column: .+"),war=new RegExp("no such table: .+"),Ear=new RegExp("duplicate column name: .+");async function H9(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(`${Cf(c._id,p._id)}.${g}`)}),m},"getJunctionFields");if(P.tables.isTable(e))for(let p of vn)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 H9(y,t,{includeHiddenFields:l})).concat(d(y,["doc1.fieldName","doc2.fieldName"]));if(b.length+f.length>_ar)break;f=f.concat(b)}}if(!u||!de.views.isCalculationView(e))for(let p of vn)f.push(`${c._id}.${p}`);return[...new Set(f)]}o(H9,"buildInternalFieldList");function Sar(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(Hc(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(Sar,"cleanupFilters");function sKe(e,t){let r=Rb.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]=sKe(JSON.parse(n[s])));let a=s.indexOf(Rb);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(sKe,"reverseUserColumnMapping");async function eKe(e,t,r,n){let i=r.map(c=>c.through),s=new Gh(t.map(c=>c._id).concat(i));n?.countTotalRows&&(e.operation="COUNT");let a=o(async c=>{let l=iKe._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 tKe.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?sA(u):Array.isArray(u)?sKe(u,e.table):u}o(eKe,"runSqlQuery");function Tar(e,t){return e===400&&t?.match(war)||e===400&&t?.match(oKe)||e===400&&t?.match(Ear)||e===404&&t?.includes(Fn)}o(Tar,"resyncDefinitionsRequired");async function aKe(e,t,r){let{paginate:n,query:i,...s}=(0,rKe.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=Dje(a,u),f={...Sar(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:ul,entityId:a._id,operation:"READ"},filters:f,meta:{columnPrefix:Rb,sqliteUseLikeWithoutLower:!0},resource:{fields:await H9(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=(kM(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;!CM(f)&&s.limit&&(n=!0,p.paginate={limit:s.limit+1,offset:h});let m=await Fh(p);try{let[g,y]=await Promise.all([eKe(m,u,l),e.countRows?eKe(m,u,l,{countTotalRows:!0}):Promise.resolve(void 0)]),b=iKe.convertJsonStringColumns(a,await Sk(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),...vn];E=E.map(A=>(0,nKe.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&&Tar(g.status,y))return await Oi.doWithLock({type:"auto_extend",name:"sys_sync_definitions",resource:C.getWorkspaceId()},P.tables.sqs.syncDefinition),aKe(e,t,{retrying:!0});if(g.status===400&&y?.match(oKe))return{rows:[]};throw new Error(`Unable to search by SQL - ${y}`,{cause:g})}}o(aKe,"search");var Aar=F.getPouch({inMemory:!0});async function uKe(view,calculation,group,data){let db=new Aar(it.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(uKe,"runView");async function Oar(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=Dar(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:Bk(g??Object.keys(h[0]),y,c,l)};if(r==="json")return{fileName:"export.json",content:qk(y)};if(r==="jsonWithSchema")return{fileName:"export.json",content:jk(m,y)};throw"Format not recognised"}o(Oar,"exportRows");async function cKe(e){let t=await Iar(e),r=await K9(e);return await Jt(t,r)}o(cKe,"fetch");async function Iar(e){try{return await P.tables.getTable(e)}catch(t){if(t.status!==404)throw t;let i=await Car(e);if(!i)throw t;return i}}o(Iar,"getTableForFetch");async function Car(e){let t=C.getWorkspaceId();if(!t||!Rf(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(Car,"getDevTableWhenProdMissing");async function K9(e,t){let r=C.getWorkspaceDB(),n;return e===$t.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(K9,"fetchRaw");async function z9(e,t){if(e.startsWith("ta"))return cKe(e);let r=C.getWorkspaceDB(),{calculation:n,group:i,field:s}=t,a=await xar(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 K9(l);u=await uKe(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===Q9.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===Q9.COUNT||n===Q9.SUM)&&(c=u.rows.map(l=>({group:l.key,field:s,value:l.value}))),c}o(z9,"fetchLegacyView");var Q9={SUM:"sum",COUNT:"count",STATS:"stats"};async function xar(e,t){let r=ie.SELF_HOSTED?HJ:QJ,n=ie.SELF_HOSTED?QJ:HJ,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(xar,"getView");function Dar(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(Dar,"trimFields");var J9={};G(J9,{exportRows:()=>Nar,fetch:()=>Lar,fetchRaw:()=>kar,search:()=>xM});var lKe=U(require("lodash/pick"));function Par(e,t,r,n){let i;if(!CM(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(Par,"getPaginationAndLimitParameters");async function xM(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=Par(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),...Os];m=m.map(E=>(0,lKe.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(xM,"search");async function Nar(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}=_r(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 xM({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=Bk(b??Object.keys(w),E,c,l);break;case"json":S=qk(E);break;case"jsonWithSchema":S=jk(w,E);break;default:throw Be.unreachable(r)}return{fileName:`export.${r}`,content:S}}o(Nar,"exportRows");async function Lar(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(Lar,"fetch");async function kar(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(kar,"fetchRaw");var dKe=U(require("dd-trace"));var X9=o((e,t)=>{t=t.map(r=>r.toLowerCase());for(let r of Object.keys(e||{}))if(Hc(r)){let n=e[r];if(!n)continue;for(let i of n.conditions)X9(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"),fKe=o(async(e,t)=>{let r=o(async(i,s,a,u)=>{let c=[];s7({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 Z9(e){return kt(e)?J9:Y9}o(Z9,"pickApi");async function Mar(e,t){return await dKe.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=kt(i._id);if(e.query){let u=(e.fields||Object.keys(i.schema)).filter(l=>i.schema[l]?.visible!==!1),c=await fKe(i,u);X9(e.query,c)}else e.query={};if(t&&(e.query=await kh(e.query,t)),e=ZQe(i,e),e.viewId){let c=await kh(n.query||{},t);Array.isArray(c)&&(c=Tt.buildQuery(c)),c=IM(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 xM(e,n)):(r?.addTags({searchType:"sqs"}),a=await UA.search(e,n)),r.addTags({foundRows:a.rows.length,totalRows:a.totalRows}),a})}o(Mar,"search");async function Uar(e){return Z9(e.tableId).exportRows(e)}o(Uar,"exportRows");async function Far(e){return Z9(e).fetch(e)}o(Far,"fetch");async function Bar(e,t){return Z9(e).fetchRaw(e,t)}o(Bar,"fetchRaw");async function qar(e,t){return z9(e,t)}o(qar,"fetchLegacyView");var pKe={...W9,...$9,...eX,utils:WJ,external:MA,AliasTables:Gh};var tX={};G(tX,{create:()=>War,ensureHomepageUniqueness:()=>$ar,fetch:()=>jar,update:()=>Gar});async function jar(e=C.getWorkspaceDB()){let t=(await e.allDocs(bqe(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(jar,"fetch");async function War(e){let r=await C.getWorkspaceDB().put({...e,_id:yqe()});return{...e,_id:r.id,_rev:r.rev}}o(War,"create");async function Gar(e){let r=await C.getWorkspaceDB().put(e);return{...e,_rev:r.rev}}o(Gar,"update");async function $ar(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($ar,"ensureHomepageUniqueness");var rX={};G(rX,{create:()=>Kar,duplicate:()=>zar,fetch:()=>mKe,get:()=>gKe,getMatchedWorkspaceApp:()=>Xar,remove:()=>Jar,update:()=>Yar});async function hKe(e,t){if((await mKe()).find(n=>n.name===e&&n._id!==t))throw new K(`App with name '${e}' is already taken.`,400)}o(hKe,"guardName");var Var=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"),Har=o(async e=>{let t=await P.workspaceApps.fetch(),r=de.duplicateName(e.name,t.map(i=>i.name)),n={name:r,url:`/${Qar(r)}`,disabled:!0,navigation:e.navigation,isDefault:!1};return P.workspaceApps.create(n)},"createDuplicatedApp"),Qar=o(e=>e.toLowerCase().replaceAll(" ","-"),"slugify");async function mKe(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(mKe,"fetch");async function gKe(e){return await C.getWorkspaceDB().tryGet(e)}o(gKe,"get");async function Kar(e){let t=C.getWorkspaceDB();return await hKe(e.name),(await t.put({...e,_id:yt.generateWorkspaceAppID()},{returnDoc:!0})).doc}o(Kar,"create");async function zar(e){let t=await Har(e);return await Var(e._id,t._id),t}o(zar,"duplicate");async function Yar(e){let t=C.getWorkspaceDB(),r=await gKe(e._id);if(!r)throw new K(`Project app with id '${e._id}' not found.`,404);e.name!==r.name&&await hKe(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(Yar,"update");async function Jar(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(Jar,"remove");async function Xar(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(Xar,"getMatchedWorkspaceApp");var nX={};G(nX,{updateWithExport:()=>nur});var yKe=[yd.SQLITE,"_design/migrations"];async function Zar(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(Zar,"getNewWorkspaceMetadata");function eur(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(eur,"mergeUpdateAndDeleteDocuments");async function tur(e){let t=[];for(let s of PM)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(yKe,{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(tur,"removeImportableDocuments");async function rur(e){let t=[];for(let s of PM)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(yKe,{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(rur,"getImportableDocuments");async function nur(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 TM.importApp(n,s,u,{updateAttachmentColumns:!0});let c=await Zar(s,a),l=await rur(s),f=await tur(a);if((await a.bulkDocs(eur(l,f,c))).some(p=>p.error))throw new K("Error importing documents",500);await Fe.destroy(dM(n)),await t9(n)}finally{await s.destroy()}}o(nur,"updateWithExport");var iX={};G(iX,{get:()=>iur,tryGet:()=>our});async function iur(e){return await(e?.production?C.getProdWorkspaceDB():C.getWorkspaceDB()).get("app_metadata")}o(iur,"get");async function our(e){return await(e?.production?C.getProdWorkspaceDB():C.getWorkspaceDB()).tryGet("app_metadata")}o(our,"tryGet");var oX={};G(oX,{enrichWithDefaultWorkspaceAppUrl:()=>aur,fetch:()=>sur,filterAppList:()=>bKe});function bKe(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(bKe,"filterAppList");async function sur(e,t){let r=e==="development",n=e==="all",i=await F.getAllWorkspaces({dev:r,all:n}),s={...t,roles:t?.roles||{}},a=await Vt.enrichUserRolesFromGroups(s);i=bKe(a,i);let u=i.filter(l=>l.status==="development").map(l=>l.appId);if(r||n){let l=await Rje(u);for(let f of i){let d=l[f.appId];d?f.lockedBy=d:delete f.lockedBy}}let c=await hJ(i);return await V3e(c)}o(sur,"fetch");async function aur(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(aur,"enrichWithDefaultWorkspaceAppUrl");var _Ke={...IJ,...kz,...oX,...nX,metadata:iX};var uur={backups:TM,tables:qh,automations:_u,workspaces:_Ke,rows:pKe,users:sVe,datasources:yu,queries:WQe,plugins:fJ,screens:tX,views:pA,permissions:d7,links:PQe,rowActions:q9,common:D9,oauth2:k9,ai:w9,workspaceApps:rX,navigation:L9,resources:B9,deployment:DQe,dev:Bz,workspace:P9},P=uur;var Eu=require("undici");var FA={path:{type:"string",display:"URL"},queryString:{type:"string"},headers:{type:"object"},enabledHeaders:{type:"object"},requestBody:{type:"json"},bodyType:{type:"string",enum:Object.values(zh)},pagination:{type:"object"}},cur={docs:"https://github.com/node-fetch/node-fetch",description:"With the REST API datasource, you can connect, query and pull data from multiple REST APIs. You can then use the retrieved data to build apps.",friendlyName:"REST API",type:"API",datasource:{url:{type:"string",default:"",required:!1,deprecated:!0},defaultHeaders:{type:"object",required:!1,default:{}},rejectUnauthorized:{display:"Reject Unauthorized",type:"boolean",default:!0,required:!1},downloadImages:{display:"Download images",type:"boolean",default:!0,required:!1}},query:{create:{readable:!0,displayName:"POST",type:"fields",fields:FA},read:{displayName:"GET",readable:!0,type:"fields",fields:FA},update:{displayName:"PUT",readable:!0,type:"fields",fields:FA},patch:{displayName:"PATCH",readable:!0,type:"fields",fields:FA},delete:{displayName:"DELETE",type:"fields",fields:FA}}},uX=o(e=>Object.prototype.toString.call(e)==="[object Object]","isPlainRecord"),lur=o(e=>{if(e==null)return{bodyString:"",bodyObject:{},jsonValue:void 0};if(typeof e=="string")try{let t=JSON.parse(e);return uX(t)?{bodyString:e,bodyObject:t,jsonValue:t}:{bodyString:e,bodyObject:{},jsonValue:t}}catch(t){return{bodyString:e,bodyObject:{},parseError:t}}return Buffer.isBuffer(e)?{bodyString:e.toString(),bodyObject:{},jsonValue:e.toString()}:e instanceof Uint8Array?{bodyString:Buffer.from(e).toString(),bodyObject:{},jsonValue:Buffer.from(e).toString()}:uX(e)?{bodyString:JSON.stringify(e),bodyObject:e,jsonValue:e}:Array.isArray(e)?{bodyString:JSON.stringify(e),bodyObject:{},jsonValue:e}:{bodyString:JSON.stringify(e),bodyObject:{},jsonValue:void 0}},"normaliseBody"),cX=class{constructor(t){this.headers={};this.startTimeMs=DM.performance.now();this.config=t}static{o(this,"RestIntegration")}async parseResponse(t,r){let n,i,s={},a,{contentType:u,contentDisposition:c}=dje(t.headers,{downloadImages:this.config.downloadImages}),l=t.headers.get("content-length"),f=t.status>=200&&t.status<300;(c.includes("filename")||c.includes("attachment")||c.includes("form-data"))&&f&&(a=SKe.default.basename((0,EKe.parse)(c).parameters?.filename)||"");let d=!1,p;try{if(a)return jqe(t,a,this.startTimeMs);{p=t.text?await t.text():"",!l&&p&&(l=Buffer.byteLength(p,"utf8").toString());let y=l&&parseInt(l)>0||p.length>0;if(t.status===204)n=[],i="";else if(y&&u.includes("application/json"))d=!0,n=JSON.parse(p),i=p;else if(y&&u.includes("text/xml")||u.includes("application/xml")){d=!0;let b=await qqe(p);n=b.data,i=b.rawXml}else n=p,i=p}}catch(y){if(d)n=p,i=p;else throw new Error(`Failed to parse response body: ${y}`)}let h=de.formatBytes(l||"0"),m=`${Math.round(DM.performance.now()-this.startTimeMs)}ms`;for(let[y,b]of t.headers.entries())s[y]=b;let g;return r?.responseParam&&(g=(0,wKe.default)(n,r.responseParam)),{data:n,info:{code:t.status,size:h,time:m},extra:{raw:i,headers:s},pagination:{cursor:g}}}getUrl(t,r,n,i){if(n?.location==="query"&&i){let{pageParam:u,sizeParam:c}=n,l=new aX.URLSearchParams;u&&i.page!=null&&l.append(u,i.page),c&&i.limit!=null&&l.append(c,String(i.limit));let f=l.toString();f&&(r=`${f}&${r}`)}if(r){let u=sX.default.decode(r),c={};for(let[l,f]of Object.entries(u))f!==""&&f!=null&&(c[l]=f);Object.keys(c).length>0?r="?"+sX.default.encode(c):r=""}let s=`${t}${r}`,a=s;return this.config.url&&!s.startsWith("http")&&(a=this.config.url?`${this.config.url}/${s}`:s),a.startsWith("http")||(a=`http://${a}`),a}addBody(t,r,n,i,s){if(n.headers||(n.headers={}),t==="none")return n;let a,u={},c="",l;if(r!=null){let{bodyString:d,bodyObject:p,parseError:h,jsonValue:m}=lur(r);c=d,u=p,a=h,l=m}let f=o(d=>{i?.location==="body"&&(i?.pageParam&&s?.page!=null&&d(i.pageParam,s.page),i?.sizeParam&&s?.limit!=null&&d(i.sizeParam,s.limit))},"addPaginationToBody");switch(t){case"text":n.body=c;break;case"encoded":{let d=new aX.URLSearchParams;for(let[p,h]of Object.entries(u))d.append(p,String(h));f((p,h)=>{h!=null&&d.append(p,String(h))}),n.body=d;break}case"form":{let d=new Eu.FormData,p=o((y,b)=>{if(b==null){d.append(y,"");return}if(typeof b=="string"){d.append(y,b);return}if(b instanceof Blob){d.append(y,b);return}if(Buffer.isBuffer(b)){d.append(y,Buffer.from(b).toString());return}if(b instanceof Uint8Array){d.append(y,Buffer.from(b).toString());return}d.append(y,String(b))},"appendFormValue");for(let[y,b]of Object.entries(u))p(y,b);f((y,b)=>{b!=null&&p(y,b)});let m=o(()=>n.headers?Array.isArray(n.headers)?n.headers.reduce((b,[w,E])=>(b[w]=E,b),{}):n.headers instanceof Eu.Headers?Object.fromEntries(n.headers):n.headers:{},"ensureHeaderObject")(),g=Object.keys(m).find(y=>y.toLowerCase()==="content-type");g&&delete m[g],n.headers=m,n.body=d;break}case"xml":u!=null&&Object.keys(u).length&&(c=new TKe.Builder().buildObject(u)),n.body=c,n.headers["Content-Type"]="application/xml";break;case"json":{if(a)throw"Invalid JSON for request body";let d;if(typeof l<"u")d=l;else if(c)try{d=JSON.parse(c)}catch{d=u}else d=u;if(i?.location==="body"&&uX(d)){let p={...d};i.pageParam&&s?.page!=null&&(p[i.pageParam]=s.page),i.sizeParam&&s?.limit!=null&&(p[i.sizeParam]=s.limit),d=p}else if(i?.location==="body"){let p={...u};i.pageParam&&s?.page!=null&&(p[i.pageParam]=s.page),i.sizeParam&&s?.limit!=null&&(p[i.sizeParam]=s.limit),Object.keys(p).length>0&&(d=p)}n.body=typeof d=="string"?d:JSON.stringify(d),n.headers["Content-Type"]="application/json";break}}return n}async getAuthHeaders(t,r){if(!t)return{};if(r==="oauth2")return{Authorization:await P.oauth2.getToken(t)};if(!this.config.authConfigs)return{};let n={},i=this.config.authConfigs.filter(s=>s._id===t)[0];if(i){let{type:s,config:a}=i;switch(s){case"basic":n.Authorization=`Basic ${Buffer.from(`${a.username}:${a.password}`).toString("base64")}`;break;case"bearer":n.Authorization=`Bearer ${a.token}`;break;default:throw Be.unreachable(s)}}return n}async _req(t,r=!0){let{path:n="",queryString:i="",headers:s={},method:a="GET",disabledHeaders:u,bodyType:c="none",requestBody:l,authConfigId:f,authConfigType:d,pagination:p,paginationValues:h}=t,m=await this.getAuthHeaders(f,d);if(this.headers={...this.config.defaultHeaders||{},...s,...m},u)for(let T of Object.keys(this.headers))u[T]&&delete this.headers[T];let g={method:a,headers:this.headers};g=this.addBody(c,l,g,p,h),this.config.legacyHttpParser&&(g.extraHttpOptions={insecureHTTPParser:!0}),this.startTimeMs=DM.performance.now();let y=this.getUrl(n,i,p,h);if(await XP.isBlacklisted(y))throw new Error("Cannot connect to URL.");let b=this.config.rejectUnauthorized===void 0?ie.REST_REJECT_UNAUTHORIZED:this.config.rejectUnauthorized;(0,Eu.getGlobalDispatcher)()instanceof Eu.MockAgent||(g.dispatcher=zqe({rejectUnauthorized:b,url:y}));let S;try{S=await(0,Eu.fetch)(y,g)}catch(T){let R=T;throw console.log("[rest integration] Fetch error details",{url:y,error:R.message,cause:R.cause?.message,code:R.cause?.code,hasDispatcher:!!g.dispatcher,isHttpsUrl:y.startsWith("https://"),rejectUnauthorized:b}),R.cause?.code==="UNABLE_TO_VERIFY_LEAF_SIGNATURE"||R.cause?.code==="CERT_UNTRUSTED"||R.cause?.code==="SELF_SIGNED_CERT_IN_CHAIN"?new Error(`SSL certificate verification failed for ${y}. Consider setting rejectUnauthorized to false if using self-signed certificates. Original error: ${R.message}`):R.cause?.code==="ECONNREFUSED"&&g.dispatcher?new Error(`Connection refused when using proxy. Check proxy configuration and ensure the proxy server is accessible. Original error: ${R.message}`):R}return S.status===401&&d==="oauth2"&&r?(await P.oauth2.cleanStoredToken(f),await this._req(t,!1)):await this.parseResponse(S,p)}async create(t){return this._req({...t,method:"POST"})}async read(t){return this._req({...t,method:"GET"})}async update(t){return this._req({...t,method:"PUT"})}async patch(t){return this._req({...t,method:"PATCH"})}async delete(t){return this._req({...t,method:"DELETE"})}},lX={schema:cur,integration:cX};var vKe=require("@google-cloud/firestore");var fur={docs:"https://firebase.google.com/docs/firestore/quickstart",friendlyName:"Firestore",type:"Non-relational",description:"Cloud Firestore is a flexible, scalable database for mobile, web, and server development from Firebase and Google Cloud.",features:{connection:!0},datasource:{email:{type:"string",required:!0},privateKey:{type:"string",display:"Private Key",required:!0},projectId:{type:"string",display:"Project ID",required:!0},databaseId:{type:"string",display:"Database ID",required:!1,default:"(default)",placeholder:"(default)"}},query:{create:{type:"json"},read:{type:"json"},update:{type:"json"},delete:{type:"json"}},extra:{collection:{displayName:"Collection",type:"string",required:!0},filterField:{displayName:"Filter field",type:"string",required:!1},filter:{displayName:"Filter comparison",type:"list",required:!1,data:{read:["==","<","<=","!=",">=",">","array-contains","in","not-in","array-contains-any"]}},filterValue:{displayName:"Filter value",type:"string",required:!1}}},fX=class{static{o(this,"FirebaseIntegration")}constructor(t){this.config=t,this.client=new vKe.Firestore({projectId:t.projectId,databaseId:t.databaseId||"(default)",credentials:{client_email:t.email,private_key:t.privateKey?.replace(/\\n/g,`
|
|
1004
|
+
Generate the content based on these instructions. Format appropriately for a ${e.contentType}.`),s=(await t.prompt(n))?.message?.trim();return s?{response:s,success:!0}:{success:!1,response:"Generate Text AI Step Failed: AI did not return any content."}}catch(t){return{success:!1,response:Ye(t)}}}o(M3e,"run");function Zir(e){switch(e){case"email":return"You are writing an email. Include an appropriate, greeting, body, and signature.";case"document":return"You are writing a formal document. Include appropriate headings, sections, and formatting.";case"blog_post":return"You are writing a blog post. Include an engaging title, introduction, body with subheadings, and conclusion.";case"chat_message":return"You are writing a chat message. Keep it conversational, concise, and appropriate for instant messaging.";case"letter":return"You are writing a letter. Include a date, recipient address, greeting, body, complimentary close, and signature.";case"proposal":return"You are writing a proposal. Include an executive summary, problem statement, proposed solution, benefits, and conclusion.";case"other":return"You are generating text content.";default:return Be.unreachable(e)}}o(Zir,"getContentTypePrompt");var U3e=U(require("node-fetch"));async function tor(e,t,r){let n=await(0,U3e.default)(e);if(!n.ok)throw new Error(`Failed to fetch file from URL: ${n.statusText}`);let i=n.body,s=n.headers.get("content-type")||t,a=`document.${t}`;return await r.uploadFile(i,a,s)}o(tor,"processUrlFile");async function ror(e,t){let r=Se.ObjectStoreBuckets.APPS,{stream:n}=await Se.getReadStream(r,e.key),i=e.name||"document";return await t.uploadFile(n,i,e.extension)}o(ror,"processAttachmentFile");async function nor(e){try{return JSON.parse(e.message).data}catch(t){throw console.error("Error parsing JSON response:",t),new Error("Could not parse AI response as valid JSON.")}}o(nor,"parseAIResponse");async function F3e({inputs:e}){if(!e.file||!e.schema)return{success:!1,data:{},response:"Extract Document Data AI Step Failed: File and Schema are required."};try{let t=await Mt.getLLMOrThrow(),r;if(e.source==="URL"&&typeof e.file=="string")r=await tor(e.file,e.fileType,t);else if(e.source==="Attachment"&&typeof e.file!="string")r=await ror(e.file,t);else throw new Error("Invalid file input \u2013 source and file type do not match");let n=Mt.extractFileData(e.schema,r),i=await t.prompt(n);return{data:await nor(i),success:!0}}catch(t){return console.error("Document extraction error:",t),{success:!1,data:{},response:Ye(t)}}}o(F3e,"run");var uo=require("ai"),B3e=require("uuid");var Vf=U(require("dd-trace"));async function q3e({inputs:e,appId:t}){let{agentId:r,prompt:n,useStructuredOutput:i,outputSchema:s}=e;if(!r)return{success:!1,response:"Agent step failed: No agent selected"};if(!n)return{success:!1,response:"Agent step failed: No prompt provided"};let a=(0,B3e.v4)();return Vf.default.llmobs.trace({kind:"agent",name:"automation.agent",sessionId:a},async u=>{try{let c=await P.ai.agents.getOrThrow(r);if(Vf.default.llmobs.annotate(u,{inputData:n,metadata:{agentId:r,agentName:c.name,appId:t,isForkedProcess:ie.isInThread(),forkedProcessName:process.env.FORKED_PROCESS_NAME||"main"}}),t&&Rf(t)&&c.live!==!0)return Vf.default.llmobs.annotate(u,{outputData:"Agent is paused",tags:{error:"agent_paused"}}),{success:!1,response:"Agent is paused. Set it live to use it in published automations."};let{systemPrompt:l,tools:f}=await P.ai.agents.buildPromptAndTools(c),{modelId:d,apiKey:p,baseUrl:h,modelName:m}=await P.ai.configs.getLiteLLMModelConfigOrThrow(c.aiconfig);Vf.default.llmobs.annotate(u,{metadata:{modelId:d,modelName:m,baseUrl:h,envLiteLLMUrl:ie.LITELLM_URL,toolCount:Object.keys(f).length}});let g=Mt.createLiteLLMOpenAI({apiKey:p,baseUrl:h,fetch:P.ai.agents.createLiteLLMFetch(a)}),y;if(i&&s&&Object.keys(s).length>0){let D=de.structuredOutput.normalizeSchemaForStructuredOutput(s);y=uo.Output.object({schema:(0,uo.jsonSchema)(D)})}let w=await new uo.ToolLoopAgent({model:(0,uo.wrapLanguageModel)({model:g.chat(d),middleware:(0,uo.extractReasoningMiddleware)({tagName:"think"})}),instructions:l||void 0,tools:f,stopWhen:(0,uo.stepCountIs)(30),providerOptions:Mt.getLiteLLMProviderOptions(),output:y}).stream({prompt:n}),E,S;for await(let D of(0,uo.readUIMessageStream)({stream:w.toUIMessageStream({sendReasoning:!0,onError:x=>{let W=i4(x);return S=W,W}})}))E=D;let T,R;try{T=await w.text}catch(D){R=i4(D)}let A=S||R;if(A&&!T)return Vf.default.llmobs.annotate(u,{outputData:A,tags:{error:"1","error.type":"StreamingError"}}),{success:!1,response:A};let O=await w.usage,I=y?await w.output:void 0;return Vf.default.llmobs.annotate(u,{outputData:T,metadata:{stepCount:E?.parts?.length??0}}),{success:!0,response:T,usage:O,message:E,output:I}}catch(c){let l=Ye(c);return Vf.default.llmobs.annotate(u,{outputData:l,tags:{error:"1","error.type":c?.name||"UnknownError"}}),console.error("Agent step failed",{agentId:r,appId:t,liteLLMUrl:ie.LITELLM_URL,errorName:c?.name,errorMessage:l}),{success:!1,response:l}}})}o(q3e,"run");async function j3e({inputs:e,context:t}){let{value:r}=e;if(r==null)return{success:!1,response:{message:"Invalid inputs"}};r=r.trim();try{return{success:!0,value:sr(e.value,t,{noThrow:!1})}}catch(n){return{success:!1,response:Ye(n)}}}o(j3e,"run");var i9={SEND_EMAIL_SMTP:o4e,CREATE_ROW:p4e,GET_ROW:A3e,UPDATE_ROW:h4e,DELETE_ROW:m4e,QUERY_ROWS:v3e,OUTGOING_WEBHOOK:Y4e,EXECUTE_SCRIPT:E4e,EXECUTE_SCRIPT_V2:S4e,EXECUTE_QUERY:Q4e,API_REQUEST:K4e,SERVER_LOG:J4e,DELAY:c3e,FILTER:u3e,COLLECT:R3e,TRIGGER_AUTOMATION_RUN:O3e,OPENAI:C3e,CLASSIFY_CONTENT:P3e,PROMPT_LLM:N3e,TRANSLATE:L3e,SUMMARISE:k3e,GENERATE_TEXT:M3e,EXTRACT_FILE_DATA:F3e,AGENT:q3e,EXTRACT_STATE:j3e,discord:Z4e,slack:t3e,zapier:n3e,integromat:a3e,n8n:o3e},n9={SEND_EMAIL_SMTP:Ve.steps.sendSmtpEmail.definition,CREATE_ROW:Ve.steps.createRow.definition,GET_ROW:Ve.steps.getRow.definition,UPDATE_ROW:Ve.steps.updateRow.definition,DELETE_ROW:Ve.steps.deleteRow.definition,QUERY_ROWS:Ve.steps.queryRows.definition,OUTGOING_WEBHOOK:Ve.steps.outgoingWebhook.definition,EXECUTE_SCRIPT:Ve.steps.executeScript.definition,EXECUTE_SCRIPT_V2:Ve.steps.executeScriptV2.definition,EXECUTE_QUERY:Ve.steps.executeQuery.definition,API_REQUEST:Ve.steps.apiRequest.definition,SERVER_LOG:Ve.steps.serverLog.definition,DELAY:Ve.steps.delay.definition,FILTER:Ve.steps.filter.definition,LOOP:Ve.steps.loop.definition,COLLECT:Ve.steps.collect.definition,TRIGGER_AUTOMATION_RUN:Ve.steps.triggerAutomationRun.definition,BRANCH:Ve.steps.branch.definition,CLASSIFY_CONTENT:Ve.steps.classifyText.definition,PROMPT_LLM:Ve.steps.promptLLM.definition,TRANSLATE:Ve.steps.translate.definition,SUMMARISE:Ve.steps.summarise.definition,GENERATE_TEXT:Ve.steps.generate.definition,EXTRACT_FILE_DATA:Ve.steps.extract.definition,EXTRACT_STATE:Ve.steps.extractState.definition,LOOP_V2:Ve.steps.loopV2.definition,discord:Ve.steps.discord.definition,slack:Ve.steps.slack.definition,zapier:Ve.steps.zapier.definition,integromat:Ve.steps.make.definition,n8n:Ve.steps.n8n.definition};ie.SELF_HOSTED&&(i9.EXECUTE_BASH=D3e,n9.EXECUTE_BASH=Ve.steps.bash.definition,ie.isTest()&&(n9.OPENAI=Ve.steps.openai.definition,n9.AGENT=Ve.steps.agent.definition));async function W3e(e){if(i9[e]!=null)return i9[e];if(ie.SELF_HOSTED){let r=(await P.plugins.fetch("automation")).find(n=>n.schema.schema.stepId===e);if(!r)throw new Error(`Unable to find action implementation for "${e}"`);return(await Tje(r)).action}}o(W3e,"getAction");var G3e=U(require("object-sizeof"));var uor=1024*1024;function cor(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(cor,"sanitiseResults");async function $3e(e,t){if(ie.DISABLE_AUTOMATION_LOGS)return;let r=ie.AUTOMATION_MAX_LOG_SIZE_MB;(0,G3e.default)(t)/uor>r&&cor(t,r);try{await ub.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($3e,"storeLog");async function V3e(e){let t=await ub.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(V3e,"checkAppMetadata");var H3e=5,o9=class{static{o(this,"AutomationEmitter")}constructor(t){this.chainCount=t,this.metadata={automationChainCount:t}}async getMaxAutomationChain(){let n=(await C.getWorkspaceDB().get("app_metadata"))?.automations?.chainAutomations;return n===!0?H3e:ie.isTest()?0:n===void 0&&ie.SELF_HOSTED?H3e:0}async emitRow({eventName:t,appId:r,row:n,table:i,oldRow:s,user:a}){let u=await this.getMaxAutomationChain();this.chainCount>=u||Ck({emitter:Uh,eventName:t,appId:r,row:n,table:i,oldRow:s,metadata:this.metadata,user:a})}async emitTable(t,r,n){let i=await this.getMaxAutomationChain();this.chainCount>=i||xk({emitter:Uh,eventName:t,appId:r,table:n,metadata:this.metadata})}},Q3e=o9;process.env.DD_APM_ENABLED&&(z3e(),qA(lor));Gc.threadSetup();var dor=Ve.triggers.definitions.CRON.stepId,por={success:!0,status:"stopped"};function s9(e,t,r){if(e.isLegacyLoop){t.items=DJ(t.items);let n=e?.inputs?.children?.[0],i=n?.id||e.id,s=n?.stepId||e.stepId,a=r||n?.inputs||e.inputs;return{id:i,stepId:s,inputs:a,outputs:{success:!0,...t}}}return{id:e.id,stepId:e.stepId,inputs:r||e.inputs,outputs:{success:!0,...t}}}o(s9,"stepSuccess");function kb(e,t,r){if(e.isLegacyLoop){t.items=DJ(t.items);let n=e?.inputs?.children?.[0],i=n?.id||e.id,s=n?.stepId||e.stepId,a=r||n?.inputs||e.inputs;return{id:i,stepId:s,inputs:a,outputs:{success:!1,...t}}}return{id:e.id,stepId:e.stepId,inputs:r||e.inputs,outputs:{success:!1,...t}}}o(kb,"stepFailure");function hor(e){return{id:e.id,stepId:e.stepId,inputs:e.inputs,outputs:por}}o(hor,"stepStopped");async function mor(e,t){if(!o(a=>!a||typeof a!="object"?!1:Object.entries(a).some(([u,c])=>{if(u==="onEmptyFilter"||c===void 0||c===null)return!1;if(u==="$and"||u==="$or"){let l=c;return Array.isArray(l?.conditions)&&l.conditions.length>0}return typeof c=="object"?Object.keys(c).length>0:!0}),"requiresEvaluation")(t.condition))return!0;let n={},i=o(a=>{let u=(0,xA.cloneDeep)(a);for(let c of Object.values(u))if(c)if(NX(c))c.conditions=c.conditions.map(i);else for(let[l,f]of Object.entries(c))n[l]=sr(l,e),typeof f=="string"&&Pi(f).length>0&&(c[l]=sr(f,e));return u},"evaluateBindings");return Tt.runQuery([n],i(t.condition)).length>0}o(mor,"branchMatches");async function gor(e){e.env=await Wc();try{let{config:t}=await Qn.getSettingsConfigDoc();e.settings={url:t.platformUrl,logo:t.logoUrl,company:t.company}}catch{e.settings={}}}o(gor,"enrichBaseContext");function yor(e,t){e.trigger.outputs={...e.trigger.outputs,...t},e.steps[0]=e.trigger}o(yor,"setTriggerOutput");async function bor(e){let t=e.data.automation?.definition?.trigger;if(!t||!NM(t)&&!zc(t))return;let r=e.data.event.appId,n=e.data.automation._id;if(!r)throw new Error("Unable to execute, event doesn't contain app ID.");if(!n)throw new Error("Unable to execute, event doesn't contain automation ID.");e.data.automation=await P.automations.get(n)}o(bor,"reloadAutomation");var yM=class{static{o(this,"Orchestrator")}constructor(t,r={}){this.job=t,this.stopped=!1,this.onProgress=r.onProgress,this.job.data.automation=VVe(t.data.automation);let n=t.data.event.metadata?.automationChainCount||0;this.emitter=new Q3e(n+1)}get automation(){return this.job.data.automation}get appId(){return this.job.data.event.appId}isCron(){return this.automation.definition.trigger.stepId===dor}async stopCron(t,r){if(!this.isCron())return;let n=`CRON disabled reason=${t} - ${this.appId}/${this.automation._id}`;ke.logWarn(n),await S3e(this.job.id);let{result:i}=r||{};i&&(yor(i,{success:!1,status:"stopped_error"}),i.status="stopped_error",await this.logResult(i))}async logResult(t){await $3e(this.automation,t)}async getMetadata(){let t=Eqe(this.automation._id);return await C.getWorkspaceDB().tryGet(t)||{_id:t,errorCount:0}}async incrementErrorCount(){let t=C.getWorkspaceDB(),r;for(let n=0;n<10;n++){let i=await this.getMetadata();i.errorCount||=0,i.errorCount++;try{return await t.put(i),i.errorCount}catch(s){r=s,await de.wait(1e3+Math.random()*1e3)}}ke.logAlertWithInfo("Failed to update error count in automation metadata",t.name,this.automation._id,r)}isProd(){return Rf(this.appId)}hasErrored(t){return t._error===!0}reportStepProgress(t,r,n,i){if(!this.onProgress)return;let s=i?._loopIteration;this.onProgress({automationId:this.automation._id,appId:this.appId,blockId:t.id,stepId:t.stepId,status:r,occurredAt:Date.now(),result:n,...s?{loop:s}:{}})}async execute(){return await Hf.default.trace("execute",async t=>{t.addTags({appId:this.appId,automationId:this.automation._id});let r=(0,xA.cloneDeep)(this.job.data);delete r.event.appId,delete r.event.metadata,this.isCron()&&!r.event.timestamp&&(r.event.timestamp=Date.now());let n={id:r.automation.definition.trigger.id,stepId:r.automation.definition.trigger.stepId,inputs:null,outputs:r.event},i={trigger:n,steps:[n],status:"success"};this.onProgress?.({automationId:this.automation._id,appId:this.appId,blockId:r.automation.definition.trigger.id,stepId:r.automation.definition.trigger.stepId,status:"running",occurredAt:Date.now()});let s={trigger:n.outputs,steps:{0:n.outputs},stepsByName:{},stepsById:{},user:n.outputs.user,state:{},_error:!1,_stepIndex:1,_stepResults:[]};await gor(s);let a=this.job.data.event.timeout||ie.AUTOMATION_THREAD_TIMEOUT,u=[];try{u=await de.withTimeout(a,()=>this.executeSteps(s,r.automation.definition.steps)),this.stopped?i.status="stopped":this.hasErrored(s)&&(i.status="error")}catch(f){if(f.errno==="ETIME")t.addTags({timeout:!0}),i.status="timed_out",u=s._stepResults;else throw f}i.steps.push(...u);let c=0;this.isProd()&&this.isCron()&&this.hasErrored(s)&&(c=await this.incrementErrorCount()||0),c>=Cqe?(await this.stopCron("errors",{result:i}),t?.addTags({shouldStop:!0})):await this.logResult(i),Object.keys(s?.state||{}).length>0&&(i.state=s.state);let l={success:"success",error:"error",stopped:"stopped"};return this.onProgress?.({automationId:this.automation._id,appId:this.appId,blockId:n.id,stepId:n.stepId,status:l[i.status]||"error",occurredAt:Date.now(),result:n}),i})}async executeSteps(t,r){return await Hf.default.trace("executeSteps",async()=>{let n=0,i=[],s=o(u=>u.outputs.success===!1?"error":u.outputs.status==="stopped"?"stopped":"success","progressStatus");function a(u,c,l=!1){u.stepId==="EXTRACT_STATE"&&!l&&(t.state??={},t.state[c.inputs.key]=c.outputs.value),t.steps[u.id]=c.outputs,t.steps[u.name||u.id]=c.outputs,t.stepsById[u.id]=c.outputs,t.stepsByName[u.name||u.id]=c.outputs,t.previous=c.outputs,t._stepIndex||=0,t.steps[t._stepIndex]=c.outputs,t._stepIndex++,c.outputs.success===!1&&(t._error=!0),t._stepResults.push(c),i.push(c)}for(o(a,"addToContext");n<r.length&&!this.stopped;){let u=r[n];switch(u.stepId){case"BRANCH":{let c=await this.executeBranchStep(t,u);t._stepResults.push(...c),i.push(...c),c[0]&&this.reportStepProgress(u,s(c[0]),c[0],t),n++;break}case"LOOP_V2":{this.reportStepProgress(u,"running",void 0,t);let c=await this.executeLoopStep(t,u);if(u.isLegacyLoop){let l=u.inputs.children?.[0];l&&a(l,c,!0)}else a(u,c,!0);this.reportStepProgress(u,s(c),c,t),n++;break}default:{this.reportStepProgress(u,"running",void 0,t),a(u,await wr.addAction(async()=>{let l=await this.executeStep(t,u);return u.stepId==="EXTRACT_STATE"&&(t.state??={},t.state[l.inputs.key]=l.outputs.value),Oe.action.automationStepExecuted({stepId:u.stepId}),l}));let c=i.at(-1);c&&this.reportStepProgress(u,s(c),c,t),n++;break}}}return i})}async executeLoopStep(t,r){return await Hf.default.trace("executeLoopStep",async n=>{let i=(0,xA.cloneDeep)(r.inputs.children)||[],s=r.inputs;await nL(s,t);let a=jVe(r),u=(t._loopDepth||0)+1;t._loopDepth=u;try{let c=0,l=[];try{l=qVe(r)}catch{return n.addTags({status:"INCORRECT_TYPE",iterations:c}),kb(r,{status:"INCORRECT_TYPE"})}let d=r.isLegacyLoop?Number.MAX_SAFE_INTEGER:WVe(r),p=GVe(i,d),h=Math.min(l.length,a);for(;c<l.length;c++){let g=l[c];if(c===a)return n.addTags({status:"max_iterations_reached",iterations:c}),kb(r,nA(p,"max_iterations_reached",c));if(BVe(r,g))return n.addTags({status:"FAILURE_CONDITION_MET",iterations:c}),kb(r,nA(p,"FAILURE_CONDITION_MET",c));let y=t.loop,b=t._loopIteration;t.loop={currentItem:g},t._loopIteration={current:c+1,total:h};try{let w=t._stepIndex,E=await this.executeSteps(t,i);t._stepIndex=w;for(let T of E)i.some(A=>A.id===T.id)&&$Ve(p,T,c);if(E.some(T=>T.outputs.success===!1))return kb(r,nA(p,void 0,void 0,!0))}finally{t.loop=y,t._loopIteration=b}}let m=c===0?"no_iterations":void 0;return s9(r,nA(p,m,c))}finally{t._loopDepth=u-1}})}async executeBranchStep(t,r){return await Hf.default.trace("executeBranchStep",async n=>{let{branches:i,children:s}=r.inputs;for(let a of i)if(await mor(t,a)){n.addTags({branchName:a.name,branchId:a.id});let u=s9(r,{branchName:a.name,status:`${a.name} branch taken`,branchId:`${a.id}`});this.reportStepProgress(r,"running",u,t);let c=await this.executeSteps(t,s?.[a.id]||[]);return[u,...c]}return n.addTags({status:"No branch condition met"}),[kb(r,{status:"No branch condition met"})]})}async executeStep(t,r){return await Hf.default.trace(r.stepId,async n=>{if(n.addTags({step:{stepId:r.stepId,id:r.id,name:r.name,type:r.type,title:r.stepTitle,internal:r.internal,deprecated:r.deprecated},inputsKeys:Object.keys(r.inputs)}),this.stopped)return n.addTags({stopped:!0}),hor(r);let i=await W3e(r.stepId);if(i==null)throw new Error(`Cannot find automation step by name ${r.stepId}`);let s=(0,xA.cloneDeep)(r.inputs);r.stepId!=="EXECUTE_SCRIPT_V2"&&r.stepId!=="EXTRACT_STATE"&&(s=await nL(s,t)),s=xJ(s,r.schema.inputs.properties);let a;try{a=await Hf.default.trace("fn",()=>i({inputs:s,appId:this.appId,emitter:this.emitter,context:t}))}catch(u){return kb(r,{status:"error",error:Ye(u)})}return r.stepId==="FILTER"&&"result"in a&&a.result===!1&&(this.stopped=!0,a.status="stopped"),n.addTags({outputsKeys:Object.keys(a)}),s9(r,a,s)})}};async function Y3e(e,t={}){let r=e.data.event.appId;if(!r)throw new Error("Unable to execute, event doesn't contain workspace ID.");return await Hf.default.trace("automation.executeInThread",async n=>(n.addTags({workspaceId:r,automationId:e.data.automation?._id}),await C.doInWorkspaceContext(r,async()=>{await bor(e),await C.ensureSnippetContext();let i=await Wc();return await C.doInEnvironmentContext(i,async()=>new yM(e,t).execute())})))}o(Y3e,"executeInThread");var w3e=o(async e=>{let t=e.data.event.appId;if(!t)throw new Error("Unable to execute, event doesn't contain app ID.");await C.doInWorkspaceContext(t,async()=>{await new yM(e).stopCron("stalled")})},"removeStalled");var XNn=Ve.triggers.definitions,J3e={removeOnComplete:!0,removeOnFail:!0};async function _or(){return(await C.getWorkspaceDB().allDocs(Nc(null,{include_docs:!0}))).rows.map(r=>r.doc)}o(_or,"getAllAutomations");async function wor(e,t){let r=e.row.tableId;if(e.appId==null)throw`No appId specified for ${t} - check event emitters.`;!r||!await E7(r)||await C.doInWorkspaceContext(e.appId,async()=>{let n=await _or();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&&Z8(e.appId)&&!await jz(i._id))continue;if(await X3e(i,{row:e.row,oldRow:e.oldRow}))try{await Lb.add({automation:i,event:e},J3e)}catch(a){ke.logAlert("Failed to queue automation",a)}}})}o(wor,"queueRelevantRowAutomations");async function a9(e,t){try{await wor(e,t)}catch(r){ke.logWarn("Unable to process row event",r)}}o(a9,"queueRowAutomations");Uh.on("row:save",async function(e){!e||!e.row||!e.row.tableId||await a9(e,"row:save")});Uh.on("row:update",async function(e){!e||!e.row||!e.row.tableId||await a9(e,"row:update")});Uh.on("row:delete",async function(e){!e||!e.row||!e.row.tableId||await a9(e,"row:delete")});function Eor(e,t){return Tt.runQuery([e],t).length>0}o(Eor,"rowPassesFilters");function mM(e){return e!==null&&"steps"in e&&Array.isArray(e.steps)}o(mM,"isAutomationResults");async function $c(e,t,{getResponses:r,onProgress:n}={}){if(e.disabled)throw new Error("Automation is disabled");if(ln.automations.isAppAction(e)&&!await jz(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]=Nh(t.fields[l],c[l]);t.fields=a}else(ln.automations.isRowAction(e)||ln.automations.isWebhookAction(e))&&(t={...t,...t.fields,fields:{}});let i={automation:e,event:t};return await X3e(e,{row:i.event?.row??{},oldRow:i.event?.oldRow??{}})?r?(i.event={...i.event,appId:C.getWorkspaceId(),automation:e},Y3e({data:i},{onProgress:n})):Lb.add(i,J3e):{outputs:{success:!1,status:"stopped"},message:"Automation did not run. Filter conditions in trigger were not met."}}o($c,"externalTrigger");async function X3e(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 yb(s,t.row);return Eor(a,i)}return!0}o(X3e,"checkTriggerFilters");var Sor=[{name:"list_automations",sourceType:"BUDIBASE",sourceLabel:"Budibase",description:"List all automations in the current app",tool:(0,bM.tool)({description:"List all automations in the current app",inputSchema:Qf.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,bM.tool)({description:"Get details about a specific automation by ID",inputSchema:Qf.z.object({automationId:Qf.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,bM.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:Qf.z.object({automationId:Qf.z.string().describe("The exact _id of the automation to trigger (obtained from list_automations)"),fields:Qf.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:Qf.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 $c(a,{fields:i||{},timeout:n?n*1e3:ie.AUTOMATION_THREAD_TIMEOUT},{getResponses:!0});return mM(c)?{success:c.status==="success",status:c.status,steps:c.steps}:{success:!1,error:c.message||"Automation did not trigger"}}})}],Z3e=Sor;var u9=require("ai"),PA=require("zod");var Tor=[{name:"list_tables",sourceType:"BUDIBASE",sourceLabel:"Budibase",description:"List all tables in the current app",tool:(0,u9.tool)({description:"List all tables in the current app",inputSchema:PA.z.object({showSchema:PA.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,u9.tool)({description:"Get details about a specific table by ID",inputSchema:PA.z.object({tableId:PA.z.string().describe("The ID of the table to retrieve")}),execute:async e=>{let{tableId:t}=e;return{table:await P.tables.getTable(t)}}})}],eQe=Tor;var Mb=require("ai"),Ft=require("zod");var vor={list_rows:{sourceType:"BUDIBASE",sourceLabel:"Budibase",description:"List rows in a given table",tool:(0,Mb.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,Mb.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,Mb.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,Mb.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,Mb.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}}})}},tQe=vor;var Aor=[...Z3e,...eQe,...Object.entries(tQe).map(([e,t])=>({name:e,...t}))],c9=Aor;var rQe=require("ai"),l9=require("zod");var Ror=o(e=>e.length>64?e.substring(0,64)+"...":e.replace(/[^a-zA-Z0-9_-]/g,"_"),"sanitiseToolName"),Oor=o(e=>{let t={};for(let r of e.parameters||[])t[r.name]=l9.z.string().optional().describe(`Parameter: ${r.name}`);return l9.z.object(t)},"buildParametersSchema"),nQe=o((e,t)=>{let r=Ror(e.name),n=Oor(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,rQe.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 Nb(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 iQe=o(e=>Object.fromEntries(e.map(t=>[t.name,t.tool])),"toToolSet");var oQe=require("ai"),_M=require("zod");var Ior=_M.z.object({query:_M.z.string().describe("The search query to find relevant information"),num_results:_M.z.number().optional().default(10).describe("Number of results to return")}),f9=o(e=>({name:"exa_search",sourceType:"SEARCH",sourceLabel:"Exa",description:"Search the web using Exa",tool:(0,oQe.tool)({description:"Search the web using Exa",inputSchema:Ior,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 Ub=require("zod"),sQe=require("ai");var Cor=Ub.z.object({objective:Ub.z.string().describe("Natural language description of what to search for"),search_queries:Ub.z.array(Ub.z.string()).describe("Array of search query strings"),max_results:Ub.z.number().optional().default(10).describe("Maximum number of results to return")}),d9=o(e=>({name:"parallel_search",description:"Search the web using Parallel AI",sourceType:"SEARCH",sourceLabel:"Parallel Search",tool:(0,sQe.tool)({description:"Search the web using Parallel AI",inputSchema:Cor,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 aQe=U(require("dd-trace"));function uQe(e){return{name:e.name,description:e.description,sourceType:e.sourceType,sourceLabel:e.sourceLabel}}o(uQe,"toToolMetadata");async function p9(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=>nQe(c,s.get(c.datasourceId))),u=[...c9,...a];return i?.apiKey&&(i.provider==="exa"?u.push(f9(i.apiKey)):i.provider==="parallel"&&u.push(d9(i.apiKey))),u}o(p9,"getAvailableTools");async function xor(e){return(await p9(e)).map(uQe)}o(xor,"getAvailableToolsMetadata");async function Dor(e,t={}){let{baseSystemPrompt:r,includeGoal:n=!0}=t,i=await p9(e.aiconfig),s=new Set(e.enabledTools||[]),a=Mt.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:iQe(u)}}o(Dor,"buildPromptAndTools");function Por(e){let t=o(async(r,n)=>{let i=aQe.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(Por,"createLiteLLMFetch");var g9={};G(g9,{create:()=>kor,getOrThrow:()=>Lor,getSingle:()=>lQe,update:()=>Mor});var m9=o(e=>({...e,live:e.live??!1,agents:e.agents??[]}),"withDefaults"),Nor=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"),cQe=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:Nor(r.conversationStarters)}))},"normalizeAgents");async function lQe(){let r=(await C.getWorkspaceDB().allDocs(yt.getDocParams("chatapp",void 0,{include_docs:!0,limit:1}))).rows[0]?.doc;return r?m9(r):void 0}o(lQe,"getSingle");async function Lor(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 m9(r)}o(Lor,"getOrThrow");async function kor(e){let t=C.getWorkspaceDB();if(await lQe())throw new K("Chat App already exists for this workspace",400);let n=cQe(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(kor,"create");async function Mor(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=cQe(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,m9(s)}o(Mor,"update");var y9={};G(y9,{buildLiteLLMParams:()=>Tk,generateRows:()=>For,generateTables:()=>Uor});async function Uor(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(Uor,"generateTables");async function For(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 Bor(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(For,"generateRows");async function Bor(e,t){function r(n){return typeof n=="object"?Kqe(n):Qqe(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(Bor,"processAttachments");var b9={};G(b9,{deleteAgentFileChunks:()=>tA,ingestAgentFile:()=>Aer,retrieveContextForSources:()=>Rer});var _9={};G(_9,{create:()=>ler,createVectorDb:()=>eA,fetch:()=>cer,find:()=>Rk,remove:()=>der,update:()=>fer});var S9={};G(S9,{create:()=>$or,fetch:()=>jor,find:()=>Gor,get:()=>Wor,remove:()=>Hor,update:()=>Vor});var fQe=U(require("lodash/cloneDeep"));var dQe="********";function Wh(){return C.getWorkspaceDB()}o(Wh,"getDb");function pQe(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(pQe,"cleanAutomationInputs");async function qor(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(qor,"handleStepEvents");async function jor(){return(await Wh().allDocs(Nc(null,{include_docs:!0}))).rows.filter(n=>!!n.doc).map(n=>n.doc).map(NA).map(LA)}o(jor,"fetch");async function Wor(e){let r=await Wh().get(e);return LA(NA(r))}o(Wor,"get");async function Gor(e,t){return(await Wh().getMultiple(e,t)).map(NA).map(LA)}o(Gor,"find");async function $or(e){e=NA(e);let t=Wh();e._id||(e._id=hqe()),e.type="automation",e=hQe(e),e=pQe(e),e=await E9({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,LA(e)}o($or,"create");async function Vor(e){if(e=NA(e),!e._id||!e._rev)throw new K("_id or _rev fields missing",400);let t=Wh(),r=await t.get(e._id);Qor(e,r),e=hQe(e,r),e=pQe(e),e=await E9({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 pL("automationTestInput",e._id),await r9(e._id)),await qor(r,e),LA({...e,_rev:n.rev,_id:n.id})}o(Vor,"update");async function Hor(e,t){let r=Wh(),n=await r.get(e);await E9({oldAuto:n}),await pL("automationTestInput",e),await pL("automationTestHistory",e),await r9(e);let i=await r.remove(e,t);return await Oe.automation.deleted(n),i}o(Hor,"remove");async function E9({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 Wh().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(E9,"checkForWebhooks");function Qor(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(Qor,"guardInvalidUpdatesAndThrow");function NA(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(NA,"trimUnexpectedObjectFields");function hQe(e,t){let r=e.definition?.trigger;if(!r||!zc(r)||!r.inputs||!Kor(r.inputs.password))return e;if(!t||!zc(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,fQe.default)(e),s=i.definition?.trigger;if(!zc(s)||!s.inputs)throw new K("IMAP password is required",400);return s.inputs.password=n,i}o(hQe,"hydrateAutomationSecrets");function LA(e){let t=e.definition?.trigger;return zc(t)&&t.inputs?.password&&(t.inputs.password=dQe),e}o(LA,"maskAutomationSecrets");function Kor(e){return e===Fi||e===dQe}o(Kor,"isMaskedPassword");var T9={};G(T9,{destroy:()=>Jor,newDoc:()=>zor,save:()=>Yor});function mQe(e){return e.startsWith(F.DocumentType.WEBHOOK)}o(mQe,"isWebhookID");function zor(e,t,r){return{live:!0,name:e,action:{type:t,target:r}}}o(zor,"newDoc");async function Yor(e){let t=C.getWorkspaceDB();e._id&&mQe(e._id)?await t.get(e._id):e._id=_qe();let r=await t.put(e);return e._rev=r.rev,e}o(Yor,"save");async function Jor(e,t){let r=C.getWorkspaceDB();if(!e||!mQe(e))throw new Error("Provided webhook ID is not valid.");return await r.remove(e,t)}o(Jor,"destroy");var v9={};G(v9,{checkForCollectStep:()=>wF});var A9={};G(A9,{trigger:()=>Xor});async function Xor(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 no.isSyncAutomationsEnabled()){let u=await $c(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 $c(i,{fields:t,appId:u}),{message:`Automation ${i._id} has been triggered.`,automation:i}}}o(Xor,"trigger");var _u={...S9,webhook:T9,utils:v9,execution:A9};var O9={};G(O9,{exportApp:()=>wQe,exportDB:()=>_Qe,streamExportApp:()=>rsr});var gQe=require("dd-trace"),R9=U(require("fs")),Vc=U(require("fs/promises")),Kf=require("path"),yQe=U(require("tar")),bQe=require("uuid");var Fb="db.txt",wM="global.txt",EM="attachments";var Zor=require("memorystream");async function esr(e,t){let r=`${(0,bQe.v4)()}.tar.gz`,n=(0,Kf.join)(cu(),r);return await yQe.create({gzip:!0,file:n,noDirRecurse:!1,cwd:e},t),n}o(esr,"tarFilesToTmp");async function _Qe(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=R9.default.createWriteStream(i);return await n.dump(s,r),i}else{let i=new Zor,s="";return i.on("data",a=>{s+=a.toString()}),await n.dump(i,r),s}})}o(_Qe,"exportDB");function tsr(e){let t=[oL,uqe,lqe];return e&&t.push(cqe),r=>!t.map(n=>r._id.includes(n)).reduce((n,i)=>n||i)}o(tsr,"defineFilter");async function wQe(e,t){return await gQe.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,Kf.join)(a,i);if(R9.default.existsSync(u)){let l=await Vc.default.readdir(u);for(let f of l){let d=(0,Kf.join)(u,f);await Vc.default.rename(d,(0,Kf.join)(u,"..",f))}await Vc.default.rmdir(u)}let c=(0,Kf.join)(a,Fb);if(await _Qe(e,{filter:tsr(t?.excludeRows),exportPath:c}),t?.encryptPassword){let l=o(async(f,d="")=>{for(let p of await Vc.default.readdir(f)){let h=(0,Kf.join)(f,p),m=d?(0,Kf.join)(d,p):p;if(p!==EM){let g=await Vc.default.lstat(h);g.isFile()?(await aa.encryptFile({dir:f,filename:p},t.encryptPassword),await Vc.default.rm(h)):g.isDirectory()&&await l(h,m)}}},"processDirectory");await l(a)}if(t?.tar){let l=await esr(a,await Vc.default.readdir(a));return await Vc.default.rm(a,{recursive:!0,force:!0}),l}else return a})}o(wQe,"exportApp");async function rsr({appId:e,excludeRows:t,encryptPassword:r}){let n=await wQe(e,{excludeRows:t,tar:!0,encryptPassword:r});return mje(n)}o(rsr,"streamExportApp");var I9={};G(I9,{getGlobalDBFile:()=>ssr,getListOfAppsInMulti:()=>asr,importApp:()=>usr,untarFile:()=>AQe,updateAttachmentColumns:()=>vQe});var Bb=U(require("fs")),wu=U(require("fs/promises")),zf=require("path"),SQe=U(require("tar")),TQe=require("uuid");function EQe(e,t){let r=t.key?.split("/")||[];r.shift(),r.unshift(e);let n=r.join("/");return{...t,key:n,url:""}}o(EQe,"rewriteAttachmentUrl");async function vQe(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=>EQe(e,f)):(l==="attachment_single"||l==="signature_single")&&u[c]&&(u[c]=EQe(e,u[c]))}return u}))}await t.bulkDocs(n)}o(vQe,"updateAttachmentColumns");async function nsr(e,t){let r=(await t.allDocs(Nc(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(nsr,"updateAutomations");async function isr(e){if(e.file&&e.file.type!=="text/plain")throw new Error("Cannot import a non-text based file.");if(e.file)return Bb.default.createReadStream(e.file.path);if(e.key){let[t,r]=e.key.split("/"),n=await vje(t,r);return Bb.default.createReadStream((0,zf.join)(n,r,"db","dump.txt"))}else throw new Error("Either file or key is required.")}o(isr,"getTemplateStream");async function AQe(e){let t=(0,zf.join)(cu(),(0,TQe.v4)());return await wu.default.mkdir(t),await SQe.extract({cwd:t,file:e.path}),t}o(AQe,"untarFile");async function osr(e,t){try{let r=o(async n=>{for(let i of await wu.default.readdir(n)){let s=(0,zf.join)(n,i);if(!s.endsWith(EM)){let a=await wu.default.lstat(s);if(a.isFile()&&s.endsWith(".enc")){let u=s.replace(/\.enc$/,"");await aa.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(osr,"decryptFiles");function ssr(e){return Bb.default.readFileSync((0,zf.join)(e,wM),"utf8")}o(ssr,"getGlobalDBFile");function asr(e){return Bb.default.readdirSync(e).filter(t=>t!==wM)}o(asr,"getListOfAppsInMulti");async function usr(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 AQe(r.file):r.file.path,a&&r.file.password&&await osr(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===Fb))throw new Error("App export does not appear to be valid - no DB file found.");{let m=[],g=[wM,Fb];for(let w of f){let E=(0,zf.join)(c,w);g.includes(w)||(w=(0,zf.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 Be.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=Bb.default.createReadStream((0,zf.join)(c,Fb))}else s=await isr(r);let{ok:l}=await t.load(s);if(!l)throw"Error loading database dump from template.";return n.updateAttachmentColumns&&await vQe(i,t),await nsr(i,t),c&&await wu.default.rm(c,{recursive:!0,force:!0}),l}o(usr,"importApp");var C9={};G(C9,{calculateAutomationCount:()=>OQe,calculateBackupStats:()=>csr,calculateDatasourceCount:()=>RQe,calculateScreenCount:()=>IQe});async function SM(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(SM,"runInContext");async function RQe(e,t){return SM(e,async r=>{let n=await r.allDocs(ZT()),i=await r.allDocs(If());return n.rows.length+i.rows.length},t)}o(RQe,"calculateDatasourceCount");async function OQe(e,t){return SM(e,async r=>(await r.allDocs(Nc())).rows.length,t)}o(OQe,"calculateAutomationCount");async function IQe(e,t){return SM(e,async r=>(await P.screens.fetch(r)).length,t)}o(IQe,"calculateScreenCount");async function csr(e){return SM(e,async t=>{let r=[];r.push(RQe(e,t)),r.push(OQe(e,t)),r.push(IQe(e,t));let n=await Promise.all(r);return{datasources:n[0],automations:n[1],screens:n[2]}})}o(csr,"calculateBackupStats");var x9={};G(x9,{clearErrors:()=>lsr});async function lsr(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 Fe.workspace.invalidateWorkspaceMetadata(r.appId,r)}o(lsr,"clearErrors");var TM={...O9,...I9,...C9,...x9};var D9={};G(D9,{getSourceType:()=>fsr});function fsr(e){if(Ls(e))return"table";if(dn(e))return"view";if(mm(e))return"datasource";if(zre(e))return"query";throw new Error(`Unknown source type for source "${e}"`)}o(fsr,"getSourceType");function CQe(e,t){return!e.disabled&&t?"published":"disabled"}o(CQe,"getPublishedState");async function xQe(){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:CQe(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:CQe(h,m)}}return{automations:f,workspaceApps:p,tables:d}}o(xQe,"status");var DQe={status:xQe};var P9={};G(P9,{create:()=>psr,fetch:()=>dsr,findByResourceId:()=>msr,remove:()=>hsr});async function dsr(e){return(await C.getWorkspaceDB().find({selector:{_id:{$regex:`^workspace_favourite${ce}`},...e?{createdBy:e}:{}}})).docs}o(dsr,"fetch");async function psr(e){let r=await C.getWorkspaceDB().put({_id:F.generateWorkspaceFavouriteID(),...e});return{...e,_id:r.id,_rev:r.rev}}o(psr,"create");async function hsr(e,t){return await C.getWorkspaceDB().remove(e,t)}o(hsr,"remove");async function msr(e){return(await C.getWorkspaceDB().find({selector:{_id:{$regex:`^workspace_favourite${ce}`},resourceId:e},limit:1})).docs}o(msr,"findByResourceId");var N9={};G(N9,{fetch:()=>gsr,fetchWithDocument:()=>ysr});async function gsr(e){if(!Ls(e))throw new Error(`Invalid tableId: ${e}`);let t=C.getWorkspaceDB(),r={startkey:[e],endkey:[e,{}]};return(await t.query(XT(Pc.LINK),r)).rows.map(i=>i.value)}o(gsr,"fetch");async function ysr(e){if(!Ls(e))throw new Error(`Invalid tableId: ${e}`);let t=C.getWorkspaceDB(),r={startkey:[e],endkey:[e,{}],include_docs:!0};return(await t.query(XT(Pc.LINK),r)).rows.map(i=>i.doc)}o(ysr,"fetchWithDocument");var PQe={...N9};var L9={};G(L9,{addLink:()=>bsr,deleteLink:()=>_sr,update:()=>wsr});async function bsr({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(bsr,"addLink");async function _sr(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(_sr,"deleteLink");async function wsr(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(wsr,"update");var k9={};G(k9,{cleanStoredToken:()=>Csr,create:()=>Esr,fetch:()=>LQe,get:()=>vM,getLastUsages:()=>Isr,getToken:()=>Rsr,remove:()=>Tsr,update:()=>Ssr,validateConfig:()=>Osr});async function NQe(e,t){if((await LQe()).find(n=>n.name===e&&n._id!==t))throw new K(`OAuth2 config with name '${e}' is already taken.`,400)}o(NQe,"guardName");async function LQe(){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(LQe,"fetch");async function Esr(e){let t=C.getWorkspaceDB();await NQe(e.name);let r=await t.put({_id:`oauth2${ce}${it.newid()}`,...e});return{_id:r.id,_rev:r.rev,...e}}o(Esr,"create");async function vM(e){return await C.getWorkspaceDB().tryGet(e)}o(vM,"get");async function Ssr(e){let t=C.getWorkspaceDB();await NQe(e.name,e._id);let r=await vM(e._id);if(!r)throw new K(`OAuth2 config with id '${e._id}' not found.`,404);let n={...e,clientSecret:e.clientSecret===Fi?r.clientSecret:e.clientSecret},i=await t.put(n);return await kQe(e._id),{...n,_rev:i.rev}}o(Ssr,"update");async function Tsr(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 kQe(e);let n=await r.tryGet(yt.generateOAuth2LogID(e));n&&await r.remove(n)}o(Tsr,"remove");async function kQe(e){let t=Fe.CacheKey.OAUTH2_TOKEN(e);await Fe.destroy(t)}o(kQe,"cleanCache");var MQe=require("koa"),UQe=U(require("node-fetch"));var{DocWritethrough:vsr}=Fe.docWritethrough;async function FQe(e){e=await JVe(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,UQe.default)(e.url,t)}o(FQe,"fetchToken");var Asr=o(async e=>{await new vsr(C.getWorkspaceDB(),yt.generateOAuth2LogID(e)).patch({lastUsage:Date.now()})},"trackUsage");async function Rsr(e){let t=await Fe.withCacheWithDynamicTTL(Fe.CacheKey.OAUTH2_TOKEN(e),async()=>{let r=await vM(e);if(!r)throw new MQe.HttpError(`oAuth config ${e} count not be found`);let n=await FQe(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 Asr(e),t}o(Rsr,"getToken");async function Osr(e){try{let t=await FQe(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(Osr,"validateConfig");async function Isr(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(Isr,"getLastUsages");async function Csr(e){await Fe.destroy(Fe.CacheKey.OAUTH2_TOKEN(e),{useTenancy:!0})}o(Csr,"cleanStoredToken");var U9={};G(U9,{enrichArrayContext:()=>jQe,enrichContext:()=>M9,fetch:()=>Psr,find:()=>Dsr});function BQe(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(BQe,"updateSchema");function xsr(e){return e.map(t=>BQe(t))}o(xsr,"updateSchemas");function qQe(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(qQe,"enrichQueries");async function Dsr(e){let t=C.getWorkspaceDB(),r=C.getWorkspaceId(),n=qQe(await t.get(e));return Rf(r)&&(delete n.fields,delete n.parameters),BQe(n)}o(Dsr,"find");async function Psr(e={enrich:!0}){let n=(await C.getWorkspaceDB().allDocs(rz(null,{include_docs:!0}))).rows.map(i=>i.doc);return e.enrich&&(n=await qQe(n)),xsr(n)}o(Psr,"fetch");async function jQe(e,t={}){let r={};for(let s in e)r[s]=e[s];let n=await M9(r,t),i=[];for(let[s,a]of Object.entries(n))i[parseInt(s)]=a;return i}o(jQe,"enrichArrayContext");async function M9(e,t={}){let r={};if(!e||!t)return r;if(Array.isArray(e))return jQe(e,t);let n=await Wc(),i={...t,env:n};for(let s of Object.keys(e))e[s]!=null&&(typeof e[s]=="object"?r[s]=await M9(e[s],i):typeof e[s]=="string"?r[s]=sr(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(M9,"enrichContext");var WQe={...U9};var B9={};G(B9,{duplicateResourcesToWorkspace:()=>zsr,getResourcesInfo:()=>Nsr});var VQe=U(require("lodash/chunk"));async function Nsr(){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,Tqe(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(Nsr,"getResourcesInfo");async function Lsr(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(Lsr,"getDestinationDb");var ksr={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 RM(e){return Object.entries(ksr).find(([r,n])=>e.startsWith(n))?.[0]}o(RM,"getResourceType");function GQe(e){return e._id?RM(e._id)==="automation":!1}o(GQe,"isAutomation");function Msr(e){return e._id?RM(e._id)==="workspace_app":!1}o(Msr,"isWorkspaceApp");function Usr(e){return e._id?RM(e._id)==="table":!1}o(Usr,"isTable");var Fsr=new Set(["attachment","attachment_single","signature_single"]),Bsr=o(e=>!!e?.type&&Fsr.has(e.type),"isAttachmentColumn"),qsr=o(e=>e.schema?Object.entries(e.schema).filter(([,t])=>Bsr(t)).map(([t,r])=>({field:t,type:r.type})):[],"getAttachmentColumns"),jsr=o((e,t,r)=>{if(!e?.startsWith(`${t}/`)||t===r)return e;let n=e.slice(t.length);return`${r}${n}`},"buildDestinationAttachmentKey");async function Wsr(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(Wsr,"copyAttachmentToWorkspace");async function $Qe(e,t){if(!e?.key||!t.sourceProdWorkspaceId||!t.destinationProdWorkspaceId||t.sourceProdWorkspaceId===t.destinationProdWorkspaceId)return e;let r=jsr(e.key,t.sourceProdWorkspaceId,t.destinationProdWorkspaceId);if(!r||r===e.key)return e;let n=await Wsr(e.key,r,t.cache);return n?{...e,key:n,url:""}:e}o($Qe,"remapAttachmentValue");async function Gsr(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 $Qe(u,r);a.push(c)}n[i.field]=a}else(i.type==="attachment_single"||i.type==="signature_single")&&s&&(n[i.field]=await $Qe(s,r))}}o(Gsr,"remapRowAttachments");var AM=1e3,$sr=250,F9=3,Vsr=o(e=>new Promise(t=>setTimeout(t,e)),"delay");async function Hsr(e,t){let r=C.getWorkspaceDB(),n={include_docs:!0,limit:AM+(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>AM?s.slice(0,AM):s,u=a.length===AM?a[a.length-1]._id:void 0;return{rows:a,nextStartAfter:u}}o(Hsr,"fetchTableRowsPage");async function Qsr(e,t){let r=(0,VQe.default)(t,$sr);for(let n of r){let i=n,s=0;for(;i.length&&s<F9;){s++;let a=await e.bulkDocs(i),u=[];if(a.forEach((c,l)=>{c.error&&u.push(i[l])}),!u.length)break;if(s>=F9)throw new Error(`Failed to copy ${u.length} row(s) after ${F9} attempts.`);await Vsr(s*250),i=u}}}o(Qsr,"bulkInsertRows");async function Ksr(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=qsr(u),f;do{let{rows:d,nextStartAfter:p}=await Hsr(u._id,f);if(f=p,!d.length)break;let h=[];for(let m of d){await Gsr(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 Qsr(t,h)}while(f)}}o(Ksr,"duplicateInternalTableRows");async function zsr(e,t,r){e=Array.from(new Set(e).keys());let n=await Lsr(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,(GQe(h)||Msr(h))&&(h.disabled=!0),GQe(h)&&(h.appId=t),h})),(r?.copyRows??!0)&&await Ksr(u.filter(Usr),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(RM(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(zsr,"duplicateResourcesToWorkspace");var q9={};G(q9,{create:()=>Jsr,deleteAll:()=>Zsr,deleteAllForDatasource:()=>aar,docExists:()=>ear,get:()=>HQe,getAll:()=>Xsr,getAllForTable:()=>OM,getNames:()=>KQe,remove:()=>oar,run:()=>sar,setTablePermission:()=>tar,setViewPermission:()=>nar,unsetTablePermission:()=>rar,unsetViewPermission:()=>iar});async function Ysr(e,t,r){let n=await KQe(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(Ysr,"ensureUniqueAndThrow");async function Jsr(e,t){let r={name:t.name.trim()},n=C.getWorkspaceDB(),i=cL(e),s=await n.tryGet(i);s||(s={_id:i,actions:{}}),await Ysr(s,r.name);let a=C.getWorkspaceId();if(!a)throw new Error("Could not get the current appId");let u=`row_action${ce}${it.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(Jsr,"create");async function HQe(e,t){let n=(await OM(e))?.actions[t];if(!n)throw new K(`Row action '${t}' not found in '${e}'`,400);return n}o(HQe,"get");async function OM(e){let t=C.getWorkspaceDB(),r=cL(e);return await t.tryGet(r)}o(OM,"getAllForTable");async function Xsr(){return(await C.getWorkspaceDB().allDocs(yt.getDocParams("ra",void 0,{include_docs:!0}))).rows.map(t=>t.doc)}o(Xsr,"getAll");async function Zsr(e){let t=C.getWorkspaceDB(),r=await OM(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(Zsr,"deleteAll");async function ear(e){let t=C.getWorkspaceDB(),r=cL(e);return await t.exists(r)}o(ear,"docExists");async function kA(e,t,r){let n=await OM(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(kA,"updateDoc");async function QQe(e,t){let r;if(dn(t)&&(r=await P.views.get(t)),!r||r.tableId!==e)throw new K(`View '${t}' not found in '${e}'`,400)}o(QQe,"guardView");async function tar(e,t){return await kA(e,t,async r=>(r.actions[t].permissions.table.runAllowed=!0,r))}o(tar,"setTablePermission");async function rar(e,t){return await kA(e,t,async r=>(r.actions[t].permissions.table.runAllowed=!1,r))}o(rar,"unsetTablePermission");async function nar(e,t,r){return await QQe(e,r),await kA(e,t,async n=>(n.actions[t].permissions.views[r]={runAllowed:!0},n))}o(nar,"setViewPermission");async function iar(e,t,r){return await QQe(e,r),await kA(e,t,async n=>(delete n.actions[t].permissions.views[r],n))}o(iar,"unsetViewPermission");async function oar(e,t){return await kA(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(oar,"remove");async function sar(e,t,r,n){let i=await P.tables.getTable(e);if(!i)throw new K("Table not found",404);let{automationId:s}=await HQe(e,t),a=await P.automations.get(s),u=await P.rows.find(e,r);await $c(a,{fields:{id:u._id,revision:u._rev,row:u,table:i},user:n,appId:C.getWorkspaceId()},{getResponses:!0})}o(sar,"run");async function KQe(e){return(await P.automations.find(e.map(({automationId:n})=>n))).reduce((n,i)=>(n[i._id]=i.name,n),{})}o(KQe,"getNames");async function aar(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(aar,"deleteAllForDatasource");var W9={};G(W9,{FIND_LIMIT:()=>j9,getRowsWithAttachments:()=>car});var j9=25;function uar(e,t,r){let n={selector:{$or:t.map(i=>({[i]:{$exists:!0}})),_id:{$regex:`^ro${St}${e}`}},limit:j9};return r&&(n.bookmark=r),n}o(uar,"generateAttachmentFindParams");async function car(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=uar(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===j9);return{rows:a,columns:n}}o(car,"getRowsWithAttachments");var $9={};G($9,{find:()=>har,getAllInternalRows:()=>dar,save:()=>par});var MA={};G(MA,{find:()=>far,getRow:()=>G9,save:()=>lar});var zQe=U(require("lodash/fp/cloneDeep"));async function G9(e,t,r){let n;return typeof e=="string"?dn(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 lar(e,t,r){let{tableId:n,viewId:i}=Bh(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,zQe.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(lar,"save");async function far(e,t){let{tableId:r,viewId:n}=Bh(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(far,"find");async function dar(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(dar,"getAllInternalRows");function YQe(e){let t=e;return dn(e)&&(t=Zr(e)),kt(t)?MA:x7}o(YQe,"pickApi");async function par(e,t,r,n){return YQe(e).save(e,t,r,n)}o(par,"save");async function har(e,t){return YQe(e).find(e,t)}o(har,"find");var eX={};G(eX,{exportRows:()=>Uar,fetch:()=>Far,fetchLegacyView:()=>qar,fetchRaw:()=>Bar,isValidFilter:()=>Bqe,search:()=>Mar});var Y9={};G(Y9,{exportRows:()=>Oar,fetch:()=>cKe,fetchLegacyView:()=>z9,fetchRaw:()=>K9,sqs:()=>UA});var UA={};G(UA,{buildInternalFieldList:()=>H9,search:()=>aKe});var tKe=U(require("dd-trace")),rKe=require("lodash"),nKe=U(require("lodash/pick"));var JQe=require("lodash");var mar=["CREATE","UPDATE","DELETE"],gar=["mysql2","mssql","oracledb"],yar=["CREATE_TABLE","UPDATE_TABLE","DELETE_TABLE"],V9=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}},Gh=class{static{o(this,"AliasTables")}constructor(t){this.tableNames=t,this.aliases={},this.tableAliases={},this.charSeq=new V9}isAliasingEnabled(t,r){let n=t.resource?.fields?.length;if(!n||n<=0||yar.includes(t.operation))return!1;if(!r)return!0;try{let i=qJ(r),s=mar.includes(t.operation),a=gar.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,JQe.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 bar(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(bar,"findColumnInQueries");function XQe(e,t){bar(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(XQe,"userColumnMapping");function IM(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":XQe(r,t);break;default:Be.unreachable(i)}break}case"bb_reference":{XQe(r,t);break}}return Tt.recurseLogicalOperators(t,r=>IM(e,r))}o(IM,"checkFilters");function ZQe(e,t){return t.query&&(t.query=IM(e,t.query)),t}o(ZQe,"searchInputMapping");function CM(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(CM,"isSearchingByRowID");var iKe=new ze.Sql("sqlite3"),_ar=2e3,oKe=new RegExp("no such column: .+"),war=new RegExp("no such table: .+"),Ear=new RegExp("duplicate column name: .+");async function H9(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(`${Cf(c._id,p._id)}.${g}`)}),m},"getJunctionFields");if(P.tables.isTable(e))for(let p of vn)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 H9(y,t,{includeHiddenFields:l})).concat(d(y,["doc1.fieldName","doc2.fieldName"]));if(b.length+f.length>_ar)break;f=f.concat(b)}}if(!u||!de.views.isCalculationView(e))for(let p of vn)f.push(`${c._id}.${p}`);return[...new Set(f)]}o(H9,"buildInternalFieldList");function Sar(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(Hc(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(Sar,"cleanupFilters");function sKe(e,t){let r=Rb.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]=sKe(JSON.parse(n[s])));let a=s.indexOf(Rb);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(sKe,"reverseUserColumnMapping");async function eKe(e,t,r,n){let i=r.map(c=>c.through),s=new Gh(t.map(c=>c._id).concat(i));n?.countTotalRows&&(e.operation="COUNT");let a=o(async c=>{let l=iKe._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 tKe.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?sA(u):Array.isArray(u)?sKe(u,e.table):u}o(eKe,"runSqlQuery");function Tar(e,t){return e===400&&t?.match(war)||e===400&&t?.match(oKe)||e===400&&t?.match(Ear)||e===404&&t?.includes(Fn)}o(Tar,"resyncDefinitionsRequired");async function aKe(e,t,r){let{paginate:n,query:i,...s}=(0,rKe.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=Dje(a,u),f={...Sar(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:ul,entityId:a._id,operation:"READ"},filters:f,meta:{columnPrefix:Rb,sqliteUseLikeWithoutLower:!0},resource:{fields:await H9(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=(kM(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;!CM(f)&&s.limit&&(n=!0,p.paginate={limit:s.limit+1,offset:h});let m=await Fh(p);try{let[g,y]=await Promise.all([eKe(m,u,l),e.countRows?eKe(m,u,l,{countTotalRows:!0}):Promise.resolve(void 0)]),b=iKe.convertJsonStringColumns(a,await Sk(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),...vn];E=E.map(A=>(0,nKe.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&&Tar(g.status,y))return await Oi.doWithLock({type:"auto_extend",name:"sys_sync_definitions",resource:C.getWorkspaceId()},P.tables.sqs.syncDefinition),aKe(e,t,{retrying:!0});if(g.status===400&&y?.match(oKe))return{rows:[]};throw new Error(`Unable to search by SQL - ${y}`,{cause:g})}}o(aKe,"search");var Aar=F.getPouch({inMemory:!0});async function uKe(view,calculation,group,data){let db=new Aar(it.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(uKe,"runView");async function Oar(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=Dar(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:Bk(g??Object.keys(h[0]),y,c,l)};if(r==="json")return{fileName:"export.json",content:qk(y)};if(r==="jsonWithSchema")return{fileName:"export.json",content:jk(m,y)};throw"Format not recognised"}o(Oar,"exportRows");async function cKe(e){let t=await Iar(e),r=await K9(e);return await Jt(t,r)}o(cKe,"fetch");async function Iar(e){try{return await P.tables.getTable(e)}catch(t){if(t.status!==404)throw t;let i=await Car(e);if(!i)throw t;return i}}o(Iar,"getTableForFetch");async function Car(e){let t=C.getWorkspaceId();if(!t||!Rf(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(Car,"getDevTableWhenProdMissing");async function K9(e,t){let r=C.getWorkspaceDB(),n;return e===$t.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(K9,"fetchRaw");async function z9(e,t){if(e.startsWith("ta"))return cKe(e);let r=C.getWorkspaceDB(),{calculation:n,group:i,field:s}=t,a=await xar(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 K9(l);u=await uKe(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===Q9.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===Q9.COUNT||n===Q9.SUM)&&(c=u.rows.map(l=>({group:l.key,field:s,value:l.value}))),c}o(z9,"fetchLegacyView");var Q9={SUM:"sum",COUNT:"count",STATS:"stats"};async function xar(e,t){let r=ie.SELF_HOSTED?HJ:QJ,n=ie.SELF_HOSTED?QJ:HJ,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(xar,"getView");function Dar(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(Dar,"trimFields");var J9={};G(J9,{exportRows:()=>Nar,fetch:()=>Lar,fetchRaw:()=>kar,search:()=>xM});var lKe=U(require("lodash/pick"));function Par(e,t,r,n){let i;if(!CM(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(Par,"getPaginationAndLimitParameters");async function xM(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=Par(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),...Os];m=m.map(E=>(0,lKe.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(xM,"search");async function Nar(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}=_r(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 xM({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=Bk(b??Object.keys(w),E,c,l);break;case"json":S=qk(E);break;case"jsonWithSchema":S=jk(w,E);break;default:throw Be.unreachable(r)}return{fileName:`export.${r}`,content:S}}o(Nar,"exportRows");async function Lar(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(Lar,"fetch");async function kar(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(kar,"fetchRaw");var dKe=U(require("dd-trace"));var X9=o((e,t)=>{t=t.map(r=>r.toLowerCase());for(let r of Object.keys(e||{}))if(Hc(r)){let n=e[r];if(!n)continue;for(let i of n.conditions)X9(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"),fKe=o(async(e,t)=>{let r=o(async(i,s,a,u)=>{let c=[];s7({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 Z9(e){return kt(e)?J9:Y9}o(Z9,"pickApi");async function Mar(e,t){return await dKe.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=kt(i._id);if(e.query){let u=(e.fields||Object.keys(i.schema)).filter(l=>i.schema[l]?.visible!==!1),c=await fKe(i,u);X9(e.query,c)}else e.query={};if(t&&(e.query=await kh(e.query,t)),e=ZQe(i,e),e.viewId){let c=await kh(n.query||{},t);Array.isArray(c)&&(c=Tt.buildQuery(c)),c=IM(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 xM(e,n)):(r?.addTags({searchType:"sqs"}),a=await UA.search(e,n)),r.addTags({foundRows:a.rows.length,totalRows:a.totalRows}),a})}o(Mar,"search");async function Uar(e){return Z9(e.tableId).exportRows(e)}o(Uar,"exportRows");async function Far(e){return Z9(e).fetch(e)}o(Far,"fetch");async function Bar(e,t){return Z9(e).fetchRaw(e,t)}o(Bar,"fetchRaw");async function qar(e,t){return z9(e,t)}o(qar,"fetchLegacyView");var pKe={...W9,...$9,...eX,utils:WJ,external:MA,AliasTables:Gh};var tX={};G(tX,{create:()=>War,ensureHomepageUniqueness:()=>$ar,fetch:()=>jar,update:()=>Gar});async function jar(e=C.getWorkspaceDB()){let t=(await e.allDocs(bqe(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(jar,"fetch");async function War(e){let r=await C.getWorkspaceDB().put({...e,_id:yqe()});return{...e,_id:r.id,_rev:r.rev}}o(War,"create");async function Gar(e){let r=await C.getWorkspaceDB().put(e);return{...e,_rev:r.rev}}o(Gar,"update");async function $ar(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($ar,"ensureHomepageUniqueness");var rX={};G(rX,{create:()=>Kar,duplicate:()=>zar,fetch:()=>mKe,get:()=>gKe,getMatchedWorkspaceApp:()=>Xar,remove:()=>Jar,update:()=>Yar});async function hKe(e,t){if((await mKe()).find(n=>n.name===e&&n._id!==t))throw new K(`App with name '${e}' is already taken.`,400)}o(hKe,"guardName");var Var=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"),Har=o(async e=>{let t=await P.workspaceApps.fetch(),r=de.duplicateName(e.name,t.map(i=>i.name)),n={name:r,url:`/${Qar(r)}`,disabled:!0,navigation:e.navigation,isDefault:!1};return P.workspaceApps.create(n)},"createDuplicatedApp"),Qar=o(e=>e.toLowerCase().replaceAll(" ","-"),"slugify");async function mKe(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(mKe,"fetch");async function gKe(e){return await C.getWorkspaceDB().tryGet(e)}o(gKe,"get");async function Kar(e){let t=C.getWorkspaceDB();return await hKe(e.name),(await t.put({...e,_id:yt.generateWorkspaceAppID()},{returnDoc:!0})).doc}o(Kar,"create");async function zar(e){let t=await Har(e);return await Var(e._id,t._id),t}o(zar,"duplicate");async function Yar(e){let t=C.getWorkspaceDB(),r=await gKe(e._id);if(!r)throw new K(`Project app with id '${e._id}' not found.`,404);e.name!==r.name&&await hKe(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(Yar,"update");async function Jar(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(Jar,"remove");async function Xar(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(Xar,"getMatchedWorkspaceApp");var nX={};G(nX,{updateWithExport:()=>nur});var yKe=[yd.SQLITE,"_design/migrations"];async function Zar(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(Zar,"getNewWorkspaceMetadata");function eur(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(eur,"mergeUpdateAndDeleteDocuments");async function tur(e){let t=[];for(let s of PM)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(yKe,{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(tur,"removeImportableDocuments");async function rur(e){let t=[];for(let s of PM)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(yKe,{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(rur,"getImportableDocuments");async function nur(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 TM.importApp(n,s,u,{updateAttachmentColumns:!0});let c=await Zar(s,a),l=await rur(s),f=await tur(a);if((await a.bulkDocs(eur(l,f,c))).some(p=>p.error))throw new K("Error importing documents",500);await Fe.destroy(dM(n)),await t9(n)}finally{await s.destroy()}}o(nur,"updateWithExport");var iX={};G(iX,{get:()=>iur,tryGet:()=>our});async function iur(e){return await(e?.production?C.getProdWorkspaceDB():C.getWorkspaceDB()).get("app_metadata")}o(iur,"get");async function our(e){return await(e?.production?C.getProdWorkspaceDB():C.getWorkspaceDB()).tryGet("app_metadata")}o(our,"tryGet");var oX={};G(oX,{enrichWithDefaultWorkspaceAppUrl:()=>aur,fetch:()=>sur,filterAppList:()=>bKe});function bKe(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(bKe,"filterAppList");async function sur(e,t){let r=e==="development",n=e==="all",i=await F.getAllWorkspaces({dev:r,all:n}),s={...t,roles:t?.roles||{}},a=await Vt.enrichUserRolesFromGroups(s);i=bKe(a,i);let u=i.filter(l=>l.status==="development").map(l=>l.appId);if(r||n){let l=await Rje(u);for(let f of i){let d=l[f.appId];d?f.lockedBy=d:delete f.lockedBy}}let c=await hJ(i);return await V3e(c)}o(sur,"fetch");async function aur(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(aur,"enrichWithDefaultWorkspaceAppUrl");var _Ke={...IJ,...kz,...oX,...nX,metadata:iX};var uur={backups:TM,tables:qh,automations:_u,workspaces:_Ke,rows:pKe,users:sVe,datasources:yu,queries:WQe,plugins:fJ,screens:tX,views:pA,permissions:d7,links:PQe,rowActions:q9,common:D9,oauth2:k9,ai:w9,workspaceApps:rX,navigation:L9,resources:B9,deployment:DQe,dev:Bz,workspace:P9},P=uur;var Eu=require("undici");var FA={path:{type:"string",display:"URL"},queryString:{type:"string"},headers:{type:"object"},enabledHeaders:{type:"object"},requestBody:{type:"json"},bodyType:{type:"string",enum:Object.values(zh)},pagination:{type:"object"}},cur={docs:"https://github.com/node-fetch/node-fetch",description:"With the REST API datasource, you can connect, query and pull data from multiple REST APIs. You can then use the retrieved data to build apps.",friendlyName:"REST API",type:"API",datasource:{url:{type:"string",default:"",required:!1,deprecated:!0},defaultHeaders:{type:"object",required:!1,default:{}},rejectUnauthorized:{display:"Reject Unauthorized",type:"boolean",default:!0,required:!1},downloadImages:{display:"Download images",type:"boolean",default:!0,required:!1}},query:{create:{readable:!0,displayName:"POST",type:"fields",fields:FA},read:{displayName:"GET",readable:!0,type:"fields",fields:FA},update:{displayName:"PUT",readable:!0,type:"fields",fields:FA},patch:{displayName:"PATCH",readable:!0,type:"fields",fields:FA},delete:{displayName:"DELETE",type:"fields",fields:FA}}},uX=o(e=>Object.prototype.toString.call(e)==="[object Object]","isPlainRecord"),lur=o(e=>{if(e==null)return{bodyString:"",bodyObject:{},jsonValue:void 0};if(typeof e=="string")try{let t=JSON.parse(e);return uX(t)?{bodyString:e,bodyObject:t,jsonValue:t}:{bodyString:e,bodyObject:{},jsonValue:t}}catch(t){return{bodyString:e,bodyObject:{},parseError:t}}return Buffer.isBuffer(e)?{bodyString:e.toString(),bodyObject:{},jsonValue:e.toString()}:e instanceof Uint8Array?{bodyString:Buffer.from(e).toString(),bodyObject:{},jsonValue:Buffer.from(e).toString()}:uX(e)?{bodyString:JSON.stringify(e),bodyObject:e,jsonValue:e}:Array.isArray(e)?{bodyString:JSON.stringify(e),bodyObject:{},jsonValue:e}:{bodyString:JSON.stringify(e),bodyObject:{},jsonValue:void 0}},"normaliseBody"),cX=class{constructor(t){this.headers={};this.startTimeMs=DM.performance.now();this.config=t}static{o(this,"RestIntegration")}async parseResponse(t,r){let n,i,s={},a,{contentType:u,contentDisposition:c}=dje(t.headers,{downloadImages:this.config.downloadImages}),l=t.headers.get("content-length"),f=t.status>=200&&t.status<300;(c.includes("filename")||c.includes("attachment")||c.includes("form-data"))&&f&&(a=SKe.default.basename((0,EKe.parse)(c).parameters?.filename)||"");let d=!1,p;try{if(a)return jqe(t,a,this.startTimeMs);{p=t.text?await t.text():"",!l&&p&&(l=Buffer.byteLength(p,"utf8").toString());let y=l&&parseInt(l)>0||p.length>0;if(t.status===204)n=[],i="";else if(y&&u.includes("application/json"))d=!0,n=JSON.parse(p),i=p;else if(y&&u.includes("text/xml")||u.includes("application/xml")){d=!0;let b=await qqe(p);n=b.data,i=b.rawXml}else n=p,i=p}}catch(y){if(d)n=p,i=p;else throw new Error(`Failed to parse response body: ${y}`)}let h=de.formatBytes(l||"0"),m=`${Math.round(DM.performance.now()-this.startTimeMs)}ms`;for(let[y,b]of t.headers.entries())s[y]=b;let g;return r?.responseParam&&(g=(0,wKe.default)(n,r.responseParam)),{data:n,info:{code:t.status,size:h,time:m},extra:{raw:i,headers:s},pagination:{cursor:g}}}getUrl(t,r,n,i){if(n?.location==="query"&&i){let{pageParam:u,sizeParam:c}=n,l=new aX.URLSearchParams;u&&i.page!=null&&l.append(u,i.page),c&&i.limit!=null&&l.append(c,String(i.limit));let f=l.toString();f&&(r=`${f}&${r}`)}if(r){let u=sX.default.decode(r),c={};for(let[l,f]of Object.entries(u))f!==""&&f!=null&&(c[l]=f);Object.keys(c).length>0?r="?"+sX.default.encode(c):r=""}let s=`${t}${r}`,a=s;return this.config.url&&!s.startsWith("http")&&(a=this.config.url?`${this.config.url}/${s}`:s),a.startsWith("http")||(a=`http://${a}`),a}addBody(t,r,n,i,s){if(n.headers||(n.headers={}),t==="none")return n;let a,u={},c="",l;if(r!=null){let{bodyString:d,bodyObject:p,parseError:h,jsonValue:m}=lur(r);c=d,u=p,a=h,l=m}let f=o(d=>{i?.location==="body"&&(i?.pageParam&&s?.page!=null&&d(i.pageParam,s.page),i?.sizeParam&&s?.limit!=null&&d(i.sizeParam,s.limit))},"addPaginationToBody");switch(t){case"text":n.body=c;break;case"encoded":{let d=new aX.URLSearchParams;for(let[p,h]of Object.entries(u))d.append(p,String(h));f((p,h)=>{h!=null&&d.append(p,String(h))}),n.body=d;break}case"form":{let d=new Eu.FormData,p=o((y,b)=>{if(b==null){d.append(y,"");return}if(typeof b=="string"){d.append(y,b);return}if(b instanceof Blob){d.append(y,b);return}if(Buffer.isBuffer(b)){d.append(y,Buffer.from(b).toString());return}if(b instanceof Uint8Array){d.append(y,Buffer.from(b).toString());return}d.append(y,String(b))},"appendFormValue");for(let[y,b]of Object.entries(u))p(y,b);f((y,b)=>{b!=null&&p(y,b)});let m=o(()=>n.headers?Array.isArray(n.headers)?n.headers.reduce((b,[w,E])=>(b[w]=E,b),{}):n.headers instanceof Eu.Headers?Object.fromEntries(n.headers):n.headers:{},"ensureHeaderObject")(),g=Object.keys(m).find(y=>y.toLowerCase()==="content-type");g&&delete m[g],n.headers=m,n.body=d;break}case"xml":u!=null&&Object.keys(u).length&&(c=new TKe.Builder().buildObject(u)),n.body=c,n.headers["Content-Type"]="application/xml";break;case"json":{if(a)throw"Invalid JSON for request body";let d;if(typeof l<"u")d=l;else if(c)try{d=JSON.parse(c)}catch{d=u}else d=u;if(i?.location==="body"&&uX(d)){let p={...d};i.pageParam&&s?.page!=null&&(p[i.pageParam]=s.page),i.sizeParam&&s?.limit!=null&&(p[i.sizeParam]=s.limit),d=p}else if(i?.location==="body"){let p={...u};i.pageParam&&s?.page!=null&&(p[i.pageParam]=s.page),i.sizeParam&&s?.limit!=null&&(p[i.sizeParam]=s.limit),Object.keys(p).length>0&&(d=p)}n.body=typeof d=="string"?d:JSON.stringify(d),n.headers["Content-Type"]="application/json";break}}return n}async getAuthHeaders(t,r){if(!t)return{};if(r==="oauth2")return{Authorization:await P.oauth2.getToken(t)};if(!this.config.authConfigs)return{};let n={},i=this.config.authConfigs.filter(s=>s._id===t)[0];if(i){let{type:s,config:a}=i;switch(s){case"basic":n.Authorization=`Basic ${Buffer.from(`${a.username}:${a.password}`).toString("base64")}`;break;case"bearer":n.Authorization=`Bearer ${a.token}`;break;default:throw Be.unreachable(s)}}return n}async _req(t,r=!0){let{path:n="",queryString:i="",headers:s={},method:a="GET",disabledHeaders:u,bodyType:c="none",requestBody:l,authConfigId:f,authConfigType:d,pagination:p,paginationValues:h}=t,m=await this.getAuthHeaders(f,d);if(this.headers={...this.config.defaultHeaders||{},...s,...m},u)for(let T of Object.keys(this.headers))u[T]&&delete this.headers[T];let g={method:a,headers:this.headers};g=this.addBody(c,l,g,p,h),this.config.legacyHttpParser&&(g.extraHttpOptions={insecureHTTPParser:!0}),this.startTimeMs=DM.performance.now();let y=this.getUrl(n,i,p,h);if(await XP.isBlacklisted(y))throw new Error("Cannot connect to URL.");let b=this.config.rejectUnauthorized===void 0?ie.REST_REJECT_UNAUTHORIZED:this.config.rejectUnauthorized;(0,Eu.getGlobalDispatcher)()instanceof Eu.MockAgent||(g.dispatcher=zqe({rejectUnauthorized:b,url:y}));let S;try{S=await(0,Eu.fetch)(y,g)}catch(T){let R=T;throw console.log("[rest integration] Fetch error details",{url:y,error:R.message,cause:R.cause?.message,code:R.cause?.code,hasDispatcher:!!g.dispatcher,isHttpsUrl:y.startsWith("https://"),rejectUnauthorized:b}),R.cause?.code==="UNABLE_TO_VERIFY_LEAF_SIGNATURE"||R.cause?.code==="CERT_UNTRUSTED"||R.cause?.code==="SELF_SIGNED_CERT_IN_CHAIN"?new Error(`SSL certificate verification failed for ${y}. Consider setting rejectUnauthorized to false if using self-signed certificates. Original error: ${R.message}`):R.cause?.code==="ECONNREFUSED"&&g.dispatcher?new Error(`Connection refused when using proxy. Check proxy configuration and ensure the proxy server is accessible. Original error: ${R.message}`):R}return S.status===401&&d==="oauth2"&&r?(await P.oauth2.cleanStoredToken(f),await this._req(t,!1)):await this.parseResponse(S,p)}async create(t){return this._req({...t,method:"POST"})}async read(t){return this._req({...t,method:"GET"})}async update(t){return this._req({...t,method:"PUT"})}async patch(t){return this._req({...t,method:"PATCH"})}async delete(t){return this._req({...t,method:"DELETE"})}},lX={schema:cur,integration:cX};var vKe=require("@google-cloud/firestore");var fur={docs:"https://firebase.google.com/docs/firestore/quickstart",friendlyName:"Firestore",type:"Non-relational",description:"Cloud Firestore is a flexible, scalable database for mobile, web, and server development from Firebase and Google Cloud.",features:{connection:!0},datasource:{email:{type:"string",required:!0},privateKey:{type:"string",display:"Private Key",required:!0},projectId:{type:"string",display:"Project ID",required:!0},databaseId:{type:"string",display:"Database ID",required:!1,default:"(default)",placeholder:"(default)"}},query:{create:{type:"json"},read:{type:"json"},update:{type:"json"},delete:{type:"json"}},extra:{collection:{displayName:"Collection",type:"string",required:!0},filterField:{displayName:"Filter field",type:"string",required:!1},filter:{displayName:"Filter comparison",type:"list",required:!1,data:{read:["==","<","<=","!=",">=",">","array-contains","in","not-in","array-contains-any"]}},filterValue:{displayName:"Filter value",type:"string",required:!1}}},fX=class{static{o(this,"FirebaseIntegration")}constructor(t){this.config=t,this.client=new vKe.Firestore({projectId:t.projectId,databaseId:t.databaseId||"(default)",credentials:{client_email:t.email,private_key:t.privateKey?.replace(/\\n/g,`
|
|
1005
1005
|
`)}})}async testConnection(){try{return await this.client.listCollections(),{connected:!0}}catch(t){return{connected:!1,error:t.message}}}async create(t){try{let r=this.client.collection(t.extra.collection).doc();return await r.set({...t.json,id:r.id}),(await r.get()).data()}catch(r){throw console.error("Error writing to Firestore",r),r}}async read(t){try{let r,n=this.client.collection(t.extra.collection);t.extra.filterField&&t.extra.filter&&t.extra.filterValue?r=await n.where(t.extra.filterField,t.extra.filter,t.extra.filterValue).get():r=await n.get();let i=[];return r.forEach(s=>i.push(s.data())),i}catch(r){throw console.error("Error querying Firestore",r),r}}async update(t){try{return await this.client.collection(t.extra.collection).doc(t.json.id).update(t.json),(await this.client.collection(t.extra.collection).doc(t.json.id).get()).data()}catch(r){throw console.error("Error writing to Firestore",r),r}}async delete(t){try{return await this.client.collection(t.extra.collection).doc(t.json.id).delete(),!0}catch(r){throw console.error("Error deleting from Firestore",r),r}}},dX={schema:fur,integration:fX};var AKe=U(require("ioredis"));var dur={docs:"https://redis.io/docs/",description:"Redis is a caching tool, providing powerful key-value store capabilities.",friendlyName:"Redis",type:"Non-relational",features:{connection:!0},datasource:{host:{type:"string",required:!0,default:hi},port:{type:"number",required:!0,default:6379},username:{type:"string",required:!1},password:{type:"password",required:!1},db:{type:"number",required:!1,display:"DB",default:0}},query:{create:{type:"fields",fields:{key:{type:"string",required:!0},value:{type:"string",required:!0},ttl:{type:"number"}}},read:{readable:!0,type:"fields",fields:{key:{type:"string",required:!0}}},delete:{type:"fields",fields:{key:{type:"string",required:!0}}},command:{readable:!0,displayName:"Redis Command",type:"json"}}},pX=class{static{o(this,"RedisIntegration")}constructor(t){this.config=t,this.client=new AKe.default({host:this.config.host,port:this.config.port,username:this.config.username,password:this.config.password,db:this.config.db})}async testConnection(){let t={connected:!1};try{await this.client.ping(),t.connected=!0}catch(r){t.error=r.message}finally{await this.disconnect()}return t}async disconnect(){return this.client.quit()}async redisContext(t){try{return await t()}catch(r){throw new Error(`Redis error: ${r}`)}finally{await this.disconnect()}}async create(t){return this.redisContext(async()=>{let r=await this.client.set(t.key,t.value);return t.ttl&&await this.client.expire(t.key,t.ttl),r})}async read(t){return this.redisContext(async()=>await this.client.get(t.key))}async delete(t){return this.redisContext(async()=>await this.client.del(t.key))}async command(t){return this.redisContext(async()=>{let r=t.json.trim().split(`
|
|
1006
1006
|
`),n=[],i;for(let u of r){let c=u.trim().match(/".*"/);c?.[0]?i=[...u.substring(0,u.indexOf(c[0])-1).trim().split(" "),c?.[0]]:i=u.trim().split(" "),i[0]=i[0].toLowerCase(),n.push(i)}return(await this.client.pipeline(n).exec())?.map(u=>{if(typeof u=="string")return u;if(Array.isArray(u))return u[1]})})}},hX={schema:dur,integration:pX};var RKe=U(require("snowflake-sdk")),OKe=require("util");var pur={docs:"https://developers.snowflake.com/",description:"Snowflake is a solution for data warehousing, data lakes, data engineering, data science, data application development, and securely sharing and consuming shared data.",friendlyName:"Snowflake",warningMessage:"Snowflake has announced upcoming security policy changes that will disallow passwords for all non-human service by October 2026. In order to avoid any disruption, please consider using key pair authentication.",type:"Relational",features:{connection:!0},datasource:{account:{type:"string",required:!0},username:{type:"string",required:!0},password:{type:"password",required:!1,deprecated:!0},privateKey:{display:"Private Key (PEM)",type:"sensitiveLongForm",required:!1},authenticator:{type:"string",required:!1,hidden:"true"},role:{type:"string"},warehouse:{type:"string",required:!0},database:{type:"string",required:!0},schema:{type:"string",required:!0}},query:{create:{type:"sql"},read:{type:"sql"},update:{type:"sql"},delete:{type:"sql"}}},mX=class{static{o(this,"SnowflakePromise")}constructor(t){this.config=t}async connect(){return this.client?.isUp()?void 0:(this.config.authenticator="SNOWFLAKE",this.config.privateKey&&(this.config.authenticator="SNOWFLAKE_JWT",this.config.privateKey=this.config.privateKey?.trim()),this.client=RKe.default.createConnection(this.config),(0,OKe.promisify)(this.client.connect.bind(this.client))())}async execute(t){return new Promise((r,n)=>{if(!this.client)throw Error("No snowflake client present to execute query. Run connect() first to initialise.");this.client.execute({sqlText:t,complete:function(i,s,a){if(i)return n(i);r(a)}})})}},gX=class{static{o(this,"SnowflakeIntegration")}constructor(t){this.client=new mX(t)}async testConnection(){try{return await this.client.connect(),{connected:!0}}catch(t){return{connected:!1,error:t.message}}}async internalQuery(t){await this.client.connect();try{return await this.client.execute(t.sql)}catch(r){throw r?.message.split(":")[1]||r?.message}}async create(t){return this.internalQuery(t)}async read(t){return this.internalQuery(t)}async update(t){return this.internalQuery(t)}async delete(t){return this.internalQuery(t)}},yX={schema:pur,integration:gX};var Yf=U(require("oracledb"));var hur=ze.Sql;Yf.default.outFormat=Yf.default.OUT_FORMAT_OBJECT;var mur={docs:"https://github.com/oracle/node-oracledb",plus:!0,friendlyName:"Oracle",type:"Relational",description:"Oracle Database is an object-relational database management system developed by Oracle Corporation",features:{connection:!0,fetch_table_names:!0},datasource:{host:{type:"string",default:hi,required:!0},port:{type:"number",required:!0,default:1521},database:{type:"string",required:!0,display:"Service Name"},user:{type:"string",required:!0},password:{type:"password",required:!0}},query:{create:{type:"sql"},read:{type:"sql"},update:{type:"sql"},delete:{type:"sql"}}},gur=["BLOB","NCLOB"],bX={PRIMARY:"P",NOT_NULL_OR_CHECK:"C",FOREIGN_KEY:"R",UNIQUE:"U"},_X=class e extends hur{constructor(r){super("oracledb");this.index=1;this.getConnection=async()=>{let r=`${this.config.host}:${this.config.port||1521}/${this.config.database}`,n={user:this.config.user,password:this.config.password,connectString:r},i=Intl.DateTimeFormat().resolvedOptions().timeZone,s=await Yf.default.getConnection(n);return await s.execute(`ALTER SESSION SET TIME_ZONE = '${i}'`),s};this.config=r}static{o(this,"OracleIntegration")}static{this.COLUMNS_SQL=`
|
|
1007
1007
|
SELECT
|