@budibase/worker 2.2.12-alpha.5 → 2.2.12-alpha.50

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 (147) hide show
  1. package/coverage/clover.xml +498 -526
  2. package/coverage/coverage-final.json +83 -81
  3. package/coverage/lcov-report/index.html +127 -127
  4. package/coverage/lcov-report/src/api/controllers/global/auth.ts.html +33 -33
  5. package/coverage/lcov-report/src/api/controllers/global/configs.ts.html +20 -20
  6. package/coverage/lcov-report/src/api/controllers/global/email.ts.html +1 -1
  7. package/coverage/lcov-report/src/api/controllers/global/events.ts.html +136 -0
  8. package/coverage/lcov-report/src/api/controllers/global/index.html +67 -52
  9. package/coverage/lcov-report/src/api/controllers/global/license.ts.html +10 -10
  10. package/coverage/lcov-report/src/api/controllers/global/roles.ts.html +5 -5
  11. package/coverage/lcov-report/src/api/controllers/global/self.ts.html +10 -10
  12. package/coverage/lcov-report/src/api/controllers/global/templates.ts.html +5 -5
  13. package/coverage/lcov-report/src/api/controllers/global/users.ts.html +59 -20
  14. package/coverage/lcov-report/src/api/controllers/global/workspaces.ts.html +4 -4
  15. package/coverage/lcov-report/src/api/controllers/system/accounts.ts.html +2 -2
  16. package/coverage/lcov-report/src/api/controllers/system/environment.ts.html +2 -2
  17. package/coverage/lcov-report/src/api/controllers/system/index.html +11 -11
  18. package/coverage/lcov-report/src/api/controllers/system/migrations.ts.html +2 -2
  19. package/coverage/lcov-report/src/api/controllers/system/restore.ts.html +1 -1
  20. package/coverage/lcov-report/src/api/controllers/system/status.ts.html +2 -2
  21. package/coverage/lcov-report/src/api/controllers/system/tenants.ts.html +3 -3
  22. package/coverage/lcov-report/src/api/index.html +1 -1
  23. package/coverage/lcov-report/src/api/index.ts.html +19 -7
  24. package/coverage/lcov-report/src/api/routes/global/auth.ts.html +4 -4
  25. package/coverage/lcov-report/src/api/routes/global/configs.ts.html +10 -10
  26. package/coverage/lcov-report/src/api/routes/global/email.ts.html +4 -4
  27. package/coverage/lcov-report/src/api/routes/global/events.ts.html +109 -0
  28. package/coverage/lcov-report/src/api/routes/global/index.html +37 -22
  29. package/coverage/lcov-report/src/api/routes/global/license.ts.html +3 -3
  30. package/coverage/lcov-report/src/api/routes/global/roles.ts.html +4 -4
  31. package/coverage/lcov-report/src/api/routes/global/self.ts.html +4 -4
  32. package/coverage/lcov-report/src/api/routes/global/templates.ts.html +4 -4
  33. package/coverage/lcov-report/src/api/routes/global/users.ts.html +48 -6
  34. package/coverage/lcov-report/src/api/routes/global/workspaces.ts.html +4 -4
  35. package/coverage/lcov-report/src/api/routes/index.html +7 -7
  36. package/coverage/lcov-report/src/api/routes/index.ts.html +11 -5
  37. package/coverage/lcov-report/src/api/routes/system/accounts.ts.html +4 -4
  38. package/coverage/lcov-report/src/api/routes/system/environment.ts.html +4 -4
  39. package/coverage/lcov-report/src/api/routes/system/index.html +15 -15
  40. package/coverage/lcov-report/src/api/routes/system/migrations.ts.html +4 -4
  41. package/coverage/lcov-report/src/api/routes/system/restore.ts.html +4 -4
  42. package/coverage/lcov-report/src/api/routes/system/status.ts.html +4 -4
  43. package/coverage/lcov-report/src/api/routes/system/tenants.ts.html +4 -4
  44. package/coverage/lcov-report/src/api/routes/validation/index.html +3 -3
  45. package/coverage/lcov-report/src/api/routes/validation/index.ts.html +1 -1
  46. package/coverage/lcov-report/src/api/routes/validation/users.ts.html +3 -3
  47. package/coverage/lcov-report/src/constants/index.html +15 -15
  48. package/coverage/lcov-report/src/constants/index.ts.html +43 -43
  49. package/coverage/lcov-report/src/constants/templates/index.html +15 -15
  50. package/coverage/lcov-report/src/constants/templates/index.ts.html +14 -14
  51. package/coverage/lcov-report/src/db/index.html +3 -3
  52. package/coverage/lcov-report/src/db/index.ts.html +4 -4
  53. package/coverage/lcov-report/src/environment.ts.html +19 -19
  54. package/coverage/lcov-report/src/index.html +27 -27
  55. package/coverage/lcov-report/src/index.ts.html +19 -16
  56. package/coverage/lcov-report/src/middleware/cloudRestricted.ts.html +2 -2
  57. package/coverage/lcov-report/src/middleware/index.html +1 -1
  58. package/coverage/lcov-report/src/migrations/functions/globalInfoSyncUsers.ts.html +7 -7
  59. package/coverage/lcov-report/src/migrations/functions/index.html +11 -11
  60. package/coverage/lcov-report/src/migrations/index.html +15 -15
  61. package/coverage/lcov-report/src/migrations/index.ts.html +12 -12
  62. package/coverage/lcov-report/src/sdk/accounts/accounts.ts.html +9 -9
  63. package/coverage/lcov-report/src/sdk/accounts/index.html +13 -13
  64. package/coverage/lcov-report/src/sdk/accounts/index.ts.html +1 -1
  65. package/coverage/lcov-report/src/sdk/index.html +5 -5
  66. package/coverage/lcov-report/src/sdk/index.ts.html +4 -4
  67. package/coverage/lcov-report/src/sdk/users/events.ts.html +16 -16
  68. package/coverage/lcov-report/src/sdk/users/index.html +29 -29
  69. package/coverage/lcov-report/src/sdk/users/index.ts.html +1 -1
  70. package/coverage/lcov-report/src/sdk/users/users.ts.html +49 -43
  71. package/coverage/lcov-report/src/tests/TestConfiguration.ts.html +26 -26
  72. package/coverage/lcov-report/src/tests/api/accounts.ts.html +2 -2
  73. package/coverage/lcov-report/src/tests/api/auth.ts.html +2 -2
  74. package/coverage/lcov-report/src/tests/api/base.ts.html +3 -3
  75. package/coverage/lcov-report/src/tests/api/configs.ts.html +2 -2
  76. package/coverage/lcov-report/src/tests/api/email.ts.html +2 -2
  77. package/coverage/lcov-report/src/tests/api/environment.ts.html +2 -2
  78. package/coverage/lcov-report/src/tests/api/groups.ts.html +2 -2
  79. package/coverage/lcov-report/src/tests/api/index.html +42 -42
  80. package/coverage/lcov-report/src/tests/api/index.ts.html +2 -2
  81. package/coverage/lcov-report/src/tests/api/license.ts.html +7 -7
  82. package/coverage/lcov-report/src/tests/api/migrations.ts.html +3 -3
  83. package/coverage/lcov-report/src/tests/api/restore.ts.html +3 -3
  84. package/coverage/lcov-report/src/tests/api/roles.ts.html +7 -7
  85. package/coverage/lcov-report/src/tests/api/self.ts.html +2 -2
  86. package/coverage/lcov-report/src/tests/api/status.ts.html +2 -2
  87. package/coverage/lcov-report/src/tests/api/templates.ts.html +10 -10
  88. package/coverage/lcov-report/src/tests/api/tenants.ts.html +6 -6
  89. package/coverage/lcov-report/src/tests/api/users.ts.html +13 -10
  90. package/coverage/lcov-report/src/tests/controllers.ts.html +11 -11
  91. package/coverage/lcov-report/src/tests/index.html +34 -34
  92. package/coverage/lcov-report/src/tests/index.ts.html +15 -51
  93. package/coverage/lcov-report/src/tests/mocks/email.ts.html +2 -2
  94. package/coverage/lcov-report/src/tests/mocks/index.html +5 -5
  95. package/coverage/lcov-report/src/tests/mocks/index.ts.html +5 -5
  96. package/coverage/lcov-report/src/tests/structures/configs.ts.html +7 -7
  97. package/coverage/lcov-report/src/tests/structures/groups.ts.html +2 -2
  98. package/coverage/lcov-report/src/tests/structures/index.html +15 -15
  99. package/coverage/lcov-report/src/tests/structures/index.ts.html +10 -10
  100. package/coverage/lcov-report/src/tests/structures/users.ts.html +8 -8
  101. package/coverage/lcov-report/src/utilities/appService.ts.html +38 -11
  102. package/coverage/lcov-report/src/utilities/email.ts.html +17 -17
  103. package/coverage/lcov-report/src/utilities/fileSystem.ts.html +2 -2
  104. package/coverage/lcov-report/src/utilities/index.html +27 -27
  105. package/coverage/lcov-report/src/utilities/index.ts.html +2 -2
  106. package/coverage/lcov-report/src/utilities/redis.ts.html +14 -14
  107. package/coverage/lcov-report/src/utilities/templates.ts.html +3 -3
  108. package/coverage/lcov-report/src/utilities/users.ts.html +2 -2
  109. package/coverage/lcov.info +1658 -1644
  110. package/jest.config.ts +5 -2
  111. package/package.json +8 -6
  112. package/src/api/controllers/global/auth.ts +1 -1
  113. package/src/api/controllers/global/events.ts +17 -0
  114. package/src/api/controllers/global/users.ts +13 -0
  115. package/src/api/index.ts +4 -0
  116. package/src/api/routes/global/auth.ts +1 -1
  117. package/src/api/routes/global/configs.ts +7 -7
  118. package/src/api/routes/global/email.ts +1 -1
  119. package/src/api/routes/global/events.ts +8 -0
  120. package/src/api/routes/global/roles.ts +1 -1
  121. package/src/api/routes/global/self.ts +1 -1
  122. package/src/api/routes/global/templates.ts +1 -1
  123. package/src/api/routes/global/tests/templates.spec.ts +0 -8
  124. package/src/api/routes/global/users.ts +15 -1
  125. package/src/api/routes/global/workspaces.ts +1 -1
  126. package/src/api/routes/index.ts +2 -0
  127. package/src/api/routes/system/accounts.ts +1 -1
  128. package/src/api/routes/system/environment.ts +1 -1
  129. package/src/api/routes/system/migrations.ts +1 -1
  130. package/src/api/routes/system/restore.ts +1 -1
  131. package/src/api/routes/system/status.ts +1 -1
  132. package/src/api/routes/system/tenants.ts +1 -1
  133. package/src/api/routes/system/tests/environment.spec.ts +1 -1
  134. package/src/db/index.ts +1 -1
  135. package/src/environment.ts +1 -1
  136. package/src/index.ts +4 -3
  137. package/src/middleware/cloudRestricted.ts +1 -1
  138. package/src/sdk/users/users.ts +5 -3
  139. package/src/tests/TestConfiguration.ts +2 -2
  140. package/src/tests/api/users.ts +2 -1
  141. package/src/tests/index.ts +6 -18
  142. package/src/tests/jestEnv.ts +11 -0
  143. package/src/tests/jestSetup.ts +0 -14
  144. package/src/tests/mocks/index.ts +1 -1
  145. package/src/tests/structures/index.ts +4 -4
  146. package/src/utilities/appService.ts +12 -3
  147. package/tsconfig.json +2 -1
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">76.29% </span>
26
+ <span class="strong">73.8% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>103/135</span>
28
+ <span class='fraction'>93/126</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">57.5% </span>
33
+ <span class="strong">53.12% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>23/40</span>
35
+ <span class='fraction'>17/32</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">75.75% </span>
40
+ <span class="strong">83.87% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>25/33</span>
42
+ <span class='fraction'>26/31</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">73.83% </span>
47
+ <span class="strong">70.79% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>79/107</span>
49
+ <span class='fraction'>80/113</span>
50
50
  </div>
