@budibase/server 1.0.49-alpha.4 → 1.0.49-alpha.8

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.f763d886.js → index.94a9250f.js} +1 -1
  8. package/builder/index.html +1 -1
  9. package/coverage/clover.xml +1920 -1940
  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 +33 -126
  33. package/coverage/lcov-report/api/controllers/row/index.html +28 -28
  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 +3192 -3209
  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 +14 -22
  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/usageQuotas/syncApps.js +6 -9
  230. package/dist/migrations/functions/usageQuotas/syncRows.js +7 -9
  231. package/dist/package.json +4 -4
  232. package/dist/tests/utilities/TestConfiguration.js +67 -44
  233. package/dist/threads/automation.js +13 -11
  234. package/dist/threads/query.js +11 -11
  235. package/dist/tsconfig.tsbuildinfo +1 -1
  236. package/dist/utilities/fileSystem/index.js +4 -3
  237. package/dist/utilities/global.js +15 -12
  238. package/dist/utilities/index.js +7 -17
  239. package/dist/utilities/routing/index.js +5 -5
  240. package/dist/utilities/rowProcessor/index.js +9 -10
  241. package/dist/utilities/usageQuota/index.js +1 -0
  242. package/dist/utilities/usageQuota/rows.js +1 -0
  243. package/dist/utilities/users.js +3 -3
  244. package/dist/utilities/workerRequests.js +4 -4
  245. package/package.json +5 -5
  246. package/scripts/likeCypress.ts +1 -1
  247. package/src/api/controllers/application.js +35 -28
  248. package/src/api/controllers/auth.js +4 -5
  249. package/src/api/controllers/automation.js +13 -23
  250. package/src/api/controllers/cloud.js +2 -3
  251. package/src/api/controllers/component.js +3 -4
  252. package/src/api/controllers/datasource.js +9 -11
  253. package/src/api/controllers/deploy/Deployment.js +3 -7
  254. package/src/api/controllers/deploy/index.js +20 -13
  255. package/src/api/controllers/dev.js +5 -5
  256. package/src/api/controllers/layout.js +3 -3
  257. package/src/api/controllers/metadata.js +4 -9
  258. package/src/api/controllers/permission.js +4 -4
  259. package/src/api/controllers/query/import/index.ts +4 -6
  260. package/src/api/controllers/query/import/tests/index.spec.js +2 -1
  261. package/src/api/controllers/query/index.js +11 -10
  262. package/src/api/controllers/role.js +5 -5
  263. package/src/api/controllers/routing.js +5 -6
  264. package/src/api/controllers/row/ExternalRequest.ts +53 -42
  265. package/src/api/controllers/row/external.js +27 -58
  266. package/src/api/controllers/row/internal.js +29 -44
  267. package/src/api/controllers/row/internalSearch.js +11 -13
  268. package/src/api/controllers/row/staticFormula.js +10 -11
  269. package/src/api/controllers/row/utils.js +7 -6
  270. package/src/api/controllers/screen.js +5 -7
  271. package/src/api/controllers/static/index.js +4 -4
  272. package/src/api/controllers/table/bulkFormula.js +13 -23
  273. package/src/api/controllers/table/external.js +7 -10
  274. package/src/api/controllers/table/index.js +5 -5
  275. package/src/api/controllers/table/internal.js +18 -21
  276. package/src/api/controllers/table/utils.js +29 -41
  277. package/src/api/controllers/user.js +17 -20
  278. package/src/api/controllers/view/index.js +8 -10
  279. package/src/api/controllers/view/utils.js +9 -4
  280. package/src/api/controllers/webhook.js +10 -8
  281. package/src/api/routes/tests/automation.spec.js +1 -0
  282. package/src/api/routes/tests/misc.spec.js +0 -1
  283. package/src/api/routes/tests/routing.spec.js +21 -12
  284. package/src/api/routes/tests/row.spec.js +7 -4
  285. package/src/api/routes/tests/utilities/TestFunctions.js +39 -17
  286. package/src/automations/automationUtils.js +2 -3
  287. package/src/automations/steps/createRow.js +0 -1
  288. package/src/automations/steps/updateRow.js +1 -1
  289. package/src/automations/triggers.js +33 -31
  290. package/src/automations/utils.js +9 -5
  291. package/src/db/linkedRows/LinkController.js +3 -7
  292. package/src/db/linkedRows/index.js +16 -30
  293. package/src/db/linkedRows/linkUtils.js +6 -6
  294. package/src/db/tests/linkController.spec.js +0 -1
  295. package/src/db/tests/linkTests.spec.js +5 -6
  296. package/src/db/views/staticViews.js +8 -10
  297. package/src/environment.js +2 -1
  298. package/src/integrations/utils.ts +4 -1
  299. package/src/middleware/authorized.js +5 -3
  300. package/src/middleware/builder.js +2 -2
  301. package/src/middleware/currentapp.js +50 -46
  302. package/src/middleware/tests/authorized.spec.js +7 -2
  303. package/src/middleware/tests/currentapp.spec.js +6 -0
  304. package/src/middleware/usageQuota.js +2 -2
  305. package/src/migrations/functions/usageQuotas/syncApps.ts +4 -4
  306. package/src/migrations/functions/usageQuotas/syncRows.ts +5 -4
  307. package/src/module.d.ts +3 -0
  308. package/src/tests/utilities/TestConfiguration.js +69 -50
  309. package/src/threads/automation.js +17 -15
  310. package/src/threads/query.js +12 -12
  311. package/src/utilities/fileSystem/index.js +4 -3
  312. package/src/utilities/global.js +15 -12
  313. package/src/utilities/index.js +7 -17
  314. package/src/utilities/routing/index.js +5 -5
  315. package/src/utilities/rowProcessor/index.js +9 -23
  316. package/src/utilities/usageQuota/index.js +1 -0
  317. package/src/utilities/usageQuota/rows.js +1 -0
  318. package/src/utilities/users.js +3 -3
  319. package/src/utilities/workerRequests.js +4 -4
  320. package/tsconfig.json +2 -1
