@budibase/server 0.9.188 → 0.9.190-alpha.2

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 (307) hide show
  1. package/Dockerfile +7 -1
  2. package/__mocks__/mssql.ts +1 -1
  3. package/__mocks__/oracledb.ts +31 -0
  4. package/__mocks__/pg.ts +3 -0
  5. package/builder/assets/bb-space-man.5be51a45.svg +290 -0
  6. package/builder/assets/index.7d405e74.css +1 -0
  7. package/builder/assets/index.edea4fa5.js +1316 -0
  8. package/builder/assets/oracle.66592424.png +0 -0
  9. package/builder/assets/vendor.470042a4.js +152 -0
  10. package/builder/assets/vendor.5e1fe644.css +1 -0
  11. package/builder/index.html +4 -4
  12. package/coverage/clover.xml +1507 -1081
  13. package/coverage/coverage-final.json +93 -89
  14. package/coverage/lcov-report/api/controllers/analytics.js.html +2 -2
  15. package/coverage/lcov-report/api/controllers/apikeys.js.html +2 -2
  16. package/coverage/lcov-report/api/controllers/application.js.html +64 -13
  17. package/coverage/lcov-report/api/controllers/auth.js.html +19 -10
  18. package/coverage/lcov-report/api/controllers/automation.js.html +3 -3
  19. package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
  20. package/coverage/lcov-report/api/controllers/cloud.js.html +1 -1
  21. package/coverage/lcov-report/api/controllers/component.js.html +4 -4
  22. package/coverage/lcov-report/api/controllers/datasource.js.html +232 -28
  23. package/coverage/lcov-report/api/controllers/dev.js.html +16 -7
  24. package/coverage/lcov-report/api/controllers/hosting.js.html +10 -10
  25. package/coverage/lcov-report/api/controllers/index.html +91 -91
  26. package/coverage/lcov-report/api/controllers/integration.js.html +1 -1
  27. package/coverage/lcov-report/api/controllers/layout.js.html +3 -3
  28. package/coverage/lcov-report/api/controllers/metadata.js.html +3 -3
  29. package/coverage/lcov-report/api/controllers/permission.js.html +3 -3
  30. package/coverage/lcov-report/api/controllers/query.js.html +53 -209
  31. package/coverage/lcov-report/api/controllers/role.js.html +9 -9
  32. package/coverage/lcov-report/api/controllers/routing.js.html +3 -3
  33. package/coverage/lcov-report/api/controllers/row/external.js.html +17 -8
  34. package/coverage/lcov-report/api/controllers/row/index.html +26 -26
  35. package/coverage/lcov-report/api/controllers/row/index.js.html +2 -2
  36. package/coverage/lcov-report/api/controllers/row/internal.js.html +9 -9
  37. package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +2 -2
  38. package/coverage/lcov-report/api/controllers/row/utils.js.html +21 -30
  39. package/coverage/lcov-report/api/controllers/screen.js.html +2 -2
  40. package/coverage/lcov-report/api/controllers/script.js.html +3 -3
  41. package/coverage/lcov-report/api/controllers/table/external.js.html +1001 -0
  42. package/coverage/lcov-report/api/controllers/table/index.html +56 -26
  43. package/coverage/lcov-report/api/controllers/table/index.js.html +80 -350
  44. package/coverage/lcov-report/api/controllers/table/internal.js.html +545 -0
  45. package/coverage/lcov-report/api/controllers/table/utils.js.html +175 -52
  46. package/coverage/lcov-report/api/controllers/templates.js.html +4 -4
  47. package/coverage/lcov-report/api/controllers/user.js.html +390 -33
  48. package/coverage/lcov-report/api/controllers/view/exporters.js.html +19 -4
  49. package/coverage/lcov-report/api/controllers/view/index.html +22 -22
  50. package/coverage/lcov-report/api/controllers/view/index.js.html +52 -13
  51. package/coverage/lcov-report/api/controllers/view/utils.js.html +11 -11
  52. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +3 -3
  53. package/coverage/lcov-report/api/controllers/webhook.js.html +4 -4
  54. package/coverage/lcov-report/api/index.html +1 -1
  55. package/coverage/lcov-report/api/index.js.html +1 -1
  56. package/coverage/lcov-report/api/routes/analytics.js.html +1 -1
  57. package/coverage/lcov-report/api/routes/apikeys.js.html +1 -1
  58. package/coverage/lcov-report/api/routes/application.js.html +1 -1
  59. package/coverage/lcov-report/api/routes/auth.js.html +1 -1
  60. package/coverage/lcov-report/api/routes/automation.js.html +1 -1
  61. package/coverage/lcov-report/api/routes/backup.js.html +1 -1
  62. package/coverage/lcov-report/api/routes/cloud.js.html +1 -1
  63. package/coverage/lcov-report/api/routes/component.js.html +1 -1
  64. package/coverage/lcov-report/api/routes/datasource.js.html +1 -1
  65. package/coverage/lcov-report/api/routes/deploy.js.html +1 -1
  66. package/coverage/lcov-report/api/routes/dev.js.html +2 -2
  67. package/coverage/lcov-report/api/routes/hosting.js.html +1 -1
  68. package/coverage/lcov-report/api/routes/index.html +4 -4
  69. package/coverage/lcov-report/api/routes/index.js.html +1 -1
  70. package/coverage/lcov-report/api/routes/integration.js.html +1 -1
  71. package/coverage/lcov-report/api/routes/layout.js.html +1 -1
  72. package/coverage/lcov-report/api/routes/metadata.js.html +1 -1
  73. package/coverage/lcov-report/api/routes/permission.js.html +1 -1
  74. package/coverage/lcov-report/api/routes/query.js.html +5 -2
  75. package/coverage/lcov-report/api/routes/role.js.html +1 -1
  76. package/coverage/lcov-report/api/routes/routing.js.html +1 -1
  77. package/coverage/lcov-report/api/routes/row.js.html +1 -1
  78. package/coverage/lcov-report/api/routes/screen.js.html +1 -1
  79. package/coverage/lcov-report/api/routes/script.js.html +1 -1
  80. package/coverage/lcov-report/api/routes/static.js.html +2 -2
  81. package/coverage/lcov-report/api/routes/table.js.html +35 -2
  82. package/coverage/lcov-report/api/routes/templates.js.html +1 -1
  83. package/coverage/lcov-report/api/routes/user.js.html +17 -2
  84. package/coverage/lcov-report/api/routes/view.js.html +1 -1
  85. package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
  86. package/coverage/lcov-report/automations/actions.js.html +2 -2
  87. package/coverage/lcov-report/automations/automationUtils.js.html +4 -4
  88. package/coverage/lcov-report/automations/bullboard.js.html +71 -20
  89. package/coverage/lcov-report/automations/index.html +35 -50
  90. package/coverage/lcov-report/automations/index.js.html +2 -2
  91. package/coverage/lcov-report/automations/steps/bash.js.html +1 -1
  92. package/coverage/lcov-report/automations/steps/createRow.js.html +1 -1
  93. package/coverage/lcov-report/automations/steps/delay.js.html +1 -1
  94. package/coverage/lcov-report/automations/steps/deleteRow.js.html +1 -1
  95. package/coverage/lcov-report/automations/steps/discord.js.html +3 -3
  96. package/coverage/lcov-report/automations/steps/executeQuery.js.html +1 -1
  97. package/coverage/lcov-report/automations/steps/executeScript.js.html +3 -3
  98. package/coverage/lcov-report/automations/steps/filter.js.html +1 -1
  99. package/coverage/lcov-report/automations/steps/index.html +14 -14
  100. package/coverage/lcov-report/automations/steps/integromat.js.html +1 -1
  101. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +3 -3
  102. package/coverage/lcov-report/automations/steps/queryRows.js.html +3 -3
  103. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +1 -1
  104. package/coverage/lcov-report/automations/steps/serverLog.js.html +1 -1
  105. package/coverage/lcov-report/automations/steps/slack.js.html +1 -1
  106. package/coverage/lcov-report/automations/steps/updateRow.js.html +1 -1
  107. package/coverage/lcov-report/automations/steps/utils.js.html +7 -7
  108. package/coverage/lcov-report/automations/steps/zapier.js.html +1 -1
  109. package/coverage/lcov-report/automations/triggerInfo/app.js.html +2 -2
  110. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +2 -2
  111. package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
  112. package/coverage/lcov-report/automations/triggerInfo/index.js.html +8 -8
  113. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +2 -2
  114. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +2 -2
  115. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +2 -2
  116. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +2 -2
  117. package/coverage/lcov-report/automations/triggers.js.html +22 -10
  118. package/coverage/lcov-report/automations/utils.js.html +42 -12
  119. package/coverage/lcov-report/constants/index.html +5 -5
  120. package/coverage/lcov-report/constants/index.js.html +87 -21
  121. package/coverage/lcov-report/constants/layouts.js.html +1 -1
  122. package/coverage/lcov-report/constants/screens.js.html +1 -1
  123. package/coverage/lcov-report/db/client.js.html +2 -2
  124. package/coverage/lcov-report/db/inMemoryView.js.html +2 -2
  125. package/coverage/lcov-report/db/index.html +2 -2
  126. package/coverage/lcov-report/db/index.js.html +1 -1
  127. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +6 -6
  128. package/coverage/lcov-report/db/linkedRows/index.html +10 -10
  129. package/coverage/lcov-report/db/linkedRows/index.js.html +5 -5
  130. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +6 -6
  131. package/coverage/lcov-report/db/newid.js.html +3 -3
  132. package/coverage/lcov-report/db/utils.js.html +57 -57
  133. package/coverage/lcov-report/events/AutomationEmitter.js.html +6 -6
  134. package/coverage/lcov-report/events/index.html +6 -6
  135. package/coverage/lcov-report/events/index.js.html +1 -1
  136. package/coverage/lcov-report/events/utils.js.html +5 -5
  137. package/coverage/lcov-report/index.html +106 -91
  138. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
  139. package/coverage/lcov-report/integrations/tests/index.html +1 -1
  140. package/coverage/lcov-report/middleware/appInfo.js.html +2 -2
  141. package/coverage/lcov-report/middleware/authorized.js.html +11 -8
  142. package/coverage/lcov-report/middleware/builder.js.html +16 -7
  143. package/coverage/lcov-report/middleware/currentapp.js.html +6 -6
  144. package/coverage/lcov-report/middleware/index.html +23 -23
  145. package/coverage/lcov-report/middleware/joi-validator.js.html +2 -2
  146. package/coverage/lcov-report/middleware/resourceId.js.html +18 -18
  147. package/coverage/lcov-report/middleware/selfhost.js.html +2 -2
  148. package/coverage/lcov-report/middleware/usageQuota.js.html +4 -4
  149. package/coverage/lcov-report/middleware/utils.js.html +1 -1
  150. package/coverage/lcov-report/{automations/thread.js.html → threads/automation.js.html} +90 -33
  151. package/coverage/lcov-report/threads/index.html +141 -0
  152. package/coverage/lcov-report/threads/index.js.html +278 -0
  153. package/coverage/lcov-report/threads/query.js.html +278 -0
  154. package/coverage/lcov-report/utilities/bcrypt.js.html +1 -1
  155. package/coverage/lcov-report/utilities/budibaseDir.js.html +1 -1
  156. package/coverage/lcov-report/utilities/centralPath.js.html +1 -1
  157. package/coverage/lcov-report/utilities/csvParser.js.html +144 -15
  158. package/coverage/lcov-report/utilities/global.js.html +26 -11
  159. package/coverage/lcov-report/utilities/index.html +48 -48
  160. package/coverage/lcov-report/utilities/index.js.html +47 -14
  161. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +30 -9
  162. package/coverage/lcov-report/utilities/queue/index.html +14 -14
  163. package/coverage/lcov-report/utilities/routing/index.html +1 -1
  164. package/coverage/lcov-report/utilities/routing/index.js.html +1 -1
  165. package/coverage/lcov-report/utilities/rowProcessor/index.html +4 -4
  166. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +2 -2
  167. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +3 -3
  168. package/coverage/lcov-report/utilities/scriptRunner.js.html +16 -7
  169. package/coverage/lcov-report/utilities/security.js.html +3 -3
  170. package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
  171. package/coverage/lcov-report/utilities/users.js.html +1 -1
  172. package/coverage/lcov-report/utilities/workerRequests.js.html +5 -5
  173. package/coverage/lcov.info +2495 -1737
  174. package/dist/api/controllers/application.js +15 -1
  175. package/dist/api/controllers/auth.js +3 -3
  176. package/dist/api/controllers/datasource.js +67 -16
  177. package/dist/api/controllers/deploy/index.js +2 -0
  178. package/dist/api/controllers/dev.js +4 -1
  179. package/dist/api/controllers/query.js +30 -58
  180. package/dist/api/controllers/row/ExternalRequest.js +78 -34
  181. package/dist/api/controllers/row/external.js +3 -1
  182. package/dist/api/controllers/row/utils.js +6 -12
  183. package/dist/api/controllers/table/external.js +249 -0
  184. package/dist/api/controllers/table/index.js +49 -123
  185. package/dist/api/controllers/table/internal.js +150 -0
  186. package/dist/api/controllers/table/utils.js +62 -28
  187. package/dist/api/controllers/user.js +123 -11
  188. package/dist/api/controllers/view/exporters.js +4 -0
  189. package/dist/api/controllers/view/index.js +14 -2
  190. package/dist/api/routes/query.js +1 -1
  191. package/dist/api/routes/table.js +7 -1
  192. package/dist/api/routes/user.js +2 -1
  193. package/dist/app.js +2 -11
  194. package/dist/automations/bullboard.js +37 -10
  195. package/dist/automations/triggers.js +7 -3
  196. package/dist/automations/utils.js +11 -2
  197. package/dist/constants/index.js +19 -0
  198. package/dist/definitions/datasource.js +5 -0
  199. package/dist/environment.js +13 -0
  200. package/dist/integrations/base/IntegrationBase.js +2 -0
  201. package/dist/integrations/base/datasourcePlus.js +2 -0
  202. package/dist/integrations/base/sql.js +353 -177
  203. package/dist/integrations/base/sqlTable.js +143 -0
  204. package/dist/integrations/base/utils.js +30 -0
  205. package/dist/integrations/index.js +6 -0
  206. package/dist/integrations/microsoftSqlServer.js +117 -9
  207. package/dist/integrations/mysql.js +16 -85
  208. package/dist/integrations/oracle.js +347 -0
  209. package/dist/integrations/postgres.js +35 -28
  210. package/dist/integrations/utils.js +71 -9
  211. package/dist/middleware/authorized.js +2 -1
  212. package/dist/middleware/builder.js +4 -1
  213. package/dist/package.json +12 -7
  214. package/dist/tests/utilities/TestConfiguration.js +2 -1
  215. package/dist/{automations/thread.js → threads/automation.js} +26 -8
  216. package/dist/threads/index.js +64 -0
  217. package/dist/threads/query.js +64 -0
  218. package/dist/tsconfig.tsbuildinfo +1 -1
  219. package/dist/utilities/csvParser.js +46 -5
  220. package/dist/utilities/global.js +6 -2
  221. package/dist/utilities/index.js +11 -0
  222. package/dist/utilities/queue/inMemoryQueue.js +8 -0
  223. package/dist/utilities/scriptRunner.js +4 -1
  224. package/package.json +13 -8
  225. package/scripts/dev/manage.js +1 -0
  226. package/scripts/integrations/mssql/data/Dockerfile +9 -0
  227. package/scripts/integrations/mssql/data/entrypoint.sh +24 -0
  228. package/scripts/integrations/mssql/data/setup.sql +54 -0
  229. package/scripts/integrations/mssql/docker-compose.yaml +12 -0
  230. package/scripts/integrations/mssql/reset.sh +3 -0
  231. package/scripts/integrations/oracle/docker-compose.yml +19 -0
  232. package/scripts/integrations/oracle/instantclient/linux/x86-64/basiclite-21.4.zip +0 -0
  233. package/scripts/integrations/oracle/instantclient/linux/x86-64/install.sh +23 -0
  234. package/scripts/integrations/oracle/oracle.md +90 -0
  235. package/scripts/integrations/postgres/docker-compose.yml +3 -3
  236. package/scripts/likeCypress.ts +33 -0
  237. package/src/api/controllers/application.js +18 -1
  238. package/src/api/controllers/auth.js +3 -0
  239. package/src/api/controllers/datasource.js +84 -16
  240. package/src/api/controllers/deploy/index.js +2 -0
  241. package/src/api/controllers/dev.js +4 -1
  242. package/src/api/controllers/query.js +29 -81
  243. package/src/api/controllers/row/ExternalRequest.ts +91 -36
  244. package/src/api/controllers/row/external.js +4 -1
  245. package/src/api/controllers/row/utils.js +8 -11
  246. package/src/api/controllers/table/external.js +307 -0
  247. package/src/api/controllers/table/index.js +47 -137
  248. package/src/api/controllers/table/internal.js +155 -0
  249. package/src/api/controllers/table/utils.js +74 -33
  250. package/src/api/controllers/user.js +132 -13
  251. package/src/api/controllers/view/exporters.js +5 -0
  252. package/src/api/controllers/view/index.js +15 -2
  253. package/src/api/routes/query.js +1 -0
  254. package/src/api/routes/table.js +11 -0
  255. package/src/api/routes/tests/datasource.spec.js +2 -2
  256. package/src/api/routes/tests/misc.spec.js +5 -1
  257. package/src/api/routes/tests/query.spec.js +0 -1
  258. package/src/api/routes/user.js +5 -0
  259. package/src/app.ts +2 -10
  260. package/src/automations/bullboard.js +28 -11
  261. package/src/automations/tests/automation.spec.js +3 -4
  262. package/src/automations/triggers.js +7 -3
  263. package/src/automations/utils.js +12 -2
  264. package/src/constants/index.js +22 -0
  265. package/src/definitions/common.ts +7 -1
  266. package/src/definitions/datasource.ts +10 -3
  267. package/src/environment.js +15 -0
  268. package/src/integrations/airtable.ts +2 -1
  269. package/src/integrations/arangodb.ts +2 -1
  270. package/src/integrations/base/IntegrationBase.ts +6 -0
  271. package/src/integrations/base/datasourcePlus.ts +9 -0
  272. package/src/integrations/base/sql.ts +377 -218
  273. package/src/integrations/base/sqlTable.ts +180 -0
  274. package/src/integrations/base/utils.ts +22 -0
  275. package/src/integrations/couchdb.ts +2 -1
  276. package/src/integrations/dynamodb.ts +2 -1
  277. package/src/integrations/elasticsearch.ts +2 -1
  278. package/src/integrations/index.ts +7 -0
  279. package/src/integrations/microsoftSqlServer.ts +145 -13
  280. package/src/integrations/mongodb.ts +2 -1
  281. package/src/integrations/mysql.ts +23 -95
  282. package/src/integrations/oracle.ts +458 -0
  283. package/src/integrations/postgres.ts +45 -35
  284. package/src/integrations/rest.ts +2 -1
  285. package/src/integrations/s3.ts +2 -1
  286. package/src/integrations/tests/microsoftSqlServer.spec.js +22 -15
  287. package/src/integrations/tests/oracle.spec.js +94 -0
  288. package/src/integrations/tests/postgres.spec.js +4 -0
  289. package/src/integrations/utils.ts +78 -8
  290. package/src/middleware/authorized.js +2 -1
  291. package/src/middleware/builder.js +4 -1
  292. package/src/tests/utilities/TestConfiguration.js +2 -1
  293. package/src/{automations/thread.js → threads/automation.js} +27 -8
  294. package/src/threads/index.js +66 -0
  295. package/src/threads/query.js +66 -0
  296. package/src/utilities/csvParser.js +48 -5
  297. package/src/utilities/global.js +7 -2
  298. package/src/utilities/index.js +11 -0
  299. package/src/utilities/queue/inMemoryQueue.js +7 -0
  300. package/src/utilities/scriptRunner.js +4 -1
  301. package/src/utilities/tests/__snapshots__/csvParser.spec.js.snap +0 -6
  302. package/src/utilities/tests/csvParser.spec.js +3 -0
  303. package/tsconfig.json +1 -1
  304. package/builder/assets/index.550fdba7.js +0 -201
  305. package/builder/assets/index.7469e1e4.css +0 -29
  306. package/builder/assets/vendor.278a305c.js +0 -9
  307. package/builder/assets/vendor.d75d5eb7.css +0 -1
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">77.49% </span>
26
+ <span class="strong">73.73% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>3129/4038</span>
28
+ <span class='fraction'>3281/4450</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">58.71% </span>
33
+ <span class="strong">54.51% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>907/1545</span>
35
+ <span class='fraction'>953/1748</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">74.87% </span>
40
+ <span class="strong">71.24% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>423/565</span>
42
+ <span class='fraction'>441/619</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">77.78% </span>
47
+ <span class="strong">73.93% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>3091/3974</span>
49
+ <span class='fraction'>3242/4385</span>
50
50
  </div>
