@budibase/server 1.0.49-alpha.2 → 1.0.49-alpha.6

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 (320) 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.82e12602.js → index.1b905242.js} +1 -1
  8. package/builder/index.html +1 -1
  9. package/coverage/clover.xml +1917 -1929
  10. package/coverage/coverage-final.json +54 -54
  11. package/coverage/lcov-report/api/controllers/analytics.js.html +1 -1
  12. package/coverage/lcov-report/api/controllers/apikeys.js.html +1 -1
  13. package/coverage/lcov-report/api/controllers/application.js.html +58 -37
  14. package/coverage/lcov-report/api/controllers/auth.js.html +11 -14
  15. package/coverage/lcov-report/api/controllers/automation.js.html +21 -51
  16. package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
  17. package/coverage/lcov-report/api/controllers/cloud.js.html +8 -11
  18. package/coverage/lcov-report/api/controllers/component.js.html +10 -13
  19. package/coverage/lcov-report/api/controllers/datasource.js.html +17 -23
  20. package/coverage/lcov-report/api/controllers/dev.js.html +6 -6
  21. package/coverage/lcov-report/api/controllers/index.html +52 -52
  22. package/coverage/lcov-report/api/controllers/integration.js.html +1 -1
  23. package/coverage/lcov-report/api/controllers/layout.js.html +4 -4
  24. package/coverage/lcov-report/api/controllers/metadata.js.html +6 -21
  25. package/coverage/lcov-report/api/controllers/migrations.js.html +1 -1
  26. package/coverage/lcov-report/api/controllers/permission.js.html +6 -6
  27. package/coverage/lcov-report/api/controllers/query/index.html +10 -10
  28. package/coverage/lcov-report/api/controllers/query/index.js.html +21 -18
  29. package/coverage/lcov-report/api/controllers/query/validation.js.html +1 -1
  30. package/coverage/lcov-report/api/controllers/role.js.html +9 -9
  31. package/coverage/lcov-report/api/controllers/routing.js.html +7 -10
  32. package/coverage/lcov-report/api/controllers/row/external.js.html +6 -12
  33. package/coverage/lcov-report/api/controllers/row/index.html +22 -22
  34. package/coverage/lcov-report/api/controllers/row/index.js.html +1 -1
  35. package/coverage/lcov-report/api/controllers/row/internal.js.html +37 -82
  36. package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +19 -25
  37. package/coverage/lcov-report/api/controllers/row/staticFormula.js.html +14 -17
  38. package/coverage/lcov-report/api/controllers/row/utils.js.html +15 -12
  39. package/coverage/lcov-report/api/controllers/screen.js.html +10 -16
  40. package/coverage/lcov-report/api/controllers/script.js.html +1 -1
  41. package/coverage/lcov-report/api/controllers/table/bulkFormula.js.html +20 -50
  42. package/coverage/lcov-report/api/controllers/table/external.js.html +15 -24
  43. package/coverage/lcov-report/api/controllers/table/index.html +37 -37
  44. package/coverage/lcov-report/api/controllers/table/index.js.html +7 -7
  45. package/coverage/lcov-report/api/controllers/table/internal.js.html +36 -45
  46. package/coverage/lcov-report/api/controllers/table/utils.js.html +40 -76
  47. package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
  48. package/coverage/lcov-report/api/controllers/user.js.html +26 -35
  49. package/coverage/lcov-report/api/controllers/view/exporters.js.html +1 -1
  50. package/coverage/lcov-report/api/controllers/view/index.html +16 -16
  51. package/coverage/lcov-report/api/controllers/view/index.js.html +15 -21
  52. package/coverage/lcov-report/api/controllers/view/utils.js.html +25 -10
  53. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +1 -1
  54. package/coverage/lcov-report/api/controllers/webhook.js.html +21 -15
  55. package/coverage/lcov-report/api/index.html +1 -1
  56. package/coverage/lcov-report/api/index.js.html +1 -1
  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/index.html +1 -1
  69. package/coverage/lcov-report/api/routes/index.js.html +1 -1
  70. package/coverage/lcov-report/api/routes/integration.js.html +1 -1
  71. package/coverage/lcov-report/api/routes/layout.js.html +1 -1
  72. package/coverage/lcov-report/api/routes/metadata.js.html +1 -1
  73. package/coverage/lcov-report/api/routes/migrations.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 +1 -1
  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 +1 -1
  88. package/coverage/lcov-report/automations/automationUtils.js.html +4 -7
  89. package/coverage/lcov-report/automations/bullboard.js.html +1 -1
  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 +1 -1
  93. package/coverage/lcov-report/automations/steps/createRow.js.html +2 -5
  94. package/coverage/lcov-report/automations/steps/delay.js.html +1 -1
  95. package/coverage/lcov-report/automations/steps/deleteRow.js.html +1 -1
  96. package/coverage/lcov-report/automations/steps/discord.js.html +1 -1
  97. package/coverage/lcov-report/automations/steps/executeQuery.js.html +1 -1
  98. package/coverage/lcov-report/automations/steps/executeScript.js.html +1 -1
  99. package/coverage/lcov-report/automations/steps/filter.js.html +1 -1
  100. package/coverage/lcov-report/automations/steps/index.html +1 -1
  101. package/coverage/lcov-report/automations/steps/integromat.js.html +1 -1
  102. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +1 -1
  103. package/coverage/lcov-report/automations/steps/queryRows.js.html +1 -1
  104. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +1 -1
  105. package/coverage/lcov-report/automations/steps/serverLog.js.html +1 -1
  106. package/coverage/lcov-report/automations/steps/slack.js.html +1 -1
  107. package/coverage/lcov-report/automations/steps/updateRow.js.html +2 -2
  108. package/coverage/lcov-report/automations/steps/utils.js.html +1 -1
  109. package/coverage/lcov-report/automations/steps/zapier.js.html +1 -1
  110. package/coverage/lcov-report/automations/triggerInfo/app.js.html +1 -1
  111. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +1 -1
  112. package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
  113. package/coverage/lcov-report/automations/triggerInfo/index.js.html +1 -1
  114. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +1 -1
  115. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +1 -1
  116. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +1 -1
  117. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +1 -1
  118. package/coverage/lcov-report/automations/triggers.js.html +46 -40
  119. package/coverage/lcov-report/automations/utils.js.html +24 -12
  120. package/coverage/lcov-report/constants/index.html +1 -1
  121. package/coverage/lcov-report/constants/index.js.html +1 -1
  122. package/coverage/lcov-report/constants/layouts.js.html +1 -1
  123. package/coverage/lcov-report/constants/screens.js.html +1 -1
  124. package/coverage/lcov-report/db/client.js.html +18 -18
  125. package/coverage/lcov-report/db/inMemoryView.js.html +1 -1
  126. package/coverage/lcov-report/db/index.html +1 -1
  127. package/coverage/lcov-report/db/index.js.html +3 -3
  128. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +11 -23
  129. package/coverage/lcov-report/db/linkedRows/index.html +27 -27
  130. package/coverage/lcov-report/db/linkedRows/index.js.html +24 -66
  131. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +28 -28
  132. package/coverage/lcov-report/db/newid.js.html +1 -1
  133. package/coverage/lcov-report/db/utils.js.html +5 -5
  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 +1 -1
  137. package/coverage/lcov-report/events/utils.js.html +1 -1
  138. package/coverage/lcov-report/index.html +88 -88
  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 +21 -15
  143. package/coverage/lcov-report/middleware/builder.js.html +3 -3
  144. package/coverage/lcov-report/middleware/currentapp.js.html +72 -60
  145. package/coverage/lcov-report/middleware/index.html +28 -28
  146. package/coverage/lcov-report/middleware/joi-validator.js.html +1 -1
  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 +29 -29
  150. package/coverage/lcov-report/middleware/utils.js.html +2 -2
  151. package/coverage/lcov-report/threads/automation.js.html +30 -24
  152. package/coverage/lcov-report/threads/index.html +16 -16
  153. package/coverage/lcov-report/threads/index.js.html +1 -1
  154. package/coverage/lcov-report/threads/query.js.html +17 -17
  155. package/coverage/lcov-report/threads/utils.js.html +1 -1
  156. package/coverage/lcov-report/utilities/bcrypt.js.html +1 -1
  157. package/coverage/lcov-report/utilities/budibaseDir.js.html +1 -1
  158. package/coverage/lcov-report/utilities/centralPath.js.html +1 -1
  159. package/coverage/lcov-report/utilities/csvParser.js.html +1 -1
  160. package/coverage/lcov-report/utilities/global.js.html +44 -35
  161. package/coverage/lcov-report/utilities/index.html +27 -27
  162. package/coverage/lcov-report/utilities/index.js.html +40 -70
  163. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +1 -1
  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 +11 -11
  168. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +16 -58
  169. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +1 -1
  170. package/coverage/lcov-report/utilities/scriptRunner.js.html +1 -1
  171. package/coverage/lcov-report/utilities/security.js.html +1 -1
  172. package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
  173. package/coverage/lcov-report/utilities/usageQuota/index.html +1 -1
  174. package/coverage/lcov-report/utilities/usageQuota/index.js.html +5 -2
  175. package/coverage/lcov-report/utilities/usageQuota/rows.js.html +5 -2
  176. package/coverage/lcov-report/utilities/usageQuota/usageQuoteReset.js.html +1 -1
  177. package/coverage/lcov-report/utilities/users.js.html +5 -5
  178. package/coverage/lcov-report/utilities/workerRequests.js.html +5 -5
  179. package/coverage/lcov.info +3189 -3198
  180. package/dist/api/controllers/application.js +31 -28
  181. package/dist/api/controllers/auth.js +4 -5
  182. package/dist/api/controllers/automation.js +14 -19
  183. package/dist/api/controllers/cloud.js +2 -3
  184. package/dist/api/controllers/component.js +3 -4
  185. package/dist/api/controllers/datasource.js +9 -10
  186. package/dist/api/controllers/deploy/Deployment.js +3 -6
  187. package/dist/api/controllers/deploy/index.js +12 -13
  188. package/dist/api/controllers/dev.js +5 -5
  189. package/dist/api/controllers/layout.js +3 -3
  190. package/dist/api/controllers/metadata.js +4 -4
  191. package/dist/api/controllers/permission.js +4 -4
  192. package/dist/api/controllers/query/import/index.js +4 -6
  193. package/dist/api/controllers/query/index.js +11 -10
  194. package/dist/api/controllers/role.js +5 -5
  195. package/dist/api/controllers/routing.js +5 -6
  196. package/dist/api/controllers/row/ExternalRequest.js +76 -63
  197. package/dist/api/controllers/row/external.js +4 -4
  198. package/dist/api/controllers/row/internal.js +29 -44
  199. package/dist/api/controllers/row/internalSearch.js +11 -13
  200. package/dist/api/controllers/row/staticFormula.js +11 -11
  201. package/dist/api/controllers/row/utils.js +7 -6
  202. package/dist/api/controllers/screen.js +5 -7
  203. package/dist/api/controllers/static/index.js +4 -4
  204. package/dist/api/controllers/table/bulkFormula.js +14 -15
  205. package/dist/api/controllers/table/external.js +7 -10
  206. package/dist/api/controllers/table/index.js +5 -5
  207. package/dist/api/controllers/table/internal.js +16 -19
  208. package/dist/api/controllers/table/utils.js +29 -31
  209. package/dist/api/controllers/user.js +16 -20
  210. package/dist/api/controllers/view/index.js +8 -10
  211. package/dist/api/controllers/view/utils.js +9 -4
  212. package/dist/api/controllers/webhook.js +10 -8
  213. package/dist/api/routes/tests/utilities/TestFunctions.js +37 -17
  214. package/dist/automations/automationUtils.js +2 -3
  215. package/dist/automations/steps/createRow.js +1 -1
  216. package/dist/automations/steps/updateRow.js +1 -1
  217. package/dist/automations/triggers.js +27 -25
  218. package/dist/automations/utils.js +10 -5
  219. package/dist/db/linkedRows/LinkController.js +3 -7
  220. package/dist/db/linkedRows/index.js +16 -26
  221. package/dist/db/linkedRows/linkUtils.js +6 -6
  222. package/dist/db/views/staticViews.js +9 -10
  223. package/dist/environment.js +2 -1
  224. package/dist/integrations/utils.js +3 -0
  225. package/dist/middleware/authorized.js +5 -3
  226. package/dist/middleware/builder.js +2 -2
  227. package/dist/middleware/currentapp.js +41 -37
  228. package/dist/middleware/usageQuota.js +2 -2
  229. package/dist/migrations/functions/appUrls.js +11 -2
  230. package/dist/migrations/functions/usageQuotas/syncApps.js +7 -9
  231. package/dist/migrations/functions/usageQuotas/syncRows.js +7 -9
  232. package/dist/package.json +4 -4
  233. package/dist/tests/utilities/TestConfiguration.js +67 -44
  234. package/dist/threads/automation.js +13 -11
  235. package/dist/threads/query.js +11 -11
  236. package/dist/tsconfig.tsbuildinfo +1 -1
  237. package/dist/utilities/fileSystem/index.js +4 -3
  238. package/dist/utilities/global.js +15 -12
  239. package/dist/utilities/index.js +7 -17
  240. package/dist/utilities/routing/index.js +5 -5
  241. package/dist/utilities/rowProcessor/index.js +9 -10
  242. package/dist/utilities/usageQuota/index.js +1 -0
  243. package/dist/utilities/usageQuota/rows.js +1 -0
  244. package/dist/utilities/users.js +3 -3
  245. package/dist/utilities/workerRequests.js +4 -4
  246. package/package.json +5 -5
  247. package/scripts/likeCypress.ts +1 -1
  248. package/src/api/controllers/application.js +35 -28
  249. package/src/api/controllers/auth.js +4 -5
  250. package/src/api/controllers/automation.js +13 -23
  251. package/src/api/controllers/cloud.js +2 -3
  252. package/src/api/controllers/component.js +3 -4
  253. package/src/api/controllers/datasource.js +9 -11
  254. package/src/api/controllers/deploy/Deployment.js +3 -7
  255. package/src/api/controllers/deploy/index.js +20 -13
  256. package/src/api/controllers/dev.js +5 -5
  257. package/src/api/controllers/layout.js +3 -3
  258. package/src/api/controllers/metadata.js +4 -9
  259. package/src/api/controllers/permission.js +4 -4
  260. package/src/api/controllers/query/import/index.ts +4 -6
  261. package/src/api/controllers/query/import/tests/index.spec.js +2 -1
  262. package/src/api/controllers/query/index.js +11 -10
  263. package/src/api/controllers/role.js +5 -5
  264. package/src/api/controllers/routing.js +5 -6
  265. package/src/api/controllers/row/ExternalRequest.ts +53 -42
  266. package/src/api/controllers/row/external.js +4 -6
  267. package/src/api/controllers/row/internal.js +29 -44
  268. package/src/api/controllers/row/internalSearch.js +11 -13
  269. package/src/api/controllers/row/staticFormula.js +10 -11
  270. package/src/api/controllers/row/utils.js +7 -6
  271. package/src/api/controllers/screen.js +5 -7
  272. package/src/api/controllers/static/index.js +4 -4
  273. package/src/api/controllers/table/bulkFormula.js +13 -23
  274. package/src/api/controllers/table/external.js +7 -10
  275. package/src/api/controllers/table/index.js +5 -5
  276. package/src/api/controllers/table/internal.js +18 -21
  277. package/src/api/controllers/table/utils.js +29 -41
  278. package/src/api/controllers/user.js +17 -20
  279. package/src/api/controllers/view/index.js +8 -10
  280. package/src/api/controllers/view/utils.js +9 -4
  281. package/src/api/controllers/webhook.js +10 -8
  282. package/src/api/routes/tests/automation.spec.js +1 -0
  283. package/src/api/routes/tests/misc.spec.js +0 -1
  284. package/src/api/routes/tests/routing.spec.js +21 -12
  285. package/src/api/routes/tests/row.spec.js +7 -4
  286. package/src/api/routes/tests/utilities/TestFunctions.js +39 -17
  287. package/src/automations/automationUtils.js +2 -3
  288. package/src/automations/steps/createRow.js +0 -1
  289. package/src/automations/steps/updateRow.js +1 -1
  290. package/src/automations/triggers.js +33 -31
  291. package/src/automations/utils.js +9 -5
  292. package/src/db/linkedRows/LinkController.js +3 -7
  293. package/src/db/linkedRows/index.js +16 -30
  294. package/src/db/linkedRows/linkUtils.js +6 -6
  295. package/src/db/tests/linkController.spec.js +0 -1
  296. package/src/db/tests/linkTests.spec.js +5 -6
  297. package/src/db/views/staticViews.js +8 -10
  298. package/src/environment.js +2 -1
  299. package/src/integrations/utils.ts +4 -1
  300. package/src/middleware/authorized.js +5 -3
  301. package/src/middleware/builder.js +2 -2
  302. package/src/middleware/currentapp.js +50 -46
  303. package/src/middleware/tests/authorized.spec.js +7 -2
  304. package/src/middleware/tests/currentapp.spec.js +6 -0
  305. package/src/middleware/usageQuota.js +2 -2
  306. package/src/migrations/functions/appUrls.ts +11 -2
  307. package/src/migrations/functions/usageQuotas/syncApps.ts +5 -4
  308. package/src/migrations/functions/usageQuotas/syncRows.ts +5 -4
  309. package/src/tests/utilities/TestConfiguration.js +69 -50
  310. package/src/threads/automation.js +17 -15
  311. package/src/threads/query.js +12 -12
  312. package/src/utilities/fileSystem/index.js +4 -3
  313. package/src/utilities/global.js +15 -12
  314. package/src/utilities/index.js +7 -17
  315. package/src/utilities/routing/index.js +5 -5
  316. package/src/utilities/rowProcessor/index.js +9 -23
  317. package/src/utilities/usageQuota/index.js +1 -0
  318. package/src/utilities/usageQuota/rows.js +1 -0
  319. package/src/utilities/users.js +3 -3
  320. package/src/utilities/workerRequests.js +4 -4