51
51
 
52
52
 
@@ -301,7 +301,20 @@
301
301
  <a name='L236'></a><a href='#L236'>236</a>
302
302
  <a name='L237'></a><a href='#L237'>237</a>
303
303
  <a name='L238'></a><a href='#L238'>238</a>
304
- <a name='L239'></a><a href='#L239'>239</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">18x</span>
304
+ <a name='L239'></a><a href='#L239'>239</a>
305
+ <a name='L240'></a><a href='#L240'>240</a>
306
+ <a name='L241'></a><a href='#L241'>241</a>
307
+ <a name='L242'></a><a href='#L242'>242</a>
308
+ <a name='L243'></a><a href='#L243'>243</a>
309
+ <a name='L244'></a><a href='#L244'>244</a>
310
+ <a name='L245'></a><a href='#L245'>245</a>
311
+ <a name='L246'></a><a href='#L246'>246</a>
312
+ <a name='L247'></a><a href='#L247'>247</a>
313
+ <a name='L248'></a><a href='#L248'>248</a>
314
+ <a name='L249'></a><a href='#L249'>249</a>
315
+ <a name='L250'></a><a href='#L250'>250</a>
316
+ <a name='L251'></a><a href='#L251'>251</a>
317
+ <a name='L252'></a><a href='#L252'>252</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">18x</span>
305
318
  <span class="cline-any cline-yes">18x</span>