51
51
 
52
52
 
@@ -89,92 +89,92 @@
89
89
 
90
90
  <tr>
91
91
  <td class="file medium" data-value="api/controllers"><a href="api/controllers/index.html">api/controllers</a></td>
92
- <td data-value="77.27" class="pic medium">
93
- <div class="chart"><div class="cover-fill" style="width: 77%"></div><div class="cover-empty" style="width: 23%"></div></div>
92
+ <td data-value="71.85" class="pic medium">
93
+ <div class="chart"><div class="cover-fill" style="width: 71%"></div><div class="cover-empty" style="width: 29%"></div></div>
94
94
  </td>
95
- <td data-value="77.27" class="pct medium">77.27%</td>
96
- <td data-value="1047" class="abs medium">809/1047</td>
97
- <td data-value="53.96" class="pct medium">53.96%</td>
98
- <td data-value="328" class="abs medium">177/328</td>
99
- <td data-value="77.4" class="pct medium">77.4%</td>
100
- <td data-value="146" class="abs medium">113/146</td>
101
- <td data-value="77.57" class="pct medium">77.57%</td>
102
- <td data-value="1030" class="abs medium">799/1030</td>
95
+ <td data-value="71.85" class="pct medium">71.85%</td>
96
+ <td data-value="1130" class="abs medium">812/1130</td>
97
+ <td data-value="46.59" class="pct low">46.59%</td>
98
+ <td data-value="367" class="abs low">171/367</td>
99
+ <td data-value="71.89" class="pct medium">71.89%</td>
100
+ <td data-value="153" class="abs medium">110/153</td>
101
+ <td data-value="72.04" class="pct medium">72.04%</td>
102
+ <td data-value="1116" class="abs medium">804/1116</td>
103
103
  </tr>
