@budibase/server 2.2.26 → 2.2.27-alpha.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 (779) hide show
  1. package/Dockerfile +1 -1
  2. package/__mocks__/aws-sdk.ts +20 -1
  3. package/__mocks__/node-fetch.ts +80 -0
  4. package/builder/assets/{bb-emblem.4e4717da.svg → bb-emblem.05f7ae7a.svg} +1 -1
  5. package/builder/assets/bg.29e85dd5.png +0 -0
  6. package/builder/assets/bulgaria.bd68393d.png +0 -0
  7. package/builder/assets/covanta.72c46c1e.png +0 -0
  8. package/builder/assets/index.3dd03883.css +6 -0
  9. package/builder/assets/index.77ae0e4d.js +1802 -0
  10. package/builder/assets/schnellecke.cf1837a8.png +0 -0
  11. package/builder/index.html +3 -3
  12. package/coverage/clover.xml +12565 -8055
  13. package/coverage/coverage-final.json +365 -276
  14. package/coverage/lcov-report/index.html +721 -466
  15. package/coverage/lcov-report/src/api/controllers/analytics.ts.html +9 -9
  16. package/coverage/lcov-report/src/api/controllers/apikeys.ts.html +6 -6
  17. package/coverage/lcov-report/src/api/controllers/application.ts.html +364 -268
  18. package/coverage/lcov-report/src/api/controllers/auth.ts.html +12 -12
  19. package/coverage/lcov-report/src/api/controllers/automation.ts.html +61 -61
  20. package/coverage/lcov-report/src/api/controllers/backup.ts.html +8 -8
  21. package/coverage/lcov-report/src/api/controllers/cloud.ts.html +89 -77
  22. package/coverage/lcov-report/src/api/controllers/component.ts.html +12 -12
  23. package/coverage/lcov-report/src/api/controllers/datasource.ts.html +122 -98
  24. package/coverage/lcov-report/src/api/controllers/deploy/Deployment.ts.html +21 -18
  25. package/coverage/lcov-report/src/api/controllers/deploy/index.html +21 -21
  26. package/coverage/lcov-report/src/api/controllers/deploy/index.ts.html +142 -196
  27. package/coverage/lcov-report/src/api/controllers/dev.ts.html +33 -33
  28. package/coverage/lcov-report/src/api/controllers/index.html +125 -125
  29. package/coverage/lcov-report/src/api/controllers/integration.ts.html +5 -5
  30. package/coverage/lcov-report/src/api/controllers/layout.ts.html +18 -18
  31. package/coverage/lcov-report/src/api/controllers/metadata.ts.html +11 -11
  32. package/coverage/lcov-report/src/api/controllers/migrations.ts.html +6 -6
  33. package/coverage/lcov-report/src/api/controllers/permission.ts.html +35 -35
  34. package/coverage/lcov-report/src/api/controllers/plugin/file.ts.html +20 -20
  35. package/coverage/lcov-report/src/api/controllers/plugin/github.ts.html +62 -62
  36. package/coverage/lcov-report/src/api/controllers/plugin/index.html +72 -72
  37. package/coverage/lcov-report/src/api/controllers/plugin/index.ts.html +150 -135
  38. package/coverage/lcov-report/src/api/controllers/plugin/npm.ts.html +56 -56
  39. package/coverage/lcov-report/src/api/controllers/plugin/uploaders.ts.html +11 -11
  40. package/coverage/lcov-report/src/api/controllers/plugin/url.ts.html +18 -18
  41. package/coverage/lcov-report/src/api/controllers/plugin/utils.ts.html +20 -20
  42. package/coverage/lcov-report/src/api/controllers/public/applications.ts.html +75 -24
  43. package/coverage/lcov-report/src/api/controllers/public/index.html +58 -58
  44. package/coverage/lcov-report/src/api/controllers/public/mapping/applications.ts.html +7 -7
  45. package/coverage/lcov-report/src/api/controllers/public/mapping/index.html +25 -25
  46. package/coverage/lcov-report/src/api/controllers/public/mapping/index.ts.html +9 -9
  47. package/coverage/lcov-report/src/api/controllers/public/mapping/queries.ts.html +8 -8
  48. package/coverage/lcov-report/src/api/controllers/public/mapping/rows.ts.html +4 -4
  49. package/coverage/lcov-report/src/api/controllers/public/mapping/tables.ts.html +4 -4
  50. package/coverage/lcov-report/src/api/controllers/public/mapping/users.ts.html +4 -4
  51. package/coverage/lcov-report/src/api/controllers/public/queries.ts.html +15 -15
  52. package/coverage/lcov-report/src/api/controllers/public/rows.ts.html +21 -21
  53. package/coverage/lcov-report/src/api/controllers/public/tables.ts.html +21 -21
  54. package/coverage/lcov-report/src/api/controllers/public/users.ts.html +27 -27
  55. package/coverage/lcov-report/src/api/controllers/public/utils.ts.html +8 -8
  56. package/coverage/lcov-report/src/api/controllers/query/import/index.html +8 -8
  57. package/coverage/lcov-report/src/api/controllers/query/import/index.ts.html +11 -11
  58. package/coverage/lcov-report/src/api/controllers/query/import/sources/base/index.html +14 -14
  59. package/coverage/lcov-report/src/api/controllers/query/import/sources/base/index.ts.html +14 -14
  60. package/coverage/lcov-report/src/api/controllers/query/import/sources/base/openapi.ts.html +8 -8
  61. package/coverage/lcov-report/src/api/controllers/query/import/sources/curl.ts.html +12 -12
  62. package/coverage/lcov-report/src/api/controllers/query/import/sources/index.html +23 -23
  63. package/coverage/lcov-report/src/api/controllers/query/import/sources/openapi2.ts.html +16 -16
  64. package/coverage/lcov-report/src/api/controllers/query/import/sources/openapi3.ts.html +20 -20
  65. package/coverage/lcov-report/src/api/controllers/query/import/sources/tests/curl/curl.spec.js.html +391 -0
  66. package/coverage/lcov-report/src/api/controllers/query/import/sources/tests/curl/index.html +116 -0
  67. package/coverage/lcov-report/src/api/controllers/query/import/sources/tests/openapi2/index.html +116 -0
  68. package/coverage/lcov-report/src/api/controllers/query/import/sources/tests/openapi2/openapi2.spec.js.html +796 -0
  69. package/coverage/lcov-report/src/api/controllers/query/import/sources/tests/openapi3/index.html +116 -0
  70. package/coverage/lcov-report/src/api/controllers/query/import/sources/tests/openapi3/openapi3.spec.js.html +805 -0
  71. package/coverage/lcov-report/src/api/controllers/query/import/tests/index.html +116 -0
  72. package/coverage/lcov-report/src/api/controllers/query/import/tests/index.spec.js.html +568 -0
  73. package/coverage/lcov-report/src/api/controllers/query/index.html +20 -20
  74. package/coverage/lcov-report/src/api/controllers/query/index.ts.html +131 -107
  75. package/coverage/lcov-report/src/api/controllers/query/validation.ts.html +11 -11
  76. package/coverage/lcov-report/src/api/controllers/role.ts.html +9 -9
  77. package/coverage/lcov-report/src/api/controllers/routing.ts.html +10 -10
  78. package/coverage/lcov-report/src/api/controllers/row/ExternalRequest.ts.html +56 -41
  79. package/coverage/lcov-report/src/api/controllers/row/external.ts.html +87 -57
  80. package/coverage/lcov-report/src/api/controllers/row/index.html +66 -66
  81. package/coverage/lcov-report/src/api/controllers/row/index.ts.html +26 -26
  82. package/coverage/lcov-report/src/api/controllers/row/internal.ts.html +171 -96
  83. package/coverage/lcov-report/src/api/controllers/row/internalSearch.ts.html +146 -146
  84. package/coverage/lcov-report/src/api/controllers/row/staticFormula.ts.html +30 -21
  85. package/coverage/lcov-report/src/api/controllers/row/utils.ts.html +143 -26
  86. package/coverage/lcov-report/src/api/controllers/screen.ts.html +31 -31
  87. package/coverage/lcov-report/src/api/controllers/script.ts.html +19 -19
  88. package/coverage/lcov-report/src/api/controllers/static/index.html +18 -18
  89. package/coverage/lcov-report/src/api/controllers/static/index.ts.html +56 -71
  90. package/coverage/lcov-report/src/api/controllers/table/bulkFormula.ts.html +61 -61
  91. package/coverage/lcov-report/src/api/controllers/table/external.ts.html +56 -50
  92. package/coverage/lcov-report/src/api/controllers/table/index.html +51 -51
  93. package/coverage/lcov-report/src/api/controllers/table/index.ts.html +157 -70
  94. package/coverage/lcov-report/src/api/controllers/table/internal.ts.html +68 -71
  95. package/coverage/lcov-report/src/api/controllers/table/utils.ts.html +109 -112
  96. package/coverage/lcov-report/src/api/controllers/templates.ts.html +21 -21
  97. package/coverage/lcov-report/src/api/controllers/user.ts.html +161 -137
  98. package/coverage/lcov-report/src/api/controllers/view/exporters.ts.html +64 -19
  99. package/coverage/lcov-report/src/api/controllers/view/index.html +38 -38
  100. package/coverage/lcov-report/src/api/controllers/view/index.ts.html +97 -133
  101. package/coverage/lcov-report/src/api/controllers/view/tests/index.html +116 -0
  102. package/coverage/lcov-report/src/api/controllers/view/tests/viewBuilder.spec.js.html +277 -0
  103. package/coverage/lcov-report/src/api/controllers/view/utils.ts.html +31 -31
  104. package/coverage/lcov-report/src/api/controllers/view/viewBuilder.ts.html +37 -37
  105. package/coverage/lcov-report/src/api/controllers/webhook.ts.html +78 -72
  106. package/coverage/lcov-report/src/api/index.html +15 -15
  107. package/coverage/lcov-report/src/api/index.ts.html +40 -40
  108. package/coverage/lcov-report/src/api/routes/analytics.ts.html +10 -10
  109. package/coverage/lcov-report/src/api/routes/apikeys.ts.html +11 -11
  110. package/coverage/lcov-report/src/api/routes/application.ts.html +46 -13
  111. package/coverage/lcov-report/src/api/routes/auth.ts.html +9 -9
  112. package/coverage/lcov-report/src/api/routes/automation.ts.html +14 -14
  113. package/coverage/lcov-report/src/api/routes/backup.ts.html +11 -11
  114. package/coverage/lcov-report/src/api/routes/cloud.ts.html +11 -11
  115. package/coverage/lcov-report/src/api/routes/component.ts.html +11 -11
  116. package/coverage/lcov-report/src/api/routes/datasource.ts.html +12 -12
  117. package/coverage/lcov-report/src/api/routes/deploy.ts.html +11 -14
  118. package/coverage/lcov-report/src/api/routes/dev.ts.html +17 -17
  119. package/coverage/lcov-report/src/api/routes/index.html +68 -68
  120. package/coverage/lcov-report/src/api/routes/index.ts.html +49 -40
  121. package/coverage/lcov-report/src/api/routes/integration.ts.html +11 -11
  122. package/coverage/lcov-report/src/api/routes/layout.ts.html +11 -11
  123. package/coverage/lcov-report/src/api/routes/metadata.ts.html +12 -12
  124. package/coverage/lcov-report/src/api/routes/migrations.ts.html +10 -10
  125. package/coverage/lcov-report/src/api/routes/permission.ts.html +12 -12
  126. package/coverage/lcov-report/src/api/routes/plugin.ts.html +10 -10
  127. package/coverage/lcov-report/src/api/routes/public/applications.ts.html +147 -15
  128. package/coverage/lcov-report/src/api/routes/public/index.html +27 -27
  129. package/coverage/lcov-report/src/api/routes/public/index.ts.html +60 -60
  130. package/coverage/lcov-report/src/api/routes/public/middleware/index.html +15 -15
  131. package/coverage/lcov-report/src/api/routes/public/middleware/mapper.ts.html +28 -16
  132. package/coverage/lcov-report/src/api/routes/public/queries.ts.html +11 -11
  133. package/coverage/lcov-report/src/api/routes/public/rows.ts.html +14 -14
  134. package/coverage/lcov-report/src/api/routes/public/tables.ts.html +14 -14
  135. package/coverage/lcov-report/src/api/routes/public/tests/compare.spec.js.html +583 -0
  136. package/coverage/lcov-report/src/api/routes/public/tests/index.html +41 -11
  137. package/coverage/lcov-report/src/api/routes/public/tests/users.spec.js.html +199 -0
  138. package/coverage/lcov-report/src/api/routes/public/tests/utils.ts.html +5 -5
  139. package/coverage/lcov-report/src/api/routes/public/users.ts.html +14 -14
  140. package/coverage/lcov-report/src/api/routes/public/utils/Endpoint.ts.html +21 -21
  141. package/coverage/lcov-report/src/api/routes/public/utils/index.html +5 -5
  142. package/coverage/lcov-report/src/api/routes/query.ts.html +14 -14
  143. package/coverage/lcov-report/src/api/routes/role.ts.html +12 -12
  144. package/coverage/lcov-report/src/api/routes/routing.ts.html +11 -11
  145. package/coverage/lcov-report/src/api/routes/row.ts.html +14 -14
  146. package/coverage/lcov-report/src/api/routes/screen.ts.html +12 -12
  147. package/coverage/lcov-report/src/api/routes/script.ts.html +13 -13
  148. package/coverage/lcov-report/src/api/routes/static.ts.html +18 -18
  149. package/coverage/lcov-report/src/api/routes/table.ts.html +29 -98
  150. package/coverage/lcov-report/src/api/routes/templates.ts.html +11 -11
  151. package/coverage/lcov-report/src/api/routes/tests/analytics.spec.js.html +271 -0
  152. package/coverage/lcov-report/src/api/routes/tests/apikeys.spec.js.html +259 -0
  153. package/coverage/lcov-report/src/api/routes/tests/application.spec.ts.html +1066 -0
  154. package/coverage/lcov-report/src/api/routes/tests/auth.spec.js.html +154 -0
  155. package/coverage/lcov-report/src/api/routes/tests/automation.spec.js.html +1123 -0
  156. package/coverage/lcov-report/src/api/routes/tests/backup.spec.ts.html +223 -0
  157. package/coverage/lcov-report/src/api/routes/tests/cloud.seq.spec.ts.html +262 -0
  158. package/coverage/lcov-report/src/api/routes/tests/component.spec.js.html +178 -0
  159. package/coverage/lcov-report/src/api/routes/tests/datasource.spec.ts.html +799 -0
  160. package/coverage/lcov-report/src/api/routes/tests/dev.spec.js.html +202 -0
  161. package/coverage/lcov-report/src/api/routes/tests/index.html +521 -0
  162. package/coverage/lcov-report/src/api/routes/tests/integration.spec.js.html +238 -0
  163. package/coverage/lcov-report/src/api/routes/tests/internalSearch.spec.js.html +670 -0
  164. package/coverage/lcov-report/src/api/routes/tests/layout.spec.js.html +259 -0
  165. package/coverage/lcov-report/src/api/routes/tests/metadata.spec.js.html +280 -0
  166. package/coverage/lcov-report/src/api/routes/tests/misc.spec.js.html +358 -0
  167. package/coverage/lcov-report/src/api/routes/tests/permissions.spec.js.html +484 -0
  168. package/coverage/lcov-report/src/api/routes/tests/plugin.spec.ts.html +622 -0
  169. package/coverage/lcov-report/src/api/routes/tests/query.seq.spec.js.html +1696 -0
  170. package/coverage/lcov-report/src/api/routes/tests/role.spec.js.html +478 -0
  171. package/coverage/lcov-report/src/api/routes/tests/routing.spec.js.html +430 -0
  172. package/coverage/lcov-report/src/api/routes/tests/row.spec.js.html +1804 -0
  173. package/coverage/lcov-report/src/api/routes/tests/screen.spec.js.html +391 -0
  174. package/coverage/lcov-report/src/api/routes/tests/static.spec.js.html +541 -0
  175. package/coverage/lcov-report/src/api/routes/tests/table.spec.js.html +991 -0
  176. package/coverage/lcov-report/src/api/routes/tests/templates.spec.js.html +154 -0
  177. package/coverage/lcov-report/src/api/routes/tests/user.spec.js.html +688 -0
  178. package/coverage/lcov-report/src/api/routes/tests/utilities/TestFunctions.ts.html +116 -47
  179. package/coverage/lcov-report/src/api/routes/tests/utilities/index.html +27 -27
  180. package/coverage/lcov-report/src/api/routes/tests/utilities/index.ts.html +42 -36
  181. package/coverage/lcov-report/src/api/routes/tests/view.spec.js.html +1342 -0
  182. package/coverage/lcov-report/src/api/routes/tests/webhook.spec.js.html +484 -0
  183. package/coverage/lcov-report/src/api/routes/user.ts.html +12 -12
  184. package/coverage/lcov-report/src/api/routes/utils/index.html +3 -3
  185. package/coverage/lcov-report/src/api/routes/utils/validators.ts.html +44 -44
  186. package/coverage/lcov-report/src/api/routes/view.ts.html +13 -13
  187. package/coverage/lcov-report/src/api/routes/webhook.ts.html +13 -13
  188. package/coverage/lcov-report/src/app.ts.html +57 -48
  189. package/coverage/lcov-report/src/automations/actions.ts.html +31 -31
  190. package/coverage/lcov-report/src/automations/automationUtils.ts.html +127 -55
  191. package/coverage/lcov-report/src/automations/bullboard.ts.html +19 -19
  192. package/coverage/lcov-report/src/automations/index.html +58 -58
  193. package/coverage/lcov-report/src/automations/index.ts.html +23 -23
  194. package/coverage/lcov-report/src/automations/logging/index.html +3 -3
  195. package/coverage/lcov-report/src/automations/logging/index.ts.html +15 -15
  196. package/coverage/lcov-report/src/automations/steps/bash.ts.html +34 -34
  197. package/coverage/lcov-report/src/automations/steps/createRow.ts.html +9 -9
  198. package/coverage/lcov-report/src/automations/steps/delay.ts.html +7 -7
  199. package/coverage/lcov-report/src/automations/steps/deleteRow.ts.html +9 -9
  200. package/coverage/lcov-report/src/automations/steps/discord.ts.html +33 -33
  201. package/coverage/lcov-report/src/automations/steps/executeQuery.ts.html +35 -35
  202. package/coverage/lcov-report/src/automations/steps/executeScript.ts.html +31 -31
  203. package/coverage/lcov-report/src/automations/steps/filter.ts.html +12 -12
  204. package/coverage/lcov-report/src/automations/steps/index.html +129 -129
  205. package/coverage/lcov-report/src/automations/steps/integromat.ts.html +10 -10
  206. package/coverage/lcov-report/src/automations/steps/loop.ts.html +5 -5
  207. package/coverage/lcov-report/src/automations/steps/outgoingWebhook.ts.html +19 -19
  208. package/coverage/lcov-report/src/automations/steps/queryRows.ts.html +43 -43
  209. package/coverage/lcov-report/src/automations/steps/sendSmtpEmail.ts.html +28 -28
  210. package/coverage/lcov-report/src/automations/steps/serverLog.ts.html +19 -19
  211. package/coverage/lcov-report/src/automations/steps/slack.ts.html +10 -10
  212. package/coverage/lcov-report/src/automations/steps/updateRow.ts.html +12 -12
  213. package/coverage/lcov-report/src/automations/steps/utils.ts.html +18 -18
  214. package/coverage/lcov-report/src/automations/steps/zapier.ts.html +22 -22
  215. package/coverage/lcov-report/src/automations/tests/automation.spec.js.html +337 -0
  216. package/coverage/lcov-report/src/automations/tests/bash.spec.js.html +187 -0
  217. package/coverage/lcov-report/src/automations/tests/createRow.spec.ts.html +223 -0
  218. package/coverage/lcov-report/src/automations/tests/delay.spec.js.html +133 -0
  219. package/coverage/lcov-report/src/automations/tests/deleteRow.spec.ts.html +250 -0
  220. package/coverage/lcov-report/src/automations/tests/discord.spec.js.html +166 -0
  221. package/coverage/lcov-report/src/automations/tests/executeQuery.spec.js.html +229 -0
  222. package/coverage/lcov-report/src/automations/tests/executeScript.spec.js.html +229 -0
  223. package/coverage/lcov-report/src/automations/tests/filter.spec.js.html +232 -0
  224. package/coverage/lcov-report/src/automations/tests/index.html +341 -0
  225. package/coverage/lcov-report/src/automations/tests/loop.spec.ts.html +220 -0
  226. package/coverage/lcov-report/src/automations/tests/outgoingWebhook.spec.js.html +202 -0
  227. package/coverage/lcov-report/src/automations/tests/queryRows.spec.js.html +436 -0
  228. package/coverage/lcov-report/src/automations/tests/sendSmtpEmail.spec.js.html +298 -0
  229. package/coverage/lcov-report/src/automations/tests/serverLog.spec.js.html +151 -0
  230. package/coverage/lcov-report/src/automations/tests/updateRow.spec.js.html +217 -0
  231. package/coverage/lcov-report/src/automations/tests/utilities/index.html +15 -15
  232. package/coverage/lcov-report/src/automations/tests/utilities/index.ts.html +32 -32
  233. package/coverage/lcov-report/src/automations/tests/zapier.spec.js.html +166 -0
  234. package/coverage/lcov-report/src/automations/triggerInfo/app.ts.html +6 -6
  235. package/coverage/lcov-report/src/automations/triggerInfo/cron.ts.html +6 -6
  236. package/coverage/lcov-report/src/automations/triggerInfo/index.html +17 -17
  237. package/coverage/lcov-report/src/automations/triggerInfo/index.ts.html +10 -10
  238. package/coverage/lcov-report/src/automations/triggerInfo/rowDeleted.ts.html +6 -6
  239. package/coverage/lcov-report/src/automations/triggerInfo/rowSaved.ts.html +6 -6
  240. package/coverage/lcov-report/src/automations/triggerInfo/rowUpdated.ts.html +6 -6
  241. package/coverage/lcov-report/src/automations/triggerInfo/webhook.ts.html +6 -6
  242. package/coverage/lcov-report/src/automations/triggers.ts.html +61 -46
  243. package/coverage/lcov-report/src/automations/unitTests/automationUtils.spec.ts.html +280 -0
  244. package/coverage/lcov-report/src/automations/unitTests/index.html +116 -0
  245. package/coverage/lcov-report/src/automations/utils.ts.html +84 -84
  246. package/coverage/lcov-report/src/constants/index.html +19 -19
  247. package/coverage/lcov-report/src/constants/index.ts.html +103 -103
  248. package/coverage/lcov-report/src/constants/layouts.ts.html +9 -9
  249. package/coverage/lcov-report/src/constants/screens.ts.html +5 -5
  250. package/coverage/lcov-report/src/db/defaultData/datasource_bb_default.ts.html +45 -45
  251. package/coverage/lcov-report/src/db/defaultData/employeeImport.ts.html +8 -8
  252. package/coverage/lcov-report/src/db/defaultData/expensesImport.ts.html +8 -8
  253. package/coverage/lcov-report/src/db/defaultData/index.html +43 -43
  254. package/coverage/lcov-report/src/db/defaultData/inventoryImport.ts.html +8 -8
  255. package/coverage/lcov-report/src/db/defaultData/jobsImport.ts.html +8 -8
  256. package/coverage/lcov-report/src/db/dynamoClient.ts.html +26 -26
  257. package/coverage/lcov-report/src/db/inMemoryView.ts.html +13 -13
  258. package/coverage/lcov-report/src/db/index.html +43 -43
  259. package/coverage/lcov-report/src/db/index.ts.html +20 -20
  260. package/coverage/lcov-report/src/db/linkedRows/LinkController.ts.html +38 -38
  261. package/coverage/lcov-report/src/db/linkedRows/LinkDocument.ts.html +7 -7
  262. package/coverage/lcov-report/src/db/linkedRows/index.html +37 -37
  263. package/coverage/lcov-report/src/db/linkedRows/index.ts.html +40 -40
  264. package/coverage/lcov-report/src/db/linkedRows/linkUtils.ts.html +27 -27
  265. package/coverage/lcov-report/src/db/newid.ts.html +5 -5
  266. package/coverage/lcov-report/src/db/tests/index.html +131 -0
  267. package/coverage/lcov-report/src/db/tests/linkController.spec.js.html +793 -0
  268. package/coverage/lcov-report/src/db/tests/linkTests.spec.js.html +277 -0
  269. package/coverage/lcov-report/src/db/utils.ts.html +92 -92
  270. package/coverage/lcov-report/src/definitions/automations.ts.html +9 -6
  271. package/coverage/lcov-report/src/definitions/index.html +5 -20
  272. package/coverage/lcov-report/src/environment.ts.html +49 -37
  273. package/coverage/lcov-report/src/events/AutomationEmitter.ts.html +14 -14
  274. package/coverage/lcov-report/src/events/BudibaseEmitter.ts.html +8 -8
  275. package/coverage/lcov-report/src/events/index.html +20 -20
  276. package/coverage/lcov-report/src/events/index.ts.html +7 -7
  277. package/coverage/lcov-report/src/events/utils.ts.html +11 -11
  278. package/coverage/lcov-report/src/index.html +48 -48
  279. package/coverage/lcov-report/src/index.ts.html +8 -8
  280. package/coverage/lcov-report/src/integrations/airtable.ts.html +10 -10
  281. package/coverage/lcov-report/src/integrations/arangodb.ts.html +9 -9
  282. package/coverage/lcov-report/src/integrations/base/index.html +29 -29
  283. package/coverage/lcov-report/src/integrations/base/query.ts.html +15 -9
  284. package/coverage/lcov-report/src/integrations/base/sql.ts.html +38 -38
  285. package/coverage/lcov-report/src/integrations/base/sqlTable.ts.html +23 -23
  286. package/coverage/lcov-report/src/integrations/base/utils.ts.html +5 -5
  287. package/coverage/lcov-report/src/integrations/couchdb.ts.html +109 -31
  288. package/coverage/lcov-report/src/integrations/dynamodb.ts.html +17 -17
  289. package/coverage/lcov-report/src/integrations/elasticsearch.ts.html +27 -15
  290. package/coverage/lcov-report/src/integrations/firebase.ts.html +12 -12
  291. package/coverage/lcov-report/src/integrations/googlesheets.ts.html +42 -42
  292. package/coverage/lcov-report/src/integrations/index.html +130 -130
  293. package/coverage/lcov-report/src/integrations/index.ts.html +50 -62
  294. package/coverage/lcov-report/src/integrations/microsoftSqlServer.ts.html +31 -31
  295. package/coverage/lcov-report/src/integrations/mongodb.ts.html +421 -289
  296. package/coverage/lcov-report/src/integrations/mysql.ts.html +28 -28
  297. package/coverage/lcov-report/src/integrations/oracle.ts.html +31 -31
  298. package/coverage/lcov-report/src/integrations/postgres.ts.html +54 -54
  299. package/coverage/lcov-report/src/integrations/queries/index.html +19 -19
  300. package/coverage/lcov-report/src/integrations/queries/sql.ts.html +24 -159
  301. package/coverage/lcov-report/src/integrations/redis.ts.html +8 -8
  302. package/coverage/lcov-report/src/integrations/rest.ts.html +43 -52
  303. package/coverage/lcov-report/src/integrations/s3.ts.html +17 -17
  304. package/coverage/lcov-report/src/integrations/snowflake.ts.html +15 -15
  305. package/coverage/lcov-report/src/integrations/tests/TestConfiguration.js.html +1 -1
  306. package/coverage/lcov-report/src/integrations/tests/airtable.spec.ts.html +310 -0
  307. package/coverage/lcov-report/src/integrations/tests/arangodb.spec.ts.html +199 -0
  308. package/coverage/lcov-report/src/integrations/tests/couchdb.spec.ts.html +349 -0
  309. package/coverage/lcov-report/src/integrations/tests/dynamodb.spec.ts.html +550 -0
  310. package/coverage/lcov-report/src/integrations/tests/elasticsearch.spec.ts.html +331 -0
  311. package/coverage/lcov-report/src/integrations/tests/firebase.spec.ts.html +376 -0
  312. package/coverage/lcov-report/src/integrations/tests/index.html +230 -5
  313. package/coverage/lcov-report/src/integrations/tests/microsoftSqlServer.spec.ts.html +253 -0
  314. package/coverage/lcov-report/src/integrations/tests/mongo.spec.ts.html +1087 -0
  315. package/coverage/lcov-report/src/integrations/tests/mysql.spec.ts.html +484 -0
  316. package/coverage/lcov-report/src/integrations/tests/oracle.spec.ts.html +373 -0
  317. package/coverage/lcov-report/src/integrations/tests/postgres.spec.ts.html +328 -0
  318. package/coverage/lcov-report/src/integrations/tests/redis.spec.ts.html +337 -0
  319. package/coverage/lcov-report/src/integrations/tests/rest.spec.ts.html +1870 -0
  320. package/coverage/lcov-report/src/integrations/tests/s3.spec.ts.html +421 -0
  321. package/coverage/lcov-report/src/integrations/tests/sql.spec.ts.html +1753 -0
  322. package/coverage/lcov-report/src/integrations/utils.ts.html +54 -54
  323. package/coverage/lcov-report/src/middleware/appInfo.ts.html +11 -11
  324. package/coverage/lcov-report/src/middleware/authorized.ts.html +49 -37
  325. package/coverage/lcov-report/src/middleware/builder.ts.html +26 -26
  326. package/coverage/lcov-report/src/middleware/currentapp.ts.html +60 -57
  327. package/coverage/lcov-report/src/middleware/index.html +44 -44
  328. package/coverage/lcov-report/src/middleware/joi-validator.ts.html +10 -10
  329. package/coverage/lcov-report/src/middleware/publicApi.ts.html +9 -9
  330. package/coverage/lcov-report/src/middleware/resourceId.ts.html +23 -23
  331. package/coverage/lcov-report/src/middleware/selfhost.ts.html +2 -2
  332. package/coverage/lcov-report/src/middleware/tests/authorized.spec.js.html +574 -0
  333. package/coverage/lcov-report/src/middleware/tests/currentapp.spec.js.html +814 -0
  334. package/coverage/lcov-report/src/middleware/tests/index.html +161 -0
  335. package/coverage/lcov-report/src/middleware/tests/resourceId.spec.js.html +397 -0
  336. package/coverage/lcov-report/src/middleware/tests/selfhost.spec.js.html +214 -0
  337. package/coverage/lcov-report/src/middleware/utils.ts.html +4 -4
  338. package/coverage/lcov-report/src/migrations/functions/appUrls.ts.html +6 -6
  339. package/coverage/lcov-report/src/migrations/functions/backfill/app/automations.ts.html +7 -7
  340. package/coverage/lcov-report/src/migrations/functions/backfill/app/datasources.ts.html +7 -7
  341. package/coverage/lcov-report/src/migrations/functions/backfill/app/index.html +31 -31
  342. package/coverage/lcov-report/src/migrations/functions/backfill/app/layouts.ts.html +8 -8
  343. package/coverage/lcov-report/src/migrations/functions/backfill/app/queries.ts.html +13 -13
  344. package/coverage/lcov-report/src/migrations/functions/backfill/app/roles.ts.html +7 -7
  345. package/coverage/lcov-report/src/migrations/functions/backfill/app/screens.ts.html +7 -7
  346. package/coverage/lcov-report/src/migrations/functions/backfill/app/tables.ts.html +8 -8
  347. package/coverage/lcov-report/src/migrations/functions/backfill/app.ts.html +21 -21
  348. package/coverage/lcov-report/src/migrations/functions/backfill/global/configs.ts.html +17 -14
  349. package/coverage/lcov-report/src/migrations/functions/backfill/global/index.html +19 -19
  350. package/coverage/lcov-report/src/migrations/functions/backfill/global/quotas.ts.html +9 -9
  351. package/coverage/lcov-report/src/migrations/functions/backfill/global/users.ts.html +13 -13
  352. package/coverage/lcov-report/src/migrations/functions/backfill/global.ts.html +23 -23
  353. package/coverage/lcov-report/src/migrations/functions/backfill/index.html +26 -26
  354. package/coverage/lcov-report/src/migrations/functions/backfill/index.ts.html +7 -7
  355. package/coverage/lcov-report/src/migrations/functions/backfill/installation.ts.html +14 -14
  356. package/coverage/lcov-report/src/migrations/functions/index.html +18 -18
  357. package/coverage/lcov-report/src/migrations/functions/syncQuotas.ts.html +8 -8
  358. package/coverage/lcov-report/src/migrations/functions/tableSettings.ts.html +11 -11
  359. package/coverage/lcov-report/src/migrations/functions/tests/appUrls.spec.js.html +163 -0
  360. package/coverage/lcov-report/src/migrations/functions/tests/index.html +161 -0
  361. package/coverage/lcov-report/src/migrations/functions/tests/syncQuotas.spec.js.html +163 -0
  362. package/coverage/lcov-report/src/migrations/functions/tests/tableSettings.spec.ts.html +517 -0
  363. package/coverage/lcov-report/src/migrations/functions/tests/userEmailViewCasing.spec.js.html +190 -0
  364. package/coverage/lcov-report/src/migrations/functions/usageQuotas/index.html +11 -11
  365. package/coverage/lcov-report/src/migrations/functions/usageQuotas/index.ts.html +3 -3
  366. package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncApps.ts.html +6 -6
  367. package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncPlugins.ts.html +8 -8
  368. package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncRows.ts.html +7 -7
  369. package/coverage/lcov-report/src/migrations/functions/usageQuotas/tests/index.html +131 -0
  370. package/coverage/lcov-report/src/migrations/functions/usageQuotas/tests/syncApps.spec.ts.html +190 -0
  371. package/coverage/lcov-report/src/migrations/functions/usageQuotas/tests/syncRows.spec.ts.html +244 -0
  372. package/coverage/lcov-report/src/migrations/functions/userEmailViewCasing.ts.html +4 -4
  373. package/coverage/lcov-report/src/migrations/index.html +15 -15
  374. package/coverage/lcov-report/src/migrations/index.ts.html +43 -43
  375. package/coverage/lcov-report/src/migrations/tests/helpers.ts.html +4 -4
  376. package/coverage/lcov-report/src/migrations/tests/index.html +26 -11
  377. package/coverage/lcov-report/src/migrations/tests/index.spec.ts.html +535 -0
  378. package/coverage/lcov-report/src/migrations/tests/structures.ts.html +3 -3
  379. package/coverage/lcov-report/src/sdk/app/applications/index.html +20 -20
  380. package/coverage/lcov-report/src/sdk/app/applications/index.ts.html +6 -6
  381. package/coverage/lcov-report/src/sdk/app/applications/sync.ts.html +34 -34
  382. package/coverage/lcov-report/src/sdk/app/applications/utils.ts.html +15 -15
  383. package/coverage/lcov-report/src/sdk/app/automations/index.html +7 -7
  384. package/coverage/lcov-report/src/sdk/app/automations/index.ts.html +5 -5
  385. package/coverage/lcov-report/src/sdk/app/automations/webhook.ts.html +14 -14
  386. package/coverage/lcov-report/src/sdk/app/backups/constants.ts.html +5 -5
  387. package/coverage/lcov-report/src/sdk/app/backups/exports.ts.html +30 -30
  388. package/coverage/lcov-report/src/sdk/app/backups/imports.ts.html +45 -57
  389. package/coverage/lcov-report/src/sdk/app/backups/index.html +42 -42
  390. package/coverage/lcov-report/src/sdk/app/backups/index.ts.html +7 -7
  391. package/coverage/lcov-report/src/sdk/app/backups/statistics.ts.html +73 -73
  392. package/coverage/lcov-report/src/sdk/app/datasources/datasources.ts.html +493 -0
  393. package/coverage/lcov-report/src/sdk/app/datasources/index.html +131 -0
  394. package/coverage/lcov-report/src/sdk/app/datasources/index.ts.html +100 -0
  395. package/coverage/lcov-report/src/sdk/app/queries/index.html +131 -0
  396. package/coverage/lcov-report/src/{utilities/statusCodes.ts.html → sdk/app/queries/index.ts.html} +22 -28
  397. package/coverage/lcov-report/src/{definitions/datasource.ts.html → sdk/app/queries/queries.ts.html} +82 -82
  398. package/coverage/lcov-report/src/sdk/app/rows/attachments.ts.html +8 -8
  399. package/coverage/lcov-report/src/sdk/app/rows/index.html +8 -8
  400. package/coverage/lcov-report/src/sdk/app/rows/index.ts.html +6 -6
  401. package/coverage/lcov-report/src/sdk/app/rows/rows.ts.html +4 -4
  402. package/coverage/lcov-report/src/sdk/app/tables/index.html +15 -15
  403. package/coverage/lcov-report/src/sdk/app/tables/index.ts.html +30 -21
  404. package/coverage/lcov-report/src/sdk/index.html +7 -7
  405. package/coverage/lcov-report/src/sdk/index.ts.html +24 -12
  406. package/coverage/lcov-report/src/sdk/tests/attachments.spec.ts.html +313 -0
  407. package/coverage/lcov-report/src/sdk/tests/index.html +116 -0
  408. package/coverage/lcov-report/src/sdk/users/index.html +10 -10
  409. package/coverage/lcov-report/src/sdk/users/index.ts.html +5 -5
  410. package/coverage/lcov-report/src/sdk/users/utils.ts.html +35 -35
  411. package/coverage/lcov-report/src/sdk/utils/index.html +116 -0
  412. package/coverage/lcov-report/src/sdk/utils/index.ts.html +133 -0
  413. package/coverage/lcov-report/src/startup.ts.html +48 -63
  414. package/coverage/lcov-report/src/tests/utilities/TestConfiguration.ts.html +421 -187
  415. package/coverage/lcov-report/src/tests/utilities/controllers.ts.html +20 -20
  416. package/coverage/lcov-report/src/tests/utilities/index.html +35 -35
  417. package/coverage/lcov-report/src/tests/utilities/index.ts.html +2 -2
  418. package/coverage/lcov-report/src/tests/utilities/structures.ts.html +236 -47
  419. package/coverage/lcov-report/src/threads/automation.ts.html +212 -251
  420. package/coverage/lcov-report/src/threads/index.html +46 -46
  421. package/coverage/lcov-report/src/threads/index.ts.html +39 -39
  422. package/coverage/lcov-report/src/threads/query.ts.html +140 -101
  423. package/coverage/lcov-report/src/threads/utils.ts.html +29 -29
  424. package/coverage/lcov-report/src/utilities/budibaseDir.ts.html +5 -5
  425. package/coverage/lcov-report/src/utilities/centralPath.ts.html +11 -11
  426. package/coverage/lcov-report/src/utilities/fileSystem/app.ts.html +343 -0
  427. package/coverage/lcov-report/src/utilities/fileSystem/clientLibrary.ts.html +20 -20
  428. package/coverage/lcov-report/src/utilities/fileSystem/filesystem.ts.html +601 -0
  429. package/coverage/lcov-report/src/utilities/fileSystem/index.html +88 -28
  430. package/coverage/lcov-report/src/utilities/fileSystem/index.ts.html +20 -1049
  431. package/coverage/lcov-report/src/utilities/fileSystem/plugin.ts.html +277 -0
  432. package/coverage/lcov-report/src/utilities/fileSystem/processor.ts.html +9 -9
  433. package/coverage/lcov-report/src/utilities/fileSystem/template.ts.html +193 -0
  434. package/coverage/lcov-report/src/utilities/global.ts.html +60 -60
  435. package/coverage/lcov-report/src/utilities/index.html +102 -117
  436. package/coverage/lcov-report/src/utilities/index.ts.html +47 -179
  437. package/coverage/lcov-report/src/utilities/redis.ts.html +38 -38
  438. package/coverage/lcov-report/src/utilities/{plugins.ts.html → retry.ts.html} +31 -43
  439. package/coverage/lcov-report/src/utilities/routing/index.html +1 -1
  440. package/coverage/lcov-report/src/utilities/routing/index.ts.html +5 -5
  441. package/coverage/lcov-report/src/utilities/rowProcessor/index.html +34 -34
  442. package/coverage/lcov-report/src/utilities/rowProcessor/index.ts.html +72 -45
  443. package/coverage/lcov-report/src/utilities/rowProcessor/map.ts.html +9 -9
  444. package/coverage/lcov-report/src/utilities/rowProcessor/tests/index.html +116 -0
  445. package/coverage/lcov-report/src/utilities/rowProcessor/tests/utils.spec.ts.html +256 -0
  446. package/coverage/lcov-report/src/utilities/rowProcessor/utils.ts.html +52 -52
  447. package/coverage/lcov-report/src/utilities/{csvParser.ts.html → schema.ts.html} +174 -234
  448. package/coverage/lcov-report/src/utilities/scriptRunner.ts.html +33 -33
  449. package/coverage/lcov-report/src/utilities/security.ts.html +30 -30
  450. package/coverage/lcov-report/src/utilities/usageQuota/index.html +9 -9
  451. package/coverage/lcov-report/src/utilities/usageQuota/rows.ts.html +37 -37
  452. package/coverage/lcov-report/src/utilities/usageQuota/usageQuoteReset.ts.html +3 -3
  453. package/coverage/lcov-report/src/utilities/users.ts.html +7 -7
  454. package/coverage/lcov-report/src/utilities/workerRequests.ts.html +92 -65
  455. package/coverage/lcov-report/src/watch.ts.html +20 -20
  456. package/coverage/lcov-report/src/websocket.ts.html +15 -15
  457. package/coverage/lcov.info +24966 -17056
  458. package/dist/api/controllers/application.js +120 -109
  459. package/dist/api/controllers/cloud.js +6 -2
  460. package/dist/api/controllers/datasource.js +24 -15
  461. package/dist/api/controllers/deploy/index.js +43 -60
  462. package/dist/api/controllers/plugin/index.js +6 -6
  463. package/dist/api/controllers/public/applications.js +22 -1
  464. package/dist/api/controllers/query/index.js +23 -13
  465. package/dist/api/controllers/row/ExternalRequest.js +12 -4
  466. package/dist/api/controllers/row/external.js +20 -13
  467. package/dist/api/controllers/row/internal.js +52 -27
  468. package/dist/api/controllers/row/staticFormula.js +1 -1
  469. package/dist/api/controllers/row/utils.js +35 -3
  470. package/dist/api/controllers/static/index.js +47 -47
  471. package/dist/api/controllers/static/templates/BudibaseApp.svelte +0 -1
  472. package/dist/api/controllers/table/external.js +16 -35
  473. package/dist/api/controllers/table/index.js +44 -15
  474. package/dist/api/controllers/table/internal.js +6 -7
  475. package/dist/api/controllers/table/utils.js +9 -9
  476. package/dist/api/controllers/user.js +14 -6
  477. package/dist/api/controllers/view/exporters.js +22 -6
  478. package/dist/api/controllers/view/index.js +23 -58
  479. package/dist/api/controllers/view/viewBuilder.js +15 -2
  480. package/dist/api/controllers/webhook.js +45 -43
  481. package/dist/api/routes/analytics.js +2 -1
  482. package/dist/api/routes/apikeys.js +2 -1
  483. package/dist/api/routes/application.js +5 -1
  484. package/dist/api/routes/auth.js +2 -1
  485. package/dist/api/routes/automation.js +2 -1
  486. package/dist/api/routes/backup.js +2 -1
  487. package/dist/api/routes/cloud.js +2 -1
  488. package/dist/api/routes/component.js +2 -1
  489. package/dist/api/routes/datasource.js +2 -1
  490. package/dist/api/routes/deploy.js +3 -3
  491. package/dist/api/routes/dev.js +2 -1
  492. package/dist/api/routes/index.js +2 -0
  493. package/dist/api/routes/integration.js +2 -1
  494. package/dist/api/routes/layout.js +2 -1
  495. package/dist/api/routes/metadata.js +2 -1
  496. package/dist/api/routes/migrations.js +2 -1
  497. package/dist/api/routes/permission.js +2 -1
  498. package/dist/api/routes/public/applications.js +37 -0
  499. package/dist/api/routes/public/middleware/mapper.js +3 -0
  500. package/dist/api/routes/query.js +2 -1
  501. package/dist/api/routes/role.js +2 -1
  502. package/dist/api/routes/routing.js +2 -1
  503. package/dist/api/routes/row.js +2 -2
  504. package/dist/api/routes/screen.js +2 -1
  505. package/dist/api/routes/script.js +2 -1
  506. package/dist/api/routes/static.js +6 -5
  507. package/dist/api/routes/table.js +8 -38
  508. package/dist/api/routes/templates.js +2 -1
  509. package/dist/api/routes/user.js +2 -1
  510. package/dist/api/routes/utils/validators.js +1 -1
  511. package/dist/api/routes/view.js +2 -1
  512. package/dist/api/routes/webhook.js +2 -1
  513. package/dist/app.js +10 -8
  514. package/dist/automations/automationUtils.js +26 -1
  515. package/dist/automations/logging/index.js +5 -25
  516. package/dist/automations/triggers.js +1 -0
  517. package/dist/db/index.js +5 -2
  518. package/dist/db/linkedRows/LinkController.js +2 -1
  519. package/dist/db/linkedRows/LinkDocument.js +2 -1
  520. package/dist/db/newid.js +4 -2
  521. package/dist/definitions/datasource.js +0 -6
  522. package/dist/environment.js +7 -2
  523. package/dist/events/AutomationEmitter.js +2 -1
  524. package/dist/events/BudibaseEmitter.js +2 -1
  525. package/dist/events/index.js +2 -1
  526. package/dist/index.js +2 -2
  527. package/dist/integrations/base/query.js +7 -2
  528. package/dist/integrations/base/sqlTable.js +14 -14
  529. package/dist/integrations/couchdb.js +34 -8
  530. package/dist/integrations/dynamodb.js +8 -5
  531. package/dist/integrations/elasticsearch.js +7 -3
  532. package/dist/integrations/googlesheets.js +1 -1
  533. package/dist/integrations/index.js +6 -7
  534. package/dist/integrations/mongodb.js +311 -271
  535. package/dist/integrations/mysql.js +2 -2
  536. package/dist/integrations/queries/sql.js +73 -100
  537. package/dist/integrations/rest.js +16 -18
  538. package/dist/middleware/authorized.js +2 -1
  539. package/dist/middleware/builder.js +4 -2
  540. package/dist/middleware/currentapp.js +6 -3
  541. package/dist/middleware/publicApi.js +4 -2
  542. package/dist/middleware/selfhost.js +4 -1
  543. package/dist/migrations/functions/backfill/global/configs.js +4 -4
  544. package/dist/package.json +14 -8
  545. package/dist/sdk/app/backups/imports.js +2 -6
  546. package/dist/sdk/app/datasources/datasources.js +147 -0
  547. package/dist/sdk/app/datasources/index.js +27 -0
  548. package/dist/sdk/app/queries/index.js +27 -0
  549. package/dist/sdk/app/queries/queries.js +60 -0
  550. package/dist/sdk/app/tables/index.js +6 -2
  551. package/dist/sdk/index.js +4 -0
  552. package/dist/sdk/utils/index.js +29 -0
  553. package/dist/startup.js +17 -17
  554. package/dist/threads/automation.js +22 -35
  555. package/dist/threads/index.js +4 -4
  556. package/dist/threads/query.js +27 -13
  557. package/dist/tsconfig.build.tsbuildinfo +1 -1
  558. package/dist/utilities/fileSystem/app.js +97 -0
  559. package/dist/utilities/fileSystem/clientLibrary.js +3 -3
  560. package/dist/utilities/fileSystem/filesystem.js +184 -0
  561. package/dist/utilities/fileSystem/index.js +18 -342
  562. package/dist/utilities/fileSystem/plugin.js +66 -0
  563. package/dist/utilities/fileSystem/template.js +47 -0
  564. package/dist/utilities/index.js +1 -44
  565. package/dist/utilities/retry.js +30 -0
  566. package/dist/utilities/rowProcessor/index.js +12 -4
  567. package/dist/utilities/schema.js +108 -0
  568. package/dist/utilities/scriptRunner.js +2 -1
  569. package/dist/utilities/statusCodes.js +2 -1
  570. package/dist/utilities/workerRequests.js +2 -0
  571. package/dist/watch.js +2 -25
  572. package/jest-testcontainers-config.js +8 -0
  573. package/jest.config.ts +33 -13
  574. package/package.json +15 -9
  575. package/scripts/dev/manage.js +3 -2
  576. package/specs/openapi.json +84 -0
  577. package/specs/openapi.yaml +53 -0
  578. package/specs/resources/application.js +19 -0
  579. package/src/api/controllers/application.ts +142 -110
  580. package/src/api/controllers/auth.ts +2 -2
  581. package/src/api/controllers/cloud.ts +10 -6
  582. package/src/api/controllers/datasource.ts +33 -25
  583. package/src/api/controllers/deploy/Deployment.ts +1 -0
  584. package/src/api/controllers/deploy/index.ts +40 -58
  585. package/src/api/controllers/plugin/index.ts +14 -9
  586. package/src/api/controllers/public/applications.ts +17 -0
  587. package/src/api/controllers/query/import/tests/index.spec.js +1 -1
  588. package/src/api/controllers/query/index.ts +49 -41
  589. package/src/api/controllers/row/ExternalRequest.ts +8 -3
  590. package/src/api/controllers/row/external.ts +24 -14
  591. package/src/api/controllers/row/internal.ts +66 -41
  592. package/src/api/controllers/row/staticFormula.ts +5 -2
  593. package/src/api/controllers/row/utils.ts +42 -3
  594. package/src/api/controllers/static/index.ts +22 -27
  595. package/src/api/controllers/static/templates/BudibaseApp.svelte +0 -1
  596. package/src/api/controllers/table/external.ts +18 -16
  597. package/src/api/controllers/table/index.ts +46 -17
  598. package/src/api/controllers/table/internal.ts +6 -7
  599. package/src/api/controllers/table/utils.ts +12 -13
  600. package/src/api/controllers/user.ts +21 -13
  601. package/src/api/controllers/view/exporters.ts +20 -5
  602. package/src/api/controllers/view/index.ts +30 -42
  603. package/src/api/controllers/view/tests/viewBuilder.spec.js +1 -1
  604. package/src/api/controllers/view/viewBuilder.ts +1 -1
  605. package/src/api/controllers/webhook.ts +48 -46
  606. package/src/api/routes/analytics.ts +1 -1
  607. package/src/api/routes/apikeys.ts +1 -1
  608. package/src/api/routes/application.ts +12 -1
  609. package/src/api/routes/auth.ts +1 -1
  610. package/src/api/routes/automation.ts +1 -1
  611. package/src/api/routes/backup.ts +1 -1
  612. package/src/api/routes/cloud.ts +1 -1
  613. package/src/api/routes/component.ts +1 -1
  614. package/src/api/routes/datasource.ts +1 -1
  615. package/src/api/routes/deploy.ts +1 -2
  616. package/src/api/routes/dev.ts +1 -1
  617. package/src/api/routes/index.ts +6 -3
  618. package/src/api/routes/integration.ts +1 -1
  619. package/src/api/routes/layout.ts +1 -1
  620. package/src/api/routes/metadata.ts +1 -1
  621. package/src/api/routes/migrations.ts +1 -1
  622. package/src/api/routes/permission.ts +1 -1
  623. package/src/api/routes/public/applications.ts +44 -0
  624. package/src/api/routes/public/middleware/mapper.ts +4 -0
  625. package/src/api/routes/query.ts +1 -1
  626. package/src/api/routes/role.ts +1 -1
  627. package/src/api/routes/routing.ts +1 -1
  628. package/src/api/routes/row.ts +1 -1
  629. package/src/api/routes/screen.ts +1 -1
  630. package/src/api/routes/script.ts +1 -1
  631. package/src/api/routes/static.ts +2 -2
  632. package/src/api/routes/table.ts +16 -39
  633. package/src/api/routes/templates.ts +1 -1
  634. package/src/api/routes/tests/__snapshots__/{datasource.spec.js.snap → datasource.spec.ts.snap} +1 -1
  635. package/src/api/routes/tests/analytics.spec.js +4 -1
  636. package/src/api/routes/tests/apikeys.spec.js +1 -1
  637. package/src/api/routes/tests/{application.spec.js → application.spec.ts} +112 -22
  638. package/src/api/routes/tests/auth.spec.js +2 -2
  639. package/src/api/routes/tests/automation.spec.js +5 -1
  640. package/src/api/routes/tests/{backup.spec.js → backup.spec.ts} +17 -15
  641. package/src/api/routes/tests/cloud.seq.spec.ts +59 -0
  642. package/src/api/routes/tests/component.spec.js +1 -1
  643. package/src/api/routes/tests/data/budibase-component-1.0.1.tgz +0 -0
  644. package/src/api/routes/tests/data/comment-box-1.0.2.tar.gz +0 -0
  645. package/src/api/routes/tests/data/export-test.tar.gz +0 -0
  646. package/src/api/routes/tests/{datasource.spec.js → datasource.spec.ts} +76 -17
  647. package/src/api/routes/tests/dev.spec.js +1 -1
  648. package/src/api/routes/tests/integration.spec.js +1 -1
  649. package/src/api/routes/tests/layout.spec.js +1 -1
  650. package/src/api/routes/tests/metadata.spec.js +1 -1
  651. package/src/api/routes/tests/misc.spec.js +5 -11
  652. package/src/api/routes/tests/permissions.spec.js +5 -2
  653. package/src/api/routes/tests/plugin.spec.ts +179 -0
  654. package/src/api/routes/tests/{query.spec.js → query.seq.spec.js} +21 -1
  655. package/src/api/routes/tests/role.spec.js +6 -1
  656. package/src/api/routes/tests/routing.spec.js +2 -3
  657. package/src/api/routes/tests/row.spec.js +15 -5
  658. package/src/api/routes/tests/screen.spec.js +1 -1
  659. package/src/api/routes/tests/static.spec.js +4 -18
  660. package/src/api/routes/tests/table.spec.js +17 -33
  661. package/src/api/routes/tests/templates.spec.js +1 -1
  662. package/src/api/routes/tests/user.spec.js +108 -0
  663. package/src/api/routes/tests/utilities/TestFunctions.ts +26 -3
  664. package/src/api/routes/tests/utilities/index.ts +7 -5
  665. package/src/api/routes/tests/view.spec.js +4 -1
  666. package/src/api/routes/tests/webhook.spec.js +12 -3
  667. package/src/api/routes/user.ts +1 -1
  668. package/src/api/routes/utils/validators.ts +1 -1
  669. package/src/api/routes/view.ts +1 -1
  670. package/src/api/routes/webhook.ts +1 -1
  671. package/src/app.ts +7 -4
  672. package/src/automations/automationUtils.ts +24 -0
  673. package/src/automations/logging/index.ts +1 -1
  674. package/src/automations/tests/automation.spec.js +4 -4
  675. package/src/automations/tests/bash.spec.js +34 -0
  676. package/src/automations/tests/discord.spec.js +27 -0
  677. package/src/automations/tests/executeQuery.spec.js +48 -0
  678. package/src/automations/tests/executeScript.spec.js +48 -0
  679. package/src/automations/tests/loop.spec.ts +45 -0
  680. package/src/automations/tests/outgoingWebhook.spec.js +1 -1
  681. package/src/automations/tests/sendSmtpEmail.spec.js +71 -0
  682. package/src/automations/tests/serverLog.spec.js +22 -0
  683. package/src/automations/tests/updateRow.spec.js +1 -1
  684. package/src/automations/tests/utilities/index.ts +2 -2
  685. package/src/automations/tests/zapier.spec.js +27 -0
  686. package/src/automations/triggers.ts +6 -1
  687. package/src/automations/unitTests/automationUtils.spec.ts +65 -0
  688. package/src/db/index.ts +1 -1
  689. package/src/db/linkedRows/LinkController.ts +1 -1
  690. package/src/db/linkedRows/LinkDocument.ts +1 -1
  691. package/src/db/newid.ts +1 -1
  692. package/src/db/tests/linkController.spec.js +5 -2
  693. package/src/db/tests/linkTests.spec.js +1 -1
  694. package/src/definitions/automations.ts +1 -0
  695. package/src/definitions/datasource.ts +0 -41
  696. package/src/definitions/openapi.ts +10 -0
  697. package/src/environment.ts +6 -2
  698. package/src/events/AutomationEmitter.ts +1 -1
  699. package/src/events/BudibaseEmitter.ts +1 -1
  700. package/src/events/index.ts +1 -1
  701. package/src/index.ts +1 -1
  702. package/src/integrations/base/query.ts +3 -1
  703. package/src/integrations/base/sqlTable.ts +1 -1
  704. package/src/integrations/couchdb.ts +40 -14
  705. package/src/integrations/dynamodb.ts +3 -3
  706. package/src/integrations/elasticsearch.ts +8 -4
  707. package/src/integrations/googlesheets.ts +1 -1
  708. package/src/integrations/index.ts +5 -9
  709. package/src/integrations/mongodb.ts +315 -271
  710. package/src/integrations/mysql.ts +1 -1
  711. package/src/integrations/queries/sql.ts +5 -50
  712. package/src/integrations/rest.ts +16 -19
  713. package/src/integrations/tests/couchdb.spec.ts +33 -21
  714. package/src/integrations/tests/rest.spec.ts +19 -15
  715. package/src/middleware/authorized.ts +5 -1
  716. package/src/middleware/builder.ts +1 -1
  717. package/src/middleware/currentapp.ts +4 -3
  718. package/src/middleware/publicApi.ts +1 -1
  719. package/src/middleware/selfhost.ts +1 -1
  720. package/src/middleware/tests/authorized.spec.js +1 -1
  721. package/src/middleware/tests/currentapp.spec.js +1 -1
  722. package/src/middleware/tests/selfhost.spec.js +1 -1
  723. package/src/migrations/functions/backfill/global/configs.ts +5 -4
  724. package/src/migrations/functions/tests/appUrls.spec.js +1 -1
  725. package/src/migrations/functions/tests/syncQuotas.spec.js +1 -1
  726. package/src/migrations/functions/tests/userEmailViewCasing.spec.js +1 -1
  727. package/src/migrations/functions/usageQuotas/tests/syncRows.spec.ts +10 -6
  728. package/src/migrations/tests/index.spec.ts +3 -2
  729. package/src/sdk/app/backups/imports.ts +2 -6
  730. package/src/sdk/app/datasources/datasources.ts +136 -0
  731. package/src/sdk/app/datasources/index.ts +5 -0
  732. package/src/sdk/app/queries/index.ts +5 -0
  733. package/src/sdk/app/queries/queries.ts +50 -0
  734. package/src/sdk/app/tables/index.ts +6 -3
  735. package/src/sdk/index.ts +4 -0
  736. package/src/sdk/tests/attachments.spec.ts +1 -4
  737. package/src/sdk/utils/index.ts +16 -0
  738. package/src/startup.ts +3 -8
  739. package/src/tests/jestEnv.ts +9 -0
  740. package/src/tests/jestSetup.ts +8 -20
  741. package/src/tests/utilities/TestConfiguration.ts +127 -49
  742. package/src/tests/utilities/structures.ts +65 -2
  743. package/src/threads/automation.ts +22 -35
  744. package/src/threads/definitions.ts +3 -0
  745. package/src/threads/index.ts +1 -1
  746. package/src/threads/query.ts +28 -15
  747. package/src/utilities/fileSystem/app.ts +86 -0
  748. package/src/utilities/fileSystem/clientLibrary.ts +1 -1
  749. package/src/utilities/fileSystem/filesystem.ts +172 -0
  750. package/src/utilities/fileSystem/index.ts +5 -348
  751. package/src/utilities/fileSystem/plugin.ts +64 -0
  752. package/src/utilities/fileSystem/template.ts +36 -0
  753. package/src/utilities/index.ts +1 -45
  754. package/src/utilities/retry.ts +18 -0
  755. package/src/utilities/rowProcessor/index.ts +17 -8
  756. package/src/utilities/rowProcessor/tests/utils.spec.ts +57 -0
  757. package/src/utilities/schema.ts +141 -0
  758. package/src/utilities/scriptRunner.ts +1 -1
  759. package/src/utilities/statusCodes.ts +1 -1
  760. package/src/utilities/workerRequests.ts +10 -1
  761. package/src/watch.ts +1 -1
  762. package/tsconfig.build.json +2 -0
  763. package/tsconfig.json +2 -1
  764. package/builder/assets/index.96b9ffed.css +0 -6
  765. package/builder/assets/index.fae8f9eb.js +0 -1024
  766. package/dist/api/routes/tests/utilities/TestFunctions.js +0 -167
  767. package/dist/api/routes/tests/utilities/index.js +0 -131
  768. package/dist/automations/tests/utilities/index.js +0 -81
  769. package/dist/tests/utilities/TestConfiguration.js +0 -562
  770. package/dist/tests/utilities/controllers.js +0 -40
  771. package/dist/tests/utilities/structures.js +0 -168
  772. package/dist/utilities/csvParser.js +0 -152
  773. package/dist/utilities/plugins.js +0 -26
  774. package/src/api/routes/tests/deployment.spec.ts +0 -25
  775. package/src/automations/unitTests/automationUtils.spec.js +0 -17
  776. package/src/utilities/csvParser.ts +0 -161
  777. package/src/utilities/plugins.ts +0 -22
  778. package/src/utilities/tests/__snapshots__/csvParser.spec.js.snap +0 -15
  779. package/src/utilities/tests/csvParser.spec.js +0 -112
