@budibase/server 2.2.11 → 2.2.12-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (460) hide show
  1. package/__mocks__/aws-sdk.ts +19 -0
  2. package/__mocks__/node-fetch.ts +78 -0
  3. package/builder/assets/{index.7481e2b4.js → index.a4f7991a.js} +362 -359
  4. package/builder/assets/{index.9cb087df.css → index.fa480d5b.css} +2 -2
  5. package/builder/index.html +2 -2
  6. package/coverage/clover.xml +5038 -5004
  7. package/coverage/coverage-final.json +268 -265
  8. package/coverage/lcov-report/index.html +206 -206
  9. package/coverage/lcov-report/src/api/controllers/analytics.ts.html +7 -7
  10. package/coverage/lcov-report/src/api/controllers/apikeys.ts.html +5 -5
  11. package/coverage/lcov-report/src/api/controllers/application.ts.html +258 -183
  12. package/coverage/lcov-report/src/api/controllers/auth.ts.html +11 -11
  13. package/coverage/lcov-report/src/api/controllers/automation.ts.html +51 -51
  14. package/coverage/lcov-report/src/api/controllers/backup.ts.html +6 -6
  15. package/coverage/lcov-report/src/api/controllers/cloud.ts.html +91 -79
  16. package/coverage/lcov-report/src/api/controllers/component.ts.html +5 -5
  17. package/coverage/lcov-report/src/api/controllers/datasource.ts.html +30 -30
  18. package/coverage/lcov-report/src/api/controllers/deploy/Deployment.ts.html +17 -14
  19. package/coverage/lcov-report/src/api/controllers/deploy/index.html +19 -19
  20. package/coverage/lcov-report/src/api/controllers/deploy/index.ts.html +141 -195
  21. package/coverage/lcov-report/src/api/controllers/dev.ts.html +18 -18
  22. package/coverage/lcov-report/src/api/controllers/index.html +51 -51
  23. package/coverage/lcov-report/src/api/controllers/integration.ts.html +4 -4
  24. package/coverage/lcov-report/src/api/controllers/layout.ts.html +6 -6
  25. package/coverage/lcov-report/src/api/controllers/metadata.ts.html +9 -9
  26. package/coverage/lcov-report/src/api/controllers/migrations.ts.html +4 -4
  27. package/coverage/lcov-report/src/api/controllers/permission.ts.html +13 -13
  28. package/coverage/lcov-report/src/api/controllers/plugin/file.ts.html +19 -19
  29. package/coverage/lcov-report/src/api/controllers/plugin/github.ts.html +63 -63
  30. package/coverage/lcov-report/src/api/controllers/plugin/index.html +72 -72
  31. package/coverage/lcov-report/src/api/controllers/plugin/index.ts.html +150 -135
  32. package/coverage/lcov-report/src/api/controllers/plugin/npm.ts.html +55 -55
  33. package/coverage/lcov-report/src/api/controllers/plugin/uploaders.ts.html +11 -11
  34. package/coverage/lcov-report/src/api/controllers/plugin/url.ts.html +18 -18
  35. package/coverage/lcov-report/src/api/controllers/plugin/utils.ts.html +20 -20
  36. package/coverage/lcov-report/src/api/controllers/public/applications.ts.html +67 -16
  37. package/coverage/lcov-report/src/api/controllers/public/index.html +15 -15
  38. package/coverage/lcov-report/src/api/controllers/public/mapping/applications.ts.html +2 -2
  39. package/coverage/lcov-report/src/api/controllers/public/mapping/index.html +1 -1
  40. package/coverage/lcov-report/src/api/controllers/public/mapping/index.ts.html +7 -7
  41. package/coverage/lcov-report/src/api/controllers/public/mapping/queries.ts.html +2 -2
  42. package/coverage/lcov-report/src/api/controllers/public/mapping/rows.ts.html +2 -2
  43. package/coverage/lcov-report/src/api/controllers/public/mapping/tables.ts.html +2 -2
  44. package/coverage/lcov-report/src/api/controllers/public/mapping/users.ts.html +2 -2
  45. package/coverage/lcov-report/src/api/controllers/public/queries.ts.html +6 -6
  46. package/coverage/lcov-report/src/api/controllers/public/rows.ts.html +10 -10
  47. package/coverage/lcov-report/src/api/controllers/public/tables.ts.html +9 -9
  48. package/coverage/lcov-report/src/api/controllers/public/users.ts.html +11 -11
  49. package/coverage/lcov-report/src/api/controllers/public/utils.ts.html +6 -6
  50. package/coverage/lcov-report/src/api/controllers/query/import/index.html +1 -1
  51. package/coverage/lcov-report/src/api/controllers/query/import/index.ts.html +8 -8
  52. package/coverage/lcov-report/src/api/controllers/query/import/sources/base/index.html +1 -1
  53. package/coverage/lcov-report/src/api/controllers/query/import/sources/base/index.ts.html +8 -8
  54. package/coverage/lcov-report/src/api/controllers/query/import/sources/base/openapi.ts.html +5 -5
  55. package/coverage/lcov-report/src/api/controllers/query/import/sources/curl.ts.html +8 -8
  56. package/coverage/lcov-report/src/api/controllers/query/import/sources/index.html +1 -1
  57. package/coverage/lcov-report/src/api/controllers/query/import/sources/openapi2.ts.html +10 -10
  58. package/coverage/lcov-report/src/api/controllers/query/import/sources/openapi3.ts.html +14 -14
  59. package/coverage/lcov-report/src/api/controllers/query/index.html +19 -19
  60. package/coverage/lcov-report/src/api/controllers/query/index.ts.html +60 -60
  61. package/coverage/lcov-report/src/api/controllers/query/validation.ts.html +9 -9
  62. package/coverage/lcov-report/src/api/controllers/role.ts.html +8 -8
  63. package/coverage/lcov-report/src/api/controllers/routing.ts.html +6 -6
  64. package/coverage/lcov-report/src/api/controllers/row/ExternalRequest.ts.html +12 -15
  65. package/coverage/lcov-report/src/api/controllers/row/external.ts.html +20 -20
  66. package/coverage/lcov-report/src/api/controllers/row/index.html +1 -1
  67. package/coverage/lcov-report/src/api/controllers/row/index.ts.html +14 -14
  68. package/coverage/lcov-report/src/api/controllers/row/internal.ts.html +55 -52
  69. package/coverage/lcov-report/src/api/controllers/row/internalSearch.ts.html +9 -9
  70. package/coverage/lcov-report/src/api/controllers/row/staticFormula.ts.html +21 -12
  71. package/coverage/lcov-report/src/api/controllers/row/utils.ts.html +17 -14
  72. package/coverage/lcov-report/src/api/controllers/screen.ts.html +26 -26
  73. package/coverage/lcov-report/src/api/controllers/script.ts.html +18 -18
  74. package/coverage/lcov-report/src/api/controllers/static/index.html +11 -11
  75. package/coverage/lcov-report/src/api/controllers/static/index.ts.html +32 -44
  76. package/coverage/lcov-report/src/api/controllers/table/bulkFormula.ts.html +10 -10
  77. package/coverage/lcov-report/src/api/controllers/table/external.ts.html +14 -14
  78. package/coverage/lcov-report/src/api/controllers/table/index.html +19 -19
  79. package/coverage/lcov-report/src/api/controllers/table/index.ts.html +14 -14
  80. package/coverage/lcov-report/src/api/controllers/table/internal.ts.html +17 -17
  81. package/coverage/lcov-report/src/api/controllers/table/utils.ts.html +51 -51
  82. package/coverage/lcov-report/src/api/controllers/templates.ts.html +7 -7
  83. package/coverage/lcov-report/src/api/controllers/user.ts.html +119 -119
  84. package/coverage/lcov-report/src/api/controllers/view/exporters.ts.html +4 -4
  85. package/coverage/lcov-report/src/api/controllers/view/index.html +1 -1
  86. package/coverage/lcov-report/src/api/controllers/view/index.ts.html +49 -49
  87. package/coverage/lcov-report/src/api/controllers/view/utils.ts.html +22 -22
  88. package/coverage/lcov-report/src/api/controllers/view/viewBuilder.ts.html +33 -33
  89. package/coverage/lcov-report/src/api/controllers/webhook.ts.html +14 -14
  90. package/coverage/lcov-report/src/api/index.html +1 -1
  91. package/coverage/lcov-report/src/api/index.ts.html +33 -33
  92. package/coverage/lcov-report/src/api/routes/analytics.ts.html +7 -7
  93. package/coverage/lcov-report/src/api/routes/apikeys.ts.html +8 -8
  94. package/coverage/lcov-report/src/api/routes/application.ts.html +44 -11
  95. package/coverage/lcov-report/src/api/routes/auth.ts.html +6 -6
  96. package/coverage/lcov-report/src/api/routes/automation.ts.html +11 -11
  97. package/coverage/lcov-report/src/api/routes/backup.ts.html +8 -8
  98. package/coverage/lcov-report/src/api/routes/cloud.ts.html +8 -8
  99. package/coverage/lcov-report/src/api/routes/component.ts.html +8 -8
  100. package/coverage/lcov-report/src/api/routes/datasource.ts.html +9 -9
  101. package/coverage/lcov-report/src/api/routes/deploy.ts.html +8 -11
  102. package/coverage/lcov-report/src/api/routes/dev.ts.html +13 -13
  103. package/coverage/lcov-report/src/api/routes/index.html +7 -7
  104. package/coverage/lcov-report/src/api/routes/index.ts.html +40 -37
  105. package/coverage/lcov-report/src/api/routes/integration.ts.html +8 -8
  106. package/coverage/lcov-report/src/api/routes/layout.ts.html +8 -8
  107. package/coverage/lcov-report/src/api/routes/metadata.ts.html +9 -9
  108. package/coverage/lcov-report/src/api/routes/migrations.ts.html +7 -7
  109. package/coverage/lcov-report/src/api/routes/permission.ts.html +9 -9
  110. package/coverage/lcov-report/src/api/routes/plugin.ts.html +8 -8
  111. package/coverage/lcov-report/src/api/routes/public/applications.ts.html +146 -14
  112. package/coverage/lcov-report/src/api/routes/public/index.html +7 -7
  113. package/coverage/lcov-report/src/api/routes/public/index.ts.html +52 -52
  114. package/coverage/lcov-report/src/api/routes/public/middleware/index.html +15 -15
  115. package/coverage/lcov-report/src/api/routes/public/middleware/mapper.ts.html +28 -16
  116. package/coverage/lcov-report/src/api/routes/public/queries.ts.html +9 -9
  117. package/coverage/lcov-report/src/api/routes/public/rows.ts.html +12 -12
  118. package/coverage/lcov-report/src/api/routes/public/tables.ts.html +12 -12
  119. package/coverage/lcov-report/src/api/routes/public/tests/index.html +1 -1
  120. package/coverage/lcov-report/src/api/routes/public/tests/utils.ts.html +1 -1
  121. package/coverage/lcov-report/src/api/routes/public/users.ts.html +12 -12
  122. package/coverage/lcov-report/src/api/routes/public/utils/Endpoint.ts.html +19 -19
  123. package/coverage/lcov-report/src/api/routes/public/utils/index.html +1 -1
  124. package/coverage/lcov-report/src/api/routes/query.ts.html +11 -11
  125. package/coverage/lcov-report/src/api/routes/role.ts.html +9 -9
  126. package/coverage/lcov-report/src/api/routes/routing.ts.html +8 -8
  127. package/coverage/lcov-report/src/api/routes/row.ts.html +11 -11
  128. package/coverage/lcov-report/src/api/routes/screen.ts.html +9 -9
  129. package/coverage/lcov-report/src/api/routes/script.ts.html +1 -1
  130. package/coverage/lcov-report/src/api/routes/static.ts.html +14 -14
  131. package/coverage/lcov-report/src/api/routes/table.ts.html +11 -11
  132. package/coverage/lcov-report/src/api/routes/templates.ts.html +8 -8
  133. package/coverage/lcov-report/src/api/routes/tests/utilities/TestFunctions.ts.html +15 -15
  134. package/coverage/lcov-report/src/api/routes/tests/utilities/index.html +1 -1
  135. package/coverage/lcov-report/src/api/routes/tests/utilities/index.ts.html +24 -24
  136. package/coverage/lcov-report/src/api/routes/user.ts.html +9 -9
  137. package/coverage/lcov-report/src/api/routes/utils/index.html +1 -1
  138. package/coverage/lcov-report/src/api/routes/utils/validators.ts.html +42 -42
  139. package/coverage/lcov-report/src/api/routes/view.ts.html +10 -10
  140. package/coverage/lcov-report/src/api/routes/webhook.ts.html +10 -10
  141. package/coverage/lcov-report/src/app.ts.html +32 -32
  142. package/coverage/lcov-report/src/automations/actions.ts.html +25 -25
  143. package/coverage/lcov-report/src/automations/automationUtils.ts.html +91 -19
  144. package/coverage/lcov-report/src/automations/bullboard.ts.html +11 -11
  145. package/coverage/lcov-report/src/automations/index.html +19 -19
  146. package/coverage/lcov-report/src/automations/index.ts.html +13 -13
  147. package/coverage/lcov-report/src/automations/logging/index.html +1 -1
  148. package/coverage/lcov-report/src/automations/logging/index.ts.html +11 -11
  149. package/coverage/lcov-report/src/automations/steps/bash.ts.html +34 -34
  150. package/coverage/lcov-report/src/automations/steps/createRow.ts.html +7 -7
  151. package/coverage/lcov-report/src/automations/steps/delay.ts.html +5 -5
  152. package/coverage/lcov-report/src/automations/steps/deleteRow.ts.html +7 -7
  153. package/coverage/lcov-report/src/automations/steps/discord.ts.html +33 -33
  154. package/coverage/lcov-report/src/automations/steps/executeQuery.ts.html +35 -35
  155. package/coverage/lcov-report/src/automations/steps/executeScript.ts.html +31 -31
  156. package/coverage/lcov-report/src/automations/steps/filter.ts.html +6 -6
  157. package/coverage/lcov-report/src/automations/steps/index.html +83 -83
  158. package/coverage/lcov-report/src/automations/steps/integromat.ts.html +6 -6
  159. package/coverage/lcov-report/src/automations/steps/loop.ts.html +3 -3
  160. package/coverage/lcov-report/src/automations/steps/outgoingWebhook.ts.html +14 -14
  161. package/coverage/lcov-report/src/automations/steps/queryRows.ts.html +17 -17
  162. package/coverage/lcov-report/src/automations/steps/sendSmtpEmail.ts.html +28 -28
  163. package/coverage/lcov-report/src/automations/steps/serverLog.ts.html +18 -18
  164. package/coverage/lcov-report/src/automations/steps/slack.ts.html +6 -6
  165. package/coverage/lcov-report/src/automations/steps/updateRow.ts.html +7 -7
  166. package/coverage/lcov-report/src/automations/steps/utils.ts.html +16 -16
  167. package/coverage/lcov-report/src/automations/steps/zapier.ts.html +22 -22
  168. package/coverage/lcov-report/src/automations/tests/utilities/index.html +5 -5
  169. package/coverage/lcov-report/src/automations/tests/utilities/index.ts.html +26 -26
  170. package/coverage/lcov-report/src/automations/triggerInfo/app.ts.html +3 -3
  171. package/coverage/lcov-report/src/automations/triggerInfo/cron.ts.html +3 -3
  172. package/coverage/lcov-report/src/automations/triggerInfo/index.html +1 -1
  173. package/coverage/lcov-report/src/automations/triggerInfo/index.ts.html +8 -8
  174. package/coverage/lcov-report/src/automations/triggerInfo/rowDeleted.ts.html +3 -3
  175. package/coverage/lcov-report/src/automations/triggerInfo/rowSaved.ts.html +3 -3
  176. package/coverage/lcov-report/src/automations/triggerInfo/rowUpdated.ts.html +3 -3
  177. package/coverage/lcov-report/src/automations/triggerInfo/webhook.ts.html +3 -3
  178. package/coverage/lcov-report/src/automations/triggers.ts.html +21 -21
  179. package/coverage/lcov-report/src/automations/utils.ts.html +56 -56
  180. package/coverage/lcov-report/src/constants/index.html +1 -1
  181. package/coverage/lcov-report/src/constants/index.ts.html +92 -92
  182. package/coverage/lcov-report/src/constants/layouts.ts.html +4 -4
  183. package/coverage/lcov-report/src/constants/screens.ts.html +5 -5
  184. package/coverage/lcov-report/src/db/defaultData/datasource_bb_default.ts.html +23 -23
  185. package/coverage/lcov-report/src/db/defaultData/employeeImport.ts.html +2 -2
  186. package/coverage/lcov-report/src/db/defaultData/expensesImport.ts.html +2 -2
  187. package/coverage/lcov-report/src/db/defaultData/index.html +1 -1
  188. package/coverage/lcov-report/src/db/defaultData/inventoryImport.ts.html +2 -2
  189. package/coverage/lcov-report/src/db/defaultData/jobsImport.ts.html +2 -2
  190. package/coverage/lcov-report/src/db/dynamoClient.ts.html +16 -16
  191. package/coverage/lcov-report/src/db/inMemoryView.ts.html +5 -5
  192. package/coverage/lcov-report/src/db/index.html +19 -19
  193. package/coverage/lcov-report/src/db/index.ts.html +9 -9
  194. package/coverage/lcov-report/src/db/linkedRows/LinkController.ts.html +8 -8
  195. package/coverage/lcov-report/src/db/linkedRows/LinkDocument.ts.html +4 -4
  196. package/coverage/lcov-report/src/db/linkedRows/index.html +1 -1
  197. package/coverage/lcov-report/src/db/linkedRows/index.ts.html +15 -15
  198. package/coverage/lcov-report/src/db/linkedRows/linkUtils.ts.html +12 -12
  199. package/coverage/lcov-report/src/db/newid.ts.html +4 -4
  200. package/coverage/lcov-report/src/db/utils.ts.html +80 -80
  201. package/coverage/lcov-report/src/definitions/automations.ts.html +4 -4
  202. package/coverage/lcov-report/src/definitions/datasource.ts.html +4 -4
  203. package/coverage/lcov-report/src/definitions/index.html +1 -1
  204. package/coverage/lcov-report/src/environment.ts.html +40 -28
  205. package/coverage/lcov-report/src/events/AutomationEmitter.ts.html +6 -6
  206. package/coverage/lcov-report/src/events/BudibaseEmitter.ts.html +5 -5
  207. package/coverage/lcov-report/src/events/index.html +1 -1
  208. package/coverage/lcov-report/src/events/index.ts.html +4 -4
  209. package/coverage/lcov-report/src/events/utils.ts.html +3 -3
  210. package/coverage/lcov-report/src/index.html +25 -25
  211. package/coverage/lcov-report/src/index.ts.html +1 -1
  212. package/coverage/lcov-report/src/integrations/airtable.ts.html +5 -5
  213. package/coverage/lcov-report/src/integrations/arangodb.ts.html +5 -5
  214. package/coverage/lcov-report/src/integrations/base/index.html +1 -1
  215. package/coverage/lcov-report/src/integrations/base/query.ts.html +3 -3
  216. package/coverage/lcov-report/src/integrations/base/sql.ts.html +14 -14
  217. package/coverage/lcov-report/src/integrations/base/sqlTable.ts.html +8 -8
  218. package/coverage/lcov-report/src/integrations/base/utils.ts.html +3 -3
  219. package/coverage/lcov-report/src/integrations/couchdb.ts.html +5 -5
  220. package/coverage/lcov-report/src/integrations/dynamodb.ts.html +6 -6
  221. package/coverage/lcov-report/src/integrations/elasticsearch.ts.html +5 -5
  222. package/coverage/lcov-report/src/integrations/firebase.ts.html +5 -5
  223. package/coverage/lcov-report/src/integrations/googlesheets.ts.html +12 -12
  224. package/coverage/lcov-report/src/integrations/index.html +5 -5
  225. package/coverage/lcov-report/src/integrations/index.ts.html +35 -47
  226. package/coverage/lcov-report/src/integrations/microsoftSqlServer.ts.html +8 -8
  227. package/coverage/lcov-report/src/integrations/mongodb.ts.html +5 -5
  228. package/coverage/lcov-report/src/integrations/mysql.ts.html +10 -10
  229. package/coverage/lcov-report/src/integrations/oracle.ts.html +13 -13
  230. package/coverage/lcov-report/src/integrations/postgres.ts.html +42 -42
  231. package/coverage/lcov-report/src/integrations/queries/index.html +1 -1
  232. package/coverage/lcov-report/src/integrations/queries/sql.ts.html +13 -13
  233. package/coverage/lcov-report/src/integrations/redis.ts.html +5 -5
  234. package/coverage/lcov-report/src/integrations/rest.ts.html +16 -16
  235. package/coverage/lcov-report/src/integrations/s3.ts.html +6 -6
  236. package/coverage/lcov-report/src/integrations/snowflake.ts.html +5 -5
  237. package/coverage/lcov-report/src/integrations/tests/TestConfiguration.js.html +1 -1
  238. package/coverage/lcov-report/src/integrations/tests/index.html +1 -1
  239. package/coverage/lcov-report/src/integrations/utils.ts.html +36 -36
  240. package/coverage/lcov-report/src/middleware/appInfo.ts.html +7 -7
  241. package/coverage/lcov-report/src/middleware/authorized.ts.html +28 -28
  242. package/coverage/lcov-report/src/middleware/builder.ts.html +17 -17
  243. package/coverage/lcov-report/src/middleware/currentapp.ts.html +39 -39
  244. package/coverage/lcov-report/src/middleware/index.html +1 -1
  245. package/coverage/lcov-report/src/middleware/joi-validator.ts.html +1 -1
  246. package/coverage/lcov-report/src/middleware/publicApi.ts.html +4 -4
  247. package/coverage/lcov-report/src/middleware/resourceId.ts.html +22 -22
  248. package/coverage/lcov-report/src/middleware/selfhost.ts.html +1 -1
  249. package/coverage/lcov-report/src/middleware/utils.ts.html +4 -4
  250. package/coverage/lcov-report/src/migrations/functions/appUrls.ts.html +4 -4
  251. package/coverage/lcov-report/src/migrations/functions/backfill/app/automations.ts.html +5 -5
  252. package/coverage/lcov-report/src/migrations/functions/backfill/app/datasources.ts.html +5 -5
  253. package/coverage/lcov-report/src/migrations/functions/backfill/app/index.html +1 -1
  254. package/coverage/lcov-report/src/migrations/functions/backfill/app/layouts.ts.html +5 -5
  255. package/coverage/lcov-report/src/migrations/functions/backfill/app/queries.ts.html +7 -7
  256. package/coverage/lcov-report/src/migrations/functions/backfill/app/roles.ts.html +5 -5
  257. package/coverage/lcov-report/src/migrations/functions/backfill/app/screens.ts.html +5 -5
  258. package/coverage/lcov-report/src/migrations/functions/backfill/app/tables.ts.html +4 -4
  259. package/coverage/lcov-report/src/migrations/functions/backfill/app.ts.html +19 -19
  260. package/coverage/lcov-report/src/migrations/functions/backfill/global/configs.ts.html +13 -10
  261. package/coverage/lcov-report/src/migrations/functions/backfill/global/index.html +1 -1
  262. package/coverage/lcov-report/src/migrations/functions/backfill/global/quotas.ts.html +7 -7
  263. package/coverage/lcov-report/src/migrations/functions/backfill/global/users.ts.html +6 -6
  264. package/coverage/lcov-report/src/migrations/functions/backfill/global.ts.html +15 -15
  265. package/coverage/lcov-report/src/migrations/functions/backfill/index.html +1 -1
  266. package/coverage/lcov-report/src/migrations/functions/backfill/index.ts.html +5 -5
  267. package/coverage/lcov-report/src/migrations/functions/backfill/installation.ts.html +8 -8
  268. package/coverage/lcov-report/src/migrations/functions/index.html +1 -1
  269. package/coverage/lcov-report/src/migrations/functions/syncQuotas.ts.html +6 -6
  270. package/coverage/lcov-report/src/migrations/functions/tableSettings.ts.html +6 -6
  271. package/coverage/lcov-report/src/migrations/functions/usageQuotas/index.html +1 -1
  272. package/coverage/lcov-report/src/migrations/functions/usageQuotas/index.ts.html +2 -2
  273. package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncApps.ts.html +5 -5
  274. package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncPlugins.ts.html +4 -4
  275. package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncRows.ts.html +6 -6
  276. package/coverage/lcov-report/src/migrations/functions/userEmailViewCasing.ts.html +3 -3
  277. package/coverage/lcov-report/src/migrations/index.html +1 -1
  278. package/coverage/lcov-report/src/migrations/index.ts.html +32 -32
  279. package/coverage/lcov-report/src/migrations/tests/helpers.ts.html +1 -1
  280. package/coverage/lcov-report/src/migrations/tests/index.html +1 -1
  281. package/coverage/lcov-report/src/migrations/tests/structures.ts.html +1 -1
  282. package/coverage/lcov-report/src/sdk/app/applications/index.html +15 -15
  283. package/coverage/lcov-report/src/sdk/app/applications/index.ts.html +4 -4
  284. package/coverage/lcov-report/src/sdk/app/applications/sync.ts.html +34 -34
  285. package/coverage/lcov-report/src/sdk/app/applications/utils.ts.html +9 -9
  286. package/coverage/lcov-report/src/sdk/app/automations/index.html +1 -1
  287. package/coverage/lcov-report/src/sdk/app/automations/index.ts.html +3 -3
  288. package/coverage/lcov-report/src/sdk/app/automations/webhook.ts.html +6 -6
  289. package/coverage/lcov-report/src/sdk/app/backups/constants.ts.html +3 -3
  290. package/coverage/lcov-report/src/sdk/app/backups/exports.ts.html +17 -17
  291. package/coverage/lcov-report/src/sdk/app/backups/imports.ts.html +41 -53
  292. package/coverage/lcov-report/src/sdk/app/backups/index.html +28 -28
  293. package/coverage/lcov-report/src/sdk/app/backups/index.ts.html +5 -5
  294. package/coverage/lcov-report/src/sdk/app/backups/statistics.ts.html +73 -73
  295. package/coverage/lcov-report/src/sdk/app/rows/attachments.ts.html +6 -6
  296. package/coverage/lcov-report/src/sdk/app/rows/index.html +1 -1
  297. package/coverage/lcov-report/src/sdk/app/rows/index.ts.html +4 -4
  298. package/coverage/lcov-report/src/sdk/app/rows/rows.ts.html +4 -4
  299. package/coverage/lcov-report/src/sdk/app/tables/index.html +1 -1
  300. package/coverage/lcov-report/src/sdk/app/tables/index.ts.html +5 -5
  301. package/coverage/lcov-report/src/sdk/index.html +1 -1
  302. package/coverage/lcov-report/src/sdk/index.ts.html +9 -9
  303. package/coverage/lcov-report/src/sdk/users/index.html +5 -5
  304. package/coverage/lcov-report/src/sdk/users/index.ts.html +3 -3
  305. package/coverage/lcov-report/src/sdk/users/utils.ts.html +34 -34
  306. package/coverage/lcov-report/src/startup.ts.html +42 -42
  307. package/coverage/lcov-report/src/tests/utilities/TestConfiguration.ts.html +182 -125
  308. package/coverage/lcov-report/src/tests/utilities/controllers.ts.html +15 -15
  309. package/coverage/lcov-report/src/tests/utilities/index.html +15 -15
  310. package/coverage/lcov-report/src/tests/utilities/index.ts.html +1 -1
  311. package/coverage/lcov-report/src/tests/utilities/structures.ts.html +30 -30
  312. package/coverage/lcov-report/src/threads/automation.ts.html +34 -103
  313. package/coverage/lcov-report/src/threads/index.html +19 -19
  314. package/coverage/lcov-report/src/threads/index.ts.html +25 -25
  315. package/coverage/lcov-report/src/threads/query.ts.html +71 -71
  316. package/coverage/lcov-report/src/threads/utils.ts.html +18 -18
  317. package/coverage/lcov-report/src/utilities/budibaseDir.ts.html +3 -3
  318. package/coverage/lcov-report/src/utilities/centralPath.ts.html +4 -4
  319. package/coverage/lcov-report/src/utilities/csvParser.ts.html +8 -8
  320. package/coverage/lcov-report/src/utilities/fileSystem/app.ts.html +343 -0
  321. package/coverage/lcov-report/src/utilities/fileSystem/clientLibrary.ts.html +12 -12
  322. package/coverage/lcov-report/src/utilities/fileSystem/filesystem.ts.html +595 -0
  323. package/coverage/lcov-report/src/utilities/fileSystem/index.html +79 -19
  324. package/coverage/lcov-report/src/utilities/fileSystem/index.ts.html +20 -1049
  325. package/coverage/lcov-report/src/utilities/fileSystem/plugin.ts.html +280 -0
  326. package/coverage/lcov-report/src/utilities/fileSystem/processor.ts.html +1 -1
  327. package/coverage/lcov-report/src/utilities/fileSystem/template.ts.html +193 -0
  328. package/coverage/lcov-report/src/utilities/global.ts.html +43 -43
  329. package/coverage/lcov-report/src/utilities/index.html +48 -63
  330. package/coverage/lcov-report/src/utilities/index.ts.html +36 -168
  331. package/coverage/lcov-report/src/utilities/redis.ts.html +32 -32
  332. package/coverage/lcov-report/src/utilities/routing/index.html +1 -1
  333. package/coverage/lcov-report/src/utilities/routing/index.ts.html +5 -5
  334. package/coverage/lcov-report/src/utilities/rowProcessor/index.html +28 -28
  335. package/coverage/lcov-report/src/utilities/rowProcessor/index.ts.html +60 -33
  336. package/coverage/lcov-report/src/utilities/rowProcessor/map.ts.html +3 -3
  337. package/coverage/lcov-report/src/utilities/rowProcessor/utils.ts.html +38 -38
  338. package/coverage/lcov-report/src/utilities/scriptRunner.ts.html +32 -32
  339. package/coverage/lcov-report/src/utilities/security.ts.html +6 -6
  340. package/coverage/lcov-report/src/utilities/statusCodes.ts.html +1 -1
  341. package/coverage/lcov-report/src/utilities/usageQuota/index.html +1 -1
  342. package/coverage/lcov-report/src/utilities/usageQuota/rows.ts.html +35 -35
  343. package/coverage/lcov-report/src/utilities/usageQuota/usageQuoteReset.ts.html +1 -1
  344. package/coverage/lcov-report/src/utilities/users.ts.html +6 -6
  345. package/coverage/lcov-report/src/utilities/workerRequests.ts.html +56 -56
  346. package/coverage/lcov-report/src/watch.ts.html +9 -9
  347. package/coverage/lcov-report/src/websocket.ts.html +15 -15
  348. package/coverage/lcov.info +7198 -7131
  349. package/dist/api/controllers/application.js +47 -35
  350. package/dist/api/controllers/cloud.js +6 -2
  351. package/dist/api/controllers/deploy/index.js +43 -60
  352. package/dist/api/controllers/plugin/index.js +6 -6
  353. package/dist/api/controllers/public/applications.js +22 -1
  354. package/dist/api/controllers/row/ExternalRequest.js +0 -1
  355. package/dist/api/controllers/row/internal.js +12 -12
  356. package/dist/api/controllers/row/staticFormula.js +1 -1
  357. package/dist/api/controllers/static/index.js +8 -11
  358. package/dist/api/controllers/view/index.js +2 -2
  359. package/dist/api/routes/application.js +3 -0
  360. package/dist/api/routes/deploy.js +1 -2
  361. package/dist/api/routes/public/applications.js +37 -0
  362. package/dist/api/routes/public/middleware/mapper.js +3 -0
  363. package/dist/automations/automationUtils.js +26 -1
  364. package/dist/environment.js +5 -1
  365. package/dist/integrations/googlesheets.js +1 -1
  366. package/dist/integrations/index.js +1 -2
  367. package/dist/migrations/functions/backfill/global/configs.js +4 -4
  368. package/dist/package.json +9 -7
  369. package/dist/sdk/app/backups/imports.js +2 -6
  370. package/dist/threads/automation.js +4 -28
  371. package/dist/tsconfig.build.tsbuildinfo +1 -1
  372. package/dist/utilities/fileSystem/app.js +97 -0
  373. package/dist/utilities/fileSystem/clientLibrary.js +3 -3
  374. package/dist/utilities/fileSystem/filesystem.js +182 -0
  375. package/dist/utilities/fileSystem/index.js +18 -342
  376. package/dist/utilities/fileSystem/plugin.js +63 -0
  377. package/dist/utilities/fileSystem/template.js +44 -0
  378. package/dist/utilities/index.js +1 -44
  379. package/dist/utilities/rowProcessor/index.js +12 -4
  380. package/package.json +10 -8
  381. package/scripts/dev/manage.js +0 -16
  382. package/specs/openapi.json +84 -0
  383. package/specs/openapi.yaml +53 -0
  384. package/specs/resources/application.js +19 -0
  385. package/src/api/controllers/application.ts +61 -36
  386. package/src/api/controllers/auth.ts +2 -2
  387. package/src/api/controllers/cloud.ts +10 -6
  388. package/src/api/controllers/deploy/Deployment.ts +1 -0
  389. package/src/api/controllers/deploy/index.ts +40 -58
  390. package/src/api/controllers/plugin/index.ts +14 -9
  391. package/src/api/controllers/public/applications.ts +17 -0
  392. package/src/api/controllers/row/ExternalRequest.ts +0 -1
  393. package/src/api/controllers/row/internal.ts +24 -23
  394. package/src/api/controllers/row/staticFormula.ts +5 -2
  395. package/src/api/controllers/row/utils.ts +2 -1
  396. package/src/api/controllers/static/index.ts +6 -10
  397. package/src/api/controllers/view/index.ts +2 -2
  398. package/src/api/routes/application.ts +11 -0
  399. package/src/api/routes/deploy.ts +0 -1
  400. package/src/api/routes/index.ts +4 -3
  401. package/src/api/routes/public/applications.ts +44 -0
  402. package/src/api/routes/public/middleware/mapper.ts +4 -0
  403. package/src/api/routes/tests/__snapshots__/{datasource.spec.js.snap → datasource.spec.ts.snap} +0 -0
  404. package/src/api/routes/tests/{application.spec.js → application.spec.ts} +94 -18
  405. package/src/api/routes/tests/{backup.spec.js → backup.spec.ts} +17 -6
  406. package/src/api/routes/tests/cloud.spec.ts +65 -0
  407. package/src/api/routes/tests/data/budibase-component-1.0.1.tgz +0 -0
  408. package/src/api/routes/tests/data/comment-box-1.0.2.tar.gz +0 -0
  409. package/src/api/routes/tests/data/export-test.tar.gz +0 -0
  410. package/src/api/routes/tests/{datasource.spec.js → datasource.spec.ts} +23 -15
  411. package/src/api/routes/tests/permissions.spec.js +1 -1
  412. package/src/api/routes/tests/plugin.spec.ts +179 -0
  413. package/src/api/routes/tests/routing.spec.js +1 -2
  414. package/src/api/routes/tests/row.spec.js +4 -2
  415. package/src/api/routes/tests/static.spec.js +2 -17
  416. package/src/api/routes/tests/table.spec.js +8 -2
  417. package/src/api/routes/tests/user.spec.js +86 -0
  418. package/src/api/routes/tests/utilities/index.ts +2 -2
  419. package/src/api/routes/tests/webhook.spec.js +1 -1
  420. package/src/automations/automationUtils.ts +24 -0
  421. package/src/automations/tests/bash.spec.js +34 -0
  422. package/src/automations/tests/discord.spec.js +27 -0
  423. package/src/automations/tests/executeQuery.spec.js +49 -0
  424. package/src/automations/tests/executeScript.spec.js +48 -0
  425. package/src/automations/tests/sendSmtpEmail.spec.js +71 -0
  426. package/src/automations/tests/serverLog.spec.js +22 -0
  427. package/src/automations/tests/utilities/index.ts +2 -2
  428. package/src/automations/tests/zapier.spec.js +27 -0
  429. package/src/automations/unitTests/automationUtils.spec.ts +65 -0
  430. package/src/definitions/openapi.ts +10 -0
  431. package/src/environment.ts +5 -1
  432. package/src/integrations/googlesheets.ts +1 -1
  433. package/src/integrations/index.ts +1 -5
  434. package/src/migrations/functions/backfill/global/configs.ts +5 -4
  435. package/src/sdk/app/backups/imports.ts +2 -6
  436. package/src/sdk/tests/attachments.spec.ts +1 -4
  437. package/src/tests/jestSetup.ts +4 -1
  438. package/src/tests/utilities/TestConfiguration.ts +23 -4
  439. package/src/threads/automation.ts +4 -27
  440. package/src/utilities/fileSystem/app.ts +86 -0
  441. package/src/utilities/fileSystem/clientLibrary.ts +1 -1
  442. package/src/utilities/fileSystem/filesystem.ts +170 -0
  443. package/src/utilities/fileSystem/index.ts +5 -348
  444. package/src/utilities/fileSystem/plugin.ts +65 -0
  445. package/src/utilities/fileSystem/template.ts +36 -0
  446. package/src/utilities/index.ts +1 -45
  447. package/src/utilities/rowProcessor/index.ts +17 -8
  448. package/src/utilities/rowProcessor/tests/utils.spec.ts +57 -0
  449. package/tsconfig.build.json +2 -0
  450. package/coverage/lcov-report/src/utilities/plugins.ts.html +0 -151
  451. package/dist/api/routes/tests/utilities/TestFunctions.js +0 -167
  452. package/dist/api/routes/tests/utilities/index.js +0 -131
  453. package/dist/automations/tests/utilities/index.js +0 -81
  454. package/dist/tests/utilities/TestConfiguration.js +0 -562
  455. package/dist/tests/utilities/controllers.js +0 -40
  456. package/dist/tests/utilities/structures.js +0 -168
  457. package/dist/utilities/plugins.js +0 -26
  458. package/src/api/routes/tests/deployment.spec.ts +0 -25
  459. package/src/automations/unitTests/automationUtils.spec.js +0 -17
  460. package/src/utilities/plugins.ts +0 -22
