@budibase/server 2.2.3 → 2.2.4-alpha.1

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.77b82b83.js} +185 -185
  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
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.getDatasourcePlugin = exports.getPluginMetadata = void 0;
13
+ const { budibaseTempDir } = require("../budibaseDir");
14
+ const fs = require("fs");
15
+ const { join } = require("path");
16
+ const backend_core_1 = require("@budibase/backend-core");
17
+ const DATASOURCE_PATH = join(budibaseTempDir(), "datasource");
18
+ const getPluginMetadata = (path) => __awaiter(void 0, void 0, void 0, function* () {
19
+ let metadata = {};
20
+ try {
21
+ const pkg = fs.readFileSync(join(path, "package.json"), "utf8");
22
+ const schema = fs.readFileSync(join(path, "schema.json"), "utf8");
23
+ metadata.schema = JSON.parse(schema);
24
+ metadata.package = JSON.parse(pkg);
25
+ if (!metadata.package.name ||
26
+ !metadata.package.version ||
27
+ !metadata.package.description) {
28
+ throw new Error("package.json is missing one of 'name', 'version' or 'description'.");
29
+ }
30
+ }
31
+ catch (err) {
32
+ throw new Error(`Unable to process schema.json/package.json in plugin. ${err.message}`);
33
+ }
34
+ return { metadata, directory: path };
35
+ });
36
+ exports.getPluginMetadata = getPluginMetadata;
37
+ const getDatasourcePlugin = (plugin) => __awaiter(void 0, void 0, void 0, function* () {
38
+ var _a;
39
+ const hash = (_a = plugin.schema) === null || _a === void 0 ? void 0 : _a.hash;
40
+ if (!fs.existsSync(DATASOURCE_PATH)) {
41
+ fs.mkdirSync(DATASOURCE_PATH);
42
+ }
43
+ const filename = join(DATASOURCE_PATH, plugin.name);
44
+ const metadataName = `${filename}.bbmetadata`;
45
+ if (fs.existsSync(filename)) {
46
+ const currentHash = fs.readFileSync(metadataName, "utf8");
47
+ // if hash is the same return the file, otherwise remove it and re-download
48
+ if (currentHash === hash) {
49
+ return require(filename);
50
+ }
51
+ else {
52
+ console.log(`Updating plugin: ${plugin.name}`);
53
+ delete require.cache[require.resolve(filename)];
54
+ fs.unlinkSync(filename);
55
+ }
56
+ }
57
+ const pluginKey = backend_core_1.objectStore.getPluginJSKey(plugin);
58
+ const pluginJs = yield backend_core_1.objectStore.retrieve(backend_core_1.objectStore.ObjectStoreBuckets.PLUGINS, pluginKey);
59
+ fs.writeFileSync(filename, pluginJs);
60
+ fs.writeFileSync(metadataName, hash);
61
+ return require(filename);
62
+ });
63
+ exports.getDatasourcePlugin = getDatasourcePlugin;
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.downloadTemplate = exports.getTemplateStream = void 0;
13
+ const fs = require("fs");
14
+ const { join } = require("path");
15
+ const constants_1 = require("../../constants");
16
+ const backend_core_1 = require("@budibase/backend-core");
17
+ /**
18
+ * This function manages temporary template files which are stored by Koa.
19
+ * @param {Object} template The template object retrieved from the Koa context object.
20
+ * @returns {Object} Returns an fs read stream which can be loaded into the database.
21
+ */
22
+ const getTemplateStream = (template) => __awaiter(void 0, void 0, void 0, function* () {
23
+ if (template.file) {
24
+ return fs.createReadStream(template.file.path);
25
+ }
26
+ else {
27
+ const [type, name] = template.key.split("/");
28
+ const tmpPath = yield (0, exports.downloadTemplate)(type, name);
29
+ return fs.createReadStream(join(tmpPath, name, "db", "dump.txt"));
30
+ }
31
+ });
32
+ exports.getTemplateStream = getTemplateStream;
33
+ /**
34
+ * Retrieves a template and pipes it to minio as well as making it available temporarily.
35
+ * @param {string} type The type of template which is to be retrieved.
36
+ * @param name
37
+ * @return {Promise<*>}
38
+ */
39
+ const downloadTemplate = (type, name) => __awaiter(void 0, void 0, void 0, function* () {
40
+ const DEFAULT_TEMPLATES_BUCKET = "prod-budi-templates.s3-eu-west-1.amazonaws.com";
41
+ const templateUrl = `https://${DEFAULT_TEMPLATES_BUCKET}/templates/${type}/${name}.tar.gz`;
42
+ return backend_core_1.objectStore.downloadTarball(templateUrl, constants_1.ObjectStoreBuckets.TEMPLATES, type);
43
+ });
44
+ exports.downloadTemplate = downloadTemplate;
@@ -12,9 +12,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
12
12
  return (mod && mod.__esModule) ? mod : { "default": mod };
