@budibase/server 1.0.49 → 1.0.50-alpha.3

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 (381) 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.2c37968e.js → index.9fe798bd.js} +252 -249
  8. package/builder/assets/index.c0cc369d.css +6 -0
  9. package/builder/assets/{vendor.f9faf6ab.js → vendor.5ad9695a.js} +202 -106
  10. package/builder/index.html +3 -3
  11. package/coverage/clover.xml +3105 -2814
  12. package/coverage/coverage-final.json +106 -101
  13. package/coverage/lcov-report/api/controllers/analytics.js.html +1 -1
  14. package/coverage/lcov-report/api/controllers/apikeys.js.html +1 -1
  15. package/coverage/lcov-report/api/controllers/application.js.html +257 -152
  16. package/coverage/lcov-report/api/controllers/auth.js.html +22 -13
  17. package/coverage/lcov-report/api/controllers/automation.js.html +39 -69
  18. package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
  19. package/coverage/lcov-report/api/controllers/cloud.js.html +8 -11
  20. package/coverage/lcov-report/api/controllers/component.js.html +13 -16
  21. package/coverage/lcov-report/api/controllers/datasource.js.html +81 -51
  22. package/coverage/lcov-report/api/controllers/dev.js.html +6 -6
  23. package/coverage/lcov-report/api/controllers/index.html +78 -78
  24. package/coverage/lcov-report/api/controllers/integration.js.html +1 -1
  25. package/coverage/lcov-report/api/controllers/layout.js.html +9 -9
  26. package/coverage/lcov-report/api/controllers/metadata.js.html +6 -21
  27. package/coverage/lcov-report/api/controllers/migrations.js.html +119 -0
  28. package/coverage/lcov-report/api/controllers/permission.js.html +19 -19
  29. package/coverage/lcov-report/api/controllers/query/index.html +10 -10
  30. package/coverage/lcov-report/api/controllers/query/index.js.html +38 -35
  31. package/coverage/lcov-report/api/controllers/query/validation.js.html +6 -6
  32. package/coverage/lcov-report/api/controllers/role.js.html +16 -16
  33. package/coverage/lcov-report/api/controllers/routing.js.html +7 -10
  34. package/coverage/lcov-report/api/controllers/row/external.js.html +48 -141
  35. package/coverage/lcov-report/api/controllers/row/index.html +55 -40
  36. package/coverage/lcov-report/api/controllers/row/index.js.html +26 -26
  37. package/coverage/lcov-report/api/controllers/row/internal.js.html +118 -226
  38. package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +52 -34
  39. package/coverage/lcov-report/api/controllers/row/staticFormula.js.html +548 -0
  40. package/coverage/lcov-report/api/controllers/row/utils.js.html +47 -62
  41. package/coverage/lcov-report/api/controllers/screen.js.html +15 -21
  42. package/coverage/lcov-report/api/controllers/script.js.html +4 -4
  43. package/coverage/lcov-report/api/controllers/table/bulkFormula.js.html +599 -0
  44. package/coverage/lcov-report/api/controllers/table/external.js.html +25 -34
  45. package/coverage/lcov-report/api/controllers/table/index.html +58 -43
  46. package/coverage/lcov-report/api/controllers/table/index.js.html +58 -82
  47. package/coverage/lcov-report/api/controllers/table/internal.js.html +81 -66
  48. package/coverage/lcov-report/api/controllers/table/utils.js.html +218 -110
  49. package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
  50. package/coverage/lcov-report/api/controllers/user.js.html +79 -76
  51. package/coverage/lcov-report/api/controllers/view/exporters.js.html +4 -4
  52. package/coverage/lcov-report/api/controllers/view/index.html +16 -16
  53. package/coverage/lcov-report/api/controllers/view/index.js.html +27 -33
  54. package/coverage/lcov-report/api/controllers/view/utils.js.html +35 -20
  55. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +7 -7
  56. package/coverage/lcov-report/api/controllers/webhook.js.html +34 -28
  57. package/coverage/lcov-report/api/index.html +1 -1
  58. package/coverage/lcov-report/api/index.js.html +8 -8
  59. package/coverage/lcov-report/api/routes/analytics.js.html +1 -1
  60. package/coverage/lcov-report/api/routes/apikeys.js.html +1 -1
  61. package/coverage/lcov-report/api/routes/application.js.html +1 -1
  62. package/coverage/lcov-report/api/routes/auth.js.html +1 -1
  63. package/coverage/lcov-report/api/routes/automation.js.html +1 -1
  64. package/coverage/lcov-report/api/routes/backup.js.html +1 -1
  65. package/coverage/lcov-report/api/routes/cloud.js.html +1 -1
  66. package/coverage/lcov-report/api/routes/component.js.html +1 -1
  67. package/coverage/lcov-report/api/routes/datasource.js.html +1 -1
  68. package/coverage/lcov-report/api/routes/deploy.js.html +1 -1
  69. package/coverage/lcov-report/api/routes/dev.js.html +1 -1
  70. package/coverage/lcov-report/api/routes/index.html +18 -18
  71. package/coverage/lcov-report/api/routes/index.js.html +3 -3
  72. package/coverage/lcov-report/api/routes/integration.js.html +1 -1
  73. package/coverage/lcov-report/api/routes/layout.js.html +1 -1
  74. package/coverage/lcov-report/api/routes/metadata.js.html +1 -1
  75. package/coverage/lcov-report/api/routes/{hosting.js.html → migrations.js.html} +17 -14
  76. package/coverage/lcov-report/api/routes/permission.js.html +1 -1
  77. package/coverage/lcov-report/api/routes/query.js.html +1 -1
  78. package/coverage/lcov-report/api/routes/role.js.html +1 -1
  79. package/coverage/lcov-report/api/routes/routing.js.html +1 -1
  80. package/coverage/lcov-report/api/routes/row.js.html +1 -1
  81. package/coverage/lcov-report/api/routes/screen.js.html +1 -1
  82. package/coverage/lcov-report/api/routes/script.js.html +1 -1
  83. package/coverage/lcov-report/api/routes/static.js.html +17 -2
  84. package/coverage/lcov-report/api/routes/table.js.html +1 -1
  85. package/coverage/lcov-report/api/routes/templates.js.html +1 -1
  86. package/coverage/lcov-report/api/routes/user.js.html +1 -1
  87. package/coverage/lcov-report/api/routes/view.js.html +1 -1
  88. package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
  89. package/coverage/lcov-report/automations/actions.js.html +24 -24
  90. package/coverage/lcov-report/automations/automationUtils.js.html +7 -10
  91. package/coverage/lcov-report/automations/bullboard.js.html +16 -16
  92. package/coverage/lcov-report/automations/index.html +18 -18
  93. package/coverage/lcov-report/automations/index.js.html +1 -1
  94. package/coverage/lcov-report/automations/steps/bash.js.html +6 -6
  95. package/coverage/lcov-report/automations/steps/createRow.js.html +13 -22
  96. package/coverage/lcov-report/automations/steps/delay.js.html +4 -4
  97. package/coverage/lcov-report/automations/steps/deleteRow.js.html +11 -20
  98. package/coverage/lcov-report/automations/steps/discord.js.html +7 -7
  99. package/coverage/lcov-report/automations/steps/executeQuery.js.html +6 -6
  100. package/coverage/lcov-report/automations/steps/executeScript.js.html +6 -6
  101. package/coverage/lcov-report/automations/steps/filter.js.html +7 -7
  102. package/coverage/lcov-report/automations/steps/index.html +13 -13
  103. package/coverage/lcov-report/automations/steps/integromat.js.html +5 -5
  104. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +8 -8
  105. package/coverage/lcov-report/automations/steps/queryRows.js.html +10 -10
  106. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +5 -5
  107. package/coverage/lcov-report/automations/steps/serverLog.js.html +3 -3
  108. package/coverage/lcov-report/automations/steps/slack.js.html +5 -5
  109. package/coverage/lcov-report/automations/steps/updateRow.js.html +7 -7
  110. package/coverage/lcov-report/automations/steps/utils.js.html +3 -3
  111. package/coverage/lcov-report/automations/steps/zapier.js.html +5 -5
  112. package/coverage/lcov-report/automations/triggerInfo/app.js.html +2 -2
  113. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +2 -2
  114. package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
  115. package/coverage/lcov-report/automations/triggerInfo/index.js.html +8 -8
  116. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +2 -2
  117. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +2 -2
  118. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +2 -2
  119. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +2 -2
  120. package/coverage/lcov-report/automations/triggers.js.html +61 -55
  121. package/coverage/lcov-report/automations/utils.js.html +54 -42
  122. package/coverage/lcov-report/constants/index.html +5 -5
  123. package/coverage/lcov-report/constants/index.js.html +53 -26
  124. package/coverage/lcov-report/constants/layouts.js.html +5 -5
  125. package/coverage/lcov-report/constants/screens.js.html +4 -4
  126. package/coverage/lcov-report/db/client.js.html +18 -18
  127. package/coverage/lcov-report/db/inMemoryView.js.html +7 -7
  128. package/coverage/lcov-report/db/index.html +15 -15
  129. package/coverage/lcov-report/db/index.js.html +3 -3
  130. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +25 -37
  131. package/coverage/lcov-report/db/linkedRows/index.html +27 -27
  132. package/coverage/lcov-report/db/linkedRows/index.js.html +51 -96
  133. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +42 -42
  134. package/coverage/lcov-report/db/newid.js.html +4 -4
  135. package/coverage/lcov-report/db/utils.js.html +87 -87
  136. package/coverage/lcov-report/events/AutomationEmitter.js.html +1 -1
  137. package/coverage/lcov-report/events/index.html +1 -1
  138. package/coverage/lcov-report/events/index.js.html +5 -5
  139. package/coverage/lcov-report/events/utils.js.html +3 -3
  140. package/coverage/lcov-report/index.html +135 -120
  141. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
  142. package/coverage/lcov-report/integrations/tests/index.html +1 -1
  143. package/coverage/lcov-report/middleware/appInfo.js.html +1 -1
  144. package/coverage/lcov-report/middleware/authorized.js.html +173 -65
  145. package/coverage/lcov-report/middleware/builder.js.html +10 -10
  146. package/coverage/lcov-report/middleware/currentapp.js.html +95 -83
  147. package/coverage/lcov-report/middleware/index.html +38 -38
  148. package/coverage/lcov-report/middleware/joi-validator.js.html +3 -3
  149. package/coverage/lcov-report/middleware/resourceId.js.html +1 -1
  150. package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
  151. package/coverage/lcov-report/middleware/usageQuota.js.html +281 -53
  152. package/coverage/lcov-report/middleware/utils.js.html +2 -2
  153. package/coverage/lcov-report/threads/automation.js.html +30 -24
  154. package/coverage/lcov-report/threads/index.html +26 -26
  155. package/coverage/lcov-report/threads/index.js.html +10 -10
  156. package/coverage/lcov-report/threads/query.js.html +39 -24
  157. package/coverage/lcov-report/threads/utils.js.html +14 -14
  158. package/coverage/lcov-report/utilities/bcrypt.js.html +1 -1
  159. package/coverage/lcov-report/utilities/budibaseDir.js.html +7 -7
  160. package/coverage/lcov-report/utilities/centralPath.js.html +4 -4
  161. package/coverage/lcov-report/utilities/csvParser.js.html +6 -6
  162. package/coverage/lcov-report/utilities/global.js.html +58 -49
  163. package/coverage/lcov-report/utilities/index.html +37 -37
  164. package/coverage/lcov-report/utilities/index.js.html +43 -73
  165. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +8 -8
  166. package/coverage/lcov-report/utilities/queue/index.html +1 -1
  167. package/coverage/lcov-report/utilities/routing/index.html +1 -1
  168. package/coverage/lcov-report/utilities/routing/index.js.html +7 -7
  169. package/coverage/lcov-report/utilities/rowProcessor/index.html +27 -27
  170. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +97 -103
  171. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +75 -27
  172. package/coverage/lcov-report/utilities/scriptRunner.js.html +5 -5
  173. package/coverage/lcov-report/utilities/security.js.html +8 -8
  174. package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
  175. package/coverage/lcov-report/utilities/usageQuota/index.html +141 -0
  176. package/coverage/lcov-report/utilities/usageQuota/index.js.html +359 -0
  177. package/coverage/lcov-report/utilities/usageQuota/rows.js.html +305 -0
  178. package/coverage/lcov-report/{api/controllers/hosting.js.html → utilities/usageQuota/usageQuoteReset.js.html} +36 -48
  179. package/coverage/lcov-report/utilities/users.js.html +9 -9
  180. package/coverage/lcov-report/utilities/workerRequests.js.html +43 -112
  181. package/coverage/lcov.info +5010 -4425
  182. package/dist/api/controllers/application.js +90 -60
  183. package/dist/api/controllers/auth.js +8 -5
  184. package/dist/api/controllers/automation.js +14 -19
  185. package/dist/api/controllers/cloud.js +2 -3
  186. package/dist/api/controllers/component.js +3 -4
  187. package/dist/api/controllers/datasource.js +20 -10
  188. package/dist/api/controllers/deploy/Deployment.js +3 -6
  189. package/dist/api/controllers/deploy/index.js +12 -13
  190. package/dist/api/controllers/dev.js +5 -5
  191. package/dist/api/controllers/layout.js +3 -3
  192. package/dist/api/controllers/metadata.js +4 -4
  193. package/dist/api/controllers/migrations.js +21 -0
  194. package/dist/api/controllers/permission.js +4 -4
  195. package/dist/api/controllers/query/import/index.js +4 -6
  196. package/dist/api/controllers/query/index.js +11 -10
  197. package/dist/api/controllers/role.js +5 -5
  198. package/dist/api/controllers/routing.js +5 -6
  199. package/dist/api/controllers/row/ExternalRequest.js +90 -67
  200. package/dist/api/controllers/row/external.js +14 -22
  201. package/dist/api/controllers/row/internal.js +55 -93
  202. package/dist/api/controllers/row/internalSearch.js +23 -17
  203. package/dist/api/controllers/row/staticFormula.js +147 -0
  204. package/dist/api/controllers/row/utils.js +13 -14
  205. package/dist/api/controllers/screen.js +5 -7
  206. package/dist/api/controllers/static/index.js +62 -16
  207. package/dist/api/controllers/table/bulkFormula.js +159 -0
  208. package/dist/api/controllers/table/external.js +7 -10
  209. package/dist/api/controllers/table/index.js +16 -13
  210. package/dist/api/controllers/table/internal.js +22 -16
  211. package/dist/api/controllers/table/utils.js +62 -35
  212. package/dist/api/controllers/user.js +43 -43
  213. package/dist/api/controllers/view/index.js +8 -10
  214. package/dist/api/controllers/view/utils.js +9 -4
  215. package/dist/api/controllers/webhook.js +10 -8
  216. package/dist/api/routes/index.js +2 -2
  217. package/dist/api/routes/migrations.js +9 -0
  218. package/dist/api/routes/static.js +2 -1
  219. package/dist/api/routes/tests/utilities/TestFunctions.js +37 -17
  220. package/dist/app.js +35 -5
  221. package/dist/automations/automationUtils.js +2 -3
  222. package/dist/automations/steps/createRow.js +3 -5
  223. package/dist/automations/steps/deleteRow.js +1 -4
  224. package/dist/automations/steps/updateRow.js +1 -1
  225. package/dist/automations/triggers.js +27 -25
  226. package/dist/automations/utils.js +10 -5
  227. package/dist/constants/index.js +7 -0
  228. package/dist/db/linkedRows/LinkController.js +3 -7
  229. package/dist/db/linkedRows/index.js +16 -27
  230. package/dist/db/linkedRows/linkUtils.js +6 -6
  231. package/dist/db/views/staticViews.js +9 -10
  232. package/dist/definitions/datasource.js +1 -0
  233. package/dist/environment.js +4 -1
  234. package/dist/integrations/base/sql.js +62 -21
  235. package/dist/integrations/googlesheets.js +340 -0
  236. package/dist/integrations/index.js +3 -0
  237. package/dist/integrations/utils.js +60 -9
  238. package/dist/middleware/authorized.js +57 -30
  239. package/dist/middleware/builder.js +2 -2
  240. package/dist/middleware/currentapp.js +41 -37
  241. package/dist/middleware/usageQuota.js +82 -15
  242. package/dist/migrations/functions/appUrls.js +46 -0
  243. package/dist/migrations/functions/quotas1.js +50 -0
  244. package/dist/migrations/functions/usageQuotas/index.js +20 -0
  245. package/dist/migrations/functions/usageQuotas/syncApps.js +29 -0
  246. package/dist/migrations/functions/usageQuotas/syncRows.js +33 -0
  247. package/dist/migrations/functions/userEmailViewCasing.js +24 -0
  248. package/dist/migrations/index.js +62 -0
  249. package/dist/package.json +8 -5
  250. package/dist/tests/utilities/TestConfiguration.js +80 -50
  251. package/dist/threads/automation.js +13 -11
  252. package/dist/threads/query.js +15 -11
  253. package/dist/tsconfig.tsbuildinfo +1 -1
  254. package/dist/utilities/fileSystem/index.js +4 -3
  255. package/dist/utilities/global.js +15 -12
  256. package/dist/utilities/index.js +7 -17
  257. package/dist/utilities/routing/index.js +5 -5
  258. package/dist/utilities/rowProcessor/index.js +23 -17
  259. package/dist/utilities/rowProcessor/utils.js +14 -4
  260. package/dist/utilities/{usageQuota.js → usageQuota/index.js} +45 -31
  261. package/dist/utilities/usageQuota/rows.js +78 -0
  262. package/dist/utilities/usageQuota/usageQuoteReset.js +16 -0
  263. package/dist/utilities/users.js +3 -3
  264. package/dist/utilities/workerRequests.js +4 -24
  265. package/nodemon.json +1 -1
  266. package/package.json +9 -6
  267. package/scripts/integrations/mssql/data/Dockerfile +1 -1
  268. package/scripts/integrations/mssql/data/setup.sql +17 -4
  269. package/scripts/integrations/postgres/init.sql +11 -6
  270. package/scripts/likeCypress.ts +1 -1
  271. package/src/api/controllers/application.js +85 -50
  272. package/src/api/controllers/auth.js +8 -5
  273. package/src/api/controllers/automation.js +13 -23
  274. package/src/api/controllers/cloud.js +2 -3
  275. package/src/api/controllers/component.js +3 -4
  276. package/src/api/controllers/datasource.js +21 -11
  277. package/src/api/controllers/deploy/Deployment.js +3 -7
  278. package/src/api/controllers/deploy/index.js +20 -13
  279. package/src/api/controllers/dev.js +5 -5
  280. package/src/api/controllers/layout.js +3 -3
  281. package/src/api/controllers/metadata.js +4 -9
  282. package/src/api/controllers/migrations.js +13 -0
  283. package/src/api/controllers/permission.js +4 -4
  284. package/src/api/controllers/query/import/index.ts +4 -6
  285. package/src/api/controllers/query/import/tests/index.spec.js +2 -1
  286. package/src/api/controllers/query/index.js +11 -10
  287. package/src/api/controllers/role.js +5 -5
  288. package/src/api/controllers/routing.js +5 -6
  289. package/src/api/controllers/row/ExternalRequest.ts +67 -43
  290. package/src/api/controllers/row/external.js +27 -58
  291. package/src/api/controllers/row/internal.js +54 -90
  292. package/src/api/controllers/row/internalSearch.js +23 -17
  293. package/src/api/controllers/row/staticFormula.js +156 -0
  294. package/src/api/controllers/row/utils.js +13 -18
  295. package/src/api/controllers/screen.js +5 -7
  296. package/src/api/controllers/static/index.js +66 -15
  297. package/src/api/controllers/table/bulkFormula.js +173 -0
  298. package/src/api/controllers/table/external.js +7 -10
  299. package/src/api/controllers/table/index.js +20 -28
  300. package/src/api/controllers/table/internal.js +24 -19
  301. package/src/api/controllers/table/utils.js +78 -42
  302. package/src/api/controllers/user.js +46 -45
  303. package/src/api/controllers/view/index.js +8 -10
  304. package/src/api/controllers/view/utils.js +9 -4
  305. package/src/api/controllers/webhook.js +10 -8
  306. package/src/api/routes/index.js +2 -2
  307. package/src/api/routes/migrations.js +14 -0
  308. package/src/api/routes/static.js +5 -0
  309. package/src/api/routes/tests/application.spec.js +2 -2
  310. package/src/api/routes/tests/auth.spec.js +1 -2
  311. package/src/api/routes/tests/automation.spec.js +1 -0
  312. package/src/api/routes/tests/misc.spec.js +0 -1
  313. package/src/api/routes/tests/routing.spec.js +21 -12
  314. package/src/api/routes/tests/row.spec.js +7 -4
  315. package/src/api/routes/tests/static.spec.js +98 -0
  316. package/src/api/routes/tests/utilities/TestFunctions.js +39 -17
  317. package/src/app.ts +18 -5
  318. package/src/automations/automationUtils.js +2 -3
  319. package/src/automations/steps/createRow.js +2 -5
  320. package/src/automations/steps/deleteRow.js +1 -4
  321. package/src/automations/steps/updateRow.js +1 -1
  322. package/src/automations/triggers.js +33 -31
  323. package/src/automations/utils.js +9 -5
  324. package/src/constants/index.js +9 -0
  325. package/src/db/linkedRows/LinkController.js +3 -7
  326. package/src/db/linkedRows/index.js +16 -31
  327. package/src/db/linkedRows/linkUtils.js +6 -6
  328. package/src/db/tests/linkController.spec.js +0 -1
  329. package/src/db/tests/linkTests.spec.js +5 -6
  330. package/src/db/views/staticViews.js +8 -10
  331. package/src/definitions/common.ts +3 -0
  332. package/src/definitions/datasource.ts +3 -0
  333. package/src/environment.js +4 -1
  334. package/src/integrations/base/sql.ts +75 -29
  335. package/src/integrations/googlesheets.ts +353 -0
  336. package/src/integrations/index.ts +3 -0
  337. package/src/integrations/tests/sql.spec.js +16 -0
  338. package/src/integrations/utils.ts +75 -12
  339. package/src/middleware/authorized.js +66 -30
  340. package/src/middleware/builder.js +2 -2
  341. package/src/middleware/currentapp.js +50 -46
  342. package/src/middleware/tests/authorized.spec.js +13 -6
  343. package/src/middleware/tests/currentapp.spec.js +6 -0
  344. package/src/middleware/tests/usageQuota.spec.js +18 -24
  345. package/src/middleware/usageQuota.js +93 -17
  346. package/src/migrations/functions/appUrls.ts +34 -0
  347. package/src/migrations/functions/quotas1.ts +20 -0
  348. package/src/migrations/functions/tests/appUrls.spec.js +29 -0
  349. package/src/migrations/functions/tests/quotas1.spec.js +27 -0
  350. package/src/migrations/functions/tests/userEmailViewCasing.spec.js +25 -0
  351. package/src/migrations/functions/usageQuotas/index.ts +8 -0
  352. package/src/migrations/functions/usageQuotas/syncApps.ts +18 -0
  353. package/src/migrations/functions/usageQuotas/syncRows.ts +22 -0
  354. package/src/migrations/functions/usageQuotas/tests/syncApps.spec.js +37 -0
  355. package/src/migrations/functions/usageQuotas/tests/syncRows.spec.js +43 -0
  356. package/src/migrations/functions/userEmailViewCasing.ts +13 -0
  357. package/src/migrations/index.ts +56 -0
  358. package/src/module.d.ts +3 -0
  359. package/src/tests/utilities/TestConfiguration.js +82 -55
  360. package/src/threads/automation.js +17 -15
  361. package/src/threads/query.js +17 -12
  362. package/src/utilities/fileSystem/index.js +4 -3
  363. package/src/utilities/global.js +15 -12
  364. package/src/utilities/index.js +7 -17
  365. package/src/utilities/routing/index.js +5 -5
  366. package/src/utilities/rowProcessor/index.js +25 -27
  367. package/src/utilities/rowProcessor/utils.js +23 -7
  368. package/src/utilities/tests/usageQuota/usageQuota.spec.js +72 -0
  369. package/src/utilities/usageQuota/index.js +93 -0
  370. package/src/utilities/usageQuota/rows.js +75 -0
  371. package/src/utilities/usageQuota/usageQuoteReset.js +18 -0
  372. package/src/utilities/users.js +3 -3
  373. package/src/utilities/workerRequests.js +4 -27
  374. package/tsconfig.json +4 -2
  375. package/builder/assets/index.39e01193.css +0 -1
  376. package/dist/api/controllers/hosting.js +0 -30
  377. package/dist/api/routes/hosting.js +0 -11
  378. package/src/api/controllers/hosting.js +0 -22
  379. package/src/api/routes/hosting.js +0 -13
  380. package/src/api/routes/tests/hosting.spec.js +0 -36
  381. package/src/utilities/usageQuota.js +0 -73
