@budibase/server 1.0.123-alpha.0 → 1.0.123

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 (330) hide show
  1. package/builder/assets/index.68a7f4e3.css +6 -0
  2. package/builder/assets/index.8d4a5b33.js +1291 -0
  3. package/builder/assets/{vendor.5240f480.js → vendor.8e34a169.js} +1 -1
  4. package/builder/index.html +3 -3
  5. package/coverage/clover.xml +1763 -758
  6. package/coverage/coverage-final.json +43 -28
  7. package/coverage/lcov-report/api/controllers/analytics.js.html +3 -8
  8. package/coverage/lcov-report/api/controllers/apikeys.js.html +4 -9
  9. package/coverage/lcov-report/api/controllers/application.js.html +1436 -0
  10. package/coverage/lcov-report/api/controllers/auth.js.html +3 -8
  11. package/coverage/lcov-report/api/controllers/automation.js.html +3 -8
  12. package/coverage/lcov-report/api/controllers/backup.js.html +3 -8
  13. package/coverage/lcov-report/api/controllers/cloud.js.html +3 -8
  14. package/coverage/lcov-report/api/controllers/component.js.html +3 -8
  15. package/coverage/lcov-report/api/controllers/datasource.js.html +6 -11
  16. package/coverage/lcov-report/api/controllers/dev.js.html +3 -8
  17. package/coverage/lcov-report/api/controllers/index.html +26 -16
  18. package/coverage/lcov-report/api/controllers/integration.js.html +3 -8
  19. package/coverage/lcov-report/api/controllers/layout.js.html +3 -8
  20. package/coverage/lcov-report/api/controllers/metadata.js.html +3 -8
  21. package/coverage/lcov-report/api/controllers/migrations.js.html +3 -8
  22. package/coverage/lcov-report/api/controllers/permission.js.html +3 -8
  23. package/coverage/lcov-report/api/controllers/query/index.html +26 -16
  24. package/coverage/lcov-report/api/controllers/query/index.js.html +713 -0
  25. package/coverage/lcov-report/api/controllers/query/validation.js.html +3 -8
  26. package/coverage/lcov-report/api/controllers/role.js.html +5 -10
  27. package/coverage/lcov-report/api/controllers/routing.js.html +4 -9
  28. package/coverage/lcov-report/api/controllers/row/external.js.html +3 -8
  29. package/coverage/lcov-report/api/controllers/row/index.html +35 -25
  30. package/coverage/lcov-report/api/controllers/row/index.js.html +524 -0
  31. package/coverage/lcov-report/api/controllers/row/internal.js.html +24 -32
  32. package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +16 -21
  33. package/coverage/lcov-report/api/controllers/row/staticFormula.js.html +19 -24
  34. package/coverage/lcov-report/api/controllers/row/utils.js.html +19 -33
  35. package/coverage/lcov-report/api/controllers/screen.js.html +4 -9
  36. package/coverage/lcov-report/api/controllers/script.js.html +3 -8
  37. package/coverage/lcov-report/api/controllers/table/bulkFormula.js.html +50 -55
  38. package/coverage/lcov-report/api/controllers/table/external.js.html +3 -8
  39. package/coverage/lcov-report/api/controllers/table/index.html +44 -19
  40. package/coverage/lcov-report/api/controllers/table/index.js.html +15 -20
  41. package/coverage/lcov-report/api/controllers/table/internal.js.html +620 -0
  42. package/coverage/lcov-report/api/controllers/table/utils.js.html +1331 -0
  43. package/coverage/lcov-report/api/controllers/templates.js.html +3 -8
  44. package/coverage/lcov-report/api/controllers/user.js.html +3 -8
  45. package/coverage/lcov-report/api/controllers/view/exporters.js.html +3 -8
  46. package/coverage/lcov-report/api/controllers/view/index.html +3 -8
  47. package/coverage/lcov-report/api/controllers/view/index.js.html +5 -10
  48. package/coverage/lcov-report/api/controllers/view/utils.js.html +3 -8
  49. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +3 -8
  50. package/coverage/lcov-report/api/controllers/webhook.js.html +5 -10
  51. package/coverage/lcov-report/api/index.html +13 -18
  52. package/coverage/lcov-report/api/index.js.html +8 -28
  53. package/coverage/lcov-report/api/routes/analytics.js.html +3 -8
  54. package/coverage/lcov-report/api/routes/apikeys.js.html +3 -8
  55. package/coverage/lcov-report/api/routes/application.js.html +179 -0
  56. package/coverage/lcov-report/api/routes/auth.js.html +3 -8
  57. package/coverage/lcov-report/api/routes/automation.js.html +3 -8
  58. package/coverage/lcov-report/api/routes/backup.js.html +3 -8
  59. package/coverage/lcov-report/api/routes/cloud.js.html +3 -8
  60. package/coverage/lcov-report/api/routes/component.js.html +3 -8
  61. package/coverage/lcov-report/api/routes/datasource.js.html +3 -8
  62. package/coverage/lcov-report/api/routes/deploy.js.html +3 -8
  63. package/coverage/lcov-report/api/routes/dev.js.html +4 -9
  64. package/coverage/lcov-report/api/routes/index.html +68 -13
  65. package/coverage/lcov-report/api/routes/index.js.html +266 -0
  66. package/coverage/lcov-report/api/routes/integration.js.html +3 -8
  67. package/coverage/lcov-report/api/routes/layout.js.html +3 -8
  68. package/coverage/lcov-report/api/routes/metadata.js.html +3 -8
  69. package/coverage/lcov-report/api/routes/migrations.js.html +3 -8
  70. package/coverage/lcov-report/api/routes/permission.js.html +3 -8
  71. package/coverage/lcov-report/api/routes/query.js.html +3 -8
  72. package/coverage/lcov-report/api/routes/role.js.html +3 -8
  73. package/coverage/lcov-report/api/routes/routing.js.html +3 -8
  74. package/coverage/lcov-report/api/routes/row.js.html +908 -0
  75. package/coverage/lcov-report/api/routes/screen.js.html +3 -8
  76. package/coverage/lcov-report/api/routes/script.js.html +3 -8
  77. package/coverage/lcov-report/{automations/steps/loop.js.html → api/routes/static.js.html} +80 -70
  78. package/coverage/lcov-report/api/routes/table.js.html +3 -8
  79. package/coverage/lcov-report/api/routes/templates.js.html +3 -8
  80. package/coverage/lcov-report/api/routes/user.js.html +3 -8
  81. package/coverage/lcov-report/api/routes/utils/index.html +3 -8
  82. package/coverage/lcov-report/api/routes/utils/validators.js.html +3 -8
  83. package/coverage/lcov-report/api/routes/view.js.html +3 -8
  84. package/coverage/lcov-report/api/routes/webhook.js.html +3 -8
  85. package/coverage/lcov-report/automations/actions.js.html +7 -21
  86. package/coverage/lcov-report/automations/automationUtils.js.html +23 -64
  87. package/coverage/lcov-report/automations/bullboard.js.html +3 -8
  88. package/coverage/lcov-report/automations/index.html +37 -27
  89. package/coverage/lcov-report/automations/index.js.html +3 -8
  90. package/coverage/lcov-report/automations/steps/bash.js.html +3 -8
  91. package/coverage/lcov-report/automations/steps/createRow.js.html +380 -0
  92. package/coverage/lcov-report/automations/steps/delay.js.html +3 -8
  93. package/coverage/lcov-report/automations/steps/deleteRow.js.html +347 -0
  94. package/coverage/lcov-report/automations/steps/discord.js.html +3 -8
  95. package/coverage/lcov-report/automations/steps/executeQuery.js.html +3 -8
  96. package/coverage/lcov-report/automations/steps/executeScript.js.html +3 -8
  97. package/coverage/lcov-report/automations/steps/filter.js.html +3 -8
  98. package/coverage/lcov-report/automations/steps/index.html +41 -31
  99. package/coverage/lcov-report/automations/steps/integromat.js.html +3 -8
  100. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +4 -9
  101. package/coverage/lcov-report/automations/steps/queryRows.js.html +4 -9
  102. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +3 -8
  103. package/coverage/lcov-report/automations/steps/serverLog.js.html +3 -8
  104. package/coverage/lcov-report/automations/steps/slack.js.html +3 -8
  105. package/coverage/lcov-report/automations/steps/updateRow.js.html +3 -8
  106. package/coverage/lcov-report/automations/steps/utils.js.html +9 -14
  107. package/coverage/lcov-report/automations/steps/zapier.js.html +3 -8
  108. package/coverage/lcov-report/automations/triggerInfo/app.js.html +3 -8
  109. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +3 -8
  110. package/coverage/lcov-report/automations/triggerInfo/index.html +3 -8
  111. package/coverage/lcov-report/automations/triggerInfo/index.js.html +3 -8
  112. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +3 -8
  113. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +3 -8
  114. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +3 -8
  115. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +3 -8
  116. package/coverage/lcov-report/automations/triggers.js.html +11 -16
  117. package/coverage/lcov-report/automations/utils.js.html +665 -0
  118. package/coverage/lcov-report/block-navigation.js +0 -8
  119. package/coverage/lcov-report/constants/index.html +3 -8
  120. package/coverage/lcov-report/constants/index.js.html +42 -41
  121. package/coverage/lcov-report/constants/layouts.js.html +3 -8
  122. package/coverage/lcov-report/constants/screens.js.html +3 -8
  123. package/coverage/lcov-report/db/inMemoryView.js.html +3 -8
  124. package/coverage/lcov-report/db/index.html +3 -8
  125. package/coverage/lcov-report/db/index.js.html +4 -9
  126. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +23 -25
  127. package/coverage/lcov-report/db/linkedRows/index.html +12 -17
  128. package/coverage/lcov-report/db/linkedRows/index.js.html +17 -22
  129. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +7 -12
  130. package/coverage/lcov-report/db/newid.js.html +6 -11
  131. package/coverage/lcov-report/db/utils.js.html +79 -84
  132. package/coverage/lcov-report/events/AutomationEmitter.js.html +9 -14
  133. package/coverage/lcov-report/events/index.html +3 -8
  134. package/coverage/lcov-report/events/index.js.html +4 -9
  135. package/coverage/lcov-report/events/utils.js.html +13 -18
  136. package/coverage/lcov-report/index.html +132 -137
  137. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +3 -8
  138. package/coverage/lcov-report/integrations/tests/index.html +3 -8
  139. package/coverage/lcov-report/middleware/appInfo.js.html +3 -8
  140. package/coverage/lcov-report/middleware/authorized.js.html +458 -0
  141. package/coverage/lcov-report/middleware/builder.js.html +3 -8
  142. package/coverage/lcov-report/middleware/currentapp.js.html +15 -65
  143. package/coverage/lcov-report/middleware/index.html +50 -25
  144. package/coverage/lcov-report/middleware/joi-validator.js.html +4 -9
  145. package/coverage/lcov-report/middleware/publicApi.js.html +3 -8
  146. package/coverage/lcov-report/middleware/resourceId.js.html +3 -8
  147. package/coverage/lcov-report/middleware/selfhost.js.html +4 -9
  148. package/coverage/lcov-report/middleware/usageQuota.js.html +572 -0
  149. package/coverage/lcov-report/middleware/utils.js.html +3 -8
  150. package/coverage/lcov-report/sorter.js +0 -26
  151. package/coverage/lcov-report/threads/automation.js.html +90 -581
  152. package/coverage/lcov-report/threads/index.html +40 -30
  153. package/coverage/lcov-report/threads/index.js.html +296 -0
  154. package/coverage/lcov-report/threads/query.js.html +4 -9
  155. package/coverage/lcov-report/threads/utils.js.html +9 -17
  156. package/coverage/lcov-report/utilities/bcrypt.js.html +3 -8
  157. package/coverage/lcov-report/utilities/budibaseDir.js.html +3 -8
  158. package/coverage/lcov-report/utilities/centralPath.js.html +3 -8
  159. package/coverage/lcov-report/utilities/csvParser.js.html +5 -10
  160. package/coverage/lcov-report/utilities/global.js.html +4 -9
  161. package/coverage/lcov-report/utilities/index.html +3 -8
  162. package/coverage/lcov-report/utilities/index.js.html +6 -11
  163. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +9 -32
  164. package/coverage/lcov-report/utilities/queue/index.html +7 -12
  165. package/coverage/lcov-report/utilities/routing/index.html +3 -8
  166. package/coverage/lcov-report/utilities/routing/index.js.html +3 -8
  167. package/coverage/lcov-report/utilities/rowProcessor/index.html +27 -32
  168. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +71 -67
  169. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +106 -27
  170. package/coverage/lcov-report/utilities/scriptRunner.js.html +3 -8
  171. package/coverage/lcov-report/utilities/security.js.html +4 -9
  172. package/coverage/lcov-report/utilities/statusCodes.js.html +3 -8
  173. package/coverage/lcov-report/utilities/usageQuota/index.html +34 -24
  174. package/coverage/lcov-report/utilities/usageQuota/index.js.html +359 -0
  175. package/coverage/lcov-report/utilities/usageQuota/rows.js.html +39 -44
  176. package/coverage/lcov-report/utilities/usageQuota/usageQuoteReset.js.html +3 -8
  177. package/coverage/lcov-report/utilities/users.js.html +3 -8
  178. package/coverage/lcov-report/utilities/workerRequests.js.html +4 -9
  179. package/coverage/lcov.info +3061 -1290
  180. package/dist/api/controllers/application.js +73 -145
  181. package/dist/api/controllers/deploy/index.js +36 -68
  182. package/dist/api/controllers/public/applications.js +9 -29
  183. package/dist/api/controllers/public/queries.js +7 -27
  184. package/dist/api/controllers/public/rows.js +12 -32
  185. package/dist/api/controllers/public/tables.js +2 -2
  186. package/dist/api/controllers/public/users.js +8 -8
  187. package/dist/api/controllers/public/utils.js +1 -1
  188. package/dist/api/controllers/query/import/index.js +3 -3
  189. package/dist/api/controllers/query/index.js +44 -57
  190. package/dist/api/controllers/row/ExternalRequest.js +27 -27
  191. package/dist/api/controllers/row/index.js +60 -83
  192. package/dist/api/controllers/row/internal.js +1 -2
  193. package/dist/api/controllers/row/utils.js +1 -2
  194. package/dist/api/controllers/static/templates/BudibaseApp.svelte +0 -3
  195. package/dist/api/controllers/table/bulkFormula.js +1 -2
  196. package/dist/api/controllers/table/internal.js +55 -40
  197. package/dist/api/controllers/table/utils.js +229 -271
  198. package/dist/api/index.js +0 -5
  199. package/dist/api/routes/application.js +13 -39
  200. package/dist/api/routes/index.js +56 -61
  201. package/dist/api/routes/public/index.js +9 -6
  202. package/dist/api/routes/public/queries.js +1 -1
  203. package/dist/api/routes/public/rows.js +1 -1
  204. package/dist/api/routes/public/tables.js +3 -3
  205. package/dist/api/routes/public/users.js +1 -1
  206. package/dist/api/routes/row.js +17 -43
  207. package/dist/api/routes/static.js +13 -40
  208. package/dist/api/routes/tests/utilities/TestFunctions.js +33 -75
  209. package/dist/app.js +4 -8
  210. package/dist/automations/actions.js +0 -3
  211. package/dist/automations/automationUtils.js +0 -10
  212. package/dist/automations/steps/createRow.js +12 -12
  213. package/dist/automations/steps/deleteRow.js +16 -13
  214. package/dist/automations/tests/utilities/index.js +11 -13
  215. package/dist/automations/utils.js +133 -187
  216. package/dist/constants/index.js +7 -5
  217. package/dist/db/linkedRows/LinkController.js +1 -0
  218. package/dist/definitions/datasource.js +0 -1
  219. package/dist/environment.js +3 -2
  220. package/dist/index.js +0 -4
  221. package/dist/integrations/base/sql.js +2 -2
  222. package/dist/integrations/base/sqlTable.js +2 -2
  223. package/dist/integrations/googlesheets.js +1 -1
  224. package/dist/integrations/index.js +0 -4
  225. package/dist/integrations/microsoftSqlServer.js +8 -8
  226. package/dist/integrations/mysql.js +9 -9
  227. package/dist/integrations/oracle.js +7 -7
  228. package/dist/integrations/postgres.js +7 -7
  229. package/dist/integrations/queries/sql.js +2 -2
  230. package/dist/integrations/rest.js +1 -1
  231. package/dist/middleware/authorized.js +51 -51
  232. package/dist/middleware/currentapp.js +1 -15
  233. package/dist/middleware/usageQuota.js +154 -0
  234. package/dist/migrations/functions/appUrls.js +1 -1
  235. package/dist/migrations/functions/quotas1.js +2 -6
  236. package/dist/migrations/functions/usageQuotas/index.js +4 -0
  237. package/dist/migrations/functions/usageQuotas/syncApps.js +7 -4
  238. package/dist/migrations/functions/usageQuotas/syncRows.js +8 -5
  239. package/dist/migrations/index.js +1 -17
  240. package/dist/package.json +4 -10
  241. package/dist/threads/automation.js +27 -149
  242. package/dist/threads/index.js +10 -36
  243. package/dist/threads/utils.js +0 -1
  244. package/dist/tsconfig.tsbuildinfo +1 -0
  245. package/dist/utilities/queue/inMemoryQueue.js +1 -6
  246. package/dist/utilities/rowProcessor/index.js +11 -6
  247. package/dist/utilities/rowProcessor/utils.js +27 -1
  248. package/dist/utilities/usageQuota/index.js +86 -0
  249. package/nodemon.json +1 -1
  250. package/package.json +9 -15
  251. package/scripts/dev/manage.js +0 -2
  252. package/src/api/controllers/{application.ts → application.js} +51 -118
  253. package/src/api/controllers/deploy/{index.ts → index.js} +29 -53
  254. package/src/api/controllers/public/applications.ts +2 -2
  255. package/src/api/controllers/public/queries.ts +1 -1
  256. package/src/api/controllers/public/rows.ts +1 -1
  257. package/src/api/controllers/query/{index.ts → index.js} +48 -51
  258. package/src/api/controllers/row/ExternalRequest.ts +1 -1
  259. package/src/api/controllers/row/{index.ts → index.js} +17 -24
  260. package/src/api/controllers/row/internal.js +1 -2
  261. package/src/api/controllers/row/utils.js +1 -4
  262. package/src/api/controllers/static/templates/BudibaseApp.svelte +0 -3
  263. package/src/api/controllers/table/bulkFormula.js +1 -1
  264. package/src/api/controllers/table/{internal.ts → internal.js} +48 -27
  265. package/src/api/controllers/table/{utils.ts → utils.js} +69 -86
  266. package/src/api/index.js +0 -5
  267. package/src/api/routes/{application.ts → application.js} +14 -8
  268. package/src/api/routes/index.js +62 -0
  269. package/src/api/routes/public/index.ts +4 -1
  270. package/src/api/routes/{row.ts → row.js} +15 -7
  271. package/src/api/routes/{static.ts → static.js} +11 -11
  272. package/src/api/routes/tests/misc.spec.js +37 -39
  273. package/src/api/routes/tests/routing.spec.js +0 -1
  274. package/src/api/routes/tests/utilities/{TestFunctions.ts → TestFunctions.js} +33 -57
  275. package/src/app.ts +2 -1
  276. package/src/automations/actions.js +0 -3
  277. package/src/automations/automationUtils.js +0 -12
  278. package/src/automations/steps/{createRow.ts → createRow.js} +15 -9
  279. package/src/automations/steps/{deleteRow.ts → deleteRow.js} +16 -10
  280. package/src/automations/tests/automation.spec.js +1 -0
  281. package/src/automations/tests/{createRow.spec.ts → createRow.spec.js} +15 -4
  282. package/src/automations/tests/{deleteRow.spec.ts → deleteRow.spec.js} +5 -3
  283. package/src/automations/tests/utilities/index.js +10 -12
  284. package/src/automations/{utils.ts → utils.js} +28 -39
  285. package/src/constants/index.js +8 -6
  286. package/src/db/linkedRows/LinkController.js +1 -0
  287. package/src/definitions/datasource.ts +0 -1
  288. package/src/environment.js +3 -2
  289. package/src/index.ts +0 -3
  290. package/src/integrations/index.ts +0 -4
  291. package/src/middleware/{authorized.ts → authorized.js} +14 -20
  292. package/src/middleware/currentapp.js +1 -16
  293. package/src/middleware/tests/usageQuota.spec.js +120 -0
  294. package/src/middleware/usageQuota.js +164 -0
  295. package/src/migrations/functions/tests/quotas1.spec.js +2 -0
  296. package/src/migrations/functions/usageQuotas/index.ts +5 -0
  297. package/src/migrations/functions/usageQuotas/syncApps.ts +6 -3
  298. package/src/migrations/functions/usageQuotas/syncRows.ts +6 -3
  299. package/src/migrations/functions/usageQuotas/tests/syncApps.spec.js +41 -0
  300. package/src/migrations/functions/usageQuotas/tests/syncRows.spec.js +45 -0
  301. package/src/migrations/index.ts +1 -13
  302. package/src/threads/automation.js +34 -196
  303. package/src/threads/{index.ts → index.js} +14 -18
  304. package/src/threads/utils.js +0 -1
  305. package/src/utilities/queue/inMemoryQueue.js +1 -7
  306. package/src/utilities/rowProcessor/index.js +12 -9
  307. package/src/utilities/rowProcessor/utils.js +29 -1
  308. package/src/utilities/tests/usageQuota/usageQuota.spec.js +72 -0
  309. package/src/utilities/usageQuota/index.js +93 -0
  310. package/tsconfig.json +2 -2
  311. package/builder/assets/index.89795487.css +0 -6
  312. package/builder/assets/index.be9a1b80.js +0 -1299
  313. package/dist/automations/steps/loop.js +0 -51
  314. package/dist/integrations/redis.js +0 -158
  315. package/dist/migrations/functions/developerQuota.js +0 -49
  316. package/dist/migrations/functions/publishedAppsQuota.js +0 -47
  317. package/dist/migrations/functions/usageQuotas/syncDevelopers.js +0 -24
  318. package/dist/migrations/functions/usageQuotas/syncPublishedApps.js +0 -26
  319. package/dist/tsconfig.build.tsbuildinfo +0 -1
  320. package/src/api/routes/index.ts +0 -60
  321. package/src/automations/steps/loop.js +0 -50
  322. package/src/integrations/redis.ts +0 -152
  323. package/src/integrations/tests/redis.spec.js +0 -60
  324. package/src/migrations/functions/developerQuota.ts +0 -15
  325. package/src/migrations/functions/publishedAppsQuota.ts +0 -13
  326. package/src/migrations/functions/usageQuotas/syncDevelopers.ts +0 -19
  327. package/src/migrations/functions/usageQuotas/syncPublishedApps.ts +0 -21
  328. package/src/migrations/functions/usageQuotas/tests/syncApps.spec.ts +0 -34
  329. package/src/migrations/functions/usageQuotas/tests/syncRows.spec.ts +0 -40
  330. package/tsconfig.build.json +0 -10
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ const env = require("../../environment");
12
+ const { getGlobalDB, getTenantId } = require("@budibase/backend-core/tenancy");
13
+ const { StaticDatabases, generateNewUsageQuotaDoc, } = require("@budibase/backend-core/db");
14
+ exports.useQuotas = () => {
15
+ // check if quotas are enabled
16
+ if (env.USE_QUOTAS) {
17
+ // check if there are any tenants without limits
18
+ if (env.EXCLUDE_QUOTAS_TENANTS) {
19
+ const excludedTenants = env.EXCLUDE_QUOTAS_TENANTS.replace(/\s/g, "").split(",");
20
+ const tenantId = getTenantId();
21
+ if (excludedTenants.includes(tenantId)) {
22
+ return false;
23
+ }
24
+ }
25
+ return true;
26
+ }
27
+ return false;
28
+ };
29
+ exports.Properties = {
30
+ ROW: "rows",
31
+ UPLOAD: "storage",
32
+ VIEW: "views",
33
+ USER: "users",
34
+ AUTOMATION: "automationRuns",
35
+ APPS: "apps",
36
+ EMAILS: "emails", // doesn't work yet
37
+ };
38
+ exports.getUsageQuotaDoc = (db) => __awaiter(void 0, void 0, void 0, function* () {
39
+ let quota;
40
+ try {
41
+ quota = yield db.get(StaticDatabases.GLOBAL.docs.usageQuota);
42
+ }
43
+ catch (err) {
44
+ // doc doesn't exist. Create it
45
+ quota = generateNewUsageQuotaDoc();
46
+ const response = yield db.put(quota);
47
+ quota._rev = response.rev;
48
+ }
49
+ return quota;
50
+ });
51
+ /**
52
+ * Given a specified tenantId this will add to the usage object for the specified property.
53
+ * @param {string} property The property which is to be added to (within the nested usageQuota object).
54
+ * @param {number} usage The amount (this can be negative) to adjust the number by.
55
+ * @param {object} opts optional - options such as dryRun, to check what update will do.
56
+ * @returns {Promise<void>} When this completes the API key will now be up to date - the quota period may have
57
+ * also been reset after this call.
58
+ */
59
+ exports.update = (property, usage, opts = { dryRun: false }) => __awaiter(void 0, void 0, void 0, function* () {
60
+ if (!exports.useQuotas()) {
61
+ return;
62
+ }
63
+ try {
64
+ const db = getGlobalDB();
65
+ const quota = yield exports.getUsageQuotaDoc(db);
66
+ // increment the quota
67
+ quota.usageQuota[property] += usage;
68
+ if (quota.usageQuota[property] > quota.usageLimits[property] &&
69
+ usage > 0 // allow for decrementing usage when the quota is already exceeded
70
+ ) {
71
+ throw new Error(`You have exceeded your usage quota of ${quota.usageLimits[property]} ${property}.`);
72
+ }
73
+ if (quota.usageQuota[property] < 0) {
74
+ // never go negative if the quota has previously been exceeded
75
+ quota.usageQuota[property] = 0;
76
+ }
77
+ // update the usage quotas
78
+ if (!opts.dryRun) {
79
+ yield db.put(quota);
80
+ }
81
+ }
82
+ catch (err) {
83
+ console.error(`Error updating usage quotas for ${property}`, err);
84
+ throw err;
85
+ }
86
+ });
package/nodemon.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "watch": ["src", "../backend-core", "../../../budibase-pro/packages/pro"],
2
+ "watch": ["src", "../backend-core"],
3
3
  "ext": "js,ts,json",
