@budibase/server 1.0.46-alpha.2 → 1.0.46-alpha.6

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 (248) hide show
  1. package/builder/assets/{index.89280093.js → index.00221ff2.js} +244 -244
  2. package/builder/assets/{index.0df4f7ab.css → index.dd9e386f.css} +1 -1
  3. package/builder/assets/{vendor.10e2ad1b.js → vendor.3bd2f661.js} +1 -1
  4. package/builder/index.html +3 -3
  5. package/coverage/clover.xml +1802 -1639
  6. package/coverage/coverage-final.json +98 -94
  7. package/coverage/lcov-report/api/controllers/analytics.js.html +1 -1
  8. package/coverage/lcov-report/api/controllers/apikeys.js.html +1 -1
  9. package/coverage/lcov-report/api/controllers/application.js.html +192 -129
  10. package/coverage/lcov-report/api/controllers/auth.js.html +1 -1
  11. package/coverage/lcov-report/api/controllers/automation.js.html +21 -21
  12. package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
  13. package/coverage/lcov-report/api/controllers/cloud.js.html +1 -1
  14. package/coverage/lcov-report/api/controllers/component.js.html +4 -4
  15. package/coverage/lcov-report/api/controllers/datasource.js.html +72 -36
  16. package/coverage/lcov-report/api/controllers/dev.js.html +1 -1
  17. package/coverage/lcov-report/api/controllers/index.html +27 -42
  18. package/coverage/lcov-report/api/controllers/integration.js.html +1 -1
  19. package/coverage/lcov-report/api/controllers/layout.js.html +6 -6
  20. package/coverage/lcov-report/api/controllers/metadata.js.html +1 -1
  21. package/coverage/lcov-report/api/controllers/permission.js.html +15 -15
  22. package/coverage/lcov-report/api/controllers/query/index.html +15 -15
  23. package/coverage/lcov-report/api/controllers/query/index.js.html +61 -28
  24. package/coverage/lcov-report/api/controllers/query/validation.js.html +6 -6
  25. package/coverage/lcov-report/api/controllers/role.js.html +9 -9
  26. package/coverage/lcov-report/api/controllers/routing.js.html +1 -1
  27. package/coverage/lcov-report/api/controllers/row/external.js.html +16 -16
  28. package/coverage/lcov-report/api/controllers/row/index.html +5 -5
  29. package/coverage/lcov-report/api/controllers/row/index.js.html +26 -26
  30. package/coverage/lcov-report/api/controllers/row/internal.js.html +44 -44
  31. package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +8 -8
  32. package/coverage/lcov-report/api/controllers/row/utils.js.html +29 -38
  33. package/coverage/lcov-report/api/controllers/screen.js.html +7 -7
  34. package/coverage/lcov-report/api/controllers/script.js.html +4 -4
  35. package/coverage/lcov-report/api/controllers/table/external.js.html +12 -12
  36. package/coverage/lcov-report/api/controllers/table/index.html +16 -16
  37. package/coverage/lcov-report/api/controllers/table/index.js.html +25 -25
  38. package/coverage/lcov-report/api/controllers/table/internal.js.html +40 -34
  39. package/coverage/lcov-report/api/controllers/table/utils.js.html +76 -61
  40. package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
  41. package/coverage/lcov-report/api/controllers/user.js.html +20 -20
  42. package/coverage/lcov-report/api/controllers/view/exporters.js.html +4 -4
  43. package/coverage/lcov-report/api/controllers/view/index.html +1 -1
  44. package/coverage/lcov-report/api/controllers/view/index.js.html +14 -14
  45. package/coverage/lcov-report/api/controllers/view/utils.js.html +11 -11
  46. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +7 -7
  47. package/coverage/lcov-report/api/controllers/webhook.js.html +15 -15
  48. package/coverage/lcov-report/api/index.html +1 -1
  49. package/coverage/lcov-report/api/index.js.html +10 -10
  50. package/coverage/lcov-report/api/routes/analytics.js.html +1 -1
  51. package/coverage/lcov-report/api/routes/apikeys.js.html +1 -1
  52. package/coverage/lcov-report/api/routes/application.js.html +1 -1
  53. package/coverage/lcov-report/api/routes/auth.js.html +1 -1
  54. package/coverage/lcov-report/api/routes/automation.js.html +1 -1
  55. package/coverage/lcov-report/api/routes/backup.js.html +1 -1
  56. package/coverage/lcov-report/api/routes/cloud.js.html +1 -1
  57. package/coverage/lcov-report/api/routes/component.js.html +1 -1
  58. package/coverage/lcov-report/api/routes/datasource.js.html +1 -1
  59. package/coverage/lcov-report/api/routes/deploy.js.html +1 -1
  60. package/coverage/lcov-report/api/routes/dev.js.html +1 -1
  61. package/coverage/lcov-report/api/routes/index.html +7 -22
  62. package/coverage/lcov-report/api/routes/index.js.html +4 -10
  63. package/coverage/lcov-report/api/routes/integration.js.html +1 -1
  64. package/coverage/lcov-report/api/routes/layout.js.html +1 -1
  65. package/coverage/lcov-report/api/routes/metadata.js.html +1 -1
  66. package/coverage/lcov-report/api/routes/permission.js.html +1 -1
  67. package/coverage/lcov-report/api/routes/query.js.html +1 -1
  68. package/coverage/lcov-report/api/routes/role.js.html +1 -1
  69. package/coverage/lcov-report/api/routes/routing.js.html +1 -1
  70. package/coverage/lcov-report/api/routes/row.js.html +1 -1
  71. package/coverage/lcov-report/api/routes/screen.js.html +1 -1
  72. package/coverage/lcov-report/api/routes/script.js.html +1 -1
  73. package/coverage/lcov-report/api/routes/static.js.html +17 -2
  74. package/coverage/lcov-report/api/routes/table.js.html +1 -1
  75. package/coverage/lcov-report/api/routes/templates.js.html +1 -1
  76. package/coverage/lcov-report/api/routes/user.js.html +1 -1
  77. package/coverage/lcov-report/api/routes/view.js.html +1 -1
  78. package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
  79. package/coverage/lcov-report/automations/actions.js.html +24 -24
  80. package/coverage/lcov-report/automations/automationUtils.js.html +5 -5
  81. package/coverage/lcov-report/automations/bullboard.js.html +16 -16
  82. package/coverage/lcov-report/automations/index.html +1 -1
  83. package/coverage/lcov-report/automations/index.js.html +1 -1
  84. package/coverage/lcov-report/automations/steps/bash.js.html +6 -6
  85. package/coverage/lcov-report/automations/steps/createRow.js.html +13 -19
  86. package/coverage/lcov-report/automations/steps/delay.js.html +4 -4
  87. package/coverage/lcov-report/automations/steps/deleteRow.js.html +11 -20
  88. package/coverage/lcov-report/automations/steps/discord.js.html +7 -7
  89. package/coverage/lcov-report/automations/steps/executeQuery.js.html +6 -6
  90. package/coverage/lcov-report/automations/steps/executeScript.js.html +6 -6
  91. package/coverage/lcov-report/automations/steps/filter.js.html +7 -7
  92. package/coverage/lcov-report/automations/steps/index.html +13 -13
  93. package/coverage/lcov-report/automations/steps/integromat.js.html +5 -5
  94. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +8 -8
  95. package/coverage/lcov-report/automations/steps/queryRows.js.html +10 -10
  96. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +5 -5
  97. package/coverage/lcov-report/automations/steps/serverLog.js.html +3 -3
  98. package/coverage/lcov-report/automations/steps/slack.js.html +5 -5
  99. package/coverage/lcov-report/automations/steps/updateRow.js.html +6 -6
  100. package/coverage/lcov-report/automations/steps/utils.js.html +3 -3
  101. package/coverage/lcov-report/automations/steps/zapier.js.html +5 -5
  102. package/coverage/lcov-report/automations/triggerInfo/app.js.html +2 -2
  103. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +2 -2
  104. package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
  105. package/coverage/lcov-report/automations/triggerInfo/index.js.html +8 -8
  106. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +2 -2
  107. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +2 -2
  108. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +2 -2
  109. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +2 -2
  110. package/coverage/lcov-report/automations/triggers.js.html +18 -18
  111. package/coverage/lcov-report/automations/utils.js.html +32 -32
  112. package/coverage/lcov-report/constants/index.html +5 -5
  113. package/coverage/lcov-report/constants/index.js.html +36 -24
  114. package/coverage/lcov-report/constants/layouts.js.html +5 -5
  115. package/coverage/lcov-report/constants/screens.js.html +4 -4
  116. package/coverage/lcov-report/db/client.js.html +18 -18
  117. package/coverage/lcov-report/db/inMemoryView.js.html +7 -7
  118. package/coverage/lcov-report/db/index.html +15 -15
  119. package/coverage/lcov-report/db/index.js.html +3 -3
  120. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +18 -18
  121. package/coverage/lcov-report/db/linkedRows/index.html +1 -1
  122. package/coverage/lcov-report/db/linkedRows/index.js.html +31 -31
  123. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +15 -15
  124. package/coverage/lcov-report/db/newid.js.html +4 -4
  125. package/coverage/lcov-report/db/utils.js.html +85 -85
  126. package/coverage/lcov-report/events/AutomationEmitter.js.html +1 -1
  127. package/coverage/lcov-report/events/index.html +1 -1
  128. package/coverage/lcov-report/events/index.js.html +5 -5
  129. package/coverage/lcov-report/events/utils.js.html +3 -3
  130. package/coverage/lcov-report/index.html +110 -80
  131. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
  132. package/coverage/lcov-report/integrations/tests/index.html +1 -1
  133. package/coverage/lcov-report/middleware/appInfo.js.html +1 -1
  134. package/coverage/lcov-report/middleware/authorized.js.html +11 -11
  135. package/coverage/lcov-report/middleware/builder.js.html +8 -8
  136. package/coverage/lcov-report/middleware/currentapp.js.html +34 -61
  137. package/coverage/lcov-report/middleware/index.html +25 -25
  138. package/coverage/lcov-report/middleware/joi-validator.js.html +3 -3
  139. package/coverage/lcov-report/middleware/resourceId.js.html +1 -1
  140. package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
  141. package/coverage/lcov-report/middleware/usageQuota.js.html +275 -41
  142. package/coverage/lcov-report/middleware/utils.js.html +2 -2
  143. package/coverage/lcov-report/migrations/usageQuotas/index.html +141 -0
  144. package/coverage/lcov-report/migrations/usageQuotas/index.js.html +152 -0
  145. package/coverage/lcov-report/{api/routes/hosting.js.html → migrations/usageQuotas/syncApps.js.html} +42 -27
  146. package/coverage/lcov-report/{api/controllers/hosting.js.html → migrations/usageQuotas/syncRows.js.html} +41 -44
  147. package/coverage/lcov-report/threads/automation.js.html +1 -1
  148. package/coverage/lcov-report/threads/index.html +15 -15
  149. package/coverage/lcov-report/threads/index.js.html +10 -10
  150. package/coverage/lcov-report/threads/query.js.html +23 -8
  151. package/coverage/lcov-report/threads/utils.js.html +14 -14
  152. package/coverage/lcov-report/utilities/bcrypt.js.html +1 -1
  153. package/coverage/lcov-report/utilities/budibaseDir.js.html +7 -7
  154. package/coverage/lcov-report/utilities/centralPath.js.html +4 -4
  155. package/coverage/lcov-report/utilities/csvParser.js.html +6 -6
  156. package/coverage/lcov-report/utilities/global.js.html +26 -26
  157. package/coverage/lcov-report/utilities/index.html +19 -19
  158. package/coverage/lcov-report/utilities/index.js.html +25 -25
  159. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +8 -8
  160. package/coverage/lcov-report/utilities/queue/index.html +1 -1
  161. package/coverage/lcov-report/utilities/routing/index.html +1 -1
  162. package/coverage/lcov-report/utilities/routing/index.js.html +1 -1
  163. package/coverage/lcov-report/utilities/rowProcessor/index.html +1 -1
  164. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +53 -53
  165. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +10 -10
  166. package/coverage/lcov-report/utilities/scriptRunner.js.html +5 -5
  167. package/coverage/lcov-report/utilities/security.js.html +8 -8
  168. package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
  169. package/coverage/lcov-report/utilities/usageQuota/index.html +141 -0
  170. package/coverage/lcov-report/utilities/usageQuota/index.js.html +356 -0
  171. package/coverage/lcov-report/utilities/usageQuota/rows.js.html +302 -0
  172. package/coverage/lcov-report/utilities/usageQuota/usageQuoteReset.js.html +134 -0
  173. package/coverage/lcov-report/utilities/users.js.html +5 -5
  174. package/coverage/lcov-report/utilities/workerRequests.js.html +39 -108
  175. package/coverage/lcov.info +2644 -2356
  176. package/dist/api/controllers/application.js +45 -24
  177. package/dist/api/controllers/datasource.js +11 -0
  178. package/dist/api/controllers/query/index.js +11 -3
  179. package/dist/api/controllers/row/utils.js +1 -2
  180. package/dist/api/controllers/static/index.js +59 -10
  181. package/dist/api/controllers/table/internal.js +2 -0
  182. package/dist/api/controllers/table/utils.js +5 -0
  183. package/dist/api/routes/index.js +0 -2
  184. package/dist/api/routes/static.js +2 -1
  185. package/dist/automations/steps/createRow.js +2 -4
  186. package/dist/automations/steps/deleteRow.js +1 -4
  187. package/dist/constants/index.js +3 -0
  188. package/dist/definitions/datasource.js +1 -0
  189. package/dist/environment.js +1 -0
  190. package/dist/integrations/googlesheets.js +340 -0
  191. package/dist/integrations/index.js +3 -0
  192. package/dist/integrations/utils.js +6 -3
  193. package/dist/middleware/currentapp.js +0 -9
  194. package/dist/middleware/usageQuota.js +82 -13
  195. package/dist/migrations/usageQuotas/index.js +24 -0
  196. package/dist/migrations/usageQuotas/syncApps.js +26 -0
  197. package/dist/migrations/usageQuotas/syncRows.js +29 -0
  198. package/dist/package.json +8 -5
  199. package/dist/tests/utilities/TestConfiguration.js +3 -1
  200. package/dist/threads/query.js +4 -0
  201. package/dist/tsconfig.tsbuildinfo +1 -1
  202. package/dist/utilities/{usageQuota.js → usageQuota/index.js} +44 -31
  203. package/dist/utilities/usageQuota/rows.js +77 -0
  204. package/dist/utilities/usageQuota/usageQuoteReset.js +16 -0
  205. package/dist/utilities/workerRequests.js +0 -20
  206. package/nodemon.json +1 -1
  207. package/package.json +9 -6
  208. package/src/api/controllers/application.js +48 -27
  209. package/src/api/controllers/datasource.js +12 -0
  210. package/src/api/controllers/query/index.js +14 -3
  211. package/src/api/controllers/row/utils.js +1 -4
  212. package/src/api/controllers/static/index.js +63 -10
  213. package/src/api/controllers/table/internal.js +2 -0
  214. package/src/api/controllers/table/utils.js +5 -0
  215. package/src/api/routes/index.js +0 -2
  216. package/src/api/routes/static.js +5 -0
  217. package/src/api/routes/tests/application.spec.js +2 -2
  218. package/src/api/routes/tests/static.spec.js +98 -0
  219. package/src/automations/steps/createRow.js +2 -4
  220. package/src/automations/steps/deleteRow.js +1 -4
  221. package/src/constants/index.js +4 -0
  222. package/src/definitions/datasource.ts +3 -0
  223. package/src/environment.js +1 -0
  224. package/src/integrations/googlesheets.ts +353 -0
  225. package/src/integrations/index.ts +3 -0
  226. package/src/integrations/utils.ts +18 -5
  227. package/src/middleware/currentapp.js +0 -9
  228. package/src/middleware/tests/usageQuota.spec.js +18 -24
  229. package/src/middleware/usageQuota.js +93 -15
  230. package/src/migrations/tests/usageQuotas/index.spec.js +27 -0
  231. package/src/migrations/tests/usageQuotas/syncApps.spec.js +37 -0
  232. package/src/migrations/tests/usageQuotas/syncRows.spec.js +43 -0
  233. package/src/migrations/usageQuotas/index.js +24 -0
  234. package/src/migrations/usageQuotas/syncApps.js +18 -0
  235. package/src/migrations/usageQuotas/syncRows.js +21 -0
  236. package/src/tests/utilities/TestConfiguration.js +3 -1
  237. package/src/threads/query.js +5 -0
  238. package/src/utilities/tests/usageQuota/usageQuota.spec.js +72 -0
  239. package/src/utilities/usageQuota/index.js +92 -0
  240. package/src/utilities/usageQuota/rows.js +74 -0
  241. package/src/utilities/usageQuota/usageQuoteReset.js +18 -0
  242. package/src/utilities/workerRequests.js +0 -23
  243. package/dist/api/controllers/hosting.js +0 -30
  244. package/dist/api/routes/hosting.js +0 -11
  245. package/src/api/controllers/hosting.js +0 -22
  246. package/src/api/routes/hosting.js +0 -13
  247. package/src/api/routes/tests/hosting.spec.js +0 -36
  248. package/src/utilities/usageQuota.js +0 -73
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">78.02% </span>
26
+ <span class="strong">79% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>142/182</span>
28
+ <span class='fraction'>158/200</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">56.94% </span>
33
+ <span class="strong">55.71% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>41/72</span>
35
+ <span class='fraction'>39/70</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">85% </span>
40
+ <span class="strong">88.46% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>17/20</span>
42
+ <span class='fraction'>23/26</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">78.88% </span>
47
+ <span class="strong">79.38% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>142/180</span>
49
+ <span class='fraction'>154/194</span>
50
50
  </div>