306
319
  <span class="cline-any cline-yes">18x</span>
307
320
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -314,7 +327,6 @@
314
327
  <span class="cline-any cline-neutral">&nbsp;</span>
315
328
  <span class="cline-any cline-neutral">&nbsp;</span>
316
329
  <span class="cline-any cline-neutral">&nbsp;</span>
317
- <span class="cline-any cline-yes">18x</span>
318
330
  <span class="cline-any cline-neutral">&nbsp;</span>
319
331
  <span class="cline-any cline-neutral">&nbsp;</span>
320
332
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -322,10 +334,11 @@
322
334
  <span class="cline-any cline-neutral">&nbsp;</span>
323
335
  <span class="cline-any cline-neutral">&nbsp;</span>
324
336
  <span class="cline-any cline-yes">18x</span>
337
+ <span class="cline-any cline-yes">18x</span>
325
338
  <span class="cline-any cline-neutral">&nbsp;</span>
326
339
  <span class="cline-any cline-yes">18x</span>
327
340
  <span class="cline-any cline-neutral">&nbsp;</span>
328
- <span class="cline-any cline-yes">86x</span>
341
+ <span class="cline-any cline-yes">82x</span>
329
342
  <span class="cline-any cline-yes">86x</span>
330
343
  <span class="cline-any cline-yes">86x</span>
331
344
  <span class="cline-any cline-yes">86x</span>
@@ -514,6 +527,19 @@
514
527
  <span class="cline-any cline-neutral">&nbsp;</span>
515
528
  <span class="cline-any cline-neutral">&nbsp;</span>
516
529
  <span class="cline-any cline-yes">18x</span>