104
104
 
105
105
  <tr>
106
106
  <td class="file medium" data-value="api/controllers/row"><a href="api/controllers/row/index.html">api/controllers/row</a></td>
107
- <td data-value="52.76" class="pic medium">
107
+ <td data-value="52.6" class="pic medium">
108
108
  <div class="chart"><div class="cover-fill" style="width: 52%"></div><div class="cover-empty" style="width: 48%"></div></div>
109
109
  </td>
110
- <td data-value="52.76" class="pct medium">52.76%</td>
111
- <td data-value="597" class="abs medium">315/597</td>
112
- <td data-value="33.88" class="pct low">33.88%</td>
113
- <td data-value="245" class="abs low">83/245</td>
110
+ <td data-value="52.6" class="pct medium">52.6%</td>
111
+ <td data-value="595" class="abs medium">313/595</td>
112
+ <td data-value="33.46" class="pct low">33.46%</td>
113
+ <td data-value="248" class="abs low">83/248</td>
114
114
  <td data-value="43.18" class="pct low">43.18%</td>
115
115
  <td data-value="88" class="abs low">38/88</td>
116
- <td data-value="52.82" class="pct medium">52.82%</td>
117
- <td data-value="585" class="abs medium">309/585</td>
116
+ <td data-value="52.65" class="pct medium">52.65%</td>
117
+ <td data-value="583" class="abs medium">307/583</td>
118
118
  </tr>