@@ -16,9 +16,9 @@ const { generateUserMetadataID, isDevAppID } = require("../db/utils");
16
16
  const { dbExists } = require("@budibase/backend-core/db");
17
17
  const { isUserInAppTenant } = require("@budibase/backend-core/tenancy");
18
18
  const { getCachedSelf } = require("../utilities/global");
19
- const CouchDB = require("../db");
20
19
  const env = require("../environment");
21
20
  const { isWebhookEndpoint } = require("./utils");
21
+ const { doInAppContext } = require("@budibase/backend-core/context");
22
22
  module.exports = (ctx, next) => __awaiter(void 0, void 0, void 0, function* () {
23
23
  // try to get the appID from the request
24
24
  let requestAppId = getAppId(ctx);
@@ -36,7 +36,7 @@ module.exports = (ctx, next) => __awaiter(void 0, void 0, void 0, function* () {
36
36
  // check the app exists referenced in cookie
37
37
  if (appCookie) {
38
38
  const appId = appCookie.appId;
39
- const exists = yield dbExists(CouchDB, appId);
39
+ const exists = yield dbExists(appId);
40
40
  if (!exists) {
41
41
  clearCookie(ctx, Cookies.CurrentApp);
42
42
  return next();
@@ -45,11 +45,13 @@ module.exports = (ctx, next) => __awaiter(void 0, void 0, void 0, function* () {
45
45
  requestAppId = requestAppId || appId;
46
46
  }
47
47
  // deny access to application preview
48
- if (isDevAppID(requestAppId) &&
49
- !isWebhookEndpoint(ctx) &&
50
- (!ctx.user || !ctx.user.builder || !ctx.user.builder.global)) {
51
- clearCookie(ctx, Cookies.CurrentApp);
52
- return ctx.redirect("/");
48
+ if (!env.isTest()) {
49
+ if (isDevAppID(requestAppId) &&
50
+ !isWebhookEndpoint(ctx) &&
51
+ (!ctx.user || !ctx.user.builder || !ctx.user.builder.global)) {
52
+ clearCookie(ctx, Cookies.CurrentApp);
53
+ return ctx.redirect("/");
54
+ }
53
55
  }
54
56
  let appId, roleId = BUILTIN_ROLE_IDS.PUBLIC;
55
57
  if (!ctx.user) {
@@ -67,34 +69,36 @@ module.exports = (ctx, next) => __awaiter(void 0, void 0, void 0, function* () {
67
69
  if (!appId) {
68
70
  return next();
69
71
  }
70
- let noCookieSet = false;
71
- // if the user not in the right tenant then make sure they have no permissions
72
- // need to judge this only based on the request app ID,
73
- if (env.MULTI_TENANCY &&
74
- ctx.user &&
75
- requestAppId &&
76
- !isUserInAppTenant(requestAppId)) {
77
- // don't error, simply remove the users rights (they are a public user)
78
- delete ctx.user.builder;
79
- delete ctx.user.admin;
80
- delete ctx.user.roles;
81
- roleId = BUILTIN_ROLE_IDS.PUBLIC;
82
- noCookieSet = true;
83
- }
84
- ctx.appId = appId;
85
- if (roleId) {
86
- ctx.roleId = roleId;
87
- const userId = ctx.user ? generateUserMetadataID(ctx.user._id) : null;
88
- ctx.user = Object.assign(Object.assign({}, ctx.user), {
89
- // override userID with metadata one
90
- _id: userId, userId,
91
- roleId, role: yield getRole(appId, roleId) });
92
- }
93
- if ((requestAppId !== appId ||
94
- appCookie == null ||
95
- appCookie.appId !== requestAppId) &&
96
- !noCookieSet) {
97
- setCookie(ctx, { appId }, Cookies.CurrentApp);
98
- }
99
- return next();
72
+ return doInAppContext(appId, () => __awaiter(void 0, void 0, void 0, function* () {
73
+ let noCookieSet = false;
74
+ // if the user not in the right tenant then make sure they have no permissions
75
+ // need to judge this only based on the request app ID,
76
+ if (env.MULTI_TENANCY &&
77
+ ctx.user &&
78
+ requestAppId &&
79
+ !isUserInAppTenant(requestAppId)) {
80
+ // don't error, simply remove the users rights (they are a public user)
81
+ delete ctx.user.builder;
82
+ delete ctx.user.admin;
83
+ delete ctx.user.roles;
84
+ roleId = BUILTIN_ROLE_IDS.PUBLIC;
85
+ noCookieSet = true;
86
+ }
87
+ ctx.appId = appId;
88
+ if (roleId) {
89
+ ctx.roleId = roleId;
90
+ const userId = ctx.user ? generateUserMetadataID(ctx.user._id) : null;
91
+ ctx.user = Object.assign(Object.assign({}, ctx.user), {
92
+ // override userID with metadata one
93
+ _id: userId, userId,
94
+ roleId, role: yield getRole(roleId) });
95
+ }
96
+ if ((requestAppId !== appId ||
97
+ appCookie == null ||
98
+ appCookie.appId !== requestAppId) &&
99
+ !noCookieSet) {
100
+ setCookie(ctx, { appId }, Cookies.CurrentApp);
101
+ }
102
+ return next();
103
+ }));
100
104
  });
@@ -8,10 +8,10 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  step((generator = generator.apply(thisArg, _arguments || [])).next());
9
9
  });
10
10
  };
11
- const CouchDB = require("../db");
12
11
  const usageQuota = require("../utilities/usageQuota");
13
12
  const { getUniqueRows } = require("../utilities/usageQuota/rows");
14
13
  const { isExternalTable, isRowId: isExternalRowId, } = require("../integrations/utils");
14
+ const { getAppDB } = require("@budibase/backend-core/context");
15
15
  // currently only counting new writes and deletes
16
16
  const METHOD_MAP = {
17
17
  POST: 1,
@@ -48,7 +48,7 @@ module.exports = (ctx, next) => __awaiter(void 0, void 0, void 0, function* () {
48
48
  const usageId = ctx.request.body._id;
49
49
  try {
50
50
  if (ctx.appId) {
51
- const db = new CouchDB(ctx.appId);
51
+ const db = getAppDB();
52
52
  yield db.get(usageId);
53
53
  }
54
54
  return next();
@@ -20,7 +20,16 @@ const application_1 = require("../../api/controllers/application");
20
20
  * Add the url to the app metadata if it doesn't exist
21
21
  */
22
22
  const run = (appDb) => __awaiter(void 0, void 0, void 0, function* () {
23
- const metadata = yield appDb.get(DocumentTypes.APP_METADATA);
23
+ let metadata;
24
+ try {
25
+ metadata = yield appDb.get(DocumentTypes.APP_METADATA);
26
+ }
27
+ catch (e) {
28
+ // sometimes the metadata document doesn't exist
29
+ // exit early instead of failing the migration
30
+ console.error("Error retrieving app metadata. Skipping", e);
31
+ return;
32
+ }
24
33
  if (!metadata.url) {
25
34
  const context = {
26
35
  request: {
@@ -31,7 +40,7 @@ const run = (appDb) => __awaiter(void 0, void 0, void 0, function* () {
31
40
  };
32
41
  metadata.url = application_1.getAppUrl(context);
33
42
  console.log(`Adding url to app: ${metadata.url}`);
43
+ yield appDb.put(metadata);
34
44
  }
35
- yield appDb.put(metadata);
36
45
  });
37
46
  exports.run = run;
@@ -8,22 +8,20 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  step((generator = generator.apply(thisArg, _arguments || [])).next());
9
9
  });
10
10
  };
11
- var __importDefault = (this && this.__importDefault) || function (mod) {
12
- return (mod && mod.__esModule) ? mod : { "default": mod };
13
- };
14
11
  Object.defineProperty(exports, "__esModule", { value: true });
15
12
  exports.run = void 0;
16
- const { getGlobalDB, getTenantId } = require("@budibase/backend-core/tenancy");
17
- const { getAllApps } = require("@budibase/backend-core/db");
18
- const db_1 = __importDefault(require("../../../db"));
13
+ // @ts-ignore
14
+ const tenancy_1 = require("@budibase/backend-core/tenancy");
15
+ // @ts-ignore
16
+ const db_1 = require("@budibase/backend-core/db");
19
17
  const usageQuota_1 = require("../../../utilities/usageQuota");
20
18
  const run = () => __awaiter(void 0, void 0, void 0, function* () {
21
- const db = getGlobalDB();
19
+ const db = tenancy_1.getGlobalDB();
22
20
  // get app count
23
- const devApps = yield getAllApps(db_1.default, { dev: true });
21
+ const devApps = yield db_1.getAllApps({ dev: true });
24
22
  const appCount = devApps ? devApps.length : 0;
25
23
  // sync app count
26
- const tenantId = getTenantId();
24
+ const tenantId = tenancy_1.getTenantId();
27
25
  console.log(`[Tenant: ${tenantId}] Syncing app count: ${appCount}`);
28
26
  const usageDoc = yield usageQuota_1.getUsageQuotaDoc(db);
29
27
  usageDoc.usageQuota.apps = appCount;
@@ -8,25 +8,23 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  step((generator = generator.apply(thisArg, _arguments || [])).next());
9
9
  });
10
10
  };
11
- var __importDefault = (this && this.__importDefault) || function (mod) {
12
- return (mod && mod.__esModule) ? mod : { "default": mod };
13
- };
14
11
  Object.defineProperty(exports, "__esModule", { value: true });
15
12
  exports.run = void 0;
16
- const { getGlobalDB, getTenantId } = require("@budibase/backend-core/tenancy");
17
- const { getAllApps } = require("@budibase/backend-core/db");
18
- const db_1 = __importDefault(require("../../../db"));
13
+ // @ts-ignore
14
+ const tenancy_1 = require("@budibase/backend-core/tenancy");
15
+ // @ts-ignore
16
+ const db_1 = require("@budibase/backend-core/db");
19
17
  const usageQuota_1 = require("../../../utilities/usageQuota");
20
18
  const rows_1 = require("../../../utilities/usageQuota/rows");
21
19
  const run = () => __awaiter(void 0, void 0, void 0, function* () {
22
- const db = getGlobalDB();
20
+ const db = tenancy_1.getGlobalDB();
23
21
  // get all rows in all apps
24
- const allApps = yield getAllApps(db_1.default, { all: true });
22
+ const allApps = yield db_1.getAllApps({ all: true });
25
23
  const appIds = allApps ? allApps.map((app) => app.appId) : [];
26
24
  const rows = yield rows_1.getUniqueRows(appIds);
27
25
  const rowCount = rows ? rows.length : 0;
28
26
  // sync row count
29
- const tenantId = getTenantId();
27
+ const tenantId = tenancy_1.getTenantId();
30
28
  console.log(`[Tenant: ${tenantId}] Syncing row count: ${rowCount}`);
31
29
  const usageDoc = yield usageQuota_1.getUsageQuotaDoc(db);
32
30
  usageDoc.usageQuota.rows = rowCount;
package/dist/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@budibase/server",
3
3
  "email": "hi@budibase.com",
4
- "version": "1.0.49-alpha.1",
4
+ "version": "1.0.49-alpha.5",
5
5
  "description": "Budibase Web Server",
6
6
  "main": "src/index.ts",
7
7
  "repository": {
@@ -70,9 +70,9 @@
70
70
  "license": "GPL-3.0",
71
71
  "dependencies": {
72
72
  "@apidevtools/swagger-parser": "^10.0.3",
73
- "@budibase/backend-core": "^1.0.49-alpha.1",
74
- "@budibase/client": "^1.0.49-alpha.1",
75
- "@budibase/string-templates": "^1.0.49-alpha.1",
73
+ "@budibase/backend-core": "^1.0.49-alpha.5",
74
+ "@budibase/client": "^1.0.49-alpha.5",
75
+ "@budibase/string-templates": "^1.0.49-alpha.5",
76
76
  "@bull-board/api": "^3.7.0",
77
77
  "@bull-board/koa": "^3.7.0",
78
78
  "@elastic/elasticsearch": "7.10.0",
@@ -8,6 +8,9 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  step((generator = generator.apply(thisArg, _arguments || [])).next());
9
9
  });
10
10
  };
11
+ const core = require("@budibase/backend-core");
12
+ const CouchDB = require("../../db");
13
+ core.init(CouchDB);
11
14
  const { BUILTIN_ROLE_IDS } = require("@budibase/backend-core/roles");
12
15
  const env = require("../../environment");
13
16
  const { basicTable, basicRow, basicRole, basicAutomation, basicDatasource, basicQuery, basicScreen, basicLayout, basicWebhook, TENANT_ID, } = require("./structures");
@@ -16,13 +19,11 @@ const supertest = require("supertest");
16
19
  const { cleanup } = require("../../utilities/fileSystem");
17
20
  const { Cookies, Headers } = require("@budibase/backend-core/constants");
18
21
  const { jwt } = require("@budibase/backend-core/auth");
19
- const core = require("@budibase/backend-core");
20
22
  const { getGlobalDB } = require("@budibase/backend-core/tenancy");
21
23
  const { createASession } = require("@budibase/backend-core/sessions");
22
24
  const { user: userCache } = require("@budibase/backend-core/cache");
23
- const CouchDB = require("../../db");
24
25
  const newid = require("../../db/newid");
25
- core.init(CouchDB);
26
+ const context = require("@budibase/backend-core/context");
26
27
  const GLOBAL_USER_ID = "us_uuid1";
27
28
  const EMAIL = "babs@babs.com";
28
29
  const CSRF_TOKEN = "e3727778-7af0-4226-b5eb-f43cbe60a306";
@@ -59,11 +60,24 @@ class TestConfiguration {
59
60
  request.request = {
60
61
  body: config,
61
62
  };
62
- if (params) {
63
- request.params = params;
63
+ function run() {
64
+ return __awaiter(this, void 0, void 0, function* () {
65
+ if (params) {
66
+ request.params = params;
67
+ }
68
+ yield controlFunc(request);
69
+ return request.body;
70
+ });
71
+ }
72
+ // check if already in a context
73
+ if (context.getAppId() == null) {
74
+ return context.doInAppContext(this.appId, () => __awaiter(this, void 0, void 0, function* () {
75
+ return run();
76
+ }));
77
+ }
78
+ else {
79
+ return run();
64
80
  }
65
- yield controlFunc(request);
66
- return request.body;
67
81
  });
68
82
  }
69
83
  globalUser({ id = GLOBAL_USER_ID, builder = true, email = EMAIL, roles, } = {}) {
@@ -153,6 +167,7 @@ class TestConfiguration {
153
167
  // create dev app
154
168
  this.app = yield this._req({ name: appName }, null, controllers.app.create);
155
169
  this.appId = this.app.appId;
170
+ context.updateAppId(this.appId);
156
171
  // create production app
157
172
  this.prodApp = yield this.deploy();
158
173
  this.prodAppId = this.prodApp.appId;
@@ -163,10 +178,12 @@ class TestConfiguration {
163
178
  }
164
179
  deploy() {
165
180
  return __awaiter(this, void 0, void 0, function* () {
166
- const deployment = yield this._req(null, null, controllers.deploy.deployApp);
167
- const prodAppId = deployment.appId.replace("_dev", "");
168
- const appPackage = yield this._req(null, { appId: prodAppId }, controllers.app.fetchAppPackage);
169
- return appPackage.application;
181
+ yield this._req(null, null, controllers.deploy.deployApp);
182
+ const prodAppId = this.getAppId().replace("_dev", "");
183
+ return context.doInAppContext(prodAppId, () => __awaiter(this, void 0, void 0, function* () {
184
+ const appPackage = yield this._req(null, { appId: prodAppId }, controllers.app.fetchAppPackage);
185
+ return appPackage.application;
186
+ }));
170
187
  });
171
188
  }
172
189
  updateTable(config = null) {
@@ -393,40 +410,46 @@ class TestConfiguration {
393
410
  login({ roleId, userId, builder, prodApp = false } = {}) {
394
411
  return __awaiter(this, void 0, void 0, function* () {
395
412
  const appId = prodApp ? this.prodAppId : this.appId;
396
- userId = !userId ? `us_uuid1` : userId;
397
- if (!this.request) {
398
- throw "Server has not been opened, cannot login.";
399
- }
400
- // make sure the user exists in the global DB
401
- if (roleId !== BUILTIN_ROLE_IDS.PUBLIC) {
402
- yield this.globalUser({
403
- userId,
404
- builder,
405
- roles: { [this.prodAppId]: roleId },
413
+ return context.doInAppContext(appId, () => __awaiter(this, void 0, void 0, function* () {
414
+ userId = !userId ? `us_uuid1` : userId;
415
+ if (!this.request) {
416
+ throw "Server has not been opened, cannot login.";
417
+ }
418
+ // make sure the user exists in the global DB
419
+ if (roleId !== BUILTIN_ROLE_IDS.PUBLIC) {
420
+ yield this.globalUser({
421
+ id: userId,
422
+ builder,
423
+ roles: { [this.prodAppId]: roleId },
424
+ });
425
+ }
426
+ yield createASession(userId, {
427
+ sessionId: "sessionid",
428
+ tenantId: TENANT_ID,
406
429
  });
407
- }
408
- // have to fake this
409
- const auth = {
410
- userId,
411
- sessionId: "sessionid",
412
- tenantId: TENANT_ID,
413
- };
414
- const app = {
415
- roleId: roleId,
416
- appId,
417
- };
418
- const authToken = jwt.sign(auth, env.JWT_SECRET);
419
- const appToken = jwt.sign(app, env.JWT_SECRET);
420
- // returning necessary request headers
421
- yield userCache.invalidateUser(userId);
422
- return {
423
- Accept: "application/json",
424
- Cookie: [
425
- `${Cookies.Auth}=${authToken}`,
426
- `${Cookies.CurrentApp}=${appToken}`,
427
- ],
428
- [Headers.APP_ID]: appId,
429
- };
430
+ // have to fake this
431
+ const auth = {
432
+ userId,
433
+ sessionId: "sessionid",
434
+ tenantId: TENANT_ID,
435
+ };
436
+ const app = {
437
+ roleId: roleId,
438
+ appId,
439
+ };
440
+ const authToken = jwt.sign(auth, env.JWT_SECRET);
441
+ const appToken = jwt.sign(app, env.JWT_SECRET);
442
+ // returning necessary request headers
443
+ yield userCache.invalidateUser(userId);
444
+ return {
445
+ Accept: "application/json",
446
+ Cookie: [
447
+ `${Cookies.Auth}=${authToken}`,
448
+ `${Cookies.CurrentApp}=${appToken}`,
449
+ ],
450
+ [Headers.APP_ID]: appId,
451
+ };
452
+ }));
430
453
  });
431
454
  }
432
455
  }
@@ -15,11 +15,11 @@ const automationUtils = require("../automations/automationUtils");
15
15
  const AutomationEmitter = require("../events/AutomationEmitter");
16
16
  const { processObject } = require("@budibase/string-templates");
17
17
  const { DEFAULT_TENANT_ID } = require("@budibase/backend-core/constants");
18
- const CouchDB = require("../db");
19
18
  const { DocumentTypes, isDevAppID } = require("../db/utils");
20
19
  const { doInTenant } = require("@budibase/backend-core/tenancy");
21
20
  const usage = require("../utilities/usageQuota");
22
21
  const { definitions: triggerDefs } = require("../automations/triggerInfo");
22
+ const { doInAppContext, getAppDB } = require("@budibase/backend-core/context");
23
23
  const FILTER_STEP_ID = actions.ACTION_DEFINITIONS.FILTER.stepId;
24
24
  const CRON_STEP_ID = triggerDefs.CRON.stepId;
25
25
  const STOPPED_STATUS = { success: false, status: "STOPPED" };
@@ -67,11 +67,10 @@ class Orchestrator {
67
67
  }
68
68
  getApp() {
69
69
  return __awaiter(this, void 0, void 0, function* () {
70
- const appId = this._appId;
71
70
  if (this._app) {
72
71
  return this._app;
73
72
  }
74
- const db = new CouchDB(appId);
73
+ const db = getAppDB();
75
74
  this._app = yield db.get(DocumentTypes.APP_METADATA);
76
75
  return this._app;
77
76
  });
@@ -133,13 +132,16 @@ class Orchestrator {
133
132
  }
134
133
  }
135
134
  module.exports = (input, callback) => {
136
- const automationOrchestrator = new Orchestrator(input.data.automation, input.data.event);
137
- automationOrchestrator
138
- .execute()
139
- .then(response => {
140
- callback(null, response);
141
- })
142
- .catch(err => {
143
- callback(err);
135
+ const appId = input.data.event.appId;
136
+ doInAppContext(appId, () => {
137
+ const automationOrchestrator = new Orchestrator(input.data.automation, input.data.event);
138
+ automationOrchestrator
139
+ .execute()
140
+ .then(response => {
141
+ callback(null, response);
142
+ })
143
+ .catch(err => {
144
+ callback(err);
145
+ });
144
146
  });
145
147
  };
@@ -13,12 +13,11 @@ threadUtils.threadSetup();
13
13
  const ScriptRunner = require("../utilities/scriptRunner");
14
14
  const { integrations } = require("../integrations");
15
15
  const { processStringSync } = require("@budibase/string-templates");
16
- const CouchDB = require("../db");
16
+ const { doInAppContext, getAppDB } = require("@budibase/backend-core/context");
17
17
  const IS_TRIPLE_BRACE = new RegExp(/^{{3}.*}{3}$/);
18
18
  const IS_HANDLEBARS = new RegExp(/^{{2}.*}{2}$/);
19
19
  class QueryRunner {
20
20
  constructor(input, flags = { noRecursiveQuery: false }) {
21
- this.appId = input.appId;
22
21
  this.datasource = input.datasource;
23
22
  this.queryVerb = input.queryVerb;
24
23
  this.fields = input.fields;
@@ -97,11 +96,10 @@ class QueryRunner {
97
96
  }
98
97
  runAnotherQuery(queryId, parameters) {
99
98
  return __awaiter(this, void 0, void 0, function* () {
100
- const db = new CouchDB(this.appId);
99
+ const db = getAppDB();
101
100
  const query = yield db.get(queryId);
102
101
  const datasource = yield db.get(query.datasourceId);
103
102
  return new QueryRunner({
104
- appId: this.appId,
105
103
  datasource,
106
104
  queryVerb: query.queryVerb,
107
105
  fields: query.fields,
@@ -212,12 +210,14 @@ class QueryRunner {
212
210
  }
213
211
  }
214
212
  module.exports = (input, callback) => {
215
- const Runner = new QueryRunner(input);
216
- Runner.execute()
217
- .then(response => {
218
- callback(null, response);
219
- })
220
- .catch(err => {
221
- callback(err);
213
+ doInAppContext(input.appId, () => {
214
+ const Runner = new QueryRunner(input);
215
+ Runner.execute()
216
+ .then(response => {
217
+ callback(null, response);
218
+ })
219
+ .catch(err => {
220
+ callback(err);
221
+ });
222
222
  });
223
223
  };