@budibase/worker 2.2.26 → 2.2.27

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 (166) hide show
  1. package/Dockerfile +1 -1
  2. package/coverage/clover.xml +1393 -1364
  3. package/coverage/coverage-final.json +83 -77
  4. package/coverage/lcov-report/index.html +133 -133
  5. package/coverage/lcov-report/src/api/controllers/global/auth.ts.html +52 -52
  6. package/coverage/lcov-report/src/api/controllers/global/configs.ts.html +161 -218
  7. package/coverage/lcov-report/src/api/controllers/global/email.ts.html +4 -4
  8. package/coverage/lcov-report/src/api/controllers/global/events.ts.html +136 -0
  9. package/coverage/lcov-report/src/api/controllers/global/index.html +85 -70
  10. package/coverage/lcov-report/src/api/controllers/global/license.ts.html +16 -16
  11. package/coverage/lcov-report/src/api/controllers/global/roles.ts.html +77 -77
  12. package/coverage/lcov-report/src/api/controllers/global/self.ts.html +20 -20
  13. package/coverage/lcov-report/src/api/controllers/global/templates.ts.html +54 -54
  14. package/coverage/lcov-report/src/api/controllers/global/users.ts.html +82 -43
  15. package/coverage/lcov-report/src/api/controllers/global/workspaces.ts.html +9 -9
  16. package/coverage/lcov-report/src/api/controllers/system/accounts.ts.html +5 -5
  17. package/coverage/lcov-report/src/api/controllers/system/environment.ts.html +4 -4
  18. package/coverage/lcov-report/src/api/controllers/system/index.html +11 -11
  19. package/coverage/lcov-report/src/api/controllers/system/migrations.ts.html +5 -5
  20. package/coverage/lcov-report/src/api/controllers/system/restore.ts.html +4 -4
  21. package/coverage/lcov-report/src/api/controllers/system/status.ts.html +5 -5
  22. package/coverage/lcov-report/src/api/controllers/system/tenants.ts.html +7 -7
  23. package/coverage/lcov-report/src/api/index.html +1 -1
  24. package/coverage/lcov-report/src/api/index.ts.html +37 -25
  25. package/coverage/lcov-report/src/api/routes/global/auth.ts.html +14 -14
  26. package/coverage/lcov-report/src/api/routes/global/configs.ts.html +25 -25
  27. package/coverage/lcov-report/src/api/routes/global/email.ts.html +13 -13
  28. package/coverage/lcov-report/src/api/routes/global/events.ts.html +109 -0
  29. package/coverage/lcov-report/src/api/routes/global/index.html +37 -22
  30. package/coverage/lcov-report/src/api/routes/global/license.ts.html +9 -9
  31. package/coverage/lcov-report/src/api/routes/global/roles.ts.html +10 -10
  32. package/coverage/lcov-report/src/api/routes/global/self.ts.html +11 -11
  33. package/coverage/lcov-report/src/api/routes/global/templates.ts.html +14 -14
  34. package/coverage/lcov-report/src/api/routes/global/users.ts.html +62 -20
  35. package/coverage/lcov-report/src/api/routes/global/workspaces.ts.html +12 -12
  36. package/coverage/lcov-report/src/api/routes/index.html +7 -7
  37. package/coverage/lcov-report/src/api/routes/index.ts.html +29 -23
  38. package/coverage/lcov-report/src/api/routes/system/accounts.ts.html +10 -10
  39. package/coverage/lcov-report/src/api/routes/system/environment.ts.html +9 -9
  40. package/coverage/lcov-report/src/api/routes/system/index.html +15 -15
  41. package/coverage/lcov-report/src/api/routes/system/migrations.ts.html +10 -10
  42. package/coverage/lcov-report/src/api/routes/system/restore.ts.html +9 -9
  43. package/coverage/lcov-report/src/api/routes/system/status.ts.html +9 -9
  44. package/coverage/lcov-report/src/api/routes/system/tenants.ts.html +10 -10
  45. package/coverage/lcov-report/src/api/routes/validation/index.html +3 -3
  46. package/coverage/lcov-report/src/api/routes/validation/index.ts.html +2 -2
  47. package/coverage/lcov-report/src/api/routes/validation/users.ts.html +14 -14
  48. package/coverage/lcov-report/src/constants/index.html +17 -17
  49. package/coverage/lcov-report/src/constants/index.ts.html +77 -53
  50. package/coverage/lcov-report/src/constants/templates/index.html +19 -19
  51. package/coverage/lcov-report/src/constants/templates/index.ts.html +42 -42
  52. package/coverage/lcov-report/src/db/index.html +3 -3
  53. package/coverage/lcov-report/src/db/index.ts.html +10 -10
  54. package/coverage/lcov-report/src/environment.ts.html +44 -29
  55. package/coverage/lcov-report/src/index.html +27 -27
  56. package/coverage/lcov-report/src/index.ts.html +55 -55
  57. package/coverage/lcov-report/src/middleware/cloudRestricted.ts.html +5 -5
  58. package/coverage/lcov-report/src/middleware/index.html +1 -1
  59. package/coverage/lcov-report/src/migrations/functions/globalInfoSyncUsers.ts.html +9 -9
  60. package/coverage/lcov-report/src/migrations/functions/index.html +11 -11
  61. package/coverage/lcov-report/src/migrations/index.html +15 -15
  62. package/coverage/lcov-report/src/migrations/index.ts.html +27 -27
  63. package/coverage/lcov-report/src/sdk/accounts/accounts.ts.html +13 -13
  64. package/coverage/lcov-report/src/sdk/accounts/index.html +13 -13
  65. package/coverage/lcov-report/src/sdk/accounts/index.ts.html +2 -2
  66. package/coverage/lcov-report/src/sdk/index.html +5 -5
  67. package/coverage/lcov-report/src/sdk/index.ts.html +6 -6
  68. package/coverage/lcov-report/src/sdk/users/events.ts.html +82 -58
  69. package/coverage/lcov-report/src/sdk/users/index.html +29 -29
  70. package/coverage/lcov-report/src/sdk/users/index.ts.html +2 -2
  71. package/coverage/lcov-report/src/sdk/users/users.ts.html +176 -119
  72. package/coverage/lcov-report/src/tests/TestConfiguration.ts.html +119 -95
  73. package/coverage/lcov-report/src/tests/api/accounts.ts.html +7 -7
  74. package/coverage/lcov-report/src/tests/api/auth.ts.html +8 -8
  75. package/coverage/lcov-report/src/tests/api/base.ts.html +5 -5
  76. package/coverage/lcov-report/src/tests/api/configs.ts.html +9 -9
  77. package/coverage/lcov-report/src/tests/api/email.ts.html +6 -6
  78. package/coverage/lcov-report/src/tests/api/environment.ts.html +6 -6
  79. package/coverage/lcov-report/src/tests/api/groups.ts.html +163 -0
  80. package/coverage/lcov-report/src/tests/api/index.html +91 -31
  81. package/coverage/lcov-report/src/tests/api/index.ts.html +62 -29
  82. package/coverage/lcov-report/src/tests/api/license.ts.html +136 -0
  83. package/coverage/lcov-report/src/tests/api/migrations.ts.html +8 -8
  84. package/coverage/lcov-report/src/tests/api/restore.ts.html +7 -7
  85. package/coverage/lcov-report/src/tests/api/roles.ts.html +181 -0
  86. package/coverage/lcov-report/src/tests/api/self.ts.html +7 -7
  87. package/coverage/lcov-report/src/tests/api/status.ts.html +6 -6
  88. package/coverage/lcov-report/src/tests/api/templates.ts.html +175 -0
  89. package/coverage/lcov-report/src/tests/api/tenants.ts.html +10 -10
  90. package/coverage/lcov-report/src/tests/api/users.ts.html +28 -25
  91. package/coverage/lcov-report/src/tests/controllers.ts.html +14 -14
  92. package/coverage/lcov-report/src/tests/index.html +34 -34
  93. package/coverage/lcov-report/src/tests/index.ts.html +19 -55
  94. package/coverage/lcov-report/src/tests/mocks/{email.js.html → email.ts.html} +5 -5
  95. package/coverage/lcov-report/src/tests/mocks/index.html +6 -6
  96. package/coverage/lcov-report/src/tests/mocks/index.ts.html +10 -10
  97. package/coverage/lcov-report/src/tests/structures/configs.ts.html +11 -11
  98. package/coverage/lcov-report/src/tests/structures/groups.ts.html +15 -15
  99. package/coverage/lcov-report/src/tests/structures/index.html +25 -25
  100. package/coverage/lcov-report/src/tests/structures/index.ts.html +17 -17
  101. package/coverage/lcov-report/src/tests/structures/users.ts.html +16 -16
  102. package/coverage/lcov-report/src/utilities/appService.ts.html +45 -18
  103. package/coverage/lcov-report/src/utilities/email.ts.html +28 -28
  104. package/coverage/lcov-report/src/utilities/fileSystem.ts.html +4 -4
  105. package/coverage/lcov-report/src/utilities/index.html +27 -27
  106. package/coverage/lcov-report/src/utilities/index.ts.html +2 -2
  107. package/coverage/lcov-report/src/utilities/redis.ts.html +20 -20
  108. package/coverage/lcov-report/src/utilities/templates.ts.html +6 -6
  109. package/coverage/lcov-report/src/utilities/users.ts.html +3 -3
  110. package/coverage/lcov.info +2777 -2582
  111. package/jest.config.ts +7 -2
  112. package/package.json +10 -7
  113. package/scripts/dev/manage.js +2 -2
  114. package/src/api/controllers/global/auth.ts +1 -1
  115. package/src/api/controllers/global/configs.ts +112 -131
  116. package/src/api/controllers/global/events.ts +17 -0
  117. package/src/api/controllers/global/users.ts +14 -1
  118. package/src/api/index.ts +4 -0
  119. package/src/api/routes/global/auth.ts +1 -1
  120. package/src/api/routes/global/configs.ts +7 -7
  121. package/src/api/routes/global/email.ts +1 -1
  122. package/src/api/routes/global/events.ts +8 -0
  123. package/src/api/routes/global/license.ts +1 -1
  124. package/src/api/routes/global/roles.ts +1 -1
  125. package/src/api/routes/global/self.ts +1 -1
  126. package/src/api/routes/global/templates.ts +1 -1
  127. package/src/api/routes/global/tests/groups.spec.ts +58 -0
  128. package/src/api/routes/global/tests/license.spec.ts +0 -2
  129. package/src/api/routes/global/tests/roles.spec.ts +66 -5
  130. package/src/api/routes/global/tests/templates.spec.ts +81 -9
  131. package/src/api/routes/global/tests/users.spec.ts +2 -2
  132. package/src/api/routes/global/users.ts +15 -1
  133. package/src/api/routes/global/workspaces.ts +1 -1
  134. package/src/api/routes/index.ts +2 -0
  135. package/src/api/routes/system/accounts.ts +1 -1
  136. package/src/api/routes/system/environment.ts +1 -1
  137. package/src/api/routes/system/migrations.ts +1 -1
  138. package/src/api/routes/system/restore.ts +1 -1
  139. package/src/api/routes/system/status.ts +1 -1
  140. package/src/api/routes/system/tenants.ts +1 -1
  141. package/src/api/routes/system/tests/environment.spec.ts +1 -1
  142. package/src/constants/index.ts +13 -5
  143. package/src/db/index.ts +1 -1
  144. package/src/environment.ts +6 -1
  145. package/src/index.ts +5 -5
  146. package/src/middleware/cloudRestricted.ts +1 -1
  147. package/src/sdk/users/events.ts +8 -0
  148. package/src/sdk/users/users.ts +23 -4
  149. package/src/tests/TestConfiguration.ts +11 -3
  150. package/src/tests/api/groups.ts +26 -0
  151. package/src/tests/api/index.ts +12 -1
  152. package/src/tests/api/license.ts +17 -0
  153. package/src/tests/api/roles.ts +32 -0
  154. package/src/tests/api/templates.ts +30 -0
  155. package/src/tests/api/users.ts +2 -1
  156. package/src/tests/index.ts +6 -18
  157. package/src/tests/jestEnv.ts +11 -0
  158. package/src/tests/jestSetup.ts +3 -15
  159. package/src/tests/mocks/{email.js → email.ts} +1 -1
  160. package/src/tests/mocks/index.ts +4 -4
  161. package/src/tests/structures/configs.ts +2 -2
  162. package/src/tests/structures/groups.ts +1 -1
  163. package/src/tests/structures/index.ts +4 -4
  164. package/src/tests/structures/users.ts +1 -1
  165. package/src/utilities/appService.ts +12 -3
  166. package/tsconfig.json +2 -2
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">69.27% </span>
26
+ <span class="strong">67.97% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>133/192</span>
28
+ <span class='fraction'>121/178</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">61.95% </span>
33
+ <span class="strong">68.47% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>57/92</span>
35
+ <span class='fraction'>63/92</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">72% </span>
40
+ <span class="strong">77.41% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>18/25</span>
42
+ <span class='fraction'>24/31</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">68.15% </span>
47
+ <span class="strong">66.86% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>122/179</span>
49
+ <span class='fraction'>111/166</span>
50
50
  </div>
