@budibase/server 1.0.46-alpha.1 → 1.0.46-alpha.5

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 (238) hide show
  1. package/builder/assets/{index.0df4f7ab.css → index.243ca52c.css} +1 -1
  2. package/builder/assets/{index.d109814f.js → index.298ba3d3.js} +184 -184
  3. package/builder/assets/{vendor.10e2ad1b.js → vendor.3bd2f661.js} +1 -1
  4. package/builder/index.html +3 -3
  5. package/coverage/clover.xml +1685 -1534
  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 +30 -30
  16. package/coverage/lcov-report/api/controllers/dev.js.html +1 -1
  17. package/coverage/lcov-report/api/controllers/index.html +19 -34
  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 +1 -1
  23. package/coverage/lcov-report/api/controllers/query/index.js.html +19 -19
  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 +1 -1
  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 +25 -25
  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 +1 -1
  113. package/coverage/lcov-report/constants/index.js.html +22 -22
  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 +99 -69
  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 +2415 -2154
  176. package/dist/api/controllers/application.js +45 -24
  177. package/dist/api/controllers/static/index.js +59 -10
  178. package/dist/api/controllers/table/internal.js +2 -0
  179. package/dist/api/controllers/table/utils.js +5 -0
  180. package/dist/api/routes/index.js +0 -2
  181. package/dist/api/routes/static.js +2 -1
  182. package/dist/automations/steps/createRow.js +2 -4
  183. package/dist/automations/steps/deleteRow.js +1 -4
  184. package/dist/environment.js +1 -0
  185. package/dist/integrations/rest.js +5 -5
  186. package/dist/integrations/s3.js +1 -1
  187. package/dist/integrations/utils.js +6 -3
  188. package/dist/middleware/currentapp.js +0 -9
  189. package/dist/middleware/usageQuota.js +82 -13
  190. package/dist/migrations/usageQuotas/index.js +24 -0
  191. package/dist/migrations/usageQuotas/syncApps.js +26 -0
  192. package/dist/migrations/usageQuotas/syncRows.js +29 -0
  193. package/dist/package.json +5 -5
  194. package/dist/tests/utilities/TestConfiguration.js +3 -1
  195. package/dist/threads/query.js +4 -0
  196. package/dist/tsconfig.tsbuildinfo +1 -1
  197. package/dist/utilities/{usageQuota.js → usageQuota/index.js} +44 -31
  198. package/dist/utilities/usageQuota/rows.js +77 -0
  199. package/dist/utilities/usageQuota/usageQuoteReset.js +16 -0
  200. package/dist/utilities/workerRequests.js +0 -20
  201. package/nodemon.json +1 -1
  202. package/package.json +6 -6
  203. package/src/api/controllers/application.js +48 -27
  204. package/src/api/controllers/static/index.js +63 -10
  205. package/src/api/controllers/table/internal.js +2 -0
  206. package/src/api/controllers/table/utils.js +5 -0
  207. package/src/api/routes/index.js +0 -2
  208. package/src/api/routes/static.js +5 -0
  209. package/src/api/routes/tests/application.spec.js +2 -2
  210. package/src/api/routes/tests/static.spec.js +98 -0
  211. package/src/automations/steps/createRow.js +2 -4
  212. package/src/automations/steps/deleteRow.js +1 -4
  213. package/src/environment.js +1 -0
  214. package/src/integrations/rest.ts +9 -28
  215. package/src/integrations/s3.ts +1 -1
  216. package/src/integrations/utils.ts +18 -5
  217. package/src/middleware/currentapp.js +0 -9
  218. package/src/middleware/tests/usageQuota.spec.js +18 -24
  219. package/src/middleware/usageQuota.js +93 -15
  220. package/src/migrations/tests/usageQuotas/index.spec.js +27 -0
  221. package/src/migrations/tests/usageQuotas/syncApps.spec.js +37 -0
  222. package/src/migrations/tests/usageQuotas/syncRows.spec.js +43 -0
  223. package/src/migrations/usageQuotas/index.js +24 -0
  224. package/src/migrations/usageQuotas/syncApps.js +18 -0
  225. package/src/migrations/usageQuotas/syncRows.js +21 -0
  226. package/src/tests/utilities/TestConfiguration.js +3 -1
  227. package/src/threads/query.js +5 -0
  228. package/src/utilities/tests/usageQuota/usageQuota.spec.js +72 -0
  229. package/src/utilities/usageQuota/index.js +92 -0
  230. package/src/utilities/usageQuota/rows.js +74 -0
  231. package/src/utilities/usageQuota/usageQuoteReset.js +18 -0
  232. package/src/utilities/workerRequests.js +0 -23
  233. package/dist/api/controllers/hosting.js +0 -30
  234. package/dist/api/routes/hosting.js +0 -11
  235. package/src/api/controllers/hosting.js +0 -22
  236. package/src/api/routes/hosting.js +0 -13
  237. package/src/api/routes/tests/hosting.spec.js +0 -36
  238. 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">90.3% </span>