@@ -23,16 +23,16 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">67.92% </span>
26
+ <span class="strong">69.81% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>36/53</span>
28
+ <span class='fraction'>37/53</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">40% </span>
33
+ <span class="strong">43.33% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>12/30</span>
35
+ <span class='fraction'>13/30</span>
36
36
  </div>
37
37
 
38
38
 
@@ -44,9 +44,9 @@
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">67.3% </span>
47
+ <span class="strong">69.23% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>35/52</span>
49
+ <span class='fraction'>36/52</span>
50
50
  </div>
51
51
 
52
52
 
@@ -148,21 +148,16 @@
148
148
  <a name='L89'></a><a href='#L89'>89</a>
149
149
  <a name='L90'></a><a href='#L90'>90</a>
150
150
  <a name='L91'></a><a href='#L91'>91</a>
151
- <a name='L92'></a><a href='#L92'>92</a>
152
- <a name='L93'></a><a href='#L93'>93</a>
153
- <a name='L94'></a><a href='#L94'>94</a>
154
- <a name='L95'></a><a href='#L95'>95</a>
155
- <a name='L96'></a><a href='#L96'>96</a>
156
- <a name='L97'></a><a href='#L97'>97</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">34x</span>
157
- <span class="cline-any cline-yes">34x</span>
158
- <span class="cline-any cline-yes">34x</span>
159
- <span class="cline-any cline-yes">34x</span>
160
- <span class="cline-any cline-yes">34x</span>
161
- <span class="cline-any cline-yes">34x</span>
162
- <span class="cline-any cline-yes">34x</span>
163
- <span class="cline-any cline-yes">34x</span>
164
- <span class="cline-any cline-neutral">&nbsp;</span>
165
- <span class="cline-any cline-yes">34x</span>
151
+ <a name='L92'></a><a href='#L92'>92</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">39x</span>
152
+ <span class="cline-any cline-yes">39x</span>
153
+ <span class="cline-any cline-yes">39x</span>
154
+ <span class="cline-any cline-yes">39x</span>
155
+ <span class="cline-any cline-yes">39x</span>
156
+ <span class="cline-any cline-yes">39x</span>
157
+ <span class="cline-any cline-yes">39x</span>
158
+ <span class="cline-any cline-yes">39x</span>
159
+ <span class="cline-any cline-neutral">&nbsp;</span>
160
+ <span class="cline-any cline-yes">39x</span>
166
161
  <span class="cline-any cline-neutral">&nbsp;</span>