119
119
 
120
120
  <tr>
121
121
  <td class="file medium" data-value="api/controllers/table"><a href="api/controllers/table/index.html">api/controllers/table</a></td>
122
- <td data-value="72.77" class="pic medium">
123
- <div class="chart"><div class="cover-fill" style="width: 72%"></div><div class="cover-empty" style="width: 28%"></div></div>
122
+ <td data-value="51.27" class="pic medium">
123
+ <div class="chart"><div class="cover-fill" style="width: 51%"></div><div class="cover-empty" style="width: 49%"></div></div>
124
124
  </td>
125
- <td data-value="72.77" class="pct medium">72.77%</td>
126
- <td data-value="235" class="abs medium">171/235</td>
127
- <td data-value="54.17" class="pct medium">54.17%</td>
128
- <td data-value="120" class="abs medium">65/120</td>
129
- <td data-value="69.7" class="pct medium">69.7%</td>
130
- <td data-value="33" class="abs medium">23/33</td>
131
- <td data-value="74.45" class="pct medium">74.45%</td>
132
- <td data-value="227" class="abs medium">169/227</td>
125
+ <td data-value="51.27" class="pct medium">51.27%</td>
126
+ <td data-value="433" class="abs medium">222/433</td>
127
+ <td data-value="37.33" class="pct low">37.33%</td>
128
+ <td data-value="225" class="abs low">84/225</td>
129
+ <td data-value="48.21" class="pct low">48.21%</td>
130
+ <td data-value="56" class="abs low">27/56</td>
131
+ <td data-value="51.76" class="pct medium">51.76%</td>
132
+ <td data-value="425" class="abs medium">220/425</td>
133
133
  </tr>