@@ -1,4 +1,3 @@
1
- const CouchDB = require("../../db")
2
1
  const {
3
2
  Role,
4
3
  getRole,
@@ -10,6 +9,7 @@ const {
10
9
  getUserMetadataParams,
11
10
  InternalTables,
12
11
  } = require("../../db/utils")
12
+ const { getAppDB } = require("@budibase/backend-core/context")
13
13
 
14
14
  const UpdateRolesOptions = {
15
15
  CREATED: "created",
@@ -40,15 +40,15 @@ async function updateRolesOnUserTable(db, roleId, updateOption) {
40
40
  }
41
41
 
42
42
  exports.fetch = async function (ctx) {
43
- ctx.body = await getAllRoles(ctx.appId)
43
+ ctx.body = await getAllRoles()
44
44
  }
45
45
 
46
46
  exports.find = async function (ctx) {
47
- ctx.body = await getRole(ctx.appId, ctx.params.roleId)
47
+ ctx.body = await getRole(ctx.params.roleId)
48
48
  }
49
49
 
50
50
  exports.save = async function (ctx) {
51
- const db = new CouchDB(ctx.appId)
51
+ const db = getAppDB()
52
52
  let { _id, name, inherits, permissionId } = ctx.request.body
53
53
  if (!_id) {
54
54
  _id = generateRoleID()
@@ -69,7 +69,7 @@ exports.save = async function (ctx) {
69
69
  }
70
70
 
71
71
  exports.destroy = async function (ctx) {
72
- const db = new CouchDB(ctx.appId)
72
+ const db = getAppDB()
73
73
  const roleId = ctx.params.roleId
74
74
  if (isBuiltin(roleId)) {
75
75
  ctx.throw(400, "Cannot delete builtin role.")
@@ -39,12 +39,11 @@ Routing.prototype.addScreenId = function (fullpath, roleId, screenId) {
39
39
 
40
40
  /**
41
41
  * Gets the full routing structure by querying the routing view and processing the result into the tree.
42
- * @param {string} appId The application to produce the routing structure for.
43
42
  * @returns {Promise<object>} The routing structure, this is the full structure designed for use in the builder,
44
43
  * if the client routing is required then the updateRoutingStructureForUserRole should be used.
45
44
  */
46
- async function getRoutingStructure(appId) {
47
- const screenRoutes = await getRoutingInfo(appId)
45
+ async function getRoutingStructure() {
46
+ const screenRoutes = await getRoutingInfo()
48
47
  const routing = new Routing()
49
48
 
50
49
  for (let screenRoute of screenRoutes) {
@@ -57,13 +56,13 @@ async function getRoutingStructure(appId) {
57
56
  }
58
57
 
59
58
  exports.fetch = async ctx => {
60
- ctx.body = await getRoutingStructure(ctx.appId)
59
+ ctx.body = await getRoutingStructure()
61
60
  }
62
61
 
63
62
  exports.clientFetch = async ctx => {
64
- const routing = await getRoutingStructure(ctx.appId)
63
+ const routing = await getRoutingStructure()
65
64
  let roleId = ctx.user.role._id
66
- const roleIds = await getUserRoleHierarchy(ctx.appId, roleId)
65
+ const roleIds = await getUserRoleHierarchy(roleId)
67
66
  for (let topLevel of Object.values(routing.routes)) {
68
67
  for (let subpathKey of Object.keys(topLevel.subpaths)) {
69
68
  let found = false
@@ -19,6 +19,19 @@ import {
19
19
  isRowId,
20
20
  convertRowId,
21
21
  } from "../../../integrations/utils"
22
+ import { getDatasourceAndQuery } from "./utils"
23
+ import {
24
+ DataSourceOperation,
25
+ FieldTypes,
26
+ RelationshipTypes,
27
+ } from "../../../constants"
28
+ import { breakExternalTableId, isSQL } from "../../../integrations/utils"
29
+ import { processObjectSync } from "@budibase/string-templates"
30
+ // @ts-ignore
31
+ import { cloneDeep } from "lodash/fp"
32
+ import { processFormulas } from "../../../utilities/rowProcessor/utils"
33
+ // @ts-ignore
34
+ import { getAppDB } from "@budibase/backend-core/context"
22
35
 
23
36
  interface ManyRelationship {
24
37
  tableId?: string
@@ -38,18 +51,6 @@ interface RunConfig {
38
51
  }
39
52
 
40
53
  module External {
41
- const { getDatasourceAndQuery } = require("./utils")
42
- const {
43
- DataSourceOperation,
44
- FieldTypes,
45
- RelationshipTypes,
46
- } = require("../../../constants")
47
- const { breakExternalTableId, isSQL } = require("../../../integrations/utils")
48
- const { processObjectSync } = require("@budibase/string-templates")
49
- const { cloneDeep } = require("lodash/fp")
50
- const CouchDB = require("../../../db")
51
- const { processFormulas } = require("../../../utilities/rowProcessor/utils")
52
-
53
54
  function buildFilters(
54
55
  id: string | undefined,
55
56
  filters: SearchFilters,
@@ -210,19 +211,12 @@ module External {
210
211
  }
211
212
 
212
213
  class ExternalRequest {
213
- private readonly appId: string
214
214
  private operation: Operation
215
215
  private tableId: string
216
216
  private datasource: Datasource
217
217
  private tables: { [key: string]: Table } = {}
218
218
 
219
- constructor(
220
- appId: string,
221
- operation: Operation,
222
- tableId: string,
223
- datasource: Datasource
224
- ) {
225
- this.appId = appId
219
+ constructor(operation: Operation, tableId: string, datasource: Datasource) {
226
220
  this.operation = operation
227
221
  this.tableId = tableId
228
222
  this.datasource = datasource
@@ -231,12 +225,14 @@ module External {
231
225
  }
232
226
  }
233
227
 
234
- getTable(tableId: string | undefined): Table {
228
+ getTable(tableId: string | undefined): Table | undefined {
235
229
  if (!tableId) {
236
230
  throw "Table ID is unknown, cannot find table"
237
231
  }
238
232
  const { tableName } = breakExternalTableId(tableId)
239
- return this.tables[tableName]
233
+ if (tableName) {
234
+ return this.tables[tableName]
235
+ }
240
236
  }
241
237
 
242
238
  inputProcessing(row: Row | undefined, table: Table) {
@@ -272,9 +268,11 @@ module External {
272
268
  newRow[key] = row[key]
273
269
  continue
274
270
  }
275
- const { tableName: linkTableName } = breakExternalTableId(field.tableId)
271
+ const { tableName: linkTableName } = breakExternalTableId(
272
+ field?.tableId
273
+ )
276
274
  // table has to exist for many to many
277
- if (!this.tables[linkTableName]) {
275
+ if (!linkTableName || !this.tables[linkTableName]) {
278
276
  continue
279
277
  }
280
278
  const linkTable = this.tables[linkTableName]
@@ -422,7 +420,7 @@ module External {
422
420
  }
423
421
  const { tableName: linkTableName } = breakExternalTableId(field.tableId)
424
422
  // no table to link to, this is not a valid relationships
425
- if (!this.tables[linkTableName]) {
423
+ if (!linkTableName || !this.tables[linkTableName]) {
426
424
  continue
427
425
  }
428
426
  const linkTable = this.tables[linkTableName]
@@ -460,6 +458,9 @@ module External {
460
458
  async lookupRelations(tableId: string, row: Row) {
461
459
  const related: { [key: string]: any } = {}
462
460
  const { tableName } = breakExternalTableId(tableId)
461
+ if (!tableName) {
462
+ return related
463
+ }
463
464
  const table = this.tables[tableName]
464
465
  // @ts-ignore
465
466
  const primaryKey = table.primary[0]
@@ -484,7 +485,7 @@ module External {
484
485
  if (!lookupField || !row[lookupField]) {
485
486
  continue
486
487
  }
487
- const response = await getDatasourceAndQuery(this.appId, {
488
+ const response = await getDatasourceAndQuery({
488
489
  endpoint: getEndpoint(tableId, DataSourceOperation.READ),
489
490
  filters: {
490
491
  equal: {
@@ -515,28 +516,30 @@ module External {
515
516
  row: Row,
516
517
  relationships: ManyRelationship[]
517
518
  ) {
518
- const { appId } = this
519
519
  // if we're creating (in a through table) need to wipe the existing ones first
520
520
  const promises = []
521
521
  const related = await this.lookupRelations(mainTableId, row)
522
522
  for (let relationship of relationships) {
523
523
  const { key, tableId, isUpdate, id, ...rest } = relationship
524
- const body = processObjectSync(rest, row)
524
+ const body: { [key: string]: any } = processObjectSync(rest, row, {})
525
525
  const linkTable = this.getTable(tableId)
526
526
  // @ts-ignore
527
- const linkPrimary = linkTable.primary[0]
528
- const rows = related[key]?.rows || []
527
+ const linkPrimary = linkTable?.primary[0]
528
+ if (!linkTable || !linkPrimary) {
529
+ return
530
+ }
531
+ const rows = related[key].rows || []
529
532
  const found = rows.find(
530
533
  (row: { [key: string]: any }) =>
531
534
  row[linkPrimary] === relationship.id ||
532
- row[linkPrimary] === body[linkPrimary]
535
+ row[linkPrimary] === body?.[linkPrimary]
533
536
  )
534
537
  const operation = isUpdate
535
538
  ? DataSourceOperation.UPDATE
536
539
  : DataSourceOperation.CREATE
537
540
  if (!found) {
538
541
  promises.push(
539
- getDatasourceAndQuery(appId, {
542
+ getDatasourceAndQuery({
540
543
  endpoint: getEndpoint(tableId, operation),
541
544
  // if we're doing many relationships then we're writing, only one response
542
545
  body,
@@ -552,9 +555,12 @@ module External {
552
555
  for (let [colName, { isMany, rows, tableId }] of Object.entries(
553
556
  related
554
557
  )) {
555
- const table: Table = this.getTable(tableId)
558
+ const table: Table | undefined = this.getTable(tableId)
556
559
  // if its not the foreign key skip it, nothing to do
557
- if (table.primary && table.primary.indexOf(colName) !== -1) {
560
+ if (
561
+ !table ||
562
+ (table.primary && table.primary.indexOf(colName) !== -1)
563
+ ) {
558
564
  continue
559
565
  }
560
566
  for (let row of rows) {
@@ -566,7 +572,7 @@ module External {
566
572
  : DataSourceOperation.UPDATE
567
573
  const body = isMany ? null : { [colName]: null }
568
574
  promises.push(
569
- getDatasourceAndQuery(this.appId, {
575
+ getDatasourceAndQuery({
570
576
  endpoint: getEndpoint(tableId, op),
571
577
  body,
572
578
  filters,
@@ -605,20 +611,25 @@ module External {
605
611
  continue
606
612
  }
607
613
  const { tableName: linkTableName } = breakExternalTableId(field.tableId)
608
- const linkTable = this.tables[linkTableName]
609
- if (linkTable) {
610
- const linkedFields = extractRealFields(linkTable, fields)
611
- fields = fields.concat(linkedFields)
614
+ if (linkTableName) {
615
+ const linkTable = this.tables[linkTableName]
616
+ if (linkTable) {
617
+ const linkedFields = extractRealFields(linkTable, fields)
618
+ fields = fields.concat(linkedFields)
619
+ }
612
620
  }
613
621
  }
614
622
  return fields
615
623
  }
616
624
 
617
625
  async run(config: RunConfig) {
618
- const { appId, operation, tableId } = this
626
+ const { operation, tableId } = this
619
627
  let { datasourceId, tableName } = breakExternalTableId(tableId)
628
+ if (!tableName) {
629
+ throw "Unable to run without a table name"
630
+ }
620
631
  if (!this.datasource) {
621
- const db = new CouchDB(appId)
632
+ const db = getAppDB()
622
633
  this.datasource = await db.get(datasourceId)
623
634
  if (!this.datasource || !this.datasource.entities) {
624
635
  throw "No tables found, fetch tables before query."
@@ -670,7 +681,7 @@ module External {
670
681
  },
671
682
  }
672
683
  // can't really use response right now
673
- const response = await getDatasourceAndQuery(appId, json)
684
+ const response = await getDatasourceAndQuery(json)
674
685
  // handle many to many relationships now if we know the ID (could be auto increment)
675
686
  if (
676
687
  operation !== DataSourceOperation.READ &&
@@ -9,9 +9,9 @@ const {
9
9
  breakRowIdField,
10
10
  } = require("../../../integrations/utils")
11
11
  const ExternalRequest = require("./ExternalRequest")
12
- const CouchDB = require("../../../db")
12
+ const { getAppDB } = require("@budibase/backend-core/context")
13
13
 
14
- async function handleRequest(appId, operation, tableId, opts = {}) {
14
+ async function handleRequest(operation, tableId, opts = {}) {
15
15
  // make sure the filters are cleaned up, no empty strings for equals, fuzzy or string
16
16
  if (opts && opts.filters) {
17
17
  for (let filterField of NoEmptyFilterStrings) {
@@ -25,31 +25,27 @@ async function handleRequest(appId, operation, tableId, opts = {}) {
25
25
  }
26
26
  }
27
27
  }
28
- return new ExternalRequest(appId, operation, tableId, opts.datasource).run(
29
- opts
30
- )
28
+ return new ExternalRequest(operation, tableId, opts.datasource).run(opts)
31
29
  }
32
30
 
33
31
  exports.handleRequest = handleRequest
34
32
 
35
33
  exports.patch = async ctx => {
36
- const appId = ctx.appId
37
34
  const inputs = ctx.request.body
38
35
  const tableId = ctx.params.tableId
39
36
  const id = breakRowIdField(inputs._id)
40
37
  // don't save the ID to db
41
38
  delete inputs._id
42
- return handleRequest(appId, DataSourceOperation.UPDATE, tableId, {
39
+ return handleRequest(DataSourceOperation.UPDATE, tableId, {
43
40
  id,
44
41
  row: inputs,
45
42
  })
46
43
  }
47
44
 
48
45
  exports.save = async ctx => {
49
- const appId = ctx.appId
50
46
  const inputs = ctx.request.body
51
47
  const tableId = ctx.params.tableId
52
- return handleRequest(appId, DataSourceOperation.CREATE, tableId, {
48
+ return handleRequest(DataSourceOperation.CREATE, tableId, {
53
49
  row: inputs,
54
50
  })
55
51
  }
@@ -63,49 +59,35 @@ exports.fetchView = async ctx => {
63
59
  }
64
60
 
65
61
  exports.fetch = async ctx => {
66
- const appId = ctx.appId
67
62
  const tableId = ctx.params.tableId
68
- return handleRequest(appId, DataSourceOperation.READ, tableId)
63
+ return handleRequest(DataSourceOperation.READ, tableId)
69
64
  }
70
65
 
71
66
  exports.find = async ctx => {
72
- const appId = ctx.appId
73
67
  const id = ctx.params.rowId
74
68
  const tableId = ctx.params.tableId
75
- const response = await handleRequest(
76
- appId,
77
- DataSourceOperation.READ,
78
- tableId,
79
- {
80
- id,
81
- }
82
- )
69
+ const response = await handleRequest(DataSourceOperation.READ, tableId, {
70
+ id,
71
+ })
83
72
  return response ? response[0] : response
84
73
  }
85
74
 
86
75
  exports.destroy = async ctx => {
87
- const appId = ctx.appId
88
76
  const tableId = ctx.params.tableId
89
77
  const id = ctx.request.body._id
90
- const { row } = await handleRequest(
91
- appId,
92
- DataSourceOperation.DELETE,
93
- tableId,
94
- {
95
- id,
96
- }
97
- )
78
+ const { row } = await handleRequest(DataSourceOperation.DELETE, tableId, {
79
+ id,
80
+ })
98
81
  return { response: { ok: true }, row }
99
82
  }
100
83
 
101
84
  exports.bulkDestroy = async ctx => {
102
- const appId = ctx.appId
103
85
  const { rows } = ctx.request.body
104
86
  const tableId = ctx.params.tableId
105
87
  let promises = []
106
88
  for (let row of rows) {
107
89
  promises.push(
108
- handleRequest(appId, DataSourceOperation.DELETE, tableId, {
90
+ handleRequest(DataSourceOperation.DELETE, tableId, {
109
91
  id: breakRowIdField(row._id),
110
92
  })
111
93
  )
@@ -115,7 +97,6 @@ exports.bulkDestroy = async ctx => {
115
97
  }
116
98
 
117
99
  exports.search = async ctx => {
118
- const appId = ctx.appId
119
100
  const tableId = ctx.params.tableId
120
101
  const { paginate, query, ...params } = ctx.request.body
121
102
  let { bookmark, limit } = params
@@ -145,26 +126,21 @@ exports.search = async ctx => {
145
126
  [params.sort]: direction,
146
127
  }
147
128
  }
148
- const rows = await handleRequest(appId, DataSourceOperation.READ, tableId, {
129
+ const rows = await handleRequest(DataSourceOperation.READ, tableId, {
149
130
  filters: query,
150
131
  sort,
151
132
  paginate: paginateObj,
152
133
  })
153
134
  let hasNextPage = false
154
135
  if (paginate && rows.length === limit) {
155
- const nextRows = await handleRequest(
156
- appId,
157
- DataSourceOperation.READ,
158
- tableId,
159
- {
160
- filters: query,
161
- sort,
162
- paginate: {
163
- limit: 1,
164
- page: bookmark * limit + 1,
165
- },
166
- }
167
- )
136
+ const nextRows = await handleRequest(DataSourceOperation.READ, tableId, {
137
+ filters: query,
138
+ sort,
139
+ paginate: {
140
+ limit: 1,
141
+ page: bookmark * limit + 1,
142
+ },
143
+ })
168
144
  hasNextPage = nextRows.length > 0
169
145
  }
170
146
  // need wrapper object for bookmarks etc when paginating
@@ -177,25 +153,19 @@ exports.validate = async () => {
177
153
  }
178
154
 
179
155
  exports.fetchEnrichedRow = async ctx => {
180
- const appId = ctx.appId
181
156
  const id = ctx.params.rowId
182
157
  const tableId = ctx.params.tableId
183
158
  const { datasourceId, tableName } = breakExternalTableId(tableId)
184
- const db = new CouchDB(appId)
159
+ const db = getAppDB()
185
160
  const datasource = await db.get(datasourceId)
186
161
  if (!datasource || !datasource.entities) {
187
162
  ctx.throw(400, "Datasource has not been configured for plus API.")
188
163
  }
189
164
  const tables = datasource.entities
190
- const response = await handleRequest(
191
- appId,
192
- DataSourceOperation.READ,
193
- tableId,
194
- {
195
- id,
196
- datasource,
197
- }
198
- )
165
+ const response = await handleRequest(DataSourceOperation.READ, tableId, {
166
+ id,
167
+ datasource,
168
+ })
199
169
  const table = tables[tableName]
200
170
  const row = response[0]
201
171
  // this seems like a lot of work, but basically we need to dig deeper for the enrich
@@ -214,7 +184,6 @@ exports.fetchEnrichedRow = async ctx => {
214
184
  // don't support composite keys right now
215
185
  const linkedIds = links.map(link => breakRowIdField(link._id)[0])
216
186
  row[fieldName] = await handleRequest(
217
- appId,
218
187
  DataSourceOperation.READ,
219
188
  linkedTableId,
220
189
  {