@budibase/server 0.9.186 → 0.9.190-alpha.0

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 (309) hide show
  1. package/Dockerfile +7 -1
  2. package/LICENSE +1 -1
  3. package/__mocks__/mssql.ts +1 -1
  4. package/__mocks__/oracledb.ts +31 -0
  5. package/__mocks__/pg.ts +3 -0
  6. package/builder/assets/bb-space-man.5be51a45.svg +290 -0
  7. package/builder/assets/index.43f4c913.js +1316 -0
  8. package/builder/assets/index.7d405e74.css +1 -0
  9. package/builder/assets/oracle.66592424.png +0 -0
  10. package/builder/assets/vendor.470042a4.js +152 -0
  11. package/builder/assets/vendor.5e1fe644.css +1 -0
  12. package/builder/index.html +4 -4
  13. package/coverage/clover.xml +1520 -1087
  14. package/coverage/coverage-final.json +93 -89
  15. package/coverage/lcov-report/api/controllers/analytics.js.html +2 -2
  16. package/coverage/lcov-report/api/controllers/apikeys.js.html +2 -2
  17. package/coverage/lcov-report/api/controllers/application.js.html +64 -13
  18. package/coverage/lcov-report/api/controllers/auth.js.html +19 -10
  19. package/coverage/lcov-report/api/controllers/automation.js.html +3 -3
  20. package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
  21. package/coverage/lcov-report/api/controllers/cloud.js.html +1 -1
  22. package/coverage/lcov-report/api/controllers/component.js.html +4 -4
  23. package/coverage/lcov-report/api/controllers/datasource.js.html +232 -28
  24. package/coverage/lcov-report/api/controllers/dev.js.html +16 -7
  25. package/coverage/lcov-report/api/controllers/hosting.js.html +10 -10
  26. package/coverage/lcov-report/api/controllers/index.html +91 -91
  27. package/coverage/lcov-report/api/controllers/integration.js.html +1 -1
  28. package/coverage/lcov-report/api/controllers/layout.js.html +3 -3
  29. package/coverage/lcov-report/api/controllers/metadata.js.html +3 -3
  30. package/coverage/lcov-report/api/controllers/permission.js.html +3 -3
  31. package/coverage/lcov-report/api/controllers/query.js.html +53 -209
  32. package/coverage/lcov-report/api/controllers/role.js.html +9 -9
  33. package/coverage/lcov-report/api/controllers/routing.js.html +3 -3
  34. package/coverage/lcov-report/api/controllers/row/external.js.html +17 -8
  35. package/coverage/lcov-report/api/controllers/row/index.html +26 -26
  36. package/coverage/lcov-report/api/controllers/row/index.js.html +2 -2
  37. package/coverage/lcov-report/api/controllers/row/internal.js.html +9 -9
  38. package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +2 -2
  39. package/coverage/lcov-report/api/controllers/row/utils.js.html +21 -30
  40. package/coverage/lcov-report/api/controllers/screen.js.html +2 -2
  41. package/coverage/lcov-report/api/controllers/script.js.html +3 -3
  42. package/coverage/lcov-report/api/controllers/table/external.js.html +1001 -0
  43. package/coverage/lcov-report/api/controllers/table/index.html +56 -26
  44. package/coverage/lcov-report/api/controllers/table/index.js.html +80 -350
  45. package/coverage/lcov-report/api/controllers/table/internal.js.html +545 -0
  46. package/coverage/lcov-report/api/controllers/table/utils.js.html +175 -52
  47. package/coverage/lcov-report/api/controllers/templates.js.html +4 -4
  48. package/coverage/lcov-report/api/controllers/user.js.html +390 -33
  49. package/coverage/lcov-report/api/controllers/view/exporters.js.html +19 -4
  50. package/coverage/lcov-report/api/controllers/view/index.html +22 -22
  51. package/coverage/lcov-report/api/controllers/view/index.js.html +52 -13
  52. package/coverage/lcov-report/api/controllers/view/utils.js.html +11 -11
  53. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +3 -3
  54. package/coverage/lcov-report/api/controllers/webhook.js.html +4 -4
  55. package/coverage/lcov-report/api/index.html +1 -1
  56. package/coverage/lcov-report/api/index.js.html +1 -1
  57. package/coverage/lcov-report/api/routes/analytics.js.html +1 -1
  58. package/coverage/lcov-report/api/routes/apikeys.js.html +1 -1
  59. package/coverage/lcov-report/api/routes/application.js.html +1 -1
  60. package/coverage/lcov-report/api/routes/auth.js.html +1 -1
  61. package/coverage/lcov-report/api/routes/automation.js.html +1 -1
  62. package/coverage/lcov-report/api/routes/backup.js.html +1 -1
  63. package/coverage/lcov-report/api/routes/cloud.js.html +1 -1
  64. package/coverage/lcov-report/api/routes/component.js.html +1 -1
  65. package/coverage/lcov-report/api/routes/datasource.js.html +1 -1
  66. package/coverage/lcov-report/api/routes/deploy.js.html +1 -1
  67. package/coverage/lcov-report/api/routes/dev.js.html +2 -2
  68. package/coverage/lcov-report/api/routes/hosting.js.html +1 -1
  69. package/coverage/lcov-report/api/routes/index.html +4 -4
  70. package/coverage/lcov-report/api/routes/index.js.html +1 -1
  71. package/coverage/lcov-report/api/routes/integration.js.html +1 -1
  72. package/coverage/lcov-report/api/routes/layout.js.html +1 -1
  73. package/coverage/lcov-report/api/routes/metadata.js.html +1 -1
  74. package/coverage/lcov-report/api/routes/permission.js.html +1 -1
  75. package/coverage/lcov-report/api/routes/query.js.html +5 -2
  76. package/coverage/lcov-report/api/routes/role.js.html +1 -1
  77. package/coverage/lcov-report/api/routes/routing.js.html +1 -1
  78. package/coverage/lcov-report/api/routes/row.js.html +1 -1
  79. package/coverage/lcov-report/api/routes/screen.js.html +1 -1
  80. package/coverage/lcov-report/api/routes/script.js.html +1 -1
  81. package/coverage/lcov-report/api/routes/static.js.html +2 -2
  82. package/coverage/lcov-report/api/routes/table.js.html +35 -2
  83. package/coverage/lcov-report/api/routes/templates.js.html +1 -1
  84. package/coverage/lcov-report/api/routes/user.js.html +17 -2
  85. package/coverage/lcov-report/api/routes/view.js.html +1 -1
  86. package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
  87. package/coverage/lcov-report/automations/actions.js.html +2 -2
  88. package/coverage/lcov-report/automations/automationUtils.js.html +4 -4
  89. package/coverage/lcov-report/automations/bullboard.js.html +71 -20
  90. package/coverage/lcov-report/automations/index.html +35 -50
  91. package/coverage/lcov-report/automations/index.js.html +2 -2
  92. package/coverage/lcov-report/automations/steps/bash.js.html +1 -1
  93. package/coverage/lcov-report/automations/steps/createRow.js.html +1 -1
  94. package/coverage/lcov-report/automations/steps/delay.js.html +1 -1
  95. package/coverage/lcov-report/automations/steps/deleteRow.js.html +1 -1
  96. package/coverage/lcov-report/automations/steps/discord.js.html +3 -3
  97. package/coverage/lcov-report/automations/steps/executeQuery.js.html +1 -1
  98. package/coverage/lcov-report/automations/steps/executeScript.js.html +3 -3
  99. package/coverage/lcov-report/automations/steps/filter.js.html +1 -1
  100. package/coverage/lcov-report/automations/steps/index.html +14 -14
  101. package/coverage/lcov-report/automations/steps/integromat.js.html +1 -1
  102. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +3 -3
  103. package/coverage/lcov-report/automations/steps/queryRows.js.html +3 -3
  104. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +1 -1
  105. package/coverage/lcov-report/automations/steps/serverLog.js.html +1 -1
  106. package/coverage/lcov-report/automations/steps/slack.js.html +1 -1
  107. package/coverage/lcov-report/automations/steps/updateRow.js.html +1 -1
  108. package/coverage/lcov-report/automations/steps/utils.js.html +7 -7
  109. package/coverage/lcov-report/automations/steps/zapier.js.html +1 -1
  110. package/coverage/lcov-report/automations/triggerInfo/app.js.html +2 -2
  111. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +2 -2
  112. package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
  113. package/coverage/lcov-report/automations/triggerInfo/index.js.html +8 -8
  114. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +2 -2
  115. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +2 -2
  116. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +2 -2
  117. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +2 -2
  118. package/coverage/lcov-report/automations/triggers.js.html +22 -10
  119. package/coverage/lcov-report/automations/utils.js.html +42 -12
  120. package/coverage/lcov-report/constants/index.html +5 -5
  121. package/coverage/lcov-report/constants/index.js.html +87 -21
  122. package/coverage/lcov-report/constants/layouts.js.html +1 -1
  123. package/coverage/lcov-report/constants/screens.js.html +1 -1
  124. package/coverage/lcov-report/db/client.js.html +2 -2
  125. package/coverage/lcov-report/db/inMemoryView.js.html +2 -2
  126. package/coverage/lcov-report/db/index.html +2 -2
  127. package/coverage/lcov-report/db/index.js.html +1 -1
  128. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +6 -6
  129. package/coverage/lcov-report/db/linkedRows/index.html +10 -10
  130. package/coverage/lcov-report/db/linkedRows/index.js.html +5 -5
  131. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +6 -6
  132. package/coverage/lcov-report/db/newid.js.html +3 -3
  133. package/coverage/lcov-report/db/utils.js.html +57 -57
  134. package/coverage/lcov-report/events/AutomationEmitter.js.html +6 -6
  135. package/coverage/lcov-report/events/index.html +6 -6
  136. package/coverage/lcov-report/events/index.js.html +1 -1
  137. package/coverage/lcov-report/events/utils.js.html +5 -5
  138. package/coverage/lcov-report/index.html +108 -93
  139. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
  140. package/coverage/lcov-report/integrations/tests/index.html +1 -1
  141. package/coverage/lcov-report/middleware/appInfo.js.html +2 -2
  142. package/coverage/lcov-report/middleware/authorized.js.html +58 -34
  143. package/coverage/lcov-report/middleware/builder.js.html +16 -7
  144. package/coverage/lcov-report/middleware/currentapp.js.html +6 -6
  145. package/coverage/lcov-report/middleware/index.html +27 -27
  146. package/coverage/lcov-report/middleware/joi-validator.js.html +2 -2
  147. package/coverage/lcov-report/middleware/resourceId.js.html +18 -18
  148. package/coverage/lcov-report/middleware/selfhost.js.html +2 -2
  149. package/coverage/lcov-report/middleware/usageQuota.js.html +4 -4
  150. package/coverage/lcov-report/middleware/utils.js.html +1 -1
  151. package/coverage/lcov-report/{automations/thread.js.html → threads/automation.js.html} +90 -33
  152. package/coverage/lcov-report/threads/index.html +141 -0
  153. package/coverage/lcov-report/threads/index.js.html +278 -0
  154. package/coverage/lcov-report/threads/query.js.html +278 -0
  155. package/coverage/lcov-report/utilities/bcrypt.js.html +1 -1
  156. package/coverage/lcov-report/utilities/budibaseDir.js.html +1 -1
  157. package/coverage/lcov-report/utilities/centralPath.js.html +1 -1
  158. package/coverage/lcov-report/utilities/csvParser.js.html +144 -15
  159. package/coverage/lcov-report/utilities/global.js.html +26 -11
  160. package/coverage/lcov-report/utilities/index.html +48 -48
  161. package/coverage/lcov-report/utilities/index.js.html +47 -14
  162. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +30 -9
  163. package/coverage/lcov-report/utilities/queue/index.html +14 -14
  164. package/coverage/lcov-report/utilities/routing/index.html +1 -1
  165. package/coverage/lcov-report/utilities/routing/index.js.html +1 -1
  166. package/coverage/lcov-report/utilities/rowProcessor/index.html +4 -4
  167. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +2 -2
  168. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +3 -3
  169. package/coverage/lcov-report/utilities/scriptRunner.js.html +16 -7
  170. package/coverage/lcov-report/utilities/security.js.html +3 -3
  171. package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
  172. package/coverage/lcov-report/utilities/users.js.html +1 -1
  173. package/coverage/lcov-report/utilities/workerRequests.js.html +5 -5
  174. package/coverage/lcov.info +2558 -1787
  175. package/dist/api/controllers/application.js +15 -1
  176. package/dist/api/controllers/auth.js +3 -3
  177. package/dist/api/controllers/datasource.js +67 -16
  178. package/dist/api/controllers/deploy/index.js +2 -0
  179. package/dist/api/controllers/dev.js +4 -1
  180. package/dist/api/controllers/query.js +30 -58
  181. package/dist/api/controllers/row/ExternalRequest.js +37 -14
  182. package/dist/api/controllers/row/external.js +3 -1
  183. package/dist/api/controllers/row/utils.js +6 -12
  184. package/dist/api/controllers/table/external.js +249 -0
  185. package/dist/api/controllers/table/index.js +49 -123
  186. package/dist/api/controllers/table/internal.js +150 -0
  187. package/dist/api/controllers/table/utils.js +62 -28
  188. package/dist/api/controllers/user.js +123 -11
  189. package/dist/api/controllers/view/exporters.js +4 -0
  190. package/dist/api/controllers/view/index.js +14 -2
  191. package/dist/api/routes/query.js +1 -1
  192. package/dist/api/routes/table.js +7 -1
  193. package/dist/api/routes/user.js +2 -1
  194. package/dist/app.js +2 -11
  195. package/dist/automations/bullboard.js +37 -10
  196. package/dist/automations/triggers.js +7 -3
  197. package/dist/automations/utils.js +11 -2
  198. package/dist/constants/index.js +19 -0
  199. package/dist/definitions/datasource.js +5 -0
  200. package/dist/environment.js +13 -0
  201. package/dist/integrations/base/IntegrationBase.js +2 -0
  202. package/dist/integrations/base/datasourcePlus.js +2 -0
  203. package/dist/integrations/base/sql.js +338 -180
  204. package/dist/integrations/base/sqlTable.js +143 -0
  205. package/dist/integrations/base/utils.js +30 -0
  206. package/dist/integrations/index.js +6 -0
  207. package/dist/integrations/microsoftSqlServer.js +117 -9
  208. package/dist/integrations/mysql.js +14 -84
  209. package/dist/integrations/oracle.js +345 -0
  210. package/dist/integrations/postgres.js +35 -28
  211. package/dist/integrations/utils.js +71 -9
  212. package/dist/middleware/authorized.js +22 -11
  213. package/dist/middleware/builder.js +4 -1
  214. package/dist/package.json +13 -8
  215. package/dist/tests/utilities/TestConfiguration.js +2 -1
  216. package/dist/{automations/thread.js → threads/automation.js} +26 -8
  217. package/dist/threads/index.js +64 -0
  218. package/dist/threads/query.js +64 -0
  219. package/dist/tsconfig.tsbuildinfo +1 -1
  220. package/dist/utilities/csvParser.js +46 -5
  221. package/dist/utilities/global.js +6 -2
  222. package/dist/utilities/index.js +11 -0
  223. package/dist/utilities/queue/inMemoryQueue.js +8 -0
  224. package/dist/utilities/scriptRunner.js +4 -1
  225. package/package.json +14 -9
  226. package/scripts/dev/manage.js +1 -0
  227. package/scripts/integrations/mssql/data/Dockerfile +9 -0
  228. package/scripts/integrations/mssql/data/entrypoint.sh +24 -0
  229. package/scripts/integrations/mssql/data/setup.sql +54 -0
  230. package/scripts/integrations/mssql/docker-compose.yaml +12 -0
  231. package/scripts/integrations/mssql/reset.sh +3 -0
  232. package/scripts/integrations/oracle/docker-compose.yml +19 -0
  233. package/scripts/integrations/oracle/instantclient/linux/x86-64/basiclite-21.4.zip +0 -0
  234. package/scripts/integrations/oracle/instantclient/linux/x86-64/install.sh +23 -0
  235. package/scripts/integrations/oracle/oracle.md +90 -0
  236. package/scripts/integrations/postgres/docker-compose.yml +3 -3
  237. package/scripts/likeCypress.ts +33 -0
  238. package/src/api/controllers/application.js +18 -1
  239. package/src/api/controllers/auth.js +3 -0
  240. package/src/api/controllers/datasource.js +84 -16
  241. package/src/api/controllers/deploy/index.js +2 -0
  242. package/src/api/controllers/dev.js +4 -1
  243. package/src/api/controllers/query.js +29 -81
  244. package/src/api/controllers/row/ExternalRequest.ts +47 -16
  245. package/src/api/controllers/row/external.js +4 -1
  246. package/src/api/controllers/row/utils.js +8 -11
  247. package/src/api/controllers/table/external.js +307 -0
  248. package/src/api/controllers/table/index.js +47 -137
  249. package/src/api/controllers/table/internal.js +155 -0
  250. package/src/api/controllers/table/utils.js +74 -33
  251. package/src/api/controllers/user.js +132 -13
  252. package/src/api/controllers/view/exporters.js +5 -0
  253. package/src/api/controllers/view/index.js +15 -2
  254. package/src/api/routes/query.js +1 -0
  255. package/src/api/routes/table.js +11 -0
  256. package/src/api/routes/tests/datasource.spec.js +2 -2
  257. package/src/api/routes/tests/misc.spec.js +5 -1
  258. package/src/api/routes/tests/query.spec.js +0 -1
  259. package/src/api/routes/user.js +5 -0
  260. package/src/app.ts +2 -10
  261. package/src/automations/bullboard.js +28 -11
  262. package/src/automations/tests/automation.spec.js +3 -4
  263. package/src/automations/triggers.js +7 -3
  264. package/src/automations/utils.js +12 -2
  265. package/src/constants/index.js +22 -0
  266. package/src/definitions/common.ts +7 -1
  267. package/src/definitions/datasource.ts +10 -3
  268. package/src/environment.js +15 -0
  269. package/src/integrations/airtable.ts +2 -1
  270. package/src/integrations/arangodb.ts +2 -1
  271. package/src/integrations/base/IntegrationBase.ts +6 -0
  272. package/src/integrations/base/datasourcePlus.ts +9 -0
  273. package/src/integrations/base/sql.ts +362 -222
  274. package/src/integrations/base/sqlTable.ts +180 -0
  275. package/src/integrations/base/utils.ts +22 -0
  276. package/src/integrations/couchdb.ts +2 -1
  277. package/src/integrations/dynamodb.ts +2 -1
  278. package/src/integrations/elasticsearch.ts +2 -1
  279. package/src/integrations/index.ts +7 -0
  280. package/src/integrations/microsoftSqlServer.ts +145 -13
  281. package/src/integrations/mongodb.ts +2 -1
  282. package/src/integrations/mysql.ts +20 -94
  283. package/src/integrations/oracle.ts +445 -0
  284. package/src/integrations/postgres.ts +45 -35
  285. package/src/integrations/rest.ts +2 -1
  286. package/src/integrations/s3.ts +2 -1
  287. package/src/integrations/tests/microsoftSqlServer.spec.js +22 -15
  288. package/src/integrations/tests/oracle.spec.js +94 -0
  289. package/src/integrations/tests/postgres.spec.js +4 -0
  290. package/src/integrations/utils.ts +74 -8
  291. package/src/middleware/authorized.js +26 -18
  292. package/src/middleware/builder.js +4 -1
  293. package/src/middleware/tests/authorized.spec.js +2 -0
  294. package/src/tests/utilities/TestConfiguration.js +2 -1
  295. package/src/{automations/thread.js → threads/automation.js} +27 -8
  296. package/src/threads/index.js +66 -0
  297. package/src/threads/query.js +66 -0
  298. package/src/utilities/csvParser.js +48 -5
  299. package/src/utilities/global.js +7 -2
  300. package/src/utilities/index.js +11 -0
  301. package/src/utilities/queue/inMemoryQueue.js +7 -0
  302. package/src/utilities/scriptRunner.js +4 -1
  303. package/src/utilities/tests/__snapshots__/csvParser.spec.js.snap +0 -6
  304. package/src/utilities/tests/csvParser.spec.js +3 -0
  305. package/tsconfig.json +1 -1
  306. package/builder/assets/index.10556cc1.js +0 -201
  307. package/builder/assets/index.7469e1e4.css +0 -29
  308. package/builder/assets/vendor.278a305c.js +0 -9
  309. 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.45% </span>