134
134
 
135
135
  <tr>
136
136
  <td class="file medium" data-value="api/controllers/view"><a href="api/controllers/view/index.html">api/controllers/view</a></td>
137
- <td data-value="73.14" class="pic medium">
138
- <div class="chart"><div class="cover-fill" style="width: 73%"></div><div class="cover-empty" style="width: 27%"></div></div>
137
+ <td data-value="74.31" class="pic medium">
138
+ <div class="chart"><div class="cover-fill" style="width: 74%"></div><div class="cover-empty" style="width: 26%"></div></div>
139
139
  </td>
140
- <td data-value="73.14" class="pct medium">73.14%</td>
141
- <td data-value="175" class="abs medium">128/175</td>
142
- <td data-value="62.34" class="pct medium">62.34%</td>
143
- <td data-value="77" class="abs medium">48/77</td>
140
+ <td data-value="74.31" class="pct medium">74.31%</td>
141
+ <td data-value="183" class="abs medium">136/183</td>
142
+ <td data-value="63.85" class="pct medium">63.85%</td>
143
+ <td data-value="83" class="abs medium">53/83</td>
144
144
  <td data-value="80.95" class="pct high">80.95%</td>
145
145
  <td data-value="21" class="abs high">17/21</td>
146
- <td data-value="73.41" class="pct medium">73.41%</td>
147
- <td data-value="173" class="abs medium">127/173</td>
146
+ <td data-value="74.58" class="pct medium">74.58%</td>
147
+ <td data-value="181" class="abs medium">135/181</td>
148
148
  </tr>
149
149
 
150
150
  <tr>
151
151
  <td class="file high" data-value="api/routes"><a href="api/routes/index.html">api/routes</a></td>
152
- <td data-value="97.42" class="pic high">
152
+ <td data-value="97.41" class="pic high">
153
153
  <div class="chart"><div class="cover-fill" style="width: 97%"></div><div class="cover-empty" style="width: 3%"></div></div>
154
154
  </td>
155
- <td data-value="97.42" class="pct high">97.42%</td>
155
+ <td data-value="97.41" class="pct high">97.41%</td>
156
156
  <td data-value="271" class="abs high">264/271</td>
157
- <td data-value="63.64" class="pct medium">63.64%</td>
157
+ <td data-value="63.63" class="pct medium">63.63%</td>
158
158
  <td data-value="11" class="abs medium">7/11</td>
159
159
  <td data-value="100" class="pct high">100%</td>
160
160
  <td data-value="12" class="abs high">12/12</td>
161
- <td data-value="97.42" class="pct high">97.42%</td>
161
+ <td data-value="97.41" class="pct high">97.41%</td>
162
162
  <td data-value="271" class="abs high">264/271</td>
163
163
  </tr>
164
164
 
165
165
  <tr>
166
166
  <td class="file high" data-value="automations"><a href="automations/index.html">automations</a></td>
167
- <td data-value="86.05" class="pic high">
168
- <div class="chart"><div class="cover-fill" style="width: 86%"></div><div class="cover-empty" style="width: 14%"></div></div>
167
+ <td data-value="84.15" class="pic high">
168
+ <div class="chart"><div class="cover-fill" style="width: 84%"></div><div class="cover-empty" style="width: 16%"></div></div>
169
169
  </td>
170
- <td data-value="86.05" class="pct high">86.05%</td>
171
- <td data-value="258" class="abs high">222/258</td>
172
- <td data-value="76.99" class="pct medium">76.99%</td>
173
- <td data-value="113" class="abs medium">87/113</td>
174
- <td data-value="93.1" class="pct high">93.1%</td>
175
- <td data-value="29" class="abs high">27/29</td>
176
- <td data-value="86.05" class="pct high">86.05%</td>
177
- <td data-value="258" class="abs high">222/258</td>
170
+ <td data-value="84.15" class="pct high">84.15%</td>
171
+ <td data-value="202" class="abs high">170/202</td>
172
+ <td data-value="79.78" class="pct medium">79.78%</td>
173
+ <td data-value="94" class="abs medium">75/94</td>
174
+ <td data-value="80" class="pct high">80%</td>
175
+ <td data-value="25" class="abs high">20/25</td>
176
+ <td data-value="84.15" class="pct high">84.15%</td>
177
+ <td data-value="202" class="abs high">170/202</td>
178
178
  </tr>
179
179
 
180
180
  <tr>
@@ -184,7 +184,7 @@
184
184
  </td>
185
185
  <td data-value="74.27" class="pct medium">74.27%</td>
186
186
  <td data-value="241" class="abs medium">179/241</td>
187
- <td data-value="70.79" class="pct medium">70.79%</td>
187
+ <td data-value="70.78" class="pct medium">70.78%</td>
188
188
  <td data-value="89" class="abs medium">63/89</td>
189
189
  <td data-value="55" class="pct medium">55%</td>
190
190
  <td data-value="20" class="abs medium">11/20</td>
@@ -213,13 +213,13 @@
213
213
  <div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
214
214
  </td>
215
215
  <td data-value="100" class="pct high">100%</td>
216
- <td data-value="26" class="abs high">26/26</td>
216
+ <td data-value="29" class="abs high">29/29</td>
217
217
  <td data-value="100" class="pct high">100%</td>
218
218
  <td data-value="0" class="abs high">0/0</td>
219
219
  <td data-value="100" class="pct high">100%</td>
220
220
  <td data-value="1" class="abs high">1/1</td>
221
221
  <td data-value="100" class="pct high">100%</td>
222
- <td data-value="25" class="abs high">25/25</td>
222
+ <td data-value="28" class="abs high">28/28</td>
223
223
  </tr>
