@budibase/server 2.2.3 → 2.2.4-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 (429) hide show
  1. package/__mocks__/aws-sdk.ts +19 -0
  2. package/__mocks__/node-fetch.ts +78 -0
  3. package/builder/assets/{index.c7a7a2d0.js → index.4aa8e747.js} +194 -194
  4. package/builder/index.html +1 -1
  5. package/coverage/clover.xml +4914 -4899
  6. package/coverage/coverage-final.json +265 -262
  7. package/coverage/lcov-report/index.html +176 -176
  8. package/coverage/lcov-report/src/api/controllers/analytics.ts.html +7 -7
  9. package/coverage/lcov-report/src/api/controllers/apikeys.ts.html +5 -5
  10. package/coverage/lcov-report/src/api/controllers/application.ts.html +171 -159
  11. package/coverage/lcov-report/src/api/controllers/auth.ts.html +11 -11
  12. package/coverage/lcov-report/src/api/controllers/automation.ts.html +51 -51
  13. package/coverage/lcov-report/src/api/controllers/backup.ts.html +6 -6
  14. package/coverage/lcov-report/src/api/controllers/cloud.ts.html +91 -79
  15. package/coverage/lcov-report/src/api/controllers/component.ts.html +5 -5
  16. package/coverage/lcov-report/src/api/controllers/datasource.ts.html +30 -30
  17. package/coverage/lcov-report/src/api/controllers/deploy/Deployment.ts.html +14 -14
  18. package/coverage/lcov-report/src/api/controllers/deploy/index.html +1 -1
  19. package/coverage/lcov-report/src/api/controllers/deploy/index.ts.html +83 -83
  20. package/coverage/lcov-report/src/api/controllers/dev.ts.html +18 -18
  21. package/coverage/lcov-report/src/api/controllers/index.html +51 -51
  22. package/coverage/lcov-report/src/api/controllers/integration.ts.html +4 -4
  23. package/coverage/lcov-report/src/api/controllers/layout.ts.html +6 -6
  24. package/coverage/lcov-report/src/api/controllers/metadata.ts.html +9 -9
  25. package/coverage/lcov-report/src/api/controllers/migrations.ts.html +4 -4
  26. package/coverage/lcov-report/src/api/controllers/permission.ts.html +13 -13
  27. package/coverage/lcov-report/src/api/controllers/plugin/file.ts.html +19 -19
  28. package/coverage/lcov-report/src/api/controllers/plugin/github.ts.html +63 -63
  29. package/coverage/lcov-report/src/api/controllers/plugin/index.html +72 -72
  30. package/coverage/lcov-report/src/api/controllers/plugin/index.ts.html +150 -135
  31. package/coverage/lcov-report/src/api/controllers/plugin/npm.ts.html +55 -55
  32. package/coverage/lcov-report/src/api/controllers/plugin/uploaders.ts.html +11 -11
  33. package/coverage/lcov-report/src/api/controllers/plugin/url.ts.html +18 -18
  34. package/coverage/lcov-report/src/api/controllers/plugin/utils.ts.html +20 -20
  35. package/coverage/lcov-report/src/api/controllers/public/applications.ts.html +10 -10
  36. package/coverage/lcov-report/src/api/controllers/public/index.html +1 -1
  37. package/coverage/lcov-report/src/api/controllers/public/mapping/applications.ts.html +2 -2
  38. package/coverage/lcov-report/src/api/controllers/public/mapping/index.html +1 -1
  39. package/coverage/lcov-report/src/api/controllers/public/mapping/index.ts.html +7 -7
  40. package/coverage/lcov-report/src/api/controllers/public/mapping/queries.ts.html +2 -2
  41. package/coverage/lcov-report/src/api/controllers/public/mapping/rows.ts.html +2 -2
  42. package/coverage/lcov-report/src/api/controllers/public/mapping/tables.ts.html +2 -2
  43. package/coverage/lcov-report/src/api/controllers/public/mapping/users.ts.html +2 -2
  44. package/coverage/lcov-report/src/api/controllers/public/queries.ts.html +6 -6
  45. package/coverage/lcov-report/src/api/controllers/public/rows.ts.html +10 -10
  46. package/coverage/lcov-report/src/api/controllers/public/tables.ts.html +9 -9
  47. package/coverage/lcov-report/src/api/controllers/public/users.ts.html +11 -11
  48. package/coverage/lcov-report/src/api/controllers/public/utils.ts.html +6 -6
  49. package/coverage/lcov-report/src/api/controllers/query/import/index.html +1 -1
  50. package/coverage/lcov-report/src/api/controllers/query/import/index.ts.html +8 -8
  51. package/coverage/lcov-report/src/api/controllers/query/import/sources/base/index.html +1 -1
  52. package/coverage/lcov-report/src/api/controllers/query/import/sources/base/index.ts.html +8 -8
  53. package/coverage/lcov-report/src/api/controllers/query/import/sources/base/openapi.ts.html +5 -5
  54. package/coverage/lcov-report/src/api/controllers/query/import/sources/curl.ts.html +8 -8
  55. package/coverage/lcov-report/src/api/controllers/query/import/sources/index.html +1 -1
  56. package/coverage/lcov-report/src/api/controllers/query/import/sources/openapi2.ts.html +10 -10
  57. package/coverage/lcov-report/src/api/controllers/query/import/sources/openapi3.ts.html +14 -14
  58. package/coverage/lcov-report/src/api/controllers/query/index.html +19 -19
  59. package/coverage/lcov-report/src/api/controllers/query/index.ts.html +60 -60
  60. package/coverage/lcov-report/src/api/controllers/query/validation.ts.html +10 -10
  61. package/coverage/lcov-report/src/api/controllers/role.ts.html +8 -8
  62. package/coverage/lcov-report/src/api/controllers/routing.ts.html +6 -6
  63. package/coverage/lcov-report/src/api/controllers/row/ExternalRequest.ts.html +43 -25
  64. package/coverage/lcov-report/src/api/controllers/row/external.ts.html +20 -20
  65. package/coverage/lcov-report/src/api/controllers/row/index.html +13 -13
  66. package/coverage/lcov-report/src/api/controllers/row/index.ts.html +14 -14
  67. package/coverage/lcov-report/src/api/controllers/row/internal.ts.html +54 -51
  68. package/coverage/lcov-report/src/api/controllers/row/internalSearch.ts.html +9 -9
  69. package/coverage/lcov-report/src/api/controllers/row/staticFormula.ts.html +21 -12
  70. package/coverage/lcov-report/src/api/controllers/row/utils.ts.html +17 -14
  71. package/coverage/lcov-report/src/api/controllers/screen.ts.html +26 -26
  72. package/coverage/lcov-report/src/api/controllers/script.ts.html +18 -18
  73. package/coverage/lcov-report/src/api/controllers/static/index.html +11 -11
  74. package/coverage/lcov-report/src/api/controllers/static/index.ts.html +32 -44
  75. package/coverage/lcov-report/src/api/controllers/table/bulkFormula.ts.html +10 -10
  76. package/coverage/lcov-report/src/api/controllers/table/external.ts.html +14 -14
  77. package/coverage/lcov-report/src/api/controllers/table/index.html +19 -19
  78. package/coverage/lcov-report/src/api/controllers/table/index.ts.html +14 -14
  79. package/coverage/lcov-report/src/api/controllers/table/internal.ts.html +17 -17
  80. package/coverage/lcov-report/src/api/controllers/table/utils.ts.html +51 -51
  81. package/coverage/lcov-report/src/api/controllers/templates.ts.html +7 -7
  82. package/coverage/lcov-report/src/api/controllers/user.ts.html +119 -119
  83. package/coverage/lcov-report/src/api/controllers/view/exporters.ts.html +4 -4
  84. package/coverage/lcov-report/src/api/controllers/view/index.html +1 -1
  85. package/coverage/lcov-report/src/api/controllers/view/index.ts.html +47 -47
  86. package/coverage/lcov-report/src/api/controllers/view/utils.ts.html +22 -22
  87. package/coverage/lcov-report/src/api/controllers/view/viewBuilder.ts.html +33 -33
  88. package/coverage/lcov-report/src/api/controllers/webhook.ts.html +14 -14
  89. package/coverage/lcov-report/src/api/index.html +1 -1
  90. package/coverage/lcov-report/src/api/index.ts.html +33 -33
  91. package/coverage/lcov-report/src/api/routes/analytics.ts.html +7 -7
  92. package/coverage/lcov-report/src/api/routes/apikeys.ts.html +8 -8
  93. package/coverage/lcov-report/src/api/routes/application.ts.html +9 -9
  94. package/coverage/lcov-report/src/api/routes/auth.ts.html +6 -6
  95. package/coverage/lcov-report/src/api/routes/automation.ts.html +11 -11
  96. package/coverage/lcov-report/src/api/routes/backup.ts.html +8 -8
  97. package/coverage/lcov-report/src/api/routes/cloud.ts.html +8 -8
  98. package/coverage/lcov-report/src/api/routes/component.ts.html +8 -8
  99. package/coverage/lcov-report/src/api/routes/datasource.ts.html +9 -9
  100. package/coverage/lcov-report/src/api/routes/deploy.ts.html +8 -8
  101. package/coverage/lcov-report/src/api/routes/dev.ts.html +13 -13
  102. package/coverage/lcov-report/src/api/routes/index.html +1 -1
  103. package/coverage/lcov-report/src/api/routes/index.ts.html +40 -37
  104. package/coverage/lcov-report/src/api/routes/integration.ts.html +8 -8
  105. package/coverage/lcov-report/src/api/routes/layout.ts.html +8 -8
  106. package/coverage/lcov-report/src/api/routes/metadata.ts.html +9 -9
  107. package/coverage/lcov-report/src/api/routes/migrations.ts.html +7 -7
  108. package/coverage/lcov-report/src/api/routes/permission.ts.html +9 -9
  109. package/coverage/lcov-report/src/api/routes/plugin.ts.html +8 -8
  110. package/coverage/lcov-report/src/api/routes/public/applications.ts.html +12 -12
  111. package/coverage/lcov-report/src/api/routes/public/index.html +1 -1
  112. package/coverage/lcov-report/src/api/routes/public/index.ts.html +52 -52
  113. package/coverage/lcov-report/src/api/routes/public/middleware/index.html +1 -1
  114. package/coverage/lcov-report/src/api/routes/public/middleware/mapper.ts.html +10 -10
  115. package/coverage/lcov-report/src/api/routes/public/queries.ts.html +9 -9
  116. package/coverage/lcov-report/src/api/routes/public/rows.ts.html +12 -12
  117. package/coverage/lcov-report/src/api/routes/public/tables.ts.html +12 -12
  118. package/coverage/lcov-report/src/api/routes/public/tests/index.html +1 -1
  119. package/coverage/lcov-report/src/api/routes/public/tests/utils.ts.html +1 -1
  120. package/coverage/lcov-report/src/api/routes/public/users.ts.html +12 -12
  121. package/coverage/lcov-report/src/api/routes/public/utils/Endpoint.ts.html +19 -19
  122. package/coverage/lcov-report/src/api/routes/public/utils/index.html +1 -1
  123. package/coverage/lcov-report/src/api/routes/query.ts.html +11 -11
  124. package/coverage/lcov-report/src/api/routes/role.ts.html +9 -9
  125. package/coverage/lcov-report/src/api/routes/routing.ts.html +8 -8
  126. package/coverage/lcov-report/src/api/routes/row.ts.html +11 -11
  127. package/coverage/lcov-report/src/api/routes/screen.ts.html +9 -9
  128. package/coverage/lcov-report/src/api/routes/script.ts.html +1 -1
  129. package/coverage/lcov-report/src/api/routes/static.ts.html +14 -14
  130. package/coverage/lcov-report/src/api/routes/table.ts.html +11 -11
  131. package/coverage/lcov-report/src/api/routes/templates.ts.html +8 -8
  132. package/coverage/lcov-report/src/api/routes/tests/utilities/TestFunctions.ts.html +16 -16
  133. package/coverage/lcov-report/src/api/routes/tests/utilities/index.html +1 -1
  134. package/coverage/lcov-report/src/api/routes/tests/utilities/index.ts.html +22 -22
  135. package/coverage/lcov-report/src/api/routes/user.ts.html +9 -9
  136. package/coverage/lcov-report/src/api/routes/utils/index.html +1 -1
  137. package/coverage/lcov-report/src/api/routes/utils/validators.ts.html +42 -42
  138. package/coverage/lcov-report/src/api/routes/view.ts.html +10 -10
  139. package/coverage/lcov-report/src/api/routes/webhook.ts.html +10 -10
  140. package/coverage/lcov-report/src/app.ts.html +32 -32
  141. package/coverage/lcov-report/src/automations/actions.ts.html +25 -25
  142. package/coverage/lcov-report/src/automations/automationUtils.ts.html +91 -19
  143. package/coverage/lcov-report/src/automations/bullboard.ts.html +11 -11
  144. package/coverage/lcov-report/src/automations/index.html +19 -19
  145. package/coverage/lcov-report/src/automations/index.ts.html +13 -13
  146. package/coverage/lcov-report/src/automations/logging/index.html +1 -1
  147. package/coverage/lcov-report/src/automations/logging/index.ts.html +11 -11
  148. package/coverage/lcov-report/src/automations/steps/bash.ts.html +34 -34
  149. package/coverage/lcov-report/src/automations/steps/createRow.ts.html +7 -7
  150. package/coverage/lcov-report/src/automations/steps/delay.ts.html +5 -5
  151. package/coverage/lcov-report/src/automations/steps/deleteRow.ts.html +7 -7
  152. package/coverage/lcov-report/src/automations/steps/discord.ts.html +33 -33
  153. package/coverage/lcov-report/src/automations/steps/executeQuery.ts.html +35 -35
  154. package/coverage/lcov-report/src/automations/steps/executeScript.ts.html +31 -31
  155. package/coverage/lcov-report/src/automations/steps/filter.ts.html +6 -6
  156. package/coverage/lcov-report/src/automations/steps/index.html +83 -83
  157. package/coverage/lcov-report/src/automations/steps/integromat.ts.html +6 -6
  158. package/coverage/lcov-report/src/automations/steps/loop.ts.html +3 -3
  159. package/coverage/lcov-report/src/automations/steps/outgoingWebhook.ts.html +14 -14
  160. package/coverage/lcov-report/src/automations/steps/queryRows.ts.html +17 -17
  161. package/coverage/lcov-report/src/automations/steps/sendSmtpEmail.ts.html +28 -28
  162. package/coverage/lcov-report/src/automations/steps/serverLog.ts.html +18 -18
  163. package/coverage/lcov-report/src/automations/steps/slack.ts.html +6 -6
  164. package/coverage/lcov-report/src/automations/steps/updateRow.ts.html +7 -7
  165. package/coverage/lcov-report/src/automations/steps/utils.ts.html +16 -16
  166. package/coverage/lcov-report/src/automations/steps/zapier.ts.html +22 -22
  167. package/coverage/lcov-report/src/automations/tests/utilities/index.html +5 -5
  168. package/coverage/lcov-report/src/automations/tests/utilities/index.ts.html +26 -26
  169. package/coverage/lcov-report/src/automations/triggerInfo/app.ts.html +3 -3
  170. package/coverage/lcov-report/src/automations/triggerInfo/cron.ts.html +3 -3
  171. package/coverage/lcov-report/src/automations/triggerInfo/index.html +1 -1
  172. package/coverage/lcov-report/src/automations/triggerInfo/index.ts.html +8 -8
  173. package/coverage/lcov-report/src/automations/triggerInfo/rowDeleted.ts.html +3 -3
  174. package/coverage/lcov-report/src/automations/triggerInfo/rowSaved.ts.html +3 -3
  175. package/coverage/lcov-report/src/automations/triggerInfo/rowUpdated.ts.html +3 -3
  176. package/coverage/lcov-report/src/automations/triggerInfo/webhook.ts.html +3 -3
  177. package/coverage/lcov-report/src/automations/triggers.ts.html +21 -21
  178. package/coverage/lcov-report/src/automations/utils.ts.html +56 -56
  179. package/coverage/lcov-report/src/constants/index.html +1 -1
  180. package/coverage/lcov-report/src/constants/index.ts.html +92 -92
  181. package/coverage/lcov-report/src/constants/layouts.ts.html +4 -4
  182. package/coverage/lcov-report/src/constants/screens.ts.html +5 -5
  183. package/coverage/lcov-report/src/db/defaultData/datasource_bb_default.ts.html +23 -23
  184. package/coverage/lcov-report/src/db/defaultData/employeeImport.ts.html +2 -2
  185. package/coverage/lcov-report/src/db/defaultData/expensesImport.ts.html +2 -2
  186. package/coverage/lcov-report/src/db/defaultData/index.html +1 -1
  187. package/coverage/lcov-report/src/db/defaultData/inventoryImport.ts.html +2 -2
  188. package/coverage/lcov-report/src/db/defaultData/jobsImport.ts.html +2 -2
  189. package/coverage/lcov-report/src/db/dynamoClient.ts.html +16 -16
  190. package/coverage/lcov-report/src/db/inMemoryView.ts.html +5 -5
  191. package/coverage/lcov-report/src/db/index.html +19 -19
  192. package/coverage/lcov-report/src/db/index.ts.html +9 -9
  193. package/coverage/lcov-report/src/db/linkedRows/LinkController.ts.html +8 -8
  194. package/coverage/lcov-report/src/db/linkedRows/LinkDocument.ts.html +4 -4
  195. package/coverage/lcov-report/src/db/linkedRows/index.html +1 -1
  196. package/coverage/lcov-report/src/db/linkedRows/index.ts.html +15 -15
  197. package/coverage/lcov-report/src/db/linkedRows/linkUtils.ts.html +12 -12
  198. package/coverage/lcov-report/src/db/newid.ts.html +4 -4
  199. package/coverage/lcov-report/src/db/utils.ts.html +80 -80
  200. package/coverage/lcov-report/src/definitions/automations.ts.html +4 -4
  201. package/coverage/lcov-report/src/definitions/datasource.ts.html +4 -4
  202. package/coverage/lcov-report/src/definitions/index.html +1 -1
  203. package/coverage/lcov-report/src/environment.ts.html +43 -31
  204. package/coverage/lcov-report/src/events/AutomationEmitter.ts.html +6 -6
  205. package/coverage/lcov-report/src/events/BudibaseEmitter.ts.html +5 -5
  206. package/coverage/lcov-report/src/events/index.html +1 -1
  207. package/coverage/lcov-report/src/events/index.ts.html +4 -4
  208. package/coverage/lcov-report/src/events/utils.ts.html +3 -3
  209. package/coverage/lcov-report/src/index.html +26 -26
  210. package/coverage/lcov-report/src/index.ts.html +1 -1
  211. package/coverage/lcov-report/src/integrations/airtable.ts.html +5 -5
  212. package/coverage/lcov-report/src/integrations/arangodb.ts.html +5 -5
  213. package/coverage/lcov-report/src/integrations/base/index.html +1 -1
  214. package/coverage/lcov-report/src/integrations/base/query.ts.html +3 -3
  215. package/coverage/lcov-report/src/integrations/base/sql.ts.html +14 -14
  216. package/coverage/lcov-report/src/integrations/base/sqlTable.ts.html +8 -8
  217. package/coverage/lcov-report/src/integrations/base/utils.ts.html +3 -3
  218. package/coverage/lcov-report/src/integrations/couchdb.ts.html +5 -5
  219. package/coverage/lcov-report/src/integrations/dynamodb.ts.html +6 -6
  220. package/coverage/lcov-report/src/integrations/elasticsearch.ts.html +5 -5
  221. package/coverage/lcov-report/src/integrations/firebase.ts.html +5 -5
  222. package/coverage/lcov-report/src/integrations/googlesheets.ts.html +11 -11
  223. package/coverage/lcov-report/src/integrations/index.html +5 -5
  224. package/coverage/lcov-report/src/integrations/index.ts.html +35 -47
  225. package/coverage/lcov-report/src/integrations/microsoftSqlServer.ts.html +8 -8
  226. package/coverage/lcov-report/src/integrations/mongodb.ts.html +5 -5
  227. package/coverage/lcov-report/src/integrations/mysql.ts.html +10 -10
  228. package/coverage/lcov-report/src/integrations/oracle.ts.html +13 -13
  229. package/coverage/lcov-report/src/integrations/postgres.ts.html +42 -42
  230. package/coverage/lcov-report/src/integrations/queries/index.html +1 -1
  231. package/coverage/lcov-report/src/integrations/queries/sql.ts.html +13 -13
  232. package/coverage/lcov-report/src/integrations/redis.ts.html +5 -5
  233. package/coverage/lcov-report/src/integrations/rest.ts.html +16 -16
  234. package/coverage/lcov-report/src/integrations/s3.ts.html +6 -6
  235. package/coverage/lcov-report/src/integrations/snowflake.ts.html +5 -5
  236. package/coverage/lcov-report/src/integrations/tests/TestConfiguration.js.html +1 -1
  237. package/coverage/lcov-report/src/integrations/tests/index.html +1 -1
  238. package/coverage/lcov-report/src/integrations/utils.ts.html +36 -36
  239. package/coverage/lcov-report/src/middleware/appInfo.ts.html +7 -7
  240. package/coverage/lcov-report/src/middleware/authorized.ts.html +28 -28
  241. package/coverage/lcov-report/src/middleware/builder.ts.html +17 -17
  242. package/coverage/lcov-report/src/middleware/currentapp.ts.html +39 -39
  243. package/coverage/lcov-report/src/middleware/index.html +1 -1
  244. package/coverage/lcov-report/src/middleware/joi-validator.ts.html +1 -1
  245. package/coverage/lcov-report/src/middleware/publicApi.ts.html +4 -4
  246. package/coverage/lcov-report/src/middleware/resourceId.ts.html +22 -22
  247. package/coverage/lcov-report/src/middleware/selfhost.ts.html +1 -1
  248. package/coverage/lcov-report/src/middleware/utils.ts.html +4 -4
  249. package/coverage/lcov-report/src/migrations/functions/appUrls.ts.html +4 -4
  250. package/coverage/lcov-report/src/migrations/functions/backfill/app/automations.ts.html +5 -5
  251. package/coverage/lcov-report/src/migrations/functions/backfill/app/datasources.ts.html +5 -5
  252. package/coverage/lcov-report/src/migrations/functions/backfill/app/index.html +1 -1
  253. package/coverage/lcov-report/src/migrations/functions/backfill/app/layouts.ts.html +5 -5
  254. package/coverage/lcov-report/src/migrations/functions/backfill/app/queries.ts.html +7 -7
  255. package/coverage/lcov-report/src/migrations/functions/backfill/app/roles.ts.html +5 -5
  256. package/coverage/lcov-report/src/migrations/functions/backfill/app/screens.ts.html +5 -5
  257. package/coverage/lcov-report/src/migrations/functions/backfill/app/tables.ts.html +4 -4
  258. package/coverage/lcov-report/src/migrations/functions/backfill/app.ts.html +19 -19
  259. package/coverage/lcov-report/src/migrations/functions/backfill/global/configs.ts.html +13 -10
  260. package/coverage/lcov-report/src/migrations/functions/backfill/global/index.html +1 -1
  261. package/coverage/lcov-report/src/migrations/functions/backfill/global/quotas.ts.html +7 -7
  262. package/coverage/lcov-report/src/migrations/functions/backfill/global/users.ts.html +6 -6
  263. package/coverage/lcov-report/src/migrations/functions/backfill/global.ts.html +15 -15
  264. package/coverage/lcov-report/src/migrations/functions/backfill/index.html +1 -1
  265. package/coverage/lcov-report/src/migrations/functions/backfill/index.ts.html +5 -5
  266. package/coverage/lcov-report/src/migrations/functions/backfill/installation.ts.html +8 -8
  267. package/coverage/lcov-report/src/migrations/functions/index.html +1 -1
  268. package/coverage/lcov-report/src/migrations/functions/syncQuotas.ts.html +6 -6
  269. package/coverage/lcov-report/src/migrations/functions/tableSettings.ts.html +6 -6
  270. package/coverage/lcov-report/src/migrations/functions/usageQuotas/index.html +1 -1
  271. package/coverage/lcov-report/src/migrations/functions/usageQuotas/index.ts.html +2 -2
  272. package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncApps.ts.html +5 -5
  273. package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncPlugins.ts.html +4 -4
  274. package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncRows.ts.html +6 -6
  275. package/coverage/lcov-report/src/migrations/functions/userEmailViewCasing.ts.html +3 -3
  276. package/coverage/lcov-report/src/migrations/index.html +1 -1
  277. package/coverage/lcov-report/src/migrations/index.ts.html +32 -32
  278. package/coverage/lcov-report/src/migrations/tests/helpers.ts.html +1 -1
  279. package/coverage/lcov-report/src/migrations/tests/index.html +1 -1
  280. package/coverage/lcov-report/src/migrations/tests/structures.ts.html +1 -1
  281. package/coverage/lcov-report/src/sdk/app/applications/index.html +15 -15
  282. package/coverage/lcov-report/src/sdk/app/applications/index.ts.html +4 -4
  283. package/coverage/lcov-report/src/sdk/app/applications/sync.ts.html +34 -34
  284. package/coverage/lcov-report/src/sdk/app/applications/utils.ts.html +9 -9
  285. package/coverage/lcov-report/src/sdk/app/automations/index.html +1 -1
  286. package/coverage/lcov-report/src/sdk/app/automations/index.ts.html +3 -3
  287. package/coverage/lcov-report/src/sdk/app/automations/webhook.ts.html +6 -6
  288. package/coverage/lcov-report/src/sdk/app/backups/constants.ts.html +3 -3
  289. package/coverage/lcov-report/src/sdk/app/backups/exports.ts.html +17 -17
  290. package/coverage/lcov-report/src/sdk/app/backups/imports.ts.html +42 -54
  291. package/coverage/lcov-report/src/sdk/app/backups/index.html +30 -30
  292. package/coverage/lcov-report/src/sdk/app/backups/index.ts.html +5 -5
  293. package/coverage/lcov-report/src/sdk/app/backups/statistics.ts.html +73 -73
  294. package/coverage/lcov-report/src/sdk/app/tables/index.html +1 -1
  295. package/coverage/lcov-report/src/sdk/app/tables/index.ts.html +5 -5
  296. package/coverage/lcov-report/src/sdk/index.html +1 -1
  297. package/coverage/lcov-report/src/sdk/index.ts.html +8 -8
  298. package/coverage/lcov-report/src/sdk/users/index.html +5 -5
  299. package/coverage/lcov-report/src/sdk/users/index.ts.html +3 -3
  300. package/coverage/lcov-report/src/sdk/users/utils.ts.html +34 -34
  301. package/coverage/lcov-report/src/startup.ts.html +42 -42
  302. package/coverage/lcov-report/src/tests/utilities/TestConfiguration.ts.html +146 -119
  303. package/coverage/lcov-report/src/tests/utilities/controllers.ts.html +15 -15
  304. package/coverage/lcov-report/src/tests/utilities/index.html +10 -10
  305. package/coverage/lcov-report/src/tests/utilities/index.ts.html +1 -1
  306. package/coverage/lcov-report/src/tests/utilities/structures.ts.html +30 -30
  307. package/coverage/lcov-report/src/threads/automation.ts.html +32 -101
  308. package/coverage/lcov-report/src/threads/index.html +19 -19
  309. package/coverage/lcov-report/src/threads/index.ts.html +25 -25
  310. package/coverage/lcov-report/src/threads/query.ts.html +71 -71
  311. package/coverage/lcov-report/src/threads/utils.ts.html +18 -18
  312. package/coverage/lcov-report/src/utilities/budibaseDir.ts.html +3 -3
  313. package/coverage/lcov-report/src/utilities/centralPath.ts.html +4 -4
  314. package/coverage/lcov-report/src/utilities/csvParser.ts.html +8 -8
  315. package/coverage/lcov-report/src/utilities/fileSystem/app.ts.html +343 -0
  316. package/coverage/lcov-report/src/utilities/fileSystem/clientLibrary.ts.html +12 -12
  317. package/coverage/lcov-report/src/utilities/fileSystem/filesystem.ts.html +595 -0
  318. package/coverage/lcov-report/src/utilities/fileSystem/index.html +79 -19
  319. package/coverage/lcov-report/src/utilities/fileSystem/index.ts.html +20 -1049
  320. package/coverage/lcov-report/src/utilities/fileSystem/plugin.ts.html +280 -0
  321. package/coverage/lcov-report/src/utilities/fileSystem/processor.ts.html +1 -1
  322. package/coverage/lcov-report/src/utilities/fileSystem/template.ts.html +193 -0
  323. package/coverage/lcov-report/src/utilities/global.ts.html +42 -42
  324. package/coverage/lcov-report/src/utilities/index.html +48 -63
  325. package/coverage/lcov-report/src/utilities/index.ts.html +36 -168
  326. package/coverage/lcov-report/src/utilities/redis.ts.html +32 -32
  327. package/coverage/lcov-report/src/utilities/routing/index.html +1 -1
  328. package/coverage/lcov-report/src/utilities/routing/index.ts.html +5 -5
  329. package/coverage/lcov-report/src/utilities/rowProcessor/index.html +28 -28
  330. package/coverage/lcov-report/src/utilities/rowProcessor/index.ts.html +60 -33
  331. package/coverage/lcov-report/src/utilities/rowProcessor/map.ts.html +3 -3
  332. package/coverage/lcov-report/src/utilities/rowProcessor/utils.ts.html +38 -38
  333. package/coverage/lcov-report/src/utilities/scriptRunner.ts.html +32 -32
  334. package/coverage/lcov-report/src/utilities/security.ts.html +6 -6
  335. package/coverage/lcov-report/src/utilities/statusCodes.ts.html +1 -1
  336. package/coverage/lcov-report/src/utilities/usageQuota/index.html +1 -1
  337. package/coverage/lcov-report/src/utilities/usageQuota/rows.ts.html +35 -35
  338. package/coverage/lcov-report/src/utilities/usageQuota/usageQuoteReset.ts.html +1 -1
  339. package/coverage/lcov-report/src/utilities/users.ts.html +6 -6
  340. package/coverage/lcov-report/src/utilities/workerRequests.ts.html +56 -56
  341. package/coverage/lcov-report/src/watch.ts.html +9 -9
  342. package/coverage/lcov-report/src/websocket.ts.html +15 -15
  343. package/coverage/lcov.info +6978 -6941
  344. package/dist/api/controllers/application.js +9 -10
  345. package/dist/api/controllers/cloud.js +6 -2
  346. package/dist/api/controllers/plugin/index.js +6 -6
  347. package/dist/api/controllers/row/ExternalRequest.js +14 -8
  348. package/dist/api/controllers/row/internal.js +11 -11
  349. package/dist/api/controllers/row/staticFormula.js +1 -1
  350. package/dist/api/controllers/static/index.js +8 -11
  351. package/dist/automations/automationUtils.js +26 -1
  352. package/dist/environment.js +6 -2
  353. package/dist/integrations/index.js +1 -2
  354. package/dist/migrations/functions/backfill/global/configs.js +4 -4
  355. package/dist/package.json +9 -7
  356. package/dist/sdk/app/backups/imports.js +3 -7
  357. package/dist/threads/automation.js +2 -26
  358. package/dist/tsconfig.build.tsbuildinfo +1 -1
  359. package/dist/utilities/fileSystem/app.js +97 -0
  360. package/dist/utilities/fileSystem/clientLibrary.js +3 -3
  361. package/dist/utilities/fileSystem/filesystem.js +182 -0
  362. package/dist/utilities/fileSystem/index.js +18 -342
  363. package/dist/utilities/fileSystem/plugin.js +63 -0
  364. package/dist/utilities/fileSystem/template.js +44 -0
  365. package/dist/utilities/index.js +1 -44
  366. package/dist/utilities/rowProcessor/index.js +12 -4
  367. package/package.json +10 -8
  368. package/src/api/controllers/application.ts +16 -12
  369. package/src/api/controllers/auth.ts +2 -2
  370. package/src/api/controllers/cloud.ts +10 -6
  371. package/src/api/controllers/plugin/index.ts +14 -9
  372. package/src/api/controllers/row/ExternalRequest.ts +14 -8
  373. package/src/api/controllers/row/internal.ts +23 -22
  374. package/src/api/controllers/row/staticFormula.ts +5 -2
  375. package/src/api/controllers/row/utils.ts +2 -1
  376. package/src/api/controllers/static/index.ts +6 -10
  377. package/src/api/routes/index.ts +4 -3
  378. package/src/api/routes/tests/__snapshots__/{datasource.spec.js.snap → datasource.spec.ts.snap} +0 -0
  379. package/src/api/routes/tests/{application.spec.js → application.spec.ts} +40 -7
  380. package/src/api/routes/tests/{backup.spec.js → backup.spec.ts} +17 -6
  381. package/src/api/routes/tests/cloud.spec.ts +66 -0
  382. package/src/api/routes/tests/data/budibase-component-1.0.1.tgz +0 -0
  383. package/src/api/routes/tests/data/comment-box-1.0.2.tar.gz +0 -0
  384. package/src/api/routes/tests/data/export-test.tar.gz +0 -0
  385. package/src/api/routes/tests/{datasource.spec.js → datasource.spec.ts} +23 -15
  386. package/src/api/routes/tests/plugin.spec.ts +179 -0
  387. package/src/api/routes/tests/routing.spec.js +0 -1
  388. package/src/api/routes/tests/row.spec.js +4 -2
  389. package/src/api/routes/tests/static.spec.js +2 -17
  390. package/src/api/routes/tests/table.spec.js +8 -2
  391. package/src/api/routes/tests/user.spec.js +86 -0
  392. package/src/api/routes/tests/utilities/index.ts +2 -2
  393. package/src/automations/automationUtils.ts +24 -0
  394. package/src/automations/tests/bash.spec.js +34 -0
  395. package/src/automations/tests/discord.spec.js +27 -0
  396. package/src/automations/tests/executeQuery.spec.js +49 -0
  397. package/src/automations/tests/executeScript.spec.js +48 -0
  398. package/src/automations/tests/sendSmtpEmail.spec.js +71 -0
  399. package/src/automations/tests/serverLog.spec.js +22 -0
  400. package/src/automations/tests/utilities/index.ts +2 -2
  401. package/src/automations/tests/zapier.spec.js +27 -0
  402. package/src/automations/unitTests/automationUtils.spec.ts +65 -0
  403. package/src/environment.ts +6 -2
  404. package/src/integrations/index.ts +1 -5
  405. package/src/migrations/functions/backfill/global/configs.ts +5 -4
  406. package/src/sdk/app/backups/imports.ts +3 -7
  407. package/src/tests/jestSetup.ts +4 -1
  408. package/src/tests/utilities/TestConfiguration.ts +9 -0
  409. package/src/threads/automation.ts +2 -25
  410. package/src/utilities/fileSystem/app.ts +86 -0
  411. package/src/utilities/fileSystem/clientLibrary.ts +1 -1
  412. package/src/utilities/fileSystem/filesystem.ts +170 -0
  413. package/src/utilities/fileSystem/index.ts +5 -348
  414. package/src/utilities/fileSystem/plugin.ts +65 -0
  415. package/src/utilities/fileSystem/template.ts +36 -0
  416. package/src/utilities/index.ts +1 -45
  417. package/src/utilities/rowProcessor/index.ts +17 -8
  418. package/src/utilities/rowProcessor/tests/utils.spec.ts +57 -0
  419. package/tsconfig.build.json +2 -0
  420. package/coverage/lcov-report/src/utilities/plugins.ts.html +0 -151
  421. package/dist/api/routes/tests/utilities/TestFunctions.js +0 -167
  422. package/dist/api/routes/tests/utilities/index.js +0 -131
  423. package/dist/automations/tests/utilities/index.js +0 -81
  424. package/dist/tests/utilities/TestConfiguration.js +0 -562
  425. package/dist/tests/utilities/controllers.js +0 -40
  426. package/dist/tests/utilities/structures.js +0 -168
  427. package/dist/utilities/plugins.js +0 -26
  428. package/src/automations/unitTests/automationUtils.spec.js +0 -17
  429. package/src/utilities/plugins.ts +0 -22