530
+ <span class="cline-any cline-no">&nbsp;</span>
531
+ <span class="cline-any cline-neutral">&nbsp;</span>
532
+ <span class="cline-any cline-no">&nbsp;</span>
533
+ <span class="cline-any cline-no">&nbsp;</span>
534
+ <span class="cline-any cline-neutral">&nbsp;</span>
535
+ <span class="cline-any cline-no">&nbsp;</span>
536
+ <span class="cline-any cline-neutral">&nbsp;</span>
537
+ <span class="cline-any cline-no">&nbsp;</span>
538
+ <span class="cline-any cline-neutral">&nbsp;</span>
539
+ <span class="cline-any cline-neutral">&nbsp;</span>
540
+ <span class="cline-any cline-neutral">&nbsp;</span>
541
+ <span class="cline-any cline-neutral">&nbsp;</span>
542
+ <span class="cline-any cline-yes">18x</span>
517
543
  <span class="cline-any cline-yes">1x</span>
518
544
  <span class="cline-any cline-yes">1x</span>
519
545
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -573,7 +599,7 @@ export const save = async (ctx: any) =&gt; {
573
599
  }
574
600
  &nbsp;
575
601
  const bulkDelete = async (userIds: string[], currentUserId: string) =&gt; {
576
- if (userIds<span class="branch-0 cbranch-no" title="branch not covered" >?.i</span>ndexOf(currentUserId) !== -1) {
602
+ if (userIds?.indexOf(currentUserId) !== -1) {
577
603
  throw new Error("Unable to delete self.")
578
604
  }
579
605
  return await sdk.users.bulkDelete(userIds)
@@ -600,13 +626,13 @@ export const bulkUpdate = async (ctx: any) =&gt; {
600
626
  deleted = await bulkDelete(input.delete.userIds, currentUserId)
601
627
  }
602
628
  } catch (err: any) {
603
- ctx.throw(err.status || 400, err<span class="branch-0 cbranch-no" title="branch not covered" >?.m</span>essage || <span class="branch-1 cbranch-no" title="branch not covered" >err)</span>
629
+ ctx.throw(err.status || 400, err?.message || <span class="branch-1 cbranch-no" title="branch not covered" >err)</span>
604
630
  }
605
631
  ctx.body = { created, deleted } as BulkUserResponse
606
632
  }
607
633
  &nbsp;
608
634
  const parseBooleanParam = (param: any) =&gt; {
609
- return !(param &amp;&amp; <span class="branch-1 cbranch-no" title="branch not covered" >param === "false")</span>
635
+ return !(param &amp;&amp; <span class="branch-1 cbranch-no" title="branch not covered" >param === "false"</span>)
610
636
  }
611
637
  &nbsp;
612
638
  export const adminUser = async (ctx: any) =&gt; {
@@ -666,7 +692,7 @@ export const adminUser = async (ctx: any) =&gt; {
666
692
  })
667
693
  }
668
694
  &nbsp;
