@budibase/server 1.0.49-alpha.0 → 1.0.49-alpha.12

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 (357) 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.8184eed9.js → index.0bdf1cad.js} +195 -194
  8. package/builder/assets/{index.dd9e386f.css → index.83c0944f.css} +1 -1
  9. package/builder/assets/{vendor.3bd2f661.js → vendor.d526bfe8.js} +1 -1
  10. package/builder/index.html +3 -3
  11. package/coverage/clover.xml +2927 -2819
  12. package/coverage/coverage-final.json +104 -103
  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 +157 -136
  16. package/coverage/lcov-report/api/controllers/auth.js.html +11 -14
  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 +10 -13
  21. package/coverage/lcov-report/api/controllers/datasource.js.html +31 -37
  22. package/coverage/lcov-report/api/controllers/dev.js.html +6 -6
  23. package/coverage/lcov-report/api/controllers/index.html +69 -54
  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/{migrations/usageQuotas/syncApps.js.html → api/controllers/migrations.js.html} +30 -45
  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 +52 -37
  36. package/coverage/lcov-report/api/controllers/row/index.js.html +13 -13
  37. package/coverage/lcov-report/api/controllers/row/internal.js.html +108 -216
  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 +27 -24
  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 +57 -42
  46. package/coverage/lcov-report/api/controllers/table/index.js.html +28 -70
  47. package/coverage/lcov-report/api/controllers/table/internal.js.html +56 -47
  48. package/coverage/lcov-report/api/controllers/table/utils.js.html +169 -85
  49. package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
  50. package/coverage/lcov-report/api/controllers/user.js.html +43 -52
  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 +3 -3
  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 +22 -7
  71. package/coverage/lcov-report/api/routes/index.js.html +10 -4
  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/{migrations/usageQuotas/index.js.html → api/routes/migrations.js.html} +25 -55
  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 +1 -1
  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 +7 -10
  96. package/coverage/lcov-report/automations/steps/delay.js.html +4 -4
  97. package/coverage/lcov-report/automations/steps/deleteRow.js.html +7 -7
  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 +1 -1
  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 +42 -27
  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 +1 -1
  129. package/coverage/lcov-report/db/index.js.html +3 -3
  130. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +15 -27
  131. package/coverage/lcov-report/db/linkedRows/index.html +27 -27
  132. package/coverage/lcov-report/db/linkedRows/index.js.html +40 -85
  133. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +40 -40
  134. package/coverage/lcov-report/db/newid.js.html +4 -4
  135. package/coverage/lcov-report/db/utils.js.html +75 -75
  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 +107 -122
  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 +21 -15
  145. package/coverage/lcov-report/middleware/builder.js.html +3 -3
  146. package/coverage/lcov-report/middleware/currentapp.js.html +72 -60
  147. package/coverage/lcov-report/middleware/index.html +28 -28
  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 +29 -35
  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 +25 -25
  155. package/coverage/lcov-report/threads/index.js.html +10 -10
  156. package/coverage/lcov-report/threads/query.js.html +26 -47
  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 +57 -48
  163. package/coverage/lcov-report/utilities/index.html +27 -27
  164. package/coverage/lcov-report/utilities/index.js.html +42 -72
  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 +65 -71
  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 +1 -1
  176. package/coverage/lcov-report/utilities/usageQuota/index.js.html +13 -10
  177. package/coverage/lcov-report/utilities/usageQuota/rows.js.html +5 -2
  178. package/coverage/lcov-report/utilities/usageQuota/usageQuoteReset.js.html +1 -1
  179. package/coverage/lcov-report/utilities/users.js.html +9 -9
  180. package/coverage/lcov-report/utilities/workerRequests.js.html +16 -16
  181. package/coverage/lcov.info +4620 -4358
  182. package/dist/api/controllers/application.js +49 -48
  183. package/dist/api/controllers/auth.js +4 -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 +9 -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 +7 -6
  205. package/dist/api/controllers/screen.js +5 -7
  206. package/dist/api/controllers/static/index.js +4 -4
  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 +7 -10
  210. package/dist/api/controllers/table/internal.js +20 -16
  211. package/dist/api/controllers/table/utils.js +54 -34
  212. package/dist/api/controllers/user.js +16 -20
  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 -0
  217. package/dist/api/routes/migrations.js +9 -0
  218. package/dist/api/routes/tests/utilities/TestFunctions.js +37 -17
  219. package/dist/app.js +35 -5
  220. package/dist/automations/automationUtils.js +2 -3
  221. package/dist/automations/steps/createRow.js +1 -1
  222. package/dist/automations/steps/updateRow.js +1 -1
  223. package/dist/automations/triggers.js +27 -25
  224. package/dist/automations/utils.js +10 -5
  225. package/dist/constants/index.js +4 -0
  226. package/dist/db/linkedRows/LinkController.js +3 -7
  227. package/dist/db/linkedRows/index.js +16 -27
  228. package/dist/db/linkedRows/linkUtils.js +6 -6
  229. package/dist/db/views/staticViews.js +9 -10
  230. package/dist/environment.js +3 -1
  231. package/dist/integrations/base/sql.js +43 -8
  232. package/dist/integrations/utils.js +3 -0
  233. package/dist/middleware/authorized.js +5 -3
  234. package/dist/middleware/builder.js +2 -2
  235. package/dist/middleware/currentapp.js +41 -37
  236. package/dist/middleware/usageQuota.js +2 -4
  237. package/dist/migrations/functions/appUrls.js +46 -0
  238. package/dist/migrations/functions/quotas1.js +50 -0
  239. package/dist/migrations/{usageQuotas → functions/usageQuotas}/index.js +6 -10
  240. package/dist/migrations/{usageQuotas → functions/usageQuotas}/syncApps.js +12 -9
  241. package/dist/migrations/{usageQuotas → functions/usageQuotas}/syncRows.js +16 -12
  242. package/dist/migrations/functions/userEmailViewCasing.js +24 -0
  243. package/dist/migrations/index.js +62 -0
  244. package/dist/package.json +4 -4
  245. package/dist/tests/utilities/TestConfiguration.js +70 -44
  246. package/dist/threads/automation.js +13 -11
  247. package/dist/threads/query.js +13 -19
  248. package/dist/tsconfig.tsbuildinfo +1 -1
  249. package/dist/utilities/fileSystem/index.js +4 -3
  250. package/dist/utilities/global.js +15 -12
  251. package/dist/utilities/index.js +7 -17
  252. package/dist/utilities/routing/index.js +5 -5
  253. package/dist/utilities/rowProcessor/index.js +23 -17
  254. package/dist/utilities/rowProcessor/utils.js +14 -4
  255. package/dist/utilities/usageQuota/index.js +1 -0
  256. package/dist/utilities/usageQuota/rows.js +1 -0
  257. package/dist/utilities/users.js +3 -3
  258. package/dist/utilities/workerRequests.js +4 -4
  259. package/package.json +5 -5
  260. package/scripts/integrations/postgres/init.sql +11 -6
  261. package/scripts/likeCypress.ts +1 -1
  262. package/src/api/controllers/application.js +38 -31
  263. package/src/api/controllers/auth.js +4 -5
  264. package/src/api/controllers/automation.js +13 -23
  265. package/src/api/controllers/cloud.js +2 -3
  266. package/src/api/controllers/component.js +3 -4
  267. package/src/api/controllers/datasource.js +9 -11
  268. package/src/api/controllers/deploy/Deployment.js +3 -7
  269. package/src/api/controllers/deploy/index.js +20 -13
  270. package/src/api/controllers/dev.js +5 -5
  271. package/src/api/controllers/layout.js +3 -3
  272. package/src/api/controllers/metadata.js +4 -9
  273. package/src/api/controllers/migrations.js +13 -0
  274. package/src/api/controllers/permission.js +4 -4
  275. package/src/api/controllers/query/import/index.ts +4 -6
  276. package/src/api/controllers/query/import/tests/index.spec.js +2 -1
  277. package/src/api/controllers/query/index.js +11 -10
  278. package/src/api/controllers/role.js +5 -5
  279. package/src/api/controllers/routing.js +5 -6
  280. package/src/api/controllers/row/ExternalRequest.ts +67 -43
  281. package/src/api/controllers/row/external.js +27 -58
  282. package/src/api/controllers/row/internal.js +54 -90
  283. package/src/api/controllers/row/internalSearch.js +23 -17
  284. package/src/api/controllers/row/staticFormula.js +156 -0
  285. package/src/api/controllers/row/utils.js +7 -6
  286. package/src/api/controllers/screen.js +5 -7
  287. package/src/api/controllers/static/index.js +4 -4
  288. package/src/api/controllers/table/bulkFormula.js +173 -0
  289. package/src/api/controllers/table/external.js +7 -10
  290. package/src/api/controllers/table/index.js +7 -21
  291. package/src/api/controllers/table/internal.js +22 -19
  292. package/src/api/controllers/table/utils.js +70 -42
  293. package/src/api/controllers/user.js +17 -20
  294. package/src/api/controllers/view/index.js +8 -10
  295. package/src/api/controllers/view/utils.js +9 -4
  296. package/src/api/controllers/webhook.js +10 -8
  297. package/src/api/routes/index.js +2 -0
  298. package/src/api/routes/migrations.js +14 -0
  299. package/src/api/routes/tests/automation.spec.js +1 -0
  300. package/src/api/routes/tests/misc.spec.js +0 -1
  301. package/src/api/routes/tests/routing.spec.js +21 -12
  302. package/src/api/routes/tests/row.spec.js +7 -4
  303. package/src/api/routes/tests/utilities/TestFunctions.js +39 -17
  304. package/src/app.ts +18 -5
  305. package/src/automations/automationUtils.js +2 -3
  306. package/src/automations/steps/createRow.js +0 -1
  307. package/src/automations/steps/updateRow.js +1 -1
  308. package/src/automations/triggers.js +33 -31
  309. package/src/automations/utils.js +9 -5
  310. package/src/constants/index.js +5 -0
  311. package/src/db/linkedRows/LinkController.js +3 -7
  312. package/src/db/linkedRows/index.js +16 -31
  313. package/src/db/linkedRows/linkUtils.js +6 -6
  314. package/src/db/tests/linkController.spec.js +0 -1
  315. package/src/db/tests/linkTests.spec.js +5 -6
  316. package/src/db/views/staticViews.js +8 -10
  317. package/src/definitions/common.ts +3 -0
  318. package/src/environment.js +3 -1
  319. package/src/integrations/base/sql.ts +55 -14
  320. package/src/integrations/utils.ts +4 -1
  321. package/src/middleware/authorized.js +5 -3
  322. package/src/middleware/builder.js +2 -2
  323. package/src/middleware/currentapp.js +50 -46
  324. package/src/middleware/tests/authorized.spec.js +7 -2
  325. package/src/middleware/tests/currentapp.spec.js +6 -0
  326. package/src/middleware/usageQuota.js +2 -4
  327. package/src/migrations/functions/appUrls.ts +34 -0
  328. package/src/migrations/functions/quotas1.ts +20 -0
  329. package/src/migrations/functions/tests/appUrls.spec.js +29 -0
  330. package/src/migrations/{tests/usageQuotas/index.spec.js → functions/tests/quotas1.spec.js} +5 -5
  331. package/src/migrations/functions/tests/userEmailViewCasing.spec.js +25 -0
  332. package/src/migrations/functions/usageQuotas/index.ts +8 -0
  333. package/src/migrations/{usageQuotas/syncApps.js → functions/usageQuotas/syncApps.ts} +6 -6
  334. package/src/migrations/functions/usageQuotas/syncRows.ts +22 -0
  335. package/src/migrations/{tests/usageQuotas → functions/usageQuotas/tests}/syncApps.spec.js +4 -4
  336. package/src/migrations/{tests/usageQuotas → functions/usageQuotas/tests}/syncRows.spec.js +4 -4
  337. package/src/migrations/functions/userEmailViewCasing.ts +13 -0
  338. package/src/migrations/index.ts +56 -0
  339. package/src/module.d.ts +3 -0
  340. package/src/tests/utilities/TestConfiguration.js +73 -50
  341. package/src/threads/automation.js +17 -15
  342. package/src/threads/query.js +14 -21
  343. package/src/utilities/fileSystem/index.js +4 -3
  344. package/src/utilities/global.js +15 -12
  345. package/src/utilities/index.js +7 -17
  346. package/src/utilities/routing/index.js +5 -5
  347. package/src/utilities/rowProcessor/index.js +25 -27
  348. package/src/utilities/rowProcessor/utils.js +23 -7
  349. package/src/utilities/usageQuota/index.js +1 -0
  350. package/src/utilities/usageQuota/rows.js +1 -0
  351. package/src/utilities/users.js +3 -3
  352. package/src/utilities/workerRequests.js +4 -4
  353. package/tsconfig.json +2 -1
  354. package/coverage/lcov-report/migrations/usageQuotas/index.html +0 -141
  355. package/coverage/lcov-report/migrations/usageQuotas/syncRows.js.html +0 -143
  356. package/src/migrations/usageQuotas/index.js +0 -24
  357. package/src/migrations/usageQuotas/syncRows.js +0 -21