@@ -13,7 +13,7 @@ import {
13
13
  cleanupAttachments,
14
14
  } from "../../../utilities/rowProcessor"
15
15
  import { FieldTypes } from "../../../constants"
16
- import { validate as rowValidate, findRow } from "./utils"
16
+ import * as utils from "./utils"
17
17
  import { fullSearch, paginatedSearch } from "./internalSearch"
18
18
  import { getGlobalUsersFromMetadata } from "../../../utilities/global"
19
19
  import * as inMemoryViews from "../../../db/inMemoryView"
@@ -30,7 +30,8 @@ import { finaliseRow, updateRelatedFormula } from "./staticFormula"
30
30
  import * as exporters from "../view/exporters"
31
31
  import { apiFileReturn } from "../../../utilities/fileSystem"
32
32
  import {
33
- BBContext,
33
+ Ctx,
34
+ UserCtx,
34
35
  Database,
35
36
  LinkDocumentValue,
36
37
  Row,
@@ -69,7 +70,7 @@ async function getView(db: Database, viewName: string) {
69
70
  return viewInfo
70
71
  }
71
72
 
72
- async function getRawTableData(ctx: BBContext, db: Database, tableId: string) {
73
+ async function getRawTableData(ctx: Ctx, db: Database, tableId: string) {
73
74
  let rows
74
75
  if (tableId === InternalTables.USER_METADATA) {
75
76
  await userController.fetchMetadata(ctx)
@@ -85,7 +86,7 @@ async function getRawTableData(ctx: BBContext, db: Database, tableId: string) {
85
86
  return rows as Row[]
86
87
  }
87
88
 
88
- export async function patch(ctx: BBContext) {
89
+ export async function patch(ctx: UserCtx) {
89
90
  const db = context.getAppDB()
90
91
  const inputs = ctx.request.body
91
92
  const tableId = inputs.tableId
@@ -95,7 +96,7 @@ export async function patch(ctx: BBContext) {
95
96
  let dbTable = await db.get(tableId)
96
97
  oldRow = await outputProcessing(
97
98
  dbTable,
98
- await findRow(ctx, tableId, inputs._id)
99
+ await utils.findRow(ctx, tableId, inputs._id)
99
100
  )
100
101
  } catch (err) {
101
102
  if (isUserTable) {
@@ -117,8 +118,8 @@ export async function patch(ctx: BBContext) {
117
118
  }
118
119
 
119
120
  // this returns the table and row incase they have been updated
120
- let { table, row } = inputProcessing(ctx.user!, dbTable, combinedRow)
121
- const validateResult = await rowValidate({
121
+ let { table, row } = inputProcessing(ctx.user, dbTable, combinedRow)
122
+ const validateResult = await utils.validate({
122
123
  row,
123
124
  table,
124
125
  })
@@ -150,7 +151,7 @@ export async function patch(ctx: BBContext) {
150
151
  })
151
152
  }
152
153
 
153
- export async function save(ctx: BBContext) {
154
+ export async function save(ctx: UserCtx) {
154
155
  const db = context.getAppDB()
155
156
  let inputs = ctx.request.body
156
157
  inputs.tableId = ctx.params.tableId
@@ -161,8 +162,8 @@ export async function save(ctx: BBContext) {
161
162
 
162
163
  // this returns the table and row incase they have been updated
163
164
  const dbTable = await db.get(inputs.tableId)
164
- let { table, row } = inputProcessing(ctx.user!, dbTable, inputs)
165
- const validateResult = await rowValidate({
165
+ let { table, row } = inputProcessing(ctx.user, dbTable, inputs)
166
+ const validateResult = await utils.validate({
166
167
  row,
167
168
  table,
168
169
  })
@@ -185,7 +186,7 @@ export async function save(ctx: BBContext) {
185
186
  })
186
187
  }
187
188
 
188
- export async function fetchView(ctx: BBContext) {
189
+ export async function fetchView(ctx: Ctx) {
189
190
  const viewName = ctx.params.viewName
190
191
 
191
192
  // if this is a table view being looked for just transfer to that
@@ -252,7 +253,7 @@ export async function fetchView(ctx: BBContext) {
252
253
  return rows
253
254
  }
254
255
 
255
- export async function fetch(ctx: BBContext) {
256
+ export async function fetch(ctx: Ctx) {
256
257
  const db = context.getAppDB()
257
258
 
258
259
  const tableId = ctx.params.tableId
@@ -261,15 +262,15 @@ export async function fetch(ctx: BBContext) {
261
262
  return outputProcessing(table, rows)
262
263
  }
263
264
 
264
- export async function find(ctx: BBContext) {
265
+ export async function find(ctx: Ctx) {
265
266
  const db = dbCore.getDB(ctx.appId)
266
267
  const table = await db.get(ctx.params.tableId)
267
- let row = await findRow(ctx, ctx.params.tableId, ctx.params.rowId)
268
+ let row = await utils.findRow(ctx, ctx.params.tableId, ctx.params.rowId)
268
269
  row = await outputProcessing(table, row)
269
270
  return row
270
271
  }
271
272
 
272
- export async function destroy(ctx: BBContext) {
273
+ export async function destroy(ctx: Ctx) {
273
274
  const db = context.getAppDB()
274
275
  const { _id } = ctx.request.body
275
276
  let row = await db.get(_id)
@@ -305,7 +306,7 @@ export async function destroy(ctx: BBContext) {
305
306
  return { response, row }
306
307
  }
307
308
 
308
- export async function bulkDestroy(ctx: BBContext) {
309
+ export async function bulkDestroy(ctx: Ctx) {
309
310
  const db = context.getAppDB()
310
311
  const tableId = ctx.params.tableId
311
312
  const table = await db.get(tableId)
@@ -344,7 +345,7 @@ export async function bulkDestroy(ctx: BBContext) {
344
345
  return { response: { ok: true }, rows: processedRows }
345
346
  }
346
347
 
347
- export async function search(ctx: BBContext) {
348
+ export async function search(ctx: Ctx) {
348
349
  // Fetch the whole table when running in cypress, as search doesn't work
349
350
  if (!env.COUCH_DB_URL && env.isCypress()) {
350
351
  return { rows: await fetch(ctx) }
@@ -376,14 +377,14 @@ export async function search(ctx: BBContext) {
376
377
  return response
377
378
  }
378
379
 
379
- export async function validate(ctx: BBContext) {
380
- return rowValidate({
380
+ export async function validate(ctx: Ctx) {
381
+ return utils.validate({
381
382
  tableId: ctx.params.tableId,
382
383
  row: ctx.request.body,
383
384
  })
384
385
  }
385
386
 
386
- export async function exportRows(ctx: BBContext) {
387
+ export async function exportRows(ctx: Ctx) {
387
388
  const db = context.getAppDB()
388
389
  const table = await db.get(ctx.params.tableId)
389
390
  const rowIds = ctx.request.body.rows
@@ -421,14 +422,14 @@ export async function exportRows(ctx: BBContext) {
421
422
  return apiFileReturn(exporter(headers, rows))
422
423
  }
423
424
 
424
- export async function fetchEnrichedRow(ctx: BBContext) {
425
+ export async function fetchEnrichedRow(ctx: Ctx) {
425
426
  const db = context.getAppDB()
426
427
  const tableId = ctx.params.tableId
427
428
  const rowId = ctx.params.rowId
428
429
  // need table to work out where links go in row
429
430
  let [table, row] = await Promise.all([
430
431
  db.get(tableId),
431
- findRow(ctx, tableId, rowId),
432
+ utils.findRow(ctx, tableId, rowId),
432
433
  ])
433
434
  // get the link docs
434
435
  const linkVals = (await linkRows.getLinkDocuments({
@@ -16,7 +16,10 @@ const { cloneDeep } = require("lodash/fp")
16
16
  * updated.
17
17
  * NOTE: this will only for affect static formulas.
18
18
  */
19
- export async function updateRelatedFormula(table: Table, enrichedRows: Row[]) {
19
+ export async function updateRelatedFormula(
20
+ table: Table,
21
+ enrichedRows: Row[] | Row
22
+ ) {
20
23
  const db = context.getAppDB()
21
24
  // no formula to update, we're done
22
25
  if (!table.relatedFormula) {
@@ -155,7 +158,7 @@ export async function finaliseRow(
155
158
  enrichedRow = await processFormulas(table, enrichedRow, { dynamic: false })
156
159
  // this updates the related formulas in other rows based on the relations to this row
157
160
  if (updateFormula) {
158
- await exports.updateRelatedFormula(table, enrichedRow)
161
+ await updateRelatedFormula(table, enrichedRow)
159
162
  }
160
163
  return { row: enrichedRow, table }
161
164
  }
@@ -7,6 +7,7 @@ import { BBContext, Row, Table } from "@budibase/types"
7
7
  export { removeKeyNumbering } from "../../../integrations/base/utils"
8
8
  const validateJs = require("validate.js")
9
9
  const { cloneDeep } = require("lodash/fp")
10
+ import { Ctx } from "@budibase/types"
10
11
 
11
12
  validateJs.extend(validateJs.validators.datetime, {
12
13
  parse: function (value: string) {
@@ -25,7 +26,7 @@ export async function getDatasourceAndQuery(json: any) {
25
26
  return makeExternalQuery(datasource, json)
26
27
  }
27
28
 
28
- export async function findRow(ctx: BBContext, tableId: string, rowId: string) {
29
+ export async function findRow(ctx: Ctx, tableId: string, rowId: string) {
29
30
  const db = context.getAppDB()
30
31
  let row
31
32
  // TODO remove special user case in future
@@ -1,11 +1,9 @@
1
- import { enrichPluginURLs } from "../../../utilities/plugins"
2
-
3
1
  require("svelte/register")
4
2
 
5
3
  const send = require("koa-send")
6
4
  const { resolve, join } = require("../../../utilities/centralPath")
7
5
  const uuid = require("uuid")
8
- const { ObjectStoreBuckets } = require("../../../constants")
6
+ import { ObjectStoreBuckets } from "../../../constants"
9
7
  const { processString } = require("@budibase/string-templates")
10
8
  const {
11
9
  loadHandlebarsFile,
@@ -13,8 +11,6 @@ const {
13
11
  TOP_LEVEL_PATH,
14
12
  } = require("../../../utilities/fileSystem")
15
13
  const env = require("../../../environment")
16
- const { clientLibraryPath } = require("../../../utilities")
17
- const { attachmentsRelativeURL } = require("../../../utilities")
18
14
  const { DocumentType } = require("../../../db/utils")
19
15
  const { context, objectStore, utils } = require("@budibase/backend-core")
20
16
  const AWS = require("aws-sdk")
@@ -33,7 +29,7 @@ async function prepareUpload({ s3Key, bucket, metadata, file }: any) {
33
29
  return {
34
30
  size: file.size,
35
31
  name: file.name,
36
- url: attachmentsRelativeURL(response.Key),
32
+ url: objectStore.getAppFileUrl(s3Key),
37
33
  extension: [...file.name.split(".")].pop(),
38
34
  key: response.Key,
39
35
  }
@@ -85,7 +81,7 @@ export const uploadFile = async function (ctx: any) {
85
81
 
86
82
  return prepareUpload({
87
83
  file,
88
- s3Key: `${ctx.appId}/attachments/${processedFileName}`,
84
+ s3Key: `${context.getProdAppId()}/attachments/${processedFileName}`,
89
85
  bucket: ObjectStoreBuckets.APPS,
90
86
  })
91
87
  })
@@ -107,14 +103,14 @@ export const serveApp = async function (ctx: any) {
107
103
 
108
104
  if (!env.isJest()) {
109
105
  const App = require("./templates/BudibaseApp.svelte").default
110
- const plugins = enrichPluginURLs(appInfo.usedPlugins)
106
+ const plugins = objectStore.enrichPluginURLs(appInfo.usedPlugins)
111
107
  const { head, html, css } = App.render({
112
108
  metaImage:
113
109
  "https://res.cloudinary.com/daog6scxm/image/upload/v1666109324/meta-images/budibase-meta-image_uukc1m.png",
114
110
  title: appInfo.name,
115
111
  production: env.isProd(),
116
112
  appId,
117
- clientLibPath: clientLibraryPath(appId, appInfo.version, ctx),
113
+ clientLibPath: objectStore.clientLibraryUrl(appId, appInfo.version),
118
114
  usedPlugins: plugins,
119
115
  })
120
116
 
@@ -139,7 +135,7 @@ export const serveBuilderPreview = async function (ctx: any) {
139
135
  let appId = context.getAppId()
140
136
  const previewHbs = loadHandlebarsFile(`${__dirname}/templates/preview.hbs`)
141
137
  ctx.body = await processString(previewHbs, {
142
- clientLibPath: clientLibraryPath(appId, appInfo.version, ctx),
138
+ clientLibPath: objectStore.clientLibraryUrl(appId, appInfo.version),
143
139
  })
144
140
  } else {
145
141
  // just return the app info for jest to assert on
@@ -26,13 +26,14 @@ import cloudRoutes from "./cloud"
26
26
  import migrationRoutes from "./migrations"
27
27
  import pluginRoutes from "./plugin"
28
28
  import Router from "@koa/router"
29
- import { api } from "@budibase/pro"
29
+ import { api as pro } from "@budibase/pro"
30
30
 
31
31
  export { default as staticRoutes } from "./static"
32
32
  export { default as publicRoutes } from "./public"
33
33
 
34
- const appBackupRoutes = api.appBackups
35
- const scheduleRoutes = api.schedules
34
+ const appBackupRoutes = pro.appBackups
35
+ const scheduleRoutes = pro.schedules
36
+
36
37
  export const mainRoutes: Router[] = [
37
38
  appBackupRoutes,
38
39
  backupRoutes,
@@ -12,13 +12,11 @@ jest.mock("../../../utilities/redis", () => ({
12
12
  shutdown: jest.fn(),
13
13
  }))
14
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")
15
+ import { clearAllApps, checkBuilderEndpoint } from "./utilities/TestFunctions"
16
+ import * as setup from "./utilities"
17
+ import { AppStatus } from "../../../db/utils"
18
+ import { events } from "@budibase/backend-core"
19
+ import env from "../../../environment"
22
20
 
23
21
  describe("/applications", () => {
24
22
  let request = setup.getRequest()
@@ -234,4 +232,39 @@ describe("/applications", () => {
234
232
  expect(getRes.body.application.updatedAt).toBeDefined()
235
233
  })
236
234
  })
235
+
236
+ describe("sync", () => {
237
+ it("app should sync correctly", async () => {
238
+ const res = await request
239
+ .post(`/api/applications/${config.getAppId()}/sync`)
240
+ .set(config.defaultHeaders())
241
+ .expect("Content-Type", /json/)
242
+ .expect(200)
243
+ expect(res.body.message).toEqual("App sync completed successfully.")
244
+ })
245
+
246
+ it("app should not sync if production", async () => {
247
+ const res = await request
248
+ .post(`/api/applications/app_123456/sync`)
249
+ .set(config.defaultHeaders())
250
+ .expect("Content-Type", /json/)
251
+ .expect(400)
252
+ expect(res.body.message).toEqual(
253
+ "This action cannot be performed for production apps"
254
+ )
255
+ })
256
+
257
+ it("app should not sync if sync is disabled", async () => {
258
+ env._set("DISABLE_AUTO_PROD_APP_SYNC", true)
259
+ const res = await request
260
+ .post(`/api/applications/${config.getAppId()}/sync`)
261
+ .set(config.defaultHeaders())
262
+ .expect("Content-Type", /json/)
263
+ .expect(200)
264
+ expect(res.body.message).toEqual(
265
+ "App sync disabled. You can reenable with the DISABLE_AUTO_PROD_APP_SYNC environment variable."
266
+ )
267
+ env._set("DISABLE_AUTO_PROD_APP_SYNC", false)
268
+ })
269
+ })
237
270
  })
@@ -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,66 @@
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
+ .delete(
27
+ `/api/applications/${dbCore.getProdAppID(
28
+ config.getAppId()
29
+ )}?unpublish=true`
30
+ )
31
+ .set(config.defaultHeaders())
32
+ .expect("Content-Type", /json/)
33
+ .expect(200)
34
+ await request
35
+ .delete(`/api/applications/${config.getAppId()}`)
36
+ .set(config.defaultHeaders())
37
+ .expect("Content-Type", /json/)
38
+ .expect(200)
39
+
40
+ // get a count of apps before the import
41
+ const preImportApps = await request
42
+ .get(`/api/applications?status=${AppStatus.ALL}`)
43
+ .set(config.defaultHeaders())
44
+ .expect("Content-Type", /json/)
45
+ .expect(200)
46
+
47
+ // Perform the import
48
+ const res = await request
49
+ .post(`/api/cloud/import`)
50
+ .attach("importFile", "src/api/routes/tests/data/export-test.tar.gz")
51
+ .set(config.defaultHeaders())
52
+ .expect(200)
53
+ expect(res.body.message).toEqual("Apps successfully imported.")
54
+
55
+ // get a count of apps after the import
56
+ const postImportApps = await request
57
+ .get(`/api/applications?status=${AppStatus.ALL}`)
58
+ .set(config.defaultHeaders())
59
+ .expect("Content-Type", /json/)
60
+ .expect(200)
61
+
62
+ // There are two apps in the file that was imported so check for this
63
+ expect(postImportApps.body.length).toEqual(2)
64
+ })
65
+ })
66
+ })
@@ -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
  })