@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
@@ -1,6 +1,7 @@
1
1
  import controller from "../../controllers/public/applications"
2
2
  import Endpoint from "./utils/Endpoint"
3
3
  const { nameValidator, applicationValidator } = require("../utils/validators")
4
+ import { db } from "@budibase/backend-core"
4
5
 
5
6
  const read = [],
6
7
  write = []
@@ -94,6 +95,49 @@ write.push(
94
95
  */
95
96
  write.push(new Endpoint("delete", "/applications/:appId", controller.destroy))
96
97
 
98
+ /**
99
+ * @openapi
100
+ * /applications/{appId}/unpublish:
101
+ * post:
102
+ * operationId: unpublish
103
+ * summary: Unpublish an application
104
+ * tags:
105
+ * - applications
106
+ * parameters:
107
+ * - $ref: '#/components/parameters/appIdUrl'
108
+ * responses:
109
+ * 204:
110
+ * description: The app was published successfully.
111
+ */
112
+ write.push(
113
+ new Endpoint("post", "/applications/:appId/unpublish", controller.unpublish)
114
+ )
115
+
116
+ /**
117
+ * @openapi
118
+ * /applications/{appId}/publish:
119
+ * post:
120
+ * operationId: publish
121
+ * summary: Unpublish an application
122
+ * tags:
123
+ * - applications
124
+ * parameters:
125
+ * - $ref: '#/components/parameters/appIdUrl'
126
+ * responses:
127
+ * 200:
128
+ * description: Returns the deployment object.
129
+ * content:
130
+ * application/json:
131
+ * schema:
132
+ * $ref: '#/components/schemas/deploymentOutput'
133
+ * examples:
134
+ * deployment:
135
+ * $ref: '#/components/examples/deploymentOutput'
136
+ */
137
+ write.push(
138
+ new Endpoint("post", "/applications/:appId/publish", controller.publish)
139
+ )
140
+
97
141
  /**
98
142
  * @openapi
99
143
  * /applications/{appId}:
@@ -54,9 +54,13 @@ function processQueries(ctx: any) {
54
54
  }
55
55
 
56
56
  export default async (ctx: any, next: any) => {
57
+ if (!ctx.body) {
58
+ return await next()
59
+ }
57
60
  let urlParts = ctx.url.split("/")
58
61
  urlParts = urlParts.slice(4, urlParts.length)
59
62
  let body = {}
63
+
60
64
  switch (urlParts[0]) {
61
65
  case Resources.APPLICATION:
62
66
  body = processApplications(ctx)
@@ -11,14 +11,11 @@ jest.mock("../../../utilities/redis", () => ({
11
11
  checkDebounce: jest.fn(),
12
12
  shutdown: jest.fn(),
13
13
  }))
14
-
15
- const {
16
- clearAllApps,
17
- checkBuilderEndpoint,
18
- } = require("./utilities/TestFunctions")
19
- const setup = require("./utilities")
20
- const { AppStatus } = require("../../../db/utils")
21
- const { events } = require("@budibase/backend-core")
14
+ import { clearAllApps, checkBuilderEndpoint } from "./utilities/TestFunctions"
15
+ import * as setup from "./utilities"
16
+ import { AppStatus } from "../../../db/utils"
17
+ import { events } from "@budibase/backend-core"
18
+ import env from "../../../environment"
22
19
 
23
20
  describe("/applications", () => {
24
21
  let request = setup.getRequest()
@@ -162,33 +159,30 @@ describe("/applications", () => {
162
159
  })
163
160
  })
164
161
 
165
- describe("delete", () => {
166
- it("should delete app", async () => {
167
- await config.createApp("to-delete")
162
+ describe("publish", () => {
163
+ it("should publish app with dev app ID", async () => {
168
164
  const appId = config.getAppId()
169
165
  await request
170
- .delete(`/api/applications/${appId}`)
166
+ .post(`/api/applications/${appId}/publish`)
171
167
  .set(config.defaultHeaders())
172
168
  .expect("Content-Type", /json/)
173
169
  .expect(200)
174
- expect(events.app.deleted).toBeCalledTimes(1)
170
+ expect(events.app.published).toBeCalledTimes(1)
175
171
  })
176
172
 
177
- it("should unpublish app", async () => {
178
- await config.createApp("to-unpublish")
173
+ it("should publish app with prod app ID", async () => {
179
174
  const appId = config.getProdAppId()
180
175
  await request
181
- .delete(`/api/applications/${appId}?unpublish=true`)
176
+ .post(`/api/applications/${appId}/publish`)
182
177
  .set(config.defaultHeaders())
183
178
  .expect("Content-Type", /json/)
184
179
  .expect(200)
185
- expect(events.app.unpublished).toBeCalledTimes(1)
180
+ expect(events.app.published).toBeCalledTimes(1)
186
181
  })
187
182
  })
188
183
 
189
184
  describe("manage client library version", () => {
190
185
  it("should be able to update the app client library version", async () => {
191
- console.log(config.getAppId())
192
186
  await request
193
187
  .post(`/api/applications/${config.getAppId()}/client/update`)
194
188
  .set(config.defaultHeaders())
@@ -196,6 +190,7 @@ describe("/applications", () => {
196
190
  .expect(200)
197
191
  expect(events.app.versionUpdated).toBeCalledTimes(1)
198
192
  })
193
+
199
194
  it("should be able to revert the app client library version", async () => {
200
195
  // We need to first update the version so that we can then revert
201
196
  await request
@@ -234,4 +229,85 @@ describe("/applications", () => {
234
229
  expect(getRes.body.application.updatedAt).toBeDefined()
235
230
  })
236
231
  })
232
+
233
+ describe("sync", () => {
234
+ it("app should sync correctly", async () => {
235
+ const res = await request
236
+ .post(`/api/applications/${config.getAppId()}/sync`)
237
+ .set(config.defaultHeaders())
238
+ .expect("Content-Type", /json/)
239
+ .expect(200)
240
+ expect(res.body.message).toEqual("App sync completed successfully.")
241
+ })
242
+
243
+ it("app should not sync if production", async () => {
244
+ const res = await request
245
+ .post(`/api/applications/app_123456/sync`)
246
+ .set(config.defaultHeaders())
247
+ .expect("Content-Type", /json/)
248
+ .expect(400)
249
+ expect(res.body.message).toEqual(
250
+ "This action cannot be performed for production apps"
251
+ )
252
+ })
253
+
254
+ it("app should not sync if sync is disabled", async () => {
255
+ env._set("DISABLE_AUTO_PROD_APP_SYNC", true)
256
+ const res = await request
257
+ .post(`/api/applications/${config.getAppId()}/sync`)
258
+ .set(config.defaultHeaders())
259
+ .expect("Content-Type", /json/)
260
+ .expect(200)
261
+ expect(res.body.message).toEqual(
262
+ "App sync disabled. You can reenable with the DISABLE_AUTO_PROD_APP_SYNC environment variable."
263
+ )
264
+ env._set("DISABLE_AUTO_PROD_APP_SYNC", false)
265
+ })
266
+ })
267
+
268
+ describe("unpublish", () => {
269
+ it("should unpublish app with dev app ID", async () => {
270
+ const appId = config.getAppId()
271
+ await request
272
+ .post(`/api/applications/${appId}/unpublish`)
273
+ .set(config.defaultHeaders())
274
+ .expect(204)
275
+ expect(events.app.unpublished).toBeCalledTimes(1)
276
+ })
277
+
278
+ it("should unpublish app with prod app ID", async () => {
279
+ const appId = config.getProdAppId()
280
+ await request
281
+ .post(`/api/applications/${appId}/unpublish`)
282
+ .set(config.defaultHeaders())
283
+ .expect(204)
284
+ expect(events.app.unpublished).toBeCalledTimes(1)
285
+ })
286
+ })
287
+
288
+ describe("delete", () => {
289
+ it("should delete published app and dev apps with dev app ID", async () => {
290
+ await config.createApp("to-delete")
291
+ const appId = config.getAppId()
292
+ await request
293
+ .delete(`/api/applications/${appId}`)
294
+ .set(config.defaultHeaders())
295
+ .expect("Content-Type", /json/)
296
+ .expect(200)
297
+ expect(events.app.deleted).toBeCalledTimes(1)
298
+ expect(events.app.unpublished).toBeCalledTimes(1)
299
+ })
300
+
301
+ it("should delete published app and dev app with prod app ID", async () => {
302
+ await config.createApp("to-delete")
303
+ const appId = config.getProdAppId()
304
+ await request
305
+ .delete(`/api/applications/${appId}`)
306
+ .set(config.defaultHeaders())
307
+ .expect("Content-Type", /json/)
308
+ .expect(200)
309
+ expect(events.app.deleted).toBeCalledTimes(1)
310
+ expect(events.app.unpublished).toBeCalledTimes(1)
311
+ })
312
+ })
237
313
  })
@@ -8,10 +8,10 @@ jest.mock("@budibase/backend-core", () => {
8
8
  }
9
9
  })
10
10
 
11
- const { checkBuilderEndpoint } = require("./utilities/TestFunctions")
12
- const setup = require("./utilities")
13
- const { events } = require("@budibase/backend-core")
14
-
11
+ import * as setup from "./utilities"
12
+ import { events } from "@budibase/backend-core"
13
+ import sdk from "../../../sdk"
14
+ import { checkBuilderEndpoint } from "./utilities/TestFunctions"
15
15
  describe("/backups", () => {
16
16
  let request = setup.getRequest()
17
17
  let config = setup.getConfig()
@@ -30,7 +30,7 @@ describe("/backups", () => {
30
30
  .expect(200)
31
31
  expect(res.text).toBeDefined()
32
32
  expect(res.headers["content-type"]).toEqual("application/gzip")
33
- expect(events.app.exported.mock.calls.length).toBe(1)
33
+ expect(events.app.exported).toBeCalledTimes(1)
34
34
  })
35
35
 
36
36
  it("should apply authorization to endpoint", async () => {
@@ -41,4 +41,15 @@ describe("/backups", () => {
41
41
  })
42
42
  })
43
43
  })
44
- })
44
+
45
+ describe("calculateBackupStats", () => {
46
+ it("should be able to calculate the backup statistics", async () => {
47
+ config.createAutomation()
48
+ config.createScreen()
49
+ let res = await sdk.backups.calculateBackupStats(config.getAppId())
50
+ expect(res.automations).toEqual(1)
51
+ expect(res.datasources).toEqual(1)
52
+ expect(res.screens).toEqual(1)
53
+ })
54
+ })
55
+ })
@@ -0,0 +1,65 @@
1
+ import { db as dbCore } from "@budibase/backend-core"
2
+ import { AppStatus } from "../../../db/utils"
3
+
4
+ import * as setup from "./utilities"
5
+
6
+ describe("/cloud", () => {
7
+ let request = setup.getRequest()
8
+ let config = setup.getConfig()
9
+
10
+ afterAll(setup.afterAll)
11
+
12
+ beforeEach(async () => {
13
+ await config.init()
14
+ })
15
+
16
+ afterEach(async () => {
17
+ // clear all mocks
18
+ jest.clearAllMocks()
19
+ })
20
+
21
+ describe("import", () => {
22
+ it("should be able to import apps", async () => {
23
+ // first we need to delete any existing apps on the system so it looks clean otherwise the
24
+ // import will not run
25
+ await request
26
+ .post(
27
+ `/api/applications/${dbCore.getProdAppID(
28
+ config.getAppId()
29
+ )}/unpublish`
30
+ )
31
+ .set(config.defaultHeaders())
32
+ .expect(204)
33
+ await request
34
+ .delete(`/api/applications/${config.getAppId()}`)
35
+ .set(config.defaultHeaders())
36
+ .expect("Content-Type", /json/)
37
+ .expect(200)
38
+
39
+ // get a count of apps before the import
40
+ const preImportApps = await request
41
+ .get(`/api/applications?status=${AppStatus.ALL}`)
42
+ .set(config.defaultHeaders())
43
+ .expect("Content-Type", /json/)
44
+ .expect(200)
45
+
46
+ // Perform the import
47
+ const res = await request
48
+ .post(`/api/cloud/import`)
49
+ .attach("importFile", "src/api/routes/tests/data/export-test.tar.gz")
50
+ .set(config.defaultHeaders())
51
+ .expect(200)
52
+ expect(res.body.message).toEqual("Apps successfully imported.")
53
+
54
+ // get a count of apps after the import
55
+ const postImportApps = await request
56
+ .get(`/api/applications?status=${AppStatus.ALL}`)
57
+ .set(config.defaultHeaders())
58
+ .expect("Content-Type", /json/)
59
+ .expect(200)
60
+
61
+ // There are two apps in the file that was imported so check for this
62
+ expect(postImportApps.body.length).toEqual(2)
63
+ })
64
+ })
65
+ })
@@ -1,16 +1,16 @@
1
1
  jest.mock("pg")
2
+ import * as setup from "./utilities"
3
+ import { checkBuilderEndpoint } from "./utilities/TestFunctions"
4
+ import { checkCacheForDynamicVariable } from "../../../threads/utils"
5
+ import { events } from "@budibase/backend-core"
2
6
 
3
- let setup = require("./utilities")
4
7
  let { basicDatasource } = setup.structures
5
- let { checkBuilderEndpoint } = require("./utilities/TestFunctions")
6
8
  const pg = require("pg")
7
- const { checkCacheForDynamicVariable } = require("../../../threads/utils")
8
- const { events } = require("@budibase/backend-core")
9
9
 
10
10
  describe("/datasources", () => {
11
11
  let request = setup.getRequest()
12
12
  let config = setup.getConfig()
13
- let datasource
13
+ let datasource: any
14
14
 
15
15
  afterAll(setup.afterAll)
16
16
 
@@ -26,7 +26,7 @@ describe("/datasources", () => {
26
26
  .post(`/api/datasources`)
27
27
  .send(basicDatasource())
28
28
  .set(config.defaultHeaders())
29
- .expect('Content-Type', /json/)
29
+ .expect("Content-Type", /json/)
30
30
  .expect(200)
31
31
 
32
32
  expect(res.body.datasource.name).toEqual("Test")
@@ -42,7 +42,7 @@ describe("/datasources", () => {
42
42
  .put(`/api/datasources/${datasource._id}`)
43
43
  .send(datasource)
44
44
  .set(config.defaultHeaders())
45
- .expect('Content-Type', /json/)
45
+ .expect("Content-Type", /json/)
46
46
  .expect(200)
47
47
 
48
48
  expect(res.body.datasource.name).toEqual("Updated Test")
@@ -51,25 +51,34 @@ describe("/datasources", () => {
51
51
  })
52
52
 
53
53
  describe("dynamic variables", () => {
54
- async function preview(datasource, fields) {
54
+ async function preview(
55
+ datasource: any,
56
+ fields: { path: string; queryString: string }
57
+ ) {
55
58
  return config.previewQuery(request, config, datasource, fields)
56
59
  }
57
60
 
58
61
  it("should invalidate changed or removed variables", async () => {
59
62
  const { datasource, query } = await config.dynamicVariableDatasource()
60
63
  // preview once to cache variables
61
- await preview(datasource, { path: "www.test.com", queryString: "test={{ variable3 }}" })
64
+ await preview(datasource, {
65
+ path: "www.test.com",
66
+ queryString: "test={{ variable3 }}",
67
+ })
62
68
  // check variables in cache
63
- let contents = await checkCacheForDynamicVariable(query._id, "variable3")
69
+ let contents = await checkCacheForDynamicVariable(
70
+ query._id,
71
+ "variable3"
72
+ )
64
73
  expect(contents.rows.length).toEqual(1)
65
-
74
+
66
75
  // update the datasource to remove the variables
67
76
  datasource.config.dynamicVariables = []
68
77
  const res = await request
69
78
  .put(`/api/datasources/${datasource._id}`)
70
79
  .send(datasource)
71
80
  .set(config.defaultHeaders())
72
- .expect('Content-Type', /json/)
81
+ .expect("Content-Type", /json/)
73
82
  .expect(200)
74
83
  expect(res.body.errors).toBeUndefined()
75
84
 
@@ -85,7 +94,7 @@ describe("/datasources", () => {
85
94
  const res = await request
86
95
  .get(`/api/datasources`)
87
96
  .set(config.defaultHeaders())
88
- .expect('Content-Type', /json/)
97
+ .expect("Content-Type", /json/)
89
98
  .expect(200)
90
99
 
91
100
  const datasources = res.body
@@ -160,7 +169,7 @@ describe("/datasources", () => {
160
169
  const res = await request
161
170
  .get(`/api/datasources`)
162
171
  .set(config.defaultHeaders())
163
- .expect('Content-Type', /json/)
172
+ .expect("Content-Type", /json/)
164
173
  .expect(200)
165
174
 
166
175
  expect(res.body.length).toEqual(1)
@@ -174,6 +183,5 @@ describe("/datasources", () => {
174
183
  url: `/api/datasources/${datasource._id}/${datasource._rev}`,
175
184
  })
176
185
  })
177
-
178
186
  })
179
187
  })
@@ -92,7 +92,7 @@ describe("/permission", () => {
92
92
  describe("check public user allowed", () => {
93
93
  it("should be able to read the row", async () => {
94
94
  // replicate changes before checking permissions
95
- await config.deploy()
95
+ await config.publish()
96
96
 
97
97
  const res = await request
98
98
  .get(`/api/${table._id}/rows`)
@@ -0,0 +1,179 @@
1
+ let mockObjectStore = jest.fn().mockImplementation(() => {
2
+ return [{ name: "test.js" }]
3
+ })
4
+
5
+ let deleteFolder = jest.fn().mockImplementation()
6
+ jest.mock("@budibase/backend-core", () => {
7
+ const core = jest.requireActual("@budibase/backend-core")
8
+ return {
9
+ ...core,
10
+ objectStore: {
11
+ ...core.objectStore,
12
+ upload: jest.fn(),
13
+ uploadDirectory: mockObjectStore,
14
+ deleteFolder: deleteFolder,
15
+ },
16
+ }
17
+ })
18
+
19
+ import { events } from "@budibase/backend-core"
20
+ import * as setup from "./utilities"
21
+
22
+ describe("/plugins", () => {
23
+ let request = setup.getRequest()
24
+ let config = setup.getConfig()
25
+
26
+ afterAll(setup.afterAll)
27
+
28
+ beforeEach(async () => {
29
+ await config.init()
30
+ jest.clearAllMocks()
31
+ })
32
+
33
+ const createPlugin = async (status?: number) => {
34
+ return request
35
+ .post(`/api/plugin/upload`)
36
+ .attach("file", "src/api/routes/tests/data/comment-box-1.0.2.tar.gz")
37
+ .set(config.defaultHeaders())
38
+ .expect("Content-Type", /json/)
39
+ .expect(status ? status : 200)
40
+ }
41
+
42
+ const getPlugins = async (status?: number) => {
43
+ return request
44
+ .get(`/api/plugin`)
45
+ .set(config.defaultHeaders())
46
+ .expect("Content-Type", /json/)
47
+ .expect(status ? status : 200)
48
+ }
49
+
50
+ describe("upload", () => {
51
+ it("should be able to upload a plugin", async () => {
52
+ let res = await createPlugin()
53
+ expect(res.body).toBeDefined()
54
+ expect(res.body.plugins).toBeDefined()
55
+ expect(res.body.plugins[0]._id).toEqual("plg_comment-box")
56
+ expect(events.plugin.imported).toHaveBeenCalledTimes(1)
57
+ })
58
+
59
+ it("should not be able to create a plugin if there is an error", async () => {
60
+ mockObjectStore.mockImplementationOnce(() => {
61
+ throw new Error()
62
+ })
63
+ let res = await createPlugin(400)
64
+ expect(res.body.message).toEqual("Failed to import plugin: Error")
65
+ expect(events.plugin.imported).toHaveBeenCalledTimes(0)
66
+ })
67
+ })
68
+
69
+ describe("fetch", () => {
70
+ it("should be able to fetch plugins", async () => {
71
+ await createPlugin()
72
+ const res = await getPlugins()
73
+ expect(res.body).toBeDefined()
74
+ expect(res.body[0]._id).toEqual("plg_comment-box")
75
+ })
76
+ })
77
+
78
+ describe("destroy", () => {
79
+ it("should be able to delete a plugin", async () => {
80
+ await createPlugin()
81
+ const res = await request
82
+ .delete(`/api/plugin/plg_comment-box`)
83
+ .set(config.defaultHeaders())
84
+ .expect("Content-Type", /json/)
85
+ .expect(200)
86
+ expect(res.body).toBeDefined()
87
+ expect(res.body.message).toEqual("Plugin plg_comment-box deleted.")
88
+
89
+ const plugins = await getPlugins()
90
+ expect(plugins.body).toBeDefined()
91
+ expect(plugins.body.length).toEqual(0)
92
+ expect(events.plugin.deleted).toHaveBeenCalledTimes(1)
93
+ })
94
+ it("should handle an error deleting a plugin", async () => {
95
+ deleteFolder.mockImplementationOnce(() => {
96
+ throw new Error()
97
+ })
98
+
99
+ await createPlugin()
100
+ const res = await request
101
+ .delete(`/api/plugin/plg_comment-box`)
102
+ .set(config.defaultHeaders())
103
+ .expect("Content-Type", /json/)
104
+ .expect(400)
105
+
106
+ expect(res.body.message).toEqual("Failed to delete plugin: Error")
107
+ expect(events.plugin.deleted).toHaveBeenCalledTimes(0)
108
+ const plugins = await getPlugins()
109
+ expect(plugins.body).toBeDefined()
110
+ expect(plugins.body.length).toEqual(1)
111
+ })
112
+ })
113
+
114
+ describe("github", () => {
115
+ const createGithubPlugin = async (status?: number, url?: string) => {
116
+ return await request
117
+ .post(`/api/plugin`)
118
+ .send({
119
+ source: "Github",
120
+ url,
121
+ githubToken: "token",
122
+ })
123
+ .set(config.defaultHeaders())
124
+ .expect("Content-Type", /json/)
125
+ .expect(status ? status : 200)
126
+ }
127
+ it("should be able to create a plugin from github", async () => {
128
+ const res = await createGithubPlugin(
129
+ 200,
130
+ "https://github.com/my-repo/budibase-comment-box.git"
131
+ )
132
+ expect(res.body).toBeDefined()
133
+ expect(res.body.plugin).toBeDefined()
134
+ expect(res.body.plugin._id).toEqual("plg_comment-box")
135
+ })
136
+ it("should fail if the url is not from github", async () => {
137
+ const res = await createGithubPlugin(
138
+ 400,
139
+ "https://notgithub.com/my-repo/budibase-comment-box"
140
+ )
141
+ expect(res.body.message).toEqual(
142
+ "Failed to import plugin: The plugin origin must be from Github"
143
+ )
144
+ })
145
+ })
146
+ describe("npm", () => {
147
+ it("should be able to create a plugin from npm", async () => {
148
+ const res = await request
149
+ .post(`/api/plugin`)
150
+ .send({
151
+ source: "NPM",
152
+ url: "https://www.npmjs.com/package/budibase-component",
153
+ })
154
+ .set(config.defaultHeaders())
155
+ .expect("Content-Type", /json/)
156
+ .expect(200)
157
+ expect(res.body).toBeDefined()
158
+ expect(res.body.plugin._id).toEqual("plg_budibase-component")
159
+ expect(events.plugin.imported).toHaveBeenCalled()
160
+ })
161
+ })
162
+
163
+ describe("url", () => {
164
+ it("should be able to create a plugin from a URL", async () => {
165
+ const res = await request
166
+ .post(`/api/plugin`)
167
+ .send({
168
+ source: "URL",
169
+ url: "https://www.someurl.com/comment-box/comment-box-1.0.2.tar.gz",
170
+ })
171
+ .set(config.defaultHeaders())
172
+ .expect("Content-Type", /json/)
173
+ .expect(200)
174
+ expect(res.body).toBeDefined()
175
+ expect(res.body.plugin._id).toEqual("plg_comment-box")
176
+ expect(events.plugin.imported).toHaveBeenCalledTimes(1)
177
+ })
178
+ })
179
+ })
@@ -9,7 +9,6 @@ const route = "/test"
9
9
  // there are checks which are disabled in test env,
10
10
  // these checks need to be enabled for this test
11
11
 
12
-
13
12
  describe("/routing", () => {
14
13
  let request = setup.getRequest()
15
14
  let config = setup.getConfig()
@@ -26,7 +25,7 @@ describe("/routing", () => {
26
25
  screen2.routing.roleId = BUILTIN_ROLE_IDS.POWER
27
26
  screen2.routing.route = route
28
27
  screen2 = await config.createScreen(screen2)
29
- await config.deploy()
28
+ await config.publish()
30
29
  })
31
30
 
32
31
  describe("fetch", () => {
@@ -10,6 +10,7 @@ const {
10
10
  StaticQuotaName,
11
11
  MonthlyQuotaName,
12
12
  } = require("@budibase/types")
13
+ const { structures } = require("@budibase/backend-core/tests");
13
14
 
14
15
  describe("/rows", () => {
15
16
  let request = setup.getRequest()
@@ -494,12 +495,13 @@ describe("/rows", () => {
494
495
  describe("attachments", () => {
495
496
  it("should allow enriching attachment rows", async () => {
496
497
  const table = await config.createAttachmentTable()
498
+ const attachmentId = `${structures.uuid()}.csv`
497
499
  const row = await config.createRow({
498
500
  name: "test",
499
501
  description: "test",
500
502
  attachment: [
501
503
  {
502
- key: `${config.getAppId()}/attachments/test/thing.csv`,
504
+ key: `${config.getAppId()}/attachments/${attachmentId}`,
503
505
  },
504
506
  ],
505
507
  tableId: table._id,
@@ -509,7 +511,7 @@ describe("/rows", () => {
509
511
  context.doInAppContext(config.getAppId(), async () => {
510
512
  const enriched = await outputProcessing(table, [row])
511
513
  expect(enriched[0].attachment[0].url).toBe(
512
- `/prod-budi-app-assets/${config.getAppId()}/attachments/test/thing.csv`
514
+ `/files/signed/prod-budi-app-assets/${config.getProdAppId()}/attachments/${attachmentId}`
513
515
  )
514
516
  })
515
517
  })