26
+ <span class="strong">73.73% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>3122/4031</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.66% </span>
33
+ <span class="strong">54.51% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>904/1541</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.82% </span>
40
+ <span class="strong">71.24% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>422/564</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.74% </span>
47
+ <span class="strong">73.93% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>3084/3967</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="89.81" class="pic high">
288
- <div class="chart"><div class="cover-fill" style="width: 89%"></div><div class="cover-empty" style="width: 11%"></div></div>
287
+ <td data-value="90.26" class="pic high">
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="89.81" class="pct high">89.81%</td>
291
- <td data-value="216" class="abs high">194/216</td>
292
- <td data-value="79.45" class="pct medium">79.45%</td>
293
- <td data-value="146" class="abs medium">116/146</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
- <td data-value="28" class="abs high">28/28</td>
296
- <td data-value="89.72" class="pct high">89.72%</td>
297
- <td data-value="214" class="abs high">192/214</td>
295
+ <td data-value="29" class="abs high">29/29</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 Fri Nov 12 2021 13:13:12 GMT+0000 (Coordinated Universal Time)
383
+ at Thu Nov 25 2021 12:28:23 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 Fri Nov 12 2021 13:13:12 GMT+0000 (Coordinated Universal Time)
67
+ at Thu Nov 25 2021 12:28:23 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 Fri Nov 12 2021 13:13:12 GMT+0000 (Coordinated Universal Time)
98
+ at Thu Nov 25 2021 12:28:23 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 Fri Nov 12 2021 13:13:12 GMT+0000 (Coordinated Universal Time)
124
+ at Thu Nov 25 2021 12:28:23 GMT+0000 (Coordinated Universal Time)
125
125
  </div>
