@budibase/server 1.0.35 → 1.0.39

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 (375) hide show
  1. package/__mocks__/node-fetch.ts +21 -0
  2. package/builder/assets/bb-spaceship.8f6e81e1.svg +227 -0
  3. package/builder/assets/index.3079d0f9.js +1348 -0
  4. package/builder/assets/{index.4fb3f887.css → index.39e01193.css} +1 -1
  5. package/builder/assets/{vendor.470042a4.js → vendor.f9faf6ab.js} +88 -88
  6. package/builder/index.html +3 -3
  7. package/coverage/clover.xml +1589 -1344
  8. package/coverage/coverage-final.json +75 -74
  9. package/coverage/lcov-report/api/controllers/analytics.js.html +1 -1
  10. package/coverage/lcov-report/api/controllers/apikeys.js.html +3 -3
  11. package/coverage/lcov-report/api/controllers/application.js.html +73 -64
  12. package/coverage/lcov-report/api/controllers/auth.js.html +2 -2
  13. package/coverage/lcov-report/api/controllers/automation.js.html +22 -10
  14. package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
  15. package/coverage/lcov-report/api/controllers/cloud.js.html +13 -4
  16. package/coverage/lcov-report/api/controllers/component.js.html +4 -4
  17. package/coverage/lcov-report/api/controllers/datasource.js.html +170 -68
  18. package/coverage/lcov-report/api/controllers/dev.js.html +3 -3
  19. package/coverage/lcov-report/api/controllers/hosting.js.html +3 -3
  20. package/coverage/lcov-report/api/controllers/index.html +39 -54
  21. package/coverage/lcov-report/api/controllers/integration.js.html +1 -1
  22. package/coverage/lcov-report/api/controllers/layout.js.html +1 -1
  23. package/coverage/lcov-report/api/controllers/metadata.js.html +1 -1
  24. package/coverage/lcov-report/api/controllers/permission.js.html +3 -3
  25. package/coverage/lcov-report/api/controllers/query/index.html +126 -0
  26. package/coverage/lcov-report/api/controllers/{query.js.html → query/index.js.html} +225 -120
  27. package/coverage/lcov-report/api/controllers/query/validation.js.html +206 -0
  28. package/coverage/lcov-report/api/controllers/role.js.html +2 -2
  29. package/coverage/lcov-report/api/controllers/routing.js.html +2 -2
  30. package/coverage/lcov-report/api/controllers/row/external.js.html +1 -1
  31. package/coverage/lcov-report/api/controllers/row/index.html +22 -22
  32. package/coverage/lcov-report/api/controllers/row/index.js.html +1 -1
  33. package/coverage/lcov-report/api/controllers/row/internal.js.html +38 -11
  34. package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +8 -5
  35. package/coverage/lcov-report/api/controllers/row/utils.js.html +29 -20
  36. package/coverage/lcov-report/api/controllers/screen.js.html +2 -2
  37. package/coverage/lcov-report/api/controllers/script.js.html +1 -1
  38. package/coverage/lcov-report/api/controllers/table/external.js.html +1 -1
  39. package/coverage/lcov-report/api/controllers/table/index.html +1 -1
  40. package/coverage/lcov-report/api/controllers/table/index.js.html +1 -1
  41. package/coverage/lcov-report/api/controllers/table/internal.js.html +1 -1
  42. package/coverage/lcov-report/api/controllers/table/utils.js.html +1 -1
  43. package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
  44. package/coverage/lcov-report/api/controllers/user.js.html +120 -12
  45. package/coverage/lcov-report/api/controllers/view/exporters.js.html +1 -1
  46. package/coverage/lcov-report/api/controllers/view/index.html +1 -1
  47. package/coverage/lcov-report/api/controllers/view/index.js.html +1 -1
  48. package/coverage/lcov-report/api/controllers/view/utils.js.html +1 -1
  49. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +1 -1
  50. package/coverage/lcov-report/api/controllers/webhook.js.html +19 -7
  51. package/coverage/lcov-report/api/index.html +1 -1
  52. package/coverage/lcov-report/api/index.js.html +6 -6
  53. package/coverage/lcov-report/api/routes/analytics.js.html +1 -1
  54. package/coverage/lcov-report/api/routes/apikeys.js.html +2 -2
  55. package/coverage/lcov-report/api/routes/application.js.html +2 -2
  56. package/coverage/lcov-report/api/routes/auth.js.html +1 -1
  57. package/coverage/lcov-report/api/routes/automation.js.html +2 -2
  58. package/coverage/lcov-report/api/routes/backup.js.html +2 -2
  59. package/coverage/lcov-report/api/routes/cloud.js.html +2 -2
  60. package/coverage/lcov-report/api/routes/component.js.html +2 -2
  61. package/coverage/lcov-report/api/routes/datasource.js.html +2 -2
  62. package/coverage/lcov-report/api/routes/deploy.js.html +2 -2
  63. package/coverage/lcov-report/api/routes/dev.js.html +2 -2
  64. package/coverage/lcov-report/api/routes/hosting.js.html +2 -2
  65. package/coverage/lcov-report/api/routes/index.html +9 -9
  66. package/coverage/lcov-report/api/routes/index.js.html +1 -1
  67. package/coverage/lcov-report/api/routes/integration.js.html +2 -2
  68. package/coverage/lcov-report/api/routes/layout.js.html +2 -2
  69. package/coverage/lcov-report/api/routes/metadata.js.html +2 -2
  70. package/coverage/lcov-report/api/routes/permission.js.html +12 -3
  71. package/coverage/lcov-report/api/routes/query.js.html +20 -86
  72. package/coverage/lcov-report/api/routes/role.js.html +2 -2
  73. package/coverage/lcov-report/api/routes/routing.js.html +2 -2
  74. package/coverage/lcov-report/api/routes/row.js.html +2 -2
  75. package/coverage/lcov-report/api/routes/screen.js.html +2 -2
  76. package/coverage/lcov-report/api/routes/script.js.html +2 -2
  77. package/coverage/lcov-report/api/routes/static.js.html +2 -2
  78. package/coverage/lcov-report/api/routes/table.js.html +2 -2
  79. package/coverage/lcov-report/api/routes/templates.js.html +2 -2
  80. package/coverage/lcov-report/api/routes/user.js.html +33 -3
  81. package/coverage/lcov-report/api/routes/view.js.html +2 -2
  82. package/coverage/lcov-report/api/routes/webhook.js.html +2 -2
  83. package/coverage/lcov-report/automations/actions.js.html +1 -1
  84. package/coverage/lcov-report/automations/automationUtils.js.html +1 -1
  85. package/coverage/lcov-report/automations/bullboard.js.html +2 -2
  86. package/coverage/lcov-report/automations/index.html +20 -20
  87. package/coverage/lcov-report/automations/index.js.html +1 -1
  88. package/coverage/lcov-report/automations/steps/bash.js.html +1 -1
  89. package/coverage/lcov-report/automations/steps/createRow.js.html +1 -1
  90. package/coverage/lcov-report/automations/steps/delay.js.html +1 -1
  91. package/coverage/lcov-report/automations/steps/deleteRow.js.html +1 -1
  92. package/coverage/lcov-report/automations/steps/discord.js.html +1 -1
  93. package/coverage/lcov-report/automations/steps/executeQuery.js.html +32 -8
  94. package/coverage/lcov-report/automations/steps/executeScript.js.html +1 -1
  95. package/coverage/lcov-report/automations/steps/filter.js.html +1 -1
  96. package/coverage/lcov-report/automations/steps/index.html +11 -11
  97. package/coverage/lcov-report/automations/steps/integromat.js.html +1 -1
  98. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +5 -8
  99. package/coverage/lcov-report/automations/steps/queryRows.js.html +1 -1
  100. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +1 -1
  101. package/coverage/lcov-report/automations/steps/serverLog.js.html +1 -1
  102. package/coverage/lcov-report/automations/steps/slack.js.html +1 -1
  103. package/coverage/lcov-report/automations/steps/updateRow.js.html +1 -1
  104. package/coverage/lcov-report/automations/steps/utils.js.html +1 -1
  105. package/coverage/lcov-report/automations/steps/zapier.js.html +1 -1
  106. package/coverage/lcov-report/automations/triggerInfo/app.js.html +1 -1
  107. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +1 -1
  108. package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
  109. package/coverage/lcov-report/automations/triggerInfo/index.js.html +1 -1
  110. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +1 -1
  111. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +1 -1
  112. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +1 -1
  113. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +1 -1
  114. package/coverage/lcov-report/automations/triggers.js.html +1 -1
  115. package/coverage/lcov-report/automations/utils.js.html +49 -16
  116. package/coverage/lcov-report/constants/index.html +1 -1
  117. package/coverage/lcov-report/constants/index.js.html +25 -25
  118. package/coverage/lcov-report/constants/layouts.js.html +1 -1
  119. package/coverage/lcov-report/constants/screens.js.html +2 -2
  120. package/coverage/lcov-report/db/client.js.html +19 -19
  121. package/coverage/lcov-report/db/inMemoryView.js.html +1 -1
  122. package/coverage/lcov-report/db/index.html +15 -15
  123. package/coverage/lcov-report/db/index.js.html +3 -3
  124. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +1 -1
  125. package/coverage/lcov-report/db/linkedRows/index.html +1 -1
  126. package/coverage/lcov-report/db/linkedRows/index.js.html +1 -1
  127. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +1 -1
  128. package/coverage/lcov-report/db/newid.js.html +4 -4
  129. package/coverage/lcov-report/db/utils.js.html +108 -81
  130. package/coverage/lcov-report/events/AutomationEmitter.js.html +1 -1
  131. package/coverage/lcov-report/events/index.html +1 -1
  132. package/coverage/lcov-report/events/index.js.html +1 -1
  133. package/coverage/lcov-report/events/utils.js.html +1 -1
  134. package/coverage/lcov-report/index.html +99 -84
  135. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
  136. package/coverage/lcov-report/integrations/tests/index.html +1 -1
  137. package/coverage/lcov-report/middleware/appInfo.js.html +1 -1
  138. package/coverage/lcov-report/middleware/authorized.js.html +12 -12
  139. package/coverage/lcov-report/middleware/builder.js.html +10 -10
  140. package/coverage/lcov-report/middleware/currentapp.js.html +48 -36
  141. package/coverage/lcov-report/middleware/index.html +1 -1
  142. package/coverage/lcov-report/middleware/joi-validator.js.html +11 -11
  143. package/coverage/lcov-report/middleware/resourceId.js.html +18 -18
  144. package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
  145. package/coverage/lcov-report/middleware/usageQuota.js.html +2 -2
  146. package/coverage/lcov-report/middleware/utils.js.html +2 -2
  147. package/coverage/lcov-report/threads/automation.js.html +3 -3
  148. package/coverage/lcov-report/threads/index.html +32 -32
  149. package/coverage/lcov-report/threads/index.js.html +12 -12
  150. package/coverage/lcov-report/threads/query.js.html +560 -65
  151. package/coverage/lcov-report/threads/utils.js.html +210 -15
  152. package/coverage/lcov-report/utilities/bcrypt.js.html +1 -1
  153. package/coverage/lcov-report/utilities/budibaseDir.js.html +2 -2
  154. package/coverage/lcov-report/utilities/centralPath.js.html +1 -1
  155. package/coverage/lcov-report/utilities/csvParser.js.html +1 -1
  156. package/coverage/lcov-report/utilities/global.js.html +28 -19
  157. package/coverage/lcov-report/utilities/index.html +19 -19
  158. package/coverage/lcov-report/utilities/index.js.html +70 -37
  159. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +2 -2
  160. package/coverage/lcov-report/utilities/queue/index.html +1 -1
  161. package/coverage/lcov-report/utilities/routing/index.html +1 -1
  162. package/coverage/lcov-report/utilities/routing/index.js.html +1 -1
  163. package/coverage/lcov-report/utilities/rowProcessor/index.html +19 -19
  164. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +247 -10
  165. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +1 -1
  166. package/coverage/lcov-report/utilities/scriptRunner.js.html +1 -1
  167. package/coverage/lcov-report/utilities/security.js.html +14 -5
  168. package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
  169. package/coverage/lcov-report/utilities/users.js.html +1 -1
  170. package/coverage/lcov-report/utilities/workerRequests.js.html +22 -22
  171. package/coverage/lcov.info +2735 -2313
  172. package/dist/api/controllers/apikeys.js +2 -2
  173. package/dist/api/controllers/application.js +4 -4
  174. package/dist/api/controllers/auth.js +1 -1
  175. package/dist/api/controllers/automation.js +7 -5
  176. package/dist/api/controllers/cloud.js +2 -2
  177. package/dist/api/controllers/datasource.js +29 -0
  178. package/dist/api/controllers/deploy/index.js +2 -2
  179. package/dist/api/controllers/dev.js +2 -2
  180. package/dist/api/controllers/hosting.js +2 -2
  181. package/dist/api/controllers/permission.js +2 -2
  182. package/dist/api/controllers/query/import/index.js +79 -0
  183. package/dist/api/controllers/query/import/sources/base/index.js +64 -0
  184. package/dist/api/controllers/query/import/sources/base/openapi.js +42 -0
  185. package/dist/api/controllers/query/import/sources/curl.js +96 -0
  186. package/dist/api/controllers/query/import/sources/openapi2.js +142 -0
  187. package/dist/api/controllers/query/import/sources/tests/openapi2/data/crud/crud.json +253 -0
  188. package/dist/api/controllers/query/import/sources/tests/openapi2/data/petstore/petstore.json +1054 -0
  189. package/dist/api/controllers/{query.js → query/index.js} +88 -56
  190. package/dist/api/controllers/query/validation.js +38 -0
  191. package/dist/api/controllers/role.js +1 -1
  192. package/dist/api/controllers/routing.js +1 -1
  193. package/dist/api/controllers/row/internal.js +14 -6
  194. package/dist/api/controllers/row/internalSearch.js +3 -2
  195. package/dist/api/controllers/row/utils.js +13 -6
  196. package/dist/api/controllers/screen.js +1 -1
  197. package/dist/api/controllers/user.js +40 -4
  198. package/dist/api/controllers/webhook.js +5 -1
  199. package/dist/api/index.js +1 -1
  200. package/dist/api/routes/apikeys.js +1 -1
  201. package/dist/api/routes/application.js +1 -1
  202. package/dist/api/routes/automation.js +1 -1
  203. package/dist/api/routes/backup.js +1 -1
  204. package/dist/api/routes/cloud.js +1 -1
  205. package/dist/api/routes/component.js +1 -1
  206. package/dist/api/routes/datasource.js +1 -1
  207. package/dist/api/routes/deploy.js +1 -1
  208. package/dist/api/routes/dev.js +1 -1
  209. package/dist/api/routes/hosting.js +1 -1
  210. package/dist/api/routes/integration.js +1 -1
  211. package/dist/api/routes/layout.js +1 -1
  212. package/dist/api/routes/metadata.js +1 -1
  213. package/dist/api/routes/permission.js +1 -1
  214. package/dist/api/routes/query.js +6 -34
  215. package/dist/api/routes/role.js +1 -1
  216. package/dist/api/routes/routing.js +1 -1
  217. package/dist/api/routes/row.js +1 -1
  218. package/dist/api/routes/screen.js +1 -1
  219. package/dist/api/routes/script.js +1 -1
  220. package/dist/api/routes/static.js +1 -1
  221. package/dist/api/routes/table.js +1 -1
  222. package/dist/api/routes/templates.js +1 -1
  223. package/dist/api/routes/tests/utilities/TestFunctions.js +1 -1
  224. package/dist/api/routes/user.js +4 -2
  225. package/dist/api/routes/view.js +1 -1
  226. package/dist/api/routes/webhook.js +1 -1
  227. package/dist/app.js +1 -1
  228. package/dist/automations/bullboard.js +1 -1
  229. package/dist/automations/steps/executeQuery.js +9 -2
  230. package/dist/automations/steps/outgoingWebhook.js +2 -3
  231. package/dist/automations/utils.js +11 -1
  232. package/dist/constants/index.js +3 -3
  233. package/dist/constants/screens.js +1 -1
  234. package/dist/db/client.js +1 -1
  235. package/dist/db/utils.js +9 -1
  236. package/dist/definitions/datasource.js +6 -1
  237. package/dist/integrations/base/sqlTable.js +1 -1
  238. package/dist/integrations/rest.js +259 -120
  239. package/dist/integrations/utils.js +40 -37
  240. package/dist/middleware/authorized.js +2 -2
  241. package/dist/middleware/builder.js +2 -2
  242. package/dist/middleware/currentapp.js +6 -6
  243. package/dist/middleware/usageQuota.js +1 -1
  244. package/dist/package.json +11 -4
  245. package/dist/tests/utilities/TestConfiguration.js +55 -8
  246. package/dist/tests/utilities/structures.js +2 -2
  247. package/dist/threads/automation.js +2 -2
  248. package/dist/threads/query.js +195 -38
  249. package/dist/threads/utils.js +62 -1
  250. package/dist/tsconfig.tsbuildinfo +1 -1
  251. package/dist/utilities/budibaseDir.js +1 -1
  252. package/dist/utilities/fileSystem/utilities.js +2 -1
  253. package/dist/utilities/global.js +5 -5
  254. package/dist/utilities/index.js +11 -1
  255. package/dist/utilities/redis.js +1 -1
  256. package/dist/utilities/rowProcessor/index.js +76 -0
  257. package/dist/utilities/security.js +2 -2
  258. package/dist/utilities/usageQuota.js +2 -2
  259. package/dist/utilities/workerRequests.js +3 -3
  260. package/package.json +12 -5
  261. package/scripts/replicateApp.js +1 -1
  262. package/src/api/controllers/apikeys.js +2 -2
  263. package/src/api/controllers/application.js +7 -4
  264. package/src/api/controllers/auth.js +1 -1
  265. package/src/api/controllers/automation.js +8 -4
  266. package/src/api/controllers/cloud.js +5 -2
  267. package/src/api/controllers/datasource.js +34 -0
  268. package/src/api/controllers/deploy/index.js +2 -2
  269. package/src/api/controllers/dev.js +2 -2
  270. package/src/api/controllers/hosting.js +2 -2
  271. package/src/api/controllers/permission.js +2 -2
  272. package/src/api/controllers/query/import/index.ts +85 -0
  273. package/src/api/controllers/query/import/sources/base/index.ts +87 -0
  274. package/src/api/controllers/query/import/sources/base/openapi.ts +24 -0
  275. package/src/api/controllers/query/import/sources/curl.ts +102 -0
  276. package/src/api/controllers/query/import/sources/openapi2.ts +163 -0
  277. package/src/api/controllers/query/import/sources/tests/curl/curl.spec.js +103 -0
  278. package/src/api/controllers/query/import/sources/tests/curl/data/delete.txt +1 -0
  279. package/src/api/controllers/query/import/sources/tests/curl/data/empty-body.txt +2 -0
  280. package/src/api/controllers/query/import/sources/tests/curl/data/get.txt +1 -0
  281. package/src/api/controllers/query/import/sources/tests/curl/data/headers.txt +3 -0
  282. package/src/api/controllers/query/import/sources/tests/curl/data/patch.txt +2 -0
  283. package/src/api/controllers/query/import/sources/tests/curl/data/path.txt +1 -0
  284. package/src/api/controllers/query/import/sources/tests/curl/data/post.txt +2 -0
  285. package/src/api/controllers/query/import/sources/tests/curl/data/put.txt +2 -0
  286. package/src/api/controllers/query/import/sources/tests/curl/data/query.txt +1 -0
  287. package/src/api/controllers/query/import/sources/tests/openapi2/data/crud/crud.json +253 -0
  288. package/src/api/controllers/query/import/sources/tests/openapi2/data/crud/crud.yaml +160 -0
  289. package/src/api/controllers/query/import/sources/tests/openapi2/data/petstore/petstore.json +1054 -0
  290. package/src/api/controllers/query/import/sources/tests/openapi2/data/petstore/petstore.yaml +711 -0
  291. package/src/api/controllers/query/import/sources/tests/openapi2/openapi2.spec.js +238 -0
  292. package/src/api/controllers/query/import/tests/index.spec.js +109 -0
  293. package/src/api/controllers/query/index.js +196 -0
  294. package/src/api/controllers/query/validation.js +42 -0
  295. package/src/api/controllers/role.js +1 -1
  296. package/src/api/controllers/routing.js +1 -1
  297. package/src/api/controllers/row/internal.js +14 -5
  298. package/src/api/controllers/row/internalSearch.js +3 -2
  299. package/src/api/controllers/row/utils.js +11 -8
  300. package/src/api/controllers/screen.js +1 -1
  301. package/src/api/controllers/user.js +39 -3
  302. package/src/api/controllers/webhook.js +5 -1
  303. package/src/api/index.js +1 -1
  304. package/src/api/routes/apikeys.js +1 -1
  305. package/src/api/routes/application.js +1 -1
  306. package/src/api/routes/automation.js +1 -1
  307. package/src/api/routes/backup.js +1 -1
  308. package/src/api/routes/cloud.js +1 -1
  309. package/src/api/routes/component.js +1 -1
  310. package/src/api/routes/datasource.js +1 -1
  311. package/src/api/routes/deploy.js +1 -1
  312. package/src/api/routes/dev.js +1 -1
  313. package/src/api/routes/hosting.js +1 -1
  314. package/src/api/routes/integration.js +1 -1
  315. package/src/api/routes/layout.js +1 -1
  316. package/src/api/routes/metadata.js +1 -1
  317. package/src/api/routes/permission.js +4 -1
  318. package/src/api/routes/query.js +14 -36
  319. package/src/api/routes/role.js +1 -1
  320. package/src/api/routes/routing.js +1 -1
  321. package/src/api/routes/row.js +1 -1
  322. package/src/api/routes/screen.js +1 -1
  323. package/src/api/routes/script.js +1 -1
  324. package/src/api/routes/static.js +1 -1
  325. package/src/api/routes/table.js +1 -1
  326. package/src/api/routes/templates.js +1 -1
  327. package/src/api/routes/tests/datasource.spec.js +45 -0
  328. package/src/api/routes/tests/permissions.spec.js +1 -1
  329. package/src/api/routes/tests/query.spec.js +70 -1
  330. package/src/api/routes/tests/role.spec.js +2 -2
  331. package/src/api/routes/tests/routing.spec.js +1 -1
  332. package/src/api/routes/tests/user.spec.js +1 -1
  333. package/src/api/routes/tests/utilities/TestFunctions.js +1 -1
  334. package/src/api/routes/user.js +11 -1
  335. package/src/api/routes/view.js +1 -1
  336. package/src/api/routes/webhook.js +1 -1
  337. package/src/app.ts +1 -1
  338. package/src/automations/bullboard.js +1 -1
  339. package/src/automations/steps/executeQuery.js +10 -2
  340. package/src/automations/steps/outgoingWebhook.js +2 -3
  341. package/src/automations/utils.js +12 -1
  342. package/src/constants/index.js +3 -3
  343. package/src/constants/screens.js +1 -1
  344. package/src/db/client.js +1 -1
  345. package/src/db/utils.js +10 -1
  346. package/src/definitions/common.ts +2 -16
  347. package/src/definitions/datasource.ts +98 -1
  348. package/src/integrations/base/IntegrationBase.ts +4 -4
  349. package/src/integrations/base/sqlTable.ts +1 -1
  350. package/src/integrations/rest.ts +311 -138
  351. package/src/integrations/tests/rest.spec.js +432 -21
  352. package/src/integrations/utils.ts +8 -7
  353. package/src/middleware/authorized.js +2 -2
  354. package/src/middleware/builder.js +2 -2
  355. package/src/middleware/currentapp.js +11 -7
  356. package/src/middleware/tests/authorized.spec.js +2 -2
  357. package/src/middleware/tests/currentapp.spec.js +35 -41
  358. package/src/middleware/tests/usageQuota.spec.js +1 -1
  359. package/src/middleware/usageQuota.js +1 -1
  360. package/src/tests/utilities/TestConfiguration.js +65 -8
  361. package/src/tests/utilities/structures.js +2 -2
  362. package/src/threads/automation.js +2 -2
  363. package/src/threads/query.js +204 -39
  364. package/src/threads/utils.js +66 -1
  365. package/src/utilities/budibaseDir.js +1 -1
  366. package/src/utilities/fileSystem/utilities.js +3 -1
  367. package/src/utilities/global.js +8 -5
  368. package/src/utilities/index.js +12 -1
  369. package/src/utilities/redis.js +1 -1
  370. package/src/utilities/rowProcessor/index.js +79 -0
  371. package/src/utilities/security.js +5 -2
  372. package/src/utilities/usageQuota.js +2 -2
  373. package/src/utilities/workerRequests.js +3 -3
  374. package/builder/assets/index.9ac33cf1.js +0 -1316
  375. package/src/api/controllers/query.js +0 -161
