@budibase/server 1.0.49 → 1.0.50-alpha.0

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 (381) 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.c0cc369d.css +6 -0
  8. package/builder/assets/{index.2c37968e.js → index.ff2bad21.js} +252 -249
  9. package/builder/assets/{vendor.f9faf6ab.js → vendor.5ad9695a.js} +202 -106
  10. package/builder/index.html +3 -3
  11. package/coverage/clover.xml +3105 -2814
  12. package/coverage/coverage-final.json +106 -101
  13. package/coverage/lcov-report/api/controllers/analytics.js.html +1 -1
  14. package/coverage/lcov-report/api/controllers/apikeys.js.html +1 -1
  15. package/coverage/lcov-report/api/controllers/application.js.html +257 -152
  16. package/coverage/lcov-report/api/controllers/auth.js.html +22 -13
  17. package/coverage/lcov-report/api/controllers/automation.js.html +39 -69
  18. package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
  19. package/coverage/lcov-report/api/controllers/cloud.js.html +8 -11
  20. package/coverage/lcov-report/api/controllers/component.js.html +13 -16
  21. package/coverage/lcov-report/api/controllers/datasource.js.html +81 -51
  22. package/coverage/lcov-report/api/controllers/dev.js.html +6 -6
  23. package/coverage/lcov-report/api/controllers/index.html +78 -78
  24. package/coverage/lcov-report/api/controllers/integration.js.html +1 -1
  25. package/coverage/lcov-report/api/controllers/layout.js.html +9 -9
  26. package/coverage/lcov-report/api/controllers/metadata.js.html +6 -21
  27. package/coverage/lcov-report/api/controllers/migrations.js.html +119 -0
  28. package/coverage/lcov-report/api/controllers/permission.js.html +19 -19
  29. package/coverage/lcov-report/api/controllers/query/index.html +10 -10
  30. package/coverage/lcov-report/api/controllers/query/index.js.html +38 -35
  31. package/coverage/lcov-report/api/controllers/query/validation.js.html +6 -6
  32. package/coverage/lcov-report/api/controllers/role.js.html +16 -16
  33. package/coverage/lcov-report/api/controllers/routing.js.html +7 -10
  34. package/coverage/lcov-report/api/controllers/row/external.js.html +48 -141
  35. package/coverage/lcov-report/api/controllers/row/index.html +55 -40
  36. package/coverage/lcov-report/api/controllers/row/index.js.html +26 -26
  37. package/coverage/lcov-report/api/controllers/row/internal.js.html +118 -226
  38. package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +52 -34
  39. package/coverage/lcov-report/api/controllers/row/staticFormula.js.html +548 -0
  40. package/coverage/lcov-report/api/controllers/row/utils.js.html +47 -62
  41. package/coverage/lcov-report/api/controllers/screen.js.html +15 -21
  42. package/coverage/lcov-report/api/controllers/script.js.html +4 -4
  43. package/coverage/lcov-report/api/controllers/table/bulkFormula.js.html +599 -0
  44. package/coverage/lcov-report/api/controllers/table/external.js.html +25 -34
  45. package/coverage/lcov-report/api/controllers/table/index.html +58 -43
  46. package/coverage/lcov-report/api/controllers/table/index.js.html +58 -82
  47. package/coverage/lcov-report/api/controllers/table/internal.js.html +81 -66
  48. package/coverage/lcov-report/api/controllers/table/utils.js.html +218 -110
  49. package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
  50. package/coverage/lcov-report/api/controllers/user.js.html +79 -76
  51. package/coverage/lcov-report/api/controllers/view/exporters.js.html +4 -4
  52. package/coverage/lcov-report/api/controllers/view/index.html +16 -16
  53. package/coverage/lcov-report/api/controllers/view/index.js.html +27 -33
  54. package/coverage/lcov-report/api/controllers/view/utils.js.html +35 -20
  55. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +7 -7
  56. package/coverage/lcov-report/api/controllers/webhook.js.html +34 -28
  57. package/coverage/lcov-report/api/index.html +1 -1
  58. package/coverage/lcov-report/api/index.js.html +8 -8
  59. package/coverage/lcov-report/api/routes/analytics.js.html +1 -1
  60. package/coverage/lcov-report/api/routes/apikeys.js.html +1 -1
  61. package/coverage/lcov-report/api/routes/application.js.html +1 -1
  62. package/coverage/lcov-report/api/routes/auth.js.html +1 -1
  63. package/coverage/lcov-report/api/routes/automation.js.html +1 -1
  64. package/coverage/lcov-report/api/routes/backup.js.html +1 -1
  65. package/coverage/lcov-report/api/routes/cloud.js.html +1 -1
  66. package/coverage/lcov-report/api/routes/component.js.html +1 -1
  67. package/coverage/lcov-report/api/routes/datasource.js.html +1 -1
  68. package/coverage/lcov-report/api/routes/deploy.js.html +1 -1
  69. package/coverage/lcov-report/api/routes/dev.js.html +1 -1
  70. package/coverage/lcov-report/api/routes/index.html +18 -18
  71. package/coverage/lcov-report/api/routes/index.js.html +3 -3
  72. package/coverage/lcov-report/api/routes/integration.js.html +1 -1
  73. package/coverage/lcov-report/api/routes/layout.js.html +1 -1
  74. package/coverage/lcov-report/api/routes/metadata.js.html +1 -1
  75. package/coverage/lcov-report/api/routes/{hosting.js.html → migrations.js.html} +17 -14
  76. package/coverage/lcov-report/api/routes/permission.js.html +1 -1
  77. package/coverage/lcov-report/api/routes/query.js.html +1 -1
  78. package/coverage/lcov-report/api/routes/role.js.html +1 -1
  79. package/coverage/lcov-report/api/routes/routing.js.html +1 -1
  80. package/coverage/lcov-report/api/routes/row.js.html +1 -1
  81. package/coverage/lcov-report/api/routes/screen.js.html +1 -1
  82. package/coverage/lcov-report/api/routes/script.js.html +1 -1
  83. package/coverage/lcov-report/api/routes/static.js.html +17 -2
  84. package/coverage/lcov-report/api/routes/table.js.html +1 -1
  85. package/coverage/lcov-report/api/routes/templates.js.html +1 -1
  86. package/coverage/lcov-report/api/routes/user.js.html +1 -1
  87. package/coverage/lcov-report/api/routes/view.js.html +1 -1
  88. package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
  89. package/coverage/lcov-report/automations/actions.js.html +24 -24
  90. package/coverage/lcov-report/automations/automationUtils.js.html +7 -10
  91. package/coverage/lcov-report/automations/bullboard.js.html +16 -16
  92. package/coverage/lcov-report/automations/index.html +18 -18
  93. package/coverage/lcov-report/automations/index.js.html +1 -1
  94. package/coverage/lcov-report/automations/steps/bash.js.html +6 -6
  95. package/coverage/lcov-report/automations/steps/createRow.js.html +13 -22
  96. package/coverage/lcov-report/automations/steps/delay.js.html +4 -4
  97. package/coverage/lcov-report/automations/steps/deleteRow.js.html +11 -20
  98. package/coverage/lcov-report/automations/steps/discord.js.html +7 -7
  99. package/coverage/lcov-report/automations/steps/executeQuery.js.html +6 -6
  100. package/coverage/lcov-report/automations/steps/executeScript.js.html +6 -6
  101. package/coverage/lcov-report/automations/steps/filter.js.html +7 -7
  102. package/coverage/lcov-report/automations/steps/index.html +13 -13
  103. package/coverage/lcov-report/automations/steps/integromat.js.html +5 -5
  104. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +8 -8
  105. package/coverage/lcov-report/automations/steps/queryRows.js.html +10 -10
  106. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +5 -5
  107. package/coverage/lcov-report/automations/steps/serverLog.js.html +3 -3
  108. package/coverage/lcov-report/automations/steps/slack.js.html +5 -5
  109. package/coverage/lcov-report/automations/steps/updateRow.js.html +7 -7
  110. package/coverage/lcov-report/automations/steps/utils.js.html +3 -3
  111. package/coverage/lcov-report/automations/steps/zapier.js.html +5 -5
  112. package/coverage/lcov-report/automations/triggerInfo/app.js.html +2 -2
  113. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +2 -2
  114. package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
  115. package/coverage/lcov-report/automations/triggerInfo/index.js.html +8 -8
  116. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +2 -2
  117. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +2 -2
  118. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +2 -2
  119. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +2 -2
  120. package/coverage/lcov-report/automations/triggers.js.html +61 -55
  121. package/coverage/lcov-report/automations/utils.js.html +54 -42
  122. package/coverage/lcov-report/constants/index.html +5 -5
  123. package/coverage/lcov-report/constants/index.js.html +53 -26
  124. package/coverage/lcov-report/constants/layouts.js.html +5 -5
  125. package/coverage/lcov-report/constants/screens.js.html +4 -4
  126. package/coverage/lcov-report/db/client.js.html +18 -18
  127. package/coverage/lcov-report/db/inMemoryView.js.html +7 -7
  128. package/coverage/lcov-report/db/index.html +15 -15
  129. package/coverage/lcov-report/db/index.js.html +3 -3
  130. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +25 -37
  131. package/coverage/lcov-report/db/linkedRows/index.html +27 -27
  132. package/coverage/lcov-report/db/linkedRows/index.js.html +51 -96
  133. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +42 -42
  134. package/coverage/lcov-report/db/newid.js.html +4 -4
  135. package/coverage/lcov-report/db/utils.js.html +87 -87
  136. package/coverage/lcov-report/events/AutomationEmitter.js.html +1 -1
  137. package/coverage/lcov-report/events/index.html +1 -1
  138. package/coverage/lcov-report/events/index.js.html +5 -5
  139. package/coverage/lcov-report/events/utils.js.html +3 -3
  140. package/coverage/lcov-report/index.html +135 -120
  141. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
  142. package/coverage/lcov-report/integrations/tests/index.html +1 -1
  143. package/coverage/lcov-report/middleware/appInfo.js.html +1 -1
  144. package/coverage/lcov-report/middleware/authorized.js.html +173 -65
  145. package/coverage/lcov-report/middleware/builder.js.html +10 -10
  146. package/coverage/lcov-report/middleware/currentapp.js.html +95 -83
  147. package/coverage/lcov-report/middleware/index.html +38 -38
  148. package/coverage/lcov-report/middleware/joi-validator.js.html +3 -3
  149. package/coverage/lcov-report/middleware/resourceId.js.html +1 -1
  150. package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
  151. package/coverage/lcov-report/middleware/usageQuota.js.html +281 -53
  152. package/coverage/lcov-report/middleware/utils.js.html +2 -2
  153. package/coverage/lcov-report/threads/automation.js.html +30 -24
  154. package/coverage/lcov-report/threads/index.html +26 -26
  155. package/coverage/lcov-report/threads/index.js.html +10 -10
  156. package/coverage/lcov-report/threads/query.js.html +39 -24
  157. package/coverage/lcov-report/threads/utils.js.html +14 -14
  158. package/coverage/lcov-report/utilities/bcrypt.js.html +1 -1
  159. package/coverage/lcov-report/utilities/budibaseDir.js.html +7 -7
  160. package/coverage/lcov-report/utilities/centralPath.js.html +4 -4
  161. package/coverage/lcov-report/utilities/csvParser.js.html +6 -6
  162. package/coverage/lcov-report/utilities/global.js.html +58 -49
  163. package/coverage/lcov-report/utilities/index.html +37 -37
  164. package/coverage/lcov-report/utilities/index.js.html +43 -73
  165. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +8 -8
  166. package/coverage/lcov-report/utilities/queue/index.html +1 -1
  167. package/coverage/lcov-report/utilities/routing/index.html +1 -1
  168. package/coverage/lcov-report/utilities/routing/index.js.html +7 -7
  169. package/coverage/lcov-report/utilities/rowProcessor/index.html +27 -27
  170. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +97 -103
  171. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +75 -27
  172. package/coverage/lcov-report/utilities/scriptRunner.js.html +5 -5
  173. package/coverage/lcov-report/utilities/security.js.html +8 -8
  174. package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
  175. package/coverage/lcov-report/utilities/usageQuota/index.html +141 -0
  176. package/coverage/lcov-report/utilities/usageQuota/index.js.html +359 -0
  177. package/coverage/lcov-report/utilities/usageQuota/rows.js.html +305 -0
  178. package/coverage/lcov-report/{api/controllers/hosting.js.html → utilities/usageQuota/usageQuoteReset.js.html} +36 -48
  179. package/coverage/lcov-report/utilities/users.js.html +9 -9
  180. package/coverage/lcov-report/utilities/workerRequests.js.html +43 -112
  181. package/coverage/lcov.info +5010 -4425
  182. package/dist/api/controllers/application.js +90 -60
  183. package/dist/api/controllers/auth.js +8 -5
  184. package/dist/api/controllers/automation.js +14 -19
  185. package/dist/api/controllers/cloud.js +2 -3
  186. package/dist/api/controllers/component.js +3 -4
  187. package/dist/api/controllers/datasource.js +20 -10
  188. package/dist/api/controllers/deploy/Deployment.js +3 -6
  189. package/dist/api/controllers/deploy/index.js +12 -13
  190. package/dist/api/controllers/dev.js +5 -5
  191. package/dist/api/controllers/layout.js +3 -3
  192. package/dist/api/controllers/metadata.js +4 -4
  193. package/dist/api/controllers/migrations.js +21 -0
  194. package/dist/api/controllers/permission.js +4 -4
  195. package/dist/api/controllers/query/import/index.js +4 -6
  196. package/dist/api/controllers/query/index.js +11 -10
  197. package/dist/api/controllers/role.js +5 -5
  198. package/dist/api/controllers/routing.js +5 -6
  199. package/dist/api/controllers/row/ExternalRequest.js +90 -67
  200. package/dist/api/controllers/row/external.js +14 -22
  201. package/dist/api/controllers/row/internal.js +55 -93
  202. package/dist/api/controllers/row/internalSearch.js +23 -17
  203. package/dist/api/controllers/row/staticFormula.js +147 -0
  204. package/dist/api/controllers/row/utils.js +13 -14
  205. package/dist/api/controllers/screen.js +5 -7
  206. package/dist/api/controllers/static/index.js +62 -16
  207. package/dist/api/controllers/table/bulkFormula.js +159 -0
  208. package/dist/api/controllers/table/external.js +7 -10
  209. package/dist/api/controllers/table/index.js +16 -13
  210. package/dist/api/controllers/table/internal.js +22 -16
  211. package/dist/api/controllers/table/utils.js +62 -35
  212. package/dist/api/controllers/user.js +43 -43
  213. package/dist/api/controllers/view/index.js +8 -10
  214. package/dist/api/controllers/view/utils.js +9 -4
  215. package/dist/api/controllers/webhook.js +10 -8
  216. package/dist/api/routes/index.js +2 -2
  217. package/dist/api/routes/migrations.js +9 -0
  218. package/dist/api/routes/static.js +2 -1
  219. package/dist/api/routes/tests/utilities/TestFunctions.js +37 -17
  220. package/dist/app.js +35 -5
  221. package/dist/automations/automationUtils.js +2 -3
  222. package/dist/automations/steps/createRow.js +3 -5
  223. package/dist/automations/steps/deleteRow.js +1 -4
  224. package/dist/automations/steps/updateRow.js +1 -1
  225. package/dist/automations/triggers.js +27 -25
  226. package/dist/automations/utils.js +10 -5
  227. package/dist/constants/index.js +7 -0
  228. package/dist/db/linkedRows/LinkController.js +3 -7
  229. package/dist/db/linkedRows/index.js +16 -27
  230. package/dist/db/linkedRows/linkUtils.js +6 -6
  231. package/dist/db/views/staticViews.js +9 -10
  232. package/dist/definitions/datasource.js +1 -0
  233. package/dist/environment.js +4 -1
  234. package/dist/integrations/base/sql.js +62 -21
  235. package/dist/integrations/googlesheets.js +340 -0
  236. package/dist/integrations/index.js +3 -0
  237. package/dist/integrations/utils.js +60 -9
  238. package/dist/middleware/authorized.js +57 -30
  239. package/dist/middleware/builder.js +2 -2
  240. package/dist/middleware/currentapp.js +41 -37
  241. package/dist/middleware/usageQuota.js +82 -15
  242. package/dist/migrations/functions/appUrls.js +46 -0
  243. package/dist/migrations/functions/quotas1.js +50 -0
  244. package/dist/migrations/functions/usageQuotas/index.js +20 -0
  245. package/dist/migrations/functions/usageQuotas/syncApps.js +29 -0
  246. package/dist/migrations/functions/usageQuotas/syncRows.js +33 -0
  247. package/dist/migrations/functions/userEmailViewCasing.js +24 -0
  248. package/dist/migrations/index.js +62 -0
  249. package/dist/package.json +8 -5
  250. package/dist/tests/utilities/TestConfiguration.js +80 -50
  251. package/dist/threads/automation.js +13 -11
  252. package/dist/threads/query.js +15 -11
  253. package/dist/tsconfig.tsbuildinfo +1 -1
  254. package/dist/utilities/fileSystem/index.js +4 -3
  255. package/dist/utilities/global.js +15 -12
  256. package/dist/utilities/index.js +7 -17
  257. package/dist/utilities/routing/index.js +5 -5
  258. package/dist/utilities/rowProcessor/index.js +23 -17
  259. package/dist/utilities/rowProcessor/utils.js +14 -4
  260. package/dist/utilities/{usageQuota.js → usageQuota/index.js} +45 -31
  261. package/dist/utilities/usageQuota/rows.js +78 -0
  262. package/dist/utilities/usageQuota/usageQuoteReset.js +16 -0
  263. package/dist/utilities/users.js +3 -3
  264. package/dist/utilities/workerRequests.js +4 -24
  265. package/nodemon.json +1 -1
  266. package/package.json +9 -6
  267. package/scripts/integrations/mssql/data/Dockerfile +1 -1
  268. package/scripts/integrations/mssql/data/setup.sql +17 -4
  269. package/scripts/integrations/postgres/init.sql +11 -6
  270. package/scripts/likeCypress.ts +1 -1
  271. package/src/api/controllers/application.js +85 -50
  272. package/src/api/controllers/auth.js +8 -5
  273. package/src/api/controllers/automation.js +13 -23
  274. package/src/api/controllers/cloud.js +2 -3
  275. package/src/api/controllers/component.js +3 -4
  276. package/src/api/controllers/datasource.js +21 -11
  277. package/src/api/controllers/deploy/Deployment.js +3 -7
  278. package/src/api/controllers/deploy/index.js +20 -13
  279. package/src/api/controllers/dev.js +5 -5
  280. package/src/api/controllers/layout.js +3 -3
  281. package/src/api/controllers/metadata.js +4 -9
  282. package/src/api/controllers/migrations.js +13 -0
  283. package/src/api/controllers/permission.js +4 -4
  284. package/src/api/controllers/query/import/index.ts +4 -6
  285. package/src/api/controllers/query/import/tests/index.spec.js +2 -1
  286. package/src/api/controllers/query/index.js +11 -10
  287. package/src/api/controllers/role.js +5 -5
  288. package/src/api/controllers/routing.js +5 -6
  289. package/src/api/controllers/row/ExternalRequest.ts +67 -43
  290. package/src/api/controllers/row/external.js +27 -58
  291. package/src/api/controllers/row/internal.js +54 -90
  292. package/src/api/controllers/row/internalSearch.js +23 -17
  293. package/src/api/controllers/row/staticFormula.js +156 -0
  294. package/src/api/controllers/row/utils.js +13 -18
  295. package/src/api/controllers/screen.js +5 -7
  296. package/src/api/controllers/static/index.js +66 -15
  297. package/src/api/controllers/table/bulkFormula.js +173 -0
  298. package/src/api/controllers/table/external.js +7 -10
  299. package/src/api/controllers/table/index.js +20 -28
  300. package/src/api/controllers/table/internal.js +24 -19
  301. package/src/api/controllers/table/utils.js +78 -42
  302. package/src/api/controllers/user.js +46 -45
  303. package/src/api/controllers/view/index.js +8 -10
  304. package/src/api/controllers/view/utils.js +9 -4
  305. package/src/api/controllers/webhook.js +10 -8
  306. package/src/api/routes/index.js +2 -2
  307. package/src/api/routes/migrations.js +14 -0
  308. package/src/api/routes/static.js +5 -0
  309. package/src/api/routes/tests/application.spec.js +2 -2
  310. package/src/api/routes/tests/auth.spec.js +1 -2
  311. package/src/api/routes/tests/automation.spec.js +1 -0
  312. package/src/api/routes/tests/misc.spec.js +0 -1
  313. package/src/api/routes/tests/routing.spec.js +21 -12
  314. package/src/api/routes/tests/row.spec.js +7 -4
  315. package/src/api/routes/tests/static.spec.js +98 -0
  316. package/src/api/routes/tests/utilities/TestFunctions.js +39 -17
  317. package/src/app.ts +18 -5
  318. package/src/automations/automationUtils.js +2 -3
  319. package/src/automations/steps/createRow.js +2 -5
  320. package/src/automations/steps/deleteRow.js +1 -4
  321. package/src/automations/steps/updateRow.js +1 -1
  322. package/src/automations/triggers.js +33 -31
  323. package/src/automations/utils.js +9 -5
  324. package/src/constants/index.js +9 -0
  325. package/src/db/linkedRows/LinkController.js +3 -7
  326. package/src/db/linkedRows/index.js +16 -31
  327. package/src/db/linkedRows/linkUtils.js +6 -6
  328. package/src/db/tests/linkController.spec.js +0 -1
  329. package/src/db/tests/linkTests.spec.js +5 -6
  330. package/src/db/views/staticViews.js +8 -10
  331. package/src/definitions/common.ts +3 -0
  332. package/src/definitions/datasource.ts +3 -0
  333. package/src/environment.js +4 -1
  334. package/src/integrations/base/sql.ts +75 -29
  335. package/src/integrations/googlesheets.ts +353 -0
  336. package/src/integrations/index.ts +3 -0
  337. package/src/integrations/tests/sql.spec.js +16 -0
  338. package/src/integrations/utils.ts +75 -12
  339. package/src/middleware/authorized.js +66 -30
  340. package/src/middleware/builder.js +2 -2
  341. package/src/middleware/currentapp.js +50 -46
  342. package/src/middleware/tests/authorized.spec.js +13 -6
  343. package/src/middleware/tests/currentapp.spec.js +6 -0
  344. package/src/middleware/tests/usageQuota.spec.js +18 -24
  345. package/src/middleware/usageQuota.js +93 -17
  346. package/src/migrations/functions/appUrls.ts +34 -0
  347. package/src/migrations/functions/quotas1.ts +20 -0
  348. package/src/migrations/functions/tests/appUrls.spec.js +29 -0
  349. package/src/migrations/functions/tests/quotas1.spec.js +27 -0
  350. package/src/migrations/functions/tests/userEmailViewCasing.spec.js +25 -0
  351. package/src/migrations/functions/usageQuotas/index.ts +8 -0
  352. package/src/migrations/functions/usageQuotas/syncApps.ts +18 -0
  353. package/src/migrations/functions/usageQuotas/syncRows.ts +22 -0
  354. package/src/migrations/functions/usageQuotas/tests/syncApps.spec.js +37 -0
  355. package/src/migrations/functions/usageQuotas/tests/syncRows.spec.js +43 -0
  356. package/src/migrations/functions/userEmailViewCasing.ts +13 -0
  357. package/src/migrations/index.ts +56 -0
  358. package/src/module.d.ts +3 -0
  359. package/src/tests/utilities/TestConfiguration.js +82 -55
  360. package/src/threads/automation.js +17 -15
  361. package/src/threads/query.js +17 -12
  362. package/src/utilities/fileSystem/index.js +4 -3
  363. package/src/utilities/global.js +15 -12
  364. package/src/utilities/index.js +7 -17
  365. package/src/utilities/routing/index.js +5 -5
  366. package/src/utilities/rowProcessor/index.js +25 -27
  367. package/src/utilities/rowProcessor/utils.js +23 -7
  368. package/src/utilities/tests/usageQuota/usageQuota.spec.js +72 -0
  369. package/src/utilities/usageQuota/index.js +93 -0
  370. package/src/utilities/usageQuota/rows.js +75 -0
  371. package/src/utilities/usageQuota/usageQuoteReset.js +18 -0
  372. package/src/utilities/users.js +3 -3
  373. package/src/utilities/workerRequests.js +4 -27
  374. package/tsconfig.json +2 -1
  375. package/builder/assets/index.39e01193.css +0 -1
  376. package/dist/api/controllers/hosting.js +0 -30
  377. package/dist/api/routes/hosting.js +0 -11
  378. package/src/api/controllers/hosting.js +0 -22
  379. package/src/api/routes/hosting.js +0 -13
  380. package/src/api/routes/tests/hosting.spec.js +0 -36
  381. package/src/utilities/usageQuota.js +0 -73