126
126
  </div>
127
127
  <script src="../prettify.js"></script>
@@ -25,28 +25,28 @@
25
25
  <div class='fl pad1y space-right2'>
26
26
  <span class="strong">100% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>27/27</span>
28
+ <span class='fraction'>34/34</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">90.91% </span>
33
+ <span class="strong">89.28% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>20/22</span>
35
+ <span class='fraction'>25/28</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
40
  <span class="strong">100% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>3/3</span>
42
+ <span class='fraction'>4/4</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
47
  <span class="strong">100% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>27/27</span>
49
+ <span class='fraction'>34/34</span>
50
50
  </div>
51
51
 
52
52
 
@@ -119,10 +119,21 @@
119
119
  <a name='L60'></a><a href='#L60'>60</a>
120
120
  <a name='L61'></a><a href='#L61'>61</a>
121
121
  <a name='L62'></a><a href='#L62'>62</a>
122
- <a name='L63'></a><a href='#L63'>63</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">24x</span>
122
+ <a name='L63'></a><a href='#L63'>63</a>
123
+ <a name='L64'></a><a href='#L64'>64</a>
124
+ <a name='L65'></a><a href='#L65'>65</a>
125
+ <a name='L66'></a><a href='#L66'>66</a>
126
+ <a name='L67'></a><a href='#L67'>67</a>
127
+ <a name='L68'></a><a href='#L68'>68</a>
128
+ <a name='L69'></a><a href='#L69'>69</a>
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>
123
131
  <span class="cline-any cline-neutral">&nbsp;</span>