51
51
 
52
52
 
@@ -484,38 +484,18 @@
484
484
  <a name='L419'></a><a href='#L419'>419</a>
485
485
  <a name='L420'></a><a href='#L420'>420</a>
486
486
  <a name='L421'></a><a href='#L421'>421</a>
487
- <a name='L422'></a><a href='#L422'>422</a>
488
- <a name='L423'></a><a href='#L423'>423</a>
489
- <a name='L424'></a><a href='#L424'>424</a>
490
- <a name='L425'></a><a href='#L425'>425</a>
491
- <a name='L426'></a><a href='#L426'>426</a>
492
- <a name='L427'></a><a href='#L427'>427</a>
493
- <a name='L428'></a><a href='#L428'>428</a>
494
- <a name='L429'></a><a href='#L429'>429</a>
495
- <a name='L430'></a><a href='#L430'>430</a>
496
- <a name='L431'></a><a href='#L431'>431</a>
497
- <a name='L432'></a><a href='#L432'>432</a>
498
- <a name='L433'></a><a href='#L433'>433</a>
499
- <a name='L434'></a><a href='#L434'>434</a>
500
- <a name='L435'></a><a href='#L435'>435</a>
501
- <a name='L436'></a><a href='#L436'>436</a>
502
- <a name='L437'></a><a href='#L437'>437</a>
503
- <a name='L438'></a><a href='#L438'>438</a>
504
- <a name='L439'></a><a href='#L439'>439</a>
505
- <a name='L440'></a><a href='#L440'>440</a>
506
- <a name='L441'></a><a href='#L441'>441</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">17x</span>
507
- <span class="cline-any cline-yes">17x</span>
508
- <span class="cline-any cline-yes">17x</span>
509
- <span class="cline-any cline-yes">17x</span>
487
+ <a name='L422'></a><a href='#L422'>422</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">18x</span>
488
+ <span class="cline-any cline-yes">18x</span>
489
+ <span class="cline-any cline-yes">18x</span>
510
490
  <span class="cline-any cline-neutral">&nbsp;</span>
