@budibase/server 3.31.0 → 3.31.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (114) hide show
  1. package/builder/assets/{easymde-HX3mUOM9.js → easymde-DrXpYQde.js} +1 -1
  2. package/builder/assets/{index-D61jmqaO.js → index-C-p9LCen.js} +163 -163
  3. package/builder/index.html +1 -1
  4. package/client/budibase-client.js +1 -1
  5. package/client/chunks/{Accordion-CDsauYE5.js → Accordion-D3ba3v-s.js} +1 -1
  6. package/client/chunks/{ApexChart-CDK7H0l9.js → ApexChart-N1VcsloD.js} +2 -2
  7. package/client/chunks/{AreaChart-D8KexJ6C.js → AreaChart-C0O1SneW.js} +2 -2
  8. package/client/chunks/{AttachmentField-Xe3q5ZNZ.js → AttachmentField-CgQ_-FH_.js} +2 -2
  9. package/client/chunks/{AttachmentSingleField-D21uZULQ.js → AttachmentSingleField-BxeoTcum.js} +2 -2
  10. package/client/chunks/{BBReferenceField-DbUadQLZ.js → BBReferenceField-BjfiAEqC.js} +3 -3
  11. package/client/chunks/{BBReferenceSingleField-DrL8Xo1h.js → BBReferenceSingleField-CXtfu1Q6.js} +2 -2
  12. package/client/chunks/{BackgroundImage-DlY4qNh6.js → BackgroundImage-kQ6jtjth.js} +1 -1
  13. package/client/chunks/{BarChart-BazJAOCO.js → BarChart-CBO7tIOl.js} +2 -2
  14. package/client/chunks/{BigIntField-B5-UxwgL.js → BigIntField-DEG89OPq.js} +2 -2
  15. package/client/chunks/{BooleanField--Prv9Rk2.js → BooleanField-D1PJD6_I.js} +2 -2
  16. package/client/chunks/{Button-Ga_b4bLj.js → Button-DvYRuMIO.js} +1 -1
  17. package/client/chunks/{ButtonGroup-L1mzgFRj.js → ButtonGroup-fN6iL-cY.js} +2 -2
  18. package/client/chunks/{Calendar-DOvXcY6J.js → Calendar-D4ocmsBe.js} +1 -1
  19. package/client/chunks/{CandleStickChart-wpN7SkV2.js → CandleStickChart-DUJo0ARy.js} +2 -2
  20. package/client/chunks/{Card-JWx7telc.js → Card-BIz7fvGG.js} +1 -1
  21. package/client/chunks/{CardHorizontal-cwTzcdPn.js → CardHorizontal-D3EmPAtQ.js} +1 -1
  22. package/client/chunks/{CardStat-deYURObr.js → CardStat-CuoSn04e.js} +1 -1
  23. package/client/chunks/{CardsBlock--9Z-6IMt.js → CardsBlock-DeaUMWfY.js} +2 -2
  24. package/client/chunks/{ChartBlock-CRxqYYd9.js → ChartBlock-Brf47HfL.js} +1 -1
  25. package/client/chunks/{CheckboxGroup-4LpY4td_.js → CheckboxGroup-CIhczifo.js} +1 -1
  26. package/client/chunks/{CodeGenerator-R2fjRGec.js → CodeGenerator-CKHTV59K.js} +1 -1
  27. package/client/chunks/{CodeScannerField-benqjZhx.js → CodeScannerField-2V9Pi7Qg.js} +4 -4
  28. package/client/chunks/{CollapsedButtonGroup-BoTDgJy7.js → CollapsedButtonGroup-CmDI60pS.js} +2 -2
  29. package/client/chunks/{Container-BLHBNH4u.js → Container-ChKd1xlm.js} +1 -1
  30. package/client/chunks/{DataProvider-B4TGdRLv.js → DataProvider-Boj6DT4w.js} +1 -1
  31. package/client/chunks/{DatePicker-CAAqntSX.js → DatePicker-B8SXjEDo.js} +1 -1
  32. package/client/chunks/{DatePicker-DNe5ygQ0.js → DatePicker-Ca0U8k8J.js} +2 -2
  33. package/client/chunks/{DateRangePicker-DiHCuHR1.js → DateRangePicker-Bnafreq0.js} +2 -2
  34. package/client/chunks/{DateTimeField-BTHd4_t6.js → DateTimeField-Cun68Ybm.js} +3 -3
  35. package/client/chunks/{Divider-Dh89GmX6.js → Divider-GM-wc5bB.js} +1 -1
  36. package/client/chunks/{DonutChart-I8WVw2UV.js → DonutChart-Cg-0lpsQ.js} +2 -2
  37. package/client/chunks/{DynamicFilter-DbuGT5JT.js → DynamicFilter-C0VNdDYM.js} +4 -4
  38. package/client/chunks/{Embed-C85Mp0yH.js → Embed-BAwInFom.js} +2 -2
  39. package/client/chunks/{EmbeddedMap-Dyhu1Tgb.js → EmbeddedMap-B-FsIVJZ.js} +2 -2
  40. package/client/chunks/{Field-B4o_-BR6.js → Field-CcYbBX-_.js} +3 -3
  41. package/client/chunks/{FieldGroup-DA1Jv8Xw.js → FieldGroup-CNP4TyLx.js} +2 -2
  42. package/client/chunks/{Filter-3ZEBO2Lp.js → Filter-BsrnHifv.js} +8 -8
  43. package/client/chunks/{Form-BE4b519U.js → Form-irwCjM7u.js} +2 -2
  44. package/client/chunks/{FormBlock-B_BCDQpG.js → FormBlock-CjRCJB3I.js} +3 -3
  45. package/client/chunks/{FormBlockComponent-B9xQd-gy.js → FormBlockComponent-hjB-GUS0.js} +1 -1
  46. package/client/chunks/{FormStep-R4t4MF9Q.js → FormStep-BYL8YQ4x.js} +2 -2
  47. package/client/chunks/{GaugeChart-PIhcjvst.js → GaugeChart-CaRoYGaf.js} +2 -2
  48. package/client/chunks/{GridBlock-BAxSc-RV.js → GridBlock-CflRLSwY.js} +5 -5
  49. package/client/chunks/{Heading-BbTjBJau.js → Heading-BoI_612T.js} +1 -1
  50. package/client/chunks/{HistogramChart-Cs-mWJxd.js → HistogramChart-B_e5BctQ.js} +2 -2
  51. package/client/chunks/{Icon-BvKwEOGP.js → Icon-B_t21rz1.js} +2 -2
  52. package/client/chunks/{IconV2-O5aE473M.js → IconV2-CdkhV8m-.js} +2 -2
  53. package/client/chunks/{Image-ejkyVfGY.js → Image-DOdWK-u8.js} +2 -2
  54. package/client/chunks/{InnerForm-D4Bpq9lo.js → InnerForm-COdjck6A.js} +1 -1
  55. package/client/chunks/{Item-BsX2I-7r.js → Item-U-_JnnkX.js} +1 -1
  56. package/client/chunks/{JSONField-CXOSPzce.js → JSONField-CUV254qp.js} +3 -3
  57. package/client/chunks/{Layout-BOn3e3Ka.js → Layout-Dp3aYfmU.js} +4 -4
  58. package/client/chunks/{LineChart-exNJZ38i.js → LineChart-DDdQJZZn.js} +2 -2
  59. package/client/chunks/{Link-BRkE6yZf.js → Link-28-Eb_iP.js} +1 -1
  60. package/client/chunks/{LongFormField-BcEPiWX4.js → LongFormField-DCHtQ00P.js} +4 -4
  61. package/client/chunks/{MarkdownViewer-D5t79DCS.js → MarkdownViewer-brTw7efm.js} +2 -2
  62. package/client/chunks/{Modal-Ct6pf9NJ.js → Modal-CP9be8p-.js} +1 -1
  63. package/client/chunks/{MultiFieldSelect-ByR-EmPO.js → MultiFieldSelect-BloW9ext.js} +4 -4
  64. package/client/chunks/{MultiStepFormblock-TedRgldR.js → MultiStepFormblock-DHAR0rKe.js} +2 -2
  65. package/client/chunks/{Multiselect-4d8zcV4J.js → Multiselect-CLE_BDz7.js} +1 -1
  66. package/client/chunks/{Navigation-B2px50Iw.js → Navigation-CqpkE6ma.js} +1 -1
  67. package/client/chunks/{NumberField-BZduQtLY.js → NumberField-BZEZmU98.js} +2 -2
  68. package/client/chunks/{OptionsField-CT_mxlV0.js → OptionsField-CKDTDhwP.js} +3 -3
  69. package/client/chunks/{PDF-D8aefJ4M.js → PDF-CrXxlLWi.js} +1 -1
  70. package/client/chunks/{PDFTable-CiL0tJ4-.js → PDFTable-DeruvdMe.js} +1 -1
  71. package/client/chunks/{PasswordField-DAvD70mq.js → PasswordField-CpUXt8l9.js} +2 -2
  72. package/client/chunks/{PieChart-C22Tq23O.js → PieChart-BLT1fgcq.js} +2 -2
  73. package/client/chunks/{Placeholder-CoW81fhd.js → Placeholder-2A7YZwfn.js} +1 -1
  74. package/client/chunks/{RadioGroup-CnrepG5i.js → RadioGroup-CDFQZ-uZ.js} +1 -1
  75. package/client/chunks/{RatingField-DFbAZOtE.js → RatingField-C-YvZpMR.js} +2 -2
  76. package/client/chunks/{RelationshipField-BAQ2QoCl.js → RelationshipField-i79iKWEw.js} +3 -3
  77. package/client/chunks/{Repeater-Da1LJpSK.js → Repeater-BTA04ru-.js} +3 -3
  78. package/client/chunks/{RepeaterBlock-7Q7hW09R.js → RepeaterBlock-EF8GQaOH.js} +2 -2
  79. package/client/chunks/{RowExplorer-fGHV4WHp.js → RowExplorer-DPZmp5sb.js} +1 -1
  80. package/client/chunks/{S3Upload-0Wo0l-f2.js → S3Upload-B9NLUiSu.js} +2 -2
  81. package/client/chunks/{ScreenSlot-vy7wQDd3.js → ScreenSlot-Dz5WYSpf.js} +1 -1
  82. package/client/chunks/{Section-BRjwlt5F.js → Section-lsVmHK1E.js} +2 -2
  83. package/client/chunks/{SidePanel-6b6ekrzw.js → SidePanel-DLnMfc_a.js} +1 -1
  84. package/client/chunks/{SignatureField-Dg2X6FjF.js → SignatureField-DPmt6huH.js} +2 -2
  85. package/client/chunks/{SingleRowProvider-DZAHpZKG.js → SingleRowProvider-CVLjDBRF.js} +1 -1
  86. package/client/chunks/{Slider-0_b_FNhB.js → Slider-DK_Dqu1J.js} +2 -2
  87. package/client/chunks/{SpectrumCard-BZiARzgy.js → SpectrumCard-DsY0HA-8.js} +1 -1
  88. package/client/chunks/{StackedList-ClWjhPVG.js → StackedList-DKdj7Lo7.js} +1 -1
  89. package/client/chunks/{StringField-DRO4EvNk.js → StringField-BMISwvgB.js} +2 -2
  90. package/client/chunks/{Table-D0pjAtoo.js → Table-B-0GhJVa.js} +2 -2
  91. package/client/chunks/{TableBlock-BOurH_Xu.js → TableBlock-DaDsm3G6.js} +2 -2
  92. package/client/chunks/{Tag-9aHGmXSZ.js → Tag-CeYM0FxK.js} +1 -1
  93. package/client/chunks/{Text-A5TjMODf.js → Text-DjpJtze9.js} +1 -1
  94. package/client/chunks/{Text-1eXBPEip.js → Text-SJ8FrCYx.js} +1 -1
  95. package/client/chunks/{TextArea-Yls3Qmqj.js → TextArea-CJDYyJ_p.js} +1 -1
  96. package/client/chunks/{UserAvatar-SjdjVn5H.js → UserAvatar-IHll9J4h.js} +2 -2
  97. package/client/chunks/{___vite-browser-external_commonjs-proxy-DNP6fjXO.js → ___vite-browser-external_commonjs-proxy-CPgup3aJ.js} +1 -1
  98. package/client/chunks/{apexcharts.common-DyXYiW9V.js → apexcharts.common-CWiBueiV.js} +1 -1
  99. package/client/chunks/{blocks-DBd_LXze.js → blocks-nRYD6VGF.js} +1 -1
  100. package/client/chunks/{easymde-BRDoSkCy.js → easymde-B-ioWj0G.js} +2 -2
  101. package/client/chunks/{index-CEpuplWv.js → index-DZn8pSGc.js} +1 -1
  102. package/client/chunks/{index-t7Npr3xL.js → index-ZFIGbmuW.js} +2859 -2845
  103. package/client/chunks/{table-DA8oKm0p.js → table-Hl644Fqg.js} +1 -1
  104. package/client/chunks/{users-Bl5byVbk.js → users-3AgsUWPe.js} +1 -1
  105. package/client/chunks/{utc-BK3hf4j0.js → utc-BPrnDrJd.js} +1 -1
  106. package/dist/automation.js +2 -2
  107. package/dist/automation.js.map +1 -1
  108. package/dist/index.js +3 -3
  109. package/dist/index.js.map +1 -1
  110. package/dist/query.js +2 -2
  111. package/dist/query.js.map +1 -1
  112. package/package.json +2 -2
  113. package/src/ai/tools/budibase/rows.ts +1 -1
  114. package/src/automations/utils.ts +1 -1
package/dist/index.js CHANGED
@@ -437,7 +437,7 @@ l2HXiAD1Q2rlHNW9wDaYyKb1F5f+v4RyqCAyzlkwRdksmkLeECTboojNnmRCrE3C
437
437
  d/o3ZWE1TTj1zYwlCLN5qRKr3hU8nC3xEYNEbkB9SfTRaOq9Q7P8WmfLkoCPm3pR
438
438
  mwIDAQAB
439
439
  -----END PUBLIC KEY-----
440
- `;o(EC,"verifyLicenseToken");o(mPr,"sign")});var Qq={};G(Qq,{getOfflineFeatures:()=>dne});function dne(e){function t(r){let n=r[e];if(!n)throw new Error(`Features do not exist for planType=${e}`);return n}return o(t,"readFeatures"),t(hPr)}var hPr,pne=y(()=>{"use strict";P();$l();hPr={free:[...Uc.SELF_FREE_LICENSE.features],premium:["appBackups","branding","viewPermissions","pdf"],premium_plus:["appBackups","branding","syncAutomations","viewPermissions","triggerAutomationRun","viewReadonlyColumns","aiCustomConfigs","pdf","budibaseAI"],premium_plus_trial:["appBackups","branding","syncAutomations","viewPermissions","triggerAutomationRun","viewReadonlyColumns","aiCustomConfigs","pdf","budibaseAI"],pro:["userGroups","appBackups"],team:["userGroups","appBackups"],business:["userGroups","appBackups","environmentVariables","auditLogs","branding","syncAutomations","expandedPublicApi","viewPermissions","pdf","budibaseAI"],enterprise_basic:["userGroups","appBackups","environmentVariables","enforceableSSO","auditLogs","branding","syncAutomations","offline","expandedPublicApi","workspaceImportExport","viewPermissions","triggerAutomationRun","scim","viewReadonlyColumns","aiCustomConfigs","pwa","customAppScripts","pdf","budibaseAI","recaptcha","pkceOidc","translations"],enterprise_basic_trial:["userGroups","appBackups","environmentVariables","enforceableSSO","branding","syncAutomations","expandedPublicApi","workspaceImportExport","viewPermissions","triggerAutomationRun","scim","viewReadonlyColumns","aiCustomConfigs","pwa","customAppScripts","pdf","budibaseAI","recaptcha","pkceOidc","translations"],enterprise:["userGroups","appBackups","environmentVariables","enforceableSSO","auditLogs","branding","syncAutomations","offline","expandedPublicApi","workspaceImportExport","viewPermissions","triggerAutomationRun","scim","viewReadonlyColumns","aiCustomConfigs","pwa","customAppScripts","pdf","budibaseAI","recaptcha","pkceOidc","translations"]};o(dne,"getOfflineFeatures")});var zq={};G(zq,{UNLIMITED:()=>ne,getQuotas:()=>mne});function mne(e,t){let r;function n(i){let s=i[t];if(!s)throw new Error(`Quotas do not exist for planType=${t} and hosting=${e}`);return s}switch(o(n,"readQuotas"),e){case"self":r=n(yPr);break;case"cloud":r=n(gPr);break}return JSON.parse(JSON.stringify(r))}var K,Net,ne,Au,gPr,yPr,hne=y(()=>{"use strict";P();$l();K=ih,Net=Uc,ne=-1,Au=o(e=>e*1e6,"millions"),gPr={free:{...Net.CLOUD_FREE_LICENSE.quotas},premium:{usage:{monthly:{...K.queries(ne),...K.automations(1e3),...K.budibaseAICredits(0),...K.actions(ne)},static:{...K.rows(1e4),...K.apps(ne),...K.users(ne),...K.creators(ne),...K.userGroups(0),...K.plugins(ne),...K.customAIConfigurations(0)}},constant:{...K.automationLogRetentionDays(7),...K.appBackupRetentionDays(7)}},premium_plus:{usage:{monthly:{...K.queries(ne),...K.automations(5e3),...K.budibaseAICredits(Au(2)),...K.actions(ne)},static:{...K.rows(25e3),...K.apps(ne),...K.users(ne),...K.creators(ne),...K.userGroups(0),...K.plugins(ne),...K.customAIConfigurations(1)}},constant:{...K.automationLogRetentionDays(30),...K.appBackupRetentionDays(30)}},premium_plus_trial:{usage:{monthly:{...K.queries(ne),...K.automations(5e3),...K.budibaseAICredits(Au(2)),...K.actions(ne)},static:{...K.rows(25e3),...K.apps(ne),...K.users(ne),...K.creators(ne),...K.userGroups(0),...K.plugins(ne),...K.customAIConfigurations(1)}},constant:{...K.automationLogRetentionDays(30),...K.appBackupRetentionDays(30)}},pro:{usage:{monthly:{...K.queries(ne),...K.automations(1e3),...K.budibaseAICredits(Au(2)),...K.actions(ne)},static:{...K.rows(ne),...K.apps(ne),...K.users(ne),...K.creators(ne),...K.userGroups(5),...K.plugins(ne),...K.customAIConfigurations(0)}},constant:{...K.automationLogRetentionDays(7),...K.appBackupRetentionDays(7)}},team:{usage:{monthly:{...K.queries(ne),...K.automations(5e3),...K.budibaseAICredits(0),...K.actions(ne)},static:{...K.rows(ne),...K.apps(ne),...K.users(ne),...K.creators(ne),...K.userGroups(10),...K.plugins(ne),...K.customAIConfigurations(0)}},constant:{...K.automationLogRetentionDays(30),...K.appBackupRetentionDays(90)}},business:{usage:{monthly:{...K.queries(ne),...K.automations(1e4),...K.budibaseAICredits(Au(2)),...K.actions(ne)},static:{...K.rows(5e4),...K.apps(ne),...K.users(ne),...K.creators(ne),...K.userGroups(50),...K.plugins(ne),...K.customAIConfigurations(0)}},constant:{...K.automationLogRetentionDays(365),...K.appBackupRetentionDays(365)}},enterprise_basic:{usage:{monthly:{...K.queries(ne),...K.automations(ne),...K.budibaseAICredits(Au(4)),...K.actions(ne)},static:{...K.rows(ne),...K.apps(ne),...K.users(ne),...K.creators(ne),...K.userGroups(ne),...K.plugins(ne),...K.customAIConfigurations(ne)}},constant:{...K.automationLogRetentionDays(ne),...K.appBackupRetentionDays(ne)}},enterprise_basic_trial:{usage:{monthly:{...K.queries(ne),...K.automations(ne),...K.budibaseAICredits(Au(4)),...K.actions(ne)},static:{...K.rows(ne),...K.apps(ne),...K.users(ne),...K.creators(ne),...K.userGroups(ne),...K.plugins(ne),...K.customAIConfigurations(ne)}},constant:{...K.automationLogRetentionDays(15),...K.appBackupRetentionDays(15)}},enterprise:{usage:{monthly:{...K.queries(ne),...K.automations(ne),...K.budibaseAICredits(Au(4)),...K.actions(ne)},static:{...K.rows(ne),...K.apps(ne),...K.users(ne),...K.creators(ne),...K.userGroups(ne),...K.plugins(ne),...K.customAIConfigurations(ne)}},constant:{...K.automationLogRetentionDays(ne),...K.appBackupRetentionDays(ne)}}},yPr={free:{...Net.SELF_FREE_LICENSE.quotas},premium:void 0,premium_plus:{usage:{monthly:{...K.queries(ne),...K.automations(ne),...K.budibaseAICredits(Au(2)),...K.actions(ne)},static:{...K.rows(ne),...K.apps(ne),...K.users(ne),...K.creators(ne),...K.userGroups(0),...K.plugins(ne),...K.customAIConfigurations(1)}},constant:{...K.automationLogRetentionDays(30),...K.appBackupRetentionDays(30)}},premium_plus_trial:{usage:{monthly:{...K.queries(ne),...K.automations(ne),...K.budibaseAICredits(Au(2)),...K.actions(ne)},static:{...K.rows(ne),...K.apps(ne),...K.users(ne),...K.creators(ne),...K.userGroups(0),...K.plugins(ne),...K.customAIConfigurations(1)}},constant:{...K.automationLogRetentionDays(30),...K.appBackupRetentionDays(30)}},pro:{usage:{monthly:{...K.queries(ne),...K.automations(ne),...K.budibaseAICredits(0),...K.actions(ne)},static:{...K.rows(ne),...K.apps(ne),...K.users(ne),...K.creators(ne),...K.userGroups(5),...K.plugins(ne),...K.customAIConfigurations(0)}},constant:{...K.automationLogRetentionDays(7),...K.appBackupRetentionDays(7)}},team:{usage:{monthly:{...K.queries(ne),...K.automations(ne),...K.budibaseAICredits(0),...K.actions(ne)},static:{...K.rows(ne),...K.apps(ne),...K.users(ne),...K.creators(ne),...K.userGroups(10),...K.plugins(ne),...K.customAIConfigurations(0)}},constant:{...K.automationLogRetentionDays(30),...K.appBackupRetentionDays(90)}},business:{usage:{monthly:{...K.queries(ne),...K.automations(ne),...K.budibaseAICredits(0),...K.actions(ne)},static:{...K.rows(ne),...K.apps(ne),...K.users(ne),...K.creators(ne),...K.userGroups(50),...K.plugins(ne),...K.customAIConfigurations(0)}},constant:{...K.automationLogRetentionDays(90),...K.appBackupRetentionDays(365)}},enterprise_basic:{usage:{monthly:{...K.queries(ne),...K.automations(ne),...K.budibaseAICredits(Au(4)),...K.actions(ne)},static:{...K.rows(ne),...K.apps(ne),...K.users(ne),...K.creators(ne),...K.userGroups(ne),...K.plugins(ne),...K.customAIConfigurations(ne)}},constant:{...K.automationLogRetentionDays(ne),...K.appBackupRetentionDays(ne)}},enterprise_basic_trial:{usage:{monthly:{...K.queries(ne),...K.automations(ne),...K.budibaseAICredits(Au(4)),...K.actions(ne)},static:{...K.rows(ne),...K.apps(ne),...K.users(ne),...K.creators(ne),...K.userGroups(ne),...K.plugins(ne),...K.customAIConfigurations(ne)}},constant:{...K.automationLogRetentionDays(15),...K.appBackupRetentionDays(15)}},enterprise:{usage:{monthly:{...K.queries(ne),...K.automations(ne),...K.budibaseAICredits(Au(4)),...K.actions(ne)},static:{...K.rows(ne),...K.apps(ne),...K.users(ne),...K.creators(ne),...K.userGroups(ne),...K.plugins(ne),...K.customAIConfigurations(ne)}},constant:{...K.automationLogRetentionDays(ne),...K.appBackupRetentionDays(ne)}}};o(mne,"getQuotas")});async function bPr(e){return(await U.getAllWorkspaces({all:!0,idsOnly:!0})).includes(e)}var Let=y(()=>{"use strict";F();o(bPr,"workspaceExists")});var Nv={};G(Nv,{base64ToObject:()=>wPr,objectToBase64:()=>_Pr});function _Pr(e){let t=JSON.stringify(e);return Buffer.from(t).toString("base64")}function wPr(e){let t=Buffer.from(e,"base64").toString();return JSON.parse(t)}var Met=y(()=>{"use strict";o(_Pr,"objectToBase64");o(wPr,"base64ToObject")});var SC={};G(SC,{encoding:()=>Nv,workspaceExists:()=>bPr});var gne=y(()=>{"use strict";Let();Met()});async function EPr(e){await Su.save({offlineLicenseToken:e}),await ab()}async function vPr(){await Su.save({offlineLicenseToken:void 0}),await ab()}async function Bet(){return(await Su.get()).offlineLicenseToken}async function yne(){let t=(await Ml.getInstall()).installId,r=I.getTenantId(),n=await ue.identification.getUniqueTenantId(r);return{installId:t,tenantId:n}}async function SPr(){let e=await yne();return Nv.objectToBase64(e)}function TPr(e){return Nv.base64ToObject(e)}function qet(e){let t=Date.now(),r=new Date(e.expireAt).getTime();if(t>r)throw new Error(`Offline license has expired. expireAt=${e.expireAt}`)}async function Wet(e){let t=await yne();if(e.identifier.installId!==t.installId||e.identifier.tenantId!==t.tenantId)throw new Error("Invalid offline license")}function jet(e){let t=e.plan.type,r="self",n=dne(t),i=mne(r,t);return e.features=(0,Uet.default)(e.features,n),e.quotas=(0,Fet.default)(e.quotas,i),e}async function bne(){try{let e=await Bet();if(e){let t=await EC(e);return qet(t),await Wet(t),jet(t)}}catch(e){console.error("Error retrieving offline license",e)}}var Uet,Fet,$et=y(()=>{"use strict";Gl();Yq();Kq();pne();hne();gne();P();F();Uet=q(require("lodash/union")),Fet=q(require("lodash/merge"));o(EPr,"activateOfflineLicenseToken");o(vPr,"deleteOfflineLicenseToken");o(Bet,"getOfflineLicenseToken");o(yne,"getIdentifier");o(SPr,"getIdentifierBase64");o(TPr,"getIdentifierFromBase64");o(qet,"verifyExpiry");o(Wet,"verifyInstallation");o(jet,"enrichLicense");o(bne,"getOfflineLicense")});var AC={};G(AC,{deleteDevLicense:()=>xPr,getOfflineLicense:()=>IPr,writeDevLicenseToDisk:()=>OPr});function IPr(){try{if(ub.default.existsSync(TC)){let e=ub.default.readFileSync(TC,{encoding:"utf-8"});return EC(e)}}catch(e){console.error("Error retrieving offline license from disk",e)}}function OPr(e){console.log(`Writing license to: ${TC}`),ub.default.writeFileSync(TC,e,{encoding:"utf-8"})}function xPr(){ub.default.rmSync(TC,{force:!0})}var wne,Vet,ub,APr,_ne,RPr,TC,Get=y(()=>{"use strict";F();wne=require("path"),Vet=require("os"),ub=q(require("fs"));Kq();APr=L.isTest()?".budibase-test":".budibase",_ne=(0,wne.join)((0,Vet.tmpdir)(),APr),RPr="dev_license.txt",TC=(0,wne.join)(_ne,RPr);if(!ub.default.existsSync(_ne))try{ub.default.mkdirSync(_ne)}catch{}o(IPr,"getOfflineLicense");o(OPr,"writeDevLicenseToDisk");o(xPr,"deleteDevLicense")});var Jq={};G(Jq,{activateOfflineLicenseToken:()=>EPr,deleteOfflineLicenseToken:()=>vPr,dev:()=>AC,enrichLicense:()=>jet,getIdentifier:()=>yne,getIdentifierBase64:()=>SPr,getIdentifierFromBase64:()=>TPr,getOfflineLicense:()=>bne,getOfflineLicenseToken:()=>Bet,signing:()=>vC,verifyExpiry:()=>qet,verifyInstallation:()=>Wet});var Ene=y(()=>{"use strict";$et();Kq();Get()});var Het,vne,Sne,Tne,Ket=y(()=>{"use strict";wC();$l();F();Ene();Het=require("dd-trace"),vne=o(async()=>await Het.tracer.trace("getLicense",async e=>{if(L.OFFLINE_MODE)return e.addTags({offline:!0}),bne();let t=await kv();return t||(e.addTags({offlineFallback:!0}),t=AC.getOfflineLicense()),t}),"getLicense"),Sne=o(e=>cne(e),"getLicenseFromKey"),Tne=o(()=>L.SELF_HOSTED?Uc.SELF_FREE_LICENSE:Uc.CLOUD_FREE_LICENSE,"getFreeLicense")});var Rne={};G(Rne,{activateLicenseKey:()=>CPr,deleteLicenseKey:()=>DPr,getLicenseKey:()=>Xq});async function CPr(e){await lne(e),await Su.save({licenseKey:e}),await ab()}async function Xq(){return await Ane.default.trace("getLicenseKey",async e=>{let t=await Su.get();return e.addTags({licenseKey:t.licenseKey}),t.licenseKey})}async function DPr(){return await Ane.default.trace("deleteLicenseKey",async()=>{await Su.save({licenseKey:void 0}),await ab()})}var Ane,Ine=y(()=>{"use strict";wC();Gl();Yq();Ane=q(require("dd-trace"));o(CPr,"activateLicenseKey");o(Xq,"getLicenseKey");o(DPr,"deleteLicenseKey")});var One=y(()=>{"use strict";Ket();wC();Ene();Ine();pne();hne()});var RC,kPr,NPr,Zq,Qet=y(()=>{"use strict";F();kPr=o(async()=>{RC=await so.init(Ur.utils.Databases.LICENSES)},"init"),NPr=o(async()=>{RC&&await RC.finish()},"shutdown");process.on("exit",async()=>{await NPr()});Zq=o(async()=>(RC||await kPr(),RC),"getClient")});var e2,Cne,Yet,MPr,ab,zet,Jet,xne,Xet,Zet,ett=y(()=>{"use strict";e2=q(require("dd-trace"));F();P();One();Qet();_e();Cne=Cr.fromHours(1).toSeconds(),Yet=Cr.fromHours(1).toSeconds(),MPr=Cne+Yet,ab=o(async()=>{await Zet(),await Xet()},"refresh"),zet=o(async e=>{let{result:t}=await fo.doWithLock({type:"default",name:"sync_account_license",resource:e,ttl:Cr.fromSeconds(10).toMs()},async()=>{let r=await Zq(),n=await r.get(e);if(n&&!Jet(n))return n;let i=await e2.default.trace("populateLicense",async()=>await vne());return i||(i=e2.default.trace("populateFreeLicense",()=>Tne())),i.refreshedAt=new Date().toISOString(),await r.store(e,i,MPr),i});return t},"populateAndStoreLicense"),Jet=o(e=>{let t=e.refreshedAt?Date.parse(e.refreshedAt):0;return Date.now()-t>=Cne*1e3},"shouldRefreshLicense"),xne=o(async()=>await e2.default.trace("getCachedLicense",async e=>{let t=I.getLicense();if(t)return e.addTags({foundInContext:!0,features:t.features,plan:t.plan,quotas:t.quotas}),t;let r=we.getTenantId(),i=await(await Zq()).get(r);return e.addTags({tenantId:r,foundInCache:!!i}),i?(e.addTags({foundInCache:!0,refreshedAt:i.refreshedAt,features:i.features,plan:i.plan,quotas:i.quotas}),Jet(i)&&zet(r).catch(()=>{}),i):(i=await be.retry(()=>zet(r)),e.addTags({refreshedAt:i.refreshedAt,features:i.features,plan:i.plan,quotas:i.quotas,expirySeconds:Cne,staleGraceSeconds:Yet}),i)}),"_getCachedLicense");L.isJest()&&(xne=jest.fn().mockImplementation(xne));Xet=xne,Zet=o(async()=>{let e=we.getTenantId();await(await Zq()).delete(e)},"invalidate")});var Fc={};G(Fc,{getCachedLicense:()=>Xet,invalidate:()=>Zet,refresh:()=>ab});var Yq=y(()=>{"use strict";ett()});var Ii={};G(Ii,{cache:()=>Fc,client:()=>sh,features:()=>Qq,getFreeLicense:()=>Tne,getLicense:()=>vne,getLicenseFromKey:()=>Sne,keys:()=>Rne,offline:()=>Jq,quotas:()=>zq});var xv=y(()=>{"use strict";Yq();One()});async function Oi(e,t){Array.isArray(e)||(e=[e]),t||(t=await Fc.getCachedLicense());for(let r of e)if(!t?.features.includes(r))return!1;return!0}async function t2(e,t){if(!await Oi(e,t))throw new gv(e)}async function Dne(e,t){if(!await Oi(e,t)){let r=e.join(", ");throw new gv(r)}}function hs(e){return async(...t)=>(await t2("appBackups"),e(...t))}async function Pne(){return Oi("appBackups")}async function kne(){return Oi("branding")}async function ttt(){return Oi("enforceableSSO")}async function UPr(){return Oi("syncAutomations")}async function FPr(){return Oi("triggerAutomationRun")}async function r2(){return Oi("auditLogs")}async function Nne(){return Oi("userGroups")}function BPr(){return Oi("pwa")}function qPr(){return Oi("recaptcha")}async function jPr(){return Oi("translations")}async function Lv(){return Oi("expandedPublicApi")}async function $Pr(){return Oi("workspaceImportExport")}async function n2(){return Oi(["expandedPublicApi","workspaceImportExport"])}async function VPr(e){if(L.ENABLE_SSO_MAINTENANCE_MODE||!await ttt())return!1;let r;return e?.config?r=e.config:r=await Dr.getSettingsConfig(),!!r.isSSOEnforced}async function GPr(){return Oi("viewPermissions")}async function HPr(){return Oi("viewReadonlyColumns")}var WPr,Lne,rtt=y(()=>{"use strict";F();P();xv();o(Oi,"areFeaturesEnabled");o(t2,"checkFeature");o(Dne,"checkFeatures");o(hs,"checkBackups");o(Pne,"isBackupsEnabled");o(kne,"isBrandingEnabled");o(ttt,"isEnforceableSSO");o(UPr,"isSyncAutomationsEnabled");o(FPr,"isTriggerAutomationRunEnabled");o(r2,"isAuditLogsEnabled");o(Nne,"isUserGroupsEnabled");o(BPr,"isPWAEnabled");o(qPr,"isRecaptchaEnabled");WPr=o(()=>Oi("pkceOidc"),"isPkceOidcEnabled");o(jPr,"isTranslationsEnabled");o(Lv,"isExpandedPublicApiEnabled");o($Pr,"isWorkspaceImportExportEnabled");o(n2,"isWorkspaceImportExportPublicApiEnabled");o(VPr,"isSSOEnforced");Lne=o(async()=>{let e="scim",t=await Oi(e),r=await Dr.getSCIMConfig();if(!t||!r?.enabled)throw new gv(e);return!0},"checkSCIM");o(GPr,"isViewPermissionEnabled");o(HPr,"isViewReadonlyColumnsEnabled")});var qn={};G(qn,{checkBackups:()=>hs,checkFeature:()=>t2,checkFeatures:()=>Dne,checkSCIM:()=>Lne,isAuditLogsEnabled:()=>r2,isBackupsEnabled:()=>Pne,isBrandingEnabled:()=>kne,isEnforceableSSO:()=>ttt,isExpandedPublicApiEnabled:()=>Lv,isPWAEnabled:()=>BPr,isPkceOidcEnabled:()=>WPr,isRecaptchaEnabled:()=>qPr,isSSOEnforced:()=>VPr,isSyncAutomationsEnabled:()=>UPr,isTranslationsEnabled:()=>jPr,isTriggerAutomationRunEnabled:()=>FPr,isUserGroupsEnabled:()=>Nne,isViewPermissionEnabled:()=>GPr,isViewReadonlyColumnsEnabled:()=>HPr,isWorkspaceImportExportEnabled:()=>$Pr,isWorkspaceImportExportPublicApiEnabled:()=>n2});var Ru=y(()=>{"use strict";rtt()});async function QPr(e){return await kne()?{faviconUrl:e.faviconUrl,faviconUrlEtag:e.faviconUrlEtag,emailBrandingEnabled:e.emailBrandingEnabled,platformTitle:e.platformTitle,loginHeading:e.loginHeading,loginButton:e.loginButton,metaDescription:e.metaDescription,metaImageUrl:e.metaImageUrl,metaTitle:e.metaTitle}:KPr}var KPr,ntt=y(()=>{"use strict";Ru();KPr={faviconUrl:void 0,faviconUrlEtag:void 0,emailBrandingEnabled:!0,platformTitle:void 0,loginHeading:void 0,loginButton:void 0,metaDescription:void 0,metaImageUrl:void 0,metaTitle:void 0};o(QPr,"getBrandingConfig")});var IC={};G(IC,{getBrandingConfig:()=>QPr});var itt=y(()=>{"use strict";ntt()});async function Mne(e){if(L.SELF_HOSTED)return e;for(let t of Object.values(e.config))if(t.provider==="BudibaseAI")return e;return e.config[zPr]={provider:"BudibaseAI",active:!0,isDefault:Object.keys(e.config).every(t=>!e.config[t].isDefault),defaultModel:process.env.BUDIBASE_AI_DEFAULT_MODEL||"gpt-5-mini",name:"Budibase AI"},e}var zPr,ott=y(()=>{"use strict";F();zPr="budibase_ai";o(Mne,"enrichAIConfig")});var Une={};G(Une,{enrichAIConfig:()=>Mne});var Fne=y(()=>{"use strict";ott()});var cb,Na,lb,stt,Ud,OC,xC,YPr,JPr,XPr,Mv,i2,Bne,Hl=y(()=>{"use strict";F();P();cb=require("dd-trace");$l();Gl();Uq();xv();Na=o(async(e,t,r)=>await cb.tracer.trace("quotas.increment",async n=>(n.addTags({name:e,type:t}),await stt({change:1,name:e,type:t,opts:r}))),"increment"),lb=o(e=>cb.tracer.trace("quotas.incrementMany",async()=>stt(e)),"incrementMany"),stt=o(async e=>await cb.tracer.trace("quotas.tryIncrement",async t=>{let r=Array.isArray(e)?e:[e];t.addTags({numActions:r.length}),await Mv(r.map(i=>({usageChange:i.change,name:i.name,type:i.type,opts:{dryRun:!0,suppressErrorLog:i.opts?.suppressErrorLog,id:i.opts?.id}})));let n=[];for(let i of r)await cb.tracer.trace("quotas.incrementMany.fn",async s=>{s.addTags({actionName:i.name,actionType:i.type,actionChange:i.change});let a=i.opts?.fn;a&&n.push(await a())});return await Mv(r.map(i=>({usageChange:i.change,name:i.name,type:i.type,opts:{dryRun:!1,valueFn:i.opts?.valueFn,suppressErrorLog:i.opts?.suppressErrorLog,id:i.opts?.id}}))),n[0]}),"tryIncrement"),Ud=o((e,t,r={})=>Mv({usageChange:-1,name:e,type:t,opts:r}),"decrement"),OC=o(e=>{let t=Array.isArray(e)?e:[e];return Mv(t.map(r=>({usageChange:-r.change,name:r.name,type:r.type,opts:r.opts})))},"decrementMany"),xC=o(async(e,t,r)=>Mc.setUsage(r,e,t),"set"),YPr=o((e,t,r)=>{if(e=="static"){let n=r.usageQuota.triggers;return n?n[t]||{}:{}}else{let n=Mc.utils.getCurrentMonthString(),i=r.monthly[n].triggers;return i?i[t]||{}:{}}},"getExistingTriggers"),JPr=o(async(e,t,r,n)=>{try{await fo.doWithLock({type:"try_once",name:"trigger_quota",resource:e,ttl:1e4},async()=>{let i={percentage:r,name:t.name};n&&(i.resetDate=n),await sh.triggerQuota(i)})}catch(i){Be.logAlert("Error triggering quota",i)}},"triggerQuota"),XPr=o(async(e,t,r,n)=>{let i=await ob(),s=e==="monthly"?i.quotaReset:void 0,a=await YPr(e,t,i),u=n.triggers,c=r/n.value*100;c>100&&(c=100);for(let[l,f]of u.entries())if(c>=f&&n.value!==ih.UNLIMITED){if(!a[f]){a[f]=new Date().toISOString();let p=u[l+1]||100;(!(c>=p)||c===f)&&await JPr(t,n,c,s)}}else a[f]=void 0;return a},"checkTriggers"),Mv=o(async e=>{await cb.tracer.trace("quotas.updateUsage",async t=>{let r=we.getTenantId(),n=Array.isArray(e)?e:[e];t.addTags({numActions:n.length,tenantId:r});let i,s,a=[],u={},c={},l={},f={};for(let p of n)await cb.tracer.trace("quotas.updateUsage.action",async m=>{m.addTags({actionName:p.name,actionType:p.type,actionUsageChange:p.usageChange});try{i=I.getWorkspaceId()}catch{}if(x_.includes(p.name)&&!i)throw new Error("App context required for quota update");try{s=await i2("usage",p.name,p.type),a.push(s);let{total:g,app:b,breakdown:w}=await Mc.getCurrentUsageValues(p.type,p.name,p.opts?.id);g+=p.usageChange,b!=null&&(b+=p.usageChange),w!=null&&(w+=p.usageChange);let E={};if(p.opts?.dryRun||(E=await XPr(p.type,p.name,g,s),f={...f,[p.name]:E}),s.value!==ih.UNLIMITED&&g>s.value&&p.usageChange>0)throw new D1(`${p.name}`);if(g=Math.max(0,g),b&&(b=Math.max(0,b)),w&&(w=Math.max(0,w),l={...l,[p.name]:w}),!p.opts?.dryRun){let v=p.opts?.valueFn;v&&(g=await v(),b=g),u={...u,[p.name]:g},c={...c,[p.name]:b}}}catch(g){throw p.opts?.suppressErrorLog||console.error(`Error updating usage quotas for ${p.name}`,g),g}});let d=n.filter(p=>!p.opts?.dryRun).map(p=>({name:p.name,type:p.type,values:{total:u[p.name],app:c[p.name],breakdown:l[p.name],triggers:f[p.name]},opts:{...p.opts,tenantId:r}}));d.length>0&&await Mc.setAllUsage(d)})},"updateUsage"),i2=o(async(e,t,r)=>{let n=await Fc.getCachedLicense();if(!n){let i=we.getTenantId();throw new Error("License not found for tenant id "+i)}if(r&&cye(e,r,t))return n.quotas[e][r][t];if(r&&lye(e,r,t))return n.quotas[e][r][t];if(fye(e,t))return n.quotas[e][t];throw new Error("Invalid quota type")},"getLicensedQuota"),Bne=o(async({name:e,type:t,usageChange:r})=>{try{return await Mv({usageChange:r,name:e,type:t,opts:{dryRun:!0}}),!1}catch(n){if(n.code==="usage_limit_exceeded")return!0;throw n}},"usageLimitIsExceeded")});var ZPr,att=y(()=>{"use strict";P();Hl();ZPr=o(async e=>Na("actions","monthly",{fn:e}),"addAction")});var utt,ekr,tkr,ctt=y(()=>{"use strict";F();P();Hl();utt=o(async()=>{let e=await U.getAllWorkspaces({dev:!0});return e?e.length:0},"getDevAppsCount"),ekr=o(async(e,{appId:t}={})=>Na("apps","static",{fn:e,valueFn:utt,id:t}),"addApp"),tkr=o(async({appId:e}={})=>Ud("apps","static",{valueFn:utt,id:e}),"removeApp")});var rkr,nkr,ikr,okr,ltt=y(()=>{"use strict";Hl();P();rkr=o(async(e,{tableId:t}={})=>Na("rows","static",{fn:e,id:t}),"addRow"),nkr=o(async({tableId:e}={})=>Ud("rows","static",{id:e}),"removeRow"),ikr=o(async(e,t,{tableId:r}={})=>lb({change:e,name:"rows",type:"static",opts:{fn:t,id:r}}),"addRows"),okr=o(async(e,{tableId:t}={})=>OC({change:e,name:"rows",type:"static",opts:{id:t}}),"removeRows")});var skr,ftt=y(()=>{"use strict";Hl();P();skr=o(async(e,{automationId:t}={})=>Na("automations","monthly",{fn:e,id:t}),"addAutomation")});var qne,Wne,dtt=y(()=>{"use strict";Hl();P();qne=o(async e=>Na("userGroups","static",{fn:e}),"addGroup"),Wne=o(async()=>Ud("userGroups","static"),"removeGroup")});var jne,$ne,Vne,ptt=y(()=>{"use strict";Hl();P();jne=o(async e=>Na("plugins","static",{fn:e}),"addPlugin"),$ne=o(async()=>Ud("plugins","static"),"removePlugin"),Vne=o(async e=>xC("plugins","static",e),"updatePluginCount")});var o2,Uv,mtt=y(()=>{"use strict";Hl();P();F();wC();o2=o(async(e,t,r)=>{let n=[{change:e,name:"users",type:"static",opts:{fn:r,valueFn:ze.getUserCount}}];t>0&&n.push({change:t,name:"creators",type:"static",opts:{valueFn:ze.getCreatorCount}});let i=await lb(n);return await kv(),i},"addUsers"),Uv=o(async(e,t)=>{let r=[{change:e,name:"users",type:"static",opts:{valueFn:ze.getUserCount}}];t>0&&r.push({change:t,name:"creators",type:"static",opts:{valueFn:ze.getCreatorCount}}),await OC(r),await kv()},"removeUsers")});var s2,a2,Gne=y(()=>{"use strict";F();P();s2=class extends j{static{o(this,"GroupNameUnavailableError")}constructor(t){super(`Group name "${t}" is unavailable`,409)}},a2=class extends j{static{o(this,"AICreditsExhaustedError")}constructor(){super("You have reached your Budibase AI Credits limit for this billing cycle.",402),this.code="usage_limit_exceeded"}getPublicError(){return{quota:"budibaseAICredits"}}}});var u2,akr,c2,htt,gtt=y(()=>{"use strict";Hl();P();Gne();u2=o(async e=>{try{return await lb({change:e,name:"budibaseAICredits",type:"monthly"})}catch(t){throw t.code==="usage_limit_exceeded"&&await akr().catch(()=>{}),t}},"incrementBudibaseAICredits"),akr=o(async()=>{let e=await i2("usage","budibaseAICredits","monthly");e.value>=0&&await htt(e.value)},"capBudibaseAICreditsAtLimit"),c2=o(async()=>{if(await Bne({name:"budibaseAICredits",type:"monthly",usageChange:1}))throw new a2},"throwIfBudibaseAICreditsExceeded"),htt=o(async e=>xC("budibaseAICredits","monthly",e),"setBudibaseAICredits")});var ytt=y(()=>{"use strict";att();ctt();ltt();ftt();dtt();ptt();mtt();gtt()});var ot={};G(ot,{addAction:()=>ZPr,addApp:()=>ekr,addAutomation:()=>skr,addGroup:()=>qne,addPlugin:()=>jne,addRow:()=>rkr,addRows:()=>ikr,addUsers:()=>o2,bustCache:()=>qre,decrement:()=>Ud,decrementMany:()=>OC,getCurrentUsageValues:()=>HZe,getLicensedQuota:()=>i2,getQuotaUsage:()=>ob,increment:()=>Na,incrementBudibaseAICredits:()=>u2,incrementMany:()=>lb,removeApp:()=>tkr,removeGroup:()=>Wne,removePlugin:()=>$ne,removeRow:()=>nkr,removeRows:()=>okr,removeUsers:()=>Uv,set:()=>xC,setAllUsage:()=>jre,setAppUsageValue:()=>Wre,setBudibaseAICredits:()=>htt,setUsage:()=>$Ze,setUsagePerApp:()=>VZe,throwIfBudibaseAICreditsExceeded:()=>c2,updatePluginCount:()=>Vne,updateUsage:()=>Mv,usageLimitIsExceeded:()=>Bne,utils:()=>tC});var Fv=y(()=>{"use strict";Uq();ytt();Hl()});async function Hne(e,t){try{let r=[];for(let u of e)if(u.roles){let c=u.roles[U.getProdWorkspaceID(t)];c&&r.push(c)}let n=await Promise.all(r.map(async u=>({[u]:await Se.roleToNumber(u)}))),i,s,a={};n.forEach(u=>{let[c,l]=Object.entries(u)[0];a[c]={roleId:c,roleNum:l}});for(let{roleId:u,roleNum:c}of Object.values(a))(s===void 0||c>s)&&(s=c,i=u);return i}catch(r){throw Be.logAlert(`Error finding higest role for ${e.length} on app ${t}`,r),r}}async function wtt(e,t){return t?t=t.filter(r=>e.includes(r._id)):t=await yn.getBulk(e,{enriched:!1}),t}async function Ett(e,t){if(!e.userGroups)return[];let r=await wtt(e.userGroups,t?.groups),n=t?.appId?U.getProdWorkspaceID(t?.appId):null,i=[];for(let s of r){let a=s.builder?.apps;n&&a?.includes(n)?i.push(n):n||(i=i.concat(a||[]))}return[...new Set(i)]}async function ukr(e,t,r){if(!e.userGroups)return null;let n=await wtt(e.userGroups,r?.groups),i=U.getProdWorkspaceID(t);return e.roles?.[i]?e.roles[i]:(n=n.filter(u=>u?.roles?Object.keys(u.roles).includes(i):!1),I.getCurrentContext()?.appId===t?Hne(n,t):await I.doInWorkspaceContext(t,async()=>Hne(n,t)))}async function ckr(e){if(!e||!e.userGroups)return e;let t=await Stt(e.userGroups,{enriched:!1}),r=[];for(let i of t)i?.roles&&(r=r.concat(Object.keys(i.roles)));r=[...new Set(r)];for(let i of r)await I.doInWorkspaceContext(i,async()=>{if(e.roles[i])return;let s=await Hne(t,i);s&&(e.roles[i]=s)});let n=await Ett(e,{groups:t});if(n.length&&!e.builder?.global){let i=e.builder?.apps||[];e.builder={...e.builder,apps:i.concat(n)}}return e}async function Kne(){return await yn.fetch()}async function vtt(e){return await yn.get(e)}async function Stt(e,t={enriched:!0}){return yn.getBulk(e,t)}async function btt(e){if(await yn.getByName(e))throw new s2(e)}async function _tt(e){let t=await yn.getGroupUsers(e._id);if(!t.length)return 0;let n=await we.getGlobalDB().getMultiple(t.map(s=>s._id));return(await Km.creatorsInList(n)).filter(s=>s).length}async function Ttt(e){let t=[],r=!e._id,n=0;if(!e._id)e._id=yn.generateUserGroupID(),await btt(e.name),t.push(ue.group.created(e));else{let u=await yn.get(e._id);if(u.name!==e.name&&await btt(e.name),t.push(ue.group.updated(e)),JSON.stringify(u.roles)!==JSON.stringify(e.roles)){let c=u.users?.length||0,l=0;c>0&&(l=await _tt(u)),Object.values(e.roles).includes("CREATOR")?n=c-l:n=-c,t.push(ue.group.permissionsEdited(e))}}await Promise.all(t);let{users:i,...s}=e,a=o(()=>yn.save(s),"saveGroup");if(r)return await qne(a);{let u=await a();if(n>0)await o2(0,n);else if(n<0){let c=await _tt(e),l=Math.abs(n)-c;l>0&&await Uv(0,l)}return u}}async function lkr(e,t){let r;try{r=await yn.get(e)}catch{throw new Error("Group not found")}let n=Object.values(r.roles||{}).includes("CREATOR"),i=o(()=>{},"recalculateCreatorsQuotasFn");if(n){let a=we.getGlobalDB(),u=await yn.getGroupUsers(e),l=(await Promise.all(u.map(m=>a.get(m._id)))).map(m=>({...m,userGroups:m.userGroups.filter(h=>h!==e)})),d=(await Km.creatorsInList(l)).filter(m=>m).length,p=u.length-d;p&&(i=o(()=>Uv(0,p),"recalculateCreatorsQuotasFn"))}let s=await yn.destroy(e,t);return await ue.group.deleted(r),await Wne(),await i(),s}async function fkr(e,t){let r=await yn.get(e),n=await ze.bulkGetGlobalUsersById(t),i=[];for(let c of n)c.userGroups||(c.userGroups=[]),c.userGroups.includes(e)||i.push(c);if(!i.length)return i;let s=i.map(c=>({...c,userGroups:[...c?.userGroups||[],e]}));if(await ze.bulkUpdateGlobalUsers(s),Object.values(r.roles||{}).includes("CREATOR")){let l=(await Km.creatorsInList(i)).filter(d=>d).length,f=i.length-l;f&&await o2(0,f)}let u=[];for(let c of t)u.push(Ce.user.invalidateUser(c));return await Promise.all(u),await ue.group.usersAdded(s.length,r,t),s}async function dkr(e,t){let r=await yn.get(e),n=await ze.bulkGetGlobalUsersById(t),i=[];for(let u of n){if(!u.userGroups||!u.userGroups.includes(e))continue;let c=u.userGroups.indexOf(e);u.userGroups.splice(c,1),i.push(u)}if(await ze.bulkUpdateGlobalUsers(i),Object.values(r.roles||{}).includes("CREATOR")){let c=(await Km.creatorsInList(i)).filter(f=>f).length,l=i.length-c;l&&await Uv(0,l)}let a=[];for(let u of t)a.push(Ce.user.invalidateUser(u));return await Promise.all(a),i.length&&await ue.group.usersDeleted(i.length,r,t),i}async function pkr(e,t){let r=await vtt(e);if(r.roles||(r.roles={}),t.appsToAdd)for(let n of t.appsToAdd)r.roles[n.appId]=n.roleId;if(t.appsToRemove)for(let n of t.appsToRemove)delete r.roles[n.appId];return r.builder={apps:Object.entries(r.roles).filter(([n,i])=>i==="CREATOR").map(([n])=>n)},await Ttt(r)}async function mkr(e){let t=await Kne(),r=[];for(let n of t)!n.roles||!n.roles[e]||(delete n.roles[e],r.push(n));return await yn.bulkSave(r)}async function hkr(){if(!await Nne()){let e=we.getGlobalDB(),r=(await Kne()||[]).filter(n=>Object.values(n?.roles||{}).includes("CREATOR"));for(let n of r){let i=await yn.getGroupUsers(n._id),a=(await Promise.all(i.map(f=>e.get(f._id)))).map(f=>({...f,userGroups:f.userGroups.filter(d=>d!==n._id)})),c=(await Km.creatorsInList(a)).filter(f=>f).length,l=i.length-c;await yn.save({...n,roles:{}}),l&&await Uv(0,l)}}}var Att=y(()=>{"use strict";F();Gne();Gl();Ru();Fv();o(Hne,"findHighestRole");o(wtt,"groupList");o(Ett,"getGroupBuilderAppIds");o(ukr,"getGroupRoleId");o(ckr,"enrichUserRolesFromGroups");o(Kne,"fetch");o(vtt,"get");o(Stt,"getBulk");o(btt,"guardNameAvailability");o(_tt,"getCreatorsCountInGroup");o(Ttt,"save");o(lkr,"remove");o(fkr,"addUsers");o(dkr,"removeUsers");o(pkr,"updateGroupApps");o(mkr,"cleanupApp");o(hkr,"adjustGroupCreatorsQuotas")});var xi={};G(xi,{addUsers:()=>fkr,adjustGroupCreatorsQuotas:()=>hkr,cleanupApp:()=>mkr,enrichUserRolesFromGroups:()=>ckr,fetch:()=>Kne,get:()=>vtt,getBulk:()=>Stt,getGroupBuilderAppIds:()=>Ett,getGroupRoleId:()=>ukr,remove:()=>lkr,removeUsers:()=>dkr,save:()=>Ttt,updateGroupApps:()=>pkr});var Qne=y(()=>{"use strict";Att()});var Bc,Rtt=y(()=>{"use strict";F();Ru();Qne();Fv();ze.UserDB.init(ot,xi,qn);Bc=ze.UserDB});var zne={};G(zne,{db:()=>Bc});var l2=y(()=>{"use strict";Rtt()});async function Itt(e,t){let r,n=5,i=!1,s,a=!0;for(;n>0;n--)try{a?s=await e():s=await exports.randomDelay(e),i=!0;break}catch(u){r=u}return i||Be.logWarn(`Failed to backoff: ${t}`,r),s}var Ott=y(()=>{"use strict";F();o(Itt,"backOff")});function Ctt(e,t,{status:r,automationId:n}={},i={}){let s=n?`${n}${Fd}`:"",a=r?`${r}${Fd}`:"",u;return r&&n?u=`${Yne.ALL}${Fd}${a}${s}`:r?u=`${Yne.STATUS}${Fd}${a}`:n?u=`${Yne.AUTOMATION}${Fd}${s}`:u=`${xtt.AUTOMATION_LOG}${Fd}`,{...i,descending:!0,startkey:`${u}${t}${gkr}`,endkey:`${u}${e}`}}function Ekr(e,t,r){return`${xtt.AUTOMATION_LOG}${Fd}${e}${Fd}${r}${Fd}${t}`}async function Xne(e,t,r={docs:!0}){let n=I.getProdWorkspaceDB();await n.exists()||(n=I.getDevWorkspaceDB());let i={status:r.status},s=r?.limit?r.limit:r?.paginate?f2+1:void 0,a=Ctt(e,t,i,{include_docs:r.docs,limit:s});r?.page&&(a.startkey=r.page);let u=await n.allDocs(a),c=bC(u,{paginate:r?.paginate,pageSize:f2});return{...c,totalLogs:c.totalRows}}async function Zne(e,t,r={}){let n=I.getProdWorkspaceDB();await n.exists()||(n=I.getDevWorkspaceDB());let i;try{let a={automationId:r?.automationId,status:r?.status},u=Ctt(e,t,a,{include_docs:!0,limit:f2+1});r?.page&&(u.startkey=r.page),i=await n.query(bkr(ykr.AUTOMATION_LOGS),u)}catch(a){if(a!=null&&(a.name==="not_found"||a.error==="not_found"))return await yet(),Zne(e,t,r);throw a}let s=bC(i,{paginate:!0,pageSize:f2});return{...s,totalLogs:s.totalRows/3}}async function Dtt(e,t){let r=I.getProdWorkspaceDB(),n=e._id,i=e.name,s=new Date().toISOString(),a=Ekr(s,t.status,n),u={...t,automationId:n,status:t.status,automationName:i,createdAt:s,_id:a};return await r.put(u),a}async function eie(e,{clearing:t}={clearing:!1}){let r=I.getProdWorkspaceDB();await Itt(async()=>{let n=await r.get(U.DocumentType.WORKSPACE_METADATA);for(let i of e){let s=i.split(U.SEPARATOR),a=`${s[s.length-3]}${U.SEPARATOR}${s[s.length-2]}`,u={};n.automationErrors&&(u=n.automationErrors),Array.isArray(u[a])||(u[a]=[]);let c=u[a].indexOf(i);t&&c!==-1?u[a].splice(c,1):u[a].push(i),u[a].length===0&&delete u[a],n.automationErrors=u}await r.put(n),await Ce.workspace.invalidateWorkspaceMetadata(n.appId,n)},"Failed to update app metadata with automation log error")}async function vkr(){let e=await Jne();try{return await Xne(_kr,e,{docs:!1,paginate:!1,limit:wkr})}catch{return{data:[],hasNextPage:!1,totalLogs:0}}}async function tie(){let e=I.getProdWorkspaceDB();try{let t=await vkr();if(!t.data||t.data.length===0)return;let r=t.data.map(i=>({_id:i.id,_rev:i.value.rev,_deleted:!0})),n=t.data.filter(i=>{let s=i.id.split(U.SEPARATOR);return s[s.length-1]==="error"}).map(i=>i.id);await e.bulkDocs(r),n.length&&await eie(n,{clearing:!0})}catch(t){Be.logAlert(`Failed to cleanup automation log history - Database "${e.name}"`,t)}}var Fd,gkr,xtt,Yne,ykr,bkr,_kr,wkr,f2,Jne,Ptt=y(()=>{"use strict";F();P();Ott();Xre();Zre();tne();({SEPARATOR:Fd,UNICODE_MAX:gkr,DocumentType:xtt,AutomationViewMode:Yne,ViewName:ykr,getQueryIndex:bkr}=U),_kr=new Date(0).toISOString(),wkr=100,f2=10,Jne=o(async()=>qq("automationLogRetentionDays"),"oldestLogDate");o(Ctt,"getAutomationLogParams");o(Ekr,"generateAutomationLogID");o(Xne,"getAllLogs");o(Zne,"getLogsByView");o(Dtt,"writeLog");o(eie,"updateAppMetadataWithErrors");o(vkr,"getExpiredLogs");o(tie,"clearOldHistory")});var rie={};G(rie,{logSearch:()=>Tkr,oldestLogDate:()=>ktt,storeLog:()=>Akr});async function Skr(e,t,r,n){let i,s=new Date().toISOString(),a=await ktt();return(!e||e<a)&&(e=a),r||t?i=await Zne(e,s,{automationId:r,status:t,page:n}):i=await Xne(e,s,{status:t,page:n,docs:!0,paginate:!0}),i}async function Tkr(e){return await tie(),await Skr(e.startDate,e.status,e.automationId,e.page)}async function Akr(e,t){if(!U.isProdWorkspaceID(I.getWorkspaceId()))return;let r=await Dtt(e,t);t.status==="error"&&await eie([r]),await tie()}var ktt,Ntt=y(()=>{"use strict";F();P();Ptt();ktt=Jne;o(Skr,"getLogs");o(Tkr,"logSearch");o(Akr,"storeLog")});var uh={};G(uh,{logs:()=>rie});var Ltt=y(()=>{"use strict";Ntt()});function Ftt(e,t){return Mtt.default.readFileSync((0,Utt.join)(e,t),"utf8")}var Mtt,Utt,Btt=y(()=>{"use strict";Mtt=q(require("fs")),Utt=require("path");o(Ftt,"loadJSFile")});var nie={};G(nie,{checkPluginQuotas:()=>Okr,deletePlugin:()=>Ikr,storePlugin:()=>Rkr});async function Rkr(metadata,directory,source,origin){let db=we.getGlobalDB(),version=metadata.package.version,name=metadata.package.name,description=metadata.package.description,hash=metadata.schema.hash,bucketPath=ce.getPluginS3Dir(name),files=await ce.uploadDirectory(ce.ObjectStoreBuckets.PLUGINS,directory,bucketPath),jsFile=files.find(e=>e.name.endsWith(".js")),iconFile=files.find(e=>e.name.endsWith(".svg"));if(!jsFile)throw new Error("Plugin missing .js file.");if(metadata.schema.type==="datasource"){let js=Ftt(directory,jsFile.name);try{eval(js)}catch(e){let t=e?.message?e.message:JSON.stringify(e);throw new Error(`JS invalid: ${t}`)}}let iconFileName=iconFile?iconFile.name:null,pluginId=U.generatePluginID(name),rev;try{rev=(await db.get(pluginId))._rev}catch(e){rev=void 0}let doc={_id:pluginId,_rev:rev,...metadata,name,version,hash,description,source};iconFileName&&(doc.iconFileName=iconFileName),source&&(doc={...doc,source}),origin&&origin.source==="github"&&(doc.origin=origin);let write=o(async()=>{let e=await db.put(doc);return await ue.plugin.imported(doc),{...doc,_rev:e.rev}},"write");return rev?await write():await jne(write)}async function Ikr(e){let t=we.getGlobalDB();try{let r=await t.get(e),n=ce.getPluginS3Dir(r.name);await ce.deleteFolder(ce.ObjectStoreBuckets.PLUGINS,n),await t.remove(e,r._rev),await ue.plugin.deleted(r),await $ne()}catch(r){let n=r?.message?r?.message:r;throw new Error(`Failed to delete plugin: ${n}`)}}async function Okr(){let e=we.getGlobalDB();try{let r=(await e.allDocs(U.getPluginParams())).rows.length;console.log(`Syncing plugin count: ${r}`),await Vne(r)}catch(t){Be.logAlert("Unable to retrieve plugins for quota check",t)}}var qtt=y(()=>{"use strict";P();F();Btt();Fv();o(Rkr,"storePlugin");o(Ikr,"deletePlugin");o(Okr,"checkPluginQuotas")});function xkr(){return!!L.ENCRYPTION_KEY}async function Ckr(){let e=await sb.get();return Object.keys(e.variables)}async function Dkr(e){let r=(await sb.get()).variables,n={};for(let[i,s]of Object.entries(r))switch(e){case"development":n[i]=s.development;break;case"production":default:n[i]=s.production;break}return n}async function jtt(e){if(!(await Ii.cache.getCachedLicense()).features.includes("environmentVariables"))throw new Error("User does not have access to environment variables feature.");let r=await sb.get();r.variables=e(r.variables),await sb.update(r)}async function Pkr(e,t){if($tt(e))await jtt(n=>(n[e]=t,n));else throw new Error("Variable name has characters that are not allowed")}async function kkr(e){await jtt(t=>(delete t[e],t))}function $tt(e){return/^[a-zA-Z0-9-_]+$/.test(e)}var Vtt=y(()=>{"use strict";F();P();Gl();Bv();o(xkr,"isEncryptionKeyAvailable");o(Ckr,"fetch");o(Dkr,"fetchValues");o(jtt,"changeValues");o(Pkr,"update");o(kkr,"remove");o($tt,"isValid")});var qc={};G(qc,{fetch:()=>Ckr,fetchValues:()=>Dkr,isEncryptionKeyAvailable:()=>xkr,isValid:()=>$tt,remove:()=>kkr,update:()=>Pkr});var Gtt=y(()=>{"use strict";Vtt()});async function Nkr(e,t,r){let n={operation:"READ",table:yC.searchTable(),tables:{},paginate:{limit:r||9,page:t},filters:e,resource:{fields:[]},sort:{timestamp:{direction:"descending",type:"string"}}},i=Ktt._query(n);if(Array.isArray(i))throw new Error("Cannot execute multiple queries for audit log search");return{sql:i.sql,bindings:i.bindings}}function Lkr(e){return`al${fe}${e}${fe}${Ne.newid()}`}async function Qtt(e){e._id||(e._id=Lkr(e.timestamp)),e.type||(e.type=eg);try{let r=await I.getAuditLogsDB().put(e);return{...e,_rev:r.rev}}catch(t){Be.logAlert("Failed to write audit log",t)}}async function iie(e,t,r){t||(t=1);let n=I.getAuditLogsDB();try{let i=9+1,s=await Nkr(e,t,i),a=yC.searchTable(),u=Ktt.convertJsonStringColumns(a,await n.sql(s.sql,s.bindings)),c;u.length>i&&(c=u.pop());let l={rows:u,hasNextPage:!!c};return l.hasNextPage&&(l.bookmark=t+1),l}catch(i){if(i.status===404&&!r?.isRetry)return await Mkr(),await zZe(),await iie(e,t,{isRetry:!0});throw i}}async function Mkr(){let e=I.getAuditLogsDB(),r=(await e.allDocs(U.getDocParams("al",null,{include_docs:!0}))).rows.map(n=>n.doc).filter(n=>n&&!n.type).map(n=>({...n,type:eg}));await e.bulkDocs(r)}function ztt(e){let t=I.getAuditLogsDB(),r=new Htt,n=t.dump(r,{filter:s=>{let a=s;if(!a._id?.startsWith("al"))return!1;let u=!0,c=o((l,f)=>{!l||l.length===0||(u=!!(u&&f&&l.includes(f)))},"matcher");if(c(e.userIds,a.userId),c(e.appIds,a.appId),c(e.events,a.event),(e.startDate||e.endDate)&&(u=u&&a.timestamp>=e.startDate&&a.timestamp<=e.endDate),e.fullSearch){let l=JSON.stringify(s);u=u&&l.includes(e.fullSearch)}return u}}),i=new Htt;return r.on("data",s=>{let a=JSON.parse(Buffer.from(s).toString());if(Array.isArray(a.docs)){let u="";for(let c of a.docs)u+=JSON.stringify(c)+`
440
+ `;o(EC,"verifyLicenseToken");o(mPr,"sign")});var Qq={};G(Qq,{getOfflineFeatures:()=>dne});function dne(e){function t(r){let n=r[e];if(!n)throw new Error(`Features do not exist for planType=${e}`);return n}return o(t,"readFeatures"),t(hPr)}var hPr,pne=y(()=>{"use strict";P();$l();hPr={free:[...Uc.SELF_FREE_LICENSE.features],premium:["appBackups","branding","viewPermissions","pdf"],premium_plus:["appBackups","branding","syncAutomations","viewPermissions","triggerAutomationRun","viewReadonlyColumns","aiCustomConfigs","pdf","budibaseAI"],premium_plus_trial:["appBackups","branding","syncAutomations","viewPermissions","triggerAutomationRun","viewReadonlyColumns","aiCustomConfigs","pdf","budibaseAI"],pro:["userGroups","appBackups"],team:["userGroups","appBackups"],business:["userGroups","appBackups","environmentVariables","auditLogs","branding","syncAutomations","expandedPublicApi","viewPermissions","pdf","budibaseAI"],enterprise_basic:["userGroups","appBackups","environmentVariables","enforceableSSO","auditLogs","branding","syncAutomations","offline","expandedPublicApi","workspaceImportExport","viewPermissions","triggerAutomationRun","scim","viewReadonlyColumns","aiCustomConfigs","pwa","customAppScripts","pdf","budibaseAI","recaptcha","pkceOidc","translations"],enterprise_basic_trial:["userGroups","appBackups","environmentVariables","enforceableSSO","branding","syncAutomations","expandedPublicApi","workspaceImportExport","viewPermissions","triggerAutomationRun","scim","viewReadonlyColumns","aiCustomConfigs","pwa","customAppScripts","pdf","budibaseAI","recaptcha","pkceOidc","translations"],enterprise:["userGroups","appBackups","environmentVariables","enforceableSSO","auditLogs","branding","syncAutomations","offline","expandedPublicApi","workspaceImportExport","viewPermissions","triggerAutomationRun","scim","viewReadonlyColumns","aiCustomConfigs","pwa","customAppScripts","pdf","budibaseAI","recaptcha","pkceOidc","translations"]};o(dne,"getOfflineFeatures")});var zq={};G(zq,{UNLIMITED:()=>ne,getQuotas:()=>mne});function mne(e,t){let r;function n(i){let s=i[t];if(!s)throw new Error(`Quotas do not exist for planType=${t} and hosting=${e}`);return s}switch(o(n,"readQuotas"),e){case"self":r=n(yPr);break;case"cloud":r=n(gPr);break}return JSON.parse(JSON.stringify(r))}var K,Net,ne,Au,gPr,yPr,hne=y(()=>{"use strict";P();$l();K=ih,Net=Uc,ne=-1,Au=o(e=>e*1e6,"millions"),gPr={free:{...Net.CLOUD_FREE_LICENSE.quotas},premium:{usage:{monthly:{...K.queries(ne),...K.automations(1e3),...K.budibaseAICredits(0),...K.actions(ne)},static:{...K.rows(1e4),...K.apps(ne),...K.users(ne),...K.creators(ne),...K.userGroups(0),...K.plugins(ne),...K.customAIConfigurations(0)}},constant:{...K.automationLogRetentionDays(7),...K.appBackupRetentionDays(7)}},premium_plus:{usage:{monthly:{...K.queries(ne),...K.automations(5e3),...K.budibaseAICredits(Au(2)),...K.actions(ne)},static:{...K.rows(25e3),...K.apps(ne),...K.users(ne),...K.creators(ne),...K.userGroups(0),...K.plugins(ne),...K.customAIConfigurations(1)}},constant:{...K.automationLogRetentionDays(30),...K.appBackupRetentionDays(30)}},premium_plus_trial:{usage:{monthly:{...K.queries(ne),...K.automations(5e3),...K.budibaseAICredits(Au(2)),...K.actions(ne)},static:{...K.rows(25e3),...K.apps(ne),...K.users(ne),...K.creators(ne),...K.userGroups(0),...K.plugins(ne),...K.customAIConfigurations(1)}},constant:{...K.automationLogRetentionDays(30),...K.appBackupRetentionDays(30)}},pro:{usage:{monthly:{...K.queries(ne),...K.automations(1e3),...K.budibaseAICredits(Au(2)),...K.actions(ne)},static:{...K.rows(ne),...K.apps(ne),...K.users(ne),...K.creators(ne),...K.userGroups(5),...K.plugins(ne),...K.customAIConfigurations(0)}},constant:{...K.automationLogRetentionDays(7),...K.appBackupRetentionDays(7)}},team:{usage:{monthly:{...K.queries(ne),...K.automations(5e3),...K.budibaseAICredits(0),...K.actions(ne)},static:{...K.rows(ne),...K.apps(ne),...K.users(ne),...K.creators(ne),...K.userGroups(10),...K.plugins(ne),...K.customAIConfigurations(0)}},constant:{...K.automationLogRetentionDays(30),...K.appBackupRetentionDays(90)}},business:{usage:{monthly:{...K.queries(ne),...K.automations(1e4),...K.budibaseAICredits(Au(2)),...K.actions(ne)},static:{...K.rows(5e4),...K.apps(ne),...K.users(ne),...K.creators(ne),...K.userGroups(50),...K.plugins(ne),...K.customAIConfigurations(0)}},constant:{...K.automationLogRetentionDays(365),...K.appBackupRetentionDays(365)}},enterprise_basic:{usage:{monthly:{...K.queries(ne),...K.automations(ne),...K.budibaseAICredits(Au(4)),...K.actions(ne)},static:{...K.rows(ne),...K.apps(ne),...K.users(ne),...K.creators(ne),...K.userGroups(ne),...K.plugins(ne),...K.customAIConfigurations(ne)}},constant:{...K.automationLogRetentionDays(ne),...K.appBackupRetentionDays(ne)}},enterprise_basic_trial:{usage:{monthly:{...K.queries(ne),...K.automations(ne),...K.budibaseAICredits(Au(4)),...K.actions(ne)},static:{...K.rows(ne),...K.apps(ne),...K.users(ne),...K.creators(ne),...K.userGroups(ne),...K.plugins(ne),...K.customAIConfigurations(ne)}},constant:{...K.automationLogRetentionDays(15),...K.appBackupRetentionDays(15)}},enterprise:{usage:{monthly:{...K.queries(ne),...K.automations(ne),...K.budibaseAICredits(Au(4)),...K.actions(ne)},static:{...K.rows(ne),...K.apps(ne),...K.users(ne),...K.creators(ne),...K.userGroups(ne),...K.plugins(ne),...K.customAIConfigurations(ne)}},constant:{...K.automationLogRetentionDays(ne),...K.appBackupRetentionDays(ne)}}},yPr={free:{...Net.SELF_FREE_LICENSE.quotas},premium:void 0,premium_plus:{usage:{monthly:{...K.queries(ne),...K.automations(ne),...K.budibaseAICredits(Au(2)),...K.actions(ne)},static:{...K.rows(ne),...K.apps(ne),...K.users(ne),...K.creators(ne),...K.userGroups(0),...K.plugins(ne),...K.customAIConfigurations(1)}},constant:{...K.automationLogRetentionDays(30),...K.appBackupRetentionDays(30)}},premium_plus_trial:{usage:{monthly:{...K.queries(ne),...K.automations(ne),...K.budibaseAICredits(Au(2)),...K.actions(ne)},static:{...K.rows(ne),...K.apps(ne),...K.users(ne),...K.creators(ne),...K.userGroups(0),...K.plugins(ne),...K.customAIConfigurations(1)}},constant:{...K.automationLogRetentionDays(30),...K.appBackupRetentionDays(30)}},pro:{usage:{monthly:{...K.queries(ne),...K.automations(ne),...K.budibaseAICredits(0),...K.actions(ne)},static:{...K.rows(ne),...K.apps(ne),...K.users(ne),...K.creators(ne),...K.userGroups(5),...K.plugins(ne),...K.customAIConfigurations(0)}},constant:{...K.automationLogRetentionDays(7),...K.appBackupRetentionDays(7)}},team:{usage:{monthly:{...K.queries(ne),...K.automations(ne),...K.budibaseAICredits(0),...K.actions(ne)},static:{...K.rows(ne),...K.apps(ne),...K.users(ne),...K.creators(ne),...K.userGroups(10),...K.plugins(ne),...K.customAIConfigurations(0)}},constant:{...K.automationLogRetentionDays(30),...K.appBackupRetentionDays(90)}},business:{usage:{monthly:{...K.queries(ne),...K.automations(ne),...K.budibaseAICredits(0),...K.actions(ne)},static:{...K.rows(ne),...K.apps(ne),...K.users(ne),...K.creators(ne),...K.userGroups(50),...K.plugins(ne),...K.customAIConfigurations(0)}},constant:{...K.automationLogRetentionDays(90),...K.appBackupRetentionDays(365)}},enterprise_basic:{usage:{monthly:{...K.queries(ne),...K.automations(ne),...K.budibaseAICredits(Au(4)),...K.actions(ne)},static:{...K.rows(ne),...K.apps(ne),...K.users(ne),...K.creators(ne),...K.userGroups(ne),...K.plugins(ne),...K.customAIConfigurations(ne)}},constant:{...K.automationLogRetentionDays(ne),...K.appBackupRetentionDays(ne)}},enterprise_basic_trial:{usage:{monthly:{...K.queries(ne),...K.automations(ne),...K.budibaseAICredits(Au(4)),...K.actions(ne)},static:{...K.rows(ne),...K.apps(ne),...K.users(ne),...K.creators(ne),...K.userGroups(ne),...K.plugins(ne),...K.customAIConfigurations(ne)}},constant:{...K.automationLogRetentionDays(15),...K.appBackupRetentionDays(15)}},enterprise:{usage:{monthly:{...K.queries(ne),...K.automations(ne),...K.budibaseAICredits(Au(4)),...K.actions(ne)},static:{...K.rows(ne),...K.apps(ne),...K.users(ne),...K.creators(ne),...K.userGroups(ne),...K.plugins(ne),...K.customAIConfigurations(ne)}},constant:{...K.automationLogRetentionDays(ne),...K.appBackupRetentionDays(ne)}}};o(mne,"getQuotas")});async function bPr(e){return(await U.getAllWorkspaces({all:!0,idsOnly:!0})).includes(e)}var Let=y(()=>{"use strict";F();o(bPr,"workspaceExists")});var Nv={};G(Nv,{base64ToObject:()=>wPr,objectToBase64:()=>_Pr});function _Pr(e){let t=JSON.stringify(e);return Buffer.from(t).toString("base64")}function wPr(e){let t=Buffer.from(e,"base64").toString();return JSON.parse(t)}var Met=y(()=>{"use strict";o(_Pr,"objectToBase64");o(wPr,"base64ToObject")});var SC={};G(SC,{encoding:()=>Nv,workspaceExists:()=>bPr});var gne=y(()=>{"use strict";Let();Met()});async function EPr(e){await Su.save({offlineLicenseToken:e}),await ab()}async function vPr(){await Su.save({offlineLicenseToken:void 0}),await ab()}async function Bet(){return(await Su.get()).offlineLicenseToken}async function yne(){let t=(await Ml.getInstall()).installId,r=I.getTenantId(),n=await ue.identification.getUniqueTenantId(r);return{installId:t,tenantId:n}}async function SPr(){let e=await yne();return Nv.objectToBase64(e)}function TPr(e){return Nv.base64ToObject(e)}function qet(e){let t=Date.now(),r=new Date(e.expireAt).getTime();if(t>r)throw new Error(`Offline license has expired. expireAt=${e.expireAt}`)}async function Wet(e){let t=await yne();if(e.identifier.installId!==t.installId||e.identifier.tenantId!==t.tenantId)throw new Error("Invalid offline license")}function jet(e){let t=e.plan.type,r="self",n=dne(t),i=mne(r,t);return e.features=(0,Uet.default)(e.features,n),e.quotas=(0,Fet.default)(e.quotas,i),e}async function bne(){try{let e=await Bet();if(e){let t=await EC(e);return qet(t),await Wet(t),jet(t)}}catch(e){console.error("Error retrieving offline license",e)}}var Uet,Fet,$et=y(()=>{"use strict";Gl();Yq();Kq();pne();hne();gne();P();F();Uet=q(require("lodash/union")),Fet=q(require("lodash/merge"));o(EPr,"activateOfflineLicenseToken");o(vPr,"deleteOfflineLicenseToken");o(Bet,"getOfflineLicenseToken");o(yne,"getIdentifier");o(SPr,"getIdentifierBase64");o(TPr,"getIdentifierFromBase64");o(qet,"verifyExpiry");o(Wet,"verifyInstallation");o(jet,"enrichLicense");o(bne,"getOfflineLicense")});var AC={};G(AC,{deleteDevLicense:()=>xPr,getOfflineLicense:()=>IPr,writeDevLicenseToDisk:()=>OPr});function IPr(){try{if(ub.default.existsSync(TC)){let e=ub.default.readFileSync(TC,{encoding:"utf-8"});return EC(e)}}catch(e){console.error("Error retrieving offline license from disk",e)}}function OPr(e){console.log(`Writing license to: ${TC}`),ub.default.writeFileSync(TC,e,{encoding:"utf-8"})}function xPr(){ub.default.rmSync(TC,{force:!0})}var wne,Vet,ub,APr,_ne,RPr,TC,Get=y(()=>{"use strict";F();wne=require("path"),Vet=require("os"),ub=q(require("fs"));Kq();APr=L.isTest()?".budibase-test":".budibase",_ne=(0,wne.join)((0,Vet.tmpdir)(),APr),RPr="dev_license.txt",TC=(0,wne.join)(_ne,RPr);if(!ub.default.existsSync(_ne))try{ub.default.mkdirSync(_ne)}catch{}o(IPr,"getOfflineLicense");o(OPr,"writeDevLicenseToDisk");o(xPr,"deleteDevLicense")});var Jq={};G(Jq,{activateOfflineLicenseToken:()=>EPr,deleteOfflineLicenseToken:()=>vPr,dev:()=>AC,enrichLicense:()=>jet,getIdentifier:()=>yne,getIdentifierBase64:()=>SPr,getIdentifierFromBase64:()=>TPr,getOfflineLicense:()=>bne,getOfflineLicenseToken:()=>Bet,signing:()=>vC,verifyExpiry:()=>qet,verifyInstallation:()=>Wet});var Ene=y(()=>{"use strict";$et();Kq();Get()});var Het,vne,Sne,Tne,Ket=y(()=>{"use strict";wC();$l();F();Ene();Het=require("dd-trace"),vne=o(async()=>await Het.tracer.trace("getLicense",async e=>{if(L.OFFLINE_MODE)return e.addTags({offline:!0}),bne();let t=await kv();return t||(e.addTags({offlineFallback:!0}),t=AC.getOfflineLicense()),t}),"getLicense"),Sne=o(e=>cne(e),"getLicenseFromKey"),Tne=o(()=>L.SELF_HOSTED?Uc.SELF_FREE_LICENSE:Uc.CLOUD_FREE_LICENSE,"getFreeLicense")});var Rne={};G(Rne,{activateLicenseKey:()=>CPr,deleteLicenseKey:()=>DPr,getLicenseKey:()=>Xq});async function CPr(e){await lne(e),await Su.save({licenseKey:e}),await ab()}async function Xq(){return await Ane.default.trace("getLicenseKey",async e=>{let t=await Su.get();return e.addTags({licenseKey:t.licenseKey}),t.licenseKey})}async function DPr(){return await Ane.default.trace("deleteLicenseKey",async()=>{await Su.save({licenseKey:void 0}),await ab()})}var Ane,Ine=y(()=>{"use strict";wC();Gl();Yq();Ane=q(require("dd-trace"));o(CPr,"activateLicenseKey");o(Xq,"getLicenseKey");o(DPr,"deleteLicenseKey")});var One=y(()=>{"use strict";Ket();wC();Ene();Ine();pne();hne()});var RC,kPr,NPr,Zq,Qet=y(()=>{"use strict";F();kPr=o(async()=>{RC=await so.init(Ur.utils.Databases.LICENSES)},"init"),NPr=o(async()=>{RC&&await RC.finish()},"shutdown");process.on("exit",async()=>{await NPr()});Zq=o(async()=>(RC||await kPr(),RC),"getClient")});var e2,Cne,Yet,MPr,ab,zet,Jet,xne,Xet,Zet,ett=y(()=>{"use strict";e2=q(require("dd-trace"));F();P();One();Qet();_e();Cne=Cr.fromHours(1).toSeconds(),Yet=Cr.fromHours(1).toSeconds(),MPr=Cne+Yet,ab=o(async()=>{await Zet(),await Xet()},"refresh"),zet=o(async e=>{let{result:t}=await fo.doWithLock({type:"default",name:"sync_account_license",resource:e,ttl:Cr.fromSeconds(10).toMs()},async()=>{let r=await Zq(),n=await r.get(e);if(n&&!Jet(n))return n;let i=await e2.default.trace("populateLicense",async()=>await vne());return i||(i=e2.default.trace("populateFreeLicense",()=>Tne())),i.refreshedAt=new Date().toISOString(),await r.store(e,i,MPr),i});return t},"populateAndStoreLicense"),Jet=o(e=>{let t=e.refreshedAt?Date.parse(e.refreshedAt):0;return Date.now()-t>=Cne*1e3},"shouldRefreshLicense"),xne=o(async()=>await e2.default.trace("getCachedLicense",async e=>{let t=I.getLicense();if(t)return e.addTags({foundInContext:!0,features:t.features,plan:t.plan,quotas:t.quotas}),t;let r=we.getTenantId(),i=await(await Zq()).get(r);return e.addTags({tenantId:r,foundInCache:!!i}),i?(e.addTags({foundInCache:!0,refreshedAt:i.refreshedAt,features:i.features,plan:i.plan,quotas:i.quotas}),Jet(i)&&zet(r).catch(()=>{}),i):(i=await be.retry(()=>zet(r)),e.addTags({refreshedAt:i.refreshedAt,features:i.features,plan:i.plan,quotas:i.quotas,expirySeconds:Cne,staleGraceSeconds:Yet}),i)}),"_getCachedLicense");L.isJest()&&(xne=jest.fn().mockImplementation(xne));Xet=xne,Zet=o(async()=>{let e=we.getTenantId();await(await Zq()).delete(e)},"invalidate")});var Fc={};G(Fc,{getCachedLicense:()=>Xet,invalidate:()=>Zet,refresh:()=>ab});var Yq=y(()=>{"use strict";ett()});var Ii={};G(Ii,{cache:()=>Fc,client:()=>sh,features:()=>Qq,getFreeLicense:()=>Tne,getLicense:()=>vne,getLicenseFromKey:()=>Sne,keys:()=>Rne,offline:()=>Jq,quotas:()=>zq});var xv=y(()=>{"use strict";Yq();One()});async function Oi(e,t){Array.isArray(e)||(e=[e]),t||(t=await Fc.getCachedLicense());for(let r of e)if(!t?.features.includes(r))return!1;return!0}async function t2(e,t){if(!await Oi(e,t))throw new gv(e)}async function Dne(e,t){if(!await Oi(e,t)){let r=e.join(", ");throw new gv(r)}}function hs(e){return async(...t)=>(await t2("appBackups"),e(...t))}async function Pne(){return Oi("appBackups")}async function kne(){return Oi("branding")}async function ttt(){return Oi("enforceableSSO")}async function UPr(){return Oi("syncAutomations")}async function FPr(){return Oi("triggerAutomationRun")}async function r2(){return Oi("auditLogs")}async function Nne(){return Oi("userGroups")}function BPr(){return Oi("pwa")}function qPr(){return Oi("recaptcha")}async function jPr(){return Oi("translations")}async function Lv(){return Oi("expandedPublicApi")}async function $Pr(){return Oi("workspaceImportExport")}async function n2(){return Oi(["expandedPublicApi","workspaceImportExport"])}async function VPr(e){if(L.ENABLE_SSO_MAINTENANCE_MODE||!await ttt())return!1;let r;return e?.config?r=e.config:r=await Dr.getSettingsConfig(),!!r.isSSOEnforced}async function GPr(){return Oi("viewPermissions")}async function HPr(){return Oi("viewReadonlyColumns")}var WPr,Lne,rtt=y(()=>{"use strict";F();P();xv();o(Oi,"areFeaturesEnabled");o(t2,"checkFeature");o(Dne,"checkFeatures");o(hs,"checkBackups");o(Pne,"isBackupsEnabled");o(kne,"isBrandingEnabled");o(ttt,"isEnforceableSSO");o(UPr,"isSyncAutomationsEnabled");o(FPr,"isTriggerAutomationRunEnabled");o(r2,"isAuditLogsEnabled");o(Nne,"isUserGroupsEnabled");o(BPr,"isPWAEnabled");o(qPr,"isRecaptchaEnabled");WPr=o(()=>Oi("pkceOidc"),"isPkceOidcEnabled");o(jPr,"isTranslationsEnabled");o(Lv,"isExpandedPublicApiEnabled");o($Pr,"isWorkspaceImportExportEnabled");o(n2,"isWorkspaceImportExportPublicApiEnabled");o(VPr,"isSSOEnforced");Lne=o(async()=>{let e="scim",t=await Oi(e),r=await Dr.getSCIMConfig();if(!t||!r?.enabled)throw new gv(e);return!0},"checkSCIM");o(GPr,"isViewPermissionEnabled");o(HPr,"isViewReadonlyColumnsEnabled")});var qn={};G(qn,{checkBackups:()=>hs,checkFeature:()=>t2,checkFeatures:()=>Dne,checkSCIM:()=>Lne,isAuditLogsEnabled:()=>r2,isBackupsEnabled:()=>Pne,isBrandingEnabled:()=>kne,isEnforceableSSO:()=>ttt,isExpandedPublicApiEnabled:()=>Lv,isPWAEnabled:()=>BPr,isPkceOidcEnabled:()=>WPr,isRecaptchaEnabled:()=>qPr,isSSOEnforced:()=>VPr,isSyncAutomationsEnabled:()=>UPr,isTranslationsEnabled:()=>jPr,isTriggerAutomationRunEnabled:()=>FPr,isUserGroupsEnabled:()=>Nne,isViewPermissionEnabled:()=>GPr,isViewReadonlyColumnsEnabled:()=>HPr,isWorkspaceImportExportEnabled:()=>$Pr,isWorkspaceImportExportPublicApiEnabled:()=>n2});var Ru=y(()=>{"use strict";rtt()});async function QPr(e){return await kne()?{faviconUrl:e.faviconUrl,faviconUrlEtag:e.faviconUrlEtag,emailBrandingEnabled:e.emailBrandingEnabled,platformTitle:e.platformTitle,loginHeading:e.loginHeading,loginButton:e.loginButton,metaDescription:e.metaDescription,metaImageUrl:e.metaImageUrl,metaTitle:e.metaTitle}:KPr}var KPr,ntt=y(()=>{"use strict";Ru();KPr={faviconUrl:void 0,faviconUrlEtag:void 0,emailBrandingEnabled:!0,platformTitle:void 0,loginHeading:void 0,loginButton:void 0,metaDescription:void 0,metaImageUrl:void 0,metaTitle:void 0};o(QPr,"getBrandingConfig")});var IC={};G(IC,{getBrandingConfig:()=>QPr});var itt=y(()=>{"use strict";ntt()});async function Mne(e){if(L.SELF_HOSTED)return e;for(let t of Object.values(e.config))if(t.provider==="BudibaseAI")return e;return e.config[zPr]={provider:"BudibaseAI",active:!0,isDefault:Object.keys(e.config).every(t=>!e.config[t].isDefault),defaultModel:process.env.BUDIBASE_AI_DEFAULT_MODEL||"gpt-5-mini",name:"Budibase AI"},e}var zPr,ott=y(()=>{"use strict";F();zPr="budibase_ai";o(Mne,"enrichAIConfig")});var Une={};G(Une,{enrichAIConfig:()=>Mne});var Fne=y(()=>{"use strict";ott()});var cb,Na,lb,stt,Ud,OC,xC,YPr,JPr,XPr,Mv,i2,Bne,Hl=y(()=>{"use strict";F();P();cb=require("dd-trace");$l();Gl();Uq();xv();Na=o(async(e,t,r)=>await cb.tracer.trace("quotas.increment",async n=>(n.addTags({name:e,type:t}),await stt({change:1,name:e,type:t,opts:r}))),"increment"),lb=o(e=>cb.tracer.trace("quotas.incrementMany",async()=>stt(e)),"incrementMany"),stt=o(async e=>await cb.tracer.trace("quotas.tryIncrement",async t=>{let r=Array.isArray(e)?e:[e];t.addTags({numActions:r.length}),await Mv(r.map(i=>({usageChange:i.change,name:i.name,type:i.type,opts:{dryRun:!0,suppressErrorLog:i.opts?.suppressErrorLog,id:i.opts?.id}})));let n=[];for(let i of r)await cb.tracer.trace("quotas.incrementMany.fn",async s=>{s.addTags({actionName:i.name,actionType:i.type,actionChange:i.change});let a=i.opts?.fn;a&&n.push(await a())});return await Mv(r.map(i=>({usageChange:i.change,name:i.name,type:i.type,opts:{dryRun:!1,valueFn:i.opts?.valueFn,suppressErrorLog:i.opts?.suppressErrorLog,id:i.opts?.id}}))),n[0]}),"tryIncrement"),Ud=o((e,t,r={})=>Mv({usageChange:-1,name:e,type:t,opts:r}),"decrement"),OC=o(e=>{let t=Array.isArray(e)?e:[e];return Mv(t.map(r=>({usageChange:-r.change,name:r.name,type:r.type,opts:r.opts})))},"decrementMany"),xC=o(async(e,t,r)=>Mc.setUsage(r,e,t),"set"),YPr=o((e,t,r)=>{if(e=="static"){let n=r.usageQuota.triggers;return n?n[t]||{}:{}}else{let n=Mc.utils.getCurrentMonthString(),i=r.monthly[n].triggers;return i?i[t]||{}:{}}},"getExistingTriggers"),JPr=o(async(e,t,r,n)=>{try{await fo.doWithLock({type:"try_once",name:"trigger_quota",resource:e,ttl:1e4},async()=>{let i={percentage:r,name:t.name};n&&(i.resetDate=n),await sh.triggerQuota(i)})}catch(i){Be.logAlert("Error triggering quota",i)}},"triggerQuota"),XPr=o(async(e,t,r,n)=>{let i=await ob(),s=e==="monthly"?i.quotaReset:void 0,a=await YPr(e,t,i),u=n.triggers,c=r/n.value*100;c>100&&(c=100);for(let[l,f]of u.entries())if(c>=f&&n.value!==ih.UNLIMITED){if(!a[f]){a[f]=new Date().toISOString();let p=u[l+1]||100;(!(c>=p)||c===f)&&await JPr(t,n,c,s)}}else a[f]=void 0;return a},"checkTriggers"),Mv=o(async e=>{await cb.tracer.trace("quotas.updateUsage",async t=>{let r=we.getTenantId(),n=Array.isArray(e)?e:[e];t.addTags({numActions:n.length,tenantId:r});let i,s,a=[],u={},c={},l={},f={};for(let p of n)await cb.tracer.trace("quotas.updateUsage.action",async m=>{m.addTags({actionName:p.name,actionType:p.type,actionUsageChange:p.usageChange});try{i=I.getWorkspaceId()}catch{}if(x_.includes(p.name)&&!i)throw new Error("App context required for quota update");try{s=await i2("usage",p.name,p.type),a.push(s);let{total:g,app:b,breakdown:w}=await Mc.getCurrentUsageValues(p.type,p.name,p.opts?.id);g+=p.usageChange,b!=null&&(b+=p.usageChange),w!=null&&(w+=p.usageChange);let E={};if(p.opts?.dryRun||(E=await XPr(p.type,p.name,g,s),f={...f,[p.name]:E}),s.value!==ih.UNLIMITED&&g>s.value&&p.usageChange>0)throw new D1(`${p.name}`);if(g=Math.max(0,g),b&&(b=Math.max(0,b)),w&&(w=Math.max(0,w),l={...l,[p.name]:w}),!p.opts?.dryRun){let v=p.opts?.valueFn;v&&(g=await v(),b=g),u={...u,[p.name]:g},c={...c,[p.name]:b}}}catch(g){throw p.opts?.suppressErrorLog||console.warn(`Error updating usage quotas for ${p.name}`,g),g}});let d=n.filter(p=>!p.opts?.dryRun).map(p=>({name:p.name,type:p.type,values:{total:u[p.name],app:c[p.name],breakdown:l[p.name],triggers:f[p.name]},opts:{...p.opts,tenantId:r}}));d.length>0&&await Mc.setAllUsage(d)})},"updateUsage"),i2=o(async(e,t,r)=>{let n=await Fc.getCachedLicense();if(!n){let i=we.getTenantId();throw new Error("License not found for tenant id "+i)}if(r&&cye(e,r,t))return n.quotas[e][r][t];if(r&&lye(e,r,t))return n.quotas[e][r][t];if(fye(e,t))return n.quotas[e][t];throw new Error("Invalid quota type")},"getLicensedQuota"),Bne=o(async({name:e,type:t,usageChange:r})=>{try{return await Mv({usageChange:r,name:e,type:t,opts:{dryRun:!0}}),!1}catch(n){if(n.code==="usage_limit_exceeded")return!0;throw n}},"usageLimitIsExceeded")});var ZPr,att=y(()=>{"use strict";P();Hl();ZPr=o(async e=>Na("actions","monthly",{fn:e}),"addAction")});var utt,ekr,tkr,ctt=y(()=>{"use strict";F();P();Hl();utt=o(async()=>{let e=await U.getAllWorkspaces({dev:!0});return e?e.length:0},"getDevAppsCount"),ekr=o(async(e,{appId:t}={})=>Na("apps","static",{fn:e,valueFn:utt,id:t}),"addApp"),tkr=o(async({appId:e}={})=>Ud("apps","static",{valueFn:utt,id:e}),"removeApp")});var rkr,nkr,ikr,okr,ltt=y(()=>{"use strict";Hl();P();rkr=o(async(e,{tableId:t}={})=>Na("rows","static",{fn:e,id:t}),"addRow"),nkr=o(async({tableId:e}={})=>Ud("rows","static",{id:e}),"removeRow"),ikr=o(async(e,t,{tableId:r}={})=>lb({change:e,name:"rows",type:"static",opts:{fn:t,id:r}}),"addRows"),okr=o(async(e,{tableId:t}={})=>OC({change:e,name:"rows",type:"static",opts:{id:t}}),"removeRows")});var skr,ftt=y(()=>{"use strict";Hl();P();skr=o(async(e,{automationId:t}={})=>Na("automations","monthly",{fn:e,id:t}),"addAutomation")});var qne,Wne,dtt=y(()=>{"use strict";Hl();P();qne=o(async e=>Na("userGroups","static",{fn:e}),"addGroup"),Wne=o(async()=>Ud("userGroups","static"),"removeGroup")});var jne,$ne,Vne,ptt=y(()=>{"use strict";Hl();P();jne=o(async e=>Na("plugins","static",{fn:e}),"addPlugin"),$ne=o(async()=>Ud("plugins","static"),"removePlugin"),Vne=o(async e=>xC("plugins","static",e),"updatePluginCount")});var o2,Uv,mtt=y(()=>{"use strict";Hl();P();F();wC();o2=o(async(e,t,r)=>{let n=[{change:e,name:"users",type:"static",opts:{fn:r,valueFn:ze.getUserCount}}];t>0&&n.push({change:t,name:"creators",type:"static",opts:{valueFn:ze.getCreatorCount}});let i=await lb(n);return await kv(),i},"addUsers"),Uv=o(async(e,t)=>{let r=[{change:e,name:"users",type:"static",opts:{valueFn:ze.getUserCount}}];t>0&&r.push({change:t,name:"creators",type:"static",opts:{valueFn:ze.getCreatorCount}}),await OC(r),await kv()},"removeUsers")});var s2,a2,Gne=y(()=>{"use strict";F();P();s2=class extends j{static{o(this,"GroupNameUnavailableError")}constructor(t){super(`Group name "${t}" is unavailable`,409)}},a2=class extends j{static{o(this,"AICreditsExhaustedError")}constructor(){super("You have reached your Budibase AI Credits limit for this billing cycle.",402),this.code="usage_limit_exceeded"}getPublicError(){return{quota:"budibaseAICredits"}}}});var u2,akr,c2,htt,gtt=y(()=>{"use strict";Hl();P();Gne();u2=o(async e=>{try{return await lb({change:e,name:"budibaseAICredits",type:"monthly"})}catch(t){throw t.code==="usage_limit_exceeded"&&await akr().catch(()=>{}),t}},"incrementBudibaseAICredits"),akr=o(async()=>{let e=await i2("usage","budibaseAICredits","monthly");e.value>=0&&await htt(e.value)},"capBudibaseAICreditsAtLimit"),c2=o(async()=>{if(await Bne({name:"budibaseAICredits",type:"monthly",usageChange:1}))throw new a2},"throwIfBudibaseAICreditsExceeded"),htt=o(async e=>xC("budibaseAICredits","monthly",e),"setBudibaseAICredits")});var ytt=y(()=>{"use strict";att();ctt();ltt();ftt();dtt();ptt();mtt();gtt()});var ot={};G(ot,{addAction:()=>ZPr,addApp:()=>ekr,addAutomation:()=>skr,addGroup:()=>qne,addPlugin:()=>jne,addRow:()=>rkr,addRows:()=>ikr,addUsers:()=>o2,bustCache:()=>qre,decrement:()=>Ud,decrementMany:()=>OC,getCurrentUsageValues:()=>HZe,getLicensedQuota:()=>i2,getQuotaUsage:()=>ob,increment:()=>Na,incrementBudibaseAICredits:()=>u2,incrementMany:()=>lb,removeApp:()=>tkr,removeGroup:()=>Wne,removePlugin:()=>$ne,removeRow:()=>nkr,removeRows:()=>okr,removeUsers:()=>Uv,set:()=>xC,setAllUsage:()=>jre,setAppUsageValue:()=>Wre,setBudibaseAICredits:()=>htt,setUsage:()=>$Ze,setUsagePerApp:()=>VZe,throwIfBudibaseAICreditsExceeded:()=>c2,updatePluginCount:()=>Vne,updateUsage:()=>Mv,usageLimitIsExceeded:()=>Bne,utils:()=>tC});var Fv=y(()=>{"use strict";Uq();ytt();Hl()});async function Hne(e,t){try{let r=[];for(let u of e)if(u.roles){let c=u.roles[U.getProdWorkspaceID(t)];c&&r.push(c)}let n=await Promise.all(r.map(async u=>({[u]:await Se.roleToNumber(u)}))),i,s,a={};n.forEach(u=>{let[c,l]=Object.entries(u)[0];a[c]={roleId:c,roleNum:l}});for(let{roleId:u,roleNum:c}of Object.values(a))(s===void 0||c>s)&&(s=c,i=u);return i}catch(r){throw Be.logAlert(`Error finding higest role for ${e.length} on app ${t}`,r),r}}async function wtt(e,t){return t?t=t.filter(r=>e.includes(r._id)):t=await yn.getBulk(e,{enriched:!1}),t}async function Ett(e,t){if(!e.userGroups)return[];let r=await wtt(e.userGroups,t?.groups),n=t?.appId?U.getProdWorkspaceID(t?.appId):null,i=[];for(let s of r){let a=s.builder?.apps;n&&a?.includes(n)?i.push(n):n||(i=i.concat(a||[]))}return[...new Set(i)]}async function ukr(e,t,r){if(!e.userGroups)return null;let n=await wtt(e.userGroups,r?.groups),i=U.getProdWorkspaceID(t);return e.roles?.[i]?e.roles[i]:(n=n.filter(u=>u?.roles?Object.keys(u.roles).includes(i):!1),I.getCurrentContext()?.appId===t?Hne(n,t):await I.doInWorkspaceContext(t,async()=>Hne(n,t)))}async function ckr(e){if(!e||!e.userGroups)return e;let t=await Stt(e.userGroups,{enriched:!1}),r=[];for(let i of t)i?.roles&&(r=r.concat(Object.keys(i.roles)));r=[...new Set(r)];for(let i of r)await I.doInWorkspaceContext(i,async()=>{if(e.roles[i])return;let s=await Hne(t,i);s&&(e.roles[i]=s)});let n=await Ett(e,{groups:t});if(n.length&&!e.builder?.global){let i=e.builder?.apps||[];e.builder={...e.builder,apps:i.concat(n)}}return e}async function Kne(){return await yn.fetch()}async function vtt(e){return await yn.get(e)}async function Stt(e,t={enriched:!0}){return yn.getBulk(e,t)}async function btt(e){if(await yn.getByName(e))throw new s2(e)}async function _tt(e){let t=await yn.getGroupUsers(e._id);if(!t.length)return 0;let n=await we.getGlobalDB().getMultiple(t.map(s=>s._id));return(await Km.creatorsInList(n)).filter(s=>s).length}async function Ttt(e){let t=[],r=!e._id,n=0;if(!e._id)e._id=yn.generateUserGroupID(),await btt(e.name),t.push(ue.group.created(e));else{let u=await yn.get(e._id);if(u.name!==e.name&&await btt(e.name),t.push(ue.group.updated(e)),JSON.stringify(u.roles)!==JSON.stringify(e.roles)){let c=u.users?.length||0,l=0;c>0&&(l=await _tt(u)),Object.values(e.roles).includes("CREATOR")?n=c-l:n=-c,t.push(ue.group.permissionsEdited(e))}}await Promise.all(t);let{users:i,...s}=e,a=o(()=>yn.save(s),"saveGroup");if(r)return await qne(a);{let u=await a();if(n>0)await o2(0,n);else if(n<0){let c=await _tt(e),l=Math.abs(n)-c;l>0&&await Uv(0,l)}return u}}async function lkr(e,t){let r;try{r=await yn.get(e)}catch{throw new Error("Group not found")}let n=Object.values(r.roles||{}).includes("CREATOR"),i=o(()=>{},"recalculateCreatorsQuotasFn");if(n){let a=we.getGlobalDB(),u=await yn.getGroupUsers(e),l=(await Promise.all(u.map(m=>a.get(m._id)))).map(m=>({...m,userGroups:m.userGroups.filter(h=>h!==e)})),d=(await Km.creatorsInList(l)).filter(m=>m).length,p=u.length-d;p&&(i=o(()=>Uv(0,p),"recalculateCreatorsQuotasFn"))}let s=await yn.destroy(e,t);return await ue.group.deleted(r),await Wne(),await i(),s}async function fkr(e,t){let r=await yn.get(e),n=await ze.bulkGetGlobalUsersById(t),i=[];for(let c of n)c.userGroups||(c.userGroups=[]),c.userGroups.includes(e)||i.push(c);if(!i.length)return i;let s=i.map(c=>({...c,userGroups:[...c?.userGroups||[],e]}));if(await ze.bulkUpdateGlobalUsers(s),Object.values(r.roles||{}).includes("CREATOR")){let l=(await Km.creatorsInList(i)).filter(d=>d).length,f=i.length-l;f&&await o2(0,f)}let u=[];for(let c of t)u.push(Ce.user.invalidateUser(c));return await Promise.all(u),await ue.group.usersAdded(s.length,r,t),s}async function dkr(e,t){let r=await yn.get(e),n=await ze.bulkGetGlobalUsersById(t),i=[];for(let u of n){if(!u.userGroups||!u.userGroups.includes(e))continue;let c=u.userGroups.indexOf(e);u.userGroups.splice(c,1),i.push(u)}if(await ze.bulkUpdateGlobalUsers(i),Object.values(r.roles||{}).includes("CREATOR")){let c=(await Km.creatorsInList(i)).filter(f=>f).length,l=i.length-c;l&&await Uv(0,l)}let a=[];for(let u of t)a.push(Ce.user.invalidateUser(u));return await Promise.all(a),i.length&&await ue.group.usersDeleted(i.length,r,t),i}async function pkr(e,t){let r=await vtt(e);if(r.roles||(r.roles={}),t.appsToAdd)for(let n of t.appsToAdd)r.roles[n.appId]=n.roleId;if(t.appsToRemove)for(let n of t.appsToRemove)delete r.roles[n.appId];return r.builder={apps:Object.entries(r.roles).filter(([n,i])=>i==="CREATOR").map(([n])=>n)},await Ttt(r)}async function mkr(e){let t=await Kne(),r=[];for(let n of t)!n.roles||!n.roles[e]||(delete n.roles[e],r.push(n));return await yn.bulkSave(r)}async function hkr(){if(!await Nne()){let e=we.getGlobalDB(),r=(await Kne()||[]).filter(n=>Object.values(n?.roles||{}).includes("CREATOR"));for(let n of r){let i=await yn.getGroupUsers(n._id),a=(await Promise.all(i.map(f=>e.get(f._id)))).map(f=>({...f,userGroups:f.userGroups.filter(d=>d!==n._id)})),c=(await Km.creatorsInList(a)).filter(f=>f).length,l=i.length-c;await yn.save({...n,roles:{}}),l&&await Uv(0,l)}}}var Att=y(()=>{"use strict";F();Gne();Gl();Ru();Fv();o(Hne,"findHighestRole");o(wtt,"groupList");o(Ett,"getGroupBuilderAppIds");o(ukr,"getGroupRoleId");o(ckr,"enrichUserRolesFromGroups");o(Kne,"fetch");o(vtt,"get");o(Stt,"getBulk");o(btt,"guardNameAvailability");o(_tt,"getCreatorsCountInGroup");o(Ttt,"save");o(lkr,"remove");o(fkr,"addUsers");o(dkr,"removeUsers");o(pkr,"updateGroupApps");o(mkr,"cleanupApp");o(hkr,"adjustGroupCreatorsQuotas")});var xi={};G(xi,{addUsers:()=>fkr,adjustGroupCreatorsQuotas:()=>hkr,cleanupApp:()=>mkr,enrichUserRolesFromGroups:()=>ckr,fetch:()=>Kne,get:()=>vtt,getBulk:()=>Stt,getGroupBuilderAppIds:()=>Ett,getGroupRoleId:()=>ukr,remove:()=>lkr,removeUsers:()=>dkr,save:()=>Ttt,updateGroupApps:()=>pkr});var Qne=y(()=>{"use strict";Att()});var Bc,Rtt=y(()=>{"use strict";F();Ru();Qne();Fv();ze.UserDB.init(ot,xi,qn);Bc=ze.UserDB});var zne={};G(zne,{db:()=>Bc});var l2=y(()=>{"use strict";Rtt()});async function Itt(e,t){let r,n=5,i=!1,s,a=!0;for(;n>0;n--)try{a?s=await e():s=await exports.randomDelay(e),i=!0;break}catch(u){r=u}return i||Be.logWarn(`Failed to backoff: ${t}`,r),s}var Ott=y(()=>{"use strict";F();o(Itt,"backOff")});function Ctt(e,t,{status:r,automationId:n}={},i={}){let s=n?`${n}${Fd}`:"",a=r?`${r}${Fd}`:"",u;return r&&n?u=`${Yne.ALL}${Fd}${a}${s}`:r?u=`${Yne.STATUS}${Fd}${a}`:n?u=`${Yne.AUTOMATION}${Fd}${s}`:u=`${xtt.AUTOMATION_LOG}${Fd}`,{...i,descending:!0,startkey:`${u}${t}${gkr}`,endkey:`${u}${e}`}}function Ekr(e,t,r){return`${xtt.AUTOMATION_LOG}${Fd}${e}${Fd}${r}${Fd}${t}`}async function Xne(e,t,r={docs:!0}){let n=I.getProdWorkspaceDB();await n.exists()||(n=I.getDevWorkspaceDB());let i={status:r.status},s=r?.limit?r.limit:r?.paginate?f2+1:void 0,a=Ctt(e,t,i,{include_docs:r.docs,limit:s});r?.page&&(a.startkey=r.page);let u=await n.allDocs(a),c=bC(u,{paginate:r?.paginate,pageSize:f2});return{...c,totalLogs:c.totalRows}}async function Zne(e,t,r={}){let n=I.getProdWorkspaceDB();await n.exists()||(n=I.getDevWorkspaceDB());let i;try{let a={automationId:r?.automationId,status:r?.status},u=Ctt(e,t,a,{include_docs:!0,limit:f2+1});r?.page&&(u.startkey=r.page),i=await n.query(bkr(ykr.AUTOMATION_LOGS),u)}catch(a){if(a!=null&&(a.name==="not_found"||a.error==="not_found"))return await yet(),Zne(e,t,r);throw a}let s=bC(i,{paginate:!0,pageSize:f2});return{...s,totalLogs:s.totalRows/3}}async function Dtt(e,t){let r=I.getProdWorkspaceDB(),n=e._id,i=e.name,s=new Date().toISOString(),a=Ekr(s,t.status,n),u={...t,automationId:n,status:t.status,automationName:i,createdAt:s,_id:a};return await r.put(u),a}async function eie(e,{clearing:t}={clearing:!1}){let r=I.getProdWorkspaceDB();await Itt(async()=>{let n=await r.get(U.DocumentType.WORKSPACE_METADATA);for(let i of e){let s=i.split(U.SEPARATOR),a=`${s[s.length-3]}${U.SEPARATOR}${s[s.length-2]}`,u={};n.automationErrors&&(u=n.automationErrors),Array.isArray(u[a])||(u[a]=[]);let c=u[a].indexOf(i);t&&c!==-1?u[a].splice(c,1):u[a].push(i),u[a].length===0&&delete u[a],n.automationErrors=u}await r.put(n),await Ce.workspace.invalidateWorkspaceMetadata(n.appId,n)},"Failed to update app metadata with automation log error")}async function vkr(){let e=await Jne();try{return await Xne(_kr,e,{docs:!1,paginate:!1,limit:wkr})}catch{return{data:[],hasNextPage:!1,totalLogs:0}}}async function tie(){let e=I.getProdWorkspaceDB();try{let t=await vkr();if(!t.data||t.data.length===0)return;let r=t.data.map(i=>({_id:i.id,_rev:i.value.rev,_deleted:!0})),n=t.data.filter(i=>{let s=i.id.split(U.SEPARATOR);return s[s.length-1]==="error"}).map(i=>i.id);await e.bulkDocs(r),n.length&&await eie(n,{clearing:!0})}catch(t){Be.logAlert(`Failed to cleanup automation log history - Database "${e.name}"`,t)}}var Fd,gkr,xtt,Yne,ykr,bkr,_kr,wkr,f2,Jne,Ptt=y(()=>{"use strict";F();P();Ott();Xre();Zre();tne();({SEPARATOR:Fd,UNICODE_MAX:gkr,DocumentType:xtt,AutomationViewMode:Yne,ViewName:ykr,getQueryIndex:bkr}=U),_kr=new Date(0).toISOString(),wkr=100,f2=10,Jne=o(async()=>qq("automationLogRetentionDays"),"oldestLogDate");o(Ctt,"getAutomationLogParams");o(Ekr,"generateAutomationLogID");o(Xne,"getAllLogs");o(Zne,"getLogsByView");o(Dtt,"writeLog");o(eie,"updateAppMetadataWithErrors");o(vkr,"getExpiredLogs");o(tie,"clearOldHistory")});var rie={};G(rie,{logSearch:()=>Tkr,oldestLogDate:()=>ktt,storeLog:()=>Akr});async function Skr(e,t,r,n){let i,s=new Date().toISOString(),a=await ktt();return(!e||e<a)&&(e=a),r||t?i=await Zne(e,s,{automationId:r,status:t,page:n}):i=await Xne(e,s,{status:t,page:n,docs:!0,paginate:!0}),i}async function Tkr(e){return await tie(),await Skr(e.startDate,e.status,e.automationId,e.page)}async function Akr(e,t){if(!U.isProdWorkspaceID(I.getWorkspaceId()))return;let r=await Dtt(e,t);t.status==="error"&&await eie([r]),await tie()}var ktt,Ntt=y(()=>{"use strict";F();P();Ptt();ktt=Jne;o(Skr,"getLogs");o(Tkr,"logSearch");o(Akr,"storeLog")});var uh={};G(uh,{logs:()=>rie});var Ltt=y(()=>{"use strict";Ntt()});function Ftt(e,t){return Mtt.default.readFileSync((0,Utt.join)(e,t),"utf8")}var Mtt,Utt,Btt=y(()=>{"use strict";Mtt=q(require("fs")),Utt=require("path");o(Ftt,"loadJSFile")});var nie={};G(nie,{checkPluginQuotas:()=>Okr,deletePlugin:()=>Ikr,storePlugin:()=>Rkr});async function Rkr(metadata,directory,source,origin){let db=we.getGlobalDB(),version=metadata.package.version,name=metadata.package.name,description=metadata.package.description,hash=metadata.schema.hash,bucketPath=ce.getPluginS3Dir(name),files=await ce.uploadDirectory(ce.ObjectStoreBuckets.PLUGINS,directory,bucketPath),jsFile=files.find(e=>e.name.endsWith(".js")),iconFile=files.find(e=>e.name.endsWith(".svg"));if(!jsFile)throw new Error("Plugin missing .js file.");if(metadata.schema.type==="datasource"){let js=Ftt(directory,jsFile.name);try{eval(js)}catch(e){let t=e?.message?e.message:JSON.stringify(e);throw new Error(`JS invalid: ${t}`)}}let iconFileName=iconFile?iconFile.name:null,pluginId=U.generatePluginID(name),rev;try{rev=(await db.get(pluginId))._rev}catch(e){rev=void 0}let doc={_id:pluginId,_rev:rev,...metadata,name,version,hash,description,source};iconFileName&&(doc.iconFileName=iconFileName),source&&(doc={...doc,source}),origin&&origin.source==="github"&&(doc.origin=origin);let write=o(async()=>{let e=await db.put(doc);return await ue.plugin.imported(doc),{...doc,_rev:e.rev}},"write");return rev?await write():await jne(write)}async function Ikr(e){let t=we.getGlobalDB();try{let r=await t.get(e),n=ce.getPluginS3Dir(r.name);await ce.deleteFolder(ce.ObjectStoreBuckets.PLUGINS,n),await t.remove(e,r._rev),await ue.plugin.deleted(r),await $ne()}catch(r){let n=r?.message?r?.message:r;throw new Error(`Failed to delete plugin: ${n}`)}}async function Okr(){let e=we.getGlobalDB();try{let r=(await e.allDocs(U.getPluginParams())).rows.length;console.log(`Syncing plugin count: ${r}`),await Vne(r)}catch(t){Be.logAlert("Unable to retrieve plugins for quota check",t)}}var qtt=y(()=>{"use strict";P();F();Btt();Fv();o(Rkr,"storePlugin");o(Ikr,"deletePlugin");o(Okr,"checkPluginQuotas")});function xkr(){return!!L.ENCRYPTION_KEY}async function Ckr(){let e=await sb.get();return Object.keys(e.variables)}async function Dkr(e){let r=(await sb.get()).variables,n={};for(let[i,s]of Object.entries(r))switch(e){case"development":n[i]=s.development;break;case"production":default:n[i]=s.production;break}return n}async function jtt(e){if(!(await Ii.cache.getCachedLicense()).features.includes("environmentVariables"))throw new Error("User does not have access to environment variables feature.");let r=await sb.get();r.variables=e(r.variables),await sb.update(r)}async function Pkr(e,t){if($tt(e))await jtt(n=>(n[e]=t,n));else throw new Error("Variable name has characters that are not allowed")}async function kkr(e){await jtt(t=>(delete t[e],t))}function $tt(e){return/^[a-zA-Z0-9-_]+$/.test(e)}var Vtt=y(()=>{"use strict";F();P();Gl();Bv();o(xkr,"isEncryptionKeyAvailable");o(Ckr,"fetch");o(Dkr,"fetchValues");o(jtt,"changeValues");o(Pkr,"update");o(kkr,"remove");o($tt,"isValid")});var qc={};G(qc,{fetch:()=>Ckr,fetchValues:()=>Dkr,isEncryptionKeyAvailable:()=>xkr,isValid:()=>$tt,remove:()=>kkr,update:()=>Pkr});var Gtt=y(()=>{"use strict";Vtt()});async function Nkr(e,t,r){let n={operation:"READ",table:yC.searchTable(),tables:{},paginate:{limit:r||9,page:t},filters:e,resource:{fields:[]},sort:{timestamp:{direction:"descending",type:"string"}}},i=Ktt._query(n);if(Array.isArray(i))throw new Error("Cannot execute multiple queries for audit log search");return{sql:i.sql,bindings:i.bindings}}function Lkr(e){return`al${fe}${e}${fe}${Ne.newid()}`}async function Qtt(e){e._id||(e._id=Lkr(e.timestamp)),e.type||(e.type=eg);try{let r=await I.getAuditLogsDB().put(e);return{...e,_rev:r.rev}}catch(t){Be.logAlert("Failed to write audit log",t)}}async function iie(e,t,r){t||(t=1);let n=I.getAuditLogsDB();try{let i=9+1,s=await Nkr(e,t,i),a=yC.searchTable(),u=Ktt.convertJsonStringColumns(a,await n.sql(s.sql,s.bindings)),c;u.length>i&&(c=u.pop());let l={rows:u,hasNextPage:!!c};return l.hasNextPage&&(l.bookmark=t+1),l}catch(i){if(i.status===404&&!r?.isRetry)return await Mkr(),await zZe(),await iie(e,t,{isRetry:!0});throw i}}async function Mkr(){let e=I.getAuditLogsDB(),r=(await e.allDocs(U.getDocParams("al",null,{include_docs:!0}))).rows.map(n=>n.doc).filter(n=>n&&!n.type).map(n=>({...n,type:eg}));await e.bulkDocs(r)}function ztt(e){let t=I.getAuditLogsDB(),r=new Htt,n=t.dump(r,{filter:s=>{let a=s;if(!a._id?.startsWith("al"))return!1;let u=!0,c=o((l,f)=>{!l||l.length===0||(u=!!(u&&f&&l.includes(f)))},"matcher");if(c(e.userIds,a.userId),c(e.appIds,a.appId),c(e.events,a.event),(e.startDate||e.endDate)&&(u=u&&a.timestamp>=e.startDate&&a.timestamp<=e.endDate),e.fullSearch){let l=JSON.stringify(s);u=u&&l.includes(e.fullSearch)}return u}}),i=new Htt;return r.on("data",s=>{let a=JSON.parse(Buffer.from(s).toString());if(Array.isArray(a.docs)){let u="";for(let c of a.docs)u+=JSON.stringify(c)+`
441
441
  `;i.write(u)}}),r.on("end",()=>{i.end()}),{promise:n,stream:i}}var Htt,Ktt,Ytt=y(()=>{"use strict";F();P();$l();Vre();Htt=require("memorystream"),Ktt=new pt.Sql("sqlite3");o(Nkr,"getAuditLogSqlQuery");o(Lkr,"generateAuditLogID");o(Qtt,"save");o(iie,"searchSQL");o(Mkr,"migrate");o(ztt,"dump")});var Xtt=R((CKn,Jtt)=>{"use strict";var Fkr=[].indexOf;Jtt.exports=function(e,t){if(Fkr)return e.indexOf(t);for(var r=0;r<e.length;++r)if(e[r]===t)return r;return-1}});var Ztt=R((exports,module)=>{"use strict";var indexOf=Xtt(),iFrame=null,Object_keys=o(function(e){if(Object.keys)return Object.keys(e);var t=[];for(var r in e)t.push(r);return t},"Object_keys"),forEach=o(function(e,t){if(e.forEach)return e.forEach(t);for(var r=0;r<e.length;r++)t(e[r],r,e)},"forEach"),defineProp=function(){try{return Object.defineProperty({},"_",{}),function(e,t,r){Object.defineProperty(e,t,{writable:!0,enumerable:!1,configurable:!0,value:r})}}catch{return function(t,r,n){t[r]=n}}}(),globals=["Array","Boolean","Date","Error","EvalError","Function","Infinity","JSON","Math","NaN","Number","Object","RangeError","ReferenceError","RegExp","String","SyntaxError","TypeError","URIError","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","eval","isFinite","isNaN","parseFloat","parseInt","undefined","unescape","window","document"];function Context(){}o(Context,"Context");Context.prototype={};var Script=exports.Script=o(function(t){if(!(this instanceof Script))return new Script(t);iFrame||(iFrame=document.createElement("iframe"),iFrame.setAttribute("sandbox","allow-scripts allow-same-origin"),iFrame.style||(iFrame.style={}),iFrame.style.display="none",document.body.appendChild(iFrame)),this.code=t,this.iFrame=iFrame},"NodeScript");Script.prototype.runInContext=function(e){if(!(e instanceof Context))throw new TypeError("needs a 'context' argument.");var t=this.iFrame.contentWindow,r=Object_keys(t);let n=[];var i=t.eval,s=t.execScript;forEach(Object_keys(e),function(c){if(t[c]!==void 0){let l={key:c,value:t[c]};n.push(l)}t[c]=e[c]}),!i&&s&&(s.call(t,"null"),i=t.eval);var a=Object_keys(t),u=i.call(t,this.code);return forEach(Object_keys(t),function(c){(c in e||indexOf(a,c)===-1)&&(indexOf(globals,c)===-1?e[c]=t[c]:defineProp(e,c,t[c])),indexOf(r,c)===-1&&delete t[c]}),forEach(n,function(c){t[c.key]=c.value}),u};Script.prototype.runInThisContext=function(){return eval(this.code)};Script.prototype.runInNewContext=function(e){var t=Script.createContext(e),r=this.runInContext(t);return forEach(Object_keys(t),function(n){e[n]=t[n]}),r};forEach(Object_keys(Script.prototype),function(e){exports[e]=Script[e]=function(t){var r=Script(t);return r[e].apply(r,[].slice.call(arguments,1))}});exports.createScript=function(e){return exports.Script(e)};exports.createContext=Script.createContext=function(e){var t=new Context;return typeof e=="object"&&forEach(Object_keys(e),function(r){t[r]=e[r]}),t}});var gs=R(La=>{"use strict";La.__esModule=!0;La.extend=ert;La.indexOf=$kr;La.escapeExpression=Vkr;La.isEmpty=Gkr;La.createFrame=Hkr;La.blockParams=Kkr;La.appendContextPath=Qkr;var Bkr={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#x27;","`":"&#x60;","=":"&#x3D;"},qkr=/[&<>"'`=]/g,Wkr=/[&<>"'`=]/;function jkr(e){return Bkr[e]}o(jkr,"escapeChar");function ert(e){for(var t=1;t<arguments.length;t++)for(var r in arguments[t])Object.prototype.hasOwnProperty.call(arguments[t],r)&&(e[r]=arguments[t][r]);return e}o(ert,"extend");var sie=Object.prototype.toString;La.toString=sie;var oie=o(function(t){return typeof t=="function"},"isFunction");oie(/x/)&&(La.isFunction=oie=o(function(e){return typeof e=="function"&&sie.call(e)==="[object Function]"},"isFunction"));La.isFunction=oie;var trt=Array.isArray||function(e){return e&&typeof e=="object"?sie.call(e)==="[object Array]":!1};La.isArray=trt;function $kr(e,t){for(var r=0,n=e.length;r<n;r++)if(e[r]===t)return r;return-1}o($kr,"indexOf");function Vkr(e){if(typeof e!="string"){if(e&&e.toHTML)return e.toHTML();if(e==null)return"";if(!e)return e+"";e=""+e}return Wkr.test(e)?e.replace(qkr,jkr):e}o(Vkr,"escapeExpression");function Gkr(e){return!e&&e!==0?!0:!!(trt(e)&&e.length===0)}o(Gkr,"isEmpty");function Hkr(e){var t=ert({},e);return t._parent=e,t}o(Hkr,"createFrame");function Kkr(e,t){return e.path=t,e}o(Kkr,"blockParams");function Qkr(e,t){return(e?e+".":"")+t}o(Qkr,"appendContextPath")});var Iu=R((d2,rrt)=>{"use strict";d2.__esModule=!0;var aie=["description","fileName","lineNumber","endLineNumber","message","name","number","stack"];function uie(e,t){var r=t&&t.loc,n=void 0,i=void 0,s=void 0,a=void 0;r&&(n=r.start.line,i=r.end.line,s=r.start.column,a=r.end.column,e+=" - "+n+":"+s);for(var u=Error.prototype.constructor.call(this,e),c=0;c<aie.length;c++)this[aie[c]]=u[aie[c]];Error.captureStackTrace&&Error.captureStackTrace(this,uie);try{r&&(this.lineNumber=n,this.endLineNumber=i,Object.defineProperty?(Object.defineProperty(this,"column",{value:s,enumerable:!0}),Object.defineProperty(this,"endColumn",{value:a,enumerable:!0})):(this.column=s,this.endColumn=a))}catch{}}o(uie,"Exception");uie.prototype=new Error;d2.default=uie;rrt.exports=d2.default});var irt=R((p2,nrt)=>{"use strict";p2.__esModule=!0;var cie=gs();p2.default=function(e){e.registerHelper("blockHelperMissing",function(t,r){var n=r.inverse,i=r.fn;if(t===!0)return i(this);if(t===!1||t==null)return n(this);if(cie.isArray(t))return t.length>0?(r.ids&&(r.ids=[r.name]),e.helpers.each(t,r)):n(this);if(r.data&&r.ids){var s=cie.createFrame(r.data);s.contextPath=cie.appendContextPath(r.data.contextPath,r.name),r={data:s}}return i(t,r)})};nrt.exports=p2.default});var srt=R((m2,ort)=>{"use strict";m2.__esModule=!0;function zkr(e){return e&&e.__esModule?e:{default:e}}o(zkr,"_interopRequireDefault");var DC=gs(),Ykr=Iu(),Jkr=zkr(Ykr);m2.default=function(e){e.registerHelper("each",function(t,r){if(!r)throw new Jkr.default("Must pass iterator to #each");var n=r.fn,i=r.inverse,s=0,a="",u=void 0,c=void 0;r.data&&r.ids&&(c=DC.appendContextPath(r.data.contextPath,r.ids[0])+"."),DC.isFunction(t)&&(t=t.call(this)),r.data&&(u=DC.createFrame(r.data));function l(h,g,b){u&&(u.key=h,u.index=g,u.first=g===0,u.last=!!b,c&&(u.contextPath=c+h)),a=a+n(t[h],{data:u,blockParams:DC.blockParams([t[h],h],[c+h,null])})}if(o(l,"execIteration"),t&&typeof t=="object")if(DC.isArray(t))for(var f=t.length;s<f;s++)s in t&&l(s,s,s===t.length-1);else if(typeof Symbol=="function"&&t[Symbol.iterator]){for(var d=[],p=t[Symbol.iterator](),m=p.next();!m.done;m=p.next())d.push(m.value);t=d;for(var f=t.length;s<f;s++)l(s,s,s===t.length-1)}else(function(){var h=void 0;Object.keys(t).forEach(function(g){h!==void 0&&l(h,s-1),h=g,s++}),h!==void 0&&l(h,s-1,!0)})();return s===0&&(a=i(this)),a})};ort.exports=m2.default});var urt=R((h2,art)=>{"use strict";h2.__esModule=!0;function Xkr(e){return e&&e.__esModule?e:{default:e}}o(Xkr,"_interopRequireDefault");var Zkr=Iu(),eNr=Xkr(Zkr);h2.default=function(e){e.registerHelper("helperMissing",function(){if(arguments.length!==1)throw new eNr.default('Missing helper: "'+arguments[arguments.length-1].name+'"')})};art.exports=h2.default});var drt=R((g2,frt)=>{"use strict";g2.__esModule=!0;function tNr(e){return e&&e.__esModule?e:{default:e}}o(tNr,"_interopRequireDefault");var crt=gs(),rNr=Iu(),lrt=tNr(rNr);g2.default=function(e){e.registerHelper("if",function(t,r){if(arguments.length!=2)throw new lrt.default("#if requires exactly one argument");return crt.isFunction(t)&&(t=t.call(this)),!r.hash.includeZero&&!t||crt.isEmpty(t)?r.inverse(this):r.fn(this)}),e.registerHelper("unless",function(t,r){if(arguments.length!=2)throw new lrt.default("#unless requires exactly one argument");return e.helpers.if.call(this,t,{fn:r.inverse,inverse:r.fn,hash:r.hash})})};frt.exports=g2.default});var mrt=R((y2,prt)=>{"use strict";y2.__esModule=!0;y2.default=function(e){e.registerHelper("log",function(){for(var t=[void 0],r=arguments[arguments.length-1],n=0;n<arguments.length-1;n++)t.push(arguments[n]);var i=1;r.hash.level!=null?i=r.hash.level:r.data&&r.data.level!=null&&(i=r.data.level),t[0]=i,e.log.apply(e,t)})};prt.exports=y2.default});var grt=R((b2,hrt)=>{"use strict";b2.__esModule=!0;b2.default=function(e){e.registerHelper("lookup",function(t,r,n){return t&&n.lookupProperty(t,r)})};hrt.exports=b2.default});var brt=R((_2,yrt)=>{"use strict";_2.__esModule=!0;function nNr(e){return e&&e.__esModule?e:{default:e}}o(nNr,"_interopRequireDefault");var PC=gs(),iNr=Iu(),oNr=nNr(iNr);_2.default=function(e){e.registerHelper("with",function(t,r){if(arguments.length!=2)throw new oNr.default("#with requires exactly one argument");PC.isFunction(t)&&(t=t.call(this));var n=r.fn;if(PC.isEmpty(t))return r.inverse(this);var i=r.data;return r.data&&r.ids&&(i=PC.createFrame(r.data),i.contextPath=PC.appendContextPath(r.data.contextPath,r.ids[0])),n(t,{data:i,blockParams:PC.blockParams([t],[i&&i.contextPath])})})};yrt.exports=_2.default});var lie=R(w2=>{"use strict";w2.__esModule=!0;w2.registerDefaultHelpers=wNr;w2.moveHelperToHooks=ENr;function fb(e){return e&&e.__esModule?e:{default:e}}o(fb,"_interopRequireDefault");var sNr=irt(),aNr=fb(sNr),uNr=srt(),cNr=fb(uNr),lNr=urt(),fNr=fb(lNr),dNr=drt(),pNr=fb(dNr),mNr=mrt(),hNr=fb(mNr),gNr=grt(),yNr=fb(gNr),bNr=brt(),_Nr=fb(bNr);function wNr(e){aNr.default(e),cNr.default(e),fNr.default(e),pNr.default(e),hNr.default(e),yNr.default(e),_Nr.default(e)}o(wNr,"registerDefaultHelpers");function ENr(e,t,r){e.helpers[t]&&(e.hooks[t]=e.helpers[t],r||delete e.helpers[t])}o(ENr,"moveHelperToHooks")});var wrt=R((E2,_rt)=>{"use strict";E2.__esModule=!0;var vNr=gs();E2.default=function(e){e.registerDecorator("inline",function(t,r,n,i){var s=t;return r.partials||(r.partials={},s=o(function(a,u){var c=n.partials;n.partials=vNr.extend({},c,r.partials);var l=t(a,u);return n.partials=c,l},"ret")),r.partials[i.args[0]]=i.fn,s})};_rt.exports=E2.default});var Ert=R(fie=>{"use strict";fie.__esModule=!0;fie.registerDefaultDecorators=RNr;function SNr(e){return e&&e.__esModule?e:{default:e}}o(SNr,"_interopRequireDefault");var TNr=wrt(),ANr=SNr(TNr);function RNr(e){ANr.default(e)}o(RNr,"registerDefaultDecorators")});var die=R((v2,vrt)=>{"use strict";v2.__esModule=!0;var INr=gs(),qv={methodMap:["debug","info","warn","error"],level:"info",lookupLevel:o(function(t){if(typeof t=="string"){var r=INr.indexOf(qv.methodMap,t.toLowerCase());r>=0?t=r:t=parseInt(t,10)}return t},"lookupLevel"),log:o(function(t){if(t=qv.lookupLevel(t),typeof console<"u"&&qv.lookupLevel(qv.level)<=t){var r=qv.methodMap[t];console[r]||(r="log");for(var n=arguments.length,i=Array(n>1?n-1:0),s=1;s<n;s++)i[s-1]=arguments[s];console[r].apply(console,i)}},"log")};v2.default=qv;vrt.exports=v2.default});var Srt=R(pie=>{"use strict";pie.__esModule=!0;pie.createNewLookupObject=xNr;var ONr=gs();function xNr(){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r];return ONr.extend.apply(void 0,[Object.create(null)].concat(t))}o(xNr,"createNewLookupObject")});var mie=R(kC=>{"use strict";kC.__esModule=!0;kC.createProtoAccessControl=kNr;kC.resultIsAllowed=NNr;kC.resetLoggedProperties=MNr;function CNr(e){return e&&e.__esModule?e:{default:e}}o(CNr,"_interopRequireDefault");var Trt=Srt(),DNr=die(),PNr=CNr(DNr),S2=Object.create(null);function kNr(e){var t=Object.create(null);t.constructor=!1,t.__defineGetter__=!1,t.__defineSetter__=!1,t.__lookupGetter__=!1;var r=Object.create(null);return r.__proto__=!1,{properties:{whitelist:Trt.createNewLookupObject(r,e.allowedProtoProperties),defaultValue:e.allowProtoPropertiesByDefault},methods:{whitelist:Trt.createNewLookupObject(t,e.allowedProtoMethods),defaultValue:e.allowProtoMethodsByDefault}}}o(kNr,"createProtoAccessControl");function NNr(e,t,r){return Art(typeof e=="function"?t.methods:t.properties,r)}o(NNr,"resultIsAllowed");function Art(e,t){return e.whitelist[t]!==void 0?e.whitelist[t]===!0:e.defaultValue!==void 0?e.defaultValue:(LNr(t),!1)}o(Art,"checkWhiteList");function LNr(e){S2[e]!==!0&&(S2[e]=!0,PNr.default.log("error",'Handlebars: Access has been denied to resolve the property "'+e+`" because it is not an "own property" of its parent.
442
442
  You can add a runtime option to disable the check or this warning:
443
443
  See https://handlebarsjs.com/api-reference/runtime-options.html#options-to-control-prototype-access for details`))}o(LNr,"logUnexpecedPropertyAccessOnce");function MNr(){Object.keys(S2).forEach(function(e){delete S2[e]})}o(MNr,"resetLoggedProperties")});var A2=R(Kl=>{"use strict";Kl.__esModule=!0;Kl.HandlebarsEnvironment=yie;function Rrt(e){return e&&e.__esModule?e:{default:e}}o(Rrt,"_interopRequireDefault");var pb=gs(),UNr=Iu(),hie=Rrt(UNr),FNr=lie(),BNr=Ert(),qNr=die(),T2=Rrt(qNr),WNr=mie(),jNr="4.7.8";Kl.VERSION=jNr;var $Nr=8;Kl.COMPILER_REVISION=$Nr;var VNr=7;Kl.LAST_COMPATIBLE_COMPILER_REVISION=VNr;var GNr={1:"<= 1.0.rc.2",2:"== 1.0.0-rc.3",3:"== 1.0.0-rc.4",4:"== 1.x.x",5:"== 2.0.0-alpha.x",6:">= 2.0.0-beta.1",7:">= 4.0.0 <4.3.0",8:">= 4.3.0"};Kl.REVISION_CHANGES=GNr;var gie="[object Object]";function yie(e,t,r){this.helpers=e||{},this.partials=t||{},this.decorators=r||{},FNr.registerDefaultHelpers(this),BNr.registerDefaultDecorators(this)}o(yie,"HandlebarsEnvironment");yie.prototype={constructor:yie,logger:T2.default,log:T2.default.log,registerHelper:o(function(t,r){if(pb.toString.call(t)===gie){if(r)throw new hie.default("Arg not supported with multiple helpers");pb.extend(this.helpers,t)}else this.helpers[t]=r},"registerHelper"),unregisterHelper:o(function(t){delete this.helpers[t]},"unregisterHelper"),registerPartial:o(function(t,r){if(pb.toString.call(t)===gie)pb.extend(this.partials,t);else{if(typeof r>"u")throw new hie.default('Attempting to register a partial called "'+t+'" as undefined');this.partials[t]=r}},"registerPartial"),unregisterPartial:o(function(t){delete this.partials[t]},"unregisterPartial"),registerDecorator:o(function(t,r){if(pb.toString.call(t)===gie){if(r)throw new hie.default("Arg not supported with multiple decorators");pb.extend(this.decorators,t)}else this.decorators[t]=r},"registerDecorator"),unregisterDecorator:o(function(t){delete this.decorators[t]},"unregisterDecorator"),resetLoggedPropertyAccesses:o(function(){WNr.resetLoggedProperties()},"resetLoggedPropertyAccesses")};var HNr=T2.default.log;Kl.log=HNr;Kl.createFrame=pb.createFrame;Kl.logger=T2.default});var Ort=R((R2,Irt)=>{"use strict";R2.__esModule=!0;function bie(e){this.string=e}o(bie,"SafeString");bie.prototype.toString=bie.prototype.toHTML=function(){return""+this.string};R2.default=bie;Irt.exports=R2.default});var xrt=R(_ie=>{"use strict";_ie.__esModule=!0;_ie.wrapHelper=KNr;function KNr(e,t){if(typeof e!="function")return e;var r=o(function(){var i=arguments[arguments.length-1];return arguments[arguments.length-1]=t(i),e.apply(this,arguments)},"wrapper");return r}o(KNr,"wrapHelper")});var Nrt=R(ch=>{"use strict";ch.__esModule=!0;ch.checkRevision=ZNr;ch.template=eLr;ch.wrapProgram=I2;ch.resolvePartial=tLr;ch.invokePartial=rLr;ch.noop=Prt;function QNr(e){return e&&e.__esModule?e:{default:e}}o(QNr,"_interopRequireDefault");function zNr(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}o(zNr,"_interopRequireWildcard");var YNr=gs(),Bd=zNr(YNr),JNr=Iu(),qd=QNr(JNr),Wd=A2(),Crt=lie(),XNr=xrt(),Drt=mie();function ZNr(e){var t=e&&e[0]||1,r=Wd.COMPILER_REVISION;if(!(t>=Wd.LAST_COMPATIBLE_COMPILER_REVISION&&t<=Wd.COMPILER_REVISION))if(t<Wd.LAST_COMPATIBLE_COMPILER_REVISION){var n=Wd.REVISION_CHANGES[r],i=Wd.REVISION_CHANGES[t];throw new qd.default("Template was precompiled with an older version of Handlebars than the current runtime. Please update your precompiler to a newer version ("+n+") or downgrade your runtime to an older version ("+i+").")}else throw new qd.default("Template was precompiled with a newer version of Handlebars than the current runtime. Please update your runtime to a newer version ("+e[1]+").")}o(ZNr,"checkRevision");function eLr(e,t){if(!t)throw new qd.default("No environment passed to template");if(!e||!e.main)throw new qd.default("Unknown template object: "+typeof e);e.main.decorator=e.main_d,t.VM.checkRevision(e.compiler);var r=e.compiler&&e.compiler[0]===7;function n(a,u,c){c.hash&&(u=Bd.extend({},u,c.hash),c.ids&&(c.ids[0]=!0)),a=t.VM.resolvePartial.call(this,a,u,c);var l=Bd.extend({},c,{hooks:this.hooks,protoAccessControl:this.protoAccessControl}),f=t.VM.invokePartial.call(this,a,u,l);if(f==null&&t.compile&&(c.partials[c.name]=t.compile(a,e.compilerOptions,t),f=c.partials[c.name](u,l)),f!=null){if(c.indent){for(var d=f.split(`
@@ -1084,9 +1084,9 @@ KF8 6ZS`,"Works Start":"2022-09-23T12:00:00.000","Quote Price":1412,"Quote Date"
1084
1084
 
1085
1085
  Instructions: ${e.instructions}
1086
1086
 
1087
- Generate the content based on these instructions. Format appropriately for a ${e.contentType}.`),i=(await gf(r.messages))?.trim();return i?{response:i,success:!0}:{success:!1,response:"Generate Text AI Step Failed: AI did not return any content."}}catch(t){return{success:!1,response:Et(t)}}}function dHr(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 rt.unreachable(e)}}var hbt=y(()=>{"use strict";tt();vn();P();_e();iT();o(mbt,"run");o(dHr,"getContentTypePrompt")});function hHr(e){return new Promise(t=>setTimeout(t,e))}async function gHr(e,t,r){let n=await(0,gbt.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)}async function yHr(e,t){let r=ce.ObjectStoreBuckets.APPS,{stream:n}=await ce.getReadStream(r,e.key),i=e.name||"document";return await t.uploadFile(n,i,e.extension)}async function bHr(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.")}}async function ybt({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 Rt.getLLMOrThrow(),r;if(e.source==="URL"&&typeof e.file=="string")r=await gHr(e.file,e.fileType,t);else if(e.source==="Attachment"&&typeof e.file!="string")r=await yHr(e.file,t);else throw new Error("Invalid file input \u2013 source and file type do not match");let n=Rt.extractFileData(e.schema,r,t.supportsFiles),i=[],s;for(let a=1;a<=oT;a++){try{let u=await t.prompt(n);if(i=await bHr(u),!(Array.isArray(i)&&i.length===0)||a===oT)break;console.warn(`[Extract AI] Empty extraction result on attempt ${a}/${oT}, retrying...`)}catch(u){if(s=u,a===oT)throw console.error(`[Extract AI] Final extraction attempt ${a}/${oT} failed:`,u),u;console.warn(`[Extract AI] Extraction attempt ${a}/${oT} failed, retrying...`,u)}await hHr(mHr)}if(s&&Array.isArray(i)&&i.length===0)throw s;return{data:i,success:!0}}catch(t){return console.error("Document extraction error:",t),{success:!1,data:{},response:Et(t)}}}var gbt,oT,mHr,bbt=y(()=>{"use strict";F();tt();P();gbt=q(require("node-fetch"));vn();oT=5,mHr=100;o(hHr,"sleep");o(gHr,"processUrlFile");o(yHr,"processAttachmentFile");o(bHr,"parseAIResponse");o(ybt,"run")});async function wbt({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,_bt.v4)();return cp.default.llmobs.trace({kind:"agent",name:"automation.agent",sessionId:a},async u=>{try{let c=await T.ai.agents.getOrThrow(r);if(cp.default.llmobs.annotate(u,{inputData:n,metadata:{agentId:r,agentName:c.name,appId:t,isForkedProcess:H.isInThread(),forkedProcessName:process.env.FORKED_PROCESS_NAME||"main"}}),t&&ku(t)&&c.live!==!0)return cp.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 T.ai.agents.buildPromptAndTools(c);cp.default.llmobs.annotate(u,{metadata:{toolCount:Object.keys(f).length}});let{chat:d,providerOptions:p}=await T.ai.llm.createLLM(c.aiconfig,a,u),m;if(i&&s&&Object.keys(s).length>0){let N=be.structuredOutput.normalizeSchemaForStructuredOutput(s);m=Js.Output.object({schema:(0,Js.jsonSchema)(N)})}let h=new Set,g=Object.keys(f).length>0,w=await new Js.ToolLoopAgent({model:(0,Js.wrapLanguageModel)({model:d,middleware:(0,Js.extractReasoningMiddleware)({tagName:"think"})}),instructions:l||void 0,tools:g?f:void 0,toolChoice:g?"auto":"none",stopWhen:(0,Js.stepCountIs)(30),providerOptions:p?.(g),output:m,onStepFinish({content:N,toolCalls:k,toolResults:$}){$0(h,k,$);for(let M of N)M.type==="tool-error"&&h.delete(M.toolCallId)}}).stream({prompt:n}),E,v;for await(let N of(0,Js.readUIMessageStream)({stream:w.toUIMessageStream({sendReasoning:!0,onError:k=>{let $=HE(k);return v=$,$}})}))E=N;let S=E?Ble([E]):[];if(h.size>0||S.length>0){let N=V0(S);return cp.default.llmobs.annotate(u,{outputData:N,tags:{error:"1","error.type":"IncompleteToolCall"}}),{success:!1,response:N,message:E}}let A,x;try{A=await w.text}catch(N){x=HE(N)}let O=v||x;if(O&&!A)return cp.default.llmobs.annotate(u,{outputData:O,tags:{error:"1","error.type":"StreamingError"}}),{success:!1,response:O,message:E};let C=await w.usage,D=m?await w.output:void 0;return cp.default.llmobs.annotate(u,{outputData:A,metadata:{stepCount:E?.parts?.length??0}}),{success:!0,response:A,usage:C,message:E,output:D}}catch(c){let l=Et(c);return cp.default.llmobs.annotate(u,{outputData:l,tags:{error:"1","error.type":c?.name||"UnknownError"}}),console.error("Agent step failed",{agentId:r,appId:t,liteLLMUrl:H.LITELLM_URL,errorName:c?.name,errorMessage:l}),{success:!1,response:l}}})}var Js,_bt,cp,Ebt=y(()=>{"use strict";vn();F();_e();le();qle();Js=require("ai"),_bt=require("uuid");Ie();cp=q(require("dd-trace"));$e();o(wbt,"run")});async function vbt({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:_n(e.value,t,{noThrow:!1})}}catch(n){return{success:!1,response:Et(n)}}}var Sbt=y(()=>{"use strict";vn();Yn();o(vbt,"run")});async function U$(){let e={...G0};if(H.SELF_HOSTED&&(e.OPENAI={...at.steps.openai.definition,deprecated:!0}),await Bn.isEnabled("AI_AGENTS")&&(e.AGENT=at.steps.agent.definition),H.SELF_HOSTED){let t=await T.plugins.fetch("automation");for(let r of t){let n=r.schema.schema;e[n.stepId]={...n,custom:!0}}}return e}async function Tbt(e){if(Wle[e]!=null)return Wle[e];if(H.SELF_HOSTED){let r=(await T.plugins.fetch("automation")).find(n=>n.schema.schema.stepId===e);if(!r)throw new Error(`Unable to find action implementation for "${e}"`);return(await AZe(r)).action}}var Wle,G0,F$=y(()=>{"use strict";_e();rht();Aht();Iht();xht();Bht();Wht();Wgt();$gt();Hgt();Qgt();Jgt();eyt();nyt();syt();cyt();fyt();pyt();Hyt();Qyt();Yyt();Xyt();tbt();ibt();abt();cbt();fbt();pbt();hbt();bbt();Ebt();Sbt();$e();P();F();le();li();Wle={SEND_EMAIL_SMTP:tht,CREATE_ROW:Tht,GET_ROW:Kyt,UPDATE_ROW:Rht,DELETE_ROW:Oht,QUERY_ROWS:Gyt,OUTGOING_WEBHOOK:Ggt,EXECUTE_SCRIPT:Fht,EXECUTE_SCRIPT_V2:qht,EXECUTE_QUERY:qgt,API_REQUEST:jgt,SERVER_LOG:Kgt,DELAY:dyt,FILTER:lyt,COLLECT:zyt,TRIGGER_AUTOMATION_RUN:Jyt,OPENAI:ebt,CLASSIFY_CONTENT:sbt,PROMPT_LLM:ubt,TRANSLATE:lbt,SUMMARISE:dbt,GENERATE_TEXT:mbt,EXTRACT_FILE_DATA:ybt,AGENT:wbt,EXTRACT_STATE:vbt,discord:Ygt,slack:Zgt,zapier:ryt,integromat:uyt,n8n:oyt},G0={SEND_EMAIL_SMTP:at.steps.sendSmtpEmail.definition,CREATE_ROW:at.steps.createRow.definition,GET_ROW:at.steps.getRow.definition,UPDATE_ROW:at.steps.updateRow.definition,DELETE_ROW:at.steps.deleteRow.definition,QUERY_ROWS:at.steps.queryRows.definition,OUTGOING_WEBHOOK:at.steps.outgoingWebhook.definition,EXECUTE_SCRIPT:at.steps.executeScript.definition,EXECUTE_SCRIPT_V2:at.steps.executeScriptV2.definition,EXECUTE_QUERY:at.steps.executeQuery.definition,API_REQUEST:at.steps.apiRequest.definition,SERVER_LOG:at.steps.serverLog.definition,DELAY:at.steps.delay.definition,FILTER:at.steps.filter.definition,LOOP:at.steps.loop.definition,COLLECT:at.steps.collect.definition,TRIGGER_AUTOMATION_RUN:at.steps.triggerAutomationRun.definition,BRANCH:at.steps.branch.definition,CLASSIFY_CONTENT:at.steps.classifyText.definition,PROMPT_LLM:at.steps.promptLLM.definition,TRANSLATE:at.steps.translate.definition,SUMMARISE:at.steps.summarise.definition,GENERATE_TEXT:at.steps.generate.definition,EXTRACT_FILE_DATA:at.steps.extract.definition,EXTRACT_STATE:at.steps.extractState.definition,LOOP_V2:at.steps.loopV2.definition,discord:at.steps.discord.definition,slack:at.steps.slack.definition,zapier:at.steps.zapier.definition,integromat:at.steps.make.definition,n8n:at.steps.n8n.definition};H.SELF_HOSTED&&(Wle.EXECUTE_BASH=nbt,G0.EXECUTE_BASH=at.steps.bash.definition,H.isTest()&&(G0.OPENAI=at.steps.openai.definition,G0.AGENT=at.steps.agent.definition));o(U$,"getActionDefinitions");o(Tbt,"getAction")});function THr(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}}async function Rbt(e,t){if(H.DISABLE_AUTOMATION_LOGS)return;let r=H.AUTOMATION_MAX_LOG_SIZE_MB;(0,Abt.default)(t)/SHr>r&&THr(t,r);try{await uh.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"}),Be.logAlert("Error writing automation log",i)}}async function Ibt(e){let t=await uh.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(U.SEPARATOR)[2]>t&&s.push(a)}r.automationErrors[n]=s}return e}var Abt,SHr,jle=y(()=>{"use strict";F();tt();Abt=q(require("object-sizeof"));$e();SHr=1024*1024;o(THr,"sanitiseResults");o(Rbt,"storeLog");o(Ibt,"checkAppMetadata")});var Obt,$le,xbt,Cbt=y(()=>{"use strict";F();P();$e();Ej();uue();Obt=5,$le=class{static{o(this,"AutomationEmitter")}constructor(t){this.chainCount=t,this.metadata={automationChainCount:t}}async getMaxAutomationChain(){let n=(await I.getWorkspaceDB().get("app_metadata"))?.automations?.chainAutomations;return n===!0?Obt:H.isTest()?0:n===void 0&&H.SELF_HOSTED?Obt:0}async emitRow({eventName:t,appId:r,row:n,table:i,oldRow:s,user:a}){let u=await this.getMaxAutomationChain();this.chainCount>=u||_j({emitter:af,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||wj({emitter:af,eventName:t,appId:r,table:n,metadata:this.metadata})}},xbt=$le});var Pbt={};var Dbt,Vle=y(()=>{"use strict";Dbt=q(require("dd-trace"));process.env.DD_APM_ENABLED&&(console.log("Starting dd-trace"),Dbt.default.init({debug:process.env.DD_ENV==="qa",llmobs:{mlApp:process.env.DD_LLMOBS_ML_APP||"budibase"}}))});function B$(e,t,r){if(e.isLegacyLoop){t.items=gue(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}}}function sT(e,t,r){if(e.isLegacyLoop){t.items=gue(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}}}function IHr(e){return{id:e.id,stepId:e.stepId,inputs:e.inputs,outputs:RHr}}async function OHr(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,H0.cloneDeep)(a);for(let c of Object.values(u))if(c)if(Sye(c))c.conditions=c.conditions.map(i);else for(let[l,f]of Object.entries(c))n[l]=_n(l,e),typeof f=="string"&&Du(f).length>0&&(c[l]=_n(f,e));return u},"evaluateBindings");return Qt.runQuery([n],i(t.condition)).length>0}async function xHr(e){e.env=await ip();try{let{config:t}=await Dr.getSettingsConfigDoc();e.settings={url:t.platformUrl,logo:t.logoUrl,company:t.company}}catch{e.settings={}}}function CHr(e,t){e.trigger.outputs={...e.trigger.outputs,...t},e.steps[0]=e.trigger}async function DHr(e){let t=e.data.automation?.definition?.trigger;if(!t||!Cp(t)&&!Ja(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 T.automations.get(n)}async function kbt(e,t={}){let r=e.data.event.appId;if(!r)throw new Error("Unable to execute, event doesn't contain workspace ID.");return await Fh.default.trace("automation.executeInThread",async n=>(n.addTags({workspaceId:r,automationId:e.data.automation?._id}),await I.doInWorkspaceContext(r,async()=>{await DHr(e),await I.ensureSnippetContext();let i=await ip();return await I.doInEnvironmentContext(i,async()=>new q$(e,t).execute())})))}var Fh,H0,AHr,RHr,q$,Nbt,Gle=y(()=>{"use strict";F();tt();_e();Yn();P();Fh=q(require("dd-trace")),H0=require("lodash/fp");F$();vn();jle();Mh();gn();Ie();$e();Cbt();QD();le();f$();process.env.DD_APM_ENABLED&&(Vle(),QT(Pbt));Ght.threadSetup();AHr=at.triggers.definitions.CRON.stepId,RHr={success:!0,status:"stopped"};o(B$,"stepSuccess");o(sT,"stepFailure");o(IHr,"stepStopped");o(OHr,"branchMatches");o(xHr,"enrichBaseContext");o(CHr,"setTriggerOutput");o(DHr,"reloadAutomation");q$=class{static{o(this,"Orchestrator")}constructor(t,r={}){this.job=t,this.stopped=!1,this.onProgress=r.onProgress,this.job.data.automation=Ddt(t.data.automation);let n=t.data.event.metadata?.automationChainCount||0;this.emitter=new xbt(n+1)}get automation(){return this.job.data.automation}get appId(){return this.job.data.event.appId}isCron(){return this.automation.definition.trigger.stepId===AHr}async stopCron(t,r){if(!this.isCron())return;let n=`CRON disabled reason=${t} - ${this.appId}/${this.automation._id}`;Be.logWarn(n),await Hle(this.job.id);let{result:i}=r||{};i&&(CHr(i,{success:!1,status:"stopped_error"}),i.status="stopped_error",await this.logResult(i))}async logResult(t){await Rbt(this.automation,t)}async getMetadata(){let t=yct(this.automation._id);return await I.getWorkspaceDB().tryGet(t)||{_id:t,errorCount:0}}async incrementErrorCount(){let t=I.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 be.wait(1e3+Math.random()*1e3)}}Be.logAlertWithInfo("Failed to update error count in automation metadata",t.name,this.automation._id,r)}isProd(){return ku(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 Fh.default.trace("execute",async t=>{t.addTags({appId:this.appId,automationId:this.automation._id});let r=(0,H0.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 xHr(s);let a=this.job.data.event.timeout||H.AUTOMATION_THREAD_TIMEOUT,u=[];try{u=await be.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>=iZe?(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 Fh.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);if(this.reportStepProgress(u,s(c),c,t),c.outputs.success===!1&&c.outputs.status==null)return i;n++;break}default:{this.reportStepProgress(u,"running",void 0,t),a(u,await ot.addAction(async()=>{let l=await this.executeStep(t,u);return u.stepId==="EXTRACT_STATE"&&(t.state??={},t.state[l.inputs.key]=l.outputs.value),ue.action.automationStepExecuted({stepId:u.stepId}),l}));let c=i.at(-1);if(c&&(this.reportStepProgress(u,s(c),c,t),u.stepId==="TRIGGER_AUTOMATION_RUN"&&c.outputs.success===!1&&(c.outputs.status==="error"||c.outputs.status==="stopped_error")))return i;n++;break}}}return i})}async executeLoopStep(t,r){return await Fh.default.trace("executeLoopStep",async n=>{let i=(0,H0.cloneDeep)(r.inputs.children)||[],s=r.inputs;await _W(s,t);let a=Idt(r),u=(t._loopDepth||0)+1;t._loopDepth=u;try{let c=0,l=[];try{l=Rdt(r)}catch{return n.addTags({status:"INCORRECT_TYPE",iterations:c}),sT(r,{status:"INCORRECT_TYPE"})}let d=r.isLegacyLoop?Number.MAX_SAFE_INTEGER:Odt(r),p=xdt(i,d),m=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}),sT(r,TS(p,"max_iterations_reached",c));if(Adt(r,g))return n.addTags({status:"FAILURE_CONDITION_MET",iterations:c}),sT(r,TS(p,"FAILURE_CONDITION_MET",c));let b=t.loop,w=t._loopIteration;t.loop={currentItem:g},t._loopIteration={current:c+1,total:m};try{let E=t._stepIndex,v=await this.executeSteps(t,i);t._stepIndex=E;for(let A of v)i.some(O=>O.id===A.id)&&Cdt(p,A,c);if(v.some(A=>A.outputs.success===!1))return sT(r,TS(p,void 0,void 0,!0));if(this.stopped){let A=TS(p,void 0,c+1);return A.status="stopped",n.addTags({status:"stopped",iterations:c+1}),B$(r,A)}}finally{t.loop=b,t._loopIteration=w}}let h=c===0?"no_iterations":void 0;return B$(r,TS(p,h,c))}finally{t._loopDepth=u-1}})}async executeBranchStep(t,r){return await Fh.default.trace("executeBranchStep",async n=>{let{branches:i,children:s}=r.inputs;for(let a of i)if(await OHr(t,a)){n.addTags({branchName:a.name,branchId:a.id});let u=B$(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"}),[sT(r,{status:"No branch condition met"})]})}async executeStep(t,r){return await Fh.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}),IHr(r);let i=await Tbt(r.stepId);if(i==null)throw new Error(`Cannot find automation step by name ${r.stepId}`);let s=(0,H0.cloneDeep)(r.inputs);r.stepId!=="EXECUTE_SCRIPT_V2"&&r.stepId!=="EXTRACT_STATE"&&(s=await _W(s,t)),s=hue(s,r.schema.inputs.properties);let a;try{a=await Fh.default.trace("fn",()=>i({inputs:s,appId:this.appId,emitter:this.emitter,context:t}))}catch(u){return sT(r,{status:"error",error:Et(u)})}return r.stepId==="FILTER"&&"result"in a&&a.result===!1&&(this.stopped=!0,a.status="stopped"),r.stepId==="TRIGGER_AUTOMATION_RUN"&&"status"in a&&a.status==="stopped"&&(this.stopped=!0),n.addTags({outputsKeys:Object.keys(a)}),B$(r,a,s)})}};o(kbt,"executeInThread");Nbt=o(async e=>{let t=e.data.event.appId;if(!t)throw new Error("Unable to execute, event doesn't contain app ID.");await I.doInWorkspaceContext(t,async()=>{await new q$(e).stopCron("stalled")})},"removeStalled")});async function Lbt(){return(await I.getWorkspaceDB().allDocs(Nu(null,{include_docs:!0}))).rows.map(r=>r.doc)}async function kHr(e,t){let r=e.row.tableId;if(e.appId==null)throw`No appId specified for ${t} - check event emitters.`;!r||!await Qce(r)||await I.doInWorkspaceContext(e.appId,async()=>{let n=await Lbt();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(!H.ALLOW_DEV_AUTOMATIONS&&Gc(e.appId)&&!await rae(i._id))continue;if(await Ubt(i,{row:e.row,oldRow:e.oldRow}))try{await jn.add({automation:i,event:e},Kle)}catch(a){Be.logAlert("Failed to queue automation",a)}}})}async function Qle(e,t){try{await kHr(e,t)}catch(r){Be.logWarn("Unable to process row event",r)}}function NHr(e,t){return Qt.runQuery([e],t).length>0}function rT(e){return e!==null&&"steps"in e&&Array.isArray(e.steps)}async function Qo(e,t,{getResponses:r,onProgress:n}={}){if(e.disabled)throw new Error("Automation is disabled");if(Ut.automations.isAppAction(e)&&!await rae(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]=Lb(t.fields[l],c[l]);t.fields=a}else(Ut.automations.isRowAction(e)||Ut.automations.isWebhookAction(e))&&(t={...t,...t.fields,fields:{}});let i={automation:e,event:t};return await Ubt(e,{row:i.event?.row??{},oldRow:i.event?.oldRow??{}})?r?(i.event={...i.event,appId:I.getWorkspaceId(),automation:e},kbt({data:i},{onProgress:n})):jn.add(i,Kle):{outputs:{success:!1,status:"stopped"},message:"Automation did not run. Filter conditions in trigger were not met."}}async function Mbt(){if(H.isInThread()||!H.SELF_HOSTED||H.MULTI_TENANCY)return;let e=await U.getAllWorkspaces({dev:!1,idsOnly:!0});for(let t of e)await I.doInWorkspaceContext(t,async()=>{let r=await Lbt(),n=[];for(let i of r)if(K0(i)){let s={automation:i,event:{appId:t,timestamp:Date.now()}};n.push(jn.add(s,Kle))}await Promise.all(n)})}async function Ubt(e,t){let r=e.definition.trigger,n=r.inputs,i=n?.filters,s=n?.tableId;if(!i)return!0;if(r.stepId===at.triggers.definitions.ROW_UPDATED.stepId||r.stepId===at.triggers.definitions.ROW_SAVED.stepId){let a=await SS(s,t.row);return NHr(a,i)}return!0}var W$,Kle,up=y(()=>{"use strict";_e();Ie();Ej();Eo();F();_e();P();vn();$e();Ch();Gle();Wa();Bh();Mh();W$=at.triggers.definitions,Kle={removeOnComplete:!0,removeOnFail:!0};o(Lbt,"getAllAutomations");o(kHr,"queueRelevantRowAutomations");o(Qle,"queueRowAutomations");af.on("row:save",async function(e){!e||!e.row||!e.row.tableId||await Qle(e,"row:save")});af.on("row:update",async function(e){!e||!e.row||!e.row.tableId||await Qle(e,"row:update")});af.on("row:delete",async function(e){!e||!e.row||!e.row.tableId||await Qle(e,"row:delete")});o(NHr,"rowPassesFilters");o(rT,"isAutomationResults");o(Qo,"externalTrigger");o(Mbt,"rebootTrigger");o(Ubt,"checkTriggerFilters")});var j$,ja,Fbt,Bbt,MHr,UHr,FHr,BHr,qbt,Wbt=y(()=>{"use strict";j$=require("ai"),ja=require("zod");F();P();up();le();Fbt="Trigger this automation (APP triggers only). Returns all step outputs.",Bbt="Fields map: key/value pairs. Values must be string, number, boolean, or array (no nested objects).",MHr=o(e=>{let r=e.definition?.trigger?.inputs?.fields;return!r||Object.keys(r).length===0?"":Object.entries(r).map(([n,i])=>`${n} (${i})`).join(", ")},"getAutomationFieldsSummary"),UHr=o(async({automationId:e,fields:t})=>{let r=t??{},i=await I.getWorkspaceDB().tryGet(e);if(!i)return{error:`Automation with ID ${e} not found`};let s=i.definition?.trigger?.stepId;if(s!=="APP")return{error:`Cannot trigger automation '${i.name}'. Only APP trigger type supported. This automation has: ${s}`};let a=await Qo(i,{fields:r},{getResponses:!0});return rT(a)?{success:a.status==="success",status:a.status,steps:a.steps}:{success:!1,error:a.message||"Automation did not trigger"}},"triggerAutomationById"),FHr=[{name:"list_automations",sourceType:"AUTOMATION",sourceLabel:"Budibase",description:"List all automations in the current app",tool:(0,j$.tool)({description:"List all automations in the current app",inputSchema:ja.z.object({}),execute:async()=>({automations:await T.automations.fetch()})})},{name:"get_automation",sourceType:"AUTOMATION",sourceLabel:"Budibase",description:"Get details about a specific automation by ID",tool:(0,j$.tool)({description:"Get details about a specific automation by ID",inputSchema:ja.z.object({automationId:ja.z.string().describe("The ID of the automation to retrieve")}),execute:async e=>{let{automationId:t}=e;return{automation:await T.automations.get(t)}}})}],BHr=o((e=[])=>{let t=e.filter(r=>r._id&&r.definition?.trigger?.stepId==="APP").map(r=>{let n=r.name||r._id,s=`${r._id.replace(/[^A-Za-z0-9_-]/g,"_")}_trigger`.substring(0,64),a=MHr(r),u=a?`${Bbt} Available fields: ${a}.`:Bbt,c=a?`Trigger "${n}" automation. ${Fbt} Fields: ${a}.`:`Trigger "${n}" automation. ${Fbt}`;return{name:s,readableName:`${n}.trigger`,sourceType:"AUTOMATION",sourceLabel:"Budibase",description:c,tool:(0,j$.tool)({description:c,inputSchema:ja.z.object({fields:ja.z.record(ja.z.string(),ja.z.union([ja.z.string(),ja.z.number(),ja.z.boolean(),ja.z.array(ja.z.unknown())])).nullish().describe(u)}),execute:async l=>{let{fields:f}=l;return UHr({automationId:r._id,fields:f})}})}});return[...FHr,...t]},"createAutomationTools"),qbt=BHr});var zle,Q0,qHr,jbt,$bt=y(()=>{"use strict";P();zle=require("ai"),Q0=require("zod");le();qHr=[{name:"list_tables",sourceType:"INTERNAL_TABLE",sourceLabel:"Budibase",description:"List all tables in the current app",tool:(0,zle.tool)({description:"List all tables in the current app",inputSchema:Q0.z.object({showSchema:Q0.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 T.tables.getAllTables();return t?{tables:r}:{tables:r.map(n=>({id:n._id,tableName:n.name}))}}})},{name:"get_table",sourceType:"INTERNAL_TABLE",sourceLabel:"Budibase",description:"Get details about a specific table by ID",tool:(0,zle.tool)({description:"Get details about a specific table by ID",inputSchema:Q0.z.object({tableId:Q0.z.string().describe("The ID of the table to retrieve")}),execute:async e=>{let{tableId:t}=e;return{table:await T.tables.getTable(t)}}})}],jbt=qHr});var Gbt,mt,Vbt,$$,Yle,WHr,jHr,$Hr,Hbt,VHr,GHr,HHr,KHr,QHr,zHr,YHr,JHr,XHr,Kbt,Qbt=y(()=>{"use strict";Gbt=require("ai"),mt=require("zod");P();_e();le();Vbt="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.",$$='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.',Yle='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". IMPORTANT: Do NOT use "and", "or", or nested $and/$or conditions. All operators must be top-level keys in a single flat object. Operators oneOf and containsAny require array values (e.g. {"oneOf": {"status": ["active", "pending"]}}). To combine multiple filters, include multiple operator keys: {"fuzzy": {"name": "John", "city": "London"}, "equal": {"status": "active"}}. Examples: Find where status equals "active": {"equal": {"status": "active"}}. Find where status is "active" OR "pending": {"oneOf": {"status": ["active", "pending"]}}. Find where tags contains any of "urgent", "review": {"containsAny": {"tags": ["urgent", "review"]}}. 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}}}. Combine fuzzy name with exact status: {"fuzzy": {"name": "John"}, "equal": {"status": "active"}}.',WHr=30,jHr=o(e=>new Set(e==="external"?xs:kn),"getProtectedColumns"),$Hr=o(e=>e.type==="formula"||e.type==="auto"||e.type==="ai"||e.autocolumn===!0,"isReadOnlyField"),Hbt=o(e=>{switch(e.type){case"string":return"string";case"longform":return"longform";case"options":return"options";case"number":return"number";case"boolean":return"boolean";case"array":return"array";case"datetime":return"datetime";case"attachment":return"attachments";case"attachment_single":return"attachment";case"link":return"link";case"json":return"json";case"bb_reference":return"bb_reference";case"bb_reference_single":return"bb_reference_single";case"bigint":return"bigint";case"barcodeqr":return"barcode";case"signature_single":return"signature";default:return e.type}},"formatFieldType"),VHr=o(({name:e,schema:t})=>{let r=`${e} (${Hbt(t)})`,n=t.constraints?.inclusion;return(t.type==="options"||t.type==="array")&&Array.isArray(n)&&n.length>0&&(r+=` options: ${n.join(" | ")}`),t.type==="link"&&"tableId"in t&&t.tableId&&(r+=` -> ${t.tableId}`),r},"formatFieldSummary"),GHr=o((e,t)=>{let r=jHr(t);return Object.entries(e).filter(([n,i])=>!(r.has(n)||$Hr(i))).map(([n,i])=>({name:n,schema:i}))},"getWritableFields"),HHr=o(e=>{if(e.length===0)return"";let t=e.map(VHr),r=t.slice(0,WHr),n=t.length-r.length;return n>0&&r.push(`... +${n} more (use get_table for full schema)`),r.join(", ")},"buildSchemaSummary"),KHr=o(e=>e?`${$$} Available fields: ${e}.`:$$,"buildDataFieldDescription"),QHr=o((e,t)=>{if(e.length===0)return mt.z.record(mt.z.string(),mt.z.any()).describe($$);let r={};for(let n of e){let i=Hbt(n.schema),s=n.schema.constraints?.inclusion,a=Array.isArray(s)&&s.length>0?` Options: ${s.join(" | ")}.`:"";r[n.name]=mt.z.any().describe(`Field type: ${i}.${a}`)}return mt.z.object(r).partial().loose().describe(KHr(t))},"buildRowDataSchema"),zHr=o(e=>e?`${Yle} Available fields: ${e}.`:Yle,"buildSearchQueryDescription"),YHr=o(e=>mt.z.object({query:mt.z.union([mt.z.record(mt.z.string(),mt.z.any()),mt.z.string()]).nullish().describe(zHr(e)),sort:mt.z.object({column:mt.z.string().describe("Column to sort by"),order:mt.z.enum(["ascending","descending"]).describe("Sort order")}).nullish().describe("Sort configuration"),limit:mt.z.number().nullish().describe("Maximum number of results")}),"buildSearchInputSchema"),JHr={list_rows:{description:"List rows in a given table with optional pagination",inputSchema:mt.z.object({limit:mt.z.number().nullish().describe("Maximum number of rows to return"),bookmark:mt.z.union([mt.z.string(),mt.z.number()]).nullish().describe("Bookmark for pagination (returned from previous request)")}),execute:async(e,{limit:t,bookmark:r})=>{let n={tableId:e,query:{},limit:t??void 0,bookmark:r??void 0},i=await T.rows.search(n);return{rows:i.rows,hasNextPage:i.hasNextPage,bookmark:i.bookmark}}},get_row:{description:"Get a specific row by ID",inputSchema:mt.z.object({rowId:mt.z.string().describe("The ID of the row to retrieve")}),execute:async(e,{rowId:t})=>({row:await T.rows.find(e,t)})},create_row:{description:`Create a new row. Only include fields that match the table schema. ${Vbt}`,inputSchema:mt.z.object({data:mt.z.record(mt.z.string(),mt.z.any()).describe($$)}),execute:async(e,{data:t})=>{let{row:r}=await T.rows.save(e,t,void 0);return{row:r}}},update_row:{description:`Update an existing row. ${Vbt}`,inputSchema:mt.z.object({rowId:mt.z.string().describe("The ID of the row to update"),rowRev:mt.z.string().describe("The current _rev of the row (if known)"),data:mt.z.record(mt.z.string(),mt.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,{rowId:t,rowRev:r,data:n})=>{let s={...await T.rows.find(e,t),...n,_id:t,_rev:r},{row:a}=await T.rows.save(e,s,void 0);return{row:a}}},search_rows:{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:mt.z.object({query:mt.z.union([mt.z.record(mt.z.string(),mt.z.any()),mt.z.string()]).nullish().describe(Yle),sort:mt.z.object({column:mt.z.string().describe("Column to sort by"),order:mt.z.enum(["ascending","descending"]).describe("Sort order")}).nullish().describe("Sort configuration"),limit:mt.z.number().nullish().describe("Maximum number of results")}),execute:async(e,{query:t,sort:r,limit:n})=>{let i=t;if(typeof i=="string")try{i=JSON.parse(i)}catch(u){return{error:`Invalid JSON in query parameter: ${u}`}}let s={tableId:e,query:i||{},limit:n??void 0};return r&&(s.sort=r.column,s.sortOrder=r.order==="ascending"?"ascending":"descending"),{rows:(await T.rows.search(s)).rows}}}},XHr=o(e=>e.split("_").map(t=>t.charAt(0).toUpperCase()+t.slice(1)).join(" "),"formatActionLabel"),Kbt=o(({tableId:e,tableName:t,tableSourceType:r,tableSchema:n,sourceLabel:i,sourceIconType:s})=>{let a=r==="external",u=a?"EXTERNAL_TABLE":"INTERNAL_TABLE",c=i||(a?"External":"Budibase"),l=GHr(n,r),f=HHr(l),d=QHr(l,f),p=YHr(f);return Object.entries(JHr).map(([m,h])=>{let g=`${XHr(m)} in "${t}". ${h.description}`,w=`${e.replace(/[^A-Za-z0-9_-]/g,"_")}_${m}`.substring(0,64),E=h.inputSchema;return m==="create_row"?E=mt.z.object({data:d}):m==="update_row"?E=mt.z.object({rowId:mt.z.string().describe("The ID of the row to update"),rowRev:mt.z.string().describe("The current _rev of the row (if known)"),data:d}):m==="search_rows"&&(E=p),{name:w,readableName:`${t}.${m}`,sourceType:u,sourceLabel:c,sourceIconType:s,description:g,tool:(0,Gbt.tool)({description:g,inputSchema:E,execute:async v=>h.execute(e,v)})}})},"createRowTools")});var zbt,Jle=y(()=>{"use strict";P();Wbt();$bt();Qbt();zbt=o((e=[],t={},r={},n=[])=>{let i=[...qbt(n),...jbt],s=e.filter(a=>a._id).flatMap(a=>{let u=a.sourceType==="external";return Kbt({tableId:a._id,tableName:a.name||a._id,tableSourceType:a.sourceType,tableSchema:a.schema,sourceLabel:u?t[a.sourceId]||"External":"Budibase",sourceIconType:u?r[a.sourceId]:void 0})});return[...i,...s]},"getBudibaseTools")});var Jbt,Xle,Ybt,ZHr,e4r,Xbt,Zbt,e_t,t_t=y(()=>{"use strict";F();P();Jbt=require("ai"),Xle=require("zod");XS();Ho();Ybt=o((e,t)=>e.toLowerCase().replace(/[^a-z0-9_-]/g,"_").replace(/_+/g,"_").replace(/^_|_$/g,"").substring(0,t),"sanitiseNameSegment"),ZHr=o((e,t,r)=>{let n=Ybt(t||"datasource",20)||"datasource",i=Ybt(e.name||"query",24)||"query";return`${r}_${n}_${i}`},"buildScopedToolName"),e4r=o(e=>{let t={};for(let r of e.parameters||[])t[r.name]=Xle.z.string().optional().describe(`Parameter: ${r.name}`);return Xle.z.object(t)},"buildParametersSchema"),Xbt=o(({query:e,sourceType:t,sourceLabel:r,sourceIconType:n,description:i,namePrefix:s})=>{let a=ZHr(e,r,s),u=e4r(e);return{name:a,readableName:e.name,description:i,sourceType:t,sourceLabel:r,sourceIconType:n,tool:(0,Jbt.tool)({description:i,inputSchema:u,execute:async c=>{let l=I.getWorkspaceId();if(!l)return{success:!1,error:"No app context available"};let f=ei(l,null,{body:{parameters:c},params:{queryId:e._id}});try{await JS(f);let{data:d,...p}=f.body||{};return{success:!0,data:d,info:p}}catch(d){return{success:!1,error:(d instanceof Error?d.message:String(d))||"Query execution failed"}}}})}},"createQueryTool"),Zbt=o((e,t)=>{let r=e.restTemplateMetadata?.description?`${e.name}: ${e.restTemplateMetadata.description}`:`Execute REST query: ${e.name}`;return Xbt({query:e,description:r,sourceType:"REST_QUERY",sourceLabel:t||"API",namePrefix:"rest"})},"createRestQueryTool"),e_t=o((e,t,r)=>Xbt({query:e,description:`Execute datasource query: ${e.name}`,sourceType:"DATASOURCE_QUERY",sourceLabel:t||"Datasource",sourceIconType:r,namePrefix:"ds"}),"createDatasourceQueryTool")});var t4r,r4r,r_t,n_t=y(()=>{"use strict";Jle();t_t();t4r=o(e=>{if(!e||typeof e!="object"||!("error"in e))return;let{error:t}=e;if(!(t==null||t===!1))return t instanceof Error?t.message||"Tool execution failed":String(t)},"getToolFailure"),r4r=o(e=>{let t=e.tool.execute;if(!t)return e.tool;let r=o(async(...n)=>{let i=await t(...n),s=t4r(i);if(s)throw new Error(s);return i},"wrappedExecute");return{...e.tool,execute:r}},"wrapTool"),r_t=o(e=>Object.fromEntries(e.map(t=>[t.name,r4r(t)])),"toToolSet")});var i_t,V$,n4r,Zle,o_t=y(()=>{"use strict";P();i_t=require("ai"),V$=require("zod"),n4r=V$.z.object({query:V$.z.string().describe("The search query to find relevant information"),num_results:V$.z.number().optional().default(10).describe("Number of results to return")}),Zle=o(e=>({name:"search_web_search",sourceType:"SEARCH",sourceLabel:"Exa",description:"Search the web using Exa",tool:(0,i_t.tool)({description:"Search the web using Exa",inputSchema:n4r,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 uT,s_t,i4r,efe,a_t=y(()=>{"use strict";P();uT=require("zod"),s_t=require("ai"),i4r=uT.z.object({objective:uT.z.string().describe("Natural language description of what to search for"),search_queries:uT.z.array(uT.z.string()).describe("Array of search query strings"),max_results:uT.z.number().optional().default(10).describe("Maximum number of results to return")}),efe=o(e=>({name:"search_web_search",description:"Search the web using Parallel AI",sourceType:"SEARCH",sourceLabel:"Parallel Search",tool:(0,s_t.tool)({description:"Search the web using Parallel AI",inputSchema:i4r,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 u_t=y(()=>{"use strict";o_t();a_t()});function l_t(e){return{name:e.name,readableName:e.readableName,description:e.description,sourceType:e.sourceType,sourceLabel:e.sourceLabel,sourceIconType:e.sourceIconType}}async function tfe(e){let[t,r,n,i,s]=await Promise.all([T.queries.fetch(),T.datasources.fetch(),e?T.ai.configs.find(e):Promise.resolve(void 0),T.tables.getAllTables(),T.automations.fetch()]),a=n?.webSearchConfig,u=new Map(r.filter(m=>!!m._id).map(m=>[m._id,m])),c=Object.fromEntries(r.filter(m=>!!m._id).map(m=>[m._id,m.name||"Datasource"])),l=Object.fromEntries(r.filter(m=>!!m._id).map(m=>[m._id,m.source||"CUSTOM"])),f=t.flatMap(m=>{let h=u.get(m.datasourceId);return!h||h.source!=="REST"?[]:[Zbt(m,h.name||"API")]}),d=t.flatMap(m=>{let h=u.get(m.datasourceId);return!h||h.source==="REST"?[]:[e_t(m,h.name||"Datasource",h.source||"CUSTOM")]}),p=[...zbt(i,c,l,s),...f,...d];return a?.apiKey&&(a.provider==="exa"?p.push(Zle(a.apiKey)):a.provider==="parallel"&&p.push(efe(a.apiKey))),p}async function s4r(e){return(await tfe(e)).filter(r=>!c_t(r)).map(l_t)}async function a4r(e,t={}){let{baseSystemPrompt:r,includeGoal:n=!0}=t,i=await tfe(e.aiconfig),s=new Set(e.enabledTools||[]),a=u4r(i.filter(c=>s.has(c.name)&&!c_t(c)),i);return{systemPrompt:Rt.composeAutomationAgentSystemPrompt({baseSystemPrompt:r,goal:n?e.goal:void 0,promptInstructions:e.promptInstructions,includeGoal:n}),tools:r_t(a)}}function u4r(e,t){let r=new Set(e.map(i=>i.name)),n=new Map(t.map(i=>[i.name,i]));if(e.some(i=>i.sourceType==="EXTERNAL_TABLE"||i.sourceType==="INTERNAL_TABLE"))for(let i of["get_table","list_tables"]){if(r.has(i))continue;let s=n.get(i);s&&(e.push(s),r.add(s.name))}if(e.some(i=>i.sourceType==="AUTOMATION"))for(let i of["get_automation","list_automations"]){if(r.has(i))continue;let s=n.get(i);s&&(e.push(s),r.add(s.name))}return e}function Ble(e){let t=[];for(let r of e)if(!(r.role!=="assistant"||!r.parts))for(let n of r.parts)(0,G$.isToolUIPart)(n)&&!c4r.has(n.state)&&t.push({toolName:(0,G$.getToolName)(n),toolCallId:n.toolCallId,state:n.state});return t}function $0(e,t,r){for(let n of t)n.toolCallId&&e.add(n.toolCallId);for(let n of r)n.toolCallId&&e.delete(n.toolCallId)}function V0(e){let t=e.map(r=>r.toolName).join(", ");return`The AI model failed to complete tool execution${t?` for: ${t}`:""}. This may be due to a compatibility issue with the selected model. Please try a different model or try again.`}var G$,o4r,c_t,c4r,qle=y(()=>{"use strict";P();tt();Jle();G$=require("ai");n_t();le();u_t();o4r=new Set(["list_tables","get_table","list_automations","get_automation"]),c_t=o(e=>o4r.has(e.name),"isHelperTool");o(l_t,"toToolMetadata");o(tfe,"getAvailableTools");o(s4r,"getAvailableToolsMetadata");o(a4r,"buildPromptAndTools");o(u4r,"addHelperTools");c4r=new Set(["output-available","output-error","output-denied"]);o(Ble,"findIncompleteToolCalls");o($0,"updatePendingToolCalls");o(V0,"formatIncompleteToolCallError")});var sfe={};G(sfe,{enqueueAgentFileIngestion:()=>ofe,getQueue:()=>ife,init:()=>f_t});function ife(){return rfe||(rfe=new In.BudibaseQueue(In.JobQueue.RAG_INGESTION,{maxStalledCount:3,jobOptions:{attempts:5,backoff:{type:"exponential",delay:f4r},timeout:d4r,removeOnComplete:!0,removeOnFail:1e3},jobTags:e=>({workspaceId:e.workspaceId,agentId:e.agentId,fileId:e.fileId})})),rfe}function f_t(e=l4r){if(nfe)return Promise.resolve();try{return nfe=!0,ife().process(e,async t=>{let{workspaceId:r,agentId:n,fileId:i,objectStoreKey:s}=t.data;await I.doInWorkspaceContext(r,async()=>{let a,u;try{a=await zc.getOrThrow(n)}catch(c){if(c?.status===404){await t.discard();return}throw c}try{u=await zc.getAgentFileOrThrow(i)}catch(c){if(c?.status===404){await t.discard();return}throw c}if(!u.objectStoreKey&&s&&(u.objectStoreKey=s),!u.objectStoreKey)throw new Error("Agent file does not have an object store key");try{let c=await p4r(u.objectStoreKey),l=await tue(a,u,c);u.status="ready",u.chunkCount=l.total,u.processedAt=new Date().toISOString(),u.errorMessage=void 0,await zc.updateAgentFile(u)}catch(c){throw await m4r(u,t,c),c}})})}catch{console.error("Error initialising the RAG ingestion queue"),nfe=!1}}async function ofe(e){return f_t(),await ife().add(e,{jobId:e.fileId})}var l4r,f4r,d4r,rfe,nfe,p4r,m4r,afe=y(()=>{"use strict";F();P();gn();hj();Fb();l4r=2,f4r=Ne.Duration.fromSeconds(10).toMs(),d4r=Ne.Duration.fromMinutes(10).toMs(),nfe=!1;o(ife,"getQueue");o(f_t,"init");o(ofe,"enqueueAgentFileIngestion");p4r=o(async e=>{let{stream:t}=await ce.getReadStream(wt.APPS,e),r=[];for await(let n of t)r.push(new Uint8Array(n));return Buffer.concat(r)},"loadFileBuffer"),m4r=o(async(e,t,r)=>{let n=t.opts.attempts||1;t.attemptsMade+1>=n&&(e.status="failed",e.errorMessage=r?.message||"Failed to process uploaded file",e.chunkCount=0,await zc.updateAgentFile(e))},"handleProcessingError")});var h4r,g4r,d_t=y(()=>{"use strict";F();P();gn();afe();gj();h4r=o((e,t,r,n)=>`${e}/ai/agents/${t}/files/${r}/${n}`,"buildAgentFileObjectStoreKey"),g4r=o(async e=>{let t=I.getOrThrowWorkspaceId(),r=et.generateAgentFileID(e.agentId),n=h4r(t,e.agentId,r,e.filename);try{await ce.upload({bucket:wt.APPS,filename:n,body:e.buffer,type:e.mimetype});let i=await nue({id:r,agentId:e.agentId,filename:e.filename,mimetype:e.mimetype,objectStoreKey:n,size:e.size??e.buffer.byteLength,uploadedBy:e.uploadedBy});try{return await ofe({workspaceId:t,agentId:e.agentId,fileId:i._id,objectStoreKey:n}),i}catch(s){throw i.status="failed",i.errorMessage=s?.message||"Failed to process uploaded file",i.chunkCount=0,await iue(i),s}}catch(i){throw await ce.deleteFile(wt.APPS,n).catch(()=>{}),i}},"uploadAgentFile")});var zc={};G(zc,{buildPromptAndTools:()=>a4r,create:()=>fdt,createAgentFile:()=>nue,duplicate:()=>uWr,fetch:()=>ldt,findIncompleteToolCalls:()=>Ble,formatIncompleteToolCallError:()=>V0,getAgentFileOrThrow:()=>sdt,getAvailableTools:()=>tfe,getAvailableToolsMetadata:()=>s4r,getOrThrow:()=>bj,listAgentFiles:()=>oue,remove:()=>lWr,removeAgentFile:()=>sue,toToolMetadata:()=>l_t,update:()=>cWr,updateAgentFile:()=>iue,updatePendingToolCalls:()=>$0,uploadAgentFile:()=>g4r});var H$=y(()=>{"use strict";ddt();qle();gj();d_t()});var Y$={};G(Y$,{create:()=>cfe,getOrThrow:()=>Q$,getSingle:()=>K$,update:()=>z$});async function K$(){let r=(await I.getWorkspaceDB().allDocs(et.getDocParams("chatapp",void 0,{include_docs:!0,limit:1}))).rows[0]?.doc;return r?ufe(r):void 0}async function Q$(e){if(!e)throw new j("chatAppId is required",400);let r=await I.getWorkspaceDB().tryGet(e);if(!r)throw new j("Chat App not found",404);return ufe(r)}async function cfe(e){let t=I.getWorkspaceDB();if(await K$())throw new j("Chat App already exists for this workspace",400);let n=p_t(e.agents===void 0?void 0:e.agents),i=new Date().toISOString(),s={_id:et.generateChatAppID(),createdAt:i,updatedAt:i,...e,agents:n??[]},{rev:a}=await t.put(s);return{...s,_rev:a}}async function z$(e){if(!e._id||!e._rev)throw new j("_id and _rev are required",400);let t=I.getWorkspaceDB(),r=await t.tryGet(e._id);if(!r)throw new j("Chat App not found",404);let n=p_t(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,ufe(s)}var ufe,y4r,p_t,lfe=y(()=>{"use strict";F();P();ufe=o(e=>({...e,live:e.live??!1,agents:e.agents??[]}),"withDefaults"),y4r=o(e=>{if(e!==void 0){if(!Array.isArray(e))throw new j("conversationStarters must contain prompt entries",400);if(e.length>3)throw new j("conversationStarters may contain at most 3 starters",400);return e.map(t=>{if(!t||typeof t!="object")throw new j("conversationStarters must contain prompt entries",400);if(typeof t.prompt!="string")throw new j("conversationStarters must contain prompt entries",400);return{prompt:t.prompt}})}},"normalizeConversationStarters"),p_t=o(e=>{if(e===void 0)return;if(!Array.isArray(e))throw new j("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 j("agents must contain valid agentId entries",400);return e.map(r=>({agentId:r.agentId,isEnabled:r.isEnabled===!0,isDefault:r.isDefault===!0,conversationStarters:y4r(r.conversationStarters)}))},"normalizeAgents");o(K$,"getSingle");o(Q$,"getOrThrow");o(cfe,"create");o(z$,"update")});var m_t,h_t,J$,X$,ffe=y(()=>{"use strict";F();lfe();m_t=o(async(e,t)=>{let r=e.agents||[],n=r.find(s=>s.agentId===t);if(n?.isEnabled)return e;let i=n?r.map(s=>s.agentId===t?{...s,isEnabled:!0}:s):[...r,{agentId:t,isEnabled:!0,isDefault:!1}];return await z$({...e,agents:i})},"enableAgentOnChatApp"),h_t=o(async({chatAppId:e,agentId:t})=>{let r=await Q$(e),n=r.agents||[],i=n.find(a=>a.agentId===t);if(!i||!i.isEnabled)return r;let s=n.map(a=>a.agentId===t?{...a,isEnabled:!1}:a);return await z$({...r,agents:s})},"disableAgentOnChatApp"),J$=o(async({agentId:e,chatAppId:t})=>{if(t){let n=await Q$(t);return await m_t(n,e)}let r=await K$();return r?await m_t(r,e):await cfe({agents:[{agentId:e,isEnabled:!0,isDefault:!1}]})},"resolveChatAppForAgent"),X$=o(async({provider:e,chatAppId:t,agentId:r,useProdWorkspaceId:n=!1})=>{let i=await Dr.getPlatformUrl({tenantAware:!0}),s=I.getWorkspaceId();if(!s)throw new j("workspaceId is required",400);let a=n?U.getProdWorkspaceID(s):s;return`${i.replace(/\/$/,"")}/api/webhooks/${e}/${a}/${t}/${r}`},"buildWebhookUrl")});var pfe={};G(pfe,{DISCORD_ASK_COMMAND:()=>_4r,DISCORD_NEW_COMMAND:()=>w4r,buildDiscordInviteUrl:()=>A4r,buildDiscordWebhookUrl:()=>T4r,disableAgentOnChatApp:()=>v4r,getDiscordPublicKeyForRoute:()=>P4r,isDiscordTimestampFresh:()=>D4r,resolveChatAppForAgent:()=>S4r,syncApplicationCommands:()=>O4r,validateDiscordIntegration:()=>E4r,verifyDiscordSignature:()=>x4r});var dfe,__t,y_t,b4r,_4r,w4r,E4r,v4r,S4r,T4r,A4r,R4r,I4r,b_t,O4r,x4r,C4r,D4r,P4r,w_t=y(()=>{"use strict";dfe=q(require("crypto")),__t=q(require("node-fetch"));F();_e();H$();ffe();y_t="https://discord.com/api/v10",b4r=300,_4r=gi.ASK,w4r=gi.NEW,E4r=o(e=>{let t=e.discordIntegration;if(!t)throw new j("Discord integration is not configured for this agent",400);let r=t.applicationId?.trim(),n=t.publicKey?.trim(),i=t.botToken?.trim(),s=t.guildId?.trim();if(!r||!n||!i||!s)throw new j("Discord integration requires applicationId, publicKey, botToken, and guildId",400);return{applicationId:r,botToken:i,guildId:s,chatAppId:t.chatAppId?.trim()||void 0}},"validateDiscordIntegration"),v4r=o(async(e,t)=>await h_t({chatAppId:e,agentId:t}),"disableAgentOnChatApp"),S4r=o(async(e,t)=>await J$({agentId:e,chatAppId:t}),"resolveChatAppForAgent"),T4r=o(async(e,t)=>await X$({provider:"discord",chatAppId:e,agentId:t,useProdWorkspaceId:!0}),"buildDiscordWebhookUrl"),A4r=o(e=>`https://discord.com/oauth2/authorize?client_id=${e}&scope=bot+applications.commands&permissions=0`,"buildDiscordInviteUrl"),R4r=o(()=>[{name:gi.ASK,description:"Ask the configured Budibase agent",contexts:[1],options:[{type:3,name:"message",description:"Message to send to the agent",required:!0}]},{name:gi.NEW,description:"Start a new conversation with the configured agent",contexts:[1],options:[{type:3,name:"message",description:"Optional opening message",required:!1}]}],"buildGlobalCommandPayload"),I4r=o(()=>[{name:gi.ASK,description:"Ask the configured Budibase agent",options:[{type:3,name:"message",description:"Message to send to the agent",required:!0}]},{name:gi.NEW,description:"Start a new conversation with the configured agent",options:[{type:3,name:"message",description:"Optional opening message",required:!1}]}],"buildGuildCommandPayload"),b_t=o(async({url:e,botToken:t,payload:r})=>{let n=await(0,__t.default)(e,{method:"PUT",headers:{Authorization:`Bot ${t}`,"Content-Type":"application/json"},body:JSON.stringify(r)});if(!n.ok){let i=await n.text();throw new j(`Discord command sync failed (${n.status}): ${i||n.statusText}`,400)}},"syncCommandsOnEndpoint"),O4r=o(async(e,t,r)=>{await b_t({url:`${y_t}/applications/${e}/commands`,botToken:t,payload:R4r()}),await b_t({url:`${y_t}/applications/${e}/guilds/${r}/commands`,botToken:t,payload:I4r()})},"syncApplicationCommands"),x4r=o(({publicKey:e,signature:t,timestamp:r,rawBody:n})=>{try{let i="302a300506032b6570032100",s=dfe.default.createPublicKey({key:Buffer.from(`${i}${e}`,"hex"),format:"der",type:"spki"});return dfe.default.verify(null,new Uint8Array(Buffer.from(`${r}${n}`)),s,new Uint8Array(Buffer.from(t,"hex")))}catch{return!1}},"verifyDiscordSignature"),C4r=o(()=>{let e=Number(process.env.DISCORD_SIGNATURE_MAX_AGE_SECONDS);return(Number.isFinite(e)&&e>0?e:b4r)*1e3},"getDiscordSignatureMaxAgeMs"),D4r=o((e,t=Date.now())=>{let r=Number(e);if(!Number.isFinite(r))return!1;let n=r*1e3;return Math.abs(t-n)<=C4r()},"isDiscordTimestampFresh"),P4r=o(async({instance:e,agentId:t})=>{let r=U.getProdWorkspaceID(e);return await I.doInWorkspaceContext(r,async()=>{let i=(await bj(t)).discordIntegration?.publicKey?.trim();if(!i)throw new j("Discord public key is not configured for this agent",400);return i})},"getDiscordPublicKeyForRoute")});var mfe={};G(mfe,{buildMSTeamsWebhookUrl:()=>L4r,resolveChatAppForAgent:()=>N4r,validateMSTeamsIntegration:()=>k4r});var k4r,N4r,L4r,E_t=y(()=>{"use strict";F();ffe();k4r=o(e=>{let t=e.MSTeamsIntegration;if(!t)throw new j("Teams integration is not configured for this agent",400);let r=t.appId?.trim(),n=t.appPassword?.trim();if(!r||!n)throw new j("Teams integration requires appId (client ID) and appPassword (client secret value)",400);return{appId:r,appPassword:n,tenantId:t.tenantId?.trim()||void 0,chatAppId:t.chatAppId?.trim()||void 0}},"validateMSTeamsIntegration"),N4r=o(async(e,t)=>await J$({agentId:e,chatAppId:t}),"resolveChatAppForAgent"),L4r=o(async(e,t)=>await X$({provider:"ms-teams",chatAppId:e,agentId:t,useProdWorkspaceId:!0}),"buildMSTeamsWebhookUrl")});var hfe={};G(hfe,{MSTeams:()=>mfe,discord:()=>pfe});var v_t=y(()=>{"use strict";w_t();E_t()});async function M4r(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 T.tables.getAllInternalTables()).map(i=>i.name);for(let i of e){let s=be.getSequentialName(n,i.name,{separator:" "}),a=await T.tables.create({...i,name:s,schema:{},primaryDisplay:void 0,sourceType:"internal",sourceId:no,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 T.tables.getTable(r[i.name]),a={...s.schema,...i.schema};for(let u of Object.keys(a))a[u].aiGenerated=!0;await T.tables.update({...s,schema:a,primaryDisplay:i.primaryDisplay})}}catch(n){console.log("Error generating tables, cleaning up created tables",n);let i=await T.tables.getTables(t.map(s=>s.id));throw await Promise.all(i.map(T.tables.internal.destroy)),n}return t}var S_t=y(()=>{"use strict";P();le();_e();o(M4r,"generateTables")});async function U4r(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 F4r(f,l);let d=u._id,p=await T.rows.save(d,{...f,...c,_id:void 0},t);n[d]??={},n[d][f._id]=p.row._id;let m=Object.keys(c).reduce((h,g)=>(f[g]&&(h[g]={tableId:u.schema[g].tableId,rowId:f[g]}),h),{});Object.keys(m).length&&i.push({tableId:p.table._id,rowId:p.row._id,data:m})}))}await Promise.all(s),await Promise.all(i.map(async a=>{let u=await T.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 T.rows.save(a.tableId,{...u,...c},t,{updateAIColumns:!1})}))}async function F4r(e,t){function r(n){return typeof n=="object"?Dct(n):Cct(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])}var T_t=y(()=>{"use strict";P();le();bs();o(U4r,"generateRows");o(F4r,"processAttachments")});var gfe={};G(gfe,{buildLiteLLMParams:()=>cj,generateRows:()=>U4r,generateTables:()=>M4r});var A_t=y(()=>{"use strict";S_t();T_t();Fae()});var Kb={};G(Kb,{deleteAgentFileChunks:()=>rue,ingestAgentFile:()=>tue,queue:()=>sfe,retrieveContextForAgent:()=>mj});var yfe=y(()=>{"use strict";hj();afe()});async function B4r(){return(await I.getWorkspaceDB().allDocs(et.getDocParams("vectordb",void 0,{include_docs:!0}))).rows.map(r=>r.doc).filter(r=>!!r)}async function q4r(e){let r=await I.getWorkspaceDB().tryGet(e);if(!(!r||r._deleted))return r}async function W4r(e){let t=I.getWorkspaceDB(),r={_id:et.generateVectorDbID(),name:e.name,provider:e.provider,host:e.host,port:e.port,database:e.database,user:e.user,password:e.password},{rev:n}=await t.put(r);return r._rev=n,r}async function j4r(e){if(!e._id||!e._rev)throw new j("id and rev required",400);let t=I.getWorkspaceDB(),r=await t.tryGet(e._id);if(!r)throw new j("Vector store config not found",404);let n=e.password===Pn?r.password:e.password,i={...r,...e,password:n},{rev:s}=await t.put(i);return i._rev=s,i}async function $4r(e){let t=I.getWorkspaceDB(),r=await t.get(e);await t.remove(r)}var R_t=y(()=>{"use strict";F();P();o(B4r,"fetch");o(q4r,"find");o(W4r,"create");o(j4r,"update");o($4r,"remove")});var bfe={};G(bfe,{create:()=>W4r,createVectorDb:()=>FD,fetch:()=>B4r,find:()=>q4r,remove:()=>$4r,update:()=>j4r});var I_t=y(()=>{"use strict";R_t();Mae()});var _fe={};G(_fe,{agents:()=>zc,chatApps:()=>Y$,configs:()=>vS,deployments:()=>hfe,helpers:()=>gfe,llm:()=>Xae,rag:()=>Kb,vectorDb:()=>bfe});var Fb=y(()=>{"use strict";H$();lfe();Wae();v_t();A_t();yfe();I_t();WD()});var V4r,O_t,G4r,x_t,wfe,Efe,vfe=y(()=>{"use strict";F();P();Ie();bs();V4r=o(e=>Buffer.from(e,"utf8").toString("hex"),"encodeMailbox"),O_t=o((e,t)=>`${e}:${V4r(t)}`,"getMailboxEntityId"),G4r=o((e,t)=>gh("automationEmailState",O_t(e,t)),"getMailboxMetadataId"),x_t=o(async(e,t)=>(await I.getWorkspaceDB().tryGet(G4r(e,t)))?.lastSeenUid,"getLastSeenUid"),wfe=o(async(e,t,r)=>{await SD("automationEmailState",O_t(e,t),n=>({...n,lastSeenUid:r}))},"setLastSeenUid"),Efe=o(async e=>{let t=I.getWorkspaceDB(),r=gh("automationEmailState",`${e}:`),n=`${r}${wD}`,i=await t.allDocs({startkey:r,endkey:n,include_docs:!1});if(!i.rows.length)return;let s=i.rows.map(a=>{let u=a.value?._rev;if(u)return{_id:a.id,_rev:u,_deleted:!0}}).filter(a=>!!a);s.length&&await t.bulkDocs(s)},"deleteAutomationMailboxState")});var Tfe={};G(Tfe,{create:()=>Y4r,fetch:()=>K4r,find:()=>z4r,get:()=>Q4r,remove:()=>X4r,update:()=>J4r});function Qb(){return I.getWorkspaceDB()}function k_t(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}async function H4r(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 ue.automation.stepCreated(t,a);let s=n(e,t);for(let a of s)await ue.automation.stepDeleted(t,a)}async function K4r(){return(await Qb().allDocs(Nu(null,{include_docs:!0}))).rows.filter(n=>!!n.doc).map(n=>n.doc).map(z0).map(Y0)}async function Q4r(e){let r=await Qb().get(e);return Y0(z0(r))}async function z4r(e,t){return(await Qb().getMultiple(e,t)).map(z0).map(Y0)}async function Y4r(e){e=z0(e);let t=Qb();e._id||(e._id=act()),e.type="automation",e=N_t(e),e=k_t(e),e=await Sfe({newAuto:e});let r=await t.put(e);await ue.automation.created(e);for(let n of e.definition.steps)await ue.automation.stepCreated(e,n);return e._rev=r.rev,e._id=r.id,Y0(e)}async function J4r(e){if(e=z0(e),!e._id||!e._rev)throw new j("_id or _rev fields missing",400);let t=Qb(),r=await t.get(e._id);Z4r(e,r),e=N_t(e,r),e=k_t(e),e=await Sfe({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 ue.automation.triggerUpdated(e),await dS("automationTestInput",e._id),await Efe(e._id)),await H4r(r,e),Y0({...e,_rev:n.rev,_id:n.id})}async function X4r(e,t){let r=Qb(),n=await r.get(e);await Sfe({oldAuto:n}),await dS("automationTestInput",e),await dS("automationTestHistory",e),await Efe(e);let i=await r.remove(e,t);return await ue.automation.deleted(n),i}async function Sfe({oldAuto:e,newAuto:t}){let r=at.triggers.definitions.WEBHOOK.stepId,n=I.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 Qb().get(i.webhookId);s&&(delete s.webhookId,s.inputs={}),await yf.webhook.destroy(l._id,l._rev)}catch{}if((!u(e)||a)&&u(t)){let l=(await yf.webhook.save(yf.webhook.newDoc("Automation webhook","automation",t._id)))._id;s.webhookId=l;let f=U.getProdWorkspaceID(n);s.inputs={schemaUrl:`api/webhooks/schema/${n}/${l}`,triggerUrl:`api/webhooks/trigger/${f}/${l}`}}return t}function Z4r(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 j(`Field ${u} is readonly and it cannot be modified`,400)})}function z0(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}function N_t(e,t){let r=e.definition?.trigger;if(!r||!Ja(r)||!r.inputs||!e3r(r.inputs.password))return e;if(!t||!Ja(t.definition?.trigger))throw new j("IMAP password is required",400);let n=t.definition.trigger.inputs?.password;if(!n)throw new j("IMAP password is required",400);let i=(0,D_t.default)(e),s=i.definition?.trigger;if(!Ja(s)||!s.inputs)throw new j("IMAP password is required",400);return s.inputs.password=n,i}function Y0(e){let t=e.definition?.trigger;return Ja(t)&&t.inputs?.password&&(t.inputs.password=P_t),e}function e3r(e){return e===Pn||e===P_t}var D_t,P_t,L_t=y(()=>{"use strict";F();_e();P();Z$();D_t=q(require("lodash/cloneDeep"));Ie();bs();vfe();P_t="********";o(Qb,"getDb");o(k_t,"cleanAutomationInputs");o(H4r,"handleStepEvents");o(K4r,"fetch");o(Q4r,"get");o(z4r,"find");o(Y4r,"create");o(J4r,"update");o(X4r,"remove");o(Sfe,"checkForWebhooks");o(Z4r,"guardInvalidUpdatesAndThrow");o(z0,"trimUnexpectedObjectFields");o(N_t,"hydrateAutomationSecrets");o(Y0,"maskAutomationSecrets");o(e3r,"isMaskedPassword")});var Afe={};G(Afe,{destroy:()=>n3r,newDoc:()=>t3r,save:()=>r3r});function M_t(e){return e.startsWith(U.DocumentType.WEBHOOK)}function t3r(e,t,r){return{live:!0,name:e,action:{type:t,target:r}}}async function r3r(e){let t=I.getWorkspaceDB();e._id&&M_t(e._id)?await t.get(e._id):e._id=mct();let r=await t.put(e);return e._rev=r.rev,e}async function n3r(e,t){let r=I.getWorkspaceDB();if(!e||!M_t(e))throw new Error("Provided webhook ID is not valid.");return await r.remove(e,t)}var U_t=y(()=>{"use strict";F();Ie();o(M_t,"isWebhookID");o(t3r,"newDoc");o(r3r,"save");o(n3r,"destroy")});var Rfe={};G(Rfe,{checkForCollectStep:()=>G4});var F_t=y(()=>{"use strict";K4()});var Ife={};G(Ife,{trigger:()=>i3r});async function i3r(e,t={},r){let i=await I.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(T.automations.utils.checkForCollectStep(i)&&await qn.isSyncAutomationsEnabled()){let u=await Qo(i,{fields:t,timeout:r?r*1e3:H.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=I.getWorkspaceId();return await Qo(i,{fields:t,appId:u}),{message:`Automation ${i._id} has been triggered.`,automation:i}}}var B_t=y(()=>{"use strict";F();tt();P();le();up();$e();o(i3r,"trigger")});var yf,Z$=y(()=>{"use strict";L_t();U_t();F_t();B_t();yf={...Tfe,webhook:Afe,utils:Rfe,execution:Ife}});var cT,eV,tV,Ofe=y(()=>{"use strict";cT="db.txt",eV="global.txt",tV="attachments"});var Cfe={};G(Cfe,{exportApp:()=>V_t,exportDB:()=>$_t,streamExportApp:()=>u3r});async function s3r(e,t){let r=`${(0,j_t.v4)()}.tar.gz`,n=(0,qh.join)(Wo(),r);return await W_t.create({gzip:!0,file:n,noDirRecurse:!1,cwd:e},t),n}async function $_t(e,t={}){let r={filter:t?.filter,batch_size:1e3,batch_limit:5,style:"main_only"};return U.doWithDB(e,async n=>{if(t?.exportPath){let i=t?.exportPath,s=xfe.default.createWriteStream(i);return await n.dump(s,r),i}else{let i=new o3r,s="";return i.on("data",a=>{s+=a.toString()}),await n.dump(i,r),s}})}function a3r(e){let t=[mh,ect,rct];return e&&t.push(tct),r=>!t.map(n=>r._id.includes(n)).reduce((n,i)=>n||i)}async function V_t(e,t){return await q_t.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=U.getProdWorkspaceID(e),i=`${n}/`,s=[/\/\..+/];t?.excludeRows&&s.push(/\/attachments\/.*/);let a=await ce.retrieveDirectory(wt.APPS,i,s);r.addTags({prodAppId:n,tmpPath:a});let u=(0,qh.join)(a,i);if(xfe.default.existsSync(u)){let l=await lp.default.readdir(u);for(let f of l){let d=(0,qh.join)(u,f);await lp.default.rename(d,(0,qh.join)(u,"..",f))}await lp.default.rmdir(u)}let c=(0,qh.join)(a,cT);if(await $_t(e,{filter:a3r(t?.excludeRows),exportPath:c}),t?.encryptPassword){let l=o(async(f,d="")=>{for(let p of await lp.default.readdir(f)){let m=(0,qh.join)(f,p),h=d?(0,qh.join)(d,p):p;if(p!==tV){let g=await lp.default.lstat(m);g.isFile()?(await po.encryptFile({dir:f,filename:p},t.encryptPassword),await lp.default.rm(m)):g.isDirectory()&&await l(m,h)}}},"processDirectory");await l(a)}if(t?.tar){let l=await s3r(a,await lp.default.readdir(a));return await lp.default.rm(a,{recursive:!0,force:!0}),l}else return a})}async function u3r({appId:e,excludeRows:t,encryptPassword:r}){let n=await V_t(e,{excludeRows:t,tar:!0,encryptPassword:r});return dZe(n)}var q_t,xfe,lp,qh,W_t,j_t,o3r,G_t=y(()=>{"use strict";F();q_t=require("dd-trace"),xfe=q(require("fs")),lp=q(require("fs/promises")),qh=require("path"),W_t=q(require("tar")),j_t=require("uuid");gn();Ie();ib();li();Ofe();o3r=require("memorystream");o(s3r,"tarFilesToTmp");o($_t,"exportDB");o(a3r,"defineFilter");o(V_t,"exportApp");o(u3r,"streamExportApp")});var Dfe={};G(Dfe,{getGlobalDBFile:()=>d3r,getListOfAppsInMulti:()=>p3r,importApp:()=>m3r,untarFile:()=>Y_t,updateAttachmentColumns:()=>z_t});function H_t(e,t){let r=t.key?.split("/")||[];r.shift(),r.unshift(e);let n=r.join("/");return{...t,key:n,url:""}}async function z_t(e,t){let r=await T.tables.getAllInternalTables(t),n=[];for(let i of r){let{rows:s,columns:a}=await T.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=>H_t(e,f)):(l==="attachment_single"||l==="signature_single")&&u[c]&&(u[c]=H_t(e,u[c]))}return u}))}await t.bulkDocs(n)}async function c3r(e,t){let r=(await t.allDocs(Nu(null,{include_docs:!0}))).rows.map(s=>s.doc),n=U.getDevWorkspaceID(e),i=[];for(let s of r){let a=s.appId,u=U.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)}async function l3r(e){if(e.file&&e.file.type!=="text/plain")throw new Error("Cannot import a non-text based file.");if(e.file)return lT.default.createReadStream(e.file.path);if(e.key){let[t,r]=e.key.split("/"),n=await Cq(t,r);return lT.default.createReadStream((0,Wh.join)(n,r,"db","dump.txt"))}else throw new Error("Either file or key is required.")}async function Y_t(e){let t=(0,Wh.join)(Wo(),(0,Q_t.v4)());return await bf.default.mkdir(t),await K_t.extract({cwd:t,file:e.path}),t}async function f3r(e,t){try{let r=o(async n=>{for(let i of await bf.default.readdir(n)){let s=(0,Wh.join)(n,i);if(!s.endsWith(tV)){let a=await bf.default.lstat(s);if(a.isFile()&&s.endsWith(".enc")){let u=s.replace(/\.enc$/,"");await po.decryptFile(s,u,t),await bf.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}}function d3r(e){return lT.default.readFileSync((0,Wh.join)(e,eV),"utf8")}function p3r(e){return lT.default.readdirSync(e).filter(t=>t!==eV)}async function m3r(e,t,r,n={updateAttachmentColumns:!0}){let i=U.getProdWorkspaceID(e),s,a=r.file&&r?.file?.type?.endsWith("gzip"),u=r.file&&(await bf.default.lstat(r.file.path)).isDirectory(),c;if(r.file&&(a||u)){c=a?await Y_t(r.file):r.file.path,a&&r.file.password&&await f3r(c,r.file.password);let f=await bf.default.readdir(c);if(!!f.find(h=>h.endsWith(".enc")))throw new Error("Files are encrypted but no password has been supplied.");if(!!f.find(h=>h==="plugin.min.js"))throw new Error("Supplied file is a plugin - cannot import as app.");if(!f.find(h=>h===cT))throw new Error("App export does not appear to be valid - no DB file found.");{let h=[],g=[eV,cT];for(let E of f){let v=(0,Wh.join)(c,E);g.includes(E)||(E=(0,Wh.join)(i,E),(await bf.default.lstat(v)).isDirectory()?h.push(ce.uploadDirectory(wt.APPS,v,E)):h.push(ce.upload({bucket:wt.APPS,path:v,filename:E})))}await Promise.all(h);let b=await bf.default.readdir(c,{recursive:!0}),w=[];await rt.parallelForeach(ce.listAllObjects(ce.ObjectStoreBuckets.APPS,i),async E=>{E.Key&&!b.includes(E.Key.replace(new RegExp(`^${i}/`),""))&&w.push(E.Key)},5),w.length&&await ce.deleteFiles(ce.ObjectStoreBuckets.APPS,w)}s=lT.default.createReadStream((0,Wh.join)(c,cT))}else s=await l3r(r);let{ok:l}=await t.load(s);if(!l)throw"Error loading database dump from template.";return n.updateAttachmentColumns&&await z_t(i,t),await c3r(i,t),c&&await bf.default.rm(c,{recursive:!0,force:!0}),l}var lT,bf,Wh,K_t,Q_t,J_t=y(()=>{"use strict";F();_e();P();lT=q(require("fs")),bf=q(require("fs/promises")),Wh=require("path"),K_t=q(require("tar")),Q_t=require("uuid");le();gn();Ie();ib();li();Ofe();o(H_t,"rewriteAttachmentUrl");o(z_t,"updateAttachmentColumns");o(c3r,"updateAutomations");o(l3r,"getTemplateStream");o(Y_t,"untarFile");o(f3r,"decryptFiles");o(d3r,"getGlobalDBFile");o(p3r,"getListOfAppsInMulti");o(m3r,"importApp")});var Pfe={};G(Pfe,{calculateAutomationCount:()=>Z_t,calculateBackupStats:()=>h3r,calculateDatasourceCount:()=>X_t,calculateScreenCount:()=>ewt});async function rV(e,t,r){if(r)return t(r);{let n=U.getDevWorkspaceID(e);return I.doInWorkspaceContext(n,()=>{let i=I.getWorkspaceDB();return t(i)})}}async function X_t(e,t){return rV(e,async r=>{let n=await r.allDocs(ED()),i=await r.allDocs(Jd());return n.rows.length+i.rows.length},t)}async function Z_t(e,t){return rV(e,async r=>(await r.allDocs(Nu())).rows.length,t)}async function ewt(e,t){return rV(e,async r=>(await T.screens.fetch(r)).length,t)}async function h3r(e){return rV(e,async t=>{let r=[];r.push(X_t(e,t)),r.push(Z_t(e,t)),r.push(ewt(e,t));let n=await Promise.all(r);return{datasources:n[0],automations:n[1],screens:n[2]}})}var twt=y(()=>{"use strict";F();le();Ie();o(rV,"runInContext");o(X_t,"calculateDatasourceCount");o(Z_t,"calculateAutomationCount");o(ewt,"calculateScreenCount");o(h3r,"calculateBackupStats")});var kfe={};G(kfe,{clearErrors:()=>g3r});async function g3r(e){let t=I.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 Ce.workspace.invalidateWorkspaceMetadata(r.appId,r)}var rwt=y(()=>{"use strict";F();P();o(g3r,"clearErrors")});var nV,Nfe=y(()=>{"use strict";G_t();J_t();twt();rwt();nV={...Cfe,...Dfe,...Pfe,...kfe}});function y3r(e){if(ts(e))return"table";if(Gn(e))return"view";if(Y_(e))return"datasource";if($Ae(e))return"query";throw new Error(`Unknown source type for source "${e}"`)}var nwt=y(()=>{"use strict";P();_e();o(y3r,"getSourceType")});var Lfe={};G(Lfe,{getSourceType:()=>y3r});var iwt=y(()=>{"use strict";nwt()});function owt(e,t){return!e.disabled&&t?"published":"disabled"}async function swt(){let e=I.getProdWorkspaceId(),t=await T.workspaces.isWorkspacePublished(e),r={automations:[],workspaceApps:[],screens:[],tables:[]},n={automations:[],workspaceApps:[],screens:[],tables:[]},i=o(async m=>{let[h,g,b,w]=await Promise.all([T.automations.fetch(),T.workspaceApps.fetch(),T.screens.fetch(),T.tables.getAllInternalTables()]);m.automations=h,m.workspaceApps=g,m.screens=b,m.tables=w},"updateState");await I.doInWorkspaceContext(I.getDevWorkspaceId(),async()=>i(r));let s;t&&(s=await T.workspaces.metadata.tryGet({production:!0}),await I.doInWorkspaceContext(I.getProdWorkspaceId(),async()=>i(n)));let a=new Set(n.automations.map(m=>m._id)),u=new Set(n.workspaceApps.map(m=>m._id)),c=new Set(n.tables.map(m=>m._id)),l=o((m,h,g)=>{let b=g._id,w=s?.resourcesPublishedAt?.[b],E=h.has(b)||!!w;m[b]={published:E,name:g.name,publishedAt:w,unpublishedChanges:!w||g.updatedAt>w,state:owt(g,w)}},"processResource"),f={};for(let m of r.automations)l(f,a,m);let d={};for(let m of r.tables)l(d,c,m);let p={};for(let m of r.workspaceApps){let h=s?.resourcesPublishedAt?.[m._id],g=r.screens.filter(b=>b.workspaceAppId===m._id);p[m._id]={published:u.has(m._id),name:m.name,publishedAt:h,unpublishedChanges:!h||!!g.find(b=>b.updatedAt>h),state:owt(m,h)}}return{automations:f,workspaceApps:p,tables:d}}var awt=y(()=>{"use strict";F();P();le();o(owt,"getPublishedState");o(swt,"status")});var uwt,cwt=y(()=>{"use strict";awt();uwt={status:swt}});var Mfe={};G(Mfe,{create:()=>_3r,fetch:()=>b3r,findByResourceId:()=>E3r,remove:()=>w3r});async function b3r(e){return(await I.getWorkspaceDB().find({selector:{_id:{$regex:`^workspace_favourite${fe}`},...e?{createdBy:e}:{}}})).docs}async function _3r(e){let r=await I.getWorkspaceDB().put({_id:U.generateWorkspaceFavouriteID(),...e});return{...e,_id:r.id,_rev:r.rev}}async function w3r(e,t){return await I.getWorkspaceDB().remove(e,t)}async function E3r(e){return(await I.getWorkspaceDB().find({selector:{_id:{$regex:`^workspace_favourite${fe}`},resourceId:e},limit:1})).docs}var lwt=y(()=>{"use strict";F();P();o(b3r,"fetch");o(_3r,"create");o(w3r,"remove");o(E3r,"findByResourceId")});var Ufe={};G(Ufe,{fetch:()=>v3r,fetchWithDocument:()=>S3r});async function v3r(e){if(!ts(e))throw new Error(`Invalid tableId: ${e}`);let t=I.getWorkspaceDB(),r={startkey:[e],endkey:[e,{}]};return(await t.query(hh(qa.LINK),r)).rows.map(i=>i.value)}async function S3r(e){if(!ts(e))throw new Error(`Invalid tableId: ${e}`);let t=I.getWorkspaceDB(),r={startkey:[e],endkey:[e,{}],include_docs:!0};return(await t.query(hh(qa.LINK),r)).rows.map(i=>i.doc)}var fwt=y(()=>{"use strict";F();_e();Ie();o(v3r,"fetch");o(S3r,"fetchWithDocument")});var dwt,pwt=y(()=>{"use strict";fwt();dwt={...Ufe}});var Ffe={};G(Ffe,{addLink:()=>T3r,deleteLink:()=>A3r,update:()=>R3r});async function T3r({label:e,url:t,roleId:r,workspaceAppId:n}){let i=await T.workspaceApps.get(n);if(!i)throw new j("Workspace app should be defined",500);i.navigation.links??=[],i.navigation.links.push({text:e,url:t,roleId:r,type:"link"}),await T.workspaceApps.update(i)}async function A3r(e,t){let r=await T.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 T.workspaceApps.update({...r,navigation:{...r.navigation,links:n}})}async function R3r(e,t){let r=await T.workspaceApps.get(e);if(!r)throw new j("Workspace app not found",400);await T.workspaceApps.update({...r,navigation:t})}var mwt=y(()=>{"use strict";F();le();o(T3r,"addLink");o(A3r,"deleteLink");o(R3r,"update")});async function hwt(e,t){if((await gwt()).find(n=>n.name===e&&n._id!==t))throw new j(`OAuth2 config with name '${e}' is already taken.`,400)}async function gwt(){return(await I.getWorkspaceDB().allDocs(et.getOAuth2ConfigParams(null,{include_docs:!0}))).rows.map(n=>({...n.doc,_id:n.doc._id,_rev:n.doc._rev}))}async function I3r(e){let t=I.getWorkspaceDB();await hwt(e.name);let r=await t.put({_id:`oauth2${fe}${Ne.newid()}`,...e});return{_id:r.id,_rev:r.rev,...e}}async function iV(e){return await I.getWorkspaceDB().tryGet(e)}async function O3r(e){let t=I.getWorkspaceDB();await hwt(e.name,e._id);let r=await iV(e._id);if(!r)throw new j(`OAuth2 config with id '${e._id}' not found.`,404);let n={...e,clientSecret:e.clientSecret===Pn?r.clientSecret:e.clientSecret},i=await t.put(n);return await ywt(e._id),{...n,_rev:i.rev}}async function x3r(e,t){let r=I.getWorkspaceDB();try{await r.remove(e,t)}catch(i){throw i.status===404?new j(`OAuth2 config with id '${e}' not found.`,404):i}await ywt(e);let n=await r.tryGet(et.generateOAuth2LogID(e));n&&await r.remove(n)}async function ywt(e){let t=Ce.CacheKey.OAUTH2_TOKEN(e);await Ce.destroy(t)}var bwt=y(()=>{"use strict";F();P();o(hwt,"guardName");o(gwt,"fetch");o(I3r,"create");o(iV,"get");o(O3r,"update");o(x3r,"remove");o(ywt,"cleanCache")});async function Ewt(e){e=await vpt(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,wwt.default)(e.url,t)}async function P3r(e){let t=await Ce.withCacheWithDynamicTTL(Ce.CacheKey.OAUTH2_TOKEN(e),async()=>{let r=await iV(e);if(!r)throw new _wt.HttpError(`oAuth config ${e} count not be found`);let n=await Ewt(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 D3r(e),t}async function k3r(e){try{let t=await Ewt(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}}}async function N3r(e){let t=await I.getWorkspaceDB().getMultiple(e.map(et.generateOAuth2LogID),{allowMissing:!0}),r=await I.getProdWorkspaceDB().getMultiple(e.map(et.generateOAuth2LogID),{allowMissing:!0});return e.reduce((i,s)=>{let a=t.find(c=>c._id===et.generateOAuth2LogID(s));a&&(i[s]=a.lastUsage);let u=r.find(c=>c._id===et.generateOAuth2LogID(s));return u&&(!i[s]||i[s]<u.lastUsage)&&(i[s]=u.lastUsage),i},{})}async function L3r(e){await Ce.destroy(Ce.CacheKey.OAUTH2_TOKEN(e),{useTenancy:!0})}var _wt,wwt,C3r,D3r,vwt=y(()=>{"use strict";F();P();_wt=require("koa"),wwt=q(require("node-fetch"));Bfe();QD();({DocWritethrough:C3r}=Ce.docWritethrough);o(Ewt,"fetchToken");D3r=o(async e=>{await new C3r(I.getWorkspaceDB(),et.generateOAuth2LogID(e)).patch({lastUsage:Date.now()})},"trackUsage");o(P3r,"getToken");o(k3r,"validateConfig");o(N3r,"getLastUsages");o(L3r,"cleanStoredToken")});var qfe={};G(qfe,{cleanStoredToken:()=>L3r,create:()=>I3r,fetch:()=>gwt,get:()=>iV,getLastUsages:()=>N3r,getToken:()=>P3r,remove:()=>x3r,update:()=>O3r,validateConfig:()=>k3r});var Bfe=y(()=>{"use strict";bwt();vwt()});var jfe={};G(jfe,{enrichArrayContext:()=>Awt,enrichContext:()=>Wfe,fetch:()=>F3r,find:()=>U3r});function Swt(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}function M3r(e){return e.map(t=>Swt(t))}function Twt(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]}async function U3r(e){let t=I.getWorkspaceDB(),r=I.getWorkspaceId(),n=Twt(await t.get(e));return ku(r)&&(delete n.fields,delete n.parameters),Swt(n)}async function F3r(e={enrich:!0}){let n=(await I.getWorkspaceDB().allDocs(MW(null,{include_docs:!0}))).rows.map(i=>i.doc);return e.enrich&&(n=await Twt(n)),M3r(n)}async function Awt(e,t={}){let r={};for(let s in e)r[s]=e[s];let n=await Wfe(r,t),i=[];for(let[s,a]of Object.entries(n))i[parseInt(s)]=a;return i}async function Wfe(e,t={}){let r={};if(!e||!t)return r;if(Array.isArray(e))return Awt(e,t);let n=await ip(),i={...t,env:n};for(let s of Object.keys(e))e[s]!=null&&(typeof e[s]=="object"?r[s]=await Wfe(e[s],i):typeof e[s]=="string"?r[s]=_n(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}var Rwt=y(()=>{"use strict";F();Yn();gn();Ie();QD();o(Swt,"updateSchema");o(M3r,"updateSchemas");o(Twt,"enrichQueries");o(U3r,"find");o(F3r,"fetch");o(Awt,"enrichArrayContext");o(Wfe,"enrichContext")});var Iwt,Owt=y(()=>{"use strict";Rwt();Iwt={...jfe}});var Vfe={};G(Vfe,{duplicateResourcesToWorkspace:()=>tKr,getResourcesInfo:()=>B3r});async function B3r(){let e=await T.automations.fetch(),t=await T.workspaceApps.fetch(),r={},n=[],i=await T.tables.getAllInternalTables(),s=await T.rowActions.getAll();n.push(...i.map(d=>({id:d._id,idToSearch:d._id,name:d.name,type:"table"})));let a=await T.datasources.fetch();n.push(...a.filter(d=>d._id!==no).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 T.queries.fetch();if(n.push(...u.map(d=>({id:d._id,idToSearch:d._id,name:d.name,type:"query"}))),s.length){let d=await T.rowActions.getNames(Object.values(s).flatMap(p=>Object.values(p.actions)));for(let p of s){let m=Object.entries(p.actions).flatMap(([h,g])=>e.filter(b=>b._id===g.automationId).map(b=>({id:b._id,name:b.name,type:"automation"})));for(let[h,g]of Object.entries(p.actions))for(let b of[h,wct(p._id)])n.push({id:p._id,idToSearch:b,name:d[g.automationId],type:"row_action",extraDependencies:m})}}let c=o((d,p)=>{let m=JSON.stringify(p);r[d]??={dependencies:[]};for(let h of n)if(m.includes(h.idToSearch)&&!r[d].dependencies.find(g=>g.id===h.id)){r[d].dependencies.push({id:h.id,name:h.name,type:h.type});let g=[...h.extraDependencies||[],...r[h.id]?.dependencies||[]].filter(({id:b})=>!r[d].dependencies.some(w=>w.id===b));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 T.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(m=>({id:m._id,name:m.name,type:"screen"})));for(let m of p)c(d._id,m)}for(let d of Object.values(r).flatMap(p=>p.dependencies).filter(p=>p.type==="row_action")){let p=s.find(m=>m._id===d.id);if(p)for(let m of Object.values(p.actions)){if(r[d.id]?.dependencies.some(g=>g.id===m.automationId))continue;let h=e.find(g=>g._id===m.automationId);h&&(r[d.id]??={dependencies:[]},r[d.id].dependencies.push({id:h._id,name:h.name,type:"automation"}))}}return r}async function q3r(e){let t=U.getDB(U.getDevWorkspaceID(e),{skip_setup:!0});if(!await t.exists())throw new j("Destination workspace does not exist",400);return t}function sV(e){return Object.entries(W3r).find(([r,n])=>e.startsWith(n))?.[0]}function xwt(e){return e._id?sV(e._id)==="automation":!1}function j3r(e){return e._id?sV(e._id)==="workspace_app":!1}function $3r(e){return e._id?sV(e._id)==="table":!1}async function Q3r(e,t,r){if(!e||e===t)return e;r.has(e)||r.set(e,(async()=>{try{if(await ce.objectExists(wt.APPS,t))return t}catch(i){Be.logWarn("Resource duplication: failed to check attachment existence",{err:i,key:e,destinationKey:t})}try{let{stream:i,contentType:s}=await ce.getReadStream(wt.APPS,e);return await ce.streamUpload({bucket:wt.APPS,stream:i,filename:t,type:s}),t}catch(i){Be.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}async function Cwt(e,t){if(!e?.key||!t.sourceProdWorkspaceId||!t.destinationProdWorkspaceId||t.sourceProdWorkspaceId===t.destinationProdWorkspaceId)return e;let r=K3r(e.key,t.sourceProdWorkspaceId,t.destinationProdWorkspaceId);if(!r||r===e.key)return e;let n=await Q3r(e.key,r,t.cache);return n?{...e,key:n,url:""}:e}async function z3r(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 Cwt(u,r);a.push(c)}n[i.field]=a}else(i.type==="attachment_single"||i.type==="signature_single")&&s&&(n[i.field]=await Cwt(s,r))}}async function X3r(e,t){let r=I.getWorkspaceDB(),n={include_docs:!0,limit:oV+(t?1:0)};t&&(n.startkey=t,n.skip=1);let s=(await r.allDocs(En(e,null,n))).rows.map(c=>c.doc).filter(c=>!!c),a=s.length>oV?s.slice(0,oV):s,u=a.length===oV?a[a.length-1]._id:void 0;return{rows:a,nextStartAfter:u}}async function Z3r(e,t){let r=(0,Dwt.default)(t,Y3r);for(let n of r){let i=n,s=0;for(;i.length&&s<$fe;){s++;let a=await e.bulkDocs(i),u=[];if(a.forEach((c,l)=>{c.error&&u.push(i[l])}),!u.length)break;if(s>=$fe)throw new Error(`Failed to copy ${u.length} row(s) after ${$fe} attempts.`);await J3r(s*250),i=u}}}async function eKr(e,t,r,n){if(!e.length)return;let i=U.getProdWorkspaceID(r),s=U.getProdWorkspaceID(n),a=new Map;for(let u of e){if(u.sourceId!==no)continue;if(!!(await t.allDocs(En(u._id,null,{include_docs:!1,limit:1}))).rows.length){Be.logWarn("Resource duplication: destination table already contains rows, skipping copy",{tableId:u._id,tableName:u.name});continue}let l=H3r(u),f;do{let{rows:d,nextStartAfter:p}=await X3r(u._id,f);if(f=p,!d.length)break;let m=[];for(let h of d){await z3r(h,l,{sourceProdWorkspaceId:i,destinationProdWorkspaceId:s,cache:a});let g={...h,fromWorkspace:r};delete g._rev,delete g.createdAt,delete g.updatedAt,m.push(g)}await Z3r(t,m)}while(f)}}async function tKr(e,t,r){e=Array.from(new Set(e).keys());let n=await q3r(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 I.getWorkspaceDB().getMultiple(e,{allowMissing:!1}),c=u.filter(p=>p._id&&a.includes(p._id)),l=I.getWorkspaceId();if(!l)throw new Error("Could not get workspaceId");if(c.length&&await n.bulkDocs(c.map(p=>{let m={...p,fromWorkspace:l};return delete m._rev,delete m.createdAt,delete m.updatedAt,(xwt(m)||j3r(m))&&(m.disabled=!0),xwt(m)&&(m.appId=t),m})),(r?.copyRows??!0)&&await eKr(u.filter($3r),n,l,t),!c.length)return;let f=(await T.workspaces.metadata.tryGet())?.name||l,d=await I.doInContext(t,async()=>(await T.workspaces.metadata.tryGet())?.name||t);for(let p of c){let m,h;switch(sV(p._id)){case"automation":m=p.name,h="Automation";break;case"datasource":m=p.name||"Unknown",h="Datasource";break;case"query":m=p.name,h="Query";break;case"row_action":m=p._id,h="Row action";break;case"table":m=p.name,h="Table";break;case"screen":m=p.name||"Unkown",h="Screen";break;case"workspace_app":m=p.name,h="App";break;case void 0:throw new Error("Resource type could not be infered");default:throw new Error("Unreachable")}let b={id:p._id,name:m,type:h};await ue.resource.duplicatedToWorkspace({resource:b,fromWorkspace:f,toWorkspace:d})}}var Dwt,W3r,V3r,G3r,H3r,K3r,oV,Y3r,$fe,J3r,Pwt=y(()=>{"use strict";F();Dwt=q(require("lodash/chunk"));P();le();gn();Ie();o(B3r,"getResourcesInfo");o(q3r,"getDestinationDb");W3r={datasource:xo("datasource"),table:xo("ta"),row_action:xo("ra"),query:xo("query"),automation:xo("au"),workspace_app:xo("workspace_app"),screen:xo("screen")};o(sV,"getResourceType");o(xwt,"isAutomation");o(j3r,"isWorkspaceApp");o($3r,"isTable");V3r=new Set(["attachment","attachment_single","signature_single"]),G3r=o(e=>!!e?.type&&V3r.has(e.type),"isAttachmentColumn"),H3r=o(e=>e.schema?Object.entries(e.schema).filter(([,t])=>G3r(t)).map(([t,r])=>({field:t,type:r.type})):[],"getAttachmentColumns"),K3r=o((e,t,r)=>{if(!e?.startsWith(`${t}/`)||t===r)return e;let n=e.slice(t.length);return`${r}${n}`},"buildDestinationAttachmentKey");o(Q3r,"copyAttachmentToWorkspace");o(Cwt,"remapAttachmentValue");o(z3r,"remapRowAttachments");oV=1e3,Y3r=250,$fe=3,J3r=o(e=>new Promise(t=>setTimeout(t,e)),"delay");o(X3r,"fetchTableRowsPage");o(Z3r,"bulkInsertRows");o(eKr,"duplicateInternalTableRows");o(tKr,"duplicateResourcesToWorkspace")});async function rKr(e,t,r){let n=await Lwt(Object.values(e.actions));if(t=t.toLowerCase().trim(),Object.entries(n).find(([i,s])=>s.toLowerCase().trim()===t&&i!==r))throw new j("A row action with the same name already exists.",409)}async function nKr(e,t){let r={name:t.name.trim()},n=I.getWorkspaceDB(),i=FW(e),s=await n.tryGet(i);s||(s={_id:i,actions:{}}),await rKr(s,r.name);let a=I.getWorkspaceId();if(!a)throw new Error("Could not get the current appId");let u=`row_action${fe}${Ne.newid()}`,c=await yf.create({name:r.name,appId:a,definition:{trigger:{id:"trigger",...at.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]}}async function kwt(e,t){let n=(await aV(e))?.actions[t];if(!n)throw new j(`Row action '${t}' not found in '${e}'`,400);return n}async function aV(e){let t=I.getWorkspaceDB(),r=FW(e);return await t.tryGet(r)}async function iKr(){return(await I.getWorkspaceDB().allDocs(et.getDocParams("ra",void 0,{include_docs:!0}))).rows.map(t=>t.doc)}async function oKr(e){let t=I.getWorkspaceDB(),r=await aV(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 T.automations.remove(s._id,s._rev);await t.remove(r)}async function sKr(e){let t=I.getWorkspaceDB(),r=FW(e);return await t.exists(r)}async function J0(e,t,r){let n=await aV(e);if(!n?.actions[t])throw new j(`Row action '${t}' not found in '${e}'`,400);let s=await r(n);return await I.getWorkspaceDB().put(s),{id:t,...s.actions[t]}}async function Nwt(e,t){let r;if(Gn(t)&&(r=await T.views.get(t)),!r||r.tableId!==e)throw new j(`View '${t}' not found in '${e}'`,400)}async function aKr(e,t){return await J0(e,t,async r=>(r.actions[t].permissions.table.runAllowed=!0,r))}async function uKr(e,t){return await J0(e,t,async r=>(r.actions[t].permissions.table.runAllowed=!1,r))}async function cKr(e,t,r){return await Nwt(e,r),await J0(e,t,async n=>(n.actions[t].permissions.views[r]={runAllowed:!0},n))}async function lKr(e,t,r){return await Nwt(e,r),await J0(e,t,async n=>(delete n.actions[t].permissions.views[r],n))}async function fKr(e,t){return await J0(e,t,async r=>{let{automationId:n}=r.actions[t],i=await yf.get(n);return await yf.remove(i._id,i._rev),delete r.actions[t],r})}async function dKr(e,t,r,n){let i=await T.tables.getTable(e);if(!i)throw new j("Table not found",404);let{automationId:s}=await kwt(e,t),a=await T.automations.get(s),u=await T.rows.find(e,r);await Qo(a,{fields:{id:u._id,revision:u._rev,row:u,table:i},user:n,appId:I.getWorkspaceId()},{getResponses:!0})}async function Lwt(e){return(await T.automations.find(e.map(({automationId:n})=>n))).reduce((n,i)=>(n[i._id]=i.name,n),{})}var Mwt=y(()=>{"use strict";F();_e();P();le();up();Ie();Z$();o(rKr,"ensureUniqueAndThrow");o(nKr,"create");o(kwt,"get");o(aV,"getAllForTable");o(iKr,"getAll");o(oKr,"deleteAll");o(sKr,"docExists");o(J0,"updateDoc");o(Nwt,"guardView");o(aKr,"setTablePermission");o(uKr,"unsetTablePermission");o(cKr,"setViewPermission");o(lKr,"unsetViewPermission");o(fKr,"remove");o(dKr,"run");o(Lwt,"getNames")});async function pKr(e){let r=(await T.tables.getAllTables()).filter(n=>n.sourceId===e);for(let n of Object.values(r))await T.rowActions.deleteAll(n._id)}var Uwt=y(()=>{"use strict";le();o(pKr,"deleteAllForDatasource")});var Gfe={};G(Gfe,{create:()=>nKr,deleteAll:()=>oKr,deleteAllForDatasource:()=>pKr,docExists:()=>sKr,get:()=>kwt,getAll:()=>iKr,getAllForTable:()=>aV,getNames:()=>Lwt,remove:()=>fKr,run:()=>dKr,setTablePermission:()=>aKr,setViewPermission:()=>cKr,unsetTablePermission:()=>uKr,unsetViewPermission:()=>lKr});var Fwt=y(()=>{"use strict";Mwt();Uwt()});var Kfe={};G(Kfe,{FIND_LIMIT:()=>Hfe,getRowsWithAttachments:()=>hKr});function mKr(e,t,r){let n={selector:{$or:t.map(i=>({[i]:{$exists:!0}})),_id:{$regex:`^ro${Lt}${e}`}},limit:Hfe};return r&&(n.bookmark=r),n}async function hKr(e,t){let r=U.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=mKr(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===Hfe);return{rows:a,columns:n}}var Hfe,Bwt=y(()=>{"use strict";P();F();Ie();Hfe=25;o(mKr,"generateAttachmentFindParams");o(hKr,"getRowsWithAttachments")});var X0={};G(X0,{find:()=>yKr,getRow:()=>Qfe,save:()=>gKr});async function Qfe(e,t,r){let n;return typeof e=="string"?Gn(e)?n=await T.views.get(e):n=await T.tables.getTable(e):n=e,((await Go("READ",n,{id:zi(t),includeSqlRelationships:r?.relationships?1:0}))?.rows||[])[0]}async function gKr(e,t,r){let{tableId:n,viewId:i}=jb(e),s;if(i?s=await T.views.get(i):s=await T.tables.getTable(n),T.views.isView(s)&&be.views.isCalculationView(s))throw new j("Cannot insert rows through a calculation view",400);let a=await Lu(r,(0,qwt.default)(s),t),u=await T.rows.utils.validate({row:a,source:s});if(!u.valid)throw{validation:u.errors};let c=await Go("CREATE",s,{row:a}),l=c.row._id;if(l){let f=await Qfe(s,l,{relationships:!0});return{...c,row:await Sr(s,f,{preserveLinks:!0,squash:!0})}}else return c}async function yKr(e,t){let{tableId:r,viewId:n}=jb(e),i;n?i=await T.views.get(n):i=await T.tables.getTable(r);let s=await Qfe(i,t,{relationships:!0});if(!s)throw new j("Row not found",404);return await Sr(i,s,{squash:!0,preserveLinks:!0})}var qwt,zfe=y(()=>{"use strict";F();_e();P();qwt=q(require("lodash/fp/cloneDeep"));le();_0();Jt();Eo();Ih();o(Qfe,"getRow");o(gKr,"save");o(yKr,"find")});var Yfe={};G(Yfe,{find:()=>wKr,getAllInternalRows:()=>bKr,save:()=>_Kr});async function bKr(e){let t;return e?t=U.getDB(e):t=I.getWorkspaceDB(),(await t.allDocs(En(null,null,{include_docs:!0}))).rows.map(n=>n.doc)}function Wwt(e){let t=e;return Gn(e)&&(t=Ln(e)),cr(t)?X0:ele}async function _Kr(e,t,r,n){return Wwt(e).save(e,t,r,n)}async function wKr(e,t){return Wwt(e).find(e,t)}var jwt=y(()=>{"use strict";F();_e();Ie();Jt();zfe();tle();o(bKr,"getAllInternalRows");o(Wwt,"pickApi");o(_Kr,"save");o(wKr,"find")});var $wt,EKr,vKr,SKr,Jfe,zb,Xfe=y(()=>{"use strict";P();Ih();$wt=require("lodash");_e();EKr=["CREATE","UPDATE","DELETE"],vKr=["mysql2","mssql","oracledb"],SKr=["CREATE_TABLE","UPDATE_TABLE","DELETE_TABLE"],Jfe=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}},zb=class{static{o(this,"AliasTables")}constructor(t){this.tableNames=t,this.aliases={},this.tableAliases={},this.charSeq=new Jfe}isAliasingEnabled(t,r){let n=t.resource?.fields?.length;if(!n||n<=0||SKr.includes(t.operation))return!1;if(!r)return!0;try{let i=cce(r),s=EKr.includes(t.operation),a=vKr.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,$wt.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 m of Object.keys(d))p[this.aliasField(m)]=d[m];l[f]=p}return Qt.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 TKr(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))}}function Vwt(e,t){TKr(e,t,r=>{let n=Array.isArray(r);if(!(typeof r=="string")&&!n)return r;let s=o(a=>{let u="ro"+fe;return a.startsWith(u)?U.getGlobalIDFromUserMetadataID(a):a},"processString");return n?r.map(a=>typeof a=="string"?s(a):a):s(r)})}function uV(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":Vwt(r,t);break;default:rt.unreachable(i)}break}case"bb_reference":{Vwt(r,t);break}}return Qt.recurseLogicalOperators(t,r=>uV(e,r))}function Gwt(e,t){return t.query&&(t.query=uV(e,t.query)),t}function cV(e){for(let t of Object.values(e)){if(typeof t!="object")continue;if(Object.keys(t).find(n=>U.removeKeyNumbering(n)==="_id"&&t[n]))return!0}return!1}var lV=y(()=>{"use strict";F();_e();P();o(TKr,"findColumnInQueries");o(Vwt,"userColumnMapping");o(uV,"checkFilters");o(Gwt,"searchInputMapping");o(cV,"isSearchingByRowID")});var Z0={};G(Z0,{buildInternalFieldList:()=>Zfe,search:()=>Zwt});async function Zfe(e,t,r){let{relationships:n,allowedFields:i,includeHiddenFields:s}=r||{},a=[],u=T.views.isView(e),c;u?c=await T.views.getTable(e.id):c=e,u?a=Object.keys(be.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,m)=>{let h=[];return m.forEach(g=>{h.push(`${yh(c._id,p._id)}.${g}`)}),h},"getJunctionFields");if(T.tables.isTable(e))for(let p of kn)i&&!i.includes(p)||f.push(`${c._id}.${p}`);for(let p of a){let m=c.schema[p];if(!m)continue;let h=m.type==="link";if(!(!n&&h))if(!h)f.push(`${c._id}.${df(p)}`);else{let g=m,b=t.find(E=>E._id===g.tableId);if(!b)continue;let w=(await Zfe(b,t,{includeHiddenFields:l})).concat(d(b,["doc1.fieldName","doc2.fieldName"]));if(w.length+f.length>AKr)break;f=f.concat(w)}}if(!u||!be.views.isCalculationView(e))for(let p of kn)f.push(`${c._id}.${p}`);return[...new Set(f)]}function OKr(e,t){let r={};for(let a of t)for(let u of Object.keys(a.schema))tg(u)||(r[u]=df(u));let n=o(a=>tg(a)?!1:t.some(u=>u.schema[a]),"keyInAnyTable"),i=new Qt.ColumnSplitter(t),s=o(a=>{for(let u of Object.keys(a))if(Ip(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||""}${df(p)}`]=c[l],delete c[l])}}},"prefixFilters");return s(e),e}function Xwt(e,t){let r=FS.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]=Xwt(JSON.parse(n[s])));let a=s.indexOf(FS);if(a!==-1){let u=s.slice(0,a)+s.slice(a+r),c=be.schema.decodeNonAscii(u);i[c]=n[s]}else i[s]=n[s]}return i})}async function Hwt(e,t,r,n){let i=r.map(c=>c.through),s=new zb(t.map(c=>c._id).concat(i));n?.countTotalRows&&(e.operation="COUNT");let a=o(async c=>{let l=Ywt._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(h=>["doc1","doc2"].forEach(g=>{f=f.replaceAll(`\`${g}\`.\`${h}\``,`\`${g}.${h}\``)}),"fixJunctionDocs");if(p("rowId"),p("fieldName"),Array.isArray(l))throw new Error("SQS cannot currently handle multiple queries");let m=I.getWorkspaceDB();return await Kwt.default.trace("sqs.runSqlQuery",async h=>(h?.addTags({sql:f}),await m.sql(f,d)))},"processSQLQuery"),u=await s.queryWithAliasing(e,a);return n?.countTotalRows?YD(u):Array.isArray(u)?Xwt(u,e.table):u}function xKr(e,t){return e===400&&t?.match(RKr)||e===400&&t?.match(Jwt)||e===400&&t?.match(IKr)||e===404&&t?.includes(io)}async function Zwt(e,t,r){let{paginate:n,query:i,...s}=(0,Qwt.cloneDeep)(e),a;T.views.isView(t)?a=await T.views.getTable(t.id):a=t;let u=await T.tables.getAllInternalTables(),c=u.reduce((g,b)=>(g[b._id]=b,g),{});if(a._id&&(a=c[a._id]),!a)throw new Error("Unable to find table");let l=Olt(a,u),f={...OKr(i,u),documentType:"ro"},d=[];if(T.views.isView(t)&&be.views.isCalculationView(t)){let g=be.views.calculationFields(t);for(let[b,w]of Object.entries(g))e.fields&&!e.fields.includes(b)||(w.calculationType==="count"?"distinct"in w&&w.distinct?d.push({name:b,distinct:!0,field:df(w.field),calculationType:w.calculationType}):d.push({name:b,calculationType:w.calculationType,field:df(w.field)}):d.push({name:b,field:df(w.field),calculationType:w.calculationType}))}let p={endpoint:{datasourceId:jp,entityId:a._id,operation:"READ"},filters:f,meta:{columnPrefix:FS,sqliteUseLikeWithoutLower:!0},resource:{fields:await Zfe(t,u,{relationships:l,allowedFields:e.fields}),aggregations:d},relationships:l};if(s.sort){let g=a.schema[s.sort];if(d.some(w=>w.name===s.sort))p.sort={[s.sort]:{direction:s.sortOrder||"ascending",type:"number"}};else if(g){let E=(XG(g)?g.responseType:g.type)==="number"?"number":"string";p.sort={[df(g.name)]:{direction:s.sortOrder||"ascending",type:E}}}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 m=s.bookmark||0;!cV(f)&&s.limit&&(n=!0,p.paginate={limit:s.limit+1,offset:m});let h=await Wb(p);try{let[g,b]=await Promise.all([Hwt(h,u,l),e.countRows?Hwt(h,u,l,{countTotalRows:!0}):Promise.resolve(void 0)]),w=Ywt.convertJsonStringColumns(a,await sj(g,t,c,l,{sqs:!0})),E=!1;n&&s.limit&&g.length>s.limit&&(E=!0,w.length>s.limit&&w.pop());let v=await Sr(t,w,{preserveLinks:!0,squash:!0}),A=[...e.fields||Object.keys(t.schema||{}).filter(O=>t.schema?.[O].visible!==!1),...kn];v=v.map(O=>(0,zwt.default)(O,A));let x={rows:v};return b!=null&&(x.totalRows=b),n&&E&&(x.hasNextPage=!0,x.bookmark=m+w.length),n&&!E&&(x.hasNextPage=!1),x}catch(g){let b=typeof g=="string"?g:g.message;if(!r?.retrying&&xKr(g.status,b))return await fo.doWithLock({type:"auto_extend",name:"sys_sync_definitions",resource:I.getWorkspaceId()},T.tables.sqs.syncDefinition),Zwt(e,t,{retrying:!0});if(g.status===400&&b?.match(Jwt))return{rows:[]};throw new Error(`Unable to search by SQL - ${b}`,{cause:g})}}var Kwt,Qwt,zwt,Ywt,AKr,Jwt,RKr,IKr,eEt=y(()=>{"use strict";F();_e();P();Kwt=q(require("dd-trace")),Qwt=require("lodash"),zwt=q(require("lodash/pick"));Mu();Ie();Eo();le();Gce();Xfe();Ih();lV();Ywt=new pt.Sql("sqlite3"),AKr=2e3,Jwt=new RegExp("no such column: .+"),RKr=new RegExp("no such table: .+"),IKr=new RegExp("duplicate column name: .+");o(Zfe,"buildInternalFieldList");o(OKr,"cleanupFilters");o(Xwt,"reverseUserColumnMapping");o(Hwt,"runSqlQuery");o(xKr,"resyncDefinitionsRequired");o(Zwt,"search")});async function tEt(view,calculation,group,data){let db=new CKr(Ne.newid());try{if(await db.bulkDocs(data.map(e=>({...e,_rev:void 0}))),!view.meta)throw new Error("Legacy view metadata is missing");let groupByMulti=view.meta.groupByMulti??view.meta.schema?.group?.type==="array",rebuiltView=lf(view.meta,groupByMulti),fn=o((e,t)=>t(e._id),"fn");eval("fn = "+rebuiltView?.map?.replace("function (doc)","function (doc, emit)"));let queryFns={meta:rebuiltView.meta,map:fn};rebuiltView.reduce&&(queryFns.reduce=rebuiltView.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 U.closePouchDB(db)}}var CKr,rEt=y(()=>{"use strict";F();ZD();CKr=U.getPouch({inMemory:!0});o(tEt,"runView")});async function PKr(e){let{tableId:t,format:r,rowIds:n,columns:i,query:s,sort:a,sortOrder:u,delimiter:c,customHeaders:l}=e,f=I.getWorkspaceDB(),d=await T.tables.getTable(t),p=[];if(n){let w=(await f.allDocs({include_docs:!0,keys:n.map(E=>{let v=zi(E);if(v.length>1)throw new j("Export data does not support composite keys.",400);return v[0]})})).rows.map(E=>E.doc);p=await Sr(d,w)}else p=(await T.rows.search({tableId:t,query:s||{},sort:a,sortOrder:u})).rows;let m=[],h=d.schema,g;if(p=MKr(p,h),i&&i.length){for(let w=0;w<p.length;w++){m[w]={};for(let E of i)m[w][E]=p[w][E]}g=i}else m=p;let b=T.rows.utils.cleanExportRows(m,h,r,i,l);if(r==="csv")return{fileName:"export.csv",content:IS(g??Object.keys(m[0]),b,c,l)};if(r==="json")return{fileName:"export.json",content:OS(b)};if(r==="jsonWithSchema")return{fileName:"export.json",content:xS(h,b)};throw"Format not recognised"}async function nEt(e){let t=await kKr(e),r=await tde(e);return await Sr(t,r)}async function kKr(e){try{return await T.tables.getTable(e)}catch(t){if(t.status!==404)throw t;let i=await NKr(e);if(!i)throw t;return i}}async function NKr(e){let t=I.getWorkspaceId();if(!t||!ku(t))return;let r=I.getDevWorkspaceId();return await I.doInWorkspaceContext(r,async()=>{if(await T.tables.doesTableExist(e))return await T.tables.getTable(e)})}async function tde(e,t){let r=I.getWorkspaceDB(),n;return e===Yt.USER_METADATA?n=await T.users.fetchMetadata():n=(await r.allDocs(En(e,null,{include_docs:!0,limit:t}))).rows.map(s=>s.doc),n}async function rde(e,t){if(e.startsWith("ta"))return nEt(e);let r=I.getWorkspaceDB(),{calculation:n,group:i,field:s}=t,a=await LKr(r,e),u;if(H.SELF_HOSTED)u=await r.query(`database/${e}`,{include_docs:!n,group:!!i});else{let l=a.meta.tableId,f=await tde(l);u=await tEt(a,n,!!i,f)}let c=[];if(!n){u.rows=u.rows.map(f=>f.doc);let l;try{l=await T.tables.getTable(a.meta.tableId)}catch{throw new Error("Unable to retrieve view table.")}c=await Sr(l,u.rows)}return n===ede.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===ede.COUNT||n===ede.SUM)&&(c=u.rows.map(l=>({group:l.key,field:s,value:l.value}))),c}async function LKr(e,t){let r=H.SELF_HOSTED?hce:gce,n=H.SELF_HOSTED?gce:hce,i=H.SELF_HOSTED?Fpt:Upt,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}function MKr(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]}),{}))}var ede,iEt=y(()=>{"use strict";F();P();le();CS();Wj();rEt();Ie();$e();Jt();Eo();o(PKr,"exportRows");o(nEt,"fetch");o(kKr,"getTableForFetch");o(NKr,"getDevTableWhenProdMissing");o(tde,"fetchRaw");o(rde,"fetchLegacyView");ede={SUM:"sum",COUNT:"count",STATS:"stats"};o(LKr,"getView");o(MKr,"trimFields")});var nde={};G(nde,{exportRows:()=>PKr,fetch:()=>nEt,fetchLegacyView:()=>rde,fetchRaw:()=>tde,sqs:()=>Z0});var oEt=y(()=>{"use strict";eEt();iEt()});var ide={};G(ide,{exportRows:()=>FKr,fetch:()=>BKr,fetchRaw:()=>qKr,search:()=>fV});function UKr(e,t,r,n){let i;if(!cV(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}}async function fV(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=UKr(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=>zi(d)[0])}try{let f={filters:i,sort:l,paginate:c,includeSqlRelationships:1},[{rows:d,rawResponseSize:p},m]=await Promise.all([Go("READ",t,f),r?Go("COUNT",t,f):Promise.resolve(void 0)]),h=await Sr(t,d,{preserveLinks:!0,squash:!0}),g=!1;n&&a&&p>a&&(g=!0,h.length>a&&h.pop());let w=[...e.fields||Object.keys(t.schema||{}).filter(v=>t.schema?.[v].visible!==!1),...xs];h=h.map(v=>(0,sEt.default)(v,w));let E={rows:h,hasNextPage:g};return g&&u!=null&&(E.bookmark=u+h.length),m!=null&&(E.totalRows=m),n&&!g&&(E.hasNextPage=!1),E}catch(f){throw f.message&&f.message.includes("does not exist")?new Error(`Table updated externally, please re-fetch - ${f.message}`,{cause:f}):f}}async function FKr(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 j("No table ID for search provided.",400);let{datasourceId:f,tableName:d}=Hr(t),p={};i?.length?p={oneOf:{_id:i.map(x=>{let O=zi(x);return O.length>1?O:O[0]})}}:p=s||{};let m=await T.datasources.get(f),h=await T.tables.getTable(t);if(!m||!m.entities)throw new j("Datasource has not been configured for plus API.",400);let g=await fV({tableId:h._id,query:p,sort:a,sortOrder:u},h),b=[],w;if(n&&n.length){for(let x=0;x<g.rows.length;x++){b[x]={};for(let O of n)b[x][O]=g.rows[x][O]}w=n}else b=g.rows;let E=m.entities[d].schema,v=T.rows.utils.cleanExportRows(b,E,r,n,l),S;switch(r){case"csv":S=IS(w??Object.keys(E),v,c,l);break;case"json":S=OS(v);break;case"jsonWithSchema":S=xS(E,v);break;default:throw rt.unreachable(r)}return{fileName:`export.${r}`,content:S}}async function BKr(e){let t=await T.tables.getTable(e),r=await Go("READ",t,{includeSqlRelationships:1});return await Sr(t,r.rows,{preserveLinks:!0,squash:!0})}async function qKr(e,t){let r=await T.tables.getTable(e),n;return t&&(n={limit:t}),(await Go("READ",r,{includeSqlRelationships:1,paginate:n})).rows}var sEt,aEt=y(()=>{"use strict";F();_e();P();sEt=q(require("lodash/pick"));le();_0();CS();Jt();Eo();lV();o(UKr,"getPaginationAndLimitParameters");o(fV,"search");o(FKr,"exportRows");o(BKr,"fetch");o(qKr,"fetchRaw")});var ode,uEt,cEt=y(()=>{"use strict";F();P();le();p0();ode=o((e,t)=>{t=t.map(r=>r.toLowerCase());for(let r of Object.keys(e||{}))if(Ip(r)){let n=e[r];if(!n)continue;for(let i of n.conditions)ode(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(U.removeKeyNumbering(i).toLowerCase()))throw new j(`Invalid filter field: ${i}`,400)}},"validateFilters"),uEt=o(async(e,t)=>{let r=o(async(i,s,a,u)=>{let c=[];xce({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 T.tables.getTable(f.tableId),m=await r(p,Object.keys(p.schema),[...a,f.tableId],{noRelationships:!0});c.push(...m.flatMap(h=>[`${f.name}.${h}`,`${p.name}.${h}`]))}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")});var ade={};G(ade,{exportRows:()=>jKr,fetch:()=>$Kr,fetchLegacyView:()=>GKr,fetchRaw:()=>VKr,isValidFilter:()=>vlt,search:()=>WKr});function sde(e){return cr(e)?ide:nde}async function WKr(e,t){return await lEt.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 T.views.get(e.viewId),i=await T.views.getTable(n);else if(e.tableId)n=await T.tables.getTable(e.tableId),i=n;else throw new Error("Must supply either a view ID or a table ID");let s=cr(i._id);if(e.query){let u=(e.fields||Object.keys(i.schema)).filter(l=>i.schema[l]?.visible!==!1),c=await uEt(i,u);ode(e.query,c)}else e.query={};if(t&&(e.query=await Mb(e.query,t)),e=Gwt(i,e),e.viewId){let c=await Mb(n.query||{},t);Array.isArray(c)&&(c=Qt.buildQuery(c)),c=uV(i,c);let l=c?[c]:[];e.query={$and:{conditions:[...l,e.query]}},c.onEmptyFilter&&(e.query.onEmptyFilter=c.onEmptyFilter)}if(e.query=Qt.cleanupQuery(e.query),e.query=Qt.fixupFilterArrays(e.query),r.addTags({cleanedQuery:e.query}),!Qt.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 fV(e,n)):(r?.addTags({searchType:"sqs"}),a=await Z0.search(e,n)),r.addTags({foundRows:a.rows.length,totalRows:a.totalRows}),a})}async function jKr(e){return sde(e.tableId).exportRows(e)}async function $Kr(e){return sde(e).fetch(e)}async function VKr(e,t){return sde(e).fetchRaw(e,t)}async function GKr(e,t){return rde(e,t)}var lEt,fEt=y(()=>{"use strict";P();Jt();oEt();aEt();_e();le();lV();lEt=q(require("dd-trace"));cEt();Mu();Jt();o(sde,"pickApi");o(WKr,"search");o(jKr,"exportRows");o($Kr,"fetch");o(VKr,"fetchRaw");o(GKr,"fetchLegacyView")});var dEt,pEt=y(()=>{"use strict";Bwt();jwt();fEt();Ih();zfe();Xfe();dEt={...Kfe,...Yfe,...ade,utils:fce,external:X0,AliasTables:zb}});async function HKr(e=I.getWorkspaceDB()){let t=(await e.allDocs(pct(null,{include_docs:!0}))).rows.map(n=>n.doc),r=t.filter(n=>!n.workspaceAppId);if(r.length){let n=await T.workspaceApps.fetch(),i=n.find(s=>s.isDefault)||n[0];i&&r.forEach(s=>{s.workspaceAppId=i._id})}return t}async function KKr(e){let r=await I.getWorkspaceDB().put({...e,_id:dct()});return{...e,_id:r.id,_rev:r.rev}}async function QKr(e){let r=await I.getWorkspaceDB().put(e);return{...e,_rev:r.rev}}var mEt=y(()=>{"use strict";F();le();Ie();o(HKr,"fetch");o(KKr,"create");o(QKr,"update")});async function zKr(e){let n=(await T.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 T.screens.update(i)}var hEt=y(()=>{"use strict";le();o(zKr,"ensureHomepageUniqueness")});var ude={};G(ude,{create:()=>KKr,ensureHomepageUniqueness:()=>zKr,fetch:()=>HKr,update:()=>QKr});var gEt=y(()=>{"use strict";mEt();hEt()});async function yEt(e,t){if((await bEt()).find(n=>n.name===e&&n._id!==t))throw new j(`App with name '${e}' is already taken.`,400)}async function bEt(e=I.getWorkspaceDB()){return(await e.allDocs(et.getWorkspaceAppParams(null,{include_docs:!0}))).rows.map(n=>({...n.doc,_id:n.doc._id,_rev:n.doc._rev}))}async function _Et(e){return await I.getWorkspaceDB().tryGet(e)}async function ZKr(e){let t=I.getWorkspaceDB();return await yEt(e.name),(await t.put({...e,_id:et.generateWorkspaceAppID()},{returnDoc:!0})).doc}async function eQr(e){let t=await JKr(e);return await YKr(e._id,t._id),t}async function tQr(e){let t=I.getWorkspaceDB(),r=await _Et(e._id);if(!r)throw new j(`Project app with id '${e._id}' not found.`,404);e.name!==r.name&&await yEt(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}async function rQr(e,t){let r=I.getWorkspaceDB();try{let i=await r.tryGet(e);if(!i)throw new j(`Project app with id '${e}' not found.`,404);await r.remove(e,t),ue.workspace.deleted(i,I.getWorkspaceId())}catch(i){throw i.status===404?new j(`Project app with id '${e}' not found.`,404):i}let n=(await T.screens.fetch()).filter(i=>i.workspaceAppId===e);await r.bulkRemove(n)}var YKr,JKr,XKr,wEt=y(()=>{"use strict";F();le();_e();o(yEt,"guardName");YKr=o(async(e,t)=>{let n=(await T.screens.fetch()).filter(s=>s.workspaceAppId===e),i=[];for(let s=0;s<n.length;s++){let a=n[s],u=await T.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"),JKr=o(async e=>{let t=await T.workspaceApps.fetch(),r=be.duplicateName(e.name,t.map(i=>i.name)),n={name:r,url:`/${XKr(r)}`,disabled:!0,navigation:e.navigation,isDefault:!1};return T.workspaceApps.create(n)},"createDuplicatedApp"),XKr=o(e=>e.toLowerCase().replaceAll(" ","-"),"slugify");o(bEt,"fetch");o(_Et,"get");o(ZKr,"create");o(eQr,"duplicate");o(tQr,"update");o(rQr,"remove")});async function nQr(e){let t=await T.workspaces.metadata.get(),r=e.split("?")[0],n=U.isProdWorkspaceID(t.appId)?`/app/${t.url}`.replace("//","/"):`/${t.appId}`,i=U.isProdWorkspaceID(t.appId)?`/app-chat/${t.url}`.replace("//","/"):`/app-chat/${t.appId}`,s=U.isProdWorkspaceID(t.appId)?`/embed/${t.url}`.replace("//","/"):null,a=await T.workspaceApps.fetch(),u=a.filter(m=>!m.disabled),c=o(()=>u.find(m=>m.isDefault)||u[0]||a.find(m=>m.isDefault)||a[0],"getDefaultWorkspaceApp");function l(m,{url:h,isDefault:g}){return m.replace(/\/$/,"")===`${n}${h.replace(/\/$/,"")}`||s&&m.replace(/\/$/,"")===`${s}${h.replace(/\/$/,"")}`||!m&&g}o(l,"isWorkspaceAppMatch");let f=o(m=>a.find(h=>l(m,h)),"findWorkspaceApp");if(r.replace(/\/$/,"")===i.replace(/\/$/,"")||r.startsWith(`${i.replace(/\/$/,"")}/`))return c();let d=f(r);if(d)return d;let p=r.replace(/\/_chat(?:\/.*)?$/,"");return p!==r?f(p):d}var EEt=y(()=>{"use strict";F();le();o(nQr,"getMatchedWorkspaceApp")});var cde={};G(cde,{create:()=>ZKr,duplicate:()=>eQr,fetch:()=>bEt,get:()=>_Et,getMatchedWorkspaceApp:()=>nQr,remove:()=>rQr,update:()=>tQr});var vEt=y(()=>{"use strict";wEt();EEt()});var lde={};G(lde,{updateWithExport:()=>uQr});async function iQr(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}`)}}function oQr(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]}async function sQr(e){let t=[];for(let s of QG)t.push(e.allDocs(U.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(SEt,{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}))}async function aQr(e){let t=[];for(let s of QG)t.push(e.allDocs(U.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(SEt,{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())}async function uQr(e,t,r){let n=U.getDevWorkspaceID(e),i=`temp_${n}`,s=U.getDB(i),a=U.getDB(n);try{let u={file:{type:t.type,path:t.path,password:r}};await nV.importApp(n,s,u,{updateAttachmentColumns:!0});let c=await iQr(s,a),l=await aQr(s),f=await sQr(a);if((await a.bulkDocs(oQr(l,f,c))).some(p=>p.error))throw new j("Error importing documents",500);await Ce.destroy(v$(n)),await ZS(n)}finally{await s.destroy()}}var SEt,TEt=y(()=>{"use strict";F();P();Lh();I$();Nfe();SEt=[wg.SQLITE,"_design/migrations"];o(iQr,"getNewWorkspaceMetadata");o(oQr,"mergeUpdateAndDeleteDocuments");o(sQr,"removeImportableDocuments");o(aQr,"getImportableDocuments");o(uQr,"updateWithExport")});var fde={};G(fde,{get:()=>cQr,tryGet:()=>lQr});async function cQr(e){return await(e?.production?I.getProdWorkspaceDB():I.getWorkspaceDB()).get("app_metadata")}async function lQr(e){return await(e?.production?I.getProdWorkspaceDB():I.getWorkspaceDB()).tryGet("app_metadata")}var AEt=y(()=>{"use strict";F();o(cQr,"get");o(lQr,"tryGet")});var dde={};G(dde,{enrichWithDefaultWorkspaceAppUrl:()=>pQr,fetch:()=>dQr,filterAppList:()=>REt});function REt(e,t){let r=[],n=Object.keys(e.roles);if(ze.hasAppBuilderPermissions(e))r=e.builder?.apps||[],r=r.concat(n);else if(!ze.isAdminOrBuilder(e))r=n;else return t;return t.filter(i=>r.includes(U.getProdWorkspaceID(i.appId)))}async function dQr(e,t){let r=e==="development",n=e==="all",i=await U.getAllWorkspaces({dev:r,all:n}),s={...t,roles:t?.roles||{}},a=await xi.enrichUserRolesFromGroups(s);i=REt(a,i);let u=i.filter(l=>l.status==="development").map(l=>l.appId);if(r||n){let l=await Qct(u);for(let f of i){let d=l[f.appId];d?f.lockedBy=d:delete f.lockedBy}}let c=await Cae(i);return await Ibt(c)}async function pQr(e){let t=[];for(let r of e){let n=await U.doWithDB(r.appId,i=>T.workspaceApps.fetch(i));t.push({...r,defaultWorkspaceAppUrl:n[0]?.url||""})}return t}var IEt=y(()=>{"use strict";F();tt();le();jle();Ie();Wa();Pae();o(REt,"filterAppList");o(dQr,"fetch");o(pQr,"enrichWithDefaultWorkspaceAppUrl")});var OEt,xEt=y(()=>{"use strict";TEt();AEt();dV();Qse();IEt();OEt={...pde,...Kse,...dde,...lde,metadata:fde}});var mQr,T,le=y(()=>{"use strict";Gct();Iae();bft();Fb();Z$();Nfe();iwt();Qj();cwt();lwt();pwt();mwt();Bfe();Xj();Owt();Pwt();Fwt();pEt();gEt();r$();xh();vEt();xEt();mQr={backups:nV,tables:Gb,automations:yf,workspaces:OEt,rows:dEt,users:yft,datasources:ff,queries:Iwt,plugins:Rae,screens:ude,views:c0,permissions:Mce,links:dwt,rowActions:Gfe,common:Lfe,oauth2:qfe,ai:_fe,workspaceApps:cde,navigation:Ffe,resources:Vfe,deployment:uwt,dev:Xse,workspace:Mfe},T=mQr});var pde={};G(pde,{syncUsersAcrossWorkspaces:()=>mde,syncUsersAgainstWorkspaces:()=>eP,syncWorkspace:()=>yQr});function CEt(){return!H.DISABLE_USER_SYNC}async function hQr(e,t,r){await U.dbExists(e)&&await I.doInWorkspaceContext(e,async()=>{let n=I.getWorkspaceDB();for(let i of t){let s=i,a=!1,u=Yd(i._id);i.deleted&&(a=!0),a||(s=await Pb(s,{appId:e,groups:r}));let c=s.roleId;c===Se.BUILTIN_ROLE_IDS.PUBLIC&&(c=void 0);let l;try{l=await n.get(u)}catch(d){if(d.status!==404)throw d;if(c)a||(l={tableId:Yt.USER_METADATA});else continue}if(CEt()&&(a||!c)){await n.remove(l);continue}c&&(s.roleId=c);let f=T.users.combineMetadataAndUser(s,l);f&&await n.put(f)}})}async function gQr(e){let t=await lae(e),r=await On.groups.fetch(),n=[];for(let i of e){let s=t.find(a=>a._id===i);s?n.push(s):n.push({_id:i,deleted:!0})}return{finalUsers:n,groups:r}}async function eP(e,t){if(!t.length)return;let r=new Set;for(let l of t){if(!l)continue;let f=U.getDevWorkspaceID(l),d=U.getProdWorkspaceID(l);f&&r.add(f),d&&r.add(d)}if(!r.size)return;let{finalUsers:n,groups:i}=await gQr(e),s=[];await rt.parallelForeach([...r],async l=>{if(l)try{let f=hQr(l,n,i);s.push(f),await f}catch{}},10);let c=(await Promise.allSettled(s)).filter(l=>l.status==="rejected").map(l=>l.reason).filter(l=>!U.isDocumentConflictError(l));c.length>0&&Be.logWarn("Failed to sync users to workspaces",c)}async function mde(e){let t=await U.getDevWorkspaceIDs();await eP(e,t)}async function yQr(e,t){if(H.DISABLE_AUTO_PROD_APP_SYNC)return{message:"App sync disabled. You can reenable with the DISABLE_AUTO_PROD_APP_SYNC environment variable."};if(U.isProdWorkspaceID(e))throw new Error("This action cannot be performed for production apps");let r=U.getProdWorkspaceID(e),i=await I.getProdWorkspaceDB({skip_setup:!0}).exists(),s;if(i){let a=new U.Replication({source:r,target:e});try{let u=a.appReplicateOpts();t?.automationOnly&&(u.filter=c=>c._id.startsWith(U.DocumentType.AUTOMATION)),await a.replicate(u)}catch(u){s=u}finally{await a.close()}}if(CEt()&&await T.users.syncGlobalUsers(),s)throw s;return{message:"App sync completed successfully."}}var dV=y(()=>{"use strict";F();tt();_e();le();Ie();$e();Sh();o(CEt,"userSyncEnabled");o(hQr,"syncUsersToWorkspace");o(gQr,"buildSyncUsers");o(eP,"syncUsersAgainstWorkspaces");o(mde,"syncUsersAcrossWorkspaces");o(yQr,"syncWorkspace")});function bQr(){return pV||(pV=new tP,pV.init()),pV}function due(){return{events:GG,processor:o(async t=>{try{let r=t.id,n=r.startsWith(ft.DocumentType.GROUP),i=[];if(n){"userIds"in t.properties&&i.push(...t.properties.userIds);let a=await On.groups.get(r);i.push(...a.users?.map(u=>u._id)||[])}else i.push(r);await bQr().add(i)}catch(r){if(r?.status===404)return;if(r?.status===409)return;Be.logAlert("Failed to perform user/group app sync",r)}},"processor")}}var tP,pV,pue=y(()=>{"use strict";F();tt();P();dV();tP=class e{static{o(this,"UserSyncProcessor")}static get queue(){return e._queue||(e._queue=new In.BudibaseQueue(In.JobQueue.BATCH_USER_SYNC_PROCESSOR,{jobOptions:{removeOnComplete:!0,removeOnFail:1e3}})),e._queue}init(){e.queue.process(1,async t=>{let r=await e.queue.getBullQueue().getWaiting(0,100),n=Array.from(new Set([t,...r].map(i=>i.data.userId)));await mde(n);for(let i of r)await i.remove()})}async add(t){for(let r of t)await e.queue.add({userId:r})}};o(bQr,"getUserSyncProcessor");o(due,"process")});async function kEt(){let e=[new fT.BullAdapter(jn.getBullQueue())],t=_o.getBackupQueue();t&&e.push(new fT.BullAdapter(t.getBullQueue()));let r=O$();r&&e.push(new fT.BullAdapter(r.getBullQueue())),e.push(new fT.BullAdapter(tP.queue.getBullQueue())),e.push(new fT.BullAdapter(Kb.queue.getQueue().getBullQueue()));let n=new PEt.KoaAdapter;return(0,DEt.createBullBoard)({queues:e,serverAdapter:n}),n.setBasePath(_Qr),n.registerPlugin()}async function hde(){await In.shutdown()}var DEt,fT,PEt,jn,_Qr,Bh=y(()=>{"use strict";F();tt();DEt=require("@bull-board/api"),fT=require("@bull-board/api/bullAdapter"),PEt=require("@bull-board/koa");pue();Gle();x$();Fb();jn=new In.BudibaseQueue(In.JobQueue.AUTOMATION,{removeStalledCb:e=>Nbt(e),jobTags:e=>({"automation.id":e.automation._id,"automation.name":e.automation.name,"automation.appId":e.automation.appId,"automation.createdAt":e.automation.createdAt,"automation.trigger":e.automation.definition.trigger.stepId})}),_Qr="/bulladmin";o(kEt,"init");o(hde,"shutdown")});var MEt,UEt,NEt,LEt,gde,EQr,vQr,FEt,BEt=y(()=>{"use strict";MEt=require("mailparser"),UEt=require("html-to-text"),NEt=5e4,LEt=`
1087
+ Generate the content based on these instructions. Format appropriately for a ${e.contentType}.`),i=(await gf(r.messages))?.trim();return i?{response:i,success:!0}:{success:!1,response:"Generate Text AI Step Failed: AI did not return any content."}}catch(t){return{success:!1,response:Et(t)}}}function dHr(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 rt.unreachable(e)}}var hbt=y(()=>{"use strict";tt();vn();P();_e();iT();o(mbt,"run");o(dHr,"getContentTypePrompt")});function hHr(e){return new Promise(t=>setTimeout(t,e))}async function gHr(e,t,r){let n=await(0,gbt.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)}async function yHr(e,t){let r=ce.ObjectStoreBuckets.APPS,{stream:n}=await ce.getReadStream(r,e.key),i=e.name||"document";return await t.uploadFile(n,i,e.extension)}async function bHr(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.")}}async function ybt({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 Rt.getLLMOrThrow(),r;if(e.source==="URL"&&typeof e.file=="string")r=await gHr(e.file,e.fileType,t);else if(e.source==="Attachment"&&typeof e.file!="string")r=await yHr(e.file,t);else throw new Error("Invalid file input \u2013 source and file type do not match");let n=Rt.extractFileData(e.schema,r,t.supportsFiles),i=[],s;for(let a=1;a<=oT;a++){try{let u=await t.prompt(n);if(i=await bHr(u),!(Array.isArray(i)&&i.length===0)||a===oT)break;console.warn(`[Extract AI] Empty extraction result on attempt ${a}/${oT}, retrying...`)}catch(u){if(s=u,a===oT)throw console.error(`[Extract AI] Final extraction attempt ${a}/${oT} failed:`,u),u;console.warn(`[Extract AI] Extraction attempt ${a}/${oT} failed, retrying...`,u)}await hHr(mHr)}if(s&&Array.isArray(i)&&i.length===0)throw s;return{data:i,success:!0}}catch(t){return console.error("Document extraction error:",t),{success:!1,data:{},response:Et(t)}}}var gbt,oT,mHr,bbt=y(()=>{"use strict";F();tt();P();gbt=q(require("node-fetch"));vn();oT=5,mHr=100;o(hHr,"sleep");o(gHr,"processUrlFile");o(yHr,"processAttachmentFile");o(bHr,"parseAIResponse");o(ybt,"run")});async function wbt({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,_bt.v4)();return cp.default.llmobs.trace({kind:"agent",name:"automation.agent",sessionId:a},async u=>{try{let c=await T.ai.agents.getOrThrow(r);if(cp.default.llmobs.annotate(u,{inputData:n,metadata:{agentId:r,agentName:c.name,appId:t,isForkedProcess:H.isInThread(),forkedProcessName:process.env.FORKED_PROCESS_NAME||"main"}}),t&&ku(t)&&c.live!==!0)return cp.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 T.ai.agents.buildPromptAndTools(c);cp.default.llmobs.annotate(u,{metadata:{toolCount:Object.keys(f).length}});let{chat:d,providerOptions:p}=await T.ai.llm.createLLM(c.aiconfig,a,u),m;if(i&&s&&Object.keys(s).length>0){let N=be.structuredOutput.normalizeSchemaForStructuredOutput(s);m=Js.Output.object({schema:(0,Js.jsonSchema)(N)})}let h=new Set,g=Object.keys(f).length>0,w=await new Js.ToolLoopAgent({model:(0,Js.wrapLanguageModel)({model:d,middleware:(0,Js.extractReasoningMiddleware)({tagName:"think"})}),instructions:l||void 0,tools:g?f:void 0,toolChoice:g?"auto":"none",stopWhen:(0,Js.stepCountIs)(30),providerOptions:p?.(g),output:m,onStepFinish({content:N,toolCalls:k,toolResults:$}){$0(h,k,$);for(let M of N)M.type==="tool-error"&&h.delete(M.toolCallId)}}).stream({prompt:n}),E,v;for await(let N of(0,Js.readUIMessageStream)({stream:w.toUIMessageStream({sendReasoning:!0,onError:k=>{let $=HE(k);return v=$,$}})}))E=N;let S=E?Ble([E]):[];if(h.size>0||S.length>0){let N=V0(S);return cp.default.llmobs.annotate(u,{outputData:N,tags:{error:"1","error.type":"IncompleteToolCall"}}),{success:!1,response:N,message:E}}let A,x;try{A=await w.text}catch(N){x=HE(N)}let O=v||x;if(O&&!A)return cp.default.llmobs.annotate(u,{outputData:O,tags:{error:"1","error.type":"StreamingError"}}),{success:!1,response:O,message:E};let C=await w.usage,D=m?await w.output:void 0;return cp.default.llmobs.annotate(u,{outputData:A,metadata:{stepCount:E?.parts?.length??0}}),{success:!0,response:A,usage:C,message:E,output:D}}catch(c){let l=Et(c);return cp.default.llmobs.annotate(u,{outputData:l,tags:{error:"1","error.type":c?.name||"UnknownError"}}),console.error("Agent step failed",{agentId:r,appId:t,liteLLMUrl:H.LITELLM_URL,errorName:c?.name,errorMessage:l}),{success:!1,response:l}}})}var Js,_bt,cp,Ebt=y(()=>{"use strict";vn();F();_e();le();qle();Js=require("ai"),_bt=require("uuid");Ie();cp=q(require("dd-trace"));$e();o(wbt,"run")});async function vbt({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:_n(e.value,t,{noThrow:!1})}}catch(n){return{success:!1,response:Et(n)}}}var Sbt=y(()=>{"use strict";vn();Yn();o(vbt,"run")});async function U$(){let e={...G0};if(H.SELF_HOSTED&&(e.OPENAI={...at.steps.openai.definition,deprecated:!0}),await Bn.isEnabled("AI_AGENTS")&&(e.AGENT=at.steps.agent.definition),H.SELF_HOSTED){let t=await T.plugins.fetch("automation");for(let r of t){let n=r.schema.schema;e[n.stepId]={...n,custom:!0}}}return e}async function Tbt(e){if(Wle[e]!=null)return Wle[e];if(H.SELF_HOSTED){let r=(await T.plugins.fetch("automation")).find(n=>n.schema.schema.stepId===e);if(!r)throw new Error(`Unable to find action implementation for "${e}"`);return(await AZe(r)).action}}var Wle,G0,F$=y(()=>{"use strict";_e();rht();Aht();Iht();xht();Bht();Wht();Wgt();$gt();Hgt();Qgt();Jgt();eyt();nyt();syt();cyt();fyt();pyt();Hyt();Qyt();Yyt();Xyt();tbt();ibt();abt();cbt();fbt();pbt();hbt();bbt();Ebt();Sbt();$e();P();F();le();li();Wle={SEND_EMAIL_SMTP:tht,CREATE_ROW:Tht,GET_ROW:Kyt,UPDATE_ROW:Rht,DELETE_ROW:Oht,QUERY_ROWS:Gyt,OUTGOING_WEBHOOK:Ggt,EXECUTE_SCRIPT:Fht,EXECUTE_SCRIPT_V2:qht,EXECUTE_QUERY:qgt,API_REQUEST:jgt,SERVER_LOG:Kgt,DELAY:dyt,FILTER:lyt,COLLECT:zyt,TRIGGER_AUTOMATION_RUN:Jyt,OPENAI:ebt,CLASSIFY_CONTENT:sbt,PROMPT_LLM:ubt,TRANSLATE:lbt,SUMMARISE:dbt,GENERATE_TEXT:mbt,EXTRACT_FILE_DATA:ybt,AGENT:wbt,EXTRACT_STATE:vbt,discord:Ygt,slack:Zgt,zapier:ryt,integromat:uyt,n8n:oyt},G0={SEND_EMAIL_SMTP:at.steps.sendSmtpEmail.definition,CREATE_ROW:at.steps.createRow.definition,GET_ROW:at.steps.getRow.definition,UPDATE_ROW:at.steps.updateRow.definition,DELETE_ROW:at.steps.deleteRow.definition,QUERY_ROWS:at.steps.queryRows.definition,OUTGOING_WEBHOOK:at.steps.outgoingWebhook.definition,EXECUTE_SCRIPT:at.steps.executeScript.definition,EXECUTE_SCRIPT_V2:at.steps.executeScriptV2.definition,EXECUTE_QUERY:at.steps.executeQuery.definition,API_REQUEST:at.steps.apiRequest.definition,SERVER_LOG:at.steps.serverLog.definition,DELAY:at.steps.delay.definition,FILTER:at.steps.filter.definition,LOOP:at.steps.loop.definition,COLLECT:at.steps.collect.definition,TRIGGER_AUTOMATION_RUN:at.steps.triggerAutomationRun.definition,BRANCH:at.steps.branch.definition,CLASSIFY_CONTENT:at.steps.classifyText.definition,PROMPT_LLM:at.steps.promptLLM.definition,TRANSLATE:at.steps.translate.definition,SUMMARISE:at.steps.summarise.definition,GENERATE_TEXT:at.steps.generate.definition,EXTRACT_FILE_DATA:at.steps.extract.definition,EXTRACT_STATE:at.steps.extractState.definition,LOOP_V2:at.steps.loopV2.definition,discord:at.steps.discord.definition,slack:at.steps.slack.definition,zapier:at.steps.zapier.definition,integromat:at.steps.make.definition,n8n:at.steps.n8n.definition};H.SELF_HOSTED&&(Wle.EXECUTE_BASH=nbt,G0.EXECUTE_BASH=at.steps.bash.definition,H.isTest()&&(G0.OPENAI=at.steps.openai.definition,G0.AGENT=at.steps.agent.definition));o(U$,"getActionDefinitions");o(Tbt,"getAction")});function THr(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}}async function Rbt(e,t){if(H.DISABLE_AUTOMATION_LOGS)return;let r=H.AUTOMATION_MAX_LOG_SIZE_MB;(0,Abt.default)(t)/SHr>r&&THr(t,r);try{await uh.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"}),Be.logAlert("Error writing automation log",i)}}async function Ibt(e){let t=await uh.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(U.SEPARATOR)[2]>t&&s.push(a)}r.automationErrors[n]=s}return e}var Abt,SHr,jle=y(()=>{"use strict";F();tt();Abt=q(require("object-sizeof"));$e();SHr=1024*1024;o(THr,"sanitiseResults");o(Rbt,"storeLog");o(Ibt,"checkAppMetadata")});var Obt,$le,xbt,Cbt=y(()=>{"use strict";F();P();$e();Ej();uue();Obt=5,$le=class{static{o(this,"AutomationEmitter")}constructor(t){this.chainCount=t,this.metadata={automationChainCount:t}}async getMaxAutomationChain(){let n=(await I.getWorkspaceDB().get("app_metadata"))?.automations?.chainAutomations;return n===!0?Obt:H.isTest()?0:n===void 0&&H.SELF_HOSTED?Obt:0}async emitRow({eventName:t,appId:r,row:n,table:i,oldRow:s,user:a}){let u=await this.getMaxAutomationChain();this.chainCount>=u||_j({emitter:af,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||wj({emitter:af,eventName:t,appId:r,table:n,metadata:this.metadata})}},xbt=$le});var Pbt={};var Dbt,Vle=y(()=>{"use strict";Dbt=q(require("dd-trace"));process.env.DD_APM_ENABLED&&(console.log("Starting dd-trace"),Dbt.default.init({debug:process.env.DD_ENV==="qa",llmobs:{mlApp:process.env.DD_LLMOBS_ML_APP||"budibase"}}))});function B$(e,t,r){if(e.isLegacyLoop){t.items=gue(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}}}function sT(e,t,r){if(e.isLegacyLoop){t.items=gue(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}}}function IHr(e){return{id:e.id,stepId:e.stepId,inputs:e.inputs,outputs:RHr}}async function OHr(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,H0.cloneDeep)(a);for(let c of Object.values(u))if(c)if(Sye(c))c.conditions=c.conditions.map(i);else for(let[l,f]of Object.entries(c))n[l]=_n(l,e),typeof f=="string"&&Du(f).length>0&&(c[l]=_n(f,e));return u},"evaluateBindings");return Qt.runQuery([n],i(t.condition)).length>0}async function xHr(e){e.env=await ip();try{let{config:t}=await Dr.getSettingsConfigDoc();e.settings={url:t.platformUrl,logo:t.logoUrl,company:t.company}}catch{e.settings={}}}function CHr(e,t){e.trigger.outputs={...e.trigger.outputs,...t},e.steps[0]=e.trigger}async function DHr(e){let t=e.data.automation?.definition?.trigger;if(!t||!Cp(t)&&!Ja(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 T.automations.get(n)}async function kbt(e,t={}){let r=e.data.event.appId;if(!r)throw new Error("Unable to execute, event doesn't contain workspace ID.");return await Fh.default.trace("automation.executeInThread",async n=>(n.addTags({workspaceId:r,automationId:e.data.automation?._id}),await I.doInWorkspaceContext(r,async()=>{await DHr(e),await I.ensureSnippetContext();let i=await ip();return await I.doInEnvironmentContext(i,async()=>new q$(e,t).execute())})))}var Fh,H0,AHr,RHr,q$,Nbt,Gle=y(()=>{"use strict";F();tt();_e();Yn();P();Fh=q(require("dd-trace")),H0=require("lodash/fp");F$();vn();jle();Mh();gn();Ie();$e();Cbt();QD();le();f$();process.env.DD_APM_ENABLED&&(Vle(),QT(Pbt));Ght.threadSetup();AHr=at.triggers.definitions.CRON.stepId,RHr={success:!0,status:"stopped"};o(B$,"stepSuccess");o(sT,"stepFailure");o(IHr,"stepStopped");o(OHr,"branchMatches");o(xHr,"enrichBaseContext");o(CHr,"setTriggerOutput");o(DHr,"reloadAutomation");q$=class{static{o(this,"Orchestrator")}constructor(t,r={}){this.job=t,this.stopped=!1,this.onProgress=r.onProgress,this.job.data.automation=Ddt(t.data.automation);let n=t.data.event.metadata?.automationChainCount||0;this.emitter=new xbt(n+1)}get automation(){return this.job.data.automation}get appId(){return this.job.data.event.appId}isCron(){return this.automation.definition.trigger.stepId===AHr}async stopCron(t,r){if(!this.isCron())return;let n=`CRON disabled reason=${t} - ${this.appId}/${this.automation._id}`;Be.logWarn(n),await Hle(this.job.id);let{result:i}=r||{};i&&(CHr(i,{success:!1,status:"stopped_error"}),i.status="stopped_error",await this.logResult(i))}async logResult(t){await Rbt(this.automation,t)}async getMetadata(){let t=yct(this.automation._id);return await I.getWorkspaceDB().tryGet(t)||{_id:t,errorCount:0}}async incrementErrorCount(){let t=I.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 be.wait(1e3+Math.random()*1e3)}}Be.logAlertWithInfo("Failed to update error count in automation metadata",t.name,this.automation._id,r)}isProd(){return ku(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 Fh.default.trace("execute",async t=>{t.addTags({appId:this.appId,automationId:this.automation._id});let r=(0,H0.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 xHr(s);let a=this.job.data.event.timeout||H.AUTOMATION_THREAD_TIMEOUT,u=[];try{u=await be.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>=iZe?(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 Fh.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);if(this.reportStepProgress(u,s(c),c,t),c.outputs.success===!1&&c.outputs.status==null)return i;n++;break}default:{this.reportStepProgress(u,"running",void 0,t),a(u,await ot.addAction(async()=>{let l=await this.executeStep(t,u);return u.stepId==="EXTRACT_STATE"&&(t.state??={},t.state[l.inputs.key]=l.outputs.value),ue.action.automationStepExecuted({stepId:u.stepId}),l}));let c=i.at(-1);if(c&&(this.reportStepProgress(u,s(c),c,t),u.stepId==="TRIGGER_AUTOMATION_RUN"&&c.outputs.success===!1&&(c.outputs.status==="error"||c.outputs.status==="stopped_error")))return i;n++;break}}}return i})}async executeLoopStep(t,r){return await Fh.default.trace("executeLoopStep",async n=>{let i=(0,H0.cloneDeep)(r.inputs.children)||[],s=r.inputs;await _W(s,t);let a=Idt(r),u=(t._loopDepth||0)+1;t._loopDepth=u;try{let c=0,l=[];try{l=Rdt(r)}catch{return n.addTags({status:"INCORRECT_TYPE",iterations:c}),sT(r,{status:"INCORRECT_TYPE"})}let d=r.isLegacyLoop?Number.MAX_SAFE_INTEGER:Odt(r),p=xdt(i,d),m=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}),sT(r,TS(p,"max_iterations_reached",c));if(Adt(r,g))return n.addTags({status:"FAILURE_CONDITION_MET",iterations:c}),sT(r,TS(p,"FAILURE_CONDITION_MET",c));let b=t.loop,w=t._loopIteration;t.loop={currentItem:g},t._loopIteration={current:c+1,total:m};try{let E=t._stepIndex,v=await this.executeSteps(t,i);t._stepIndex=E;for(let A of v)i.some(O=>O.id===A.id)&&Cdt(p,A,c);if(v.some(A=>A.outputs.success===!1))return sT(r,TS(p,void 0,void 0,!0));if(this.stopped){let A=TS(p,void 0,c+1);return A.status="stopped",n.addTags({status:"stopped",iterations:c+1}),B$(r,A)}}finally{t.loop=b,t._loopIteration=w}}let h=c===0?"no_iterations":void 0;return B$(r,TS(p,h,c))}finally{t._loopDepth=u-1}})}async executeBranchStep(t,r){return await Fh.default.trace("executeBranchStep",async n=>{let{branches:i,children:s}=r.inputs;for(let a of i)if(await OHr(t,a)){n.addTags({branchName:a.name,branchId:a.id});let u=B$(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"}),[sT(r,{status:"No branch condition met"})]})}async executeStep(t,r){return await Fh.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}),IHr(r);let i=await Tbt(r.stepId);if(i==null)throw new Error(`Cannot find automation step by name ${r.stepId}`);let s=(0,H0.cloneDeep)(r.inputs);r.stepId!=="EXECUTE_SCRIPT_V2"&&r.stepId!=="EXTRACT_STATE"&&(s=await _W(s,t)),s=hue(s,r.schema.inputs.properties);let a;try{a=await Fh.default.trace("fn",()=>i({inputs:s,appId:this.appId,emitter:this.emitter,context:t}))}catch(u){return sT(r,{status:"error",error:Et(u)})}return r.stepId==="FILTER"&&"result"in a&&a.result===!1&&(this.stopped=!0,a.status="stopped"),r.stepId==="TRIGGER_AUTOMATION_RUN"&&"status"in a&&a.status==="stopped"&&(this.stopped=!0),n.addTags({outputsKeys:Object.keys(a)}),B$(r,a,s)})}};o(kbt,"executeInThread");Nbt=o(async e=>{let t=e.data.event.appId;if(!t)throw new Error("Unable to execute, event doesn't contain app ID.");await I.doInWorkspaceContext(t,async()=>{await new q$(e).stopCron("stalled")})},"removeStalled")});async function Lbt(){return(await I.getWorkspaceDB().allDocs(Nu(null,{include_docs:!0}))).rows.map(r=>r.doc)}async function kHr(e,t){let r=e.row.tableId;if(e.appId==null)throw`No appId specified for ${t} - check event emitters.`;!r||!await Qce(r)||await I.doInWorkspaceContext(e.appId,async()=>{let n=await Lbt();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(!H.ALLOW_DEV_AUTOMATIONS&&Gc(e.appId)&&!await rae(i._id))continue;if(await Ubt(i,{row:e.row,oldRow:e.oldRow}))try{await jn.add({automation:i,event:e},Kle)}catch(a){Be.logAlert("Failed to queue automation",a)}}})}async function Qle(e,t){try{await kHr(e,t)}catch(r){Be.logWarn("Unable to process row event",r)}}function NHr(e,t){return Qt.runQuery([e],t).length>0}function rT(e){return e!==null&&"steps"in e&&Array.isArray(e.steps)}async function Qo(e,t,{getResponses:r,onProgress:n}={}){if(e.disabled)throw new Error("Automation is disabled");if(Ut.automations.isAppAction(e)&&!await rae(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]=Lb(t.fields[l],c[l]);t.fields=a}else(Ut.automations.isRowAction(e)||Ut.automations.isWebhookAction(e))&&(t={...t,...t.fields,fields:{}});let i={automation:e,event:t};return await Ubt(e,{row:i.event?.row??{},oldRow:i.event?.oldRow??{}})?r?(i.event={...i.event,appId:I.getWorkspaceId(),automation:e},kbt({data:i},{onProgress:n})):jn.add(i,Kle):{outputs:{success:!1,status:"stopped"},message:"Automation did not run. Filter conditions in trigger were not met."}}async function Mbt(){if(H.isInThread()||!H.SELF_HOSTED||H.MULTI_TENANCY)return;let e=await U.getAllWorkspaces({dev:!1,idsOnly:!0});for(let t of e)await I.doInWorkspaceContext(t,async()=>{let r=await Lbt(),n=[];for(let i of r)if(K0(i)){let s={automation:i,event:{appId:t,timestamp:Date.now()}};n.push(jn.add(s,Kle))}await Promise.all(n)})}async function Ubt(e,t){let r=e.definition.trigger,n=r.inputs,i=n?.filters,s=n?.tableId;if(!i)return!0;if(r.stepId===at.triggers.definitions.ROW_UPDATED.stepId||r.stepId===at.triggers.definitions.ROW_SAVED.stepId){let a=await SS(s,t.row);return NHr(a,i)}return!0}var W$,Kle,up=y(()=>{"use strict";_e();Ie();Ej();Eo();F();_e();P();vn();$e();Ch();Gle();Wa();Bh();Mh();W$=at.triggers.definitions,Kle={removeOnComplete:!0,removeOnFail:!0};o(Lbt,"getAllAutomations");o(kHr,"queueRelevantRowAutomations");o(Qle,"queueRowAutomations");af.on("row:save",async function(e){!e||!e.row||!e.row.tableId||await Qle(e,"row:save")});af.on("row:update",async function(e){!e||!e.row||!e.row.tableId||await Qle(e,"row:update")});af.on("row:delete",async function(e){!e||!e.row||!e.row.tableId||await Qle(e,"row:delete")});o(NHr,"rowPassesFilters");o(rT,"isAutomationResults");o(Qo,"externalTrigger");o(Mbt,"rebootTrigger");o(Ubt,"checkTriggerFilters")});var j$,ja,Fbt,Bbt,MHr,UHr,FHr,BHr,qbt,Wbt=y(()=>{"use strict";j$=require("ai"),ja=require("zod");F();P();up();le();Fbt="Trigger this automation (APP triggers only). Returns all step outputs.",Bbt="Fields map: key/value pairs. Values must be string, number, boolean, or array (no nested objects).",MHr=o(e=>{let r=e.definition?.trigger?.inputs?.fields;return!r||Object.keys(r).length===0?"":Object.entries(r).map(([n,i])=>`${n} (${i})`).join(", ")},"getAutomationFieldsSummary"),UHr=o(async({automationId:e,fields:t})=>{let r=t??{},i=await I.getWorkspaceDB().tryGet(e);if(!i)return{error:`Automation with ID ${e} not found`};let s=i.definition?.trigger?.stepId;if(s!=="APP")return{error:`Cannot trigger automation '${i.name}'. Only APP trigger type supported. This automation has: ${s}`};let a=await Qo(i,{fields:r},{getResponses:!0});return rT(a)?{success:a.status==="success",status:a.status,steps:a.steps}:{success:!1,error:a.message||"Automation did not trigger"}},"triggerAutomationById"),FHr=[{name:"list_automations",sourceType:"AUTOMATION",sourceLabel:"Budibase",description:"List all automations in the current app",tool:(0,j$.tool)({description:"List all automations in the current app",inputSchema:ja.z.object({}),execute:async()=>({automations:await T.automations.fetch()})})},{name:"get_automation",sourceType:"AUTOMATION",sourceLabel:"Budibase",description:"Get details about a specific automation by ID",tool:(0,j$.tool)({description:"Get details about a specific automation by ID",inputSchema:ja.z.object({automationId:ja.z.string().describe("The ID of the automation to retrieve")}),execute:async e=>{let{automationId:t}=e;return{automation:await T.automations.get(t)}}})}],BHr=o((e=[])=>{let t=e.filter(r=>r._id&&r.definition?.trigger?.stepId==="APP").map(r=>{let n=r.name||r._id,s=`${r._id.replace(/[^A-Za-z0-9_-]/g,"_")}_trigger`.substring(0,64),a=MHr(r),u=a?`${Bbt} Available fields: ${a}.`:Bbt,c=a?`Trigger "${n}" automation. ${Fbt} Fields: ${a}.`:`Trigger "${n}" automation. ${Fbt}`;return{name:s,readableName:`${n}.trigger`,sourceType:"AUTOMATION",sourceLabel:"Budibase",description:c,tool:(0,j$.tool)({description:c,inputSchema:ja.z.object({fields:ja.z.record(ja.z.string(),ja.z.union([ja.z.string(),ja.z.number(),ja.z.boolean(),ja.z.array(ja.z.unknown())])).nullish().describe(u)}),execute:async l=>{let{fields:f}=l;return UHr({automationId:r._id,fields:f})}})}});return[...FHr,...t]},"createAutomationTools"),qbt=BHr});var zle,Q0,qHr,jbt,$bt=y(()=>{"use strict";P();zle=require("ai"),Q0=require("zod");le();qHr=[{name:"list_tables",sourceType:"INTERNAL_TABLE",sourceLabel:"Budibase",description:"List all tables in the current app",tool:(0,zle.tool)({description:"List all tables in the current app",inputSchema:Q0.z.object({showSchema:Q0.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 T.tables.getAllTables();return t?{tables:r}:{tables:r.map(n=>({id:n._id,tableName:n.name}))}}})},{name:"get_table",sourceType:"INTERNAL_TABLE",sourceLabel:"Budibase",description:"Get details about a specific table by ID",tool:(0,zle.tool)({description:"Get details about a specific table by ID",inputSchema:Q0.z.object({tableId:Q0.z.string().describe("The ID of the table to retrieve")}),execute:async e=>{let{tableId:t}=e;return{table:await T.tables.getTable(t)}}})}],jbt=qHr});var Gbt,mt,Vbt,$$,Yle,WHr,jHr,$Hr,Hbt,VHr,GHr,HHr,KHr,QHr,zHr,YHr,JHr,XHr,Kbt,Qbt=y(()=>{"use strict";Gbt=require("ai"),mt=require("zod");P();_e();le();Vbt="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.",$$='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.',Yle='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". IMPORTANT: Do NOT use "and", "or", or nested $and/$or conditions. All operators must be top-level keys in a single flat object. Operators oneOf and containsAny require array values (e.g. {"oneOf": {"status": ["active", "pending"]}}). To combine multiple filters, include multiple operator keys: {"fuzzy": {"name": "John", "city": "London"}, "equal": {"status": "active"}}. Examples: Find where status equals "active": {"equal": {"status": "active"}}. Find where status is "active" OR "pending": {"oneOf": {"status": ["active", "pending"]}}. Find where tags contains any of "urgent", "review": {"containsAny": {"tags": ["urgent", "review"]}}. 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}}}. Combine fuzzy name with exact status: {"fuzzy": {"name": "John"}, "equal": {"status": "active"}}.',WHr=30,jHr=o(e=>new Set(e==="external"?xs:kn),"getProtectedColumns"),$Hr=o(e=>e.type==="formula"||e.type==="auto"||e.type==="ai"||e.autocolumn===!0,"isReadOnlyField"),Hbt=o(e=>{switch(e.type){case"string":return"string";case"longform":return"longform";case"options":return"options";case"number":return"number";case"boolean":return"boolean";case"array":return"array";case"datetime":return"datetime";case"attachment":return"attachments";case"attachment_single":return"attachment";case"link":return"link";case"json":return"json";case"bb_reference":return"bb_reference";case"bb_reference_single":return"bb_reference_single";case"bigint":return"bigint";case"barcodeqr":return"barcode";case"signature_single":return"signature";default:return e.type}},"formatFieldType"),VHr=o(({name:e,schema:t})=>{let r=`${e} (${Hbt(t)})`,n=t.constraints?.inclusion;return(t.type==="options"||t.type==="array")&&Array.isArray(n)&&n.length>0&&(r+=` options: ${n.join(" | ")}`),t.type==="link"&&"tableId"in t&&t.tableId&&(r+=` -> ${t.tableId}`),r},"formatFieldSummary"),GHr=o((e,t)=>{let r=jHr(t);return Object.entries(e).filter(([n,i])=>!(r.has(n)||$Hr(i))).map(([n,i])=>({name:n,schema:i}))},"getWritableFields"),HHr=o(e=>{if(e.length===0)return"";let t=e.map(VHr),r=t.slice(0,WHr),n=t.length-r.length;return n>0&&r.push(`... +${n} more (use get_table for full schema)`),r.join(", ")},"buildSchemaSummary"),KHr=o(e=>e?`${$$} Available fields: ${e}.`:$$,"buildDataFieldDescription"),QHr=o((e,t)=>{if(e.length===0)return mt.z.record(mt.z.string(),mt.z.any()).describe($$);let r={};for(let n of e){let i=Hbt(n.schema),s=n.schema.constraints?.inclusion,a=Array.isArray(s)&&s.length>0?` Options: ${s.join(" | ")}.`:"";r[n.name]=mt.z.any().describe(`Field type: ${i}.${a}`)}return mt.z.object(r).partial().passthrough().describe(KHr(t))},"buildRowDataSchema"),zHr=o(e=>e?`${Yle} Available fields: ${e}.`:Yle,"buildSearchQueryDescription"),YHr=o(e=>mt.z.object({query:mt.z.union([mt.z.record(mt.z.string(),mt.z.any()),mt.z.string()]).nullish().describe(zHr(e)),sort:mt.z.object({column:mt.z.string().describe("Column to sort by"),order:mt.z.enum(["ascending","descending"]).describe("Sort order")}).nullish().describe("Sort configuration"),limit:mt.z.number().nullish().describe("Maximum number of results")}),"buildSearchInputSchema"),JHr={list_rows:{description:"List rows in a given table with optional pagination",inputSchema:mt.z.object({limit:mt.z.number().nullish().describe("Maximum number of rows to return"),bookmark:mt.z.union([mt.z.string(),mt.z.number()]).nullish().describe("Bookmark for pagination (returned from previous request)")}),execute:async(e,{limit:t,bookmark:r})=>{let n={tableId:e,query:{},limit:t??void 0,bookmark:r??void 0},i=await T.rows.search(n);return{rows:i.rows,hasNextPage:i.hasNextPage,bookmark:i.bookmark}}},get_row:{description:"Get a specific row by ID",inputSchema:mt.z.object({rowId:mt.z.string().describe("The ID of the row to retrieve")}),execute:async(e,{rowId:t})=>({row:await T.rows.find(e,t)})},create_row:{description:`Create a new row. Only include fields that match the table schema. ${Vbt}`,inputSchema:mt.z.object({data:mt.z.record(mt.z.string(),mt.z.any()).describe($$)}),execute:async(e,{data:t})=>{let{row:r}=await T.rows.save(e,t,void 0);return{row:r}}},update_row:{description:`Update an existing row. ${Vbt}`,inputSchema:mt.z.object({rowId:mt.z.string().describe("The ID of the row to update"),rowRev:mt.z.string().describe("The current _rev of the row (if known)"),data:mt.z.record(mt.z.string(),mt.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,{rowId:t,rowRev:r,data:n})=>{let s={...await T.rows.find(e,t),...n,_id:t,_rev:r},{row:a}=await T.rows.save(e,s,void 0);return{row:a}}},search_rows:{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:mt.z.object({query:mt.z.union([mt.z.record(mt.z.string(),mt.z.any()),mt.z.string()]).nullish().describe(Yle),sort:mt.z.object({column:mt.z.string().describe("Column to sort by"),order:mt.z.enum(["ascending","descending"]).describe("Sort order")}).nullish().describe("Sort configuration"),limit:mt.z.number().nullish().describe("Maximum number of results")}),execute:async(e,{query:t,sort:r,limit:n})=>{let i=t;if(typeof i=="string")try{i=JSON.parse(i)}catch(u){return{error:`Invalid JSON in query parameter: ${u}`}}let s={tableId:e,query:i||{},limit:n??void 0};return r&&(s.sort=r.column,s.sortOrder=r.order==="ascending"?"ascending":"descending"),{rows:(await T.rows.search(s)).rows}}}},XHr=o(e=>e.split("_").map(t=>t.charAt(0).toUpperCase()+t.slice(1)).join(" "),"formatActionLabel"),Kbt=o(({tableId:e,tableName:t,tableSourceType:r,tableSchema:n,sourceLabel:i,sourceIconType:s})=>{let a=r==="external",u=a?"EXTERNAL_TABLE":"INTERNAL_TABLE",c=i||(a?"External":"Budibase"),l=GHr(n,r),f=HHr(l),d=QHr(l,f),p=YHr(f);return Object.entries(JHr).map(([m,h])=>{let g=`${XHr(m)} in "${t}". ${h.description}`,w=`${e.replace(/[^A-Za-z0-9_-]/g,"_")}_${m}`.substring(0,64),E=h.inputSchema;return m==="create_row"?E=mt.z.object({data:d}):m==="update_row"?E=mt.z.object({rowId:mt.z.string().describe("The ID of the row to update"),rowRev:mt.z.string().describe("The current _rev of the row (if known)"),data:d}):m==="search_rows"&&(E=p),{name:w,readableName:`${t}.${m}`,sourceType:u,sourceLabel:c,sourceIconType:s,description:g,tool:(0,Gbt.tool)({description:g,inputSchema:E,execute:async v=>h.execute(e,v)})}})},"createRowTools")});var zbt,Jle=y(()=>{"use strict";P();Wbt();$bt();Qbt();zbt=o((e=[],t={},r={},n=[])=>{let i=[...qbt(n),...jbt],s=e.filter(a=>a._id).flatMap(a=>{let u=a.sourceType==="external";return Kbt({tableId:a._id,tableName:a.name||a._id,tableSourceType:a.sourceType,tableSchema:a.schema,sourceLabel:u?t[a.sourceId]||"External":"Budibase",sourceIconType:u?r[a.sourceId]:void 0})});return[...i,...s]},"getBudibaseTools")});var Jbt,Xle,Ybt,ZHr,e4r,Xbt,Zbt,e_t,t_t=y(()=>{"use strict";F();P();Jbt=require("ai"),Xle=require("zod");XS();Ho();Ybt=o((e,t)=>e.toLowerCase().replace(/[^a-z0-9_-]/g,"_").replace(/_+/g,"_").replace(/^_|_$/g,"").substring(0,t),"sanitiseNameSegment"),ZHr=o((e,t,r)=>{let n=Ybt(t||"datasource",20)||"datasource",i=Ybt(e.name||"query",24)||"query";return`${r}_${n}_${i}`},"buildScopedToolName"),e4r=o(e=>{let t={};for(let r of e.parameters||[])t[r.name]=Xle.z.string().optional().describe(`Parameter: ${r.name}`);return Xle.z.object(t)},"buildParametersSchema"),Xbt=o(({query:e,sourceType:t,sourceLabel:r,sourceIconType:n,description:i,namePrefix:s})=>{let a=ZHr(e,r,s),u=e4r(e);return{name:a,readableName:e.name,description:i,sourceType:t,sourceLabel:r,sourceIconType:n,tool:(0,Jbt.tool)({description:i,inputSchema:u,execute:async c=>{let l=I.getWorkspaceId();if(!l)return{success:!1,error:"No app context available"};let f=ei(l,null,{body:{parameters:c},params:{queryId:e._id}});try{await JS(f);let{data:d,...p}=f.body||{};return{success:!0,data:d,info:p}}catch(d){return{success:!1,error:(d instanceof Error?d.message:String(d))||"Query execution failed"}}}})}},"createQueryTool"),Zbt=o((e,t)=>{let r=e.restTemplateMetadata?.description?`${e.name}: ${e.restTemplateMetadata.description}`:`Execute REST query: ${e.name}`;return Xbt({query:e,description:r,sourceType:"REST_QUERY",sourceLabel:t||"API",namePrefix:"rest"})},"createRestQueryTool"),e_t=o((e,t,r)=>Xbt({query:e,description:`Execute datasource query: ${e.name}`,sourceType:"DATASOURCE_QUERY",sourceLabel:t||"Datasource",sourceIconType:r,namePrefix:"ds"}),"createDatasourceQueryTool")});var t4r,r4r,r_t,n_t=y(()=>{"use strict";Jle();t_t();t4r=o(e=>{if(!e||typeof e!="object"||!("error"in e))return;let{error:t}=e;if(!(t==null||t===!1))return t instanceof Error?t.message||"Tool execution failed":String(t)},"getToolFailure"),r4r=o(e=>{let t=e.tool.execute;if(!t)return e.tool;let r=o(async(...n)=>{let i=await t(...n),s=t4r(i);if(s)throw new Error(s);return i},"wrappedExecute");return{...e.tool,execute:r}},"wrapTool"),r_t=o(e=>Object.fromEntries(e.map(t=>[t.name,r4r(t)])),"toToolSet")});var i_t,V$,n4r,Zle,o_t=y(()=>{"use strict";P();i_t=require("ai"),V$=require("zod"),n4r=V$.z.object({query:V$.z.string().describe("The search query to find relevant information"),num_results:V$.z.number().optional().default(10).describe("Number of results to return")}),Zle=o(e=>({name:"search_web_search",sourceType:"SEARCH",sourceLabel:"Exa",description:"Search the web using Exa",tool:(0,i_t.tool)({description:"Search the web using Exa",inputSchema:n4r,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 uT,s_t,i4r,efe,a_t=y(()=>{"use strict";P();uT=require("zod"),s_t=require("ai"),i4r=uT.z.object({objective:uT.z.string().describe("Natural language description of what to search for"),search_queries:uT.z.array(uT.z.string()).describe("Array of search query strings"),max_results:uT.z.number().optional().default(10).describe("Maximum number of results to return")}),efe=o(e=>({name:"search_web_search",description:"Search the web using Parallel AI",sourceType:"SEARCH",sourceLabel:"Parallel Search",tool:(0,s_t.tool)({description:"Search the web using Parallel AI",inputSchema:i4r,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 u_t=y(()=>{"use strict";o_t();a_t()});function l_t(e){return{name:e.name,readableName:e.readableName,description:e.description,sourceType:e.sourceType,sourceLabel:e.sourceLabel,sourceIconType:e.sourceIconType}}async function tfe(e){let[t,r,n,i,s]=await Promise.all([T.queries.fetch(),T.datasources.fetch(),e?T.ai.configs.find(e):Promise.resolve(void 0),T.tables.getAllTables(),T.automations.fetch()]),a=n?.webSearchConfig,u=new Map(r.filter(m=>!!m._id).map(m=>[m._id,m])),c=Object.fromEntries(r.filter(m=>!!m._id).map(m=>[m._id,m.name||"Datasource"])),l=Object.fromEntries(r.filter(m=>!!m._id).map(m=>[m._id,m.source||"CUSTOM"])),f=t.flatMap(m=>{let h=u.get(m.datasourceId);return!h||h.source!=="REST"?[]:[Zbt(m,h.name||"API")]}),d=t.flatMap(m=>{let h=u.get(m.datasourceId);return!h||h.source==="REST"?[]:[e_t(m,h.name||"Datasource",h.source||"CUSTOM")]}),p=[...zbt(i,c,l,s),...f,...d];return a?.apiKey&&(a.provider==="exa"?p.push(Zle(a.apiKey)):a.provider==="parallel"&&p.push(efe(a.apiKey))),p}async function s4r(e){return(await tfe(e)).filter(r=>!c_t(r)).map(l_t)}async function a4r(e,t={}){let{baseSystemPrompt:r,includeGoal:n=!0}=t,i=await tfe(e.aiconfig),s=new Set(e.enabledTools||[]),a=u4r(i.filter(c=>s.has(c.name)&&!c_t(c)),i);return{systemPrompt:Rt.composeAutomationAgentSystemPrompt({baseSystemPrompt:r,goal:n?e.goal:void 0,promptInstructions:e.promptInstructions,includeGoal:n}),tools:r_t(a)}}function u4r(e,t){let r=new Set(e.map(i=>i.name)),n=new Map(t.map(i=>[i.name,i]));if(e.some(i=>i.sourceType==="EXTERNAL_TABLE"||i.sourceType==="INTERNAL_TABLE"))for(let i of["get_table","list_tables"]){if(r.has(i))continue;let s=n.get(i);s&&(e.push(s),r.add(s.name))}if(e.some(i=>i.sourceType==="AUTOMATION"))for(let i of["get_automation","list_automations"]){if(r.has(i))continue;let s=n.get(i);s&&(e.push(s),r.add(s.name))}return e}function Ble(e){let t=[];for(let r of e)if(!(r.role!=="assistant"||!r.parts))for(let n of r.parts)(0,G$.isToolUIPart)(n)&&!c4r.has(n.state)&&t.push({toolName:(0,G$.getToolName)(n),toolCallId:n.toolCallId,state:n.state});return t}function $0(e,t,r){for(let n of t)n.toolCallId&&e.add(n.toolCallId);for(let n of r)n.toolCallId&&e.delete(n.toolCallId)}function V0(e){let t=e.map(r=>r.toolName).join(", ");return`The AI model failed to complete tool execution${t?` for: ${t}`:""}. This may be due to a compatibility issue with the selected model. Please try a different model or try again.`}var G$,o4r,c_t,c4r,qle=y(()=>{"use strict";P();tt();Jle();G$=require("ai");n_t();le();u_t();o4r=new Set(["list_tables","get_table","list_automations","get_automation"]),c_t=o(e=>o4r.has(e.name),"isHelperTool");o(l_t,"toToolMetadata");o(tfe,"getAvailableTools");o(s4r,"getAvailableToolsMetadata");o(a4r,"buildPromptAndTools");o(u4r,"addHelperTools");c4r=new Set(["output-available","output-error","output-denied"]);o(Ble,"findIncompleteToolCalls");o($0,"updatePendingToolCalls");o(V0,"formatIncompleteToolCallError")});var sfe={};G(sfe,{enqueueAgentFileIngestion:()=>ofe,getQueue:()=>ife,init:()=>f_t});function ife(){return rfe||(rfe=new In.BudibaseQueue(In.JobQueue.RAG_INGESTION,{maxStalledCount:3,jobOptions:{attempts:5,backoff:{type:"exponential",delay:f4r},timeout:d4r,removeOnComplete:!0,removeOnFail:1e3},jobTags:e=>({workspaceId:e.workspaceId,agentId:e.agentId,fileId:e.fileId})})),rfe}function f_t(e=l4r){if(nfe)return Promise.resolve();try{return nfe=!0,ife().process(e,async t=>{let{workspaceId:r,agentId:n,fileId:i,objectStoreKey:s}=t.data;await I.doInWorkspaceContext(r,async()=>{let a,u;try{a=await zc.getOrThrow(n)}catch(c){if(c?.status===404){await t.discard();return}throw c}try{u=await zc.getAgentFileOrThrow(i)}catch(c){if(c?.status===404){await t.discard();return}throw c}if(!u.objectStoreKey&&s&&(u.objectStoreKey=s),!u.objectStoreKey)throw new Error("Agent file does not have an object store key");try{let c=await p4r(u.objectStoreKey),l=await tue(a,u,c);u.status="ready",u.chunkCount=l.total,u.processedAt=new Date().toISOString(),u.errorMessage=void 0,await zc.updateAgentFile(u)}catch(c){throw await m4r(u,t,c),c}})})}catch{console.error("Error initialising the RAG ingestion queue"),nfe=!1}}async function ofe(e){return f_t(),await ife().add(e,{jobId:e.fileId})}var l4r,f4r,d4r,rfe,nfe,p4r,m4r,afe=y(()=>{"use strict";F();P();gn();hj();Fb();l4r=2,f4r=Ne.Duration.fromSeconds(10).toMs(),d4r=Ne.Duration.fromMinutes(10).toMs(),nfe=!1;o(ife,"getQueue");o(f_t,"init");o(ofe,"enqueueAgentFileIngestion");p4r=o(async e=>{let{stream:t}=await ce.getReadStream(wt.APPS,e),r=[];for await(let n of t)r.push(new Uint8Array(n));return Buffer.concat(r)},"loadFileBuffer"),m4r=o(async(e,t,r)=>{let n=t.opts.attempts||1;t.attemptsMade+1>=n&&(e.status="failed",e.errorMessage=r?.message||"Failed to process uploaded file",e.chunkCount=0,await zc.updateAgentFile(e))},"handleProcessingError")});var h4r,g4r,d_t=y(()=>{"use strict";F();P();gn();afe();gj();h4r=o((e,t,r,n)=>`${e}/ai/agents/${t}/files/${r}/${n}`,"buildAgentFileObjectStoreKey"),g4r=o(async e=>{let t=I.getOrThrowWorkspaceId(),r=et.generateAgentFileID(e.agentId),n=h4r(t,e.agentId,r,e.filename);try{await ce.upload({bucket:wt.APPS,filename:n,body:e.buffer,type:e.mimetype});let i=await nue({id:r,agentId:e.agentId,filename:e.filename,mimetype:e.mimetype,objectStoreKey:n,size:e.size??e.buffer.byteLength,uploadedBy:e.uploadedBy});try{return await ofe({workspaceId:t,agentId:e.agentId,fileId:i._id,objectStoreKey:n}),i}catch(s){throw i.status="failed",i.errorMessage=s?.message||"Failed to process uploaded file",i.chunkCount=0,await iue(i),s}}catch(i){throw await ce.deleteFile(wt.APPS,n).catch(()=>{}),i}},"uploadAgentFile")});var zc={};G(zc,{buildPromptAndTools:()=>a4r,create:()=>fdt,createAgentFile:()=>nue,duplicate:()=>uWr,fetch:()=>ldt,findIncompleteToolCalls:()=>Ble,formatIncompleteToolCallError:()=>V0,getAgentFileOrThrow:()=>sdt,getAvailableTools:()=>tfe,getAvailableToolsMetadata:()=>s4r,getOrThrow:()=>bj,listAgentFiles:()=>oue,remove:()=>lWr,removeAgentFile:()=>sue,toToolMetadata:()=>l_t,update:()=>cWr,updateAgentFile:()=>iue,updatePendingToolCalls:()=>$0,uploadAgentFile:()=>g4r});var H$=y(()=>{"use strict";ddt();qle();gj();d_t()});var Y$={};G(Y$,{create:()=>cfe,getOrThrow:()=>Q$,getSingle:()=>K$,update:()=>z$});async function K$(){let r=(await I.getWorkspaceDB().allDocs(et.getDocParams("chatapp",void 0,{include_docs:!0,limit:1}))).rows[0]?.doc;return r?ufe(r):void 0}async function Q$(e){if(!e)throw new j("chatAppId is required",400);let r=await I.getWorkspaceDB().tryGet(e);if(!r)throw new j("Chat App not found",404);return ufe(r)}async function cfe(e){let t=I.getWorkspaceDB();if(await K$())throw new j("Chat App already exists for this workspace",400);let n=p_t(e.agents===void 0?void 0:e.agents),i=new Date().toISOString(),s={_id:et.generateChatAppID(),createdAt:i,updatedAt:i,...e,agents:n??[]},{rev:a}=await t.put(s);return{...s,_rev:a}}async function z$(e){if(!e._id||!e._rev)throw new j("_id and _rev are required",400);let t=I.getWorkspaceDB(),r=await t.tryGet(e._id);if(!r)throw new j("Chat App not found",404);let n=p_t(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,ufe(s)}var ufe,y4r,p_t,lfe=y(()=>{"use strict";F();P();ufe=o(e=>({...e,live:e.live??!1,agents:e.agents??[]}),"withDefaults"),y4r=o(e=>{if(e!==void 0){if(!Array.isArray(e))throw new j("conversationStarters must contain prompt entries",400);if(e.length>3)throw new j("conversationStarters may contain at most 3 starters",400);return e.map(t=>{if(!t||typeof t!="object")throw new j("conversationStarters must contain prompt entries",400);if(typeof t.prompt!="string")throw new j("conversationStarters must contain prompt entries",400);return{prompt:t.prompt}})}},"normalizeConversationStarters"),p_t=o(e=>{if(e===void 0)return;if(!Array.isArray(e))throw new j("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 j("agents must contain valid agentId entries",400);return e.map(r=>({agentId:r.agentId,isEnabled:r.isEnabled===!0,isDefault:r.isDefault===!0,conversationStarters:y4r(r.conversationStarters)}))},"normalizeAgents");o(K$,"getSingle");o(Q$,"getOrThrow");o(cfe,"create");o(z$,"update")});var m_t,h_t,J$,X$,ffe=y(()=>{"use strict";F();lfe();m_t=o(async(e,t)=>{let r=e.agents||[],n=r.find(s=>s.agentId===t);if(n?.isEnabled)return e;let i=n?r.map(s=>s.agentId===t?{...s,isEnabled:!0}:s):[...r,{agentId:t,isEnabled:!0,isDefault:!1}];return await z$({...e,agents:i})},"enableAgentOnChatApp"),h_t=o(async({chatAppId:e,agentId:t})=>{let r=await Q$(e),n=r.agents||[],i=n.find(a=>a.agentId===t);if(!i||!i.isEnabled)return r;let s=n.map(a=>a.agentId===t?{...a,isEnabled:!1}:a);return await z$({...r,agents:s})},"disableAgentOnChatApp"),J$=o(async({agentId:e,chatAppId:t})=>{if(t){let n=await Q$(t);return await m_t(n,e)}let r=await K$();return r?await m_t(r,e):await cfe({agents:[{agentId:e,isEnabled:!0,isDefault:!1}]})},"resolveChatAppForAgent"),X$=o(async({provider:e,chatAppId:t,agentId:r,useProdWorkspaceId:n=!1})=>{let i=await Dr.getPlatformUrl({tenantAware:!0}),s=I.getWorkspaceId();if(!s)throw new j("workspaceId is required",400);let a=n?U.getProdWorkspaceID(s):s;return`${i.replace(/\/$/,"")}/api/webhooks/${e}/${a}/${t}/${r}`},"buildWebhookUrl")});var pfe={};G(pfe,{DISCORD_ASK_COMMAND:()=>_4r,DISCORD_NEW_COMMAND:()=>w4r,buildDiscordInviteUrl:()=>A4r,buildDiscordWebhookUrl:()=>T4r,disableAgentOnChatApp:()=>v4r,getDiscordPublicKeyForRoute:()=>P4r,isDiscordTimestampFresh:()=>D4r,resolveChatAppForAgent:()=>S4r,syncApplicationCommands:()=>O4r,validateDiscordIntegration:()=>E4r,verifyDiscordSignature:()=>x4r});var dfe,__t,y_t,b4r,_4r,w4r,E4r,v4r,S4r,T4r,A4r,R4r,I4r,b_t,O4r,x4r,C4r,D4r,P4r,w_t=y(()=>{"use strict";dfe=q(require("crypto")),__t=q(require("node-fetch"));F();_e();H$();ffe();y_t="https://discord.com/api/v10",b4r=300,_4r=gi.ASK,w4r=gi.NEW,E4r=o(e=>{let t=e.discordIntegration;if(!t)throw new j("Discord integration is not configured for this agent",400);let r=t.applicationId?.trim(),n=t.publicKey?.trim(),i=t.botToken?.trim(),s=t.guildId?.trim();if(!r||!n||!i||!s)throw new j("Discord integration requires applicationId, publicKey, botToken, and guildId",400);return{applicationId:r,botToken:i,guildId:s,chatAppId:t.chatAppId?.trim()||void 0}},"validateDiscordIntegration"),v4r=o(async(e,t)=>await h_t({chatAppId:e,agentId:t}),"disableAgentOnChatApp"),S4r=o(async(e,t)=>await J$({agentId:e,chatAppId:t}),"resolveChatAppForAgent"),T4r=o(async(e,t)=>await X$({provider:"discord",chatAppId:e,agentId:t,useProdWorkspaceId:!0}),"buildDiscordWebhookUrl"),A4r=o(e=>`https://discord.com/oauth2/authorize?client_id=${e}&scope=bot+applications.commands&permissions=0`,"buildDiscordInviteUrl"),R4r=o(()=>[{name:gi.ASK,description:"Ask the configured Budibase agent",contexts:[1],options:[{type:3,name:"message",description:"Message to send to the agent",required:!0}]},{name:gi.NEW,description:"Start a new conversation with the configured agent",contexts:[1],options:[{type:3,name:"message",description:"Optional opening message",required:!1}]}],"buildGlobalCommandPayload"),I4r=o(()=>[{name:gi.ASK,description:"Ask the configured Budibase agent",options:[{type:3,name:"message",description:"Message to send to the agent",required:!0}]},{name:gi.NEW,description:"Start a new conversation with the configured agent",options:[{type:3,name:"message",description:"Optional opening message",required:!1}]}],"buildGuildCommandPayload"),b_t=o(async({url:e,botToken:t,payload:r})=>{let n=await(0,__t.default)(e,{method:"PUT",headers:{Authorization:`Bot ${t}`,"Content-Type":"application/json"},body:JSON.stringify(r)});if(!n.ok){let i=await n.text();throw new j(`Discord command sync failed (${n.status}): ${i||n.statusText}`,400)}},"syncCommandsOnEndpoint"),O4r=o(async(e,t,r)=>{await b_t({url:`${y_t}/applications/${e}/commands`,botToken:t,payload:R4r()}),await b_t({url:`${y_t}/applications/${e}/guilds/${r}/commands`,botToken:t,payload:I4r()})},"syncApplicationCommands"),x4r=o(({publicKey:e,signature:t,timestamp:r,rawBody:n})=>{try{let i="302a300506032b6570032100",s=dfe.default.createPublicKey({key:Buffer.from(`${i}${e}`,"hex"),format:"der",type:"spki"});return dfe.default.verify(null,new Uint8Array(Buffer.from(`${r}${n}`)),s,new Uint8Array(Buffer.from(t,"hex")))}catch{return!1}},"verifyDiscordSignature"),C4r=o(()=>{let e=Number(process.env.DISCORD_SIGNATURE_MAX_AGE_SECONDS);return(Number.isFinite(e)&&e>0?e:b4r)*1e3},"getDiscordSignatureMaxAgeMs"),D4r=o((e,t=Date.now())=>{let r=Number(e);if(!Number.isFinite(r))return!1;let n=r*1e3;return Math.abs(t-n)<=C4r()},"isDiscordTimestampFresh"),P4r=o(async({instance:e,agentId:t})=>{let r=U.getProdWorkspaceID(e);return await I.doInWorkspaceContext(r,async()=>{let i=(await bj(t)).discordIntegration?.publicKey?.trim();if(!i)throw new j("Discord public key is not configured for this agent",400);return i})},"getDiscordPublicKeyForRoute")});var mfe={};G(mfe,{buildMSTeamsWebhookUrl:()=>L4r,resolveChatAppForAgent:()=>N4r,validateMSTeamsIntegration:()=>k4r});var k4r,N4r,L4r,E_t=y(()=>{"use strict";F();ffe();k4r=o(e=>{let t=e.MSTeamsIntegration;if(!t)throw new j("Teams integration is not configured for this agent",400);let r=t.appId?.trim(),n=t.appPassword?.trim();if(!r||!n)throw new j("Teams integration requires appId (client ID) and appPassword (client secret value)",400);return{appId:r,appPassword:n,tenantId:t.tenantId?.trim()||void 0,chatAppId:t.chatAppId?.trim()||void 0}},"validateMSTeamsIntegration"),N4r=o(async(e,t)=>await J$({agentId:e,chatAppId:t}),"resolveChatAppForAgent"),L4r=o(async(e,t)=>await X$({provider:"ms-teams",chatAppId:e,agentId:t,useProdWorkspaceId:!0}),"buildMSTeamsWebhookUrl")});var hfe={};G(hfe,{MSTeams:()=>mfe,discord:()=>pfe});var v_t=y(()=>{"use strict";w_t();E_t()});async function M4r(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 T.tables.getAllInternalTables()).map(i=>i.name);for(let i of e){let s=be.getSequentialName(n,i.name,{separator:" "}),a=await T.tables.create({...i,name:s,schema:{},primaryDisplay:void 0,sourceType:"internal",sourceId:no,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 T.tables.getTable(r[i.name]),a={...s.schema,...i.schema};for(let u of Object.keys(a))a[u].aiGenerated=!0;await T.tables.update({...s,schema:a,primaryDisplay:i.primaryDisplay})}}catch(n){console.log("Error generating tables, cleaning up created tables",n);let i=await T.tables.getTables(t.map(s=>s.id));throw await Promise.all(i.map(T.tables.internal.destroy)),n}return t}var S_t=y(()=>{"use strict";P();le();_e();o(M4r,"generateTables")});async function U4r(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 F4r(f,l);let d=u._id,p=await T.rows.save(d,{...f,...c,_id:void 0},t);n[d]??={},n[d][f._id]=p.row._id;let m=Object.keys(c).reduce((h,g)=>(f[g]&&(h[g]={tableId:u.schema[g].tableId,rowId:f[g]}),h),{});Object.keys(m).length&&i.push({tableId:p.table._id,rowId:p.row._id,data:m})}))}await Promise.all(s),await Promise.all(i.map(async a=>{let u=await T.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 T.rows.save(a.tableId,{...u,...c},t,{updateAIColumns:!1})}))}async function F4r(e,t){function r(n){return typeof n=="object"?Dct(n):Cct(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])}var T_t=y(()=>{"use strict";P();le();bs();o(U4r,"generateRows");o(F4r,"processAttachments")});var gfe={};G(gfe,{buildLiteLLMParams:()=>cj,generateRows:()=>U4r,generateTables:()=>M4r});var A_t=y(()=>{"use strict";S_t();T_t();Fae()});var Kb={};G(Kb,{deleteAgentFileChunks:()=>rue,ingestAgentFile:()=>tue,queue:()=>sfe,retrieveContextForAgent:()=>mj});var yfe=y(()=>{"use strict";hj();afe()});async function B4r(){return(await I.getWorkspaceDB().allDocs(et.getDocParams("vectordb",void 0,{include_docs:!0}))).rows.map(r=>r.doc).filter(r=>!!r)}async function q4r(e){let r=await I.getWorkspaceDB().tryGet(e);if(!(!r||r._deleted))return r}async function W4r(e){let t=I.getWorkspaceDB(),r={_id:et.generateVectorDbID(),name:e.name,provider:e.provider,host:e.host,port:e.port,database:e.database,user:e.user,password:e.password},{rev:n}=await t.put(r);return r._rev=n,r}async function j4r(e){if(!e._id||!e._rev)throw new j("id and rev required",400);let t=I.getWorkspaceDB(),r=await t.tryGet(e._id);if(!r)throw new j("Vector store config not found",404);let n=e.password===Pn?r.password:e.password,i={...r,...e,password:n},{rev:s}=await t.put(i);return i._rev=s,i}async function $4r(e){let t=I.getWorkspaceDB(),r=await t.get(e);await t.remove(r)}var R_t=y(()=>{"use strict";F();P();o(B4r,"fetch");o(q4r,"find");o(W4r,"create");o(j4r,"update");o($4r,"remove")});var bfe={};G(bfe,{create:()=>W4r,createVectorDb:()=>FD,fetch:()=>B4r,find:()=>q4r,remove:()=>$4r,update:()=>j4r});var I_t=y(()=>{"use strict";R_t();Mae()});var _fe={};G(_fe,{agents:()=>zc,chatApps:()=>Y$,configs:()=>vS,deployments:()=>hfe,helpers:()=>gfe,llm:()=>Xae,rag:()=>Kb,vectorDb:()=>bfe});var Fb=y(()=>{"use strict";H$();lfe();Wae();v_t();A_t();yfe();I_t();WD()});var V4r,O_t,G4r,x_t,wfe,Efe,vfe=y(()=>{"use strict";F();P();Ie();bs();V4r=o(e=>Buffer.from(e,"utf8").toString("hex"),"encodeMailbox"),O_t=o((e,t)=>`${e}:${V4r(t)}`,"getMailboxEntityId"),G4r=o((e,t)=>gh("automationEmailState",O_t(e,t)),"getMailboxMetadataId"),x_t=o(async(e,t)=>(await I.getWorkspaceDB().tryGet(G4r(e,t)))?.lastSeenUid,"getLastSeenUid"),wfe=o(async(e,t,r)=>{await SD("automationEmailState",O_t(e,t),n=>({...n,lastSeenUid:r}))},"setLastSeenUid"),Efe=o(async e=>{let t=I.getWorkspaceDB(),r=gh("automationEmailState",`${e}:`),n=`${r}${wD}`,i=await t.allDocs({startkey:r,endkey:n,include_docs:!1});if(!i.rows.length)return;let s=i.rows.map(a=>{let u=a.value?._rev;if(u)return{_id:a.id,_rev:u,_deleted:!0}}).filter(a=>!!a);s.length&&await t.bulkDocs(s)},"deleteAutomationMailboxState")});var Tfe={};G(Tfe,{create:()=>Y4r,fetch:()=>K4r,find:()=>z4r,get:()=>Q4r,remove:()=>X4r,update:()=>J4r});function Qb(){return I.getWorkspaceDB()}function k_t(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}async function H4r(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 ue.automation.stepCreated(t,a);let s=n(e,t);for(let a of s)await ue.automation.stepDeleted(t,a)}async function K4r(){return(await Qb().allDocs(Nu(null,{include_docs:!0}))).rows.filter(n=>!!n.doc).map(n=>n.doc).map(z0).map(Y0)}async function Q4r(e){let r=await Qb().get(e);return Y0(z0(r))}async function z4r(e,t){return(await Qb().getMultiple(e,t)).map(z0).map(Y0)}async function Y4r(e){e=z0(e);let t=Qb();e._id||(e._id=act()),e.type="automation",e=N_t(e),e=k_t(e),e=await Sfe({newAuto:e});let r=await t.put(e);await ue.automation.created(e);for(let n of e.definition.steps)await ue.automation.stepCreated(e,n);return e._rev=r.rev,e._id=r.id,Y0(e)}async function J4r(e){if(e=z0(e),!e._id||!e._rev)throw new j("_id or _rev fields missing",400);let t=Qb(),r=await t.get(e._id);Z4r(e,r),e=N_t(e,r),e=k_t(e),e=await Sfe({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 ue.automation.triggerUpdated(e),await dS("automationTestInput",e._id),await Efe(e._id)),await H4r(r,e),Y0({...e,_rev:n.rev,_id:n.id})}async function X4r(e,t){let r=Qb(),n=await r.get(e);await Sfe({oldAuto:n}),await dS("automationTestInput",e),await dS("automationTestHistory",e),await Efe(e);let i=await r.remove(e,t);return await ue.automation.deleted(n),i}async function Sfe({oldAuto:e,newAuto:t}){let r=at.triggers.definitions.WEBHOOK.stepId,n=I.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 Qb().get(i.webhookId);s&&(delete s.webhookId,s.inputs={}),await yf.webhook.destroy(l._id,l._rev)}catch{}if((!u(e)||a)&&u(t)){let l=(await yf.webhook.save(yf.webhook.newDoc("Automation webhook","automation",t._id)))._id;s.webhookId=l;let f=U.getProdWorkspaceID(n);s.inputs={schemaUrl:`api/webhooks/schema/${n}/${l}`,triggerUrl:`api/webhooks/trigger/${f}/${l}`}}return t}function Z4r(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 j(`Field ${u} is readonly and it cannot be modified`,400)})}function z0(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}function N_t(e,t){let r=e.definition?.trigger;if(!r||!Ja(r)||!r.inputs||!e3r(r.inputs.password))return e;if(!t||!Ja(t.definition?.trigger))throw new j("IMAP password is required",400);let n=t.definition.trigger.inputs?.password;if(!n)throw new j("IMAP password is required",400);let i=(0,D_t.default)(e),s=i.definition?.trigger;if(!Ja(s)||!s.inputs)throw new j("IMAP password is required",400);return s.inputs.password=n,i}function Y0(e){let t=e.definition?.trigger;return Ja(t)&&t.inputs?.password&&(t.inputs.password=P_t),e}function e3r(e){return e===Pn||e===P_t}var D_t,P_t,L_t=y(()=>{"use strict";F();_e();P();Z$();D_t=q(require("lodash/cloneDeep"));Ie();bs();vfe();P_t="********";o(Qb,"getDb");o(k_t,"cleanAutomationInputs");o(H4r,"handleStepEvents");o(K4r,"fetch");o(Q4r,"get");o(z4r,"find");o(Y4r,"create");o(J4r,"update");o(X4r,"remove");o(Sfe,"checkForWebhooks");o(Z4r,"guardInvalidUpdatesAndThrow");o(z0,"trimUnexpectedObjectFields");o(N_t,"hydrateAutomationSecrets");o(Y0,"maskAutomationSecrets");o(e3r,"isMaskedPassword")});var Afe={};G(Afe,{destroy:()=>n3r,newDoc:()=>t3r,save:()=>r3r});function M_t(e){return e.startsWith(U.DocumentType.WEBHOOK)}function t3r(e,t,r){return{live:!0,name:e,action:{type:t,target:r}}}async function r3r(e){let t=I.getWorkspaceDB();e._id&&M_t(e._id)?await t.get(e._id):e._id=mct();let r=await t.put(e);return e._rev=r.rev,e}async function n3r(e,t){let r=I.getWorkspaceDB();if(!e||!M_t(e))throw new Error("Provided webhook ID is not valid.");return await r.remove(e,t)}var U_t=y(()=>{"use strict";F();Ie();o(M_t,"isWebhookID");o(t3r,"newDoc");o(r3r,"save");o(n3r,"destroy")});var Rfe={};G(Rfe,{checkForCollectStep:()=>G4});var F_t=y(()=>{"use strict";K4()});var Ife={};G(Ife,{trigger:()=>i3r});async function i3r(e,t={},r){let i=await I.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(T.automations.utils.checkForCollectStep(i)&&await qn.isSyncAutomationsEnabled()){let u=await Qo(i,{fields:t,timeout:r?r*1e3:H.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=I.getWorkspaceId();return await Qo(i,{fields:t,appId:u}),{message:`Automation ${i._id} has been triggered.`,automation:i}}}var B_t=y(()=>{"use strict";F();tt();P();le();up();$e();o(i3r,"trigger")});var yf,Z$=y(()=>{"use strict";L_t();U_t();F_t();B_t();yf={...Tfe,webhook:Afe,utils:Rfe,execution:Ife}});var cT,eV,tV,Ofe=y(()=>{"use strict";cT="db.txt",eV="global.txt",tV="attachments"});var Cfe={};G(Cfe,{exportApp:()=>V_t,exportDB:()=>$_t,streamExportApp:()=>u3r});async function s3r(e,t){let r=`${(0,j_t.v4)()}.tar.gz`,n=(0,qh.join)(Wo(),r);return await W_t.create({gzip:!0,file:n,noDirRecurse:!1,cwd:e},t),n}async function $_t(e,t={}){let r={filter:t?.filter,batch_size:1e3,batch_limit:5,style:"main_only"};return U.doWithDB(e,async n=>{if(t?.exportPath){let i=t?.exportPath,s=xfe.default.createWriteStream(i);return await n.dump(s,r),i}else{let i=new o3r,s="";return i.on("data",a=>{s+=a.toString()}),await n.dump(i,r),s}})}function a3r(e){let t=[mh,ect,rct];return e&&t.push(tct),r=>!t.map(n=>r._id.includes(n)).reduce((n,i)=>n||i)}async function V_t(e,t){return await q_t.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=U.getProdWorkspaceID(e),i=`${n}/`,s=[/\/\..+/];t?.excludeRows&&s.push(/\/attachments\/.*/);let a=await ce.retrieveDirectory(wt.APPS,i,s);r.addTags({prodAppId:n,tmpPath:a});let u=(0,qh.join)(a,i);if(xfe.default.existsSync(u)){let l=await lp.default.readdir(u);for(let f of l){let d=(0,qh.join)(u,f);await lp.default.rename(d,(0,qh.join)(u,"..",f))}await lp.default.rmdir(u)}let c=(0,qh.join)(a,cT);if(await $_t(e,{filter:a3r(t?.excludeRows),exportPath:c}),t?.encryptPassword){let l=o(async(f,d="")=>{for(let p of await lp.default.readdir(f)){let m=(0,qh.join)(f,p),h=d?(0,qh.join)(d,p):p;if(p!==tV){let g=await lp.default.lstat(m);g.isFile()?(await po.encryptFile({dir:f,filename:p},t.encryptPassword),await lp.default.rm(m)):g.isDirectory()&&await l(m,h)}}},"processDirectory");await l(a)}if(t?.tar){let l=await s3r(a,await lp.default.readdir(a));return await lp.default.rm(a,{recursive:!0,force:!0}),l}else return a})}async function u3r({appId:e,excludeRows:t,encryptPassword:r}){let n=await V_t(e,{excludeRows:t,tar:!0,encryptPassword:r});return dZe(n)}var q_t,xfe,lp,qh,W_t,j_t,o3r,G_t=y(()=>{"use strict";F();q_t=require("dd-trace"),xfe=q(require("fs")),lp=q(require("fs/promises")),qh=require("path"),W_t=q(require("tar")),j_t=require("uuid");gn();Ie();ib();li();Ofe();o3r=require("memorystream");o(s3r,"tarFilesToTmp");o($_t,"exportDB");o(a3r,"defineFilter");o(V_t,"exportApp");o(u3r,"streamExportApp")});var Dfe={};G(Dfe,{getGlobalDBFile:()=>d3r,getListOfAppsInMulti:()=>p3r,importApp:()=>m3r,untarFile:()=>Y_t,updateAttachmentColumns:()=>z_t});function H_t(e,t){let r=t.key?.split("/")||[];r.shift(),r.unshift(e);let n=r.join("/");return{...t,key:n,url:""}}async function z_t(e,t){let r=await T.tables.getAllInternalTables(t),n=[];for(let i of r){let{rows:s,columns:a}=await T.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=>H_t(e,f)):(l==="attachment_single"||l==="signature_single")&&u[c]&&(u[c]=H_t(e,u[c]))}return u}))}await t.bulkDocs(n)}async function c3r(e,t){let r=(await t.allDocs(Nu(null,{include_docs:!0}))).rows.map(s=>s.doc),n=U.getDevWorkspaceID(e),i=[];for(let s of r){let a=s.appId,u=U.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)}async function l3r(e){if(e.file&&e.file.type!=="text/plain")throw new Error("Cannot import a non-text based file.");if(e.file)return lT.default.createReadStream(e.file.path);if(e.key){let[t,r]=e.key.split("/"),n=await Cq(t,r);return lT.default.createReadStream((0,Wh.join)(n,r,"db","dump.txt"))}else throw new Error("Either file or key is required.")}async function Y_t(e){let t=(0,Wh.join)(Wo(),(0,Q_t.v4)());return await bf.default.mkdir(t),await K_t.extract({cwd:t,file:e.path}),t}async function f3r(e,t){try{let r=o(async n=>{for(let i of await bf.default.readdir(n)){let s=(0,Wh.join)(n,i);if(!s.endsWith(tV)){let a=await bf.default.lstat(s);if(a.isFile()&&s.endsWith(".enc")){let u=s.replace(/\.enc$/,"");await po.decryptFile(s,u,t),await bf.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}}function d3r(e){return lT.default.readFileSync((0,Wh.join)(e,eV),"utf8")}function p3r(e){return lT.default.readdirSync(e).filter(t=>t!==eV)}async function m3r(e,t,r,n={updateAttachmentColumns:!0}){let i=U.getProdWorkspaceID(e),s,a=r.file&&r?.file?.type?.endsWith("gzip"),u=r.file&&(await bf.default.lstat(r.file.path)).isDirectory(),c;if(r.file&&(a||u)){c=a?await Y_t(r.file):r.file.path,a&&r.file.password&&await f3r(c,r.file.password);let f=await bf.default.readdir(c);if(!!f.find(h=>h.endsWith(".enc")))throw new Error("Files are encrypted but no password has been supplied.");if(!!f.find(h=>h==="plugin.min.js"))throw new Error("Supplied file is a plugin - cannot import as app.");if(!f.find(h=>h===cT))throw new Error("App export does not appear to be valid - no DB file found.");{let h=[],g=[eV,cT];for(let E of f){let v=(0,Wh.join)(c,E);g.includes(E)||(E=(0,Wh.join)(i,E),(await bf.default.lstat(v)).isDirectory()?h.push(ce.uploadDirectory(wt.APPS,v,E)):h.push(ce.upload({bucket:wt.APPS,path:v,filename:E})))}await Promise.all(h);let b=await bf.default.readdir(c,{recursive:!0}),w=[];await rt.parallelForeach(ce.listAllObjects(ce.ObjectStoreBuckets.APPS,i),async E=>{E.Key&&!b.includes(E.Key.replace(new RegExp(`^${i}/`),""))&&w.push(E.Key)},5),w.length&&await ce.deleteFiles(ce.ObjectStoreBuckets.APPS,w)}s=lT.default.createReadStream((0,Wh.join)(c,cT))}else s=await l3r(r);let{ok:l}=await t.load(s);if(!l)throw"Error loading database dump from template.";return n.updateAttachmentColumns&&await z_t(i,t),await c3r(i,t),c&&await bf.default.rm(c,{recursive:!0,force:!0}),l}var lT,bf,Wh,K_t,Q_t,J_t=y(()=>{"use strict";F();_e();P();lT=q(require("fs")),bf=q(require("fs/promises")),Wh=require("path"),K_t=q(require("tar")),Q_t=require("uuid");le();gn();Ie();ib();li();Ofe();o(H_t,"rewriteAttachmentUrl");o(z_t,"updateAttachmentColumns");o(c3r,"updateAutomations");o(l3r,"getTemplateStream");o(Y_t,"untarFile");o(f3r,"decryptFiles");o(d3r,"getGlobalDBFile");o(p3r,"getListOfAppsInMulti");o(m3r,"importApp")});var Pfe={};G(Pfe,{calculateAutomationCount:()=>Z_t,calculateBackupStats:()=>h3r,calculateDatasourceCount:()=>X_t,calculateScreenCount:()=>ewt});async function rV(e,t,r){if(r)return t(r);{let n=U.getDevWorkspaceID(e);return I.doInWorkspaceContext(n,()=>{let i=I.getWorkspaceDB();return t(i)})}}async function X_t(e,t){return rV(e,async r=>{let n=await r.allDocs(ED()),i=await r.allDocs(Jd());return n.rows.length+i.rows.length},t)}async function Z_t(e,t){return rV(e,async r=>(await r.allDocs(Nu())).rows.length,t)}async function ewt(e,t){return rV(e,async r=>(await T.screens.fetch(r)).length,t)}async function h3r(e){return rV(e,async t=>{let r=[];r.push(X_t(e,t)),r.push(Z_t(e,t)),r.push(ewt(e,t));let n=await Promise.all(r);return{datasources:n[0],automations:n[1],screens:n[2]}})}var twt=y(()=>{"use strict";F();le();Ie();o(rV,"runInContext");o(X_t,"calculateDatasourceCount");o(Z_t,"calculateAutomationCount");o(ewt,"calculateScreenCount");o(h3r,"calculateBackupStats")});var kfe={};G(kfe,{clearErrors:()=>g3r});async function g3r(e){let t=I.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 Ce.workspace.invalidateWorkspaceMetadata(r.appId,r)}var rwt=y(()=>{"use strict";F();P();o(g3r,"clearErrors")});var nV,Nfe=y(()=>{"use strict";G_t();J_t();twt();rwt();nV={...Cfe,...Dfe,...Pfe,...kfe}});function y3r(e){if(ts(e))return"table";if(Gn(e))return"view";if(Y_(e))return"datasource";if($Ae(e))return"query";throw new Error(`Unknown source type for source "${e}"`)}var nwt=y(()=>{"use strict";P();_e();o(y3r,"getSourceType")});var Lfe={};G(Lfe,{getSourceType:()=>y3r});var iwt=y(()=>{"use strict";nwt()});function owt(e,t){return!e.disabled&&t?"published":"disabled"}async function swt(){let e=I.getProdWorkspaceId(),t=await T.workspaces.isWorkspacePublished(e),r={automations:[],workspaceApps:[],screens:[],tables:[]},n={automations:[],workspaceApps:[],screens:[],tables:[]},i=o(async m=>{let[h,g,b,w]=await Promise.all([T.automations.fetch(),T.workspaceApps.fetch(),T.screens.fetch(),T.tables.getAllInternalTables()]);m.automations=h,m.workspaceApps=g,m.screens=b,m.tables=w},"updateState");await I.doInWorkspaceContext(I.getDevWorkspaceId(),async()=>i(r));let s;t&&(s=await T.workspaces.metadata.tryGet({production:!0}),await I.doInWorkspaceContext(I.getProdWorkspaceId(),async()=>i(n)));let a=new Set(n.automations.map(m=>m._id)),u=new Set(n.workspaceApps.map(m=>m._id)),c=new Set(n.tables.map(m=>m._id)),l=o((m,h,g)=>{let b=g._id,w=s?.resourcesPublishedAt?.[b],E=h.has(b)||!!w;m[b]={published:E,name:g.name,publishedAt:w,unpublishedChanges:!w||g.updatedAt>w,state:owt(g,w)}},"processResource"),f={};for(let m of r.automations)l(f,a,m);let d={};for(let m of r.tables)l(d,c,m);let p={};for(let m of r.workspaceApps){let h=s?.resourcesPublishedAt?.[m._id],g=r.screens.filter(b=>b.workspaceAppId===m._id);p[m._id]={published:u.has(m._id),name:m.name,publishedAt:h,unpublishedChanges:!h||!!g.find(b=>b.updatedAt>h),state:owt(m,h)}}return{automations:f,workspaceApps:p,tables:d}}var awt=y(()=>{"use strict";F();P();le();o(owt,"getPublishedState");o(swt,"status")});var uwt,cwt=y(()=>{"use strict";awt();uwt={status:swt}});var Mfe={};G(Mfe,{create:()=>_3r,fetch:()=>b3r,findByResourceId:()=>E3r,remove:()=>w3r});async function b3r(e){return(await I.getWorkspaceDB().find({selector:{_id:{$regex:`^workspace_favourite${fe}`},...e?{createdBy:e}:{}}})).docs}async function _3r(e){let r=await I.getWorkspaceDB().put({_id:U.generateWorkspaceFavouriteID(),...e});return{...e,_id:r.id,_rev:r.rev}}async function w3r(e,t){return await I.getWorkspaceDB().remove(e,t)}async function E3r(e){return(await I.getWorkspaceDB().find({selector:{_id:{$regex:`^workspace_favourite${fe}`},resourceId:e},limit:1})).docs}var lwt=y(()=>{"use strict";F();P();o(b3r,"fetch");o(_3r,"create");o(w3r,"remove");o(E3r,"findByResourceId")});var Ufe={};G(Ufe,{fetch:()=>v3r,fetchWithDocument:()=>S3r});async function v3r(e){if(!ts(e))throw new Error(`Invalid tableId: ${e}`);let t=I.getWorkspaceDB(),r={startkey:[e],endkey:[e,{}]};return(await t.query(hh(qa.LINK),r)).rows.map(i=>i.value)}async function S3r(e){if(!ts(e))throw new Error(`Invalid tableId: ${e}`);let t=I.getWorkspaceDB(),r={startkey:[e],endkey:[e,{}],include_docs:!0};return(await t.query(hh(qa.LINK),r)).rows.map(i=>i.doc)}var fwt=y(()=>{"use strict";F();_e();Ie();o(v3r,"fetch");o(S3r,"fetchWithDocument")});var dwt,pwt=y(()=>{"use strict";fwt();dwt={...Ufe}});var Ffe={};G(Ffe,{addLink:()=>T3r,deleteLink:()=>A3r,update:()=>R3r});async function T3r({label:e,url:t,roleId:r,workspaceAppId:n}){let i=await T.workspaceApps.get(n);if(!i)throw new j("Workspace app should be defined",500);i.navigation.links??=[],i.navigation.links.push({text:e,url:t,roleId:r,type:"link"}),await T.workspaceApps.update(i)}async function A3r(e,t){let r=await T.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 T.workspaceApps.update({...r,navigation:{...r.navigation,links:n}})}async function R3r(e,t){let r=await T.workspaceApps.get(e);if(!r)throw new j("Workspace app not found",400);await T.workspaceApps.update({...r,navigation:t})}var mwt=y(()=>{"use strict";F();le();o(T3r,"addLink");o(A3r,"deleteLink");o(R3r,"update")});async function hwt(e,t){if((await gwt()).find(n=>n.name===e&&n._id!==t))throw new j(`OAuth2 config with name '${e}' is already taken.`,400)}async function gwt(){return(await I.getWorkspaceDB().allDocs(et.getOAuth2ConfigParams(null,{include_docs:!0}))).rows.map(n=>({...n.doc,_id:n.doc._id,_rev:n.doc._rev}))}async function I3r(e){let t=I.getWorkspaceDB();await hwt(e.name);let r=await t.put({_id:`oauth2${fe}${Ne.newid()}`,...e});return{_id:r.id,_rev:r.rev,...e}}async function iV(e){return await I.getWorkspaceDB().tryGet(e)}async function O3r(e){let t=I.getWorkspaceDB();await hwt(e.name,e._id);let r=await iV(e._id);if(!r)throw new j(`OAuth2 config with id '${e._id}' not found.`,404);let n={...e,clientSecret:e.clientSecret===Pn?r.clientSecret:e.clientSecret},i=await t.put(n);return await ywt(e._id),{...n,_rev:i.rev}}async function x3r(e,t){let r=I.getWorkspaceDB();try{await r.remove(e,t)}catch(i){throw i.status===404?new j(`OAuth2 config with id '${e}' not found.`,404):i}await ywt(e);let n=await r.tryGet(et.generateOAuth2LogID(e));n&&await r.remove(n)}async function ywt(e){let t=Ce.CacheKey.OAUTH2_TOKEN(e);await Ce.destroy(t)}var bwt=y(()=>{"use strict";F();P();o(hwt,"guardName");o(gwt,"fetch");o(I3r,"create");o(iV,"get");o(O3r,"update");o(x3r,"remove");o(ywt,"cleanCache")});async function Ewt(e){e=await vpt(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,wwt.default)(e.url,t)}async function P3r(e){let t=await Ce.withCacheWithDynamicTTL(Ce.CacheKey.OAUTH2_TOKEN(e),async()=>{let r=await iV(e);if(!r)throw new _wt.HttpError(`oAuth config ${e} count not be found`);let n=await Ewt(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 D3r(e),t}async function k3r(e){try{let t=await Ewt(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}}}async function N3r(e){let t=await I.getWorkspaceDB().getMultiple(e.map(et.generateOAuth2LogID),{allowMissing:!0}),r=await I.getProdWorkspaceDB().getMultiple(e.map(et.generateOAuth2LogID),{allowMissing:!0});return e.reduce((i,s)=>{let a=t.find(c=>c._id===et.generateOAuth2LogID(s));a&&(i[s]=a.lastUsage);let u=r.find(c=>c._id===et.generateOAuth2LogID(s));return u&&(!i[s]||i[s]<u.lastUsage)&&(i[s]=u.lastUsage),i},{})}async function L3r(e){await Ce.destroy(Ce.CacheKey.OAUTH2_TOKEN(e),{useTenancy:!0})}var _wt,wwt,C3r,D3r,vwt=y(()=>{"use strict";F();P();_wt=require("koa"),wwt=q(require("node-fetch"));Bfe();QD();({DocWritethrough:C3r}=Ce.docWritethrough);o(Ewt,"fetchToken");D3r=o(async e=>{await new C3r(I.getWorkspaceDB(),et.generateOAuth2LogID(e)).patch({lastUsage:Date.now()})},"trackUsage");o(P3r,"getToken");o(k3r,"validateConfig");o(N3r,"getLastUsages");o(L3r,"cleanStoredToken")});var qfe={};G(qfe,{cleanStoredToken:()=>L3r,create:()=>I3r,fetch:()=>gwt,get:()=>iV,getLastUsages:()=>N3r,getToken:()=>P3r,remove:()=>x3r,update:()=>O3r,validateConfig:()=>k3r});var Bfe=y(()=>{"use strict";bwt();vwt()});var jfe={};G(jfe,{enrichArrayContext:()=>Awt,enrichContext:()=>Wfe,fetch:()=>F3r,find:()=>U3r});function Swt(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}function M3r(e){return e.map(t=>Swt(t))}function Twt(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]}async function U3r(e){let t=I.getWorkspaceDB(),r=I.getWorkspaceId(),n=Twt(await t.get(e));return ku(r)&&(delete n.fields,delete n.parameters),Swt(n)}async function F3r(e={enrich:!0}){let n=(await I.getWorkspaceDB().allDocs(MW(null,{include_docs:!0}))).rows.map(i=>i.doc);return e.enrich&&(n=await Twt(n)),M3r(n)}async function Awt(e,t={}){let r={};for(let s in e)r[s]=e[s];let n=await Wfe(r,t),i=[];for(let[s,a]of Object.entries(n))i[parseInt(s)]=a;return i}async function Wfe(e,t={}){let r={};if(!e||!t)return r;if(Array.isArray(e))return Awt(e,t);let n=await ip(),i={...t,env:n};for(let s of Object.keys(e))e[s]!=null&&(typeof e[s]=="object"?r[s]=await Wfe(e[s],i):typeof e[s]=="string"?r[s]=_n(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}var Rwt=y(()=>{"use strict";F();Yn();gn();Ie();QD();o(Swt,"updateSchema");o(M3r,"updateSchemas");o(Twt,"enrichQueries");o(U3r,"find");o(F3r,"fetch");o(Awt,"enrichArrayContext");o(Wfe,"enrichContext")});var Iwt,Owt=y(()=>{"use strict";Rwt();Iwt={...jfe}});var Vfe={};G(Vfe,{duplicateResourcesToWorkspace:()=>tKr,getResourcesInfo:()=>B3r});async function B3r(){let e=await T.automations.fetch(),t=await T.workspaceApps.fetch(),r={},n=[],i=await T.tables.getAllInternalTables(),s=await T.rowActions.getAll();n.push(...i.map(d=>({id:d._id,idToSearch:d._id,name:d.name,type:"table"})));let a=await T.datasources.fetch();n.push(...a.filter(d=>d._id!==no).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 T.queries.fetch();if(n.push(...u.map(d=>({id:d._id,idToSearch:d._id,name:d.name,type:"query"}))),s.length){let d=await T.rowActions.getNames(Object.values(s).flatMap(p=>Object.values(p.actions)));for(let p of s){let m=Object.entries(p.actions).flatMap(([h,g])=>e.filter(b=>b._id===g.automationId).map(b=>({id:b._id,name:b.name,type:"automation"})));for(let[h,g]of Object.entries(p.actions))for(let b of[h,wct(p._id)])n.push({id:p._id,idToSearch:b,name:d[g.automationId],type:"row_action",extraDependencies:m})}}let c=o((d,p)=>{let m=JSON.stringify(p);r[d]??={dependencies:[]};for(let h of n)if(m.includes(h.idToSearch)&&!r[d].dependencies.find(g=>g.id===h.id)){r[d].dependencies.push({id:h.id,name:h.name,type:h.type});let g=[...h.extraDependencies||[],...r[h.id]?.dependencies||[]].filter(({id:b})=>!r[d].dependencies.some(w=>w.id===b));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 T.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(m=>({id:m._id,name:m.name,type:"screen"})));for(let m of p)c(d._id,m)}for(let d of Object.values(r).flatMap(p=>p.dependencies).filter(p=>p.type==="row_action")){let p=s.find(m=>m._id===d.id);if(p)for(let m of Object.values(p.actions)){if(r[d.id]?.dependencies.some(g=>g.id===m.automationId))continue;let h=e.find(g=>g._id===m.automationId);h&&(r[d.id]??={dependencies:[]},r[d.id].dependencies.push({id:h._id,name:h.name,type:"automation"}))}}return r}async function q3r(e){let t=U.getDB(U.getDevWorkspaceID(e),{skip_setup:!0});if(!await t.exists())throw new j("Destination workspace does not exist",400);return t}function sV(e){return Object.entries(W3r).find(([r,n])=>e.startsWith(n))?.[0]}function xwt(e){return e._id?sV(e._id)==="automation":!1}function j3r(e){return e._id?sV(e._id)==="workspace_app":!1}function $3r(e){return e._id?sV(e._id)==="table":!1}async function Q3r(e,t,r){if(!e||e===t)return e;r.has(e)||r.set(e,(async()=>{try{if(await ce.objectExists(wt.APPS,t))return t}catch(i){Be.logWarn("Resource duplication: failed to check attachment existence",{err:i,key:e,destinationKey:t})}try{let{stream:i,contentType:s}=await ce.getReadStream(wt.APPS,e);return await ce.streamUpload({bucket:wt.APPS,stream:i,filename:t,type:s}),t}catch(i){Be.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}async function Cwt(e,t){if(!e?.key||!t.sourceProdWorkspaceId||!t.destinationProdWorkspaceId||t.sourceProdWorkspaceId===t.destinationProdWorkspaceId)return e;let r=K3r(e.key,t.sourceProdWorkspaceId,t.destinationProdWorkspaceId);if(!r||r===e.key)return e;let n=await Q3r(e.key,r,t.cache);return n?{...e,key:n,url:""}:e}async function z3r(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 Cwt(u,r);a.push(c)}n[i.field]=a}else(i.type==="attachment_single"||i.type==="signature_single")&&s&&(n[i.field]=await Cwt(s,r))}}async function X3r(e,t){let r=I.getWorkspaceDB(),n={include_docs:!0,limit:oV+(t?1:0)};t&&(n.startkey=t,n.skip=1);let s=(await r.allDocs(En(e,null,n))).rows.map(c=>c.doc).filter(c=>!!c),a=s.length>oV?s.slice(0,oV):s,u=a.length===oV?a[a.length-1]._id:void 0;return{rows:a,nextStartAfter:u}}async function Z3r(e,t){let r=(0,Dwt.default)(t,Y3r);for(let n of r){let i=n,s=0;for(;i.length&&s<$fe;){s++;let a=await e.bulkDocs(i),u=[];if(a.forEach((c,l)=>{c.error&&u.push(i[l])}),!u.length)break;if(s>=$fe)throw new Error(`Failed to copy ${u.length} row(s) after ${$fe} attempts.`);await J3r(s*250),i=u}}}async function eKr(e,t,r,n){if(!e.length)return;let i=U.getProdWorkspaceID(r),s=U.getProdWorkspaceID(n),a=new Map;for(let u of e){if(u.sourceId!==no)continue;if(!!(await t.allDocs(En(u._id,null,{include_docs:!1,limit:1}))).rows.length){Be.logWarn("Resource duplication: destination table already contains rows, skipping copy",{tableId:u._id,tableName:u.name});continue}let l=H3r(u),f;do{let{rows:d,nextStartAfter:p}=await X3r(u._id,f);if(f=p,!d.length)break;let m=[];for(let h of d){await z3r(h,l,{sourceProdWorkspaceId:i,destinationProdWorkspaceId:s,cache:a});let g={...h,fromWorkspace:r};delete g._rev,delete g.createdAt,delete g.updatedAt,m.push(g)}await Z3r(t,m)}while(f)}}async function tKr(e,t,r){e=Array.from(new Set(e).keys());let n=await q3r(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 I.getWorkspaceDB().getMultiple(e,{allowMissing:!1}),c=u.filter(p=>p._id&&a.includes(p._id)),l=I.getWorkspaceId();if(!l)throw new Error("Could not get workspaceId");if(c.length&&await n.bulkDocs(c.map(p=>{let m={...p,fromWorkspace:l};return delete m._rev,delete m.createdAt,delete m.updatedAt,(xwt(m)||j3r(m))&&(m.disabled=!0),xwt(m)&&(m.appId=t),m})),(r?.copyRows??!0)&&await eKr(u.filter($3r),n,l,t),!c.length)return;let f=(await T.workspaces.metadata.tryGet())?.name||l,d=await I.doInContext(t,async()=>(await T.workspaces.metadata.tryGet())?.name||t);for(let p of c){let m,h;switch(sV(p._id)){case"automation":m=p.name,h="Automation";break;case"datasource":m=p.name||"Unknown",h="Datasource";break;case"query":m=p.name,h="Query";break;case"row_action":m=p._id,h="Row action";break;case"table":m=p.name,h="Table";break;case"screen":m=p.name||"Unkown",h="Screen";break;case"workspace_app":m=p.name,h="App";break;case void 0:throw new Error("Resource type could not be infered");default:throw new Error("Unreachable")}let b={id:p._id,name:m,type:h};await ue.resource.duplicatedToWorkspace({resource:b,fromWorkspace:f,toWorkspace:d})}}var Dwt,W3r,V3r,G3r,H3r,K3r,oV,Y3r,$fe,J3r,Pwt=y(()=>{"use strict";F();Dwt=q(require("lodash/chunk"));P();le();gn();Ie();o(B3r,"getResourcesInfo");o(q3r,"getDestinationDb");W3r={datasource:xo("datasource"),table:xo("ta"),row_action:xo("ra"),query:xo("query"),automation:xo("au"),workspace_app:xo("workspace_app"),screen:xo("screen")};o(sV,"getResourceType");o(xwt,"isAutomation");o(j3r,"isWorkspaceApp");o($3r,"isTable");V3r=new Set(["attachment","attachment_single","signature_single"]),G3r=o(e=>!!e?.type&&V3r.has(e.type),"isAttachmentColumn"),H3r=o(e=>e.schema?Object.entries(e.schema).filter(([,t])=>G3r(t)).map(([t,r])=>({field:t,type:r.type})):[],"getAttachmentColumns"),K3r=o((e,t,r)=>{if(!e?.startsWith(`${t}/`)||t===r)return e;let n=e.slice(t.length);return`${r}${n}`},"buildDestinationAttachmentKey");o(Q3r,"copyAttachmentToWorkspace");o(Cwt,"remapAttachmentValue");o(z3r,"remapRowAttachments");oV=1e3,Y3r=250,$fe=3,J3r=o(e=>new Promise(t=>setTimeout(t,e)),"delay");o(X3r,"fetchTableRowsPage");o(Z3r,"bulkInsertRows");o(eKr,"duplicateInternalTableRows");o(tKr,"duplicateResourcesToWorkspace")});async function rKr(e,t,r){let n=await Lwt(Object.values(e.actions));if(t=t.toLowerCase().trim(),Object.entries(n).find(([i,s])=>s.toLowerCase().trim()===t&&i!==r))throw new j("A row action with the same name already exists.",409)}async function nKr(e,t){let r={name:t.name.trim()},n=I.getWorkspaceDB(),i=FW(e),s=await n.tryGet(i);s||(s={_id:i,actions:{}}),await rKr(s,r.name);let a=I.getWorkspaceId();if(!a)throw new Error("Could not get the current appId");let u=`row_action${fe}${Ne.newid()}`,c=await yf.create({name:r.name,appId:a,definition:{trigger:{id:"trigger",...at.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]}}async function kwt(e,t){let n=(await aV(e))?.actions[t];if(!n)throw new j(`Row action '${t}' not found in '${e}'`,400);return n}async function aV(e){let t=I.getWorkspaceDB(),r=FW(e);return await t.tryGet(r)}async function iKr(){return(await I.getWorkspaceDB().allDocs(et.getDocParams("ra",void 0,{include_docs:!0}))).rows.map(t=>t.doc)}async function oKr(e){let t=I.getWorkspaceDB(),r=await aV(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 T.automations.remove(s._id,s._rev);await t.remove(r)}async function sKr(e){let t=I.getWorkspaceDB(),r=FW(e);return await t.exists(r)}async function J0(e,t,r){let n=await aV(e);if(!n?.actions[t])throw new j(`Row action '${t}' not found in '${e}'`,400);let s=await r(n);return await I.getWorkspaceDB().put(s),{id:t,...s.actions[t]}}async function Nwt(e,t){let r;if(Gn(t)&&(r=await T.views.get(t)),!r||r.tableId!==e)throw new j(`View '${t}' not found in '${e}'`,400)}async function aKr(e,t){return await J0(e,t,async r=>(r.actions[t].permissions.table.runAllowed=!0,r))}async function uKr(e,t){return await J0(e,t,async r=>(r.actions[t].permissions.table.runAllowed=!1,r))}async function cKr(e,t,r){return await Nwt(e,r),await J0(e,t,async n=>(n.actions[t].permissions.views[r]={runAllowed:!0},n))}async function lKr(e,t,r){return await Nwt(e,r),await J0(e,t,async n=>(delete n.actions[t].permissions.views[r],n))}async function fKr(e,t){return await J0(e,t,async r=>{let{automationId:n}=r.actions[t],i=await yf.get(n);return await yf.remove(i._id,i._rev),delete r.actions[t],r})}async function dKr(e,t,r,n){let i=await T.tables.getTable(e);if(!i)throw new j("Table not found",404);let{automationId:s}=await kwt(e,t),a=await T.automations.get(s),u=await T.rows.find(e,r);await Qo(a,{fields:{id:u._id,revision:u._rev,row:u,table:i},user:n,appId:I.getWorkspaceId()},{getResponses:!0})}async function Lwt(e){return(await T.automations.find(e.map(({automationId:n})=>n))).reduce((n,i)=>(n[i._id]=i.name,n),{})}var Mwt=y(()=>{"use strict";F();_e();P();le();up();Ie();Z$();o(rKr,"ensureUniqueAndThrow");o(nKr,"create");o(kwt,"get");o(aV,"getAllForTable");o(iKr,"getAll");o(oKr,"deleteAll");o(sKr,"docExists");o(J0,"updateDoc");o(Nwt,"guardView");o(aKr,"setTablePermission");o(uKr,"unsetTablePermission");o(cKr,"setViewPermission");o(lKr,"unsetViewPermission");o(fKr,"remove");o(dKr,"run");o(Lwt,"getNames")});async function pKr(e){let r=(await T.tables.getAllTables()).filter(n=>n.sourceId===e);for(let n of Object.values(r))await T.rowActions.deleteAll(n._id)}var Uwt=y(()=>{"use strict";le();o(pKr,"deleteAllForDatasource")});var Gfe={};G(Gfe,{create:()=>nKr,deleteAll:()=>oKr,deleteAllForDatasource:()=>pKr,docExists:()=>sKr,get:()=>kwt,getAll:()=>iKr,getAllForTable:()=>aV,getNames:()=>Lwt,remove:()=>fKr,run:()=>dKr,setTablePermission:()=>aKr,setViewPermission:()=>cKr,unsetTablePermission:()=>uKr,unsetViewPermission:()=>lKr});var Fwt=y(()=>{"use strict";Mwt();Uwt()});var Kfe={};G(Kfe,{FIND_LIMIT:()=>Hfe,getRowsWithAttachments:()=>hKr});function mKr(e,t,r){let n={selector:{$or:t.map(i=>({[i]:{$exists:!0}})),_id:{$regex:`^ro${Lt}${e}`}},limit:Hfe};return r&&(n.bookmark=r),n}async function hKr(e,t){let r=U.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=mKr(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===Hfe);return{rows:a,columns:n}}var Hfe,Bwt=y(()=>{"use strict";P();F();Ie();Hfe=25;o(mKr,"generateAttachmentFindParams");o(hKr,"getRowsWithAttachments")});var X0={};G(X0,{find:()=>yKr,getRow:()=>Qfe,save:()=>gKr});async function Qfe(e,t,r){let n;return typeof e=="string"?Gn(e)?n=await T.views.get(e):n=await T.tables.getTable(e):n=e,((await Go("READ",n,{id:zi(t),includeSqlRelationships:r?.relationships?1:0}))?.rows||[])[0]}async function gKr(e,t,r){let{tableId:n,viewId:i}=jb(e),s;if(i?s=await T.views.get(i):s=await T.tables.getTable(n),T.views.isView(s)&&be.views.isCalculationView(s))throw new j("Cannot insert rows through a calculation view",400);let a=await Lu(r,(0,qwt.default)(s),t),u=await T.rows.utils.validate({row:a,source:s});if(!u.valid)throw{validation:u.errors};let c=await Go("CREATE",s,{row:a}),l=c.row._id;if(l){let f=await Qfe(s,l,{relationships:!0});return{...c,row:await Sr(s,f,{preserveLinks:!0,squash:!0})}}else return c}async function yKr(e,t){let{tableId:r,viewId:n}=jb(e),i;n?i=await T.views.get(n):i=await T.tables.getTable(r);let s=await Qfe(i,t,{relationships:!0});if(!s)throw new j("Row not found",404);return await Sr(i,s,{squash:!0,preserveLinks:!0})}var qwt,zfe=y(()=>{"use strict";F();_e();P();qwt=q(require("lodash/fp/cloneDeep"));le();_0();Jt();Eo();Ih();o(Qfe,"getRow");o(gKr,"save");o(yKr,"find")});var Yfe={};G(Yfe,{find:()=>wKr,getAllInternalRows:()=>bKr,save:()=>_Kr});async function bKr(e){let t;return e?t=U.getDB(e):t=I.getWorkspaceDB(),(await t.allDocs(En(null,null,{include_docs:!0}))).rows.map(n=>n.doc)}function Wwt(e){let t=e;return Gn(e)&&(t=Ln(e)),cr(t)?X0:ele}async function _Kr(e,t,r,n){return Wwt(e).save(e,t,r,n)}async function wKr(e,t){return Wwt(e).find(e,t)}var jwt=y(()=>{"use strict";F();_e();Ie();Jt();zfe();tle();o(bKr,"getAllInternalRows");o(Wwt,"pickApi");o(_Kr,"save");o(wKr,"find")});var $wt,EKr,vKr,SKr,Jfe,zb,Xfe=y(()=>{"use strict";P();Ih();$wt=require("lodash");_e();EKr=["CREATE","UPDATE","DELETE"],vKr=["mysql2","mssql","oracledb"],SKr=["CREATE_TABLE","UPDATE_TABLE","DELETE_TABLE"],Jfe=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}},zb=class{static{o(this,"AliasTables")}constructor(t){this.tableNames=t,this.aliases={},this.tableAliases={},this.charSeq=new Jfe}isAliasingEnabled(t,r){let n=t.resource?.fields?.length;if(!n||n<=0||SKr.includes(t.operation))return!1;if(!r)return!0;try{let i=cce(r),s=EKr.includes(t.operation),a=vKr.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,$wt.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 m of Object.keys(d))p[this.aliasField(m)]=d[m];l[f]=p}return Qt.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 TKr(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))}}function Vwt(e,t){TKr(e,t,r=>{let n=Array.isArray(r);if(!(typeof r=="string")&&!n)return r;let s=o(a=>{let u="ro"+fe;return a.startsWith(u)?U.getGlobalIDFromUserMetadataID(a):a},"processString");return n?r.map(a=>typeof a=="string"?s(a):a):s(r)})}function uV(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":Vwt(r,t);break;default:rt.unreachable(i)}break}case"bb_reference":{Vwt(r,t);break}}return Qt.recurseLogicalOperators(t,r=>uV(e,r))}function Gwt(e,t){return t.query&&(t.query=uV(e,t.query)),t}function cV(e){for(let t of Object.values(e)){if(typeof t!="object")continue;if(Object.keys(t).find(n=>U.removeKeyNumbering(n)==="_id"&&t[n]))return!0}return!1}var lV=y(()=>{"use strict";F();_e();P();o(TKr,"findColumnInQueries");o(Vwt,"userColumnMapping");o(uV,"checkFilters");o(Gwt,"searchInputMapping");o(cV,"isSearchingByRowID")});var Z0={};G(Z0,{buildInternalFieldList:()=>Zfe,search:()=>Zwt});async function Zfe(e,t,r){let{relationships:n,allowedFields:i,includeHiddenFields:s}=r||{},a=[],u=T.views.isView(e),c;u?c=await T.views.getTable(e.id):c=e,u?a=Object.keys(be.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,m)=>{let h=[];return m.forEach(g=>{h.push(`${yh(c._id,p._id)}.${g}`)}),h},"getJunctionFields");if(T.tables.isTable(e))for(let p of kn)i&&!i.includes(p)||f.push(`${c._id}.${p}`);for(let p of a){let m=c.schema[p];if(!m)continue;let h=m.type==="link";if(!(!n&&h))if(!h)f.push(`${c._id}.${df(p)}`);else{let g=m,b=t.find(E=>E._id===g.tableId);if(!b)continue;let w=(await Zfe(b,t,{includeHiddenFields:l})).concat(d(b,["doc1.fieldName","doc2.fieldName"]));if(w.length+f.length>AKr)break;f=f.concat(w)}}if(!u||!be.views.isCalculationView(e))for(let p of kn)f.push(`${c._id}.${p}`);return[...new Set(f)]}function OKr(e,t){let r={};for(let a of t)for(let u of Object.keys(a.schema))tg(u)||(r[u]=df(u));let n=o(a=>tg(a)?!1:t.some(u=>u.schema[a]),"keyInAnyTable"),i=new Qt.ColumnSplitter(t),s=o(a=>{for(let u of Object.keys(a))if(Ip(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||""}${df(p)}`]=c[l],delete c[l])}}},"prefixFilters");return s(e),e}function Xwt(e,t){let r=FS.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]=Xwt(JSON.parse(n[s])));let a=s.indexOf(FS);if(a!==-1){let u=s.slice(0,a)+s.slice(a+r),c=be.schema.decodeNonAscii(u);i[c]=n[s]}else i[s]=n[s]}return i})}async function Hwt(e,t,r,n){let i=r.map(c=>c.through),s=new zb(t.map(c=>c._id).concat(i));n?.countTotalRows&&(e.operation="COUNT");let a=o(async c=>{let l=Ywt._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(h=>["doc1","doc2"].forEach(g=>{f=f.replaceAll(`\`${g}\`.\`${h}\``,`\`${g}.${h}\``)}),"fixJunctionDocs");if(p("rowId"),p("fieldName"),Array.isArray(l))throw new Error("SQS cannot currently handle multiple queries");let m=I.getWorkspaceDB();return await Kwt.default.trace("sqs.runSqlQuery",async h=>(h?.addTags({sql:f}),await m.sql(f,d)))},"processSQLQuery"),u=await s.queryWithAliasing(e,a);return n?.countTotalRows?YD(u):Array.isArray(u)?Xwt(u,e.table):u}function xKr(e,t){return e===400&&t?.match(RKr)||e===400&&t?.match(Jwt)||e===400&&t?.match(IKr)||e===404&&t?.includes(io)}async function Zwt(e,t,r){let{paginate:n,query:i,...s}=(0,Qwt.cloneDeep)(e),a;T.views.isView(t)?a=await T.views.getTable(t.id):a=t;let u=await T.tables.getAllInternalTables(),c=u.reduce((g,b)=>(g[b._id]=b,g),{});if(a._id&&(a=c[a._id]),!a)throw new Error("Unable to find table");let l=Olt(a,u),f={...OKr(i,u),documentType:"ro"},d=[];if(T.views.isView(t)&&be.views.isCalculationView(t)){let g=be.views.calculationFields(t);for(let[b,w]of Object.entries(g))e.fields&&!e.fields.includes(b)||(w.calculationType==="count"?"distinct"in w&&w.distinct?d.push({name:b,distinct:!0,field:df(w.field),calculationType:w.calculationType}):d.push({name:b,calculationType:w.calculationType,field:df(w.field)}):d.push({name:b,field:df(w.field),calculationType:w.calculationType}))}let p={endpoint:{datasourceId:jp,entityId:a._id,operation:"READ"},filters:f,meta:{columnPrefix:FS,sqliteUseLikeWithoutLower:!0},resource:{fields:await Zfe(t,u,{relationships:l,allowedFields:e.fields}),aggregations:d},relationships:l};if(s.sort){let g=a.schema[s.sort];if(d.some(w=>w.name===s.sort))p.sort={[s.sort]:{direction:s.sortOrder||"ascending",type:"number"}};else if(g){let E=(XG(g)?g.responseType:g.type)==="number"?"number":"string";p.sort={[df(g.name)]:{direction:s.sortOrder||"ascending",type:E}}}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 m=s.bookmark||0;!cV(f)&&s.limit&&(n=!0,p.paginate={limit:s.limit+1,offset:m});let h=await Wb(p);try{let[g,b]=await Promise.all([Hwt(h,u,l),e.countRows?Hwt(h,u,l,{countTotalRows:!0}):Promise.resolve(void 0)]),w=Ywt.convertJsonStringColumns(a,await sj(g,t,c,l,{sqs:!0})),E=!1;n&&s.limit&&g.length>s.limit&&(E=!0,w.length>s.limit&&w.pop());let v=await Sr(t,w,{preserveLinks:!0,squash:!0}),A=[...e.fields||Object.keys(t.schema||{}).filter(O=>t.schema?.[O].visible!==!1),...kn];v=v.map(O=>(0,zwt.default)(O,A));let x={rows:v};return b!=null&&(x.totalRows=b),n&&E&&(x.hasNextPage=!0,x.bookmark=m+w.length),n&&!E&&(x.hasNextPage=!1),x}catch(g){let b=typeof g=="string"?g:g.message;if(!r?.retrying&&xKr(g.status,b))return await fo.doWithLock({type:"auto_extend",name:"sys_sync_definitions",resource:I.getWorkspaceId()},T.tables.sqs.syncDefinition),Zwt(e,t,{retrying:!0});if(g.status===400&&b?.match(Jwt))return{rows:[]};throw new Error(`Unable to search by SQL - ${b}`,{cause:g})}}var Kwt,Qwt,zwt,Ywt,AKr,Jwt,RKr,IKr,eEt=y(()=>{"use strict";F();_e();P();Kwt=q(require("dd-trace")),Qwt=require("lodash"),zwt=q(require("lodash/pick"));Mu();Ie();Eo();le();Gce();Xfe();Ih();lV();Ywt=new pt.Sql("sqlite3"),AKr=2e3,Jwt=new RegExp("no such column: .+"),RKr=new RegExp("no such table: .+"),IKr=new RegExp("duplicate column name: .+");o(Zfe,"buildInternalFieldList");o(OKr,"cleanupFilters");o(Xwt,"reverseUserColumnMapping");o(Hwt,"runSqlQuery");o(xKr,"resyncDefinitionsRequired");o(Zwt,"search")});async function tEt(view,calculation,group,data){let db=new CKr(Ne.newid());try{if(await db.bulkDocs(data.map(e=>({...e,_rev:void 0}))),!view.meta)throw new Error("Legacy view metadata is missing");let groupByMulti=view.meta.groupByMulti??view.meta.schema?.group?.type==="array",rebuiltView=lf(view.meta,groupByMulti),fn=o((e,t)=>t(e._id),"fn");eval("fn = "+rebuiltView?.map?.replace("function (doc)","function (doc, emit)"));let queryFns={meta:rebuiltView.meta,map:fn};rebuiltView.reduce&&(queryFns.reduce=rebuiltView.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 U.closePouchDB(db)}}var CKr,rEt=y(()=>{"use strict";F();ZD();CKr=U.getPouch({inMemory:!0});o(tEt,"runView")});async function PKr(e){let{tableId:t,format:r,rowIds:n,columns:i,query:s,sort:a,sortOrder:u,delimiter:c,customHeaders:l}=e,f=I.getWorkspaceDB(),d=await T.tables.getTable(t),p=[];if(n){let w=(await f.allDocs({include_docs:!0,keys:n.map(E=>{let v=zi(E);if(v.length>1)throw new j("Export data does not support composite keys.",400);return v[0]})})).rows.map(E=>E.doc);p=await Sr(d,w)}else p=(await T.rows.search({tableId:t,query:s||{},sort:a,sortOrder:u})).rows;let m=[],h=d.schema,g;if(p=MKr(p,h),i&&i.length){for(let w=0;w<p.length;w++){m[w]={};for(let E of i)m[w][E]=p[w][E]}g=i}else m=p;let b=T.rows.utils.cleanExportRows(m,h,r,i,l);if(r==="csv")return{fileName:"export.csv",content:IS(g??Object.keys(m[0]),b,c,l)};if(r==="json")return{fileName:"export.json",content:OS(b)};if(r==="jsonWithSchema")return{fileName:"export.json",content:xS(h,b)};throw"Format not recognised"}async function nEt(e){let t=await kKr(e),r=await tde(e);return await Sr(t,r)}async function kKr(e){try{return await T.tables.getTable(e)}catch(t){if(t.status!==404)throw t;let i=await NKr(e);if(!i)throw t;return i}}async function NKr(e){let t=I.getWorkspaceId();if(!t||!ku(t))return;let r=I.getDevWorkspaceId();return await I.doInWorkspaceContext(r,async()=>{if(await T.tables.doesTableExist(e))return await T.tables.getTable(e)})}async function tde(e,t){let r=I.getWorkspaceDB(),n;return e===Yt.USER_METADATA?n=await T.users.fetchMetadata():n=(await r.allDocs(En(e,null,{include_docs:!0,limit:t}))).rows.map(s=>s.doc),n}async function rde(e,t){if(e.startsWith("ta"))return nEt(e);let r=I.getWorkspaceDB(),{calculation:n,group:i,field:s}=t,a=await LKr(r,e),u;if(H.SELF_HOSTED)u=await r.query(`database/${e}`,{include_docs:!n,group:!!i});else{let l=a.meta.tableId,f=await tde(l);u=await tEt(a,n,!!i,f)}let c=[];if(!n){u.rows=u.rows.map(f=>f.doc);let l;try{l=await T.tables.getTable(a.meta.tableId)}catch{throw new Error("Unable to retrieve view table.")}c=await Sr(l,u.rows)}return n===ede.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===ede.COUNT||n===ede.SUM)&&(c=u.rows.map(l=>({group:l.key,field:s,value:l.value}))),c}async function LKr(e,t){let r=H.SELF_HOSTED?hce:gce,n=H.SELF_HOSTED?gce:hce,i=H.SELF_HOSTED?Fpt:Upt,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}function MKr(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]}),{}))}var ede,iEt=y(()=>{"use strict";F();P();le();CS();Wj();rEt();Ie();$e();Jt();Eo();o(PKr,"exportRows");o(nEt,"fetch");o(kKr,"getTableForFetch");o(NKr,"getDevTableWhenProdMissing");o(tde,"fetchRaw");o(rde,"fetchLegacyView");ede={SUM:"sum",COUNT:"count",STATS:"stats"};o(LKr,"getView");o(MKr,"trimFields")});var nde={};G(nde,{exportRows:()=>PKr,fetch:()=>nEt,fetchLegacyView:()=>rde,fetchRaw:()=>tde,sqs:()=>Z0});var oEt=y(()=>{"use strict";eEt();iEt()});var ide={};G(ide,{exportRows:()=>FKr,fetch:()=>BKr,fetchRaw:()=>qKr,search:()=>fV});function UKr(e,t,r,n){let i;if(!cV(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}}async function fV(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=UKr(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=>zi(d)[0])}try{let f={filters:i,sort:l,paginate:c,includeSqlRelationships:1},[{rows:d,rawResponseSize:p},m]=await Promise.all([Go("READ",t,f),r?Go("COUNT",t,f):Promise.resolve(void 0)]),h=await Sr(t,d,{preserveLinks:!0,squash:!0}),g=!1;n&&a&&p>a&&(g=!0,h.length>a&&h.pop());let w=[...e.fields||Object.keys(t.schema||{}).filter(v=>t.schema?.[v].visible!==!1),...xs];h=h.map(v=>(0,sEt.default)(v,w));let E={rows:h,hasNextPage:g};return g&&u!=null&&(E.bookmark=u+h.length),m!=null&&(E.totalRows=m),n&&!g&&(E.hasNextPage=!1),E}catch(f){throw f.message&&f.message.includes("does not exist")?new Error(`Table updated externally, please re-fetch - ${f.message}`,{cause:f}):f}}async function FKr(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 j("No table ID for search provided.",400);let{datasourceId:f,tableName:d}=Hr(t),p={};i?.length?p={oneOf:{_id:i.map(x=>{let O=zi(x);return O.length>1?O:O[0]})}}:p=s||{};let m=await T.datasources.get(f),h=await T.tables.getTable(t);if(!m||!m.entities)throw new j("Datasource has not been configured for plus API.",400);let g=await fV({tableId:h._id,query:p,sort:a,sortOrder:u},h),b=[],w;if(n&&n.length){for(let x=0;x<g.rows.length;x++){b[x]={};for(let O of n)b[x][O]=g.rows[x][O]}w=n}else b=g.rows;let E=m.entities[d].schema,v=T.rows.utils.cleanExportRows(b,E,r,n,l),S;switch(r){case"csv":S=IS(w??Object.keys(E),v,c,l);break;case"json":S=OS(v);break;case"jsonWithSchema":S=xS(E,v);break;default:throw rt.unreachable(r)}return{fileName:`export.${r}`,content:S}}async function BKr(e){let t=await T.tables.getTable(e),r=await Go("READ",t,{includeSqlRelationships:1});return await Sr(t,r.rows,{preserveLinks:!0,squash:!0})}async function qKr(e,t){let r=await T.tables.getTable(e),n;return t&&(n={limit:t}),(await Go("READ",r,{includeSqlRelationships:1,paginate:n})).rows}var sEt,aEt=y(()=>{"use strict";F();_e();P();sEt=q(require("lodash/pick"));le();_0();CS();Jt();Eo();lV();o(UKr,"getPaginationAndLimitParameters");o(fV,"search");o(FKr,"exportRows");o(BKr,"fetch");o(qKr,"fetchRaw")});var ode,uEt,cEt=y(()=>{"use strict";F();P();le();p0();ode=o((e,t)=>{t=t.map(r=>r.toLowerCase());for(let r of Object.keys(e||{}))if(Ip(r)){let n=e[r];if(!n)continue;for(let i of n.conditions)ode(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(U.removeKeyNumbering(i).toLowerCase()))throw new j(`Invalid filter field: ${i}`,400)}},"validateFilters"),uEt=o(async(e,t)=>{let r=o(async(i,s,a,u)=>{let c=[];xce({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 T.tables.getTable(f.tableId),m=await r(p,Object.keys(p.schema),[...a,f.tableId],{noRelationships:!0});c.push(...m.flatMap(h=>[`${f.name}.${h}`,`${p.name}.${h}`]))}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")});var ade={};G(ade,{exportRows:()=>jKr,fetch:()=>$Kr,fetchLegacyView:()=>GKr,fetchRaw:()=>VKr,isValidFilter:()=>vlt,search:()=>WKr});function sde(e){return cr(e)?ide:nde}async function WKr(e,t){return await lEt.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 T.views.get(e.viewId),i=await T.views.getTable(n);else if(e.tableId)n=await T.tables.getTable(e.tableId),i=n;else throw new Error("Must supply either a view ID or a table ID");let s=cr(i._id);if(e.query){let u=(e.fields||Object.keys(i.schema)).filter(l=>i.schema[l]?.visible!==!1),c=await uEt(i,u);ode(e.query,c)}else e.query={};if(t&&(e.query=await Mb(e.query,t)),e=Gwt(i,e),e.viewId){let c=await Mb(n.query||{},t);Array.isArray(c)&&(c=Qt.buildQuery(c)),c=uV(i,c);let l=c?[c]:[];e.query={$and:{conditions:[...l,e.query]}},c.onEmptyFilter&&(e.query.onEmptyFilter=c.onEmptyFilter)}if(e.query=Qt.cleanupQuery(e.query),e.query=Qt.fixupFilterArrays(e.query),r.addTags({cleanedQuery:e.query}),!Qt.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 fV(e,n)):(r?.addTags({searchType:"sqs"}),a=await Z0.search(e,n)),r.addTags({foundRows:a.rows.length,totalRows:a.totalRows}),a})}async function jKr(e){return sde(e.tableId).exportRows(e)}async function $Kr(e){return sde(e).fetch(e)}async function VKr(e,t){return sde(e).fetchRaw(e,t)}async function GKr(e,t){return rde(e,t)}var lEt,fEt=y(()=>{"use strict";P();Jt();oEt();aEt();_e();le();lV();lEt=q(require("dd-trace"));cEt();Mu();Jt();o(sde,"pickApi");o(WKr,"search");o(jKr,"exportRows");o($Kr,"fetch");o(VKr,"fetchRaw");o(GKr,"fetchLegacyView")});var dEt,pEt=y(()=>{"use strict";Bwt();jwt();fEt();Ih();zfe();Xfe();dEt={...Kfe,...Yfe,...ade,utils:fce,external:X0,AliasTables:zb}});async function HKr(e=I.getWorkspaceDB()){let t=(await e.allDocs(pct(null,{include_docs:!0}))).rows.map(n=>n.doc),r=t.filter(n=>!n.workspaceAppId);if(r.length){let n=await T.workspaceApps.fetch(),i=n.find(s=>s.isDefault)||n[0];i&&r.forEach(s=>{s.workspaceAppId=i._id})}return t}async function KKr(e){let r=await I.getWorkspaceDB().put({...e,_id:dct()});return{...e,_id:r.id,_rev:r.rev}}async function QKr(e){let r=await I.getWorkspaceDB().put(e);return{...e,_rev:r.rev}}var mEt=y(()=>{"use strict";F();le();Ie();o(HKr,"fetch");o(KKr,"create");o(QKr,"update")});async function zKr(e){let n=(await T.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 T.screens.update(i)}var hEt=y(()=>{"use strict";le();o(zKr,"ensureHomepageUniqueness")});var ude={};G(ude,{create:()=>KKr,ensureHomepageUniqueness:()=>zKr,fetch:()=>HKr,update:()=>QKr});var gEt=y(()=>{"use strict";mEt();hEt()});async function yEt(e,t){if((await bEt()).find(n=>n.name===e&&n._id!==t))throw new j(`App with name '${e}' is already taken.`,400)}async function bEt(e=I.getWorkspaceDB()){return(await e.allDocs(et.getWorkspaceAppParams(null,{include_docs:!0}))).rows.map(n=>({...n.doc,_id:n.doc._id,_rev:n.doc._rev}))}async function _Et(e){return await I.getWorkspaceDB().tryGet(e)}async function ZKr(e){let t=I.getWorkspaceDB();return await yEt(e.name),(await t.put({...e,_id:et.generateWorkspaceAppID()},{returnDoc:!0})).doc}async function eQr(e){let t=await JKr(e);return await YKr(e._id,t._id),t}async function tQr(e){let t=I.getWorkspaceDB(),r=await _Et(e._id);if(!r)throw new j(`Project app with id '${e._id}' not found.`,404);e.name!==r.name&&await yEt(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}async function rQr(e,t){let r=I.getWorkspaceDB();try{let i=await r.tryGet(e);if(!i)throw new j(`Project app with id '${e}' not found.`,404);await r.remove(e,t),ue.workspace.deleted(i,I.getWorkspaceId())}catch(i){throw i.status===404?new j(`Project app with id '${e}' not found.`,404):i}let n=(await T.screens.fetch()).filter(i=>i.workspaceAppId===e);await r.bulkRemove(n)}var YKr,JKr,XKr,wEt=y(()=>{"use strict";F();le();_e();o(yEt,"guardName");YKr=o(async(e,t)=>{let n=(await T.screens.fetch()).filter(s=>s.workspaceAppId===e),i=[];for(let s=0;s<n.length;s++){let a=n[s],u=await T.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"),JKr=o(async e=>{let t=await T.workspaceApps.fetch(),r=be.duplicateName(e.name,t.map(i=>i.name)),n={name:r,url:`/${XKr(r)}`,disabled:!0,navigation:e.navigation,isDefault:!1};return T.workspaceApps.create(n)},"createDuplicatedApp"),XKr=o(e=>e.toLowerCase().replaceAll(" ","-"),"slugify");o(bEt,"fetch");o(_Et,"get");o(ZKr,"create");o(eQr,"duplicate");o(tQr,"update");o(rQr,"remove")});async function nQr(e){let t=await T.workspaces.metadata.get(),r=e.split("?")[0],n=U.isProdWorkspaceID(t.appId)?`/app/${t.url}`.replace("//","/"):`/${t.appId}`,i=U.isProdWorkspaceID(t.appId)?`/app-chat/${t.url}`.replace("//","/"):`/app-chat/${t.appId}`,s=U.isProdWorkspaceID(t.appId)?`/embed/${t.url}`.replace("//","/"):null,a=await T.workspaceApps.fetch(),u=a.filter(m=>!m.disabled),c=o(()=>u.find(m=>m.isDefault)||u[0]||a.find(m=>m.isDefault)||a[0],"getDefaultWorkspaceApp");function l(m,{url:h,isDefault:g}){return m.replace(/\/$/,"")===`${n}${h.replace(/\/$/,"")}`||s&&m.replace(/\/$/,"")===`${s}${h.replace(/\/$/,"")}`||!m&&g}o(l,"isWorkspaceAppMatch");let f=o(m=>a.find(h=>l(m,h)),"findWorkspaceApp");if(r.replace(/\/$/,"")===i.replace(/\/$/,"")||r.startsWith(`${i.replace(/\/$/,"")}/`))return c();let d=f(r);if(d)return d;let p=r.replace(/\/_chat(?:\/.*)?$/,"");return p!==r?f(p):d}var EEt=y(()=>{"use strict";F();le();o(nQr,"getMatchedWorkspaceApp")});var cde={};G(cde,{create:()=>ZKr,duplicate:()=>eQr,fetch:()=>bEt,get:()=>_Et,getMatchedWorkspaceApp:()=>nQr,remove:()=>rQr,update:()=>tQr});var vEt=y(()=>{"use strict";wEt();EEt()});var lde={};G(lde,{updateWithExport:()=>uQr});async function iQr(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}`)}}function oQr(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]}async function sQr(e){let t=[];for(let s of QG)t.push(e.allDocs(U.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(SEt,{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}))}async function aQr(e){let t=[];for(let s of QG)t.push(e.allDocs(U.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(SEt,{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())}async function uQr(e,t,r){let n=U.getDevWorkspaceID(e),i=`temp_${n}`,s=U.getDB(i),a=U.getDB(n);try{let u={file:{type:t.type,path:t.path,password:r}};await nV.importApp(n,s,u,{updateAttachmentColumns:!0});let c=await iQr(s,a),l=await aQr(s),f=await sQr(a);if((await a.bulkDocs(oQr(l,f,c))).some(p=>p.error))throw new j("Error importing documents",500);await Ce.destroy(v$(n)),await ZS(n)}finally{await s.destroy()}}var SEt,TEt=y(()=>{"use strict";F();P();Lh();I$();Nfe();SEt=[wg.SQLITE,"_design/migrations"];o(iQr,"getNewWorkspaceMetadata");o(oQr,"mergeUpdateAndDeleteDocuments");o(sQr,"removeImportableDocuments");o(aQr,"getImportableDocuments");o(uQr,"updateWithExport")});var fde={};G(fde,{get:()=>cQr,tryGet:()=>lQr});async function cQr(e){return await(e?.production?I.getProdWorkspaceDB():I.getWorkspaceDB()).get("app_metadata")}async function lQr(e){return await(e?.production?I.getProdWorkspaceDB():I.getWorkspaceDB()).tryGet("app_metadata")}var AEt=y(()=>{"use strict";F();o(cQr,"get");o(lQr,"tryGet")});var dde={};G(dde,{enrichWithDefaultWorkspaceAppUrl:()=>pQr,fetch:()=>dQr,filterAppList:()=>REt});function REt(e,t){let r=[],n=Object.keys(e.roles);if(ze.hasAppBuilderPermissions(e))r=e.builder?.apps||[],r=r.concat(n);else if(!ze.isAdminOrBuilder(e))r=n;else return t;return t.filter(i=>r.includes(U.getProdWorkspaceID(i.appId)))}async function dQr(e,t){let r=e==="development",n=e==="all",i=await U.getAllWorkspaces({dev:r,all:n}),s={...t,roles:t?.roles||{}},a=await xi.enrichUserRolesFromGroups(s);i=REt(a,i);let u=i.filter(l=>l.status==="development").map(l=>l.appId);if(r||n){let l=await Qct(u);for(let f of i){let d=l[f.appId];d?f.lockedBy=d:delete f.lockedBy}}let c=await Cae(i);return await Ibt(c)}async function pQr(e){let t=[];for(let r of e){let n=await U.doWithDB(r.appId,i=>T.workspaceApps.fetch(i));t.push({...r,defaultWorkspaceAppUrl:n[0]?.url||""})}return t}var IEt=y(()=>{"use strict";F();tt();le();jle();Ie();Wa();Pae();o(REt,"filterAppList");o(dQr,"fetch");o(pQr,"enrichWithDefaultWorkspaceAppUrl")});var OEt,xEt=y(()=>{"use strict";TEt();AEt();dV();Qse();IEt();OEt={...pde,...Kse,...dde,...lde,metadata:fde}});var mQr,T,le=y(()=>{"use strict";Gct();Iae();bft();Fb();Z$();Nfe();iwt();Qj();cwt();lwt();pwt();mwt();Bfe();Xj();Owt();Pwt();Fwt();pEt();gEt();r$();xh();vEt();xEt();mQr={backups:nV,tables:Gb,automations:yf,workspaces:OEt,rows:dEt,users:yft,datasources:ff,queries:Iwt,plugins:Rae,screens:ude,views:c0,permissions:Mce,links:dwt,rowActions:Gfe,common:Lfe,oauth2:qfe,ai:_fe,workspaceApps:cde,navigation:Ffe,resources:Vfe,deployment:uwt,dev:Xse,workspace:Mfe},T=mQr});var pde={};G(pde,{syncUsersAcrossWorkspaces:()=>mde,syncUsersAgainstWorkspaces:()=>eP,syncWorkspace:()=>yQr});function CEt(){return!H.DISABLE_USER_SYNC}async function hQr(e,t,r){await U.dbExists(e)&&await I.doInWorkspaceContext(e,async()=>{let n=I.getWorkspaceDB();for(let i of t){let s=i,a=!1,u=Yd(i._id);i.deleted&&(a=!0),a||(s=await Pb(s,{appId:e,groups:r}));let c=s.roleId;c===Se.BUILTIN_ROLE_IDS.PUBLIC&&(c=void 0);let l;try{l=await n.get(u)}catch(d){if(d.status!==404)throw d;if(c)a||(l={tableId:Yt.USER_METADATA});else continue}if(CEt()&&(a||!c)){await n.remove(l);continue}c&&(s.roleId=c);let f=T.users.combineMetadataAndUser(s,l);f&&await n.put(f)}})}async function gQr(e){let t=await lae(e),r=await On.groups.fetch(),n=[];for(let i of e){let s=t.find(a=>a._id===i);s?n.push(s):n.push({_id:i,deleted:!0})}return{finalUsers:n,groups:r}}async function eP(e,t){if(!t.length)return;let r=new Set;for(let l of t){if(!l)continue;let f=U.getDevWorkspaceID(l),d=U.getProdWorkspaceID(l);f&&r.add(f),d&&r.add(d)}if(!r.size)return;let{finalUsers:n,groups:i}=await gQr(e),s=[];await rt.parallelForeach([...r],async l=>{if(l)try{let f=hQr(l,n,i);s.push(f),await f}catch{}},10);let c=(await Promise.allSettled(s)).filter(l=>l.status==="rejected").map(l=>l.reason).filter(l=>!U.isDocumentConflictError(l));c.length>0&&Be.logWarn("Failed to sync users to workspaces",c)}async function mde(e){let t=await U.getDevWorkspaceIDs();await eP(e,t)}async function yQr(e,t){if(H.DISABLE_AUTO_PROD_APP_SYNC)return{message:"App sync disabled. You can reenable with the DISABLE_AUTO_PROD_APP_SYNC environment variable."};if(U.isProdWorkspaceID(e))throw new Error("This action cannot be performed for production apps");let r=U.getProdWorkspaceID(e),i=await I.getProdWorkspaceDB({skip_setup:!0}).exists(),s;if(i){let a=new U.Replication({source:r,target:e});try{let u=a.appReplicateOpts();t?.automationOnly&&(u.filter=c=>c._id.startsWith(U.DocumentType.AUTOMATION)),await a.replicate(u)}catch(u){s=u}finally{await a.close()}}if(CEt()&&await T.users.syncGlobalUsers(),s)throw s;return{message:"App sync completed successfully."}}var dV=y(()=>{"use strict";F();tt();_e();le();Ie();$e();Sh();o(CEt,"userSyncEnabled");o(hQr,"syncUsersToWorkspace");o(gQr,"buildSyncUsers");o(eP,"syncUsersAgainstWorkspaces");o(mde,"syncUsersAcrossWorkspaces");o(yQr,"syncWorkspace")});function bQr(){return pV||(pV=new tP,pV.init()),pV}function due(){return{events:GG,processor:o(async t=>{try{let r=t.id,n=r.startsWith(ft.DocumentType.GROUP),i=[];if(n){"userIds"in t.properties&&i.push(...t.properties.userIds);let a=await On.groups.get(r);i.push(...a.users?.map(u=>u._id)||[])}else i.push(r);await bQr().add(i)}catch(r){if(r?.status===404)return;if(r?.status===409)return;Be.logAlert("Failed to perform user/group app sync",r)}},"processor")}}var tP,pV,pue=y(()=>{"use strict";F();tt();P();dV();tP=class e{static{o(this,"UserSyncProcessor")}static get queue(){return e._queue||(e._queue=new In.BudibaseQueue(In.JobQueue.BATCH_USER_SYNC_PROCESSOR,{jobOptions:{removeOnComplete:!0,removeOnFail:1e3}})),e._queue}init(){e.queue.process(1,async t=>{let r=await e.queue.getBullQueue().getWaiting(0,100),n=Array.from(new Set([t,...r].map(i=>i.data.userId)));await mde(n);for(let i of r)await i.remove()})}async add(t){for(let r of t)await e.queue.add({userId:r})}};o(bQr,"getUserSyncProcessor");o(due,"process")});async function kEt(){let e=[new fT.BullAdapter(jn.getBullQueue())],t=_o.getBackupQueue();t&&e.push(new fT.BullAdapter(t.getBullQueue()));let r=O$();r&&e.push(new fT.BullAdapter(r.getBullQueue())),e.push(new fT.BullAdapter(tP.queue.getBullQueue())),e.push(new fT.BullAdapter(Kb.queue.getQueue().getBullQueue()));let n=new PEt.KoaAdapter;return(0,DEt.createBullBoard)({queues:e,serverAdapter:n}),n.setBasePath(_Qr),n.registerPlugin()}async function hde(){await In.shutdown()}var DEt,fT,PEt,jn,_Qr,Bh=y(()=>{"use strict";F();tt();DEt=require("@bull-board/api"),fT=require("@bull-board/api/bullAdapter"),PEt=require("@bull-board/koa");pue();Gle();x$();Fb();jn=new In.BudibaseQueue(In.JobQueue.AUTOMATION,{removeStalledCb:e=>Nbt(e),jobTags:e=>({"automation.id":e.automation._id,"automation.name":e.automation.name,"automation.appId":e.automation.appId,"automation.createdAt":e.automation.createdAt,"automation.trigger":e.automation.definition.trigger.stepId})}),_Qr="/bulladmin";o(kEt,"init");o(hde,"shutdown")});var MEt,UEt,NEt,LEt,gde,EQr,vQr,FEt,BEt=y(()=>{"use strict";MEt=require("mailparser"),UEt=require("html-to-text"),NEt=5e4,LEt=`
1088
1088
 
1089
- [Email body truncated due to size limit]`,gde=o((e=[])=>e.reduce((t,{address:r})=>(r&&t.push(r),t),[]),"extractAddresses"),EQr=o(e=>{if(!e)return{body:e,truncated:!1};if(e.length<=NEt)return{body:e,truncated:!1};let t=Math.max(0,NEt-LEt.length);return{body:`${e.slice(0,t)}${LEt}`,truncated:!0}},"applyBodyLimit"),vQr=o(async e=>{if(e.source)try{let t=await(0,MEt.simpleParser)(e.source),r=t.text?.trim();return r||(t.html?(0,UEt.htmlToText)(t.html):void 0)}catch(t){console.log("[email trigger] failed to parse message body",t);return}},"getBodyText"),FEt=o(async e=>{let t=await vQr(e),{body:r,truncated:n}=EQr(t),i=gde(e.envelope?.to),s=gde(e.envelope?.cc);return{from:gde(e.envelope?.from).join(", ")||"unknown",to:i.join(", ")||"unknown",cc:s,subject:e.envelope?.subject,sentAt:e.envelope?.date?.toISOString(),bodyText:r,bodyTextTruncated:n}},"toOutputFields")});var qEt,WEt,jEt=y(()=>{"use strict";qEt=require("imapflow"),WEt=o(async e=>{if(!e)throw new Error("Email trigger inputs are required");return new qEt.ImapFlow({host:e.host,port:e.port,secure:e.secure,auth:{user:e.username,pass:e.password},logger:!1})},"getClient")});var $Et,VEt,GEt=y(()=>{"use strict";$Et={uid:!0,flags:!0,envelope:!0,bodyStructure:!0,internalDate:!0,size:!0,source:!0},VEt=o(async(e,t,r)=>{await e.connect();let n=await e.mailboxOpen(t);if(!n.exists)return[];if(r==null){let s=await e.fetchOne(n.exists,$Et);return s?[s]:[]}let i=r+1;return i>=n.uidNext?[]:e.fetchAll({uid:`${i}:*`},$Et)},"fetchMessages")});var HEt,KEt=y(()=>{"use strict";HEt=o(e=>{let t=e.uid;return Number(typeof t=="bigint"?t:t||0)},"getMessageId")});var SQr,QEt,zEt=y(()=>{"use strict";BEt();jEt();GEt();KEt();vfe();SQr="INBOX",QEt=o(async(e,t)=>{if(!t)throw new Error("Email trigger inputs are required");let r=null,n=t.mailbox||SQr,i=e;try{r=await WEt(t);let s=await x_t(i,n),a=await VEt(r,n,s);if(console.info(`[email trigger] fetched ${a.length} messages from mailbox ${n}`),!a.length)return{proceed:!1,reason:"no new mail"};let u=a.map(d=>({message:d,uid:HEt(d)})).filter(d=>d.uid>0);if(!u.length)return{proceed:!1,reason:"no message id"};u.sort((d,p)=>d.uid-p.uid);let c=u[u.length-1]?.uid;if(!c)return{proceed:!1,reason:"no message id"};if(!s)return await wfe(i,n,c),{proceed:!1,reason:"init, now waiting"};let l=u.filter(({uid:d})=>d>s);return l.length?(await wfe(i,n,c),{proceed:!0,messages:await Promise.all(l.map(({message:d})=>FEt(d)))}):{proceed:!1,reason:"no new mail"}}catch(s){console.log(s)}finally{r&&await r.logout().catch(console.log)}return{proceed:!1,reason:"unknown"}},"checkMail")});function TQr(e){if(!e||typeof e!="object")return!1;let t=e,r="Database does not exist.";return t.reason===r||t.message?.includes(r)===!0}function mV(e){return!!e?.startsWith("repeat:")}async function YEt(e,t,r){let n=0;try{let i=await jn.getBullQueue().getRepeatableJobs();for(let s of i)s.key.includes(e)&&(await jn.getBullQueue().removeRepeatableByKey(s.key),n++)}catch(i){console.log("Failed to remove legacy repeatable job",{appId:t,automationId:r,jobId:e,err:i})}return n}function yde(e){return[{_logKey:"automation",trigger:e.data.automation.definition.trigger.event},{_logKey:"bull",jobId:e.id}]}async function XEt(e){return bde.default.trace("processEvent",async t=>{let r=e.data.event.appId,n=e.data.automation._id;t.addTags({appId:r,automationId:n,job:{id:e.id,name:e.name,attemptsMade:e.attemptsMade,attempts:e.opts.attempts,priority:e.opts.priority,delay:e.opts.delay,repeat:e.opts.repeat,backoff:e.opts.backoff,lifo:e.opts.lifo,timeout:e.opts.timeout,jobId:e.opts.jobId,removeOnComplete:e.opts.removeOnComplete,removeOnFail:e.opts.removeOnFail,stackTraceLimit:e.opts.stackTraceLimit,preventParsingData:e.opts.preventParsingData}});let i=e.data.automation?e.data.automation.definition.trigger:null,s=o(async()=>{try{return await bde.default.trace("task",async()=>{if(Ja(i)){let{proceed:l,...f}=await QEt(e.data.automation._id,i.inputs);if(l===!1)return{skipped:!0};let{messages:d}=f;return d?(await Promise.all(d?.map(async p=>{let m=(0,JEt.cloneDeep)(e);m.data.event={...m.data.event,...p};let h=o(()=>_de.run(m),"runFn");await ot.addAutomation(h,{automationId:n})})),{}):{skipped:!0}}i&&Cp(i)&&!e.data.event.timestamp&&(e.data.event.timestamp=Date.now()),console.log("automation running",...yde(e));let u=o(()=>_de.run(e),"runFn"),c=await ot.addAutomation(u,{automationId:n});return console.log("automation completed",...yde(e)),c})}catch(a){return t.addTags({error:!0}),console.error("automation was unable to run",a,...yde(e)),e.opts.repeat&&e.id&&TQr(a)&&await Hle(e.id),{err:a}}},"task");return await I.doInAutomationContext({workspaceId:r,automationId:n,task:s})})}async function ZEt(e,t){return SD("automationTestHistory",e._id,r=>(r&&Array.isArray(r.history)?r.history.push(t):r={history:[t]},r))}async function Lle(e){let t=[],r=await jn.getBullQueue().getRepeatableJobs();for(let i of r)(i.key.includes(`${e}_cron`)||i.key.includes(`${e}_email`))&&(t.push(jn.getBullQueue().removeRepeatableByKey(i.key)),i.id&&t.push(jn.getBullQueue().removeJobs(i.id)));return{count:(await Promise.all(t)).length/2}}async function Hle(e){let t=await jn.getBullQueue().getRepeatableJobs();for(let r of t)r.id===e&&await jn.getBullQueue().removeRepeatableByKey(r.key);console.log(`jobId=${e} disabled`)}async function kyt(){let e=I.getProdWorkspaceDB(),t=(await e.allDocs(bct({include_docs:!0}))).rows.map(r=>r.doc);for(let r of t)r._deleted=!0;await e.bulkDocs(t)}function K0(e){let t=e?e.definition.trigger:null;return t&&Cp(t)?(t?.inputs).cron===xwe:!1}async function q0(e,t){let r=t?t.definition.trigger:null,n=!1,i=0;if(!r||t.disabled||K0(t))return{enabled:n,automation:t,clearedRepeatableJobs:i};if(Cp(r)){let a=r.inputs.cron||"",u=be.cron.validate(a);if(!u.valid)throw new Error(`Invalid automation CRON "${a}" - ${u.err.join(", ")}`);let c=r.cronJobId;if(c&&mV(c)){let f=await YEt(c,e,t._id);i+=f}let l=!c||mV(c)?`${e}_cron_${Ne.newid()}`:c;return await jn.add({automation:t,event:{appId:e}},{repeat:{cron:a},jobId:l}),r.cronJobId=l,r.cronJobId!==c&&await U.doWithDB(e,async f=>{let d=await f.put(t);t._id=d.id,t._rev=d.rev}),n=!0,{enabled:n,automation:t,clearedRepeatableJobs:i}}if(Ja(r)){let s=r.inputs;if(!s||!AQr(s))return console.log("Automation email trigger inputs are not valid, disabling.",{automationId:t._id,appId:e}),{enabled:!1,automation:t,clearedRepeatableJobs:i};let a=r.cronJobId;if(a&&mV(a)){let c=await YEt(a,e,t._id);i+=c}let u=!a||mV(a)?`${e}_email_${Ne.newid()}`:a;return await jn.add({automation:t,event:{appId:e}},{repeat:{every:3e4},jobId:u}),r.cronJobId=u,r.cronJobId!==a&&await U.doWithDB(e,async c=>{let l=await c.put(t);t._id=l.id,t._rev=l.rev}),n=!0,{enabled:n,automation:t,clearedRepeatableJobs:i}}return{enabled:n,automation:t,clearedRepeatableJobs:i}}function AQr(e){return!!(e&&e.host&&e.port&&e.username&&e.password)}async function wde(e){await Lle(e)}var bde,JEt,_de,Mh=y(()=>{"use strict";F();tt();_e();P();bde=q(require("dd-trace"));Ie();vD();BW();bs();Bh();zEt();JEt=require("lodash");_h()&&(_de=new wh("automation"));o(TQr,"isWorkspaceDatabaseMissing");o(mV,"isLegacyRepeatableJobId");o(YEt,"removeLegacyRepeatableJob");o(yde,"loggingArgs");o(XEt,"processEvent");o(ZEt,"updateTestHistory");o(Lle,"disableAllCrons");o(Hle,"disableCronById");o(kyt,"clearMetadata");o(K0,"isRebootTrigger");o(q0,"enableCronOrEmailTrigger");o(AQr,"isValidEmailTriggerInputs");o(wde,"cleanupAutomations")});function rP(e,t){return t.cron?`${e}:cron:${t.cron}`:`${e}:every:${t.every}`}async function RQr(){return(await I.getWorkspaceDB().allDocs(Nu(null,{include_docs:!0}))).rows.map(r=>r.doc)}async function evt(){if(H.isInThread()||!H.SELF_HOSTED||H.MULTI_TENANCY)return;let t=await jn.getBullQueue().getRepeatableJobs(),r=new Set;for(let i of t)i.id&&r.add(rP(i.id,{cron:i.cron,every:i.every}));let n=await U.getAllWorkspaces({dev:!1,idsOnly:!0});for(let i of n)await I.doInWorkspaceContext(i,async()=>{let s=await RQr(),a=[];for(let u of s){let c=u.definition.trigger;if(!(!c||u.disabled||K0(u))){if(Cp(c)){let f=c.inputs.cron||"",d=c.cronJobId?.toString(),p=d?rP(d,{cron:f}):null;(!p||!r.has(p))&&a.push(q0(i,u).then(m=>{let h=m.automation.definition.trigger.cronJobId?.toString();h&&r.add(rP(h,{cron:f}))}))}else if(Ja(c)){let f=c.cronJobId?.toString(),d=f?rP(f,{every:3e4}):null;(!d||!r.has(d))&&a.push(q0(i,u).then(p=>{let m=p.automation.definition.trigger.cronJobId?.toString();m&&r.add(rP(m,{every:3e4}))}))}}}a.length&&console.log(`Rehydrating ${a.length} scheduled automation triggers for workspace ${i}`),await Promise.all(a)})}var tvt=y(()=>{"use strict";F();P();Ie();$e();Bh();Mh();o(rP,"scheduledKey");o(RQr,"getAllAutomations");o(evt,"rehydrateScheduledTriggers")});async function rvt(){if(!_h())return;let e=jn.process(async t=>{await XEt(t)});return await evt(),await Mbt(),e}var hV=y(()=>{"use strict";Mh();Bh();up();tvt();vD();Bh();Bh();up();F$();o(rvt,"init")});var ivt,ovt,svt=y(()=>{"use strict";F();ivt=require("dd-trace"),ovt=o(async(e,t)=>{let r=await t(),n=I.getCurrentContext();if(!n||!n.cleanup)return r;let i=[];for(let s of n.cleanup)try{await ivt.tracer.trace("cleanup",async()=>{await s()})}catch(a){i.push(a)}if(delete n.cleanup,i.length>0)throw i[0];return r},"cleanupMiddleware")});async function uvt(e,t){let r=await t();return e.response.get("x-budibase-migrating-app")&&(console.log("Skipping migration redirect"),e.response.remove("x-budibase-migrating-app")),r}var avt,Ede=y(()=>{"use strict";_e();$e();Lh();avt=o(async(e,t)=>{let{appId:r}=e;return H.DISABLE_WORKSPACE_MIGRATIONS||!r?t():Oyt(e,t,r)},"workspaceMigrations");o(uvt,"skipMigrationRedirect")});function dvt(){let e=cvt.default.join(H.PLUGINS_DIR,"./**/*.tar.gz");lvt.default.watch(e,{ignored:"**/node_modules",awaitWriteFinish:{pollInterval:100,stabilityThreshold:250},usePolling:!0,interval:250}).on("all",async(t,r)=>{!r?.endsWith(".tar.gz")||!fvt.default.existsSync(r)||await we.doInTenant(ft.DEFAULT_TENANT_ID,async()=>{try{let n=r.split("/"),i=n[n.length-1];console.log("Importing plugin:",r),await Aae({name:i,path:r},"File Upload")}catch(n){let i=n?.message?n?.message:n;console.error("Failed to import plugin:",i)}})})}var cvt,lvt,fvt,pvt=y(()=>{"use strict";cvt=q(require("path"));$e();lvt=q(require("chokidar")),fvt=q(require("fs"));F();Iae();P();o(dvt,"watch")});function gvt(){return gV}async function IQr(e){if(!H.isTest()){let t=await kEt();e.use(t)}e.context.eventEmitter=af,e.context.auth={},e.use(Yi.routes()),e.use(Yi.allowedMethods())}async function OQr(){await use({backups:{processing:{exportAppFn:T.backups.exportApp,importAppFn:T.backups.importApp,statsFn:T.backups.calculateBackupStats}}})}async function yvt(e={}){let{app:t,server:r}=e;if(gV!=="uninitialised"&&!e.force){console.log("Budibase already started");return}if(gV="starting",Sct(),H.BUDIBASE_ENVIRONMENT&&console.log(`service running environment: "${H.BUDIBASE_ENVIRONMENT}"`),t&&r&&!H.CLUSTER_MODE){console.log(`Budibase running on ${JSON.stringify(r.address())}`);let a=r.address();H._set("PORT",a.port)}console.log("Emitting port event"),af.emitPort(H.PORT),console.log("Initialising file system"),lZe(),console.log("Initialising redis"),await Hct(),console.log("Initialising writethrough cache"),Ce.docWritethrough.init(),console.log("Initialising events"),fue(),console.log("Initialising feature flags"),Bn.init(),t&&r&&(console.log("Initialising websockets"),cft(t,r)),H.SELF_HOSTED&&!H.MULTI_TENANCY&&H.PLUGINS_DIR&&hvt.default.existsSync(H.PLUGINS_DIR)&&(console.log("Monitoring plugin directory"),dvt()),console.log("Checking for version updates"),await Ml.checkInstallVersion(),console.log("Initialising queues");let n=[];n.push(ue.processors.init(On.auditLogs.write)),n.push(Kb.queue.init()),_h()&&(n.push(rvt()),n.push(Ayt())),n.push(OQr()),n.push(T.dev.init()),t&&(console.log("Initialising routes"),await IQr(t));let i=L.BB_ADMIN_USER_EMAIL,s=L.BB_ADMIN_USER_PASSWORD;if(H.SELF_HOSTED&&!H.MULTI_TENANCY&&i&&s){console.log("Initialising admin user");let a=we.getTenantId();await we.doInTenant(a,async()=>{let u=await ze.doesUserExist(i);if(!(await Zmt())?.adminUser?.checked||!u)try{let l=await ze.UserDB.createAdminUser(i,a,{password:s,hashPassword:!0,requirePassword:!0,skipPasswordValidation:!0});H.isTest()&&await eht(l._id),console.log("Admin account automatically created for",i)}catch(l){throw Be.logAlert("Error creating initial admin user. Exiting.",l),l}})}L.BSON_BUFFER_SIZE&&mvt.default.setInternalBufferSize(L.BSON_BUFFER_SIZE),console.log("Initialising JS runner"),l$(),gV="ready"}var mvt,hvt,gV,vde=y(()=>{"use strict";F();tt();mvt=q(require("bson")),hvt=q(require("fs"));Sde();hV();Bh();$e();Ej();vD();ule();le();li();Wa();BS();pvt();Di();x$();Fb();gV="uninitialised";o(gvt,"getState");o(IQr,"initRoutes");o(OQr,"initPro");o(yvt,"startup")});var yr,Tde,Ze,Ade,Yb,dr,_vt=y(()=>{"use strict";wo();F();yr=new Av,Tde=yr.group(Mt(Ye.GLOBAL_BUILDER));Tde.lockMiddleware();Ze=yr.group(Mt(Ye.BUILDER));Ze.lockMiddleware();Ade=yr.group(Mt(Ye.CREATOR));Ade.lockMiddleware();Yb=yr.group(He.builderOrAdmin);Yb.lockMiddleware();dr=yr.group();dr.lockMiddleware()});var xt=y(()=>{"use strict";_vt()});async function Jb(e,t){t||e.throw(400,"App ID missing"),await SC.workspaceExists(t)||e.throw(400,`Provided app ID: ${t} - is invalid.`)}async function wvt(e){let t=e.params.appId;await Jb(e,t);let{body:r}=e.request,n=e.user?._id,i=await _o.triggerAppBackup(t,"manual",{name:r.name,createdBy:n});i||e.throw(500,"Unable to start backup."),e.body={backupId:i,message:"Backup triggered - process starting."}}async function Evt(e){let t=e.params.appId;await Jb(e,t);let r=e.params.backupId,n=e.request.body.name,i=await _o.triggerAppRestore(t,r,n,e.user?._id);i||e.throw(500,"Unable to start restore."),await ue.backup.appBackupRestored(i.metadata),e.body={restoreId:i?.restoreId,message:"Restore triggered - process starting."}}async function vvt(e){let t=e.params.appId;await Jb(e,t);let r=e.params.backupId;await _o.deleteAppBackup(r),e.body={message:"Backup deleted successfully."}}async function Svt(e){let t=I.getWorkspaceId();await Jb(e,t);let{backupIds:r}=e.request.body;(!Array.isArray(r)||r.length===0)&&e.throw(400,"backupIds must be a non-empty array");let n=await _o.deleteAppBackups(r),i=n.filter(a=>a.success).length,s=n.length-i;e.body={message:`${i} backups deleted successfully${s>0?`, ${s} failed`:""}.`,results:n,successCount:i,failureCount:s}}async function Tvt(e){let t=e.params.appId;await Jb(e,t);let r=e.request.body;r?.trigger&&(r.trigger=r.trigger.toLowerCase(),Object.values(Dp).includes(r.trigger)||e.throw(400,"Provided trigger is not a valid option.")),e.body=await _o.fetchAppBackups(t,{paginate:!0,...r})}async function Avt(e){let t=e.params.appId;await Jb(e,t);let r=e.params.backupId,n=e.request.body;e.body=await _o.updateAppBackup(r,n.name)}async function Rvt(e){let t=e.params.appId;await Jb(e,t);let r=e.params.backupId,{metadata:n,stream:i}=await _o.getBackupDownloadStream(r);e.attachment(`backup-${n.timestamp}.tar.gz`),e.body=i}var Ivt=y(()=>{"use strict";F();P();tt();o(Jb,"checkAppId");o(wvt,"manualBackup");o(Evt,"importBackup");o(vvt,"deleteBackup");o(Svt,"deleteBackups");o(Tvt,"fetchBackups");o(Avt,"updateBackup");o(Rvt,"downloadBackup")});function CQr(){return He.joiValidator.body(Xb.default.object({trigger:Xb.default.string().valid(...Object.values(Dp)),type:Xb.default.string().valid(...Object.values(XT)),startDate:Xb.default.date(),endDate:Xb.default.date(),page:Xb.default.string()}))}var Ovt,Xb,xvt,Cvt,Dvt=y(()=>{"use strict";Ovt=q(require("@koa/router")),Xb=q(require("joi"));F();P();Ivt();xvt=new Ovt.default;o(CQr,"validateBackupSearch");xvt.post("/api/apps/:appId/backups",He.builderOrAdmin,wvt).post("/api/apps/:appId/backups/search",He.builderOrAdmin,CQr(),Tvt).get("/api/apps/:appId/backups/:backupId/file",He.builderOrAdmin,Rvt).patch("/api/apps/:appId/backups/:backupId",He.builderOrAdmin,Avt).delete("/api/apps/:appId/backups/:backupId",He.builderOrAdmin,vvt).delete("/api/apps/:appId/backups",He.builderOrAdmin,Svt).post("/api/apps/:appId/backups/:backupId/import",He.builderOrAdmin,Evt);Cvt=xvt});async function Pvt(e){e.body={encryptionKeyAvailable:qc.isEncryptionKeyAvailable()}}async function kvt(e){e.body={variables:await qc.fetch()}}async function Nvt(e){let{name:t,production:r,development:n}=e.request.body;await qc.update(t,{production:r,development:n});let i=["production"];r!==n&&i.push("development"),await ue.environmentVariable.created(t,i),e.body={message:`Environment variable "${t}" created.`}}async function Lvt(e){let{production:t,development:r}=e.request.body,n=e.params.varName;await qc.update(n,{production:t,development:r}),e.body={message:`Environment variable "${n}" updated.`}}async function Mvt(e){let t=e.params.varName;await qc.remove(t),await ue.environmentVariable.deleted(t),e.body={message:`Environment variable "${t}" deleted.`}}var Uvt=y(()=>{"use strict";F();P();tt();o(Pvt,"status");o(kvt,"fetch");o(Nvt,"create");o(Lvt,"update");o(Mvt,"destroy")});function Fvt(){return He.joiValidator.body(nP.default.object({name:nP.default.string().optional(),production:nP.default.string().required(),development:nP.default.string().required()}))}var Bvt,nP,qvt,Wvt,jvt=y(()=>{"use strict";Bvt=q(require("@koa/router")),nP=q(require("joi"));F();Uvt();qvt=new Bvt.default;o(Fvt,"buildEnvVarUpdateValidator");qvt.get("/api/env/variables/status",He.builderOrAdmin,Pvt).get("/api/env/variables",He.builderOrAdmin,kvt).post("/api/env/variables",He.builderOrAdmin,Fvt(),Nvt).patch("/api/env/variables/:varName",He.builderOrAdmin,Fvt(),Lvt).delete("/api/env/variables/:varName",He.builderOrAdmin,Mvt);Wvt=qvt});async function iP(e,t){return await Bn.isEnabled("AI_RAG")||e.throw(404),t()}var $vt=y(()=>{"use strict";F();P();o(iP,"aiRagEnabled")});async function Hvt(e){let t=e.query.aiconfigId;typeof t!="string"&&e.throw(400,"Invalid aiconfig ID"),e.body=await T.ai.agents.getAvailableToolsMetadata(t)}async function Kvt(e){let t=await T.ai.agents.fetch();e.body={agents:t.map(yV)}}async function Qvt(e){let t=e.request.body,r=await Bn.isEnabled("AI_RAG"),n=e.user?._id,i=U.getGlobalIDFromUserMetadataID(n),s={name:t.name,description:t.description,aiconfig:t.aiconfig,promptInstructions:t.promptInstructions,goal:t.goal,icon:t.icon,iconColor:t.iconColor,live:t.live,_deleted:!1,createdBy:i,enabledTools:t.enabledTools,embeddingModel:r?t.embeddingModel:void 0,vectorDb:r?t.vectorDb:void 0,ragMinDistance:r?t.ragMinDistance:void 0,ragTopK:r?t.ragTopK:void 0,discordIntegration:t.discordIntegration,MSTeamsIntegration:t.MSTeamsIntegration},a=await T.ai.agents.create(s);e.body=yV(a),e.status=201}async function zvt(e){let t=e.request.body,r=await Bn.isEnabled("AI_RAG"),n={_id:t._id,_rev:t._rev,name:t.name,description:t.description,aiconfig:t.aiconfig,promptInstructions:t.promptInstructions,goal:t.goal,icon:t.icon,iconColor:t.iconColor,live:t.live,enabledTools:t.enabledTools,embeddingModel:r?t.embeddingModel:void 0,vectorDb:r?t.vectorDb:void 0,ragMinDistance:r?t.ragMinDistance:void 0,ragTopK:r?t.ragTopK:void 0,discordIntegration:t.discordIntegration,MSTeamsIntegration:t.MSTeamsIntegration},i=await T.ai.agents.update(n);e.body=yV(i),e.status=200}async function Yvt(e){let{agentId:t}=e.params,r=await T.ai.agents.getOrThrow(t),n=Gvt(e.request.body?.chatAppId),{chatAppId:i,endpointUrl:s,integration:a}=await Rde({agent:r,agentId:t,requestedChatAppId:n,validateIntegration:T.ai.deployments.discord.validateDiscordIntegration,resolveChatAppForAgent:T.ai.deployments.discord.resolveChatAppForAgent,buildEndpointUrl:T.ai.deployments.discord.buildDiscordWebhookUrl,beforeBuildEndpoint:async({applicationId:u,botToken:c,guildId:l})=>{await T.ai.deployments.discord.syncApplicationCommands(u,c,l)},persistIntegration:async(u,c)=>{await T.ai.agents.update({...r,discordIntegration:{...r.discordIntegration,chatAppId:u,interactionsEndpointUrl:c}})}});e.body={success:!0,chatAppId:i,interactionsEndpointUrl:s,inviteUrl:T.ai.deployments.discord.buildDiscordInviteUrl(a.applicationId)},e.status=200}async function Jvt(e){let{agentId:t}=e.params,r=await T.ai.agents.getOrThrow(t),n=Gvt(e.request.body?.chatAppId),{chatAppId:i,endpointUrl:s}=await Rde({agent:r,agentId:t,requestedChatAppId:n,validateIntegration:T.ai.deployments.MSTeams.validateMSTeamsIntegration,resolveChatAppForAgent:T.ai.deployments.MSTeams.resolveChatAppForAgent,buildEndpointUrl:T.ai.deployments.MSTeams.buildMSTeamsWebhookUrl,persistIntegration:async(a,u)=>{await T.ai.agents.update({...r,MSTeamsIntegration:{...r.MSTeamsIntegration,chatAppId:a,messagingEndpointUrl:u}})}});e.body={success:!0,chatAppId:i,messagingEndpointUrl:s},e.status=200}async function Xvt(e){let{agentId:t}=e.params,r=e.request.body?.enabled;typeof r!="boolean"&&e.throw(400,"enabled must be a boolean");let n=r,i=await T.ai.agents.getOrThrow(t);if(n)await Rde({agent:i,agentId:t,validateIntegration:T.ai.deployments.discord.validateDiscordIntegration,resolveChatAppForAgent:T.ai.deployments.discord.resolveChatAppForAgent,buildEndpointUrl:T.ai.deployments.discord.buildDiscordWebhookUrl,beforeBuildEndpoint:async({applicationId:s,botToken:a,guildId:u})=>{await T.ai.deployments.discord.syncApplicationCommands(s,a,u)},persistIntegration:async(s,a)=>{await T.ai.agents.update({...i,discordIntegration:{...i.discordIntegration,chatAppId:s,interactionsEndpointUrl:a}})}});else{let s=i.discordIntegration?.chatAppId?.trim();s&&await T.ai.deployments.discord.disableAgentOnChatApp(s,t),await T.ai.agents.update({...i,discordIntegration:{...i.discordIntegration,interactionsEndpointUrl:void 0,chatAppId:void 0}})}e.body={success:!0,enabled:n},e.status=200}async function Zvt(e){let t=await T.ai.agents.getOrThrow(e.params.agentId),r=e.user?._id,n=U.getGlobalIDFromUserMetadataID(r),i=await T.ai.agents.duplicate(t,n);e.body=yV(i),e.status=201}async function eSt(e){let t=e.params.agentId;await T.ai.agents.remove(t??""),e.body={deleted:!0},e.status=200}var Vvt,PQr,yV,Gvt,Rde,tSt=y(()=>{"use strict";F();P();le();Vvt="********",PQr="********",yV=o(e=>({...e,...e.discordIntegration?{discordIntegration:{...e.discordIntegration,...e.discordIntegration.publicKey?{publicKey:Vvt}:{},...e.discordIntegration.botToken?{botToken:Vvt}:{}}}:{},...e.MSTeamsIntegration?{MSTeamsIntegration:{...e.MSTeamsIntegration,...e.MSTeamsIntegration.appPassword?{appPassword:PQr}:{}}}:{}}),"obfuscateAgentSecrets"),Gvt=o(e=>{if(typeof e!="string")return;let t=e.trim();return t.length>0?t:void 0},"parseOptionalChatAppId"),Rde=o(async({agent:e,agentId:t,requestedChatAppId:r,validateIntegration:n,resolveChatAppForAgent:i,buildEndpointUrl:s,persistIntegration:a,beforeBuildEndpoint:u})=>{let c=n(e),f=(await i(t,r||c.chatAppId))._id;if(!f)throw new j("chatAppId is required",400);u&&await u(c);let d=await s(f,t);return await a(f,d),{chatAppId:f,endpointUrl:d,integration:c}},"configureDeploymentChannel");o(Hvt,"fetchTools");o(Kvt,"fetchAgents");o(Qvt,"createAgent");o(zvt,"updateAgent");o(Yvt,"syncAgentDiscordCommands");o(Jvt,"provisionAgentMSTeamsChannel");o(Xvt,"toggleAgentDiscordDeployment");o(Zvt,"duplicateAgent");o(eSt,"deleteAgent")});async function rSt(e){L.SELF_HOSTED&&!L.isDev()&&e.throw(500,"Budibase AI endpoints are not available in self-host");let t=await Rt.getLLMOrThrow(),r=Buffer.from(e.request.body.data,"base64"),n=await t.uploadFile(r,e.request.body.filename,e.request.body.contentType);e.body={file:n}}async function nSt(e){let r=(await ot.getQuotaUsage())?.monthly?.current?.budibaseAICredits??0;e.body={monthlyCredits:r}}async function iSt(e){L.SELF_HOSTED&&!L.isDev()&&e.throw(500,"Budibase AI endpoints are not available in self-host");let t=await Rt.getLLMOrThrow();e.body=await t.chat(Rt.LLMRequest.fromRequest(e.request.body))}var oSt=y(()=>{"use strict";F();tt();o(rSt,"uploadFile");o(nSt,"getAIQuotaUsage");o(iSt,"chatCompletion")});async function NQr(e,t){if(t.usageCaptured)return;t.sseBuffer+=e;let r=t.sseBuffer.indexOf(`
1089
+ [Email body truncated due to size limit]`,gde=o((e=[])=>e.reduce((t,{address:r})=>(r&&t.push(r),t),[]),"extractAddresses"),EQr=o(e=>{if(!e)return{body:e,truncated:!1};if(e.length<=NEt)return{body:e,truncated:!1};let t=Math.max(0,NEt-LEt.length);return{body:`${e.slice(0,t)}${LEt}`,truncated:!0}},"applyBodyLimit"),vQr=o(async e=>{if(e.source)try{let t=await(0,MEt.simpleParser)(e.source),r=t.text?.trim();return r||(t.html?(0,UEt.htmlToText)(t.html):void 0)}catch(t){console.log("[email trigger] failed to parse message body",t);return}},"getBodyText"),FEt=o(async e=>{let t=await vQr(e),{body:r,truncated:n}=EQr(t),i=gde(e.envelope?.to),s=gde(e.envelope?.cc);return{from:gde(e.envelope?.from).join(", ")||"unknown",to:i.join(", ")||"unknown",cc:s,subject:e.envelope?.subject,sentAt:e.envelope?.date?.toISOString(),bodyText:r,bodyTextTruncated:n}},"toOutputFields")});var qEt,WEt,jEt=y(()=>{"use strict";qEt=require("imapflow"),WEt=o(async e=>{if(!e)throw new Error("Email trigger inputs are required");return new qEt.ImapFlow({host:e.host,port:e.port,secure:e.secure,auth:{user:e.username,pass:e.password},logger:!1})},"getClient")});var $Et,VEt,GEt=y(()=>{"use strict";$Et={uid:!0,flags:!0,envelope:!0,bodyStructure:!0,internalDate:!0,size:!0,source:!0},VEt=o(async(e,t,r)=>{await e.connect();let n=await e.mailboxOpen(t);if(!n.exists)return[];if(r==null){let s=await e.fetchOne(n.exists,$Et);return s?[s]:[]}let i=r+1;return i>=n.uidNext?[]:e.fetchAll({uid:`${i}:*`},$Et)},"fetchMessages")});var HEt,KEt=y(()=>{"use strict";HEt=o(e=>{let t=e.uid;return Number(typeof t=="bigint"?t:t||0)},"getMessageId")});var SQr,QEt,zEt=y(()=>{"use strict";BEt();jEt();GEt();KEt();vfe();SQr="INBOX",QEt=o(async(e,t)=>{if(!t)throw new Error("Email trigger inputs are required");let r=null,n=t.mailbox||SQr,i=e;try{r=await WEt(t);let s=await x_t(i,n),a=await VEt(r,n,s);if(console.info(`[email trigger] fetched ${a.length} messages from mailbox ${n}`),!a.length)return{proceed:!1,reason:"no new mail"};let u=a.map(d=>({message:d,uid:HEt(d)})).filter(d=>d.uid>0);if(!u.length)return{proceed:!1,reason:"no message id"};u.sort((d,p)=>d.uid-p.uid);let c=u[u.length-1]?.uid;if(!c)return{proceed:!1,reason:"no message id"};if(!s)return await wfe(i,n,c),{proceed:!1,reason:"init, now waiting"};let l=u.filter(({uid:d})=>d>s);return l.length?(await wfe(i,n,c),{proceed:!0,messages:await Promise.all(l.map(({message:d})=>FEt(d)))}):{proceed:!1,reason:"no new mail"}}catch(s){console.log(s)}finally{r&&await r.logout().catch(console.log)}return{proceed:!1,reason:"unknown"}},"checkMail")});function TQr(e){if(!e||typeof e!="object")return!1;let t=e,r="Database does not exist.";return t.reason===r||t.message?.includes(r)===!0}function mV(e){return!!e?.startsWith("repeat:")}async function YEt(e,t,r){let n=0;try{let i=await jn.getBullQueue().getRepeatableJobs();for(let s of i)s.key.includes(e)&&(await jn.getBullQueue().removeRepeatableByKey(s.key),n++)}catch(i){console.log("Failed to remove legacy repeatable job",{appId:t,automationId:r,jobId:e,err:i})}return n}function yde(e){return[{_logKey:"automation",trigger:e.data.automation.definition.trigger.event},{_logKey:"bull",jobId:e.id}]}async function XEt(e){return bde.default.trace("processEvent",async t=>{let r=e.data.event.appId,n=e.data.automation._id;t.addTags({appId:r,automationId:n,job:{id:e.id,name:e.name,attemptsMade:e.attemptsMade,attempts:e.opts.attempts,priority:e.opts.priority,delay:e.opts.delay,repeat:e.opts.repeat,backoff:e.opts.backoff,lifo:e.opts.lifo,timeout:e.opts.timeout,jobId:e.opts.jobId,removeOnComplete:e.opts.removeOnComplete,removeOnFail:e.opts.removeOnFail,stackTraceLimit:e.opts.stackTraceLimit,preventParsingData:e.opts.preventParsingData}});let i=e.data.automation?e.data.automation.definition.trigger:null,s=o(async()=>{try{return await bde.default.trace("task",async()=>{if(Ja(i)){let{proceed:l,...f}=await QEt(e.data.automation._id,i.inputs);if(l===!1)return{skipped:!0};let{messages:d}=f;return d?(await Promise.all(d?.map(async p=>{let m=(0,JEt.cloneDeep)(e);m.data.event={...m.data.event,...p};let h=o(()=>_de.run(m),"runFn");await ot.addAutomation(h,{automationId:n})})),{}):{skipped:!0}}i&&Cp(i)&&!e.data.event.timestamp&&(e.data.event.timestamp=Date.now()),console.log("automation running",...yde(e));let u=o(()=>_de.run(e),"runFn"),c=await ot.addAutomation(u,{automationId:n});return console.log("automation completed",...yde(e)),c})}catch(a){return t.addTags({error:!0}),console.warn("automation was unable to run",a,...yde(e)),e.opts.repeat&&e.id&&TQr(a)&&await Hle(e.id),{err:a}}},"task");return await I.doInAutomationContext({workspaceId:r,automationId:n,task:s})})}async function ZEt(e,t){return SD("automationTestHistory",e._id,r=>(r&&Array.isArray(r.history)?r.history.push(t):r={history:[t]},r))}async function Lle(e){let t=[],r=await jn.getBullQueue().getRepeatableJobs();for(let i of r)(i.key.includes(`${e}_cron`)||i.key.includes(`${e}_email`))&&(t.push(jn.getBullQueue().removeRepeatableByKey(i.key)),i.id&&t.push(jn.getBullQueue().removeJobs(i.id)));return{count:(await Promise.all(t)).length/2}}async function Hle(e){let t=await jn.getBullQueue().getRepeatableJobs();for(let r of t)r.id===e&&await jn.getBullQueue().removeRepeatableByKey(r.key);console.log(`jobId=${e} disabled`)}async function kyt(){let e=I.getProdWorkspaceDB(),t=(await e.allDocs(bct({include_docs:!0}))).rows.map(r=>r.doc);for(let r of t)r._deleted=!0;await e.bulkDocs(t)}function K0(e){let t=e?e.definition.trigger:null;return t&&Cp(t)?(t?.inputs).cron===xwe:!1}async function q0(e,t){let r=t?t.definition.trigger:null,n=!1,i=0;if(!r||t.disabled||K0(t))return{enabled:n,automation:t,clearedRepeatableJobs:i};if(Cp(r)){let a=r.inputs.cron||"",u=be.cron.validate(a);if(!u.valid)throw new Error(`Invalid automation CRON "${a}" - ${u.err.join(", ")}`);let c=r.cronJobId;if(c&&mV(c)){let f=await YEt(c,e,t._id);i+=f}let l=!c||mV(c)?`${e}_cron_${Ne.newid()}`:c;return await jn.add({automation:t,event:{appId:e}},{repeat:{cron:a},jobId:l}),r.cronJobId=l,r.cronJobId!==c&&await U.doWithDB(e,async f=>{let d=await f.put(t);t._id=d.id,t._rev=d.rev}),n=!0,{enabled:n,automation:t,clearedRepeatableJobs:i}}if(Ja(r)){let s=r.inputs;if(!s||!AQr(s))return console.log("Automation email trigger inputs are not valid, disabling.",{automationId:t._id,appId:e}),{enabled:!1,automation:t,clearedRepeatableJobs:i};let a=r.cronJobId;if(a&&mV(a)){let c=await YEt(a,e,t._id);i+=c}let u=!a||mV(a)?`${e}_email_${Ne.newid()}`:a;return await jn.add({automation:t,event:{appId:e}},{repeat:{every:3e4},jobId:u}),r.cronJobId=u,r.cronJobId!==a&&await U.doWithDB(e,async c=>{let l=await c.put(t);t._id=l.id,t._rev=l.rev}),n=!0,{enabled:n,automation:t,clearedRepeatableJobs:i}}return{enabled:n,automation:t,clearedRepeatableJobs:i}}function AQr(e){return!!(e&&e.host&&e.port&&e.username&&e.password)}async function wde(e){await Lle(e)}var bde,JEt,_de,Mh=y(()=>{"use strict";F();tt();_e();P();bde=q(require("dd-trace"));Ie();vD();BW();bs();Bh();zEt();JEt=require("lodash");_h()&&(_de=new wh("automation"));o(TQr,"isWorkspaceDatabaseMissing");o(mV,"isLegacyRepeatableJobId");o(YEt,"removeLegacyRepeatableJob");o(yde,"loggingArgs");o(XEt,"processEvent");o(ZEt,"updateTestHistory");o(Lle,"disableAllCrons");o(Hle,"disableCronById");o(kyt,"clearMetadata");o(K0,"isRebootTrigger");o(q0,"enableCronOrEmailTrigger");o(AQr,"isValidEmailTriggerInputs");o(wde,"cleanupAutomations")});function rP(e,t){return t.cron?`${e}:cron:${t.cron}`:`${e}:every:${t.every}`}async function RQr(){return(await I.getWorkspaceDB().allDocs(Nu(null,{include_docs:!0}))).rows.map(r=>r.doc)}async function evt(){if(H.isInThread()||!H.SELF_HOSTED||H.MULTI_TENANCY)return;let t=await jn.getBullQueue().getRepeatableJobs(),r=new Set;for(let i of t)i.id&&r.add(rP(i.id,{cron:i.cron,every:i.every}));let n=await U.getAllWorkspaces({dev:!1,idsOnly:!0});for(let i of n)await I.doInWorkspaceContext(i,async()=>{let s=await RQr(),a=[];for(let u of s){let c=u.definition.trigger;if(!(!c||u.disabled||K0(u))){if(Cp(c)){let f=c.inputs.cron||"",d=c.cronJobId?.toString(),p=d?rP(d,{cron:f}):null;(!p||!r.has(p))&&a.push(q0(i,u).then(m=>{let h=m.automation.definition.trigger.cronJobId?.toString();h&&r.add(rP(h,{cron:f}))}))}else if(Ja(c)){let f=c.cronJobId?.toString(),d=f?rP(f,{every:3e4}):null;(!d||!r.has(d))&&a.push(q0(i,u).then(p=>{let m=p.automation.definition.trigger.cronJobId?.toString();m&&r.add(rP(m,{every:3e4}))}))}}}a.length&&console.log(`Rehydrating ${a.length} scheduled automation triggers for workspace ${i}`),await Promise.all(a)})}var tvt=y(()=>{"use strict";F();P();Ie();$e();Bh();Mh();o(rP,"scheduledKey");o(RQr,"getAllAutomations");o(evt,"rehydrateScheduledTriggers")});async function rvt(){if(!_h())return;let e=jn.process(async t=>{await XEt(t)});return await evt(),await Mbt(),e}var hV=y(()=>{"use strict";Mh();Bh();up();tvt();vD();Bh();Bh();up();F$();o(rvt,"init")});var ivt,ovt,svt=y(()=>{"use strict";F();ivt=require("dd-trace"),ovt=o(async(e,t)=>{let r=await t(),n=I.getCurrentContext();if(!n||!n.cleanup)return r;let i=[];for(let s of n.cleanup)try{await ivt.tracer.trace("cleanup",async()=>{await s()})}catch(a){i.push(a)}if(delete n.cleanup,i.length>0)throw i[0];return r},"cleanupMiddleware")});async function uvt(e,t){let r=await t();return e.response.get("x-budibase-migrating-app")&&(console.log("Skipping migration redirect"),e.response.remove("x-budibase-migrating-app")),r}var avt,Ede=y(()=>{"use strict";_e();$e();Lh();avt=o(async(e,t)=>{let{appId:r}=e;return H.DISABLE_WORKSPACE_MIGRATIONS||!r?t():Oyt(e,t,r)},"workspaceMigrations");o(uvt,"skipMigrationRedirect")});function dvt(){let e=cvt.default.join(H.PLUGINS_DIR,"./**/*.tar.gz");lvt.default.watch(e,{ignored:"**/node_modules",awaitWriteFinish:{pollInterval:100,stabilityThreshold:250},usePolling:!0,interval:250}).on("all",async(t,r)=>{!r?.endsWith(".tar.gz")||!fvt.default.existsSync(r)||await we.doInTenant(ft.DEFAULT_TENANT_ID,async()=>{try{let n=r.split("/"),i=n[n.length-1];console.log("Importing plugin:",r),await Aae({name:i,path:r},"File Upload")}catch(n){let i=n?.message?n?.message:n;console.error("Failed to import plugin:",i)}})})}var cvt,lvt,fvt,pvt=y(()=>{"use strict";cvt=q(require("path"));$e();lvt=q(require("chokidar")),fvt=q(require("fs"));F();Iae();P();o(dvt,"watch")});function gvt(){return gV}async function IQr(e){if(!H.isTest()){let t=await kEt();e.use(t)}e.context.eventEmitter=af,e.context.auth={},e.use(Yi.routes()),e.use(Yi.allowedMethods())}async function OQr(){await use({backups:{processing:{exportAppFn:T.backups.exportApp,importAppFn:T.backups.importApp,statsFn:T.backups.calculateBackupStats}}})}async function yvt(e={}){let{app:t,server:r}=e;if(gV!=="uninitialised"&&!e.force){console.log("Budibase already started");return}if(gV="starting",Sct(),H.BUDIBASE_ENVIRONMENT&&console.log(`service running environment: "${H.BUDIBASE_ENVIRONMENT}"`),t&&r&&!H.CLUSTER_MODE){console.log(`Budibase running on ${JSON.stringify(r.address())}`);let a=r.address();H._set("PORT",a.port)}console.log("Emitting port event"),af.emitPort(H.PORT),console.log("Initialising file system"),lZe(),console.log("Initialising redis"),await Hct(),console.log("Initialising writethrough cache"),Ce.docWritethrough.init(),console.log("Initialising events"),fue(),console.log("Initialising feature flags"),Bn.init(),t&&r&&(console.log("Initialising websockets"),cft(t,r)),H.SELF_HOSTED&&!H.MULTI_TENANCY&&H.PLUGINS_DIR&&hvt.default.existsSync(H.PLUGINS_DIR)&&(console.log("Monitoring plugin directory"),dvt()),console.log("Checking for version updates"),await Ml.checkInstallVersion(),console.log("Initialising queues");let n=[];n.push(ue.processors.init(On.auditLogs.write)),n.push(Kb.queue.init()),_h()&&(n.push(rvt()),n.push(Ayt())),n.push(OQr()),n.push(T.dev.init()),t&&(console.log("Initialising routes"),await IQr(t));let i=L.BB_ADMIN_USER_EMAIL,s=L.BB_ADMIN_USER_PASSWORD;if(H.SELF_HOSTED&&!H.MULTI_TENANCY&&i&&s){console.log("Initialising admin user");let a=we.getTenantId();await we.doInTenant(a,async()=>{let u=await ze.doesUserExist(i);if(!(await Zmt())?.adminUser?.checked||!u)try{let l=await ze.UserDB.createAdminUser(i,a,{password:s,hashPassword:!0,requirePassword:!0,skipPasswordValidation:!0});H.isTest()&&await eht(l._id),console.log("Admin account automatically created for",i)}catch(l){throw Be.logAlert("Error creating initial admin user. Exiting.",l),l}})}L.BSON_BUFFER_SIZE&&mvt.default.setInternalBufferSize(L.BSON_BUFFER_SIZE),console.log("Initialising JS runner"),l$(),gV="ready"}var mvt,hvt,gV,vde=y(()=>{"use strict";F();tt();mvt=q(require("bson")),hvt=q(require("fs"));Sde();hV();Bh();$e();Ej();vD();ule();le();li();Wa();BS();pvt();Di();x$();Fb();gV="uninitialised";o(gvt,"getState");o(IQr,"initRoutes");o(OQr,"initPro");o(yvt,"startup")});var yr,Tde,Ze,Ade,Yb,dr,_vt=y(()=>{"use strict";wo();F();yr=new Av,Tde=yr.group(Mt(Ye.GLOBAL_BUILDER));Tde.lockMiddleware();Ze=yr.group(Mt(Ye.BUILDER));Ze.lockMiddleware();Ade=yr.group(Mt(Ye.CREATOR));Ade.lockMiddleware();Yb=yr.group(He.builderOrAdmin);Yb.lockMiddleware();dr=yr.group();dr.lockMiddleware()});var xt=y(()=>{"use strict";_vt()});async function Jb(e,t){t||e.throw(400,"App ID missing"),await SC.workspaceExists(t)||e.throw(400,`Provided app ID: ${t} - is invalid.`)}async function wvt(e){let t=e.params.appId;await Jb(e,t);let{body:r}=e.request,n=e.user?._id,i=await _o.triggerAppBackup(t,"manual",{name:r.name,createdBy:n});i||e.throw(500,"Unable to start backup."),e.body={backupId:i,message:"Backup triggered - process starting."}}async function Evt(e){let t=e.params.appId;await Jb(e,t);let r=e.params.backupId,n=e.request.body.name,i=await _o.triggerAppRestore(t,r,n,e.user?._id);i||e.throw(500,"Unable to start restore."),await ue.backup.appBackupRestored(i.metadata),e.body={restoreId:i?.restoreId,message:"Restore triggered - process starting."}}async function vvt(e){let t=e.params.appId;await Jb(e,t);let r=e.params.backupId;await _o.deleteAppBackup(r),e.body={message:"Backup deleted successfully."}}async function Svt(e){let t=I.getWorkspaceId();await Jb(e,t);let{backupIds:r}=e.request.body;(!Array.isArray(r)||r.length===0)&&e.throw(400,"backupIds must be a non-empty array");let n=await _o.deleteAppBackups(r),i=n.filter(a=>a.success).length,s=n.length-i;e.body={message:`${i} backups deleted successfully${s>0?`, ${s} failed`:""}.`,results:n,successCount:i,failureCount:s}}async function Tvt(e){let t=e.params.appId;await Jb(e,t);let r=e.request.body;r?.trigger&&(r.trigger=r.trigger.toLowerCase(),Object.values(Dp).includes(r.trigger)||e.throw(400,"Provided trigger is not a valid option.")),e.body=await _o.fetchAppBackups(t,{paginate:!0,...r})}async function Avt(e){let t=e.params.appId;await Jb(e,t);let r=e.params.backupId,n=e.request.body;e.body=await _o.updateAppBackup(r,n.name)}async function Rvt(e){let t=e.params.appId;await Jb(e,t);let r=e.params.backupId,{metadata:n,stream:i}=await _o.getBackupDownloadStream(r);e.attachment(`backup-${n.timestamp}.tar.gz`),e.body=i}var Ivt=y(()=>{"use strict";F();P();tt();o(Jb,"checkAppId");o(wvt,"manualBackup");o(Evt,"importBackup");o(vvt,"deleteBackup");o(Svt,"deleteBackups");o(Tvt,"fetchBackups");o(Avt,"updateBackup");o(Rvt,"downloadBackup")});function CQr(){return He.joiValidator.body(Xb.default.object({trigger:Xb.default.string().valid(...Object.values(Dp)),type:Xb.default.string().valid(...Object.values(XT)),startDate:Xb.default.date(),endDate:Xb.default.date(),page:Xb.default.string()}))}var Ovt,Xb,xvt,Cvt,Dvt=y(()=>{"use strict";Ovt=q(require("@koa/router")),Xb=q(require("joi"));F();P();Ivt();xvt=new Ovt.default;o(CQr,"validateBackupSearch");xvt.post("/api/apps/:appId/backups",He.builderOrAdmin,wvt).post("/api/apps/:appId/backups/search",He.builderOrAdmin,CQr(),Tvt).get("/api/apps/:appId/backups/:backupId/file",He.builderOrAdmin,Rvt).patch("/api/apps/:appId/backups/:backupId",He.builderOrAdmin,Avt).delete("/api/apps/:appId/backups/:backupId",He.builderOrAdmin,vvt).delete("/api/apps/:appId/backups",He.builderOrAdmin,Svt).post("/api/apps/:appId/backups/:backupId/import",He.builderOrAdmin,Evt);Cvt=xvt});async function Pvt(e){e.body={encryptionKeyAvailable:qc.isEncryptionKeyAvailable()}}async function kvt(e){e.body={variables:await qc.fetch()}}async function Nvt(e){let{name:t,production:r,development:n}=e.request.body;await qc.update(t,{production:r,development:n});let i=["production"];r!==n&&i.push("development"),await ue.environmentVariable.created(t,i),e.body={message:`Environment variable "${t}" created.`}}async function Lvt(e){let{production:t,development:r}=e.request.body,n=e.params.varName;await qc.update(n,{production:t,development:r}),e.body={message:`Environment variable "${n}" updated.`}}async function Mvt(e){let t=e.params.varName;await qc.remove(t),await ue.environmentVariable.deleted(t),e.body={message:`Environment variable "${t}" deleted.`}}var Uvt=y(()=>{"use strict";F();P();tt();o(Pvt,"status");o(kvt,"fetch");o(Nvt,"create");o(Lvt,"update");o(Mvt,"destroy")});function Fvt(){return He.joiValidator.body(nP.default.object({name:nP.default.string().optional(),production:nP.default.string().required(),development:nP.default.string().required()}))}var Bvt,nP,qvt,Wvt,jvt=y(()=>{"use strict";Bvt=q(require("@koa/router")),nP=q(require("joi"));F();Uvt();qvt=new Bvt.default;o(Fvt,"buildEnvVarUpdateValidator");qvt.get("/api/env/variables/status",He.builderOrAdmin,Pvt).get("/api/env/variables",He.builderOrAdmin,kvt).post("/api/env/variables",He.builderOrAdmin,Fvt(),Nvt).patch("/api/env/variables/:varName",He.builderOrAdmin,Fvt(),Lvt).delete("/api/env/variables/:varName",He.builderOrAdmin,Mvt);Wvt=qvt});async function iP(e,t){return await Bn.isEnabled("AI_RAG")||e.throw(404),t()}var $vt=y(()=>{"use strict";F();P();o(iP,"aiRagEnabled")});async function Hvt(e){let t=e.query.aiconfigId;typeof t!="string"&&e.throw(400,"Invalid aiconfig ID"),e.body=await T.ai.agents.getAvailableToolsMetadata(t)}async function Kvt(e){let t=await T.ai.agents.fetch();e.body={agents:t.map(yV)}}async function Qvt(e){let t=e.request.body,r=await Bn.isEnabled("AI_RAG"),n=e.user?._id,i=U.getGlobalIDFromUserMetadataID(n),s={name:t.name,description:t.description,aiconfig:t.aiconfig,promptInstructions:t.promptInstructions,goal:t.goal,icon:t.icon,iconColor:t.iconColor,live:t.live,_deleted:!1,createdBy:i,enabledTools:t.enabledTools,embeddingModel:r?t.embeddingModel:void 0,vectorDb:r?t.vectorDb:void 0,ragMinDistance:r?t.ragMinDistance:void 0,ragTopK:r?t.ragTopK:void 0,discordIntegration:t.discordIntegration,MSTeamsIntegration:t.MSTeamsIntegration},a=await T.ai.agents.create(s);e.body=yV(a),e.status=201}async function zvt(e){let t=e.request.body,r=await Bn.isEnabled("AI_RAG"),n={_id:t._id,_rev:t._rev,name:t.name,description:t.description,aiconfig:t.aiconfig,promptInstructions:t.promptInstructions,goal:t.goal,icon:t.icon,iconColor:t.iconColor,live:t.live,enabledTools:t.enabledTools,embeddingModel:r?t.embeddingModel:void 0,vectorDb:r?t.vectorDb:void 0,ragMinDistance:r?t.ragMinDistance:void 0,ragTopK:r?t.ragTopK:void 0,discordIntegration:t.discordIntegration,MSTeamsIntegration:t.MSTeamsIntegration},i=await T.ai.agents.update(n);e.body=yV(i),e.status=200}async function Yvt(e){let{agentId:t}=e.params,r=await T.ai.agents.getOrThrow(t),n=Gvt(e.request.body?.chatAppId),{chatAppId:i,endpointUrl:s,integration:a}=await Rde({agent:r,agentId:t,requestedChatAppId:n,validateIntegration:T.ai.deployments.discord.validateDiscordIntegration,resolveChatAppForAgent:T.ai.deployments.discord.resolveChatAppForAgent,buildEndpointUrl:T.ai.deployments.discord.buildDiscordWebhookUrl,beforeBuildEndpoint:async({applicationId:u,botToken:c,guildId:l})=>{await T.ai.deployments.discord.syncApplicationCommands(u,c,l)},persistIntegration:async(u,c)=>{await T.ai.agents.update({...r,discordIntegration:{...r.discordIntegration,chatAppId:u,interactionsEndpointUrl:c}})}});e.body={success:!0,chatAppId:i,interactionsEndpointUrl:s,inviteUrl:T.ai.deployments.discord.buildDiscordInviteUrl(a.applicationId)},e.status=200}async function Jvt(e){let{agentId:t}=e.params,r=await T.ai.agents.getOrThrow(t),n=Gvt(e.request.body?.chatAppId),{chatAppId:i,endpointUrl:s}=await Rde({agent:r,agentId:t,requestedChatAppId:n,validateIntegration:T.ai.deployments.MSTeams.validateMSTeamsIntegration,resolveChatAppForAgent:T.ai.deployments.MSTeams.resolveChatAppForAgent,buildEndpointUrl:T.ai.deployments.MSTeams.buildMSTeamsWebhookUrl,persistIntegration:async(a,u)=>{await T.ai.agents.update({...r,MSTeamsIntegration:{...r.MSTeamsIntegration,chatAppId:a,messagingEndpointUrl:u}})}});e.body={success:!0,chatAppId:i,messagingEndpointUrl:s},e.status=200}async function Xvt(e){let{agentId:t}=e.params,r=e.request.body?.enabled;typeof r!="boolean"&&e.throw(400,"enabled must be a boolean");let n=r,i=await T.ai.agents.getOrThrow(t);if(n)await Rde({agent:i,agentId:t,validateIntegration:T.ai.deployments.discord.validateDiscordIntegration,resolveChatAppForAgent:T.ai.deployments.discord.resolveChatAppForAgent,buildEndpointUrl:T.ai.deployments.discord.buildDiscordWebhookUrl,beforeBuildEndpoint:async({applicationId:s,botToken:a,guildId:u})=>{await T.ai.deployments.discord.syncApplicationCommands(s,a,u)},persistIntegration:async(s,a)=>{await T.ai.agents.update({...i,discordIntegration:{...i.discordIntegration,chatAppId:s,interactionsEndpointUrl:a}})}});else{let s=i.discordIntegration?.chatAppId?.trim();s&&await T.ai.deployments.discord.disableAgentOnChatApp(s,t),await T.ai.agents.update({...i,discordIntegration:{...i.discordIntegration,interactionsEndpointUrl:void 0,chatAppId:void 0}})}e.body={success:!0,enabled:n},e.status=200}async function Zvt(e){let t=await T.ai.agents.getOrThrow(e.params.agentId),r=e.user?._id,n=U.getGlobalIDFromUserMetadataID(r),i=await T.ai.agents.duplicate(t,n);e.body=yV(i),e.status=201}async function eSt(e){let t=e.params.agentId;await T.ai.agents.remove(t??""),e.body={deleted:!0},e.status=200}var Vvt,PQr,yV,Gvt,Rde,tSt=y(()=>{"use strict";F();P();le();Vvt="********",PQr="********",yV=o(e=>({...e,...e.discordIntegration?{discordIntegration:{...e.discordIntegration,...e.discordIntegration.publicKey?{publicKey:Vvt}:{},...e.discordIntegration.botToken?{botToken:Vvt}:{}}}:{},...e.MSTeamsIntegration?{MSTeamsIntegration:{...e.MSTeamsIntegration,...e.MSTeamsIntegration.appPassword?{appPassword:PQr}:{}}}:{}}),"obfuscateAgentSecrets"),Gvt=o(e=>{if(typeof e!="string")return;let t=e.trim();return t.length>0?t:void 0},"parseOptionalChatAppId"),Rde=o(async({agent:e,agentId:t,requestedChatAppId:r,validateIntegration:n,resolveChatAppForAgent:i,buildEndpointUrl:s,persistIntegration:a,beforeBuildEndpoint:u})=>{let c=n(e),f=(await i(t,r||c.chatAppId))._id;if(!f)throw new j("chatAppId is required",400);u&&await u(c);let d=await s(f,t);return await a(f,d),{chatAppId:f,endpointUrl:d,integration:c}},"configureDeploymentChannel");o(Hvt,"fetchTools");o(Kvt,"fetchAgents");o(Qvt,"createAgent");o(zvt,"updateAgent");o(Yvt,"syncAgentDiscordCommands");o(Jvt,"provisionAgentMSTeamsChannel");o(Xvt,"toggleAgentDiscordDeployment");o(Zvt,"duplicateAgent");o(eSt,"deleteAgent")});async function rSt(e){L.SELF_HOSTED&&!L.isDev()&&e.throw(500,"Budibase AI endpoints are not available in self-host");let t=await Rt.getLLMOrThrow(),r=Buffer.from(e.request.body.data,"base64"),n=await t.uploadFile(r,e.request.body.filename,e.request.body.contentType);e.body={file:n}}async function nSt(e){let r=(await ot.getQuotaUsage())?.monthly?.current?.budibaseAICredits??0;e.body={monthlyCredits:r}}async function iSt(e){L.SELF_HOSTED&&!L.isDev()&&e.throw(500,"Budibase AI endpoints are not available in self-host");let t=await Rt.getLLMOrThrow();e.body=await t.chat(Rt.LLMRequest.fromRequest(e.request.body))}var oSt=y(()=>{"use strict";F();tt();o(rSt,"uploadFile");o(nSt,"getAIQuotaUsage");o(iSt,"chatCompletion")});async function NQr(e,t){if(t.usageCaptured)return;t.sseBuffer+=e;let r=t.sseBuffer.indexOf(`
1090
1090
  `);for(;r!==-1;){let n=t.sseBuffer.slice(0,r).trim();if(t.sseBuffer=t.sseBuffer.slice(r+1),n.startsWith("data: ")){let i=n.slice(6);if(i&&i!=="[DONE]")try{let s=JSON.parse(i);s?.usage&&(t.usageCaptured=!0,await ES.incrementBudibaseAICreditsFromOpenAIUsage(s.usage).catch(()=>{}))}catch{}}r=t.sseBuffer.indexOf(`
1091
1091
  `)}}async function sSt(e){let{messages:t,model:r,stream:n}=e.request.body;if(t?.length||e.throw(400,"Missing required field: messages"),L.SELF_HOSTED&&!L.isDev()&&e.throw(500,"Budibase AI endpoints are not available in self-host"),r||e.throw(400,"Missing required field: model"),!r?.startsWith("budibase/"))throw new j(`Unsupported BBAI model: ${r}`,400);H.BBAI_LITELLM_KEY||e.throw(500,"BBAI_LITELLM_KEY not configured"),await ot.throwIfBudibaseAICreditsExceeded();let i={...e.request.body,metadata:{...e.request.body.metadata,tags:kQr()}},s=await fetch(`${H.LITELLM_URL.replace(/\/$/,"")}/chat/completions`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${H.BBAI_LITELLM_KEY}`},body:JSON.stringify(i)});if(n){s.body||e.throw(500,"Streaming error");let c=new TextDecoder,l=s.body.getReader(),f={sseBuffer:"",usageCaptured:!1};e.respond=!1,e.res.statusCode=s.status,s.headers.forEach((d,p)=>{e.res.setHeader(p,d)});try{for(;;){let{done:d,value:p}=await l.read();if(d)break;await NQr(c.decode(p,{stream:!0}),f),e.res.write(p)}e.res.end();return}catch(d){e.res.headersSent||e.throw(d?.status||500,d?.message||"Streaming error"),e.res.end();return}}let a=await s.text(),u=s.headers.get("content-type");e.status=s.status,u&&e.set("Content-Type",u);try{let c=JSON.parse(a);c?.usage&&await ES.incrementBudibaseAICreditsFromOpenAIUsage(c.usage).catch(()=>{}),e.body=c}catch{e.body=a}}var kQr,aSt=y(()=>{"use strict";F();tt();WD();$e();kQr=o(()=>{let e=["bbai-self"];try{let r=I.getTenantId();r&&e.push(`tenant:${r}`)}catch{}let t=I.getWorkspaceId();return t&&e.push(`workspace:${t}`),e},"getBBAITags");o(NQr,"parseStreamUsageFromChunk");o(sSt,"chatCompletionV2")});async function cSt(e){let{prompt:t}=e.request.body,n=Rt.generateCronExpression(t).messages.find(l=>l.role==="user")?.content;if(typeof n!="string")throw new Error("AI user message must be a string");let i=[{role:"user",content:n}],{chat:s,providerOptions:a}=await T.ai.llm.getDefaultLLMOrThrow(),c=(await(0,uSt.generateText)({model:s,messages:i,providerOptions:a?.(!1)})).text?.trim();c?.startsWith("Error generating cron:")?e.throw(400,c):e.body={message:c}}var uSt,lSt=y(()=>{"use strict";uSt=require("ai");tt();le();o(cSt,"generateCronExpression")});async function dSt(e){await I.ensureSnippetContext();let r=I.getCurrentContext()?.snippets||[],{prompt:n,bindings:i=[]}=e.request.body,a=Rt.generateJs(i,r).messages.find(m=>m.role==="system")?.content;if(typeof a!="string")throw new Error("AI system message must be a string");let u=[{role:"system",content:a},{role:"user",content:n}],{chat:c,providerOptions:l}=await T.ai.llm.getDefaultLLMOrThrow(),d=(await(0,fSt.generateText)({model:c,messages:u,providerOptions:l?.(!1)})).text||"",p=d.match(LQr);p&&(d=p[1]),e.body={code:d}}var fSt,LQr,pSt=y(()=>{"use strict";fSt=require("ai");F();tt();le();LQr=/```(?:\w+)?\n([\s\S]+?)\n```/;o(dSt,"generateJs")});async function mSt(e){let t=parseInt(H.TABLE_GENERATION_TIMEOUT_MS,10);!isNaN(t)&&t>0&&(e.req.setTimeout(t),e.res.setTimeout(t));let{prompt:r}=e.request.body,n,i=o(s=>{e.res.write(`data: ${JSON.stringify(s)}
1092
1092