@budibase/server 1.0.49-alpha.9 → 1.0.49

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 (379) hide show
  1. package/__mocks__/arangojs.ts +1 -1
  2. package/__mocks__/aws-sdk.ts +4 -4
  3. package/__mocks__/mongodb.ts +5 -4
  4. package/__mocks__/mssql.ts +3 -3
  5. package/__mocks__/node-fetch.ts +1 -2
  6. package/__mocks__/pg.ts +5 -3
  7. package/builder/assets/{index.ad5370ae.js → index.2c37968e.js} +246 -249
  8. package/builder/assets/index.39e01193.css +1 -0
  9. package/builder/assets/{vendor.d526bfe8.js → vendor.f9faf6ab.js} +12 -12
  10. package/builder/index.html +3 -3
  11. package/coverage/clover.xml +2827 -3117
  12. package/coverage/coverage-final.json +101 -106
  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 +152 -257
  16. package/coverage/lcov-report/api/controllers/auth.js.html +13 -22
  17. package/coverage/lcov-report/api/controllers/automation.js.html +69 -39
  18. package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
  19. package/coverage/lcov-report/api/controllers/cloud.js.html +11 -8
  20. package/coverage/lcov-report/api/controllers/component.js.html +16 -13
  21. package/coverage/lcov-report/api/controllers/datasource.js.html +51 -81
  22. package/coverage/lcov-report/api/controllers/dev.js.html +6 -6
  23. package/coverage/lcov-report/{utilities/usageQuota/usageQuoteReset.js.html → api/controllers/hosting.js.html} +48 -36
  24. package/coverage/lcov-report/api/controllers/index.html +76 -76
  25. package/coverage/lcov-report/api/controllers/integration.js.html +1 -1
  26. package/coverage/lcov-report/api/controllers/layout.js.html +9 -9
  27. package/coverage/lcov-report/api/controllers/metadata.js.html +21 -6
  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 +35 -38
  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 +10 -7
  34. package/coverage/lcov-report/api/controllers/row/external.js.html +141 -48
  35. package/coverage/lcov-report/api/controllers/row/index.html +40 -55
  36. package/coverage/lcov-report/api/controllers/row/index.js.html +26 -26
  37. package/coverage/lcov-report/api/controllers/row/internal.js.html +226 -118
  38. package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +34 -52
  39. package/coverage/lcov-report/api/controllers/row/utils.js.html +62 -47
  40. package/coverage/lcov-report/api/controllers/screen.js.html +21 -15
  41. package/coverage/lcov-report/api/controllers/script.js.html +4 -4
  42. package/coverage/lcov-report/api/controllers/table/external.js.html +34 -25
  43. package/coverage/lcov-report/api/controllers/table/index.html +43 -58
  44. package/coverage/lcov-report/api/controllers/table/index.js.html +82 -58
  45. package/coverage/lcov-report/api/controllers/table/internal.js.html +66 -81
  46. package/coverage/lcov-report/api/controllers/table/utils.js.html +110 -218
  47. package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
  48. package/coverage/lcov-report/api/controllers/user.js.html +50 -47
  49. package/coverage/lcov-report/api/controllers/view/exporters.js.html +4 -4
  50. package/coverage/lcov-report/api/controllers/view/index.html +16 -16
  51. package/coverage/lcov-report/api/controllers/view/index.js.html +33 -27
  52. package/coverage/lcov-report/api/controllers/view/utils.js.html +20 -35
  53. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +7 -7
  54. package/coverage/lcov-report/api/controllers/webhook.js.html +28 -34
  55. package/coverage/lcov-report/api/index.html +1 -1
  56. package/coverage/lcov-report/api/index.js.html +8 -8
  57. package/coverage/lcov-report/api/routes/analytics.js.html +1 -1
  58. package/coverage/lcov-report/api/routes/apikeys.js.html +1 -1
  59. package/coverage/lcov-report/api/routes/application.js.html +1 -1
  60. package/coverage/lcov-report/api/routes/auth.js.html +1 -1
  61. package/coverage/lcov-report/api/routes/automation.js.html +1 -1
  62. package/coverage/lcov-report/api/routes/backup.js.html +1 -1
  63. package/coverage/lcov-report/api/routes/cloud.js.html +1 -1
  64. package/coverage/lcov-report/api/routes/component.js.html +1 -1
  65. package/coverage/lcov-report/api/routes/datasource.js.html +1 -1
  66. package/coverage/lcov-report/api/routes/deploy.js.html +1 -1
  67. package/coverage/lcov-report/api/routes/dev.js.html +1 -1
  68. package/coverage/lcov-report/api/routes/{migrations.js.html → hosting.js.html} +14 -17
  69. package/coverage/lcov-report/api/routes/index.html +18 -18
  70. package/coverage/lcov-report/api/routes/index.js.html +3 -3
  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/api/routes/permission.js.html +1 -1
  75. package/coverage/lcov-report/api/routes/query.js.html +1 -1
  76. package/coverage/lcov-report/api/routes/role.js.html +1 -1
  77. package/coverage/lcov-report/api/routes/routing.js.html +1 -1
  78. package/coverage/lcov-report/api/routes/row.js.html +1 -1
  79. package/coverage/lcov-report/api/routes/screen.js.html +1 -1
  80. package/coverage/lcov-report/api/routes/script.js.html +1 -1
  81. package/coverage/lcov-report/api/routes/static.js.html +2 -17
  82. package/coverage/lcov-report/api/routes/table.js.html +1 -1
  83. package/coverage/lcov-report/api/routes/templates.js.html +1 -1
  84. package/coverage/lcov-report/api/routes/user.js.html +1 -1
  85. package/coverage/lcov-report/api/routes/view.js.html +1 -1
  86. package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
  87. package/coverage/lcov-report/automations/actions.js.html +24 -24
  88. package/coverage/lcov-report/automations/automationUtils.js.html +10 -7
  89. package/coverage/lcov-report/automations/bullboard.js.html +16 -16
  90. package/coverage/lcov-report/automations/index.html +18 -18
  91. package/coverage/lcov-report/automations/index.js.html +1 -1
  92. package/coverage/lcov-report/automations/steps/bash.js.html +6 -6
  93. package/coverage/lcov-report/automations/steps/createRow.js.html +22 -13
  94. package/coverage/lcov-report/automations/steps/delay.js.html +4 -4
  95. package/coverage/lcov-report/automations/steps/deleteRow.js.html +20 -11
  96. package/coverage/lcov-report/automations/steps/discord.js.html +7 -7
  97. package/coverage/lcov-report/automations/steps/executeQuery.js.html +6 -6
  98. package/coverage/lcov-report/automations/steps/executeScript.js.html +6 -6
  99. package/coverage/lcov-report/automations/steps/filter.js.html +7 -7
  100. package/coverage/lcov-report/automations/steps/index.html +13 -13
  101. package/coverage/lcov-report/automations/steps/integromat.js.html +5 -5
  102. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +8 -8
  103. package/coverage/lcov-report/automations/steps/queryRows.js.html +10 -10
  104. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +5 -5
  105. package/coverage/lcov-report/automations/steps/serverLog.js.html +3 -3
  106. package/coverage/lcov-report/automations/steps/slack.js.html +5 -5
  107. package/coverage/lcov-report/automations/steps/updateRow.js.html +7 -7
  108. package/coverage/lcov-report/automations/steps/utils.js.html +3 -3
  109. package/coverage/lcov-report/automations/steps/zapier.js.html +5 -5
  110. package/coverage/lcov-report/automations/triggerInfo/app.js.html +2 -2
  111. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +2 -2
  112. package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
  113. package/coverage/lcov-report/automations/triggerInfo/index.js.html +8 -8
  114. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +2 -2
  115. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +2 -2
  116. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +2 -2
  117. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +2 -2
  118. package/coverage/lcov-report/automations/triggers.js.html +55 -61
  119. package/coverage/lcov-report/automations/utils.js.html +42 -54
  120. package/coverage/lcov-report/constants/index.html +5 -5
  121. package/coverage/lcov-report/constants/index.js.html +26 -53
  122. package/coverage/lcov-report/constants/layouts.js.html +5 -5
  123. package/coverage/lcov-report/constants/screens.js.html +4 -4
  124. package/coverage/lcov-report/db/client.js.html +18 -18
  125. package/coverage/lcov-report/db/inMemoryView.js.html +7 -7
  126. package/coverage/lcov-report/db/index.html +15 -15
  127. package/coverage/lcov-report/db/index.js.html +3 -3
  128. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +37 -25
  129. package/coverage/lcov-report/db/linkedRows/index.html +27 -27
  130. package/coverage/lcov-report/db/linkedRows/index.js.html +96 -51
  131. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +42 -42
  132. package/coverage/lcov-report/db/newid.js.html +4 -4
  133. package/coverage/lcov-report/db/utils.js.html +87 -87
  134. package/coverage/lcov-report/events/AutomationEmitter.js.html +1 -1
  135. package/coverage/lcov-report/events/index.html +1 -1
  136. package/coverage/lcov-report/events/index.js.html +5 -5
  137. package/coverage/lcov-report/events/utils.js.html +3 -3
  138. package/coverage/lcov-report/index.html +120 -135
  139. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
  140. package/coverage/lcov-report/integrations/tests/index.html +1 -1
  141. package/coverage/lcov-report/middleware/appInfo.js.html +1 -1
  142. package/coverage/lcov-report/middleware/authorized.js.html +65 -173
  143. package/coverage/lcov-report/middleware/builder.js.html +10 -10
  144. package/coverage/lcov-report/middleware/currentapp.js.html +83 -95
  145. package/coverage/lcov-report/middleware/index.html +38 -38
  146. package/coverage/lcov-report/middleware/joi-validator.js.html +3 -3
  147. package/coverage/lcov-report/middleware/resourceId.js.html +1 -1
  148. package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
  149. package/coverage/lcov-report/middleware/usageQuota.js.html +53 -281
  150. package/coverage/lcov-report/middleware/utils.js.html +2 -2
  151. package/coverage/lcov-report/threads/automation.js.html +24 -30
  152. package/coverage/lcov-report/threads/index.html +26 -26
  153. package/coverage/lcov-report/threads/index.js.html +10 -10
  154. package/coverage/lcov-report/threads/query.js.html +24 -39
  155. package/coverage/lcov-report/threads/utils.js.html +14 -14
  156. package/coverage/lcov-report/utilities/bcrypt.js.html +1 -1
  157. package/coverage/lcov-report/utilities/budibaseDir.js.html +7 -7
  158. package/coverage/lcov-report/utilities/centralPath.js.html +4 -4
  159. package/coverage/lcov-report/utilities/csvParser.js.html +6 -6
  160. package/coverage/lcov-report/utilities/global.js.html +49 -58
  161. package/coverage/lcov-report/utilities/index.html +37 -37
  162. package/coverage/lcov-report/utilities/index.js.html +73 -43
  163. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +8 -8
  164. package/coverage/lcov-report/utilities/queue/index.html +1 -1
  165. package/coverage/lcov-report/utilities/routing/index.html +1 -1
  166. package/coverage/lcov-report/utilities/routing/index.js.html +7 -7
  167. package/coverage/lcov-report/utilities/rowProcessor/index.html +27 -27
  168. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +103 -97
  169. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +27 -75
  170. package/coverage/lcov-report/utilities/scriptRunner.js.html +5 -5
  171. package/coverage/lcov-report/utilities/security.js.html +8 -8
  172. package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
  173. package/coverage/lcov-report/utilities/users.js.html +9 -9
  174. package/coverage/lcov-report/utilities/workerRequests.js.html +112 -43
  175. package/coverage/lcov.info +4431 -5013
  176. package/dist/api/controllers/application.js +60 -90
  177. package/dist/api/controllers/auth.js +5 -8
  178. package/dist/api/controllers/automation.js +19 -14
  179. package/dist/api/controllers/cloud.js +3 -2
  180. package/dist/api/controllers/component.js +4 -3
  181. package/dist/api/controllers/datasource.js +10 -20
  182. package/dist/api/controllers/deploy/Deployment.js +6 -3
  183. package/dist/api/controllers/deploy/index.js +13 -12
  184. package/dist/api/controllers/dev.js +5 -5
  185. package/dist/api/controllers/hosting.js +30 -0
  186. package/dist/api/controllers/layout.js +3 -3
  187. package/dist/api/controllers/metadata.js +4 -4
  188. package/dist/api/controllers/permission.js +4 -4
  189. package/dist/api/controllers/query/import/index.js +6 -4
  190. package/dist/api/controllers/query/index.js +10 -11
  191. package/dist/api/controllers/role.js +5 -5
  192. package/dist/api/controllers/routing.js +6 -5
  193. package/dist/api/controllers/row/ExternalRequest.js +67 -90
  194. package/dist/api/controllers/row/external.js +22 -14
  195. package/dist/api/controllers/row/internal.js +93 -55
  196. package/dist/api/controllers/row/internalSearch.js +17 -23
  197. package/dist/api/controllers/row/utils.js +14 -13
  198. package/dist/api/controllers/screen.js +7 -5
  199. package/dist/api/controllers/static/index.js +12 -61
  200. package/dist/api/controllers/table/external.js +10 -7
  201. package/dist/api/controllers/table/index.js +13 -16
  202. package/dist/api/controllers/table/internal.js +16 -22
  203. package/dist/api/controllers/table/utils.js +35 -62
  204. package/dist/api/controllers/user.js +20 -18
  205. package/dist/api/controllers/view/index.js +10 -8
  206. package/dist/api/controllers/view/utils.js +4 -9
  207. package/dist/api/controllers/webhook.js +8 -10
  208. package/dist/api/routes/hosting.js +11 -0
  209. package/dist/api/routes/index.js +2 -2
  210. package/dist/api/routes/static.js +1 -2
  211. package/dist/api/routes/tests/utilities/TestFunctions.js +17 -37
  212. package/dist/app.js +5 -35
  213. package/dist/automations/automationUtils.js +3 -2
  214. package/dist/automations/steps/createRow.js +5 -3
  215. package/dist/automations/steps/deleteRow.js +4 -1
  216. package/dist/automations/steps/updateRow.js +1 -1
  217. package/dist/automations/triggers.js +25 -27
  218. package/dist/automations/utils.js +5 -10
  219. package/dist/constants/index.js +0 -7
  220. package/dist/db/linkedRows/LinkController.js +7 -3
  221. package/dist/db/linkedRows/index.js +27 -16
  222. package/dist/db/linkedRows/linkUtils.js +6 -6
  223. package/dist/db/views/staticViews.js +10 -9
  224. package/dist/definitions/datasource.js +0 -1
  225. package/dist/environment.js +1 -4
  226. package/dist/integrations/base/sql.js +14 -56
  227. package/dist/integrations/index.js +0 -3
  228. package/dist/integrations/utils.js +9 -60
  229. package/dist/middleware/authorized.js +30 -57
  230. package/dist/middleware/builder.js +2 -2
  231. package/dist/middleware/currentapp.js +37 -41
  232. package/dist/middleware/usageQuota.js +15 -82
  233. package/dist/package.json +5 -8
  234. package/dist/tests/utilities/TestConfiguration.js +50 -80
  235. package/dist/threads/automation.js +11 -13
  236. package/dist/threads/query.js +11 -15
  237. package/dist/tsconfig.tsbuildinfo +1 -1
  238. package/dist/utilities/fileSystem/index.js +3 -4
  239. package/dist/utilities/global.js +12 -15
  240. package/dist/utilities/index.js +17 -7
  241. package/dist/utilities/routing/index.js +5 -5
  242. package/dist/utilities/rowProcessor/index.js +17 -23
  243. package/dist/utilities/rowProcessor/utils.js +4 -14
  244. package/dist/utilities/{usageQuota/index.js → usageQuota.js} +31 -45
  245. package/dist/utilities/users.js +3 -3
  246. package/dist/utilities/workerRequests.js +24 -4
  247. package/nodemon.json +1 -1
  248. package/package.json +6 -9
  249. package/scripts/integrations/postgres/init.sql +6 -11
  250. package/scripts/likeCypress.ts +1 -1
  251. package/src/api/controllers/application.js +50 -85
  252. package/src/api/controllers/auth.js +5 -8
  253. package/src/api/controllers/automation.js +23 -13
  254. package/src/api/controllers/cloud.js +3 -2
  255. package/src/api/controllers/component.js +4 -3
  256. package/src/api/controllers/datasource.js +11 -21
  257. package/src/api/controllers/deploy/Deployment.js +7 -3
  258. package/src/api/controllers/deploy/index.js +13 -20
  259. package/src/api/controllers/dev.js +5 -5
  260. package/src/api/controllers/hosting.js +22 -0
  261. package/src/api/controllers/layout.js +3 -3
  262. package/src/api/controllers/metadata.js +9 -4
  263. package/src/api/controllers/permission.js +4 -4
  264. package/src/api/controllers/query/import/index.ts +6 -4
  265. package/src/api/controllers/query/import/tests/index.spec.js +1 -2
  266. package/src/api/controllers/query/index.js +10 -11
  267. package/src/api/controllers/role.js +5 -5
  268. package/src/api/controllers/routing.js +6 -5
  269. package/src/api/controllers/row/ExternalRequest.ts +43 -67
  270. package/src/api/controllers/row/external.js +58 -27
  271. package/src/api/controllers/row/internal.js +90 -54
  272. package/src/api/controllers/row/internalSearch.js +17 -23
  273. package/src/api/controllers/row/utils.js +18 -13
  274. package/src/api/controllers/screen.js +7 -5
  275. package/src/api/controllers/static/index.js +12 -65
  276. package/src/api/controllers/table/external.js +10 -7
  277. package/src/api/controllers/table/index.js +28 -20
  278. package/src/api/controllers/table/internal.js +19 -24
  279. package/src/api/controllers/table/utils.js +42 -78
  280. package/src/api/controllers/user.js +20 -19
  281. package/src/api/controllers/view/index.js +10 -8
  282. package/src/api/controllers/view/utils.js +4 -9
  283. package/src/api/controllers/webhook.js +8 -10
  284. package/src/api/routes/hosting.js +13 -0
  285. package/src/api/routes/index.js +2 -2
  286. package/src/api/routes/static.js +0 -5
  287. package/src/api/routes/tests/application.spec.js +2 -2
  288. package/src/api/routes/tests/auth.spec.js +2 -1
  289. package/src/api/routes/tests/automation.spec.js +0 -1
  290. package/src/api/routes/tests/hosting.spec.js +36 -0
  291. package/src/api/routes/tests/misc.spec.js +1 -0
  292. package/src/api/routes/tests/routing.spec.js +12 -21
  293. package/src/api/routes/tests/row.spec.js +4 -7
  294. package/src/api/routes/tests/utilities/TestFunctions.js +17 -39
  295. package/src/app.ts +5 -18
  296. package/src/automations/automationUtils.js +3 -2
  297. package/src/automations/steps/createRow.js +5 -2
  298. package/src/automations/steps/deleteRow.js +4 -1
  299. package/src/automations/steps/updateRow.js +1 -1
  300. package/src/automations/triggers.js +31 -33
  301. package/src/automations/utils.js +5 -9
  302. package/src/constants/index.js +0 -9
  303. package/src/db/linkedRows/LinkController.js +7 -3
  304. package/src/db/linkedRows/index.js +31 -16
  305. package/src/db/linkedRows/linkUtils.js +6 -6
  306. package/src/db/tests/linkController.spec.js +1 -0
  307. package/src/db/tests/linkTests.spec.js +6 -5
  308. package/src/db/views/staticViews.js +10 -8
  309. package/src/definitions/common.ts +0 -3
  310. package/src/definitions/datasource.ts +0 -3
  311. package/src/environment.js +1 -4
  312. package/src/integrations/base/sql.ts +21 -69
  313. package/src/integrations/index.ts +0 -3
  314. package/src/integrations/tests/sql.spec.js +0 -16
  315. package/src/integrations/utils.ts +12 -75
  316. package/src/middleware/authorized.js +30 -66
  317. package/src/middleware/builder.js +2 -2
  318. package/src/middleware/currentapp.js +46 -50
  319. package/src/middleware/tests/authorized.spec.js +6 -13
  320. package/src/middleware/tests/currentapp.spec.js +0 -6
  321. package/src/middleware/tests/usageQuota.spec.js +24 -18
  322. package/src/middleware/usageQuota.js +17 -93
  323. package/src/tests/utilities/TestConfiguration.js +55 -82
  324. package/src/threads/automation.js +15 -17
  325. package/src/threads/query.js +12 -17
  326. package/src/utilities/fileSystem/index.js +3 -4
  327. package/src/utilities/global.js +12 -15
  328. package/src/utilities/index.js +17 -7
  329. package/src/utilities/routing/index.js +5 -5
  330. package/src/utilities/rowProcessor/index.js +27 -25
  331. package/src/utilities/rowProcessor/utils.js +7 -23
  332. package/src/utilities/usageQuota.js +73 -0
  333. package/src/utilities/users.js +3 -3
  334. package/src/utilities/workerRequests.js +27 -4
  335. package/tsconfig.json +1 -2
  336. package/builder/assets/index.83c0944f.css +0 -1
  337. package/coverage/lcov-report/api/controllers/migrations.js.html +0 -119
  338. package/coverage/lcov-report/api/controllers/row/staticFormula.js.html +0 -548
  339. package/coverage/lcov-report/api/controllers/table/bulkFormula.js.html +0 -599
  340. package/coverage/lcov-report/utilities/usageQuota/index.html +0 -141
  341. package/coverage/lcov-report/utilities/usageQuota/index.js.html +0 -359
  342. package/coverage/lcov-report/utilities/usageQuota/rows.js.html +0 -305
  343. package/dist/api/controllers/migrations.js +0 -21
  344. package/dist/api/controllers/row/staticFormula.js +0 -147
  345. package/dist/api/controllers/table/bulkFormula.js +0 -159
  346. package/dist/api/routes/migrations.js +0 -9
  347. package/dist/integrations/googlesheets.js +0 -340
  348. package/dist/migrations/functions/appUrls.js +0 -46
  349. package/dist/migrations/functions/quotas1.js +0 -50
  350. package/dist/migrations/functions/usageQuotas/index.js +0 -20
  351. package/dist/migrations/functions/usageQuotas/syncApps.js +0 -29
  352. package/dist/migrations/functions/usageQuotas/syncRows.js +0 -33
  353. package/dist/migrations/functions/userEmailViewCasing.js +0 -24
  354. package/dist/migrations/index.js +0 -62
  355. package/dist/utilities/usageQuota/rows.js +0 -78
  356. package/dist/utilities/usageQuota/usageQuoteReset.js +0 -16
  357. package/src/api/controllers/migrations.js +0 -13
  358. package/src/api/controllers/row/staticFormula.js +0 -156
  359. package/src/api/controllers/table/bulkFormula.js +0 -173
  360. package/src/api/routes/migrations.js +0 -14
  361. package/src/api/routes/tests/static.spec.js +0 -98
  362. package/src/integrations/googlesheets.ts +0 -353
  363. package/src/migrations/functions/appUrls.ts +0 -34
  364. package/src/migrations/functions/quotas1.ts +0 -20
  365. package/src/migrations/functions/tests/appUrls.spec.js +0 -29
  366. package/src/migrations/functions/tests/quotas1.spec.js +0 -27
  367. package/src/migrations/functions/tests/userEmailViewCasing.spec.js +0 -25
  368. package/src/migrations/functions/usageQuotas/index.ts +0 -8
  369. package/src/migrations/functions/usageQuotas/syncApps.ts +0 -18
  370. package/src/migrations/functions/usageQuotas/syncRows.ts +0 -22
  371. package/src/migrations/functions/usageQuotas/tests/syncApps.spec.js +0 -37
  372. package/src/migrations/functions/usageQuotas/tests/syncRows.spec.js +0 -43
  373. package/src/migrations/functions/userEmailViewCasing.ts +0 -13
  374. package/src/migrations/index.ts +0 -56
  375. package/src/module.d.ts +0 -3
  376. package/src/utilities/tests/usageQuota/usageQuota.spec.js +0 -72
  377. package/src/utilities/usageQuota/index.js +0 -93
  378. package/src/utilities/usageQuota/rows.js +0 -75
  379. package/src/utilities/usageQuota/usageQuoteReset.js +0 -18