13
13
  };
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.isQsTrue = exports.convertBookmark = exports.formatBytes = exports.stringToReadStream = exports.escapeDangerousCharacters = exports.deleteEntityMetadata = exports.saveEntityMetadata = exports.updateEntityMetadata = exports.attachmentsRelativeURL = exports.clientLibraryPath = exports.objectStoreUrl = exports.checkSlashesInUrl = exports.removeFromArray = exports.NUMBER_REGEX = exports.isDev = exports.wait = void 0;
15
+ exports.isQsTrue = exports.convertBookmark = exports.formatBytes = exports.stringToReadStream = exports.escapeDangerousCharacters = exports.deleteEntityMetadata = exports.saveEntityMetadata = exports.updateEntityMetadata = exports.checkSlashesInUrl = exports.removeFromArray = exports.NUMBER_REGEX = exports.isDev = exports.wait = void 0;
16
16
  const environment_1 = __importDefault(require("../environment"));
17
- const constants_1 = require("../constants");
18
17
  const backend_core_1 = require("@budibase/backend-core");
19
18
  const utils_1 = require("../db/utils");
20
19
  const stream_1 = __importDefault(require("stream"));
@@ -43,48 +42,6 @@ function checkSlashesInUrl(url) {
43
42
  return url.replace(/(https?:\/\/)|(\/)+/g, "$1$2");
44
43
  }
45
44
  exports.checkSlashesInUrl = checkSlashesInUrl;