26
+ <span class="strong">83.52% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>205/227</span>
28
+ <span class='fraction'>218/261</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">79.6% </span>
33
+ <span class="strong">70.85% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>121/152</span>
35
+ <span class='fraction'>124/175</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">100% </span>
40
+ <span class="strong">87.87% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>29/29</span>
42
+ <span class='fraction'>29/33</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">90.22% </span>
47
+ <span class="strong">84.16% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>203/225</span>
49
+ <span class='fraction'>218/259</span>
50
50
  </div>
51
51
 
52
52
 
@@ -119,17 +119,17 @@
119
119
 
120
120
  <tr>
121
121
  <td class="file high" data-value="currentapp.js"><a href="currentapp.js.html">currentapp.js</a></td>
122
- <td data-value="83.33" class="pic high">
122
+ <td data-value="83.01" class="pic high">
123
123
  <div class="chart"><div class="cover-fill" style="width: 83%"></div><div class="cover-empty" style="width: 17%"></div></div>
124
124
  </td>
125
- <td data-value="83.33" class="pct high">83.33%</td>
126
- <td data-value="54" class="abs high">45/54</td>
125
+ <td data-value="83.01" class="pct high">83.01%</td>
126
+ <td data-value="53" class="abs high">44/53</td>
127
127
  <td data-value="78.04" class="pct medium">78.04%</td>
128
128
  <td data-value="41" class="abs medium">32/41</td>
129
129
  <td data-value="100" class="pct high">100%</td>
130
130
  <td data-value="1" class="abs high">1/1</td>
131
- <td data-value="83.33" class="pct high">83.33%</td>
132
- <td data-value="54" class="abs high">45/54</td>
131
+ <td data-value="83.01" class="pct high">83.01%</td>
132
+ <td data-value="53" class="abs high">44/53</td>
133
133
  </tr>
134
134
 
135
135
  <tr>
@@ -178,18 +178,18 @@
178
178
  </tr>
179
179
 
180
180
  <tr>
181
- <td class="file high" data-value="usageQuota.js"><a href="usageQuota.js.html">usageQuota.js</a></td>
182
- <td data-value="92.1" class="pic high">
183
- <div class="chart"><div class="cover-fill" style="width: 92%"></div><div class="cover-empty" style="width: 8%"></div></div>
181
+ <td class="file medium" data-value="usageQuota.js"><a href="usageQuota.js.html">usageQuota.js</a></td>
182
+ <td data-value="67.12" class="pic medium">
183
+ <div class="chart"><div class="cover-fill" style="width: 67%"></div><div class="cover-empty" style="width: 33%"></div></div>
184
184
  </td>
185
- <td data-value="92.1" class="pct high">92.1%</td>
186
- <td data-value="38" class="abs high">35/38</td>
187
- <td data-value="82.14" class="pct high">82.14%</td>
188
- <td data-value="28" class="abs high">23/28</td>
189
- <td data-value="100" class="pct high">100%</td>
190
- <td data-value="4" class="abs high">4/4</td>
191
- <td data-value="91.66" class="pct high">91.66%</td>
192
- <td data-value="36" class="abs high">33/36</td>
185
+ <td data-value="67.12" class="pct medium">67.12%</td>
186
+ <td data-value="73" class="abs medium">49/73</td>
187
+ <td data-value="50.98" class="pct medium">50.98%</td>
188
+ <td data-value="51" class="abs medium">26/51</td>
189
+ <td data-value="50" class="pct medium">50%</td>
190
+ <td data-value="8" class="abs medium">4/8</td>
191
+ <td data-value="69.01" class="pct medium">69.01%</td>
192
+ <td data-value="71" class="abs medium">49/71</td>
193
193
  </tr>
194
194
 
195
195
  <tr>
@@ -215,7 +215,7 @@
215
215
  <div class='footer quiet pad2 space-top1 center small'>
216
216
  Code coverage generated by
217
217
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
218
- at Thu Jan 20 2022 18:46:12 GMT+0000 (Coordinated Universal Time)
218
+ at Wed Jan 26 2022 15:03:02 GMT+0000 (Coordinated Universal Time)
219
219
  </div>
220
220
  </div>
221
221
  <script src="../prettify.js"></script>
@@ -106,11 +106,11 @@
106
106
  <span class="cline-any cline-neutral">&nbsp;</span>