@@ -12,7 +12,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
12
12
  return (mod && mod.__esModule) ? mod : { "default": mod };
13
13
  };
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.updateAppPackage = exports.sync = exports.destroy = exports.revertClient = exports.updateClient = exports.update = exports.create = exports.fetchAppPackage = exports.fetchAppDefinition = exports.fetch = void 0;
15
+ exports.updateAppPackage = exports.sync = exports.unpublish = exports.destroy = exports.revertClient = exports.updateClient = exports.update = exports.create = exports.fetchAppPackage = exports.fetchAppDefinition = exports.fetch = void 0;
16
16
  const environment_1 = __importDefault(require("../../environment"));
17
17
  const package_json_1 = __importDefault(require("../../../package.json"));
18
18
  const staticViews_1 = require("../../db/views/staticViews");
@@ -24,14 +24,13 @@ const datasource_bb_default_1 = require("../../db/defaultData/datasource_bb_defa
24
24
  const workerRequests_1 = require("../../utilities/workerRequests");
25
25
  const utilities_1 = require("../../utilities");
26
26
  const redis_1 = require("../../utilities/redis");
27
- const clientLibrary_1 = require("../../utilities/fileSystem/clientLibrary");
27
+ const fileSystem_2 = require("../../utilities/fileSystem");
28
28
  const utils_2 = require("../../automations/utils");
29
29
  const logging_1 = require("../../automations/logging");
30
30
  const rows_1 = require("../../utilities/usageQuota/rows");
31
31
  const pro_1 = require("@budibase/pro");
32
32
  const types_1 = require("@budibase/types");
33
33
  const layouts_1 = require("../../constants/layouts");
34
- const plugins_1 = require("../../utilities/plugins");
35
34
  const sdk_1 = __importDefault(require("../../sdk"));
36
35
  // utility function, need to do away with this
37
36
  function getLayouts() {
@@ -76,12 +75,8 @@ function checkAppName(ctx, apps, name, currentAppId) {
76
75
  ctx.throw(400, "App name is already in use.");
77
76
  }
78
77
  }
79
- function createInstance(template, includeSampleData) {
78
+ function createInstance(appId, template, includeSampleData) {
80
79
  return __awaiter(this, void 0, void 0, function* () {
81
- const tenantId = backend_core_1.tenancy.isMultiTenant() ? backend_core_1.tenancy.getTenantId() : null;
82
- const baseAppId = (0, utils_1.generateAppID)(tenantId);
83
- const appId = (0, utils_1.generateDevAppID)(baseAppId);
84
- yield backend_core_1.context.updateAppId(appId);
85
80
  const db = backend_core_1.context.getAppDB();
86
81
  yield db.put({
87
82
  _id: "_design/database",
@@ -164,25 +159,25 @@ function fetchAppDefinition(ctx) {
164
159
  }
165
160
  exports.fetchAppDefinition = fetchAppDefinition;
166
161
  function fetchAppPackage(ctx) {
167
- var _a;
168
162
  return __awaiter(this, void 0, void 0, function* () {
169
163
  const db = backend_core_1.context.getAppDB();
170
164
  let application = yield db.get(utils_1.DocumentType.APP_METADATA);
171
165
  const layouts = yield getLayouts();
172
166
  let screens = yield getScreens();
173
167
  // Enrich plugin URLs
174
- application.usedPlugins = (0, plugins_1.enrichPluginURLs)(application.usedPlugins);
168
+ application.usedPlugins = backend_core_1.objectStore.enrichPluginURLs(application.usedPlugins);
175
169
  // Only filter screens if the user is not a builder
176
- if (!(((_a = ctx.user) === null || _a === void 0 ? void 0 : _a.builder) && ctx.user.builder.global)) {
170
+ if (!(ctx.user.builder && ctx.user.builder.global)) {
177
171
  const userRoleId = getUserRoleId(ctx);
178
172
  const accessController = new backend_core_1.roles.AccessController();
179
173
  screens = yield accessController.checkScreensAccess(screens, userRoleId);
180
174
  }
175
+ const clientLibPath = backend_core_1.objectStore.clientLibraryUrl(ctx.params.appId, application.version);
181
176
  ctx.body = {
182
177
  application,
183
178
  screens,
184
179
  layouts,
185
- clientLibPath: (0, utilities_1.clientLibraryPath)(ctx.params.appId, application.version),
180
+ clientLibPath,
186
181
  };
187
182
  });
188
183
  }
@@ -204,77 +199,80 @@ function performAppCreate(ctx) {
204
199
  instanceConfig.file = ctx.request.files.templateFile;
205
200
  }
206
201
  const includeSampleData = (0, utilities_1.isQsTrue)(ctx.request.body.sampleData);
207
- const instance = yield createInstance(instanceConfig, includeSampleData);
208
- const appId = instance._id;
209
- const db = backend_core_1.context.getAppDB();
210
- let newApplication = {
211
- _id: utils_1.DocumentType.APP_METADATA,
212
- _rev: undefined,
213
- appId,
214
- type: "app",
215
- version: package_json_1.default.version,
216
- componentLibraries: ["@budibase/standard-components"],
217
- name: name,
218
- url: url,
219
- template: templateKey,
220
- instance,
221
- tenantId: backend_core_1.tenancy.getTenantId(),
222
- updatedAt: new Date().toISOString(),
223
- createdAt: new Date().toISOString(),
224
- status: utils_1.AppStatus.DEV,
225
- navigation: {
226
- navigation: "Top",
227
- title: name,
228
- navWidth: "Large",
229
- navBackground: "var(--spectrum-global-color-gray-100)",
230
- links: [
231
- {
232
- url: "/home",
233
- text: "Home",
234
- },
235
- ],
236
- },
237
- theme: "spectrum--light",
238
- customTheme: {
239
- buttonBorderRadius: "16px",
240
- },
241
- };
242
- // If we used a template or imported an app there will be an existing doc.
243
- // Fetch and migrate some metadata from the existing app.
244
- try {
245
- const existing = yield db.get(utils_1.DocumentType.APP_METADATA);
246
- const keys = [
247
- "_rev",
248
- "navigation",
249
- "theme",
250
- "customTheme",
251
- "icon",
252
- ];
253
- keys.forEach(key => {
254
- if (existing[key]) {
255
- // @ts-ignore
256
- newApplication[key] = existing[key];
257
- }
258
- });
259
- // Migrate navigation settings and screens if required
260
- if (existing) {
261
- const navigation = yield migrateAppNavigation();
262
- if (navigation) {
263
- newApplication.navigation = navigation;
202
+ const tenantId = backend_core_1.tenancy.isMultiTenant() ? backend_core_1.tenancy.getTenantId() : null;
203
+ const appId = (0, utils_1.generateDevAppID)((0, utils_1.generateAppID)(tenantId));
204
+ return yield backend_core_1.context.doInAppContext(appId, () => __awaiter(this, void 0, void 0, function* () {
205
+ const instance = yield createInstance(appId, instanceConfig, includeSampleData);
206
+ const db = backend_core_1.context.getAppDB();
207
+ let newApplication = {
208
+ _id: utils_1.DocumentType.APP_METADATA,
209
+ _rev: undefined,
210
+ appId,
211
+ type: "app",
212
+ version: package_json_1.default.version,
213
+ componentLibraries: ["@budibase/standard-components"],
214
+ name: name,
215
+ url: url,
216
+ template: templateKey,
217
+ instance,
218
+ tenantId: backend_core_1.tenancy.getTenantId(),
219
+ updatedAt: new Date().toISOString(),
220
+ createdAt: new Date().toISOString(),
221
+ status: utils_1.AppStatus.DEV,
222
+ navigation: {
223
+ navigation: "Top",
224
+ title: name,
225
+ navWidth: "Large",
226
+ navBackground: "var(--spectrum-global-color-gray-100)",
227
+ links: [
228
+ {
229
+ url: "/home",
230
+ text: "Home",
231
+ },
232
+ ],
233
+ },
234
+ theme: "spectrum--light",
235
+ customTheme: {
236
+ buttonBorderRadius: "16px",
237
+ },
238
+ };
239
+ // If we used a template or imported an app there will be an existing doc.
240
+ // Fetch and migrate some metadata from the existing app.
241
+ try {
242
+ const existing = yield db.get(utils_1.DocumentType.APP_METADATA);
243
+ const keys = [
244
+ "_rev",
245
+ "navigation",
246
+ "theme",
247
+ "customTheme",
248
+ "icon",
249
+ ];
250
+ keys.forEach(key => {
251
+ if (existing[key]) {
252
+ // @ts-ignore
253
+ newApplication[key] = existing[key];
254
+ }
255
+ });
256
+ // Migrate navigation settings and screens if required
257
+ if (existing) {
258
+ const navigation = yield migrateAppNavigation();
259
+ if (navigation) {
260
+ newApplication.navigation = navigation;
261
+ }
264
262
  }
265
263
  }
266
- }
267
- catch (err) {
268
- // Nothing to do
269
- }
270
- const response = yield db.put(newApplication, { force: true });
271
- newApplication._rev = response.rev;
272
- /* istanbul ignore next */
273
- if (!environment_1.default.isTest()) {
274
- yield (0, fileSystem_1.createApp)(appId);
275
- }
276
- yield backend_core_1.cache.app.invalidateAppMetadata(appId, newApplication);
277
- return newApplication;
264
+ catch (err) {
265
+ // Nothing to do
266
+ }
267
+ const response = yield db.put(newApplication, { force: true });
268
+ newApplication._rev = response.rev;
269
+ /* istanbul ignore next */
270
+ if (!environment_1.default.isTest()) {
271
+ yield (0, fileSystem_1.createApp)(appId);
272
+ }
273
+ yield backend_core_1.cache.app.invalidateAppMetadata(appId, newApplication);
274
+ return newApplication;
275
+ }));
278
276
  });
279
277
  }
280
278
  function creationEvents(request, app) {
@@ -325,7 +323,7 @@ function appPostCreate(ctx, app) {
325
323
  if (err.code && err.code === backend_core_1.errors.codes.USAGE_LIMIT_EXCEEDED) {
326
324
  // this import resulted in row usage exceeding the quota
327
325
  // delete the app
328
- // skip pre- and post-steps as no rows have been added to quotas yet
326
+ // skip pre and post-steps as no rows have been added to quotas yet
329
327
  ctx.params.appId = app.appId;
330
328
  yield destroyApp(ctx);
331
329
  }
@@ -375,8 +373,8 @@ function updateClient(ctx) {
375
373
  const currentVersion = application.version;
376
374
  // Update client library and manifest
377
375
  if (!environment_1.default.isTest()) {
378
- yield (0, clientLibrary_1.backupClientLibrary)(ctx.params.appId);
379
- yield (0, clientLibrary_1.updateClientLibrary)(ctx.params.appId);
376
+ yield (0, fileSystem_2.backupClientLibrary)(ctx.params.appId);
377
+ yield (0, fileSystem_2.updateClientLibrary)(ctx.params.appId);
380
378
  }
381
379
  // Update versions in app package
382
380
  const updatedToVersion = package_json_1.default.version;
@@ -401,7 +399,7 @@ function revertClient(ctx) {
401
399
  }
402
400
  // Update client library and manifest
403
401
  if (!environment_1.default.isTest()) {
404
- yield (0, clientLibrary_1.revertClientLibrary)(ctx.params.appId);
402
+ yield (0, fileSystem_2.revertClientLibrary)(ctx.params.appId);
405
403
  }
406
404
  // Update versions in app package
407
405
  const currentVersion = application.version;
@@ -417,39 +415,39 @@ function revertClient(ctx) {
417
415
  });
418
416
  }
419
417
  exports.revertClient = revertClient;
418
+ const unpublishApp = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
419
+ let appId = ctx.params.appId;
420
+ appId = backend_core_1.db.getProdAppID(appId);
421
+ const db = backend_core_1.context.getProdAppDB();
422
+ const result = yield db.destroy();
423
+ yield backend_core_1.events.app.unpublished({ appId });
424
+ // automations only in production
425
+ yield (0, utils_2.cleanupAutomations)(appId);
426
+ yield backend_core_1.cache.app.invalidateAppMetadata(appId);
427
+ return result;
428
+ });
420
429
  function destroyApp(ctx) {
421
430
  return __awaiter(this, void 0, void 0, function* () {
422
431
  let appId = ctx.params.appId;
423
- let isUnpublish = ctx.query && ctx.query.unpublish;
424
- if (isUnpublish) {
425
- appId = backend_core_1.db.getProdAppID(appId);
426
- const devAppId = backend_core_1.db.getDevAppID(appId);
427
- // sync before removing the published app
432
+ appId = backend_core_1.db.getProdAppID(appId);
433
+ const devAppId = backend_core_1.db.getDevAppID(appId);
434
+ // check if we need to unpublish first
435
+ if (yield backend_core_1.db.dbExists(appId)) {
436
+ // app is deployed, run through unpublish flow
428
437
  yield sdk_1.default.applications.syncApp(devAppId);
438
+ yield unpublishApp(ctx);
429
439
  }
430
- const db = isUnpublish ? backend_core_1.context.getProdAppDB() : backend_core_1.context.getAppDB();
440
+ const db = backend_core_1.db.getDB(devAppId);
441
+ // standard app deletion flow
431
442
  const app = yield db.get(utils_1.DocumentType.APP_METADATA);
432
443
  const result = yield db.destroy();
433
- if (isUnpublish) {
434
- yield backend_core_1.events.app.unpublished(app);
435
- }
436
- else {
437
- yield pro_1.quotas.removeApp();
438
- yield backend_core_1.events.app.deleted(app);
439
- }
440
- /* istanbul ignore next */
441
- if (!environment_1.default.isTest() && !isUnpublish) {
444
+ yield pro_1.quotas.removeApp();
445
+ yield backend_core_1.events.app.deleted(app);
446
+ if (!environment_1.default.isTest()) {
442
447
  yield (0, fileSystem_1.deleteApp)(appId);
443
448
  }
444
- // automations only in production
445
- if (isUnpublish) {
446
- yield (0, utils_2.cleanupAutomations)(appId);
447
- }
448
- // remove app role when the dev app is deleted (no trace of app anymore)
449
- else {
450
- yield (0, workerRequests_1.removeAppFromUserRoles)(ctx, appId);
451
- }
452
- yield backend_core_1.cache.app.invalidateAppMetadata(appId);
449
+ yield (0, workerRequests_1.removeAppFromUserRoles)(ctx, appId);
450
+ yield backend_core_1.cache.app.invalidateAppMetadata(devAppId);
453
451
  return result;
454
452
  });
455
453
  }
@@ -478,6 +476,19 @@ function destroy(ctx) {
478
476
  });
479
477
  }
480
478
  exports.destroy = destroy;
479
+ const unpublish = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
480
+ const prodAppId = backend_core_1.db.getProdAppID(ctx.params.appId);
481
+ const dbExists = yield backend_core_1.db.dbExists(prodAppId);
482
+ // check app has been published
483
+ if (!dbExists) {
484
+ return ctx.throw(400, "App has not been published.");
485
+ }
486
+ yield preDestroyApp(ctx);
487
+ yield unpublishApp(ctx);
488
+ yield postDestroyApp(ctx);
489
+ ctx.status = 204;
490
+ });
491
+ exports.unpublish = unpublish;
481
492
  function sync(ctx) {
482
493
  return __awaiter(this, void 0, void 0, function* () {
483
494
  const appId = ctx.params.appId;
@@ -95,11 +95,15 @@ function importApps(ctx) {
95
95
  if (beenImported || !ctx.request.files || !ctx.request.files.importFile) {
96
96
  ctx.throw(400, "Import file is required and environment must be fresh to import apps.");
97
97
  }
98
- if (ctx.request.files.importFile.type !== "application/gzip") {
98
+ const file = ctx.request.files.importFile;
99
+ if (Array.isArray(file)) {
100
+ ctx.throw(400, "Single file is required");
101
+ }
102
+ if (file.type !== "application/gzip" && file.type !== "application/x-gzip") {
99
103
  ctx.throw(400, "Import file must be a gzipped tarball.");
100
104
  }
101
105
  // initially get all the app databases out of the tarball
102
- const tmpPath = sdk_1.default.backups.untarFile(ctx.request.files.importFile);
106
+ const tmpPath = sdk_1.default.backups.untarFile(file);
103
107
  const globalDbImport = sdk_1.default.backups.getGlobalDBFile(tmpPath);
104
108
  const appNames = sdk_1.default.backups.getListOfAppsInMulti(tmpPath);
105
109
  const globalDb = backend_core_1.tenancy.getGlobalDB();
@@ -8,6 +8,9 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  step((generator = generator.apply(thisArg, _arguments || [])).next());
9
9
  });
10
10
  };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
11
14
  Object.defineProperty(exports, "__esModule", { value: true });
12
15
  exports.query = exports.find = exports.destroy = exports.save = exports.update = exports.buildSchemaFromDb = exports.fetch = void 0;
13
16
  const utils_1 = require("../../db/utils");
@@ -17,6 +20,7 @@ const integrations_1 = require("../../integrations");
17
20
  const utils_2 = require("./row/utils");
18
21
  const utils_3 = require("../../threads/utils");
19
22
  const backend_core_1 = require("@budibase/backend-core");
23
+ const sdk_1 = __importDefault(require("../../sdk"));
20
24
  function fetch(ctx) {
21
25
  return __awaiter(this, void 0, void 0, function* () {
22
26
  // Get internal tables
@@ -35,12 +39,11 @@ function fetch(ctx) {
35
39
  const datasources = (yield db.allDocs((0, utils_1.getDatasourceParams)(null, {
36
40
  include_docs: true,
37
41
  }))).rows.map(row => row.doc);
38
- const allDatasources = [bbInternalDb, ...datasources];
42
+ const allDatasources = yield sdk_1.default.datasources.removeSecrets([
43
+ bbInternalDb,
44
+ ...datasources,
45
+ ]);
39
46
  for (let datasource of allDatasources) {
40
- if (datasource.config && datasource.config.auth) {
41
- // strip secrets from response so they don't show in the network request
42
- delete datasource.config.auth;
43
- }
44
47
  if (datasource.type === backend_core_1.db.BUDIBASE_DATASOURCE_TYPE) {
45
48
  datasource.entities = internal[datasource._id];
46
49
  }
@@ -52,7 +55,7 @@ exports.fetch = fetch;
52
55
  function buildSchemaFromDb(ctx) {
53
56
  return __awaiter(this, void 0, void 0, function* () {
54
57
  const db = backend_core_1.context.getAppDB();
55
- const datasource = yield db.get(ctx.params.datasourceId);
58
+ const datasource = yield sdk_1.default.datasources.get(ctx.params.datasourceId);
56
59
  const tablesFilter = ctx.request.body.tablesFilter;
57
60
  let { tables, error } = yield buildSchemaHelper(datasource);
58
61
  if (tablesFilter) {
@@ -125,18 +128,18 @@ function invalidateVariables(existingDatasource, updatedDatasource) {
125
128
  });
126
129
  }
127
130
  function update(ctx) {
128
- var _a;
131
+ var _a, _b;
129
132
  return __awaiter(this, void 0, void 0, function* () {
130
133
  const db = backend_core_1.context.getAppDB();
131
134
  const datasourceId = ctx.params.datasourceId;
132
- let datasource = yield db.get(datasourceId);
133
- const auth = datasource.config.auth;
135
+ let datasource = yield sdk_1.default.datasources.get(datasourceId);
136
+ const auth = (_a = datasource.config) === null || _a === void 0 ? void 0 : _a.auth;
134
137
  yield invalidateVariables(datasource, ctx.request.body);
135
138
  const isBudibaseSource = datasource.type === backend_core_1.db.BUDIBASE_DATASOURCE_TYPE;
136
139
  const dataSourceBody = isBudibaseSource
137
- ? { name: (_a = ctx.request.body) === null || _a === void 0 ? void 0 : _a.name }
140
+ ? { name: (_b = ctx.request.body) === null || _b === void 0 ? void 0 : _b.name }
138
141
  : ctx.request.body;
139
- datasource = Object.assign(Object.assign({}, datasource), dataSourceBody);
142
+ datasource = Object.assign(Object.assign({}, datasource), sdk_1.default.datasources.mergeConfigs(dataSourceBody, datasource));
140
143
  if (auth && !ctx.request.body.auth) {
141
144
  // don't strip auth config from DB
142
145
  datasource.config.auth = auth;
@@ -153,7 +156,9 @@ function update(ctx) {
153
156
  }
154
157
  ctx.status = 200;
155
158
  ctx.message = "Datasource saved successfully.";
156
- ctx.body = { datasource };
159
+ ctx.body = {
160
+ datasource: yield sdk_1.default.datasources.removeSecretSingle(datasource),
161
+ };
157
162
  });
158
163
  }
159
164
  exports.update = update;
@@ -180,7 +185,9 @@ function save(ctx) {
180
185
  yield source.pool.end();
181
186
  }
182
187
  }
183
- const response = { datasource };
188
+ const response = {
189
+ datasource: yield sdk_1.default.datasources.removeSecretSingle(datasource),
190
+ };
184
191
  if (schemaError) {
185
192
  response.error = schemaError;
186
193
  }
@@ -216,7 +223,7 @@ function destroy(ctx) {
216
223
  return __awaiter(this, void 0, void 0, function* () {
217
224
  const db = backend_core_1.context.getAppDB();
218
225
  const datasourceId = ctx.params.datasourceId;
219
- const datasource = yield db.get(datasourceId);
226
+ const datasource = yield sdk_1.default.datasources.get(datasourceId);
220
227
  // Delete all queries for the datasource
221
228
  if (datasource.type === backend_core_1.db.BUDIBASE_DATASOURCE_TYPE) {
222
229
  yield destroyInternalTablesBySourceId(datasourceId);
@@ -240,7 +247,8 @@ exports.destroy = destroy;
240
247
  function find(ctx) {
241
248
  return __awaiter(this, void 0, void 0, function* () {
242
249
  const database = backend_core_1.context.getAppDB();
243
- ctx.body = yield database.get(ctx.params.datasourceId);
250
+ const datasource = yield database.get(ctx.params.datasourceId);
251
+ ctx.body = yield sdk_1.default.datasources.removeSecretSingle(datasource);
244
252
  });
245
253
  }
246
254
  exports.find = find;
@@ -275,6 +283,7 @@ function updateError(error, newError, tables) {
275
283
  function buildSchemaHelper(datasource) {
276
284
  return __awaiter(this, void 0, void 0, function* () {
277
285
  const Connector = yield (0, integrations_1.getIntegration)(datasource.source);
286
+ datasource = yield sdk_1.default.datasources.enrich(datasource);
278
287
  // Connect to the DB and build the schema
279
288
  const connector = new Connector(datasource.config);
280
289
  yield connector.buildSchema(datasource._id, datasource.entities);
@@ -12,7 +12,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
12
12
  return (mod && mod.__esModule) ? mod : { "default": mod };
13
13
  };
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.deployApp = exports.deploymentProgress = exports.fetchDeployments = void 0;
15
+ exports.publishApp = exports.deploymentProgress = exports.fetchDeployments = void 0;
16
16
  const Deployment_1 = __importDefault(require("./Deployment"));
17
17
  const backend_core_1 = require("@budibase/backend-core");
18
18
  const utils_1 = require("../../../db/utils");
@@ -92,8 +92,46 @@ function initDeployedApp(prodAppId) {
92
92
  });
93
93
  });
94
94
  }
95
- function deployApp(deployment, userId) {
95
+ function fetchDeployments(ctx) {
96
+ return __awaiter(this, void 0, void 0, function* () {
97
+ try {
98
+ const db = backend_core_1.context.getAppDB();
99
+ const deploymentDoc = yield db.get(utils_1.DocumentType.DEPLOYMENTS);
100
+ const { updated, deployments } = yield checkAllDeployments(deploymentDoc);
101
+ if (updated) {
102
+ yield db.put(deployments);
103
+ }
104
+ ctx.body = Object.values(deployments.history).reverse();
105
+ }
106
+ catch (err) {
107
+ ctx.body = [];
108
+ }
109
+ });
110
+ }
111
+ exports.fetchDeployments = fetchDeployments;
112
+ function deploymentProgress(ctx) {
113
+ return __awaiter(this, void 0, void 0, function* () {
114
+ try {
115
+ const db = backend_core_1.context.getAppDB();
116
+ const deploymentDoc = yield db.get(utils_1.DocumentType.DEPLOYMENTS);
117
+ ctx.body = deploymentDoc[ctx.params.deploymentId];
118
+ }
119
+ catch (err) {
120
+ ctx.throw(500, `Error fetching data for deployment ${ctx.params.deploymentId}`);
121
+ }
122
+ });
123
+ }
124
+ exports.deploymentProgress = deploymentProgress;
125
+ const publishApp = function (ctx) {
96
126
  return __awaiter(this, void 0, void 0, function* () {
127
+ let deployment = new Deployment_1.default();
128
+ console.log("Deployment object created");
129
+ deployment.setStatus(DeploymentStatus.PENDING);
130
+ console.log("Deployment object set to pending");
131
+ deployment = yield storeDeploymentHistory(deployment);
132
+ console.log("Stored deployment history");
133
+ console.log("Deploying app...");
134
+ let app;
97
135
  let replication;
98
136
  try {
99
137
  const appId = backend_core_1.context.getAppId();
@@ -103,7 +141,7 @@ function deployApp(deployment, userId) {
103
141
  if (yield pro_1.backups.isEnabled()) {
104
142
  // trigger backup initially
105
143
  yield pro_1.backups.triggerAppBackup(productionAppId, types_1.AppBackupTrigger.PUBLISH, {
106
- createdBy: userId,
144
+ createdBy: ctx.user._id,
107
145
  });
108
146
  }
109
147
  const config = {
@@ -141,7 +179,7 @@ function deployApp(deployment, userId) {
141
179
  console.log("Deployed app initialised, setting deployment to successful");
142
180
  deployment.setStatus(DeploymentStatus.SUCCESS);
143
181
  yield storeDeploymentHistory(deployment);
144
- return appDoc;
182
+ app = appDoc;
145
183
  }
146
184
  catch (err) {
147
185
  deployment.setStatus(DeploymentStatus.FAILURE, err.message);
@@ -153,63 +191,8 @@ function deployApp(deployment, userId) {
153
191
  yield replication.close();
154
192
  }
155
193
  }
156
- });
157
- }
158
- function fetchDeployments(ctx) {
159
- return __awaiter(this, void 0, void 0, function* () {
160
- try {
161
- const db = backend_core_1.context.getAppDB();
162
- const deploymentDoc = yield db.get(utils_1.DocumentType.DEPLOYMENTS);
163
- const { updated, deployments } = yield checkAllDeployments(deploymentDoc);
164
- if (updated) {
165
- yield db.put(deployments);
166
- }
167
- ctx.body = Object.values(deployments.history).reverse();
168
- }
169
- catch (err) {
170
- ctx.body = [];
171
- }
172
- });
173
- }
174
- exports.fetchDeployments = fetchDeployments;
175
- function deploymentProgress(ctx) {
176
- return __awaiter(this, void 0, void 0, function* () {
177
- try {
178
- const db = backend_core_1.context.getAppDB();
179
- const deploymentDoc = yield db.get(utils_1.DocumentType.DEPLOYMENTS);
180
- ctx.body = deploymentDoc[ctx.params.deploymentId];
181
- }
182
- catch (err) {
183
- ctx.throw(500, `Error fetching data for deployment ${ctx.params.deploymentId}`);
184
- }
185
- });
186
- }
187
- exports.deploymentProgress = deploymentProgress;
188
- const isFirstDeploy = () => __awaiter(void 0, void 0, void 0, function* () {
189
- try {
190
- const db = backend_core_1.context.getProdAppDB();
191
- yield db.get(utils_1.DocumentType.APP_METADATA);
192
- }
193
- catch (e) {
194
- if (e.status === 404) {
195
- return true;
196
- }
197
- throw e;
198
- }
199
- return false;
200
- });
201
- const _deployApp = function (ctx) {
202
- return __awaiter(this, void 0, void 0, function* () {
203
- let deployment = new Deployment_1.default();
204
- console.log("Deployment object created");
205
- deployment.setStatus(DeploymentStatus.PENDING);
206
- console.log("Deployment object set to pending");
207
- deployment = yield storeDeploymentHistory(deployment);
208
- console.log("Stored deployment history");
209
- console.log("Deploying app...");
210
- let app = yield deployApp(deployment, ctx.user._id);
211
194
  yield backend_core_1.events.app.published(app);
212
195
  ctx.body = deployment;
213
196
  });
214
197
  };
215
- exports.deployApp = _deployApp;
198
+ exports.publishApp = publishApp;
@@ -18,15 +18,15 @@ const backend_core_1 = require("@budibase/backend-core");
18
18
  const types_1 = require("@budibase/types");
19
19
  const environment_1 = __importDefault(require("../../../environment"));
20
20
  const websocket_1 = require("../../../websocket");
21
- const backend_core_2 = require("@budibase/backend-core");
22
21
  const pro_1 = require("@budibase/pro");
23
22
  function getPlugins(type) {
24
23
  return __awaiter(this, void 0, void 0, function* () {
25
24
  const db = backend_core_1.tenancy.getGlobalDB();
26
- const response = yield db.allDocs(backend_core_2.db.getPluginParams(null, {
25
+ const response = yield db.allDocs(backend_core_1.db.getPluginParams(null, {
27
26
  include_docs: true,
28
27
  }));
29
- const plugins = response.rows.map((row) => row.doc);
28
+ let plugins = response.rows.map((row) => row.doc);
29
+ plugins = backend_core_1.objectStore.enrichPluginURLs(plugins);
30
30
  if (type) {
31
31
  return plugins.filter((plugin) => { var _a; return ((_a = plugin.schema) === null || _a === void 0 ? void 0 : _a.type) === type; });
32
32
  }
@@ -92,7 +92,7 @@ function create(ctx) {
92
92
  if (!environment_1.default.SELF_HOSTED && ((_a = metadata === null || metadata === void 0 ? void 0 : metadata.schema) === null || _a === void 0 ? void 0 : _a.type) !== types_1.PluginType.COMPONENT) {
93
93
  throw new Error("Only component plugins are supported outside of self-host");
94
94
  }
95
- const doc = yield pro_1.plugins.storePlugin(metadata, directory, source);
95
+ const doc = yield pro_1.sdk.plugins.storePlugin(metadata, directory, source);
96
96
  websocket_1.ClientAppSocket.emit("plugins-update", { name, hash: doc.hash });
97
97
  ctx.body = {
98
98
  message: "Plugin uploaded successfully",
@@ -117,7 +117,7 @@ function destroy(ctx) {
117
117
  return __awaiter(this, void 0, void 0, function* () {
118
118
  const { pluginId } = ctx.params;
119
119
  try {
120
- yield pro_1.plugins.deletePlugin(pluginId);
120
+ yield pro_1.sdk.plugins.deletePlugin(pluginId);
121
121
  ctx.body = { message: `Plugin ${ctx.params.pluginId} deleted.` };
122
122
  }
123
123
  catch (err) {
@@ -135,7 +135,7 @@ function processUploadedPlugin(plugin, source) {
135
135
  if (!environment_1.default.SELF_HOSTED && ((_a = metadata === null || metadata === void 0 ? void 0 : metadata.schema) === null || _a === void 0 ? void 0 : _a.type) !== types_1.PluginType.COMPONENT) {
136
136
  throw new Error("Only component plugins are supported outside of self-host");
137
137
  }
138
- const doc = yield pro_1.plugins.storePlugin(metadata, directory, source);
138
+ const doc = yield pro_1.sdk.plugins.storePlugin(metadata, directory, source);
139
139
  websocket_1.ClientAppSocket.emit("plugin-update", { name: doc.name, hash: doc.hash });
140
140
  return doc;
141
141
  });