@budibase/server 2.2.8 → 2.2.10-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 (455) hide show
  1. package/__mocks__/aws-sdk.ts +19 -0
  2. package/__mocks__/node-fetch.ts +78 -0
  3. package/builder/assets/{index.2991e0c4.js → index.a0477c30.js} +363 -360
  4. package/builder/assets/{index.9cb087df.css → index.fa480d5b.css} +2 -2
  5. package/builder/index.html +2 -2
  6. package/coverage/clover.xml +5171 -5135
  7. package/coverage/coverage-final.json +265 -262
  8. package/coverage/lcov-report/index.html +218 -218
  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 +260 -182
  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 +54 -51
  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 +47 -47
  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 +20 -20
  215. package/coverage/lcov-report/src/integrations/base/query.ts.html +3 -3
  216. package/coverage/lcov-report/src/integrations/base/sql.ts.html +173 -143
  217. package/coverage/lcov-report/src/integrations/base/sqlTable.ts.html +10 -10
  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 +42 -54
  292. package/coverage/lcov-report/src/sdk/app/backups/index.html +30 -30
  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/tables/index.html +1 -1
  296. package/coverage/lcov-report/src/sdk/app/tables/index.ts.html +5 -5
  297. package/coverage/lcov-report/src/sdk/index.html +1 -1
  298. package/coverage/lcov-report/src/sdk/index.ts.html +8 -8
  299. package/coverage/lcov-report/src/sdk/users/index.html +5 -5
  300. package/coverage/lcov-report/src/sdk/users/index.ts.html +3 -3
  301. package/coverage/lcov-report/src/sdk/users/utils.ts.html +34 -34
  302. package/coverage/lcov-report/src/startup.ts.html +42 -42
  303. package/coverage/lcov-report/src/tests/utilities/TestConfiguration.ts.html +182 -125
  304. package/coverage/lcov-report/src/tests/utilities/controllers.ts.html +15 -15
  305. package/coverage/lcov-report/src/tests/utilities/index.html +15 -15
  306. package/coverage/lcov-report/src/tests/utilities/index.ts.html +1 -1
  307. package/coverage/lcov-report/src/tests/utilities/structures.ts.html +30 -30
  308. package/coverage/lcov-report/src/threads/automation.ts.html +32 -101
  309. package/coverage/lcov-report/src/threads/index.html +19 -19
  310. package/coverage/lcov-report/src/threads/index.ts.html +25 -25
  311. package/coverage/lcov-report/src/threads/query.ts.html +71 -71
  312. package/coverage/lcov-report/src/threads/utils.ts.html +18 -18
  313. package/coverage/lcov-report/src/utilities/budibaseDir.ts.html +3 -3
  314. package/coverage/lcov-report/src/utilities/centralPath.ts.html +4 -4
  315. package/coverage/lcov-report/src/utilities/csvParser.ts.html +8 -8
  316. package/coverage/lcov-report/src/utilities/fileSystem/app.ts.html +343 -0
  317. package/coverage/lcov-report/src/utilities/fileSystem/clientLibrary.ts.html +12 -12
  318. package/coverage/lcov-report/src/utilities/fileSystem/filesystem.ts.html +595 -0
  319. package/coverage/lcov-report/src/utilities/fileSystem/index.html +79 -19
  320. package/coverage/lcov-report/src/utilities/fileSystem/index.ts.html +20 -1049
  321. package/coverage/lcov-report/src/utilities/fileSystem/plugin.ts.html +280 -0
  322. package/coverage/lcov-report/src/utilities/fileSystem/processor.ts.html +1 -1
  323. package/coverage/lcov-report/src/utilities/fileSystem/template.ts.html +193 -0
  324. package/coverage/lcov-report/src/utilities/global.ts.html +43 -43
  325. package/coverage/lcov-report/src/utilities/index.html +48 -63
  326. package/coverage/lcov-report/src/utilities/index.ts.html +36 -168
  327. package/coverage/lcov-report/src/utilities/redis.ts.html +32 -32
  328. package/coverage/lcov-report/src/utilities/routing/index.html +1 -1
  329. package/coverage/lcov-report/src/utilities/routing/index.ts.html +5 -5
  330. package/coverage/lcov-report/src/utilities/rowProcessor/index.html +28 -28
  331. package/coverage/lcov-report/src/utilities/rowProcessor/index.ts.html +60 -33
  332. package/coverage/lcov-report/src/utilities/rowProcessor/map.ts.html +3 -3
  333. package/coverage/lcov-report/src/utilities/rowProcessor/utils.ts.html +38 -38
  334. package/coverage/lcov-report/src/utilities/scriptRunner.ts.html +32 -32
  335. package/coverage/lcov-report/src/utilities/security.ts.html +6 -6
  336. package/coverage/lcov-report/src/utilities/statusCodes.ts.html +1 -1
  337. package/coverage/lcov-report/src/utilities/usageQuota/index.html +1 -1
  338. package/coverage/lcov-report/src/utilities/usageQuota/rows.ts.html +35 -35
  339. package/coverage/lcov-report/src/utilities/usageQuota/usageQuoteReset.ts.html +1 -1
  340. package/coverage/lcov-report/src/utilities/users.ts.html +6 -6
  341. package/coverage/lcov-report/src/utilities/workerRequests.ts.html +56 -56
  342. package/coverage/lcov-report/src/watch.ts.html +9 -9
  343. package/coverage/lcov-report/src/websocket.ts.html +15 -15
  344. package/coverage/lcov.info +7423 -7352
  345. package/dist/api/controllers/application.js +47 -35
  346. package/dist/api/controllers/cloud.js +6 -2
  347. package/dist/api/controllers/deploy/index.js +43 -60
  348. package/dist/api/controllers/plugin/index.js +6 -6
  349. package/dist/api/controllers/public/applications.js +22 -1
  350. package/dist/api/controllers/row/ExternalRequest.js +0 -1
  351. package/dist/api/controllers/row/internal.js +11 -11
  352. package/dist/api/controllers/row/staticFormula.js +1 -1
  353. package/dist/api/controllers/static/index.js +8 -11
  354. package/dist/api/routes/application.js +3 -0
  355. package/dist/api/routes/deploy.js +1 -2
  356. package/dist/api/routes/public/applications.js +37 -0
  357. package/dist/api/routes/public/middleware/mapper.js +3 -0
  358. package/dist/automations/automationUtils.js +26 -1
  359. package/dist/environment.js +5 -1
  360. package/dist/integrations/base/sql.js +9 -5
  361. package/dist/integrations/googlesheets.js +1 -1
  362. package/dist/integrations/index.js +1 -2
  363. package/dist/migrations/functions/backfill/global/configs.js +4 -4
  364. package/dist/package.json +9 -7
  365. package/dist/sdk/app/backups/imports.js +3 -7
  366. package/dist/threads/automation.js +2 -26
  367. package/dist/tsconfig.build.tsbuildinfo +1 -1
  368. package/dist/utilities/fileSystem/app.js +97 -0
  369. package/dist/utilities/fileSystem/clientLibrary.js +3 -3
  370. package/dist/utilities/fileSystem/filesystem.js +182 -0
  371. package/dist/utilities/fileSystem/index.js +18 -342
  372. package/dist/utilities/fileSystem/plugin.js +63 -0
  373. package/dist/utilities/fileSystem/template.js +44 -0
  374. package/dist/utilities/index.js +1 -44
  375. package/dist/utilities/rowProcessor/index.js +12 -4
  376. package/package.json +10 -8
  377. package/specs/openapi.json +84 -0
  378. package/specs/openapi.yaml +53 -0
  379. package/specs/resources/application.js +19 -0
  380. package/src/api/controllers/application.ts +62 -36
  381. package/src/api/controllers/auth.ts +2 -2
  382. package/src/api/controllers/cloud.ts +10 -6
  383. package/src/api/controllers/deploy/Deployment.ts +1 -0
  384. package/src/api/controllers/deploy/index.ts +40 -58
  385. package/src/api/controllers/plugin/index.ts +14 -9
  386. package/src/api/controllers/public/applications.ts +17 -0
  387. package/src/api/controllers/row/ExternalRequest.ts +0 -1
  388. package/src/api/controllers/row/internal.ts +23 -22
  389. package/src/api/controllers/row/staticFormula.ts +5 -2
  390. package/src/api/controllers/row/utils.ts +2 -1
  391. package/src/api/controllers/static/index.ts +6 -10
  392. package/src/api/routes/application.ts +11 -0
  393. package/src/api/routes/deploy.ts +0 -1
  394. package/src/api/routes/index.ts +4 -3
  395. package/src/api/routes/public/applications.ts +44 -0
  396. package/src/api/routes/public/middleware/mapper.ts +4 -0
  397. package/src/api/routes/tests/__snapshots__/{datasource.spec.js.snap → datasource.spec.ts.snap} +0 -0
  398. package/src/api/routes/tests/{application.spec.js → application.spec.ts} +94 -18
  399. package/src/api/routes/tests/{backup.spec.js → backup.spec.ts} +17 -6
  400. package/src/api/routes/tests/cloud.spec.ts +65 -0
  401. package/src/api/routes/tests/data/budibase-component-1.0.1.tgz +0 -0
  402. package/src/api/routes/tests/data/comment-box-1.0.2.tar.gz +0 -0
  403. package/src/api/routes/tests/data/export-test.tar.gz +0 -0
  404. package/src/api/routes/tests/{datasource.spec.js → datasource.spec.ts} +23 -15
  405. package/src/api/routes/tests/permissions.spec.js +1 -1
  406. package/src/api/routes/tests/plugin.spec.ts +179 -0
  407. package/src/api/routes/tests/routing.spec.js +1 -2
  408. package/src/api/routes/tests/row.spec.js +4 -2
  409. package/src/api/routes/tests/static.spec.js +2 -17
  410. package/src/api/routes/tests/table.spec.js +8 -2
  411. package/src/api/routes/tests/user.spec.js +86 -0
  412. package/src/api/routes/tests/utilities/index.ts +2 -2
  413. package/src/api/routes/tests/webhook.spec.js +1 -1
  414. package/src/automations/automationUtils.ts +24 -0
  415. package/src/automations/tests/bash.spec.js +34 -0
  416. package/src/automations/tests/discord.spec.js +27 -0
  417. package/src/automations/tests/executeQuery.spec.js +49 -0
  418. package/src/automations/tests/executeScript.spec.js +48 -0
  419. package/src/automations/tests/sendSmtpEmail.spec.js +71 -0
  420. package/src/automations/tests/serverLog.spec.js +22 -0
  421. package/src/automations/tests/utilities/index.ts +2 -2
  422. package/src/automations/tests/zapier.spec.js +27 -0
  423. package/src/automations/unitTests/automationUtils.spec.ts +65 -0
  424. package/src/definitions/openapi.ts +10 -0
  425. package/src/environment.ts +5 -1
  426. package/src/integrations/base/sql.ts +15 -5
  427. package/src/integrations/googlesheets.ts +1 -1
  428. package/src/integrations/index.ts +1 -5
  429. package/src/integrations/tests/sql.spec.ts +92 -0
  430. package/src/migrations/functions/backfill/global/configs.ts +5 -4
  431. package/src/sdk/app/backups/imports.ts +3 -7
  432. package/src/tests/jestSetup.ts +4 -1
  433. package/src/tests/utilities/TestConfiguration.ts +23 -4
  434. package/src/threads/automation.ts +2 -25
  435. package/src/utilities/fileSystem/app.ts +86 -0
  436. package/src/utilities/fileSystem/clientLibrary.ts +1 -1
  437. package/src/utilities/fileSystem/filesystem.ts +170 -0
  438. package/src/utilities/fileSystem/index.ts +5 -348
  439. package/src/utilities/fileSystem/plugin.ts +65 -0
  440. package/src/utilities/fileSystem/template.ts +36 -0
  441. package/src/utilities/index.ts +1 -45
  442. package/src/utilities/rowProcessor/index.ts +17 -8
  443. package/src/utilities/rowProcessor/tests/utils.spec.ts +57 -0
  444. package/tsconfig.build.json +2 -0
  445. package/coverage/lcov-report/src/utilities/plugins.ts.html +0 -151
  446. package/dist/api/routes/tests/utilities/TestFunctions.js +0 -167
  447. package/dist/api/routes/tests/utilities/index.js +0 -131
  448. package/dist/automations/tests/utilities/index.js +0 -81
  449. package/dist/tests/utilities/TestConfiguration.js +0 -562
  450. package/dist/tests/utilities/controllers.js +0 -40
  451. package/dist/tests/utilities/structures.js +0 -168
  452. package/dist/utilities/plugins.js +0 -26
  453. package/src/api/routes/tests/deployment.spec.ts +0 -25
  454. package/src/automations/unitTests/automationUtils.spec.js +0 -17
  455. package/src/utilities/plugins.ts +0 -22
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.getDatasourcePlugin = exports.getPluginMetadata = void 0;
13
+ const { budibaseTempDir } = require("../budibaseDir");
14
+ const fs = require("fs");
15
+ const { join } = require("path");
16
+ const backend_core_1 = require("@budibase/backend-core");
17
+ const DATASOURCE_PATH = join(budibaseTempDir(), "datasource");
18
+ const getPluginMetadata = (path) => __awaiter(void 0, void 0, void 0, function* () {
19
+ let metadata = {};
20
+ try {
21
+ const pkg = fs.readFileSync(join(path, "package.json"), "utf8");
22
+ const schema = fs.readFileSync(join(path, "schema.json"), "utf8");
23
+ metadata.schema = JSON.parse(schema);
24
+ metadata.package = JSON.parse(pkg);
25
+ if (!metadata.package.name ||
26
+ !metadata.package.version ||
27
+ !metadata.package.description) {
28
+ throw new Error("package.json is missing one of 'name', 'version' or 'description'.");
29
+ }
30
+ }
31
+ catch (err) {
32
+ throw new Error(`Unable to process schema.json/package.json in plugin. ${err.message}`);
33
+ }
34
+ return { metadata, directory: path };
35
+ });
36
+ exports.getPluginMetadata = getPluginMetadata;
37
+ const getDatasourcePlugin = (plugin) => __awaiter(void 0, void 0, void 0, function* () {
38
+ var _a;
39
+ const hash = (_a = plugin.schema) === null || _a === void 0 ? void 0 : _a.hash;
40
+ if (!fs.existsSync(DATASOURCE_PATH)) {
41
+ fs.mkdirSync(DATASOURCE_PATH);
42
+ }
43
+ const filename = join(DATASOURCE_PATH, plugin.name);
44
+ const metadataName = `${filename}.bbmetadata`;
45
+ if (fs.existsSync(filename)) {
46
+ const currentHash = fs.readFileSync(metadataName, "utf8");
47
+ // if hash is the same return the file, otherwise remove it and re-download
48
+ if (currentHash === hash) {
49
+ return require(filename);
50
+ }
51
+ else {
52
+ console.log(`Updating plugin: ${plugin.name}`);
53
+ delete require.cache[require.resolve(filename)];
54
+ fs.unlinkSync(filename);
55
+ }
56
+ }
57
+ const pluginKey = backend_core_1.objectStore.getPluginJSKey(plugin);
58
+ const pluginJs = yield backend_core_1.objectStore.retrieve(backend_core_1.objectStore.ObjectStoreBuckets.PLUGINS, pluginKey);
59
+ fs.writeFileSync(filename, pluginJs);
60
+ fs.writeFileSync(metadataName, hash);
61
+ return require(filename);
62
+ });
63
+ exports.getDatasourcePlugin = getDatasourcePlugin;
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.downloadTemplate = exports.getTemplateStream = void 0;
13
+ const fs = require("fs");
14
+ const { join } = require("path");
15
+ const constants_1 = require("../../constants");
16
+ const backend_core_1 = require("@budibase/backend-core");
17
+ /**
18
+ * This function manages temporary template files which are stored by Koa.
19
+ * @param {Object} template The template object retrieved from the Koa context object.
20
+ * @returns {Object} Returns an fs read stream which can be loaded into the database.
21
+ */
22
+ const getTemplateStream = (template) => __awaiter(void 0, void 0, void 0, function* () {
23
+ if (template.file) {
24
+ return fs.createReadStream(template.file.path);
25
+ }
26
+ else {
27
+ const [type, name] = template.key.split("/");
28
+ const tmpPath = yield (0, exports.downloadTemplate)(type, name);
29
+ return fs.createReadStream(join(tmpPath, name, "db", "dump.txt"));
30
+ }
31
+ });
32
+ exports.getTemplateStream = getTemplateStream;
33
+ /**
34
+ * Retrieves a template and pipes it to minio as well as making it available temporarily.
35
+ * @param {string} type The type of template which is to be retrieved.
36
+ * @param name
37
+ * @return {Promise<*>}
38
+ */
39
+ const downloadTemplate = (type, name) => __awaiter(void 0, void 0, void 0, function* () {
40
+ const DEFAULT_TEMPLATES_BUCKET = "prod-budi-templates.s3-eu-west-1.amazonaws.com";
41
+ const templateUrl = `https://${DEFAULT_TEMPLATES_BUCKET}/templates/${type}/${name}.tar.gz`;
42
+ return backend_core_1.objectStore.downloadTarball(templateUrl, constants_1.ObjectStoreBuckets.TEMPLATES, type);
43
+ });
44
+ exports.downloadTemplate = downloadTemplate;
@@ -12,9 +12,8 @@ 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.isQsTrue = exports.convertBookmark = exports.formatBytes = exports.stringToReadStream = exports.escapeDangerousCharacters = exports.deleteEntityMetadata = exports.saveEntityMetadata = exports.updateEntityMetadata = exports.attachmentsRelativeURL = exports.clientLibraryPath = exports.objectStoreUrl = exports.checkSlashesInUrl = exports.removeFromArray = exports.NUMBER_REGEX = exports.isDev = exports.wait = void 0;
15
+ exports.isQsTrue = exports.convertBookmark = exports.formatBytes = exports.stringToReadStream = exports.escapeDangerousCharacters = exports.deleteEntityMetadata = exports.saveEntityMetadata = exports.updateEntityMetadata = exports.checkSlashesInUrl = exports.removeFromArray = exports.NUMBER_REGEX = exports.isDev = exports.wait = void 0;
16
16
  const environment_1 = __importDefault(require("../environment"));