51
51
 
52
52
 
@@ -471,19 +471,40 @@
471
471
  <a name='L412'></a><a href='#L412'>412</a>
472
472
  <a name='L413'></a><a href='#L413'>413</a>
473
473
  <a name='L414'></a><a href='#L414'>414</a>
474
- <a name='L415'></a><a href='#L415'>415</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">33x</span>
475
- <span class="cline-any cline-yes">33x</span>
476
- <span class="cline-any cline-yes">33x</span>
474
+ <a name='L415'></a><a href='#L415'>415</a>
475
+ <a name='L416'></a><a href='#L416'>416</a>
476
+ <a name='L417'></a><a href='#L417'>417</a>
477
+ <a name='L418'></a><a href='#L418'>418</a>
478
+ <a name='L419'></a><a href='#L419'>419</a>
479
+ <a name='L420'></a><a href='#L420'>420</a>
480
+ <a name='L421'></a><a href='#L421'>421</a>
481
+ <a name='L422'></a><a href='#L422'>422</a>
482
+ <a name='L423'></a><a href='#L423'>423</a>
483
+ <a name='L424'></a><a href='#L424'>424</a>
484
+ <a name='L425'></a><a href='#L425'>425</a>
485
+ <a name='L426'></a><a href='#L426'>426</a>
486
+ <a name='L427'></a><a href='#L427'>427</a>
487
+ <a name='L428'></a><a href='#L428'>428</a>
488
+ <a name='L429'></a><a href='#L429'>429</a>
489
+ <a name='L430'></a><a href='#L430'>430</a>
490
+ <a name='L431'></a><a href='#L431'>431</a>
491
+ <a name='L432'></a><a href='#L432'>432</a>
492
+ <a name='L433'></a><a href='#L433'>433</a>
493
+ <a name='L434'></a><a href='#L434'>434</a>
494
+ <a name='L435'></a><a href='#L435'>435</a>
495
+ <a name='L436'></a><a href='#L436'>436</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">36x</span>
496
+ <span class="cline-any cline-yes">36x</span>
497
+ <span class="cline-any cline-yes">36x</span>
477
498
  <span class="cline-any cline-neutral">&nbsp;</span>