124
132
  <span class="cline-any cline-neutral">&nbsp;</span>
125
133
  <span class="cline-any cline-neutral">&nbsp;</span>
134
+ <span class="cline-any cline-yes">24x</span>
135
+ <span class="cline-any cline-neutral">&nbsp;</span>
136
+ <span class="cline-any cline-neutral">&nbsp;</span>
126
137
  <span class="cline-any cline-neutral">&nbsp;</span>
127
138
  <span class="cline-any cline-yes">24x</span>
128
139
  <span class="cline-any cline-yes">24x</span>
@@ -134,7 +145,8 @@
134
145
  <span class="cline-any cline-neutral">&nbsp;</span>
135
146
  <span class="cline-any cline-yes">24x</span>
136
147
  <span class="cline-any cline-neutral">&nbsp;</span>
137
- <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>
138
150
  <span class="cline-any cline-neutral">&nbsp;</span>
139
151
  <span class="cline-any cline-yes">150x</span>
140
152
  <span class="cline-any cline-yes">1x</span>
@@ -149,12 +161,6 @@
149
161
  <span class="cline-any cline-yes">148x</span>
150
162
  <span class="cline-any cline-neutral">&nbsp;</span>
151
163
  <span class="cline-any cline-yes">148x</span>
152
- <span class="cline-any cline-yes">148x</span>
153
- <span class="cline-any cline-neutral">&nbsp;</span>
154
- <span class="cline-any cline-neutral">&nbsp;</span>
155
- <span class="cline-any cline-neutral">&nbsp;</span>
156
- <span class="cline-any cline-neutral">&nbsp;</span>
157
- <span class="cline-any cline-neutral">&nbsp;</span>
158
164
  <span class="cline-any cline-neutral">&nbsp;</span>
