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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (320) hide show
  1. package/__mocks__/arangojs.ts +1 -1
  2. package/__mocks__/aws-sdk.ts +4 -4
  3. package/__mocks__/mongodb.ts +4 -5
  4. package/__mocks__/mssql.ts +3 -3
  5. package/__mocks__/node-fetch.ts +2 -1
  6. package/__mocks__/pg.ts +3 -5
  7. package/builder/assets/{index.82e12602.js → index.1b905242.js} +1 -1
  8. package/builder/index.html +1 -1
  9. package/coverage/clover.xml +1917 -1929
  10. package/coverage/coverage-final.json +54 -54
  11. package/coverage/lcov-report/api/controllers/analytics.js.html +1 -1
  12. package/coverage/lcov-report/api/controllers/apikeys.js.html +1 -1
  13. package/coverage/lcov-report/api/controllers/application.js.html +58 -37
  14. package/coverage/lcov-report/api/controllers/auth.js.html +11 -14
  15. package/coverage/lcov-report/api/controllers/automation.js.html +21 -51
  16. package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
  17. package/coverage/lcov-report/api/controllers/cloud.js.html +8 -11
  18. package/coverage/lcov-report/api/controllers/component.js.html +10 -13
  19. package/coverage/lcov-report/api/controllers/datasource.js.html +17 -23
  20. package/coverage/lcov-report/api/controllers/dev.js.html +6 -6
  21. package/coverage/lcov-report/api/controllers/index.html +52 -52
  22. package/coverage/lcov-report/api/controllers/integration.js.html +1 -1
  23. package/coverage/lcov-report/api/controllers/layout.js.html +4 -4
  24. package/coverage/lcov-report/api/controllers/metadata.js.html +6 -21
  25. package/coverage/lcov-report/api/controllers/migrations.js.html +1 -1
  26. package/coverage/lcov-report/api/controllers/permission.js.html +6 -6
  27. package/coverage/lcov-report/api/controllers/query/index.html +10 -10
  28. package/coverage/lcov-report/api/controllers/query/index.js.html +21 -18
  29. package/coverage/lcov-report/api/controllers/query/validation.js.html +1 -1
  30. package/coverage/lcov-report/api/controllers/role.js.html +9 -9
  31. package/coverage/lcov-report/api/controllers/routing.js.html +7 -10
  32. package/coverage/lcov-report/api/controllers/row/external.js.html +6 -12
  33. package/coverage/lcov-report/api/controllers/row/index.html +22 -22
  34. package/coverage/lcov-report/api/controllers/row/index.js.html +1 -1
  35. package/coverage/lcov-report/api/controllers/row/internal.js.html +37 -82
  36. package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +19 -25
  37. package/coverage/lcov-report/api/controllers/row/staticFormula.js.html +14 -17
  38. package/coverage/lcov-report/api/controllers/row/utils.js.html +15 -12
  39. package/coverage/lcov-report/api/controllers/screen.js.html +10 -16
  40. package/coverage/lcov-report/api/controllers/script.js.html +1 -1
  41. package/coverage/lcov-report/api/controllers/table/bulkFormula.js.html +20 -50
  42. package/coverage/lcov-report/api/controllers/table/external.js.html +15 -24
  43. package/coverage/lcov-report/api/controllers/table/index.html +37 -37
  44. package/coverage/lcov-report/api/controllers/table/index.js.html +7 -7
  45. package/coverage/lcov-report/api/controllers/table/internal.js.html +36 -45
  46. package/coverage/lcov-report/api/controllers/table/utils.js.html +40 -76
  47. package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
  48. package/coverage/lcov-report/api/controllers/user.js.html +26 -35
  49. package/coverage/lcov-report/api/controllers/view/exporters.js.html +1 -1
  50. package/coverage/lcov-report/api/controllers/view/index.html +16 -16
  51. package/coverage/lcov-report/api/controllers/view/index.js.html +15 -21
  52. package/coverage/lcov-report/api/controllers/view/utils.js.html +25 -10
  53. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +1 -1
  54. package/coverage/lcov-report/api/controllers/webhook.js.html +21 -15
  55. package/coverage/lcov-report/api/index.html +1 -1
  56. package/coverage/lcov-report/api/index.js.html +1 -1
  57. package/coverage/lcov-report/api/routes/analytics.js.html +1 -1
  58. package/coverage/lcov-report/api/routes/apikeys.js.html +1 -1
  59. package/coverage/lcov-report/api/routes/application.js.html +1 -1
  60. package/coverage/lcov-report/api/routes/auth.js.html +1 -1
  61. package/coverage/lcov-report/api/routes/automation.js.html +1 -1
  62. package/coverage/lcov-report/api/routes/backup.js.html +1 -1
  63. package/coverage/lcov-report/api/routes/cloud.js.html +1 -1
  64. package/coverage/lcov-report/api/routes/component.js.html +1 -1
  65. package/coverage/lcov-report/api/routes/datasource.js.html +1 -1
  66. package/coverage/lcov-report/api/routes/deploy.js.html +1 -1
  67. package/coverage/lcov-report/api/routes/dev.js.html +1 -1
  68. package/coverage/lcov-report/api/routes/index.html +1 -1
  69. package/coverage/lcov-report/api/routes/index.js.html +1 -1
  70. package/coverage/lcov-report/api/routes/integration.js.html +1 -1
  71. package/coverage/lcov-report/api/routes/layout.js.html +1 -1
  72. package/coverage/lcov-report/api/routes/metadata.js.html +1 -1
  73. package/coverage/lcov-report/api/routes/migrations.js.html +1 -1
  74. package/coverage/lcov-report/api/routes/permission.js.html +1 -1
  75. package/coverage/lcov-report/api/routes/query.js.html +1 -1
  76. package/coverage/lcov-report/api/routes/role.js.html +1 -1
  77. package/coverage/lcov-report/api/routes/routing.js.html +1 -1
  78. package/coverage/lcov-report/api/routes/row.js.html +1 -1
  79. package/coverage/lcov-report/api/routes/screen.js.html +1 -1
  80. package/coverage/lcov-report/api/routes/script.js.html +1 -1
  81. package/coverage/lcov-report/api/routes/static.js.html +1 -1
  82. package/coverage/lcov-report/api/routes/table.js.html +1 -1
  83. package/coverage/lcov-report/api/routes/templates.js.html +1 -1
  84. package/coverage/lcov-report/api/routes/user.js.html +1 -1
  85. package/coverage/lcov-report/api/routes/view.js.html +1 -1
  86. package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
  87. package/coverage/lcov-report/automations/actions.js.html +1 -1
  88. package/coverage/lcov-report/automations/automationUtils.js.html +4 -7
  89. package/coverage/lcov-report/automations/bullboard.js.html +1 -1
  90. package/coverage/lcov-report/automations/index.html +18 -18
  91. package/coverage/lcov-report/automations/index.js.html +1 -1
  92. package/coverage/lcov-report/automations/steps/bash.js.html +1 -1
  93. package/coverage/lcov-report/automations/steps/createRow.js.html +2 -5
  94. package/coverage/lcov-report/automations/steps/delay.js.html +1 -1
  95. package/coverage/lcov-report/automations/steps/deleteRow.js.html +1 -1
  96. package/coverage/lcov-report/automations/steps/discord.js.html +1 -1
  97. package/coverage/lcov-report/automations/steps/executeQuery.js.html +1 -1
  98. package/coverage/lcov-report/automations/steps/executeScript.js.html +1 -1
  99. package/coverage/lcov-report/automations/steps/filter.js.html +1 -1
  100. package/coverage/lcov-report/automations/steps/index.html +1 -1
  101. package/coverage/lcov-report/automations/steps/integromat.js.html +1 -1
  102. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +1 -1
  103. package/coverage/lcov-report/automations/steps/queryRows.js.html +1 -1
  104. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +1 -1
  105. package/coverage/lcov-report/automations/steps/serverLog.js.html +1 -1
  106. package/coverage/lcov-report/automations/steps/slack.js.html +1 -1
  107. package/coverage/lcov-report/automations/steps/updateRow.js.html +2 -2
  108. package/coverage/lcov-report/automations/steps/utils.js.html +1 -1
  109. package/coverage/lcov-report/automations/steps/zapier.js.html +1 -1
  110. package/coverage/lcov-report/automations/triggerInfo/app.js.html +1 -1
  111. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +1 -1
  112. package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
  113. package/coverage/lcov-report/automations/triggerInfo/index.js.html +1 -1
  114. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +1 -1
  115. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +1 -1
  116. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +1 -1
  117. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +1 -1
  118. package/coverage/lcov-report/automations/triggers.js.html +46 -40
  119. package/coverage/lcov-report/automations/utils.js.html +24 -12
  120. package/coverage/lcov-report/constants/index.html +1 -1
  121. package/coverage/lcov-report/constants/index.js.html +1 -1
  122. package/coverage/lcov-report/constants/layouts.js.html +1 -1
  123. package/coverage/lcov-report/constants/screens.js.html +1 -1
  124. package/coverage/lcov-report/db/client.js.html +18 -18
  125. package/coverage/lcov-report/db/inMemoryView.js.html +1 -1
  126. package/coverage/lcov-report/db/index.html +1 -1
  127. package/coverage/lcov-report/db/index.js.html +3 -3
  128. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +11 -23
  129. package/coverage/lcov-report/db/linkedRows/index.html +27 -27
  130. package/coverage/lcov-report/db/linkedRows/index.js.html +24 -66
  131. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +28 -28
  132. package/coverage/lcov-report/db/newid.js.html +1 -1
  133. package/coverage/lcov-report/db/utils.js.html +5 -5
  134. package/coverage/lcov-report/events/AutomationEmitter.js.html +1 -1
  135. package/coverage/lcov-report/events/index.html +1 -1
  136. package/coverage/lcov-report/events/index.js.html +1 -1
  137. package/coverage/lcov-report/events/utils.js.html +1 -1
  138. package/coverage/lcov-report/index.html +88 -88
  139. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
  140. package/coverage/lcov-report/integrations/tests/index.html +1 -1
  141. package/coverage/lcov-report/middleware/appInfo.js.html +1 -1
  142. package/coverage/lcov-report/middleware/authorized.js.html +21 -15
  143. package/coverage/lcov-report/middleware/builder.js.html +3 -3
  144. package/coverage/lcov-report/middleware/currentapp.js.html +72 -60
  145. package/coverage/lcov-report/middleware/index.html +28 -28
  146. package/coverage/lcov-report/middleware/joi-validator.js.html +1 -1
  147. package/coverage/lcov-report/middleware/resourceId.js.html +1 -1
  148. package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
  149. package/coverage/lcov-report/middleware/usageQuota.js.html +29 -29
  150. package/coverage/lcov-report/middleware/utils.js.html +2 -2
  151. package/coverage/lcov-report/threads/automation.js.html +30 -24
  152. package/coverage/lcov-report/threads/index.html +16 -16
  153. package/coverage/lcov-report/threads/index.js.html +1 -1
  154. package/coverage/lcov-report/threads/query.js.html +17 -17
  155. package/coverage/lcov-report/threads/utils.js.html +1 -1
  156. package/coverage/lcov-report/utilities/bcrypt.js.html +1 -1
  157. package/coverage/lcov-report/utilities/budibaseDir.js.html +1 -1
  158. package/coverage/lcov-report/utilities/centralPath.js.html +1 -1
  159. package/coverage/lcov-report/utilities/csvParser.js.html +1 -1
  160. package/coverage/lcov-report/utilities/global.js.html +44 -35
  161. package/coverage/lcov-report/utilities/index.html +27 -27
  162. package/coverage/lcov-report/utilities/index.js.html +40 -70
  163. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +1 -1
  164. package/coverage/lcov-report/utilities/queue/index.html +1 -1
  165. package/coverage/lcov-report/utilities/routing/index.html +1 -1
  166. package/coverage/lcov-report/utilities/routing/index.js.html +7 -7
  167. package/coverage/lcov-report/utilities/rowProcessor/index.html +11 -11
  168. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +16 -58
  169. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +1 -1
  170. package/coverage/lcov-report/utilities/scriptRunner.js.html +1 -1
  171. package/coverage/lcov-report/utilities/security.js.html +1 -1
  172. package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
  173. package/coverage/lcov-report/utilities/usageQuota/index.html +1 -1
  174. package/coverage/lcov-report/utilities/usageQuota/index.js.html +5 -2
  175. package/coverage/lcov-report/utilities/usageQuota/rows.js.html +5 -2
  176. package/coverage/lcov-report/utilities/usageQuota/usageQuoteReset.js.html +1 -1
  177. package/coverage/lcov-report/utilities/users.js.html +5 -5
  178. package/coverage/lcov-report/utilities/workerRequests.js.html +5 -5
  179. package/coverage/lcov.info +3189 -3198
  180. package/dist/api/controllers/application.js +31 -28
  181. package/dist/api/controllers/auth.js +4 -5
  182. package/dist/api/controllers/automation.js +14 -19
  183. package/dist/api/controllers/cloud.js +2 -3
  184. package/dist/api/controllers/component.js +3 -4
  185. package/dist/api/controllers/datasource.js +9 -10
  186. package/dist/api/controllers/deploy/Deployment.js +3 -6
  187. package/dist/api/controllers/deploy/index.js +12 -13
  188. package/dist/api/controllers/dev.js +5 -5
  189. package/dist/api/controllers/layout.js +3 -3
  190. package/dist/api/controllers/metadata.js +4 -4
  191. package/dist/api/controllers/permission.js +4 -4
  192. package/dist/api/controllers/query/import/index.js +4 -6
  193. package/dist/api/controllers/query/index.js +11 -10
  194. package/dist/api/controllers/role.js +5 -5
  195. package/dist/api/controllers/routing.js +5 -6
  196. package/dist/api/controllers/row/ExternalRequest.js +76 -63
  197. package/dist/api/controllers/row/external.js +4 -4
  198. package/dist/api/controllers/row/internal.js +29 -44
  199. package/dist/api/controllers/row/internalSearch.js +11 -13
  200. package/dist/api/controllers/row/staticFormula.js +11 -11
  201. package/dist/api/controllers/row/utils.js +7 -6
  202. package/dist/api/controllers/screen.js +5 -7
  203. package/dist/api/controllers/static/index.js +4 -4
  204. package/dist/api/controllers/table/bulkFormula.js +14 -15
  205. package/dist/api/controllers/table/external.js +7 -10
  206. package/dist/api/controllers/table/index.js +5 -5
  207. package/dist/api/controllers/table/internal.js +16 -19
  208. package/dist/api/controllers/table/utils.js +29 -31
  209. package/dist/api/controllers/user.js +16 -20
  210. package/dist/api/controllers/view/index.js +8 -10
  211. package/dist/api/controllers/view/utils.js +9 -4
  212. package/dist/api/controllers/webhook.js +10 -8
  213. package/dist/api/routes/tests/utilities/TestFunctions.js +37 -17
  214. package/dist/automations/automationUtils.js +2 -3
  215. package/dist/automations/steps/createRow.js +1 -1
  216. package/dist/automations/steps/updateRow.js +1 -1
  217. package/dist/automations/triggers.js +27 -25
  218. package/dist/automations/utils.js +10 -5
  219. package/dist/db/linkedRows/LinkController.js +3 -7
  220. package/dist/db/linkedRows/index.js +16 -26
  221. package/dist/db/linkedRows/linkUtils.js +6 -6
  222. package/dist/db/views/staticViews.js +9 -10
  223. package/dist/environment.js +2 -1
  224. package/dist/integrations/utils.js +3 -0
  225. package/dist/middleware/authorized.js +5 -3
  226. package/dist/middleware/builder.js +2 -2
  227. package/dist/middleware/currentapp.js +41 -37
  228. package/dist/middleware/usageQuota.js +2 -2
  229. package/dist/migrations/functions/appUrls.js +11 -2
  230. package/dist/migrations/functions/usageQuotas/syncApps.js +7 -9
  231. package/dist/migrations/functions/usageQuotas/syncRows.js +7 -9
  232. package/dist/package.json +4 -4
  233. package/dist/tests/utilities/TestConfiguration.js +67 -44
  234. package/dist/threads/automation.js +13 -11
  235. package/dist/threads/query.js +11 -11
  236. package/dist/tsconfig.tsbuildinfo +1 -1
  237. package/dist/utilities/fileSystem/index.js +4 -3
  238. package/dist/utilities/global.js +15 -12
  239. package/dist/utilities/index.js +7 -17
  240. package/dist/utilities/routing/index.js +5 -5
  241. package/dist/utilities/rowProcessor/index.js +9 -10
  242. package/dist/utilities/usageQuota/index.js +1 -0
  243. package/dist/utilities/usageQuota/rows.js +1 -0
  244. package/dist/utilities/users.js +3 -3
  245. package/dist/utilities/workerRequests.js +4 -4
  246. package/package.json +5 -5
  247. package/scripts/likeCypress.ts +1 -1
  248. package/src/api/controllers/application.js +35 -28
  249. package/src/api/controllers/auth.js +4 -5
  250. package/src/api/controllers/automation.js +13 -23
  251. package/src/api/controllers/cloud.js +2 -3
  252. package/src/api/controllers/component.js +3 -4
  253. package/src/api/controllers/datasource.js +9 -11
  254. package/src/api/controllers/deploy/Deployment.js +3 -7
  255. package/src/api/controllers/deploy/index.js +20 -13
  256. package/src/api/controllers/dev.js +5 -5
  257. package/src/api/controllers/layout.js +3 -3
  258. package/src/api/controllers/metadata.js +4 -9
  259. package/src/api/controllers/permission.js +4 -4
  260. package/src/api/controllers/query/import/index.ts +4 -6
  261. package/src/api/controllers/query/import/tests/index.spec.js +2 -1
  262. package/src/api/controllers/query/index.js +11 -10
  263. package/src/api/controllers/role.js +5 -5
  264. package/src/api/controllers/routing.js +5 -6
  265. package/src/api/controllers/row/ExternalRequest.ts +53 -42
  266. package/src/api/controllers/row/external.js +4 -6
  267. package/src/api/controllers/row/internal.js +29 -44
  268. package/src/api/controllers/row/internalSearch.js +11 -13
  269. package/src/api/controllers/row/staticFormula.js +10 -11
  270. package/src/api/controllers/row/utils.js +7 -6
  271. package/src/api/controllers/screen.js +5 -7
  272. package/src/api/controllers/static/index.js +4 -4
  273. package/src/api/controllers/table/bulkFormula.js +13 -23
  274. package/src/api/controllers/table/external.js +7 -10
  275. package/src/api/controllers/table/index.js +5 -5
  276. package/src/api/controllers/table/internal.js +18 -21
  277. package/src/api/controllers/table/utils.js +29 -41
  278. package/src/api/controllers/user.js +17 -20
  279. package/src/api/controllers/view/index.js +8 -10
  280. package/src/api/controllers/view/utils.js +9 -4
  281. package/src/api/controllers/webhook.js +10 -8
  282. package/src/api/routes/tests/automation.spec.js +1 -0
  283. package/src/api/routes/tests/misc.spec.js +0 -1
  284. package/src/api/routes/tests/routing.spec.js +21 -12
  285. package/src/api/routes/tests/row.spec.js +7 -4
  286. package/src/api/routes/tests/utilities/TestFunctions.js +39 -17
  287. package/src/automations/automationUtils.js +2 -3
  288. package/src/automations/steps/createRow.js +0 -1
  289. package/src/automations/steps/updateRow.js +1 -1
  290. package/src/automations/triggers.js +33 -31
  291. package/src/automations/utils.js +9 -5
  292. package/src/db/linkedRows/LinkController.js +3 -7
  293. package/src/db/linkedRows/index.js +16 -30
  294. package/src/db/linkedRows/linkUtils.js +6 -6
  295. package/src/db/tests/linkController.spec.js +0 -1
  296. package/src/db/tests/linkTests.spec.js +5 -6
  297. package/src/db/views/staticViews.js +8 -10
  298. package/src/environment.js +2 -1
  299. package/src/integrations/utils.ts +4 -1
  300. package/src/middleware/authorized.js +5 -3
  301. package/src/middleware/builder.js +2 -2
  302. package/src/middleware/currentapp.js +50 -46
  303. package/src/middleware/tests/authorized.spec.js +7 -2
  304. package/src/middleware/tests/currentapp.spec.js +6 -0
  305. package/src/middleware/usageQuota.js +2 -2
  306. package/src/migrations/functions/appUrls.ts +11 -2
  307. package/src/migrations/functions/usageQuotas/syncApps.ts +5 -4
  308. package/src/migrations/functions/usageQuotas/syncRows.ts +5 -4
  309. package/src/tests/utilities/TestConfiguration.js +69 -50
  310. package/src/threads/automation.js +17 -15
  311. package/src/threads/query.js +12 -12
  312. package/src/utilities/fileSystem/index.js +4 -3
  313. package/src/utilities/global.js +15 -12
  314. package/src/utilities/index.js +7 -17
  315. package/src/utilities/routing/index.js +5 -5
  316. package/src/utilities/rowProcessor/index.js +9 -23
  317. package/src/utilities/usageQuota/index.js +1 -0
  318. package/src/utilities/usageQuota/rows.js +1 -0
  319. package/src/utilities/users.js +3 -3
  320. package/src/utilities/workerRequests.js +4 -4