478
499
  <span class="cline-any cline-neutral">&nbsp;</span>
479
500
  <span class="cline-any cline-neutral">&nbsp;</span>
480
501
  <span class="cline-any cline-neutral">&nbsp;</span>
481
- <span class="cline-any cline-yes">33x</span>
502
+ <span class="cline-any cline-yes">36x</span>
482
503
  <span class="cline-any cline-neutral">&nbsp;</span>
483
504
  <span class="cline-any cline-neutral">&nbsp;</span>
484
505
  <span class="cline-any cline-neutral">&nbsp;</span>
485
506
  <span class="cline-any cline-neutral">&nbsp;</span>
486
- <span class="cline-any cline-yes">33x</span>
507
+ <span class="cline-any cline-yes">36x</span>
487
508
  <span class="cline-any cline-neutral">&nbsp;</span>
488
509
  <span class="cline-any cline-neutral">&nbsp;</span>
489
510
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -491,98 +512,107 @@
491
512
  <span class="cline-any cline-neutral">&nbsp;</span>
492
513
  <span class="cline-any cline-neutral">&nbsp;</span>
493
514
  <span class="cline-any cline-neutral">&nbsp;</span>
494
- <span class="cline-any cline-yes">33x</span>
515
+ <span class="cline-any cline-yes">36x</span>
495
516
  <span class="cline-any cline-neutral">&nbsp;</span>