511
491
  <span class="cline-any cline-neutral">&nbsp;</span>
512
492
  <span class="cline-any cline-neutral">&nbsp;</span>
513
493
  <span class="cline-any cline-neutral">&nbsp;</span>
514
494
  <span class="cline-any cline-neutral">&nbsp;</span>
515
495
  <span class="cline-any cline-neutral">&nbsp;</span>
516
- <span class="cline-any cline-yes">17x</span>
517
- <span class="cline-any cline-yes">17x</span>
518
496
  <span class="cline-any cline-neutral">&nbsp;</span>
497
+ <span class="cline-any cline-yes">18x</span>
498
+ <span class="cline-any cline-yes">18x</span>
519
499
  <span class="cline-any cline-neutral">&nbsp;</span>
520
500
  <span class="cline-any cline-neutral">&nbsp;</span>
521
501
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -525,8 +505,14 @@
525
505
  <span class="cline-any cline-neutral">&nbsp;</span>
526
506
  <span class="cline-any cline-neutral">&nbsp;</span>
527
507
  <span class="cline-any cline-neutral">&nbsp;</span>
528
- <span class="cline-any cline-yes">41x</span>
529
- <span class="cline-any cline-yes">41x</span>
508
+ <span class="cline-any cline-neutral">&nbsp;</span>
509
+ <span class="cline-any cline-neutral">&nbsp;</span>
510
+ <span class="cline-any cline-neutral">&nbsp;</span>
511
+ <span class="cline-any cline-neutral">&nbsp;</span>
512
+ <span class="cline-any cline-neutral">&nbsp;</span>
513
+ <span class="cline-any cline-yes">18x</span>
514
+ <span class="cline-any cline-neutral">&nbsp;</span>
515
+ <span class="cline-any cline-yes">18x</span>
530
516
  <span class="cline-any cline-yes">41x</span>
531
517
  <span class="cline-any cline-neutral">&nbsp;</span>
532
518
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -535,31 +521,20 @@
535
521
  <span class="cline-any cline-neutral">&nbsp;</span>
536
522
  <span class="cline-any cline-neutral">&nbsp;</span>
537
523
  <span class="cline-any cline-yes">41x</span>
538
- <span class="cline-any cline-yes">41x</span>
539
524
  <span class="cline-any cline-yes">35x</span>
540
- <span class="cline-any cline-neutral">&nbsp;</span>
541
- <span class="cline-any cline-yes">14x</span>
542
525
  <span class="cline-any cline-yes">14x</span>
543
- <span class="cline-any cline-neutral">&nbsp;</span>
544
- <span class="cline-any cline-neutral">&nbsp;</span>
545
- <span class="cline-any cline-yes">4x</span>
526
+ <span class="cline-any cline-yes">21x</span>
546
527
  <span class="cline-any cline-yes">4x</span>
547
528
  <span class="cline-any cline-yes">4x</span>
548
529
  <span class="cline-any cline-yes">2x</span>
549
530
  <span class="cline-any cline-neutral">&nbsp;</span>
550
- <span class="cline-any cline-yes">4x</span>
551
- <span class="cline-any cline-neutral">&nbsp;</span>
552
- <span class="cline-any cline-neutral">&nbsp;</span>
553
- <span class="cline-any cline-yes">6x</span>
531
+ <span class="cline-any cline-yes">17x</span>
554
532
  <span class="cline-any cline-yes">6x</span>
555
533
  <span class="cline-any cline-yes">6x</span>
556
534
  <span class="cline-any cline-yes">4x</span>
557
535
  <span class="cline-any cline-neutral">&nbsp;</span>
558
- <span class="cline-any cline-yes">6x</span>
559
- <span class="cline-any cline-neutral">&nbsp;</span>
560
- <span class="cline-any cline-neutral">&nbsp;</span>
561
- <span class="cline-any cline-neutral">&nbsp;</span>
562
536
  <span class="cline-any cline-yes">11x</span>
537
+ <span class="cline-any cline-neutral">&nbsp;</span>
563
538
  <span class="cline-any cline-yes">11x</span>
564
539
  <span class="cline-any cline-yes">11x</span>
565
540
  <span class="cline-any cline-yes">1x</span>
@@ -580,27 +555,18 @@
580
555
  <span class="cline-any cline-neutral">&nbsp;</span>
581
556
  <span class="cline-any cline-yes">1x</span>
582
557
  <span class="cline-any cline-neutral">&nbsp;</span>
583
- <span class="cline-any cline-yes">11x</span>
584
- <span class="cline-any cline-neutral">&nbsp;</span>
585
558
  <span class="cline-any cline-neutral">&nbsp;</span>
586
559
  <span class="cline-any cline-neutral">&nbsp;</span>
587
560
  <span class="cline-any cline-yes">6x</span>