17
- const constants_1 = require("../constants");
18
17
  const backend_core_1 = require("@budibase/backend-core");
19
18
  const utils_1 = require("../db/utils");
20
19
  const stream_1 = __importDefault(require("stream"));
@@ -43,48 +42,6 @@ function checkSlashesInUrl(url) {
43
42
  return url.replace(/(https?:\/\/)|(\/)+/g, "$1$2");
44
43
  }
45
44
  exports.checkSlashesInUrl = checkSlashesInUrl;
46
- /**
47
- * Gets the address of the object store, depending on whether self hosted or in cloud.
48
- * @return {string} The base URL of the object store (MinIO or S3).
49
- */
50
- function objectStoreUrl() {
51
- if (environment_1.default.SELF_HOSTED || environment_1.default.MINIO_URL) {
52
- // can use a relative url for this as all goes through the proxy (this is hosted in minio)
53
- return constants_1.OBJ_STORE_DIRECTORY;
54
- }
55
- else {
56
- return environment_1.default.CDN_URL;
57
- }
58
- }
59
- exports.objectStoreUrl = objectStoreUrl;
60
- /**
61
- * In production the client library is stored in the object store, however in development
62
- * we use the symlinked version produced by lerna, located in node modules. We link to this
63
- * via a specific endpoint (under /api/assets/client).
64
- * @param {string} appId In production we need the appId to look up the correct bucket, as the
65
- * version of the client lib may differ between apps.
66
- * @param {string} version The version to retrieve.
67
- * @return {string} The URL to be inserted into appPackage response or server rendered
68
- * app index file.
69
- */
70
- function clientLibraryPath(appId, version) {
71
- if (environment_1.default.isProd()) {
72
- let url = `${objectStoreUrl()}/${backend_core_1.objectStore.sanitizeKey(appId)}/budibase-client.js`;
73
- // append app version to bust the cache
74
- if (version) {
75
- url += `?v=${version}`;
76
- }
77
- return url;
78
- }
79
- else {
80
- return `/api/assets/client`;
81
- }
82
- }
83
- exports.clientLibraryPath = clientLibraryPath;
84
- function attachmentsRelativeURL(attachmentKey) {
85
- return checkSlashesInUrl(`${objectStoreUrl()}/${attachmentKey}`);
86
- }
87
- exports.attachmentsRelativeURL = attachmentsRelativeURL;
88
45
  function updateEntityMetadata(type, entityId, updateFn) {
89
46
  return __awaiter(this, void 0, void 0, function* () {
90
47
  const db = backend_core_1.context.getAppDB();
@@ -38,7 +38,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
38
38
  exports.cleanupAttachments = exports.outputProcessing = exports.inputProcessing = exports.coerce = exports.processAutoColumn = void 0;
39
39
  const linkRows = __importStar(require("../../db/linkedRows"));
40
40
  const constants_1 = require("../../constants");
41
- const index_1 = require("../index");
42
41
  const utils_1 = require("./utils");
43
42
  const constants_2 = require("../../constants");
44
43
  const backend_core_1 = require("@budibase/backend-core");
@@ -172,6 +171,15 @@ function inputProcessing(user, table, row, opts) {
172
171
  else {
173
172
  clonedRow[key] = coerce(value, field.type);
174
173
  }
174
+ // remove any attachment urls, they are generated on read
175
+ if (field.type === constants_1.FieldTypes.ATTACHMENT) {
176
+ const attachments = clonedRow[key];
177
+ if (attachments === null || attachments === void 0 ? void 0 : attachments.length) {
178
+ attachments.forEach((attachment) => {
179
+ delete attachment.url;
180
+ });
181
+ }
182
+ }
175
183
  }
176
184
  if (!clonedRow._id || !clonedRow._rev) {
177
185
  clonedRow._id = row._id;
@@ -201,7 +209,7 @@ function outputProcessing(table, rows, opts = { squash: true }) {
201
209
  let enriched = yield linkRows.attachFullLinkedDocs(table, rows);
202
210
  // process formulas
203
211
  enriched = (0, utils_1.processFormulas)(table, enriched, { dynamic: true });
204
- // update the attachments URL depending on hosting
212
+ // set the attachments URLs
205
213
  for (let [property, column] of Object.entries(table.schema)) {
206
214
  if (column.type === constants_1.FieldTypes.ATTACHMENT) {
207
215
  for (let row of enriched) {
@@ -209,7 +217,7 @@ function outputProcessing(table, rows, opts = { squash: true }) {
209
217
  continue;
210
218
  }
211
219
  row[property].forEach((attachment) => {
212
- attachment.url = (0, index_1.attachmentsRelativeURL)(attachment.key);
220
+ attachment.url = backend_core_1.objectStore.getAppFileUrl(attachment.key);
213
221
  });
214
222
  }
215
223
  }
@@ -269,7 +277,7 @@ function cleanupAttachments(table, { row, rows, oldRow, oldTable, }) {
269
277
  }
270
278
  }
271
279
  if (files.length > 0) {
272
- return backend_core_1.objectStore.deleteFiles(constants_2.ObjectStoreBuckets.APPS, files);
280
+ yield backend_core_1.objectStore.deleteFiles(constants_2.ObjectStoreBuckets.APPS, files);
273
281
  }
274
282
  });
275
283
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@budibase/server",
3
3
  "email": "hi@budibase.com",
4
- "version": "2.2.8",
4
+ "version": "2.2.10-alpha.0",
5
5
  "description": "Budibase Web Server",
6
6
  "main": "src/index.ts",
7
7
  "repository": {
@@ -43,11 +43,11 @@
43
43
  "license": "GPL-3.0",
44
44
  "dependencies": {
45
45
  "@apidevtools/swagger-parser": "10.0.3",
46
- "@budibase/backend-core": "^2.2.8",
47
- "@budibase/client": "^2.2.8",
48
- "@budibase/pro": "2.2.7",
49
- "@budibase/string-templates": "^2.2.8",
50
- "@budibase/types": "^2.2.8",
46
+ "@budibase/backend-core": "2.2.10-alpha.0",
47
+ "@budibase/client": "2.2.10-alpha.0",
48
+ "@budibase/pro": "2.2.9",
49
+ "@budibase/string-templates": "2.2.10-alpha.0",
50
+ "@budibase/types": "2.2.10-alpha.0",
51
51
  "@bull-board/api": "3.7.0",
52
52
  "@bull-board/koa": "3.9.4",
53
53
  "@elastic/elasticsearch": "7.10.0",
@@ -130,13 +130,15 @@
130
130
  "@types/ioredis": "4.28.10",
131
131
  "@types/jest": "27.5.1",
132
132
  "@types/koa": "2.13.4",
133
- "@types/koa__router": "8.0.11",
133
+ "@types/koa__router": "8.0.8",
134
134
  "@types/lodash": "4.14.180",
135
135
  "@types/node": "14.18.20",
136
136
  "@types/node-fetch": "2.6.1",
137
137
  "@types/oracledb": "5.2.2",
138
138
  "@types/pouchdb": "6.4.0",
139
139
  "@types/redis": "4.0.11",
140
+ "@types/server-destroy": "1.0.1",
141
+ "@types/tar": "6.1.3",
140
142
  "@typescript-eslint/parser": "5.45.0",
141
143
  "apidoc": "0.50.4",
142
144
  "babel-jest": "27.5.1",
@@ -165,5 +167,5 @@
165
167
  "optionalDependencies": {
166
168
  "oracledb": "5.3.0"
167
169
  },
168
- "gitHead": "ff40a71342755eb260b6ee5a3d397f2c19e404e5"
170
+ "gitHead": "c66524253459a149aefa42831d63a7806696f036"
169
171
  }
@@ -567,6 +567,40 @@
567
567
  "data"
568
568
  ]
569
569
  },
570
+ "deploymentOutput": {
571
+ "type": "object",
572
+ "properties": {
573
+ "data": {
574
+ "type": "object",
575
+ "properties": {
576
+ "_id": {
577
+ "description": "The ID of the app.",
578
+ "type": "string"
579
+ },
580
+ "status": {
581
+ "description": "Status of the deployment, whether it succeeded or failed",
582
+ "type": "string",
583
+ "enum": [
584
+ "SUCCESS",
585
+ "FAILURE"
586
+ ]
587
+ },
588
+ "appUrl": {
589
+ "description": "The URL of the published app",
590
+ "type": "string"
591
+ }
592
+ },
593
+ "required": [
594
+ "_id",
595
+ "status",
596
+ "appUrl"
597
+ ]
598
+ }
599
+ },
600
+ "required": [
601
+ "data"
602
+ ]
603
+ },
570
604
  "row": {
571
605
  "description": "The row to be created/updated, based on the table schema.",
572
606
  "type": "object",
@@ -1933,6 +1967,56 @@
1933
1967
  }
1934
1968
  }
1935
1969
  },