224
224
 
225
225
  <tr>
@@ -244,11 +244,11 @@
244
244
  </td>
245
245
  <td data-value="96.46" class="pct high">96.46%</td>
246
246
  <td data-value="311" class="abs high">300/311</td>
247
- <td data-value="86.03" class="pct high">86.03%</td>
247
+ <td data-value="86.02" class="pct high">86.02%</td>
248
248
  <td data-value="136" class="abs high">117/136</td>
249
249
  <td data-value="95" class="pct high">95%</td>
250
250
  <td data-value="60" class="abs high">57/60</td>
251
- <td data-value="96.67" class="pct high">96.67%</td>
251
+ <td data-value="96.66" class="pct high">96.66%</td>
252
252
  <td data-value="300" class="abs high">290/300</td>
253
253
  </tr>
254
254
 
@@ -259,7 +259,7 @@
259
259
  </td>
260
260
  <td data-value="89.47" class="pct high">89.47%</td>
261
261
  <td data-value="38" class="abs high">34/38</td>
262
- <td data-value="55.56" class="pct medium">55.56%</td>
262
+ <td data-value="55.55" class="pct medium">55.55%</td>
263
263
  <td data-value="18" class="abs medium">10/18</td>
264
264
  <td data-value="87.5" class="pct high">87.5%</td>
265
265
  <td data-value="8" class="abs high">7/8</td>
@@ -284,47 +284,62 @@
284
284
 
285
285
  <tr>
286
286
  <td class="file high" data-value="middleware"><a href="middleware/index.html">middleware</a></td>
287
- <td data-value="90.13" class="pic high">
287
+ <td data-value="90.26" class="pic high">
288
288
  <div class="chart"><div class="cover-fill" style="width: 90%"></div><div class="cover-empty" style="width: 10%"></div></div>
289
289
  </td>
290
- <td data-value="90.13" class="pct high">90.13%</td>
291
- <td data-value="223" class="abs high">201/223</td>
292
- <td data-value="79.33" class="pct medium">79.33%</td>
293
- <td data-value="150" class="abs medium">119/150</td>
290
+ <td data-value="90.26" class="pct high">90.26%</td>
291
+ <td data-value="226" class="abs high">204/226</td>
292
+ <td data-value="79.6" class="pct medium">79.6%</td>
293
+ <td data-value="152" class="abs medium">121/152</td>
294
294
  <td data-value="100" class="pct high">100%</td>
295
295
  <td data-value="29" class="abs high">29/29</td>
296
- <td data-value="90.05" class="pct high">90.05%</td>
297
- <td data-value="221" class="abs high">199/221</td>
296
+ <td data-value="90.17" class="pct high">90.17%</td>
297
+ <td data-value="224" class="abs high">202/224</td>
298
+ </tr>
299
+
300
+ <tr>
301
+ <td class="file high" data-value="threads"><a href="threads/index.html">threads</a></td>
302
+ <td data-value="80.14" class="pic high">
303
+ <div class="chart"><div class="cover-fill" style="width: 80%"></div><div class="cover-empty" style="width: 20%"></div></div>
304
+ </td>
305
+ <td data-value="80.14" class="pct high">80.14%</td>
306
+ <td data-value="136" class="abs high">109/136</td>
307
+ <td data-value="56.6" class="pct medium">56.6%</td>
308
+ <td data-value="53" class="abs medium">30/53</td>
309
+ <td data-value="90.9" class="pct high">90.9%</td>
310
+ <td data-value="22" class="abs high">20/22</td>
311
+ <td data-value="80.59" class="pct high">80.59%</td>
312
+ <td data-value="134" class="abs high">108/134</td>
298
313
  </tr>
299
314
 
300
315
  <tr>
301
316
  <td class="file medium" data-value="utilities"><a href="utilities/index.html">utilities</a></td>
302
- <td data-value="71.82" class="pic medium">
303
- <div class="chart"><div class="cover-fill" style="width: 71%"></div><div class="cover-empty" style="width: 29%"></div></div>
317
+ <td data-value="72.34" class="pic medium">
318
+ <div class="chart"><div class="cover-fill" style="width: 72%"></div><div class="cover-empty" style="width: 28%"></div></div>
304
319
  </td>
305
- <td data-value="71.82" class="pct medium">71.82%</td>
306
- <td data-value="291" class="abs medium">209/291</td>
307
- <td data-value="54.21" class="pct medium">54.21%</td>
308
- <td data-value="107" class="abs medium">58/107</td>
309
- <td data-value="66.67" class="pct medium">66.67%</td>
310
- <td data-value="57" class="abs medium">38/57</td>
311
- <td data-value="71.68" class="pct medium">71.68%</td>
312
- <td data-value="286" class="abs medium">205/286</td>
320
+ <td data-value="72.34" class="pct medium">72.34%</td>
321
+ <td data-value="329" class="abs medium">238/329</td>
322
+ <td data-value="54.54" class="pct medium">54.54%</td>
323
+ <td data-value="121" class="abs medium">66/121</td>
324
+ <td data-value="67.74" class="pct medium">67.74%</td>
325
+ <td data-value="62" class="abs medium">42/62</td>
326
+ <td data-value="72.04" class="pct medium">72.04%</td>
327
+ <td data-value="322" class="abs medium">232/322</td>
313
328
  </tr>
314
329
 
315
330
  <tr>
316
331
  <td class="file high" data-value="utilities/queue"><a href="utilities/queue/index.html">utilities/queue</a></td>
317
- <td data-value="90" class="pic high">
318
- <div class="chart"><div class="cover-fill" style="width: 90%"></div><div class="cover-empty" style="width: 10%"></div></div>
332
+ <td data-value="85.71" class="pic high">
333
+ <div class="chart"><div class="cover-fill" style="width: 85%"></div><div class="cover-empty" style="width: 15%"></div></div>
319
334
  </td>
320
- <td data-value="90" class="pct high">90%</td>
321
- <td data-value="20" class="abs high">18/20</td>
335
+ <td data-value="85.71" class="pct high">85.71%</td>
336
+ <td data-value="21" class="abs high">18/21</td>
322
337
  <td data-value="57.14" class="pct medium">57.14%</td>
323
338
  <td data-value="7" class="abs medium">4/7</td>
339
+ <td data-value="75" class="pct medium">75%</td>
340
+ <td data-value="8" class="abs medium">6/8</td>
324
341
  <td data-value="85.71" class="pct high">85.71%</td>