167
162
  <span class="cline-any cline-yes">2x</span>
168
163
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -172,14 +167,15 @@
172
167
  <span class="cline-any cline-neutral">&nbsp;</span>
173
168
  <span class="cline-any cline-neutral">&nbsp;</span>
174
169
  <span class="cline-any cline-neutral">&nbsp;</span>
175
- <span class="cline-any cline-yes">34x</span>
170
+ <span class="cline-any cline-yes">39x</span>
176
171
  <span class="cline-any cline-yes">1x</span>
177
172
  <span class="cline-any cline-yes">1x</span>
178
173
  <span class="cline-any cline-yes">1x</span>
179
174
  <span class="cline-any cline-yes">1x</span>
180
175
  <span class="cline-any cline-neutral">&nbsp;</span>
181
176
  <span class="cline-any cline-neutral">&nbsp;</span>
182
- <span class="cline-any cline-yes">34x</span>
177
+ <span class="cline-any cline-yes">39x</span>
178
+ <span class="cline-any cline-yes">19x</span>
183
179
  <span class="cline-any cline-neutral">&nbsp;</span>
184
180
  <span class="cline-any cline-neutral">&nbsp;</span>
185
181
  <span class="cline-any cline-yes">19x</span>
@@ -197,66 +193,60 @@
197
193
  <span class="cline-any cline-yes">16x</span>