588
- <span class="cline-any cline-neutral">&nbsp;</span>
589
561
  <span class="cline-any cline-yes">1x</span>
590
- <span class="cline-any cline-yes">1x</span>
591
- <span class="cline-any cline-neutral">&nbsp;</span>
592
- <span class="cline-any cline-neutral">&nbsp;</span>
593
- <span class="cline-any cline-yes">2x</span>
562
+ <span class="cline-any cline-yes">5x</span>
594
563
  <span class="cline-any cline-yes">2x</span>
595
564
  <span class="cline-any cline-yes">2x</span>
596
565
  <span class="cline-any cline-yes">1x</span>
597
566
  <span class="cline-any cline-yes">1x</span>
598
567
  <span class="cline-any cline-yes">1x</span>
599
568
  <span class="cline-any cline-neutral">&nbsp;</span>
600
- <span class="cline-any cline-yes">2x</span>
601
- <span class="cline-any cline-neutral">&nbsp;</span>
602
- <span class="cline-any cline-neutral">&nbsp;</span>
603
- <span class="cline-any cline-yes">2x</span>
569
+ <span class="cline-any cline-yes">3x</span>
604
570
  <span class="cline-any cline-yes">2x</span>
605
571
  <span class="cline-any cline-yes">2x</span>
606
572
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -613,11 +579,8 @@
613
579
  <span class="cline-any cline-neutral">&nbsp;</span>
614
580
  <span class="cline-any cline-yes">1x</span>
615
581
  <span class="cline-any cline-neutral">&nbsp;</span>
616
- <span class="cline-any cline-yes">2x</span>
617
- <span class="cline-any cline-neutral">&nbsp;</span>
618
- <span class="cline-any cline-neutral">&nbsp;</span>
619
- <span class="cline-any cline-neutral">&nbsp;</span>
620
582
  <span class="cline-any cline-yes">1x</span>
583
+ <span class="cline-any cline-neutral">&nbsp;</span>
621
584
  <span class="cline-any cline-yes">1x</span>
622
585
  <span class="cline-any cline-yes">1x</span>
623
586
  <span class="cline-any cline-yes">1x</span>
@@ -642,15 +605,13 @@
642
605
  <span class="cline-any cline-neutral">&nbsp;</span>
643
606
  <span class="cline-any cline-yes">1x</span>
644
607
  <span class="cline-any cline-neutral">&nbsp;</span>
645
- <span class="cline-any cline-yes">1x</span>
646
- <span class="cline-any cline-neutral">&nbsp;</span>
647
608
  <span class="cline-any cline-neutral">&nbsp;</span>
648
609
  <span class="cline-any cline-neutral">&nbsp;</span>
649
610
  <span class="cline-any cline-neutral">&nbsp;</span>
650
611
  <span class="cline-any cline-yes">41x</span>
651
612
  <span class="cline-any cline-neutral">&nbsp;</span>
652
613
  <span class="cline-any cline-neutral">&nbsp;</span>
653
- <span class="cline-any cline-yes">17x</span>
614
+ <span class="cline-any cline-yes">40x</span>
654
615
  <span class="cline-any cline-yes">41x</span>
655
616
  <span class="cline-any cline-yes">41x</span>
656
617
  <span class="cline-any cline-yes">41x</span>
@@ -692,7 +653,7 @@
692
653
  <span class="cline-any cline-neutral">&nbsp;</span>
693
654
  <span class="cline-any cline-neutral">&nbsp;</span>
694
655
  <span class="cline-any cline-neutral">&nbsp;</span>
695
- <span class="cline-any cline-yes">17x</span>
656
+ <span class="cline-any cline-yes">36x</span>
696
657
  <span class="cline-any cline-no">&nbsp;</span>
697
658
  <span class="cline-any cline-no">&nbsp;</span>
698
659
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -709,7 +670,7 @@
709
670
  <span class="cline-any cline-neutral">&nbsp;</span>
710
671
  <span class="cline-any cline-neutral">&nbsp;</span>
711
672
  <span class="cline-any cline-neutral">&nbsp;</span>
712
- <span class="cline-any cline-yes">17x</span>
673
+ <span class="cline-any cline-yes">54x</span>
713
674
  <span class="cline-any cline-yes">36x</span>
714
675
  <span class="cline-any cline-neutral">&nbsp;</span>
715
676
  <span class="cline-any cline-yes">36x</span>
@@ -742,7 +703,7 @@
742
703
  <span class="cline-any cline-neutral">&nbsp;</span>
743
704
  <span class="cline-any cline-neutral">&nbsp;</span>
744
705
  <span class="cline-any cline-neutral">&nbsp;</span>
745
- <span class="cline-any cline-yes">17x</span>
706
+ <span class="cline-any cline-yes">18x</span>
746
707
  <span class="cline-any cline-no">&nbsp;</span>
747
708
  <span class="cline-any cline-no">&nbsp;</span>
748
709
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -764,7 +725,7 @@
764
725
  <span class="cline-any cline-neutral">&nbsp;</span>
765
726
  <span class="cline-any cline-neutral">&nbsp;</span>
766
727
  <span class="cline-any cline-neutral">&nbsp;</span>
767
- <span class="cline-any cline-yes">17x</span>
728
+ <span class="cline-any cline-yes">18x</span>
768
729
  <span class="cline-any cline-no">&nbsp;</span>
769
730
  <span class="cline-any cline-neutral">&nbsp;</span>
770
731
  <span class="cline-any cline-no">&nbsp;</span>
@@ -791,51 +752,50 @@
791
752
  <span class="cline-any cline-neutral">&nbsp;</span>
792
753
  <span class="cline-any cline-neutral">&nbsp;</span>
793
754
  <span class="cline-any cline-neutral">&nbsp;</span>
794
- <span class="cline-any cline-no">&nbsp;</span>
795
755
  <span class="cline-any cline-neutral">&nbsp;</span>
796
756
  <span class="cline-any cline-no">&nbsp;</span>
757
+ <span class="cline-any cline-no">&nbsp;</span>
797
758
  <span class="cline-any cline-neutral">&nbsp;</span>
798
759
  <span class="cline-any cline-neutral">&nbsp;</span>
799
- <span class="cline-any cline-no">&nbsp;</span>
800
760
  <span class="cline-any cline-neutral">&nbsp;</span>
801
761
  <span class="cline-any cline-neutral">&nbsp;</span>
802
762
  <span class="cline-any cline-neutral">&nbsp;</span>
803
- <span class="cline-any cline-no">&nbsp;</span>
804
- <span class="cline-any cline-no">&nbsp;</span>
805
763
  <span class="cline-any cline-neutral">&nbsp;</span>
806
764
  <span class="cline-any cline-neutral">&nbsp;</span>
807
765
  <span class="cline-any cline-no">&nbsp;</span>