325
- <td data-value="7" class="abs high">6/7</td>
326
- <td data-value="90" class="pct high">90%</td>
327
- <td data-value="20" class="abs high">18/20</td>
342
+ <td data-value="21" class="abs high">18/21</td>
328
343
  </tr>
329
344
 
330
345
  <tr>
@@ -344,12 +359,12 @@
344
359
 
345
360
  <tr>
346
361
  <td class="file medium" data-value="utilities/rowProcessor"><a href="utilities/rowProcessor/index.html">utilities/rowProcessor</a></td>
347
- <td data-value="77.32" class="pic medium">
362
+ <td data-value="77.31" class="pic medium">
348
363
  <div class="chart"><div class="cover-fill" style="width: 77%"></div><div class="cover-empty" style="width: 23%"></div></div>
349
364
  </td>
350
- <td data-value="77.32" class="pct medium">77.32%</td>
365
+ <td data-value="77.31" class="pct medium">77.31%</td>
351
366
  <td data-value="97" class="abs medium">75/97</td>
352
- <td data-value="60.53" class="pct medium">60.53%</td>
367
+ <td data-value="60.52" class="pct medium">60.52%</td>
353
368
  <td data-value="76" class="abs medium">46/76</td>
354
369
  <td data-value="83.33" class="pct high">83.33%</td>
355
370
  <td data-value="12" class="abs high">10/12</td>
@@ -365,7 +380,7 @@
365
380
  <div class='footer quiet pad2 space-top1 center small'>
366
381
  Code coverage generated by
367
382
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
368
- at Thu Nov 18 2021 07:07:10 GMT+0000 (Coordinated Universal Time)
383
+ at Thu Nov 25 2021 16:48:05 GMT+0000 (Coordinated Universal Time)
369
384
  </div>
370
385
  </div>
371
386
  <script src="prettify.js"></script>
@@ -64,7 +64,7 @@
64
64
  <div class='footer quiet pad2 space-top1 center small'>
65
65
  Code coverage generated by
66
66
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
67
- at Thu Nov 18 2021 07:07:10 GMT+0000 (Coordinated Universal Time)
67
+ at Thu Nov 25 2021 16:48:05 GMT+0000 (Coordinated Universal Time)
68
68
  </div>
69
69
  </div>
70
70
  <script src="../../prettify.js"></script>
@@ -95,7 +95,7 @@
95
95
  <div class='footer quiet pad2 space-top1 center small'>
96
96
  Code coverage generated by
97
97
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
98
- at Thu Nov 18 2021 07:07:10 GMT+0000 (Coordinated Universal Time)
98
+ at Thu Nov 25 2021 16:48:05 GMT+0000 (Coordinated Universal Time)
99
99
  </div>
100
100
  </div>
101
101
  <script src="../../prettify.js"></script>
@@ -30,7 +30,7 @@
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">54.55% </span>
33
+ <span class="strong">54.54% </span>
34
34
  <span class="quiet">Branches</span>
35
35
  <span class='fraction'>6/11</span>
36
36
  </div>
@@ -121,7 +121,7 @@ exports.middleware =
121
121
  <div class='footer quiet pad2 space-top1 center small'>
122
122
  Code coverage generated by
123
123
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
124
- at Thu Nov 18 2021 07:07:10 GMT+0000 (Coordinated Universal Time)
124
+ at Thu Nov 25 2021 16:48:05 GMT+0000 (Coordinated Universal Time)
125
125
  </div>
126
126
  </div>
127
127
  <script src="../prettify.js"></script>
@@ -30,9 +30,9 @@
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">88.46% </span>
33
+ <span class="strong">89.28% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>23/26</span>
35
+ <span class='fraction'>25/28</span>
36
36
  </div>
37
37
 
38
38
 
@@ -126,7 +126,8 @@
126
126
  <a name='L67'></a><a href='#L67'>67</a>
127
127
  <a name='L68'></a><a href='#L68'>68</a>
128
128
  <a name='L69'></a><a href='#L69'>69</a>
129
- <a name='L70'></a><a href='#L70'>70</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
129
+ <a name='L70'></a><a href='#L70'>70</a>
130
+ <a name='L71'></a><a href='#L71'>71</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
130
131
  <span class="cline-any cline-neutral">&nbsp;</span>
131
132
  <span class="cline-any cline-neutral">&nbsp;</span>
132
133
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -144,7 +145,8 @@
144
145
  <span class="cline-any cline-neutral">&nbsp;</span>
145
146
  <span class="cline-any cline-yes">24x</span>
146
147
  <span class="cline-any cline-neutral">&nbsp;</span>
147
- <span class="cline-any cline-yes">2200x</span>
148
+ <span class="cline-any cline-yes">2246x</span>
149
+ <span class="cline-any cline-neutral">&nbsp;</span>
148
150
  <span class="cline-any cline-neutral">&nbsp;</span>
149
151
  <span class="cline-any cline-yes">150x</span>
150
152
  <span class="cline-any cline-yes">1x</span>
@@ -215,7 +217,8 @@ module.exports =
215
217
  (permType, permLevel = null) =&gt;
216
218
  async (ctx, next) =&gt; {
217
219
  // webhooks don't need authentication, each webhook unique
218
- if (isWebhookEndpoint(ctx)) {
220
+ // also internal requests (between services) don't need authorized
221
+ if (isWebhookEndpoint(ctx) || ctx.internal) {
219
222
  return next()
220
223
  }
221
224
  &nbsp;
@@ -253,12 +256,12 @@ module.exports =
253
256
  role =&gt; possibleRoleIds.indexOf(role._id) !== -1
254
257
  )
255
258
  return found ? next() : <span class="branch-1 cbranch-no" title="branch not covered" >ctx.throw(403, permError)</span>
256
- } else <span class="missing-if-branch" title="else path not taken" >E</span>if (!doesHaveBasePermission(permType, permLevel, hierarchy)) {
259
+ } else if (!doesHaveBasePermission(permType, permLevel, hierarchy)) {
257
260
  ctx.throw(403, permError)
258
261
  }
259
262
  &nbsp;
260
263
  // if they are not authed, then anything using the authorized middleware will fail