1970
+ "/applications/{appId}/unpublish": {
1971
+ "post": {
1972
+ "operationId": "unpublish",
1973
+ "summary": "Unpublish an application",
1974
+ "tags": [
1975
+ "applications"
1976
+ ],
1977
+ "parameters": [
1978
+ {
1979
+ "$ref": "#/components/parameters/appIdUrl"
1980
+ }
1981
+ ],
1982
+ "responses": {
1983
+ "204": {
1984
+ "description": "The app was published successfully."
1985
+ }
1986
+ }
1987
+ }
1988
+ },
1989
+ "/applications/{appId}/publish": {
1990
+ "post": {
1991
+ "operationId": "publish",
1992
+ "summary": "Unpublish an application",
1993
+ "tags": [
1994
+ "applications"
1995
+ ],
1996
+ "parameters": [
1997
+ {
1998
+ "$ref": "#/components/parameters/appIdUrl"
1999
+ }
2000
+ ],
2001
+ "responses": {
2002
+ "200": {
2003
+ "description": "Returns the deployment object.",
2004
+ "content": {
2005
+ "application/json": {
2006
+ "schema": {
2007
+ "$ref": "#/components/schemas/deploymentOutput"
2008
+ },
2009
+ "examples": {
2010
+ "deployment": {
2011
+ "$ref": "#/components/examples/deploymentOutput"
2012
+ }
2013
+ }
2014
+ }
2015
+ }
2016
+ }
2017
+ }
2018
+ }
2019
+ },
1936
2020
  "/applications/search": {
1937
2021
  "post": {
1938
2022
  "operationId": "search",
@@ -411,6 +411,30 @@ components:
411
411
  - version
412
412
  required:
413
413
  - data
414
+ deploymentOutput:
415
+ type: object
416
+ properties:
417
+ data:
418
+ type: object
419
+ properties:
420
+ _id:
421
+ description: The ID of the app.
422
+ type: string
423
+ status:
424
+ description: Status of the deployment, whether it succeeded or failed
425
+ type: string
426
+ enum:
427
+ - SUCCESS
428
+ - FAILURE
429
+ appUrl:
430
+ description: The URL of the published app
431
+ type: string
432
+ required:
433
+ - _id
434
+ - status
435
+ - appUrl
436
+ required:
437
+ - data
414
438
  row:
415
439
  description: The row to be created/updated, based on the table schema.
416
440
  type: object
@@ -1453,6 +1477,35 @@ paths:
1453
1477
  examples:
1454
1478
  application:
1455
1479
  $ref: "#/components/examples/application"
1480
+ "/applications/{appId}/unpublish":
1481
+ post:
1482
+ operationId: unpublish
1483
+ summary: Unpublish an application
1484
+ tags:
1485
+ - applications
1486
+ parameters:
1487
+ - $ref: "#/components/parameters/appIdUrl"
1488
+ responses:
1489
+ "204":
1490
+ description: The app was published successfully.
1491
+ "/applications/{appId}/publish":
1492
+ post:
1493
+ operationId: publish
1494
+ summary: Unpublish an application
1495
+ tags:
1496
+ - applications
1497
+ parameters:
1498
+ - $ref: "#/components/parameters/appIdUrl"
1499
+ responses:
1500
+ "200":
1501
+ description: Returns the deployment object.
1502
+ content:
1503
+ application/json:
1504
+ schema:
1505
+ $ref: "#/components/schemas/deploymentOutput"
1506
+ examples:
1507
+ deployment:
1508
+ $ref: "#/components/examples/deploymentOutput"
1456
1509
  /applications/search:
1457
1510
  post:
1458
1511
  operationId: search
@@ -80,6 +80,22 @@ const applicationOutputSchema = object(
80
80
  }
81
81
  )
82
82
 
83
+ const deploymentOutputSchema = object({
84
+ _id: {
85
+ description: "The ID of the app.",
86
+ type: "string",
87
+ },
88
+ status: {
89
+ description: "Status of the deployment, whether it succeeded or failed",
90
+ type: "string",
91
+ enum: ["SUCCESS", "FAILURE"],
92
+ },
93
+ appUrl: {
94
+ description: "The URL of the published app",
95
+ type: "string",
96
+ },
97
+ })
98
+
83
99
  module.exports = new Resource()
84
100
  .setExamples({
85
101
  application: {
@@ -104,4 +120,7 @@ module.exports = new Resource()
104
120
  items: applicationOutputSchema,
105
121
  },
106
122
  }),
123
+ deploymentOutput: object({
124
+ data: deploymentOutputSchema,
125
+ }),
107
126
  })