@@ -9,9 +9,9 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  });
10
10
  };
11
11
  const { MetadataTypes } = require("../../constants");
12
- const CouchDB = require("../../db");
13
12
  const { generateMetadataID } = require("../../db/utils");
14
13
  const { saveEntityMetadata, deleteEntityMetadata } = require("../../utilities");
14
+ const { getAppDB } = require("@budibase/backend-core/context");
15
15
  exports.getTypes = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
16
16
  ctx.body = {
17
17
  types: MetadataTypes,
@@ -22,18 +22,18 @@ exports.saveMetadata = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
22
22
  if (type === MetadataTypes.AUTOMATION_TEST_HISTORY) {
23
23
  ctx.throw(400, "Cannot save automation history type");
24
24
  }
25
- ctx.body = yield saveEntityMetadata(ctx.appId, type, entityId, ctx.request.body);
25
+ ctx.body = yield saveEntityMetadata(type, entityId, ctx.request.body);
26
26
  });
27
27
  exports.deleteMetadata = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
28
28
  const { type, entityId } = ctx.params;
29
- yield deleteEntityMetadata(ctx.appId, type, entityId);
29
+ yield deleteEntityMetadata(type, entityId);
30
30
  ctx.body = {
31
31
  message: "Metadata deleted successfully",
32
32
  };
