@budibase/server 1.0.49-alpha.5 → 1.0.49-alpha.9

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 (316) hide show
  1. package/builder/assets/{index.8f94a789.js → index.ad5370ae.js} +181 -181
  2. package/builder/index.html +1 -1
  3. package/coverage/clover.xml +1926 -1951
  4. package/coverage/coverage-final.json +54 -54
  5. package/coverage/lcov-report/api/controllers/analytics.js.html +1 -1
  6. package/coverage/lcov-report/api/controllers/apikeys.js.html +1 -1
  7. package/coverage/lcov-report/api/controllers/application.js.html +58 -37
  8. package/coverage/lcov-report/api/controllers/auth.js.html +11 -14
  9. package/coverage/lcov-report/api/controllers/automation.js.html +21 -51
  10. package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
  11. package/coverage/lcov-report/api/controllers/cloud.js.html +8 -11
  12. package/coverage/lcov-report/api/controllers/component.js.html +10 -13
  13. package/coverage/lcov-report/api/controllers/datasource.js.html +17 -23
  14. package/coverage/lcov-report/api/controllers/dev.js.html +6 -6
  15. package/coverage/lcov-report/api/controllers/index.html +52 -52
  16. package/coverage/lcov-report/api/controllers/integration.js.html +1 -1
  17. package/coverage/lcov-report/api/controllers/layout.js.html +4 -4
  18. package/coverage/lcov-report/api/controllers/metadata.js.html +6 -21
  19. package/coverage/lcov-report/api/controllers/migrations.js.html +1 -1
  20. package/coverage/lcov-report/api/controllers/permission.js.html +6 -6
  21. package/coverage/lcov-report/api/controllers/query/index.html +10 -10
  22. package/coverage/lcov-report/api/controllers/query/index.js.html +21 -18
  23. package/coverage/lcov-report/api/controllers/query/validation.js.html +1 -1
  24. package/coverage/lcov-report/api/controllers/role.js.html +9 -9
  25. package/coverage/lcov-report/api/controllers/routing.js.html +7 -10
  26. package/coverage/lcov-report/api/controllers/row/external.js.html +33 -126
  27. package/coverage/lcov-report/api/controllers/row/index.html +28 -28
  28. package/coverage/lcov-report/api/controllers/row/index.js.html +1 -1
  29. package/coverage/lcov-report/api/controllers/row/internal.js.html +37 -82
  30. package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +19 -25
  31. package/coverage/lcov-report/api/controllers/row/staticFormula.js.html +14 -17
  32. package/coverage/lcov-report/api/controllers/row/utils.js.html +15 -12
  33. package/coverage/lcov-report/api/controllers/screen.js.html +10 -16
  34. package/coverage/lcov-report/api/controllers/script.js.html +1 -1
  35. package/coverage/lcov-report/api/controllers/table/bulkFormula.js.html +20 -50
  36. package/coverage/lcov-report/api/controllers/table/external.js.html +15 -24
  37. package/coverage/lcov-report/api/controllers/table/index.html +37 -37
  38. package/coverage/lcov-report/api/controllers/table/index.js.html +7 -7
  39. package/coverage/lcov-report/api/controllers/table/internal.js.html +36 -45
  40. package/coverage/lcov-report/api/controllers/table/utils.js.html +40 -76
  41. package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
  42. package/coverage/lcov-report/api/controllers/user.js.html +26 -35
  43. package/coverage/lcov-report/api/controllers/view/exporters.js.html +1 -1
  44. package/coverage/lcov-report/api/controllers/view/index.html +16 -16
  45. package/coverage/lcov-report/api/controllers/view/index.js.html +15 -21
  46. package/coverage/lcov-report/api/controllers/view/utils.js.html +25 -10
  47. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +1 -1
  48. package/coverage/lcov-report/api/controllers/webhook.js.html +21 -15
  49. package/coverage/lcov-report/api/index.html +1 -1
  50. package/coverage/lcov-report/api/index.js.html +1 -1
  51. package/coverage/lcov-report/api/routes/analytics.js.html +1 -1
  52. package/coverage/lcov-report/api/routes/apikeys.js.html +1 -1
  53. package/coverage/lcov-report/api/routes/application.js.html +1 -1
  54. package/coverage/lcov-report/api/routes/auth.js.html +1 -1
  55. package/coverage/lcov-report/api/routes/automation.js.html +1 -1
  56. package/coverage/lcov-report/api/routes/backup.js.html +1 -1
  57. package/coverage/lcov-report/api/routes/cloud.js.html +1 -1
  58. package/coverage/lcov-report/api/routes/component.js.html +1 -1
  59. package/coverage/lcov-report/api/routes/datasource.js.html +1 -1
  60. package/coverage/lcov-report/api/routes/deploy.js.html +1 -1
  61. package/coverage/lcov-report/api/routes/dev.js.html +1 -1
  62. package/coverage/lcov-report/api/routes/index.html +1 -1
  63. package/coverage/lcov-report/api/routes/index.js.html +1 -1
  64. package/coverage/lcov-report/api/routes/integration.js.html +1 -1
  65. package/coverage/lcov-report/api/routes/layout.js.html +1 -1
  66. package/coverage/lcov-report/api/routes/metadata.js.html +1 -1
  67. package/coverage/lcov-report/api/routes/migrations.js.html +1 -1
  68. package/coverage/lcov-report/api/routes/permission.js.html +1 -1
  69. package/coverage/lcov-report/api/routes/query.js.html +1 -1
  70. package/coverage/lcov-report/api/routes/role.js.html +1 -1
  71. package/coverage/lcov-report/api/routes/routing.js.html +1 -1
  72. package/coverage/lcov-report/api/routes/row.js.html +1 -1
  73. package/coverage/lcov-report/api/routes/screen.js.html +1 -1
  74. package/coverage/lcov-report/api/routes/script.js.html +1 -1
  75. package/coverage/lcov-report/api/routes/static.js.html +1 -1
  76. package/coverage/lcov-report/api/routes/table.js.html +1 -1
  77. package/coverage/lcov-report/api/routes/templates.js.html +1 -1
  78. package/coverage/lcov-report/api/routes/user.js.html +1 -1
  79. package/coverage/lcov-report/api/routes/view.js.html +1 -1
  80. package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
  81. package/coverage/lcov-report/automations/actions.js.html +1 -1
  82. package/coverage/lcov-report/automations/automationUtils.js.html +4 -7
  83. package/coverage/lcov-report/automations/bullboard.js.html +1 -1
  84. package/coverage/lcov-report/automations/index.html +18 -18
  85. package/coverage/lcov-report/automations/index.js.html +1 -1
  86. package/coverage/lcov-report/automations/steps/bash.js.html +1 -1
  87. package/coverage/lcov-report/automations/steps/createRow.js.html +2 -5
  88. package/coverage/lcov-report/automations/steps/delay.js.html +1 -1
  89. package/coverage/lcov-report/automations/steps/deleteRow.js.html +1 -1
  90. package/coverage/lcov-report/automations/steps/discord.js.html +1 -1
  91. package/coverage/lcov-report/automations/steps/executeQuery.js.html +1 -1
  92. package/coverage/lcov-report/automations/steps/executeScript.js.html +1 -1
  93. package/coverage/lcov-report/automations/steps/filter.js.html +1 -1
  94. package/coverage/lcov-report/automations/steps/index.html +1 -1
  95. package/coverage/lcov-report/automations/steps/integromat.js.html +1 -1
  96. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +1 -1
  97. package/coverage/lcov-report/automations/steps/queryRows.js.html +1 -1
  98. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +1 -1
  99. package/coverage/lcov-report/automations/steps/serverLog.js.html +1 -1
  100. package/coverage/lcov-report/automations/steps/slack.js.html +1 -1
  101. package/coverage/lcov-report/automations/steps/updateRow.js.html +2 -2
  102. package/coverage/lcov-report/automations/steps/utils.js.html +1 -1
  103. package/coverage/lcov-report/automations/steps/zapier.js.html +1 -1
  104. package/coverage/lcov-report/automations/triggerInfo/app.js.html +1 -1
  105. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +1 -1
  106. package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
  107. package/coverage/lcov-report/automations/triggerInfo/index.js.html +1 -1
  108. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +1 -1
  109. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +1 -1
  110. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +1 -1
  111. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +1 -1
  112. package/coverage/lcov-report/automations/triggers.js.html +46 -40
  113. package/coverage/lcov-report/automations/utils.js.html +24 -12
  114. package/coverage/lcov-report/constants/index.html +1 -1
  115. package/coverage/lcov-report/constants/index.js.html +1 -1
  116. package/coverage/lcov-report/constants/layouts.js.html +1 -1
  117. package/coverage/lcov-report/constants/screens.js.html +1 -1
  118. package/coverage/lcov-report/db/client.js.html +18 -18
  119. package/coverage/lcov-report/db/inMemoryView.js.html +1 -1
  120. package/coverage/lcov-report/db/index.html +1 -1
  121. package/coverage/lcov-report/db/index.js.html +3 -3
  122. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +11 -23
  123. package/coverage/lcov-report/db/linkedRows/index.html +27 -27
  124. package/coverage/lcov-report/db/linkedRows/index.js.html +24 -66
  125. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +28 -28
  126. package/coverage/lcov-report/db/newid.js.html +1 -1
  127. package/coverage/lcov-report/db/utils.js.html +5 -5
  128. package/coverage/lcov-report/events/AutomationEmitter.js.html +1 -1
  129. package/coverage/lcov-report/events/index.html +1 -1
  130. package/coverage/lcov-report/events/index.js.html +1 -1
  131. package/coverage/lcov-report/events/utils.js.html +1 -1
  132. package/coverage/lcov-report/index.html +90 -90
  133. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
  134. package/coverage/lcov-report/integrations/tests/index.html +1 -1
  135. package/coverage/lcov-report/middleware/appInfo.js.html +1 -1
  136. package/coverage/lcov-report/middleware/authorized.js.html +21 -15
  137. package/coverage/lcov-report/middleware/builder.js.html +3 -3
  138. package/coverage/lcov-report/middleware/currentapp.js.html +72 -60
  139. package/coverage/lcov-report/middleware/index.html +28 -28
  140. package/coverage/lcov-report/middleware/joi-validator.js.html +1 -1
  141. package/coverage/lcov-report/middleware/resourceId.js.html +1 -1
  142. package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
  143. package/coverage/lcov-report/middleware/usageQuota.js.html +29 -29
  144. package/coverage/lcov-report/middleware/utils.js.html +2 -2
  145. package/coverage/lcov-report/threads/automation.js.html +30 -24
  146. package/coverage/lcov-report/threads/index.html +25 -25
  147. package/coverage/lcov-report/threads/index.js.html +1 -1
  148. package/coverage/lcov-report/threads/query.js.html +26 -47
  149. package/coverage/lcov-report/threads/utils.js.html +1 -1
  150. package/coverage/lcov-report/utilities/bcrypt.js.html +1 -1
  151. package/coverage/lcov-report/utilities/budibaseDir.js.html +1 -1
  152. package/coverage/lcov-report/utilities/centralPath.js.html +1 -1
  153. package/coverage/lcov-report/utilities/csvParser.js.html +1 -1
  154. package/coverage/lcov-report/utilities/global.js.html +44 -35
  155. package/coverage/lcov-report/utilities/index.html +27 -27
  156. package/coverage/lcov-report/utilities/index.js.html +40 -70
  157. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +1 -1
  158. package/coverage/lcov-report/utilities/queue/index.html +1 -1
  159. package/coverage/lcov-report/utilities/routing/index.html +1 -1
  160. package/coverage/lcov-report/utilities/routing/index.js.html +7 -7
  161. package/coverage/lcov-report/utilities/rowProcessor/index.html +11 -11
  162. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +16 -58
  163. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +1 -1
  164. package/coverage/lcov-report/utilities/scriptRunner.js.html +1 -1
  165. package/coverage/lcov-report/utilities/security.js.html +1 -1
  166. package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
  167. package/coverage/lcov-report/utilities/usageQuota/index.html +1 -1
  168. package/coverage/lcov-report/utilities/usageQuota/index.js.html +5 -2
  169. package/coverage/lcov-report/utilities/usageQuota/rows.js.html +5 -2
  170. package/coverage/lcov-report/utilities/usageQuota/usageQuoteReset.js.html +1 -1
  171. package/coverage/lcov-report/utilities/users.js.html +5 -5
  172. package/coverage/lcov-report/utilities/workerRequests.js.html +5 -5
  173. package/coverage/lcov.info +3197 -3223
  174. package/dist/api/controllers/application.js +31 -28
  175. package/dist/api/controllers/auth.js +4 -5
  176. package/dist/api/controllers/automation.js +14 -19
  177. package/dist/api/controllers/cloud.js +2 -3
  178. package/dist/api/controllers/component.js +3 -4
  179. package/dist/api/controllers/datasource.js +9 -10
  180. package/dist/api/controllers/deploy/Deployment.js +3 -6
  181. package/dist/api/controllers/deploy/index.js +12 -13
  182. package/dist/api/controllers/dev.js +5 -5
  183. package/dist/api/controllers/layout.js +3 -3
  184. package/dist/api/controllers/metadata.js +4 -4
  185. package/dist/api/controllers/permission.js +4 -4
  186. package/dist/api/controllers/query/import/index.js +4 -6
  187. package/dist/api/controllers/query/index.js +11 -10
  188. package/dist/api/controllers/role.js +5 -5
  189. package/dist/api/controllers/routing.js +5 -6
  190. package/dist/api/controllers/row/ExternalRequest.js +90 -67
  191. package/dist/api/controllers/row/external.js +14 -22
  192. package/dist/api/controllers/row/internal.js +29 -44
  193. package/dist/api/controllers/row/internalSearch.js +11 -13
  194. package/dist/api/controllers/row/staticFormula.js +11 -11
  195. package/dist/api/controllers/row/utils.js +7 -6
  196. package/dist/api/controllers/screen.js +5 -7
  197. package/dist/api/controllers/static/index.js +4 -4
  198. package/dist/api/controllers/table/bulkFormula.js +14 -15
  199. package/dist/api/controllers/table/external.js +7 -10
  200. package/dist/api/controllers/table/index.js +5 -5
  201. package/dist/api/controllers/table/internal.js +16 -19
  202. package/dist/api/controllers/table/utils.js +29 -31
  203. package/dist/api/controllers/user.js +16 -20
  204. package/dist/api/controllers/view/index.js +8 -10
  205. package/dist/api/controllers/view/utils.js +9 -4
  206. package/dist/api/controllers/webhook.js +10 -8
  207. package/dist/api/routes/tests/utilities/TestFunctions.js +37 -17
  208. package/dist/automations/automationUtils.js +2 -3
  209. package/dist/automations/steps/createRow.js +1 -1
  210. package/dist/automations/steps/updateRow.js +1 -1
  211. package/dist/automations/triggers.js +27 -25
  212. package/dist/automations/utils.js +10 -5
  213. package/dist/db/linkedRows/LinkController.js +3 -7
  214. package/dist/db/linkedRows/index.js +16 -26
  215. package/dist/db/linkedRows/linkUtils.js +6 -6
  216. package/dist/db/views/staticViews.js +9 -10
  217. package/dist/environment.js +2 -1
  218. package/dist/integrations/base/sql.js +43 -8
  219. package/dist/integrations/utils.js +3 -0
  220. package/dist/middleware/authorized.js +5 -3
  221. package/dist/middleware/builder.js +2 -2
  222. package/dist/middleware/currentapp.js +41 -37
  223. package/dist/middleware/usageQuota.js +2 -2
  224. package/dist/migrations/functions/usageQuotas/syncApps.js +6 -9
  225. package/dist/migrations/functions/usageQuotas/syncRows.js +7 -9
  226. package/dist/package.json +4 -4
  227. package/dist/tests/utilities/TestConfiguration.js +67 -44
  228. package/dist/threads/automation.js +13 -11
  229. package/dist/threads/query.js +13 -19
  230. package/dist/tsconfig.tsbuildinfo +1 -1
  231. package/dist/utilities/fileSystem/index.js +4 -3
  232. package/dist/utilities/global.js +15 -12
  233. package/dist/utilities/index.js +7 -17
  234. package/dist/utilities/routing/index.js +5 -5
  235. package/dist/utilities/rowProcessor/index.js +9 -10
  236. package/dist/utilities/usageQuota/index.js +1 -0
  237. package/dist/utilities/usageQuota/rows.js +1 -0
  238. package/dist/utilities/users.js +3 -3
  239. package/dist/utilities/workerRequests.js +4 -4
  240. package/package.json +5 -5
  241. package/scripts/integrations/postgres/init.sql +11 -6
  242. package/src/api/controllers/application.js +35 -28
  243. package/src/api/controllers/auth.js +4 -5
  244. package/src/api/controllers/automation.js +13 -23
  245. package/src/api/controllers/cloud.js +2 -3
  246. package/src/api/controllers/component.js +3 -4
  247. package/src/api/controllers/datasource.js +9 -11
  248. package/src/api/controllers/deploy/Deployment.js +3 -7
  249. package/src/api/controllers/deploy/index.js +20 -13
  250. package/src/api/controllers/dev.js +5 -5
  251. package/src/api/controllers/layout.js +3 -3
  252. package/src/api/controllers/metadata.js +4 -9
  253. package/src/api/controllers/permission.js +4 -4
  254. package/src/api/controllers/query/import/index.ts +4 -6
  255. package/src/api/controllers/query/import/tests/index.spec.js +2 -1
  256. package/src/api/controllers/query/index.js +11 -10
  257. package/src/api/controllers/role.js +5 -5
  258. package/src/api/controllers/routing.js +5 -6
  259. package/src/api/controllers/row/ExternalRequest.ts +67 -43
  260. package/src/api/controllers/row/external.js +27 -58
  261. package/src/api/controllers/row/internal.js +29 -44
  262. package/src/api/controllers/row/internalSearch.js +11 -13
  263. package/src/api/controllers/row/staticFormula.js +10 -11
  264. package/src/api/controllers/row/utils.js +7 -6
  265. package/src/api/controllers/screen.js +5 -7
  266. package/src/api/controllers/static/index.js +4 -4
  267. package/src/api/controllers/table/bulkFormula.js +13 -23
  268. package/src/api/controllers/table/external.js +7 -10
  269. package/src/api/controllers/table/index.js +5 -5
  270. package/src/api/controllers/table/internal.js +18 -21
  271. package/src/api/controllers/table/utils.js +29 -41
  272. package/src/api/controllers/user.js +17 -20
  273. package/src/api/controllers/view/index.js +8 -10
  274. package/src/api/controllers/view/utils.js +9 -4
  275. package/src/api/controllers/webhook.js +10 -8
  276. package/src/api/routes/tests/automation.spec.js +1 -0
  277. package/src/api/routes/tests/misc.spec.js +0 -1
  278. package/src/api/routes/tests/routing.spec.js +21 -12
  279. package/src/api/routes/tests/row.spec.js +7 -4
  280. package/src/api/routes/tests/utilities/TestFunctions.js +39 -17
  281. package/src/automations/automationUtils.js +2 -3
  282. package/src/automations/steps/createRow.js +0 -1
  283. package/src/automations/steps/updateRow.js +1 -1
  284. package/src/automations/triggers.js +33 -31
  285. package/src/automations/utils.js +9 -5
  286. package/src/db/linkedRows/LinkController.js +3 -7
  287. package/src/db/linkedRows/index.js +16 -30
  288. package/src/db/linkedRows/linkUtils.js +6 -6
  289. package/src/db/tests/linkController.spec.js +0 -1
  290. package/src/db/tests/linkTests.spec.js +5 -6
  291. package/src/db/views/staticViews.js +8 -10
  292. package/src/environment.js +2 -1
  293. package/src/integrations/base/sql.ts +55 -14
  294. package/src/integrations/utils.ts +4 -1
  295. package/src/middleware/authorized.js +5 -3
  296. package/src/middleware/builder.js +2 -2
  297. package/src/middleware/currentapp.js +50 -46
  298. package/src/middleware/tests/authorized.spec.js +7 -2
  299. package/src/middleware/tests/currentapp.spec.js +6 -0
  300. package/src/middleware/usageQuota.js +2 -2
  301. package/src/migrations/functions/usageQuotas/syncApps.ts +4 -4
  302. package/src/migrations/functions/usageQuotas/syncRows.ts +5 -4
  303. package/src/module.d.ts +3 -0
  304. package/src/tests/utilities/TestConfiguration.js +69 -50
  305. package/src/threads/automation.js +17 -15
  306. package/src/threads/query.js +14 -21
  307. package/src/utilities/fileSystem/index.js +4 -3
  308. package/src/utilities/global.js +15 -12
  309. package/src/utilities/index.js +7 -17
  310. package/src/utilities/routing/index.js +5 -5
  311. package/src/utilities/rowProcessor/index.js +9 -23
  312. package/src/utilities/usageQuota/index.js +1 -0
  313. package/src/utilities/usageQuota/rows.js +1 -0
  314. package/src/utilities/users.js +3 -3
  315. package/src/utilities/workerRequests.js +4 -4
  316. package/tsconfig.json +2 -1