198
194
  <span class="cline-any cline-neutral">&nbsp;</span>
199
195
  <span class="cline-any cline-neutral">&nbsp;</span>
200
- <span class="cline-any cline-yes">34x</span>
201
- <span class="cline-any cline-yes">74x</span>
196
+ <span class="cline-any cline-yes">39x</span>
197
+ <span class="cline-any cline-yes">77x</span>
202
198
  <span class="cline-any cline-yes">2x</span>
203
199
  <span class="cline-any cline-yes">2x</span>
204
200
  <span class="cline-any cline-neutral">&nbsp;</span>
205
- <span class="cline-any cline-yes">74x</span>
206
- <span class="cline-any cline-yes">74x</span>
207
- <span class="cline-any cline-yes">206x</span>
208
- <span class="cline-any cline-yes">206x</span>
201
+ <span class="cline-any cline-yes">77x</span>
202
+ <span class="cline-any cline-yes">77x</span>
203
+ <span class="cline-any cline-yes">212x</span>
204
+ <span class="cline-any cline-yes">212x</span>
209
205
  <span class="cline-any cline-neutral">&nbsp;</span>
210
- <span class="cline-any cline-yes">206x</span>
206
+ <span class="cline-any cline-yes">212x</span>
211
207
  <span class="cline-any cline-no">&nbsp;</span>
