@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
@@ -8,7 +8,6 @@ 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 { buildExternalTableId, breakExternalTableId, } = require("../../../integrations/utils");
13
12
  const { getTable, generateForeignKey, generateJunctionTableName, foreignKeyStructure, hasTypeChanged, } = require("./utils");
14
13
  const { DataSourceOperation, FieldTypes, RelationshipTypes, } = require("../../../constants");
@@ -16,6 +15,7 @@ const { makeExternalQuery } = require("../../../integrations/base/utils");
16
15
  const { cloneDeep } = require("lodash/fp");
17
16
  const csvParser = require("../../../utilities/csvParser");
18
17
  const { handleRequest } = require("../row/external");
18
+ const { getAppDB } = require("@budibase/backend-core/context");
19
19
  function makeTableRequest(datasource, operation, table, tables, oldTable = null) {
20
20
  return __awaiter(this, void 0, void 0, function* () {
21
21
  const json = {
@@ -134,7 +134,6 @@ function isRelationshipSetup(column) {
134
134
  }
135
135
  exports.save = function (ctx) {
136
136
  return __awaiter(this, void 0, void 0, function* () {
137
- const appId = ctx.appId;
138
137
  const table = ctx.request.body;
139
138
  // can't do this right now
140
139
  delete table.dataImport;
@@ -146,12 +145,12 @@ exports.save = function (ctx) {
146
145
  let tableToSave = Object.assign({ type: "table", _id: buildExternalTableId(datasourceId, table.name) }, table);
147
146
  let oldTable;
148
147
  if (ctx.request.body && ctx.request.body._id) {
149
- oldTable = yield getTable(appId, ctx.request.body._id);
148
+ oldTable = yield getTable(ctx.request.body._id);
150
149
  }
151
150
  if (hasTypeChanged(tableToSave, oldTable)) {
152
151
  ctx.throw(400, "A column type has changed.");
153
152
  }
154
- const db = new CouchDB(appId);
153
+ const db = getAppDB();
155
154
  const datasource = yield db.get(datasourceId);
156
155
  const oldTables = cloneDeep(datasource.entities);
157
156
  const tables = datasource.entities;
@@ -215,13 +214,12 @@ exports.save = function (ctx) {
215
214
  };
216
215
  exports.destroy = function (ctx) {
217
216
  return __awaiter(this, void 0, void 0, function* () {
218
- const appId = ctx.appId;
219
- const tableToDelete = yield getTable(appId, ctx.params.tableId);
217
+ const tableToDelete = yield getTable(ctx.params.tableId);
220
218
  if (!tableToDelete || !tableToDelete.created) {
221
219
  ctx.throw(400, "Cannot delete tables which weren't created in Budibase.");
222
220
  }
223
221
  const datasourceId = getDatasourceId(tableToDelete);
224
- const db = new CouchDB(appId);
222
+ const db = getAppDB();
225
223
  const datasource = yield db.get(datasourceId);
226
224
  const tables = datasource.entities;
227
225
  const operation = DataSourceOperation.DELETE_TABLE;
@@ -234,14 +232,13 @@ exports.destroy = function (ctx) {
234
232
  };
235
233
  exports.bulkImport = function (ctx) {
236
234
  return __awaiter(this, void 0, void 0, function* () {
237
- const appId = ctx.appId;
238
- const table = yield getTable(appId, ctx.params.tableId);
235
+ const table = yield getTable(ctx.params.tableId);
239
236
  const { dataImport } = ctx.request.body;
240
237
  if (!dataImport || !dataImport.schema || !dataImport.csvString) {
241
238
  ctx.throw(400, "Provided data import information is invalid.");
242
239
  }
243
240
  const rows = yield csvParser.transform(Object.assign(Object.assign({}, dataImport), { existingTable: table }));
244
- yield handleRequest(appId, DataSourceOperation.BULK_CREATE, table._id, {
241
+ yield handleRequest(DataSourceOperation.BULK_CREATE, table._id, {
245
242
  rows,
246
243
  });
247
244
  return table;
@@ -8,12 +8,12 @@ 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 internal = require("./internal");
13
12
  const external = require("./external");
14
13
  const csvParser = require("../../../utilities/csvParser");
15
14
  const { isExternalTable, isSQL } = require("../../../integrations/utils");
16
15
  const { getDatasourceParams } = require("../../../db/utils");
16
+ const { getAppDB } = require("@budibase/backend-core/context");
17
17
  const { getTable, getAllInternalTables } = require("./utils");
18
18
  function pickApi({ tableId, table }) {
19
19
  if (table && !tableId) {
@@ -30,8 +30,8 @@ function pickApi({ tableId, table }) {
30
30
  // covers both internal and external
31
31
  exports.fetch = function (ctx) {
32
32
  return __awaiter(this, void 0, void 0, function* () {
33
- const db = new CouchDB(ctx.appId);
34
- const internal = yield getAllInternalTables(ctx.appId);
33
+ const db = getAppDB();
34
+ const internal = yield getAllInternalTables();
35
35
  const externalTables = yield db.allDocs(getDatasourceParams("plus", {
36
36
  include_docs: true,
37
37
  }));
@@ -50,7 +50,7 @@ exports.fetch = function (ctx) {
50
50
  exports.find = function (ctx) {
51
51
  return __awaiter(this, void 0, void 0, function* () {
52
52
  const tableId = ctx.params.id;
53
- ctx.body = yield getTable(ctx.appId, tableId);
53
+ ctx.body = yield getTable(tableId);
54
54
  });
55
55
  };
56
56
  exports.save = function (ctx) {
@@ -93,7 +93,7 @@ exports.validateCSVSchema = function (ctx) {
93
93
  const { csvString, schema = {}, tableId } = ctx.request.body;
94
94
  let existingTable;
95
95
  if (tableId) {
96
- existingTable = yield getTable(ctx.appId, tableId);
96
+ existingTable = yield getTable(tableId);
97
97
  }
98
98
  let result = yield csvParser.parse(csvString, schema);
99
99
  if (existingTable) {
@@ -19,18 +19,18 @@ 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 { getRowParams, generateTableID } = require("../../../db/utils");
25
24
  const { FieldTypes } = require("../../../constants");
26
25
  const { TableSaveFunctions, hasTypeChanged, getTable, handleDataImport, } = require("./utils");
27
26
  const usageQuota = require("../../../utilities/usageQuota");
27
+ const { getAppDB } = require("@budibase/backend-core/context");
28
+ const env = require("../../../environment");
28
29
  const { cleanupAttachments } = require("../../../utilities/rowProcessor");
29
30
  const { runStaticFormulaChecks } = require("./bulkFormula");
30
31
  exports.save = function (ctx) {
31
32
  return __awaiter(this, void 0, void 0, function* () {
32
- const appId = ctx.appId;
33
- const db = new CouchDB(appId);
33
+ const db = getAppDB();
34
34
  const _a = ctx.request.body, { dataImport } = _a, rest = __rest(_a, ["dataImport"]);
35
35
  let tableToSave = Object.assign({ type: "table", _id: generateTableID(), views: {} }, rest);
36
36
  // if the table obj had an _id then it will have been retrieved
@@ -44,8 +44,7 @@ exports.save = function (ctx) {
44
44
  // saving a table is a complex operation, involving many different steps, this
45
45
  // has been broken out into a utility to make it more obvious/easier to manipulate
46
46
  const tableSaveFunctions = new TableSaveFunctions({
47
- db,
48
- ctx,
47
+ user: ctx.user,
49
48
  oldTable,
50
49
  dataImport,
51
50
  });
@@ -85,7 +84,6 @@ exports.save = function (ctx) {
85
84
  // update linked rows
86
85
  try {
87
86
  const linkResp = yield linkRows.updateLinks({
88
- appId,
89
87
  eventType: oldTable
90
88
  ? linkRows.EventType.TABLE_UPDATED
91
89
  : linkRows.EventType.TABLE_SAVE,
@@ -109,14 +107,13 @@ exports.save = function (ctx) {
109
107
  tableToSave._rev = result.rev;
110
108
  tableToSave = yield tableSaveFunctions.after(tableToSave);
111
109
  // has to run after, make sure it has _id
112
- yield runStaticFormulaChecks(appId, tableToSave, { oldTable });
110
+ yield runStaticFormulaChecks(tableToSave, { oldTable });
113
111
  return tableToSave;
114
112
  });
115
113
  };
116
114
  exports.destroy = function (ctx) {
117
115
  return __awaiter(this, void 0, void 0, function* () {
118
- const appId = ctx.appId;
119
- const db = new CouchDB(appId);
116
+ const db = getAppDB();
120
117
  const tableToDelete = yield db.get(ctx.params.tableId);
121
118
  // Delete all rows for that table
122
119
  const rows = yield db.allDocs(getRowParams(ctx.params.tableId, null, {
@@ -126,30 +123,30 @@ exports.destroy = function (ctx) {
126
123
  yield usageQuota.update(usageQuota.Properties.ROW, -rows.rows.length);
127
124
  // update linked rows
128
125
  yield linkRows.updateLinks({
129
- appId,
130
126
  eventType: linkRows.EventType.TABLE_DELETE,
131
127
  table: tableToDelete,
132
128
  });
133
129
  // don't remove the table itself until very end
134
130
  yield db.remove(tableToDelete);
135
131
  // remove table search index
136
- const currentIndexes = yield db.getIndexes();
137
- const existingIndex = currentIndexes.indexes.find(existing => existing.name === `search:${ctx.params.tableId}`);
138
- if (existingIndex) {
139
- yield db.deleteIndex(existingIndex);
132
+ if (!env.isTest()) {
133
+ const currentIndexes = yield db.getIndexes();
134
+ const existingIndex = currentIndexes.indexes.find(existing => existing.name === `search:${ctx.params.tableId}`);
135
+ if (existingIndex) {
136
+ yield db.deleteIndex(existingIndex);
137
+ }
140
138
  }
141
139
  // has to run after, make sure it has _id
142
- yield runStaticFormulaChecks(appId, tableToDelete, { deletion: true });
143
- yield cleanupAttachments(appId, tableToDelete, { rows });
140
+ yield runStaticFormulaChecks(tableToDelete, { deletion: true });
141
+ yield cleanupAttachments(tableToDelete, { rows });
144
142
  return tableToDelete;
145
143
  });
146
144
  };
147
145
  exports.bulkImport = function (ctx) {
148
146
  return __awaiter(this, void 0, void 0, function* () {
149
- const appId = ctx.appId;
150
- const table = yield getTable(appId, ctx.params.tableId);
147
+ const table = yield getTable(ctx.params.tableId);
151
148
  const { dataImport } = ctx.request.body;
152
- yield handleDataImport(appId, ctx.user, table, dataImport);
149
+ yield handleDataImport(ctx.user, table, dataImport);
153
150
  return table;
154
151
  });
155
152
  };
@@ -8,7 +8,6 @@ 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 csvParser = require("../../../utilities/csvParser");
13
12
  const { getRowParams, generateRowID, InternalTables, getTableParams, BudibaseInternalDB, } = require("../../../db/utils");
14
13
  const { isEqual } = require("lodash");
@@ -19,9 +18,10 @@ const { isExternalTable, breakExternalTableId, isSQL, } = require("../../../inte
19
18
  const { getViews, saveView } = require("../view/utils");
20
19
  const viewTemplate = require("../view/viewBuilder");
21
20
  const usageQuota = require("../../../utilities/usageQuota");
21
+ const { getAppDB } = require("@budibase/backend-core/context");
22
22
  const { cloneDeep } = require("lodash/fp");
23
- exports.clearColumns = (appId, table, columnNames) => __awaiter(void 0, void 0, void 0, function* () {
24
- const db = new CouchDB(appId);
23
+ exports.clearColumns = (table, columnNames) => __awaiter(void 0, void 0, void 0, function* () {
24
+ const db = getAppDB();
25
25
  const rows = yield db.allDocs(getRowParams(table._id, null, {
26
26
  include_docs: true,
27
27
  }));
@@ -30,7 +30,8 @@ exports.clearColumns = (appId, table, columnNames) => __awaiter(void 0, void 0,
30
30
  return doc;
31
31
  }));
32
32
  });
33
- exports.checkForColumnUpdates = (appId, db, oldTable, updatedTable) => __awaiter(void 0, void 0, void 0, function* () {
33
+ exports.checkForColumnUpdates = (oldTable, updatedTable) => __awaiter(void 0, void 0, void 0, function* () {
34
+ const db = getAppDB();
34
35
  let updatedRows = [];
35
36
  const rename = updatedTable._rename;
36
37
  let deletedColumns = [];
@@ -56,9 +57,9 @@ exports.checkForColumnUpdates = (appId, db, oldTable, updatedTable) => __awaiter
56
57
  return row;
57
58
  });
58
59
  // cleanup any attachments from object storage for deleted attachment columns
59
- yield cleanupAttachments(appId, updatedTable, { oldTable, rows: rawRows });
60
+ yield cleanupAttachments(updatedTable, { oldTable, rows: rawRows });
60
61
  // Update views
61
- yield exports.checkForViewUpdates(db, updatedTable, rename, deletedColumns);
62
+ yield exports.checkForViewUpdates(updatedTable, rename, deletedColumns);
62
63
  delete updatedTable._rename;
63
64
  }
64
65
  return { rows: updatedRows, table: updatedTable };
@@ -81,11 +82,11 @@ exports.makeSureTableUpToDate = (table, tableToSave) => {
81
82
  }
82
83
  return tableToSave;
83
84
  };
84
- exports.handleDataImport = (appId, user, table, dataImport) => __awaiter(void 0, void 0, void 0, function* () {
85
+ exports.handleDataImport = (user, table, dataImport) => __awaiter(void 0, void 0, void 0, function* () {
85
86
  if (!dataImport || !dataImport.csvString) {
86
87
  return table;
87
88
  }
88
- const db = new CouchDB(appId);
89
+ const db = getAppDB();
89
90
  // Populate the table with rows imported from CSV in a bulk update
90
91
  const data = yield csvParser.transform(Object.assign(Object.assign({}, dataImport), { existingTable: table }));
91
92
  let finalData = [];
@@ -120,8 +121,8 @@ exports.handleDataImport = (appId, user, table, dataImport) => __awaiter(void 0,
120
121
  table._rev = response._rev;
121
122
  return table;
122
123
  });
123
- exports.handleSearchIndexes = (appId, table) => __awaiter(void 0, void 0, void 0, function* () {
124
- const db = new CouchDB(appId);
124
+ exports.handleSearchIndexes = (table) => __awaiter(void 0, void 0, void 0, function* () {
125
+ const db = getAppDB();
125
126
  // create relevant search indexes
126
127
  if (table.indexes && table.indexes.length > 0) {
127
128
  const currentIndexes = yield db.getIndexes();
@@ -170,12 +171,9 @@ exports.checkStaticTables = table => {
170
171
  return table;
171
172
  };
172
173
  class TableSaveFunctions {
173
- constructor({ db, ctx, oldTable, dataImport }) {
174
- this.db = db;
175
- this.ctx = ctx;
176
- if (this.ctx && this.ctx.user) {
177
- this.appId = this.ctx.appId;
178
- }
174
+ constructor({ user, oldTable, dataImport }) {
175
+ this.db = getAppDB();
176
+ this.user = user;
179
177
  this.oldTable = oldTable;
180
178
  this.dataImport = dataImport;
181
179
  // any rows that need updated
@@ -194,7 +192,7 @@ class TableSaveFunctions {
194
192
  // when confirmed valid
195
193
  mid(table) {
196
194
  return __awaiter(this, void 0, void 0, function* () {
197
- let response = yield exports.checkForColumnUpdates(this.appId, this.db, this.oldTable, table);
195
+ let response = yield exports.checkForColumnUpdates(this.oldTable, table);
198
196
  this.rows = this.rows.concat(response.rows);
199
197
  return table;
200
198
  });
@@ -202,8 +200,8 @@ class TableSaveFunctions {
202
200
  // after saving
203
201
  after(table) {
204
202
  return __awaiter(this, void 0, void 0, function* () {
205
- table = yield exports.handleSearchIndexes(this.appId, table);
206
- table = yield exports.handleDataImport(this.appId, this.ctx.user, table, this.dataImport);
203
+ table = yield exports.handleSearchIndexes(table);
204
+ table = yield exports.handleDataImport(this.user, table, this.dataImport);
207
205
  return table;
208
206
  });
209
207
  }
@@ -211,39 +209,39 @@ class TableSaveFunctions {
211
209
  return this.rows;
212
210
  }
213
211
  }
214
- exports.getAllInternalTables = (appId) => __awaiter(void 0, void 0, void 0, function* () {
215
- const db = new CouchDB(appId);
212
+ exports.getAllInternalTables = () => __awaiter(void 0, void 0, void 0, function* () {
213
+ const db = getAppDB();
216
214
  const internalTables = yield db.allDocs(getTableParams(null, {
217
215
  include_docs: true,
218
216
  }));
219
217
  return internalTables.rows.map(tableDoc => (Object.assign(Object.assign({}, tableDoc.doc), { type: "internal", sourceId: BudibaseInternalDB._id })));
220
218
  });
221
- exports.getAllExternalTables = (appId, datasourceId) => __awaiter(void 0, void 0, void 0, function* () {
222
- const db = new CouchDB(appId);
219
+ exports.getAllExternalTables = (datasourceId) => __awaiter(void 0, void 0, void 0, function* () {
220
+ const db = getAppDB();
223
221
  const datasource = yield db.get(datasourceId);
224
222
  if (!datasource || !datasource.entities) {
225
223
  throw "Datasource is not configured fully.";
226
224
  }
227
225
  return datasource.entities;
228
226
  });
229
- exports.getExternalTable = (appId, datasourceId, tableName) => __awaiter(void 0, void 0, void 0, function* () {
230
- const entities = yield exports.getAllExternalTables(appId, datasourceId);
227
+ exports.getExternalTable = (datasourceId, tableName) => __awaiter(void 0, void 0, void 0, function* () {
228
+ const entities = yield exports.getAllExternalTables(datasourceId);
231
229
  return entities[tableName];
232
230
  });
233
- exports.getTable = (appId, tableId) => __awaiter(void 0, void 0, void 0, function* () {
234
- const db = new CouchDB(appId);
231
+ exports.getTable = (tableId) => __awaiter(void 0, void 0, void 0, function* () {
232
+ const db = getAppDB();
235
233
  if (isExternalTable(tableId)) {
236
234
  let { datasourceId, tableName } = breakExternalTableId(tableId);
237
235
  const datasource = yield db.get(datasourceId);
238
- const table = yield exports.getExternalTable(appId, datasourceId, tableName);
236
+ const table = yield exports.getExternalTable(datasourceId, tableName);
239
237
  return Object.assign(Object.assign({}, table), { sql: isSQL(datasource) });
240
238
  }
241
239
  else {
242
240
  return db.get(tableId);
243
241
  }
244
242
  });
245
- exports.checkForViewUpdates = (db, table, rename, deletedColumns) => __awaiter(void 0, void 0, void 0, function* () {
246
- const views = yield getViews(db);
243
+ exports.checkForViewUpdates = (table, rename, deletedColumns) => __awaiter(void 0, void 0, void 0, function* () {
244
+ const views = yield getViews();
247
245
  const tableViews = views.filter(view => view.meta.tableId === table._id);
248
246
  // Check each table view to see if impacted by this table action
249
247
  for (let view of tableViews) {
@@ -299,7 +297,7 @@ exports.checkForViewUpdates = (db, table, rename, deletedColumns) => __awaiter(v
299
297
  // Update view if required
300
298
  if (needsUpdated) {
301
299
  const newViewTemplate = viewTemplate(view.meta);
302
- yield saveView(db, null, view.name, newViewTemplate);
300
+ yield saveView(null, view.name, newViewTemplate);
303
301
  if (!newViewTemplate.meta.schema) {
304
302
  newViewTemplate.meta.schema = table.schema;
305
303
  }
@@ -8,18 +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 { generateUserMetadataID, getUserMetadataParams, generateUserFlagID, } = require("../../db/utils");
13
12
  const { InternalTables } = require("../../db/utils");
14
13
  const { getGlobalUsers, getRawGlobalUser } = require("../../utilities/global");
15
14
  const { getFullUser } = require("../../utilities/users");
16
15
  const { isEqual } = require("lodash");
17
16
  const { BUILTIN_ROLE_IDS } = require("@budibase/backend-core/roles");
18
- const { getDevelopmentAppID, getDeployedAppIDs, } = require("@budibase/backend-core/db");
19
- const { doesDatabaseExist } = require("../../utilities");
17
+ const { getDevelopmentAppID, getProdAppIDs, dbExists, } = require("@budibase/backend-core/db");
20
18
  const { UserStatus } = require("@budibase/backend-core/constants");
21
- function rawMetadata(db) {
19
+ const { getAppDB } = require("@budibase/backend-core/context");
20
+ function rawMetadata() {
22
21
  return __awaiter(this, void 0, void 0, function* () {
22
+ const db = getAppDB();
23
23
  return (yield db.allDocs(getUserMetadataParams(null, {
24
24
  include_docs: true,
25
25
  }))).rows.map(row => row.doc);
@@ -45,13 +45,10 @@ function combineMetadataAndUser(user, metadata) {
45
45
  }
46
46
  return null;
47
47
  }
48
- exports.syncGlobalUsers = (appId) => __awaiter(void 0, void 0, void 0, function* () {
48
+ exports.syncGlobalUsers = () => __awaiter(void 0, void 0, void 0, function* () {
49
49
  // sync user metadata
50
- const db = new CouchDB(appId);
51
- const [users, metadata] = yield Promise.all([
52
- getGlobalUsers(appId),
53
- rawMetadata(db),
54
- ]);
50
+ const db = getAppDB();
51
+ const [users, metadata] = yield Promise.all([getGlobalUsers(), rawMetadata()]);
55
52
  const toWrite = [];
56
53
  for (let user of users) {
57
54
  const combined = yield combineMetadataAndUser(user, metadata);
@@ -86,7 +83,7 @@ exports.syncUser = function (ctx) {
86
83
  let prodAppIds;
87
84
  // if they are a builder then get all production app IDs
88
85
  if ((user.builder && user.builder.global) || deleting) {
89
- prodAppIds = yield getDeployedAppIDs(CouchDB);
86
+ prodAppIds = yield getProdAppIDs();
90
87
  }
91
88
  else {
92
89
  prodAppIds = Object.entries(roles)
@@ -97,10 +94,10 @@ exports.syncUser = function (ctx) {
97
94
  const roleId = roles[prodAppId];
98
95
  const devAppId = getDevelopmentAppID(prodAppId);
99
96
  for (let appId of [prodAppId, devAppId]) {
100
- if (!(yield doesDatabaseExist(appId))) {
97
+ if (!(yield dbExists(appId))) {
101
98
  continue;
102
99
  }
103
- const db = new CouchDB(appId);
100
+ const db = getAppDB();
104
101
  const metadataId = generateUserMetadataID(userId);
105
102
  let metadata;
106
103
  try {
@@ -134,8 +131,8 @@ exports.syncUser = function (ctx) {
134
131
  };
135
132
  exports.fetchMetadata = function (ctx) {
136
133
  return __awaiter(this, void 0, void 0, function* () {
137
- const database = new CouchDB(ctx.appId);
138
- const global = yield getGlobalUsers(ctx.appId);
134
+ const database = getAppDB();
135
+ const global = yield getGlobalUsers();
139
136
  const metadata = yield rawMetadata(database);
140
137
  const users = [];
141
138
  for (let user of global) {
@@ -162,8 +159,7 @@ exports.updateSelfMetadata = function (ctx) {
162
159
  };
163
160
  exports.updateMetadata = function (ctx) {
164
161
  return __awaiter(this, void 0, void 0, function* () {
165
- const appId = ctx.appId;
166
- const db = new CouchDB(appId);
162
+ const db = getAppDB();
167
163
  const user = ctx.request.body;
168
164
  // this isn't applicable to the user
169
165
  delete user.roles;
@@ -173,7 +169,7 @@ exports.updateMetadata = function (ctx) {
173
169
  };
174
170
  exports.destroyMetadata = function (ctx) {
175
171
  return __awaiter(this, void 0, void 0, function* () {
176
- const db = new CouchDB(ctx.appId);
172
+ const db = getAppDB();
177
173
  try {
178
174
  const dbUser = yield db.get(ctx.params.id);
179
175
  yield db.remove(dbUser._id, dbUser._rev);
@@ -199,7 +195,7 @@ exports.setFlag = function (ctx) {
199
195
  ctx.throw(400, "Must supply a 'flag' field in request body.");
200
196
  }
201
197
  const flagDocId = generateUserFlagID(userId);
202
- const db = new CouchDB(ctx.appId);
198
+ const db = getAppDB();
203
199
  let doc;
204
200
  try {
205
201
  doc = yield db.get(flagDocId);
@@ -216,7 +212,7 @@ exports.getFlags = function (ctx) {
216
212
  return __awaiter(this, void 0, void 0, function* () {
217
213
  const userId = ctx.user._id;
218
214
  const docId = generateUserFlagID(userId);
219
- const db = new CouchDB(ctx.appId);
215
+ const db = getAppDB();
220
216
  let doc;
221
217
  try {
222
218
  doc = yield db.get(docId);
@@ -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 viewTemplate = require("./viewBuilder");
24
23
  const { apiFileReturn } = require("../../../utilities/fileSystem");
25
24
  const exporters = require("./exporters");
@@ -27,18 +26,18 @@ const { saveView, getView, getViews, deleteView } = require("./utils");
27
26
  const { fetchView } = require("../row");
28
27
  const { getTable } = require("../table/utils");
29
28
  const { FieldTypes } = require("../../../constants");
29
+ const { getAppDB } = require("@budibase/backend-core/context");
30
30
  exports.fetch = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
31
- const db = new CouchDB(ctx.appId);
32
- ctx.body = yield getViews(db);
31
+ ctx.body = yield getViews();
33
32
  });
34
33
  exports.save = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
35
- const db = new CouchDB(ctx.appId);
34
+ const db = getAppDB();
36
35
  const _a = ctx.request.body, { originalName } = _a, viewToSave = __rest(_a, ["originalName"]);
37
36
  const view = viewTemplate(viewToSave);
38
37
  if (!viewToSave.name) {
39
38
  ctx.throw(400, "Cannot create view without a name");
40
39
  }
41
- yield saveView(db, originalName, viewToSave.name, view);
40
+ yield saveView(originalName, viewToSave.name, view);
42
41
  // add views to table document
43
42
  const table = yield db.get(ctx.request.body.tableId);
44
43
  if (!table.views)
@@ -54,18 +53,17 @@ exports.save = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
54
53
  ctx.body = Object.assign(Object.assign({}, table.views[viewToSave.name]), { name: viewToSave.name });
55
54
  });
56
55
  exports.destroy = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
57
- const db = new CouchDB(ctx.appId);
56
+ const db = getAppDB();
58
57
  const viewName = decodeURI(ctx.params.viewName);
59
- const view = yield deleteView(db, viewName);
58
+ const view = yield deleteView(viewName);
60
59
  const table = yield db.get(view.meta.tableId);
61
60
  delete table.views[viewName];
62
61
  yield db.put(table);
63
62
  ctx.body = view;
64
63
  });
65
64
  exports.exportView = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
66
- const db = new CouchDB(ctx.appId);
67
65
  const viewName = decodeURI(ctx.query.view);
68
- const view = yield getView(db, viewName);
66
+ const view = yield getView(viewName);
69
67
  const format = ctx.query.format;
70
68
  if (!format || !Object.values(exporters.ExportFormats).includes(format)) {
71
69
  ctx.throw(400, "Format must be specified, either csv or json");
@@ -90,7 +88,7 @@ exports.exportView = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
90
88
  let schema = view && view.meta && view.meta.schema;
91
89
  if (!schema) {
92
90
  const tableId = ctx.params.tableId || view.meta.tableId;
93
- const table = yield getTable(ctx.appId, tableId);
91
+ const table = yield getTable(tableId);
94
92
  schema = table.schema;
95
93
  }
96
94
  // remove any relationships
@@ -10,7 +10,9 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
10
10
  };
11
11
  const { ViewNames, generateMemoryViewID, getMemoryViewParams, DocumentTypes, SEPARATOR, } = require("../../../db/utils");
12
12
  const env = require("../../../environment");
13
- exports.getView = (db, viewName) => __awaiter(void 0, void 0, void 0, function* () {
13
+ const { getAppDB } = require("@budibase/backend-core/context");
14
+ exports.getView = (viewName) => __awaiter(void 0, void 0, void 0, function* () {
15
+ const db = getAppDB();
14
16
  if (env.SELF_HOSTED) {
15
17
  const designDoc = yield db.get("_design/database");
16
18
  return designDoc.views[viewName];
@@ -24,7 +26,8 @@ exports.getView = (db, viewName) => __awaiter(void 0, void 0, void 0, function*
24
26
  return viewDoc.view;
25
27
  }
26
28
  });
27
- exports.getViews = (db) => __awaiter(void 0, void 0, void 0, function* () {
29
+ exports.getViews = () => __awaiter(void 0, void 0, void 0, function* () {
30
+ const db = getAppDB();
28
31
  const response = [];
29
32
  if (env.SELF_HOSTED) {
30
33
  const designDoc = yield db.get("_design/database");
@@ -46,7 +49,8 @@ exports.getViews = (db) => __awaiter(void 0, void 0, void 0, function* () {
46
49
  }
47
50
  return response;
48
51
  });
49
- exports.saveView = (db, originalName, viewName, viewTemplate) => __awaiter(void 0, void 0, void 0, function* () {
52
+ exports.saveView = (originalName, viewName, viewTemplate) => __awaiter(void 0, void 0, void 0, function* () {
53
+ const db = getAppDB();
50
54
  if (env.SELF_HOSTED) {
51
55
  const designDoc = yield db.get("_design/database");
52
56
  designDoc.views = Object.assign(Object.assign({}, designDoc.views), { [viewName]: viewTemplate });
@@ -81,7 +85,8 @@ exports.saveView = (db, originalName, viewName, viewTemplate) => __awaiter(void
81
85
  yield db.put(viewDoc);
82
86
  }
83
87
  });
84
- exports.deleteView = (db, viewName) => __awaiter(void 0, void 0, void 0, function* () {
88
+ exports.deleteView = (viewName) => __awaiter(void 0, void 0, void 0, function* () {
89
+ const db = getAppDB();
85
90
  if (env.SELF_HOSTED) {
86
91
  const designDoc = yield db.get("_design/database");
87
92
  const view = designDoc.views[viewName];
@@ -8,12 +8,12 @@ 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 { generateWebhookID, getWebhookParams } = require("../../db/utils");
13
12
  const toJsonSchema = require("to-json-schema");
14
13
  const validate = require("jsonschema").validate;
15
14
  const triggers = require("../../automations/triggers");
16
- const { getDeployedAppID } = require("@budibase/backend-core/db");
15
+ const { getProdAppID } = require("@budibase/backend-core/db");
16
+ const { getAppDB, updateAppId } = require("@budibase/backend-core/context");
17
17
  const AUTOMATION_DESCRIPTION = "Generated from Webhook Schema";
18
18
  function Webhook(name, type, target) {
19
19
  this.live = true;
@@ -28,14 +28,14 @@ exports.WebhookType = {
28
28
  AUTOMATION: "automation",
29
29
  };
30
30
  exports.fetch = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
31
- const db = new CouchDB(ctx.appId);
31
+ const db = getAppDB();
32
32
  const response = yield db.allDocs(getWebhookParams(null, {
33
33
  include_docs: true,
34
34
  }));
35
35
  ctx.body = response.rows.map(row => row.doc);
36
36
  });
37
37
  exports.save = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
38
- const db = new CouchDB(ctx.appId);
38
+ const db = getAppDB();
39
39
  const webhook = ctx.request.body;
40
40
  webhook.appId = ctx.appId;
41
41
  // check that the webhook exists
@@ -53,11 +53,12 @@ exports.save = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
53
53
  };
54
54
  });
55
55
  exports.destroy = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
56
- const db = new CouchDB(ctx.appId);
56
+ const db = getAppDB();
57
57
  ctx.body = yield db.remove(ctx.params.id, ctx.params.rev);
58
58
  });
59
59
  exports.buildSchema = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
60
- const db = new CouchDB(ctx.params.instance);
60
+ updateAppId(ctx.params.instance);
61
+ const db = getAppDB();
61
62
  const webhook = yield db.get(ctx.params.id);
62
63
  webhook.bodySchema = toJsonSchema(ctx.request.body);
63
64
  // update the automation outputs
@@ -80,9 +81,10 @@ exports.buildSchema = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
80
81
  ctx.body = yield db.put(webhook);
81
82
  });
82
83
  exports.trigger = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
83
- const prodAppId = getDeployedAppID(ctx.params.instance);
84
+ const prodAppId = getProdAppID(ctx.params.instance);
85
+ updateAppId(prodAppId);
84
86
  try {
85
- const db = new CouchDB(prodAppId);
87
+ const db = getAppDB();
86
88
  const webhook = yield db.get(ctx.params.id);
87
89
  // validate against the schema
88
90
  if (webhook.bodySchema) {
@@ -25,6 +25,7 @@ const backupRoutes = require("./backup");
25
25
  const metadataRoutes = require("./metadata");
26
26
  const devRoutes = require("./dev");
27
27
  const cloudRoutes = require("./cloud");
28
+ const migrationRoutes = require("./migrations");
28
29
  exports.mainRoutes = [
29
30
  authRoutes,
30
31
  deployRoutes,
@@ -53,5 +54,6 @@ exports.mainRoutes = [
53
54
  // this could be breaking as koa may recognise other routes as this
54
55
  tableRoutes,
55
56
  rowRoutes,
57
+ migrationRoutes,
56
58
  ];
57
59
  exports.staticRoutes = staticRoutes;