496
517
  <span class="cline-any cline-neutral">&nbsp;</span>
497
518
  <span class="cline-any cline-neutral">&nbsp;</span>
498
- <span class="cline-any cline-yes">33x</span>
499
- <span class="cline-any cline-yes">33x</span>
500
- <span class="cline-any cline-yes">33x</span>
501
- <span class="cline-any cline-yes">33x</span>
519
+ <span class="cline-any cline-yes">36x</span>
520
+ <span class="cline-any cline-yes">36x</span>
521
+ <span class="cline-any cline-yes">36x</span>
522
+ <span class="cline-any cline-yes">36x</span>
502
523
  <span class="cline-any cline-neutral">&nbsp;</span>
503
524
  <span class="cline-any cline-neutral">&nbsp;</span>
504
525
  <span class="cline-any cline-neutral">&nbsp;</span>
505
526
  <span class="cline-any cline-neutral">&nbsp;</span>
506
527
  <span class="cline-any cline-neutral">&nbsp;</span>
507
- <span class="cline-any cline-yes">33x</span>
508
- <span class="cline-any cline-yes">33x</span>
528
+ <span class="cline-any cline-yes">36x</span>
529
+ <span class="cline-any cline-yes">36x</span>
530
+ <span class="cline-any cline-yes">36x</span>
531
+ <span class="cline-any cline-yes">36x</span>
532
+ <span class="cline-any cline-yes">36x</span>
509
533
  <span class="cline-any cline-neutral">&nbsp;</span>
510
534
  <span class="cline-any cline-neutral">&nbsp;</span>
511
535
  <span class="cline-any cline-neutral">&nbsp;</span>
512
- <span class="cline-any cline-yes">33x</span>
513
- <span class="cline-any cline-yes">33x</span>
514
- <span class="cline-any cline-yes">33x</span>
515
536
  <span class="cline-any cline-neutral">&nbsp;</span>
537
+ <span class="cline-any cline-yes">36x</span>
538
+ <span class="cline-any cline-yes">36x</span>
539
+ <span class="cline-any cline-yes">36x</span>
540
+ <span class="cline-any cline-yes">36x</span>
541
+ <span class="cline-any cline-yes">36x</span>
516
542
  <span class="cline-any cline-neutral">&nbsp;</span>
543
+ <span class="cline-any cline-yes">36x</span>
517
544
  <span class="cline-any cline-neutral">&nbsp;</span>
518
545
  <span class="cline-any cline-neutral">&nbsp;</span>
519
- <span class="cline-any cline-yes">33x</span>
520
- <span class="cline-any cline-yes">33x</span>
521
- <span class="cline-any cline-yes">33x</span>
522
- <span class="cline-any cline-yes">33x</span>
523
- <span class="cline-any cline-yes">33x</span>
524
546
  <span class="cline-any cline-neutral">&nbsp;</span>
525
- <span class="cline-any cline-yes">33x</span>
547
+ <span class="cline-any cline-yes">202x</span>
526
548
  <span class="cline-any cline-neutral">&nbsp;</span>
527
549
  <span class="cline-any cline-neutral">&nbsp;</span>
528
550
  <span class="cline-any cline-neutral">&nbsp;</span>
529
- <span class="cline-any cline-yes">195x</span>
530
551
  <span class="cline-any cline-neutral">&nbsp;</span>
531
552
  <span class="cline-any cline-neutral">&nbsp;</span>
553
+ <span class="cline-any cline-yes">404x</span>
532
554
  <span class="cline-any cline-neutral">&nbsp;</span>
533
555
  <span class="cline-any cline-neutral">&nbsp;</span>
534
556
  <span class="cline-any cline-neutral">&nbsp;</span>
535
- <span class="cline-any cline-yes">390x</span>
557
+ <span class="cline-any cline-yes">202x</span>
536
558
  <span class="cline-any cline-neutral">&nbsp;</span>
537
559
  <span class="cline-any cline-neutral">&nbsp;</span>
538
560
  <span class="cline-any cline-neutral">&nbsp;</span>
539
- <span class="cline-any cline-yes">195x</span>
540
- <span class="cline-any cline-neutral">&nbsp;</span>
541
561
  <span class="cline-any cline-neutral">&nbsp;</span>
542
562
  <span class="cline-any cline-neutral">&nbsp;</span>
563
+ <span class="cline-any cline-yes">12x</span>
543
564
  <span class="cline-any cline-neutral">&nbsp;</span>
544
565
  <span class="cline-any cline-neutral">&nbsp;</span>
545
- <span class="cline-any cline-yes">12x</span>
546
566
  <span class="cline-any cline-neutral">&nbsp;</span>
567
+ <span class="cline-any cline-yes">200x</span>
547
568
  <span class="cline-any cline-neutral">&nbsp;</span>
548
569
  <span class="cline-any cline-neutral">&nbsp;</span>
549
- <span class="cline-any cline-yes">193x</span>
550
570
  <span class="cline-any cline-neutral">&nbsp;</span>
551
571
  <span class="cline-any cline-neutral">&nbsp;</span>
552
572
  <span class="cline-any cline-neutral">&nbsp;</span>
553
573
  <span class="cline-any cline-neutral">&nbsp;</span>
554
574
  <span class="cline-any cline-neutral">&nbsp;</span>
575
+ <span class="cline-any cline-yes">194x</span>
555
576
  <span class="cline-any cline-neutral">&nbsp;</span>
556
- <span class="cline-any cline-yes">190x</span>
557
577
  <span class="cline-any cline-no">&nbsp;</span>
558
- <span class="cline-any cline-yes">190x</span>
559
- <span class="cline-any cline-yes">187x</span>
560
578
  <span class="cline-any cline-neutral">&nbsp;</span>
561
- <span class="cline-any cline-yes">190x</span>
562
- <span class="cline-any cline-yes">187x</span>
563
579
  <span class="cline-any cline-neutral">&nbsp;</span>
