@budibase/server 1.0.105-alpha.4 → 1.0.105-alpha.40

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 (321) hide show
  1. package/builder/assets/{index.e054afd8.css → index.3b909bcd.css} +2 -2
  2. package/builder/assets/index.e4e51b2f.js +1297 -0
  3. package/builder/index.html +2 -2
  4. package/coverage/clover.xml +712 -1679
  5. package/coverage/coverage-final.json +30 -45
  6. package/coverage/lcov-report/api/controllers/analytics.js.html +8 -3
  7. package/coverage/lcov-report/api/controllers/apikeys.js.html +9 -4
  8. package/coverage/lcov-report/api/controllers/auth.js.html +8 -3
  9. package/coverage/lcov-report/api/controllers/automation.js.html +8 -3
  10. package/coverage/lcov-report/api/controllers/backup.js.html +8 -3
  11. package/coverage/lcov-report/api/controllers/cloud.js.html +8 -3
  12. package/coverage/lcov-report/api/controllers/component.js.html +8 -3
  13. package/coverage/lcov-report/api/controllers/datasource.js.html +11 -6
  14. package/coverage/lcov-report/api/controllers/dev.js.html +8 -3
  15. package/coverage/lcov-report/api/controllers/index.html +16 -26
  16. package/coverage/lcov-report/api/controllers/integration.js.html +8 -3
  17. package/coverage/lcov-report/api/controllers/layout.js.html +8 -3
  18. package/coverage/lcov-report/api/controllers/metadata.js.html +8 -3
  19. package/coverage/lcov-report/api/controllers/migrations.js.html +8 -3
  20. package/coverage/lcov-report/api/controllers/permission.js.html +8 -3
  21. package/coverage/lcov-report/api/controllers/query/index.html +16 -26
  22. package/coverage/lcov-report/api/controllers/query/validation.js.html +8 -3
  23. package/coverage/lcov-report/api/controllers/role.js.html +10 -5
  24. package/coverage/lcov-report/api/controllers/routing.js.html +9 -4
  25. package/coverage/lcov-report/api/controllers/row/external.js.html +8 -3
  26. package/coverage/lcov-report/api/controllers/row/index.html +25 -35
  27. package/coverage/lcov-report/api/controllers/row/internal.js.html +32 -24
  28. package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +21 -16
  29. package/coverage/lcov-report/api/controllers/row/staticFormula.js.html +24 -19
  30. package/coverage/lcov-report/api/controllers/row/utils.js.html +33 -19
  31. package/coverage/lcov-report/api/controllers/screen.js.html +9 -4
  32. package/coverage/lcov-report/api/controllers/script.js.html +8 -3
  33. package/coverage/lcov-report/api/controllers/table/bulkFormula.js.html +55 -50
  34. package/coverage/lcov-report/api/controllers/table/external.js.html +8 -3
  35. package/coverage/lcov-report/api/controllers/table/index.html +19 -44
  36. package/coverage/lcov-report/api/controllers/table/index.js.html +20 -15
  37. package/coverage/lcov-report/api/controllers/templates.js.html +8 -3
  38. package/coverage/lcov-report/api/controllers/user.js.html +8 -3
  39. package/coverage/lcov-report/api/controllers/view/exporters.js.html +8 -3
  40. package/coverage/lcov-report/api/controllers/view/index.html +8 -3
  41. package/coverage/lcov-report/api/controllers/view/index.js.html +10 -5
  42. package/coverage/lcov-report/api/controllers/view/utils.js.html +8 -3
  43. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +8 -3
  44. package/coverage/lcov-report/api/controllers/webhook.js.html +10 -5
  45. package/coverage/lcov-report/api/index.html +18 -13
  46. package/coverage/lcov-report/api/index.js.html +28 -8
  47. package/coverage/lcov-report/api/routes/analytics.js.html +8 -3
  48. package/coverage/lcov-report/api/routes/apikeys.js.html +8 -3
  49. package/coverage/lcov-report/api/routes/auth.js.html +8 -3
  50. package/coverage/lcov-report/api/routes/automation.js.html +8 -3
  51. package/coverage/lcov-report/api/routes/backup.js.html +8 -3
  52. package/coverage/lcov-report/api/routes/cloud.js.html +8 -3
  53. package/coverage/lcov-report/api/routes/component.js.html +8 -3
  54. package/coverage/lcov-report/api/routes/datasource.js.html +8 -3
  55. package/coverage/lcov-report/api/routes/deploy.js.html +8 -3
  56. package/coverage/lcov-report/api/routes/dev.js.html +9 -4
  57. package/coverage/lcov-report/api/routes/index.html +13 -68
  58. package/coverage/lcov-report/api/routes/integration.js.html +8 -3
  59. package/coverage/lcov-report/api/routes/layout.js.html +8 -3
  60. package/coverage/lcov-report/api/routes/metadata.js.html +8 -3
  61. package/coverage/lcov-report/api/routes/migrations.js.html +8 -3
  62. package/coverage/lcov-report/api/routes/permission.js.html +8 -3
  63. package/coverage/lcov-report/api/routes/query.js.html +8 -3
  64. package/coverage/lcov-report/api/routes/role.js.html +8 -3
  65. package/coverage/lcov-report/api/routes/routing.js.html +8 -3
  66. package/coverage/lcov-report/api/routes/screen.js.html +8 -3
  67. package/coverage/lcov-report/api/routes/script.js.html +8 -3
  68. package/coverage/lcov-report/api/routes/table.js.html +8 -3
  69. package/coverage/lcov-report/api/routes/templates.js.html +8 -3
  70. package/coverage/lcov-report/api/routes/user.js.html +8 -3
  71. package/coverage/lcov-report/api/routes/utils/index.html +8 -3
  72. package/coverage/lcov-report/api/routes/utils/validators.js.html +8 -3
  73. package/coverage/lcov-report/api/routes/view.js.html +8 -3
  74. package/coverage/lcov-report/api/routes/webhook.js.html +8 -3
  75. package/coverage/lcov-report/automations/actions.js.html +21 -7
  76. package/coverage/lcov-report/automations/automationUtils.js.html +64 -23
  77. package/coverage/lcov-report/automations/bullboard.js.html +8 -3
  78. package/coverage/lcov-report/automations/index.html +27 -37
  79. package/coverage/lcov-report/automations/index.js.html +8 -3
  80. package/coverage/lcov-report/automations/steps/bash.js.html +8 -3
  81. package/coverage/lcov-report/automations/steps/delay.js.html +8 -3
  82. package/coverage/lcov-report/automations/steps/discord.js.html +8 -3
  83. package/coverage/lcov-report/automations/steps/executeQuery.js.html +8 -3
  84. package/coverage/lcov-report/automations/steps/executeScript.js.html +8 -3
  85. package/coverage/lcov-report/automations/steps/filter.js.html +8 -3
  86. package/coverage/lcov-report/automations/steps/index.html +31 -41
  87. package/coverage/lcov-report/automations/steps/integromat.js.html +8 -3
  88. package/coverage/lcov-report/{api/routes/static.js.html → automations/steps/loop.js.html} +70 -80
  89. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +9 -4
  90. package/coverage/lcov-report/automations/steps/queryRows.js.html +9 -4
  91. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +8 -3
  92. package/coverage/lcov-report/automations/steps/serverLog.js.html +8 -3
  93. package/coverage/lcov-report/automations/steps/slack.js.html +8 -3
  94. package/coverage/lcov-report/automations/steps/updateRow.js.html +8 -3
  95. package/coverage/lcov-report/automations/steps/utils.js.html +14 -9
  96. package/coverage/lcov-report/automations/steps/zapier.js.html +8 -3
  97. package/coverage/lcov-report/automations/triggerInfo/app.js.html +8 -3
  98. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +8 -3
  99. package/coverage/lcov-report/automations/triggerInfo/index.html +8 -3
  100. package/coverage/lcov-report/automations/triggerInfo/index.js.html +8 -3
  101. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +8 -3
  102. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +8 -3
  103. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +8 -3
  104. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +8 -3
  105. package/coverage/lcov-report/automations/triggers.js.html +16 -11
  106. package/coverage/lcov-report/block-navigation.js +8 -0
  107. package/coverage/lcov-report/constants/index.html +12 -7
  108. package/coverage/lcov-report/constants/index.js.html +54 -31
  109. package/coverage/lcov-report/constants/layouts.js.html +8 -3
  110. package/coverage/lcov-report/constants/screens.js.html +8 -3
  111. package/coverage/lcov-report/db/client.js.html +26 -21
  112. package/coverage/lcov-report/db/inMemoryView.js.html +8 -3
  113. package/coverage/lcov-report/db/index.html +8 -3
  114. package/coverage/lcov-report/db/index.js.html +10 -5
  115. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +20 -15
  116. package/coverage/lcov-report/db/linkedRows/index.html +8 -3
  117. package/coverage/lcov-report/db/linkedRows/index.js.html +22 -17
  118. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +12 -7
  119. package/coverage/lcov-report/db/newid.js.html +11 -6
  120. package/coverage/lcov-report/db/utils.js.html +83 -78
  121. package/coverage/lcov-report/events/AutomationEmitter.js.html +14 -9
  122. package/coverage/lcov-report/events/index.html +8 -3
  123. package/coverage/lcov-report/events/index.js.html +9 -4
  124. package/coverage/lcov-report/events/utils.js.html +18 -13
  125. package/coverage/lcov-report/index.html +124 -119
  126. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +8 -3
  127. package/coverage/lcov-report/integrations/tests/index.html +8 -3
  128. package/coverage/lcov-report/middleware/appInfo.js.html +8 -3
  129. package/coverage/lcov-report/middleware/builder.js.html +8 -3
  130. package/coverage/lcov-report/middleware/currentapp.js.html +65 -15
  131. package/coverage/lcov-report/middleware/index.html +25 -50
  132. package/coverage/lcov-report/middleware/joi-validator.js.html +9 -4
  133. package/coverage/lcov-report/middleware/publicApi.js.html +8 -3
  134. package/coverage/lcov-report/middleware/resourceId.js.html +8 -3
  135. package/coverage/lcov-report/middleware/selfhost.js.html +9 -4
  136. package/coverage/lcov-report/middleware/utils.js.html +8 -3
  137. package/coverage/lcov-report/sorter.js +26 -0
  138. package/coverage/lcov-report/threads/automation.js.html +581 -90
  139. package/coverage/lcov-report/threads/index.html +29 -39
  140. package/coverage/lcov-report/threads/query.js.html +10 -5
  141. package/coverage/lcov-report/threads/utils.js.html +17 -9
  142. package/coverage/lcov-report/utilities/bcrypt.js.html +8 -3
  143. package/coverage/lcov-report/utilities/budibaseDir.js.html +8 -3
  144. package/coverage/lcov-report/utilities/centralPath.js.html +8 -3
  145. package/coverage/lcov-report/utilities/csvParser.js.html +10 -5
  146. package/coverage/lcov-report/utilities/global.js.html +9 -4
  147. package/coverage/lcov-report/utilities/index.html +8 -3
  148. package/coverage/lcov-report/utilities/index.js.html +11 -6
  149. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +32 -9
  150. package/coverage/lcov-report/utilities/queue/index.html +12 -7
  151. package/coverage/lcov-report/utilities/routing/index.html +8 -3
  152. package/coverage/lcov-report/utilities/routing/index.js.html +8 -3
  153. package/coverage/lcov-report/utilities/rowProcessor/index.html +8 -3
  154. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +46 -41
  155. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +18 -13
  156. package/coverage/lcov-report/utilities/scriptRunner.js.html +8 -3
  157. package/coverage/lcov-report/utilities/security.js.html +9 -4
  158. package/coverage/lcov-report/utilities/statusCodes.js.html +8 -3
  159. package/coverage/lcov-report/utilities/usageQuota/index.html +24 -34
  160. package/coverage/lcov-report/utilities/usageQuota/rows.js.html +45 -40
  161. package/coverage/lcov-report/utilities/usageQuota/usageQuoteReset.js.html +8 -3
  162. package/coverage/lcov-report/utilities/users.js.html +8 -3
  163. package/coverage/lcov-report/utilities/workerRequests.js.html +9 -4
  164. package/coverage/lcov.info +1144 -2839
  165. package/dist/api/controllers/application.js +138 -70
  166. package/dist/api/controllers/deploy/index.js +64 -35
  167. package/dist/api/controllers/public/applications.js +29 -9
  168. package/dist/api/controllers/public/queries.js +27 -7
  169. package/dist/api/controllers/public/rows.js +32 -12
  170. package/dist/api/controllers/public/tables.js +2 -2
  171. package/dist/api/controllers/public/users.js +8 -8
  172. package/dist/api/controllers/public/utils.js +1 -1
  173. package/dist/api/controllers/query/import/index.js +3 -3
  174. package/dist/api/controllers/query/index.js +57 -44
  175. package/dist/api/controllers/row/ExternalRequest.js +27 -27
  176. package/dist/api/controllers/row/index.js +83 -60
  177. package/dist/api/controllers/row/internal.js +2 -1
  178. package/dist/api/controllers/row/utils.js +2 -1
  179. package/dist/api/controllers/static/templates/BudibaseApp.svelte +3 -0
  180. package/dist/api/controllers/table/bulkFormula.js +2 -1
  181. package/dist/api/controllers/table/internal.js +40 -34
  182. package/dist/api/controllers/table/utils.js +271 -229
  183. package/dist/api/index.js +5 -0
  184. package/dist/api/routes/application.js +39 -13
  185. package/dist/api/routes/index.js +61 -56
  186. package/dist/api/routes/public/index.js +6 -9
  187. package/dist/api/routes/public/queries.js +1 -1
  188. package/dist/api/routes/public/rows.js +1 -1
  189. package/dist/api/routes/public/tables.js +3 -3
  190. package/dist/api/routes/public/users.js +1 -1
  191. package/dist/api/routes/row.js +43 -17
  192. package/dist/api/routes/static.js +40 -13
  193. package/dist/api/routes/tests/utilities/TestFunctions.js +62 -26
  194. package/dist/app.js +11 -4
  195. package/dist/automations/actions.js +3 -0
  196. package/dist/automations/automationUtils.js +10 -0
  197. package/dist/automations/steps/createRow.js +12 -12
  198. package/dist/automations/steps/deleteRow.js +13 -16
  199. package/dist/automations/steps/loop.js +51 -0
  200. package/dist/automations/tests/utilities/index.js +0 -2
  201. package/dist/automations/utils.js +187 -132
  202. package/dist/constants/index.js +5 -0
  203. package/dist/definitions/datasource.js +1 -0
  204. package/dist/environment.js +1 -2
  205. package/dist/index.js +4 -0
  206. package/dist/integrations/base/sql.js +2 -2
  207. package/dist/integrations/base/sqlTable.js +2 -2
  208. package/dist/integrations/googlesheets.js +1 -1
  209. package/dist/integrations/index.js +4 -0
  210. package/dist/integrations/microsoftSqlServer.js +8 -8
  211. package/dist/integrations/mysql.js +9 -9
  212. package/dist/integrations/oracle.js +7 -7
  213. package/dist/integrations/postgres.js +7 -7
  214. package/dist/integrations/redis.js +158 -0
  215. package/dist/integrations/rest.js +1 -1
  216. package/dist/middleware/authorized.js +51 -51
  217. package/dist/middleware/currentapp.js +15 -1
  218. package/dist/migrations/functions/appUrls.js +1 -1
  219. package/dist/migrations/functions/developerQuota.js +49 -0
  220. package/dist/migrations/functions/publishedAppsQuota.js +47 -0
  221. package/dist/migrations/functions/quotas1.js +6 -2
  222. package/dist/migrations/functions/usageQuotas/index.js +0 -4
  223. package/dist/migrations/functions/usageQuotas/syncApps.js +4 -7
  224. package/dist/migrations/functions/usageQuotas/syncDevelopers.js +24 -0
  225. package/dist/migrations/functions/usageQuotas/syncPublishedApps.js +26 -0
  226. package/dist/migrations/functions/usageQuotas/syncRows.js +5 -8
  227. package/dist/migrations/index.js +17 -1
  228. package/dist/package.json +14 -8
  229. package/dist/threads/automation.js +149 -27
  230. package/dist/threads/index.js +35 -8
  231. package/dist/threads/utils.js +1 -0
  232. package/dist/tsconfig.build.tsbuildinfo +1 -0
  233. package/dist/utilities/queue/inMemoryQueue.js +6 -1
  234. package/nodemon.json +1 -1
  235. package/package.json +15 -9
  236. package/scripts/dev/manage.js +2 -0
  237. package/src/api/controllers/{application.js → application.ts} +103 -44
  238. package/src/api/controllers/deploy/{index.js → index.ts} +45 -28
  239. package/src/api/controllers/public/applications.ts +2 -2
  240. package/src/api/controllers/public/queries.ts +1 -1
  241. package/src/api/controllers/public/rows.ts +1 -1
  242. package/src/api/controllers/query/{index.js → index.ts} +51 -48
  243. package/src/api/controllers/row/ExternalRequest.ts +1 -1
  244. package/src/api/controllers/row/{index.js → index.ts} +24 -17
  245. package/src/api/controllers/row/internal.js +2 -1
  246. package/src/api/controllers/row/utils.js +4 -1
  247. package/src/api/controllers/static/templates/BudibaseApp.svelte +3 -0
  248. package/src/api/controllers/table/bulkFormula.js +1 -1
  249. package/src/api/controllers/table/{internal.js → internal.ts} +27 -24
  250. package/src/api/controllers/table/{utils.js → utils.ts} +86 -69
  251. package/src/api/index.js +5 -0
  252. package/src/api/routes/{application.js → application.ts} +8 -14
  253. package/src/api/routes/index.ts +60 -0
  254. package/src/api/routes/public/index.ts +1 -4
  255. package/src/api/routes/{row.js → row.ts} +7 -15
  256. package/src/api/routes/{static.js → static.ts} +11 -11
  257. package/src/api/routes/tests/utilities/{TestFunctions.js → TestFunctions.ts} +42 -25
  258. package/src/app.ts +1 -2
  259. package/src/automations/actions.js +3 -0
  260. package/src/automations/automationUtils.js +12 -0
  261. package/src/automations/steps/{createRow.js → createRow.ts} +9 -15
  262. package/src/automations/steps/{deleteRow.js → deleteRow.ts} +10 -16
  263. package/src/automations/steps/loop.js +50 -0
  264. package/src/automations/tests/automation.spec.js +0 -1
  265. package/src/automations/tests/{createRow.spec.js → createRow.spec.ts} +4 -15
  266. package/src/automations/tests/{deleteRow.spec.js → deleteRow.spec.ts} +3 -5
  267. package/src/automations/tests/utilities/index.js +0 -2
  268. package/src/automations/{utils.js → utils.ts} +39 -27
  269. package/src/constants/index.js +6 -0
  270. package/src/definitions/datasource.ts +1 -0
  271. package/src/environment.js +1 -2
  272. package/src/index.ts +3 -0
  273. package/src/integrations/index.ts +4 -0
  274. package/src/integrations/redis.ts +152 -0
  275. package/src/integrations/tests/redis.spec.js +60 -0
  276. package/src/middleware/{authorized.js → authorized.ts} +20 -14
  277. package/src/middleware/currentapp.js +16 -1
  278. package/src/migrations/functions/developerQuota.ts +15 -0
  279. package/src/migrations/functions/publishedAppsQuota.ts +13 -0
  280. package/src/migrations/functions/tests/quotas1.spec.js +0 -2
  281. package/src/migrations/functions/usageQuotas/index.ts +0 -5
  282. package/src/migrations/functions/usageQuotas/syncApps.ts +3 -6
  283. package/src/migrations/functions/usageQuotas/syncDevelopers.ts +19 -0
  284. package/src/migrations/functions/usageQuotas/syncPublishedApps.ts +21 -0
  285. package/src/migrations/functions/usageQuotas/syncRows.ts +3 -6
  286. package/src/migrations/functions/usageQuotas/tests/syncApps.spec.ts +32 -0
  287. package/src/migrations/functions/usageQuotas/tests/syncRows.spec.ts +38 -0
  288. package/src/migrations/index.ts +13 -1
  289. package/src/module.d.ts +4 -0
  290. package/src/threads/automation.js +196 -34
  291. package/src/threads/{index.js → index.ts} +14 -12
  292. package/src/threads/utils.js +1 -0
  293. package/src/utilities/queue/inMemoryQueue.js +7 -1
  294. package/tsconfig.build.json +10 -0
  295. package/tsconfig.json +2 -2
  296. package/builder/assets/index.67350356.js +0 -1291
  297. package/coverage/lcov-report/api/controllers/application.js.html +0 -1430
  298. package/coverage/lcov-report/api/controllers/query/index.js.html +0 -713
  299. package/coverage/lcov-report/api/controllers/row/index.js.html +0 -524
  300. package/coverage/lcov-report/api/controllers/table/internal.js.html +0 -548
  301. package/coverage/lcov-report/api/controllers/table/utils.js.html +0 -1331
  302. package/coverage/lcov-report/api/routes/application.js.html +0 -179
  303. package/coverage/lcov-report/api/routes/index.js.html +0 -266
  304. package/coverage/lcov-report/api/routes/row.js.html +0 -908
  305. package/coverage/lcov-report/automations/steps/createRow.js.html +0 -380
  306. package/coverage/lcov-report/automations/steps/deleteRow.js.html +0 -347
  307. package/coverage/lcov-report/automations/utils.js.html +0 -662
  308. package/coverage/lcov-report/middleware/authorized.js.html +0 -458
  309. package/coverage/lcov-report/middleware/usageQuota.js.html +0 -572
  310. package/coverage/lcov-report/threads/index.js.html +0 -278
  311. package/coverage/lcov-report/utilities/usageQuota/index.js.html +0 -359
  312. package/dist/middleware/usageQuota.js +0 -154
  313. package/dist/tsconfig.tsbuildinfo +0 -1
  314. package/dist/utilities/usageQuota/index.js +0 -86
  315. package/src/api/routes/index.js +0 -62
  316. package/src/middleware/tests/usageQuota.spec.js +0 -134
  317. package/src/middleware/usageQuota.js +0 -164
  318. package/src/migrations/functions/usageQuotas/tests/syncApps.spec.js +0 -37
  319. package/src/migrations/functions/usageQuotas/tests/syncRows.spec.js +0 -43
  320. package/src/utilities/tests/usageQuota/usageQuota.spec.js +0 -72
  321. package/src/utilities/usageQuota/index.js +0 -93
@@ -12,22 +12,19 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.run = void 0;
13
13
  const tenancy_1 = require("@budibase/backend-core/tenancy");
14
14
  const db_1 = require("@budibase/backend-core/db");
15
- const usageQuota_1 = require("../../../utilities/usageQuota");
16
15
  const rows_1 = require("../../../utilities/usageQuota/rows");
16
+ const pro_1 = require("@budibase/pro");
17
17
  const run = () => __awaiter(void 0, void 0, void 0, function* () {
18
- const db = tenancy_1.getGlobalDB();
19
18
  // get all rows in all apps
20
19
  // @ts-ignore
21
- const allApps = yield db_1.getAllApps({ all: true });
20
+ const allApps = yield (0, db_1.getAllApps)({ all: true });
22
21
  // @ts-ignore
23
22
  const appIds = allApps ? allApps.map((app) => app.appId) : [];
24
- const rows = yield rows_1.getUniqueRows(appIds);
23
+ const rows = yield (0, rows_1.getUniqueRows)(appIds);
25
24
  const rowCount = rows ? rows.length : 0;
26
25
  // sync row count
27
- const tenantId = tenancy_1.getTenantId();
26
+ const tenantId = (0, tenancy_1.getTenantId)();
28
27
  console.log(`[Tenant: ${tenantId}] Syncing row count: ${rowCount}`);
29
- const usageDoc = yield usageQuota_1.getUsageQuotaDoc(db);
30
- usageDoc.usageQuota.rows = rowCount;
31
- yield db.put(usageDoc);
28
+ yield pro_1.quotas.setUsage(rowCount, pro_1.StaticQuotaName.ROWS, pro_1.QuotaUsageType.STATIC);
32
29
  });
33
30
  exports.run = run;
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -38,6 +42,8 @@ const { MIGRATION_TYPES, runMigrations, } = require("@budibase/backend-core/migr
38
42
  const userEmailViewCasing = __importStar(require("./functions/userEmailViewCasing"));
39
43
  const quota1 = __importStar(require("./functions/quotas1"));
40
44
  const appUrls = __importStar(require("./functions/appUrls"));
45
+ const developerQuota = __importStar(require("./functions/developerQuota"));
46
+ const publishedAppsQuota = __importStar(require("./functions/publishedAppsQuota"));
41
47
  exports.MIGRATIONS = [
42
48
  {
43
49
  type: MIGRATION_TYPES.GLOBAL,
@@ -55,6 +61,16 @@ exports.MIGRATIONS = [
55
61
  opts: { all: true },
56
62
  fn: appUrls.run,
57
63
  },
64
+ {
65
+ type: MIGRATION_TYPES.GLOBAL,
66
+ name: "developer_quota",
67
+ fn: developerQuota.run,
68
+ },
69
+ {
70
+ type: MIGRATION_TYPES.GLOBAL,
71
+ name: "published_apps_quota",
72
+ fn: publishedAppsQuota.run,
73
+ },
58
74
  ];
59
75
  const migrate = (options) => __awaiter(void 0, void 0, void 0, function* () {
60
76
  yield runMigrations(db_1.default, exports.MIGRATIONS, options);
package/dist/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@budibase/server",
3
3
  "email": "hi@budibase.com",
4
- "version": "1.0.105-alpha.3",
4
+ "version": "1.0.105-alpha.39",
5
5
  "description": "Budibase Web Server",
6
6
  "main": "src/index.ts",
7
7
  "repository": {
@@ -9,7 +9,7 @@
9
9
  "url": "https://github.com/Budibase/budibase.git"
10
10
  },
11
11
  "scripts": {
12
- "build": "rimraf dist/ && tsc && mv dist/src/* dist/ && rmdir dist/src/ && yarn postbuild",
12
+ "build": "rimraf dist/ && tsc -p tsconfig.build.json && mv dist/src/* dist/ && rimraf dist/src/ && yarn postbuild",
13
13
  "postbuild": "copyfiles -u 1 src/**/*.svelte dist/ && copyfiles -u 1 src/**/*.hbs dist/ && copyfiles -u 1 src/**/*.json dist/",
14
14
  "test": "jest --coverage --maxWorkers=2",
15
15
  "test:watch": "jest --watch",
@@ -68,16 +68,19 @@
68
68
  "license": "GPL-3.0",
69
69
  "dependencies": {
70
70
  "@apidevtools/swagger-parser": "^10.0.3",
71
- "@budibase/backend-core": "^1.0.105-alpha.3",
72
- "@budibase/client": "^1.0.105-alpha.3",
73
- "@budibase/string-templates": "^1.0.105-alpha.3",
71
+ "@budibase/backend-core": "^1.0.105-alpha.39",
72
+ "@budibase/client": "^1.0.105-alpha.39",
73
+ "@budibase/pro": "1.0.105-alpha.39",
74
+ "@budibase/string-templates": "^1.0.105-alpha.39",
74
75
  "@bull-board/api": "^3.7.0",
75
76
  "@bull-board/koa": "^3.7.0",
76
77
  "@elastic/elasticsearch": "7.10.0",
77
78
  "@google-cloud/firestore": "^5.0.2",
78
79
  "@koa/router": "8.0.0",
79
80
  "@sendgrid/mail": "7.1.1",
80
- "@sentry/node": "^6.0.0",
81
+ "@sentry/node": "6.17.7",
82
+ "@types/global-agent": "^2.1.1",
83
+ "@types/koa__router": "^8.0.11",
81
84
  "airtable": "0.10.1",
82
85
  "arangojs": "7.2.0",
83
86
  "aws-sdk": "^2.767.0",
@@ -91,6 +94,7 @@
91
94
  "fix-path": "3.0.0",
92
95
  "form-data": "^4.0.0",
93
96
  "fs-extra": "8.1.0",
97
+ "global-agent": "^3.0.0",
94
98
  "google-auth-library": "^7.11.0",
95
99
  "google-spreadsheet": "^3.2.0",
96
100
  "jimp": "0.16.1",
@@ -143,18 +147,20 @@
143
147
  "@types/apidoc": "^0.50.0",
144
148
  "@types/bull": "^3.15.1",
145
149
  "@types/google-spreadsheet": "^3.1.5",
146
- "@types/jest": "^26.0.23",
150
+ "@types/jest": "^27.4.1",
147
151
  "@types/koa": "^2.13.3",
148
152
  "@types/koa-router": "^7.4.2",
149
153
  "@types/lodash": "4.14.180",
150
154
  "@types/node": "^15.12.4",
151
155
  "@types/oracledb": "^5.2.1",
152
156
  "@types/redis": "^4.0.11",
157
+ "@typescript-eslint/parser": "5.12.0",
153
158
  "apidoc": "^0.50.2",
154
159
  "babel-jest": "^27.0.2",
155
160
  "copyfiles": "^2.4.1",
156
161
  "docker-compose": "^0.23.6",
157
162
  "eslint": "^6.8.0",
163
+ "ioredis-mock": "^7.2.0",
158
164
  "is-wsl": "^2.2.0",
159
165
  "jest": "^27.0.5",
160
166
  "jest-openapi": "^0.14.2",
@@ -168,7 +174,7 @@
168
174
  "swagger-jsdoc": "^6.1.0",
169
175
  "ts-jest": "^27.0.3",
170
176
  "ts-node": "^10.0.0",
171
- "typescript": "^4.3.5",
177
+ "typescript": "^4.5.5",
172
178
  "update-dotenv": "^1.1.1"
173
179
  },
174
180
  "optionalDependencies": {
@@ -18,9 +18,13 @@ const { DocumentTypes } = require("../db/utils");
18
18
  const { doInTenant } = require("@budibase/backend-core/tenancy");
19
19
  const { definitions: triggerDefs } = require("../automations/triggerInfo");
20
20
  const { doInAppContext, getAppDB } = require("@budibase/backend-core/context");
21
+ const { AutomationErrors } = require("../constants");
21
22
  const FILTER_STEP_ID = actions.ACTION_DEFINITIONS.FILTER.stepId;
23
+ const LOOP_STEP_ID = actions.ACTION_DEFINITIONS.LOOP.stepId;
22
24
  const CRON_STEP_ID = triggerDefs.CRON.stepId;
23
25
  const STOPPED_STATUS = { success: false, status: "STOPPED" };
26
+ const { cloneDeep } = require("lodash/fp");
27
+ const env = require("../environment");
24
28
  /**
25
29
  * The automation orchestrator is a class responsible for executing automations.
26
30
  * It handles the context of the automation and makes sure each step gets the correct
@@ -81,44 +85,162 @@ class Orchestrator {
81
85
  }
82
86
  this.executionOutput.steps.push(stepObj);
83
87
  }
88
+ updateContextAndOutput(loopStepNumber, step, output, result) {
89
+ this.executionOutput.steps.splice(loopStepNumber, 0, {
90
+ id: step.id,
91
+ stepId: step.stepId,
92
+ outputs: Object.assign(Object.assign({}, output), { success: result.success, status: result.status }),
93
+ inputs: step.inputs,
94
+ });
95
+ this._context.steps.splice(loopStepNumber, 0, Object.assign(Object.assign({}, output), { success: result.success, status: result.status }));
96
+ }
84
97
  execute() {
98
+ var _a;
85
99
  return __awaiter(this, void 0, void 0, function* () {
86
100
  let automation = this._automation;
87
101
  const app = yield this.getApp();
88
102
  let stopped = false;
103
+ let loopStep;
104
+ let stepCount = 0;
105
+ let loopStepNumber;
106
+ let loopSteps = [];
89
107
  for (let step of automation.definition.steps) {
90
- // execution stopped, record state for that
91
- if (stopped) {
92
- this.updateExecutionOutput(step.id, step.stepId, {}, STOPPED_STATUS);
108
+ stepCount++;
109
+ let input;
110
+ if (step.stepId === LOOP_STEP_ID) {
111
+ loopStep = step;
112
+ loopStepNumber = stepCount;
93
113
  continue;
94
114
  }
95
- let stepFn = yield this.getStepFunctionality(step.stepId);
96
- step.inputs = yield processObject(step.inputs, this._context);
97
- step.inputs = automationUtils.cleanInputValues(step.inputs, step.schema.inputs);
98
- // appId is always passed
99
- try {
100
- let tenantId = app.tenantId || DEFAULT_TENANT_ID;
101
- const outputs = yield doInTenant(tenantId, () => {
102
- return stepFn({
103
- inputs: step.inputs,
104
- appId: this._appId,
105
- emitter: this._emitter,
106
- context: this._context,
107
- });
108
- });
109
- this._context.steps.push(outputs);
110
- // if filter causes us to stop execution don't break the loop, set a var
111
- // so that we can finish iterating through the steps and record that it stopped
112
- if (step.stepId === FILTER_STEP_ID && !outputs.success) {
113
- stopped = true;
114
- this.updateExecutionOutput(step.id, step.stepId, step.inputs, Object.assign(Object.assign({}, outputs), STOPPED_STATUS));
115
+ if (loopStep) {
116
+ input = yield processObject(loopStep.inputs, this._context);
117
+ }
118
+ let iterations = loopStep ? input.binding.length : 1;
119
+ let iterationCount = 0;
120
+ for (let index = 0; index < iterations; index++) {
121
+ let originalStepInput = cloneDeep(step.inputs);
122
+ // Handle if the user has set a max iteration count or if it reaches the max limit set by us
123
+ if (loopStep) {
124
+ // lets first of all handle the input
125
+ // if the input is array then use it, if it is a string then split it on every new line
126
+ let newInput = yield processObject(loopStep.inputs, cloneDeep(this._context));
127
+ newInput = automationUtils.cleanInputValues(newInput, loopStep.schema.inputs);
128
+ this._context.steps[loopStepNumber] = {
129
+ currentItem: newInput.binding[index],
130
+ };
131
+ let tempOutput = { items: loopSteps, iterations: iterationCount };
132
+ if ((loopStep.inputs.option === "Array" &&
133
+ !Array.isArray(newInput.binding)) ||
134
+ (loopStep.inputs.option === "String" &&
135
+ typeof newInput.binding !== "string")) {
136
+ this.updateContextAndOutput(loopStepNumber, step, tempOutput, {
137
+ status: AutomationErrors.INCORRECT_TYPE,
138
+ success: false,
139
+ });
140
+ loopSteps = null;
141
+ loopStep = null;
142
+ break;
143
+ }
144
+ // The "Loop" binding in the front end is "fake", so replace it here so the context can understand it
145
+ // Pretty hacky because we need to account for the row object
146
+ for (let [key, value] of Object.entries(originalStepInput)) {
147
+ if (typeof value === "object") {
148
+ for (let [innerKey, innerValue] of Object.entries(originalStepInput[key])) {
149
+ if (typeof innerValue === "string") {
150
+ originalStepInput[key][innerKey] =
151
+ automationUtils.substituteLoopStep(innerValue, `steps.${loopStepNumber}`);
152
+ }
153
+ }
154
+ }
155
+ else {
156
+ if (typeof value === "string") {
157
+ originalStepInput[key] = automationUtils.substituteLoopStep(value, `steps.${loopStepNumber}`);
158
+ }
159
+ }
160
+ }
161
+ if (index === parseInt(env.AUTOMATION_MAX_ITERATIONS) ||
162
+ index === loopStep.inputs.iterations) {
163
+ this.updateContextAndOutput(loopStepNumber, step, tempOutput, {
164
+ status: AutomationErrors.MAX_ITERATIONS,
165
+ success: true,
166
+ });
167
+ loopSteps = null;
168
+ loopStep = null;
169
+ break;
170
+ }
171
+ if (((_a = this._context.steps[loopStepNumber]) === null || _a === void 0 ? void 0 : _a.currentItem) ===
172
+ loopStep.inputs.failure) {
173
+ this.updateContextAndOutput(loopStepNumber, step, tempOutput, {
174
+ status: AutomationErrors.FAILURE_CONDITION,
175
+ success: false,
176
+ });
177
+ loopSteps = null;
178
+ loopStep = null;
179
+ break;
180
+ }
181
+ }
182
+ // execution stopped, record state for that
183
+ if (stopped) {
184
+ this.updateExecutionOutput(step.id, step.stepId, {}, STOPPED_STATUS);
115
185
  continue;
116
186
  }
117
- this.updateExecutionOutput(step.id, step.stepId, step.inputs, outputs);
187
+ // If it's a loop step, we need to manually add the bindings to the context
188
+ let stepFn = yield this.getStepFunctionality(step.stepId);
189
+ let inputs = yield processObject(originalStepInput, this._context);
190
+ inputs = automationUtils.cleanInputValues(inputs, step.schema.inputs);
191
+ try {
192
+ // appId is always passed
193
+ let tenantId = app.tenantId || DEFAULT_TENANT_ID;
194
+ const outputs = yield doInTenant(tenantId, () => {
195
+ return stepFn({
196
+ inputs: inputs,
197
+ appId: this._appId,
198
+ emitter: this._emitter,
199
+ context: this._context,
200
+ });
201
+ });
202
+ this._context.steps[stepCount] = outputs;
203
+ // if filter causes us to stop execution don't break the loop, set a var
204
+ // so that we can finish iterating through the steps and record that it stopped
205
+ if (step.stepId === FILTER_STEP_ID && !outputs.success) {
206
+ stopped = true;
207
+ this.updateExecutionOutput(step.id, step.stepId, step.inputs, Object.assign(Object.assign({}, outputs), STOPPED_STATUS));
208
+ continue;
209
+ }
210
+ if (loopStep && loopSteps) {
211
+ loopSteps.push(outputs);
212
+ }
213
+ else {
214
+ this.updateExecutionOutput(step.id, step.stepId, step.inputs, outputs);
215
+ }
216
+ }
217
+ catch (err) {
218
+ console.error(`Automation error - ${step.stepId} - ${err}`);
219
+ return err;
220
+ }
221
+ if (loopStep) {
222
+ iterationCount++;
223
+ if (index === iterations - 1) {
224
+ loopStep = null;
225
+ this._context.steps.splice(loopStepNumber, 1);
226
+ break;
227
+ }
228
+ }
118
229
  }
119
- catch (err) {
120
- console.error(`Automation error - ${step.stepId} - ${err}`);
121
- return err;
230
+ if (loopSteps && loopSteps.length) {
231
+ let tempOutput = {
232
+ success: true,
233
+ items: loopSteps,
234
+ iterations: iterationCount,
235
+ };
236
+ this.executionOutput.steps.splice(loopStepNumber + 1, 0, {
237
+ id: step.id,
238
+ stepId: step.stepId,
239
+ outputs: tempOutput,
240
+ inputs: step.inputs,
241
+ });
242
+ this._context.steps.splice(loopStepNumber, 0, tempOutput);
243
+ loopSteps = null;
122
244
  }
123
245
  }
124
246
  return this.executionOutput;
@@ -1,17 +1,45 @@
1
1
  "use strict";
2
- const workerFarm = require("worker-farm");
3
- const env = require("../environment");
4
- const ThreadType = {
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.Thread = exports.ThreadType = void 0;
30
+ const worker_farm_1 = __importDefault(require("worker-farm"));
31
+ const env = __importStar(require("../environment"));
32
+ exports.ThreadType = {
5
33
  QUERY: "query",
6
34
  AUTOMATION: "automation",
7
35
  };
8
36
  function typeToFile(type) {
9
37
  let filename = null;
10
38
  switch (type) {
11
- case ThreadType.QUERY:
39
+ case exports.ThreadType.QUERY:
12
40
  filename = "./query";
13
41
  break;
14
- case ThreadType.AUTOMATION:
42
+ case exports.ThreadType.AUTOMATION:
15
43
  filename = "./automation";
16
44
  break;
17
45
  default:
@@ -36,7 +64,7 @@ class Thread {
36
64
  if (opts.timeoutMs) {
37
65
  workerOpts.maxCallTime = opts.timeoutMs;
38
66
  }
39
- this.workers = workerFarm(workerOpts, typeToFile(type));
67
+ this.workers = (0, worker_farm_1.default)(workerOpts, typeToFile(type));
40
68
  }
41
69
  }
42
70
  run(data) {
@@ -60,5 +88,4 @@ class Thread {
60
88
  });
61
89
  }
62
90
  }
63
- module.exports.Thread = Thread;
64
- module.exports.ThreadType = ThreadType;
91
+ exports.Thread = Thread;
@@ -69,6 +69,7 @@ exports.formatResponse = resp => {
69
69
  exports.hasExtraData = response => {
70
70
  return (typeof response === "object" &&
71
71
  !Array.isArray(response) &&
72
+ response &&
72
73
  response.data != null &&
73
74
  response.info != null);
74
75
  };