212
208
  <span class="cline-any cline-neutral">&nbsp;</span>
213
209
  <span class="cline-any cline-neutral">&nbsp;</span>
214
210
  <span class="cline-any cline-neutral">&nbsp;</span>
215
211
  <span class="cline-any cline-neutral">&nbsp;</span>
216
- <span class="cline-any cline-yes">206x</span>
217
- <span class="cline-any cline-neutral">&nbsp;</span>
218
- <span class="cline-any cline-no">&nbsp;</span>
219
- <span class="cline-any cline-neutral">&nbsp;</span>
220
- <span class="cline-any cline-neutral">&nbsp;</span>
212
+ <span class="cline-any cline-yes">212x</span>
221
213
  <span class="cline-any cline-no">&nbsp;</span>
222
214
  <span class="cline-any cline-no">&nbsp;</span>
223
215
  <span class="cline-any cline-no">&nbsp;</span>
224
216
  <span class="cline-any cline-no">&nbsp;</span>
225
217
  <span class="cline-any cline-neutral">&nbsp;</span>
226
218
  <span class="cline-any cline-neutral">&nbsp;</span>
227
- <span class="cline-any cline-neutral">&nbsp;</span>
228
- <span class="cline-any cline-neutral">&nbsp;</span>
229
- <span class="cline-any cline-neutral">&nbsp;</span>
230
219
  <span class="cline-any cline-no">&nbsp;</span>