564
- <span class="cline-any cline-yes">190x</span>
565
- <span class="cline-any cline-yes">15x</span>
580
+ <span class="cline-any cline-yes">194x</span>
581
+ <span class="cline-any cline-neutral">&nbsp;</span>
582
+ <span class="cline-any cline-yes">194x</span>
583
+ <span class="cline-any cline-neutral">&nbsp;</span>
584
+ <span class="cline-any cline-yes">194x</span>
585
+ <span class="cline-any cline-neutral">&nbsp;</span>
586
+ <span class="cline-any cline-neutral">&nbsp;</span>
587
+ <span class="cline-any cline-yes">36x</span>
588
+ <span class="cline-any cline-yes">194x</span>
589
+ <span class="cline-any cline-yes">2x</span>
566
590
  <span class="cline-any cline-neutral">&nbsp;</span>
567
- <span class="cline-any cline-yes">175x</span>
568
- <span class="cline-any cline-yes">175x</span>
591
+ <span class="cline-any cline-yes">732x</span>
592
+ <span class="cline-any cline-no">&nbsp;</span>
569
593
  <span class="cline-any cline-neutral">&nbsp;</span>
570
594
  <span class="cline-any cline-neutral">&nbsp;</span>
571
595
  <span class="cline-any cline-neutral">&nbsp;</span>
596
+ <span class="cline-any cline-yes">36x</span>
572
597
  <span class="cline-any cline-neutral">&nbsp;</span>
598
+ <span class="cline-any cline-yes">194x</span>
599
+ <span class="cline-any cline-no">&nbsp;</span>
573
600
  <span class="cline-any cline-neutral">&nbsp;</span>
601
+ <span class="cline-any cline-yes">194x</span>
602
+ <span class="cline-any cline-yes">2x</span>
603
+ <span class="cline-any cline-neutral">&nbsp;</span>
604
+ <span class="cline-any cline-yes">732x</span>
574
605
  <span class="cline-any cline-no">&nbsp;</span>
575
606
  <span class="cline-any cline-neutral">&nbsp;</span>
576
- <span class="cline-any cline-yes">175x</span>
577
607
  <span class="cline-any cline-neutral">&nbsp;</span>
578
608
  <span class="cline-any cline-neutral">&nbsp;</span>
579
609
  <span class="cline-any cline-neutral">&nbsp;</span>
580
- <span class="cline-any cline-yes">185x</span>
581
- <span class="cline-any cline-yes">185x</span>
582
- <span class="cline-any cline-yes">185x</span>
610
+ <span class="cline-any cline-yes">192x</span>
611
+ <span class="cline-any cline-yes">192x</span>
612
+ <span class="cline-any cline-yes">192x</span>
583
613
  <span class="cline-any cline-neutral">&nbsp;</span>
584
- <span class="cline-any cline-yes">185x</span>
585
- <span class="cline-any cline-yes">185x</span>
614
+ <span class="cline-any cline-yes">192x</span>
615
+ <span class="cline-any cline-yes">192x</span>
586
616
  <span class="cline-any cline-neutral">&nbsp;</span>
587
617
  <span class="cline-any cline-neutral">&nbsp;</span>
588
618
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -591,18 +621,18 @@
591
621
  <span class="cline-any cline-neutral">&nbsp;</span>
592
622
  <span class="cline-any cline-neutral">&nbsp;</span>
593
623
  <span class="cline-any cline-neutral">&nbsp;</span>
594
- <span class="cline-any cline-yes">185x</span>
595
- <span class="cline-any cline-yes">185x</span>
596
- <span class="cline-any cline-yes">185x</span>
624
+ <span class="cline-any cline-yes">192x</span>
625
+ <span class="cline-any cline-yes">192x</span>
626
+ <span class="cline-any cline-yes">192x</span>
597
627
  <span class="cline-any cline-neutral">&nbsp;</span>
598
628
  <span class="cline-any cline-neutral">&nbsp;</span>
599
629
  <span class="cline-any cline-neutral">&nbsp;</span>
600
- <span class="cline-any cline-yes">185x</span>
630
+ <span class="cline-any cline-yes">192x</span>
601
631
  <span class="cline-any cline-no">&nbsp;</span>
602
632
  <span class="cline-any cline-no">&nbsp;</span>
603
633
  <span class="cline-any cline-no">&nbsp;</span>
604
634
  <span class="cline-any cline-neutral">&nbsp;</span>
605
- <span class="cline-any cline-yes">185x</span>
635
+ <span class="cline-any cline-yes">192x</span>
606
636
  <span class="cline-any cline-neutral">&nbsp;</span>
607
637
  <span class="cline-any cline-neutral">&nbsp;</span>
608
638
  <span class="cline-any cline-no">&nbsp;</span>
@@ -610,13 +640,13 @@
610
640
  <span class="cline-any cline-neutral">&nbsp;</span>
611
641
  <span class="cline-any cline-neutral">&nbsp;</span>
612
642
  <span class="cline-any cline-neutral">&nbsp;</span>
613
- <span class="cline-any cline-yes">185x</span>
643
+ <span class="cline-any cline-yes">192x</span>
614
644
  <span class="cline-any cline-neutral">&nbsp;</span>
615
645
  <span class="cline-any cline-neutral">&nbsp;</span>
616
- <span class="cline-any cline-yes">185x</span>
646
+ <span class="cline-any cline-yes">192x</span>
617
647
  <span class="cline-any cline-neutral">&nbsp;</span>
618
648
  <span class="cline-any cline-neutral">&nbsp;</span>
619
- <span class="cline-any cline-yes">33x</span>
649
+ <span class="cline-any cline-yes">36x</span>
620
650
  <span class="cline-any cline-yes">10x</span>
621
651
  <span class="cline-any cline-yes">10x</span>
622
652
  <span class="cline-any cline-yes">10x</span>
@@ -641,7 +671,7 @@
641
671
  <span class="cline-any cline-yes">10x</span>
642
672
  <span class="cline-any cline-neutral">&nbsp;</span>
643
673
  <span class="cline-any cline-neutral">&nbsp;</span>
644
- <span class="cline-any cline-yes">33x</span>
674
+ <span class="cline-any cline-yes">36x</span>
645
675
  <span class="cline-any cline-yes">1x</span>
646
676
  <span class="cline-any cline-yes">1x</span>
647
677
  <span class="cline-any cline-yes">1x</span>
@@ -657,51 +687,57 @@
657
687
  <span class="cline-any cline-neutral">&nbsp;</span>
658
688
  <span class="cline-any cline-neutral">&nbsp;</span>
659
689
  <span class="cline-any cline-neutral">&nbsp;</span>