669
- export const countByApp = <span class="fstat-no" title="function not covered" >async (c</span>tx: any) =&gt;<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" > {</span></span>
695
+ export const countByApp = <span class="fstat-no" title="function not covered" >async (c</span>tx: any) =&gt; {
670
696
  const appId = <span class="cstat-no" title="statement not covered" >ctx.params.appId</span>
671
697
  <span class="cstat-no" title="statement not covered" > try {</span>
672
698
  <span class="cstat-no" title="statement not covered" > ctx.body = await sdk.users.countUsersByApp(appId)</span>
@@ -688,8 +714,8 @@ export const destroy = async (ctx: any) =&gt; {
688
714
  }
689
715
  }
690
716
  &nbsp;
691
- export const search = <span class="fstat-no" title="function not covered" >async (c</span>tx: any) =&gt;<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" > {</span></span>
692
- const body = <span class="cstat-no" title="statement not covered" >ctx.request.body as SearchUsersRequest</span>
717
+ export const search = <span class="fstat-no" title="function not covered" >async (c</span>tx: any) =&gt; {
718
+ const body = <span class="cstat-no" title="statement not covered" >ctx.request.body </span>as SearchUsersRequest
693
719
  const paginated = <span class="cstat-no" title="statement not covered" >await sdk.users.paginatedUsers(body)</span>
694
720
  // user hashed password shouldn't ever be returned
695
721
  <span class="cstat-no" title="statement not covered" > for (let user of paginated.data) {</span>
@@ -701,7 +727,7 @@ export const search = <span class="fstat-no" title="function not covered" >async
701
727
  }
702
728
  &nbsp;
703
729
  // called internally by app server user fetch
704
- export const fetch = <span class="fstat-no" title="function not covered" >async (c</span>tx: any) =&gt;<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" > {</span></span>
730
+ export const fetch = <span class="fstat-no" title="function not covered" >async (c</span>tx: any) =&gt; {
705
731
  const all = <span class="cstat-no" title="statement not covered" >await sdk.users.allUsers()</span>
706
732
  // user hashed password shouldn't ever be returned
707
733
  <span class="cstat-no" title="statement not covered" > for (let user of all) {</span>
@@ -717,7 +743,7 @@ export const find = async (ctx: any) =&gt; {
717
743
  ctx.body = await sdk.users.getUser(ctx.params.id)
718
744
  }
719
745
  &nbsp;
720
- export const tenantUserLookup = <span class="fstat-no" title="function not covered" >async (c</span>tx: any) =&gt;<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" > {</span></span>
746
+ export const tenantUserLookup = <span class="fstat-no" title="function not covered" >async (c</span>tx: any) =&gt; {
721
747
  const id = <span class="cstat-no" title="statement not covered" >ctx.params.id</span>
722
748
  const user = <span class="cstat-no" title="statement not covered" >await sdk.users.getPlatformUser(id)</span>
723
749
  <span class="cstat-no" title="statement not covered" > if (user) {</span>
@@ -751,6 +777,19 @@ export const inviteMultiple = async (ctx: any) =&gt; {
751
777
  ctx.body = await sdk.users.invite(request)
752
778
  }
753
779
  &nbsp;
780
+ export const checkInvite = <span class="fstat-no" title="function not covered" >async (c</span>tx: any) =&gt; {
781
+ const { code } = <span class="cstat-no" title="statement not covered" >ctx.params</span>
782
+ let invite
783
+ <span class="cstat-no" title="statement not covered" > try {</span>
784
+ <span class="cstat-no" title="statement not covered" > invite = await checkInviteCode(code, false)</span>
785
+ } catch (e) {
786
+ <span class="cstat-no" title="statement not covered" > ctx.throw(400, "There was a problem with the invite")</span>
787
+ }
788
+ <span class="cstat-no" title="statement not covered" > ctx.body = {</span>
789
+ email: invite.email,
790
+ }
791
+ }
792
+ &nbsp;
754
793
  export const inviteAccept = async (ctx: any) =&gt; {
755
794
  const { inviteCode, password, firstName, lastName } = ctx.request.body
756
795
  try {
@@ -784,7 +823,7 @@ export const inviteAccept = async (ctx: any) =&gt; {
784
823
  <div class='footer quiet pad2 space-top1 center small'>
785
824
  Code coverage generated by
786
825
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
787
- at Tue Jan 10 2023 17:19:13 GMT+0000 (Coordinated Universal Time)
826
+ at Tue Jan 31 2023 16:23:30 GMT+0000 (Coordinated Universal Time)
788
827
  </div>
789
828
  <script src="../../../../prettify.js"></script>
790
829
  <script>
@@ -37,9 +37,9 @@
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">0% </span>
40
+ <span class="strong">44.44% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>0/5</span>
42
+ <span class='fraction'>4/9</span>
43
43
  </div>
44
44
 
45
45
 
@@ -199,7 +199,7 @@ export async function <span class="fstat-no" title="function not covered" >fetch
199
199
  include_docs: true,
200
200
  })
201
201
  )
202
- <span class="cstat-no" title="statement not covered" > ctx.body = response.rows.map(<span class="fstat-no" title="function not covered" >row </span>=&gt; <span class="cstat-no" title="statement not covered" >row.doc)</span></span>
202
+ <span class="cstat-no" title="statement not covered" > ctx.body = response.rows.map(<span class="fstat-no" title="function not covered" >row =&gt; <span class="cstat-no" title="statement not covered" >r</span>ow.doc)</span></span>
203
203
  }
204
204
  &nbsp;
205
205
  export async function <span class="fstat-no" title="function not covered" >find(</span>ctx: BBContext) {
@@ -229,7 +229,7 @@ export async function <span class="fstat-no" title="function not covered" >destr
229
229
  <div class='footer quiet pad2 space-top1 center small'>
230
230
  Code coverage generated by
231
231
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
232
- at Tue Jan 10 2023 17:19:13 GMT+0000 (Coordinated Universal Time)
232
+ at Tue Jan 31 2023 16:23:30 GMT+0000 (Coordinated Universal Time)
233
233
  </div>
234
234
  <script src="../../../../prettify.js"></script>
235
235
  <script>
@@ -25,7 +25,7 @@
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'>15/15</span>
28
+ <span class='fraction'>13/13</span>
29
29
  </div>
30
30
 
31
31
 
@@ -133,7 +133,7 @@ export const destroy = async (ctx: any) =&gt; {
133
133
  <div class='footer quiet pad2 space-top1 center small'>
134
134
  Code coverage generated by
135
135
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
136
- at Tue Jan 10 2023 17:19:13 GMT+0000 (Coordinated Universal Time)
136
+ at Tue Jan 31 2023 16:23:30 GMT+0000 (Coordinated Universal Time)
137
137
  </div>
138
138
  <script src="../../../../prettify.js"></script>
139
139
  <script>
@@ -25,7 +25,7 @@
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'>5/5</span>
28
+ <span class='fraction'>4/4</span>
29
29
  </div>
30
30
 
31
31
 
@@ -109,7 +109,7 @@ export const fetch = async (ctx: BBContext) =&gt; {
109
109
  <div class='footer quiet pad2 space-top1 center small'>
110
110
  Code coverage generated by
111
111
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
112
- at Tue Jan 10 2023 17:19:13 GMT+0000 (Coordinated Universal Time)
112
+ at Tue Jan 31 2023 16:23:30 GMT+0000 (Coordinated Universal Time)
113
113
  </div>
114
114
  <script src="../../../../prettify.js"></script>
115
115
  <script>
@@ -23,9 +23,9 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">96.82% </span>
26
+ <span class="strong">96.42% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>61/63</span>
28
+ <span class='fraction'>54/56</span>
29
29
  </div>
30
30
 
31
31
 
@@ -84,7 +84,7 @@
84
84
  <div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
85
85
  </td>
86
86
  <td data-value="100" class="pct high">100%</td>
87
- <td data-value="15" class="abs high">15/15</td>
87
+ <td data-value="13" class="abs high">13/13</td>
88
88
  <td data-value="100" class="pct high">100%</td>
89
89
  <td data-value="0" class="abs high">0/0</td>
90
90
  <td data-value="100" class="pct high">100%</td>
@@ -99,7 +99,7 @@
99
99
  <div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
100
100
  </td>
101
101
  <td data-value="100" class="pct high">100%</td>
102
- <td data-value="5" class="abs high">5/5</td>
102
+ <td data-value="4" class="abs high">4/4</td>
103
103
  <td data-value="100" class="pct high">100%</td>
104
104
  <td data-value="2" class="abs high">2/2</td>
105
105
  <td data-value="100" class="pct high">100%</td>
@@ -114,7 +114,7 @@
114
114
  <div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
115
115
  </td>
116
116
  <td data-value="100" class="pct high">100%</td>
117
- <td data-value="12" class="abs high">12/12</td>
117
+ <td data-value="10" class="abs high">10/10</td>
118
118
  <td data-value="100" class="pct high">100%</td>
119
119
  <td data-value="0" class="abs high">0/0</td>
120
120
  <td data-value="100" class="pct high">100%</td>
@@ -144,7 +144,7 @@
144
144
  <div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
145
145
  </td>
146
146
  <td data-value="100" class="pct high">100%</td>
147
- <td data-value="9" class="abs high">9/9</td>
147
+ <td data-value="8" class="abs high">8/8</td>
148
148
  <td data-value="100" class="pct high">100%</td>
149
149
  <td data-value="4" class="abs high">4/4</td>
150
150
  <td data-value="100" class="pct high">100%</td>
@@ -155,11 +155,11 @@
155
155
 
156
156
  <tr>
157
157
  <td class="file high" data-value="tenants.ts"><a href="tenants.ts.html">tenants.ts</a></td>
158
- <td data-value="86.66" class="pic high">
159
- <div class="chart"><div class="cover-fill" style="width: 86%"></div><div class="cover-empty" style="width: 14%"></div></div>
158
+ <td data-value="85.71" class="pic high">
159
+ <div class="chart"><div class="cover-fill" style="width: 85%"></div><div class="cover-empty" style="width: 15%"></div></div>
160
160
  </td>
161
- <td data-value="86.66" class="pct high">86.66%</td>
162
- <td data-value="15" class="abs high">13/15</td>
161
+ <td data-value="85.71" class="pct high">85.71%</td>
162
+ <td data-value="14" class="abs high">12/14</td>
163
163
  <td data-value="100" class="pct high">100%</td>
164
164
  <td data-value="1" class="abs high">1/1</td>
165
165
  <td data-value="100" class="pct high">100%</td>
@@ -176,7 +176,7 @@
176
176
  <div class='footer quiet pad2 space-top1 center small'>
177
177
  Code coverage generated by
178
178
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
179
- at Tue Jan 10 2023 17:19:13 GMT+0000 (Coordinated Universal Time)
179
+ at Tue Jan 31 2023 16:23:30 GMT+0000 (Coordinated Universal Time)
180
180
  </div>
181
181
  <script src="../../../../prettify.js"></script>
182
182
  <script>
@@ -25,7 +25,7 @@
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'>12/12</span>
28
+ <span class='fraction'>10/10</span>
29
29
  </div>
30
30
 
31
31
 
@@ -109,7 +109,7 @@ export const fetchDefinitions = async (ctx: any) =&gt; {
109
109
  <div class='footer quiet pad2 space-top1 center small'>
110
110
  Code coverage generated by
111
111
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
112
- at Tue Jan 10 2023 17:19:13 GMT+0000 (Coordinated Universal Time)
112
+ at Tue Jan 31 2023 16:23:30 GMT+0000 (Coordinated Universal Time)
113
113
  </div>
114
114
  <script src="../../../../prettify.js"></script>
115
115
  <script>
@@ -109,7 +109,7 @@ export async function systemRestored(ctx: BBContext) {
109
109
  <div class='footer quiet pad2 space-top1 center small'>
110
110
  Code coverage generated by
111
111
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
112
- at Tue Jan 10 2023 17:19:13 GMT+0000 (Coordinated Universal Time)
112
+ at Tue Jan 31 2023 16:23:30 GMT+0000 (Coordinated Universal Time)
113
113
  </div>
114
114
  <script src="../../../../prettify.js"></script>
115
115
  <script>
@@ -25,7 +25,7 @@
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'>9/9</span>
28
+ <span class='fraction'>8/8</span>
29
29
  </div>
30
30
 
31
31
 
@@ -118,7 +118,7 @@ export const fetch = async (ctx: BBContext) =&gt; {
118
118
  <div class='footer quiet pad2 space-top1 center small'>
119
119
  Code coverage generated by
120
120
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
121
- at Tue Jan 10 2023 17:19:13 GMT+0000 (Coordinated Universal Time)
121
+ at Tue Jan 31 2023 16:23:30 GMT+0000 (Coordinated Universal Time)
122
122
  </div>
123
123
  <script src="../../../../prettify.js"></script>
124
124
  <script>
@@ -23,9 +23,9 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">86.66% </span>
26
+ <span class="strong">85.71% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>13/15</span>
28
+ <span class='fraction'>12/14</span>
29
29
  </div>
30
30
 
31
31
 
@@ -139,7 +139,7 @@ export { _delete as delete }
139
139
  <div class='footer quiet pad2 space-top1 center small'>
140
140
  Code coverage generated by
141
141
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
142
- at Tue Jan 10 2023 17:19:13 GMT+0000 (Coordinated Universal Time)
142
+ at Tue Jan 31 2023 16:23:30 GMT+0000 (Coordinated Universal Time)
143
143
  </div>
144
144
  <script src="../../../../prettify.js"></script>
145
145
  <script>
@@ -101,7 +101,7 @@
101
101
  <div class='footer quiet pad2 space-top1 center small'>
102
102
  Code coverage generated by
103
103
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
104
- at Tue Jan 10 2023 17:19:13 GMT+0000 (Coordinated Universal Time)
104
+ at Tue Jan 31 2023 16:23:30 GMT+0000 (Coordinated Universal Time)
105
105
  </div>
106
106
  <script src="../../prettify.js"></script>
107
107
  <script>
@@ -229,7 +229,11 @@
229
229
  <a name='L164'></a><a href='#L164'>164</a>
230
230
  <a name='L165'></a><a href='#L165'>165</a>
231
231
  <a name='L166'></a><a href='#L166'>166</a>
232
- <a name='L167'></a><a href='#L167'>167</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">18x</span>
232
+ <a name='L167'></a><a href='#L167'>167</a>
233
+ <a name='L168'></a><a href='#L168'>168</a>
234
+ <a name='L169'></a><a href='#L169'>169</a>
235
+ <a name='L170'></a><a href='#L170'>170</a>
236
+ <a name='L171'></a><a href='#L171'>171</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">18x</span>
233
237
  <span class="cline-any cline-yes">18x</span>
234
238
  <span class="cline-any cline-yes">18x</span>
235
239
  <span class="cline-any cline-yes">18x</span>
@@ -295,6 +299,10 @@
295
299
  <span class="cline-any cline-neutral">&nbsp;</span>
296
300
  <span class="cline-any cline-neutral">&nbsp;</span>
297
301
  <span class="cline-any cline-neutral">&nbsp;</span>
302
+ <span class="cline-any cline-neutral">&nbsp;</span>
303
+ <span class="cline-any cline-neutral">&nbsp;</span>
304
+ <span class="cline-any cline-neutral">&nbsp;</span>
305
+ <span class="cline-any cline-neutral">&nbsp;</span>
298
306
  <span class="cline-any cline-yes">18x</span>
299
307
  <span class="cline-any cline-neutral">&nbsp;</span>
300
308
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -370,7 +378,7 @@
370
378
  <span class="cline-any cline-neutral">&nbsp;</span>
371
379
  <span class="cline-any cline-neutral">&nbsp;</span>
372
380
  <span class="cline-any cline-neutral">&nbsp;</span>
373
- <span class="cline-any cline-yes">121x</span>
381
+ <span class="cline-any cline-yes">18x</span>
374
382
  <span class="cline-any cline-yes">121x</span>
375
383
  <span class="cline-any cline-yes">121x</span>
376
384
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -390,8 +398,8 @@
390
398
  <span class="cline-any cline-neutral">&nbsp;</span>
391
399
  <span class="cline-any cline-neutral">&nbsp;</span>
392
400
  <span class="cline-any cline-yes">18x</span>
393
- <span class="cline-any cline-yes">288x</span>
394
- <span class="cline-any cline-yes">288x</span>
401
+ <span class="cline-any cline-yes">306x</span>
402
+ <span class="cline-any cline-yes">306x</span>
395
403
  <span class="cline-any cline-neutral">&nbsp;</span>
396
404
  <span class="cline-any cline-neutral">&nbsp;</span>
397
405
  <span class="cline-any cline-yes">18x</span>
@@ -459,6 +467,10 @@ const PUBLIC_ENDPOINTS = [
459
467
  route: "/api/system/restored",
460
468
  method: "POST",
461
469
  },
470
+ {
471
+ route: "/api/global/users/invite",
472
+ method: "GET",
473
+ },
462
474
  ]
463
475
  &nbsp;
464
476
  const NO_TENANCY_ENDPOINTS = [
@@ -515,7 +527,7 @@ router
515
527
  br: false,
516
528
  })
517
529
  )
518
- .use("/health", <span class="fstat-no" title="function not covered" >ctx </span>=&gt; (<span class="cstat-no" title="statement not covered" >ctx.status = 200)</span>)
530
+ .use("/health", <span class="fstat-no" title="function not covered" >ctx =&gt; (<span class="cstat-no" title="statement not covered" >c</span>tx.status = 200))</span>
519
531
  .use(auth.buildAuthMiddleware(PUBLIC_ENDPOINTS))
520
532
  .use(auth.buildTenancyMiddleware(PUBLIC_ENDPOINTS, NO_TENANCY_ENDPOINTS))
521
533
  .use(auth.buildCsrfMiddleware({ noCsrfPatterns: NO_CSRF_ENDPOINTS }))
@@ -552,7 +564,7 @@ router.use(async (ctx, next) =&gt; {
552
564
  }
553
565
  })
554
566
  &nbsp;
555
- router.get("/health", <span class="fstat-no" title="function not covered" >ctx </span>=&gt; (<span class="cstat-no" title="statement not covered" >ctx.status = 200)</span>)
567
+ router.get("/health", <span class="fstat-no" title="function not covered" >ctx =&gt; (<span class="cstat-no" title="statement not covered" >c</span>tx.status = 200))</span>
556
568
  &nbsp;
557
569
  // authenticated routes
558
570
  for (let route of routes) {
@@ -568,7 +580,7 @@ export default router
568
580
  <div class='footer quiet pad2 space-top1 center small'>
569
581
  Code coverage generated by
570
582
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
571
- at Tue Jan 10 2023 17:19:13 GMT+0000 (Coordinated Universal Time)
583
+ at Tue Jan 31 2023 16:23:30 GMT+0000 (Coordinated Universal Time)
572
584
  </div>
573
585
  <script src="../../prettify.js"></script>
574
586
  <script>
@@ -25,7 +25,7 @@
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'>10/10</span>
28
+ <span class='fraction'>11/11</span>
29
29
  </div>
30
30
 
31
31
 
@@ -39,7 +39,7 @@
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
 
@@ -326,7 +326,7 @@ router
326
326
  .get("/api/global/auth/oidc/callback", authController.oidcAuth)
327
327
  .get("/api/admin/auth/oidc/callback", authController.oidcAuth)
328
328
  &nbsp;
329
- export = router
329
+ export default router
330
330
  &nbsp;</pre></td></tr></table></pre>
331
331
 
332
332
  <div class='push'></div><!-- for sticky footer -->
@@ -334,7 +334,7 @@ export = router
334
334
  <div class='footer quiet pad2 space-top1 center small'>
335
335
  Code coverage generated by
336
336
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
337
- at Tue Jan 10 2023 17:19:13 GMT+0000 (Coordinated Universal Time)
337
+ at Tue Jan 31 2023 16:23:30 GMT+0000 (Coordinated Universal Time)
338
338
  </div>
339
339
  <script src="../../../../prettify.js"></script>
340
340
  <script>
@@ -25,7 +25,7 @@
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'>15/15</span>
28
+ <span class='fraction'>16/16</span>
29
29
  </div>
30
30
 
31
31
 
@@ -39,7 +39,7 @@
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'>7/7</span>
42
+ <span class='fraction'>8/8</span>
43
43
  </div>
44
44
 
45
45
 
@@ -347,8 +347,8 @@ function settingValidation() {
347
347
  function googleValidation() {
348
348
  // prettier-ignore
349
349
  return Joi.object({
350
- clientID: Joi.string().required(),
351
- clientSecret: Joi.string().required(),
350
+ clientID: Joi.when('activated', { is: true, then: Joi.string().required() }),
351
+ clientSecret: Joi.when('activated', { is: true, then: Joi.string().required() }),
352
352
  activated: Joi.boolean().required(),
353
353
  }).unknown(true)
354
354
  }
@@ -358,12 +358,12 @@ function oidcValidation() {
358
358
  return Joi.object({
359
359
  configs: Joi.array().items(
360
360
  Joi.object({
361
- clientID: Joi.string().required(),
362
- clientSecret: Joi.string().required(),
363
- configUrl: Joi.string().required(),
361
+ clientID: Joi.when('activated', { is: true, then: Joi.string().required() }),
362
+ clientSecret: Joi.when('activated', { is: true, then: Joi.string().required() }),
363
+ configUrl: Joi.when('activated', { is: true, then: Joi.string().required() }),
364
364
  logo: Joi.string().allow("", null),
365
365
  name: Joi.string().allow("", null),
366
- uuid: Joi.string().required(),
366
+ uuid: Joi.when('activated', { is: true, then: Joi.string().required() }),
367
367
  activated: Joi.boolean().required(),
368
368
  scopes: Joi.array().optional()
369
369
  })
@@ -434,7 +434,7 @@ router
434
434
  controller.upload
435
435
  )
436
436
  &nbsp;
437
- export = router
437
+ export default router
438
438
  &nbsp;</pre></td></tr></table></pre>
439
439
 
440
440
  <div class='push'></div><!-- for sticky footer -->
@@ -442,7 +442,7 @@ export = router
442
442
  <div class='footer quiet pad2 space-top1 center small'>
443
443
  Code coverage generated by
444
444
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
445
- at Tue Jan 10 2023 17:19:13 GMT+0000 (Coordinated Universal Time)
445
+ at Tue Jan 31 2023 16:23:30 GMT+0000 (Coordinated Universal Time)
446
446
  </div>
447
447
  <script src="../../../../prettify.js"></script>
448
448
  <script>