159
165
  <span class="cline-any cline-yes">148x</span>
160
166
  <span class="cline-any cline-yes">148x</span>
@@ -164,27 +170,40 @@
164
170
  <span class="cline-any cline-yes">29x</span>
165
171
  <span class="cline-any cline-neutral">&nbsp;</span>
166
172
  <span class="cline-any cline-neutral">&nbsp;</span>
173
+ <span class="cline-any cline-neutral">&nbsp;</span>
174
+ <span class="cline-any cline-yes">7x</span>
167
175
  <span class="cline-any cline-yes">7x</span>
168
176
  <span class="cline-any cline-neutral">&nbsp;</span>
169
177
  <span class="cline-any cline-neutral">&nbsp;</span>
178
+ <span class="cline-any cline-yes">7x</span>
179
+ <span class="cline-any cline-yes">7x</span>
180
+ <span class="cline-any cline-yes">7x</span>
181
+ <span class="cline-any cline-yes">3x</span>
182
+ <span class="cline-any cline-neutral">&nbsp;</span>
170
183
  <span class="cline-any cline-neutral">&nbsp;</span>
184
+ <span class="cline-any cline-yes">7x</span>
185
+ <span class="cline-any cline-yes">1x</span>
171
186
  <span class="cline-any cline-yes">1x</span>