660
- <span class="cline-any cline-yes">33x</span>
661
- <span class="cline-any cline-yes">194x</span>
662
- <span class="cline-any cline-yes">194x</span>
663
- <span class="cline-any cline-yes">194x</span>
664
- <span class="cline-any cline-yes">194x</span>
690
+ <span class="cline-any cline-yes">36x</span>
691
+ <span class="cline-any cline-yes">201x</span>
692
+ <span class="cline-any cline-yes">201x</span>
693
+ <span class="cline-any cline-yes">201x</span>
694
+ <span class="cline-any cline-yes">201x</span>
665
695
  <span class="cline-any cline-neutral">&nbsp;</span>
666
696
  <span class="cline-any cline-neutral">&nbsp;</span>
667
- <span class="cline-any cline-yes">194x</span>
668
- <span class="cline-any cline-yes">192x</span>
669
- <span class="cline-any cline-yes">192x</span>
670
- <span class="cline-any cline-yes">192x</span>
697
+ <span class="cline-any cline-yes">201x</span>
698
+ <span class="cline-any cline-yes">199x</span>
699
+ <span class="cline-any cline-yes">199x</span>
700
+ <span class="cline-any cline-yes">199x</span>
671
701
  <span class="cline-any cline-neutral">&nbsp;</span>
672
702
  <span class="cline-any cline-neutral">&nbsp;</span>
673
- <span class="cline-any cline-yes">194x</span>
703
+ <span class="cline-any cline-yes">201x</span>
704
+ <span class="cline-any cline-neutral">&nbsp;</span>
674
705
  <span class="cline-any cline-neutral">&nbsp;</span>
675
706
  <span class="cline-any cline-neutral">&nbsp;</span>
676
707
  <span class="cline-any cline-neutral">&nbsp;</span>
677
708
  <span class="cline-any cline-neutral">&nbsp;</span>
678
709
  <span class="cline-any cline-neutral">&nbsp;</span>
679
710
  <span class="cline-any cline-neutral">&nbsp;</span>
711
+ <span class="cline-any cline-yes">36x</span>
712
+ <span class="cline-any cline-yes">192x</span>
713
+ <span class="cline-any cline-yes">192x</span>
714
+ <span class="cline-any cline-yes">192x</span>
715
+ <span class="cline-any cline-yes">192x</span>
716
+ <span class="cline-any cline-yes">192x</span>
680
717
  <span class="cline-any cline-neutral">&nbsp;</span>
681
- <span class="cline-any cline-yes">33x</span>
682
- <span class="cline-any cline-yes">185x</span>
683
- <span class="cline-any cline-yes">185x</span>
718
+ <span class="cline-any cline-yes">192x</span>
719
+ <span class="cline-any cline-yes">192x</span>
684
720
  <span class="cline-any cline-neutral">&nbsp;</span>
685
721
  <span class="cline-any cline-neutral">&nbsp;</span>
686
722
  <span class="cline-any cline-neutral">&nbsp;</span>
687
723
  <span class="cline-any cline-neutral">&nbsp;</span>
688
- <span class="cline-any cline-yes">185x</span>
724
+ <span class="cline-any cline-yes">192x</span>
689
725
  <span class="cline-any cline-no">&nbsp;</span>
690
726
  <span class="cline-any cline-neutral">&nbsp;</span>
691
- <span class="cline-any cline-yes">185x</span>
692
- <span class="cline-any cline-yes">185x</span>
727
+ <span class="cline-any cline-yes">192x</span>
728
+ <span class="cline-any cline-yes">192x</span>
693
729
  <span class="cline-any cline-neutral">&nbsp;</span>
694
- <span class="cline-any cline-yes">185x</span>
695
- <span class="cline-any cline-yes">185x</span>
730
+ <span class="cline-any cline-yes">192x</span>
696
731
  <span class="cline-any cline-neutral">&nbsp;</span>
697
- <span class="cline-any cline-yes">185x</span>
732
+ <span class="cline-any cline-yes">192x</span>
698
733
  <span class="cline-any cline-neutral">&nbsp;</span>
699
- <span class="cline-any cline-yes">185x</span>
734
+ <span class="cline-any cline-yes">192x</span>
700
735
  <span class="cline-any cline-no">&nbsp;</span>
701
736
  <span class="cline-any cline-neutral">&nbsp;</span>
702
737
  <span class="cline-any cline-neutral">&nbsp;</span>
703
738
  <span class="cline-any cline-neutral">&nbsp;</span>
704
- <span class="cline-any cline-yes">185x</span>
739
+ <span class="cline-any cline-yes">192x</span>
740
+ <span class="cline-any cline-neutral">&nbsp;</span>
705
741
  <span class="cline-any cline-neutral">&nbsp;</span>
706
742
  <span class="cline-any cline-neutral">&nbsp;</span>
707
743
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -715,33 +751,40 @@
715
751
  <span class="cline-any cline-neutral">&nbsp;</span>
716
752
  <span class="cline-any cline-neutral">&nbsp;</span>
717
753
  <span class="cline-any cline-neutral">&nbsp;</span>
754
+ <span class="cline-any cline-yes">192x</span>
755
+ <span class="cline-any cline-yes">192x</span>
718
756
  <span class="cline-any cline-neutral">&nbsp;</span>
719
- <span class="cline-any cline-yes">185x</span>
720
- <span class="cline-any cline-yes">185x</span>
721
757
  <span class="cline-any cline-neutral">&nbsp;</span>
722
758
  <span class="cline-any cline-neutral">&nbsp;</span>
759
+ <span class="cline-any cline-yes">192x</span>
760
+ <span class="cline-any cline-yes">192x</span>
723
761
  <span class="cline-any cline-neutral">&nbsp;</span>
724
- <span class="cline-any cline-yes">185x</span>
725
- <span class="cline-any cline-yes">185x</span>
726
762
  <span class="cline-any cline-neutral">&nbsp;</span>
727
763
  <span class="cline-any cline-neutral">&nbsp;</span>
728
764
  <span class="cline-any cline-neutral">&nbsp;</span>
729
765
  <span class="cline-any cline-neutral">&nbsp;</span>
730
766
  <span class="cline-any cline-neutral">&nbsp;</span>
731
767
  <span class="cline-any cline-neutral">&nbsp;</span>
768
+ <span class="cline-any cline-yes">192x</span>
769
+ <span class="cline-any cline-yes">192x</span>
770
+ <span class="cline-any cline-yes">192x</span>
732
771
  <span class="cline-any cline-neutral">&nbsp;</span>
733
- <span class="cline-any cline-yes">185x</span>
734
- <span class="cline-any cline-yes">185x</span>
735
- <span class="cline-any cline-yes">185x</span>
736
772
  <span class="cline-any cline-neutral">&nbsp;</span>
