@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
@@ -19,7 +19,6 @@ var __rest = (this && this.__rest) || function (s, e) {
19
19
  }
20
20
  return t;
21
21
  };
22
- const CouchDB = require("../../../db");
23
22
  const linkRows = require("../../../db/linkedRows");
24
23
  const { generateRowID, getRowParams, DocumentTypes, InternalTables, } = require("../../../db/utils");
25
24
  const userController = require("../user");
@@ -32,6 +31,7 @@ const inMemoryViews = require("../../../db/inMemoryView");
32
31
  const env = require("../../../environment");
33
32
  const { migrateToInMemoryView, migrateToDesignView, getFromDesignDoc, getFromMemoryDoc, } = require("../view/utils");
34
33
  const { cloneDeep } = require("lodash/fp");
34
+ const { getAppDB } = require("@budibase/backend-core/context");
35
35
  const { finaliseRow, updateRelatedFormula } = require("./staticFormula");
36
36
  const CALCULATION_TYPES = {
37
37
  SUM: "sum",
@@ -83,8 +83,7 @@ function getRawTableData(ctx, db, tableId) {
83
83
  });
84
84
  }
85
85
  exports.patch = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
86
- const appId = ctx.appId;
87
- const db = new CouchDB(appId);
86
+ const db = getAppDB();
88
87
  const inputs = ctx.request.body;
89
88
  const tableId = inputs.tableId;
90
89
  const isUserTable = tableId === InternalTables.USER_METADATA;
@@ -123,29 +122,27 @@ exports.patch = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
123
122
  }
124
123
  // returned row is cleaned and prepared for writing to DB
125
124
  row = yield linkRows.updateLinks({
126
- appId,
127
125
  eventType: linkRows.EventType.ROW_UPDATE,
128
126
  row,
129
127
  tableId: row.tableId,
130
128
  table,
131
129
  });
132
130
  // check if any attachments removed
133
- yield cleanupAttachments(appId, table, { oldRow, row });
131
+ yield cleanupAttachments(table, { oldRow, row });
134
132
  if (isUserTable) {
135
133
  // the row has been updated, need to put it into the ctx
136
134
  ctx.request.body = row;
137
135
  yield userController.updateMetadata(ctx);
138
136
  return { row: ctx.body, table };
139
137
  }
140
- return finaliseRow(ctx.appId, table, row, {
138
+ return finaliseRow(table, row, {
141
139
  oldTable: dbTable,
142
140
  updateFormula: true,
143
141
  });
144
142
  });
145
143
  exports.save = function (ctx) {
146
144
  return __awaiter(this, void 0, void 0, function* () {
147
- const appId = ctx.appId;
148
- const db = new CouchDB(appId);
145
+ const db = getAppDB();
149
146
  let inputs = ctx.request.body;
150
147
  inputs.tableId = ctx.params.tableId;
151
148
  if (!inputs._rev && !inputs._id) {
@@ -163,27 +160,25 @@ exports.save = function (ctx) {
163
160
  }
164
161
  // make sure link rows are up to date
165
162
  row = yield linkRows.updateLinks({
166
- appId,
167
163
  eventType: linkRows.EventType.ROW_SAVE,
168
164
  row,
169
165
  tableId: row.tableId,
170
166
  table,
171
167
  });
172
- return finaliseRow(ctx.appId, table, row, {
168
+ return finaliseRow(table, row, {
173
169
  oldTable: dbTable,
174
170
  updateFormula: true,
175
171
  });
176
172
  });
177
173
  };
178
174
  exports.fetchView = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
179
- const appId = ctx.appId;
180
175
  const viewName = ctx.params.viewName;
181
176
  // if this is a table view being looked for just transfer to that
182
177
  if (viewName.startsWith(DocumentTypes.TABLE)) {
183
178
  ctx.params.tableId = viewName;
184
179
  return exports.fetch(ctx);
185
180
  }
186
- const db = new CouchDB(appId);
181
+ const db = getAppDB();
187
182
  const { calculation, group, field } = ctx.query;
188
183
  const viewInfo = yield getView(db, viewName);
189
184
  let response;
@@ -211,7 +206,7 @@ exports.fetchView = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
211
206
  schema: {},
212
207
  };
213
208
  }
214
- rows = yield outputProcessing(ctx, table, response.rows);
209
+ rows = yield outputProcessing(table, response.rows);
215
210
  }