46
- /**
47
- * Gets the address of the object store, depending on whether self hosted or in cloud.
48
- * @return {string} The base URL of the object store (MinIO or S3).
49
- */
50
- function objectStoreUrl() {
51
- if (environment_1.default.SELF_HOSTED || environment_1.default.MINIO_URL) {
52
- // can use a relative url for this as all goes through the proxy (this is hosted in minio)
53
- return constants_1.OBJ_STORE_DIRECTORY;
54
- }
55
- else {
56
- return environment_1.default.CDN_URL;
57
- }
58
- }
59
- exports.objectStoreUrl = objectStoreUrl;
60
- /**
61
- * In production the client library is stored in the object store, however in development
62
- * we use the symlinked version produced by lerna, located in node modules. We link to this
63
- * via a specific endpoint (under /api/assets/client).
64
- * @param {string} appId In production we need the appId to look up the correct bucket, as the
65
- * version of the client lib may differ between apps.
66
- * @param {string} version The version to retrieve.
67
- * @return {string} The URL to be inserted into appPackage response or server rendered
68
- * app index file.
69
- */
70
- function clientLibraryPath(appId, version) {
71
- if (environment_1.default.isProd()) {
72
- let url = `${objectStoreUrl()}/${backend_core_1.objectStore.sanitizeKey(appId)}/budibase-client.js`;
73
- // append app version to bust the cache
74
- if (version) {
75
- url += `?v=${version}`;
76
- }
77
- return url;
78
- }
79
- else {
80
- return `/api/assets/client`;
81
- }
82
- }
83
- exports.clientLibraryPath = clientLibraryPath;
84
- function attachmentsRelativeURL(attachmentKey) {
85
- return checkSlashesInUrl(`${objectStoreUrl()}/${attachmentKey}`);
86
- }
87
- exports.attachmentsRelativeURL = attachmentsRelativeURL;
88
45
  function updateEntityMetadata(type, entityId, updateFn) {
89
46
  return __awaiter(this, void 0, void 0, function* () {
90
47
  const db = backend_core_1.context.getAppDB();
@@ -38,7 +38,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
38
38
  exports.cleanupAttachments = exports.outputProcessing = exports.inputProcessing = exports.coerce = exports.processAutoColumn = void 0;
39
39
  const linkRows = __importStar(require("../../db/linkedRows"));
40
40
  const constants_1 = require("../../constants");
41
- const index_1 = require("../index");
42
41
  const utils_1 = require("./utils");
43
42
  const constants_2 = require("../../constants");
44
43
  const backend_core_1 = require("@budibase/backend-core");
@@ -172,6 +171,15 @@ function inputProcessing(user, table, row, opts) {
172
171
  else {
173
172
  clonedRow[key] = coerce(value, field.type);
174
173
  }
174
+ // remove any attachment urls, they are generated on read
175
+ if (field.type === constants_1.FieldTypes.ATTACHMENT) {
176
+ const attachments = clonedRow[key];
177
+ if (attachments === null || attachments === void 0 ? void 0 : attachments.length) {
178
+ attachments.forEach((attachment) => {
179
+ delete attachment.url;
180
+ });
181
+ }
182
+ }
175
183
  }
176
184
  if (!clonedRow._id || !clonedRow._rev) {
177
185
  clonedRow._id = row._id;
@@ -201,7 +209,7 @@ function outputProcessing(table, rows, opts = { squash: true }) {
201
209
  let enriched = yield linkRows.attachFullLinkedDocs(table, rows);
202
210
  // process formulas
203
211
  enriched = (0, utils_1.processFormulas)(table, enriched, { dynamic: true });
204
- // update the attachments URL depending on hosting
212
+ // set the attachments URLs
205
213
  for (let [property, column] of Object.entries(table.schema)) {
206
214
  if (column.type === constants_1.FieldTypes.ATTACHMENT) {
207
215
  for (let row of enriched) {
@@ -209,7 +217,7 @@ function outputProcessing(table, rows, opts = { squash: true }) {
209
217
  continue;
210
218
  }
211
219
  row[property].forEach((attachment) => {
212
- attachment.url = (0, index_1.attachmentsRelativeURL)(attachment.key);
220
+ attachment.url = backend_core_1.objectStore.getAppFileUrl(attachment.key);
213
221
  });
214
222
  }
215
223
  }
@@ -269,7 +277,7 @@ function cleanupAttachments(table, { row, rows, oldRow, oldTable, }) {
269
277
  }
270
278
  }
271
279
  if (files.length > 0) {
272
- return backend_core_1.objectStore.deleteFiles(constants_2.ObjectStoreBuckets.APPS, files);
280
+ yield backend_core_1.objectStore.deleteFiles(constants_2.ObjectStoreBuckets.APPS, files);
273
281
  }
274
282
  });
275
283
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@budibase/server",
3
3
  "email": "hi@budibase.com",
4
- "version": "2.2.3",
4
+ "version": "2.2.4-alpha.1",
5
5
  "description": "Budibase Web Server",
6
6
  "main": "src/index.ts",
7
7
  "repository": {
@@ -43,11 +43,11 @@
43
43
  "license": "GPL-3.0",
44
44
  "dependencies": {
45
45
  "@apidevtools/swagger-parser": "10.0.3",
46
- "@budibase/backend-core": "^2.2.3",
47
- "@budibase/client": "^2.2.3",
48
- "@budibase/pro": "2.2.2",
49
- "@budibase/string-templates": "^2.2.3",
50
- "@budibase/types": "^2.2.3",
46
+ "@budibase/backend-core": "2.2.4-alpha.1",
47
+ "@budibase/client": "2.2.4-alpha.1",
48
+ "@budibase/pro": "2.2.3",
49
+ "@budibase/string-templates": "2.2.4-alpha.1",
50
+ "@budibase/types": "2.2.4-alpha.1",
51
51
  "@bull-board/api": "3.7.0",
52
52
  "@bull-board/koa": "3.9.4",
53
53
  "@elastic/elasticsearch": "7.10.0",
@@ -130,13 +130,15 @@
130
130
  "@types/ioredis": "4.28.10",
131
131
  "@types/jest": "27.5.1",
132
132
  "@types/koa": "2.13.4",
133
- "@types/koa__router": "8.0.11",
133
+ "@types/koa__router": "8.0.8",
134
134
  "@types/lodash": "4.14.180",
135
135
  "@types/node": "14.18.20",
136
136
  "@types/node-fetch": "2.6.1",
137
137
  "@types/oracledb": "5.2.2",
138
138
  "@types/pouchdb": "6.4.0",
139
139
  "@types/redis": "4.0.11",
140
+ "@types/server-destroy": "1.0.1",
141
+ "@types/tar": "6.1.3",
140
142
  "@typescript-eslint/parser": "5.45.0",
141
143
  "apidoc": "0.50.4",
142
144
  "babel-jest": "27.5.1",
@@ -165,5 +167,5 @@
165
167
  "optionalDependencies": {
166
168
  "oracledb": "5.3.0"
167
169
  },
168
- "gitHead": "1fee98510b81d27546acc7fa1dbcfb89784c8802"
170
+ "gitHead": "b785582a227ce0c3c8d68c37b46b47a0d43adbfe"
169
171
  }
@@ -23,21 +23,18 @@ import {
23
23
  errors,
24
24
  events,
25
25
  migrations,
26
+ objectStore,
26
27
  } from "@budibase/backend-core"
27
28
  import { USERS_TABLE_SCHEMA } from "../../constants"
28
29
  import { buildDefaultDocs } from "../../db/defaultData/datasource_bb_default"
29
30
  import { removeAppFromUserRoles } from "../../utilities/workerRequests"
30
- import {
31
- clientLibraryPath,
32
- stringToReadStream,
33
- isQsTrue,
34
- } from "../../utilities"
31
+ import { stringToReadStream, isQsTrue } from "../../utilities"
35
32
  import { getLocksById } from "../../utilities/redis"
36
33
  import {
37
34
  updateClientLibrary,
38
35
  backupClientLibrary,
39
36
  revertClientLibrary,
40
- } from "../../utilities/fileSystem/clientLibrary"
37
+ } from "../../utilities/fileSystem"
41
38
  import { cleanupAutomations } from "../../automations/utils"
42
39
  import { checkAppMetadata } from "../../automations/logging"
43
40
  import { getUniqueRows } from "../../utilities/usageQuota/rows"
@@ -49,9 +46,9 @@ import {
49
46
  MigrationType,
50
47
  BBContext,
51
48
  Database,
49
+ UserCtx,
52
50
  } from "@budibase/types"
53
51
  import { BASE_LAYOUT_PROP_IDS } from "../../constants/layouts"
54
- import { enrichPluginURLs } from "../../utilities/plugins"
55
52
  import sdk from "../../sdk"
56
53
 
57
54
  // utility function, need to do away with this
@@ -204,27 +201,34 @@ export async function fetchAppDefinition(ctx: BBContext) {
204
201
  }
205
202
  }
206
203
 
207
- export async function fetchAppPackage(ctx: BBContext) {
204
+ export async function fetchAppPackage(ctx: UserCtx) {
208
205
  const db = context.getAppDB()
209
206
  let application = await db.get(DocumentType.APP_METADATA)
210
207
  const layouts = await getLayouts()
211
208
  let screens = await getScreens()
212
209
 
213
210
  // Enrich plugin URLs
214
- application.usedPlugins = enrichPluginURLs(application.usedPlugins)
211
+ application.usedPlugins = objectStore.enrichPluginURLs(
212
+ application.usedPlugins
213
+ )
215
214
 
216
215
  // Only filter screens if the user is not a builder
217
- if (!(ctx.user?.builder && ctx.user.builder.global)) {
216
+ if (!(ctx.user.builder && ctx.user.builder.global)) {
218
217
  const userRoleId = getUserRoleId(ctx)
219
218
  const accessController = new roles.AccessController()
220
219
  screens = await accessController.checkScreensAccess(screens, userRoleId)
221
220
  }
222
221
 
222
+ const clientLibPath = objectStore.clientLibraryUrl(
223
+ ctx.params.appId,
224
+ application.version
225
+ )
226
+
223
227
  ctx.body = {
224
228
  application,
225
229
  screens,
226
230
  layouts,
227
- clientLibPath: clientLibraryPath(ctx.params.appId, application.version),
231
+ clientLibPath,
228
232
  }
229
233
  }
230
234
 
@@ -370,7 +374,7 @@ async function appPostCreate(ctx: BBContext, app: App) {
370
374
  if (err.code && err.code === errors.codes.USAGE_LIMIT_EXCEEDED) {
371
375
  // this import resulted in row usage exceeding the quota
372
376
  // delete the app
373
- // skip pre- and post-steps as no rows have been added to quotas yet
377
+ // skip pre and post-steps as no rows have been added to quotas yet
374
378
  ctx.params.appId = app.appId
375
379
  await destroyApp(ctx)
376
380
  }
@@ -3,7 +3,7 @@ import { InternalTables } from "../../db/utils"
3
3
  import { getFullUser } from "../../utilities/users"
4
4
  import { roles, context } from "@budibase/backend-core"
5
5
  import { groups } from "@budibase/pro"
6
- import { ContextUser, User, Row } from "@budibase/types"
6
+ import { ContextUser, User, Row, UserCtx } from "@budibase/types"
7
7
 
8
8
  const PUBLIC_ROLE = roles.BUILTIN_ROLE_IDS.PUBLIC
9
9
 
@@ -16,7 +16,7 @@ const addSessionAttributesToUser = (ctx: any) => {
16
16
  }
17
17
  }
18
18
 
19
- export async function fetchSelf(ctx: any) {
19
+ export async function fetchSelf(ctx: UserCtx) {
20
20
  let userId = ctx.user.userId || ctx.user._id
21
21
  /* istanbul ignore next */
22
22
  if (!userId || !ctx.isAuthenticated) {
@@ -5,8 +5,8 @@ import { stringToReadStream } from "../../utilities"
5
5
  import { getDocParams, DocumentType, isDevAppID } from "../../db/utils"
6
6
  import { create } from "./application"
7
7
  import { join } from "path"
8
- import { App, BBContext, Database } from "@budibase/types"
9
8
  import sdk from "../../sdk"
9
+ import { App, Ctx, Database } from "@budibase/types"
10
10
 
11
11
  async function createApp(appName: string, appDirectory: string) {
12
12
  const ctx = {
@@ -35,7 +35,7 @@ async function getAllDocType(db: Database, docType: string) {
35
35
  return response.rows.map(row => row.doc)
36
36
  }
37
37
 
38
- export async function exportApps(ctx: BBContext) {
38
+ export async function exportApps(ctx: Ctx) {
39
39
  if (env.SELF_HOSTED || !env.MULTI_TENANCY) {
40
40
  ctx.throw(400, "Exporting only allowed in multi-tenant cloud environments.")
41
41
  }
@@ -65,13 +65,13 @@ async function checkHasBeenImported() {
65
65
  return apps.length !== 0
66
66
  }
67
67
 
68
- export async function hasBeenImported(ctx: BBContext) {
68
+ export async function hasBeenImported(ctx: Ctx) {
69
69
  ctx.body = {
70
70
  imported: await checkHasBeenImported(),
71
71
  }
72
72
  }
73
73
 
74
- export async function importApps(ctx: BBContext) {
74
+ export async function importApps(ctx: Ctx) {
75
75
  if (!env.SELF_HOSTED || env.MULTI_TENANCY) {
76
76
  ctx.throw(400, "Importing only allowed in self hosted environments.")
77
77
  }
@@ -82,12 +82,16 @@ export async function importApps(ctx: BBContext) {
82
82
  "Import file is required and environment must be fresh to import apps."
83
83
  )
84
84
  }
85
- if (ctx.request.files.importFile.type !== "application/gzip") {
85
+ const file = ctx.request.files.importFile
86
+ if (Array.isArray(file)) {
87
+ ctx.throw(400, "Single file is required")
88
+ }
89
+ if (file.type !== "application/gzip") {
86
90
  ctx.throw(400, "Import file must be a gzipped tarball.")
87
91
  }
88
92
 
89
93
  // initially get all the app databases out of the tarball
90
- const tmpPath = sdk.backups.untarFile(ctx.request.files.importFile)
94
+ const tmpPath = sdk.backups.untarFile(file)
91
95
  const globalDbImport = sdk.backups.getGlobalDBFile(tmpPath)
92
96
  const appNames = sdk.backups.getListOfAppsInMulti(tmpPath)
93
97
 
@@ -1,10 +1,14 @@
1
1
  import { npmUpload, urlUpload, githubUpload, fileUpload } from "./uploaders"
2
- import { plugins as pluginCore, tenancy } from "@budibase/backend-core"
3
- import { PluginType, FileType, PluginSource } from "@budibase/types"
2
+ import {
3
+ plugins as pluginCore,
4
+ db as dbCore,
5
+ tenancy,
6
+ objectStore,
7
+ } from "@budibase/backend-core"
8
+ import { PluginType, FileType, PluginSource, Plugin } from "@budibase/types"
4
9
  import env from "../../../environment"
5
10
  import { ClientAppSocket } from "../../../websocket"
6
- import { db as dbCore } from "@budibase/backend-core"
7
- import { plugins } from "@budibase/pro"
11
+ import { sdk as pro } from "@budibase/pro"
8
12
 
9
13
  export async function getPlugins(type?: PluginType) {
10
14
  const db = tenancy.getGlobalDB()
@@ -13,9 +17,10 @@ export async function getPlugins(type?: PluginType) {
13
17
  include_docs: true,
14
18
  })
15
19
  )
16
- const plugins = response.rows.map((row: any) => row.doc)
20
+ let plugins = response.rows.map((row: any) => row.doc) as Plugin[]
21
+ plugins = objectStore.enrichPluginURLs(plugins)
17
22
  if (type) {
18
- return plugins.filter((plugin: any) => plugin.schema?.type === type)
23
+ return plugins.filter((plugin: Plugin) => plugin.schema?.type === type)
19
24
  } else {
20
25
  return plugins
21
26
  }
@@ -84,7 +89,7 @@ export async function create(ctx: any) {
84
89
  )
85
90
  }
86
91
 
87
- const doc = await plugins.storePlugin(metadata, directory, source)
92
+ const doc = await pro.plugins.storePlugin(metadata, directory, source)
88
93
 
89
94
  ClientAppSocket.emit("plugins-update", { name, hash: doc.hash })
90
95
  ctx.body = {
@@ -107,7 +112,7 @@ export async function destroy(ctx: any) {
107
112
  const { pluginId } = ctx.params
108
113
 
109
114
  try {
110
- await plugins.deletePlugin(pluginId)
115
+ await pro.plugins.deletePlugin(pluginId)
111
116
 
112
117
  ctx.body = { message: `Plugin ${ctx.params.pluginId} deleted.` }
113
118
  } catch (err: any) {
@@ -127,7 +132,7 @@ export async function processUploadedPlugin(
127
132
  throw new Error("Only component plugins are supported outside of self-host")
128
133
  }
129
134
 
130
- const doc = await plugins.storePlugin(metadata, directory, source)
135
+ const doc = await pro.plugins.storePlugin(metadata, directory, source)
131
136
  ClientAppSocket.emit("plugin-update", { name: doc.name, hash: doc.hash })
132
137
  return doc
133
138
  }
@@ -21,10 +21,10 @@ import { getDatasourceAndQuery } from "./utils"
21
21
  import { FieldTypes, RelationshipTypes } from "../../../constants"
22
22
  import { breakExternalTableId, isSQL } from "../../../integrations/utils"
23
23
  import { processObjectSync } from "@budibase/string-templates"
24
- // @ts-ignore
25
24
  import { cloneDeep } from "lodash/fp"
26
25
  import { processFormulas, processDates } from "../../../utilities/rowProcessor"
27
26
  import { context } from "@budibase/backend-core"
27
+ import { removeKeyNumbering } from "./utils"
28
28
 
29
29
  export interface ManyRelationship {
30
30
  tableId?: string
@@ -55,15 +55,21 @@ function buildFilters(
55
55
  let idCopy: undefined | string | any[] = cloneDeep(id)
56
56
  if (filters) {
57
57
  // need to map over the filters and make sure the _id field isn't present
58
- for (let filter of Object.values(filters)) {
59
- if (filter._id && primary) {
60
- const parts = breakRowIdField(filter._id)
61
- for (let field of primary) {
62
- filter[field] = parts.shift()
58
+ let prefix = 1
59
+ for (let operator of Object.values(filters)) {
60
+ for (let field of Object.keys(operator || {})) {
61
+ if (removeKeyNumbering(field) === "_id") {
62
+ if (primary) {
63
+ const parts = breakRowIdField(operator[field])
64
+ for (let field of primary) {
65
+ operator[`${prefix}:${field}`] = parts.shift()
66
+ }
67
+ prefix++
68
+ }
69
+ // make sure this field doesn't exist on any filter
70
+ delete operator[field]
63
71
  }
64
72
  }
65
- // make sure this field doesn't exist on any filter
66
- delete filter._id
67
73
  }
68
74
  }
69
75
  // there is no id, just use the user provided filters