@budibase/server 1.0.49-alpha.1 → 1.0.49-alpha.13

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 (353) hide show
  1. package/__mocks__/arangojs.ts +1 -1
  2. package/__mocks__/aws-sdk.ts +4 -4
  3. package/__mocks__/mongodb.ts +4 -5
  4. package/__mocks__/mssql.ts +3 -3
  5. package/__mocks__/node-fetch.ts +2 -1
  6. package/__mocks__/pg.ts +3 -5
  7. package/builder/assets/{index.ba78c49d.css → index.83c0944f.css} +1 -1
  8. package/builder/assets/{index.ed1cf508.js → index.f686d3cd.js} +184 -184
  9. package/builder/index.html +2 -2
  10. package/coverage/clover.xml +2656 -2712
  11. package/coverage/coverage-final.json +104 -105
  12. package/coverage/lcov-report/api/controllers/analytics.js.html +1 -1
  13. package/coverage/lcov-report/api/controllers/apikeys.js.html +1 -1
  14. package/coverage/lcov-report/api/controllers/application.js.html +157 -136
  15. package/coverage/lcov-report/api/controllers/auth.js.html +11 -14
  16. package/coverage/lcov-report/api/controllers/automation.js.html +39 -69
  17. package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
  18. package/coverage/lcov-report/api/controllers/cloud.js.html +8 -11
  19. package/coverage/lcov-report/api/controllers/component.js.html +10 -13
  20. package/coverage/lcov-report/api/controllers/datasource.js.html +31 -37
  21. package/coverage/lcov-report/api/controllers/dev.js.html +6 -6
  22. package/coverage/lcov-report/api/controllers/index.html +69 -54
  23. package/coverage/lcov-report/api/controllers/integration.js.html +1 -1
  24. package/coverage/lcov-report/api/controllers/layout.js.html +9 -9
  25. package/coverage/lcov-report/api/controllers/metadata.js.html +6 -21
  26. package/coverage/lcov-report/{migrations/usageQuotas/syncApps.js.html → api/controllers/migrations.js.html} +30 -45
  27. package/coverage/lcov-report/api/controllers/permission.js.html +19 -19
  28. package/coverage/lcov-report/api/controllers/query/index.html +10 -10
  29. package/coverage/lcov-report/api/controllers/query/index.js.html +38 -35
  30. package/coverage/lcov-report/api/controllers/query/validation.js.html +6 -6
  31. package/coverage/lcov-report/api/controllers/role.js.html +16 -16
  32. package/coverage/lcov-report/api/controllers/routing.js.html +7 -10
  33. package/coverage/lcov-report/api/controllers/row/external.js.html +48 -141
  34. package/coverage/lcov-report/api/controllers/row/index.html +28 -28
  35. package/coverage/lcov-report/api/controllers/row/index.js.html +13 -13
  36. package/coverage/lcov-report/api/controllers/row/internal.js.html +60 -105
  37. package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +25 -31
  38. package/coverage/lcov-report/api/controllers/row/staticFormula.js.html +21 -24
  39. package/coverage/lcov-report/api/controllers/row/utils.js.html +27 -24
  40. package/coverage/lcov-report/api/controllers/screen.js.html +15 -21
  41. package/coverage/lcov-report/api/controllers/script.js.html +4 -4
  42. package/coverage/lcov-report/api/controllers/table/bulkFormula.js.html +27 -57
  43. package/coverage/lcov-report/api/controllers/table/external.js.html +25 -34
  44. package/coverage/lcov-report/api/controllers/table/index.html +37 -37
  45. package/coverage/lcov-report/api/controllers/table/index.js.html +20 -20
  46. package/coverage/lcov-report/api/controllers/table/internal.js.html +45 -54
  47. package/coverage/lcov-report/api/controllers/table/utils.js.html +67 -103
  48. package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
  49. package/coverage/lcov-report/api/controllers/user.js.html +43 -52
  50. package/coverage/lcov-report/api/controllers/view/exporters.js.html +4 -4
  51. package/coverage/lcov-report/api/controllers/view/index.html +16 -16
  52. package/coverage/lcov-report/api/controllers/view/index.js.html +27 -33
  53. package/coverage/lcov-report/api/controllers/view/utils.js.html +35 -20
  54. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +7 -7
  55. package/coverage/lcov-report/api/controllers/webhook.js.html +34 -28
  56. package/coverage/lcov-report/api/index.html +1 -1
  57. package/coverage/lcov-report/api/index.js.html +3 -3
  58. package/coverage/lcov-report/api/routes/analytics.js.html +1 -1
  59. package/coverage/lcov-report/api/routes/apikeys.js.html +1 -1
  60. package/coverage/lcov-report/api/routes/application.js.html +1 -1
  61. package/coverage/lcov-report/api/routes/auth.js.html +1 -1
  62. package/coverage/lcov-report/api/routes/automation.js.html +1 -1
  63. package/coverage/lcov-report/api/routes/backup.js.html +1 -1
  64. package/coverage/lcov-report/api/routes/cloud.js.html +1 -1
  65. package/coverage/lcov-report/api/routes/component.js.html +1 -1
  66. package/coverage/lcov-report/api/routes/datasource.js.html +1 -1
  67. package/coverage/lcov-report/api/routes/deploy.js.html +1 -1
  68. package/coverage/lcov-report/api/routes/dev.js.html +1 -1
  69. package/coverage/lcov-report/api/routes/index.html +22 -7
  70. package/coverage/lcov-report/api/routes/index.js.html +10 -4
  71. package/coverage/lcov-report/api/routes/integration.js.html +1 -1
  72. package/coverage/lcov-report/api/routes/layout.js.html +1 -1
  73. package/coverage/lcov-report/api/routes/metadata.js.html +1 -1
  74. package/coverage/lcov-report/{migrations/usageQuotas/index.js.html → api/routes/migrations.js.html} +25 -55
  75. package/coverage/lcov-report/api/routes/permission.js.html +1 -1
  76. package/coverage/lcov-report/api/routes/query.js.html +1 -1
  77. package/coverage/lcov-report/api/routes/role.js.html +1 -1
  78. package/coverage/lcov-report/api/routes/routing.js.html +1 -1
  79. package/coverage/lcov-report/api/routes/row.js.html +1 -1
  80. package/coverage/lcov-report/api/routes/screen.js.html +1 -1
  81. package/coverage/lcov-report/api/routes/script.js.html +1 -1
  82. package/coverage/lcov-report/api/routes/static.js.html +1 -1
  83. package/coverage/lcov-report/api/routes/table.js.html +1 -1
  84. package/coverage/lcov-report/api/routes/templates.js.html +1 -1
  85. package/coverage/lcov-report/api/routes/user.js.html +1 -1
  86. package/coverage/lcov-report/api/routes/view.js.html +1 -1
  87. package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
  88. package/coverage/lcov-report/automations/actions.js.html +24 -24
  89. package/coverage/lcov-report/automations/automationUtils.js.html +7 -10
  90. package/coverage/lcov-report/automations/bullboard.js.html +16 -16
  91. package/coverage/lcov-report/automations/index.html +18 -18
  92. package/coverage/lcov-report/automations/index.js.html +1 -1
  93. package/coverage/lcov-report/automations/steps/bash.js.html +6 -6
  94. package/coverage/lcov-report/automations/steps/createRow.js.html +7 -10
  95. package/coverage/lcov-report/automations/steps/delay.js.html +4 -4
  96. package/coverage/lcov-report/automations/steps/deleteRow.js.html +7 -7
  97. package/coverage/lcov-report/automations/steps/discord.js.html +7 -7
  98. package/coverage/lcov-report/automations/steps/executeQuery.js.html +6 -6
  99. package/coverage/lcov-report/automations/steps/executeScript.js.html +6 -6
  100. package/coverage/lcov-report/automations/steps/filter.js.html +7 -7
  101. package/coverage/lcov-report/automations/steps/index.html +1 -1
  102. package/coverage/lcov-report/automations/steps/integromat.js.html +5 -5
  103. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +8 -8
  104. package/coverage/lcov-report/automations/steps/queryRows.js.html +10 -10
  105. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +5 -5
  106. package/coverage/lcov-report/automations/steps/serverLog.js.html +3 -3
  107. package/coverage/lcov-report/automations/steps/slack.js.html +5 -5
  108. package/coverage/lcov-report/automations/steps/updateRow.js.html +7 -7
  109. package/coverage/lcov-report/automations/steps/utils.js.html +3 -3
  110. package/coverage/lcov-report/automations/steps/zapier.js.html +5 -5
  111. package/coverage/lcov-report/automations/triggerInfo/app.js.html +2 -2
  112. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +2 -2
  113. package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
  114. package/coverage/lcov-report/automations/triggerInfo/index.js.html +8 -8
  115. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +2 -2
  116. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +2 -2
  117. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +2 -2
  118. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +2 -2
  119. package/coverage/lcov-report/automations/triggers.js.html +61 -55
  120. package/coverage/lcov-report/automations/utils.js.html +54 -42
  121. package/coverage/lcov-report/constants/index.html +1 -1
  122. package/coverage/lcov-report/constants/index.js.html +26 -26
  123. package/coverage/lcov-report/constants/layouts.js.html +5 -5
  124. package/coverage/lcov-report/constants/screens.js.html +4 -4
  125. package/coverage/lcov-report/db/client.js.html +18 -18
  126. package/coverage/lcov-report/db/inMemoryView.js.html +7 -7
  127. package/coverage/lcov-report/db/index.html +1 -1
  128. package/coverage/lcov-report/db/index.js.html +3 -3
  129. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +15 -27
  130. package/coverage/lcov-report/db/linkedRows/index.html +27 -27
  131. package/coverage/lcov-report/db/linkedRows/index.js.html +40 -82
  132. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +40 -40
  133. package/coverage/lcov-report/db/newid.js.html +4 -4
  134. package/coverage/lcov-report/db/utils.js.html +74 -74
  135. package/coverage/lcov-report/events/AutomationEmitter.js.html +1 -1
  136. package/coverage/lcov-report/events/index.html +1 -1
  137. package/coverage/lcov-report/events/index.js.html +5 -5
  138. package/coverage/lcov-report/events/utils.js.html +3 -3
  139. package/coverage/lcov-report/index.html +97 -112
  140. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
  141. package/coverage/lcov-report/integrations/tests/index.html +1 -1
  142. package/coverage/lcov-report/middleware/appInfo.js.html +1 -1
  143. package/coverage/lcov-report/middleware/authorized.js.html +21 -15
  144. package/coverage/lcov-report/middleware/builder.js.html +3 -3
  145. package/coverage/lcov-report/middleware/currentapp.js.html +72 -60
  146. package/coverage/lcov-report/middleware/index.html +28 -28
  147. package/coverage/lcov-report/middleware/joi-validator.js.html +3 -3
  148. package/coverage/lcov-report/middleware/resourceId.js.html +1 -1
  149. package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
  150. package/coverage/lcov-report/middleware/usageQuota.js.html +29 -35
  151. package/coverage/lcov-report/middleware/utils.js.html +2 -2
  152. package/coverage/lcov-report/threads/automation.js.html +30 -24
  153. package/coverage/lcov-report/threads/index.html +25 -25
  154. package/coverage/lcov-report/threads/index.js.html +10 -10
  155. package/coverage/lcov-report/threads/query.js.html +26 -47
  156. package/coverage/lcov-report/threads/utils.js.html +14 -14
  157. package/coverage/lcov-report/utilities/bcrypt.js.html +1 -1
  158. package/coverage/lcov-report/utilities/budibaseDir.js.html +7 -7
  159. package/coverage/lcov-report/utilities/centralPath.js.html +4 -4
  160. package/coverage/lcov-report/utilities/csvParser.js.html +6 -6
  161. package/coverage/lcov-report/utilities/global.js.html +57 -48
  162. package/coverage/lcov-report/utilities/index.html +27 -27
  163. package/coverage/lcov-report/utilities/index.js.html +42 -72
  164. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +8 -8
  165. package/coverage/lcov-report/utilities/queue/index.html +1 -1
  166. package/coverage/lcov-report/utilities/routing/index.html +1 -1
  167. package/coverage/lcov-report/utilities/routing/index.js.html +7 -7
  168. package/coverage/lcov-report/utilities/rowProcessor/index.html +11 -11
  169. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +32 -74
  170. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +4 -4
  171. package/coverage/lcov-report/utilities/scriptRunner.js.html +5 -5
  172. package/coverage/lcov-report/utilities/security.js.html +8 -8
  173. package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
  174. package/coverage/lcov-report/utilities/usageQuota/index.html +1 -1
  175. package/coverage/lcov-report/utilities/usageQuota/index.js.html +13 -10
  176. package/coverage/lcov-report/utilities/usageQuota/rows.js.html +5 -2
  177. package/coverage/lcov-report/utilities/usageQuota/usageQuoteReset.js.html +1 -1
  178. package/coverage/lcov-report/utilities/users.js.html +9 -9
  179. package/coverage/lcov-report/utilities/workerRequests.js.html +16 -16
  180. package/coverage/lcov.info +4018 -4092
  181. package/dist/api/controllers/application.js +49 -48
  182. package/dist/api/controllers/auth.js +4 -5
  183. package/dist/api/controllers/automation.js +14 -19
  184. package/dist/api/controllers/cloud.js +2 -3
  185. package/dist/api/controllers/component.js +3 -4
  186. package/dist/api/controllers/datasource.js +9 -10
  187. package/dist/api/controllers/deploy/Deployment.js +3 -6
  188. package/dist/api/controllers/deploy/index.js +12 -13
  189. package/dist/api/controllers/dev.js +5 -5
  190. package/dist/api/controllers/layout.js +3 -3
  191. package/dist/api/controllers/metadata.js +4 -4
  192. package/dist/api/controllers/migrations.js +21 -0
  193. package/dist/api/controllers/permission.js +4 -4
  194. package/dist/api/controllers/query/import/index.js +4 -6
  195. package/dist/api/controllers/query/index.js +11 -10
  196. package/dist/api/controllers/role.js +5 -5
  197. package/dist/api/controllers/routing.js +5 -6
  198. package/dist/api/controllers/row/ExternalRequest.js +90 -67
  199. package/dist/api/controllers/row/external.js +14 -22
  200. package/dist/api/controllers/row/internal.js +29 -44
  201. package/dist/api/controllers/row/internalSearch.js +11 -13
  202. package/dist/api/controllers/row/staticFormula.js +11 -11
  203. package/dist/api/controllers/row/utils.js +7 -6
  204. package/dist/api/controllers/screen.js +5 -7
  205. package/dist/api/controllers/static/index.js +4 -4
  206. package/dist/api/controllers/table/bulkFormula.js +14 -15
  207. package/dist/api/controllers/table/external.js +7 -10
  208. package/dist/api/controllers/table/index.js +5 -5
  209. package/dist/api/controllers/table/internal.js +16 -19
  210. package/dist/api/controllers/table/utils.js +29 -31
  211. package/dist/api/controllers/user.js +16 -20
  212. package/dist/api/controllers/view/index.js +8 -10
  213. package/dist/api/controllers/view/utils.js +9 -4
  214. package/dist/api/controllers/webhook.js +10 -8
  215. package/dist/api/routes/index.js +2 -0
  216. package/dist/api/routes/migrations.js +9 -0
  217. package/dist/api/routes/tests/utilities/TestFunctions.js +37 -17
  218. package/dist/app.js +35 -5
  219. package/dist/automations/automationUtils.js +2 -3
  220. package/dist/automations/steps/createRow.js +1 -1
  221. package/dist/automations/steps/updateRow.js +1 -1
  222. package/dist/automations/triggers.js +27 -25
  223. package/dist/automations/utils.js +10 -5
  224. package/dist/db/linkedRows/LinkController.js +3 -7
  225. package/dist/db/linkedRows/index.js +16 -26
  226. package/dist/db/linkedRows/linkUtils.js +6 -6
  227. package/dist/db/views/staticViews.js +9 -10
  228. package/dist/environment.js +3 -1
  229. package/dist/integrations/base/sql.js +49 -15
  230. package/dist/integrations/utils.js +3 -0
  231. package/dist/middleware/authorized.js +5 -3
  232. package/dist/middleware/builder.js +2 -2
  233. package/dist/middleware/currentapp.js +41 -37
  234. package/dist/middleware/usageQuota.js +2 -4
  235. package/dist/migrations/functions/appUrls.js +46 -0
  236. package/dist/migrations/functions/quotas1.js +50 -0
  237. package/dist/migrations/{usageQuotas → functions/usageQuotas}/index.js +6 -10
  238. package/dist/migrations/{usageQuotas → functions/usageQuotas}/syncApps.js +12 -9
  239. package/dist/migrations/{usageQuotas → functions/usageQuotas}/syncRows.js +16 -12
  240. package/dist/migrations/functions/userEmailViewCasing.js +24 -0
  241. package/dist/migrations/index.js +62 -0
  242. package/dist/package.json +4 -4
  243. package/dist/tests/utilities/TestConfiguration.js +70 -44
  244. package/dist/threads/automation.js +13 -11
  245. package/dist/threads/query.js +13 -19
  246. package/dist/tsconfig.tsbuildinfo +1 -1
  247. package/dist/utilities/fileSystem/index.js +4 -3
  248. package/dist/utilities/global.js +15 -12
  249. package/dist/utilities/index.js +7 -17
  250. package/dist/utilities/routing/index.js +5 -5
  251. package/dist/utilities/rowProcessor/index.js +9 -10
  252. package/dist/utilities/usageQuota/index.js +1 -0
  253. package/dist/utilities/usageQuota/rows.js +1 -0
  254. package/dist/utilities/users.js +3 -3
  255. package/dist/utilities/workerRequests.js +4 -4
  256. package/package.json +5 -5
  257. package/scripts/integrations/mssql/data/Dockerfile +1 -1
  258. package/scripts/integrations/mssql/data/setup.sql +17 -4
  259. package/scripts/integrations/postgres/init.sql +11 -6
  260. package/scripts/likeCypress.ts +1 -1
  261. package/src/api/controllers/application.js +38 -31
  262. package/src/api/controllers/auth.js +4 -5
  263. package/src/api/controllers/automation.js +13 -23
  264. package/src/api/controllers/cloud.js +2 -3
  265. package/src/api/controllers/component.js +3 -4
  266. package/src/api/controllers/datasource.js +9 -11
  267. package/src/api/controllers/deploy/Deployment.js +3 -7
  268. package/src/api/controllers/deploy/index.js +20 -13
  269. package/src/api/controllers/dev.js +5 -5
  270. package/src/api/controllers/layout.js +3 -3
  271. package/src/api/controllers/metadata.js +4 -9
  272. package/src/api/controllers/migrations.js +13 -0
  273. package/src/api/controllers/permission.js +4 -4
  274. package/src/api/controllers/query/import/index.ts +4 -6
  275. package/src/api/controllers/query/import/tests/index.spec.js +2 -1
  276. package/src/api/controllers/query/index.js +11 -10
  277. package/src/api/controllers/role.js +5 -5
  278. package/src/api/controllers/routing.js +5 -6
  279. package/src/api/controllers/row/ExternalRequest.ts +67 -43
  280. package/src/api/controllers/row/external.js +27 -58
  281. package/src/api/controllers/row/internal.js +29 -44
  282. package/src/api/controllers/row/internalSearch.js +11 -13
  283. package/src/api/controllers/row/staticFormula.js +10 -11
  284. package/src/api/controllers/row/utils.js +7 -6
  285. package/src/api/controllers/screen.js +5 -7
  286. package/src/api/controllers/static/index.js +4 -4
  287. package/src/api/controllers/table/bulkFormula.js +13 -23
  288. package/src/api/controllers/table/external.js +7 -10
  289. package/src/api/controllers/table/index.js +5 -5
  290. package/src/api/controllers/table/internal.js +18 -21
  291. package/src/api/controllers/table/utils.js +29 -41
  292. package/src/api/controllers/user.js +17 -20
  293. package/src/api/controllers/view/index.js +8 -10
  294. package/src/api/controllers/view/utils.js +9 -4
  295. package/src/api/controllers/webhook.js +10 -8
  296. package/src/api/routes/index.js +2 -0
  297. package/src/api/routes/migrations.js +14 -0
  298. package/src/api/routes/tests/automation.spec.js +1 -0
  299. package/src/api/routes/tests/misc.spec.js +0 -1
  300. package/src/api/routes/tests/routing.spec.js +21 -12
  301. package/src/api/routes/tests/row.spec.js +7 -4
  302. package/src/api/routes/tests/utilities/TestFunctions.js +39 -17
  303. package/src/app.ts +18 -5
  304. package/src/automations/automationUtils.js +2 -3
  305. package/src/automations/steps/createRow.js +0 -1
  306. package/src/automations/steps/updateRow.js +1 -1
  307. package/src/automations/triggers.js +33 -31
  308. package/src/automations/utils.js +9 -5
  309. package/src/db/linkedRows/LinkController.js +3 -7
  310. package/src/db/linkedRows/index.js +16 -30
  311. package/src/db/linkedRows/linkUtils.js +6 -6
  312. package/src/db/tests/linkController.spec.js +0 -1
  313. package/src/db/tests/linkTests.spec.js +5 -6
  314. package/src/db/views/staticViews.js +8 -10
  315. package/src/environment.js +3 -1
  316. package/src/integrations/base/sql.ts +61 -22
  317. package/src/integrations/utils.ts +4 -1
  318. package/src/middleware/authorized.js +5 -3
  319. package/src/middleware/builder.js +2 -2
  320. package/src/middleware/currentapp.js +50 -46
  321. package/src/middleware/tests/authorized.spec.js +7 -2
  322. package/src/middleware/tests/currentapp.spec.js +6 -0
  323. package/src/middleware/usageQuota.js +2 -4
  324. package/src/migrations/functions/appUrls.ts +34 -0
  325. package/src/migrations/functions/quotas1.ts +20 -0
  326. package/src/migrations/functions/tests/appUrls.spec.js +29 -0
  327. package/src/migrations/{tests/usageQuotas/index.spec.js → functions/tests/quotas1.spec.js} +5 -5
  328. package/src/migrations/functions/tests/userEmailViewCasing.spec.js +25 -0
  329. package/src/migrations/functions/usageQuotas/index.ts +8 -0
  330. package/src/migrations/{usageQuotas/syncApps.js → functions/usageQuotas/syncApps.ts} +6 -6
  331. package/src/migrations/functions/usageQuotas/syncRows.ts +22 -0
  332. package/src/migrations/{tests/usageQuotas → functions/usageQuotas/tests}/syncApps.spec.js +4 -4
  333. package/src/migrations/{tests/usageQuotas → functions/usageQuotas/tests}/syncRows.spec.js +4 -4
  334. package/src/migrations/functions/userEmailViewCasing.ts +13 -0
  335. package/src/migrations/index.ts +56 -0
  336. package/src/module.d.ts +3 -0
  337. package/src/tests/utilities/TestConfiguration.js +73 -50
  338. package/src/threads/automation.js +17 -15
  339. package/src/threads/query.js +14 -21
  340. package/src/utilities/fileSystem/index.js +4 -3
  341. package/src/utilities/global.js +15 -12
  342. package/src/utilities/index.js +7 -17
  343. package/src/utilities/routing/index.js +5 -5
  344. package/src/utilities/rowProcessor/index.js +9 -23
  345. package/src/utilities/usageQuota/index.js +1 -0
  346. package/src/utilities/usageQuota/rows.js +1 -0
  347. package/src/utilities/users.js +3 -3
  348. package/src/utilities/workerRequests.js +4 -4
  349. package/tsconfig.json +2 -1
  350. package/coverage/lcov-report/migrations/usageQuotas/index.html +0 -141
  351. package/coverage/lcov-report/migrations/usageQuotas/syncRows.js.html +0 -143
  352. package/src/migrations/usageQuotas/index.js +0 -24
  353. package/src/migrations/usageQuotas/syncRows.js +0 -21
