@budibase/server 2.2.25 → 2.2.27-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 (657) hide show
  1. package/Dockerfile +1 -1
  2. package/__mocks__/aws-sdk.ts +19 -0
  3. package/__mocks__/node-fetch.ts +80 -0
  4. package/builder/assets/{bb-emblem.4e4717da.svg → bb-emblem.05f7ae7a.svg} +1 -1
  5. package/builder/assets/bg.29e85dd5.png +0 -0
  6. package/builder/assets/bulgaria.bd68393d.png +0 -0
  7. package/builder/assets/covanta.72c46c1e.png +0 -0
  8. package/builder/assets/index.3dd03883.css +6 -0
  9. package/builder/assets/index.f9b8b175.js +1802 -0
  10. package/builder/assets/schnellecke.cf1837a8.png +0 -0
  11. package/builder/index.html +3 -3
  12. package/coverage/clover.xml +6618 -6528
  13. package/coverage/coverage-final.json +282 -276
  14. package/coverage/lcov-report/index.html +489 -444
  15. package/coverage/lcov-report/src/api/controllers/analytics.ts.html +9 -9
  16. package/coverage/lcov-report/src/api/controllers/apikeys.ts.html +6 -6
  17. package/coverage/lcov-report/src/api/controllers/application.ts.html +362 -266
  18. package/coverage/lcov-report/src/api/controllers/auth.ts.html +12 -12
  19. package/coverage/lcov-report/src/api/controllers/automation.ts.html +61 -61
  20. package/coverage/lcov-report/src/api/controllers/backup.ts.html +8 -8
  21. package/coverage/lcov-report/src/api/controllers/cloud.ts.html +93 -81
  22. package/coverage/lcov-report/src/api/controllers/component.ts.html +12 -12
  23. package/coverage/lcov-report/src/api/controllers/datasource.ts.html +122 -98
  24. package/coverage/lcov-report/src/api/controllers/deploy/Deployment.ts.html +21 -18
  25. package/coverage/lcov-report/src/api/controllers/deploy/index.html +21 -21
  26. package/coverage/lcov-report/src/api/controllers/deploy/index.ts.html +142 -196
  27. package/coverage/lcov-report/src/api/controllers/dev.ts.html +28 -28
  28. package/coverage/lcov-report/src/api/controllers/index.html +115 -115
  29. package/coverage/lcov-report/src/api/controllers/integration.ts.html +5 -5
  30. package/coverage/lcov-report/src/api/controllers/layout.ts.html +9 -9
  31. package/coverage/lcov-report/src/api/controllers/metadata.ts.html +11 -11
  32. package/coverage/lcov-report/src/api/controllers/migrations.ts.html +6 -6
  33. package/coverage/lcov-report/src/api/controllers/permission.ts.html +14 -14
  34. package/coverage/lcov-report/src/api/controllers/plugin/file.ts.html +20 -20
  35. package/coverage/lcov-report/src/api/controllers/plugin/github.ts.html +62 -62
  36. package/coverage/lcov-report/src/api/controllers/plugin/index.html +72 -72
  37. package/coverage/lcov-report/src/api/controllers/plugin/index.ts.html +150 -135
  38. package/coverage/lcov-report/src/api/controllers/plugin/npm.ts.html +56 -56
  39. package/coverage/lcov-report/src/api/controllers/plugin/uploaders.ts.html +11 -11
  40. package/coverage/lcov-report/src/api/controllers/plugin/url.ts.html +18 -18
  41. package/coverage/lcov-report/src/api/controllers/plugin/utils.ts.html +20 -20
  42. package/coverage/lcov-report/src/api/controllers/public/applications.ts.html +75 -24
  43. package/coverage/lcov-report/src/api/controllers/public/index.html +58 -58
  44. package/coverage/lcov-report/src/api/controllers/public/mapping/applications.ts.html +7 -7
  45. package/coverage/lcov-report/src/api/controllers/public/mapping/index.html +25 -25
  46. package/coverage/lcov-report/src/api/controllers/public/mapping/index.ts.html +9 -9
  47. package/coverage/lcov-report/src/api/controllers/public/mapping/queries.ts.html +8 -8
  48. package/coverage/lcov-report/src/api/controllers/public/mapping/rows.ts.html +4 -4
  49. package/coverage/lcov-report/src/api/controllers/public/mapping/tables.ts.html +4 -4
  50. package/coverage/lcov-report/src/api/controllers/public/mapping/users.ts.html +4 -4
  51. package/coverage/lcov-report/src/api/controllers/public/queries.ts.html +15 -15
  52. package/coverage/lcov-report/src/api/controllers/public/rows.ts.html +21 -21
  53. package/coverage/lcov-report/src/api/controllers/public/tables.ts.html +21 -21
  54. package/coverage/lcov-report/src/api/controllers/public/users.ts.html +27 -27
  55. package/coverage/lcov-report/src/api/controllers/public/utils.ts.html +8 -8
  56. package/coverage/lcov-report/src/api/controllers/query/import/index.html +8 -8
  57. package/coverage/lcov-report/src/api/controllers/query/import/index.ts.html +11 -11
  58. package/coverage/lcov-report/src/api/controllers/query/import/sources/base/index.html +14 -14
  59. package/coverage/lcov-report/src/api/controllers/query/import/sources/base/index.ts.html +14 -14
  60. package/coverage/lcov-report/src/api/controllers/query/import/sources/base/openapi.ts.html +8 -8
  61. package/coverage/lcov-report/src/api/controllers/query/import/sources/curl.ts.html +12 -12
  62. package/coverage/lcov-report/src/api/controllers/query/import/sources/index.html +23 -23
  63. package/coverage/lcov-report/src/api/controllers/query/import/sources/openapi2.ts.html +16 -16
  64. package/coverage/lcov-report/src/api/controllers/query/import/sources/openapi3.ts.html +20 -20
  65. package/coverage/lcov-report/src/api/controllers/query/index.html +20 -20
  66. package/coverage/lcov-report/src/api/controllers/query/index.ts.html +131 -107
  67. package/coverage/lcov-report/src/api/controllers/query/validation.ts.html +11 -11
  68. package/coverage/lcov-report/src/api/controllers/role.ts.html +9 -9
  69. package/coverage/lcov-report/src/api/controllers/routing.ts.html +10 -10
  70. package/coverage/lcov-report/src/api/controllers/row/ExternalRequest.ts.html +56 -41
  71. package/coverage/lcov-report/src/api/controllers/row/external.ts.html +87 -57
  72. package/coverage/lcov-report/src/api/controllers/row/index.html +66 -66
  73. package/coverage/lcov-report/src/api/controllers/row/index.ts.html +37 -37
  74. package/coverage/lcov-report/src/api/controllers/row/internal.ts.html +181 -106
  75. package/coverage/lcov-report/src/api/controllers/row/internalSearch.ts.html +146 -146
  76. package/coverage/lcov-report/src/api/controllers/row/staticFormula.ts.html +44 -35
  77. package/coverage/lcov-report/src/api/controllers/row/utils.ts.html +156 -39
  78. package/coverage/lcov-report/src/api/controllers/screen.ts.html +31 -31
  79. package/coverage/lcov-report/src/api/controllers/script.ts.html +19 -19
  80. package/coverage/lcov-report/src/api/controllers/static/index.html +18 -18
  81. package/coverage/lcov-report/src/api/controllers/static/index.ts.html +56 -71
  82. package/coverage/lcov-report/src/api/controllers/table/bulkFormula.ts.html +60 -60
  83. package/coverage/lcov-report/src/api/controllers/table/external.ts.html +56 -50
  84. package/coverage/lcov-report/src/api/controllers/table/index.html +48 -48
  85. package/coverage/lcov-report/src/api/controllers/table/index.ts.html +157 -70
  86. package/coverage/lcov-report/src/api/controllers/table/internal.ts.html +58 -61
  87. package/coverage/lcov-report/src/api/controllers/table/utils.ts.html +109 -112
  88. package/coverage/lcov-report/src/api/controllers/templates.ts.html +21 -21
  89. package/coverage/lcov-report/src/api/controllers/user.ts.html +159 -135
  90. package/coverage/lcov-report/src/api/controllers/view/exporters.ts.html +64 -19
  91. package/coverage/lcov-report/src/api/controllers/view/index.html +38 -38
  92. package/coverage/lcov-report/src/api/controllers/view/index.ts.html +97 -133
  93. package/coverage/lcov-report/src/api/controllers/view/utils.ts.html +31 -31
  94. package/coverage/lcov-report/src/api/controllers/view/viewBuilder.ts.html +37 -37
  95. package/coverage/lcov-report/src/api/controllers/webhook.ts.html +69 -63
  96. package/coverage/lcov-report/src/api/index.html +15 -15
  97. package/coverage/lcov-report/src/api/index.ts.html +40 -40
  98. package/coverage/lcov-report/src/api/routes/analytics.ts.html +10 -10
  99. package/coverage/lcov-report/src/api/routes/apikeys.ts.html +11 -11
  100. package/coverage/lcov-report/src/api/routes/application.ts.html +46 -13
  101. package/coverage/lcov-report/src/api/routes/auth.ts.html +9 -9
  102. package/coverage/lcov-report/src/api/routes/automation.ts.html +14 -14
  103. package/coverage/lcov-report/src/api/routes/backup.ts.html +11 -11
  104. package/coverage/lcov-report/src/api/routes/cloud.ts.html +11 -11
  105. package/coverage/lcov-report/src/api/routes/component.ts.html +11 -11
  106. package/coverage/lcov-report/src/api/routes/datasource.ts.html +12 -12
  107. package/coverage/lcov-report/src/api/routes/deploy.ts.html +11 -14
  108. package/coverage/lcov-report/src/api/routes/dev.ts.html +17 -17
  109. package/coverage/lcov-report/src/api/routes/index.html +68 -68
  110. package/coverage/lcov-report/src/api/routes/index.ts.html +49 -40
  111. package/coverage/lcov-report/src/api/routes/integration.ts.html +11 -11
  112. package/coverage/lcov-report/src/api/routes/layout.ts.html +11 -11
  113. package/coverage/lcov-report/src/api/routes/metadata.ts.html +12 -12
  114. package/coverage/lcov-report/src/api/routes/migrations.ts.html +10 -10
  115. package/coverage/lcov-report/src/api/routes/permission.ts.html +12 -12
  116. package/coverage/lcov-report/src/api/routes/plugin.ts.html +10 -10
  117. package/coverage/lcov-report/src/api/routes/public/applications.ts.html +147 -15
  118. package/coverage/lcov-report/src/api/routes/public/index.html +27 -27
  119. package/coverage/lcov-report/src/api/routes/public/index.ts.html +60 -60
  120. package/coverage/lcov-report/src/api/routes/public/middleware/index.html +15 -15
  121. package/coverage/lcov-report/src/api/routes/public/middleware/mapper.ts.html +28 -16
  122. package/coverage/lcov-report/src/api/routes/public/queries.ts.html +11 -11
  123. package/coverage/lcov-report/src/api/routes/public/rows.ts.html +14 -14
  124. package/coverage/lcov-report/src/api/routes/public/tables.ts.html +14 -14
  125. package/coverage/lcov-report/src/api/routes/public/tests/index.html +7 -7
  126. package/coverage/lcov-report/src/api/routes/public/tests/utils.ts.html +5 -5
  127. package/coverage/lcov-report/src/api/routes/public/users.ts.html +14 -14
  128. package/coverage/lcov-report/src/api/routes/public/utils/Endpoint.ts.html +21 -21
  129. package/coverage/lcov-report/src/api/routes/public/utils/index.html +5 -5
  130. package/coverage/lcov-report/src/api/routes/query.ts.html +14 -14
  131. package/coverage/lcov-report/src/api/routes/role.ts.html +12 -12
  132. package/coverage/lcov-report/src/api/routes/routing.ts.html +11 -11
  133. package/coverage/lcov-report/src/api/routes/row.ts.html +14 -14
  134. package/coverage/lcov-report/src/api/routes/screen.ts.html +12 -12
  135. package/coverage/lcov-report/src/api/routes/script.ts.html +13 -13
  136. package/coverage/lcov-report/src/api/routes/static.ts.html +18 -18
  137. package/coverage/lcov-report/src/api/routes/table.ts.html +29 -98
  138. package/coverage/lcov-report/src/api/routes/templates.ts.html +11 -11
  139. package/coverage/lcov-report/src/api/routes/tests/utilities/TestFunctions.ts.html +27 -27
  140. package/coverage/lcov-report/src/api/routes/tests/utilities/index.html +23 -23
  141. package/coverage/lcov-report/src/api/routes/tests/utilities/index.ts.html +33 -33
  142. package/coverage/lcov-report/src/api/routes/user.ts.html +12 -12
  143. package/coverage/lcov-report/src/api/routes/utils/index.html +3 -3
  144. package/coverage/lcov-report/src/api/routes/utils/validators.ts.html +44 -44
  145. package/coverage/lcov-report/src/api/routes/view.ts.html +13 -13
  146. package/coverage/lcov-report/src/api/routes/webhook.ts.html +13 -13
  147. package/coverage/lcov-report/src/app.ts.html +53 -47
  148. package/coverage/lcov-report/src/automations/actions.ts.html +31 -31
  149. package/coverage/lcov-report/src/automations/automationUtils.ts.html +127 -55
  150. package/coverage/lcov-report/src/automations/bullboard.ts.html +19 -19
  151. package/coverage/lcov-report/src/automations/index.html +54 -54
  152. package/coverage/lcov-report/src/automations/index.ts.html +23 -23
  153. package/coverage/lcov-report/src/automations/logging/index.html +3 -3
  154. package/coverage/lcov-report/src/automations/logging/index.ts.html +15 -15
  155. package/coverage/lcov-report/src/automations/steps/bash.ts.html +34 -34
  156. package/coverage/lcov-report/src/automations/steps/createRow.ts.html +9 -9
  157. package/coverage/lcov-report/src/automations/steps/delay.ts.html +7 -7
  158. package/coverage/lcov-report/src/automations/steps/deleteRow.ts.html +9 -9
  159. package/coverage/lcov-report/src/automations/steps/discord.ts.html +33 -33
  160. package/coverage/lcov-report/src/automations/steps/executeQuery.ts.html +35 -35
  161. package/coverage/lcov-report/src/automations/steps/executeScript.ts.html +31 -31
  162. package/coverage/lcov-report/src/automations/steps/filter.ts.html +12 -12
  163. package/coverage/lcov-report/src/automations/steps/index.html +129 -129
  164. package/coverage/lcov-report/src/automations/steps/integromat.ts.html +10 -10
  165. package/coverage/lcov-report/src/automations/steps/loop.ts.html +5 -5
  166. package/coverage/lcov-report/src/automations/steps/outgoingWebhook.ts.html +19 -19
  167. package/coverage/lcov-report/src/automations/steps/queryRows.ts.html +43 -43
  168. package/coverage/lcov-report/src/automations/steps/sendSmtpEmail.ts.html +28 -28
  169. package/coverage/lcov-report/src/automations/steps/serverLog.ts.html +19 -19
  170. package/coverage/lcov-report/src/automations/steps/slack.ts.html +10 -10
  171. package/coverage/lcov-report/src/automations/steps/updateRow.ts.html +12 -12
  172. package/coverage/lcov-report/src/automations/steps/utils.ts.html +18 -18
  173. package/coverage/lcov-report/src/automations/steps/zapier.ts.html +22 -22
  174. package/coverage/lcov-report/src/automations/tests/utilities/index.html +15 -15
  175. package/coverage/lcov-report/src/automations/tests/utilities/index.ts.html +32 -32
  176. package/coverage/lcov-report/src/automations/triggerInfo/app.ts.html +6 -6
  177. package/coverage/lcov-report/src/automations/triggerInfo/cron.ts.html +6 -6
  178. package/coverage/lcov-report/src/automations/triggerInfo/index.html +17 -17
  179. package/coverage/lcov-report/src/automations/triggerInfo/index.ts.html +10 -10
  180. package/coverage/lcov-report/src/automations/triggerInfo/rowDeleted.ts.html +6 -6
  181. package/coverage/lcov-report/src/automations/triggerInfo/rowSaved.ts.html +6 -6
  182. package/coverage/lcov-report/src/automations/triggerInfo/rowUpdated.ts.html +6 -6
  183. package/coverage/lcov-report/src/automations/triggerInfo/webhook.ts.html +6 -6
  184. package/coverage/lcov-report/src/automations/triggers.ts.html +53 -38
  185. package/coverage/lcov-report/src/automations/utils.ts.html +80 -80
  186. package/coverage/lcov-report/src/constants/index.html +19 -19
  187. package/coverage/lcov-report/src/constants/index.ts.html +103 -103
  188. package/coverage/lcov-report/src/constants/layouts.ts.html +9 -9
  189. package/coverage/lcov-report/src/constants/screens.ts.html +5 -5
  190. package/coverage/lcov-report/src/db/defaultData/datasource_bb_default.ts.html +45 -45
  191. package/coverage/lcov-report/src/db/defaultData/employeeImport.ts.html +8 -8
  192. package/coverage/lcov-report/src/db/defaultData/expensesImport.ts.html +8 -8
  193. package/coverage/lcov-report/src/db/defaultData/index.html +43 -43
  194. package/coverage/lcov-report/src/db/defaultData/inventoryImport.ts.html +8 -8
  195. package/coverage/lcov-report/src/db/defaultData/jobsImport.ts.html +8 -8
  196. package/coverage/lcov-report/src/db/dynamoClient.ts.html +26 -26
  197. package/coverage/lcov-report/src/db/inMemoryView.ts.html +13 -13
  198. package/coverage/lcov-report/src/db/index.html +34 -34
  199. package/coverage/lcov-report/src/db/index.ts.html +10 -10
  200. package/coverage/lcov-report/src/db/linkedRows/LinkController.ts.html +38 -38
  201. package/coverage/lcov-report/src/db/linkedRows/LinkDocument.ts.html +7 -7
  202. package/coverage/lcov-report/src/db/linkedRows/index.html +37 -37
  203. package/coverage/lcov-report/src/db/linkedRows/index.ts.html +40 -40
  204. package/coverage/lcov-report/src/db/linkedRows/linkUtils.ts.html +25 -25
  205. package/coverage/lcov-report/src/db/newid.ts.html +5 -5
  206. package/coverage/lcov-report/src/db/utils.ts.html +90 -90
  207. package/coverage/lcov-report/src/definitions/automations.ts.html +9 -6
  208. package/coverage/lcov-report/src/definitions/index.html +5 -20
  209. package/coverage/lcov-report/src/environment.ts.html +44 -32
  210. package/coverage/lcov-report/src/events/AutomationEmitter.ts.html +14 -14
  211. package/coverage/lcov-report/src/events/BudibaseEmitter.ts.html +8 -8
  212. package/coverage/lcov-report/src/events/index.html +20 -20
  213. package/coverage/lcov-report/src/events/index.ts.html +7 -7
  214. package/coverage/lcov-report/src/events/utils.ts.html +11 -11
  215. package/coverage/lcov-report/src/index.html +47 -47
  216. package/coverage/lcov-report/src/index.ts.html +8 -8
  217. package/coverage/lcov-report/src/integrations/airtable.ts.html +10 -10
  218. package/coverage/lcov-report/src/integrations/arangodb.ts.html +9 -9
  219. package/coverage/lcov-report/src/integrations/base/index.html +29 -29
  220. package/coverage/lcov-report/src/integrations/base/query.ts.html +15 -9
  221. package/coverage/lcov-report/src/integrations/base/sql.ts.html +38 -38
  222. package/coverage/lcov-report/src/integrations/base/sqlTable.ts.html +23 -23
  223. package/coverage/lcov-report/src/integrations/base/utils.ts.html +5 -5
  224. package/coverage/lcov-report/src/integrations/couchdb.ts.html +109 -31
  225. package/coverage/lcov-report/src/integrations/dynamodb.ts.html +17 -17
  226. package/coverage/lcov-report/src/integrations/elasticsearch.ts.html +27 -15
  227. package/coverage/lcov-report/src/integrations/firebase.ts.html +12 -12
  228. package/coverage/lcov-report/src/integrations/googlesheets.ts.html +42 -42
  229. package/coverage/lcov-report/src/integrations/index.html +130 -130
  230. package/coverage/lcov-report/src/integrations/index.ts.html +50 -62
  231. package/coverage/lcov-report/src/integrations/microsoftSqlServer.ts.html +31 -31
  232. package/coverage/lcov-report/src/integrations/mongodb.ts.html +421 -289
  233. package/coverage/lcov-report/src/integrations/mysql.ts.html +28 -28
  234. package/coverage/lcov-report/src/integrations/oracle.ts.html +31 -31
  235. package/coverage/lcov-report/src/integrations/postgres.ts.html +54 -54
  236. package/coverage/lcov-report/src/integrations/queries/index.html +19 -19
  237. package/coverage/lcov-report/src/integrations/queries/sql.ts.html +24 -159
  238. package/coverage/lcov-report/src/integrations/redis.ts.html +8 -8
  239. package/coverage/lcov-report/src/integrations/rest.ts.html +43 -52
  240. package/coverage/lcov-report/src/integrations/s3.ts.html +17 -17
  241. package/coverage/lcov-report/src/integrations/snowflake.ts.html +15 -15
  242. package/coverage/lcov-report/src/integrations/tests/TestConfiguration.js.html +1 -1
  243. package/coverage/lcov-report/src/integrations/tests/index.html +1 -1
  244. package/coverage/lcov-report/src/integrations/utils.ts.html +54 -54
  245. package/coverage/lcov-report/src/middleware/appInfo.ts.html +11 -11
  246. package/coverage/lcov-report/src/middleware/authorized.ts.html +49 -37
  247. package/coverage/lcov-report/src/middleware/builder.ts.html +26 -26
  248. package/coverage/lcov-report/src/middleware/currentapp.ts.html +50 -47
  249. package/coverage/lcov-report/src/middleware/index.html +40 -40
  250. package/coverage/lcov-report/src/middleware/joi-validator.ts.html +10 -10
  251. package/coverage/lcov-report/src/middleware/publicApi.ts.html +9 -9
  252. package/coverage/lcov-report/src/middleware/resourceId.ts.html +23 -23
  253. package/coverage/lcov-report/src/middleware/selfhost.ts.html +2 -2
  254. package/coverage/lcov-report/src/middleware/utils.ts.html +4 -4
  255. package/coverage/lcov-report/src/migrations/functions/appUrls.ts.html +6 -6
  256. package/coverage/lcov-report/src/migrations/functions/backfill/app/automations.ts.html +7 -7
  257. package/coverage/lcov-report/src/migrations/functions/backfill/app/datasources.ts.html +7 -7
  258. package/coverage/lcov-report/src/migrations/functions/backfill/app/index.html +31 -31
  259. package/coverage/lcov-report/src/migrations/functions/backfill/app/layouts.ts.html +8 -8
  260. package/coverage/lcov-report/src/migrations/functions/backfill/app/queries.ts.html +13 -13
  261. package/coverage/lcov-report/src/migrations/functions/backfill/app/roles.ts.html +7 -7
  262. package/coverage/lcov-report/src/migrations/functions/backfill/app/screens.ts.html +7 -7
  263. package/coverage/lcov-report/src/migrations/functions/backfill/app/tables.ts.html +8 -8
  264. package/coverage/lcov-report/src/migrations/functions/backfill/app.ts.html +21 -21
  265. package/coverage/lcov-report/src/migrations/functions/backfill/global/configs.ts.html +17 -14
  266. package/coverage/lcov-report/src/migrations/functions/backfill/global/index.html +19 -19
  267. package/coverage/lcov-report/src/migrations/functions/backfill/global/quotas.ts.html +9 -9
  268. package/coverage/lcov-report/src/migrations/functions/backfill/global/users.ts.html +13 -13
  269. package/coverage/lcov-report/src/migrations/functions/backfill/global.ts.html +23 -23
  270. package/coverage/lcov-report/src/migrations/functions/backfill/index.html +26 -26
  271. package/coverage/lcov-report/src/migrations/functions/backfill/index.ts.html +7 -7
  272. package/coverage/lcov-report/src/migrations/functions/backfill/installation.ts.html +14 -14
  273. package/coverage/lcov-report/src/migrations/functions/index.html +18 -18
  274. package/coverage/lcov-report/src/migrations/functions/syncQuotas.ts.html +8 -8
  275. package/coverage/lcov-report/src/migrations/functions/tableSettings.ts.html +11 -11
  276. package/coverage/lcov-report/src/migrations/functions/usageQuotas/index.html +11 -11
  277. package/coverage/lcov-report/src/migrations/functions/usageQuotas/index.ts.html +3 -3
  278. package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncApps.ts.html +6 -6
  279. package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncPlugins.ts.html +8 -8
  280. package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncRows.ts.html +7 -7
  281. package/coverage/lcov-report/src/migrations/functions/userEmailViewCasing.ts.html +4 -4
  282. package/coverage/lcov-report/src/migrations/index.html +15 -15
  283. package/coverage/lcov-report/src/migrations/index.ts.html +43 -43
  284. package/coverage/lcov-report/src/migrations/tests/helpers.ts.html +4 -4
  285. package/coverage/lcov-report/src/migrations/tests/index.html +6 -6
  286. package/coverage/lcov-report/src/migrations/tests/structures.ts.html +3 -3
  287. package/coverage/lcov-report/src/sdk/app/applications/index.html +20 -20
  288. package/coverage/lcov-report/src/sdk/app/applications/index.ts.html +6 -6
  289. package/coverage/lcov-report/src/sdk/app/applications/sync.ts.html +34 -34
  290. package/coverage/lcov-report/src/sdk/app/applications/utils.ts.html +15 -15
  291. package/coverage/lcov-report/src/sdk/app/automations/index.html +7 -7
  292. package/coverage/lcov-report/src/sdk/app/automations/index.ts.html +5 -5
  293. package/coverage/lcov-report/src/sdk/app/automations/webhook.ts.html +8 -8
  294. package/coverage/lcov-report/src/sdk/app/backups/constants.ts.html +5 -5
  295. package/coverage/lcov-report/src/sdk/app/backups/exports.ts.html +30 -30
  296. package/coverage/lcov-report/src/sdk/app/backups/imports.ts.html +45 -57
  297. package/coverage/lcov-report/src/sdk/app/backups/index.html +42 -42
  298. package/coverage/lcov-report/src/sdk/app/backups/index.ts.html +7 -7
  299. package/coverage/lcov-report/src/sdk/app/backups/statistics.ts.html +73 -73
  300. package/coverage/lcov-report/src/sdk/app/datasources/datasources.ts.html +493 -0
  301. package/coverage/lcov-report/src/sdk/app/datasources/index.html +131 -0
  302. package/coverage/lcov-report/src/sdk/app/datasources/index.ts.html +100 -0
  303. package/coverage/lcov-report/src/sdk/app/queries/index.html +131 -0
  304. package/coverage/lcov-report/src/{utilities/statusCodes.ts.html → sdk/app/queries/index.ts.html} +22 -28
  305. package/coverage/lcov-report/src/{definitions/datasource.ts.html → sdk/app/queries/queries.ts.html} +82 -82
  306. package/coverage/lcov-report/src/sdk/app/rows/attachments.ts.html +8 -8
  307. package/coverage/lcov-report/src/sdk/app/rows/index.html +8 -8
  308. package/coverage/lcov-report/src/sdk/app/rows/index.ts.html +6 -6
  309. package/coverage/lcov-report/src/sdk/app/rows/rows.ts.html +4 -4
  310. package/coverage/lcov-report/src/sdk/app/tables/index.html +15 -15
  311. package/coverage/lcov-report/src/sdk/app/tables/index.ts.html +29 -20
  312. package/coverage/lcov-report/src/sdk/index.html +7 -7
  313. package/coverage/lcov-report/src/sdk/index.ts.html +24 -12
  314. package/coverage/lcov-report/src/sdk/users/index.html +10 -10
  315. package/coverage/lcov-report/src/sdk/users/index.ts.html +5 -5
  316. package/coverage/lcov-report/src/sdk/users/utils.ts.html +35 -35
  317. package/coverage/lcov-report/src/sdk/utils/index.html +116 -0
  318. package/coverage/lcov-report/src/sdk/utils/index.ts.html +133 -0
  319. package/coverage/lcov-report/src/startup.ts.html +48 -63
  320. package/coverage/lcov-report/src/tests/utilities/TestConfiguration.ts.html +218 -152
  321. package/coverage/lcov-report/src/tests/utilities/controllers.ts.html +20 -20
  322. package/coverage/lcov-report/src/tests/utilities/index.html +33 -33
  323. package/coverage/lcov-report/src/tests/utilities/index.ts.html +2 -2
  324. package/coverage/lcov-report/src/tests/utilities/structures.ts.html +235 -46
  325. package/coverage/lcov-report/src/threads/automation.ts.html +212 -251
  326. package/coverage/lcov-report/src/threads/index.html +46 -46
  327. package/coverage/lcov-report/src/threads/index.ts.html +39 -39
  328. package/coverage/lcov-report/src/threads/query.ts.html +140 -101
  329. package/coverage/lcov-report/src/threads/utils.ts.html +29 -29
  330. package/coverage/lcov-report/src/utilities/budibaseDir.ts.html +5 -5
  331. package/coverage/lcov-report/src/utilities/centralPath.ts.html +11 -11
  332. package/coverage/lcov-report/src/utilities/fileSystem/app.ts.html +343 -0
  333. package/coverage/lcov-report/src/utilities/fileSystem/clientLibrary.ts.html +20 -20
  334. package/coverage/lcov-report/src/utilities/fileSystem/filesystem.ts.html +601 -0
  335. package/coverage/lcov-report/src/utilities/fileSystem/index.html +88 -28
  336. package/coverage/lcov-report/src/utilities/fileSystem/index.ts.html +20 -1049
  337. package/coverage/lcov-report/src/utilities/fileSystem/plugin.ts.html +277 -0
  338. package/coverage/lcov-report/src/utilities/fileSystem/processor.ts.html +9 -9
  339. package/coverage/lcov-report/src/utilities/fileSystem/template.ts.html +193 -0
  340. package/coverage/lcov-report/src/utilities/global.ts.html +60 -60
  341. package/coverage/lcov-report/src/utilities/index.html +89 -119
  342. package/coverage/lcov-report/src/utilities/index.ts.html +40 -172
  343. package/coverage/lcov-report/src/utilities/redis.ts.html +38 -38
  344. package/coverage/lcov-report/src/utilities/routing/index.html +1 -1
  345. package/coverage/lcov-report/src/utilities/routing/index.ts.html +5 -5
  346. package/coverage/lcov-report/src/utilities/rowProcessor/index.html +34 -34
  347. package/coverage/lcov-report/src/utilities/rowProcessor/index.ts.html +102 -75
  348. package/coverage/lcov-report/src/utilities/rowProcessor/map.ts.html +9 -9
  349. package/coverage/lcov-report/src/utilities/rowProcessor/utils.ts.html +54 -54
  350. package/coverage/lcov-report/src/utilities/{csvParser.ts.html → schema.ts.html} +174 -234
  351. package/coverage/lcov-report/src/utilities/scriptRunner.ts.html +33 -33
  352. package/coverage/lcov-report/src/utilities/security.ts.html +13 -13
  353. package/coverage/lcov-report/src/utilities/usageQuota/index.html +9 -9
  354. package/coverage/lcov-report/src/utilities/usageQuota/rows.ts.html +38 -38
  355. package/coverage/lcov-report/src/utilities/usageQuota/usageQuoteReset.ts.html +3 -3
  356. package/coverage/lcov-report/src/utilities/users.ts.html +7 -7
  357. package/coverage/lcov-report/src/utilities/workerRequests.ts.html +89 -62
  358. package/coverage/lcov-report/src/watch.ts.html +20 -20
  359. package/coverage/lcov-report/src/websocket.ts.html +15 -15
  360. package/coverage/lcov.info +13499 -12800
  361. package/dist/api/controllers/application.js +120 -109
  362. package/dist/api/controllers/cloud.js +6 -2
  363. package/dist/api/controllers/datasource.js +24 -15
  364. package/dist/api/controllers/deploy/index.js +43 -60
  365. package/dist/api/controllers/plugin/index.js +6 -6
  366. package/dist/api/controllers/public/applications.js +22 -1
  367. package/dist/api/controllers/query/index.js +23 -13
  368. package/dist/api/controllers/row/ExternalRequest.js +12 -4
  369. package/dist/api/controllers/row/external.js +20 -13
  370. package/dist/api/controllers/row/internal.js +52 -27
  371. package/dist/api/controllers/row/staticFormula.js +1 -1
  372. package/dist/api/controllers/row/utils.js +35 -3
  373. package/dist/api/controllers/static/index.js +47 -47
  374. package/dist/api/controllers/static/templates/BudibaseApp.svelte +0 -1
  375. package/dist/api/controllers/table/external.js +16 -35
  376. package/dist/api/controllers/table/index.js +44 -15
  377. package/dist/api/controllers/table/internal.js +6 -7
  378. package/dist/api/controllers/table/utils.js +9 -9
  379. package/dist/api/controllers/user.js +14 -6
  380. package/dist/api/controllers/view/exporters.js +22 -6
  381. package/dist/api/controllers/view/index.js +23 -58
  382. package/dist/api/controllers/view/viewBuilder.js +15 -2
  383. package/dist/api/controllers/webhook.js +45 -43
  384. package/dist/api/routes/analytics.js +2 -1
  385. package/dist/api/routes/apikeys.js +2 -1
  386. package/dist/api/routes/application.js +5 -1
  387. package/dist/api/routes/auth.js +2 -1
  388. package/dist/api/routes/automation.js +2 -1
  389. package/dist/api/routes/backup.js +2 -1
  390. package/dist/api/routes/cloud.js +2 -1
  391. package/dist/api/routes/component.js +2 -1
  392. package/dist/api/routes/datasource.js +2 -1
  393. package/dist/api/routes/deploy.js +3 -3
  394. package/dist/api/routes/dev.js +2 -1
  395. package/dist/api/routes/index.js +2 -0
  396. package/dist/api/routes/integration.js +2 -1
  397. package/dist/api/routes/layout.js +2 -1
  398. package/dist/api/routes/metadata.js +2 -1
  399. package/dist/api/routes/migrations.js +2 -1
  400. package/dist/api/routes/permission.js +2 -1
  401. package/dist/api/routes/public/applications.js +37 -0
  402. package/dist/api/routes/public/middleware/mapper.js +3 -0
  403. package/dist/api/routes/query.js +2 -1
  404. package/dist/api/routes/role.js +2 -1
  405. package/dist/api/routes/routing.js +2 -1
  406. package/dist/api/routes/row.js +2 -2
  407. package/dist/api/routes/screen.js +2 -1
  408. package/dist/api/routes/script.js +2 -1
  409. package/dist/api/routes/static.js +6 -5
  410. package/dist/api/routes/table.js +8 -38
  411. package/dist/api/routes/templates.js +2 -1
  412. package/dist/api/routes/user.js +2 -1
  413. package/dist/api/routes/utils/validators.js +1 -1
  414. package/dist/api/routes/view.js +2 -1
  415. package/dist/api/routes/webhook.js +2 -1
  416. package/dist/app.js +9 -7
  417. package/dist/automations/automationUtils.js +26 -1
  418. package/dist/automations/logging/index.js +5 -25
  419. package/dist/automations/triggers.js +1 -0
  420. package/dist/db/index.js +5 -2
  421. package/dist/db/linkedRows/LinkController.js +2 -1
  422. package/dist/db/linkedRows/LinkDocument.js +2 -1
  423. package/dist/db/newid.js +4 -2
  424. package/dist/definitions/datasource.js +0 -6
  425. package/dist/environment.js +7 -2
  426. package/dist/events/AutomationEmitter.js +2 -1
  427. package/dist/events/BudibaseEmitter.js +2 -1
  428. package/dist/events/index.js +2 -1
  429. package/dist/index.js +2 -2
  430. package/dist/integrations/base/query.js +7 -2
  431. package/dist/integrations/base/sqlTable.js +14 -14
  432. package/dist/integrations/couchdb.js +34 -8
  433. package/dist/integrations/dynamodb.js +8 -5
  434. package/dist/integrations/elasticsearch.js +7 -3
  435. package/dist/integrations/googlesheets.js +1 -1
  436. package/dist/integrations/index.js +6 -7
  437. package/dist/integrations/mongodb.js +311 -271
  438. package/dist/integrations/mysql.js +2 -2
  439. package/dist/integrations/queries/sql.js +73 -100
  440. package/dist/integrations/rest.js +16 -18
  441. package/dist/middleware/authorized.js +2 -1
  442. package/dist/middleware/builder.js +4 -2
  443. package/dist/middleware/currentapp.js +6 -3
  444. package/dist/middleware/publicApi.js +4 -2
  445. package/dist/middleware/selfhost.js +4 -1
  446. package/dist/migrations/functions/backfill/global/configs.js +4 -4
  447. package/dist/package.json +12 -8
  448. package/dist/sdk/app/backups/imports.js +2 -6
  449. package/dist/sdk/app/datasources/datasources.js +147 -0
  450. package/dist/sdk/app/datasources/index.js +27 -0
  451. package/dist/sdk/app/queries/index.js +27 -0
  452. package/dist/sdk/app/queries/queries.js +60 -0
  453. package/dist/sdk/app/tables/index.js +6 -2
  454. package/dist/sdk/index.js +4 -0
  455. package/dist/sdk/utils/index.js +29 -0
  456. package/dist/startup.js +17 -17
  457. package/dist/threads/automation.js +22 -35
  458. package/dist/threads/index.js +4 -4
  459. package/dist/threads/query.js +27 -13
  460. package/dist/tsconfig.build.tsbuildinfo +1 -1
  461. package/dist/utilities/fileSystem/app.js +97 -0
  462. package/dist/utilities/fileSystem/clientLibrary.js +3 -3
  463. package/dist/utilities/fileSystem/filesystem.js +184 -0
  464. package/dist/utilities/fileSystem/index.js +18 -342
  465. package/dist/utilities/fileSystem/plugin.js +66 -0
  466. package/dist/utilities/fileSystem/template.js +47 -0
  467. package/dist/utilities/index.js +1 -44
  468. package/dist/utilities/rowProcessor/index.js +12 -4
  469. package/dist/utilities/schema.js +108 -0
  470. package/dist/utilities/scriptRunner.js +2 -1
  471. package/dist/utilities/statusCodes.js +2 -1
  472. package/dist/utilities/workerRequests.js +2 -0
  473. package/dist/watch.js +2 -25
  474. package/jest.config.ts +5 -2
  475. package/package.json +13 -9
  476. package/scripts/dev/manage.js +3 -2
  477. package/specs/openapi.json +84 -0
  478. package/specs/openapi.yaml +53 -0
  479. package/specs/resources/application.js +19 -0
  480. package/src/api/controllers/application.ts +142 -110
  481. package/src/api/controllers/auth.ts +2 -2
  482. package/src/api/controllers/cloud.ts +10 -6
  483. package/src/api/controllers/datasource.ts +33 -25
  484. package/src/api/controllers/deploy/Deployment.ts +1 -0
  485. package/src/api/controllers/deploy/index.ts +40 -58
  486. package/src/api/controllers/plugin/index.ts +14 -9
  487. package/src/api/controllers/public/applications.ts +17 -0
  488. package/src/api/controllers/query/index.ts +49 -41
  489. package/src/api/controllers/row/ExternalRequest.ts +8 -3
  490. package/src/api/controllers/row/external.ts +24 -14
  491. package/src/api/controllers/row/internal.ts +66 -41
  492. package/src/api/controllers/row/staticFormula.ts +5 -2
  493. package/src/api/controllers/row/utils.ts +42 -3
  494. package/src/api/controllers/static/index.ts +22 -27
  495. package/src/api/controllers/static/templates/BudibaseApp.svelte +0 -1
  496. package/src/api/controllers/table/external.ts +18 -16
  497. package/src/api/controllers/table/index.ts +46 -17
  498. package/src/api/controllers/table/internal.ts +6 -7
  499. package/src/api/controllers/table/utils.ts +12 -13
  500. package/src/api/controllers/user.ts +21 -13
  501. package/src/api/controllers/view/exporters.ts +20 -5
  502. package/src/api/controllers/view/index.ts +30 -42
  503. package/src/api/controllers/view/tests/viewBuilder.spec.js +1 -1
  504. package/src/api/controllers/view/viewBuilder.ts +1 -1
  505. package/src/api/controllers/webhook.ts +48 -46
  506. package/src/api/routes/analytics.ts +1 -1
  507. package/src/api/routes/apikeys.ts +1 -1
  508. package/src/api/routes/application.ts +12 -1
  509. package/src/api/routes/auth.ts +1 -1
  510. package/src/api/routes/automation.ts +1 -1
  511. package/src/api/routes/backup.ts +1 -1
  512. package/src/api/routes/cloud.ts +1 -1
  513. package/src/api/routes/component.ts +1 -1
  514. package/src/api/routes/datasource.ts +1 -1
  515. package/src/api/routes/deploy.ts +1 -2
  516. package/src/api/routes/dev.ts +1 -1
  517. package/src/api/routes/index.ts +6 -3
  518. package/src/api/routes/integration.ts +1 -1
  519. package/src/api/routes/layout.ts +1 -1
  520. package/src/api/routes/metadata.ts +1 -1
  521. package/src/api/routes/migrations.ts +1 -1
  522. package/src/api/routes/permission.ts +1 -1
  523. package/src/api/routes/public/applications.ts +44 -0
  524. package/src/api/routes/public/middleware/mapper.ts +4 -0
  525. package/src/api/routes/query.ts +1 -1
  526. package/src/api/routes/role.ts +1 -1
  527. package/src/api/routes/routing.ts +1 -1
  528. package/src/api/routes/row.ts +1 -1
  529. package/src/api/routes/screen.ts +1 -1
  530. package/src/api/routes/script.ts +1 -1
  531. package/src/api/routes/static.ts +2 -2
  532. package/src/api/routes/table.ts +16 -39
  533. package/src/api/routes/templates.ts +1 -1
  534. package/src/api/routes/tests/__snapshots__/{datasource.spec.js.snap → datasource.spec.ts.snap} +0 -0
  535. package/src/api/routes/tests/{application.spec.js → application.spec.ts} +94 -18
  536. package/src/api/routes/tests/{backup.spec.js → backup.spec.ts} +17 -6
  537. package/src/api/routes/tests/cloud.spec.ts +65 -0
  538. package/src/api/routes/tests/data/budibase-component-1.0.1.tgz +0 -0
  539. package/src/api/routes/tests/data/comment-box-1.0.2.tar.gz +0 -0
  540. package/src/api/routes/tests/data/export-test.tar.gz +0 -0
  541. package/src/api/routes/tests/{datasource.spec.js → datasource.spec.ts} +56 -14
  542. package/src/api/routes/tests/misc.spec.js +4 -10
  543. package/src/api/routes/tests/permissions.spec.js +1 -1
  544. package/src/api/routes/tests/plugin.spec.ts +179 -0
  545. package/src/api/routes/tests/routing.spec.js +1 -2
  546. package/src/api/routes/tests/row.spec.js +4 -2
  547. package/src/api/routes/tests/static.spec.js +2 -17
  548. package/src/api/routes/tests/table.spec.js +16 -32
  549. package/src/api/routes/tests/user.spec.js +105 -0
  550. package/src/api/routes/tests/utilities/TestFunctions.ts +1 -1
  551. package/src/api/routes/tests/utilities/index.ts +2 -2
  552. package/src/api/routes/tests/webhook.spec.js +1 -1
  553. package/src/api/routes/user.ts +1 -1
  554. package/src/api/routes/utils/validators.ts +1 -1
  555. package/src/api/routes/view.ts +1 -1
  556. package/src/api/routes/webhook.ts +1 -1
  557. package/src/app.ts +5 -3
  558. package/src/automations/automationUtils.ts +24 -0
  559. package/src/automations/logging/index.ts +1 -1
  560. package/src/automations/tests/bash.spec.js +34 -0
  561. package/src/automations/tests/discord.spec.js +27 -0
  562. package/src/automations/tests/executeQuery.spec.js +49 -0
  563. package/src/automations/tests/executeScript.spec.js +48 -0
  564. package/src/automations/tests/loop.spec.ts +45 -0
  565. package/src/automations/tests/sendSmtpEmail.spec.js +71 -0
  566. package/src/automations/tests/serverLog.spec.js +22 -0
  567. package/src/automations/tests/utilities/index.ts +2 -2
  568. package/src/automations/tests/zapier.spec.js +27 -0
  569. package/src/automations/triggers.ts +6 -1
  570. package/src/automations/unitTests/automationUtils.spec.ts +65 -0
  571. package/src/db/index.ts +1 -1
  572. package/src/db/linkedRows/LinkController.ts +1 -1
  573. package/src/db/linkedRows/LinkDocument.ts +1 -1
  574. package/src/db/newid.ts +1 -1
  575. package/src/db/tests/linkController.spec.js +1 -1
  576. package/src/definitions/automations.ts +1 -0
  577. package/src/definitions/datasource.ts +0 -41
  578. package/src/definitions/openapi.ts +10 -0
  579. package/src/environment.ts +6 -2
  580. package/src/events/AutomationEmitter.ts +1 -1
  581. package/src/events/BudibaseEmitter.ts +1 -1
  582. package/src/events/index.ts +1 -1
  583. package/src/index.ts +1 -1
  584. package/src/integrations/base/query.ts +3 -1
  585. package/src/integrations/base/sqlTable.ts +1 -1
  586. package/src/integrations/couchdb.ts +40 -14
  587. package/src/integrations/dynamodb.ts +3 -3
  588. package/src/integrations/elasticsearch.ts +8 -4
  589. package/src/integrations/googlesheets.ts +1 -1
  590. package/src/integrations/index.ts +5 -9
  591. package/src/integrations/mongodb.ts +315 -271
  592. package/src/integrations/mysql.ts +1 -1
  593. package/src/integrations/queries/sql.ts +5 -50
  594. package/src/integrations/rest.ts +16 -19
  595. package/src/integrations/tests/couchdb.spec.ts +33 -21
  596. package/src/integrations/tests/rest.spec.ts +19 -15
  597. package/src/middleware/authorized.ts +5 -1
  598. package/src/middleware/builder.ts +1 -1
  599. package/src/middleware/currentapp.ts +4 -3
  600. package/src/middleware/publicApi.ts +1 -1
  601. package/src/middleware/selfhost.ts +1 -1
  602. package/src/middleware/tests/authorized.spec.js +1 -1
  603. package/src/middleware/tests/currentapp.spec.js +1 -1
  604. package/src/middleware/tests/selfhost.spec.js +1 -1
  605. package/src/migrations/functions/backfill/global/configs.ts +5 -4
  606. package/src/migrations/functions/usageQuotas/tests/syncRows.spec.ts +10 -6
  607. package/src/sdk/app/backups/imports.ts +2 -6
  608. package/src/sdk/app/datasources/datasources.ts +136 -0
  609. package/src/sdk/app/datasources/index.ts +5 -0
  610. package/src/sdk/app/queries/index.ts +5 -0
  611. package/src/sdk/app/queries/queries.ts +50 -0
  612. package/src/sdk/app/tables/index.ts +6 -3
  613. package/src/sdk/index.ts +4 -0
  614. package/src/sdk/tests/attachments.spec.ts +1 -4
  615. package/src/sdk/utils/index.ts +16 -0
  616. package/src/startup.ts +3 -8
  617. package/src/tests/jestEnv.ts +13 -0
  618. package/src/tests/jestSetup.ts +4 -15
  619. package/src/tests/utilities/TestConfiguration.ts +38 -16
  620. package/src/tests/utilities/structures.ts +65 -2
  621. package/src/threads/automation.ts +22 -35
  622. package/src/threads/definitions.ts +3 -0
  623. package/src/threads/index.ts +1 -1
  624. package/src/threads/query.ts +28 -15
  625. package/src/utilities/fileSystem/app.ts +86 -0
  626. package/src/utilities/fileSystem/clientLibrary.ts +1 -1
  627. package/src/utilities/fileSystem/filesystem.ts +172 -0
  628. package/src/utilities/fileSystem/index.ts +5 -348
  629. package/src/utilities/fileSystem/plugin.ts +64 -0
  630. package/src/utilities/fileSystem/template.ts +36 -0
  631. package/src/utilities/index.ts +1 -45
  632. package/src/utilities/rowProcessor/index.ts +17 -8
  633. package/src/utilities/rowProcessor/tests/utils.spec.ts +57 -0
  634. package/src/utilities/schema.ts +141 -0
  635. package/src/utilities/scriptRunner.ts +1 -1
  636. package/src/utilities/statusCodes.ts +1 -1
  637. package/src/utilities/workerRequests.ts +10 -1
  638. package/src/watch.ts +1 -1
  639. package/tsconfig.build.json +2 -0
  640. package/tsconfig.json +2 -1
  641. package/builder/assets/index.01a9ab3b.js +0 -1024
  642. package/builder/assets/index.96b9ffed.css +0 -6
  643. package/coverage/lcov-report/src/utilities/plugins.ts.html +0 -151
  644. package/dist/api/routes/tests/utilities/TestFunctions.js +0 -167
  645. package/dist/api/routes/tests/utilities/index.js +0 -131
  646. package/dist/automations/tests/utilities/index.js +0 -81
  647. package/dist/tests/utilities/TestConfiguration.js +0 -562
  648. package/dist/tests/utilities/controllers.js +0 -40
  649. package/dist/tests/utilities/structures.js +0 -168
  650. package/dist/utilities/csvParser.js +0 -152
  651. package/dist/utilities/plugins.js +0 -26
  652. package/src/api/routes/tests/deployment.spec.ts +0 -25
  653. package/src/automations/unitTests/automationUtils.spec.js +0 -17
  654. package/src/utilities/csvParser.ts +0 -161
  655. package/src/utilities/plugins.ts +0 -22
  656. package/src/utilities/tests/__snapshots__/csvParser.spec.js.snap +0 -15
  657. package/src/utilities/tests/csvParser.spec.js +0 -112