808
- <span class="cline-any cline-no">&nbsp;</span>
809
766
  <span class="cline-any cline-neutral">&nbsp;</span>
810
767
  <span class="cline-any cline-no">&nbsp;</span>
811
768
  <span class="cline-any cline-neutral">&nbsp;</span>
812
769
  <span class="cline-any cline-neutral">&nbsp;</span>
813
770
  <span class="cline-any cline-no">&nbsp;</span>
814
771
  <span class="cline-any cline-neutral">&nbsp;</span>
815
- <span class="cline-any cline-no">&nbsp;</span>
816
- <span class="cline-any cline-neutral">&nbsp;</span>
817
772
  <span class="cline-any cline-neutral">&nbsp;</span>
818
773
  <span class="cline-any cline-neutral">&nbsp;</span>
819
- <span class="cline-any cline-yes">17x</span>
820
774
  <span class="cline-any cline-no">&nbsp;</span>
821
775
  <span class="cline-any cline-no">&nbsp;</span>
822
776
  <span class="cline-any cline-neutral">&nbsp;</span>
777
+ <span class="cline-any cline-neutral">&nbsp;</span>
823
778
  <span class="cline-any cline-no">&nbsp;</span>
824
779
  <span class="cline-any cline-no">&nbsp;</span>
825
780
  <span class="cline-any cline-neutral">&nbsp;</span>
826
- <span class="cline-any cline-neutral">&nbsp;</span>
827
781
  <span class="cline-any cline-no">&nbsp;</span>
782
+ <span class="cline-any cline-neutral">&nbsp;</span>
783
+ <span class="cline-any cline-neutral">&nbsp;</span>
828
784
  <span class="cline-any cline-no">&nbsp;</span>
829
785
  <span class="cline-any cline-neutral">&nbsp;</span>
830
786
  <span class="cline-any cline-no">&nbsp;</span>
831
787
  <span class="cline-any cline-neutral">&nbsp;</span>
832
788
  <span class="cline-any cline-neutral">&nbsp;</span>
833
789
  <span class="cline-any cline-neutral">&nbsp;</span>
790
+ <span class="cline-any cline-yes">18x</span>
834
791
  <span class="cline-any cline-no">&nbsp;</span>
835
792
  <span class="cline-any cline-no">&nbsp;</span>
836
793
  <span class="cline-any cline-neutral">&nbsp;</span>
837
794
  <span class="cline-any cline-no">&nbsp;</span>
795
+ <span class="cline-any cline-no">&nbsp;</span>
838
796
  <span class="cline-any cline-neutral">&nbsp;</span>
797
+ <span class="cline-any cline-no">&nbsp;</span>
798
+ <span class="cline-any cline-no">&nbsp;</span>
839
799
  <span class="cline-any cline-neutral">&nbsp;</span>
840
800
  <span class="cline-any cline-no">&nbsp;</span>
841
801
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -855,14 +815,16 @@
855
815
  <span class="cline-any cline-neutral">&nbsp;</span>
856
816
  <span class="cline-any cline-neutral">&nbsp;</span>
857
817
  <span class="cline-any cline-neutral">&nbsp;</span>
818
+ <span class="cline-any cline-neutral">&nbsp;</span>
858
819
  <span class="cline-any cline-no">&nbsp;</span>
859
820
  <span class="cline-any cline-no">&nbsp;</span>
860
- <span class="cline-any cline-neutral">&nbsp;</span>
861
821
  <span class="cline-any cline-no">&nbsp;</span>
862
822
  <span class="cline-any cline-neutral">&nbsp;</span>
863
823
  <span class="cline-any cline-neutral">&nbsp;</span>
824
+ <span class="cline-any cline-neutral">&nbsp;</span>
864
825
  <span class="cline-any cline-no">&nbsp;</span>
865
826
  <span class="cline-any cline-neutral">&nbsp;</span>
827
+ <span class="cline-any cline-neutral">&nbsp;</span>
866
828
  <span class="cline-any cline-no">&nbsp;</span>
867
829
  <span class="cline-any cline-neutral">&nbsp;</span>
868
830
  <span class="cline-any cline-no">&nbsp;</span>
@@ -871,7 +833,7 @@
871
833
  <span class="cline-any cline-neutral">&nbsp;</span>
872
834
  <span class="cline-any cline-neutral">&nbsp;</span>
873
835
  <span class="cline-any cline-neutral">&nbsp;</span>
874
- <span class="cline-any cline-yes">17x</span>
836
+ <span class="cline-any cline-yes">54x</span>
875
837
  <span class="cline-any cline-yes">36x</span>
876
838
  <span class="cline-any cline-yes">36x</span>
877
839
  <span class="cline-any cline-yes">36x</span>
@@ -883,7 +845,7 @@
883
845
  <span class="cline-any cline-neutral">&nbsp;</span>
884
846
  <span class="cline-any cline-neutral">&nbsp;</span>
885
847
  <span class="cline-any cline-neutral">&nbsp;</span>
886
- <span class="cline-any cline-yes">17x</span>
848
+ <span class="cline-any cline-yes">18x</span>
887
849
  <span class="cline-any cline-yes">4x</span>
888
850
  <span class="cline-any cline-yes">4x</span>
889
851
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -891,7 +853,7 @@
891
853
  <span class="cline-any cline-yes">4x</span>
892
854
  <span class="cline-any cline-neutral">&nbsp;</span>
893
855
  <span class="cline-any cline-neutral">&nbsp;</span>
894
- <span class="cline-any cline-yes">4x</span>
856
+ <span class="cline-any cline-neutral">&nbsp;</span>
895
857
  <span class="cline-any cline-yes">4x</span>
896
858
  <span class="cline-any cline-yes">4x</span>
897
859
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -952,6 +914,7 @@ import {
952
914
  objectStore,
953
915
  tenancy,
954
916
  db as dbCore,
917
+ env as coreEnv,
955
918
  } from "@budibase/backend-core"
956
919
  import { checkAnyUserExists } from "../../../utilities/users"