@@ -1,4 +1,3 @@
1
- const CouchDB = require("../../db")
2
1
  const {
3
2
  generateDatasourceID,
4
3
  getDatasourceParams,
@@ -11,12 +10,11 @@ const { BuildSchemaErrors, InvalidColumns } = require("../../constants")
11
10
  const { integrations } = require("../../integrations")
12
11
  const { getDatasourceAndQuery } = require("./row/utils")
13
12
  const { invalidateDynamicVariables } = require("../../threads/utils")
13
+ const { getAppDB } = require("@budibase/backend-core/context")
14
14
 
15
15
  exports.fetch = async function (ctx) {
16
- const database = new CouchDB(ctx.appId)
17
-
18
16
  // Get internal tables
19
- const db = new CouchDB(ctx.appId)
17
+ const db = getAppDB()
20
18
  const internalTables = await db.allDocs(
21
19
  getTableParams(null, {
22
20
  include_docs: true,
@@ -31,18 +29,25 @@ exports.fetch = async function (ctx) {
31
29
 
32
30
  // Get external datasources
33
31
  const datasources = (
34
- await database.allDocs(
32
+ await db.allDocs(
35
33
  getDatasourceParams(null, {
36
34
  include_docs: true,
37
35
  })
38
36
  )
39
37
  ).rows.map(row => row.doc)
40
38
 
39
+ for (let datasource of datasources) {
40
+ if (datasource.config && datasource.config.auth) {
41
+ // strip secrets from response so they don't show in the network request
42
+ delete datasource.config.auth
43
+ }
44
+ }
45
+
41
46
  ctx.body = [bbInternalDb, ...datasources]
42
47
  }
43
48
 
44
49
  exports.buildSchemaFromDb = async function (ctx) {
45
- const db = new CouchDB(ctx.appId)
50
+ const db = getAppDB()
46
51
  const datasource = await db.get(ctx.params.datasourceId)
47
52
 
48
53
  const { tables, error } = await buildSchemaHelper(datasource)
@@ -91,11 +96,16 @@ const invalidateVariables = async (existingDatasource, updatedDatasource) => {
91
96
  }
92
97
 
93
98
  exports.update = async function (ctx) {
94
- const db = new CouchDB(ctx.appId)
99
+ const db = getAppDB()
95
100
  const datasourceId = ctx.params.datasourceId
96
101
  let datasource = await db.get(datasourceId)
102
+ const auth = datasource.config.auth
97
103
  await invalidateVariables(datasource, ctx.request.body)
98
104
  datasource = { ...datasource, ...ctx.request.body }
105
+ if (auth && !ctx.request.body.auth) {
106
+ // don't strip auth config from DB
107
+ datasource.config.auth = auth
108
+ }
99
109
 
100
110
  const response = await db.put(datasource)
101
111
  datasource._rev = response.rev
@@ -114,7 +124,7 @@ exports.update = async function (ctx) {
114
124
  }
115
125
 
116
126
  exports.save = async function (ctx) {
117
- const db = new CouchDB(ctx.appId)
127
+ const db = getAppDB()
118
128
  const plus = ctx.request.body.datasource.plus
119
129
  const fetchSchema = ctx.request.body.fetchSchema
120
130
 
@@ -150,7 +160,7 @@ exports.save = async function (ctx) {
150
160
  }
151
161
 
152
162
  exports.destroy = async function (ctx) {
153
- const db = new CouchDB(ctx.appId)
163
+ const db = getAppDB()
154
164
 
155
165
  // Delete all queries for the datasource
156
166
  const queries = await db.allDocs(
@@ -172,7 +182,7 @@ exports.destroy = async function (ctx) {
172
182
  }
173
183
 
174
184
  exports.find = async function (ctx) {
175
- const database = new CouchDB(ctx.appId)
185
+ const database = getAppDB()
176
186
  ctx.body = await database.get(ctx.params.datasourceId)
177
187
  }
178
188
 
@@ -180,7 +190,7 @@ exports.find = async function (ctx) {
180
190
  exports.query = async function (ctx) {
181
191
  const queryJson = ctx.request.body
182
192
  try {
183
- ctx.body = await getDatasourceAndQuery(ctx.appId, queryJson)
193
+ ctx.body = await getDatasourceAndQuery(queryJson)
184
194
  } catch (err) {
185
195
  ctx.throw(400, err)
186
196
  }
@@ -1,18 +1,14 @@
1
1
  const newid = require("../../../db/newid")
2
+ const { getAppId } = require("@budibase/backend-core/context")
2
3
 
3
4
  /**
4
5
  * This is used to pass around information about the deployment that is occurring
5
6
  */
6
7
  class Deployment {
7
- constructor(appId, id = null) {
8
- this.appId = appId
8
+ constructor(id = null) {
9
9
  this._id = id || newid()
10
10
  }
11
11
 
12
- getAppId() {
13
- return this.appId
14
- }
15
-
16
12
  setVerification(verification) {
17
13
  if (!verification) {
18
14
  return
@@ -43,7 +39,7 @@ class Deployment {
43
39
  getJSON() {
44
40
  const obj = {
45
41
  _id: this._id,
46
- appId: this.appId,
42
+ appId: getAppId(),
47
43
  status: this.status,
48
44
  }
49
45
  if (this.err) {
@@ -1,12 +1,20 @@
1
- const CouchDB = require("../../../db")
2
1
  const Deployment = require("./Deployment")
3
- const { Replication, getDeployedAppID } = require("@budibase/backend-core/db")
2
+ const {
3
+ Replication,
4
+ getProdAppID,
5
+ getDevelopmentAppID,
6
+ } = require("@budibase/backend-core/db")
4
7
  const { DocumentTypes, getAutomationParams } = require("../../../db/utils")
5
8
  const {
6
9
  disableAllCrons,
7
10
  enableCronTrigger,
8
11
  } = require("../../../automations/utils")
9
12
  const { app: appCache } = require("@budibase/backend-core/cache")
13
+ const {
14
+ getAppId,
15
+ getAppDB,
16
+ getProdAppDB,
17
+ } = require("@budibase/backend-core/context")
10
18
 
11
19
  // the max time we can wait for an invalidation to complete before considering it failed
12
20
  const MAX_PENDING_TIME_MS = 30 * 60000
@@ -34,9 +42,8 @@ async function checkAllDeployments(deployments) {
34
42
  }
35
43
 
36
44
  async function storeDeploymentHistory(deployment) {
37
- const appId = deployment.getAppId()
38
45
  const deploymentJSON = deployment.getJSON()
39
- const db = new CouchDB(appId)
46
+ const db = getAppDB()
40
47
 
41
48
  let deploymentDoc
42
49
  try {
@@ -64,7 +71,7 @@ async function storeDeploymentHistory(deployment) {
64
71
  }
65
72
 
66
73
  async function initDeployedApp(prodAppId) {
67
- const db = new CouchDB(prodAppId)
74
+ const db = getProdAppDB()
68
75
  console.log("Reading automation docs")
69
76
  const automations = (
70
77
  await db.allDocs(
@@ -88,10 +95,12 @@ async function initDeployedApp(prodAppId) {
88
95
 
89
96
  async function deployApp(deployment) {
90
97
  try {
91
- const productionAppId = getDeployedAppID(deployment.appId)
98
+ const appId = getAppId()
99
+ const devAppId = getDevelopmentAppID(appId)
100
+ const productionAppId = getProdAppID(appId)
92
101
 
93
102
  const replication = new Replication({
94
- source: deployment.appId,
103
+ source: devAppId,
95
104
  target: productionAppId,
96
105
  })
97
106
 
@@ -99,7 +108,7 @@ async function deployApp(deployment) {
99
108
 
100
109
  await replication.replicate()
101
110
  console.log("replication complete.. replacing app meta doc")
102
- const db = new CouchDB(productionAppId)
111
+ const db = getProdAppDB()
103
112
  const appDoc = await db.get(DocumentTypes.APP_METADATA)
104
113
  appDoc.appId = productionAppId
105
114
  appDoc.instance._id = productionAppId
@@ -122,8 +131,7 @@ async function deployApp(deployment) {
122
131
 
123
132
  exports.fetchDeployments = async function (ctx) {
124
133
  try {
125
- const appId = ctx.appId
126
- const db = new CouchDB(appId)
134
+ const db = getAppDB()
127
135
  const deploymentDoc = await db.get(DocumentTypes.DEPLOYMENTS)
128
136
  const { updated, deployments } = await checkAllDeployments(
129
137
  deploymentDoc,
@@ -140,8 +148,7 @@ exports.fetchDeployments = async function (ctx) {
140
148
 
141
149
  exports.deploymentProgress = async function (ctx) {
142
150
  try {
143
- const appId = ctx.appId
144
- const db = new CouchDB(appId)
151
+ const db = getAppDB()
145
152
  const deploymentDoc = await db.get(DocumentTypes.DEPLOYMENTS)
146
153
  ctx.body = deploymentDoc[ctx.params.deploymentId]
147
154
  } catch (err) {
@@ -153,7 +160,7 @@ exports.deploymentProgress = async function (ctx) {
153
160
  }
154
161
 
155
162
  exports.deployApp = async function (ctx) {
156
- let deployment = new Deployment(ctx.appId)
163
+ let deployment = new Deployment()
157
164
  console.log("Deployment object created")
158
165
  deployment.setStatus(DeploymentStatus.PENDING)
159
166
  console.log("Deployment object set to pending")
@@ -1,12 +1,12 @@
1
1
  const fetch = require("node-fetch")
2
- const CouchDB = require("../../db")
3
2
  const env = require("../../environment")
4
3
  const { checkSlashesInUrl } = require("../../utilities")
5
4
  const { request } = require("../../utilities/workerRequests")
6
5
  const { clearLock } = require("../../utilities/redis")
7
- const { Replication } = require("@budibase/backend-core/db")
6
+ const { Replication, getProdAppID } = require("@budibase/backend-core/db")
8
7
  const { DocumentTypes } = require("../../db/utils")
9
8
  const { app: appCache } = require("@budibase/backend-core/cache")
9
+ const { getProdAppDB, getAppDB } = require("@budibase/backend-core/context")
10
10
 
11
11
  async function redirect(ctx, method, path = "global") {
12
12
  const { devPath } = ctx.params
@@ -77,11 +77,11 @@ exports.clearLock = async ctx => {
77
77
 
78
78
  exports.revert = async ctx => {
79
79
  const { appId } = ctx.params
80
- const productionAppId = appId.replace("_dev", "")
80
+ const productionAppId = getProdAppID(appId)
81
81
 
82
82
  // App must have been deployed first
83
83
  try {
84
- const db = new CouchDB(productionAppId, { skip_setup: true })
84
+ const db = getProdAppDB({ skip_setup: true })
85
85
  const info = await db.info()
86
86
  if (info.error) throw info.error
87
87
  const deploymentDoc = await db.get(DocumentTypes.DEPLOYMENTS)
@@ -103,7 +103,7 @@ exports.revert = async ctx => {
103
103
 
104
104
  await replication.rollback()
105
105
  // update appID in reverted app to be dev version again
106
- const db = new CouchDB(appId)
106
+ const db = getAppDB()
107
107
  const appDoc = await db.get(DocumentTypes.APP_METADATA)
108
108
  appDoc.appId = appId
109
109
  appDoc.instance._id = appId
@@ -2,11 +2,11 @@ const {
2
2
  EMPTY_LAYOUT,
3
3
  BASE_LAYOUT_PROP_IDS,
4
4
  } = require("../../constants/layouts")
5
- const CouchDB = require("../../db")
6
5
  const { generateLayoutID, getScreenParams } = require("../../db/utils")
6
+ const { getAppDB } = require("@budibase/backend-core/context")
7
7
 
8
8
  exports.save = async function (ctx) {
9
- const db = new CouchDB(ctx.appId)
9
+ const db = getAppDB()
10
10
  let layout = ctx.request.body
11
11
 
12
12
  if (!layout.props) {
@@ -26,7 +26,7 @@ exports.save = async function (ctx) {
26
26
  }
27
27
 
28
28
  exports.destroy = async function (ctx) {
29
- const db = new CouchDB(ctx.appId)
29
+ const db = getAppDB()
30
30
  const layoutId = ctx.params.layoutId,
31
31
  layoutRev = ctx.params.layoutRev
32
32
 
@@ -1,7 +1,7 @@
1
1
  const { MetadataTypes } = require("../../constants")
2
- const CouchDB = require("../../db")
3
2
  const { generateMetadataID } = require("../../db/utils")
4
3
  const { saveEntityMetadata, deleteEntityMetadata } = require("../../utilities")
4
+ const { getAppDB } = require("@budibase/backend-core/context")
5
5
 
6
6
  exports.getTypes = async ctx => {
7
7
  ctx.body = {
@@ -14,17 +14,12 @@ exports.saveMetadata = async ctx => {
14
14
  if (type === MetadataTypes.AUTOMATION_TEST_HISTORY) {
15
15
  ctx.throw(400, "Cannot save automation history type")
16
16
  }
17
- ctx.body = await saveEntityMetadata(
18
- ctx.appId,
19
- type,
20
- entityId,
21
- ctx.request.body
22
- )
17
+ ctx.body = await saveEntityMetadata(type, entityId, ctx.request.body)
23
18
  }
24
19
 
25
20
  exports.deleteMetadata = async ctx => {
26
21
  const { type, entityId } = ctx.params
27
- await deleteEntityMetadata(ctx.appId, type, entityId)
22
+ await deleteEntityMetadata(type, entityId)
28
23
  ctx.body = {
29
24
  message: "Metadata deleted successfully",
30
25
  }
@@ -32,7 +27,7 @@ exports.deleteMetadata = async ctx => {
32
27
 
33
28
  exports.getMetadata = async ctx => {
34
29
  const { type, entityId } = ctx.params
35
- const db = new CouchDB(ctx.appId)
30
+ const db = getAppDB()
36
31
  const id = generateMetadataID(type, entityId)
37
32
  try {
38
33
  ctx.body = await db.get(id)
@@ -0,0 +1,13 @@
1
+ const { migrate, MIGRATIONS } = require("../../migrations")
2
+
3
+ exports.migrate = async ctx => {
4
+ const options = ctx.request.body
5
+ // don't await as can take a while, just return
6
+ migrate(options)
7
+ ctx.status = 200
8
+ }
9
+
10
+ exports.fetchDefinitions = async ctx => {
11
+ ctx.body = MIGRATIONS
12
+ ctx.status = 200
13
+ }
@@ -6,12 +6,12 @@ const {
6
6
  getBuiltinRoles,
7
7
  } = require("@budibase/backend-core/roles")
8
8
  const { getRoleParams } = require("../../db/utils")
9
- const CouchDB = require("../../db")
10
9
  const {
11
10
  CURRENTLY_SUPPORTED_LEVELS,
12
11
  getBasePermissions,
13
12
  } = require("../../utilities/security")
14
13
  const { removeFromArray } = require("../../utilities")
14
+ const { getAppDB } = require("@budibase/backend-core/context")
15
15
 
16
16
  const PermissionUpdateType = {
17
17
  REMOVE: "remove",
@@ -35,7 +35,7 @@ async function updatePermissionOnRole(
35
35
  { roleId, resourceId, level },
36
36
  updateType
37
37
  ) {
38
- const db = new CouchDB(appId)
38
+ const db = getAppDB()
39
39
  const remove = updateType === PermissionUpdateType.REMOVE
40
40
  const isABuiltin = isBuiltin(roleId)
41
41
  const dbRoleId = getDBRoleID(roleId)
@@ -106,7 +106,7 @@ exports.fetchLevels = function (ctx) {
106
106
  }
107
107
 
108
108
  exports.fetch = async function (ctx) {
109
- const db = new CouchDB(ctx.appId)
109
+ const db = getAppDB()
110
110
  const roles = await getAllDBRoles(db)
111
111
  let permissions = {}
112
112
  // create an object with structure role ID -> resource ID -> level
@@ -133,7 +133,7 @@ exports.fetch = async function (ctx) {
133
133
 
134
134
  exports.getResourcePerms = async function (ctx) {
135
135
  const resourceId = ctx.params.resourceId
136
- const db = new CouchDB(ctx.appId)
136
+ const db = getAppDB()
137
137
  const body = await db.allDocs(
138
138
  getRoleParams(null, {
139
139
  include_docs: true,
@@ -1,10 +1,11 @@
1
- import CouchDB from "../../../../db"
2
1
  import { queryValidation } from "../validation"
3
2
  import { generateQueryID } from "../../../../db/utils"
4
3
  import { ImportInfo, ImportSource } from "./sources/base"
5
4
  import { OpenAPI2 } from "./sources/openapi2"
6
5
  import { Query } from "./../../../../definitions/common"
7
6
  import { Curl } from "./sources/curl"
7
+ // @ts-ignore
8
+ import { getAppDB } from "@budibase/backend-core/context"
8
9
  interface ImportResult {
9
10
  errorQueries: Query[]
10
11
  queries: Query[]
@@ -33,10 +34,7 @@ export class RestImporter {
33
34
  return this.source.getInfo()
34
35
  }
35
36
 
36
- importQueries = async (
37
- appId: string,
38
- datasourceId: string
39
- ): Promise<ImportResult> => {
37
+ importQueries = async (datasourceId: string): Promise<ImportResult> => {
40
38
  // constuct the queries
41
39
  let queries = await this.source.getQueries(datasourceId)
42
40
 
@@ -58,7 +56,7 @@ export class RestImporter {
58
56
  })
59
57
 
60
58
  // persist queries
61
- const db = new CouchDB(appId)
59
+ const db = getAppDB()
62
60
  const response = await db.bulkDocs(queries)
63
61
 
64
62
  // create index to seperate queries and errors
@@ -6,6 +6,7 @@ const db = jest.fn(() => {
6
6
  }
7
7
  })
8
8
  jest.mock("../../../../../db", () => db)
9
+ require("@budibase/backend-core").init(require("../../../../../db"))
9
10
 
10
11
  const { RestImporter } = require("../index")
11
12
 
@@ -77,7 +78,7 @@ describe("Rest Importer", () => {
77
78
  const testImportQueries = async (key, data, assertions) => {
78
79
  await init(data)
79
80
  bulkDocs.mockReturnValue([])
80
- const importResult = await restImporter.importQueries("appId", "datasourceId")
81
+ const importResult = await restImporter.importQueries("datasourceId")
81
82
  expect(importResult.errorQueries.length).toBe(0)
82
83
  expect(importResult.queries.length).toBe(assertions[key].count)
83
84
  expect(bulkDocs).toHaveBeenCalledTimes(1)
@@ -1,4 +1,3 @@
1
- const CouchDB = require("../../../db")
2
1
  const {
3
2
  generateQueryID,
4
3
  getQueryParams,
@@ -10,6 +9,7 @@ const { save: saveDatasource } = require("../datasource")
10
9
  const { RestImporter } = require("./import")
11
10
  const { invalidateDynamicVariables } = require("../../../threads/utils")
12
11
  const environment = require("../../../environment")
12
+ const { getAppDB } = require("@budibase/backend-core/context")
13
13
 
14
14
  const Runner = new Thread(ThreadType.QUERY, {
15
15
  timeoutMs: environment.QUERY_THREAD_TIMEOUT || 10000,
@@ -28,7 +28,7 @@ function enrichQueries(input) {
28
28
  }
29
29
 
30
30
  exports.fetch = async function (ctx) {
31
- const db = new CouchDB(ctx.appId)
31
+ const db = getAppDB()
32
32
 
33
33
  const body = await db.allDocs(
34
34
  getQueryParams(null, {
@@ -69,7 +69,7 @@ exports.import = async ctx => {
69
69
  datasourceId = body.datasourceId
70
70
  }
71
71
 
72
- const importResult = await importer.importQueries(ctx.appId, datasourceId)
72
+ const importResult = await importer.importQueries(datasourceId)
73
73
 
74
74
  ctx.body = {
75
75
  ...importResult,
@@ -79,7 +79,7 @@ exports.import = async ctx => {
79
79
  }
80
80
 
81
81
  exports.save = async function (ctx) {
82
- const db = new CouchDB(ctx.appId)
82
+ const db = getAppDB()
83
83
  const query = ctx.request.body
84
84
 
85
85
  if (!query._id) {
@@ -94,7 +94,7 @@ exports.save = async function (ctx) {
94
94
  }
95
95
 
96
96
  exports.find = async function (ctx) {
97
- const db = new CouchDB(ctx.appId)
97
+ const db = getAppDB()
98
98
  const query = enrichQueries(await db.get(ctx.params.queryId))
99
99
  // remove properties that could be dangerous in real app
100
100
  if (isProdAppID(ctx.appId)) {
@@ -105,7 +105,7 @@ exports.find = async function (ctx) {
105
105
  }
106
106
 
107
107
  exports.preview = async function (ctx) {
108
- const db = new CouchDB(ctx.appId)
108
+ const db = getAppDB()
109
109
 
110
110
  const datasource = await db.get(ctx.request.body.datasourceId)
111
111
  // preview may not have a queryId as it hasn't been saved, but if it does
@@ -136,7 +136,7 @@ exports.preview = async function (ctx) {
136
136
  }
137
137
 
138
138
  async function execute(ctx, opts = { rowsOnly: false }) {
139
- const db = new CouchDB(ctx.appId)
139
+ const db = getAppDB()
140
140
 
141
141
  const query = await db.get(ctx.params.queryId)
142
142
  const datasource = await db.get(query.datasourceId)
@@ -181,7 +181,8 @@ exports.executeV2 = async function (ctx) {
181
181
  return execute(ctx, { rowsOnly: false })
182
182
  }
183
183
 
184
- const removeDynamicVariables = async (db, queryId) => {
184
+ const removeDynamicVariables = async queryId => {
185
+ const db = getAppDB()
185
186
  const query = await db.get(queryId)
186
187
  const datasource = await db.get(query.datasourceId)
187
188
  const dynamicVariables = datasource.config.dynamicVariables
@@ -202,8 +203,8 @@ const removeDynamicVariables = async (db, queryId) => {
202
203
  }
203
204
 
204
205
  exports.destroy = async function (ctx) {
205
- const db = new CouchDB(ctx.appId)
206
- await removeDynamicVariables(db, ctx.params.queryId)
206
+ const db = getAppDB()
207
+ await removeDynamicVariables(ctx.params.queryId)
207
208
  await db.remove(ctx.params.queryId, ctx.params.revId)
208
209
  ctx.message = `Query deleted.`
209
210
  ctx.status = 200
@@ -1,4 +1,3 @@
1
- const CouchDB = require("../../db")
2
1
  const {
3
2
  Role,
4
3
  getRole,
@@ -10,6 +9,7 @@ const {
10
9
  getUserMetadataParams,
11
10
  InternalTables,
12
11
  } = require("../../db/utils")
12
+ const { getAppDB } = require("@budibase/backend-core/context")
13
13
 
14
14
  const UpdateRolesOptions = {
15
15
  CREATED: "created",
@@ -40,15 +40,15 @@ async function updateRolesOnUserTable(db, roleId, updateOption) {
40
40
  }
41
41
 
42
42
  exports.fetch = async function (ctx) {
43
- ctx.body = await getAllRoles(ctx.appId)
43
+ ctx.body = await getAllRoles()
44
44
  }
45
45
 
46
46
  exports.find = async function (ctx) {
47
- ctx.body = await getRole(ctx.appId, ctx.params.roleId)
47
+ ctx.body = await getRole(ctx.params.roleId)
48
48
  }
49
49
 
50
50
  exports.save = async function (ctx) {
51
- const db = new CouchDB(ctx.appId)
51
+ const db = getAppDB()
52
52
  let { _id, name, inherits, permissionId } = ctx.request.body
53
53
  if (!_id) {
54
54
  _id = generateRoleID()
@@ -69,7 +69,7 @@ exports.save = async function (ctx) {
69
69
  }
70
70
 
71
71
  exports.destroy = async function (ctx) {
72
- const db = new CouchDB(ctx.appId)
72
+ const db = getAppDB()
73
73
  const roleId = ctx.params.roleId
74
74
  if (isBuiltin(roleId)) {
75
75
  ctx.throw(400, "Cannot delete builtin role.")
@@ -39,12 +39,11 @@ Routing.prototype.addScreenId = function (fullpath, roleId, screenId) {
39
39
 
40
40
  /**
41
41
  * Gets the full routing structure by querying the routing view and processing the result into the tree.
42
- * @param {string} appId The application to produce the routing structure for.
43
42
  * @returns {Promise<object>} The routing structure, this is the full structure designed for use in the builder,
44
43
  * if the client routing is required then the updateRoutingStructureForUserRole should be used.
45
44
  */
46
- async function getRoutingStructure(appId) {
47
- const screenRoutes = await getRoutingInfo(appId)
45
+ async function getRoutingStructure() {
46
+ const screenRoutes = await getRoutingInfo()
48
47
  const routing = new Routing()
49
48
 
50
49
  for (let screenRoute of screenRoutes) {
@@ -57,13 +56,13 @@ async function getRoutingStructure(appId) {
57
56
  }
58
57
 
59
58
  exports.fetch = async ctx => {
60
- ctx.body = await getRoutingStructure(ctx.appId)
59
+ ctx.body = await getRoutingStructure()
61
60
  }
62
61
 
63
62
  exports.clientFetch = async ctx => {
64
- const routing = await getRoutingStructure(ctx.appId)
63
+ const routing = await getRoutingStructure()
65
64
  let roleId = ctx.user.role._id
66
- const roleIds = await getUserRoleHierarchy(ctx.appId, roleId)
65
+ const roleIds = await getUserRoleHierarchy(roleId)
67
66
  for (let topLevel of Object.values(routing.routes)) {
68
67
  for (let subpathKey of Object.keys(topLevel.subpaths)) {
69
68
  let found = false