@@ -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")
9
8
  const { DocumentTypes, isDevAppID } = require("../db/utils")
10
9
  const { doInTenant } = require("@budibase/backend-core/tenancy")
11
10
  const usage = require("../utilities/usageQuota")
12
11
  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,11 +59,10 @@ class Orchestrator {
59
59
  }
60
60
 
61
61
  async getApp() {
62
- const appId = this._appId
63
62
  if (this._app) {
64
63
  return this._app
65
64
  }
66
- const db = new CouchDB(appId)
65
+ const db = getAppDB()
67
66
  this._app = await db.get(DocumentTypes.APP_METADATA)
68
67
  return this._app
69
68
  }
@@ -131,16 +130,19 @@ class Orchestrator {
131
130
  }
132
131
 
133
132
  module.exports = (input, callback) => {
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
- })
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
+ })
146
148
  }
@@ -3,14 +3,10 @@ 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 CouchDB = require("../db")
7
-
8
- const IS_TRIPLE_BRACE = new RegExp(/^{{3}.*}{3}$/)
9
- const IS_HANDLEBARS = new RegExp(/^{{2}.*}{2}$/)
6
+ const { doInAppContext, getAppDB } = require("@budibase/backend-core/context")
10
7
 
11
8
  class QueryRunner {
12
9
  constructor(input, flags = { noRecursiveQuery: false }) {
13
- this.appId = input.appId
14
10
  this.datasource = input.datasource
15
11
  this.queryVerb = input.queryVerb
16
12
  this.fields = input.fields
@@ -104,12 +100,11 @@ class QueryRunner {
104
100
  }
105
101
 
106
102
  async runAnotherQuery(queryId, parameters) {
107
- const db = new CouchDB(this.appId)
103
+ const db = getAppDB()
108
104
  const query = await db.get(queryId)
109
105
  const datasource = await db.get(query.datasourceId)
110
106
  return new QueryRunner(
111
107
  {
112
- appId: this.appId,
113
108
  datasource,
114
109
  queryVerb: query.queryVerb,
115
110
  fields: query.fields,
@@ -190,12 +185,8 @@ class QueryRunner {
190
185
  enrichedQuery[key] = this.enrichQueryFields(fields[key], parameters)
191
186
  } else if (typeof fields[key] === "string") {
192
187
  // enrich string value as normal
193
- let value = fields[key]
194
- // add triple brace to avoid escaping e.g. '=' in cookie header
195
- if (IS_HANDLEBARS.test(value) && !IS_TRIPLE_BRACE.test(value)) {
196
- value = `{${value}}`
197
- }
198
- enrichedQuery[key] = processStringSync(value, parameters, {
188
+ enrichedQuery[key] = processStringSync(fields[key], parameters, {
189
+ noEscaping: true,
199
190
  noHelpers: true,
200
191
  })
201
192
  } else {
@@ -223,12 +214,14 @@ class QueryRunner {
223
214
  }
224
215
 
225
216
  module.exports = (input, callback) => {
226
- const Runner = new QueryRunner(input)
227
- Runner.execute()
228
- .then(response => {
229
- callback(null, response)
230
- })
231
- .catch(err => {
232
- callback(err)
233
- })
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
+ })
234
227
  }
@@ -1,5 +1,4 @@
1
1
  const { budibaseTempDir } = require("../budibaseDir")
2
- const { isDev } = require("../index")
3
2
  const fs = require("fs")
4
3
  const { join } = require("path")
5
4
  const uuid = require("uuid/v4")
@@ -20,6 +19,7 @@ const {
20
19
  LINK_USER_METADATA_PREFIX,
21
20
  } = require("../../db/utils")
22
21
  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 (!isDev()) {
54
+ if (!env.isDev() || env.isTest()) {
55
55
  return
56
56
  }
57
57
  if (!fs.existsSync(budibaseTempDir())) {
@@ -251,7 +251,8 @@ 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 (appId, library) => {
254
+ exports.getComponentLibraryManifest = async library => {
255
+ const appId = getAppId()
255
256
  const filename = "manifest.json"
256
257
  /* istanbul ignore next */
257
258
  // 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 { getDeployedAppID } = require("@budibase/backend-core/db")
6
+ const { getProdAppID } = 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,8 +11,10 @@ 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")
14
15
 
15
- exports.updateAppRole = (appId, user) => {
16
+ exports.updateAppRole = (user, { appId } = {}) => {
17
+ appId = appId || getAppId()
16
18
  if (!user || !user.roles) {
17
19
  return user
18
20
  }
@@ -24,7 +26,7 @@ exports.updateAppRole = (appId, user) => {
24
26
  return user
25
27
  }
26
28
  // always use the deployed app
27
- user.roleId = user.roles[getDeployedAppID(appId)]
29
+ user.roleId = user.roles[getProdAppID(appId)]
28
30
  // if a role wasn't found then either set as admin (builder) or public (everyone else)
29
31
  if (!user.roleId && user.builder && user.builder.global) {
30
32
  user.roleId = BUILTIN_ROLE_IDS.ADMIN
@@ -35,18 +37,18 @@ exports.updateAppRole = (appId, user) => {
35
37
  return user
36
38
  }
37
39
 
38
- function processUser(appId, user) {
40
+ function processUser(user, { appId } = {}) {
39
41
  if (user) {
40
42
  delete user.password
41
43
  }
42
- return exports.updateAppRole(appId, user)
44
+ return exports.updateAppRole(user, { appId })
43
45
  }
44
46
 
45
47
  exports.getCachedSelf = async (ctx, appId) => {
46
48
  // this has to be tenant aware, can't depend on the context to find it out
47
49
  // running some middlewares before the tenancy causes context to break
48
50
  const user = await userCache.getUser(ctx.user._id)
49
- return processUser(appId, user)
51
+ return processUser(user, { appId })
50
52
  }
51
53
 
52
54
  exports.getRawGlobalUser = async userId => {
@@ -54,12 +56,13 @@ exports.getRawGlobalUser = async userId => {
54
56
  return db.get(getGlobalIDFromUserMetadataID(userId))
55
57
  }
56
58
 
57
- exports.getGlobalUser = async (appId, userId) => {
59
+ exports.getGlobalUser = async userId => {
58
60
  let user = await exports.getRawGlobalUser(userId)
59
- return processUser(appId, user)
61
+ return processUser(user)
60
62
  }
61
63
 
62
- exports.getGlobalUsers = async (appId = null, users = null) => {
64
+ exports.getGlobalUsers = async (users = null) => {
65
+ const appId = getAppId()
63
66
  const db = getGlobalDB()
64
67
  let globalUsers
65
68
  if (users) {
@@ -86,11 +89,11 @@ exports.getGlobalUsers = async (appId = null, users = null) => {
86
89
  if (!appId) {
87
90
  return globalUsers
88
91
  }
89
- return globalUsers.map(user => exports.updateAppRole(appId, user))
92
+ return globalUsers.map(user => exports.updateAppRole(user))
90
93
  }
91
94
 
92
- exports.getGlobalUsersFromMetadata = async (appId, users) => {
93
- const globalUsers = await exports.getGlobalUsers(appId, users)
95
+ exports.getGlobalUsersFromMetadata = async users => {
96
+ const globalUsers = await exports.getGlobalUsers(users)
94
97
  return users.map(user => {
95
98
  const globalUser = globalUsers.find(
96
99
  globalUser => globalUser && user._id.includes(globalUser._id)
@@ -1,9 +1,9 @@
1
1
  const env = require("../environment")
2
2
  const { OBJ_STORE_DIRECTORY } = require("../constants")
3
3
  const { sanitizeKey } = require("@budibase/backend-core/objectStore")
4
- const CouchDB = require("../db")
5
4
  const { generateMetadataID } = require("../db/utils")
6
5
  const Readable = require("stream").Readable
6
+ const { getAppDB } = require("@budibase/backend-core/context")
7
7
 
8
8
  const BB_CDN = "https://cdn.budi.live"
9
9
 
@@ -73,8 +73,8 @@ exports.attachmentsRelativeURL = attachmentKey => {
73
73
  )
74
74
  }
75
75
 
76
- exports.updateEntityMetadata = async (appId, type, entityId, updateFn) => {
77
- const db = new CouchDB(appId)
76
+ exports.updateEntityMetadata = async (type, entityId, updateFn) => {
77
+ const db = getAppDB()
78
78
  const id = generateMetadataID(type, entityId)
79
79
  // read it to see if it exists, we'll overwrite it no matter what
80
80
  let rev,
@@ -99,14 +99,14 @@ exports.updateEntityMetadata = async (appId, type, entityId, updateFn) => {
99
99
  }
100
100
  }
101
101
 
102
- exports.saveEntityMetadata = async (appId, type, entityId, metadata) => {
103
- return exports.updateEntityMetadata(appId, type, entityId, () => {
102
+ exports.saveEntityMetadata = async (type, entityId, metadata) => {
103
+ return exports.updateEntityMetadata(type, entityId, () => {
104
104
  return metadata
105
105
  })
106
106
  }
107
107
 
108
- exports.deleteEntityMetadata = async (appId, type, entityId) => {
109
- const db = new CouchDB(appId)
108
+ exports.deleteEntityMetadata = async (type, entityId) => {
109
+ const db = getAppDB()
110
110
  const id = generateMetadataID(type, entityId)
111
111
  let rev
112
112
  try {
@@ -141,16 +141,6 @@ exports.stringToReadStream = string => {
141
141
  })
142
142
  }
143
143
 
144
- exports.doesDatabaseExist = async dbName => {
145
- try {
146
- const db = new CouchDB(dbName, { skip_setup: true })
147
- const info = await db.info()
148
- return info && !info.error
149
- } catch (err) {
150
- return false
151
- }
152
- }
153
-
154
144
  exports.formatBytes = bytes => {
155
145
  const units = ["B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"]
156
146
  const byteIncrements = 1024
@@ -1,9 +1,9 @@
1
- const CouchDB = require("../../db")
2
1
  const { createRoutingView } = require("../../db/views/staticViews")
3
2
  const { ViewNames, getQueryIndex, UNICODE_MAX } = require("../../db/utils")
3
+ const { getAppDB } = require("@budibase/backend-core/context")
4
4
 
5
- exports.getRoutingInfo = async appId => {
6
- const db = new CouchDB(appId)
5
+ exports.getRoutingInfo = async () => {
6
+ const db = getAppDB()
7
7
  try {
8
8
  const allRouting = await db.query(getQueryIndex(ViewNames.ROUTING), {
9
9
  startKey: "",
@@ -14,8 +14,8 @@ exports.getRoutingInfo = async appId => {
14
14
  // check if the view doesn't exist, it should for all new instances
15
15
  /* istanbul ignore next */
16
16
  if (err != null && err.name === "not_found") {
17
- await createRoutingView(appId)
18
- return exports.getRoutingInfo(appId)
17
+ await createRoutingView()
18
+ return exports.getRoutingInfo()
19
19
  } else {
20
20
  throw err
21
21
  }
@@ -7,10 +7,10 @@ const { deleteFiles } = require("../../utilities/fileSystem/utilities")
7
7
  const { ObjectStoreBuckets } = require("../../constants")
8
8
  const {
9
9
  isProdAppID,
10
- getDeployedAppID,
10
+ getProdAppID,
11
11
  dbExists,
12
12
  } = require("@budibase/backend-core/db")
13
- const CouchDB = require("../../db")
13
+ const { getAppId } = require("@budibase/backend-core/context")
14
14
 
15
15
  const BASE_AUTO_ID = 1
16
16
 
@@ -253,26 +253,20 @@ exports.inputProcessing = (
253
253
  /**
254
254
  * This function enriches the input rows with anything they are supposed to contain, for example
255
255
  * link records or attachment links.
256
- * @param {string} appId the app in which the request is looking for enriched rows.
257
256
  * @param {object} table the table from which these rows came from originally, this is used to determine
258
257
  * the schema of the rows and then enrich.
259
258
  * @param {object[]|object} rows the rows which are to be enriched.
260
259
  * @param {object} opts used to set some options for the output, such as disabling relationship squashing.
261
260
  * @returns {object[]|object} the enriched rows will be returned.
262
261
  */
263
- exports.outputProcessing = async (
264
- { appId },
265
- table,
266
- rows,
267
- opts = { squash: true }
268
- ) => {
262
+ exports.outputProcessing = async (table, rows, opts = { squash: true }) => {
269
263
  let wasArray = true
270
264
  if (!(rows instanceof Array)) {
271
265
  rows = [rows]
272
266
  wasArray = false
273
267
  }
274
268
  // attach any linked row information
275
- let enriched = await linkRows.attachFullLinkedDocs(appId, table, rows)
269
+ let enriched = await linkRows.attachFullLinkedDocs(table, rows)
276
270
 
277
271
  // process formulas
278
272
  enriched = processFormulas(table, enriched, { dynamic: true })
@@ -291,18 +285,13 @@ exports.outputProcessing = async (
291
285
  }
292
286
  }
293
287
  if (opts.squash) {
294
- enriched = await linkRows.squashLinksToPrimaryDisplay(
295
- appId,
296
- table,
297
- enriched
298
- )
288
+ enriched = await linkRows.squashLinksToPrimaryDisplay(table, enriched)
299
289
  }
300
290
  return wasArray ? enriched : enriched[0]
301
291
  }
302
292
 
303
293
  /**
304
294
  * Clean up any attachments that were attached to a row.
305
- * @param {string} appId The ID of the app from which a row is being deleted.
306
295
  * @param {object} table The table from which a row is being removed.
307
296
  * @param {any} row optional - the row being removed.
308
297
  * @param {any} rows optional - if multiple rows being deleted can do this in bulk.
@@ -311,15 +300,12 @@ exports.outputProcessing = async (
311
300
  * deleted attachment columns.
312
301
  * @return {Promise<void>} When all attachments have been removed this will return.
313
302
  */
314
- exports.cleanupAttachments = async (
315
- appId,
316
- table,
317
- { row, rows, oldRow, oldTable }
318
- ) => {
303
+ exports.cleanupAttachments = async (table, { row, rows, oldRow, oldTable }) => {
304
+ const appId = getAppId()
319
305
  if (!isProdAppID(appId)) {
320
- const prodAppId = getDeployedAppID(appId)
306
+ const prodAppId = getProdAppID(appId)
321
307
  // if prod exists, then don't allow deleting
322
- const exists = await dbExists(CouchDB, prodAppId)
308
+ const exists = await dbExists(prodAppId)
323
309
  if (exists) {
324
310
  return
325
311
  }
@@ -52,6 +52,7 @@ exports.getUsageQuotaDoc = async db => {
52
52
  * Given a specified tenantId this will add to the usage object for the specified property.
53
53
  * @param {string} property The property which is to be added to (within the nested usageQuota object).
54
54
  * @param {number} usage The amount (this can be negative) to adjust the number by.
55
+ * @param {object} opts optional - options such as dryRun, to check what update will do.
55
56
  * @returns {Promise<void>} When this completes the API key will now be up to date - the quota period may have
56
57
  * also been reset after this call.
57
58
  */
@@ -23,6 +23,7 @@ const getAppPairs = appIds => {
23
23
  }
24
24
 
25
25
  const getAppRows = async appId => {
26
+ // need to specify the app ID, as this is used for different apps in one call
26
27
  const appDb = new CouchDB(appId)
27
28
  const response = await appDb.allDocs(
28
29
  getRowParams(null, null, {
@@ -1,13 +1,13 @@
1
- const CouchDB = require("../db")
2
1
  const { InternalTables } = require("../db/utils")
3
2
  const { getGlobalUser } = require("../utilities/global")
3
+ const { getAppDB } = require("@budibase/backend-core/context")
4
4
 
5
5
  exports.getFullUser = async (ctx, userId) => {
6
- const global = await getGlobalUser(ctx.appId, userId)
6
+ const global = await getGlobalUser(userId)
7
7
  let metadata
8
8
  try {
9
9
  // this will throw an error if the db doesn't exist, or there is no appId
10
- const db = new CouchDB(ctx.appId)
10
+ const db = getAppDB()
11
11
  metadata = await db.get(userId)
12
12
  } catch (err) {
13
13
  // it is fine if there is no user metadata, just remove global db info
@@ -1,7 +1,7 @@
1
1
  const fetch = require("node-fetch")
2
2
  const env = require("../environment")
3
3
  const { checkSlashesInUrl } = require("./index")
4
- const { getDeployedAppID } = require("@budibase/backend-core/db")
4
+ const { getProdAppID } = require("@budibase/backend-core/db")
5
5
  const { updateAppRole } = require("./global")
6
6
  const { Headers } = require("@budibase/backend-core/constants")
7
7
  const { getTenantId, isTenantIdSet } = require("@budibase/backend-core/tenancy")
@@ -70,15 +70,15 @@ exports.getGlobalSelf = async (ctx, appId = null) => {
70
70
  }
71
71
  let json = await response.json()
72
72
  if (appId) {
73
- json = updateAppRole(appId, json)
73
+ json = updateAppRole(json)
74
74
  }
75
75
  return json
76
76
  }
77
77
 
78
78
  exports.removeAppFromUserRoles = async (ctx, appId) => {
79
- const deployedAppId = getDeployedAppID(appId)
79
+ const prodAppId = getProdAppID(appId)
80
80
  const response = await fetch(
81
- checkSlashesInUrl(env.WORKER_URL + `/api/global/roles/${deployedAppId}`),
81
+ checkSlashesInUrl(env.WORKER_URL + `/api/global/roles/${prodAppId}`),
82
82
  request(ctx, {
83
83
  method: "DELETE",
84
84
  })
package/tsconfig.json CHANGED
@@ -12,7 +12,8 @@
12
12
  "incremental": true
13
13
  },
14
14
  "include": [
15
- "./src/**/*"
15
+ "./src/**/*",
16
+ "./src/module.d.ts"
16
17
  ],
17
18
  "exclude": [
18
19
  "node_modules",