216
211
  if (calculation === CALCULATION_TYPES.STATS) {
217
212
  response.rows = response.rows.map(row => (Object.assign(Object.assign({ group: row.key, field }, row.value), { avg: row.value.sum / row.value.count })));
@@ -228,25 +223,22 @@ exports.fetchView = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
228
223
  return rows;
229
224
  });
230
225
  exports.fetch = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
231
- const appId = ctx.appId;
232
- const db = new CouchDB(appId);
226
+ const db = getAppDB();
233
227
  const tableId = ctx.params.tableId;
234
228
  let table = yield db.get(tableId);
235
229
  let rows = yield getRawTableData(ctx, db, tableId);
236
- return outputProcessing(ctx, table, rows);
230
+ return outputProcessing(table, rows);
237
231
  });
238
232
  exports.find = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
239
- const appId = ctx.appId;
240
- const db = new CouchDB(appId);
233
+ const db = getAppDB();
241
234
  const table = yield db.get(ctx.params.tableId);
242
- let row = yield findRow(ctx, db, ctx.params.tableId, ctx.params.rowId);
243
- row = yield outputProcessing(ctx, table, row);
235
+ let row = yield findRow(ctx, ctx.params.tableId, ctx.params.rowId);
236
+ row = yield outputProcessing(table, row);
244
237
  return row;
245
238
  });
246
239
  exports.destroy = function (ctx) {
247
240
  return __awaiter(this, void 0, void 0, function* () {
248
- const appId = ctx.appId;
249
- const db = new CouchDB(appId);
241
+ const db = getAppDB();
250
242
  const { _id, _rev } = ctx.request.body;
251
243
  let row = yield db.get(_id);
252
244
  if (row.tableId !== ctx.params.tableId) {
@@ -254,18 +246,17 @@ exports.destroy = function (ctx) {
254
246
  }
255
247
  const table = yield db.get(row.tableId);
256
248
  // update the row to include full relationships before deleting them
257
- row = yield outputProcessing(ctx, table, row, { squash: false });
249
+ row = yield outputProcessing(table, row, { squash: false });
258
250
  // now remove the relationships
259
251
  yield linkRows.updateLinks({
260
- appId,
261
252
  eventType: linkRows.EventType.ROW_DELETE,
262
253
  row,
263
254
  tableId: row.tableId,
264
255
  });
265
256
  // remove any attachments that were on the row from object storage
266
- yield cleanupAttachments(appId, table, { row });
257
+ yield cleanupAttachments(table, { row });
267
258
  // remove any static formula
268
- yield updateRelatedFormula(appId, table, row);
259
+ yield updateRelatedFormula(table, row);
269
260
  let response;
270
261
  if (ctx.params.tableId === InternalTables.USER_METADATA) {
271
262
  ctx.params = {
@@ -281,17 +272,15 @@ exports.destroy = function (ctx) {
281
272
  });
282
273
  };
283
274
  exports.bulkDestroy = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
284
- const appId = ctx.appId;
285
- const db = new CouchDB(appId);
275
+ const db = getAppDB();
286
276
  const tableId = ctx.params.tableId;
287
277
  const table = yield db.get(tableId);
288
278
  let { rows } = ctx.request.body;
289
279
  // before carrying out any updates, make sure the rows are ready to be returned
290
280
  // they need to be the full rows (including previous relationships) for automations
291
- rows = yield outputProcessing(ctx, table, rows, { squash: false });
281
+ rows = yield outputProcessing(table, rows, { squash: false });
292
282
  // remove the relationships first
293
283
  let updates = rows.map(row => linkRows.updateLinks({
294
- appId,
295
284
  eventType: linkRows.EventType.ROW_DELETE,
296
285
  row,
297
286
  tableId: row.tableId,
@@ -308,8 +297,8 @@ exports.bulkDestroy = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
308
297
  yield db.bulkDocs(rows.map(row => (Object.assign(Object.assign({}, row), { _deleted: true }))));
309
298
  }
310
299
  // remove any attachments that were on the rows from object storage
311
- yield cleanupAttachments(appId, table, { rows });
312
- yield updateRelatedFormula(appId, table, rows);
300
+ yield cleanupAttachments(table, { rows });
301
+ yield updateRelatedFormula(table, rows);
313
302
  yield Promise.all(updates);
314
303
  return { response: { ok: true }, rows };
315
304
  });
@@ -318,50 +307,46 @@ exports.search = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
318
307
  if (env.isCypress()) {
319
308
  return { rows: yield exports.fetch(ctx) };
320
309
  }
321
- const appId = ctx.appId;
322
310
  const { tableId } = ctx.params;
323
- const db = new CouchDB(appId);
311
+ const db = getAppDB();
324
312
  const _a = ctx.request.body, { paginate, query } = _a, params = __rest(_a, ["paginate", "query"]);
325
313
  params.version = ctx.version;
326
314
  params.tableId = tableId;
327
315
  let response;
328
316
  if (paginate) {
329
- response = yield paginatedSearch(appId, query, params);
317
+ response = yield paginatedSearch(query, params);
330
318
  }
331
319
  else {
332
- response = yield fullSearch(appId, query, params);
320
+ response = yield fullSearch(query, params);
333
321
  }
334
322
  // Enrich search results with relationships
335
323
  if (response.rows && response.rows.length) {
336
324
  // enrich with global users if from users table
337
325
  if (tableId === InternalTables.USER_METADATA) {
338
- response.rows = yield getGlobalUsersFromMetadata(appId, response.rows);
326
+ response.rows = yield getGlobalUsersFromMetadata(response.rows);
339
327
  }
340
328
  const table = yield db.get(tableId);
341
- response.rows = yield outputProcessing(ctx, table, response.rows);
329
+ response.rows = yield outputProcessing(table, response.rows);
342
330
  }
343
331
  return response;
344
332
  });
345
333
  exports.validate = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
346
334
  return validate({
347
- appId: ctx.appId,
348
335
  tableId: ctx.params.tableId,
349
336
  row: ctx.request.body,
350
337
  });
351
338
  });