4
4
  "ignore": ["src/**/*.spec.ts", "src/**/*.spec.js"],
5
5
  "exec": "ts-node src/index.ts"
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@budibase/server",
3
3
  "email": "hi@budibase.com",
4
- "version": "1.0.123-alpha.0",
4
+ "version": "1.0.123",
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 -p tsconfig.build.json && mv dist/src/* dist/ && rimraf dist/src/ && yarn postbuild",
12
+ "build": "rimraf dist/ && tsc && mv dist/src/* dist/ && rmdir 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,19 +68,16 @@
68
68
  "license": "GPL-3.0",
69
69
  "dependencies": {
70
70
  "@apidevtools/swagger-parser": "^10.0.3",
71
- "@budibase/backend-core": "^1.0.123-alpha.0",
72
- "@budibase/client": "^1.0.123-alpha.0",
73
- "@budibase/pro": "1.0.105-alpha.43",
74
- "@budibase/string-templates": "^1.0.123-alpha.0",
71
+ "@budibase/backend-core": "^1.0.123",
72
+ "@budibase/client": "^1.0.123",
73
+ "@budibase/string-templates": "^1.0.123",
75
74
  "@bull-board/api": "^3.7.0",
76
75
  "@bull-board/koa": "^3.7.0",
77
76
  "@elastic/elasticsearch": "7.10.0",
78
77
  "@google-cloud/firestore": "^5.0.2",
79
78
  "@koa/router": "8.0.0",
80
79
  "@sendgrid/mail": "7.1.1",
81
- "@sentry/node": "6.17.7",
82
- "@types/global-agent": "^2.1.1",
83
- "@types/koa__router": "^8.0.11",
80
+ "@sentry/node": "^6.0.0",
84
81
  "airtable": "0.10.1",
85
82
  "arangojs": "7.2.0",
86
83
  "aws-sdk": "^2.767.0",
@@ -94,7 +91,6 @@
94
91
  "fix-path": "3.0.0",
95
92
  "form-data": "^4.0.0",
96
93
  "fs-extra": "8.1.0",
97
- "global-agent": "^3.0.0",
98
94
  "google-auth-library": "^7.11.0",
99
95
  "google-spreadsheet": "^3.2.0",
100
96
  "jimp": "0.16.1",
@@ -147,20 +143,18 @@
147
143
  "@types/apidoc": "^0.50.0",
148
144
  "@types/bull": "^3.15.1",
149
145
  "@types/google-spreadsheet": "^3.1.5",
150
- "@types/jest": "^27.4.1",
146
+ "@types/jest": "^26.0.23",
151
147
  "@types/koa": "^2.13.3",
152
148
  "@types/koa-router": "^7.4.2",
153
149
  "@types/lodash": "4.14.180",
154
150
  "@types/node": "^15.12.4",
155
151
  "@types/oracledb": "^5.2.1",
156
152
  "@types/redis": "^4.0.11",
157
- "@typescript-eslint/parser": "5.12.0",
158
153
  "apidoc": "^0.50.2",
159
154
  "babel-jest": "^27.0.2",
160
155
  "copyfiles": "^2.4.1",
161
156
  "docker-compose": "^0.23.6",
162
157
  "eslint": "^6.8.0",
163
- "ioredis-mock": "^7.2.0",
164
158
  "is-wsl": "^2.2.0",
165
159
  "jest": "^27.0.5",
166
160
  "jest-openapi": "^0.14.2",
@@ -174,11 +168,11 @@
174
168
  "swagger-jsdoc": "^6.1.0",
175
169
  "ts-jest": "^27.0.3",
176
170
  "ts-node": "^10.0.0",
177
- "typescript": "^4.5.5",
171
+ "typescript": "^4.3.5",
178
172
  "update-dotenv": "^1.1.1"
179
173
  },
180
174
  "optionalDependencies": {
181
175
  "oracledb": "^5.3.0"
182
176
  },
183
- "gitHead": "94632aed5c844bb780b9a81238207b4965c40a54"
177
+ "gitHead": "db99c31b53d0dbbb788335126e45d1cc2f39fbf0"
184
178
  }
@@ -42,8 +42,6 @@ async function init() {
42
42
  REDIS_URL: "localhost:6379",
43
43
  WORKER_URL: "http://localhost:4002",
44
44
  INTERNAL_API_KEY: "budibase",
45
- ACCOUNT_PORTAL_URL: "http://localhost:10001",
46
- ACCOUNT_PORTAL_API_KEY: "budibase",
47
45
  JWT_SECRET: "testsecret",
48
46
  REDIS_PASSWORD: "budibase",
49
47
  MINIO_ACCESS_KEY: "budibase",
@@ -1,29 +1,29 @@
1
- import env from "../../environment"
2
- import packageJson from "../../../package.json"
3
- import {
1
+ const env = require("../../environment")
2
+ const packageJson = require("../../../package.json")
3
+ const {
4
4
  createLinkView,
5
5
  createRoutingView,
6
6
  createAllSearchIndex,
7
- } from "../../db/views/staticViews"
8
- import {
7
+ } = require("../../db/views/staticViews")
8
+ const {
9
9
  getTemplateStream,
10
10
  createApp,
11
11
  deleteApp,
12
- } from "../../utilities/fileSystem"
13
- import {
12
+ } = require("../../utilities/fileSystem")
13
+ const {
14
14
  generateAppID,
15
15
  getLayoutParams,
16
16
  getScreenParams,
17
17
  generateDevAppID,
18
18
  DocumentTypes,
19
19
  AppStatus,
20
- } from "../../db/utils"
20
+ } = require("../../db/utils")
21
21
  const {
22
22
  BUILTIN_ROLE_IDS,
23
23
  AccessController,
24
24
  } = require("@budibase/backend-core/roles")
25
- import { BASE_LAYOUTS } from "../../constants/layouts"
26
- import { cloneDeep } from "lodash/fp"
25
+ const { BASE_LAYOUTS } = require("../../constants/layouts")
26
+ const { cloneDeep } = require("lodash/fp")
27
27
  const { processObject } = require("@budibase/string-templates")
28
28
  const {
29
29
  getAllApps,
@@ -31,27 +31,24 @@ const {
31
31
  getProdAppID,
32
32
  Replication,
33
33
  } = require("@budibase/backend-core/db")
34
- import { USERS_TABLE_SCHEMA } from "../../constants"
35
- import { removeAppFromUserRoles } from "../../utilities/workerRequests"
36
- import { clientLibraryPath, stringToReadStream } from "../../utilities"
37
- import { getAllLocks } from "../../utilities/redis"
38
- import {
34
+ const { USERS_TABLE_SCHEMA } = require("../../constants")
35
+ const { removeAppFromUserRoles } = require("../../utilities/workerRequests")
36
+ const { clientLibraryPath, stringToReadStream } = require("../../utilities")
37
+ const { getAllLocks } = require("../../utilities/redis")
38
+ const {
39
39
  updateClientLibrary,
40
40
  backupClientLibrary,
41
41
  revertClientLibrary,
42
- } from "../../utilities/fileSystem/clientLibrary"
42
+ } = require("../../utilities/fileSystem/clientLibrary")
43
43
  const { getTenantId, isMultiTenant } = require("@budibase/backend-core/tenancy")
44
- import { syncGlobalUsers } from "./user"
44
+ const { syncGlobalUsers } = require("./user")
45
45
  const { app: appCache } = require("@budibase/backend-core/cache")
46
- import { cleanupAutomations } from "../../automations/utils"
46
+ const { cleanupAutomations } = require("../../automations/utils")
47
47
  const {
48
48
  getAppDB,
49
49
  getProdAppDB,
50
50
  updateAppId,
51
51
  } = require("@budibase/backend-core/context")
52
- import { getUniqueRows } from "../../utilities/usageQuota/rows"
53
- import { quotas } from "@budibase/pro"
54
- import { errors } from "@budibase/backend-core"
55
52
 
56
53
  const URL_REGEX_SLASH = /\/|\\/g
57
54
 
@@ -64,7 +61,7 @@ async function getLayouts() {
64
61
  include_docs: true,
65
62
  })
66
63
  )
67
- ).rows.map((row: any) => row.doc)
64
+ ).rows.map(row => row.doc)
68
65
  }
69
66
 
70
67
  async function getScreens() {
@@ -75,16 +72,16 @@ async function getScreens() {
75
72
  include_docs: true,
76
73
  })
77
74
  )
78
- ).rows.map((row: any) => row.doc)
75
+ ).rows.map(row => row.doc)
79
76
  }
80
77
 
81
- function getUserRoleId(ctx: any) {
78
+ function getUserRoleId(ctx) {
82
79
  return !ctx.user.role || !ctx.user.role._id
83
80
  ? BUILTIN_ROLE_IDS.PUBLIC
84
81
  : ctx.user.role._id
85
82
  }
86
83
 
87
- export const getAppUrl = (ctx: any) => {
84
+ exports.getAppUrl = ctx => {
88
85
  // construct the url
89
86
  let url
90
87
  if (ctx.request.body.url) {
@@ -100,34 +97,29 @@ export const getAppUrl = (ctx: any) => {
100
97
  return url
101
98
  }
102
99
 
103
- const checkAppUrl = (ctx: any, apps: any, url: any, currentAppId?: string) => {
100
+ const checkAppUrl = (ctx, apps, url, currentAppId) => {
104
101
  if (currentAppId) {
105
- apps = apps.filter((app: any) => app.appId !== currentAppId)
102
+ apps = apps.filter(app => app.appId !== currentAppId)
106
103
  }
107
- if (apps.some((app: any) => app.url === url)) {
104
+ if (apps.some(app => app.url === url)) {
108
105
  ctx.throw(400, "App URL is already in use.")
109
106
  }
110
107
  }
111
108
 
112
- const checkAppName = (
113
- ctx: any,
114
- apps: any,
115
- name: any,
116
- currentAppId?: string
117
- ) => {
109
+ const checkAppName = (ctx, apps, name, currentAppId) => {
118
110
  // TODO: Replace with Joi
119
111
  if (!name) {
120
112
  ctx.throw(400, "Name is required")
121
113
  }
122
114
  if (currentAppId) {
123
- apps = apps.filter((app: any) => app.appId !== currentAppId)
115
+ apps = apps.filter(app => app.appId !== currentAppId)
124
116
  }
125
- if (apps.some((app: any) => app.name === name)) {
117
+ if (apps.some(app => app.name === name)) {
126
118
  ctx.throw(400, "App name is already in use.")
127
119
  }
128
120
  }
129
121
 
130
- async function createInstance(template: any) {
122
+ async function createInstance(template) {
131
123
  const tenantId = isMultiTenant() ? getTenantId() : null
132
124
  const baseAppId = generateAppID(tenantId)
133
125
  const appId = generateDevAppID(baseAppId)
@@ -168,7 +160,7 @@ async function createInstance(template: any) {
168
160
  return { _id: appId }
169
161
  }
170
162
 
171
- export const fetch = async (ctx: any) => {
163
+ exports.fetch = async ctx => {
172
164
  const dev = ctx.query && ctx.query.status === AppStatus.DEV
173
165
  const all = ctx.query && ctx.query.status === AppStatus.ALL
174
166
  const apps = await getAllApps({ dev, all })
@@ -180,7 +172,7 @@ export const fetch = async (ctx: any) => {
180
172
  if (app.status !== "development") {
181
173
  continue
182
174
  }
183
- const lock = locks.find((lock: any) => lock.appId === app.appId)
175
+ const lock = locks.find(lock => lock.appId === app.appId)
184
176
  if (lock) {
185
177
  app.lockedBy = lock.user
186
178
  } else {
@@ -193,7 +185,7 @@ export const fetch = async (ctx: any) => {
193
185
  ctx.body = apps
194
186
  }
195
187
 
196
- export const fetchAppDefinition = async (ctx: any) => {
188
+ exports.fetchAppDefinition = async ctx => {
197
189
  const layouts = await getLayouts()
198
190
  const userRoleId = getUserRoleId(ctx)
199
191
  const accessController = new AccessController()
@@ -208,7 +200,7 @@ export const fetchAppDefinition = async (ctx: any) => {
208
200
  }
209
201
  }
210
202
 
211
- export const fetchAppPackage = async (ctx: any) => {
203
+ exports.fetchAppPackage = async ctx => {
212
204
  const db = getAppDB()
213
205
  const application = await db.get(DocumentTypes.APP_METADATA)
214
206
  const layouts = await getLayouts()
@@ -229,7 +221,7 @@ export const fetchAppPackage = async (ctx: any) => {
229
221
  }
230
222
  }
231
223
 
232
- const performAppCreate = async (ctx: any) => {
224
+ exports.create = async ctx => {
233
225
  const apps = await getAllApps({ dev: true })
234
226
  const name = ctx.request.body.name
235
227
  checkAppName(ctx, apps, name)
@@ -237,7 +229,7 @@ const performAppCreate = async (ctx: any) => {
237
229
  checkAppUrl(ctx, apps, url)
238
230
 
239
231
  const { useTemplate, templateKey, templateString } = ctx.request.body
240
- const instanceConfig: any = {
232
+ const instanceConfig = {
241
233
  useTemplate,
242
234
  key: templateKey,
243
235
  templateString,
@@ -288,41 +280,13 @@ const performAppCreate = async (ctx: any) => {
288
280
  }
289
281
 
290
282
  await appCache.invalidateAppMetadata(appId, newApplication)
291
- return newApplication
292
- }
293
-
294
- const appPostCreate = async (ctx: any, appId: string) => {
295
- // app import & template creation
296
- if (ctx.request.body.useTemplate === "true") {
297
- const rows = await getUniqueRows([appId])
298
- const rowCount = rows ? rows.length : 0
299
- if (rowCount) {
300
- try {
301
- await quotas.addRows(rowCount)
302
- } catch (err: any) {
303
- if (err.code && err.code === errors.codes.USAGE_LIMIT_EXCEEDED) {
304
- // this import resulted in row usage exceeding the quota
305
- // delete the app
306
- // skip pre and post steps as no rows have been added to quotas yet
307
- ctx.params.appId = appId
308
- await destroyApp(ctx)
309
- }
310
- throw err
311
- }
312
- }
313
- }
314
- }
315
-
316
- export const create = async (ctx: any) => {
317
- const newApplication = await quotas.addApp(() => performAppCreate(ctx))
318
- await appPostCreate(ctx, newApplication.appId)
319
- ctx.body = newApplication
320
283
  ctx.status = 200
284
+ ctx.body = newApplication
321
285
  }
322
286
 
323
287
  // This endpoint currently operates as a PATCH rather than a PUT
324
288
  // Thus name and url fields are handled only if present
325
- export const update = async (ctx: any) => {
289
+ exports.update = async ctx => {
326
290
  const apps = await getAllApps({ dev: true })
327
291
  // validation
328
292
  const name = ctx.request.body.name
@@ -340,7 +304,7 @@ export const update = async (ctx: any) => {
340
304
  ctx.body = data
341
305
  }
342
306
 
343
- export const updateClient = async (ctx: any) => {
307
+ exports.updateClient = async ctx => {
344
308
  // Get current app version
345
309
  const db = getAppDB()
346
310
  const application = await db.get(DocumentTypes.APP_METADATA)
@@ -362,7 +326,7 @@ export const updateClient = async (ctx: any) => {
362
326
  ctx.body = data
363
327
  }
364
328
 
365
- export const revertClient = async (ctx: any) => {
329
+ exports.revertClient = async ctx => {
366
330
  // Check app can be reverted
367
331
  const db = getAppDB()
368
332
  const application = await db.get(DocumentTypes.APP_METADATA)
@@ -385,57 +349,26 @@ export const revertClient = async (ctx: any) => {
385
349
  ctx.body = data
386
350
  }
387
351
 
388
- const destroyApp = async (ctx: any) => {
389
- let appId = ctx.params.appId
390
- let isUnpublish = ctx.query && ctx.query.unpublish
391
-
392
- if (isUnpublish) {
393
- appId = getProdAppID(appId)
394
- }
352
+ exports.delete = async ctx => {
353
+ const db = getAppDB()
395
354
 
396
- const db = isUnpublish ? getProdAppDB() : getAppDB()
397
355
  const result = await db.destroy()
398
-
399
- if (isUnpublish) {
400
- await quotas.removePublishedApp()
401
- } else {
402
- await quotas.removeApp()
403
- }
404
-
405
356
  /* istanbul ignore next */