@@ -1,13 +1,17 @@
1
- const CouchDB = require("../../../db")
2
1
  const csvParser = require("../../../utilities/csvParser")
3
2
  const {
4
3
  getRowParams,
5
4
  generateRowID,
6
5
  InternalTables,
6
+ getTableParams,
7
+ BudibaseInternalDB,
7
8
  } = require("../../../db/utils")
8
- const { isEqual } = require("lodash/fp")
9
+ const { isEqual } = require("lodash")
9
10
  const { AutoFieldSubTypes, FieldTypes } = require("../../../constants")
10
- const { inputProcessing } = require("../../../utilities/rowProcessor")
11
+ const {
12
+ inputProcessing,
13
+ cleanupAttachments,
14
+ } = require("../../../utilities/rowProcessor")
11
15
  const {
12
16
  USERS_TABLE_SCHEMA,
13
17
  SwitchableTypes,
@@ -21,8 +25,26 @@ const {
21
25
  const { getViews, saveView } = require("../view/utils")
22
26
  const viewTemplate = require("../view/viewBuilder")
23
27
  const usageQuota = require("../../../utilities/usageQuota")
28
+ const { getAppDB } = require("@budibase/backend-core/context")
29
+ const { cloneDeep } = require("lodash/fp")
30
+
31
+ exports.clearColumns = async (table, columnNames) => {
32
+ const db = getAppDB()
33
+ const rows = await db.allDocs(
34
+ getRowParams(table._id, null, {
35
+ include_docs: true,
36
+ })
37
+ )
38
+ return db.bulkDocs(
39
+ rows.rows.map(({ doc }) => {
40
+ columnNames.forEach(colName => delete doc[colName])
41
+ return doc
42
+ })
43
+ )
44
+ }
24
45
 
25
- exports.checkForColumnUpdates = async (db, oldTable, updatedTable) => {
46
+ exports.checkForColumnUpdates = async (oldTable, updatedTable) => {
47
+ const db = getAppDB()
26
48
  let updatedRows = []
27
49
  const rename = updatedTable._rename
28
50
  let deletedColumns = []
@@ -39,18 +61,22 @@ exports.checkForColumnUpdates = async (db, oldTable, updatedTable) => {
39
61
  include_docs: true,
40
62
  })
41
63
  )
42
- updatedRows = rows.rows.map(({ doc }) => {
64
+ const rawRows = rows.rows.map(({ doc }) => doc)
65
+ updatedRows = rawRows.map(row => {
66
+ row = cloneDeep(row)
43
67
  if (rename) {
44
- doc[rename.updated] = doc[rename.old]
45
- delete doc[rename.old]
68
+ row[rename.updated] = row[rename.old]
69
+ delete row[rename.old]
46
70
  } else if (deletedColumns.length !== 0) {
47
- deletedColumns.forEach(colName => delete doc[colName])
71
+ deletedColumns.forEach(colName => delete row[colName])
48
72
  }
49
- return doc
73
+ return row
50
74
  })
51
75
 
76
+ // cleanup any attachments from object storage for deleted attachment columns
77
+ await cleanupAttachments(updatedTable, { oldTable, rows: rawRows })
52
78
  // Update views
53
- await exports.checkForViewUpdates(db, updatedTable, rename, deletedColumns)
79
+ await exports.checkForViewUpdates(updatedTable, rename, deletedColumns)
54
80
  delete updatedTable._rename
55
81
  }
56
82
  return { rows: updatedRows, table: updatedTable }
@@ -77,12 +103,12 @@ exports.makeSureTableUpToDate = (table, tableToSave) => {
77
103
  return tableToSave
78
104
  }
79
105
 
80
- exports.handleDataImport = async (appId, user, table, dataImport) => {
106
+ exports.handleDataImport = async (user, table, dataImport) => {
81
107
  if (!dataImport || !dataImport.csvString) {
82
108
  return table
83
109
  }
84
110
 
85
- const db = new CouchDB(appId)
111
+ const db = getAppDB()
86
112
  // Populate the table with rows imported from CSV in a bulk update
87
113
  const data = await csvParser.transform({
88
114
  ...dataImport,
@@ -127,8 +153,8 @@ exports.handleDataImport = async (appId, user, table, dataImport) => {
127
153
  return table
128
154
  }
129
155
 
130
- exports.handleSearchIndexes = async (appId, table) => {
131
- const db = new CouchDB(appId)
156
+ exports.handleSearchIndexes = async table => {
157
+ const db = getAppDB()
132
158
  // create relevant search indexes
133
159
  if (table.indexes && table.indexes.length > 0) {
134
160
  const currentIndexes = await db.getIndexes()
@@ -185,12 +211,9 @@ exports.checkStaticTables = table => {
185
211
  }
186
212
 
187
213
  class TableSaveFunctions {
188
- constructor({ db, ctx, oldTable, dataImport }) {
189
- this.db = db
190
- this.ctx = ctx
191
- if (this.ctx && this.ctx.user) {
192
- this.appId = this.ctx.appId
193
- }
214
+ constructor({ user, oldTable, dataImport }) {
215
+ this.db = getAppDB()
216
+ this.user = user
194
217
  this.oldTable = oldTable
195
218
  this.dataImport = dataImport
196
219
  // any rows that need updated
@@ -208,24 +231,15 @@ class TableSaveFunctions {
208
231
 
209
232
  // when confirmed valid
210
233
  async mid(table) {
211
- let response = await exports.checkForColumnUpdates(
212
- this.db,
213
- this.oldTable,
214
- table
215
- )
234
+ let response = await exports.checkForColumnUpdates(this.oldTable, table)
216
235
  this.rows = this.rows.concat(response.rows)
217
236
  return table
218
237
  }
219
238
 
220
239
  // after saving
221
240
  async after(table) {
222
- table = await exports.handleSearchIndexes(this.appId, table)
223
- table = await exports.handleDataImport(
224
- this.appId,
225
- this.ctx.user,
226
- table,
227
- this.dataImport
228
- )
241
+ table = await exports.handleSearchIndexes(table)
242
+ table = await exports.handleDataImport(this.user, table, this.dataImport)
229
243
  return table
230
244
  }
231
245
 
@@ -234,8 +248,22 @@ class TableSaveFunctions {
234
248
  }
235
249
  }
236
250
 
237
- exports.getAllExternalTables = async (appId, datasourceId) => {
238
- const db = new CouchDB(appId)
251
+ exports.getAllInternalTables = async () => {
252
+ const db = getAppDB()
253
+ const internalTables = await db.allDocs(
254
+ getTableParams(null, {
255
+ include_docs: true,
256
+ })
257
+ )
258
+ return internalTables.rows.map(tableDoc => ({
259
+ ...tableDoc.doc,
260
+ type: "internal",
261
+ sourceId: BudibaseInternalDB._id,
262
+ }))
263
+ }
264
+
265
+ exports.getAllExternalTables = async datasourceId => {
266
+ const db = getAppDB()
239
267
  const datasource = await db.get(datasourceId)
240
268
  if (!datasource || !datasource.entities) {
241
269
  throw "Datasource is not configured fully."
@@ -243,25 +271,25 @@ exports.getAllExternalTables = async (appId, datasourceId) => {
243
271
  return datasource.entities
244
272
  }
245
273
 
246
- exports.getExternalTable = async (appId, datasourceId, tableName) => {
247
- const entities = await exports.getAllExternalTables(appId, datasourceId)
274
+ exports.getExternalTable = async (datasourceId, tableName) => {
275
+ const entities = await exports.getAllExternalTables(datasourceId)
248
276
  return entities[tableName]
249
277
  }
250
278
 
251
- exports.getTable = async (appId, tableId) => {
252
- const db = new CouchDB(appId)
279
+ exports.getTable = async tableId => {
280
+ const db = getAppDB()
253
281
  if (isExternalTable(tableId)) {
254
282
  let { datasourceId, tableName } = breakExternalTableId(tableId)
255
283
  const datasource = await db.get(datasourceId)
256
- const table = await exports.getExternalTable(appId, datasourceId, tableName)
284
+ const table = await exports.getExternalTable(datasourceId, tableName)
257
285
  return { ...table, sql: isSQL(datasource) }
258
286
  } else {
259
287
  return db.get(tableId)
260
288
  }
261
289
  }
262
290
 
263
- exports.checkForViewUpdates = async (db, table, rename, deletedColumns) => {
264
- const views = await getViews(db)
291
+ exports.checkForViewUpdates = async (table, rename, deletedColumns) => {
292
+ const views = await getViews()
265
293
  const tableViews = views.filter(view => view.meta.tableId === table._id)
266
294
 
267
295
  // Check each table view to see if impacted by this table action
@@ -323,7 +351,7 @@ exports.checkForViewUpdates = async (db, table, rename, deletedColumns) => {
323
351
  // Update view if required
324
352
  if (needsUpdated) {
325
353
  const newViewTemplate = viewTemplate(view.meta)
326
- await saveView(db, null, view.name, newViewTemplate)
354
+ await saveView(null, view.name, newViewTemplate)
327
355
  if (!newViewTemplate.meta.schema) {
328
356
  newViewTemplate.meta.schema = table.schema
329
357
  }
@@ -1,4 +1,3 @@
1
- const CouchDB = require("../../db")
2
1
  const {
3
2
  generateUserMetadataID,
4
3
  getUserMetadataParams,
@@ -11,12 +10,14 @@ const { isEqual } = require("lodash")
11
10
  const { BUILTIN_ROLE_IDS } = require("@budibase/backend-core/roles")
12
11
  const {
13
12
  getDevelopmentAppID,
14
- getDeployedAppIDs,
13
+ getProdAppIDs,
14
+ dbExists,
15
15
  } = require("@budibase/backend-core/db")
16
- const { doesDatabaseExist } = require("../../utilities")
17
16
  const { UserStatus } = require("@budibase/backend-core/constants")
17
+ const { getAppDB } = require("@budibase/backend-core/context")
18
18
 
19
- async function rawMetadata(db) {
19
+ async function rawMetadata() {
20
+ const db = getAppDB()
20
21
  return (
21
22
  await db.allDocs(
22
23
  getUserMetadataParams(null, {
@@ -54,13 +55,10 @@ function combineMetadataAndUser(user, metadata) {
54
55
  return null
55
56
  }
56
57
 
57
- exports.syncGlobalUsers = async appId => {
58
+ exports.syncGlobalUsers = async () => {
58
59
  // sync user metadata
59
- const db = new CouchDB(appId)
60
- const [users, metadata] = await Promise.all([
61
- getGlobalUsers(appId),
62
- rawMetadata(db),
63
- ])
60
+ const db = getAppDB()
61
+ const [users, metadata] = await Promise.all([getGlobalUsers(), rawMetadata()])
64
62
  const toWrite = []
65
63
  for (let user of users) {
66
64
  const combined = await combineMetadataAndUser(user, metadata)
@@ -94,7 +92,7 @@ exports.syncUser = async function (ctx) {
94
92
  let prodAppIds
95
93
  // if they are a builder then get all production app IDs
96
94
  if ((user.builder && user.builder.global) || deleting) {
97
- prodAppIds = await getDeployedAppIDs(CouchDB)
95
+ prodAppIds = await getProdAppIDs()
98
96
  } else {
99
97
  prodAppIds = Object.entries(roles)
100
98
  .filter(entry => entry[1] !== BUILTIN_ROLE_IDS.PUBLIC)
@@ -104,10 +102,10 @@ exports.syncUser = async function (ctx) {
104
102
  const roleId = roles[prodAppId]
105
103
  const devAppId = getDevelopmentAppID(prodAppId)
106
104
  for (let appId of [prodAppId, devAppId]) {
107
- if (!(await doesDatabaseExist(appId))) {
105
+ if (!(await dbExists(appId))) {
108
106
  continue
109
107
  }
110
- const db = new CouchDB(appId)
108
+ const db = getAppDB()
111
109
  const metadataId = generateUserMetadataID(userId)
112
110
  let metadata
113
111
  try {
@@ -143,8 +141,8 @@ exports.syncUser = async function (ctx) {
143
141
  }
144
142
 
145
143
  exports.fetchMetadata = async function (ctx) {
146
- const database = new CouchDB(ctx.appId)
147
- const global = await getGlobalUsers(ctx.appId)
144
+ const database = getAppDB()
145
+ const global = await getGlobalUsers()
148
146
  const metadata = await rawMetadata(database)
149
147
  const users = []
150
148
  for (let user of global) {
@@ -173,8 +171,7 @@ exports.updateSelfMetadata = async function (ctx) {
173
171
  }
174
172
 
175
173
  exports.updateMetadata = async function (ctx) {
176
- const appId = ctx.appId
177
- const db = new CouchDB(appId)
174
+ const db = getAppDB()
178
175
  const user = ctx.request.body
179
176
  // this isn't applicable to the user
180
177
  delete user.roles
@@ -186,7 +183,7 @@ exports.updateMetadata = async function (ctx) {
186
183
  }
187
184
 
188
185
  exports.destroyMetadata = async function (ctx) {
189
- const db = new CouchDB(ctx.appId)
186
+ const db = getAppDB()
190
187
  try {
191
188
  const dbUser = await db.get(ctx.params.id)
192
189
  await db.remove(dbUser._id, dbUser._rev)
@@ -209,7 +206,7 @@ exports.setFlag = async function (ctx) {
209
206
  ctx.throw(400, "Must supply a 'flag' field in request body.")
210
207
  }
211
208
  const flagDocId = generateUserFlagID(userId)
212
- const db = new CouchDB(ctx.appId)
209
+ const db = getAppDB()
213
210
  let doc
214
211
  try {
215
212
  doc = await db.get(flagDocId)
@@ -224,7 +221,7 @@ exports.setFlag = async function (ctx) {
224
221
  exports.getFlags = async function (ctx) {
225
222
  const userId = ctx.user._id
226
223
  const docId = generateUserFlagID(userId)
227
- const db = new CouchDB(ctx.appId)
224
+ const db = getAppDB()
228
225
  let doc
229
226
  try {
230
227
  doc = await db.get(docId)
@@ -1,4 +1,3 @@
1
- const CouchDB = require("../../../db")
2
1
  const viewTemplate = require("./viewBuilder")
3
2
  const { apiFileReturn } = require("../../../utilities/fileSystem")
4
3
  const exporters = require("./exporters")
@@ -6,14 +5,14 @@ const { saveView, getView, getViews, deleteView } = require("./utils")
6
5
  const { fetchView } = require("../row")
7
6
  const { getTable } = require("../table/utils")
8
7
  const { FieldTypes } = require("../../../constants")
8
+ const { getAppDB } = require("@budibase/backend-core/context")
9
9
 
10
10
  exports.fetch = async ctx => {
11
- const db = new CouchDB(ctx.appId)
12
- ctx.body = await getViews(db)
11
+ ctx.body = await getViews()
13
12
  }
14
13
 
15
14
  exports.save = async ctx => {
16
- const db = new CouchDB(ctx.appId)
15
+ const db = getAppDB()
17
16
  const { originalName, ...viewToSave } = ctx.request.body
18
17
  const view = viewTemplate(viewToSave)
19
18
 
@@ -21,7 +20,7 @@ exports.save = async ctx => {
21
20
  ctx.throw(400, "Cannot create view without a name")
22
21
  }
23
22
 
24
- await saveView(db, originalName, viewToSave.name, view)
23
+ await saveView(originalName, viewToSave.name, view)
25
24
 
26
25
  // add views to table document
27
26
  const table = await db.get(ctx.request.body.tableId)
@@ -42,9 +41,9 @@ exports.save = async ctx => {
42
41
  }
43
42
 
44
43
  exports.destroy = async ctx => {
45
- const db = new CouchDB(ctx.appId)
44
+ const db = getAppDB()
46
45
  const viewName = decodeURI(ctx.params.viewName)
47
- const view = await deleteView(db, viewName)
46
+ const view = await deleteView(viewName)
48
47
  const table = await db.get(view.meta.tableId)
49
48
  delete table.views[viewName]
50
49
  await db.put(table)
@@ -53,9 +52,8 @@ exports.destroy = async ctx => {
53
52
  }
54
53
 
55
54
  exports.exportView = async ctx => {
56
- const db = new CouchDB(ctx.appId)
57
55
  const viewName = decodeURI(ctx.query.view)
58
- const view = await getView(db, viewName)
56
+ const view = await getView(viewName)
59
57
 
60
58
  const format = ctx.query.format
61
59
  if (!format || !Object.values(exporters.ExportFormats).includes(format)) {
@@ -83,7 +81,7 @@ exports.exportView = async ctx => {
83
81
  let schema = view && view.meta && view.meta.schema
84
82
  if (!schema) {
85
83
  const tableId = ctx.params.tableId || view.meta.tableId
86
- const table = await getTable(ctx.appId, tableId)
84
+ const table = await getTable(tableId)
87
85
  schema = table.schema
88
86
  }
89
87
 
@@ -6,8 +6,10 @@ const {
6
6
  SEPARATOR,
7
7
  } = require("../../../db/utils")
8
8
  const env = require("../../../environment")
9
+ const { getAppDB } = require("@budibase/backend-core/context")
9
10
 
10
- exports.getView = async (db, viewName) => {
11
+ exports.getView = async viewName => {
12
+ const db = getAppDB()
11
13
  if (env.SELF_HOSTED) {
12
14
  const designDoc = await db.get("_design/database")
13
15
  return designDoc.views[viewName]
@@ -22,7 +24,8 @@ exports.getView = async (db, viewName) => {
22
24
  }
23
25
  }
24
26
 
25
- exports.getViews = async db => {
27
+ exports.getViews = async () => {
28
+ const db = getAppDB()
26
29
  const response = []
27
30
  if (env.SELF_HOSTED) {
28
31
  const designDoc = await db.get("_design/database")
@@ -54,7 +57,8 @@ exports.getViews = async db => {
54
57
  return response
55
58
  }
56
59
 
57
- exports.saveView = async (db, originalName, viewName, viewTemplate) => {
60
+ exports.saveView = async (originalName, viewName, viewTemplate) => {
61
+ const db = getAppDB()
58
62
  if (env.SELF_HOSTED) {
59
63
  const designDoc = await db.get("_design/database")
60
64
  designDoc.views = {
@@ -91,7 +95,8 @@ exports.saveView = async (db, originalName, viewName, viewTemplate) => {
91
95
  }
92
96
  }
93
97
 
94
- exports.deleteView = async (db, viewName) => {
98
+ exports.deleteView = async viewName => {
99
+ const db = getAppDB()
95
100
  if (env.SELF_HOSTED) {
96
101
  const designDoc = await db.get("_design/database")
97
102
  const view = designDoc.views[viewName]
@@ -1,9 +1,9 @@
1
- const CouchDB = require("../../db")
2
1
  const { generateWebhookID, getWebhookParams } = require("../../db/utils")
3
2
  const toJsonSchema = require("to-json-schema")
4
3
  const validate = require("jsonschema").validate
5
4
  const triggers = require("../../automations/triggers")
6
- const { getDeployedAppID } = require("@budibase/backend-core/db")
5
+ const { getProdAppID } = require("@budibase/backend-core/db")
6
+ const { getAppDB, updateAppId } = require("@budibase/backend-core/context")
7
7
 
8
8
  const AUTOMATION_DESCRIPTION = "Generated from Webhook Schema"
9
9
 
@@ -23,7 +23,7 @@ exports.WebhookType = {
23
23
  }
24
24
 
25
25
  exports.fetch = async ctx => {
26
- const db = new CouchDB(ctx.appId)
26
+ const db = getAppDB()
27
27
  const response = await db.allDocs(
28
28
  getWebhookParams(null, {
29
29
  include_docs: true,
@@ -33,7 +33,7 @@ exports.fetch = async ctx => {
33
33
  }
34
34
 
35
35
  exports.save = async ctx => {
36
- const db = new CouchDB(ctx.appId)
36
+ const db = getAppDB()
37
37
  const webhook = ctx.request.body
38
38
  webhook.appId = ctx.appId
39
39
 
@@ -52,12 +52,13 @@ exports.save = async ctx => {
52
52
  }
53
53
 
54
54
  exports.destroy = async ctx => {
55
- const db = new CouchDB(ctx.appId)
55
+ const db = getAppDB()
56
56
  ctx.body = await db.remove(ctx.params.id, ctx.params.rev)
57
57
  }
58
58
 
59
59
  exports.buildSchema = async ctx => {
60
- const db = new CouchDB(ctx.params.instance)
60
+ updateAppId(ctx.params.instance)
61
+ const db = getAppDB()
61
62
  const webhook = await db.get(ctx.params.id)
62
63
  webhook.bodySchema = toJsonSchema(ctx.request.body)
63
64
  // update the automation outputs
@@ -81,9 +82,10 @@ exports.buildSchema = async ctx => {
81
82
  }
82
83
 
83
84
  exports.trigger = async ctx => {
84
- const prodAppId = getDeployedAppID(ctx.params.instance)
85
+ const prodAppId = getProdAppID(ctx.params.instance)
86
+ updateAppId(prodAppId)
85
87
  try {
86
- const db = new CouchDB(prodAppId)
88
+ const db = getAppDB()
87
89
  const webhook = await db.get(ctx.params.id)
88
90
  // validate against the schema
89
91
  if (webhook.bodySchema) {
@@ -24,6 +24,7 @@ const backupRoutes = require("./backup")
24
24
  const metadataRoutes = require("./metadata")
25
25
  const devRoutes = require("./dev")
26
26
  const cloudRoutes = require("./cloud")
27
+ const migrationRoutes = require("./migrations")
27
28
 
28
29
  exports.mainRoutes = [
29
30
  authRoutes,
@@ -53,6 +54,7 @@ exports.mainRoutes = [
53
54
  // this could be breaking as koa may recognise other routes as this
54
55
  tableRoutes,
55
56
  rowRoutes,
57
+ migrationRoutes,
56
58
  ]
57
59
 
58
60
  exports.staticRoutes = staticRoutes
@@ -0,0 +1,14 @@
1
+ const Router = require("@koa/router")
2
+ const migrationsController = require("../controllers/migrations")
3
+ const router = Router()
4
+ const { internalApi } = require("@budibase/backend-core/auth")
5
+
6
+ router
7
+ .post("/api/migrations/run", internalApi, migrationsController.migrate)
8
+ .get(
9
+ "/api/migrations/definitions",
10
+ internalApi,
11
+ migrationsController.fetchDefinitions
12
+ )
13
+
14
+ module.exports = router
@@ -145,6 +145,7 @@ describe("/automations", () => {
145
145
  let table = await config.createTable()
146
146
  automation.definition.trigger.inputs.tableId = table._id
147
147
  automation.definition.steps[0].inputs.row.tableId = table._id
148
+ automation.appId = config.appId
148
149
  automation = await config.createAutomation(automation)
149
150
  await setup.delay(500)
150
151
  const res = await testAutomation(config, automation)
@@ -82,7 +82,6 @@ describe("run misc tests", () => {
82
82
  dataImport.schema[col] = { type: "string" }
83
83
  }
84
84
  await tableUtils.handleDataImport(
85
- config.getAppId(),
86
85
  { userId: "test" },
87
86
  table,
88
87
  dataImport
@@ -1,10 +1,15 @@
1
1
  const setup = require("./utilities")
2
2
  const { basicScreen } = setup.structures
3
- const { checkBuilderEndpoint } = require("./utilities/TestFunctions")
3
+ const { checkBuilderEndpoint, runInProd } = require("./utilities/TestFunctions")
4
4
  const { BUILTIN_ROLE_IDS } = require("@budibase/backend-core/roles")
5
+ const { doInAppContext } = require("@budibase/backend-core/context")
5
6
 
6
7
  const route = "/test"
7
8
 
9
+ // there are checks which are disabled in test env,
10
+ // these checks need to be enabled for this test
11
+
12
+
8
13
  describe("/routing", () => {
9
14
  let request = setup.getRequest()
10
15
  let config = setup.getConfig()
@@ -26,20 +31,24 @@ describe("/routing", () => {
26
31
 
27
32
  describe("fetch", () => {
28
33
  it("prevents a public user from accessing development app", async () => {
29
- await request
30
- .get(`/api/routing/client`)
31
- .set(config.publicHeaders({ prodApp: false }))
32
- .expect(302)
34
+ await runInProd(() => {
35
+ return request
36
+ .get(`/api/routing/client`)
37
+ .set(config.publicHeaders({ prodApp: false }))
38
+ .expect(302)
39
+ })
33
40
  })
34
41
 
35
42
  it("prevents a non builder from accessing development app", async () => {
36
- await request
37
- .get(`/api/routing/client`)
38
- .set(await config.roleHeaders({
39
- roleId: BUILTIN_ROLE_IDS.BASIC,
40
- prodApp: false
41
- }))
42
- .expect(302)
43
+ await runInProd(async () => {
44
+ return request
45
+ .get(`/api/routing/client`)
46
+ .set(await config.roleHeaders({
47
+ roleId: BUILTIN_ROLE_IDS.BASIC,
48
+ prodApp: false
49
+ }))
50
+ .expect(302)
51
+ })
43
52
  })
44
53
  it("returns the correct routing for basic user", async () => {
45
54
  const res = await request
@@ -1,6 +1,7 @@
1
1
  const { outputProcessing } = require("../../../utilities/rowProcessor")
2
2
  const setup = require("./utilities")
3
3
  const { basicRow } = setup.structures
4
+ const { doInAppContext } = require("@budibase/backend-core/context")
4
5
 
5
6
  // mock the fetch for the search system
6
7
  jest.mock("node-fetch")
@@ -387,10 +388,12 @@ describe("/rows", () => {
387
388
  })
388
389
  // the environment needs configured for this
389
390
  await setup.switchToSelfHosted(async () => {
390
- const enriched = await outputProcessing({ appId: config.getAppId() }, table, [row])
391
- expect(enriched[0].attachment[0].url).toBe(
392
- `/prod-budi-app-assets/${config.getAppId()}/attachments/test/thing.csv`
393
- )
391
+ doInAppContext(config.getAppId(), async () => {
392
+ const enriched = await outputProcessing(table, [row])
393
+ expect(enriched[0].attachment[0].url).toBe(
394
+ `/prod-budi-app-assets/${config.getAppId()}/attachments/test/thing.csv`
395
+ )
396
+ })
394
397
  })
395
398
  })
396
399
  })