@@ -0,0 +1,25 @@
1
+ const TestConfig = require("../../../tests/utilities/TestConfiguration")
2
+ const { getGlobalDB } = require("@budibase/backend-core/tenancy")
3
+
4
+ // mock email view creation
5
+ const coreDb = require("@budibase/backend-core/db")
6
+ const createUserEmailView = jest.fn()
7
+ coreDb.createUserEmailView = createUserEmailView
8
+
9
+ const migration = require("../userEmailViewCasing")
10
+
11
+ describe("run", () => {
12
+ let config = new TestConfig(false)
13
+ const globalDb = getGlobalDB()
14
+
15
+ beforeEach(async () => {
16
+ await config.init()
17
+ })
18
+
19
+ afterAll(config.end)
20
+
21
+ it("runs successfully", async () => {
22
+ await migration.run(globalDb)
23
+ expect(createUserEmailView).toHaveBeenCalledTimes(1)
24
+ })
25
+ })
@@ -0,0 +1,8 @@
1
+ const { useQuotas } = require("../../../utilities/usageQuota")
2
+
3
+ export const runQuotaMigration = async (migration: Function) => {
4
+ if (!useQuotas()) {
5
+ return
6
+ }
7
+ await migration()
8
+ }
@@ -1,12 +1,12 @@
1
- const { getGlobalDB, getTenantId } = require("@budibase/backend-core/tenancy")
2
- const { getAllApps } = require("@budibase/backend-core/db")
3
- const CouchDB = require("../../db")
4
- const { getUsageQuotaDoc } = require("../../utilities/usageQuota")
1
+ import { getGlobalDB, getTenantId } from "@budibase/backend-core/tenancy"
2
+ import { getAllApps } from "@budibase/backend-core/db"
3
+ import { getUsageQuotaDoc } from "../../../utilities/usageQuota"
5
4
 