@@ -3,7 +3,7 @@ import { InternalTables } from "../../db/utils"
3
3
  import { getFullUser } from "../../utilities/users"
4
4
  import { roles, context } from "@budibase/backend-core"
5
5
  import { groups } from "@budibase/pro"
6
- import { ContextUser, User, Row } from "@budibase/types"
6
+ import { ContextUser, User, Row, UserCtx } from "@budibase/types"
7
7
 
8
8
  const PUBLIC_ROLE = roles.BUILTIN_ROLE_IDS.PUBLIC
9
9
 
@@ -16,7 +16,7 @@ const addSessionAttributesToUser = (ctx: any) => {
16
16
  }
17
17
  }
18
18
 
19
- export async function fetchSelf(ctx: any) {
19
+ export async function fetchSelf(ctx: UserCtx) {
20
20
  let userId = ctx.user.userId || ctx.user._id
21
21
  /* istanbul ignore next */
22
22
  if (!userId || !ctx.isAuthenticated) {
@@ -5,8 +5,8 @@ import { stringToReadStream } from "../../utilities"
5
5
  import { getDocParams, DocumentType, isDevAppID } from "../../db/utils"
6
6
  import { create } from "./application"
7
7
  import { join } from "path"
8
- import { App, BBContext, Database } from "@budibase/types"
9
8
  import sdk from "../../sdk"
9
+ import { App, Ctx, Database } from "@budibase/types"
10
10
 
11
11
  async function createApp(appName: string, appDirectory: string) {
12
12
  const ctx = {
@@ -35,7 +35,7 @@ async function getAllDocType(db: Database, docType: string) {
35
35
  return response.rows.map(row => row.doc)
36
36
  }
37
37
 
38
- export async function exportApps(ctx: BBContext) {
38
+ export async function exportApps(ctx: Ctx) {
39
39
  if (env.SELF_HOSTED || !env.MULTI_TENANCY) {
40
40
  ctx.throw(400, "Exporting only allowed in multi-tenant cloud environments.")
41
41
  }
@@ -65,13 +65,13 @@ async function checkHasBeenImported() {
65
65
  return apps.length !== 0
66
66
  }
67
67
 
68
- export async function hasBeenImported(ctx: BBContext) {
68
+ export async function hasBeenImported(ctx: Ctx) {
69
69
  ctx.body = {
70
70
  imported: await checkHasBeenImported(),
71
71
  }
72
72
  }
73
73
 
74
- export async function importApps(ctx: BBContext) {
74
+ export async function importApps(ctx: Ctx) {
75
75
  if (!env.SELF_HOSTED || env.MULTI_TENANCY) {
76
76
  ctx.throw(400, "Importing only allowed in self hosted environments.")
77
77
  }
@@ -82,12 +82,16 @@ export async function importApps(ctx: BBContext) {
82
82
  "Import file is required and environment must be fresh to import apps."
83
83
  )
84
84
  }
85
- if (ctx.request.files.importFile.type !== "application/gzip") {
85
+ const file = ctx.request.files.importFile as any
86
+ if (Array.isArray(file)) {
87
+ ctx.throw(400, "Single file is required")
88
+ }
89
+ if (file.type !== "application/gzip") {
86
90
  ctx.throw(400, "Import file must be a gzipped tarball.")
87
91
  }
88
92
 
89
93
  // initially get all the app databases out of the tarball
90
- const tmpPath = sdk.backups.untarFile(ctx.request.files.importFile)
94
+ const tmpPath = sdk.backups.untarFile(file)
91
95
  const globalDbImport = sdk.backups.getGlobalDBFile(tmpPath)
92
96
  const appNames = sdk.backups.getListOfAppsInMulti(tmpPath)
93
97
 
@@ -9,6 +9,7 @@ export default class Deployment {
9
9
  verification: any
10
10
  status?: string
11
11
  err?: any
12
+ appUrl?: string
12
13
 
13
14
  constructor(id = null) {
14
15
  this._id = id || newid()
@@ -94,7 +94,44 @@ async function initDeployedApp(prodAppId: any) {
94
94
  })
95
95
  }
96
96
 
97
- async function deployApp(deployment: any, userId: string) {
97
+ export async function fetchDeployments(ctx: any) {
98
+ try {
99
+ const db = context.getAppDB()
100
+ const deploymentDoc = await db.get(DocumentType.DEPLOYMENTS)
101
+ const { updated, deployments } = await checkAllDeployments(deploymentDoc)
102
+ if (updated) {
103
+ await db.put(deployments)
104
+ }
105
+ ctx.body = Object.values(deployments.history).reverse()
106
+ } catch (err) {
107
+ ctx.body = []
108
+ }
109
+ }
110
+
111
+ export async function deploymentProgress(ctx: any) {
112
+ try {
113
+ const db = context.getAppDB()
114
+ const deploymentDoc = await db.get(DocumentType.DEPLOYMENTS)
115
+ ctx.body = deploymentDoc[ctx.params.deploymentId]
116
+ } catch (err) {
117
+ ctx.throw(
118
+ 500,
119
+ `Error fetching data for deployment ${ctx.params.deploymentId}`
120
+ )
121
+ }
122
+ }
123
+
124
+ export const publishApp = async function (ctx: any) {
125
+ let deployment = new Deployment()
126
+ console.log("Deployment object created")
127
+ deployment.setStatus(DeploymentStatus.PENDING)
128
+ console.log("Deployment object set to pending")
129
+ deployment = await storeDeploymentHistory(deployment)
130
+ console.log("Stored deployment history")
131
+
132
+ console.log("Deploying app...")
133
+
134
+ let app
98
135
  let replication
99
136
  try {
100
137
  const appId = context.getAppId()!
@@ -108,7 +145,7 @@ async function deployApp(deployment: any, userId: string) {
108
145
  productionAppId,
109
146
  AppBackupTrigger.PUBLISH,
110
147
  {
111
- createdBy: userId,
148
+ createdBy: ctx.user._id,
112
149
  }
113
150
  )
114
151
  }
@@ -147,7 +184,7 @@ async function deployApp(deployment: any, userId: string) {
147
184
  console.log("Deployed app initialised, setting deployment to successful")
148
185
  deployment.setStatus(DeploymentStatus.SUCCESS)
149
186
  await storeDeploymentHistory(deployment)
150
- return appDoc
187
+ app = appDoc
151
188
  } catch (err: any) {
152
189
  deployment.setStatus(DeploymentStatus.FAILURE, err.message)
153
190
  await storeDeploymentHistory(deployment)
@@ -160,62 +197,7 @@ async function deployApp(deployment: any, userId: string) {
160
197
  await replication.close()
161
198
  }
162
199
  }
163
- }
164
-
165
- export async function fetchDeployments(ctx: any) {
166
- try {
167
- const db = context.getAppDB()
168
- const deploymentDoc = await db.get(DocumentType.DEPLOYMENTS)
169
- const { updated, deployments } = await checkAllDeployments(deploymentDoc)
170
- if (updated) {
171
- await db.put(deployments)
172
- }
173
- ctx.body = Object.values(deployments.history).reverse()
174
- } catch (err) {
175
- ctx.body = []
176
- }
177
- }
178
-
179
- export async function deploymentProgress(ctx: any) {
180
- try {
181
- const db = context.getAppDB()
182
- const deploymentDoc = await db.get(DocumentType.DEPLOYMENTS)
183
- ctx.body = deploymentDoc[ctx.params.deploymentId]
184
- } catch (err) {
185
- ctx.throw(
186
- 500,
187
- `Error fetching data for deployment ${ctx.params.deploymentId}`
188
- )
189
- }
190
- }
191
-
192
- const isFirstDeploy = async () => {
193
- try {
194
- const db = context.getProdAppDB()
195
- await db.get(DocumentType.APP_METADATA)
196
- } catch (e: any) {
197
- if (e.status === 404) {
198
- return true
199
- }
200
- throw e
201
- }
202
- return false
203
- }
204
-
205
- const _deployApp = async function (ctx: any) {
206
- let deployment = new Deployment()
207
- console.log("Deployment object created")
208
- deployment.setStatus(DeploymentStatus.PENDING)
209
- console.log("Deployment object set to pending")
210
- deployment = await storeDeploymentHistory(deployment)
211
- console.log("Stored deployment history")
212
-
213
- console.log("Deploying app...")
214
-
215
- let app = await deployApp(deployment, ctx.user._id)
216
200
 
217
201
  await events.app.published(app)
218
202
  ctx.body = deployment
219
203
  }
220
-
221
- export { _deployApp as deployApp }
@@ -1,10 +1,14 @@
1
1
  import { npmUpload, urlUpload, githubUpload, fileUpload } from "./uploaders"
2
- import { plugins as pluginCore, tenancy } from "@budibase/backend-core"
3
- import { PluginType, FileType, PluginSource } from "@budibase/types"
2
+ import {
3
+ plugins as pluginCore,
4
+ db as dbCore,
5
+ tenancy,
6
+ objectStore,
7
+ } from "@budibase/backend-core"
8
+ import { PluginType, FileType, PluginSource, Plugin } from "@budibase/types"
4
9
  import env from "../../../environment"
5
10
  import { ClientAppSocket } from "../../../websocket"
6
- import { db as dbCore } from "@budibase/backend-core"
7
- import { plugins } from "@budibase/pro"
11
+ import { sdk as pro } from "@budibase/pro"
8
12
 
9
13
  export async function getPlugins(type?: PluginType) {
10
14
  const db = tenancy.getGlobalDB()
@@ -13,9 +17,10 @@ export async function getPlugins(type?: PluginType) {
13
17
  include_docs: true,
14
18
  })
15
19
  )
16
- const plugins = response.rows.map((row: any) => row.doc)
20
+ let plugins = response.rows.map((row: any) => row.doc) as Plugin[]
21
+ plugins = objectStore.enrichPluginURLs(plugins)
17
22
  if (type) {
18
- return plugins.filter((plugin: any) => plugin.schema?.type === type)
23
+ return plugins.filter((plugin: Plugin) => plugin.schema?.type === type)
19
24
  } else {
20
25
  return plugins
21
26
  }
@@ -84,7 +89,7 @@ export async function create(ctx: any) {
84
89
  )
85
90
  }
86
91
 
87
- const doc = await plugins.storePlugin(metadata, directory, source)
92
+ const doc = await pro.plugins.storePlugin(metadata, directory, source)
88
93
 
89
94
  ClientAppSocket.emit("plugins-update", { name, hash: doc.hash })
90
95
  ctx.body = {
@@ -107,7 +112,7 @@ export async function destroy(ctx: any) {
107
112
  const { pluginId } = ctx.params
108
113
 
109
114
  try {
110
- await plugins.deletePlugin(pluginId)
115
+ await pro.plugins.deletePlugin(pluginId)
111
116
 
112
117
  ctx.body = { message: `Plugin ${ctx.params.pluginId} deleted.` }
113
118
  } catch (err: any) {
@@ -127,7 +132,7 @@ export async function processUploadedPlugin(
127
132
  throw new Error("Only component plugins are supported outside of self-host")
128
133
  }
129
134
 
130
- const doc = await plugins.storePlugin(metadata, directory, source)
135
+ const doc = await pro.plugins.storePlugin(metadata, directory, source)
131
136
  ClientAppSocket.emit("plugin-update", { name: doc.name, hash: doc.hash })
132
137
  return doc
133
138
  }
@@ -1,6 +1,7 @@
1
1
  import { db as dbCore, context } from "@budibase/backend-core"
2
2
  import { search as stringSearch, addRev } from "./utils"
3
3
  import * as controller from "../application"
4
+ import * as deployController from "../deploy"
4
5
  import { Application } from "../../../definitions/common"
5
6
 
6
7
  function fixAppID(app: Application, params: any) {
@@ -74,10 +75,26 @@ export async function destroy(ctx: any, next: any) {
74
75
  })
75
76
  }
76
77
 
78
+ export async function unpublish(ctx: any, next: any) {
79
+ await context.doInAppContext(ctx.params.appId, async () => {
80
+ await controller.unpublish(ctx)
81
+ await next()
82
+ })
83
+ }
84
+
85
+ export async function publish(ctx: any, next: any) {
86
+ await context.doInAppContext(ctx.params.appId, async () => {
87
+ await deployController.publishApp(ctx)
88
+ await next()
89
+ })
90
+ }
91
+
77
92
  export default {
78
93
  create,
79
94
  update,
80
95
  read,
81
96
  destroy,
82
97
  search,
98
+ publish,
99
+ unpublish,
83
100
  }
@@ -21,7 +21,6 @@ import { getDatasourceAndQuery } from "./utils"
21
21
  import { FieldTypes, RelationshipTypes } from "../../../constants"
22
22
  import { breakExternalTableId, isSQL } from "../../../integrations/utils"
23
23
  import { processObjectSync } from "@budibase/string-templates"
24
- // @ts-ignore
25
24
  import { cloneDeep } from "lodash/fp"
26
25
  import { processFormulas, processDates } from "../../../utilities/rowProcessor"
27
26
  import { context } from "@budibase/backend-core"
@@ -13,7 +13,7 @@ import {
13
13
  cleanupAttachments,
14
14
  } from "../../../utilities/rowProcessor"
15
15
  import { FieldTypes } from "../../../constants"
16
- import { validate as rowValidate, findRow } from "./utils"
16
+ import * as utils from "./utils"
17
17
  import { fullSearch, paginatedSearch } from "./internalSearch"
18
18
  import { getGlobalUsersFromMetadata } from "../../../utilities/global"
19
19
  import * as inMemoryViews from "../../../db/inMemoryView"
@@ -30,7 +30,8 @@ import { finaliseRow, updateRelatedFormula } from "./staticFormula"
30
30
  import * as exporters from "../view/exporters"
31
31
  import { apiFileReturn } from "../../../utilities/fileSystem"
32
32
  import {
33
- BBContext,
33
+ Ctx,
34
+ UserCtx,
34
35
  Database,
35
36
  LinkDocumentValue,
36
37
  Row,
@@ -69,7 +70,7 @@ async function getView(db: Database, viewName: string) {
69
70
  return viewInfo
70
71
  }
71
72
 
72
- async function getRawTableData(ctx: BBContext, db: Database, tableId: string) {
73
+ async function getRawTableData(ctx: Ctx, db: Database, tableId: string) {
73
74
  let rows
74
75
  if (tableId === InternalTables.USER_METADATA) {
75
76
  await userController.fetchMetadata(ctx)
@@ -85,7 +86,7 @@ async function getRawTableData(ctx: BBContext, db: Database, tableId: string) {
85
86
  return rows as Row[]
86
87
  }
87
88
 
88
- export async function patch(ctx: BBContext) {
89
+ export async function patch(ctx: UserCtx) {
89
90
  const db = context.getAppDB()
90
91
  const inputs = ctx.request.body
91
92
  const tableId = inputs.tableId
@@ -95,7 +96,7 @@ export async function patch(ctx: BBContext) {
95
96
  let dbTable = await db.get(tableId)
96
97
  oldRow = await outputProcessing(
97
98
  dbTable,
98
- await findRow(ctx, tableId, inputs._id)
99
+ await utils.findRow(ctx, tableId, inputs._id)
99
100
  )
100
101
  } catch (err) {
101
102
  if (isUserTable) {
@@ -117,8 +118,8 @@ export async function patch(ctx: BBContext) {
117
118
  }
118
119
 
119
120
  // this returns the table and row incase they have been updated
120
- let { table, row } = inputProcessing(ctx.user!, dbTable, combinedRow)
121
- const validateResult = await rowValidate({
121
+ let { table, row } = inputProcessing(ctx.user, dbTable, combinedRow)
122
+ const validateResult = await utils.validate({
122
123
  row,
123
124
  table,
124
125
  })
@@ -150,7 +151,7 @@ export async function patch(ctx: BBContext) {
150
151
  })
151
152
  }
152
153
 
153
- export async function save(ctx: BBContext) {
154
+ export async function save(ctx: UserCtx) {
154
155
  const db = context.getAppDB()
155
156
  let inputs = ctx.request.body
156
157
  inputs.tableId = ctx.params.tableId
@@ -161,8 +162,8 @@ export async function save(ctx: BBContext) {
161
162
 
162
163
  // this returns the table and row incase they have been updated
163
164
  const dbTable = await db.get(inputs.tableId)
164
- let { table, row } = inputProcessing(ctx.user!, dbTable, inputs)
165
- const validateResult = await rowValidate({
165
+ let { table, row } = inputProcessing(ctx.user, dbTable, inputs)
166
+ const validateResult = await utils.validate({
166
167
  row,
167
168
  table,
168
169
  })
@@ -185,8 +186,8 @@ export async function save(ctx: BBContext) {
185
186
  })
186
187
  }
187
188
 
188
- export async function fetchView(ctx: BBContext) {
189
- const viewName = ctx.params.viewName
189
+ export async function fetchView(ctx: Ctx) {
190
+ const viewName = decodeURIComponent(ctx.params.viewName)
190
191
 
191
192
  // if this is a table view being looked for just transfer to that
192
193
  if (viewName.startsWith(DocumentType.TABLE)) {
@@ -252,7 +253,7 @@ export async function fetchView(ctx: BBContext) {
252
253
  return rows
253
254
  }
254
255
 
255
- export async function fetch(ctx: BBContext) {
256
+ export async function fetch(ctx: Ctx) {
256
257
  const db = context.getAppDB()
257
258
 
258
259
  const tableId = ctx.params.tableId
@@ -261,15 +262,15 @@ export async function fetch(ctx: BBContext) {
261
262
  return outputProcessing(table, rows)
262
263
  }
263
264
 
264
- export async function find(ctx: BBContext) {
265
+ export async function find(ctx: Ctx) {
265
266
  const db = dbCore.getDB(ctx.appId)
266
267
  const table = await db.get(ctx.params.tableId)
267
- let row = await findRow(ctx, ctx.params.tableId, ctx.params.rowId)
268
+ let row = await utils.findRow(ctx, ctx.params.tableId, ctx.params.rowId)
268
269
  row = await outputProcessing(table, row)
269
270
  return row
270
271
  }
271
272
 
272
- export async function destroy(ctx: BBContext) {
273
+ export async function destroy(ctx: Ctx) {
273
274
  const db = context.getAppDB()
274
275
  const { _id } = ctx.request.body
275
276
  let row = await db.get(_id)
@@ -305,7 +306,7 @@ export async function destroy(ctx: BBContext) {
305
306
  return { response, row }
306
307
  }
307
308
 
308
- export async function bulkDestroy(ctx: BBContext) {
309
+ export async function bulkDestroy(ctx: Ctx) {
309
310
  const db = context.getAppDB()
310
311
  const tableId = ctx.params.tableId
311
312
  const table = await db.get(tableId)
@@ -344,7 +345,7 @@ export async function bulkDestroy(ctx: BBContext) {
344
345
  return { response: { ok: true }, rows: processedRows }
345
346
  }
346
347
 
347
- export async function search(ctx: BBContext) {
348
+ export async function search(ctx: Ctx) {
348
349
  // Fetch the whole table when running in cypress, as search doesn't work
349
350
  if (!env.COUCH_DB_URL && env.isCypress()) {
350
351
  return { rows: await fetch(ctx) }
@@ -376,14 +377,14 @@ export async function search(ctx: BBContext) {
376
377
  return response
377
378
  }
378
379
 
379
- export async function validate(ctx: BBContext) {
380
- return rowValidate({
380
+ export async function validate(ctx: Ctx) {
381
+ return utils.validate({
381
382
  tableId: ctx.params.tableId,
382
383
  row: ctx.request.body,
383
384
  })
384
385
  }
385
386
 
386
- export async function exportRows(ctx: BBContext) {
387
+ export async function exportRows(ctx: Ctx) {
387
388
  const db = context.getAppDB()
388
389
  const table = await db.get(ctx.params.tableId)
389
390
  const rowIds = ctx.request.body.rows
@@ -421,14 +422,14 @@ export async function exportRows(ctx: BBContext) {
421
422
  return apiFileReturn(exporter(headers, rows))
422
423
  }
423
424
 
424
- export async function fetchEnrichedRow(ctx: BBContext) {
425
+ export async function fetchEnrichedRow(ctx: Ctx) {
425
426
  const db = context.getAppDB()
426
427
  const tableId = ctx.params.tableId
427
428
  const rowId = ctx.params.rowId
428
429
  // need table to work out where links go in row
429
430
  let [table, row] = await Promise.all([
430
431
  db.get(tableId),
431
- findRow(ctx, tableId, rowId),
432
+ utils.findRow(ctx, tableId, rowId),
432
433
  ])
433
434
  // get the link docs
434
435
  const linkVals = (await linkRows.getLinkDocuments({
@@ -16,7 +16,10 @@ const { cloneDeep } = require("lodash/fp")
16
16
  * updated.
17
17
  * NOTE: this will only for affect static formulas.
18
18
  */
19
- export async function updateRelatedFormula(table: Table, enrichedRows: Row[]) {
19
+ export async function updateRelatedFormula(
20
+ table: Table,
21
+ enrichedRows: Row[] | Row
22
+ ) {
20
23
  const db = context.getAppDB()
21
24
  // no formula to update, we're done
22
25
  if (!table.relatedFormula) {
@@ -155,7 +158,7 @@ export async function finaliseRow(
155
158
  enrichedRow = await processFormulas(table, enrichedRow, { dynamic: false })
156
159
  // this updates the related formulas in other rows based on the relations to this row
157
160
  if (updateFormula) {
158
- await exports.updateRelatedFormula(table, enrichedRow)
161
+ await updateRelatedFormula(table, enrichedRow)
159
162
  }
160
163
  return { row: enrichedRow, table }
161
164
  }
@@ -7,6 +7,7 @@ import { BBContext, Row, Table } from "@budibase/types"
7
7
  export { removeKeyNumbering } from "../../../integrations/base/utils"
8
8
  const validateJs = require("validate.js")
9
9
  const { cloneDeep } = require("lodash/fp")
10
+ import { Ctx } from "@budibase/types"
10
11
 
11
12
  validateJs.extend(validateJs.validators.datetime, {
12
13
  parse: function (value: string) {
@@ -25,7 +26,7 @@ export async function getDatasourceAndQuery(json: any) {
25
26
  return makeExternalQuery(datasource, json)
26
27
  }
27
28
 
28
- export async function findRow(ctx: BBContext, tableId: string, rowId: string) {
29
+ export async function findRow(ctx: Ctx, tableId: string, rowId: string) {
29
30
  const db = context.getAppDB()
30
31
  let row
31
32
  // TODO remove special user case in future
@@ -1,11 +1,9 @@
1
- import { enrichPluginURLs } from "../../../utilities/plugins"
2
-
3
1
  require("svelte/register")
4
2
 
5
3
  const send = require("koa-send")
6
4
  const { resolve, join } = require("../../../utilities/centralPath")
7
5
  const uuid = require("uuid")
8
- const { ObjectStoreBuckets } = require("../../../constants")
6
+ import { ObjectStoreBuckets } from "../../../constants"
9
7
  const { processString } = require("@budibase/string-templates")
10
8
  const {
11
9
  loadHandlebarsFile,
@@ -13,8 +11,6 @@ const {
13
11
  TOP_LEVEL_PATH,
14
12
  } = require("../../../utilities/fileSystem")
15
13
  const env = require("../../../environment")
16
- const { clientLibraryPath } = require("../../../utilities")
17
- const { attachmentsRelativeURL } = require("../../../utilities")
18
14
  const { DocumentType } = require("../../../db/utils")
19
15
  const { context, objectStore, utils } = require("@budibase/backend-core")
20
16
  const AWS = require("aws-sdk")
@@ -33,7 +29,7 @@ async function prepareUpload({ s3Key, bucket, metadata, file }: any) {
33
29
  return {
34
30
  size: file.size,
35
31
  name: file.name,
36
- url: attachmentsRelativeURL(response.Key),
32
+ url: objectStore.getAppFileUrl(s3Key),
37
33
  extension: [...file.name.split(".")].pop(),
38
34
  key: response.Key,
39
35
  }
@@ -85,7 +81,7 @@ export const uploadFile = async function (ctx: any) {
85
81
 
86
82
  return prepareUpload({
87
83
  file,
88
- s3Key: `${ctx.appId}/attachments/${processedFileName}`,
84
+ s3Key: `${context.getProdAppId()}/attachments/${processedFileName}`,
89
85
  bucket: ObjectStoreBuckets.APPS,
90
86
  })
91
87
  })
@@ -107,14 +103,14 @@ export const serveApp = async function (ctx: any) {
107
103
 
108
104
  if (!env.isJest()) {
109
105
  const App = require("./templates/BudibaseApp.svelte").default
110
- const plugins = enrichPluginURLs(appInfo.usedPlugins)
106
+ const plugins = objectStore.enrichPluginURLs(appInfo.usedPlugins)
111
107
  const { head, html, css } = App.render({
112
108
  metaImage:
113
109
  "https://res.cloudinary.com/daog6scxm/image/upload/v1666109324/meta-images/budibase-meta-image_uukc1m.png",
114
110
  title: appInfo.name,
115
111
  production: env.isProd(),
116
112
  appId,
117
- clientLibPath: clientLibraryPath(appId, appInfo.version, ctx),
113
+ clientLibPath: objectStore.clientLibraryUrl(appId, appInfo.version),
118
114
  usedPlugins: plugins,
119
115
  })
120
116
 
@@ -139,7 +135,7 @@ export const serveBuilderPreview = async function (ctx: any) {
139
135
  let appId = context.getAppId()
140
136
  const previewHbs = loadHandlebarsFile(`${__dirname}/templates/preview.hbs`)
141
137
  ctx.body = await processString(previewHbs, {
142
- clientLibPath: clientLibraryPath(appId, appInfo.version, ctx),
138
+ clientLibPath: objectStore.clientLibraryUrl(appId, appInfo.version),
143
139
  })
144
140
  } else {
145
141
  // just return the app info for jest to assert on
@@ -113,7 +113,7 @@ async function handleViewEvents(existingView: View, newView: View) {
113
113
 
114
114
  export async function destroy(ctx: BBContext) {
115
115
  const db = context.getAppDB()
116
- const viewName = decodeURI(ctx.params.viewName)
116
+ const viewName = decodeURIComponent(ctx.params.viewName)
117
117
  const view = await deleteView(viewName)
118
118
  const table = await db.get(view.meta.tableId)
119
119
  delete table.views[viewName]
@@ -124,7 +124,7 @@ export async function destroy(ctx: BBContext) {
124
124
  }
125
125
 
126
126
  export async function exportView(ctx: BBContext) {
127
- const viewName = decodeURI(ctx.query.view as string)
127
+ const viewName = decodeURIComponent(ctx.query.view as string)
128
128
  const view = await getView(viewName)
129
129
 
130
130
  const format = ctx.query.format as string
@@ -1,5 +1,6 @@
1
1
  import Router from "@koa/router"
2
2
  import * as controller from "../controllers/application"
3
+ import * as deploymentController from "../controllers/deploy"
3
4
  import authorized from "../../middleware/authorized"
4
5
  import { permissions } from "@budibase/backend-core"
5
6
  import { applicationValidator } from "./utils/validators"
@@ -37,6 +38,16 @@ router
37
38
  authorized(permissions.BUILDER),
38
39
  controller.revertClient
39
40
  )
41
+ .post(
42
+ "/api/applications/:appId/publish",
43
+ authorized(permissions.BUILDER),
44
+ deploymentController.publishApp
45
+ )
46
+ .post(
47
+ "/api/applications/:appId/unpublish",
48
+ authorized(permissions.BUILDER),
49
+ controller.unpublish
50
+ )
40
51
  .delete(
41
52
  "/api/applications/:appId",
42
53
  authorized(permissions.BUILDER),
@@ -16,6 +16,5 @@ router
16
16
  authorized(permissions.BUILDER),
17
17
  controller.deploymentProgress
18
18
  )
19
- .post("/api/deploy", authorized(permissions.BUILDER), controller.deployApp)
20
19
 
21
20
  export = router
@@ -26,13 +26,14 @@ import cloudRoutes from "./cloud"
26
26
  import migrationRoutes from "./migrations"
27
27
  import pluginRoutes from "./plugin"
28
28
  import Router from "@koa/router"
29
- import { api } from "@budibase/pro"
29
+ import { api as pro } from "@budibase/pro"
30
30
 
31
31
  export { default as staticRoutes } from "./static"
32
32
  export { default as publicRoutes } from "./public"
33
33
 
34
- const appBackupRoutes = api.appBackups
35
- const scheduleRoutes = api.schedules
34
+ const appBackupRoutes = pro.appBackups
35
+ const scheduleRoutes = pro.schedules
36
+
36
37
  export const mainRoutes: Router[] = [
37
38
  appBackupRoutes,
38
39
  backupRoutes,