@@ -69,10 +69,7 @@ describe("should be able to re-write attachment URLs", () => {
69
69
  const finalRows = await sdk.rows.getAllInternalRows(db.name)
70
70
  for (let rowToCheck of finalRows) {
71
71
  expect(rowToCheck.otherCol).toBe(row.otherCol)
72
- expect(rowToCheck.photo[0].url).not.toBe(row.photo[0].url)
73
- expect(rowToCheck.photo[0].url).toBe(
74
- `/prod-budi-app-assets/${db.name}/attachments/a.png`
75
- )
72
+ expect(rowToCheck.photo[0].url).toBe("")
76
73
  expect(rowToCheck.photo[0].key).toBe(`${db.name}/attachments/a.png`)
77
74
  }
78
75
  })
@@ -0,0 +1,16 @@
1
+ import { environmentVariables } from "@budibase/pro"
2
+ import { context, db as dbCore } from "@budibase/backend-core"
3
+ import { AppEnvironment } from "@budibase/types"
4
+
5
+ export async function getEnvironmentVariables() {
6
+ let envVars = context.getEnvironmentVariables()
7
+ if (!envVars) {
8
+ const appId = context.getAppId()
9
+ const appEnv = dbCore.isDevAppID(appId)
10
+ ? AppEnvironment.DEVELOPMENT
11
+ : AppEnvironment.PRODUCTION
12
+
13
+ envVars = await environmentVariables.fetchValues(appEnv)
14
+ }
15
+ return envVars
16
+ }
package/src/startup.ts CHANGED
@@ -1,16 +1,11 @@
1
- import * as env from "./environment"
1
+ import env from "./environment"
2
2
  import * as redis from "./utilities/redis"