6
- exports.run = async () => {
5
+ export const run = async () => {
7
6
  const db = getGlobalDB()
8
7
  // get app count
9
- const devApps = await getAllApps(CouchDB, { dev: true })
8
+ // @ts-ignore
9
+ const devApps = await getAllApps({ dev: true })
10
10
  const appCount = devApps ? devApps.length : 0
11
11
 
12
12
  // sync app count
@@ -0,0 +1,22 @@
1
+ import { getGlobalDB, getTenantId } from "@budibase/backend-core/tenancy"
2
+ import { getAllApps } from "@budibase/backend-core/db"
3
+ import { getUsageQuotaDoc } from "../../../utilities/usageQuota"
4
+ import { getUniqueRows } from "../../../utilities/usageQuota/rows"
5
+
6
+ export const run = async () => {
7
+ const db = getGlobalDB()
8
+ // get all rows in all apps
9
+ // @ts-ignore
10
+ const allApps = await getAllApps({ all: true })
11
+ // @ts-ignore
12
+ const appIds = allApps ? allApps.map((app: { appId: any }) => app.appId) : []
13
+ const rows = await getUniqueRows(appIds)
14
+ const rowCount = rows ? rows.length : 0
15
+
16
+ // sync row count
17
+ const tenantId = getTenantId()
18
+ console.log(`[Tenant: ${tenantId}] Syncing row count: ${rowCount}`)
19
+ const usageDoc = await getUsageQuotaDoc(db)
20
+ usageDoc.usageQuota.rows = rowCount
21
+ await db.put(usageDoc)
22
+ }
@@ -1,8 +1,8 @@
1
1
  const { getGlobalDB } = require("@budibase/backend-core/tenancy")
2
- const TestConfig = require("../../../tests/utilities/TestConfiguration")
3
- const { getUsageQuotaDoc, update, Properties } = require("../../../utilities/usageQuota")
4
- const syncApps = require("../../usageQuotas/syncApps")
5
- const env = require("../../../environment")
2
+ const TestConfig = require("../../../../tests/utilities/TestConfiguration")
3
+ const { getUsageQuotaDoc, update, Properties } = require("../../../../utilities/usageQuota")
4
+ const syncApps = require("../syncApps")
5
+ const env = require("../../../../environment")
6
6
 
7
7
  describe("syncApps", () => {
8
8
  let config = new TestConfig(false)
@@ -1,8 +1,8 @@
1
1
  const { getGlobalDB } = require("@budibase/backend-core/tenancy")
2
- const TestConfig = require("../../../tests/utilities/TestConfiguration")
3
- const { getUsageQuotaDoc, update, Properties } = require("../../../utilities/usageQuota")
4
- const syncRows = require("../../usageQuotas/syncRows")
5
- const env = require("../../../environment")
2
+ const TestConfig = require("../../../../tests/utilities/TestConfiguration")
3
+ const { getUsageQuotaDoc, update, Properties } = require("../../../../utilities/usageQuota")
4
+ const syncRows = require("../syncRows")
5
+ const env = require("../../../../environment")
6
6
 
7
7
  describe("syncRows", () => {
8
8
  let config = new TestConfig(false)
@@ -0,0 +1,13 @@
1
+ const { createUserEmailView } = require("@budibase/backend-core/db")
2
+
3
+ /**
4
+ * Date:
5
+ * October 2021
6
+ *
7
+ * Description:
8
+ * Recreate the user email view to include latest changes i.e. lower casing the email address
9
+ */
10
+
11
+ export const run = async (db: any) => {
12
+ await createUserEmailView(db)
13
+ }
@@ -0,0 +1,56 @@
1
+ import CouchDB from "../db"
2
+ const {
3
+ MIGRATION_TYPES,
4
+ runMigrations,
5
+ } = require("@budibase/backend-core/migrations")
6
+
7
+ // migration functions
8
+ import * as userEmailViewCasing from "./functions/userEmailViewCasing"
9
+ import * as quota1 from "./functions/quotas1"
10
+ import * as appUrls from "./functions/appUrls"
11
+
12
+ export interface Migration {
13
+ type: string
14
+ name: string
15
+ opts?: object
16
+ fn: Function
17
+ }
18
+
19
+ /**
20
+ * e.g.
21
+ * {
22
+ * tenantIds: ['bb'],
23
+ * force: {
24
+ * global: ['quota_1']
25
+ * }
26
+ * }
27
+ */
28
+ export interface MigrationOptions {
29
+ tenantIds?: string[]
30
+ forced?: {
31
+ [type: string]: string[]
32
+ }
33
+ }
34
+
35
+ export const MIGRATIONS: Migration[] = [
36
+ {
37
+ type: MIGRATION_TYPES.GLOBAL,
38
+ name: "user_email_view_casing",
39
+ fn: userEmailViewCasing.run,
40
+ },
41
+ {
42
+ type: MIGRATION_TYPES.GLOBAL,
43
+ name: "quotas_1",
44
+ fn: quota1.run,
45
+ },
46
+ {
47
+ type: MIGRATION_TYPES.APP,
48
+ name: "app_urls",
49
+ opts: { all: true },
50
+ fn: appUrls.run,
51
+ },
52
+ ]
53
+
54
+ export const migrate = async (options?: MigrationOptions) => {
55
+ await runMigrations(CouchDB, MIGRATIONS, options)
56
+ }
@@ -0,0 +1,3 @@
1
+ declare module "@budibase/backend-core"
2
+ declare module "@budibase/backend-core/tenancy"
3
+ declare module "@budibase/backend-core/db"
@@ -1,3 +1,6 @@
1
+ const core = require("@budibase/backend-core")
2
+ const CouchDB = require("../../db")
3
+ core.init(CouchDB)
1
4
  const { BUILTIN_ROLE_IDS } = require("@budibase/backend-core/roles")
2
5
  const env = require("../../environment")
3
6
  const {
@@ -17,13 +20,11 @@ const supertest = require("supertest")
17
20
  const { cleanup } = require("../../utilities/fileSystem")
18
21
  const { Cookies, Headers } = require("@budibase/backend-core/constants")
19
22
  const { jwt } = require("@budibase/backend-core/auth")
20
- const core = require("@budibase/backend-core")
21
23
  const { getGlobalDB } = require("@budibase/backend-core/tenancy")
22
24
  const { createASession } = require("@budibase/backend-core/sessions")
23
25
  const { user: userCache } = require("@budibase/backend-core/cache")
24
- const CouchDB = require("../../db")
25
26
  const newid = require("../../db/newid")
26
- core.init(CouchDB)
27
+ const context = require("@budibase/backend-core/context")
27
28
 
28
29
  const GLOBAL_USER_ID = "us_uuid1"
29
30
  const EMAIL = "babs@babs.com"
@@ -50,6 +51,10 @@ class TestConfiguration {
50
51
  return this.appId
51
52
  }
52
53
 
54
+ getCouch() {
55
+ return CouchDB
56
+ }
57
+
53
58
  async _req(config, params, controlFunc) {
54
59
  const request = {}
55
60
  // fake cookies, we don't need them
@@ -61,11 +66,21 @@ class TestConfiguration {
61
66
  request.request = {
62
67
  body: config,
63
68
  }
64
- if (params) {
65
- request.params = params
69
+ async function run() {
70
+ if (params) {
71
+ request.params = params
72
+ }
73
+ await controlFunc(request)
74
+ return request.body
75
+ }
76
+ // check if already in a context
77
+ if (context.getAppId() == null) {
78
+ return context.doInAppContext(this.appId, async () => {
79
+ return run()
80
+ })
81
+ } else {
82
+ return run()
66
83
  }
67
- await controlFunc(request)
68
- return request.body
69
84
  }
70
85
 
71
86
  async globalUser({
@@ -171,6 +186,7 @@ class TestConfiguration {
171
186
  // create dev app
172
187
  this.app = await this._req({ name: appName }, null, controllers.app.create)
173
188
  this.appId = this.app.appId
189
+ context.updateAppId(this.appId)
174
190
 
175
191
  // create production app
176
192
  this.prodApp = await this.deploy()
@@ -183,14 +199,16 @@ class TestConfiguration {
183
199
  }
184
200
 
185
201
  async deploy() {
186
- const deployment = await this._req(null, null, controllers.deploy.deployApp)
187
- const prodAppId = deployment.appId.replace("_dev", "")
188
- const appPackage = await this._req(
189
- null,
190
- { appId: prodAppId },
191
- controllers.app.fetchAppPackage
192
- )
193
- return appPackage.application
202
+ await this._req(null, null, controllers.deploy.deployApp)
203
+ const prodAppId = this.getAppId().replace("_dev", "")
204
+ return context.doInAppContext(prodAppId, async () => {
205
+ const appPackage = await this._req(
206
+ null,
207
+ { appId: prodAppId },
208
+ controllers.app.fetchAppPackage
209
+ )
210
+ return appPackage.application
211
+ })
194
212
  }
195
213
 
196
214
  async updateTable(config = null) {
@@ -419,42 +437,47 @@ class TestConfiguration {
419
437
 
420
438
  async login({ roleId, userId, builder, prodApp = false } = {}) {
421
439
  const appId = prodApp ? this.prodAppId : this.appId
422
-
423
- userId = !userId ? `us_uuid1` : userId
424
- if (!this.request) {
425
- throw "Server has not been opened, cannot login."
426
- }
427
- // make sure the user exists in the global DB
428
- if (roleId !== BUILTIN_ROLE_IDS.PUBLIC) {
429
- await this.globalUser({
430
- userId,
431
- builder,
432
- roles: { [this.prodAppId]: roleId },
440
+ return context.doInAppContext(appId, async () => {
441
+ userId = !userId ? `us_uuid1` : userId
442
+ if (!this.request) {
443
+ throw "Server has not been opened, cannot login."
444
+ }
445
+ // make sure the user exists in the global DB
446
+ if (roleId !== BUILTIN_ROLE_IDS.PUBLIC) {
447
+ await this.globalUser({
448
+ id: userId,
449
+ builder,
450
+ roles: { [this.prodAppId]: roleId },
451
+ })
452
+ }
453
+ await createASession(userId, {
454
+ sessionId: "sessionid",
455
+ tenantId: TENANT_ID,
433
456
  })
434
- }
435
- // have to fake this
436
- const auth = {
437
- userId,
438
- sessionId: "sessionid",
439
- tenantId: TENANT_ID,
440
- }
441
- const app = {
442
- roleId: roleId,
443
- appId,
444
- }
445
- const authToken = jwt.sign(auth, env.JWT_SECRET)
446
- const appToken = jwt.sign(app, env.JWT_SECRET)
447
-
448
- // returning necessary request headers
449
- await userCache.invalidateUser(userId)
450
- return {
451
- Accept: "application/json",
452
- Cookie: [
453
- `${Cookies.Auth}=${authToken}`,
454
- `${Cookies.CurrentApp}=${appToken}`,
455
- ],
456
- [Headers.APP_ID]: appId,
457
- }
457
+ // have to fake this
458
+ const auth = {
459
+ userId,
460
+ sessionId: "sessionid",
461
+ tenantId: TENANT_ID,
462
+ }
463
+ const app = {
464
+ roleId: roleId,
465
+ appId,
466
+ }
467
+ const authToken = jwt.sign(auth, env.JWT_SECRET)
468
+ const appToken = jwt.sign(app, env.JWT_SECRET)
469
+
470
+ // returning necessary request headers
471
+ await userCache.invalidateUser(userId)
472
+ return {
473
+ Accept: "application/json",
474
+ Cookie: [
475
+ `${Cookies.Auth}=${authToken}`,
476
+ `${Cookies.CurrentApp}=${appToken}`,
477
+ ],
478
+ [Headers.APP_ID]: appId,
479
+ }
480
+ })
458
481
  }
459
482
  }
460
483
 
@@ -5,11 +5,11 @@ const automationUtils = require("../automations/automationUtils")
5
5
  const AutomationEmitter = require("../events/AutomationEmitter")
6
6
  const { processObject } = require("@budibase/string-templates")
7
7
  const { DEFAULT_TENANT_ID } = require("@budibase/backend-core/constants")
8
- const CouchDB = require("../db")
9
8
  const { DocumentTypes, isDevAppID } = require("../db/utils")
10
9
  const { doInTenant } = require("@budibase/backend-core/tenancy")
11
10
  const usage = require("../utilities/usageQuota")
12
11
  const { definitions: triggerDefs } = require("../automations/triggerInfo")
12
+ const { doInAppContext, getAppDB } = require("@budibase/backend-core/context")
13
13
 
14
14
  const FILTER_STEP_ID = actions.ACTION_DEFINITIONS.FILTER.stepId
15
15
  const CRON_STEP_ID = triggerDefs.CRON.stepId
@@ -59,11 +59,10 @@ class Orchestrator {
59
59
  }
60
60
 
61
61
  async getApp() {
62
- const appId = this._appId
63
62
  if (this._app) {
64
63
  return this._app
65
64
  }
66
- const db = new CouchDB(appId)
65
+ const db = getAppDB()
67
66
  this._app = await db.get(DocumentTypes.APP_METADATA)
68
67
  return this._app
69
68
  }
@@ -131,16 +130,19 @@ class Orchestrator {
131
130
  }
132
131
 
133
132
  module.exports = (input, callback) => {
134
- const automationOrchestrator = new Orchestrator(
135
- input.data.automation,
136
- input.data.event
137
- )
138
- automationOrchestrator
139
- .execute()
140
- .then(response => {
141
- callback(null, response)
142
- })
143
- .catch(err => {
144
- callback(err)
145
- })
133
+ const appId = input.data.event.appId
134
+ doInAppContext(appId, () => {
135
+ const automationOrchestrator = new Orchestrator(
136
+ input.data.automation,
137
+ input.data.event
138
+ )
139
+ automationOrchestrator
140
+ .execute()
141
+ .then(response => {
142
+ callback(null, response)
143
+ })
144
+ .catch(err => {
145
+ callback(err)
146
+ })
147
+ })
146
148
  }
@@ -3,14 +3,10 @@ threadUtils.threadSetup()
3
3
  const ScriptRunner = require("../utilities/scriptRunner")
4
4
  const { integrations } = require("../integrations")
5
5
  const { processStringSync } = require("@budibase/string-templates")
6
- const CouchDB = require("../db")
7
-
8
- const IS_TRIPLE_BRACE = new RegExp(/^{{3}.*}{3}$/)
9
- const IS_HANDLEBARS = new RegExp(/^{{2}.*}{2}$/)
6
+ const { doInAppContext, getAppDB } = require("@budibase/backend-core/context")
10
7
 
11
8
  class QueryRunner {
12
9
  constructor(input, flags = { noRecursiveQuery: false }) {
13
- this.appId = input.appId
14
10
  this.datasource = input.datasource
15
11
  this.queryVerb = input.queryVerb
16
12
  this.fields = input.fields
@@ -104,12 +100,11 @@ class QueryRunner {
104
100
  }
105
101
 
106
102
  async runAnotherQuery(queryId, parameters) {
107
- const db = new CouchDB(this.appId)
103
+ const db = getAppDB()
108
104
  const query = await db.get(queryId)
109
105
  const datasource = await db.get(query.datasourceId)
110
106
  return new QueryRunner(
111
107
  {
112
- appId: this.appId,
113
108
  datasource,
114
109
  queryVerb: query.queryVerb,
115
110
  fields: query.fields,
@@ -190,12 +185,8 @@ class QueryRunner {
190
185
  enrichedQuery[key] = this.enrichQueryFields(fields[key], parameters)
191
186
  } else if (typeof fields[key] === "string") {
192
187
  // enrich string value as normal
193
- let value = fields[key]
194
- // add triple brace to avoid escaping e.g. '=' in cookie header
195
- if (IS_HANDLEBARS.test(value) && !IS_TRIPLE_BRACE.test(value)) {
196
- value = `{${value}}`
197
- }
198
- enrichedQuery[key] = processStringSync(value, parameters, {
188
+ enrichedQuery[key] = processStringSync(fields[key], parameters, {
189
+ noEscaping: true,
199
190
  noHelpers: true,
200
191
  })
201
192
  } else {
@@ -223,12 +214,14 @@ class QueryRunner {
223
214
  }
224
215
 
225
216
  module.exports = (input, callback) => {
226
- const Runner = new QueryRunner(input)
227
- Runner.execute()
228
- .then(response => {
229
- callback(null, response)
230
- })
231
- .catch(err => {
232
- callback(err)
233
- })
217
+ doInAppContext(input.appId, () => {
218
+ const Runner = new QueryRunner(input)
219
+ Runner.execute()
220
+ .then(response => {
221
+ callback(null, response)
222
+ })
223
+ .catch(err => {
224
+ callback(err)
225
+ })
226
+ })
234
227
  }
@@ -1,5 +1,4 @@
1
1
  const { budibaseTempDir } = require("../budibaseDir")
2
- const { isDev } = require("../index")
3
2
  const fs = require("fs")
4
3
  const { join } = require("path")
5
4
  const uuid = require("uuid/v4")
@@ -20,6 +19,7 @@ const {
20
19
  LINK_USER_METADATA_PREFIX,
21
20
  } = require("../../db/utils")
22
21
  const MemoryStream = require("memorystream")
22
+ const { getAppId } = require("@budibase/backend-core/context")
23
23
 
24
24
  const TOP_LEVEL_PATH = join(__dirname, "..", "..", "..")
25
25
  const NODE_MODULES_PATH = join(TOP_LEVEL_PATH, "node_modules")
@@ -51,7 +51,7 @@ exports.init = () => {
51
51
  * everything required to function is ready.
52
52
  */
53
53
  exports.checkDevelopmentEnvironment = () => {
54
- if (!isDev()) {
54
+ if (!env.isDev() || env.isTest()) {
55
55
  return
56
56
  }
57
57
  if (!fs.existsSync(budibaseTempDir())) {
@@ -251,7 +251,8 @@ exports.downloadTemplate = async (type, name) => {
251
251
  /**
252
252
  * Retrieves component libraries from object store (or tmp symlink if in local)
253
253
  */
254
- exports.getComponentLibraryManifest = async (appId, library) => {
254
+ exports.getComponentLibraryManifest = async library => {
255
+ const appId = getAppId()
255
256
  const filename = "manifest.json"
256
257
  /* istanbul ignore next */
257
258
  // when testing in cypress and so on we need to get the package
@@ -3,7 +3,7 @@ const {
3
3
  getGlobalIDFromUserMetadataID,
4
4
  } = require("../db/utils")
5
5
  const { BUILTIN_ROLE_IDS } = require("@budibase/backend-core/roles")
6
- const { getDeployedAppID } = require("@budibase/backend-core/db")
6
+ const { getProdAppID } = require("@budibase/backend-core/db")
7
7
  const { getGlobalUserParams } = require("@budibase/backend-core/db")
8
8
  const { user: userCache } = require("@budibase/backend-core/cache")
9
9
  const {
@@ -11,8 +11,10 @@ const {
11
11
  isUserInAppTenant,
12
12
  } = require("@budibase/backend-core/tenancy")
13
13
  const env = require("../environment")
14
+ const { getAppId } = require("@budibase/backend-core/context")
14
15
 
15
- exports.updateAppRole = (appId, user) => {
16
+ exports.updateAppRole = (user, { appId } = {}) => {
17
+ appId = appId || getAppId()
16
18
  if (!user || !user.roles) {
17
19
  return user
18
20
  }
@@ -24,7 +26,7 @@ exports.updateAppRole = (appId, user) => {
24
26
  return user
25
27
  }
26
28
  // always use the deployed app
27
- user.roleId = user.roles[getDeployedAppID(appId)]
29
+ user.roleId = user.roles[getProdAppID(appId)]
28
30
  // if a role wasn't found then either set as admin (builder) or public (everyone else)
29
31
  if (!user.roleId && user.builder && user.builder.global) {
30
32
  user.roleId = BUILTIN_ROLE_IDS.ADMIN
@@ -35,18 +37,18 @@ exports.updateAppRole = (appId, user) => {
35
37
  return user
36
38
  }
37
39
 
38
- function processUser(appId, user) {
40
+ function processUser(user, { appId } = {}) {
39
41
  if (user) {
40
42
  delete user.password
41
43
  }
42
- return exports.updateAppRole(appId, user)
44
+ return exports.updateAppRole(user, { appId })
43
45
  }
44
46
 
45
47
  exports.getCachedSelf = async (ctx, appId) => {
46
48
  // this has to be tenant aware, can't depend on the context to find it out
47
49
  // running some middlewares before the tenancy causes context to break
48
50
  const user = await userCache.getUser(ctx.user._id)
49
- return processUser(appId, user)
51
+ return processUser(user, { appId })
50
52
  }
51
53
 
52
54
  exports.getRawGlobalUser = async userId => {
@@ -54,12 +56,13 @@ exports.getRawGlobalUser = async userId => {
54
56
  return db.get(getGlobalIDFromUserMetadataID(userId))
55
57
  }
56
58
 
57
- exports.getGlobalUser = async (appId, userId) => {
59
+ exports.getGlobalUser = async userId => {
58
60
  let user = await exports.getRawGlobalUser(userId)
59
- return processUser(appId, user)
61
+ return processUser(user)
60
62
  }
61
63
 
62
- exports.getGlobalUsers = async (appId = null, users = null) => {
64
+ exports.getGlobalUsers = async (users = null) => {
65
+ const appId = getAppId()
63
66
  const db = getGlobalDB()
64
67
  let globalUsers
65
68
  if (users) {
@@ -86,11 +89,11 @@ exports.getGlobalUsers = async (appId = null, users = null) => {
86
89
  if (!appId) {
87
90
  return globalUsers
88
91
  }
89
- return globalUsers.map(user => exports.updateAppRole(appId, user))
92
+ return globalUsers.map(user => exports.updateAppRole(user))
90
93
  }
91
94
 
92
- exports.getGlobalUsersFromMetadata = async (appId, users) => {
93
- const globalUsers = await exports.getGlobalUsers(appId, users)
95
+ exports.getGlobalUsersFromMetadata = async users => {
96
+ const globalUsers = await exports.getGlobalUsers(users)
94
97
  return users.map(user => {
95
98
  const globalUser = globalUsers.find(
96
99
  globalUser => globalUser && user._id.includes(globalUser._id)
@@ -1,9 +1,9 @@
1
1
  const env = require("../environment")
2
2
  const { OBJ_STORE_DIRECTORY } = require("../constants")
3
3
  const { sanitizeKey } = require("@budibase/backend-core/objectStore")
4
- const CouchDB = require("../db")
5
4
  const { generateMetadataID } = require("../db/utils")
6
5
  const Readable = require("stream").Readable
6
+ const { getAppDB } = require("@budibase/backend-core/context")
7
7
 
8
8
  const BB_CDN = "https://cdn.budi.live"
9
9
 
@@ -73,8 +73,8 @@ exports.attachmentsRelativeURL = attachmentKey => {
73
73
  )
74
74
  }
75
75
 
76
- exports.updateEntityMetadata = async (appId, type, entityId, updateFn) => {
77
- const db = new CouchDB(appId)
76
+ exports.updateEntityMetadata = async (type, entityId, updateFn) => {
77
+ const db = getAppDB()
78
78
  const id = generateMetadataID(type, entityId)
79
79
  // read it to see if it exists, we'll overwrite it no matter what
80
80
  let rev,
@@ -99,14 +99,14 @@ exports.updateEntityMetadata = async (appId, type, entityId, updateFn) => {
99
99
  }
100
100
  }
101
101
 
102
- exports.saveEntityMetadata = async (appId, type, entityId, metadata) => {
103
- return exports.updateEntityMetadata(appId, type, entityId, () => {
102
+ exports.saveEntityMetadata = async (type, entityId, metadata) => {
103
+ return exports.updateEntityMetadata(type, entityId, () => {
104
104
  return metadata
105
105
  })
106
106
  }
107
107
 
108
- exports.deleteEntityMetadata = async (appId, type, entityId) => {
109
- const db = new CouchDB(appId)
108
+ exports.deleteEntityMetadata = async (type, entityId) => {
109
+ const db = getAppDB()
110
110
  const id = generateMetadataID(type, entityId)
111
111
  let rev
112
112
  try {
@@ -141,16 +141,6 @@ exports.stringToReadStream = string => {
141
141
  })
142
142
  }
143
143
 
144
- exports.doesDatabaseExist = async dbName => {
145
- try {
146
- const db = new CouchDB(dbName, { skip_setup: true })
147
- const info = await db.info()
148
- return info && !info.error
149
- } catch (err) {
150
- return false
151
- }
152
- }
153
-
154
144
  exports.formatBytes = bytes => {
155
145
  const units = ["B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"]
156
146
  const byteIncrements = 1024