33
33
  });
34
34
  exports.getMetadata = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
35
35
  const { type, entityId } = ctx.params;
36
- const db = new CouchDB(ctx.appId);
36
+ const db = getAppDB();
37
37
  const id = generateMetadataID(type, entityId);
38
38
  try {
39
39
  ctx.body = yield db.get(id);
@@ -11,9 +11,9 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
11
11
  const { getBuiltinPermissions } = require("@budibase/backend-core/permissions");
12
12
  const { isBuiltin, getDBRoleID, getExternalRoleID, getBuiltinRoles, } = require("@budibase/backend-core/roles");
13
13
  const { getRoleParams } = require("../../db/utils");
14
- const CouchDB = require("../../db");
15
14
  const { CURRENTLY_SUPPORTED_LEVELS, getBasePermissions, } = require("../../utilities/security");
16
15
  const { removeFromArray } = require("../../utilities");
16
+ const { getAppDB } = require("@budibase/backend-core/context");
17
17
  const PermissionUpdateType = {
18
18
  REMOVE: "remove",
19
19
  ADD: "add",
@@ -30,7 +30,7 @@ function getAllDBRoles(db) {
30
30
  }
31
31
  function updatePermissionOnRole(appId, { roleId, resourceId, level }, updateType) {
32
32
  return __awaiter(this, void 0, void 0, function* () {
33
- const db = new CouchDB(appId);
33
+ const db = getAppDB();
34
34
  const remove = updateType === PermissionUpdateType.REMOVE;
35
35
  const isABuiltin = isBuiltin(roleId);
36
36
  const dbRoleId = getDBRoleID(roleId);
@@ -93,7 +93,7 @@ exports.fetchLevels = function (ctx) {
93
93
  };
94
94
  exports.fetch = function (ctx) {
95
95
  return __awaiter(this, void 0, void 0, function* () {
96
- const db = new CouchDB(ctx.appId);
96
+ const db = getAppDB();
97
97
  const roles = yield getAllDBRoles(db);
98
98
  let permissions = {};
99
99
  // create an object with structure role ID -> resource ID -> level
@@ -121,7 +121,7 @@ exports.fetch = function (ctx) {
121
121
  exports.getResourcePerms = function (ctx) {
122
122
  return __awaiter(this, void 0, void 0, function* () {
123
123
  const resourceId = ctx.params.resourceId;
124
- const db = new CouchDB(ctx.appId);
124
+ const db = getAppDB();
125
125
  const body = yield db.allDocs(getRoleParams(null, {
126
126
  include_docs: true,
127
127
  }));
@@ -8,16 +8,14 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  step((generator = generator.apply(thisArg, _arguments || [])).next());
9
9
  });
10
10
  };
11
- var __importDefault = (this && this.__importDefault) || function (mod) {
12
- return (mod && mod.__esModule) ? mod : { "default": mod };
13
- };
14
11
  Object.defineProperty(exports, "__esModule", { value: true });
15
12
  exports.RestImporter = void 0;
16
- const db_1 = __importDefault(require("../../../../db"));
17
13
  const validation_1 = require("../validation");
18
14
  const utils_1 = require("../../../../db/utils");
19
15
  const openapi2_1 = require("./sources/openapi2");
20
16
  const curl_1 = require("./sources/curl");
17
+ // @ts-ignore
18
+ const context_1 = require("@budibase/backend-core/context");
21
19
  class RestImporter {
22
20
  constructor(data) {
23
21
  this.init = () => __awaiter(this, void 0, void 0, function* () {
@@ -31,7 +29,7 @@ class RestImporter {
31
29
  this.getInfo = () => __awaiter(this, void 0, void 0, function* () {
32
30
  return this.source.getInfo();
33
31
  });
34
- this.importQueries = (appId, datasourceId) => __awaiter(this, void 0, void 0, function* () {
32
+ this.importQueries = (datasourceId) => __awaiter(this, void 0, void 0, function* () {
35
33
  // constuct the queries
36
34
  let queries = yield this.source.getQueries(datasourceId);
37
35
  // validate queries
@@ -51,7 +49,7 @@ class RestImporter {
51
49
  return query;
52
50
  });
53
51
  // persist queries
54
- const db = new db_1.default(appId);
52
+ const db = context_1.getAppDB();
55
53
  const response = yield db.bulkDocs(queries);
56
54
  // create index to seperate queries and errors
57
55
  const queryIndex = queries.reduce((acc, query) => {
@@ -8,7 +8,6 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  step((generator = generator.apply(thisArg, _arguments || [])).next());
9
9
  });
10
10
  };
11
- const CouchDB = require("../../../db");
12
11
  const { generateQueryID, getQueryParams, isProdAppID, } = require("../../../db/utils");
13
12
  const { BaseQueryVerbs } = require("../../../constants");
14
13
  const { Thread, ThreadType } = require("../../../threads");
@@ -16,6 +15,7 @@ const { save: saveDatasource } = require("../datasource");
16
15
  const { RestImporter } = require("./import");
17
16
  const { invalidateDynamicVariables } = require("../../../threads/utils");
18
17
  const environment = require("../../../environment");
18
+ const { getAppDB } = require("@budibase/backend-core/context");
19
19
  const Runner = new Thread(ThreadType.QUERY, {
20
20
  timeoutMs: environment.QUERY_THREAD_TIMEOUT || 10000,
21
21
  });
@@ -32,7 +32,7 @@ function enrichQueries(input) {
32
32
  }
33
33
  exports.fetch = function (ctx) {
34
34
  return __awaiter(this, void 0, void 0, function* () {
35
- const db = new CouchDB(ctx.appId);
35
+ const db = getAppDB();
36
36
  const body = yield db.allDocs(getQueryParams(null, {
37
37
  include_docs: true,
38
38
  }));
@@ -67,13 +67,13 @@ exports.import = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
67
67
  // use existing datasource
68
68
  datasourceId = body.datasourceId;
69
69
  }
70
- const importResult = yield importer.importQueries(ctx.appId, datasourceId);
70
+ const importResult = yield importer.importQueries(datasourceId);
71
71
  ctx.body = Object.assign(Object.assign({}, importResult), { datasourceId });
72
72
  ctx.status = 200;
73
73
  });
74
74
  exports.save = function (ctx) {
75
75
  return __awaiter(this, void 0, void 0, function* () {
76
- const db = new CouchDB(ctx.appId);
76
+ const db = getAppDB();
77
77
  const query = ctx.request.body;
78
78
  if (!query._id) {
79
79
  query._id = generateQueryID(query.datasourceId);
@@ -86,7 +86,7 @@ exports.save = function (ctx) {
86
86
  };
87
87
  exports.find = function (ctx) {
88
88
  return __awaiter(this, void 0, void 0, function* () {
89
- const db = new CouchDB(ctx.appId);
89
+ const db = getAppDB();
90
90
  const query = enrichQueries(yield db.get(ctx.params.queryId));
91
91
  // remove properties that could be dangerous in real app
92
92
  if (isProdAppID(ctx.appId)) {
@@ -98,7 +98,7 @@ exports.find = function (ctx) {
98
98
  };
99
99
  exports.preview = function (ctx) {
100
100
  return __awaiter(this, void 0, void 0, function* () {
101
- const db = new CouchDB(ctx.appId);
101
+ const db = getAppDB();
102
102
  const datasource = yield db.get(ctx.request.body.datasourceId);
103
103
  // preview may not have a queryId as it hasn't been saved, but if it does
104
104
  // this stops dynamic variables from calling the same query
@@ -127,7 +127,7 @@ exports.preview = function (ctx) {
127
127
  };
128
128
  function execute(ctx, opts = { rowsOnly: false }) {
129
129
  return __awaiter(this, void 0, void 0, function* () {
130
- const db = new CouchDB(ctx.appId);
130
+ const db = getAppDB();
131
131
  const query = yield db.get(ctx.params.queryId);
132
132
  const datasource = yield db.get(query.datasourceId);
133
133
  const enrichedParameters = ctx.request.body.parameters || {};
@@ -173,7 +173,8 @@ exports.executeV2 = function (ctx) {
173
173
  return execute(ctx, { rowsOnly: false });
174
174
  });
175
175
  };
176
- const removeDynamicVariables = (db, queryId) => __awaiter(void 0, void 0, void 0, function* () {
176
+ const removeDynamicVariables = (queryId) => __awaiter(void 0, void 0, void 0, function* () {
177
+ const db = getAppDB();
177
178
  const query = yield db.get(queryId);
178
179
  const datasource = yield db.get(query.datasourceId);
179
180
  const dynamicVariables = datasource.config.dynamicVariables;
@@ -188,8 +189,8 @@ const removeDynamicVariables = (db, queryId) => __awaiter(void 0, void 0, void 0
188
189
  });
189
190
  exports.destroy = function (ctx) {
190
191
  return __awaiter(this, void 0, void 0, function* () {
191
- const db = new CouchDB(ctx.appId);
192
- yield removeDynamicVariables(db, ctx.params.queryId);
192
+ const db = getAppDB();
193
+ yield removeDynamicVariables(ctx.params.queryId);
193
194
  yield db.remove(ctx.params.queryId, ctx.params.revId);
194
195
  ctx.message = `Query deleted.`;
195
196
  ctx.status = 200;
@@ -8,9 +8,9 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  step((generator = generator.apply(thisArg, _arguments || [])).next());
9
9
  });
10
10
  };
11
- const CouchDB = require("../../db");
12
11
  const { Role, getRole, isBuiltin, getAllRoles, } = require("@budibase/backend-core/roles");
13
12
  const { generateRoleID, getUserMetadataParams, InternalTables, } = require("../../db/utils");
13
+ const { getAppDB } = require("@budibase/backend-core/context");
14
14
  const UpdateRolesOptions = {
15
15
  CREATED: "created",
16
16
  REMOVED: "removed",
@@ -42,17 +42,17 @@ function updateRolesOnUserTable(db, roleId, updateOption) {
42
42
  }
43
43
  exports.fetch = function (ctx) {
44
44
  return __awaiter(this, void 0, void 0, function* () {
45
- ctx.body = yield getAllRoles(ctx.appId);
45
+ ctx.body = yield getAllRoles();
46
46
  });
47
47
  };
48
48
  exports.find = function (ctx) {
49
49
  return __awaiter(this, void 0, void 0, function* () {
50
- ctx.body = yield getRole(ctx.appId, ctx.params.roleId);
50
+ ctx.body = yield getRole(ctx.params.roleId);
51
51
  });
52
52
  };
53
53
  exports.save = function (ctx) {
54
54
  return __awaiter(this, void 0, void 0, function* () {
55
- const db = new CouchDB(ctx.appId);
55
+ const db = getAppDB();
56
56
  let { _id, name, inherits, permissionId } = ctx.request.body;
57
57
  if (!_id) {
58
58
  _id = generateRoleID();
@@ -75,7 +75,7 @@ exports.save = function (ctx) {
75
75
  };
76
76
  exports.destroy = function (ctx) {
77
77
  return __awaiter(this, void 0, void 0, function* () {
78
- const db = new CouchDB(ctx.appId);
78
+ const db = getAppDB();
79
79
  const roleId = ctx.params.roleId;
80
80
  if (isBuiltin(roleId)) {
81
81
  ctx.throw(400, "Cannot delete builtin role.");
@@ -40,13 +40,12 @@ Routing.prototype.addScreenId = function (fullpath, roleId, screenId) {
40
40
  };
41
41
  /**
42
42
  * Gets the full routing structure by querying the routing view and processing the result into the tree.
43
- * @param {string} appId The application to produce the routing structure for.
44
43
  * @returns {Promise<object>} The routing structure, this is the full structure designed for use in the builder,
45
44
  * if the client routing is required then the updateRoutingStructureForUserRole should be used.
46
45
  */
47
- function getRoutingStructure(appId) {
46
+ function getRoutingStructure() {
48
47
  return __awaiter(this, void 0, void 0, function* () {
49
- const screenRoutes = yield getRoutingInfo(appId);
48
+ const screenRoutes = yield getRoutingInfo();
50
49
  const routing = new Routing();
51
50
  for (let screenRoute of screenRoutes) {
52
51
  let fullpath = screenRoute.routing.route;
@@ -57,12 +56,12 @@ function getRoutingStructure(appId) {
57
56
  });
58
57
  }
59
58
  exports.fetch = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
60
- ctx.body = yield getRoutingStructure(ctx.appId);
59
+ ctx.body = yield getRoutingStructure();
61
60
  });
62
61
  exports.clientFetch = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
63
- const routing = yield getRoutingStructure(ctx.appId);
62
+ const routing = yield getRoutingStructure();
64
63
  let roleId = ctx.user.role._id;
65
- const roleIds = yield getUserRoleHierarchy(ctx.appId, roleId);
64
+ const roleIds = yield getUserRoleHierarchy(roleId);
66
65
  for (let topLevel of Object.values(routing.routes)) {
67
66
  for (let subpathKey of Object.keys(topLevel.subpaths)) {
68
67
  let found = false;
@@ -22,19 +22,21 @@ var __rest = (this && this.__rest) || function (s, e) {
22
22
  Object.defineProperty(exports, "__esModule", { value: true });
23
23
  const datasource_1 = require("../../../definitions/datasource");
24
24
  const utils_1 = require("../../../integrations/utils");
25
+ const utils_2 = require("./utils");
26
+ const constants_1 = require("../../../constants");
27
+ const utils_3 = require("../../../integrations/utils");
28
+ const string_templates_1 = require("@budibase/string-templates");
29
+ // @ts-ignore
30
+ const fp_1 = require("lodash/fp");
31
+ const utils_4 = require("../../../utilities/rowProcessor/utils");
32
+ // @ts-ignore
33
+ const context_1 = require("@budibase/backend-core/context");
25
34
  var External;
26
35
  (function (External) {
27
- const { getDatasourceAndQuery } = require("./utils");
28
- const { DataSourceOperation, FieldTypes, RelationshipTypes, } = require("../../../constants");
29
- const { breakExternalTableId, isSQL } = require("../../../integrations/utils");
30
- const { processObjectSync } = require("@budibase/string-templates");
31
- const { cloneDeep } = require("lodash/fp");
32
- const CouchDB = require("../../../db");
33
- const { processFormulas } = require("../../../utilities/rowProcessor/utils");
34
36
  function buildFilters(id, filters, table) {
35
37
  const primary = table.primary;
36
38
  // if passed in array need to copy for shifting etc
37
- let idCopy = cloneDeep(id);
39
+ let idCopy = fp_1.cloneDeep(id);
38
40
  if (filters) {
39
41
  // need to map over the filters and make sure the _id field isn't present
40
42
  for (let filter of Object.values(filters)) {
@@ -77,10 +79,10 @@ var External;
77
79
  */
78
80
  function cleanupConfig(config, table) {
79
81
  const primaryOptions = [
80
- FieldTypes.STRING,
81
- FieldTypes.LONGFORM,
82
- FieldTypes.OPTIONS,
83
- FieldTypes.NUMBER,
82
+ constants_1.FieldTypes.STRING,
83
+ constants_1.FieldTypes.LONGFORM,
84
+ constants_1.FieldTypes.OPTIONS,
85
+ constants_1.FieldTypes.NUMBER,
84
86
  ];
85
87
  // filter out fields which cannot be keys
86
88
  const fieldNames = Object.entries(table.schema)
@@ -133,7 +135,7 @@ var External;
133
135
  if (!tableId) {
134
136
  return {};
135
137
  }
136
- const { datasourceId, tableName } = breakExternalTableId(tableId);
138
+ const { datasourceId, tableName } = utils_3.breakExternalTableId(tableId);
137
139
  return {
138
140
  datasourceId,
139
141
  entityId: tableName,
@@ -157,7 +159,7 @@ var External;
157
159
  }
158
160
  function fixArrayTypes(row, table) {
159
161
  for (let [fieldName, schema] of Object.entries(table.schema)) {
160
- if (schema.type === FieldTypes.ARRAY &&
162
+ if (schema.type === constants_1.FieldTypes.ARRAY &&
161
163
  typeof row[fieldName] === "string") {
162
164
  try {
163
165
  row[fieldName] = JSON.parse(row[fieldName]);
@@ -174,9 +176,8 @@ var External;
174
176
  return (field.relationshipType && field.relationshipType.split("-")[0] === "one");
175
177
  }
176
178
  class ExternalRequest {
177
- constructor(appId, operation, tableId, datasource) {
179
+ constructor(operation, tableId, datasource) {
178
180
  this.tables = {};
179
- this.appId = appId;
180
181
  this.operation = operation;
181
182
  this.tableId = tableId;
182
183
  this.datasource = datasource;
@@ -188,8 +189,10 @@ var External;
188
189
  if (!tableId) {
189
190
  throw "Table ID is unknown, cannot find table";
190
191
  }
191
- const { tableName } = breakExternalTableId(tableId);
192
- return this.tables[tableName];
192
+ const { tableName } = utils_3.breakExternalTableId(tableId);
193
+ if (tableName) {
194
+ return this.tables[tableName];
195
+ }
193
196
  }
194
197
  inputProcessing(row, table) {
195
198
  if (!row) {
@@ -204,7 +207,7 @@ var External;
204
207
  if (row[key] == null ||
205
208
  newRow[key] ||
206
209
  field.autocolumn ||
207
- field.type === FieldTypes.FORMULA) {
210
+ field.type === constants_1.FieldTypes.FORMULA) {
208
211
  continue;
209
212
  }
210
213
  // if its an empty string then it means return the column to null (if possible)
@@ -213,17 +216,17 @@ var External;
213
216
  continue;
214
217
  }
215
218
  // parse floats/numbers
216
- if (field.type === FieldTypes.NUMBER && !isNaN(parseFloat(row[key]))) {
219
+ if (field.type === constants_1.FieldTypes.NUMBER && !isNaN(parseFloat(row[key]))) {
217
220
  newRow[key] = parseFloat(row[key]);
218
221
  }
219
222
  // if its not a link then just copy it over
220
- if (field.type !== FieldTypes.LINK) {
223
+ if (field.type !== constants_1.FieldTypes.LINK) {
221
224
  newRow[key] = row[key];
222
225
  continue;
223
226
  }
224
- const { tableName: linkTableName } = breakExternalTableId(field.tableId);
227
+ const { tableName: linkTableName } = utils_3.breakExternalTableId(field === null || field === void 0 ? void 0 : field.tableId);
225
228
  // table has to exist for many to many
226
- if (!this.tables[linkTableName]) {
229
+ if (!linkTableName || !this.tables[linkTableName]) {
227
230
  continue;
228
231
  }
229
232
  const linkTable = this.tables[linkTableName];
@@ -331,7 +334,7 @@ var External;
331
334
  // do this at end once its been added to the final rows
332
335
  finalRows = this.updateRelationshipColumns(row, finalRows, relationships);
333
336
  }
334
- return processFormulas(table, Object.values(finalRows));
337
+ return utils_4.processFormulas(table, Object.values(finalRows));
335
338
  }
336
339
  /**
337
340
  * Gets the list of relationship JSON structures based on the columns in the table,
@@ -341,12 +344,12 @@ var External;
341
344
  buildRelationships(table) {
342
345
  const relationships = [];
343
346
  for (let [fieldName, field] of Object.entries(table.schema)) {
344
- if (field.type !== FieldTypes.LINK) {
347
+ if (field.type !== constants_1.FieldTypes.LINK) {
345
348
  continue;
346
349
  }
347
- const { tableName: linkTableName } = breakExternalTableId(field.tableId);
350
+ const { tableName: linkTableName } = utils_3.breakExternalTableId(field.tableId);
348
351
  // no table to link to, this is not a valid relationships
349
- if (!this.tables[linkTableName]) {
352
+ if (!linkTableName || !this.tables[linkTableName]) {
350
353
  continue;
351
354
  }
352
355
  const linkTable = this.tables[linkTableName];
@@ -362,7 +365,7 @@ var External;
362
365
  column: fieldName,
363
366
  };
364
367
  if (field.through) {
365
- const { tableName: throughTableName } = breakExternalTableId(field.through);
368
+ const { tableName: throughTableName } = utils_3.breakExternalTableId(field.through);
366
369
  definition.through = throughTableName;
367
370
  // don't support composite keys for relationships
368
371
  definition.from = field.throughTo || table.primary[0];
@@ -381,21 +384,24 @@ var External;
381
384
  lookupRelations(tableId, row) {
382
385
  return __awaiter(this, void 0, void 0, function* () {
383
386
  const related = {};
384
- const { tableName } = breakExternalTableId(tableId);
387
+ const { tableName } = utils_3.breakExternalTableId(tableId);
388
+ if (!tableName) {
389
+ return related;
390
+ }
385
391
  const table = this.tables[tableName];
386
392
  // @ts-ignore
387
393
  const primaryKey = table.primary[0];
388
394
  // make a new request to get the row with all its relationships
389
395
  // we need this to work out if any relationships need removed
390
396
  for (let field of Object.values(table.schema)) {
391
- if (field.type !== FieldTypes.LINK ||
397
+ if (field.type !== constants_1.FieldTypes.LINK ||
392
398
  !field.fieldName ||
393
399
  isOneSide(field)) {
394
400
  continue;
395
401
  }
396
- const isMany = field.relationshipType === RelationshipTypes.MANY_TO_MANY;
402
+ const isMany = field.relationshipType === constants_1.RelationshipTypes.MANY_TO_MANY;
397
403
  const tableId = isMany ? field.through : field.tableId;
398
- const { tableName: relatedTableName } = breakExternalTableId(tableId);
404
+ const { tableName: relatedTableName } = utils_3.breakExternalTableId(tableId);
399
405
  // @ts-ignore
400
406
  const linkPrimaryKey = this.tables[relatedTableName].primary[0];
401
407
  const manyKey = field.throughTo || primaryKey;
@@ -404,8 +410,8 @@ var External;
404
410
  if (!lookupField || !row[lookupField]) {
405
411
  continue;
406
412
  }
407
- const response = yield getDatasourceAndQuery(this.appId, {
408
- endpoint: getEndpoint(tableId, DataSourceOperation.READ),
413
+ const response = yield utils_2.getDatasourceAndQuery({
414
+ endpoint: getEndpoint(tableId, constants_1.DataSourceOperation.READ),
409
415
  filters: {
410
416
  equal: {
411
417
  [fieldName]: row[lookupField],
@@ -431,26 +437,27 @@ var External;
431
437
  * all and then re-create, as theres no chance of losing data (e.g. delete succeed, but write fail).
432
438
  */
433
439
  handleManyRelationships(mainTableId, row, relationships) {
434
- var _a;
435
440
  return __awaiter(this, void 0, void 0, function* () {
436
- const { appId } = this;
437
441
  // if we're creating (in a through table) need to wipe the existing ones first
438
442
  const promises = [];
439
443
  const related = yield this.lookupRelations(mainTableId, row);
440
444
  for (let relationship of relationships) {
441
445
  const { key, tableId, isUpdate, id } = relationship, rest = __rest(relationship, ["key", "tableId", "isUpdate", "id"]);
442
- const body = processObjectSync(rest, row);
446
+ const body = string_templates_1.processObjectSync(rest, row, {});
443
447
  const linkTable = this.getTable(tableId);
444
448
  // @ts-ignore
445
- const linkPrimary = linkTable.primary[0];
446
- const rows = ((_a = related[key]) === null || _a === void 0 ? void 0 : _a.rows) || [];
449
+ const linkPrimary = linkTable === null || linkTable === void 0 ? void 0 : linkTable.primary[0];
450
+ if (!linkTable || !linkPrimary) {
451
+ return;
452
+ }
453
+ const rows = related[key].rows || [];
447
454
  const found = rows.find((row) => row[linkPrimary] === relationship.id ||
448
- row[linkPrimary] === body[linkPrimary]);
455
+ row[linkPrimary] === (body === null || body === void 0 ? void 0 : body[linkPrimary]));
449
456
  const operation = isUpdate
450
- ? DataSourceOperation.UPDATE
451
- : DataSourceOperation.CREATE;
457
+ ? constants_1.DataSourceOperation.UPDATE
458
+ : constants_1.DataSourceOperation.CREATE;
452
459
  if (!found) {
453
- promises.push(getDatasourceAndQuery(appId, {
460
+ promises.push(utils_2.getDatasourceAndQuery({
454
461
  endpoint: getEndpoint(tableId, operation),
455
462
  // if we're doing many relationships then we're writing, only one response
456
463
  body,
@@ -466,7 +473,8 @@ var External;
466
473
  for (let [colName, { isMany, rows, tableId }] of Object.entries(related)) {
467
474
  const table = this.getTable(tableId);
468
475
  // if its not the foreign key skip it, nothing to do
469
- if (table.primary && table.primary.indexOf(colName) !== -1) {
476
+ if (!table ||
477
+ (table.primary && table.primary.indexOf(colName) !== -1)) {
470
478
  continue;
471
479
  }
472
480
  for (let row of rows) {
@@ -474,10 +482,10 @@ var External;
474
482
  // safety check, if there are no filters on deletion bad things happen
475
483
  if (Object.keys(filters).length !== 0) {
476
484
  const op = isMany
477
- ? DataSourceOperation.DELETE
478
- : DataSourceOperation.UPDATE;
485
+ ? constants_1.DataSourceOperation.DELETE
486
+ : constants_1.DataSourceOperation.UPDATE;
479
487
  const body = isMany ? null : { [colName]: null };
480
- promises.push(getDatasourceAndQuery(this.appId, {
488
+ promises.push(utils_2.getDatasourceAndQuery({
481
489
  endpoint: getEndpoint(tableId, op),
482
490
  body,
483
491
  filters,
@@ -498,31 +506,36 @@ var External;
498
506
  buildFields(table, includeRelations = datasource_1.IncludeRelationships.INCLUDE) {
499
507
  function extractRealFields(table, existing = []) {
500
508
  return Object.entries(table.schema)
501
- .filter(column => column[1].type !== FieldTypes.LINK &&
502
- column[1].type !== FieldTypes.FORMULA &&
509
+ .filter(column => column[1].type !== constants_1.FieldTypes.LINK &&
510
+ column[1].type !== constants_1.FieldTypes.FORMULA &&
503
511
  !existing.find((field) => field === column[0]))
504
512
  .map(column => `${table.name}.${column[0]}`);
505
513
  }
506
514
  let fields = extractRealFields(table);
507
515
  for (let field of Object.values(table.schema)) {
508
- if (field.type !== FieldTypes.LINK || !includeRelations) {
516
+ if (field.type !== constants_1.FieldTypes.LINK || !includeRelations) {
509
517
  continue;
510
518
  }
511
- const { tableName: linkTableName } = breakExternalTableId(field.tableId);
512
- const linkTable = this.tables[linkTableName];
513
- if (linkTable) {
514
- const linkedFields = extractRealFields(linkTable, fields);
515
- fields = fields.concat(linkedFields);
519
+ const { tableName: linkTableName } = utils_3.breakExternalTableId(field.tableId);
520
+ if (linkTableName) {
521
+ const linkTable = this.tables[linkTableName];
522
+ if (linkTable) {
523
+ const linkedFields = extractRealFields(linkTable, fields);
524
+ fields = fields.concat(linkedFields);
525
+ }
516
526
  }
517
527
  }
518
528
  return fields;
519
529
  }
520
530
  run(config) {
521
531
  return __awaiter(this, void 0, void 0, function* () {
522
- const { appId, operation, tableId } = this;
523
- let { datasourceId, tableName } = breakExternalTableId(tableId);
532
+ const { operation, tableId } = this;
533
+ let { datasourceId, tableName } = utils_3.breakExternalTableId(tableId);
534
+ if (!tableName) {
535
+ throw "Unable to run without a table name";
536
+ }
524
537
  if (!this.datasource) {
525
- const db = new CouchDB(appId);
538
+ const db = context_1.getAppDB();
526
539
  this.datasource = yield db.get(datasourceId);
527
540
  if (!this.datasource || !this.datasource.entities) {
528
541
  throw "No tables found, fetch tables before query.";
@@ -530,7 +543,7 @@ var External;
530
543
  this.tables = this.datasource.entities;
531
544
  }
532
545
  const table = this.tables[tableName];
533
- let isSql = isSQL(this.datasource);
546
+ let isSql = utils_3.isSQL(this.datasource);
534
547
  if (!table) {
535
548
  throw `Unable to process query, table "${tableName}" not defined.`;
536
549
  }
@@ -541,7 +554,7 @@ var External;
541
554
  // clean up row on ingress using schema
542
555
  const processed = this.inputProcessing(row, table);
543
556
  row = processed.row;
544
- if (operation === DataSourceOperation.DELETE &&
557
+ if (operation === constants_1.DataSourceOperation.DELETE &&
545
558
  (filters == null || Object.keys(filters).length === 0)) {
546
559
  throw "Deletion must be filtered";
547
560
  }
@@ -569,15 +582,15 @@ var External;
569
582
  },
570
583
  };
571
584
  // can't really use response right now
572
- const response = yield getDatasourceAndQuery(appId, json);
585
+ const response = yield utils_2.getDatasourceAndQuery(json);
573
586
  // handle many to many relationships now if we know the ID (could be auto increment)
574
- if (operation !== DataSourceOperation.READ &&
587
+ if (operation !== constants_1.DataSourceOperation.READ &&
575
588
  processed.manyRelationships) {
576
589
  yield this.handleManyRelationships(table._id || "", response[0], processed.manyRelationships);
577
590
  }
578
591
  const output = this.outputProcessing(response, table, relationships);
579
592
  // if reading it'll just be an array of rows, return whole thing
580
- return operation === DataSourceOperation.READ && Array.isArray(response)
593
+ return operation === constants_1.DataSourceOperation.READ && Array.isArray(response)
581
594
  ? output
582
595
  : { row: output[0], table };
583
596
  });
@@ -22,8 +22,8 @@ var __rest = (this && this.__rest) || function (s, e) {
22
22
  const { DataSourceOperation, SortDirection, FieldTypes, NoEmptyFilterStrings, } = require("../../../constants");
23
23
  const { breakExternalTableId, breakRowIdField, } = require("../../../integrations/utils");
24
24
  const ExternalRequest = require("./ExternalRequest");
25
- const CouchDB = require("../../../db");
26
- function handleRequest(appId, operation, tableId, opts = {}) {
25
+ const { getAppDB } = require("@budibase/backend-core/context");
26
+ function handleRequest(operation, tableId, opts = {}) {
27
27
  return __awaiter(this, void 0, void 0, function* () {
28
28
  // make sure the filters are cleaned up, no empty strings for equals, fuzzy or string
29
29
  if (opts && opts.filters) {
@@ -38,7 +38,7 @@ function handleRequest(appId, operation, tableId, opts = {}) {
38
38
  }
39
39
  }
40
40
  }
41
- return new ExternalRequest(appId, operation, tableId, opts.datasource).run(opts);
41
+ return new ExternalRequest(operation, tableId, opts.datasource).run(opts);
42
42
  });
43
43
  }
44
44
  exports.handleRequest = handleRequest;
@@ -164,7 +164,7 @@ exports.fetchEnrichedRow = (ctx) => __awaiter(void 0, void 0, void 0, function*
164
164
  const id = ctx.params.rowId;
165
165
  const tableId = ctx.params.tableId;
166
166
  const { datasourceId, tableName } = breakExternalTableId(tableId);
167
- const db = new CouchDB(appId);
167
+ const db = getAppDB();
168
168
  const datasource = yield db.get(datasourceId);
169
169
  if (!datasource || !datasource.entities) {
170
170
  ctx.throw(400, "Datasource has not been configured for plus API.");