352
339
  exports.fetchEnrichedRow = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
353
- const appId = ctx.appId;
354
- const db = new CouchDB(appId);
340
+ const db = getAppDB();
355
341
  const tableId = ctx.params.tableId;
356
342
  const rowId = ctx.params.rowId;
357
343
  // need table to work out where links go in row
358
344
  let [table, row] = yield Promise.all([
359
345
  db.get(tableId),
360
- findRow(ctx, db, tableId, rowId),
346
+ findRow(ctx, tableId, rowId),
361
347
  ]);
362
348
  // get the link docs
363
349
  const linkVals = yield linkRows.getLinkDocuments({
364
- appId,
365
350
  tableId,
366
351
  rowId,
367
352
  });
@@ -385,7 +370,7 @@ exports.fetchEnrichedRow = (ctx) => __awaiter(void 0, void 0, void 0, function*
385
370
  let linkedRows = [];
386
371
  for (let [tableId, rows] of Object.entries(groups)) {
387
372
  // need to include the IDs in these rows for any links they may have
388
- linkedRows = linkedRows.concat(yield outputProcessing(ctx, tables[tableId], rows));
373
+ linkedRows = linkedRows.concat(yield outputProcessing(tables[tableId], rows));
389
374
  }
390
375
  // insert the link rows in the correct place throughout the main row
391
376
  for (let fieldName of Object.keys(table.schema)) {
@@ -11,13 +11,13 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
11
11
  const { SearchIndexes } = require("../../../db/utils");
12
12
  const fetch = require("node-fetch");
13
13
  const { getCouchUrl } = require("@budibase/backend-core/db");
14
+ const { getAppId } = require("@budibase/backend-core/context");
14
15
  /**
15
16
  * Class to build lucene query URLs.
16
17
  * Optionally takes a base lucene query object.
17
18
  */
18
19
  class QueryBuilder {
19
- constructor(appId, base) {
20
- this.appId = appId;
20
+ constructor(base) {
21
21
  this.query = Object.assign({ string: {}, fuzzy: {}, range: {}, equal: {}, notEqual: {}, empty: {}, notEmpty: {} }, base);
22
22
  this.limit = 50;
23
23
  this.sortOrder = "ascending";
@@ -221,7 +221,8 @@ class QueryBuilder {
221
221
  }
222
222
  run() {
223
223
  return __awaiter(this, void 0, void 0, function* () {
224
- const url = `${getCouchUrl()}/${this.appId}/_design/database/_search/${SearchIndexes.ROWS}`;
224
+ const appId = getAppId();
225
+ const url = `${getCouchUrl()}/${appId}/_design/database/_search/${SearchIndexes.ROWS}`;
225
226
  const body = this.buildSearchBody();
226
227
  return yield runQuery(url, body);
227
228
  });
@@ -254,7 +255,6 @@ const runQuery = (url, body) => __awaiter(void 0, void 0, void 0, function* () {
254
255
  * Gets round the fixed limit of 200 results from a query by fetching as many
255
256
  * pages as required and concatenating the results. This recursively operates
256
257
  * until enough results have been found.
257
- * @param appId {string} The app ID to search
258
258
  * @param query {object} The JSON query structure
259
259
  * @param params {object} The search params including:
260
260
  * tableId {string} The table ID to search
@@ -267,7 +267,7 @@ const runQuery = (url, body) => __awaiter(void 0, void 0, void 0, function* () {
267
267
  * rows {array|null} Current results in the recursive search
268
268
  * @returns {Promise<*[]|*>}
269
269
  */
270
- const recursiveSearch = (appId, query, params) => __awaiter(void 0, void 0, void 0, function* () {
270
+ const recursiveSearch = (query, params) => __awaiter(void 0, void 0, void 0, function* () {
271
271
  const bookmark = params.bookmark;
272
272
  const rows = params.rows || [];
273
273
  if (rows.length >= params.limit) {
@@ -277,7 +277,7 @@ const recursiveSearch = (appId, query, params) => __awaiter(void 0, void 0, void
277
277
  if (rows.length > params.limit - 200) {
278
278
  pageSize = params.limit - rows.length;
279
279
  }
280
- const page = yield new QueryBuilder(appId, query)
280
+ const page = yield new QueryBuilder(query)
281
281
  .setVersion(params.version)
282
282
  .setTable(params.tableId)
283
283
  .setBookmark(bookmark)
@@ -293,13 +293,12 @@ const recursiveSearch = (appId, query, params) => __awaiter(void 0, void 0, void
293
293
  return [...rows, ...page.rows];
294
294
  }
295
295
  const newParams = Object.assign(Object.assign({}, params), { bookmark: page.bookmark, rows: [...rows, ...page.rows] });
296
- return yield recursiveSearch(appId, query, newParams);
296
+ return yield recursiveSearch(query, newParams);
297
297
  });
298
298
  /**
299
299
  * Performs a paginated search. A bookmark will be returned to allow the next
300
300
  * page to be fetched. There is a max limit off 200 results per page in a
301
301
  * paginated search.
302
- * @param appId {string} The app ID to search
303
302
  * @param query {object} The JSON query structure
304
303
  * @param params {object} The search params including:
305
304
  * tableId {string} The table ID to search
@@ -311,13 +310,13 @@ const recursiveSearch = (appId, query, params) => __awaiter(void 0, void 0, void
311
310
  * bookmark {string} The bookmark to resume from
312
311
  * @returns {Promise<{hasNextPage: boolean, rows: *[]}>}
313
312
  */
314
- exports.paginatedSearch = (appId, query, params) => __awaiter(void 0, void 0, void 0, function* () {
313
+ exports.paginatedSearch = (query, params) => __awaiter(void 0, void 0, void 0, function* () {
315
314
  let limit = params.limit;
316
315
  if (limit == null || isNaN(limit) || limit < 0) {
317
316
  limit = 50;
318
317
  }
319
318
  limit = Math.min(limit, 200);
320
- const search = new QueryBuilder(appId, query)
319
+ const search = new QueryBuilder(query)
321
320
  .setVersion(params.version)
322
321
  .setTable(params.tableId)
323
322
  .setSort(params.sort)
@@ -340,7 +339,6 @@ exports.paginatedSearch = (appId, query, params) => __awaiter(void 0, void 0, vo
340
339
  * desired amount of results. There is a limit of 1000 results to avoid
341
340
  * heavy performance hits, and to avoid client components breaking from
342
341
  * handling too much data.
343
- * @param appId {string} The app ID to search
344
342
  * @param query {object} The JSON query structure
345
343
  * @param params {object} The search params including:
346
344
  * tableId {string} The table ID to search
@@ -351,12 +349,12 @@ exports.paginatedSearch = (appId, query, params) => __awaiter(void 0, void 0, vo
351
349
  * limit {number} The desired number of results
352
350
  * @returns {Promise<{rows: *}>}
353
351
  */
354
- exports.fullSearch = (appId, query, params) => __awaiter(void 0, void 0, void 0, function* () {
352
+ exports.fullSearch = (query, params) => __awaiter(void 0, void 0, void 0, function* () {
355
353
  let limit = params.limit;
356
354
  if (limit == null || isNaN(limit) || limit < 0) {
357
355
  limit = 1000;
358
356
  }
359
357
  params.limit = Math.min(limit, 1000);
360
- const rows = yield recursiveSearch(appId, query, params);
358
+ const rows = yield recursiveSearch(query, params);
361
359
  return { rows };
362
360
  });
@@ -8,20 +8,20 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  step((generator = generator.apply(thisArg, _arguments || [])).next());
9
9
  });
10
10
  };
11
- const CouchDB = require("../../../db");
12
11
  const { getRowParams } = require("../../../db/utils");
13
12
  const { outputProcessing, processAutoColumn, processFormulas, } = require("../../../utilities/rowProcessor");
14
13
  const { FieldTypes, FormulaTypes } = require("../../../constants");
15
14
  const { isEqual } = require("lodash");
16
15
  const { cloneDeep } = require("lodash/fp");
16
+ const { getAppDB } = require("@budibase/backend-core/context");
17
17
  /**
18
18
  * This function runs through a list of enriched rows, looks at the rows which
19
19
  * are related and then checks if they need the state of their formulas
20
20
  * updated.
21
21
  * NOTE: this will only for affect static formulas.
22
22
  */
23
- exports.updateRelatedFormula = (appId, table, enrichedRows) => __awaiter(void 0, void 0, void 0, function* () {
24
- const db = new CouchDB(appId);
23
+ exports.updateRelatedFormula = (table, enrichedRows) => __awaiter(void 0, void 0, void 0, function* () {
24
+ const db = getAppDB();
25
25
  // no formula to update, we're done
26
26
  if (!table.relatedFormula) {
27
27
  return;
@@ -59,7 +59,7 @@ exports.updateRelatedFormula = (appId, table, enrichedRows) => __awaiter(void 0,
59
59
  if (column.type === FieldTypes.FORMULA &&
60
60
  column.formulaType === FormulaTypes.STATIC) {
61
61
  // re-enrich rows for all the related, don't update the related formula for them
62
- promises = promises.concat(relatedRows[tableId].map(related => exports.finaliseRow(appId, relatedTable, related, {
62
+ promises = promises.concat(relatedRows[tableId].map(related => exports.finaliseRow(relatedTable, related, {
63
63
  updateFormula: false,
64
64
  })));
65
65
  }
@@ -68,15 +68,15 @@ exports.updateRelatedFormula = (appId, table, enrichedRows) => __awaiter(void 0,
68
68
  }
69
69
  yield Promise.all(promises);
70
70
  });
71
- exports.updateAllFormulasInTable = (appId, table) => __awaiter(void 0, void 0, void 0, function* () {
72
- const db = new CouchDB(appId);
71
+ exports.updateAllFormulasInTable = (table) => __awaiter(void 0, void 0, void 0, function* () {
72
+ const db = getAppDB();
73
73
  // start by getting the raw rows (which will be written back to DB after update)
74
74
  let rows = (yield db.allDocs(getRowParams(table._id, null, {
75
75
  include_docs: true,
76
76
  }))).rows.map(row => row.doc);
77
77
  // now enrich the rows, note the clone so that we have the base state of the
78
78
  // rows so that we don't write any of the enriched information back
79
- let enrichedRows = yield outputProcessing({ appId }, table, cloneDeep(rows), {
79
+ let enrichedRows = yield outputProcessing(table, cloneDeep(rows), {
80
80
  squash: false,
81
81
  });
82
82
  const updatedRows = [];
@@ -102,11 +102,11 @@ exports.updateAllFormulasInTable = (appId, table) => __awaiter(void 0, void 0, v
102
102
  * row. The reason we need to return the enriched row is that the automation row created trigger
103
103
  * expects the row to be totally enriched/contain all relationships.
104
104
  */
105
- exports.finaliseRow = (appId, table, row, { oldTable, updateFormula } = { updateFormula: true }) => __awaiter(void 0, void 0, void 0, function* () {
106
- const db = new CouchDB(appId);
105
+ exports.finaliseRow = (table, row, { oldTable, updateFormula } = { updateFormula: true }) => __awaiter(void 0, void 0, void 0, function* () {
106
+ const db = getAppDB();
107
107
  row.type = "row";
108
108
  // process the row before return, to include relationships
109
- let enrichedRow = yield outputProcessing({ appId }, table, cloneDeep(row), {
109
+ let enrichedRow = yield outputProcessing(table, cloneDeep(row), {
110
110
  squash: false,
111
111
  });
112
112
  // use enriched row to generate formulas for saving, specifically only use as context
@@ -141,7 +141,7 @@ exports.finaliseRow = (appId, table, row, { oldTable, updateFormula } = { update
141
141
  enrichedRow = yield processFormulas(table, enrichedRow, { dynamic: false });
142
142
  // this updates the related formulas in other rows based on the relations to this row
143
143
  if (updateFormula) {
144
- yield exports.updateRelatedFormula(appId, table, enrichedRow);
144
+ yield exports.updateRelatedFormula(table, enrichedRow);
145
145
  }
146
146
  return { row: enrichedRow, table };
147
147
  });
@@ -10,12 +10,12 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
10
10
  };
11
11
  const validateJs = require("validate.js");
12
12
  const { cloneDeep } = require("lodash/fp");
13
- const CouchDB = require("../../../db");
14
13
  const { InternalTables } = require("../../../db/utils");
15
14
  const userController = require("../user");
16
15
  const { FieldTypes } = require("../../../constants");
17
16
  const { processStringSync } = require("@budibase/string-templates");
18
17
  const { makeExternalQuery } = require("../../../integrations/base/utils");
18
+ const { getAppDB } = require("@budibase/backend-core/context");
19
19
  validateJs.extend(validateJs.validators.datetime, {
20
20
  parse: function (value) {
21
21
  return new Date(value).getTime();
@@ -25,13 +25,14 @@ validateJs.extend(validateJs.validators.datetime, {
25
25
  return new Date(value).toISOString();
26
26
  },
27
27
  });
28
- exports.getDatasourceAndQuery = (appId, json) => __awaiter(void 0, void 0, void 0, function* () {
28
+ exports.getDatasourceAndQuery = (json) => __awaiter(void 0, void 0, void 0, function* () {
29
29
  const datasourceId = json.endpoint.datasourceId;
30
- const db = new CouchDB(appId);
30
+ const db = getAppDB();
31
31
  const datasource = yield db.get(datasourceId);
32
32
  return makeExternalQuery(datasource, json);
33
33
  });
34
- exports.findRow = (ctx, db, tableId, rowId) => __awaiter(void 0, void 0, void 0, function* () {
34
+ exports.findRow = (ctx, tableId, rowId) => __awaiter(void 0, void 0, void 0, function* () {
35
+ const db = getAppDB();
35
36
  let row;
36
37
  // TODO remove special user case in future
37
38
  if (tableId === InternalTables.USER_METADATA) {
@@ -49,9 +50,9 @@ exports.findRow = (ctx, db, tableId, rowId) => __awaiter(void 0, void 0, void 0,
49
50
  }
50
51
  return row;
51
52
  });
52
- exports.validate = ({ appId, tableId, row, table }) => __awaiter(void 0, void 0, void 0, function* () {
53
+ exports.validate = ({ tableId, row, table }) => __awaiter(void 0, void 0, void 0, function* () {
53
54
  if (!table) {
54
- const db = new CouchDB(appId);
55
+ const db = getAppDB();
55
56
  table = yield db.get(tableId);
56
57
  }
57
58
  const errors = {};
@@ -8,20 +8,18 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  step((generator = generator.apply(thisArg, _arguments || [])).next());
9
9
  });
10
10
  };
11
- const CouchDB = require("../../db");
12
11
  const { getScreenParams, generateScreenID } = require("../../db/utils");
13
12
  const { AccessController } = require("@budibase/backend-core/roles");
13
+ const { getAppDB } = require("@budibase/backend-core/context");
14
14
  exports.fetch = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
15
- const appId = ctx.appId;
16
- const db = new CouchDB(appId);
15
+ const db = getAppDB();
17
16
  const screens = (yield db.allDocs(getScreenParams(null, {
18
17
  include_docs: true,
19
18
  }))).rows.map(element => element.doc);
20
- ctx.body = yield new AccessController(appId).checkScreensAccess(screens, ctx.user.role._id);
19
+ ctx.body = yield new AccessController().checkScreensAccess(screens, ctx.user.role._id);
21
20
  });
22
21
  exports.save = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
23
- const appId = ctx.appId;
24
- const db = new CouchDB(appId);
22
+ const db = getAppDB();
25
23
  let screen = ctx.request.body;
26
24
  if (!screen._id) {
27
25
  screen._id = generateScreenID();
@@ -31,7 +29,7 @@ exports.save = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
31
29
  ctx.body = Object.assign(Object.assign({}, screen), { _id: response.id, _rev: response.rev });
32
30
  });
33
31
  exports.destroy = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
34
- const db = new CouchDB(ctx.appId);
32
+ const db = getAppDB();
35
33
  yield db.remove(ctx.params.screenId, ctx.params.screenRev);
36
34
  ctx.body = {
37
35
  message: "Screen deleted successfully",
@@ -15,13 +15,13 @@ const uuid = require("uuid");
15
15
  const { ObjectStoreBuckets } = require("../../../constants");
16
16
  const { processString } = require("@budibase/string-templates");
17
17
  const { getAllApps } = require("@budibase/backend-core/db");
18
- const CouchDB = require("../../../db");
19
18
  const { loadHandlebarsFile, NODE_MODULES_PATH, TOP_LEVEL_PATH, } = require("../../../utilities/fileSystem");
20
19
  const env = require("../../../environment");
21
20
  const { clientLibraryPath } = require("../../../utilities");
22
21
  const { upload } = require("../../../utilities/fileSystem");
23
22
  const { attachmentsRelativeURL } = require("../../../utilities");
24
23
  const { DocumentTypes } = require("../../../db/utils");
24
+ const { getAppDB } = require("@budibase/backend-core/context");
25
25
  const AWS = require("aws-sdk");
26
26
  const AWS_REGION = env.AWS_REGION ? env.AWS_REGION : "eu-west-1";
27
27
  function prepareUpload({ s3Key, bucket, metadata, file }) {
@@ -48,7 +48,7 @@ function getAppIdFromUrl(ctx) {
48
48
  // the "appId" component of the URL can be the id or the custom url
49
49
  let possibleAppUrl = `/${encodeURI(ctx.params.appId).toLowerCase()}`;
50
50
  // search prod apps for a url that matches, exclude dev where id is always used
51
- const apps = yield getAllApps(CouchDB, { dev: false });
51
+ const apps = yield getAllApps({ dev: false });
52
52
  const app = apps.filter(a => a.url && a.url.toLowerCase() === possibleAppUrl)[0];
53
53
  if (app && app.appId) {
54
54
  return app.appId;
@@ -86,7 +86,7 @@ exports.serveApp = function (ctx) {
86
86
  return __awaiter(this, void 0, void 0, function* () {
87
87
  let appId = yield getAppIdFromUrl(ctx);
88
88
  const App = require("./templates/BudibaseApp.svelte").default;
89
- const db = new CouchDB(appId, { skip_setup: true });
89
+ const db = getAppDB({ skip_setup: true });
90
90
  const appInfo = yield db.get(DocumentTypes.APP_METADATA);
91
91
  const { head, html, css } = App.render({
92
92
  title: appInfo.name,
@@ -113,7 +113,7 @@ exports.serveClientLibrary = function (ctx) {
113
113
  exports.getSignedUploadURL = function (ctx) {
114
114
  var _a, _b, _c;
115
115
  return __awaiter(this, void 0, void 0, function* () {
116
- const database = new CouchDB(ctx.appId);
116
+ const database = getAppDB();
117
117
  // Ensure datasource is valid
118
118
  let datasource;
119
119
  try {
@@ -8,13 +8,13 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  step((generator = generator.apply(thisArg, _arguments || [])).next());
9
9
  });
10
10
  };
11
- const CouchDB = require("../../../db");
12
11
  const { FieldTypes, FormulaTypes } = require("../../../constants");
13
12
  const { getAllInternalTables, clearColumns } = require("./utils");
14
13
  const { doesContainStrings } = require("@budibase/string-templates");
15
14
  const { cloneDeep } = require("lodash/fp");
16
15
  const { isEqual, uniq } = require("lodash");
17
16
  const { updateAllFormulasInTable } = require("../row/staticFormula");
17
+ const { getAppDB } = require("@budibase/backend-core/context");
18
18
  function isStaticFormula(column) {
19
19
  return (column.type === FieldTypes.FORMULA &&
20
20
  column.formulaType === FormulaTypes.STATIC);
@@ -42,11 +42,10 @@ function getFormulaThatUseColumn(table, columnNames) {
42
42
  * This functions checks for when a related table, column or related column is deleted, if any
43
43
  * tables need to have the formula column removed.
44
44
  */
45
- function checkIfFormulaNeedsCleared(appId, table, { oldTable, deletion }) {
45
+ function checkIfFormulaNeedsCleared(table, { oldTable, deletion }) {
46
46
  return __awaiter(this, void 0, void 0, function* () {
47
- const db = new CouchDB(appId);
48
47
  // start by retrieving all tables, remove the current table from the list
49
- const tables = (yield getAllInternalTables(appId)).filter(tbl => tbl._id !== table._id);
48
+ const tables = (yield getAllInternalTables()).filter(tbl => tbl._id !== table._id);
50
49
  const schemaToUse = oldTable ? oldTable.schema : table.schema;
51
50
  let removedColumns = Object.values(schemaToUse).filter(column => deletion || !table.schema[column.name]);
52
51
  // remove any formula columns that used related columns
@@ -58,7 +57,7 @@ function checkIfFormulaNeedsCleared(appId, table, { oldTable, deletion }) {
58
57
  }
59
58
  const columnsToDelete = getFormulaThatUseColumn(tableToUse, removed.name);
60
59
  if (columnsToDelete.length > 0) {
61
- yield clearColumns(db, table, columnsToDelete);
60
+ yield clearColumns(table, columnsToDelete);
62
61
  }
63
62
  // need a special case, where a column has been removed from this table, but was used
64
63
  // in a different, related tables formula
@@ -79,7 +78,7 @@ function checkIfFormulaNeedsCleared(appId, table, { oldTable, deletion }) {
79
78
  ]));
80
79
  }
81
80
  if (relatedFormulaToRemove.length > 0) {
82
- yield clearColumns(db, relatedTable, uniq(relatedFormulaToRemove));
81
+ yield clearColumns(relatedTable, uniq(relatedFormulaToRemove));
83
82
  }
84
83
  }
85
84
  }
@@ -92,11 +91,11 @@ function checkIfFormulaNeedsCleared(appId, table, { oldTable, deletion }) {
92
91
  * can manage hydrating related rows formula fields. This is
93
92
  * specifically only for static formula.
94
93
  */
95
- function updateRelatedFormulaLinksOnTables(appId, table, { deletion } = { deletion: false }) {
94
+ function updateRelatedFormulaLinksOnTables(table, { deletion } = { deletion: false }) {
96
95
  return __awaiter(this, void 0, void 0, function* () {
97
- const db = new CouchDB(appId);
96
+ const db = getAppDB();
98
97
  // start by retrieving all tables, remove the current table from the list
99
- const tables = (yield getAllInternalTables(appId)).filter(tbl => tbl._id !== table._id);
98
+ const tables = (yield getAllInternalTables()).filter(tbl => tbl._id !== table._id);
100
99
  // clone the tables, so we can compare at end
101
100
  const initialTables = cloneDeep(tables);
102
101
  // first find the related column names
@@ -138,7 +137,7 @@ function updateRelatedFormulaLinksOnTables(appId, table, { deletion } = { deleti
138
137
  }
139
138
  });
140
139
  }
141
- function checkIfFormulaUpdated(appId, table, { oldTable }) {
140
+ function checkIfFormulaUpdated(table, { oldTable }) {
142
141
  return __awaiter(this, void 0, void 0, function* () {
143
142
  // look to see if any formula values have changed
144
143
  const shouldUpdate = Object.values(table.schema).find(column => isStaticFormula(column) &&
@@ -147,14 +146,14 @@ function checkIfFormulaUpdated(appId, table, { oldTable }) {
147
146
  !isEqual(oldTable.schema[column.name], column)));
148
147
  // if a static formula column has updated, then need to run the update
149
148
  if (shouldUpdate != null) {
150
- yield updateAllFormulasInTable(appId, table);
149
+ yield updateAllFormulasInTable(table);
151
150
  }
152
151
  });
153
152
  }
154
- exports.runStaticFormulaChecks = (appId, table, { oldTable, deletion }) => __awaiter(void 0, void 0, void 0, function* () {
155
- yield updateRelatedFormulaLinksOnTables(appId, table, { deletion });
156
- yield checkIfFormulaNeedsCleared(appId, table, { oldTable, deletion });
153
+ exports.runStaticFormulaChecks = (table, { oldTable, deletion }) => __awaiter(void 0, void 0, void 0, function* () {
154
+ yield updateRelatedFormulaLinksOnTables(table, { deletion });
155
+ yield checkIfFormulaNeedsCleared(table, { oldTable, deletion });
157
156
  if (!deletion) {
158
- yield checkIfFormulaUpdated(appId, table, { oldTable });
157
+ yield checkIfFormulaUpdated(table, { oldTable });
159
158
  }
160
159
  });