261
- <span class="missing-if-branch" title="else path not taken" >E</span>if (!isAuthed) {
264
+ if (!isAuthed) {
262
265
  ctx.throw(403, "Session not authenticated")
263
266
  }
264
267
  &nbsp;
@@ -271,7 +274,7 @@ module.exports =
271
274
  <div class='footer quiet pad2 space-top1 center small'>
272
275
  Code coverage generated by
273
276
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
274
- at Thu Nov 18 2021 07:07:10 GMT+0000 (Coordinated Universal Time)
277
+ at Thu Nov 25 2021 16:48:05 GMT+0000 (Coordinated Universal Time)
275
278
  </div>
276
279
  </div>
277
280
  <script src="../prettify.js"></script>
@@ -23,9 +23,9 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">87.88% </span>
26
+ <span class="strong">88.88% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>29/33</span>
28
+ <span class='fraction'>32/36</span>
29
29
  </div>
30
30
 
31
31
 
@@ -44,9 +44,9 @@
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">87.88% </span>
47
+ <span class="strong">88.88% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>29/33</span>
49
+ <span class='fraction'>32/36</span>
50
50
  </div>
51
51
 
52
52
 
@@ -132,7 +132,10 @@
132
132
  <a name='L73'></a><a href='#L73'>73</a>
133
133
  <a name='L74'></a><a href='#L74'>74</a>
134
134
  <a name='L75'></a><a href='#L75'>75</a>
135
- <a name='L76'></a><a href='#L76'>76</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">24x</span>
135
+ <a name='L76'></a><a href='#L76'>76</a>
136
+ <a name='L77'></a><a href='#L77'>77</a>
137
+ <a name='L78'></a><a href='#L78'>78</a>
138
+ <a name='L79'></a><a href='#L79'>79</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">24x</span>
136
139
  <span class="cline-any cline-neutral">&nbsp;</span>
137
140
  <span class="cline-any cline-neutral">&nbsp;</span>
138
141
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -142,6 +145,7 @@
142
145
  <span class="cline-any cline-yes">24x</span>
143
146
  <span class="cline-any cline-yes">24x</span>
144
147
  <span class="cline-any cline-yes">24x</span>
148
+ <span class="cline-any cline-yes">24x</span>
145
149
  <span class="cline-any cline-neutral">&nbsp;</span>
146
150
  <span class="cline-any cline-yes">24x</span>
147
151
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -185,6 +189,8 @@
185
189
  <span class="cline-any cline-yes">1x</span>
186
190
  <span class="cline-any cline-yes">1x</span>
187
191
  <span class="cline-any cline-yes">1x</span>
192
+ <span class="cline-any cline-yes">1x</span>
193
+ <span class="cline-any cline-yes">1x</span>
188
194
  <span class="cline-any cline-neutral">&nbsp;</span>
189
195
  <span class="cline-any cline-yes">1x</span>
190
196
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -217,6 +223,7 @@ const {
217
223
  const CouchDB = require("../db")
218
224
  const { DocumentTypes } = require("../db/utils")
219
225
  const { PermissionTypes } = require("@budibase/auth/permissions")
226
+ const { app: appCache } = require("@budibase/auth/cache")
220
227
  &nbsp;
221
228
  const DEBOUNCE_TIME_SEC = 30
222
229
  &nbsp;
@@ -259,7 +266,9 @@ async function updateAppUpdatedAt(ctx) {
259
266
  const db = new CouchDB(appId)
260
267
  const metadata = await db.get(DocumentTypes.APP_METADATA)
261
268
  metadata.updatedAt = new Date().toISOString()
262
- await db.put(metadata)
269
+ const response = await db.put(metadata)
270
+ metadata._rev = response.rev
271
+ await appCache.invalidateAppMetadata(appId, metadata)
263
272
  // set a new debounce record with a short TTL
264
273
  await setDebounce(appId, DEBOUNCE_TIME_SEC)
265
274
  }
@@ -289,7 +298,7 @@ module.exports = async (ctx, permType) =&gt; {
289
298
  <div class='footer quiet pad2 space-top1 center small'>
290
299
  Code coverage generated by
291
300
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
292
- at Thu Nov 18 2021 07:07:10 GMT+0000 (Coordinated Universal Time)
301
+ at Thu Nov 25 2021 16:48:05 GMT+0000 (Coordinated Universal Time)
293
302
  </div>
294
303
  </div>
295
304
  <script src="../prettify.js"></script>
@@ -23,14 +23,14 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">83.02% </span>
26
+ <span class="strong">83.01% </span>
27
27
  <span class="quiet">Statements</span>
28
28
  <span class='fraction'>44/53</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">78.05% </span>
33
+ <span class="strong">78.04% </span>
34
34
  <span class="quiet">Branches</span>
35
35
  <span class='fraction'>32/41</span>
36
36
  </div>
@@ -44,7 +44,7 @@
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">83.02% </span>
47
+ <span class="strong">83.01% </span>
48
48
  <span class="quiet">Lines</span>
49
49
  <span class='fraction'>44/53</span>
50
50
  </div>
@@ -324,7 +324,7 @@ module.exports = async (ctx, next) =&gt; {
324
324
  if (!ctx.user) {
325
325
  // not logged in, try to set a cookie for public apps
326
326
  appId = requestAppId
327
- } else <span class="missing-if-branch" title="else path not taken" >E</span>if (requestAppId != null) {
327
+ } else if (requestAppId != null) {
328
328
  // Different App ID means cookie needs reset, or if the same public user has logged in
329
329
  const globalUser = await getCachedSelf(ctx, requestAppId)
330
330
  appId = requestAppId
@@ -355,7 +355,7 @@ module.exports = async (ctx, next) =&gt; {
355
355
  }
356
356
  &nbsp;
357
357
  ctx.appId = appId
358
- <span class="missing-if-branch" title="else path not taken" >E</span>if (roleId) {
358
+ if (roleId) {
359
359
  ctx.roleId = roleId
360
360
  const userId = ctx.user ? generateUserMetadataID(ctx.user._id) : null
361
361
  ctx.user = {
@@ -385,7 +385,7 @@ module.exports = async (ctx, next) =&gt; {
385
385
  <div class='footer quiet pad2 space-top1 center small'>
386
386
  Code coverage generated by
387
387
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
388
- at Thu Nov 18 2021 07:07:10 GMT+0000 (Coordinated Universal Time)
388
+ at Thu Nov 25 2021 16:48:05 GMT+0000 (Coordinated Universal Time)
389
389
  </div>
390
390
  </div>
391
391
  <script src="../prettify.js"></script>