@@ -1,11 +1,6 @@
1
1
  mockAuthWithNoCookie()
2
2
  mockWorker()
3
3
 
4
- jest.mock("@budibase/backend-core/db", () => ({
5
- ...jest.requireActual("@budibase/backend-core/db"),
6
- dbExists: () => true,
7
- }))
8
-
9
4
  function mockWorker() {
10
5
  jest.mock("../../utilities/workerRequests", () => ({
11
6
  getGlobalSelf: () => {
@@ -55,7 +50,6 @@ function mockAuthWithCookie() {
55
50
  return "app_test"
56
51
  },
57
52
  setCookie: jest.fn(),
58
- clearCookie: jest.fn(),
59
53
  getCookie: () => ({appId: "app_different", roleId: "PUBLIC"}),
60
54
  }))
61
55
  jest.mock("@budibase/backend-core/constants", () => ({
@@ -1,5 +1,11 @@
1
1
  jest.mock("../../db")
2
2
  jest.mock("../../utilities/usageQuota")
3
+ jest.mock("../../environment", () => ({
4
+ isTest: () => true,
5
+ isProd: () => false,
6
+ isDev: () => true,
7
+ _set: () => {},
8
+ }))
3
9
  jest.mock("@budibase/backend-core/tenancy", () => ({
4
10
  getTenantId: () => "testing123"
5
11
  }))
@@ -23,10 +29,9 @@ class TestConfiguration {
23
29
  },
24
30
  req: {
25
31
  method: "POST",
26
- url: "/applications"
32
+ url: "/rows"
27
33
  }
28
34
  }
29
- usageQuota.useQuotas = () => true
30
35
  }
31
36
 
32
37
  executeMiddleware() {
@@ -108,6 +113,7 @@ describe("usageQuota middleware", () => {
108
113
 
109
114
  it("calculates and persists the correct usage quota for the relevant action", async () => {
110
115
  config.setUrl("/rows")
116
+ config.setProd(true)
111
117
 
112
118
  await config.executeMiddleware()
113
119
 
@@ -115,20 +121,20 @@ describe("usageQuota middleware", () => {
115
121
  expect(config.next).toHaveBeenCalled()
116
122
  })
117
123
 
118
- // it("calculates the correct file size from a file upload call and adds it to quota", async () => {
119
- // config.setUrl("/upload")
120
- // config.setProd(true)
121
- // config.setFiles([
122
- // {
123
- // size: 100
124
- // },
125
- // {
126
- // size: 10000
127
- // },
128
- // ])
129
- // await config.executeMiddleware()
130
-
131
- // expect(usageQuota.update).toHaveBeenCalledWith("storage", 10100)
132
- // expect(config.next).toHaveBeenCalled()
133
- // })
124
+ it("calculates the correct file size from a file upload call and adds it to quota", async () => {
125
+ config.setUrl("/upload")
126
+ config.setProd(true)
127
+ config.setFiles([
128
+ {
129
+ size: 100
130
+ },
131
+ {
132
+ size: 10000
133
+ },
134
+ ])
135
+ await config.executeMiddleware()
136
+
137
+ expect(usageQuota.update).toHaveBeenCalledWith("storage", 10100)
138
+ expect(config.next).toHaveBeenCalled()
139
+ })
134
140
  })
@@ -1,10 +1,14 @@
1
+ const CouchDB = require("../db")
1
2
  const usageQuota = require("../utilities/usageQuota")
2
- const { getUniqueRows } = require("../utilities/usageQuota/rows")
3
+ const env = require("../environment")
4
+ const { getTenantId } = require("@budibase/backend-core/tenancy")
3
5
  const {
4
6
  isExternalTable,
5
7
  isRowId: isExternalRowId,
6
8
  } = require("../integrations/utils")
7
- const { getAppDB } = require("@budibase/backend-core/context")
9
+
10
+ // tenants without limits
11
+ const EXCLUDED_TENANTS = ["bb", "default", "bbtest", "bbstaging"]
8
12
 
9
13
  // currently only counting new writes and deletes
10
14
  const METHOD_MAP = {
@@ -14,13 +18,13 @@ const METHOD_MAP = {
14
18
 
15
19
  const DOMAIN_MAP = {
16
20
  rows: usageQuota.Properties.ROW,
17
- // upload: usageQuota.Properties.UPLOAD, // doesn't work yet
18
- // views: usageQuota.Properties.VIEW, // doesn't work yet
19
- // users: usageQuota.Properties.USER, // doesn't work yet
21
+ upload: usageQuota.Properties.UPLOAD,
22
+ views: usageQuota.Properties.VIEW,
23
+ users: usageQuota.Properties.USER,
20
24
  applications: usageQuota.Properties.APPS,
21
25
  // this will not be updated by endpoint calls
22
26
  // instead it will be updated by triggerInfo
23
- // automationRuns: usageQuota.Properties.AUTOMATION, // doesn't work yet
27
+ automationRuns: usageQuota.Properties.AUTOMATION,
24
28
  }
25
29
 
26
30
  function getProperty(url) {
@@ -32,7 +36,10 @@ function getProperty(url) {
32
36
  }
33
37
 
34
38
  module.exports = async (ctx, next) => {
35
- if (!usageQuota.useQuotas()) {
39
+ const tenantId = getTenantId()
40
+
41
+ // if in development or a self hosted cloud usage quotas should not be executed
42
+ if (env.isDev() || env.SELF_HOSTED || EXCLUDED_TENANTS.includes(tenantId)) {
36
43
  return next()
37
44
  }
38
45
 
@@ -46,7 +53,7 @@ module.exports = async (ctx, next) => {
46
53
  const usageId = ctx.request.body._id
47
54
  try {
48
55
  if (ctx.appId) {
49
- const db = getAppDB()
56
+ const db = new CouchDB(ctx.appId)
50
57
  await db.get(usageId)
51
58
  }
52
59
  return next()
@@ -73,92 +80,9 @@ module.exports = async (ctx, next) => {
73
80
  usage = files.map(file => file.size).reduce((total, size) => total + size)
74
81
  }
75
82
  try {
76
- await performRequest(ctx, next, property, usage)
83
+ await usageQuota.update(property, usage)
84
+ return next()
77
85
  } catch (err) {
78
86
  ctx.throw(400, err)
79
87
  }
80
88
  }
81
-
82
- const performRequest = async (ctx, next, property, usage) => {
83
- const usageContext = {
84
- skipNext: false,
85
- skipUsage: false,
86
- [usageQuota.Properties.APPS]: {},
87
- }
88
-
89
- if (usage === -1) {
90
- if (PRE_DELETE[property]) {
91
- await PRE_DELETE[property](ctx, usageContext)
92
- }
93
- } else {
94
- if (PRE_CREATE[property]) {
95
- await PRE_CREATE[property](ctx, usageContext)
96
- }
97
- }
98
-
99
- // run the request
100
- if (!usageContext.skipNext) {
101
- await usageQuota.update(property, usage, { dryRun: true })
102
- await next()
103
- }
104
-
105
- if (usage === -1) {
106
- if (POST_DELETE[property]) {
107
- await POST_DELETE[property](ctx, usageContext)
108
- }
109
- } else {
110
- if (POST_CREATE[property]) {
111
- await POST_CREATE[property](ctx, usageContext)
112
- }
113
- }
114
-
115
- // update the usage
116
- if (!usageContext.skipUsage) {
117
- await usageQuota.update(property, usage)
118
- }
119
- }
120
-
121
- const appPreDelete = async (ctx, usageContext) => {
122
- if (ctx.query.unpublish) {
123
- // don't run usage decrement for unpublish
124
- usageContext.skipUsage = true
125
- return
126
- }
127
-
128
- // store the row count to delete
129
- const rows = await getUniqueRows([ctx.appId])
130
- if (rows.length) {
131
- usageContext[usageQuota.Properties.APPS] = { rowCount: rows.length }
132
- }
133
- }
134
-
135
- const appPostDelete = async (ctx, usageContext) => {
136
- // delete the app rows from usage
137
- const rowCount = usageContext[usageQuota.Properties.APPS].rowCount
138
- if (rowCount) {
139
- await usageQuota.update(usageQuota.Properties.ROW, -rowCount)
140
- }
141
- }
142
-
143
- const appPostCreate = async ctx => {
144
- // app import & template creation
145
- if (ctx.request.body.useTemplate === "true") {
146
- const rows = await getUniqueRows([ctx.response.body.appId])
147
- const rowCount = rows ? rows.length : 0
148
- await usageQuota.update(usageQuota.Properties.ROW, rowCount)
149
- }
150
- }
151
-
152
- const PRE_DELETE = {
153
- [usageQuota.Properties.APPS]: appPreDelete,
154
- }
155
-
156
- const POST_DELETE = {
157
- [usageQuota.Properties.APPS]: appPostDelete,
158
- }
159
-
160
- const PRE_CREATE = {}
161
-
162
- const POST_CREATE = {
163
- [usageQuota.Properties.APPS]: appPostCreate,
164
- }
@@ -1,6 +1,3 @@
1
- const core = require("@budibase/backend-core")
2
- const CouchDB = require("../../db")
3
- core.init(CouchDB)
4
1
  const { BUILTIN_ROLE_IDS } = require("@budibase/backend-core/roles")
5
2
  const env = require("../../environment")
6
3
  const {
@@ -20,15 +17,15 @@ const supertest = require("supertest")
20
17
  const { cleanup } = require("../../utilities/fileSystem")
21
18
  const { Cookies, Headers } = require("@budibase/backend-core/constants")
22
19
  const { jwt } = require("@budibase/backend-core/auth")
20
+ const core = require("@budibase/backend-core")
23
21
  const { getGlobalDB } = require("@budibase/backend-core/tenancy")
24
22
  const { createASession } = require("@budibase/backend-core/sessions")
25
23
  const { user: userCache } = require("@budibase/backend-core/cache")
26
- const newid = require("../../db/newid")
27
- const context = require("@budibase/backend-core/context")
24
+ const CouchDB = require("../../db")
25
+ core.init(CouchDB)
28
26
 
29
27
  const GLOBAL_USER_ID = "us_uuid1"
30
28
  const EMAIL = "babs@babs.com"
31
- const CSRF_TOKEN = "e3727778-7af0-4226-b5eb-f43cbe60a306"
32
29
 
33
30
  class TestConfiguration {
34
31
  constructor(openServer = true) {
@@ -51,10 +48,6 @@ class TestConfiguration {
51
48
  return this.appId
52
49
  }
53
50
 
54
- getCouch() {
55
- return CouchDB
56
- }
57
-
58
51
  async _req(config, params, controlFunc) {
59
52
  const request = {}
60
53
  // fake cookies, we don't need them
@@ -66,21 +59,11 @@ class TestConfiguration {
66
59
  request.request = {
67
60
  body: config,
68
61
  }
69
- async function run() {
70
- if (params) {
71
- request.params = params
72
- }
73
- await controlFunc(request)
74
- return request.body
75
- }
76
- // check if already in a context
77
- if (context.getAppId() == null) {
78
- return context.doInAppContext(this.appId, async () => {
79
- return run()
80
- })
81
- } else {
82
- return run()
62
+ if (params) {
63
+ request.params = params
83
64
  }
65
+ await controlFunc(request)
66
+ return request.body
84
67
  }
85
68
 
86
69
  async globalUser({
@@ -102,11 +85,7 @@ class TestConfiguration {
102
85
  roles: roles || {},
103
86
  tenantId: TENANT_ID,
104
87
  }
105
- await createASession(id, {
106
- sessionId: "sessionid",
107
- tenantId: TENANT_ID,
108
- csrfToken: CSRF_TOKEN,
109
- })
88
+ await createASession(id, { sessionId: "sessionid", tenantId: TENANT_ID })
110
89
  if (builder) {
111
90
  user.builder = { global: true }
112
91
  } else {
@@ -119,8 +98,7 @@ class TestConfiguration {
119
98
  }
120
99
  }
121
100
 
122
- // use a new id as the name to avoid name collisions
123
- async init(appName = newid()) {
101
+ async init(appName = "test_application") {
124
102
  await this.globalUser()
125
103
  return this.createApp(appName)
126
104
  }
@@ -153,7 +131,6 @@ class TestConfiguration {
153
131
  `${Cookies.Auth}=${authToken}`,
154
132
  `${Cookies.CurrentApp}=${appToken}`,
155
133
  ],
156
- [Headers.CSRF_TOKEN]: CSRF_TOKEN,
157
134
  }
158
135
  if (this.appId) {
159
136
  headers[Headers.APP_ID] = this.appId
@@ -186,7 +163,6 @@ class TestConfiguration {
186
163
  // create dev app
187
164
  this.app = await this._req({ name: appName }, null, controllers.app.create)
188
165
  this.appId = this.app.appId
189
- context.updateAppId(this.appId)
190
166
 
191
167
  // create production app
192
168
  this.prodApp = await this.deploy()
@@ -199,16 +175,14 @@ class TestConfiguration {
199
175
  }
200
176
 
201
177
  async deploy() {
202
- await this._req(null, null, controllers.deploy.deployApp)
203
- const prodAppId = this.getAppId().replace("_dev", "")
204
- return context.doInAppContext(prodAppId, async () => {
205
- const appPackage = await this._req(
206
- null,
207
- { appId: prodAppId },
208
- controllers.app.fetchAppPackage
209
- )
210
- return appPackage.application
211
- })
178
+ const deployment = await this._req(null, null, controllers.deploy.deployApp)
179
+ const prodAppId = deployment.appId.replace("_dev", "")
180
+ const appPackage = await this._req(
181
+ null,
182
+ { appId: prodAppId },
183
+ controllers.app.fetchAppPackage
184
+ )
185
+ return appPackage.application
212
186
  }
213
187
 
214
188
  async updateTable(config = null) {
@@ -437,47 +411,46 @@ class TestConfiguration {
437
411
 
438
412
  async login({ roleId, userId, builder, prodApp = false } = {}) {
439
413
  const appId = prodApp ? this.prodAppId : this.appId
440
- return context.doInAppContext(appId, async () => {
441
- userId = !userId ? `us_uuid1` : userId
442
- if (!this.request) {
443
- throw "Server has not been opened, cannot login."
444
- }
445
- // make sure the user exists in the global DB
446
- if (roleId !== BUILTIN_ROLE_IDS.PUBLIC) {
447
- await this.globalUser({
448
- id: userId,
449
- builder,
450
- roles: { [this.prodAppId]: roleId },
451
- })
452
- }
453
- await createASession(userId, {
454
- sessionId: "sessionid",
455
- tenantId: TENANT_ID,
456
- })
457
- // have to fake this
458
- const auth = {
414
+
415
+ userId = !userId ? `us_uuid1` : userId
416
+ if (!this.request) {
417
+ throw "Server has not been opened, cannot login."
418
+ }
419
+ // make sure the user exists in the global DB
420
+ if (roleId !== BUILTIN_ROLE_IDS.PUBLIC) {
421
+ await this.globalUser({
459
422
  userId,
460
- sessionId: "sessionid",
461
- tenantId: TENANT_ID,
462
- }
463
- const app = {
464
- roleId: roleId,
465
- appId,
466
- }
467
- const authToken = jwt.sign(auth, env.JWT_SECRET)
468
- const appToken = jwt.sign(app, env.JWT_SECRET)
469
-
470
- // returning necessary request headers
471
- await userCache.invalidateUser(userId)
472
- return {
473
- Accept: "application/json",
474
- Cookie: [
475
- `${Cookies.Auth}=${authToken}`,
476
- `${Cookies.CurrentApp}=${appToken}`,
477
- ],
478
- [Headers.APP_ID]: appId,
479
- }
423
+ builder,
424
+ roles: { [this.prodAppId]: roleId },
425
+ })
426
+ }
427
+ await createASession(userId, {
428
+ sessionId: "sessionid",
429
+ tenantId: TENANT_ID,
480
430
  })
431
+ // have to fake this
432
+ const auth = {
433
+ userId,
434
+ sessionId: "sessionid",
435
+ tenantId: TENANT_ID,
436
+ }
437
+ const app = {
438
+ roleId: roleId,
439
+ appId,
440
+ }
441
+ const authToken = jwt.sign(auth, env.JWT_SECRET)
442
+ const appToken = jwt.sign(app, env.JWT_SECRET)
443
+
444
+ // returning necessary request headers
445
+ await userCache.invalidateUser(userId)
446
+ return {
447
+ Accept: "application/json",
448
+ Cookie: [
449
+ `${Cookies.Auth}=${authToken}`,
450
+ `${Cookies.CurrentApp}=${appToken}`,
451
+ ],
452
+ [Headers.APP_ID]: appId,
453
+ }
481
454
  }
482
455
  }
483
456
 
@@ -5,11 +5,11 @@ const automationUtils = require("../automations/automationUtils")
5
5
  const AutomationEmitter = require("../events/AutomationEmitter")
6
6
  const { processObject } = require("@budibase/string-templates")
7
7
  const { DEFAULT_TENANT_ID } = require("@budibase/backend-core/constants")
8
+ const CouchDB = require("../db")
8
9
  const { DocumentTypes, isDevAppID } = require("../db/utils")
9
10
  const { doInTenant } = require("@budibase/backend-core/tenancy")
10
11
  const usage = require("../utilities/usageQuota")
11
12
  const { definitions: triggerDefs } = require("../automations/triggerInfo")
12
- const { doInAppContext, getAppDB } = require("@budibase/backend-core/context")
13
13
 
14
14
  const FILTER_STEP_ID = actions.ACTION_DEFINITIONS.FILTER.stepId
15
15
  const CRON_STEP_ID = triggerDefs.CRON.stepId
@@ -59,10 +59,11 @@ class Orchestrator {
59
59
  }
60
60
 
61
61
  async getApp() {
62
+ const appId = this._appId
62
63
  if (this._app) {
63
64
  return this._app
64
65
  }
65
- const db = getAppDB()
66
+ const db = new CouchDB(appId)
66
67
  this._app = await db.get(DocumentTypes.APP_METADATA)
67
68
  return this._app
68
69
  }
@@ -130,19 +131,16 @@ class Orchestrator {
130
131
  }
131
132
 
132
133
  module.exports = (input, callback) => {
133
- const appId = input.data.event.appId
134
- doInAppContext(appId, () => {
135
- const automationOrchestrator = new Orchestrator(
136
- input.data.automation,
137
- input.data.event
138
- )
139
- automationOrchestrator
140
- .execute()
141
- .then(response => {
142
- callback(null, response)
143
- })
144
- .catch(err => {
145
- callback(err)
146
- })
147
- })
134
+ const automationOrchestrator = new Orchestrator(
135
+ input.data.automation,
136
+ input.data.event
137
+ )
138
+ automationOrchestrator
139
+ .execute()
140
+ .then(response => {
141
+ callback(null, response)
142
+ })
143
+ .catch(err => {
144
+ callback(err)
145
+ })
148
146
  }
@@ -3,10 +3,11 @@ threadUtils.threadSetup()
3
3
  const ScriptRunner = require("../utilities/scriptRunner")
4
4
  const { integrations } = require("../integrations")
5
5
  const { processStringSync } = require("@budibase/string-templates")
6
- const { doInAppContext, getAppDB } = require("@budibase/backend-core/context")
6
+ const CouchDB = require("../db")
7
7
 
8
8
  class QueryRunner {
9
9
  constructor(input, flags = { noRecursiveQuery: false }) {
10
+ this.appId = input.appId
10
11
  this.datasource = input.datasource
11
12
  this.queryVerb = input.queryVerb
12
13
  this.fields = input.fields
@@ -74,11 +75,6 @@ class QueryRunner {
74
75
  return this.execute()
75
76
  }
76
77
 
77
- // check for undefined response
78
- if (!rows) {
79
- rows = []
80
- }
81
-
82
78
  // needs to an array for next step
83
79
  if (!Array.isArray(rows)) {
84
80
  rows = [rows]
@@ -100,11 +96,12 @@ class QueryRunner {
100
96
  }
101
97
 
102
98
  async runAnotherQuery(queryId, parameters) {
103
- const db = getAppDB()
99
+ const db = new CouchDB(this.appId)
104
100
  const query = await db.get(queryId)
105
101
  const datasource = await db.get(query.datasourceId)
106
102
  return new QueryRunner(
107
103
  {
104
+ appId: this.appId,
108
105
  datasource,
109
106
  queryVerb: query.queryVerb,
110
107
  fields: query.fields,
@@ -214,14 +211,12 @@ class QueryRunner {
214
211
  }
215
212
 
216
213
  module.exports = (input, callback) => {
217
- doInAppContext(input.appId, () => {
218
- const Runner = new QueryRunner(input)
219
- Runner.execute()
220
- .then(response => {
221
- callback(null, response)
222
- })
223
- .catch(err => {
224
- callback(err)
225
- })
226
- })
214
+ const Runner = new QueryRunner(input)
215
+ Runner.execute()
216
+ .then(response => {
217
+ callback(null, response)
218
+ })
219
+ .catch(err => {
220
+ callback(err)
221
+ })
227
222
  }
@@ -1,4 +1,5 @@
1
1
  const { budibaseTempDir } = require("../budibaseDir")
2
+ const { isDev } = require("../index")
2
3
  const fs = require("fs")
3
4
  const { join } = require("path")
4
5
  const uuid = require("uuid/v4")
@@ -19,7 +20,6 @@ const {
19
20
  LINK_USER_METADATA_PREFIX,
20
21
  } = require("../../db/utils")
21
22
  const MemoryStream = require("memorystream")
22
- const { getAppId } = require("@budibase/backend-core/context")
23
23
 
24
24
  const TOP_LEVEL_PATH = join(__dirname, "..", "..", "..")
25
25
  const NODE_MODULES_PATH = join(TOP_LEVEL_PATH, "node_modules")
@@ -51,7 +51,7 @@ exports.init = () => {
51
51
  * everything required to function is ready.
52
52
  */
53
53
  exports.checkDevelopmentEnvironment = () => {
54
- if (!env.isDev() || env.isTest()) {
54
+ if (!isDev()) {
55
55
  return
56
56
  }
57
57
  if (!fs.existsSync(budibaseTempDir())) {
@@ -251,8 +251,7 @@ exports.downloadTemplate = async (type, name) => {
251
251
  /**
252
252
  * Retrieves component libraries from object store (or tmp symlink if in local)
253
253
  */
254
- exports.getComponentLibraryManifest = async library => {
255
- const appId = getAppId()
254
+ exports.getComponentLibraryManifest = async (appId, library) => {
256
255
  const filename = "manifest.json"
257
256
  /* istanbul ignore next */
258
257
  // when testing in cypress and so on we need to get the package
@@ -3,7 +3,7 @@ const {
3
3
  getGlobalIDFromUserMetadataID,
4
4
  } = require("../db/utils")
5
5
  const { BUILTIN_ROLE_IDS } = require("@budibase/backend-core/roles")
6
- const { getProdAppID } = require("@budibase/backend-core/db")
6
+ const { getDeployedAppID } = require("@budibase/backend-core/db")
7
7
  const { getGlobalUserParams } = require("@budibase/backend-core/db")
8
8
  const { user: userCache } = require("@budibase/backend-core/cache")
9
9
  const {
@@ -11,10 +11,8 @@ const {
11
11
  isUserInAppTenant,
12
12
  } = require("@budibase/backend-core/tenancy")
13
13
  const env = require("../environment")
14
- const { getAppId } = require("@budibase/backend-core/context")
15
14
 
16
- exports.updateAppRole = (user, { appId } = {}) => {
17
- appId = appId || getAppId()
15
+ exports.updateAppRole = (appId, user) => {
18
16
  if (!user || !user.roles) {
19
17
  return user
20
18
  }
@@ -26,7 +24,7 @@ exports.updateAppRole = (user, { appId } = {}) => {
26
24
  return user
27
25
  }
28
26
  // always use the deployed app
29
- user.roleId = user.roles[getProdAppID(appId)]
27
+ user.roleId = user.roles[getDeployedAppID(appId)]
30
28
  // if a role wasn't found then either set as admin (builder) or public (everyone else)
31
29
  if (!user.roleId && user.builder && user.builder.global) {
32
30
  user.roleId = BUILTIN_ROLE_IDS.ADMIN
@@ -37,18 +35,18 @@ exports.updateAppRole = (user, { appId } = {}) => {
37
35
  return user
38
36
  }
39
37
 
40
- function processUser(user, { appId } = {}) {
38
+ function processUser(appId, user) {
41
39
  if (user) {
42
40
  delete user.password
43
41
  }
44
- return exports.updateAppRole(user, { appId })
42
+ return exports.updateAppRole(appId, user)
45
43
  }
46
44
 
47
45
  exports.getCachedSelf = async (ctx, appId) => {
48
46
  // this has to be tenant aware, can't depend on the context to find it out
49
47
  // running some middlewares before the tenancy causes context to break
50
48
  const user = await userCache.getUser(ctx.user._id)
51
- return processUser(user, { appId })
49
+ return processUser(appId, user)
52
50
  }
53
51
 
54
52
  exports.getRawGlobalUser = async userId => {
@@ -56,13 +54,12 @@ exports.getRawGlobalUser = async userId => {
56
54
  return db.get(getGlobalIDFromUserMetadataID(userId))
57
55
  }
58
56
 
59
- exports.getGlobalUser = async userId => {
57
+ exports.getGlobalUser = async (appId, userId) => {
60
58
  let user = await exports.getRawGlobalUser(userId)
61
- return processUser(user)
59
+ return processUser(appId, user)
62
60
  }
63
61
 
64
- exports.getGlobalUsers = async (users = null) => {
65
- const appId = getAppId()
62
+ exports.getGlobalUsers = async (appId = null, users = null) => {
66
63
  const db = getGlobalDB()
67
64
  let globalUsers
68
65
  if (users) {
@@ -89,11 +86,11 @@ exports.getGlobalUsers = async (users = null) => {
89
86
  if (!appId) {
90
87
  return globalUsers
91
88
  }
92
- return globalUsers.map(user => exports.updateAppRole(user))
89
+ return globalUsers.map(user => exports.updateAppRole(appId, user))
93
90
  }
94
91
 
95
- exports.getGlobalUsersFromMetadata = async users => {
96
- const globalUsers = await exports.getGlobalUsers(users)
92
+ exports.getGlobalUsersFromMetadata = async (appId, users) => {
93
+ const globalUsers = await exports.getGlobalUsers(appId, users)
97
94
  return users.map(user => {
98
95
  const globalUser = globalUsers.find(
99
96
  globalUser => globalUser && user._id.includes(globalUser._id)