@@ -23,21 +23,18 @@ import {
23
23
  errors,
24
24
  events,
25
25
  migrations,
26
+ objectStore,
26
27
  } from "@budibase/backend-core"
27
28
  import { USERS_TABLE_SCHEMA } from "../../constants"
28
29
  import { buildDefaultDocs } from "../../db/defaultData/datasource_bb_default"
29
30
  import { removeAppFromUserRoles } from "../../utilities/workerRequests"
30
- import {
31
- clientLibraryPath,
32
- stringToReadStream,
33
- isQsTrue,
34
- } from "../../utilities"
31
+ import { stringToReadStream, isQsTrue } from "../../utilities"
35
32
  import { getLocksById } from "../../utilities/redis"
36
33
  import {
37
34
  updateClientLibrary,
38
35
  backupClientLibrary,
39
36
  revertClientLibrary,
40
- } from "../../utilities/fileSystem/clientLibrary"
37
+ } from "../../utilities/fileSystem"
41
38
  import { cleanupAutomations } from "../../automations/utils"
42
39
  import { checkAppMetadata } from "../../automations/logging"
43
40
  import { getUniqueRows } from "../../utilities/usageQuota/rows"
@@ -49,10 +46,11 @@ import {
49
46
  MigrationType,
50
47
  BBContext,
51
48
  Database,
49
+ UserCtx,
52
50
  } from "@budibase/types"