107
107
  <span class="cline-any cline-neutral">&nbsp;</span>
108
108
  <span class="cline-any cline-neutral">&nbsp;</span>
109
- <span class="cline-any cline-yes">35x</span>
109
+ <span class="cline-any cline-yes">38x</span>
110
110
  <span class="cline-any cline-yes">230x</span>
111
111
  <span class="cline-any cline-neutral">&nbsp;</span>
112
112
  <span class="cline-any cline-neutral">&nbsp;</span>
113
- <span class="cline-any cline-yes">35x</span>
113
+ <span class="cline-any cline-yes">38x</span>
114
114
  <span class="cline-any cline-yes">46x</span>
115
115
  <span class="cline-any cline-neutral">&nbsp;</span>
116
116
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">function validate(schema, property) {
@@ -148,7 +148,7 @@ module.exports.params = schema =&gt; {
148
148
  <div class='footer quiet pad2 space-top1 center small'>
149
149
  Code coverage generated by
150
150
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
151
- at Thu Jan 20 2022 18:46:12 GMT+0000 (Coordinated Universal Time)
151
+ at Wed Jan 26 2022 15:03:02 GMT+0000 (Coordinated Universal Time)
152
152
  </div>
153
153
  </div>
154
154
  <script src="../prettify.js"></script>
@@ -247,7 +247,7 @@ module.exports.bodySubResource = (main, sub) =&gt; {
247
247
  <div class='footer quiet pad2 space-top1 center small'>
248
248
  Code coverage generated by
249
249
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
250
- at Thu Jan 20 2022 18:46:12 GMT+0000 (Coordinated Universal Time)
250
+ at Wed Jan 26 2022 15:03:02 GMT+0000 (Coordinated Universal Time)
251
251
  </div>
252
252
  </div>
253
253
  <script src="../prettify.js"></script>
@@ -94,7 +94,7 @@ module.exports = async (ctx, next) =&gt; {
94
94
  <div class='footer quiet pad2 space-top1 center small'>
95
95
  Code coverage generated by
96
96
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
97
- at Thu Jan 20 2022 18:46:12 GMT+0000 (Coordinated Universal Time)
97
+ at Wed Jan 26 2022 15:03:02 GMT+0000 (Coordinated Universal Time)
98
98
  </div>
99
99
  </div>
100
100
  <script src="../prettify.js"></script>
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">92.1% </span>
26
+ <span class="strong">67.12% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>35/38</span>
28
+ <span class='fraction'>49/73</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">82.14% </span>
33
+ <span class="strong">50.98% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>23/28</span>
35
+ <span class='fraction'>26/51</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">100% </span>
40
+ <span class="strong">50% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>4/4</span>
42
+ <span class='fraction'>4/8</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">91.66% </span>
47
+ <span class="strong">69.01% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>33/36</span>
49
+ <span class='fraction'>49/71</span>
50
50
  </div>
51
51
 
52
52
 
@@ -55,7 +55,7 @@
55
55
  Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
56
  </p>
57
57
  </div>
58
- <div class='status-line high'></div>
58
+ <div class='status-line medium'></div>
59
59
  <pre><table class="coverage">
60
60
  <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
61
61
  <a name='L2'></a><a href='#L2'>2</a>
@@ -145,16 +145,91 @@
145
145
  <a name='L86'></a><a href='#L86'>86</a>
146
146
  <a name='L87'></a><a href='#L87'>87</a>
147
147
  <a name='L88'></a><a href='#L88'>88</a>
148
- <a name='L89'></a><a href='#L89'>89</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">24x</span>
149
- <span class="cline-any cline-yes">24x</span>
148
+ <a name='L89'></a><a href='#L89'>89</a>
149
+ <a name='L90'></a><a href='#L90'>90</a>
150
+ <a name='L91'></a><a href='#L91'>91</a>
151
+ <a name='L92'></a><a href='#L92'>92</a>
152
+ <a name='L93'></a><a href='#L93'>93</a>
153
+ <a name='L94'></a><a href='#L94'>94</a>
154
+ <a name='L95'></a><a href='#L95'>95</a>
155
+ <a name='L96'></a><a href='#L96'>96</a>
156
+ <a name='L97'></a><a href='#L97'>97</a>
157
+ <a name='L98'></a><a href='#L98'>98</a>
158
+ <a name='L99'></a><a href='#L99'>99</a>
159
+ <a name='L100'></a><a href='#L100'>100</a>
160
+ <a name='L101'></a><a href='#L101'>101</a>
161
+ <a name='L102'></a><a href='#L102'>102</a>
162
+ <a name='L103'></a><a href='#L103'>103</a>
163
+ <a name='L104'></a><a href='#L104'>104</a>
164
+ <a name='L105'></a><a href='#L105'>105</a>
165
+ <a name='L106'></a><a href='#L106'>106</a>
166
+ <a name='L107'></a><a href='#L107'>107</a>
167
+ <a name='L108'></a><a href='#L108'>108</a>
168
+ <a name='L109'></a><a href='#L109'>109</a>
169
+ <a name='L110'></a><a href='#L110'>110</a>
170
+ <a name='L111'></a><a href='#L111'>111</a>
171
+ <a name='L112'></a><a href='#L112'>112</a>
172
+ <a name='L113'></a><a href='#L113'>113</a>
173
+ <a name='L114'></a><a href='#L114'>114</a>
174
+ <a name='L115'></a><a href='#L115'>115</a>
175
+ <a name='L116'></a><a href='#L116'>116</a>
176
+ <a name='L117'></a><a href='#L117'>117</a>
177
+ <a name='L118'></a><a href='#L118'>118</a>
178
+ <a name='L119'></a><a href='#L119'>119</a>
179
+ <a name='L120'></a><a href='#L120'>120</a>
180
+ <a name='L121'></a><a href='#L121'>121</a>
181
+ <a name='L122'></a><a href='#L122'>122</a>
182
+ <a name='L123'></a><a href='#L123'>123</a>
183
+ <a name='L124'></a><a href='#L124'>124</a>
184
+ <a name='L125'></a><a href='#L125'>125</a>
185
+ <a name='L126'></a><a href='#L126'>126</a>
186
+ <a name='L127'></a><a href='#L127'>127</a>
187
+ <a name='L128'></a><a href='#L128'>128</a>
188
+ <a name='L129'></a><a href='#L129'>129</a>
189
+ <a name='L130'></a><a href='#L130'>130</a>
190
+ <a name='L131'></a><a href='#L131'>131</a>
191
+ <a name='L132'></a><a href='#L132'>132</a>
192
+ <a name='L133'></a><a href='#L133'>133</a>
193
+ <a name='L134'></a><a href='#L134'>134</a>
194
+ <a name='L135'></a><a href='#L135'>135</a>
195
+ <a name='L136'></a><a href='#L136'>136</a>
196
+ <a name='L137'></a><a href='#L137'>137</a>
197
+ <a name='L138'></a><a href='#L138'>138</a>
198
+ <a name='L139'></a><a href='#L139'>139</a>
199
+ <a name='L140'></a><a href='#L140'>140</a>
200
+ <a name='L141'></a><a href='#L141'>141</a>
201
+ <a name='L142'></a><a href='#L142'>142</a>
202
+ <a name='L143'></a><a href='#L143'>143</a>
203
+ <a name='L144'></a><a href='#L144'>144</a>
204
+ <a name='L145'></a><a href='#L145'>145</a>
205
+ <a name='L146'></a><a href='#L146'>146</a>
206
+ <a name='L147'></a><a href='#L147'>147</a>
207
+ <a name='L148'></a><a href='#L148'>148</a>
208
+ <a name='L149'></a><a href='#L149'>149</a>
209
+ <a name='L150'></a><a href='#L150'>150</a>
210
+ <a name='L151'></a><a href='#L151'>151</a>
211
+ <a name='L152'></a><a href='#L152'>152</a>
212
+ <a name='L153'></a><a href='#L153'>153</a>
213
+ <a name='L154'></a><a href='#L154'>154</a>
214
+ <a name='L155'></a><a href='#L155'>155</a>
215
+ <a name='L156'></a><a href='#L156'>156</a>
216
+ <a name='L157'></a><a href='#L157'>157</a>
217
+ <a name='L158'></a><a href='#L158'>158</a>
218
+ <a name='L159'></a><a href='#L159'>159</a>
219
+ <a name='L160'></a><a href='#L160'>160</a>
220
+ <a name='L161'></a><a href='#L161'>161</a>
221
+ <a name='L162'></a><a href='#L162'>162</a>
222
+ <a name='L163'></a><a href='#L163'>163</a>
223
+ <a name='L164'></a><a href='#L164'>164</a>
224
+ <a name='L165'></a><a href='#L165'>165</a>
225
+ <a name='L166'></a><a href='#L166'>166</a>
226
+ <a name='L167'></a><a href='#L167'>167</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">24x</span>
150
227
  <span class="cline-any cline-yes">24x</span>
151
228
  <span class="cline-any cline-yes">24x</span>
152
229
  <span class="cline-any cline-neutral">&nbsp;</span>
153
230
  <span class="cline-any cline-neutral">&nbsp;</span>
154
231
  <span class="cline-any cline-neutral">&nbsp;</span>
155
232
  <span class="cline-any cline-yes">24x</span>
156
- <span class="cline-any cline-neutral">&nbsp;</span>
157
- <span class="cline-any cline-neutral">&nbsp;</span>
158
233
  <span class="cline-any cline-yes">24x</span>
159
234
  <span class="cline-any cline-neutral">&nbsp;</span>
160
235
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -176,18 +251,15 @@
176
251
  <span class="cline-any cline-neutral">&nbsp;</span>
177
252
  <span class="cline-any cline-neutral">&nbsp;</span>
178
253
  <span class="cline-any cline-yes">4x</span>
179
- <span class="cline-any cline-yes">5x</span>
254
+ <span class="cline-any cline-yes">7x</span>
180
255
  <span class="cline-any cline-yes">4x</span>
181
256
  <span class="cline-any cline-neutral">&nbsp;</span>
182
257
  <span class="cline-any cline-neutral">&nbsp;</span>
183
258
  <span class="cline-any cline-neutral">&nbsp;</span>
184
259
  <span class="cline-any cline-neutral">&nbsp;</span>
185
260
  <span class="cline-any cline-yes">24x</span>
186
- <span class="cline-any cline-yes">11x</span>
187
- <span class="cline-any cline-neutral">&nbsp;</span>
188
- <span class="cline-any cline-neutral">&nbsp;</span>
189
- <span class="cline-any cline-yes">11x</span>
190
- <span class="cline-any cline-yes">7x</span>
261
+ <span class="cline-any cline-yes">10x</span>
262
+ <span class="cline-any cline-yes">6x</span>
191
263
  <span class="cline-any cline-neutral">&nbsp;</span>
192
264
  <span class="cline-any cline-neutral">&nbsp;</span>
193
265
  <span class="cline-any cline-yes">4x</span>
@@ -221,10 +293,10 @@
221
293
  <span class="cline-any cline-neutral">&nbsp;</span>
222
294
  <span class="cline-any cline-yes">3x</span>
223
295
  <span class="cline-any cline-neutral">&nbsp;</span>
224
- <span class="cline-any cline-yes">1x</span>
296
+ <span class="cline-any cline-no">&nbsp;</span>
225
297
  <span class="cline-any cline-neutral">&nbsp;</span>
226
298
  <span class="cline-any cline-neutral">&nbsp;</span>
227
- <span class="cline-any cline-yes">2x</span>
299
+ <span class="cline-any cline-no">&nbsp;</span>
228
300
  <span class="cline-any cline-neutral">&nbsp;</span>
229
301
  <span class="cline-any cline-yes">3x</span>
230
302
  <span class="cline-any cline-yes">3x</span>
@@ -233,17 +305,98 @@
233
305
  <span class="cline-any cline-no">&nbsp;</span>
234
306
  <span class="cline-any cline-neutral">&nbsp;</span>
235
307
  <span class="cline-any cline-neutral">&nbsp;</span>
308
+ <span class="cline-any cline-neutral">&nbsp;</span>
309
+ <span class="cline-any cline-yes">24x</span>
310
+ <span class="cline-any cline-yes">3x</span>
311
+ <span class="cline-any cline-neutral">&nbsp;</span>
312
+ <span class="cline-any cline-neutral">&nbsp;</span>
313
+ <span class="cline-any cline-neutral">&nbsp;</span>
314
+ <span class="cline-any cline-neutral">&nbsp;</span>
315
+ <span class="cline-any cline-neutral">&nbsp;</span>
316
+ <span class="cline-any cline-yes">3x</span>
317
+ <span class="cline-any cline-no">&nbsp;</span>
318
+ <span class="cline-any cline-no">&nbsp;</span>
319
+ <span class="cline-any cline-neutral">&nbsp;</span>
320
+ <span class="cline-any cline-neutral">&nbsp;</span>
321
+ <span class="cline-any cline-yes">3x</span>
322
+ <span class="cline-any cline-no">&nbsp;</span>
323
+ <span class="cline-any cline-neutral">&nbsp;</span>
324
+ <span class="cline-any cline-neutral">&nbsp;</span>
325
+ <span class="cline-any cline-neutral">&nbsp;</span>
326
+ <span class="cline-any cline-neutral">&nbsp;</span>
327
+ <span class="cline-any cline-yes">3x</span>
328
+ <span class="cline-any cline-yes">3x</span>
329
+ <span class="cline-any cline-yes">3x</span>
330
+ <span class="cline-any cline-neutral">&nbsp;</span>
331
+ <span class="cline-any cline-neutral">&nbsp;</span>
332
+ <span class="cline-any cline-yes">3x</span>
333
+ <span class="cline-any cline-no">&nbsp;</span>
334
+ <span class="cline-any cline-no">&nbsp;</span>
335
+ <span class="cline-any cline-neutral">&nbsp;</span>
336
+ <span class="cline-any cline-neutral">&nbsp;</span>
337
+ <span class="cline-any cline-yes">3x</span>
338
+ <span class="cline-any cline-yes">2x</span>
339
+ <span class="cline-any cline-neutral">&nbsp;</span>
340
+ <span class="cline-any cline-neutral">&nbsp;</span>
341
+ <span class="cline-any cline-neutral">&nbsp;</span>
342
+ <span class="cline-any cline-neutral">&nbsp;</span>
343
+ <span class="cline-any cline-yes">3x</span>
344
+ <span class="cline-any cline-yes">3x</span>
345
+ <span class="cline-any cline-neutral">&nbsp;</span>
346
+ <span class="cline-any cline-neutral">&nbsp;</span>
347
+ <span class="cline-any cline-neutral">&nbsp;</span>
348
+ <span class="cline-any cline-yes">24x</span>
349
+ <span class="cline-any cline-no">&nbsp;</span>
350
+ <span class="cline-any cline-neutral">&nbsp;</span>
351
+ <span class="cline-any cline-no">&nbsp;</span>
352
+ <span class="cline-any cline-no">&nbsp;</span>
353
+ <span class="cline-any cline-neutral">&nbsp;</span>
354
+ <span class="cline-any cline-neutral">&nbsp;</span>
355
+ <span class="cline-any cline-neutral">&nbsp;</span>
356
+ <span class="cline-any cline-no">&nbsp;</span>
357
+ <span class="cline-any cline-no">&nbsp;</span>
358
+ <span class="cline-any cline-no">&nbsp;</span>
359
+ <span class="cline-any cline-neutral">&nbsp;</span>
360
+ <span class="cline-any cline-neutral">&nbsp;</span>
361
+ <span class="cline-any cline-neutral">&nbsp;</span>
362
+ <span class="cline-any cline-yes">24x</span>
363
+ <span class="cline-any cline-neutral">&nbsp;</span>
364
+ <span class="cline-any cline-no">&nbsp;</span>
365
+ <span class="cline-any cline-no">&nbsp;</span>
366
+ <span class="cline-any cline-no">&nbsp;</span>
367
+ <span class="cline-any cline-neutral">&nbsp;</span>
368
+ <span class="cline-any cline-neutral">&nbsp;</span>
369
+ <span class="cline-any cline-neutral">&nbsp;</span>
370
+ <span class="cline-any cline-yes">24x</span>
371
+ <span class="cline-any cline-neutral">&nbsp;</span>
372
+ <span class="cline-any cline-yes">2x</span>
373
+ <span class="cline-any cline-no">&nbsp;</span>
374
+ <span class="cline-any cline-no">&nbsp;</span>
375
+ <span class="cline-any cline-no">&nbsp;</span>
376
+ <span class="cline-any cline-neutral">&nbsp;</span>
377
+ <span class="cline-any cline-neutral">&nbsp;</span>
378
+ <span class="cline-any cline-neutral">&nbsp;</span>
379
+ <span class="cline-any cline-yes">24x</span>
380
+ <span class="cline-any cline-neutral">&nbsp;</span>
381
+ <span class="cline-any cline-neutral">&nbsp;</span>
382
+ <span class="cline-any cline-neutral">&nbsp;</span>
383
+ <span class="cline-any cline-yes">24x</span>
384
+ <span class="cline-any cline-neutral">&nbsp;</span>
385
+ <span class="cline-any cline-neutral">&nbsp;</span>
386
+ <span class="cline-any cline-neutral">&nbsp;</span>
387
+ <span class="cline-any cline-yes">24x</span>
388
+ <span class="cline-any cline-neutral">&nbsp;</span>
389
+ <span class="cline-any cline-yes">24x</span>
390
+ <span class="cline-any cline-neutral">&nbsp;</span>
391
+ <span class="cline-any cline-neutral">&nbsp;</span>
236
392
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">const CouchDB = require("../db")
237
393
  const usageQuota = require("../utilities/usageQuota")
238
- const env = require("../environment")
239
- const { getTenantId } = require("@budibase/backend-core/tenancy")
394
+ const { getUniqueRows } = require("../utilities/usageQuota/rows")
240
395
  const {
241
396
  isExternalTable,
242
397
  isRowId: isExternalRowId,
243
398
  } = require("../integrations/utils")
244
- &nbsp;
245
- // tenants without limits
246
- const EXCLUDED_TENANTS = ["bb", "default", "bbtest", "bbstaging"]
399
+ const migration = require("../migrations/usageQuotas")
247
400
  &nbsp;
248
401
  // currently only counting new writes and deletes
249
402
  const METHOD_MAP = {
@@ -253,13 +406,13 @@ const METHOD_MAP = {
253
406
  &nbsp;
254
407
  const DOMAIN_MAP = {
255
408
  rows: usageQuota.Properties.ROW,
256
- upload: usageQuota.Properties.UPLOAD,
257
- views: usageQuota.Properties.VIEW,
258
- users: usageQuota.Properties.USER,
409
+ // upload: usageQuota.Properties.UPLOAD, // doesn't work yet
410
+ // views: usageQuota.Properties.VIEW, // doesn't work yet
411
+ // users: usageQuota.Properties.USER, // doesn't work yet
259
412
  applications: usageQuota.Properties.APPS,
260
413
  // this will not be updated by endpoint calls
261
414
  // instead it will be updated by triggerInfo
262
- automationRuns: usageQuota.Properties.AUTOMATION,
415
+ // automationRuns: usageQuota.Properties.AUTOMATION, // doesn't work yet
263
416
  }
264
417
  &nbsp;
265
418
  function getProperty(url) {
@@ -271,10 +424,7 @@ function getProperty(url) {
271
424
  }
272
425
  &nbsp;
273
426
  module.exports = async (ctx, next) =&gt; {
274
- const tenantId = getTenantId()
275
- &nbsp;
276
- // if in development or a self hosted cloud usage quotas should not be executed
277
- if (env.isDev() || env.SELF_HOSTED || EXCLUDED_TENANTS.includes(tenantId)) {
427
+ if (!usageQuota.useQuotas()) {
278
428
  return next()
279
429
  }
280
430
  &nbsp;
@@ -307,20 +457,104 @@ module.exports = async (ctx, next) =&gt; {
307
457
  }
308
458
  &nbsp;
309
459
  // update usage for uploads to be the total size
310
- if (property === usageQuota.Properties.UPLOAD) {
460
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (property === usageQuota.Properties.UPLOAD) {
311
461
  const files =
312
- ctx.request.files.file.length &gt; 1
462
+ <span class="cstat-no" title="statement not covered" > ctx.request.files.file.length &gt; 1</span>
313
463
  ? Array.from(ctx.request.files.file)
314
- : <span class="branch-1 cbranch-no" title="branch not covered" >[ctx.request.files.file]</span>
315
- usage = files.map(file =&gt; file.size).reduce((total, size) =&gt; total + size)
464
+ : [ctx.request.files.file]
465
+ <span class="cstat-no" title="statement not covered" > usage = files.map(<span class="fstat-no" title="function not covered" >fi</span>le =&gt; <span class="cstat-no" title="statement not covered" >file.size)</span>.reduce(<span class="fstat-no" title="function not covered" >(t</span>otal, size) =&gt; <span class="cstat-no" title="statement not covered" >total + size)</span></span>
316
466
  }
317
467
  try {
318
- await usageQuota.update(property, usage)
319
- return next()
468
+ await migration.run()
469
+ await performRequest(ctx, next, property, usage)
320
470
  } catch (err) {
321
471
  <span class="cstat-no" title="statement not covered" > ctx.throw(400, err)</span>
322
472
  }
323
473
  }
474
+ &nbsp;
475
+ const performRequest = async (ctx, next, property, usage) =&gt; {
476
+ const usageContext = {
477
+ skipNext: false,
478
+ skipUsage: false,
479
+ [usageQuota.Properties.APPS]: {},
480
+ }
481
+ &nbsp;
482
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (usage === -1) {
483
+ <span class="cstat-no" title="statement not covered" > if (PRE_DELETE[property]) {</span>
484
+ <span class="cstat-no" title="statement not covered" > await PRE_DELETE[property](ctx, usageContext)</span>
485
+ }
486
+ } else {
487
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (PRE_CREATE[property]) {
488
+ <span class="cstat-no" title="statement not covered" > await PRE_CREATE[property](ctx, usageContext)</span>
489
+ }
490
+ }
491
+ &nbsp;
492
+ // run the request
493
+ if (!usageContext.skipNext) {
494
+ await usageQuota.update(property, usage, { dryRun: true })
495
+ await next()
496
+ }
497
+ &nbsp;
498
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (usage === -1) {
499
+ <span class="cstat-no" title="statement not covered" > if (POST_DELETE[property]) {</span>
500
+ <span class="cstat-no" title="statement not covered" > await POST_DELETE[property](ctx, usageContext)</span>
501
+ }
502
+ } else {
503
+ if (POST_CREATE[property]) {
504
+ await POST_CREATE[property](ctx, usageContext)
505
+ }
506
+ }
507
+ &nbsp;
508
+ // update the usage
509
+ if (!usageContext.skipUsage) {
510
+ await usageQuota.update(property, usage)
511
+ }
512
+ }
513
+ &nbsp;
514
+ const appPreDelete = <span class="fstat-no" title="function not covered" >as</span>ync (ctx, usageContext) =&gt; {
515
+ <span class="cstat-no" title="statement not covered" > if (ctx.query.unpublish) {</span>
516
+ // don't run usage decrement for unpublish
517
+ <span class="cstat-no" title="statement not covered" > usageContext.skipUsage = true</span>
518
+ <span class="cstat-no" title="statement not covered" > return</span>
519
+ }
520
+ &nbsp;
521
+ // store the row count to delete
522
+ const rows = <span class="cstat-no" title="statement not covered" >await getUniqueRows([ctx.appId])</span>
523
+ <span class="cstat-no" title="statement not covered" > if (rows.length) {</span>
524
+ <span class="cstat-no" title="statement not covered" > usageContext[usageQuota.Properties.APPS] = { rowCount: rows.length }</span>
525
+ }
526
+ }
527
+ &nbsp;
528
+ const appPostDelete = <span class="fstat-no" title="function not covered" >as</span>ync (ctx, usageContext) =&gt; {
529
+ // delete the app rows from usage
530
+ const rowCount = <span class="cstat-no" title="statement not covered" >usageContext[usageQuota.Properties.APPS].rowCount</span>
531
+ <span class="cstat-no" title="statement not covered" > if (rowCount) {</span>
532
+ <span class="cstat-no" title="statement not covered" > await usageQuota.update(usageQuota.Properties.ROW, -rowCount)</span>
533
+ }
534
+ }
535
+ &nbsp;
536
+ const appPostCreate = async ctx =&gt; {
537
+ // app import &amp; template creation
538
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (ctx.request.body.useTemplate === "true") {
539
+ const rows = <span class="cstat-no" title="statement not covered" >await getUniqueRows([ctx.response.body.appId])</span>
540
+ const rowCount = <span class="cstat-no" title="statement not covered" >rows ? rows.length : 0</span>
541
+ <span class="cstat-no" title="statement not covered" > await usageQuota.update(usageQuota.Properties.ROW, rowCount)</span>
542
+ }
543
+ }
544
+ &nbsp;
545
+ const PRE_DELETE = {
546
+ [usageQuota.Properties.APPS]: appPreDelete,
547
+ }
548
+ &nbsp;
549
+ const POST_DELETE = {
550
+ [usageQuota.Properties.APPS]: appPostDelete,
551
+ }
552
+ &nbsp;
553
+ const PRE_CREATE = {}
554
+ &nbsp;
555
+ const POST_CREATE = {
556
+ [usageQuota.Properties.APPS]: appPostCreate,
557
+ }
324
558
  &nbsp;</pre></td></tr></table></pre>
325
559
 
326
560
  <div class='push'></div><!-- for sticky footer -->
@@ -328,7 +562,7 @@ module.exports = async (ctx, next) =&gt; {
328
562
  <div class='footer quiet pad2 space-top1 center small'>
329
563
  Code coverage generated by
330
564
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
331
- at Thu Jan 20 2022 18:46:12 GMT+0000 (Coordinated Universal Time)
565
+ at Wed Jan 26 2022 15:03:02 GMT+0000 (Coordinated Universal Time)
332
566
  </div>
333
567
  </div>
334
568
  <script src="../prettify.js"></script>
@@ -69,7 +69,7 @@
69
69
  <span class="cline-any cline-neutral">&nbsp;</span>
70
70
  <span class="cline-any cline-neutral">&nbsp;</span>
71
71
  <span class="cline-any cline-yes">29x</span>
72
- <span class="cline-any cline-yes">289x</span>
72
+ <span class="cline-any cline-yes">294x</span>
73
73
  <span class="cline-any cline-neutral">&nbsp;</span>
74
74
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">const WEBHOOK_ENDPOINTS = new RegExp(
75
75
  ["webhooks/trigger", "webhooks/schema"].join("|")
@@ -85,7 +85,7 @@ exports.isWebhookEndpoint = ctx =&gt; {
85
85
  <div class='footer quiet pad2 space-top1 center small'>
86
86
  Code coverage generated by
87
87
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
88
- at Thu Jan 20 2022 18:46:12 GMT+0000 (Coordinated Universal Time)
88
+ at Wed Jan 26 2022 15:03:02 GMT+0000 (Coordinated Universal Time)
89
89
  </div>
90
90
  </div>
91
91
  <script src="../prettify.js"></script>