957
920
  import {
@@ -962,127 +925,106 @@ import {
962
925
  GoogleConfig,
963
926
  OIDCConfig,
964
927
  SettingsConfig,
965
- BBContext,
928
+ isGoogleConfig,
929
+ isOIDCConfig,
930
+ isSettingsConfig,
931
+ isSMTPConfig,
932
+ Ctx,
933
+ UserCtx,
966
934
  } from "@budibase/types"
967
935
  &nbsp;
968
936
  const getEventFns = async (db: Database, config: ConfigDoc) =&gt; {
969
937
  const fns = []
970
- const type = config.type
971
938
  &nbsp;
972
939
  let existing
973
940
  if (config._id) {
974
941
  existing = await db.get(config._id)
975
942
  }
976
943
  &nbsp;
977
- const ssoType = type as SSOType
978
944
  if (!existing) {
979
- switch (config.type) {
980
- case ConfigType.SMTP: {
981
- fns.push(events.email.SMTPCreated)
982
- break
945
+ if (isSMTPConfig(config)) {
946
+ fns.push(events.email.SMTPCreated)
947
+ } else if (isGoogleConfig(config)) {
948
+ fns.push(() =&gt; events.auth.SSOCreated(ConfigType.GOOGLE))
949
+ if (config.config.activated) {
950
+ fns.push(() =&gt; events.auth.SSOActivated(ConfigType.GOOGLE))
983
951
  }
984
- case ConfigType.GOOGLE: {
985
- const googleCfg = config as GoogleConfig
986
- fns.push(() =&gt; events.auth.SSOCreated(ssoType))
987
- if (googleCfg.config.activated) {
988
- fns.push(() =&gt; events.auth.SSOActivated(ssoType))
989
- }
990
- break
952
+ } else if (isOIDCConfig(config)) {
953
+ fns.push(() =&gt; events.auth.SSOCreated(ConfigType.OIDC))
954
+ if (config.config.configs[0].activated) {
955
+ fns.push(() =&gt; events.auth.SSOActivated(ConfigType.OIDC))
991
956
  }
992
- case ConfigType.OIDC: {
993
- const oidcCfg = config as OIDCConfig
994
- fns.push(() =&gt; events.auth.SSOCreated(ssoType))
995
- if (oidcCfg.config.configs[0].activated) {
996
- fns.push(() =&gt; events.auth.SSOActivated(ssoType))
997
- }
998
- break
957
+ } else if (isSettingsConfig(config)) {
958
+ // company
959
+ const company = config.config.company
960
+ if (company &amp;&amp; company !== "Budibase") {
961
+ fns.push(events.org.nameUpdated)
999
962
  }
1000
- case ConfigType.SETTINGS: {
1001
- // company
1002
- const settingsCfg = config as SettingsConfig
1003
- const company = settingsCfg.config.company
1004
- if (company &amp;&amp; company !== "Budibase") {
1005
- fns.push(events.org.nameUpdated)
1006
- }
1007
963
  &nbsp;
1008
- // logo
1009
- const logoUrl = settingsCfg.config.logoUrl
1010
- if (logoUrl) {
1011
- fns.push(events.org.logoUpdated)
1012
- }
964
+ // logo
965
+ const logoUrl = config.config.logoUrl
966
+ if (logoUrl) {
967
+ fns.push(events.org.logoUpdated)
968
+ }
1013
969
  &nbsp;
1014
- // platform url
1015
- const platformUrl = settingsCfg.config.platformUrl
1016
- if (
1017
- platformUrl &amp;&amp;
1018
- platformUrl !== "http://localhost:10000" &amp;&amp;
1019
- env.SELF_HOSTED
1020
- ) {
1021
- fns.push(events.org.platformURLUpdated)
1022
- }
1023
- break
970
+ // platform url
971
+ const platformUrl = config.config.platformUrl
972
+ if (
973
+ platformUrl &amp;&amp;
974
+ platformUrl !== "http://localhost:10000" &amp;&amp;
975
+ env.SELF_HOSTED
976
+ ) {
977
+ fns.push(events.org.platformURLUpdated)
1024
978
  }
1025
979
  }
1026
980
  } else {
1027
- switch (config.type) {
1028
- case ConfigType.SMTP: {
1029
- fns.push(events.email.SMTPUpdated)
1030
- break
981
+ if (isSMTPConfig(config)) {
982
+ fns.push(events.email.SMTPUpdated)
983
+ } else if (isGoogleConfig(config)) {
984
+ fns.push(() =&gt; events.auth.SSOUpdated(ConfigType.GOOGLE))
985
+ if (!existing.config.activated &amp;&amp; config.config.activated) {
986
+ fns.push(() =&gt; events.auth.SSOActivated(ConfigType.GOOGLE))
987
+ } else if (existing.config.activated &amp;&amp; !config.config.activated) {
988
+ fns.push(() =&gt; events.auth.SSODeactivated(ConfigType.GOOGLE))
1031
989
  }
1032
- case ConfigType.GOOGLE: {
1033
- const googleCfg = config as GoogleConfig
1034
- fns.push(() =&gt; events.auth.SSOUpdated(ssoType))
1035
- if (!existing.config.activated &amp;&amp; googleCfg.config.activated) {
1036
- fns.push(() =&gt; events.auth.SSOActivated(ssoType))
1037
- } else if (existing.config.activated &amp;&amp; !googleCfg.config.activated) {
1038
- fns.push(() =&gt; events.auth.SSODeactivated(ssoType))
1039
- }
1040
- break
990
+ } else if (isOIDCConfig(config)) {
991
+ fns.push(() =&gt; events.auth.SSOUpdated(ConfigType.OIDC))
992
+ if (
993
+ !existing.config.configs[0].activated &amp;&amp;
994
+ config.config.configs[0].activated
995
+ ) {
996
+ fns.push(() =&gt; events.auth.SSOActivated(ConfigType.OIDC))
997
+ } else if (
998
+ existing.config.configs[0].activated &amp;&amp;
999
+ !config.config.configs[0].activated
1000
+ ) {
1001
+ fns.push(() =&gt; events.auth.SSODeactivated(ConfigType.OIDC))
1041
1002
  }
1042
- case ConfigType.OIDC: {
1043
- const oidcCfg = config as OIDCConfig
1044
- fns.push(() =&gt; events.auth.SSOUpdated(ssoType))
1045
- if (
1046
- !existing.config.configs[0].activated &amp;&amp;
1047
- oidcCfg.config.configs[0].activated
1048
- ) {
1049
- fns.push(() =&gt; events.auth.SSOActivated(ssoType))
1050
- } else if (
1051
- existing.config.configs[0].activated &amp;&amp;
1052
- !oidcCfg.config.configs[0].activated
1053
- ) {
1054
- fns.push(() =&gt; events.auth.SSODeactivated(ssoType))
1055
- }
1056
- break
1003
+ } else if (isSettingsConfig(config)) {
1004
+ // company
1005
+ const existingCompany = existing.config.company
1006
+ const company = config.config.company
1007
+ if (company &amp;&amp; company !== "Budibase" &amp;&amp; existingCompany !== company) {
1008
+ fns.push(events.org.nameUpdated)
1057
1009
  }
1058
- case ConfigType.SETTINGS: {
1059
- // company
1060
- const settingsCfg = config as SettingsConfig
1061
- const existingCompany = existing.config.company
1062
- const company = settingsCfg.config.company
1063
- if (company &amp;&amp; company !== "Budibase" &amp;&amp; existingCompany !== company) {
1064
- fns.push(events.org.nameUpdated)
1065
- }
1066
1010
  &nbsp;
1067
- // logo
1068
- const existingLogoUrl = existing.config.logoUrl
1069
- const logoUrl = settingsCfg.config.logoUrl
1070
- if (logoUrl &amp;&amp; existingLogoUrl !== logoUrl) {
1071
- fns.push(events.org.logoUpdated)
1072
- }
1011
+ // logo
1012
+ const existingLogoUrl = existing.config.logoUrl
1013
+ const logoUrl = config.config.logoUrl
1014
+ if (logoUrl &amp;&amp; existingLogoUrl !== logoUrl) {
1015
+ fns.push(events.org.logoUpdated)
1016
+ }
1073
1017
  &nbsp;
1074
- // platform url
1075
- const existingPlatformUrl = existing.config.platformUrl
1076
- const platformUrl = settingsCfg.config.platformUrl
1077
- if (
1078
- platformUrl &amp;&amp;
1079
- platformUrl !== "http://localhost:10000" &amp;&amp;
1080
- existingPlatformUrl !== platformUrl &amp;&amp;
1081
- env.SELF_HOSTED
1082
- ) {
1083
- fns.push(events.org.platformURLUpdated)
1084
- }
1085
- break
1018
+ // platform url
1019
+ const existingPlatformUrl = existing.config.platformUrl
1020
+ const platformUrl = config.config.platformUrl
1021
+ if (
1022
+ platformUrl &amp;&amp;
1023
+ platformUrl !== "http://localhost:10000" &amp;&amp;
1024
+ existingPlatformUrl !== platformUrl &amp;&amp;
1025
+ env.SELF_HOSTED
1026
+ ) {
1027
+ fns.push(events.org.platformURLUpdated)
1086
1028
  }
1087
1029
  }
1088
1030
  }
@@ -1090,7 +1032,7 @@ const getEventFns = async (db: Database, config: ConfigDoc) =&gt; {
1090
1032
  return fns
1091
1033
  }
1092
1034
  &nbsp;
1093
- export async function save(ctx: BBContext) {
1035
+ export async function save(ctx: UserCtx) {
1094
1036
  const db = tenancy.getGlobalDB()
1095
1037
  const { type, workspace, user, config } = ctx.request.body
1096
1038
  let eventFns = await getEventFns(db, ctx.request.body)
@@ -1132,7 +1074,7 @@ export async function save(ctx: BBContext) {
1132
1074
  }
1133
1075
  }
1134
1076
  &nbsp;
1135
- export async function <span class="fstat-no" title="function not covered" >fetch(</span>ctx: BBContext) {
1077
+ export async function <span class="fstat-no" title="function not covered" >fetch(</span>ctx: UserCtx) {
1136
1078
  const db = <span class="cstat-no" title="statement not covered" >tenancy.getGlobalDB()</span>
1137
1079
  const response = <span class="cstat-no" title="statement not covered" >await db.allDocs(</span>
1138
1080
  dbCore.getConfigParams(
@@ -1142,18 +1084,18 @@ export async function <span class="fstat-no" title="function not covered" >fetch
1142
1084
  }
1143
1085
  )
1144
1086
  )
1145
- <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>
1087
+ <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>
1146
1088
  }
1147
1089
  &nbsp;
1148
1090
  /**
1149
1091
  * Gets the most granular config for a particular configuration type.
1150
1092
  * The hierarchy is type -&gt; workspace -&gt; user.
1151
1093
  */
1152
- export async function find(ctx: BBContext) {
1094
+ export async function find(ctx: UserCtx) {
1153
1095
  const db = tenancy.getGlobalDB()
1154
1096
  &nbsp;
1155
1097
  const { userId, workspaceId } = ctx.query
1156
- <span class="missing-if-branch" title="if path not taken" >I</span>if (workspaceId &amp;&amp; <span class="branch-1 cbranch-no" title="branch not covered" >userId)</span> {
1098
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (workspaceId &amp;&amp; <span class="branch-1 cbranch-no" title="branch not covered" >userId) {</span>
1157
1099
  const workspace = <span class="cstat-no" title="statement not covered" >await db.get(workspaceId as string)</span>
1158
1100
  const userInWorkspace = <span class="cstat-no" title="statement not covered" >workspace.users.some(</span>
1159
1101
  <span class="fstat-no" title="function not covered" > (w</span>orkspaceUser: any) =&gt; <span class="cstat-no" title="statement not covered" >workspaceUser === userId</span>
@@ -1182,18 +1124,18 @@ export async function find(ctx: BBContext) {
1182
1124
  }
1183
1125
  }
1184
1126
  &nbsp;
1185
- export async function <span class="fstat-no" title="function not covered" >publicOidc(</span>ctx: BBContext) {
1127
+ export async function <span class="fstat-no" title="function not covered" >publicOidc(</span>ctx: Ctx) {
1186
1128
  const db = <span class="cstat-no" title="statement not covered" >tenancy.getGlobalDB()</span>
1187
1129
  <span class="cstat-no" title="statement not covered" > try {</span>
1188
1130
  // Find the config with the most granular scope based on context
1189
- const oidcConfig = <span class="cstat-no" title="statement not covered" >await dbCore.getScopedFullConfig(db, {</span>
1131
+ const oidcConfig: OIDCConfig = <span class="cstat-no" title="statement not covered" >await dbCore.getScopedFullConfig(db, {</span>
1190
1132
  type: ConfigType.OIDC,
1191
1133
  })
1192
1134
  &nbsp;
1193
1135
  <span class="cstat-no" title="statement not covered" > if (!oidcConfig) {</span>
1194
1136
  <span class="cstat-no" title="statement not covered" > ctx.body = {}</span>
1195
1137
  } else {
1196
- <span class="cstat-no" title="statement not covered" > ctx.body = oidcConfig.config.configs.map(<span class="fstat-no" title="function not covered" >(c</span>onfig: any) =&gt; (<span class="cstat-no" title="statement not covered" >{</span></span>
1138
+ <span class="cstat-no" title="statement not covered" > ctx.body = oidcConfig.config.configs.map(<span class="fstat-no" title="function not covered" >config =&gt; (<span class="cstat-no" title="statement not covered" >{</span></span></span>
1197
1139
  logo: config.logo,
1198
1140
  name: config.name,
1199
1141
  uuid: config.uuid,
@@ -1204,7 +1146,7 @@ export async function <span class="fstat-no" title="function not covered" >publi
1204
1146
  }
1205
1147
  }
1206
1148
  &nbsp;
1207
- export async function <span class="fstat-no" title="function not covered" >publicSettings(</span>ctx: BBContext) {
1149
+ export async function <span class="fstat-no" title="function not covered" >publicSettings(</span>ctx: Ctx) {
1208
1150
  const db = <span class="cstat-no" title="statement not covered" >tenancy.getGlobalDB()</span>
1209
1151
  &nbsp;
1210
1152
  <span class="cstat-no" title="statement not covered" > try {</span>
@@ -1229,6 +1171,16 @@ export async function <span class="fstat-no" title="function not covered" >publi
1229
1171
  } else {
1230
1172
  <span class="cstat-no" title="statement not covered" > config = publicConfig</span>
1231
1173
  }
1174
+ &nbsp;
1175
+ // enrich the logo url
1176
+ // empty url means deleted
1177
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (config.config.logoUrl &amp;&amp; config.config.logoUrl !== "") {</span>
1178
+ <span class="cstat-no" title="statement not covered" > config.config.logoUrl = objectStore.getGlobalFileUrl(</span>
1179
+ "settings",
1180
+ "logoUrl",
1181
+ config.config.logoUrlEtag
1182
+ )
1183
+ }
1232
1184
  &nbsp;
1233
1185
  // google button flag
1234
1186
  <span class="cstat-no" title="statement not covered" > if (googleConfig &amp;&amp; googleConfig.config) {</span>
@@ -1256,28 +1208,17 @@ export async function <span class="fstat-no" title="function not covered" >publi
1256
1208
  }
1257
1209
  }
1258
1210
  &nbsp;
1259
- export async function <span class="fstat-no" title="function not covered" >upload(</span>ctx: BBContext) {
1260
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (ctx.request.files == null || ctx.request.files.file.length &gt; 1) {</span>
1211
+ export async function <span class="fstat-no" title="function not covered" >upload(</span>ctx: UserCtx) {
1212
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (ctx.request.files == null || Array.isArray(ctx.request.files.file)) {</span>
1261
1213
  <span class="cstat-no" title="statement not covered" > ctx.throw(400, "One file must be uploaded.")</span>
1262
1214
  }
1263
- const file = <span class="cstat-no" title="statement not covered" >ctx.request.files.file</span>
1215
+ const file = <span class="cstat-no" title="statement not covered" >ctx.request.files.file </span>as any
1264
1216
  const { type, name } = <span class="cstat-no" title="statement not covered" >ctx.params</span>
1265
1217
  &nbsp;
1266
- let bucket
1267
- <span class="cstat-no" title="statement not covered" > if (env.SELF_HOSTED) {</span>
1268
- <span class="cstat-no" title="statement not covered" > bucket = objectStore.ObjectStoreBuckets.GLOBAL</span>
1269
- } else {
1270
- <span class="cstat-no" title="statement not covered" > bucket = objectStore.ObjectStoreBuckets.GLOBAL_CLOUD</span>
1271
- }
1218
+ let bucket = <span class="cstat-no" title="statement not covered" >coreEnv.GLOBAL_BUCKET_NAME</span>
1219
+ const key = <span class="cstat-no" title="statement not covered" >objectStore.getGlobalFileS3Key(type, name)</span>
1272
1220
  &nbsp;
1273
- let key
1274
- <span class="cstat-no" title="statement not covered" > if (env.MULTI_TENANCY) {</span>
1275
- <span class="cstat-no" title="statement not covered" > key = `${tenancy.getTenantId()}/${type}/${name}`</span>
1276
- } else {
1277
- <span class="cstat-no" title="statement not covered" > key = `${type}/${name}`</span>
1278
- }
1279
- &nbsp;
1280
- <span class="cstat-no" title="statement not covered" > await objectStore.upload({</span>
1221
+ const result = <span class="cstat-no" title="statement not covered" >await objectStore.upload({</span>
1281
1222
  bucket,
1282
1223
  filename: key,
1283
1224
  path: file.path,
@@ -1294,24 +1235,26 @@ export async function <span class="fstat-no" title="function not covered" >uploa
1294
1235
  config: {},
1295
1236
  }
1296
1237
  }
1297
- let url
1298
- <span class="cstat-no" title="statement not covered" > if (env.SELF_HOSTED) {</span>
1299
- <span class="cstat-no" title="statement not covered" > url = `/${bucket}/${key}`</span>
1300
- } else {
1301
- <span class="cstat-no" title="statement not covered" > url = `${env.CDN_URL}/${key}`</span>
1238
+ &nbsp;
1239
+ // save the Etag for cache bursting
1240
+ const etag = <span class="cstat-no" title="statement not covered" >result.ETag</span>
1241
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (etag) {</span>
1242
+ <span class="cstat-no" title="statement not covered" > cfgStructure.config[`${name}Etag`] = etag.replace(/"/g, "")</span>
1302
1243
  }
1303
1244
  &nbsp;
1304
- <span class="cstat-no" title="statement not covered" > cfgStructure.config[`${name}`] = url</span>
1305
- // write back to db with url updated
1245
+ // save the file key
1246
+ <span class="cstat-no" title="statement not covered" > cfgStructure.config[`${name}`] = key</span>
1247
+ &nbsp;
1248
+ // write back to db
1306
1249
  <span class="cstat-no" title="statement not covered" > await db.put(cfgStructure)</span>
1307
1250
  &nbsp;
1308
1251
  <span class="cstat-no" title="statement not covered" > ctx.body = {</span>
1309
1252
  message: "File has been uploaded and url stored to config.",
1310
- url,
1253
+ url: objectStore.getGlobalFileUrl(type, name, etag),
1311
1254
  }
1312
1255
  }
1313
1256
  &nbsp;
1314
- export async function destroy(ctx: BBContext) {
1257
+ export async function destroy(ctx: UserCtx) {
1315
1258
  const db = tenancy.getGlobalDB()
1316
1259
  const { id, rev } = ctx.params
1317
1260
  try {
@@ -1323,7 +1266,7 @@ export async function destroy(ctx: BBContext) {
1323
1266
  }
1324
1267
  }
1325
1268
  &nbsp;
1326
- export async function configChecklist(ctx: BBContext) {
1269
+ export async function configChecklist(ctx: Ctx) {
1327
1270
  const db = tenancy.getGlobalDB()
1328
1271
  const tenantId = tenancy.getTenantId()
1329
1272
  &nbsp;
@@ -1390,7 +1333,7 @@ export async function configChecklist(ctx: BBContext) {
1390
1333
  <div class='footer quiet pad2 space-top1 center small'>
1391
1334
  Code coverage generated by
1392
1335
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1393
- at Thu Feb 02 2023 11:54:57 GMT+0000 (Coordinated Universal Time)
1336
+ at Sun Feb 05 2023 23:57:08 GMT+0000 (Coordinated Universal Time)
1394
1337
  </div>
1395
1338
  <script src="../../../../prettify.js"></script>
1396
1339
  <script>