53
51
  import { BASE_LAYOUT_PROP_IDS } from "../../constants/layouts"
54
- import { enrichPluginURLs } from "../../utilities/plugins"
55
52
  import sdk from "../../sdk"
53
+ import { getDB } from "@budibase/backend-core/src/db"
56
54
 
57
55
  // utility function, need to do away with this
58
56
  async function getLayouts() {
@@ -204,27 +202,34 @@ export async function fetchAppDefinition(ctx: BBContext) {
204
202
  }
205
203
  }
206
204
 
207
- export async function fetchAppPackage(ctx: BBContext) {
205
+ export async function fetchAppPackage(ctx: UserCtx) {
208
206
  const db = context.getAppDB()
209
207
  let application = await db.get(DocumentType.APP_METADATA)
210
208
  const layouts = await getLayouts()
211
209
  let screens = await getScreens()
212
210
 
213
211
  // Enrich plugin URLs
214
- application.usedPlugins = enrichPluginURLs(application.usedPlugins)
212
+ application.usedPlugins = objectStore.enrichPluginURLs(
213
+ application.usedPlugins
214
+ )
215
215
 
216
216
  // Only filter screens if the user is not a builder
217
- if (!(ctx.user?.builder && ctx.user.builder.global)) {
217
+ if (!(ctx.user.builder && ctx.user.builder.global)) {
218
218
  const userRoleId = getUserRoleId(ctx)
219
219
  const accessController = new roles.AccessController()
220
220
  screens = await accessController.checkScreensAccess(screens, userRoleId)
221
221
  }
222
222
 
223
+ const clientLibPath = objectStore.clientLibraryUrl(
224
+ ctx.params.appId,
225
+ application.version
226
+ )
227
+
223
228
  ctx.body = {
224
229
  application,
225
230
  screens,
226
231
  layouts,
227
- clientLibPath: clientLibraryPath(ctx.params.appId, application.version),
232
+ clientLibPath,
228
233
  }
229
234
  }
230
235
 
@@ -370,7 +375,7 @@ async function appPostCreate(ctx: BBContext, app: App) {
370
375
  if (err.code && err.code === errors.codes.USAGE_LIMIT_EXCEEDED) {
371
376
  // this import resulted in row usage exceeding the quota
372
377
  // delete the app
373
- // skip pre- and post-steps as no rows have been added to quotas yet
378
+ // skip pre and post-steps as no rows have been added to quotas yet
374
379
  ctx.params.appId = app.appId
375
380
  await destroyApp(ctx)
376
381
  }
@@ -460,41 +465,47 @@ export async function revertClient(ctx: BBContext) {
460
465
  ctx.body = app
461
466
  }
462
467
 
468
+ const unpublishApp = async (ctx: any) => {
469
+ let appId = ctx.params.appId
470
+ appId = dbCore.getProdAppID(appId)
471
+
472
+ const db = context.getProdAppDB()
473
+ const result = await db.destroy()
474
+
475
+ await events.app.unpublished({ appId } as App)
476
+
477
+ // automations only in production
478
+ await cleanupAutomations(appId)
479
+
480
+ await cache.app.invalidateAppMetadata(appId)
481
+ return result
482
+ }
483
+
463
484
  async function destroyApp(ctx: BBContext) {
464
485
  let appId = ctx.params.appId
465
- let isUnpublish = ctx.query && ctx.query.unpublish
486
+ appId = dbCore.getProdAppID(appId)
487
+ const devAppId = dbCore.getDevAppID(appId)
466
488
 
467
- if (isUnpublish) {
468
- appId = dbCore.getProdAppID(appId)
469
- const devAppId = dbCore.getDevAppID(appId)
470
- // sync before removing the published app
489
+ // check if we need to unpublish first
490
+ if (await dbCore.dbExists(appId)) {
491
+ // app is deployed, run through unpublish flow
471
492
  await sdk.applications.syncApp(devAppId)
493
+ await unpublishApp(ctx)
472
494
  }
473
495
 
474
- const db = isUnpublish ? context.getProdAppDB() : context.getAppDB()
496
+ const db = dbCore.getDB(devAppId)
497
+ // standard app deletion flow
475
498
  const app = await db.get(DocumentType.APP_METADATA)
476
499
  const result = await db.destroy()
500
+ await quotas.removeApp()
501
+ await events.app.deleted(app)
477
502
 
478
- if (isUnpublish) {
479
- await events.app.unpublished(app)
480
- } else {
481
- await quotas.removeApp()
482
- await events.app.deleted(app)
483
- }
484
-
485
- /* istanbul ignore next */
486
- if (!env.isTest() && !isUnpublish) {
503
+ if (!env.isTest()) {
487
504
  await deleteApp(appId)
488
505
  }
489
- // automations only in production
490
- if (isUnpublish) {
491
- await cleanupAutomations(appId)
492
- }
493
- // remove app role when the dev app is deleted (no trace of app anymore)
494
- else {
495
- await removeAppFromUserRoles(ctx, appId)
496
- }
497
- await cache.app.invalidateAppMetadata(appId)
506
+
507
+ await removeAppFromUserRoles(ctx, appId)
508
+ await cache.app.invalidateAppMetadata(devAppId)
498
509
  return result
499
510
  }
500
511
 
@@ -519,6 +530,21 @@ export async function destroy(ctx: BBContext) {
519
530
  ctx.body = result
520
531
  }
521
532
 
533
+ export const unpublish = async (ctx: BBContext) => {
534
+ const prodAppId = dbCore.getProdAppID(ctx.params.appId)
535
+ const dbExists = await dbCore.dbExists(prodAppId)
536
+
537
+ // check app has been published
538
+ if (!dbExists) {
539
+ return ctx.throw(400, "App has not been published.")
540
+ }
541
+
542
+ await preDestroyApp(ctx)
543
+ await unpublishApp(ctx)
544
+ await postDestroyApp(ctx)
545
+ ctx.status = 204
546
+ }
547
+
522
548
  export async function sync(ctx: BBContext) {
523
549
  const appId = ctx.params.appId
524
550
  try {
@@ -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) {