220
+ <span class="cline-any cline-neutral">&nbsp;</span>
231
221
  <span class="cline-any cline-no">&nbsp;</span>
232
222
  <span class="cline-any cline-neutral">&nbsp;</span>
233
- <span class="cline-any cline-yes">206x</span>
223
+ <span class="cline-any cline-yes">212x</span>
234
224
  <span class="cline-any cline-neutral">&nbsp;</span>
235
225
  <span class="cline-any cline-no">&nbsp;</span>
236
226
  <span class="cline-any cline-no">&nbsp;</span>
237
227
  <span class="cline-any cline-neutral">&nbsp;</span>
238
228
  <span class="cline-any cline-no">&nbsp;</span>
239
229
  <span class="cline-any cline-neutral">&nbsp;</span>
240
- <span class="cline-any cline-yes">206x</span>
230
+ <span class="cline-any cline-yes">212x</span>
241
231
  <span class="cline-any cline-no">&nbsp;</span>
242
232
  <span class="cline-any cline-neutral">&nbsp;</span>
243
233
  <span class="cline-any cline-neutral">&nbsp;</span>
244
234
  <span class="cline-any cline-neutral">&nbsp;</span>
245
235
  <span class="cline-any cline-neutral">&nbsp;</span>
246
- <span class="cline-any cline-yes">206x</span>
236
+ <span class="cline-any cline-yes">212x</span>
247
237
  <span class="cline-any cline-neutral">&nbsp;</span>
248
- <span class="cline-any cline-yes">206x</span>
238
+ <span class="cline-any cline-yes">212x</span>
249
239
  <span class="cline-any cline-neutral">&nbsp;</span>
250
- <span class="cline-any cline-yes">74x</span>
240
+ <span class="cline-any cline-yes">77x</span>
251
241
  <span class="cline-any cline-neutral">&nbsp;</span>
252
242
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">const validateJs = require("validate.js")
253
243
  const { cloneDeep } = require("lodash/fp")
254
- const CouchDB = require("../../../db")
255
244
  const { InternalTables } = require("../../../db/utils")
256
245
  const userController = require("../user")
257
246
  const { FieldTypes } = require("../../../constants")
258
247
  const { processStringSync } = require("@budibase/string-templates")
259
248
  const { makeExternalQuery } = require("../../../integrations/base/utils")
249
+ const { getAppDB } = require("@budibase/backend-core/context")
260
250
  &nbsp;
