@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
@@ -1,4 +1,3 @@
1
- const CouchDB = require("../../../db")
2
1
  const {
3
2
  buildExternalTableId,
4
3
  breakExternalTableId,
@@ -19,6 +18,7 @@ const { makeExternalQuery } = require("../../../integrations/base/utils")
19
18
  const { cloneDeep } = require("lodash/fp")
20
19
  const csvParser = require("../../../utilities/csvParser")
21
20
  const { handleRequest } = require("../row/external")
21
+ const { getAppDB } = require("@budibase/backend-core/context")
22
22
 
23
23
  async function makeTableRequest(
24
24
  datasource,
@@ -159,7 +159,6 @@ function isRelationshipSetup(column) {
159
159
  }
160
160
 
161
161
  exports.save = async function (ctx) {
162
- const appId = ctx.appId
163
162
  const table = ctx.request.body
164
163
  // can't do this right now
165
164
  delete table.dataImport
@@ -176,14 +175,14 @@ exports.save = async function (ctx) {
176
175
 
177
176
  let oldTable
178
177
  if (ctx.request.body && ctx.request.body._id) {
179
- oldTable = await getTable(appId, ctx.request.body._id)
178
+ oldTable = await getTable(ctx.request.body._id)
180
179
  }
181
180
 
182
181
  if (hasTypeChanged(tableToSave, oldTable)) {
183
182
  ctx.throw(400, "A column type has changed.")
184
183
  }
185
184
 
186
- const db = new CouchDB(appId)
185
+ const db = getAppDB()
187
186
  const datasource = await db.get(datasourceId)
188
187
  const oldTables = cloneDeep(datasource.entities)
189
188
  const tables = datasource.entities
@@ -267,14 +266,13 @@ exports.save = async function (ctx) {
267
266
  }
268
267
 
269
268
  exports.destroy = async function (ctx) {
270
- const appId = ctx.appId
271
- const tableToDelete = await getTable(appId, ctx.params.tableId)
269
+ const tableToDelete = await getTable(ctx.params.tableId)
272
270
  if (!tableToDelete || !tableToDelete.created) {
273
271
  ctx.throw(400, "Cannot delete tables which weren't created in Budibase.")
274
272
  }
275
273
  const datasourceId = getDatasourceId(tableToDelete)
276
274
 
277
- const db = new CouchDB(appId)
275
+ const db = getAppDB()
278
276
  const datasource = await db.get(datasourceId)
279
277
  const tables = datasource.entities
280
278
 
@@ -290,8 +288,7 @@ exports.destroy = async function (ctx) {
290
288
  }
291
289
 
292
290
  exports.bulkImport = async function (ctx) {
293
- const appId = ctx.appId
294
- const table = await getTable(appId, ctx.params.tableId)
291
+ const table = await getTable(ctx.params.tableId)
295
292
  const { dataImport } = ctx.request.body
296
293
  if (!dataImport || !dataImport.schema || !dataImport.csvString) {
297
294
  ctx.throw(400, "Provided data import information is invalid.")
@@ -300,7 +297,7 @@ exports.bulkImport = async function (ctx) {
300
297
  ...dataImport,
301
298
  existingTable: table,
302
299
  })
303
- await handleRequest(appId, DataSourceOperation.BULK_CREATE, table._id, {
300
+ await handleRequest(DataSourceOperation.BULK_CREATE, table._id, {
304
301
  rows,
305
302
  })
306
303
  return table
@@ -1,9 +1,9 @@
1
- const CouchDB = require("../../../db")
2
1
  const internal = require("./internal")
3
2
  const external = require("./external")
4
3
  const csvParser = require("../../../utilities/csvParser")
5
4
  const { isExternalTable, isSQL } = require("../../../integrations/utils")
6
5
  const { getDatasourceParams } = require("../../../db/utils")
6
+ const { getAppDB } = require("@budibase/backend-core/context")
7
7
  const { getTable, getAllInternalTables } = require("./utils")
8
8
 
9
9
  function pickApi({ tableId, table }) {
@@ -20,9 +20,9 @@ function pickApi({ tableId, table }) {
20
20
 
21
21
  // covers both internal and external
22
22
  exports.fetch = async function (ctx) {
23
- const db = new CouchDB(ctx.appId)
23
+ const db = getAppDB()
24
24
 
25
- const internal = await getAllInternalTables(ctx.appId)
25
+ const internal = await getAllInternalTables()
26
26
 
27
27
  const externalTables = await db.allDocs(
28
28
  getDatasourceParams("plus", {
@@ -49,7 +49,7 @@ exports.fetch = async function (ctx) {
49
49
 
50
50
  exports.find = async function (ctx) {
51
51
  const tableId = ctx.params.id
52
- ctx.body = await getTable(ctx.appId, tableId)
52
+ ctx.body = await getTable(tableId)
53
53
  }
54
54
 
55
55
  exports.save = async function (ctx) {
@@ -88,7 +88,7 @@ exports.validateCSVSchema = async function (ctx) {
88
88
  const { csvString, schema = {}, tableId } = ctx.request.body
89
89
  let existingTable
90
90
  if (tableId) {
91
- existingTable = await getTable(ctx.appId, tableId)
91
+ existingTable = await getTable(tableId)
92
92
  }
93
93
  let result = await csvParser.parse(csvString, schema)
94
94
  if (existingTable) {
@@ -1,4 +1,3 @@
1
- const CouchDB = require("../../../db")
2
1
  const linkRows = require("../../../db/linkedRows")
3
2
  const { getRowParams, generateTableID } = require("../../../db/utils")
4
3
  const { FieldTypes } = require("../../../constants")
@@ -9,12 +8,13 @@ const {
9
8
  handleDataImport,
10
9
  } = require("./utils")
11
10
  const usageQuota = require("../../../utilities/usageQuota")
11
+ const { getAppDB } = require("@budibase/backend-core/context")
12
+ const env = require("../../../environment")
12
13
  const { cleanupAttachments } = require("../../../utilities/rowProcessor")
13
14
  const { runStaticFormulaChecks } = require("./bulkFormula")
14
15
 
15
16
  exports.save = async function (ctx) {
16
- const appId = ctx.appId
17
- const db = new CouchDB(appId)
17
+ const db = getAppDB()
18
18
  const { dataImport, ...rest } = ctx.request.body
19
19
  let tableToSave = {
20
20
  type: "table",
@@ -36,8 +36,7 @@ exports.save = async function (ctx) {
36
36
  // saving a table is a complex operation, involving many different steps, this
37
37
  // has been broken out into a utility to make it more obvious/easier to manipulate
38
38
  const tableSaveFunctions = new TableSaveFunctions({
39
- db,
40
- ctx,
39
+ user: ctx.user,
41
40
  oldTable,
42
41
  dataImport,
43
42
  })
@@ -82,7 +81,6 @@ exports.save = async function (ctx) {
82
81
  // update linked rows
83
82
  try {
84
83
  const linkResp = await linkRows.updateLinks({
85
- appId,
86
84
  eventType: oldTable
87
85
  ? linkRows.EventType.TABLE_UPDATED
88
86
  : linkRows.EventType.TABLE_SAVE,
@@ -107,13 +105,12 @@ exports.save = async function (ctx) {
107
105
 
108
106
  tableToSave = await tableSaveFunctions.after(tableToSave)
109
107
  // has to run after, make sure it has _id
110
- await runStaticFormulaChecks(appId, tableToSave, { oldTable })
108
+ await runStaticFormulaChecks(tableToSave, { oldTable })
111
109
  return tableToSave
112
110
  }
113
111
 
114
112
  exports.destroy = async function (ctx) {
115
- const appId = ctx.appId
116
- const db = new CouchDB(appId)
113
+ const db = getAppDB()
117
114
  const tableToDelete = await db.get(ctx.params.tableId)
118
115
 
119
116
  // Delete all rows for that table
@@ -127,7 +124,6 @@ exports.destroy = async function (ctx) {
127
124
 
128
125
  // update linked rows
129
126
  await linkRows.updateLinks({
130
- appId,
131
127
  eventType: linkRows.EventType.TABLE_DELETE,
132
128
  table: tableToDelete,
133
129
  })
@@ -136,24 +132,25 @@ exports.destroy = async function (ctx) {
136
132
  await db.remove(tableToDelete)
137
133
 
138
134
  // remove table search index
139
- const currentIndexes = await db.getIndexes()
140
- const existingIndex = currentIndexes.indexes.find(
141
- existing => existing.name === `search:${ctx.params.tableId}`
142
- )
143
- if (existingIndex) {
144
- await db.deleteIndex(existingIndex)
135
+ if (!env.isTest()) {
136
+ const currentIndexes = await db.getIndexes()
137
+ const existingIndex = currentIndexes.indexes.find(
138
+ existing => existing.name === `search:${ctx.params.tableId}`
139
+ )
140
+ if (existingIndex) {
141
+ await db.deleteIndex(existingIndex)
142
+ }
145
143
  }
146
144
 
147
145
  // has to run after, make sure it has _id
148
- await runStaticFormulaChecks(appId, tableToDelete, { deletion: true })
149
- await cleanupAttachments(appId, tableToDelete, { rows })
146
+ await runStaticFormulaChecks(tableToDelete, { deletion: true })
147
+ await cleanupAttachments(tableToDelete, { rows })
150
148
  return tableToDelete
151
149
  }
152
150
 
153
151
  exports.bulkImport = async function (ctx) {
154
- const appId = ctx.appId
155
- const table = await getTable(appId, ctx.params.tableId)
152
+ const table = await getTable(ctx.params.tableId)
156
153
  const { dataImport } = ctx.request.body
157
- await handleDataImport(appId, ctx.user, table, dataImport)
154
+ await handleDataImport(ctx.user, table, dataImport)
158
155
  return table
159
156
  }
@@ -1,4 +1,3 @@
1
- const CouchDB = require("../../../db")
2
1
  const csvParser = require("../../../utilities/csvParser")
3
2
  const {
4
3
  getRowParams,
@@ -26,10 +25,11 @@ const {
26
25
  const { getViews, saveView } = require("../view/utils")
27
26
  const viewTemplate = require("../view/viewBuilder")
28
27
  const usageQuota = require("../../../utilities/usageQuota")
28
+ const { getAppDB } = require("@budibase/backend-core/context")
29
29
  const { cloneDeep } = require("lodash/fp")
30
30
 
31
- exports.clearColumns = async (appId, table, columnNames) => {
32
- const db = new CouchDB(appId)
31
+ exports.clearColumns = async (table, columnNames) => {
32
+ const db = getAppDB()
33
33
  const rows = await db.allDocs(
34
34
  getRowParams(table._id, null, {
35
35
  include_docs: true,
@@ -43,7 +43,8 @@ exports.clearColumns = async (appId, table, columnNames) => {
43
43
  )
44
44
  }
45
45
 
46
- exports.checkForColumnUpdates = async (appId, db, oldTable, updatedTable) => {
46
+ exports.checkForColumnUpdates = async (oldTable, updatedTable) => {
47
+ const db = getAppDB()
47
48
  let updatedRows = []
48
49
  const rename = updatedTable._rename
49
50
  let deletedColumns = []
@@ -73,9 +74,9 @@ exports.checkForColumnUpdates = async (appId, db, oldTable, updatedTable) => {
73
74
  })
74
75
 
75
76
  // cleanup any attachments from object storage for deleted attachment columns
76
- await cleanupAttachments(appId, updatedTable, { oldTable, rows: rawRows })
77
+ await cleanupAttachments(updatedTable, { oldTable, rows: rawRows })
77
78
  // Update views
78
- await exports.checkForViewUpdates(db, updatedTable, rename, deletedColumns)
79
+ await exports.checkForViewUpdates(updatedTable, rename, deletedColumns)
79
80
  delete updatedTable._rename
80
81
  }
81
82
  return { rows: updatedRows, table: updatedTable }
@@ -102,12 +103,12 @@ exports.makeSureTableUpToDate = (table, tableToSave) => {
102
103
  return tableToSave
103
104
  }
104
105
 
105
- exports.handleDataImport = async (appId, user, table, dataImport) => {
106
+ exports.handleDataImport = async (user, table, dataImport) => {
106
107
  if (!dataImport || !dataImport.csvString) {
107
108
  return table
108
109
  }
109
110
 
110
- const db = new CouchDB(appId)
111
+ const db = getAppDB()
111
112
  // Populate the table with rows imported from CSV in a bulk update
112
113
  const data = await csvParser.transform({
113
114
  ...dataImport,
@@ -152,8 +153,8 @@ exports.handleDataImport = async (appId, user, table, dataImport) => {
152
153
  return table
153
154
  }
154
155
 
155
- exports.handleSearchIndexes = async (appId, table) => {
156
- const db = new CouchDB(appId)
156
+ exports.handleSearchIndexes = async table => {
157
+ const db = getAppDB()
157
158
  // create relevant search indexes
158
159
  if (table.indexes && table.indexes.length > 0) {
159
160
  const currentIndexes = await db.getIndexes()
@@ -210,12 +211,9 @@ exports.checkStaticTables = table => {
210
211
  }
211
212
 
212
213
  class TableSaveFunctions {
213
- constructor({ db, ctx, oldTable, dataImport }) {
214
- this.db = db
215
- this.ctx = ctx
216
- if (this.ctx && this.ctx.user) {
217
- this.appId = this.ctx.appId
218
- }
214
+ constructor({ user, oldTable, dataImport }) {
215
+ this.db = getAppDB()
216
+ this.user = user
219
217
  this.oldTable = oldTable
220
218
  this.dataImport = dataImport
221
219
  // any rows that need updated
@@ -233,25 +231,15 @@ class TableSaveFunctions {
233
231
 
234
232
  // when confirmed valid
235
233
  async mid(table) {
236
- let response = await exports.checkForColumnUpdates(
237
- this.appId,
238
- this.db,
239
- this.oldTable,
240
- table
241
- )
234
+ let response = await exports.checkForColumnUpdates(this.oldTable, table)
242
235
  this.rows = this.rows.concat(response.rows)
243
236
  return table
244
237
  }
245
238
 
246
239
  // after saving
247
240
  async after(table) {
248
- table = await exports.handleSearchIndexes(this.appId, table)
249
- table = await exports.handleDataImport(
250
- this.appId,
251
- this.ctx.user,
252
- table,
253
- this.dataImport
254
- )
241
+ table = await exports.handleSearchIndexes(table)
242
+ table = await exports.handleDataImport(this.user, table, this.dataImport)
255
243
  return table
256
244
  }
257
245
 
@@ -260,8 +248,8 @@ class TableSaveFunctions {
260
248
  }
261
249
  }
262
250
 
263
- exports.getAllInternalTables = async appId => {
264
- const db = new CouchDB(appId)
251
+ exports.getAllInternalTables = async () => {
252
+ const db = getAppDB()
265
253
  const internalTables = await db.allDocs(
266
254
  getTableParams(null, {
267
255
  include_docs: true,
@@ -274,8 +262,8 @@ exports.getAllInternalTables = async appId => {
274
262
  }))
275
263
  }
276
264
 
277
- exports.getAllExternalTables = async (appId, datasourceId) => {
278
- const db = new CouchDB(appId)
265
+ exports.getAllExternalTables = async datasourceId => {
266
+ const db = getAppDB()
279
267
  const datasource = await db.get(datasourceId)
280
268
  if (!datasource || !datasource.entities) {
281
269
  throw "Datasource is not configured fully."
@@ -283,25 +271,25 @@ exports.getAllExternalTables = async (appId, datasourceId) => {
283
271
  return datasource.entities
284
272
  }
285
273
 
286
- exports.getExternalTable = async (appId, datasourceId, tableName) => {
287
- const entities = await exports.getAllExternalTables(appId, datasourceId)
274
+ exports.getExternalTable = async (datasourceId, tableName) => {
275
+ const entities = await exports.getAllExternalTables(datasourceId)
288
276
  return entities[tableName]
289
277
  }
290
278
 
291
- exports.getTable = async (appId, tableId) => {
292
- const db = new CouchDB(appId)
279
+ exports.getTable = async tableId => {
280
+ const db = getAppDB()
293
281
  if (isExternalTable(tableId)) {
294
282
  let { datasourceId, tableName } = breakExternalTableId(tableId)
295
283
  const datasource = await db.get(datasourceId)
296
- const table = await exports.getExternalTable(appId, datasourceId, tableName)
284
+ const table = await exports.getExternalTable(datasourceId, tableName)
297
285
  return { ...table, sql: isSQL(datasource) }
298
286
  } else {
299
287
  return db.get(tableId)
300
288
  }
301
289
  }
302
290
 
303
- exports.checkForViewUpdates = async (db, table, rename, deletedColumns) => {
304
- const views = await getViews(db)
291
+ exports.checkForViewUpdates = async (table, rename, deletedColumns) => {
292
+ const views = await getViews()
305
293
  const tableViews = views.filter(view => view.meta.tableId === table._id)
306
294
 
307
295
  // Check each table view to see if impacted by this table action
@@ -363,7 +351,7 @@ exports.checkForViewUpdates = async (db, table, rename, deletedColumns) => {
363
351
  // Update view if required
364
352
  if (needsUpdated) {
365
353
  const newViewTemplate = viewTemplate(view.meta)
366
- await saveView(db, null, view.name, newViewTemplate)
354
+ await saveView(null, view.name, newViewTemplate)
367
355
  if (!newViewTemplate.meta.schema) {
368
356
  newViewTemplate.meta.schema = table.schema
369
357
  }
@@ -1,4 +1,3 @@
1
- const CouchDB = require("../../db")
2
1
  const {
3
2
  generateUserMetadataID,
4
3
  getUserMetadataParams,
@@ -11,12 +10,14 @@ const { isEqual } = require("lodash")
11
10
  const { BUILTIN_ROLE_IDS } = require("@budibase/backend-core/roles")
12
11
  const {
13
12
  getDevelopmentAppID,
14
- getDeployedAppIDs,
13
+ getProdAppIDs,
14
+ dbExists,
15
15
  } = require("@budibase/backend-core/db")
16
- const { doesDatabaseExist } = require("../../utilities")
17
16
  const { UserStatus } = require("@budibase/backend-core/constants")
17
+ const { getAppDB } = require("@budibase/backend-core/context")
18
18
 
19
- async function rawMetadata(db) {
19
+ async function rawMetadata() {
20
+ const db = getAppDB()
20
21
  return (
21
22
  await db.allDocs(
22
23
  getUserMetadataParams(null, {
@@ -54,13 +55,10 @@ function combineMetadataAndUser(user, metadata) {
54
55
  return null
55
56
  }
56
57
 
57
- exports.syncGlobalUsers = async appId => {
58
+ exports.syncGlobalUsers = async () => {
58
59
  // sync user metadata
59
- const db = new CouchDB(appId)
60
- const [users, metadata] = await Promise.all([
61
- getGlobalUsers(appId),
62
- rawMetadata(db),
63
- ])
60
+ const db = getAppDB()
61
+ const [users, metadata] = await Promise.all([getGlobalUsers(), rawMetadata()])
64
62
  const toWrite = []
65
63
  for (let user of users) {
66
64
  const combined = await combineMetadataAndUser(user, metadata)
@@ -94,7 +92,7 @@ exports.syncUser = async function (ctx) {
94
92
  let prodAppIds
95
93
  // if they are a builder then get all production app IDs
96
94
  if ((user.builder && user.builder.global) || deleting) {
97
- prodAppIds = await getDeployedAppIDs(CouchDB)
95
+ prodAppIds = await getProdAppIDs()
98
96
  } else {
99
97
  prodAppIds = Object.entries(roles)
100
98
  .filter(entry => entry[1] !== BUILTIN_ROLE_IDS.PUBLIC)
@@ -104,10 +102,10 @@ exports.syncUser = async function (ctx) {
104
102
  const roleId = roles[prodAppId]
105
103
  const devAppId = getDevelopmentAppID(prodAppId)
106
104
  for (let appId of [prodAppId, devAppId]) {
107
- if (!(await doesDatabaseExist(appId))) {
105
+ if (!(await dbExists(appId))) {
108
106
  continue
109
107
  }
110
- const db = new CouchDB(appId)
108
+ const db = getAppDB()
111
109
  const metadataId = generateUserMetadataID(userId)
112
110
  let metadata
113
111
  try {
@@ -143,8 +141,8 @@ exports.syncUser = async function (ctx) {
143
141
  }
144
142
 
145
143
  exports.fetchMetadata = async function (ctx) {
146
- const database = new CouchDB(ctx.appId)
147
- const global = await getGlobalUsers(ctx.appId)
144
+ const database = getAppDB()
145
+ const global = await getGlobalUsers()
148
146
  const metadata = await rawMetadata(database)
149
147
  const users = []
150
148
  for (let user of global) {
@@ -173,8 +171,7 @@ exports.updateSelfMetadata = async function (ctx) {
173
171
  }
174
172
 
175
173
  exports.updateMetadata = async function (ctx) {
176
- const appId = ctx.appId
177
- const db = new CouchDB(appId)
174
+ const db = getAppDB()
178
175
  const user = ctx.request.body
179
176
  // this isn't applicable to the user
180
177
  delete user.roles
@@ -186,7 +183,7 @@ exports.updateMetadata = async function (ctx) {
186
183
  }
187
184
 
188
185
  exports.destroyMetadata = async function (ctx) {
189
- const db = new CouchDB(ctx.appId)
186
+ const db = getAppDB()
190
187
  try {
191
188
  const dbUser = await db.get(ctx.params.id)
192
189
  await db.remove(dbUser._id, dbUser._rev)
@@ -209,7 +206,7 @@ exports.setFlag = async function (ctx) {
209
206
  ctx.throw(400, "Must supply a 'flag' field in request body.")
210
207
  }
211
208
  const flagDocId = generateUserFlagID(userId)
212
- const db = new CouchDB(ctx.appId)
209
+ const db = getAppDB()
213
210
  let doc
214
211
  try {
215
212
  doc = await db.get(flagDocId)
@@ -224,7 +221,7 @@ exports.setFlag = async function (ctx) {
224
221
  exports.getFlags = async function (ctx) {
225
222
  const userId = ctx.user._id
226
223
  const docId = generateUserFlagID(userId)
227
- const db = new CouchDB(ctx.appId)
224
+ const db = getAppDB()
228
225
  let doc
229
226
  try {
230
227
  doc = await db.get(docId)
@@ -1,4 +1,3 @@
1
- const CouchDB = require("../../../db")
2
1
  const viewTemplate = require("./viewBuilder")
3
2
  const { apiFileReturn } = require("../../../utilities/fileSystem")
4
3
  const exporters = require("./exporters")
@@ -6,14 +5,14 @@ const { saveView, getView, getViews, deleteView } = require("./utils")
6
5
  const { fetchView } = require("../row")
7
6
  const { getTable } = require("../table/utils")
8
7
  const { FieldTypes } = require("../../../constants")
8
+ const { getAppDB } = require("@budibase/backend-core/context")
9
9
 
10
10
  exports.fetch = async ctx => {
11
- const db = new CouchDB(ctx.appId)
12
- ctx.body = await getViews(db)
11
+ ctx.body = await getViews()
13
12
  }
14
13
 
15
14
  exports.save = async ctx => {
16
- const db = new CouchDB(ctx.appId)
15
+ const db = getAppDB()
17
16
  const { originalName, ...viewToSave } = ctx.request.body
18
17
  const view = viewTemplate(viewToSave)
19
18
 
@@ -21,7 +20,7 @@ exports.save = async ctx => {
21
20
  ctx.throw(400, "Cannot create view without a name")
22
21
  }
23
22
 
24
- await saveView(db, originalName, viewToSave.name, view)
23
+ await saveView(originalName, viewToSave.name, view)
25
24
 
26
25
  // add views to table document
27
26
  const table = await db.get(ctx.request.body.tableId)
@@ -42,9 +41,9 @@ exports.save = async ctx => {
42
41
  }
43
42
 
44
43
  exports.destroy = async ctx => {
45
- const db = new CouchDB(ctx.appId)
44
+ const db = getAppDB()
46
45
  const viewName = decodeURI(ctx.params.viewName)
47
- const view = await deleteView(db, viewName)
46
+ const view = await deleteView(viewName)
48
47
  const table = await db.get(view.meta.tableId)
49
48
  delete table.views[viewName]
50
49
  await db.put(table)
@@ -53,9 +52,8 @@ exports.destroy = async ctx => {
53
52
  }
54
53
 
55
54
  exports.exportView = async ctx => {
56
- const db = new CouchDB(ctx.appId)
57
55
  const viewName = decodeURI(ctx.query.view)
58
- const view = await getView(db, viewName)
56
+ const view = await getView(viewName)
59
57
 
60
58
  const format = ctx.query.format
61
59
  if (!format || !Object.values(exporters.ExportFormats).includes(format)) {
@@ -83,7 +81,7 @@ exports.exportView = async ctx => {
83
81
  let schema = view && view.meta && view.meta.schema
84
82
  if (!schema) {
85
83
  const tableId = ctx.params.tableId || view.meta.tableId
86
- const table = await getTable(ctx.appId, tableId)
84
+ const table = await getTable(tableId)
87
85
  schema = table.schema
88
86
  }
89
87
 
@@ -6,8 +6,10 @@ const {
6
6
  SEPARATOR,
7
7
  } = require("../../../db/utils")
8
8
  const env = require("../../../environment")
9
+ const { getAppDB } = require("@budibase/backend-core/context")
9
10
 
10
- exports.getView = async (db, viewName) => {
11
+ exports.getView = async viewName => {
12
+ const db = getAppDB()
11
13
  if (env.SELF_HOSTED) {
12
14
  const designDoc = await db.get("_design/database")
13
15
  return designDoc.views[viewName]
@@ -22,7 +24,8 @@ exports.getView = async (db, viewName) => {
22
24
  }
23
25
  }
24
26
 
25
- exports.getViews = async db => {
27
+ exports.getViews = async () => {
28
+ const db = getAppDB()
26
29
  const response = []
27
30
  if (env.SELF_HOSTED) {
28
31
  const designDoc = await db.get("_design/database")
@@ -54,7 +57,8 @@ exports.getViews = async db => {
54
57
  return response
55
58
  }
56
59
 
57
- exports.saveView = async (db, originalName, viewName, viewTemplate) => {
60
+ exports.saveView = async (originalName, viewName, viewTemplate) => {
61
+ const db = getAppDB()
58
62
  if (env.SELF_HOSTED) {
59
63
  const designDoc = await db.get("_design/database")
60
64
  designDoc.views = {
@@ -91,7 +95,8 @@ exports.saveView = async (db, originalName, viewName, viewTemplate) => {
91
95
  }
92
96
  }
93
97
 
94
- exports.deleteView = async (db, viewName) => {
98
+ exports.deleteView = async viewName => {
99
+ const db = getAppDB()
95
100
  if (env.SELF_HOSTED) {
96
101
  const designDoc = await db.get("_design/database")
97
102
  const view = designDoc.views[viewName]
@@ -1,9 +1,9 @@
1
- const CouchDB = require("../../db")
2
1
  const { generateWebhookID, getWebhookParams } = require("../../db/utils")
3
2
  const toJsonSchema = require("to-json-schema")
4
3
  const validate = require("jsonschema").validate
5
4
  const triggers = require("../../automations/triggers")
6
- const { getDeployedAppID } = require("@budibase/backend-core/db")
5
+ const { getProdAppID } = require("@budibase/backend-core/db")
6
+ const { getAppDB, updateAppId } = require("@budibase/backend-core/context")
7
7
 
8
8
  const AUTOMATION_DESCRIPTION = "Generated from Webhook Schema"
9
9
 
@@ -23,7 +23,7 @@ exports.WebhookType = {
23
23
  }
24
24
 
25
25
  exports.fetch = async ctx => {
26
- const db = new CouchDB(ctx.appId)
26
+ const db = getAppDB()
27
27
  const response = await db.allDocs(
28
28
  getWebhookParams(null, {
29
29
  include_docs: true,
@@ -33,7 +33,7 @@ exports.fetch = async ctx => {
33
33
  }
34
34
 
35
35
  exports.save = async ctx => {
36
- const db = new CouchDB(ctx.appId)
36
+ const db = getAppDB()
37
37
  const webhook = ctx.request.body
38
38
  webhook.appId = ctx.appId
39
39
 
@@ -52,12 +52,13 @@ exports.save = async ctx => {
52
52
  }
53
53
 
54
54
  exports.destroy = async ctx => {
55
- const db = new CouchDB(ctx.appId)
55
+ const db = getAppDB()
56
56
  ctx.body = await db.remove(ctx.params.id, ctx.params.rev)
57
57
  }
58
58
 
59
59
  exports.buildSchema = async ctx => {
60
- const db = new CouchDB(ctx.params.instance)
60
+ updateAppId(ctx.params.instance)
61
+ const db = getAppDB()
61
62
  const webhook = await db.get(ctx.params.id)
62
63
  webhook.bodySchema = toJsonSchema(ctx.request.body)
63
64
  // update the automation outputs
@@ -81,9 +82,10 @@ exports.buildSchema = async ctx => {
81
82
  }
82
83
 
83
84
  exports.trigger = async ctx => {
84
- const prodAppId = getDeployedAppID(ctx.params.instance)
85
+ const prodAppId = getProdAppID(ctx.params.instance)
86
+ updateAppId(prodAppId)
85
87
  try {
86
- const db = new CouchDB(prodAppId)
88
+ const db = getAppDB()
87
89
  const webhook = await db.get(ctx.params.id)
88
90
  // validate against the schema
89
91
  if (webhook.bodySchema) {
@@ -24,6 +24,7 @@ const backupRoutes = require("./backup")
24
24
  const metadataRoutes = require("./metadata")
25
25
  const devRoutes = require("./dev")
26
26
  const cloudRoutes = require("./cloud")
27
+ const migrationRoutes = require("./migrations")
27
28
 
28
29
  exports.mainRoutes = [
29
30
  authRoutes,
@@ -53,6 +54,7 @@ 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
 
58
60
  exports.staticRoutes = staticRoutes