773
+ <span class="cline-any cline-yes">36x</span>
774
+ <span class="cline-any cline-yes">2x</span>
775
+ <span class="cline-any cline-neutral">&nbsp;</span>
776
+ <span class="cline-any cline-yes">2x</span>
777
+ <span class="cline-any cline-yes">2x</span>
778
+ <span class="cline-any cline-yes">2x</span>
779
+ <span class="cline-any cline-yes">2x</span>
737
780
  <span class="cline-any cline-neutral">&nbsp;</span>
738
- <span class="cline-any cline-yes">33x</span>
781
+ <span class="cline-any cline-yes">2x</span>
739
782
  <span class="cline-any cline-yes">2x</span>
740
783
  <span class="cline-any cline-yes">2x</span>
741
784
  <span class="cline-any cline-yes">2x</span>
742
785
  <span class="cline-any cline-neutral">&nbsp;</span>
743
786
  <span class="cline-any cline-neutral">&nbsp;</span>
744
- <span class="cline-any cline-yes">33x</span>
787
+ <span class="cline-any cline-yes">36x</span>
745
788
  <span class="cline-any cline-neutral">&nbsp;</span>
746
789
  <span class="cline-any cline-yes">2x</span>
747
790
  <span class="cline-any cline-yes">2x</span>
@@ -763,7 +806,7 @@
763
806
  <span class="cline-any cline-yes">2x</span>
764
807
  <span class="cline-any cline-neutral">&nbsp;</span>
765
808
  <span class="cline-any cline-neutral">&nbsp;</span>
766
- <span class="cline-any cline-yes">33x</span>
809
+ <span class="cline-any cline-yes">36x</span>
767
810
  <span class="cline-any cline-neutral">&nbsp;</span>
768
811
  <span class="cline-any cline-yes">1x</span>
769
812
  <span class="cline-any cline-yes">1x</span>
@@ -786,7 +829,7 @@
786
829
  <span class="cline-any cline-yes">1x</span>
787
830
  <span class="cline-any cline-neutral">&nbsp;</span>
788
831
  <span class="cline-any cline-neutral">&nbsp;</span>
789
- <span class="cline-any cline-yes">33x</span>
832
+ <span class="cline-any cline-yes">36x</span>
790
833
  <span class="cline-any cline-yes">11x</span>
791
834
  <span class="cline-any cline-neutral">&nbsp;</span>
792
835
  <span class="cline-any cline-yes">11x</span>
@@ -805,7 +848,7 @@
805
848
  <span class="cline-any cline-yes">11x</span>
806
849
  <span class="cline-any cline-neutral">&nbsp;</span>
807
850
  <span class="cline-any cline-neutral">&nbsp;</span>
808
- <span class="cline-any cline-yes">33x</span>
851
+ <span class="cline-any cline-yes">36x</span>
809
852
  <span class="cline-any cline-no">&nbsp;</span>
810
853
  <span class="cline-any cline-no">&nbsp;</span>
811
854
  <span class="cline-any cline-no">&nbsp;</span>
@@ -854,8 +897,7 @@
854
897
  <span class="cline-any cline-neutral">&nbsp;</span>
855
898
  <span class="cline-any cline-neutral">&nbsp;</span>
856
899
  <span class="cline-any cline-neutral">&nbsp;</span>
857
- <span class="cline-any cline-yes">33x</span>
858
- <span class="cline-any cline-yes">5x</span>
900
+ <span class="cline-any cline-yes">36x</span>
859
901
  <span class="cline-any cline-yes">5x</span>
860
902
  <span class="cline-any cline-yes">5x</span>
861
903
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -874,16 +916,16 @@
874
916
  <span class="cline-any cline-yes">5x</span>
875
917
  <span class="cline-any cline-neutral">&nbsp;</span>
876
918
  <span class="cline-any cline-neutral">&nbsp;</span>
877
- <span class="cline-any cline-yes">33x</span>
878
- <span class="cline-any cline-yes">185x</span>
919
+ <span class="cline-any cline-yes">36x</span>
920
+ <span class="cline-any cline-yes">192x</span>
879
921
  <span class="cline-any cline-neutral">&nbsp;</span>
880
- <span class="cline-any cline-yes">185x</span>
881
- <span class="cline-any cline-yes">185x</span>
882
- <span class="cline-any cline-yes">370x</span>
883
- <span class="cline-any cline-yes">370x</span>
922
+ <span class="cline-any cline-yes">192x</span>
923
+ <span class="cline-any cline-yes">192x</span>
924
+ <span class="cline-any cline-yes">384x</span>
925
+ <span class="cline-any cline-yes">384x</span>
884
926
  <span class="cline-any cline-neutral">&nbsp;</span>
885
927
  <span class="cline-any cline-neutral">&nbsp;</span>
886
- <span class="cline-any cline-yes">185x</span>
928
+ <span class="cline-any cline-yes">192x</span>
887
929
  <span class="cline-any cline-neutral">&nbsp;</span>
888
930
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">const CouchDB = require("../../db")
889
931
  const env = require("../../environment")
@@ -920,10 +962,7 @@ const {
920
962
  Replication,
921
963
  } = require("@budibase/backend-core/db")
922
964
  const { USERS_TABLE_SCHEMA } = require("../../constants")
923
- const {
924
- getDeployedApps,
925
- removeAppFromUserRoles,
926
- } = require("../../utilities/workerRequests")
965
+ const { removeAppFromUserRoles } = require("../../utilities/workerRequests")
927
966
  const { clientLibraryPath, stringToReadStream } = require("../../utilities")
928
967
  const { getAllLocks } = require("../../utilities/redis")