406
- if (!env.isTest() && !isUnpublish) {
407
- await deleteApp(appId)
357
+ if (!env.isTest() && !ctx.query.unpublish) {
358
+ await deleteApp(ctx.params.appId)
408
359
  }
409
- if (isUnpublish) {
410
- await cleanupAutomations(appId)
360
+ if (ctx.query && ctx.query.unpublish) {
361
+ await cleanupAutomations(ctx.params.appId)
411
362
  }
412
363
  // make sure the app/role doesn't stick around after the app has been deleted
413
- await removeAppFromUserRoles(ctx, appId)
414
- await appCache.invalidateAppMetadata(appId)
415
- return result
416
- }
417
-
418
- const preDestroyApp = async (ctx: any) => {
419
- const rows = await getUniqueRows([ctx.params.appId])
420
- ctx.rowCount = rows.length
421
- }
422
-
423
- const postDestroyApp = async (ctx: any) => {
424
- const rowCount = ctx.rowCount
425
- if (rowCount) {
426
- await quotas.removeRows(rowCount)
427
- }
428
- }
364
+ await removeAppFromUserRoles(ctx, ctx.params.appId)
365
+ await appCache.invalidateAppMetadata(ctx.params.appId)
429
366
 
430
- export const destroy = async (ctx: any) => {
431
- await preDestroyApp(ctx)
432
- const result = await destroyApp(ctx)
433
- await postDestroyApp(ctx)
434
367
  ctx.status = 200
435
368
  ctx.body = result
436
369
  }
437
370
 
438
- export const sync = async (ctx: any, next: any) => {
371
+ exports.sync = async (ctx, next) => {
439
372
  const appId = ctx.params.appId
440
373
  if (!isDevAppID(appId)) {
441
374
  ctx.throw(400, "This action cannot be performed for production apps")
@@ -465,7 +398,7 @@ export const sync = async (ctx: any, next: any) => {
465
398
  let error
466
399
  try {
467
400
  await replication.replicate({
468
- filter: function (doc: any) {
401
+ filter: function (doc) {
469
402
  return doc._id !== DocumentTypes.APP_METADATA
470
403
  },
471
404
  })
@@ -487,7 +420,7 @@ export const sync = async (ctx: any, next: any) => {
487
420
  }
488
421
  }
489
422
 
490
- const updateAppPackage = async (appPackage: any, appId: any) => {
423
+ const updateAppPackage = async (appPackage, appId) => {
491
424
  const db = getAppDB()
492
425
  const application = await db.get(DocumentTypes.APP_METADATA)
493
426
 
@@ -506,7 +439,7 @@ const updateAppPackage = async (appPackage: any, appId: any) => {
506
439
  return response
507
440
  }
508
441
 
509
- const createEmptyAppPackage = async (ctx: any, app: any) => {
442
+ const createEmptyAppPackage = async (ctx, app) => {
510
443
  const db = getAppDB()
511
444
 
512
445
  let screensAndLayouts = []