261
251
  validateJs.extend(validateJs.validators.datetime, {
262
252
  parse: function (value) {
@@ -268,14 +258,15 @@ validateJs.extend(validateJs.validators.datetime, {
268
258
  },
269
259
  })
270
260
  &nbsp;
271
- exports.getDatasourceAndQuery = async (appId, json) =&gt; {
261
+ exports.getDatasourceAndQuery = async json =&gt; {
272
262
  const datasourceId = json.endpoint.datasourceId
273
- const db = new CouchDB(appId)
263
+ const db = getAppDB()
274
264
  const datasource = await db.get(datasourceId)
275
265
  return makeExternalQuery(datasource, json)
276
266
  }
277
267
  &nbsp;
278
- exports.findRow = async (ctx, db, tableId, rowId) =&gt; {
268
+ exports.findRow = async (ctx, tableId, rowId) =&gt; {
269
+ const db = getAppDB()
279
270
  let row
280
271
  // TODO remove special user case in future
281
272
  <span class="missing-if-branch" title="if path not taken" >I</span>if (tableId === InternalTables.USER_METADATA) {
@@ -293,9 +284,9 @@ exports.findRow = async (ctx, db, tableId, rowId) =&gt; {
293
284
  return row
294
285
  }
295
286
  &nbsp;
296
- exports.validate = async ({ appId, tableId, row, table }) =&gt; {
287
+ exports.validate = async ({ tableId, row, table }) =&gt; {
297
288
  if (!table) {
298
- const db = new CouchDB(appId)
289
+ const db = getAppDB()
299
290
  table = await db.get(tableId)
300
291
  }
301
292
  const errors = {}
@@ -309,22 +300,16 @@ exports.validate = async ({ appId, tableId, row, table }) =&gt; {
309
300
  let res
310
301
  &nbsp;
311
302
  // Validate.js doesn't seem to handle array
312
- <span class="missing-if-branch" title="if path not taken" >I</span>if (type === FieldTypes.ARRAY) {
313
- const hasValues =
314
- <span class="cstat-no" title="statement not covered" > Array.isArray(row[fieldName]) &amp;&amp; row[fieldName].length &gt; 0</span>
315
- &nbsp;
316
- // Check values are valid if values are specified
317
- <span class="cstat-no" title="statement not covered" > if (hasValues) {</span>
303
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (type === FieldTypes.ARRAY &amp;&amp; <span class="branch-1 cbranch-no" title="branch not covered" >row[fieldName])</span> {
304
+ <span class="cstat-no" title="statement not covered" > if (row[fieldName].length) {</span>
318
305
  <span class="cstat-no" title="statement not covered" > row[fieldName].map(<span class="fstat-no" title="function not covered" >va</span>l =&gt; {</span>
319
306
  <span class="cstat-no" title="statement not covered" > if (!constraints.inclusion.includes(val)) {</span>
320
- <span class="cstat-no" title="statement not covered" > errors[fieldName] = "Value not in list"</span>
307
+ <span class="cstat-no" title="statement not covered" > errors[fieldName] = "Field not in list"</span>
321
308
  }
322
309
  })
323
- }
324
- &nbsp;
325
- // Check for required constraint
326
- <span class="cstat-no" title="statement not covered" > if (constraints.presence === true &amp;&amp; !hasValues) {</span>
327
- <span class="cstat-no" title="statement not covered" > errors[fieldName] = "Required field"</span>
310
+ } else <span class="cstat-no" title="statement not covered" >if (constraints.presence &amp;&amp; row[fieldName].length === 0) {</span>
311
+ // non required MultiSelect creates an empty array, which should not throw errors
312
+ <span class="cstat-no" title="statement not covered" > errors[fieldName] = [`${fieldName} is required`]</span>
328
313
  }
329
314
  } else <span class="missing-if-branch" title="if path not taken" >I</span>if (type === FieldTypes.JSON &amp;&amp; <span class="branch-1 cbranch-no" title="branch not covered" >typeof row[fieldName] === "string")</span> {
330
315
  // this should only happen if there is an error
@@ -352,7 +337,7 @@ exports.validate = async ({ appId, tableId, row, table }) =&gt; {
352
337
  <div class='footer quiet pad2 space-top1 center small'>
353
338
  Code coverage generated by
354
339
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
355
- at Fri Feb 04 2022 12:19:28 GMT+0000 (Coordinated Universal Time)
340
+ at Tue Feb 08 2022 15:32:15 GMT+0000 (Coordinated Universal Time)
356
341
  </div>
357
342
  </div>
358
343
  <script src="../../../prettify.js"></script>
@@ -25,7 +25,7 @@
25
25
  <div class='fl pad1y space-right2'>
26
26
  <span class="strong">100% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>23/23</span>
28
+ <span class='fraction'>21/21</span>
29
29
  </div>
30
30
 
31
31
 
@@ -46,7 +46,7 @@
46
46
  <div class='fl pad1y space-right2'>
47
47
  <span class="strong">100% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>23/23</span>
49
+ <span class='fraction'>21/21</span>
50
50
  </div>
51
51
 
52
52
 
@@ -103,14 +103,11 @@
103
103
  <a name='L44'></a><a href='#L44'>44</a>
104
104
  <a name='L45'></a><a href='#L45'>45</a>
105
105
  <a name='L46'></a><a href='#L46'>46</a>
106
- <a name='L47'></a><a href='#L47'>47</a>
107
- <a name='L48'></a><a href='#L48'>48</a>
108
- <a name='L49'></a><a href='#L49'>49</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">33x</span>
109
- <span class="cline-any cline-yes">33x</span>
110
- <span class="cline-any cline-yes">33x</span>
106
+ <a name='L47'></a><a href='#L47'>47</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">38x</span>
107
+ <span class="cline-any cline-yes">38x</span>
108
+ <span class="cline-any cline-yes">38x</span>
111
109
  <span class="cline-any cline-neutral">&nbsp;</span>
112
- <span class="cline-any cline-yes">33x</span>
113
- <span class="cline-any cline-yes">1x</span>
110
+ <span class="cline-any cline-yes">38x</span>
114
111
  <span class="cline-any cline-yes">1x</span>
115
112
  <span class="cline-any cline-neutral">&nbsp;</span>
116
113
  <span class="cline-any cline-yes">1x</span>
@@ -127,8 +124,7 @@
127
124
  <span class="cline-any cline-neutral">&nbsp;</span>
128
125
  <span class="cline-any cline-neutral">&nbsp;</span>
129
126
  <span class="cline-any cline-neutral">&nbsp;</span>
130
- <span class="cline-any cline-yes">33x</span>
131
- <span class="cline-any cline-yes">19x</span>
127
+ <span class="cline-any cline-yes">38x</span>
132
128
  <span class="cline-any cline-yes">19x</span>
133
129
  <span class="cline-any cline-yes">19x</span>
134
130
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -145,7 +141,7 @@
145
141
  <span class="cline-any cline-neutral">&nbsp;</span>
146
142
  <span class="cline-any cline-neutral">&nbsp;</span>
147
143
  <span class="cline-any cline-neutral">&nbsp;</span>
148
- <span class="cline-any cline-yes">33x</span>
144
+ <span class="cline-any cline-yes">38x</span>
149
145
  <span class="cline-any cline-yes">1x</span>
150
146
  <span class="cline-any cline-yes">1x</span>
151
147
  <span class="cline-any cline-yes">1x</span>
@@ -153,13 +149,12 @@
153
149
  <span class="cline-any cline-neutral">&nbsp;</span>
154
150
  <span class="cline-any cline-yes">1x</span>
155
151
  <span class="cline-any cline-neutral">&nbsp;</span>
156
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">const CouchDB = require("../../db")
157
- const { getScreenParams, generateScreenID } = require("../../db/utils")
152
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">const { getScreenParams, generateScreenID } = require("../../db/utils")
158
153
  const { AccessController } = require("@budibase/backend-core/roles")
154
+ const { getAppDB } = require("@budibase/backend-core/context")
159
155
  &nbsp;
160
156
  exports.fetch = async ctx =&gt; {
161
- const appId = ctx.appId
162
- const db = new CouchDB(appId)
157
+ const db = getAppDB()
163
158
  &nbsp;
164
159
  const screens = (
165
160
  await db.allDocs(
@@ -169,15 +164,14 @@ exports.fetch = async ctx =&gt; {
169
164
  )
170
165
  ).rows.map(element =&gt; element.doc)
171
166
  &nbsp;
172
- ctx.body = await new AccessController(appId).checkScreensAccess(
167
+ ctx.body = await new AccessController().checkScreensAccess(
173
168
  screens,
174
169
  ctx.user.role._id
175
170
  )
176
171
  }
177
172
  &nbsp;
178
173
  exports.save = async ctx =&gt; {
179
- const appId = ctx.appId
180
- const db = new CouchDB(appId)
174
+ const db = getAppDB()
181
175
  let screen = ctx.request.body
182
176
  &nbsp;
183
177
  if (!screen._id) {
@@ -194,7 +188,7 @@ exports.save = async ctx =&gt; {
194
188
  }
195
189
  &nbsp;
196
190
  exports.destroy = async ctx =&gt; {
197
- const db = new CouchDB(ctx.appId)
191
+ const db = getAppDB()
198
192
  await db.remove(ctx.params.screenId, ctx.params.screenRev)
199
193
  ctx.body = {
200
194
  message: "Screen deleted successfully",
@@ -208,7 +202,7 @@ exports.destroy = async ctx =&gt; {
208
202
  <div class='footer quiet pad2 space-top1 center small'>
209
203
  Code coverage generated by
210
204
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
211
- at Fri Feb 04 2022 12:19:28 GMT+0000 (Coordinated Universal Time)
205
+ at Tue Feb 08 2022 15:32:15 GMT+0000 (Coordinated Universal Time)
212
206
  </div>
213
207
  </div>
214
208
  <script src="../../prettify.js"></script>
@@ -68,15 +68,15 @@
68
68
  <a name='L9'></a><a href='#L9'>9</a>
69
69
  <a name='L10'></a><a href='#L10'>10</a>
70
70
  <a name='L11'></a><a href='#L11'>11</a>
71
- <a name='L12'></a><a href='#L12'>12</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">34x</span>
71
+ <a name='L12'></a><a href='#L12'>12</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">39x</span>
72
72
  <span class="cline-any cline-neutral">&nbsp;</span>
73
- <span class="cline-any cline-yes">34x</span>
73
+ <span class="cline-any cline-yes">39x</span>
74
74
  <span class="cline-any cline-no">&nbsp;</span>
75
75
  <span class="cline-any cline-no">&nbsp;</span>
76
76
  <span class="cline-any cline-no">&nbsp;</span>
77
77
  <span class="cline-any cline-neutral">&nbsp;</span>
78
78
  <span class="cline-any cline-neutral">&nbsp;</span>
79
- <span class="cline-any cline-yes">34x</span>
79
+ <span class="cline-any cline-yes">39x</span>
80
80
  <span class="cline-any cline-no">&nbsp;</span>
81
81
  <span class="cline-any cline-neutral">&nbsp;</span>
82
82
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">const ScriptRunner = require("../../utilities/scriptRunner")
@@ -97,7 +97,7 @@ exports.save = <span class="fstat-no" title="function not covered" >as</span>ync
97
97
  <div class='footer quiet pad2 space-top1 center small'>
98
98
  Code coverage generated by
99
99
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
100
- at Fri Feb 04 2022 12:19:28 GMT+0000 (Coordinated Universal Time)
100
+ at Tue Feb 08 2022 15:32:15 GMT+0000 (Coordinated Universal Time)
101
101
  </div>
102
102
  </div>
103
103
  <script src="../../prettify.js"></script>