929
968
  const {
@@ -965,29 +1004,41 @@ function getUserRoleId(ctx) {
965
1004
  : ctx.user.role._id
966
1005
  }
967
1006
  &nbsp;
968
- async function getAppUrlIfNotInUse(ctx) {
1007
+ async function getAppUrl(ctx) {
1008
+ // construct the url
969
1009
  let url
970
1010
  <span class="missing-if-branch" title="if path not taken" >I</span>if (ctx.request.body.url) {
1011
+ // if the url is provided, use that
971
1012
  <span class="cstat-no" title="statement not covered" > url = encodeURI(ctx.request.body.url)</span>
972
- } else if (ctx.request.body.name) {
1013
+ } else {
1014
+ // otherwise use the name
973
1015
  url = encodeURI(`${ctx.request.body.name}`)
974
1016
  }
975
- if (url) {
976
- url = `/${url.replace(URL_REGEX_SLASH, "")}`.toLowerCase()
1017
+ url = `/${url.replace(URL_REGEX_SLASH, "")}`.toLowerCase()
1018
+ &nbsp;
1019
+ return url
1020
+ }
1021
+ &nbsp;
1022
+ const checkAppUrl = (ctx, apps, url, currentAppId) =&gt; {
1023
+ if (currentAppId) {
1024
+ apps = apps.filter(app =&gt; app.appId !== currentAppId)
977
1025
  }
978
- if (!env.SELF_HOSTED) {
979
- return url
1026
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (apps.some(app =&gt; app.url === url)) {
1027
+ <span class="cstat-no" title="statement not covered" > ctx.throw(400, "App URL is already in use.")</span>
980
1028
  }
981
- const deployedApps = await getDeployedApps()
982
- <span class="missing-if-branch" title="if path not taken" >I</span>if (
983
- url &amp;&amp;
984
- deployedApps[url] != null &amp;&amp;
985
- <span class="branch-2 cbranch-no" title="branch not covered" > ctx.params != null </span>&amp;&amp;
986
- <span class="branch-3 cbranch-no" title="branch not covered" > deployedApps[url].appId !== ctx.params.appId</span>
987
- ) {
988
- <span class="cstat-no" title="statement not covered" > ctx.throw(400, "App name/URL is already in use.")</span>
1029
+ }
1030
+ &nbsp;
1031
+ const checkAppName = (ctx, apps, name, currentAppId) =&gt; {
1032
+ // TODO: Replace with Joi
1033
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!name) {
1034
+ <span class="cstat-no" title="statement not covered" > ctx.throw(400, "Name is required")</span>
1035
+ }
1036
+ if (currentAppId) {
1037
+ apps = apps.filter(app =&gt; app.appId !== currentAppId)
1038
+ }
1039
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (apps.some(app =&gt; app.name === name)) {
1040
+ <span class="cstat-no" title="statement not covered" > ctx.throw(400, "App name is already in use.")</span>
989
1041
  }
990
- return url
991
1042
  }
992
1043
  &nbsp;
993
1044
  async function createInstance(template) {
@@ -1093,6 +1144,12 @@ exports.fetchAppPackage = async ctx =&gt; {
1093
1144
  }
1094
1145
  &nbsp;
1095
1146
  exports.create = async ctx =&gt; {
1147
+ const apps = await getAllApps(CouchDB, { dev: true })
1148
+ const name = ctx.request.body.name
1149
+ checkAppName(ctx, apps, name)
1150
+ const url = await getAppUrl(ctx)
1151
+ checkAppUrl(ctx, apps, url)
1152
+ &nbsp;
1096
1153
  const { useTemplate, templateKey, templateString } = ctx.request.body
1097
1154
  const instanceConfig = {
1098
1155
  useTemplate,
@@ -1105,7 +1162,6 @@ exports.create = async ctx =&gt; {
1105
1162
  const instance = await createInstance(instanceConfig)
1106
1163
  const appId = instance._id
1107
1164
  &nbsp;
1108
- const url = await getAppUrlIfNotInUse(ctx)
1109
1165
  const db = new CouchDB(appId)
1110
1166
  let _rev
1111
1167
  try {
@@ -1122,7 +1178,7 @@ exports.create = async ctx =&gt; {
1122
1178
  type: "app",
1123
1179
  version: packageJson.version,
1124
1180
  componentLibraries: ["@budibase/standard-components"],
1125
- name: ctx.request.body.name,
1181
+ name: name,
1126
1182
  url: url,
1127
1183
  template: ctx.request.body.template,
1128
1184
  instance: instance,
@@ -1150,7 +1206,15 @@ exports.create = async ctx =&gt; {
1150
1206
  }
1151
1207
  &nbsp;
1152
1208
  exports.update = async ctx =&gt; {
1153
- const data = await updateAppPackage(ctx, ctx.request.body, ctx.params.appId)
1209
+ const apps = await getAllApps(CouchDB, { dev: true })
1210
+ // validation
1211
+ const name = ctx.request.body.name
1212
+ checkAppName(ctx, apps, name, ctx.params.appId)
1213
+ const url = await getAppUrl(ctx)
1214
+ checkAppUrl(ctx, apps, url, ctx.params.appId)
1215
+ &nbsp;
1216
+ const appPackageUpdates = { name, url }
1217
+ const data = await updateAppPackage(appPackageUpdates, ctx.params.appId)
1154
1218
  ctx.status = 200
1155
1219
  ctx.body = data
1156
1220
  }
@@ -1172,7 +1236,7 @@ exports.updateClient = async ctx =&gt; {
1172
1236
  version: packageJson.version,
1173
1237
  revertableVersion: currentVersion,
1174
1238
  }
1175
- const data = await updateAppPackage(ctx, appPackageUpdates, ctx.params.appId)
1239
+ const data = await updateAppPackage(appPackageUpdates, ctx.params.appId)
1176
1240
  ctx.status = 200
1177
1241
  ctx.body = data
1178
1242
  }
@@ -1195,7 +1259,7 @@ exports.revertClient = async ctx =&gt; {
1195
1259
  version: application.revertableVersion,
1196
1260
  revertableVersion: null,
1197
1261
  }
1198
- const data = await updateAppPackage(ctx, appPackageUpdates, ctx.params.appId)
1262
+ const data = await updateAppPackage(appPackageUpdates, ctx.params.appId)
1199
1263
  ctx.status = 200
1200
1264
  ctx.body = data
1201
1265
  }
@@ -1268,12 +1332,11 @@ exports.sync = <span class="fstat-no" title="function not covered" >as</span>ync
1268
1332
  }
1269
1333
  }
1270
1334
  &nbsp;
1271
- const updateAppPackage = async (ctx, appPackage, appId) =&gt; {
1272
- const url = await getAppUrlIfNotInUse(ctx)
1335
+ const updateAppPackage = async (appPackage, appId) =&gt; {
1273
1336
  const db = new CouchDB(appId)
1274
1337
  const application = await db.get(DocumentTypes.APP_METADATA)
1275
1338
  &nbsp;
1276
- const newAppPackage = { ...application, ...appPackage, url }
1339
+ const newAppPackage = { ...application, ...appPackage }
1277
1340
  if (appPackage._rev !== application._rev) {
1278
1341
  newAppPackage._rev = application._rev
1279
1342
  }
@@ -1306,7 +1369,7 @@ const createEmptyAppPackage = async (ctx, app) =&gt; {
1306
1369
  <div class='footer quiet pad2 space-top1 center small'>
1307
1370
  Code coverage generated by
1308
1371
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
1309
- at Thu Jan 20 2022 18:56:55 GMT+0000 (Coordinated Universal Time)
1372
+ at Wed Jan 26 2022 17:11:28 GMT+0000 (Coordinated Universal Time)
1310
1373
  </div>
1311
1374
  </div>
1312
1375
  <script src="../../prettify.js"></script>
@@ -229,7 +229,7 @@ exports.fetchSelf = async ctx =&gt; {
229
229
  <div class='footer quiet pad2 space-top1 center small'>
230
230
  Code coverage generated by
231
231
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
232
- at Thu Jan 20 2022 18:56:55 GMT+0000 (Coordinated Universal Time)
232
+ at Wed Jan 26 2022 17:11:28 GMT+0000 (Coordinated Universal Time)
233
233
  </div>
234
234
  </div>
235
235
  <script src="../../prettify.js"></script>