172
187
  <span class="cline-any cline-neutral">&nbsp;</span>
173
- <span class="cline-any cline-neutral">&nbsp;</span>
188
+ <span class="cline-any cline-yes">1x</span>
174
189
  <span class="cline-any cline-yes">6x</span>
175
190
  <span class="cline-any cline-yes">6x</span>
176
191
  <span class="cline-any cline-neutral">&nbsp;</span>
177
192
  <span class="cline-any cline-neutral">&nbsp;</span>
193
+ <span class="cline-any cline-neutral">&nbsp;</span>
178
194
  <span class="cline-any cline-yes">4x</span>
179
195
  <span class="cline-any cline-yes">4x</span>
180
196
  <span class="cline-any cline-neutral">&nbsp;</span>
181
197
  <span class="cline-any cline-neutral">&nbsp;</span>
182
198
  <span class="cline-any cline-yes">4x</span>
183
199
  <span class="cline-any cline-neutral">&nbsp;</span>
184
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">const { getUserPermissions } = require("@budibase/auth/roles")
200
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">const {
201
+ getUserRoleHierarchy,
202
+ getRequiredResourceRole,
203
+ BUILTIN_ROLE_IDS,
204
+ } = require("@budibase/auth/roles")
185
205
  const {
186
206
  PermissionTypes,
187
- doesHaveResourcePermission,
188
207
  doesHaveBasePermission,
189
208
  } = require("@budibase/auth/permissions")