3
3
  import {
4
4
  createAdminUser,
5
5
  generateApiKey,
6
6
  getChecklist,
7
7
  } from "./utilities/workerRequests"
8
- import {
9
- installation,
10
- pinoSettings,
11
- tenancy,
12
- logging,
13
- } from "@budibase/backend-core"
8
+ import { installation, tenancy, logging } from "@budibase/backend-core"
14
9
  import fs from "fs"
15
10
  import { watch } from "./watch"
16
11
  import * as automations from "./automations"
@@ -26,7 +21,7 @@ const pino = require("koa-pino-logger")
26
21
  let STARTUP_RAN = false
27
22
 
28
23
  async function initRoutes(app: any) {
29
- app.use(pino(pinoSettings()))
24
+ app.use(pino(logging.pinoSettings()))
30
25
 
31
26
  if (!env.isTest()) {
32
27
  const plugin = await bullboard.init()
@@ -0,0 +1,13 @@
1
+ import env from "../environment"
2
+ import { tmpdir } from "os"
3
+
4
+ env._set("SELF_HOSTED", "1")
5
+ env._set("NODE_ENV", "jest")
6
+ env._set("JWT_SECRET", "test-jwtsecret")
7
+ env._set("CLIENT_ID", "test-client-id")
8
+ env._set("BUDIBASE_DIR", tmpdir("budibase-unittests"))
9
+ env._set("LOG_LEVEL", "silent")
10
+ env._set("PORT", 0)
11
+ env._set("MINIO_URL", "http://localhost")
12
+ env._set("MINIO_ACCESS_KEY", "test")
13
+ env._set("MINIO_SECRET_KEY", "test")
@@ -1,17 +1,3 @@
1
- const { tmpdir } = require("os")
2
- import env from "../environment"
3
-
4
- env._set("SELF_HOSTED", "1")
5
- env._set("NODE_ENV", "jest")
6
- env._set("JWT_SECRET", "test-jwtsecret")
7
- env._set("CLIENT_ID", "test-client-id")
8
- env._set("BUDIBASE_DIR", tmpdir("budibase-unittests"))
9
- env._set("LOG_LEVEL", "silent")
10
- env._set("PORT", 0)
11
- env._set("MINIO_URL", "http://localhost")
12
- env._set("MINIO_ACCESS_KEY", "test")
13
- env._set("MINIO_SECRET_KEY", "test")
14
-
15
1
  import { mocks } from "@budibase/backend-core/tests"
16
2
 
17
3
  // mock all dates to 2020-01-01T00:00:00.000Z
@@ -19,7 +5,10 @@ import { mocks } from "@budibase/backend-core/tests"
19
5
  const tk = require("timekeeper")
20
6
  tk.freeze(mocks.date.MOCK_DATE)
21
7
 
22
- global.console.log = jest.fn() // console.log are ignored in tests
8
+ if (!process.env.DEBUG) {
9
+ global.console.log = jest.fn() // console.log are ignored in tests
10
+ global.console.warn = jest.fn() // console.warn are ignored in tests
11
+ }
23
12
 
24
13
  if (!process.env.CI) {
25
14
  // set a longer timeout in dev for debugging
@@ -1,3 +1,12 @@
1
+ import { mocks } from "@budibase/backend-core/tests"
2
+
3
+ // init the licensing mock
4
+ import * as pro from "@budibase/pro"
5
+ mocks.licenses.init(pro)
6
+
7
+ // use unlimited license by default
8
+ mocks.licenses.useUnlimited()
9
+
1
10
  import { init as dbInit } from "../../db"
2
11
  dbInit()
3
12
  import env from "../../environment"
@@ -58,7 +67,7 @@ class TestConfiguration {
58
67
  if (openServer) {
59
68
  // use a random port because it doesn't matter
60
69
  env.PORT = "0"
61
- this.server = require("../../app")
70
+ this.server = require("../../app").default
62
71
  // we need the request for logging in, involves cookies, hard to fake
63
72
  this.request = supertest(this.server)
64
73
  this.started = true
@@ -351,29 +360,31 @@ class TestConfiguration {
351
360
  }
352
361
 
353
362
  // APP
354
-
355
363
  async createApp(appName: string) {
356
364
  // create dev app
357
365
  // clear any old app
358
366
  this.appId = null
359
- // @ts-ignore
360
- await context.updateAppId(null)
361
- this.app = await this._req({ name: appName }, null, controllers.app.create)
362
- this.appId = this.app.appId
363
- // @ts-ignore
364
- await context.updateAppId(this.appId)
365
-
366
- // create production app
367
- this.prodApp = await this.deploy()
367
+ await context.doInAppContext(null, async () => {
368
+ this.app = await this._req(
369
+ { name: appName },
370
+ null,
371
+ controllers.app.create
372
+ )
373
+ this.appId = this.app.appId
374
+ })
375
+ return await context.doInAppContext(this.appId, async () => {
376
+ // create production app
377
+ this.prodApp = await this.publish()
368
378
 
369
- this.allApps.push(this.prodApp)
370
- this.allApps.push(this.app)
379
+ this.allApps.push(this.prodApp)
380
+ this.allApps.push(this.app)
371
381
 
372
- return this.app
382
+ return this.app
383
+ })
373
384
  }
374
385
 
375
- async deploy() {
376
- await this._req(null, null, controllers.deploy.deployApp)
386
+ async publish() {
387
+ await this._req(null, null, controllers.deploy.publishApp)
377
388
  // @ts-ignore
378
389
  const prodAppId = this.getAppId().replace("_dev", "")
379
390
  this.prodAppId = prodAppId
@@ -384,6 +395,17 @@ class TestConfiguration {
384
395
  })
385
396
  }
386
397
 
398
+ async unpublish() {
399
+ const response = await this._req(
400
+ null,
401
+ { appId: this.appId },
402
+ controllers.app.unpublish
403
+ )
404
+ this.prodAppId = null
405
+ this.prodApp = null
406
+ return response
407
+ }
408
+
387
409
  // TABLE
388
410
 
389
411
  async updateTable(config?: any) {
@@ -1,8 +1,14 @@
1
- import { roles, permissions } from "@budibase/backend-core"
1
+ import { permissions, roles } from "@budibase/backend-core"
2
2
  import { createHomeScreen } from "../../constants/screens"
3
3
  import { EMPTY_LAYOUT } from "../../constants/layouts"
4
4
  import { cloneDeep } from "lodash/fp"
5
- import { TRIGGER_DEFINITIONS, ACTION_DEFINITIONS } from "../../automations"
5
+ import { ACTION_DEFINITIONS, TRIGGER_DEFINITIONS } from "../../automations"
6
+ import {
7
+ Automation,
8
+ AutomationActionStepId,
9
+ AutomationTriggerStepId,
10
+ } from "@budibase/types"
11
+
6
12
  const { v4: uuidv4 } = require("uuid")
7
13
 
8
14
  export const TENANT_ID = "default"
@@ -116,6 +122,63 @@ export function basicAutomation() {
116
122
  }
117
123
  }
118
124
 
125
+ export function loopAutomation(tableId: string, loopOpts?: any): Automation {
126
+ if (!loopOpts) {
127
+ loopOpts = {
128
+ option: "Array",
129
+ binding: "{{ steps.1.rows }}",
130
+ }
131
+ }
132
+ const automation: any = {
133
+ name: "looping",
134
+ type: "automation",
135
+ definition: {
136
+ steps: [
137
+ {
138
+ id: "b",
139
+ type: "ACTION",
140
+ stepId: AutomationActionStepId.QUERY_ROWS,
141
+ internal: true,
142
+ inputs: {
143
+ tableId,
144
+ },
145
+ schema: ACTION_DEFINITIONS.QUERY_ROWS.schema,
146
+ },
147
+ {
148
+ id: "c",
149
+ type: "ACTION",
150
+ stepId: AutomationActionStepId.LOOP,
151
+ internal: true,
152
+ inputs: loopOpts,
153
+ blockToLoop: "d",
154
+ schema: ACTION_DEFINITIONS.LOOP.schema,
155
+ },
156
+ {
157
+ id: "d",
158
+ type: "ACTION",
159
+ internal: true,
160
+ stepId: AutomationActionStepId.SERVER_LOG,
161
+ inputs: {
162
+ text: "log statement",
163
+ },
164
+ schema: ACTION_DEFINITIONS.SERVER_LOG.schema,
165
+ },
166
+ ],
167
+ trigger: {
168
+ id: "a",
169
+ type: "TRIGGER",
170
+ event: "row:save",
171
+ stepId: AutomationTriggerStepId.ROW_SAVED,
172
+ inputs: {
173
+ tableId,
174
+ },
175
+ schema: TRIGGER_DEFINITIONS.ROW_SAVED.schema,
176
+ },
177
+ },
178
+ }
179
+ return automation as Automation
180
+ }
181
+
119
182
  export function basicRow(tableId: string) {
120
183
  return {
121
184
  name: "Test Contact",
@@ -16,7 +16,6 @@ import { storeLog } from "../automations/logging"
16
16
  import { Automation, AutomationStep, AutomationStatus } from "@budibase/types"
17
17
  import {
18
18
  LoopStep,
19
- LoopStepType,
20
19
  LoopInput,
21
20
  TriggerOutput,
22
21
  AutomationContext,
@@ -26,43 +25,25 @@ import { WorkerCallback } from "./definitions"
26
25
  import { context, logging } from "@budibase/backend-core"
27
26
  import { processObject } from "@budibase/string-templates"
28
27
  import { cloneDeep } from "lodash/fp"
28
+ import * as sdkUtils from "../sdk/utils"
29
29
  import env from "../environment"
30
30
  const FILTER_STEP_ID = actions.ACTION_DEFINITIONS.FILTER.stepId
31
31
  const LOOP_STEP_ID = actions.ACTION_DEFINITIONS.LOOP.stepId
32
32
  const CRON_STEP_ID = triggerDefs.CRON.stepId
33
33
  const STOPPED_STATUS = { success: true, status: AutomationStatus.STOPPED }
34
34
 
35
- function typecastForLooping(loopStep: LoopStep, input: LoopInput) {
36
- if (!input || !input.binding) {
37
- return null
38
- }
39
- try {
40
- switch (loopStep.inputs.option) {
41
- case LoopStepType.ARRAY:
42
- if (typeof input.binding === "string") {
43
- return JSON.parse(input.binding)
44
- }
45
- break
46
- case LoopStepType.STRING:
47
- if (Array.isArray(input.binding)) {
48
- return input.binding.join(",")
49
- }
50
- break
51
- }
52
- } catch (err) {
53
- throw new Error("Unable to cast to correct type")
54
- }
55
- return input.binding
56
- }
57
-
58
35
  function getLoopIterations(loopStep: LoopStep, input: LoopInput) {
59
- const binding = typecastForLooping(loopStep, input)
36
+ const binding = automationUtils.typecastForLooping(loopStep, input)
60
37
  if (!loopStep || !binding) {
61
38
  return 1
62
39
  }
63
- return Array.isArray(binding)
64
- ? binding.length
65
- : automationUtils.stringSplit(binding).length
40
+ if (Array.isArray(binding)) {
41
+ return binding.length
42
+ }
43
+ if (typeof binding === "string") {
44
+ return automationUtils.stringSplit(binding).length
45
+ }
46
+ return 1
66
47
  }
67
48
 
68
49
  /**
@@ -244,6 +225,8 @@ class Orchestrator {
244
225
  }
245
226
 
246
227
  async execute() {
228
+ // this will retrieve from context created at start of thread
229
+ this._context.env = await sdkUtils.getEnvironmentVariables()
247
230
  let automation = this._automation
248
231
  let stopped = false
249
232
  let loopStep: AutomationStep | undefined = undefined
@@ -289,7 +272,7 @@ class Orchestrator {
289
272
 
290
273
  let tempOutput = { items: loopSteps, iterations: iterationCount }
291
274
  try {
292
- newInput.binding = typecastForLooping(
275
+ newInput.binding = automationUtils.typecastForLooping(
293
276
  loopStep as LoopStep,
294
277
  newInput
295
278
  )
@@ -303,13 +286,13 @@ class Orchestrator {
303
286
  break
304
287
  }
305
288
 
306
- let item
289
+ let item = []
307
290
  if (
308
291
  typeof loopStep.inputs.binding === "string" &&
309
292
  loopStep.inputs.option === "String"
310
293
  ) {
311
294
  item = automationUtils.stringSplit(newInput.binding)
312
- } else {
295
+ } else if (Array.isArray(loopStep.inputs.binding)) {
313
296
  item = loopStep.inputs.binding
314
297
  }
315
298
  this._context.steps[loopStepNumber] = {
@@ -442,7 +425,7 @@ class Orchestrator {
442
425
 
443
426
  // Delete the step after the loop step as it's irrelevant, since information is included
444
427
  // in the loop step
445
- if (wasLoopStep) {
428
+ if (wasLoopStep && !loopStep) {
446
429
  this._context.steps.splice(loopStepNumber + 1, 1)
447
430
  wasLoopStep = false
448
431
  }
@@ -461,8 +444,8 @@ class Orchestrator {
461
444
  })
462
445
  this._context.steps[loopStepNumber] = tempOutput
463
446
 
464
- loopSteps = undefined
465
447
  wasLoopStep = true
448
+ loopSteps = []
466
449
  }
467
450
  }
468
451
 
@@ -497,7 +480,11 @@ export const removeStalled = async (job: Job) => {
497
480
  throw new Error("Unable to execute, event doesn't contain app ID.")
498
481
  }
499
482
  await context.doInAppContext(appId, async () => {
500
- const automationOrchestrator = new Orchestrator(job)
501
- await automationOrchestrator.stopCron("stalled")
483
+ const envVars = await sdkUtils.getEnvironmentVariables()
484
+ // put into automation thread for whole context
485
+ await context.doInEnvironmentContext(envVars, async () => {
486
+ const automationOrchestrator = new Orchestrator(job)
487
+ await automationOrchestrator.stopCron("stalled")
488
+ })
502
489
  })
503
490
  }
@@ -1,3 +1,5 @@
1
+ import { EnvironmentVariablesDecrypted } from "@budibase/types"
2
+
1
3
  export type WorkerCallback = (error: any, response?: any) => void
2
4
 
3
5
  export interface QueryEvent {
@@ -9,6 +11,7 @@ export interface QueryEvent {
9
11
  pagination?: any
10
12
  transformer: any
11
13
  queryId: string
14
+ environmentVariables?: Record<string, string>
12
15
  ctx?: any
13
16
  }
14
17
 
@@ -1,5 +1,5 @@
1
1
  import workerFarm from "worker-farm"
2
- import * as env from "../environment"
2
+ import env from "../environment"
3
3
 
4
4
  export const ThreadType = {
5
5
  QUERY: "query",
@@ -6,13 +6,11 @@ import { getIntegration } from "../integrations"
6
6
  import { processStringSync } from "@budibase/string-templates"
7
7
  import { context, cache, auth } from "@budibase/backend-core"
8
8
  import { getGlobalIDFromUserMetadataID } from "../db/utils"
9
+ import sdk from "../sdk"
9
10
  import { cloneDeep } from "lodash/fp"
10
11
 
11
- const { isSQL } = require("../integrations/utils")
12
- const {
13
- enrichQueryFields,
14
- interpolateSQL,
15
- } = require("../integrations/queries/sql")
12
+ import { isSQL } from "../integrations/utils"
13
+ import { interpolateSQL } from "../integrations/queries/sql"
16
14
 
17
15
  class QueryRunner {
18
16
  datasource: any
@@ -62,10 +60,11 @@ class QueryRunner {
62
60
  }
63
61
 
64
62
  if (datasourceClone.config.authConfigs) {
65
- datasourceClone.config.authConfigs =
66
- datasourceClone.config.authConfigs.map((config: any) => {
67
- return enrichQueryFields(config, this.ctx)
68
- })
63
+ const updatedConfigs = []
64
+ for (let config of datasourceClone.config.authConfigs) {
65
+ updatedConfigs.push(await sdk.queries.enrichContext(config, this.ctx))
66
+ }
67
+ datasourceClone.config.authConfigs = updatedConfigs
69
68
  }
70
69
 
71
70
  const integration = new Integration(datasourceClone.config)
@@ -75,12 +74,15 @@ class QueryRunner {
75
74
 
76
75
  // Enrich the parameters with the addition context items.
77
76
  // 'user' is now a reserved variable key in mapping parameters
78
- const enrichedParameters = enrichQueryFields(parameters, this.ctx)
77
+ const enrichedParameters = await sdk.queries.enrichContext(
78
+ parameters,
79
+ this.ctx
80
+ )
79
81
  const enrichedContext = { ...enrichedParameters, ...this.ctx }
80
82
 
81
83
  // Parse global headers
82
84
  if (datasourceClone.config.defaultHeaders) {
83
- datasourceClone.config.defaultHeaders = enrichQueryFields(
85
+ datasourceClone.config.defaultHeaders = await sdk.queries.enrichContext(
84
86
  datasourceClone.config.defaultHeaders,
85
87
  enrichedContext
86
88
  )
@@ -89,9 +91,9 @@ class QueryRunner {
89
91
  let query
90
92
  // handle SQL injections by interpolating the variables
91
93
  if (isSQL(datasourceClone)) {
92
- query = interpolateSQL(fieldsClone, enrichedContext, integration)
94
+ query = await interpolateSQL(fieldsClone, enrichedContext, integration)
93
95
  } else {
94
- query = enrichQueryFields(fieldsClone, enrichedContext)
96
+ query = await sdk.queries.enrichContext(fieldsClone, enrichedContext)
95
97
  }
96
98
 
97
99
  // Add pagination values for REST queries
@@ -166,7 +168,9 @@ class QueryRunner {
166
168
  async runAnotherQuery(queryId: string, parameters: any) {
167
169
  const db = context.getAppDB()
168
170
  const query = await db.get(queryId)
169
- const datasource = await db.get(query.datasourceId)
171
+ const datasource = await sdk.datasources.get(query.datasourceId, {
172
+ enriched: true,
173
+ })
170
174
  return new QueryRunner(
171
175
  {
172
176
  datasource,
@@ -280,7 +284,7 @@ class QueryRunner {
280
284
  }
281
285
 
282
286
  export function execute(input: QueryEvent, callback: WorkerCallback) {
283
- context.doInAppContext(input.appId!, async () => {
287
+ const run = async () => {
284
288
  const Runner = new QueryRunner(input)
285
289
  try {
286
290
  const response = await Runner.execute()
@@ -288,5 +292,14 @@ export function execute(input: QueryEvent, callback: WorkerCallback) {
288
292
  } catch (err) {
289
293
  callback(err)
290
294
  }
295
+ }
296
+ context.doInAppContext(input.appId!, async () => {
297
+ if (input.environmentVariables) {
298
+ return context.doInEnvironmentContext(input.environmentVariables, () => {
299
+ return run()
300
+ })
301
+ } else {
302
+ return run()
303
+ }
291
304
  })
292
305
  }
@@ -0,0 +1,86 @@
1
+ import { budibaseTempDir } from "../budibaseDir"
2
+ import fs from "fs"
3
+ import { join } from "path"
4
+ import { ObjectStoreBuckets } from "../../constants"
5
+ import { updateClientLibrary } from "./clientLibrary"
6
+ import env from "../../environment"
7
+ import { objectStore, context } from "@budibase/backend-core"
8
+ import { TOP_LEVEL_PATH } from "./filesystem"
9
+
10
+ export const NODE_MODULES_PATH = join(TOP_LEVEL_PATH, "node_modules")
11
+
12
+ /**
13
+ * Uploads the latest client library to the object store.
14
+ * @param {string} appId The ID of the app which is being created.
15
+ * @return {Promise<void>} once promise completes app resources should be ready in object store.
16
+ */
17
+ export const createApp = async (appId: string) => {
18
+ await updateClientLibrary(appId)
19
+ }
20
+
21
+ /**
22
+ * Removes all of the assets created for an app in the object store.
23
+ * @param {string} appId The ID of the app which is being deleted.
24
+ * @return {Promise<void>} once promise completes the app resources will be removed from object store.
25
+ */
26
+ export const deleteApp = async (appId: string) => {
27
+ await objectStore.deleteFolder(ObjectStoreBuckets.APPS, `${appId}/`)
28
+ }
29
+
30
+ /**
31
+ * Retrieves component libraries from object store (or tmp symlink if in local)
32
+ */
33
+ export const getComponentLibraryManifest = async (library: string) => {
34
+ const appId = context.getAppId()
35
+ const filename = "manifest.json"
36
+ /* istanbul ignore next */
37
+ // when testing in cypress and so on we need to get the package
38
+ // as the environment may not be fully fleshed out for dev or prod
39
+ if (env.isTest()) {
40
+ library = library.replace("standard-components", "client")
41
+ const lib = library.split("/")[1]
42
+ const path = require.resolve(library).split(lib)[0]
43
+ return require(join(path, lib, filename))
44
+ } else if (env.isDev()) {
45
+ const path = join(NODE_MODULES_PATH, "@budibase", "client", filename)
46
+ // always load from new so that updates are refreshed
47
+ delete require.cache[require.resolve(path)]
48
+ return require(path)
49
+ }
50
+
51
+ if (!appId) {
52
+ throw new Error("No app ID found - cannot get component libraries")
53
+ }
54
+
55
+ let resp
56
+ let path
57
+ try {
58
+ // Try to load the manifest from the new file location
59
+ path = join(appId, filename)
60
+ resp = await objectStore.retrieve(ObjectStoreBuckets.APPS, path)
61
+ } catch (error) {
62
+ console.error(
63
+ `component-manifest-objectstore=failed appId=${appId} path=${path}`,
64
+ error
65
+ )
66
+ // Fallback to loading it from the old location for old apps
67
+ path = join(appId, "node_modules", library, "package", filename)
68
+ resp = await objectStore.retrieve(ObjectStoreBuckets.APPS, path)
69
+ }
70
+ if (typeof resp !== "string") {
71
+ resp = resp.toString("utf8")
72
+ }
73
+ return JSON.parse(resp)
74
+ }
75
+
76
+ /**
77
+ * Given a set of app IDs makes sure file system is cleared of any of their temp info.
78
+ */
79
+ export const cleanup = (appIds: string[]) => {
80
+ for (let appId of appIds) {
81
+ const path = join(budibaseTempDir(), appId)
82
+ if (fs.existsSync(path)) {
83
+ fs.rmdirSync(path, { recursive: true })
84
+ }
85
+ }
86
+ }
@@ -4,7 +4,7 @@ import fs from "fs"
4
4
  import { objectStore } from "@budibase/backend-core"
5
5
  import { resolve } from "../centralPath"
6
6
  import env from "../../environment"
7
- const TOP_LEVEL_PATH = join(__dirname, "..", "..", "..")
7
+ import { TOP_LEVEL_PATH } from "./filesystem"
8
8
 
9
9
  /**
10
10
  * Client library paths in the object store: