@budibase/server 1.0.123 → 1.0.125

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 (325) hide show
  1. package/builder/assets/index.3d890df7.js +1299 -0
  2. package/builder/assets/index.89795487.css +6 -0
  3. package/builder/assets/{vendor.8e34a169.js → vendor.5240f480.js} +1 -1
  4. package/builder/index.html +3 -3
  5. package/coverage/clover.xml +695 -1678
  6. package/coverage/coverage-final.json +28 -43
  7. package/coverage/lcov-report/api/controllers/analytics.js.html +8 -3
  8. package/coverage/lcov-report/api/controllers/apikeys.js.html +9 -4
  9. package/coverage/lcov-report/api/controllers/auth.js.html +8 -3
  10. package/coverage/lcov-report/api/controllers/automation.js.html +8 -3
  11. package/coverage/lcov-report/api/controllers/backup.js.html +8 -3
  12. package/coverage/lcov-report/api/controllers/cloud.js.html +8 -3
  13. package/coverage/lcov-report/api/controllers/component.js.html +8 -3
  14. package/coverage/lcov-report/api/controllers/datasource.js.html +11 -6
  15. package/coverage/lcov-report/api/controllers/dev.js.html +8 -3
  16. package/coverage/lcov-report/api/controllers/index.html +16 -26
  17. package/coverage/lcov-report/api/controllers/integration.js.html +8 -3
  18. package/coverage/lcov-report/api/controllers/layout.js.html +8 -3
  19. package/coverage/lcov-report/api/controllers/metadata.js.html +8 -3
  20. package/coverage/lcov-report/api/controllers/migrations.js.html +8 -3
  21. package/coverage/lcov-report/api/controllers/permission.js.html +8 -3
  22. package/coverage/lcov-report/api/controllers/query/index.html +16 -26
  23. package/coverage/lcov-report/api/controllers/query/validation.js.html +8 -3
  24. package/coverage/lcov-report/api/controllers/role.js.html +10 -5
  25. package/coverage/lcov-report/api/controllers/routing.js.html +9 -4
  26. package/coverage/lcov-report/api/controllers/row/external.js.html +8 -3
  27. package/coverage/lcov-report/api/controllers/row/index.html +25 -35
  28. package/coverage/lcov-report/api/controllers/row/internal.js.html +32 -24
  29. package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +21 -16
  30. package/coverage/lcov-report/api/controllers/row/staticFormula.js.html +24 -19
  31. package/coverage/lcov-report/api/controllers/row/utils.js.html +33 -19
  32. package/coverage/lcov-report/api/controllers/screen.js.html +9 -4
  33. package/coverage/lcov-report/api/controllers/script.js.html +8 -3
  34. package/coverage/lcov-report/api/controllers/table/bulkFormula.js.html +55 -50
  35. package/coverage/lcov-report/api/controllers/table/external.js.html +8 -3
  36. package/coverage/lcov-report/api/controllers/table/index.html +19 -44
  37. package/coverage/lcov-report/api/controllers/table/index.js.html +20 -15
  38. package/coverage/lcov-report/api/controllers/templates.js.html +8 -3
  39. package/coverage/lcov-report/api/controllers/user.js.html +8 -3
  40. package/coverage/lcov-report/api/controllers/view/exporters.js.html +8 -3
  41. package/coverage/lcov-report/api/controllers/view/index.html +8 -3
  42. package/coverage/lcov-report/api/controllers/view/index.js.html +10 -5
  43. package/coverage/lcov-report/api/controllers/view/utils.js.html +8 -3
  44. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +8 -3
  45. package/coverage/lcov-report/api/controllers/webhook.js.html +10 -5
  46. package/coverage/lcov-report/api/index.html +18 -13
  47. package/coverage/lcov-report/api/index.js.html +28 -8
  48. package/coverage/lcov-report/api/routes/analytics.js.html +8 -3
  49. package/coverage/lcov-report/api/routes/apikeys.js.html +8 -3
  50. package/coverage/lcov-report/api/routes/auth.js.html +8 -3
  51. package/coverage/lcov-report/api/routes/automation.js.html +8 -3
  52. package/coverage/lcov-report/api/routes/backup.js.html +8 -3
  53. package/coverage/lcov-report/api/routes/cloud.js.html +8 -3
  54. package/coverage/lcov-report/api/routes/component.js.html +8 -3
  55. package/coverage/lcov-report/api/routes/datasource.js.html +8 -3
  56. package/coverage/lcov-report/api/routes/deploy.js.html +8 -3
  57. package/coverage/lcov-report/api/routes/dev.js.html +9 -4
  58. package/coverage/lcov-report/api/routes/index.html +13 -68
  59. package/coverage/lcov-report/api/routes/integration.js.html +8 -3
  60. package/coverage/lcov-report/api/routes/layout.js.html +8 -3
  61. package/coverage/lcov-report/api/routes/metadata.js.html +8 -3
  62. package/coverage/lcov-report/api/routes/migrations.js.html +8 -3
  63. package/coverage/lcov-report/api/routes/permission.js.html +8 -3
  64. package/coverage/lcov-report/api/routes/query.js.html +8 -3
  65. package/coverage/lcov-report/api/routes/role.js.html +8 -3
  66. package/coverage/lcov-report/api/routes/routing.js.html +8 -3
  67. package/coverage/lcov-report/api/routes/screen.js.html +8 -3
  68. package/coverage/lcov-report/api/routes/script.js.html +8 -3
  69. package/coverage/lcov-report/api/routes/table.js.html +8 -3
  70. package/coverage/lcov-report/api/routes/templates.js.html +8 -3
  71. package/coverage/lcov-report/api/routes/user.js.html +8 -3
  72. package/coverage/lcov-report/api/routes/utils/index.html +8 -3
  73. package/coverage/lcov-report/api/routes/utils/validators.js.html +8 -3
  74. package/coverage/lcov-report/api/routes/view.js.html +8 -3
  75. package/coverage/lcov-report/api/routes/webhook.js.html +8 -3
  76. package/coverage/lcov-report/automations/actions.js.html +21 -7
  77. package/coverage/lcov-report/automations/automationUtils.js.html +64 -23
  78. package/coverage/lcov-report/automations/bullboard.js.html +8 -3
  79. package/coverage/lcov-report/automations/index.html +27 -37
  80. package/coverage/lcov-report/automations/index.js.html +8 -3
  81. package/coverage/lcov-report/automations/steps/bash.js.html +8 -3
  82. package/coverage/lcov-report/automations/steps/delay.js.html +8 -3
  83. package/coverage/lcov-report/automations/steps/discord.js.html +8 -3
  84. package/coverage/lcov-report/automations/steps/executeQuery.js.html +8 -3
  85. package/coverage/lcov-report/automations/steps/executeScript.js.html +8 -3
  86. package/coverage/lcov-report/automations/steps/filter.js.html +8 -3
  87. package/coverage/lcov-report/automations/steps/index.html +31 -41
  88. package/coverage/lcov-report/automations/steps/integromat.js.html +8 -3
  89. package/coverage/lcov-report/{api/routes/static.js.html → automations/steps/loop.js.html} +70 -80
  90. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +9 -4
  91. package/coverage/lcov-report/automations/steps/queryRows.js.html +9 -4
  92. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +8 -3
  93. package/coverage/lcov-report/automations/steps/serverLog.js.html +8 -3
  94. package/coverage/lcov-report/automations/steps/slack.js.html +8 -3
  95. package/coverage/lcov-report/automations/steps/updateRow.js.html +8 -3
  96. package/coverage/lcov-report/automations/steps/utils.js.html +14 -9
  97. package/coverage/lcov-report/automations/steps/zapier.js.html +8 -3
  98. package/coverage/lcov-report/automations/triggerInfo/app.js.html +8 -3
  99. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +8 -3
  100. package/coverage/lcov-report/automations/triggerInfo/index.html +8 -3
  101. package/coverage/lcov-report/automations/triggerInfo/index.js.html +8 -3
  102. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +8 -3
  103. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +8 -3
  104. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +8 -3
  105. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +8 -3
  106. package/coverage/lcov-report/automations/triggers.js.html +16 -11
  107. package/coverage/lcov-report/block-navigation.js +8 -0
  108. package/coverage/lcov-report/constants/index.html +12 -7
  109. package/coverage/lcov-report/constants/index.js.html +55 -32
  110. package/coverage/lcov-report/constants/layouts.js.html +8 -3
  111. package/coverage/lcov-report/constants/screens.js.html +8 -3
  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 +9 -4
  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 +84 -79
  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 +125 -120
  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 +30 -40
  140. package/coverage/lcov-report/threads/query.js.html +9 -4
  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 +48 -43
  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 +44 -39
  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 -2875
  165. package/dist/api/controllers/application.js +145 -73
  166. package/dist/api/controllers/deploy/index.js +68 -36
  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 +41 -35
  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 +75 -33
  194. package/dist/app.js +8 -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 +13 -11
  201. package/dist/automations/utils.js +187 -133
  202. package/dist/constants/index.js +5 -0
  203. package/dist/definitions/datasource.js +1 -0
  204. package/dist/environment.js +2 -3
  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/queries/sql.js +2 -2
  215. package/dist/integrations/redis.js +158 -0
  216. package/dist/integrations/rest.js +1 -1
  217. package/dist/middleware/authorized.js +51 -51
  218. package/dist/middleware/currentapp.js +15 -1
  219. package/dist/migrations/functions/appUrls.js +1 -1
  220. package/dist/migrations/functions/developerQuota.js +49 -0
  221. package/dist/migrations/functions/publishedAppsQuota.js +47 -0
  222. package/dist/migrations/functions/quotas1.js +6 -2
  223. package/dist/migrations/functions/usageQuotas/index.js +0 -4
  224. package/dist/migrations/functions/usageQuotas/syncApps.js +4 -7
  225. package/dist/migrations/functions/usageQuotas/syncDevelopers.js +24 -0
  226. package/dist/migrations/functions/usageQuotas/syncPublishedApps.js +26 -0
  227. package/dist/migrations/functions/usageQuotas/syncRows.js +5 -8
  228. package/dist/migrations/index.js +17 -1
  229. package/dist/package.json +14 -8
  230. package/dist/threads/automation.js +149 -27
  231. package/dist/threads/index.js +36 -10
  232. package/dist/threads/utils.js +1 -0
  233. package/dist/tsconfig.build.tsbuildinfo +1 -0
  234. package/dist/utilities/queue/inMemoryQueue.js +6 -1
  235. package/nodemon.json +1 -1
  236. package/package.json +15 -9
  237. package/scripts/dev/manage.js +2 -0
  238. package/src/api/controllers/{application.js → application.ts} +118 -51
  239. package/src/api/controllers/deploy/{index.js → index.ts} +53 -29
  240. package/src/api/controllers/public/applications.ts +2 -2
  241. package/src/api/controllers/public/queries.ts +1 -1
  242. package/src/api/controllers/public/rows.ts +1 -1
  243. package/src/api/controllers/query/{index.js → index.ts} +51 -48
  244. package/src/api/controllers/row/ExternalRequest.ts +1 -1
  245. package/src/api/controllers/row/{index.js → index.ts} +24 -17
  246. package/src/api/controllers/row/internal.js +2 -1
  247. package/src/api/controllers/row/utils.js +4 -1
  248. package/src/api/controllers/static/templates/BudibaseApp.svelte +3 -0
  249. package/src/api/controllers/table/bulkFormula.js +1 -1
  250. package/src/api/controllers/table/{internal.js → internal.ts} +30 -26
  251. package/src/api/controllers/table/{utils.js → utils.ts} +86 -69
  252. package/src/api/index.js +5 -0
  253. package/src/api/routes/{application.js → application.ts} +8 -14
  254. package/src/api/routes/index.ts +60 -0
  255. package/src/api/routes/public/index.ts +1 -4
  256. package/src/api/routes/{row.js → row.ts} +7 -15
  257. package/src/api/routes/{static.js → static.ts} +11 -11
  258. package/src/api/routes/tests/misc.spec.js +39 -37
  259. package/src/api/routes/tests/utilities/{TestFunctions.js → TestFunctions.ts} +57 -33
  260. package/src/app.ts +1 -2
  261. package/src/automations/actions.js +3 -0
  262. package/src/automations/automationUtils.js +12 -0
  263. package/src/automations/steps/{createRow.js → createRow.ts} +9 -15
  264. package/src/automations/steps/{deleteRow.js → deleteRow.ts} +10 -16
  265. package/src/automations/steps/loop.js +50 -0
  266. package/src/automations/tests/automation.spec.js +0 -1
  267. package/src/automations/tests/{createRow.spec.js → createRow.spec.ts} +4 -15
  268. package/src/automations/tests/{deleteRow.spec.js → deleteRow.spec.ts} +3 -5
  269. package/src/automations/tests/utilities/index.js +12 -10
  270. package/src/automations/{utils.js → utils.ts} +39 -28
  271. package/src/constants/index.js +6 -0
  272. package/src/definitions/common.ts +1 -0
  273. package/src/definitions/datasource.ts +1 -0
  274. package/src/environment.js +2 -3
  275. package/src/index.ts +3 -0
  276. package/src/integrations/index.ts +4 -0
  277. package/src/integrations/redis.ts +152 -0
  278. package/src/integrations/tests/redis.spec.js +60 -0
  279. package/src/middleware/{authorized.js → authorized.ts} +20 -14
  280. package/src/middleware/currentapp.js +16 -1
  281. package/src/middleware/tests/currentapp.spec.js +8 -4
  282. package/src/migrations/functions/developerQuota.ts +15 -0
  283. package/src/migrations/functions/publishedAppsQuota.ts +13 -0
  284. package/src/migrations/functions/tests/quotas1.spec.js +0 -2
  285. package/src/migrations/functions/usageQuotas/index.ts +0 -5
  286. package/src/migrations/functions/usageQuotas/syncApps.ts +3 -6
  287. package/src/migrations/functions/usageQuotas/syncDevelopers.ts +19 -0
  288. package/src/migrations/functions/usageQuotas/syncPublishedApps.ts +21 -0
  289. package/src/migrations/functions/usageQuotas/syncRows.ts +3 -6
  290. package/src/migrations/functions/usageQuotas/tests/syncApps.spec.ts +34 -0
  291. package/src/migrations/functions/usageQuotas/tests/syncRows.spec.ts +40 -0
  292. package/src/migrations/index.ts +13 -1
  293. package/src/threads/automation.js +196 -34
  294. package/src/threads/{index.js → index.ts} +18 -14
  295. package/src/threads/utils.js +1 -0
  296. package/src/utilities/queue/inMemoryQueue.js +7 -1
  297. package/tsconfig.build.json +10 -0
  298. package/tsconfig.json +2 -2
  299. package/builder/assets/index.68a7f4e3.css +0 -6
  300. package/builder/assets/index.8d4a5b33.js +0 -1291
  301. package/coverage/lcov-report/api/controllers/application.js.html +0 -1436
  302. package/coverage/lcov-report/api/controllers/query/index.js.html +0 -713
  303. package/coverage/lcov-report/api/controllers/row/index.js.html +0 -524
  304. package/coverage/lcov-report/api/controllers/table/internal.js.html +0 -620
  305. package/coverage/lcov-report/api/controllers/table/utils.js.html +0 -1331
  306. package/coverage/lcov-report/api/routes/application.js.html +0 -179
  307. package/coverage/lcov-report/api/routes/index.js.html +0 -266
  308. package/coverage/lcov-report/api/routes/row.js.html +0 -908
  309. package/coverage/lcov-report/automations/steps/createRow.js.html +0 -380
  310. package/coverage/lcov-report/automations/steps/deleteRow.js.html +0 -347
  311. package/coverage/lcov-report/automations/utils.js.html +0 -665
  312. package/coverage/lcov-report/middleware/authorized.js.html +0 -458
  313. package/coverage/lcov-report/middleware/usageQuota.js.html +0 -572
  314. package/coverage/lcov-report/threads/index.js.html +0 -296
  315. package/coverage/lcov-report/utilities/usageQuota/index.js.html +0 -359
  316. package/dist/middleware/usageQuota.js +0 -154
  317. package/dist/tsconfig.tsbuildinfo +0 -1
  318. package/dist/utilities/usageQuota/index.js +0 -86
  319. package/src/api/routes/index.js +0 -62
  320. package/src/middleware/tests/usageQuota.spec.js +0 -120
  321. package/src/middleware/usageQuota.js +0 -164
  322. package/src/migrations/functions/usageQuotas/tests/syncApps.spec.js +0 -41
  323. package/src/migrations/functions/usageQuotas/tests/syncRows.spec.js +0 -45
  324. package/src/utilities/tests/usageQuota/usageQuota.spec.js +0 -72
  325. package/src/utilities/usageQuota/index.js +0 -93
@@ -1,4 +1,27 @@
1
1
  "use strict";
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
+ };
2
25
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
26
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
27
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -8,50 +31,60 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
31
  step((generator = generator.apply(thisArg, _arguments || [])).next());
9
32
  });
10
33
  };
11
- const rowController = require("../../../controllers/row");
12
- const appController = require("../../../controllers/application");
13
- const { AppStatus } = require("../../../../db/utils");
14
- const { BUILTIN_ROLE_IDS } = require("@budibase/backend-core/roles");
15
- const { TENANT_ID } = require("../../../../tests/utilities/structures");
16
- const { doInAppContext } = require("@budibase/backend-core/context");
17
- const env = require("../../../../environment");
18
- function Request(appId, params) {
19
- this.appId = appId;
20
- this.params = params;
21
- this.request = {};
34
+ Object.defineProperty(exports, "__esModule", { value: true });
35
+ exports.runInProd = exports.testAutomation = exports.getDB = exports.checkPermissionsEndpoint = exports.checkBuilderEndpoint = exports.createRequest = exports.clearAllAutomations = exports.clearAllApps = exports.getAllTableRows = void 0;
36
+ const rowController = __importStar(require("../../../controllers/row"));
37
+ const appController = __importStar(require("../../../controllers/application"));
38
+ const utils_1 = require("../../../../db/utils");
39
+ const roles_1 = require("@budibase/backend-core/roles");
40
+ const tenancy_1 = require("@budibase/backend-core/tenancy");
41
+ const structures_1 = require("../../../../tests/utilities/structures");
42
+ const context_1 = require("@budibase/backend-core/context");
43
+ const env = __importStar(require("../../../../environment"));
44
+ class Request {
45
+ constructor(appId, params) {
46
+ this.appId = appId;
47
+ this.params = params;
48
+ this.request = {};
49
+ }
22
50
  }
23
51
  function runRequest(appId, controlFunc, request) {
24
- return doInAppContext(appId, () => __awaiter(this, void 0, void 0, function* () {
52
+ return (0, context_1.doInAppContext)(appId, () => __awaiter(this, void 0, void 0, function* () {
25
53
  return controlFunc(request);
26
54
  }));
27
55
  }
28
- exports.getAllTableRows = (config) => __awaiter(void 0, void 0, void 0, function* () {
56
+ const getAllTableRows = (config) => __awaiter(void 0, void 0, void 0, function* () {
29
57
  const req = new Request(config.appId, { tableId: config.table._id });
30
58
  yield runRequest(config.appId, rowController.fetch, req);
31
59
  return req.body;
32
60
  });
33
- exports.clearAllApps = (tenantId = TENANT_ID) => __awaiter(void 0, void 0, void 0, function* () {
34
- const req = { query: { status: AppStatus.DEV }, user: { tenantId } };
35
- yield appController.fetch(req);
36
- const apps = req.body;
37
- if (!apps || apps.length <= 0) {
38
- return;
39
- }
40
- for (let app of apps) {
41
- const { appId } = app;
42
- const req = new Request(null, { appId });
43
- yield runRequest(appId, appController.delete, req);
44
- }
61
+ exports.getAllTableRows = getAllTableRows;
62
+ const clearAllApps = (tenantId = structures_1.TENANT_ID) => __awaiter(void 0, void 0, void 0, function* () {
63
+ yield (0, tenancy_1.doInTenant)(tenantId, () => __awaiter(void 0, void 0, void 0, function* () {
64
+ const req = { query: { status: utils_1.AppStatus.DEV }, user: { tenantId } };
65
+ yield appController.fetch(req);
66
+ const apps = req.body;
67
+ if (!apps || apps.length <= 0) {
68
+ return;
69
+ }
70
+ for (let app of apps) {
71
+ const { appId } = app;
72
+ const req = new Request(null, { appId });
73
+ yield runRequest(appId, appController.destroy, req);
74
+ }
75
+ }));
45
76
  });
46
- exports.clearAllAutomations = (config) => __awaiter(void 0, void 0, void 0, function* () {
77
+ exports.clearAllApps = clearAllApps;
78
+ const clearAllAutomations = (config) => __awaiter(void 0, void 0, void 0, function* () {
47
79
  const automations = yield config.getAllAutomations();
48
80
  for (let auto of automations) {
49
- yield doInAppContext(config.appId, () => __awaiter(void 0, void 0, void 0, function* () {
81
+ yield (0, context_1.doInAppContext)(config.appId, () => __awaiter(void 0, void 0, void 0, function* () {
50
82
  yield config.deleteAutomation(auto);
51
83
  }));
52
84
  }
53
85
  });
54
- exports.createRequest = (request, method, url, body) => {
86
+ exports.clearAllAutomations = clearAllAutomations;
87
+ const createRequest = (request, method, url, body) => {
55
88
  let req;
56
89
  if (method === "POST")
57
90
  req = request.post(url).send(body);
@@ -65,7 +98,8 @@ exports.createRequest = (request, method, url, body) => {
65
98
  req = request.put(url).send(body);
66
99
  return req;
67
100
  };
68
- exports.checkBuilderEndpoint = ({ config, method, url, body }) => __awaiter(void 0, void 0, void 0, function* () {
101
+ exports.createRequest = createRequest;
102
+ const checkBuilderEndpoint = ({ config, method, url, body, }) => __awaiter(void 0, void 0, void 0, function* () {
69
103
  const headers = yield config.login({
70
104
  userId: "us_fail",
71
105
  builder: false,
@@ -76,7 +110,8 @@ exports.checkBuilderEndpoint = ({ config, method, url, body }) => __awaiter(void
76
110
  .set(headers)
77
111
  .expect(403);
78
112
  });
79
- exports.checkPermissionsEndpoint = ({ config, method, url, body, passRole, failRole, }) => __awaiter(void 0, void 0, void 0, function* () {
113
+ exports.checkBuilderEndpoint = checkBuilderEndpoint;
114
+ const checkPermissionsEndpoint = ({ config, method, url, body, passRole, failRole, }) => __awaiter(void 0, void 0, void 0, function* () {
80
115
  const passHeader = yield config.login({
81
116
  roleId: passRole,
82
117
  prodApp: true,
@@ -86,7 +121,7 @@ exports.checkPermissionsEndpoint = ({ config, method, url, body, passRole, failR
86
121
  .set(passHeader)
87
122
  .expect(200);
88
123
  let failHeader;
89
- if (failRole === BUILTIN_ROLE_IDS.PUBLIC) {
124
+ if (failRole === roles_1.BUILTIN_ROLE_IDS.PUBLIC) {
90
125
  failHeader = config.publicHeaders({ prodApp: true });
91
126
  }
92
127
  else {
@@ -101,7 +136,12 @@ exports.checkPermissionsEndpoint = ({ config, method, url, body, passRole, failR
101
136
  .set(failHeader)
102
137
  .expect(403);
103
138
  });
104
- exports.testAutomation = (config, automation) => __awaiter(void 0, void 0, void 0, function* () {
139
+ exports.checkPermissionsEndpoint = checkPermissionsEndpoint;
140
+ const getDB = () => {
141
+ return (0, context_1.getAppDB)();
142
+ };
143
+ exports.getDB = getDB;
144
+ const testAutomation = (config, automation) => __awaiter(void 0, void 0, void 0, function* () {
105
145
  return runRequest(automation.appId, () => __awaiter(void 0, void 0, void 0, function* () {
106
146
  return yield config.request
107
147
  .post(`/api/automations/${automation._id}/test`)
@@ -116,7 +156,8 @@ exports.testAutomation = (config, automation) => __awaiter(void 0, void 0, void
116
156
  .expect(200);
117
157
  }));
118
158
  });
119
- exports.runInProd = (func) => __awaiter(void 0, void 0, void 0, function* () {
159
+ exports.testAutomation = testAutomation;
160
+ const runInProd = (func) => __awaiter(void 0, void 0, void 0, function* () {
120
161
  const nodeEnv = env.NODE_ENV;
121
162
  const workerId = env.JEST_WORKER_ID;
122
163
  env._set("NODE_ENV", "PRODUCTION");
@@ -125,3 +166,4 @@ exports.runInProd = (func) => __awaiter(void 0, void 0, void 0, function* () {
125
166
  env._set("NODE_ENV", nodeEnv);
126
167
  env._set("JEST_WORKER_ID", workerId);
127
168
  });
169
+ exports.runInProd = runInProd;
package/dist/app.js CHANGED
@@ -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];
@@ -45,7 +49,7 @@ const automations = require("./automations/index");
45
49
  const Sentry = require("@sentry/node");
46
50
  const fileSystem = require("./utilities/fileSystem");
47
51
  const bullboard = require("./automations/bullboard");
48
- const redis = require("./utilities/redis");
52
+ const redis_1 = __importDefault(require("./utilities/redis"));
49
53
  const migrations = __importStar(require("./migrations"));
50
54
  const app = new Koa();
51
55
  // set up top level koa middleware
@@ -89,14 +93,14 @@ server.on("close", () => __awaiter(void 0, void 0, void 0, function* () {
89
93
  if (env.NODE_ENV !== "jest") {
90
94
  console.log("Server Closed");
91
95
  }
92
- yield redis.shutdown();
96
+ yield redis_1.default.shutdown();
93
97
  }));
94
98
  module.exports = server.listen(env.PORT || 0, () => __awaiter(void 0, void 0, void 0, function* () {
95
99
  console.log(`Budibase running on ${JSON.stringify(server.address())}`);
96
100
  env._set("PORT", server.address().port);
97
101
  eventEmitter.emitPort(env.PORT);
98
102
  fileSystem.init();
99
- yield redis.init();
103
+ yield redis_1.default.init();
100
104
  yield automations.init();
101
105
  }));
102
106
  const shutdown = () => {
@@ -23,6 +23,7 @@ const integromat = require("./steps/integromat");
23
23
  let filter = require("./steps/filter");
24
24
  let delay = require("./steps/delay");
25
25
  let queryRow = require("./steps/queryRows");
26
+ let loop = require("./steps/loop");
26
27
  const env = require("../environment");
27
28
  const ACTION_IMPLS = {
28
29
  SEND_EMAIL_SMTP: sendSmtpEmail.run,
@@ -36,6 +37,7 @@ const ACTION_IMPLS = {
36
37
  DELAY: delay.run,
37
38
  FILTER: filter.run,
38
39
  QUERY_ROWS: queryRow.run,
40
+ LOOP: loop.run,
39
41
  // these used to be lowercase step IDs, maintain for backwards compat
40
42
  discord: discord.run,
41
43
  slack: slack.run,
@@ -54,6 +56,7 @@ const ACTION_DEFINITIONS = {
54
56
  DELAY: delay.definition,
55
57
  FILTER: filter.definition,
56
58
  QUERY_ROWS: queryRow.definition,
59
+ LOOP: loop.definition,
57
60
  // these used to be lowercase step IDs, maintain for backwards compat
58
61
  discord: discord.definition,
59
62
  slack: slack.definition,
@@ -9,6 +9,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  });
10
10
  };
11
11
  const { getTable } = require("../api/controllers/table/utils");
12
+ const { findHBSBlocks } = require("@budibase/string-templates");
12
13
  /**
13
14
  * When values are input to the system generally they will be of type string as this is required for template strings.
14
15
  * This can generate some odd scenarios as the Schema of the automation requires a number but the builder might supply
@@ -79,3 +80,12 @@ exports.getError = err => {
79
80
  }
80
81
  return typeof err !== "string" ? err.toString() : err;
81
82
  };
83
+ exports.substituteLoopStep = (hbsString, substitute) => {
84
+ let blocks = findHBSBlocks(hbsString);
85
+ for (let block of blocks) {
86
+ let oldBlock = block;
87
+ block = block.replace(/loop/, substitute);
88
+ hbsString = hbsString.replace(new RegExp(oldBlock, "g"), block);
89
+ }
90
+ return hbsString;
91
+ };
@@ -8,10 +8,11 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  step((generator = generator.apply(thisArg, _arguments || [])).next());
9
9
  });
10
10
  };
11
- const rowController = require("../../api/controllers/row");
12
- const automationUtils = require("../automationUtils");
13
- const usage = require("../../utilities/usageQuota");
14
- const { buildCtx } = require("./utils");
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.run = exports.definition = void 0;
13
+ const row_1 = require("../../api/controllers/row");
14
+ const automationUtils_1 = require("../automationUtils");
15
+ const utils_1 = require("./utils");
15
16
  exports.definition = {
16
17
  name: "Create Row",
17
18
  tagline: "Create a {{inputs.enriched.table.name}} row",
@@ -67,7 +68,7 @@ exports.definition = {
67
68
  },
68
69
  },
69
70
  };
70
- exports.run = function ({ inputs, appId, emitter }) {
71
+ function run({ inputs, appId, emitter }) {
71
72
  return __awaiter(this, void 0, void 0, function* () {
72
73
  if (inputs.row == null || inputs.row.tableId == null) {
73
74
  return {
@@ -78,17 +79,15 @@ exports.run = function ({ inputs, appId, emitter }) {
78
79
  };
79
80
  }
80
81
  // have to clean up the row, remove the table from it
81
- const ctx = buildCtx(appId, emitter, {
82
+ const ctx = (0, utils_1.buildCtx)(appId, emitter, {
82
83
  body: inputs.row,
83
84
  params: {
84
85
  tableId: inputs.row.tableId,
85
86
  },
86
87
  });
87
88
  try {
88
- inputs.row = yield automationUtils.cleanUpRow(inputs.row.tableId, inputs.row);
89
- yield usage.update(usage.Properties.ROW, 1, { dryRun: true });
90
- yield rowController.save(ctx);
91
- yield usage.update(usage.Properties.ROW, 1);
89
+ inputs.row = yield (0, automationUtils_1.cleanUpRow)(inputs.row.tableId, inputs.row);
90
+ yield (0, row_1.save)(ctx);
92
91
  return {
93
92
  row: inputs.row,
94
93
  response: ctx.body,
@@ -100,8 +99,9 @@ exports.run = function ({ inputs, appId, emitter }) {
100
99
  catch (err) {
101
100
  return {
102
101
  success: false,
103
- response: automationUtils.getError(err),
102
+ response: (0, automationUtils_1.getError)(err),
104
103
  };
105
104
  }
106
105
  });
107
- };
106
+ }
107
+ exports.run = run;
@@ -8,10 +8,11 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  step((generator = generator.apply(thisArg, _arguments || [])).next());
9
9
  });
10
10
  };
11
- const rowController = require("../../api/controllers/row");
12
- const usage = require("../../utilities/usageQuota");
13
- const { buildCtx } = require("./utils");
14
- const automationUtils = require("../automationUtils");
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.run = exports.definition = void 0;
13
+ const row_1 = require("../../api/controllers/row");
14
+ const utils_1 = require("./utils");
15
+ const automationUtils_1 = require("../automationUtils");
15
16
  exports.definition = {
16
17
  description: "Delete a row from your database",
17
18
  icon: "TableRowRemoveCenter",
@@ -33,12 +34,8 @@ exports.definition = {
33
34
  type: "string",
34
35
  title: "Row ID",
35
36
  },
36
- revision: {
37
- type: "string",
38
- title: "Row Revision",
39
- },
40
37
  },
41
- required: ["tableId", "id", "revision"],
38
+ required: ["tableId", "id"],
42
39
  },
43
40
  outputs: {
44
41
  properties: {
@@ -60,9 +57,9 @@ exports.definition = {
60
57
  },
61
58
  },
62
59
  };
63
- exports.run = function ({ inputs, appId, emitter }) {
60
+ function run({ inputs, appId, emitter }) {
64
61
  return __awaiter(this, void 0, void 0, function* () {
65
- if (inputs.id == null || inputs.revision == null) {
62
+ if (inputs.id == null) {
66
63
  return {
67
64
  success: false,
68
65
  response: {
@@ -70,7 +67,7 @@ exports.run = function ({ inputs, appId, emitter }) {
70
67
  },
71
68
  };
72
69
  }
73
- let ctx = buildCtx(appId, emitter, {
70
+ let ctx = (0, utils_1.buildCtx)(appId, emitter, {
74
71
  body: {
75
72
  _id: inputs.id,
76
73
  _rev: inputs.revision,
@@ -80,8 +77,7 @@ exports.run = function ({ inputs, appId, emitter }) {
80
77
  },
81
78
  });
82
79
  try {
83
- yield usage.update(usage.Properties.ROW, -1);
84
- yield rowController.destroy(ctx);
80
+ yield (0, row_1.destroy)(ctx);
85
81
  return {
86
82
  response: ctx.body,
87
83
  row: ctx.row,
@@ -91,8 +87,9 @@ exports.run = function ({ inputs, appId, emitter }) {
91
87
  catch (err) {
92
88
  return {
93
89
  success: false,
94
- response: automationUtils.getError(err),
90
+ response: (0, automationUtils_1.getError)(err),
95
91
  };
96
92
  }
97
93
  });
98
- };
94
+ }
95
+ exports.run = run;
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ exports.definition = {
3
+ name: "Looping",
4
+ icon: "Reuse",
5
+ tagline: "Loop the block",
6
+ description: "Loop",
7
+ stepId: "LOOP",
8
+ internal: true,
9
+ inputs: {},
10
+ schema: {
11
+ inputs: {
12
+ properties: {
13
+ option: {
14
+ customType: "loopOption",
15
+ title: "Input type",
16
+ },
17
+ binding: {
18
+ type: "string",
19
+ title: "Binding / Value",
20
+ },
21
+ iterations: {
22
+ type: "number",
23
+ title: "Max loop iterations",
24
+ },
25
+ failure: {
26
+ type: "string",
27
+ title: "Failure Condition",
28
+ },
29
+ },
30
+ required: ["type", "value", "iterations", "failure"],
31
+ },
32
+ outputs: {
33
+ properties: {
34
+ items: {
35
+ customType: "item",
36
+ description: "The item currently being executed",
37
+ },
38
+ success: {
39
+ type: "boolean",
40
+ description: "Whether the message loop was successfully",
41
+ },
42
+ iterations: {
43
+ type: "number",
44
+ descriptions: "The amount of times the block ran",
45
+ },
46
+ },
47
+ required: ["success", "items", "iterations"],
48
+ },
49
+ },
50
+ type: "LOGIC",
51
+ };
@@ -9,6 +9,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  });
10
10
  };
11
11
  const TestConfig = require("../../../tests/utilities/TestConfiguration");
12
+ const { TENANT_ID } = require("../../../tests/utilities/structures");
13
+ const { doInTenant } = require("@budibase/backend-core/tenancy");
12
14
  const actions = require("../../actions");
13
15
  const emitter = require("../../../events/index");
14
16
  const env = require("../../../environment");
@@ -24,7 +26,6 @@ exports.afterAll = () => {
24
26
  };
25
27
  exports.runInProd = (fn) => __awaiter(void 0, void 0, void 0, function* () {
26
28
  env._set("NODE_ENV", "production");
27
- env._set("USE_QUOTAS", 1);
28
29
  let error;
29
30
  try {
30
31
  yield fn();
@@ -33,22 +34,23 @@ exports.runInProd = (fn) => __awaiter(void 0, void 0, void 0, function* () {
33
34
  error = err;
34
35
  }
35
36
  env._set("NODE_ENV", "jest");
36
- env._set("USE_QUOTAS", null);
37
37
  if (error) {
38
38
  throw error;
39
39
  }
40
40
  });
41
41
  exports.runStep = function runStep(stepId, inputs) {
42
42
  return __awaiter(this, void 0, void 0, function* () {
43
- let step = yield actions.getAction(stepId);
44
- expect(step).toBeDefined();
45
- return step({
46
- inputs,
47
- appId: config ? config.getAppId() : null,
48
- // don't really need an API key, mocked out usage quota, not being tested here
49
- apiKey: exports.apiKey,
50
- emitter,
51
- });
43
+ return doInTenant(TENANT_ID, () => __awaiter(this, void 0, void 0, function* () {
44
+ let step = yield actions.getAction(stepId);
45
+ expect(step).toBeDefined();
46
+ return step({
47
+ inputs,
48
+ appId: config ? config.getAppId() : null,
49
+ // don't really need an API key, mocked out usage quota, not being tested here
50
+ apiKey: exports.apiKey,
51
+ emitter,
52
+ });
53
+ }));
52
54
  });
53
55
  };
54
56
  exports.apiKey = "test";