190
209
  const builderMiddleware = require("./builder")
@@ -198,7 +217,8 @@ module.exports =
198
217
  (permType, permLevel = null) =&gt;
199
218
  async (ctx, next) =&gt; {
200
219
  // webhooks don't need authentication, each webhook unique
201
- if (isWebhookEndpoint(ctx)) {
220
+ // also internal requests (between services) don't need authorized
221
+ if (isWebhookEndpoint(ctx) || ctx.internal) {
202
222
  return next()
203
223
  }
204
224
  &nbsp;
@@ -211,13 +231,7 @@ module.exports =
211
231
  await builderMiddleware(ctx, permType)
212
232
  &nbsp;
213
233
  const isAuthed = ctx.isAuthenticated
214
- const { basePermissions, permissions } = await getUserPermissions(
215
- ctx.appId,
216
- ctx.roleId
217
- )
218
- &nbsp;
219
234
  // builders for now have permission to do anything
220
- // TODO: in future should consider separating permissions with an require("@budibase/auth").isClient check
221
235
  let isBuilder = ctx.user &amp;&amp; ctx.user.builder &amp;&amp; ctx.user.builder.global
222
236
  const isBuilderApi = permType === PermissionTypes.BUILDER
223
237
  if (isBuilder) {
@@ -226,19 +240,29 @@ module.exports =
226
240
  return ctx.throw(403, "Not Authorized")
227
241
  }
228
242
  &nbsp;
229
- if (
230
- hasResource(ctx) &amp;&amp;
231
- doesHaveResourcePermission(permissions, permLevel, ctx)
232
- ) {
233
- return next()
243
+ // need to check this first, in-case public access, don't check authed until last
244
+ const roleId = ctx.roleId || BUILTIN_ROLE_IDS.PUBLIC
245
+ const hierarchy = await getUserRoleHierarchy(ctx.appId, roleId, {
246
+ idOnly: false,
247
+ })
248
+ const permError = "User does not have permission"
249
+ let possibleRoleIds = []
250
+ if (hasResource(ctx)) {
251
+ possibleRoleIds = await getRequiredResourceRole(ctx.appId, permLevel, ctx)
234
252
  }
235
- &nbsp;
236
- <span class="missing-if-branch" title="else path not taken" >E</span>if (!isAuthed) {
237
- ctx.throw(403, "Session not authenticated")
253
+ // check if we found a role, if not fallback to base permissions
254
+ if (possibleRoleIds.length &gt; 0) {
255
+ const found = hierarchy.find(
256
+ role =&gt; possibleRoleIds.indexOf(role._id) !== -1
257
+ )
258
+ return found ? next() : <span class="branch-1 cbranch-no" title="branch not covered" >ctx.throw(403, permError)</span>
259
+ } else if (!doesHaveBasePermission(permType, permLevel, hierarchy)) {
260
+ ctx.throw(403, permError)
238
261
  }
239
262
  &nbsp;
240
- <span class="missing-if-branch" title="else path not taken" >E</span>if (!doesHaveBasePermission(permType, permLevel, basePermissions)) {
241
- ctx.throw(403, "User does not have permission")
263
+ // if they are not authed, then anything using the authorized middleware will fail
264
+ if (!isAuthed) {
265
+ ctx.throw(403, "Session not authenticated")
242
266
  }
243
267
  &nbsp;
244
268
  return next()
@@ -250,7 +274,7 @@ module.exports =
250
274
  <div class='footer quiet pad2 space-top1 center small'>
251
275
  Code coverage generated by
252
276
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
253
- at Fri Nov 12 2021 13:13:12 GMT+0000 (Coordinated Universal Time)
277
+ at Thu Nov 25 2021 12:28:23 GMT+0000 (Coordinated Universal Time)
254
278
  </div>
255
279
  </div>
256
280
  <script src="../prettify.js"></script>