@@ -50,10 +50,10 @@ exports.validate = async ({ appId, tableId, row, table }) => {
50
50
  const errors = {}
51
51
  for (let fieldName of Object.keys(table.schema)) {
52
52
  const constraints = cloneDeep(table.schema[fieldName].constraints)
53
+ const type = table.schema[fieldName].type
53
54
  // special case for options, need to always allow unselected (null)
54
55
  if (
55
- table.schema[fieldName].type ===
56
- (FieldTypes.OPTIONS || FieldTypes.ARRAY) &&
56
+ (type === FieldTypes.OPTIONS || type === FieldTypes.ARRAY) &&
57
57
  constraints.inclusion
58
58
  ) {
59
59
  constraints.inclusion.push(null)
@@ -61,17 +61,20 @@ exports.validate = async ({ appId, tableId, row, table }) => {
61
61
  let res
62
62
 
63
63
  // Validate.js doesn't seem to handle array
64
- if (
65
- table.schema[fieldName].type === FieldTypes.ARRAY &&
66
- row[fieldName] &&
67
- row[fieldName].length
68
- ) {
64
+ if (type === FieldTypes.ARRAY && row[fieldName] && row[fieldName].length) {
69
65
  row[fieldName].map(val => {
70
66
  if (!constraints.inclusion.includes(val)) {
71
67
  errors[fieldName] = "Field not in list"
72
68
  }
73
69
  })
74
- } else if (table.schema[fieldName].type === FieldTypes.FORMULA) {
70
+ } else if (type === FieldTypes.JSON && typeof row[fieldName] === "string") {
71
+ // this should only happen if there is an error
72
+ try {
73
+ JSON.parse(row[fieldName])
74
+ } catch (err) {
75
+ errors[fieldName] = [`Contains invalid JSON`]
76
+ }
77
+ } else if (type === FieldTypes.FORMULA) {
75
78
  res = validateJs.single(
76
79
  processStringSync(table.schema[fieldName].formula, row),
77
80
  constraints
@@ -1,6 +1,6 @@
1
1
  const CouchDB = require("../../db")
2
2
  const { getScreenParams, generateScreenID } = require("../../db/utils")
3
- const { AccessController } = require("@budibase/auth/roles")
3
+ const { AccessController } = require("@budibase/backend-core/roles")
4
4
 
5
5
  exports.fetch = async ctx => {
6
6
  const appId = ctx.appId
@@ -2,15 +2,19 @@ const CouchDB = require("../../db")
2
2
  const {
3
3
  generateUserMetadataID,
4
4
  getUserMetadataParams,
5
+ generateUserFlagID,
5
6
  } = require("../../db/utils")
6
7
  const { InternalTables } = require("../../db/utils")
7
8
  const { getGlobalUsers, getRawGlobalUser } = require("../../utilities/global")
8
9
  const { getFullUser } = require("../../utilities/users")
9
10
  const { isEqual } = require("lodash")
10
- const { BUILTIN_ROLE_IDS } = require("@budibase/auth/roles")
11
- const { getDevelopmentAppID, getDeployedAppIDs } = require("@budibase/auth/db")
11
+ const { BUILTIN_ROLE_IDS } = require("@budibase/backend-core/roles")
12
+ const {
13
+ getDevelopmentAppID,
14
+ getDeployedAppIDs,
15
+ } = require("@budibase/backend-core/db")
12
16
  const { doesDatabaseExist } = require("../../utilities")
13
- const { UserStatus } = require("@budibase/auth/constants")
17
+ const { UserStatus } = require("@budibase/backend-core/constants")
14
18
 
15
19
  async function rawMetadata(db) {
16
20
  return (
@@ -195,3 +199,35 @@ exports.destroyMetadata = async function (ctx) {
195
199
  exports.findMetadata = async function (ctx) {
196
200
  ctx.body = await getFullUser(ctx, ctx.params.id)
197
201
  }
202
+
203
+ exports.setFlag = async function (ctx) {
204
+ const userId = ctx.user._id
205
+ const { flag, value } = ctx.request.body
206
+ if (!flag) {
207
+ ctx.throw(400, "Must supply a 'flag' field in request body.")
208
+ }
209
+ const flagDocId = generateUserFlagID(userId)
210
+ const db = new CouchDB(ctx.appId)
211
+ let doc
212
+ try {
213
+ doc = await db.get(flagDocId)
214
+ } catch (err) {
215
+ doc = { _id: flagDocId }
216
+ }
217
+ doc[flag] = value || true
218
+ await db.put(doc)
219
+ ctx.body = { message: "Flag set successfully" }
220
+ }
221
+
222
+ exports.getFlags = async function (ctx) {
223
+ const userId = ctx.user._id
224
+ const docId = generateUserFlagID(userId)
225
+ const db = new CouchDB(ctx.appId)
226
+ let doc
227
+ try {
228
+ doc = await db.get(docId)
229
+ } catch (err) {
230
+ doc = { _id: docId }
231
+ }
232
+ ctx.body = doc
233
+ }
@@ -3,7 +3,7 @@ const { generateWebhookID, getWebhookParams } = require("../../db/utils")
3
3
  const toJsonSchema = require("to-json-schema")
4
4
  const validate = require("jsonschema").validate
5
5
  const triggers = require("../../automations/triggers")
6
- const { getDeployedAppID } = require("@budibase/auth/db")
6
+ const { getDeployedAppID } = require("@budibase/backend-core/db")
7
7
 
8
8
  const AUTOMATION_DESCRIPTION = "Generated from Webhook Schema"
9
9
 
@@ -65,6 +65,10 @@ exports.buildSchema = async ctx => {
65
65
  let automation = await db.get(webhook.action.target)
66
66
  const autoOutputs = automation.definition.trigger.schema.outputs
67
67
  let properties = webhook.bodySchema.properties
68
+ // reset webhook outputs
69
+ autoOutputs.properties = {
70
+ body: autoOutputs.properties.body,
71
+ }
68
72
  for (let prop of Object.keys(properties)) {
69
73
  autoOutputs.properties[prop] = {
70
74
  type: properties[prop].type,
package/src/api/index.js CHANGED
@@ -4,7 +4,7 @@ const {
4
4
  auditLog,
5
5
  buildTenancyMiddleware,
6
6
  buildAppTenancyMiddleware,
7
- } = require("@budibase/auth").auth
7
+ } = require("@budibase/backend-core/auth")
8
8
  const currentApp = require("../middleware/currentapp")
9
9
  const compress = require("koa-compress")
10
10
  const zlib = require("zlib")
@@ -1,7 +1,7 @@
1
1
  const Router = require("@koa/router")
2
2
  const controller = require("../controllers/apikeys")
3
3
  const authorized = require("../../middleware/authorized")
4
- const { BUILDER } = require("@budibase/auth/permissions")
4
+ const { BUILDER } = require("@budibase/backend-core/permissions")
5
5
 
6
6
  const router = Router()
7
7
 
@@ -1,7 +1,7 @@
1
1
  const Router = require("@koa/router")
2
2
  const controller = require("../controllers/application")
3
3
  const authorized = require("../../middleware/authorized")
4
- const { BUILDER } = require("@budibase/auth/permissions")
4
+ const { BUILDER } = require("@budibase/backend-core/permissions")
5
5
  const usage = require("../../middleware/usageQuota")
6
6
 
7
7
  const router = Router()
@@ -6,7 +6,7 @@ const {
6
6
  BUILDER,
7
7
  PermissionLevels,
8
8
  PermissionTypes,
9
- } = require("@budibase/auth/permissions")
9
+ } = require("@budibase/backend-core/permissions")
10
10
  const Joi = require("joi")
11
11
  const { bodyResource, paramResource } = require("../../middleware/resourceId")
12
12
  const {
@@ -1,7 +1,7 @@
1
1
  const Router = require("@koa/router")
2
2
  const controller = require("../controllers/backup")
3
3
  const authorized = require("../../middleware/authorized")
4
- const { BUILDER } = require("@budibase/auth/permissions")
4
+ const { BUILDER } = require("@budibase/backend-core/permissions")
5
5
 
6
6
  const router = Router()
7
7
 
@@ -1,7 +1,7 @@
1
1
  const Router = require("@koa/router")
2
2
  const controller = require("../controllers/cloud")
3
3
  const authorized = require("../../middleware/authorized")
4
- const { BUILDER } = require("@budibase/auth/permissions")
4
+ const { BUILDER } = require("@budibase/backend-core/permissions")
5
5
 
6
6
  const router = Router()
7
7
 
@@ -1,7 +1,7 @@
1
1
  const Router = require("@koa/router")
2
2
  const controller = require("../controllers/component")
3
3
  const authorized = require("../../middleware/authorized")
4
- const { BUILDER } = require("@budibase/auth/permissions")
4
+ const { BUILDER } = require("@budibase/backend-core/permissions")
5
5
 
6
6
  const router = Router()
7
7
 
@@ -6,7 +6,7 @@ const {
6
6
  BUILDER,
7
7
  PermissionLevels,
8
8
  PermissionTypes,
9
- } = require("@budibase/auth/permissions")
9
+ } = require("@budibase/backend-core/permissions")
10
10
  const Joi = require("joi")
11
11
  const { DataSourceOperation } = require("../../constants")
12
12
 
@@ -1,7 +1,7 @@
1
1
  const Router = require("@koa/router")
2
2
  const controller = require("../controllers/deploy")
3
3
  const authorized = require("../../middleware/authorized")
4
- const { BUILDER } = require("@budibase/auth/permissions")
4
+ const { BUILDER } = require("@budibase/backend-core/permissions")
5
5
 
6
6
  const router = Router()
7
7
 
@@ -2,7 +2,7 @@ const Router = require("@koa/router")
2
2
  const controller = require("../controllers/dev")
3
3
  const env = require("../../environment")
4
4
  const authorized = require("../../middleware/authorized")
5
- const { BUILDER } = require("@budibase/auth/permissions")
5
+ const { BUILDER } = require("@budibase/backend-core/permissions")
6
6
 
7
7
  const router = Router()
8
8
 
@@ -1,7 +1,7 @@
1
1
  const Router = require("@koa/router")
2
2
  const controller = require("../controllers/hosting")
3
3
  const authorized = require("../../middleware/authorized")
4
- const { BUILDER } = require("@budibase/auth/permissions")
4
+ const { BUILDER } = require("@budibase/backend-core/permissions")
5
5
 
6
6
  const router = Router()
7
7
 
@@ -1,7 +1,7 @@
1
1
  const Router = require("@koa/router")
2
2
  const controller = require("../controllers/integration")
3
3
  const authorized = require("../../middleware/authorized")
4
- const { BUILDER } = require("@budibase/auth/permissions")
4
+ const { BUILDER } = require("@budibase/backend-core/permissions")
5
5
 
6
6
  const router = Router()
7
7
 
@@ -1,6 +1,6 @@
1
1
  const Router = require("@koa/router")
2
2
  const authorized = require("../../middleware/authorized")
3
- const { BUILDER } = require("@budibase/auth/permissions")
3
+ const { BUILDER } = require("@budibase/backend-core/permissions")
4
4
  const controller = require("../controllers/layout")
5
5
 
6
6
  const router = Router()
@@ -5,7 +5,7 @@ const {
5
5
  AppType,
6
6
  } = require("../../middleware/appInfo")
7
7
  const authorized = require("../../middleware/authorized")
8
- const { BUILDER } = require("@budibase/auth/permissions")
8
+ const { BUILDER } = require("@budibase/backend-core/permissions")
9
9
 
10
10
  const router = Router()
11
11
 
@@ -1,7 +1,10 @@
1
1
  const Router = require("@koa/router")
2
2
  const controller = require("../controllers/permission")
3
3
  const authorized = require("../../middleware/authorized")
4
- const { BUILDER, PermissionLevels } = require("@budibase/auth/permissions")
4
+ const {
5
+ BUILDER,
6
+ PermissionLevels,
7
+ } = require("@budibase/backend-core/permissions")
5
8
  const Joi = require("joi")
6
9
  const joiValidator = require("../../middleware/joi-validator")
7
10
 
@@ -1,53 +1,23 @@
1
1
  const Router = require("@koa/router")
2
2
  const queryController = require("../controllers/query")
3
3
  const authorized = require("../../middleware/authorized")
4
- const Joi = require("joi")
5
4
  const {
6
5
  PermissionLevels,
7
6
  PermissionTypes,
8
7
  BUILDER,
9
- } = require("@budibase/auth/permissions")
10
- const joiValidator = require("../../middleware/joi-validator")
8
+ } = require("@budibase/backend-core/permissions")
11
9
  const {
12
10
  bodyResource,
13
11
  bodySubResource,
14
12
  paramResource,
15
13
  } = require("../../middleware/resourceId")
14
+ const {
15
+ generateQueryPreviewValidation,
16
+ generateQueryValidation,
17
+ } = require("../controllers/query/validation")
16
18
 
17
19
  const router = Router()
18
20
 
19
- function generateQueryValidation() {
20
- // prettier-ignore
21
- return joiValidator.body(Joi.object({
22
- _id: Joi.string(),
23
- _rev: Joi.string(),
24
- name: Joi.string().required(),
25
- fields: Joi.object().required(),
26
- datasourceId: Joi.string().required(),
27
- readable: Joi.boolean(),
28
- parameters: Joi.array().items(Joi.object({
29
- name: Joi.string(),
30
- default: Joi.string().allow(""),
31
- })),
32
- queryVerb: Joi.string().allow().required(),
33
- extra: Joi.object().optional(),
34
- schema: Joi.object({}).required().unknown(true),
35
- transformer: Joi.string().optional(),
36
- }))
37
- }
38
-
39
- function generateQueryPreviewValidation() {
40
- // prettier-ignore
41
- return joiValidator.body(Joi.object({
42
- fields: Joi.object().required(),
43
- queryVerb: Joi.string().allow().required(),
44
- extra: Joi.object().optional(),
45
- datasourceId: Joi.string().required(),
46
- transformer: Joi.string().optional(),
47
- parameters: Joi.object({}).required().unknown(true)
48
- }))
49
- }
50
-
51
21
  router
52
22
  .get("/api/queries", authorized(BUILDER), queryController.fetch)
53
23
  .post(
@@ -57,6 +27,7 @@ router
57
27
  generateQueryValidation(),
58
28
  queryController.save
59
29
  )
30
+ .post("/api/queries/import", authorized(BUILDER), queryController.import)
60
31
  .post(
61
32
  "/api/queries/preview",
62
33
  bodyResource("datasourceId"),
@@ -70,11 +41,18 @@ router
70
41
  authorized(PermissionTypes.QUERY, PermissionLevels.READ),
71
42
  queryController.find
72
43
  )
44
+ // DEPRECATED - use new query endpoint for future work
73
45
  .post(
74
46
  "/api/queries/:queryId",
75
47
  paramResource("queryId"),
76
48
  authorized(PermissionTypes.QUERY, PermissionLevels.WRITE),
77
- queryController.execute
49
+ queryController.executeV1
50
+ )
51
+ .post(
52
+ "/api/v2/queries/:queryId",
53
+ paramResource("queryId"),
54
+ authorized(PermissionTypes.QUERY, PermissionLevels.WRITE),
55
+ queryController.executeV2
78
56
  )
79
57
  .delete(
80
58
  "/api/queries/:queryId/:revId",
@@ -7,7 +7,7 @@ const {
7
7
  BUILTIN_PERMISSION_IDS,
8
8
  BUILDER,
9
9
  PermissionLevels,
10
- } = require("@budibase/auth/permissions")
10
+ } = require("@budibase/backend-core/permissions")
11
11
 
12
12
  const router = Router()
13
13
 
@@ -1,6 +1,6 @@
1
1
  const Router = require("@koa/router")
2
2
  const authorized = require("../../middleware/authorized")
3
- const { BUILDER } = require("@budibase/auth/permissions")
3
+ const { BUILDER } = require("@budibase/backend-core/permissions")
4
4
  const controller = require("../controllers/routing")
5
5
 
6
6
  const router = Router()
@@ -9,7 +9,7 @@ const {
9
9
  const {
10
10
  PermissionLevels,
11
11
  PermissionTypes,
12
- } = require("@budibase/auth/permissions")
12
+ } = require("@budibase/backend-core/permissions")
13
13
 
14
14
  const router = Router()
15
15
 
@@ -1,7 +1,7 @@
1
1
  const Router = require("@koa/router")
2
2
  const controller = require("../controllers/screen")
3
3
  const authorized = require("../../middleware/authorized")
4
- const { BUILDER } = require("@budibase/auth/permissions")
4
+ const { BUILDER } = require("@budibase/backend-core/permissions")
5
5
  const joiValidator = require("../../middleware/joi-validator")
6
6
  const Joi = require("joi")
7
7
 
@@ -1,7 +1,7 @@
1
1
  const Router = require("@koa/router")
2
2
  const controller = require("../controllers/script")
3
3
  const authorized = require("../../middleware/authorized")
4
- const { BUILDER } = require("@budibase/auth/permissions")
4
+ const { BUILDER } = require("@budibase/backend-core/permissions")
5
5
 
6
6
  const router = Router()
7
7
 
@@ -6,7 +6,7 @@ const {
6
6
  BUILDER,
7
7
  PermissionTypes,
8
8
  PermissionLevels,
9
- } = require("@budibase/auth/permissions")
9
+ } = require("@budibase/backend-core/permissions")
10
10
  const env = require("../../environment")
11
11
  const { paramResource } = require("../../middleware/resourceId")
12
12
 
@@ -6,7 +6,7 @@ const {
6
6
  BUILDER,
7
7
  PermissionLevels,
8
8
  PermissionTypes,
9
- } = require("@budibase/auth/permissions")
9
+ } = require("@budibase/backend-core/permissions")
10
10
  const joiValidator = require("../../middleware/joi-validator")
11
11
  const Joi = require("joi")
12
12
 
@@ -1,7 +1,7 @@
1
1
  const Router = require("@koa/router")
2
2
  const controller = require("../controllers/templates")
3
3
  const authorized = require("../../middleware/authorized")
4
- const { BUILDER } = require("@budibase/auth/permissions")
4
+ const { BUILDER } = require("@budibase/backend-core/permissions")
5
5
 
6
6
  const router = Router()
7
7
 
@@ -4,6 +4,7 @@ let setup = require("./utilities")
4
4
  let { basicDatasource } = setup.structures
5
5
  let { checkBuilderEndpoint } = require("./utilities/TestFunctions")
6
6
  const pg = require("pg")
7
+ const { checkCacheForDynamicVariable } = require("../../../threads/utils")
7
8
 
8
9
  describe("/datasources", () => {
9
10
  let request = setup.getRequest()
@@ -31,6 +32,50 @@ describe("/datasources", () => {
31
32
  })
32
33
  })
33
34
 
35
+ describe("update", () => {
36
+ it("should update an existing datasource", async () => {
37
+ datasource.name = "Updated Test"
38
+ const res = await request
39
+ .put(`/api/datasources/${datasource._id}`)
40
+ .send(datasource)
41
+ .set(config.defaultHeaders())
42
+ .expect('Content-Type', /json/)
43
+ .expect(200)
44
+
45
+ expect(res.body.datasource.name).toEqual("Updated Test")
46
+ expect(res.body.errors).toBeUndefined()
47
+ })
48
+
49
+ describe("dynamic variables", () => {
50
+ async function preview(datasource, fields) {
51
+ return config.previewQuery(request, config, datasource, fields)
52
+ }
53
+
54
+ it("should invalidate changed or removed variables", async () => {
55
+ const { datasource, query } = await config.dynamicVariableDatasource()
56
+ // preview once to cache variables
57
+ await preview(datasource, { path: "www.test.com", queryString: "test={{ variable3 }}" })
58
+ // check variables in cache
59
+ let contents = await checkCacheForDynamicVariable(query._id, "variable3")
60
+ expect(contents.rows.length).toEqual(1)
61
+
62
+ // update the datasource to remove the variables
63
+ datasource.config.dynamicVariables = []
64
+ const res = await request
65
+ .put(`/api/datasources/${datasource._id}`)
66
+ .send(datasource)
67
+ .set(config.defaultHeaders())
68
+ .expect('Content-Type', /json/)
69
+ .expect(200)
70
+ expect(res.body.errors).toBeUndefined()
71
+
72
+ // check variables no longer in cache
73
+ contents = await checkCacheForDynamicVariable(query._id, "variable3")
74
+ expect(contents).toBe(null)
75
+ })
76
+ })
77
+ })
78
+
34
79
  describe("fetch", () => {
35
80
  it("returns all the datasources from the server", async () => {
36
81
  const res = await request
@@ -1,4 +1,4 @@
1
- const { BUILTIN_ROLE_IDS } = require("@budibase/auth/roles")
1
+ const { BUILTIN_ROLE_IDS } = require("@budibase/backend-core/roles")
2
2
  const setup = require("./utilities")
3
3
  const { basicRow } = setup.structures
4
4
 
@@ -1,15 +1,17 @@
1
1
  // Mock out postgres for this
2
2
  jest.mock("pg")
3
+ jest.mock("node-fetch")
3
4
 
4
5
  // Mock isProdAppID to we can later mock the implementation and pretend we are
5
6
  // using prod app IDs
6
- const authDb = require("@budibase/auth/db")
7
+ const authDb = require("@budibase/backend-core/db")
7
8
  const { isProdAppID } = authDb
8
9
  const mockIsProdAppID = jest.fn(isProdAppID)
9
10
  authDb.isProdAppID = mockIsProdAppID
10
11
 
11
12
  const setup = require("./utilities")
12
13
  const { checkBuilderEndpoint } = require("./utilities/TestFunctions")
14
+ const { checkCacheForDynamicVariable } = require("../../../threads/utils")
13
15
  const { basicQuery, basicDatasource } = setup.structures
14
16
 
15
17
  describe("/queries", () => {
@@ -226,4 +228,71 @@ describe("/queries", () => {
226
228
  .expect(400)
227
229
  })
228
230
  })
231
+
232
+ describe("variables", () => {
233
+
234
+ async function preview(datasource, fields) {
235
+ return config.previewQuery(request, config, datasource, fields)
236
+ }
237
+
238
+ it("should work with static variables", async () => {
239
+ const datasource = await config.restDatasource({
240
+ staticVariables: {
241
+ variable: "google",
242
+ variable2: "1",
243
+ },
244
+ })
245
+ const res = await preview(datasource, {
246
+ path: "www.{{ variable }}.com",
247
+ queryString: "test={{ variable2 }}",
248
+ })
249
+ // these responses come from the mock
250
+ expect(res.body.schemaFields).toEqual(["url", "opts", "value"])
251
+ expect(res.body.rows[0].url).toEqual("http://www.google.com?test=1")
252
+ })
253
+
254
+ it("should work with dynamic variables", async () => {
255
+ const { datasource } = await config.dynamicVariableDatasource()
256
+ const res = await preview(datasource, {
257
+ path: "www.google.com",
258
+ queryString: "test={{ variable3 }}",
259
+ })
260
+ expect(res.body.schemaFields).toEqual(["url", "opts", "value"])
261
+ expect(res.body.rows[0].url).toContain("doctype html")
262
+ })
263
+
264
+ it("check that it automatically retries on fail with cached dynamics", async () => {
265
+ const { datasource, query: base } = await config.dynamicVariableDatasource()
266
+ // preview once to cache
267
+ await preview(datasource, { path: "www.google.com", queryString: "test={{ variable3 }}" })
268
+ // check its in cache
269
+ const contents = await checkCacheForDynamicVariable(base._id, "variable3")
270
+ expect(contents.rows.length).toEqual(1)
271
+ const res = await preview(datasource, {
272
+ path: "www.failonce.com",
273
+ queryString: "test={{ variable3 }}",
274
+ })
275
+ expect(res.body.schemaFields).toEqual(["fails", "url", "opts"])
276
+ expect(res.body.rows[0].fails).toEqual(1)
277
+ })
278
+
279
+ it("deletes variables when linked query is deleted", async () => {
280
+ const { datasource, query: base } = await config.dynamicVariableDatasource()
281
+ // preview once to cache
282
+ await preview(datasource, { path: "www.google.com", queryString: "test={{ variable3 }}" })
283
+ // check its in cache
284
+ let contents = await checkCacheForDynamicVariable(base._id, "variable3")
285
+ expect(contents.rows.length).toEqual(1)
286
+
287
+ // delete the query
288
+ await request
289
+ .delete(`/api/queries/${base._id}/${base._rev}`)
290
+ .set(config.defaultHeaders())
291
+ .expect(200)
292
+
293
+ // check variables no longer in cache
294
+ contents = await checkCacheForDynamicVariable(base._id, "variable3")
295
+ expect(contents).toBe(null)
296
+ })
297
+ })
229
298
  })
@@ -1,7 +1,7 @@
1
- const { BUILTIN_ROLE_IDS } = require("@budibase/auth/roles")
1
+ const { BUILTIN_ROLE_IDS } = require("@budibase/backend-core/roles")
2
2
  const {
3
3
  BUILTIN_PERMISSION_IDS,
4
- } = require("@budibase/auth/permissions")
4
+ } = require("@budibase/backend-core/permissions")
5
5
  const setup = require("./utilities")
6
6
  const { basicRole } = setup.structures
7
7
 
@@ -1,7 +1,7 @@
1
1
  const setup = require("./utilities")
2
2
  const { basicScreen } = setup.structures
3
3
  const { checkBuilderEndpoint } = require("./utilities/TestFunctions")
4
- const { BUILTIN_ROLE_IDS } = require("@budibase/auth/roles")
4
+ const { BUILTIN_ROLE_IDS } = require("@budibase/backend-core/roles")
5
5
 
6
6
  const route = "/test"
7
7
 
@@ -1,4 +1,4 @@
1
- const { BUILTIN_ROLE_IDS } = require("@budibase/auth/roles")
1
+ const { BUILTIN_ROLE_IDS } = require("@budibase/backend-core/roles")
2
2
  const { checkPermissionsEndpoint } = require("./utilities/TestFunctions")
3
3
  const setup = require("./utilities")
4
4
 
@@ -2,7 +2,7 @@ const rowController = require("../../../controllers/row")
2
2
  const appController = require("../../../controllers/application")
3
3
  const CouchDB = require("../../../../db")
4
4
  const { AppStatus } = require("../../../../db/utils")
5
- const { BUILTIN_ROLE_IDS } = require("@budibase/auth/roles")
5
+ const { BUILTIN_ROLE_IDS } = require("@budibase/backend-core/roles")
6
6
  const { TENANT_ID } = require("../../../../tests/utilities/structures")
7
7
 
8
8
  function Request(appId, params) {