@budibase/worker 2.2.26 → 2.2.27-alpha.1

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 (172) hide show
  1. package/Dockerfile +1 -1
  2. package/__mocks__/node-fetch.ts +23 -0
  3. package/coverage/clover.xml +1423 -1379
  4. package/coverage/coverage-final.json +83 -77
  5. package/coverage/lcov-report/index.html +140 -140
  6. package/coverage/lcov-report/src/api/controllers/global/auth.ts.html +52 -52
  7. package/coverage/lcov-report/src/api/controllers/global/configs.ts.html +167 -224
  8. package/coverage/lcov-report/src/api/controllers/global/email.ts.html +4 -4
  9. package/coverage/lcov-report/src/api/controllers/global/events.ts.html +136 -0
  10. package/coverage/lcov-report/src/api/controllers/global/index.html +83 -68
  11. package/coverage/lcov-report/src/api/controllers/global/license.ts.html +16 -16
  12. package/coverage/lcov-report/src/api/controllers/global/roles.ts.html +69 -69
  13. package/coverage/lcov-report/src/api/controllers/global/self.ts.html +20 -20
  14. package/coverage/lcov-report/src/api/controllers/global/templates.ts.html +54 -54
  15. package/coverage/lcov-report/src/api/controllers/global/users.ts.html +83 -44
  16. package/coverage/lcov-report/src/api/controllers/global/workspaces.ts.html +9 -9
  17. package/coverage/lcov-report/src/api/controllers/system/accounts.ts.html +5 -5
  18. package/coverage/lcov-report/src/api/controllers/system/environment.ts.html +4 -4
  19. package/coverage/lcov-report/src/api/controllers/system/index.html +11 -11
  20. package/coverage/lcov-report/src/api/controllers/system/migrations.ts.html +5 -5
  21. package/coverage/lcov-report/src/api/controllers/system/restore.ts.html +4 -4
  22. package/coverage/lcov-report/src/api/controllers/system/status.ts.html +5 -5
  23. package/coverage/lcov-report/src/api/controllers/system/tenants.ts.html +7 -7
  24. package/coverage/lcov-report/src/api/index.html +1 -1
  25. package/coverage/lcov-report/src/api/index.ts.html +42 -30
  26. package/coverage/lcov-report/src/api/routes/global/auth.ts.html +14 -14
  27. package/coverage/lcov-report/src/api/routes/global/configs.ts.html +25 -25
  28. package/coverage/lcov-report/src/api/routes/global/email.ts.html +13 -13
  29. package/coverage/lcov-report/src/api/routes/global/events.ts.html +109 -0
  30. package/coverage/lcov-report/src/api/routes/global/index.html +37 -22
  31. package/coverage/lcov-report/src/api/routes/global/license.ts.html +9 -9
  32. package/coverage/lcov-report/src/api/routes/global/roles.ts.html +10 -10
  33. package/coverage/lcov-report/src/api/routes/global/self.ts.html +11 -11
  34. package/coverage/lcov-report/src/api/routes/global/templates.ts.html +14 -14
  35. package/coverage/lcov-report/src/api/routes/global/users.ts.html +62 -20
  36. package/coverage/lcov-report/src/api/routes/global/workspaces.ts.html +12 -12
  37. package/coverage/lcov-report/src/api/routes/index.html +7 -7
  38. package/coverage/lcov-report/src/api/routes/index.ts.html +29 -23
  39. package/coverage/lcov-report/src/api/routes/system/accounts.ts.html +10 -10
  40. package/coverage/lcov-report/src/api/routes/system/environment.ts.html +9 -9
  41. package/coverage/lcov-report/src/api/routes/system/index.html +15 -15
  42. package/coverage/lcov-report/src/api/routes/system/migrations.ts.html +10 -10
  43. package/coverage/lcov-report/src/api/routes/system/restore.ts.html +9 -9
  44. package/coverage/lcov-report/src/api/routes/system/status.ts.html +9 -9
  45. package/coverage/lcov-report/src/api/routes/system/tenants.ts.html +10 -10
  46. package/coverage/lcov-report/src/api/routes/validation/index.html +3 -3
  47. package/coverage/lcov-report/src/api/routes/validation/index.ts.html +2 -2
  48. package/coverage/lcov-report/src/api/routes/validation/users.ts.html +14 -14
  49. package/coverage/lcov-report/src/constants/index.html +17 -17
  50. package/coverage/lcov-report/src/constants/index.ts.html +77 -53
  51. package/coverage/lcov-report/src/constants/templates/index.html +18 -18
  52. package/coverage/lcov-report/src/constants/templates/index.ts.html +42 -42
  53. package/coverage/lcov-report/src/db/index.html +17 -17
  54. package/coverage/lcov-report/src/db/index.ts.html +18 -18
  55. package/coverage/lcov-report/src/environment.ts.html +45 -30
  56. package/coverage/lcov-report/src/index.html +27 -27
  57. package/coverage/lcov-report/src/index.ts.html +55 -55
  58. package/coverage/lcov-report/src/middleware/cloudRestricted.ts.html +5 -5
  59. package/coverage/lcov-report/src/middleware/index.html +1 -1
  60. package/coverage/lcov-report/src/migrations/functions/globalInfoSyncUsers.ts.html +9 -9
  61. package/coverage/lcov-report/src/migrations/functions/index.html +11 -11
  62. package/coverage/lcov-report/src/migrations/index.html +15 -15
  63. package/coverage/lcov-report/src/migrations/index.ts.html +27 -27
  64. package/coverage/lcov-report/src/sdk/accounts/accounts.ts.html +13 -13
  65. package/coverage/lcov-report/src/sdk/accounts/index.html +13 -13
  66. package/coverage/lcov-report/src/sdk/accounts/index.ts.html +2 -2
  67. package/coverage/lcov-report/src/sdk/index.html +5 -5
  68. package/coverage/lcov-report/src/sdk/index.ts.html +6 -6
  69. package/coverage/lcov-report/src/sdk/users/events.ts.html +82 -58
  70. package/coverage/lcov-report/src/sdk/users/index.html +28 -28
  71. package/coverage/lcov-report/src/sdk/users/index.ts.html +2 -2
  72. package/coverage/lcov-report/src/sdk/users/users.ts.html +174 -120
  73. package/coverage/lcov-report/src/tests/TestConfiguration.ts.html +221 -107
  74. package/coverage/lcov-report/src/tests/api/accounts.ts.html +7 -7
  75. package/coverage/lcov-report/src/tests/api/auth.ts.html +25 -13
  76. package/coverage/lcov-report/src/tests/api/base.ts.html +5 -5
  77. package/coverage/lcov-report/src/tests/api/configs.ts.html +11 -11
  78. package/coverage/lcov-report/src/tests/api/email.ts.html +6 -6
  79. package/coverage/lcov-report/src/tests/api/environment.ts.html +6 -6
  80. package/coverage/lcov-report/src/tests/api/groups.ts.html +163 -0
  81. package/coverage/lcov-report/src/tests/api/index.html +91 -31
  82. package/coverage/lcov-report/src/tests/api/index.ts.html +62 -29
  83. package/coverage/lcov-report/src/tests/api/license.ts.html +136 -0
  84. package/coverage/lcov-report/src/tests/api/migrations.ts.html +8 -8
  85. package/coverage/lcov-report/src/tests/api/restore.ts.html +7 -7
  86. package/coverage/lcov-report/src/tests/api/roles.ts.html +181 -0
  87. package/coverage/lcov-report/src/tests/api/self.ts.html +7 -7
  88. package/coverage/lcov-report/src/tests/api/status.ts.html +6 -6
  89. package/coverage/lcov-report/src/tests/api/templates.ts.html +175 -0
  90. package/coverage/lcov-report/src/tests/api/tenants.ts.html +10 -10
  91. package/coverage/lcov-report/src/tests/api/users.ts.html +30 -27
  92. package/coverage/lcov-report/src/tests/controllers.ts.html +14 -14
  93. package/coverage/lcov-report/src/tests/index.html +34 -34
  94. package/coverage/lcov-report/src/tests/index.ts.html +19 -55
  95. package/coverage/lcov-report/src/tests/mocks/{email.js.html → email.ts.html} +5 -5
  96. package/coverage/lcov-report/src/tests/mocks/index.html +6 -6
  97. package/coverage/lcov-report/src/tests/mocks/index.ts.html +10 -10
  98. package/coverage/lcov-report/src/tests/structures/configs.ts.html +11 -11
  99. package/coverage/lcov-report/src/tests/structures/groups.ts.html +15 -15
  100. package/coverage/lcov-report/src/tests/structures/index.html +26 -26
  101. package/coverage/lcov-report/src/tests/structures/index.ts.html +16 -22
  102. package/coverage/lcov-report/src/tests/structures/users.ts.html +16 -16
  103. package/coverage/lcov-report/src/utilities/appService.ts.html +45 -18
  104. package/coverage/lcov-report/src/utilities/email.ts.html +28 -28
  105. package/coverage/lcov-report/src/utilities/fileSystem.ts.html +4 -4
  106. package/coverage/lcov-report/src/utilities/index.html +27 -27
  107. package/coverage/lcov-report/src/utilities/index.ts.html +2 -2
  108. package/coverage/lcov-report/src/utilities/redis.ts.html +20 -20
  109. package/coverage/lcov-report/src/utilities/templates.ts.html +6 -6
  110. package/coverage/lcov-report/src/utilities/users.ts.html +7 -7
  111. package/coverage/lcov.info +2826 -2609
  112. package/jest-testcontainers-config.js +8 -0
  113. package/jest.config.ts +10 -4
  114. package/package.json +11 -7
  115. package/scripts/dev/manage.js +2 -2
  116. package/src/api/controllers/global/auth.ts +1 -1
  117. package/src/api/controllers/global/configs.ts +112 -131
  118. package/src/api/controllers/global/events.ts +17 -0
  119. package/src/api/controllers/global/users.ts +14 -1
  120. package/src/api/index.ts +4 -0
  121. package/src/api/routes/global/auth.ts +1 -1
  122. package/src/api/routes/global/configs.ts +7 -7
  123. package/src/api/routes/global/email.ts +1 -1
  124. package/src/api/routes/global/events.ts +8 -0
  125. package/src/api/routes/global/license.ts +1 -1
  126. package/src/api/routes/global/roles.ts +1 -1
  127. package/src/api/routes/global/self.ts +1 -1
  128. package/src/api/routes/global/templates.ts +1 -1
  129. package/src/api/routes/global/tests/auth.spec.ts +30 -22
  130. package/src/api/routes/global/tests/configs.spec.ts +114 -94
  131. package/src/api/routes/global/tests/groups.spec.ts +58 -0
  132. package/src/api/routes/global/tests/license.spec.ts +0 -2
  133. package/src/api/routes/global/tests/roles.spec.ts +71 -5
  134. package/src/api/routes/global/tests/templates.spec.ts +81 -9
  135. package/src/api/routes/global/tests/users.spec.ts +35 -36
  136. package/src/api/routes/global/users.ts +15 -1
  137. package/src/api/routes/global/workspaces.ts +1 -1
  138. package/src/api/routes/index.ts +2 -0
  139. package/src/api/routes/system/accounts.ts +1 -1
  140. package/src/api/routes/system/environment.ts +1 -1
  141. package/src/api/routes/system/migrations.ts +1 -1
  142. package/src/api/routes/system/restore.ts +1 -1
  143. package/src/api/routes/system/status.ts +1 -1
  144. package/src/api/routes/system/tenants.ts +1 -1
  145. package/src/api/routes/system/tests/environment.spec.ts +1 -1
  146. package/src/constants/index.ts +13 -5
  147. package/src/db/index.ts +1 -1
  148. package/src/environment.ts +6 -1
  149. package/src/index.ts +5 -5
  150. package/src/middleware/cloudRestricted.ts +1 -1
  151. package/src/sdk/users/events.ts +8 -0
  152. package/src/sdk/users/users.ts +23 -5
  153. package/src/tests/TestConfiguration.ts +52 -14
  154. package/src/tests/api/auth.ts +7 -3
  155. package/src/tests/api/configs.ts +2 -2
  156. package/src/tests/api/groups.ts +26 -0
  157. package/src/tests/api/index.ts +12 -1
  158. package/src/tests/api/license.ts +17 -0
  159. package/src/tests/api/roles.ts +32 -0
  160. package/src/tests/api/templates.ts +30 -0
  161. package/src/tests/api/users.ts +4 -3
  162. package/src/tests/index.ts +6 -18
  163. package/src/tests/jestEnv.ts +11 -0
  164. package/src/tests/jestSetup.ts +8 -15
  165. package/src/tests/mocks/{email.js → email.ts} +1 -1
  166. package/src/tests/mocks/index.ts +4 -4
  167. package/src/tests/structures/configs.ts +2 -2
  168. package/src/tests/structures/groups.ts +1 -1
  169. package/src/tests/structures/index.ts +3 -5
  170. package/src/tests/structures/users.ts +1 -1
  171. package/src/utilities/appService.ts +12 -3
  172. package/tsconfig.json +2 -2
@@ -23,9 +23,9 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">14.28% </span>
26
+ <span class="strong">91.17% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>5/35</span>
28
+ <span class='fraction'>31/34</span>
29
29
  </div>
30
30
 
31
31
 
@@ -37,16 +37,16 @@
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">0% </span>
40
+ <span class="strong">100% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>0/5</span>
42
+ <span class='fraction'>7/7</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">14.7% </span>
47
+ <span class="strong">91.17% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>5/34</span>
49
+ <span class='fraction'>31/34</span>
50
50
  </div>
51
51
 
52
52
 
@@ -61,7 +61,7 @@
61
61
  </div>
62
62
  </template>
63
63
  </div>
64
- <div class='status-line low'></div>
64
+ <div class='status-line high'></div>
65
65
  <pre><table class="coverage">
66
66
  <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
67
  <a name='L2'></a><a href='#L2'>2</a>
@@ -129,45 +129,45 @@
129
129
  <a name='L64'></a><a href='#L64'>64</a>
130
130
  <a name='L65'></a><a href='#L65'>65</a>
131
131
  <a name='L66'></a><a href='#L66'>66</a>
132
- <a name='L67'></a><a href='#L67'>67</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">17x</span>
132
+ <a name='L67'></a><a href='#L67'>67</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
133
133
  <span class="cline-any cline-neutral">&nbsp;</span>
134
134
  <span class="cline-any cline-neutral">&nbsp;</span>
135
135
  <span class="cline-any cline-neutral">&nbsp;</span>
136
136
  <span class="cline-any cline-neutral">&nbsp;</span>
137
137
  <span class="cline-any cline-neutral">&nbsp;</span>
138
+ <span class="cline-any cline-yes">18x</span>
138
139
  <span class="cline-any cline-neutral">&nbsp;</span>
140
+ <span class="cline-any cline-yes">18x</span>
139
141
  <span class="cline-any cline-neutral">&nbsp;</span>
140
- <span class="cline-any cline-yes">17x</span>
142
+ <span class="cline-any cline-yes">18x</span>
143
+ <span class="cline-any cline-yes">1x</span>
141
144
  <span class="cline-any cline-neutral">&nbsp;</span>
142
- <span class="cline-any cline-yes">17x</span>
143
- <span class="cline-any cline-no">&nbsp;</span>
145
+ <span class="cline-any cline-yes">1x</span>
146
+ <span class="cline-any cline-yes">1x</span>
147
+ <span class="cline-any cline-yes">1x</span>
144
148
  <span class="cline-any cline-neutral">&nbsp;</span>
145
- <span class="cline-any cline-no">&nbsp;</span>
146
- <span class="cline-any cline-no">&nbsp;</span>
147
- <span class="cline-any cline-no">&nbsp;</span>
148
- <span class="cline-any cline-neutral">&nbsp;</span>
149
- <span class="cline-any cline-no">&nbsp;</span>
149
+ <span class="cline-any cline-yes">1x</span>
150
150
  <span class="cline-any cline-neutral">&nbsp;</span>
151
- <span class="cline-any cline-no">&nbsp;</span>
152
- <span class="cline-any cline-no">&nbsp;</span>
153
- <span class="cline-any cline-no">&nbsp;</span>
154
- <span class="cline-any cline-no">&nbsp;</span>
155
- <span class="cline-any cline-no">&nbsp;</span>
151
+ <span class="cline-any cline-yes">1x</span>
152
+ <span class="cline-any cline-yes">1x</span>
153
+ <span class="cline-any cline-yes">1x</span>
154
+ <span class="cline-any cline-yes">1x</span>
155
+ <span class="cline-any cline-yes">1x</span>
156
156
  <span class="cline-any cline-neutral">&nbsp;</span>
157
157
  <span class="cline-any cline-neutral">&nbsp;</span>
158
158
  <span class="cline-any cline-neutral">&nbsp;</span>
159
159
  <span class="cline-any cline-neutral">&nbsp;</span>
160
160
  <span class="cline-any cline-neutral">&nbsp;</span>
161
161
  <span class="cline-any cline-neutral">&nbsp;</span>
162
- <span class="cline-any cline-no">&nbsp;</span>
162
+ <span class="cline-any cline-yes">1x</span>
163
163
  <span class="cline-any cline-neutral">&nbsp;</span>
164
164
  <span class="cline-any cline-neutral">&nbsp;</span>
165
- <span class="cline-any cline-yes">17x</span>
166
- <span class="cline-any cline-no">&nbsp;</span>
167
- <span class="cline-any cline-no">&nbsp;</span>
168
- <span class="cline-any cline-no">&nbsp;</span>
169
- <span class="cline-any cline-no">&nbsp;</span>
170
- <span class="cline-any cline-no">&nbsp;</span>
165
+ <span class="cline-any cline-yes">18x</span>
166
+ <span class="cline-any cline-yes">1x</span>
167
+ <span class="cline-any cline-yes">1x</span>
168
+ <span class="cline-any cline-yes">1x</span>
169
+ <span class="cline-any cline-yes">1x</span>
170
+ <span class="cline-any cline-yes">1x</span>
171
171
  <span class="cline-any cline-neutral">&nbsp;</span>
172
172
  <span class="cline-any cline-neutral">&nbsp;</span>
173
173
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -176,22 +176,22 @@
176
176
  <span class="cline-any cline-neutral">&nbsp;</span>
177
177
  <span class="cline-any cline-neutral">&nbsp;</span>
178
178
  <span class="cline-any cline-neutral">&nbsp;</span>
179
- <span class="cline-any cline-yes">17x</span>
180
- <span class="cline-any cline-no">&nbsp;</span>
181
- <span class="cline-any cline-no">&nbsp;</span>
182
- <span class="cline-any cline-no">&nbsp;</span>
183
- <span class="cline-any cline-no">&nbsp;</span>
184
- <span class="cline-any cline-no">&nbsp;</span>
185
- <span class="cline-any cline-no">&nbsp;</span>
186
- <span class="cline-any cline-no">&nbsp;</span>
179
+ <span class="cline-any cline-yes">18x</span>
180
+ <span class="cline-any cline-yes">1x</span>
181
+ <span class="cline-any cline-yes">1x</span>
182
+ <span class="cline-any cline-yes">1x</span>
183
+ <span class="cline-any cline-yes">1x</span>
184
+ <span class="cline-any cline-yes">1x</span>
185
+ <span class="cline-any cline-yes">1x</span>
186
+ <span class="cline-any cline-yes">49x</span>
187
187
  <span class="cline-any cline-no">&nbsp;</span>
188
188
  <span class="cline-any cline-no">&nbsp;</span>
189
189
  <span class="cline-any cline-no">&nbsp;</span>
190
190
  <span class="cline-any cline-neutral">&nbsp;</span>
191
191
  <span class="cline-any cline-neutral">&nbsp;</span>
192
- <span class="cline-any cline-no">&nbsp;</span>
193
- <span class="cline-any cline-no">&nbsp;</span>
194
- <span class="cline-any cline-no">&nbsp;</span>
192
+ <span class="cline-any cline-yes">1x</span>
193
+ <span class="cline-any cline-yes">1x</span>
194
+ <span class="cline-any cline-yes">1x</span>
195
195
  <span class="cline-any cline-neutral">&nbsp;</span>
196
196
  <span class="cline-any cline-neutral">&nbsp;</span>
197
197
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -205,35 +205,35 @@
205
205
  import { BBContext, App } from "@budibase/types"
206
206
  import { allUsers } from "../../../sdk/users"
207
207
  &nbsp;
208
- export async function <span class="fstat-no" title="function not covered" >fetch(</span>ctx: BBContext) {
209
- const tenantId = <span class="cstat-no" title="statement not covered" >ctx.user!.tenantId</span>
208
+ export async function fetch(ctx: BBContext) {
209
+ const tenantId = ctx.user!.tenantId
210
210
  // always use the dev apps as they'll be most up to date (true)
211
- const apps = (<span class="cstat-no" title="statement not covered" >await dbCore.getAllApps({ tenantId, all: true }))</span> as App[]
212
- const promises = <span class="cstat-no" title="statement not covered" >[]</span>
213
- <span class="cstat-no" title="statement not covered" > for (let app of apps) {</span>
211
+ const apps = (await dbCore.getAllApps({ tenantId, all: true })) as App[]
212
+ const promises = []
213
+ for (let app of apps) {
214
214
  // use dev app IDs
215
- <span class="cstat-no" title="statement not covered" > promises.push(roles.getAllRoles(app.appId))</span>
215
+ promises.push(roles.getAllRoles(app.appId))
216
216
  }
217
- const roleList = <span class="cstat-no" title="statement not covered" >await Promise.all(promises)</span>
218
- const response: any = <span class="cstat-no" title="statement not covered" >{}</span>
219
- <span class="cstat-no" title="statement not covered" > for (let app of apps) {</span>
220
- const deployedAppId = <span class="cstat-no" title="statement not covered" >dbCore.getProdAppID(app.appId)</span>
221
- <span class="cstat-no" title="statement not covered" > response[deployedAppId] = {</span>
217
+ const roleList = await Promise.all(promises)
218
+ const response: any = {}
219
+ for (let app of apps) {
220
+ const deployedAppId = dbCore.getProdAppID(app.appId)
221
+ response[deployedAppId] = {
222
222
  roles: roleList.shift(),
223
223
  name: app.name,
224
224
  version: app.version,
225
225
  url: app.url,
226
226
  }
227
227
  }
228
- <span class="cstat-no" title="statement not covered" > ctx.body = response</span>
228
+ ctx.body = response
229
229
  }
230
230
  &nbsp;
231
- export async function <span class="fstat-no" title="function not covered" >find(</span>ctx: BBContext) {
232
- const appId = <span class="cstat-no" title="statement not covered" >ctx.params.appId</span>
233
- <span class="cstat-no" title="statement not covered" > await context.doInAppContext(dbCore.getDevAppID(appId), <span class="fstat-no" title="function not covered" >async () =</span>&gt;<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" > {</span></span></span>
234
- const db = <span class="cstat-no" title="statement not covered" >context.getAppDB()</span>
235
- const app = <span class="cstat-no" title="statement not covered" >await db.get(dbCore.DocumentType.APP_METADATA)</span>
236
- <span class="cstat-no" title="statement not covered" > ctx.body = {</span>
231
+ export async function find(ctx: BBContext) {
232
+ const appId = ctx.params.appId
233
+ await context.doInAppContext(dbCore.getDevAppID(appId), async () =&gt; {
234
+ const db = context.getAppDB()
235
+ const app = await db.get(dbCore.DocumentType.APP_METADATA)
236
+ ctx.body = {
237
237
  roles: await roles.getAllRoles(),
238
238
  name: app.name,
239
239
  version: app.version,
@@ -242,22 +242,22 @@ export async function <span class="fstat-no" title="function not covered" >find(
242
242
  })
243
243
  }
244
244
  &nbsp;
245
- export async function <span class="fstat-no" title="function not covered" >removeAppRole(</span>ctx: BBContext) {
246
- const { appId } = <span class="cstat-no" title="statement not covered" >ctx.params</span>
247
- const db = <span class="cstat-no" title="statement not covered" >tenancy.getGlobalDB()</span>
248
- const users = <span class="cstat-no" title="statement not covered" >await allUsers()</span>
249
- const bulk = <span class="cstat-no" title="statement not covered" >[]</span>
250
- const cacheInvalidations = <span class="cstat-no" title="statement not covered" >[]</span>
251
- <span class="cstat-no" title="statement not covered" > for (let user of users) {</span>
252
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (user.roles[appId]) {</span>
245
+ export async function removeAppRole(ctx: BBContext) {
246
+ const { appId } = ctx.params
247
+ const db = tenancy.getGlobalDB()
248
+ const users = await allUsers()
249
+ const bulk = []
250
+ const cacheInvalidations = []
251
+ for (let user of users) {
252
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (user.roles[appId]) {
253
253
  <span class="cstat-no" title="statement not covered" > cacheInvalidations.push(cache.user.invalidateUser(user._id))</span>
254
254
  <span class="cstat-no" title="statement not covered" > delete user.roles[appId]</span>
255
255
  <span class="cstat-no" title="statement not covered" > bulk.push(user)</span>
256
256
  }
257
257
  }
258
- <span class="cstat-no" title="statement not covered" > await db.bulkDocs(bulk)</span>
259
- <span class="cstat-no" title="statement not covered" > await Promise.all(cacheInvalidations)</span>
260
- <span class="cstat-no" title="statement not covered" > ctx.body = {</span>
258
+ await db.bulkDocs(bulk)
259
+ await Promise.all(cacheInvalidations)
260
+ ctx.body = {
261
261
  message: "App role removed from all users",
262
262
  }
263
263
  }
@@ -268,7 +268,7 @@ export async function <span class="fstat-no" title="function not covered" >remov
268
268
  <div class='footer quiet pad2 space-top1 center small'>
269
269
  Code coverage generated by
270
270
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
271
- at Thu Feb 02 2023 11:54:57 GMT+0000 (Coordinated Universal Time)
271
+ at Mon Feb 06 2023 09:20:59 GMT+0000 (Coordinated Universal Time)
272
272
  </div>
273
273
  <script src="../../../../prettify.js"></script>
274
274
  <script>
@@ -37,9 +37,9 @@
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">50% </span>
40
+ <span class="strong">64.28% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>5/10</span>
42
+ <span class='fraction'>9/14</span>
43
43
  </div>
44
44
 
45
45
 
@@ -227,8 +227,7 @@
227
227
  <a name='L162'></a><a href='#L162'>162</a>
228
228
  <a name='L163'></a><a href='#L163'>163</a>
229
229
  <a name='L164'></a><a href='#L164'>164</a>
230
- <a name='L165'></a><a href='#L165'>165</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">17x</span>
231
- <span class="cline-any cline-yes">17x</span>
230
+ <a name='L165'></a><a href='#L165'>165</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">18x</span>
232
231
  <span class="cline-any cline-neutral">&nbsp;</span>
233
232
  <span class="cline-any cline-neutral">&nbsp;</span>
234
233
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -238,10 +237,11 @@
238
237
  <span class="cline-any cline-neutral">&nbsp;</span>
239
238
  <span class="cline-any cline-neutral">&nbsp;</span>
240
239
  <span class="cline-any cline-neutral">&nbsp;</span>
241
- <span class="cline-any cline-yes">17x</span>
242
- <span class="cline-any cline-yes">17x</span>
243
- <span class="cline-any cline-yes">17x</span>
244
- <span class="cline-any cline-yes">17x</span>
240
+ <span class="cline-any cline-yes">18x</span>
241
+ <span class="cline-any cline-yes">18x</span>
242
+ <span class="cline-any cline-yes">18x</span>
243
+ <span class="cline-any cline-yes">18x</span>
244
+ <span class="cline-any cline-yes">18x</span>
245
245
  <span class="cline-any cline-neutral">&nbsp;</span>
246
246
  <span class="cline-any cline-neutral">&nbsp;</span>
247
247
  <span class="cline-any cline-no">&nbsp;</span>
@@ -260,7 +260,7 @@
260
260
  <span class="cline-any cline-no">&nbsp;</span>
261
261
  <span class="cline-any cline-neutral">&nbsp;</span>
262
262
  <span class="cline-any cline-neutral">&nbsp;</span>
263
- <span class="cline-any cline-yes">17x</span>
263
+ <span class="cline-any cline-yes">18x</span>
264
264
  <span class="cline-any cline-neutral">&nbsp;</span>
265
265
  <span class="cline-any cline-neutral">&nbsp;</span>
266
266
  <span class="cline-any cline-no">&nbsp;</span>
@@ -284,7 +284,7 @@
284
284
  <span class="cline-any cline-no">&nbsp;</span>
285
285
  <span class="cline-any cline-neutral">&nbsp;</span>
286
286
  <span class="cline-any cline-neutral">&nbsp;</span>
287
- <span class="cline-any cline-yes">17x</span>
287
+ <span class="cline-any cline-yes">18x</span>
288
288
  <span class="cline-any cline-no">&nbsp;</span>
289
289
  <span class="cline-any cline-no">&nbsp;</span>
290
290
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -301,7 +301,7 @@
301
301
  <span class="cline-any cline-no">&nbsp;</span>
302
302
  <span class="cline-any cline-neutral">&nbsp;</span>
303
303
  <span class="cline-any cline-neutral">&nbsp;</span>
304
- <span class="cline-any cline-yes">17x</span>
304
+ <span class="cline-any cline-yes">18x</span>
305
305
  <span class="cline-any cline-yes">1x</span>
306
306
  <span class="cline-any cline-yes">1x</span>
307
307
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -314,7 +314,7 @@
314
314
  <span class="cline-any cline-neutral">&nbsp;</span>
315
315
  <span class="cline-any cline-neutral">&nbsp;</span>
316
316
  <span class="cline-any cline-neutral">&nbsp;</span>
317
- <span class="cline-any cline-yes">17x</span>
317
+ <span class="cline-any cline-yes">18x</span>
318
318
  <span class="cline-any cline-yes">1x</span>
319
319
  <span class="cline-any cline-yes">1x</span>
320
320
  <span class="cline-any cline-yes">1x</span>
@@ -322,7 +322,7 @@
322
322
  <span class="cline-any cline-yes">1x</span>
323
323
  <span class="cline-any cline-neutral">&nbsp;</span>
324
324
  <span class="cline-any cline-neutral">&nbsp;</span>
325
- <span class="cline-any cline-yes">17x</span>
325
+ <span class="cline-any cline-yes">18x</span>
326
326
  <span class="cline-any cline-yes">2x</span>
327
327
  <span class="cline-any cline-yes">2x</span>
328
328
  <span class="cline-any cline-yes">2x</span>
@@ -333,7 +333,7 @@
333
333
  <span class="cline-any cline-yes">2x</span>
334
334
  <span class="cline-any cline-neutral">&nbsp;</span>
335
335
  <span class="cline-any cline-neutral">&nbsp;</span>
336
- <span class="cline-any cline-yes">17x</span>
336
+ <span class="cline-any cline-yes">36x</span>
337
337
  <span class="cline-any cline-yes">1x</span>
338
338
  <span class="cline-any cline-no">&nbsp;</span>
339
339
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -355,7 +355,7 @@
355
355
  <span class="cline-any cline-yes">1x</span>
356
356
  <span class="cline-any cline-neutral">&nbsp;</span>
357
357
  <span class="cline-any cline-neutral">&nbsp;</span>
358
- <span class="cline-any cline-yes">17x</span>
358
+ <span class="cline-any cline-yes">36x</span>
359
359
  <span class="cline-any cline-yes">2x</span>
360
360
  <span class="cline-any cline-yes">2x</span>
361
361
  <span class="cline-any cline-yes">2x</span>
@@ -407,17 +407,17 @@ import { groups } from "@budibase/pro"
407
407
  const { hash, platformLogout, getCookie, clearCookie, newid } = utils
408
408
  const { user: userCache } = cache
409
409
  &nbsp;
410
- function <span class="fstat-no" title="function not covered" >newTestApiKey(</span>) {
410
+ function <span class="fstat-no" title="function not covered" >newTestApiKey() {</span>
411
411
  <span class="cstat-no" title="statement not covered" > return env.ENCRYPTED_TEST_PUBLIC_API_KEY</span>
412
412
  }
413
413
  &nbsp;
414
- function <span class="fstat-no" title="function not covered" >newApiKey(</span>) {
414
+ function <span class="fstat-no" title="function not covered" >newApiKey() {</span>
415
415
  <span class="cstat-no" title="statement not covered" > return encryption.encrypt(</span>
416
416
  `${tenancy.getTenantId()}${dbCore.SEPARATOR}${newid()}`
417
417
  )
418
418
  }
419
419
  &nbsp;
420
- function <span class="fstat-no" title="function not covered" >cleanupDevInfo(</span>info: any) {
420
+ function <span class="fstat-no" title="function not covered" >cleanupDevInfo(i</span>nfo: any) {
421
421
  // user doesn't need to aware of dev doc info
422
422
  <span class="cstat-no" title="statement not covered" > delete info._id</span>
423
423
  <span class="cstat-no" title="statement not covered" > delete info._rev</span>
@@ -467,7 +467,7 @@ export async function <span class="fstat-no" title="function not covered" >fetch
467
467
  &nbsp;
468
468
  const checkCurrentApp = (ctx: any) =&gt; {
469
469
  const appCookie = getCookie(ctx, constants.Cookie.CurrentApp)
470
- <span class="missing-if-branch" title="if path not taken" >I</span>if (appCookie &amp;&amp; <span class="branch-1 cbranch-no" title="branch not covered" >!tenancy.isUserInAppTenant(appCookie.appId))</span> {
470
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (appCookie &amp;&amp; <span class="branch-1 cbranch-no" title="branch not covered" >!tenancy.isUserInAppTenant(appCookie.appId)) {</span>
471
471
  // there is a currentapp cookie from another tenant
472
472
  // remove the cookie as this is incompatible with the builder
473
473
  // due to builder and admin permissions being removed
@@ -562,7 +562,7 @@ export async function updateSelf(ctx: any) {
562
562
  <div class='footer quiet pad2 space-top1 center small'>
563
563
  Code coverage generated by
564
564
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
565
- at Thu Feb 02 2023 11:54:57 GMT+0000 (Coordinated Universal Time)
565
+ at Mon Feb 06 2023 09:20:59 GMT+0000 (Coordinated Universal Time)
566
566
  </div>
567
567
  <script src="../../../../prettify.js"></script>
568
568
  <script>
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">31.25% </span>
26
+ <span class="strong">78.12% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>10/32</span>
28
+ <span class='fraction'>25/32</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">0% </span>
33
+ <span class="strong">100% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>0/2</span>
35
+ <span class='fraction'>2/2</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">0% </span>
40
+ <span class="strong">71.42% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>0/7</span>
42
+ <span class='fraction'>10/14</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">31.25% </span>
47
+ <span class="strong">78.12% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>10/32</span>
49
+ <span class='fraction'>25/32</span>
50
50
  </div>
51
51
 
52
52
 
@@ -61,7 +61,7 @@
61
61
  </div>
62
62
  </template>
63
63
  </div>
64
- <div class='status-line low'></div>
64
+ <div class='status-line medium'></div>
65
65
  <pre><table class="coverage">
66
66
  <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
67
  <a name='L2'></a><a href='#L2'>2</a>
@@ -140,44 +140,44 @@
140
140
  <a name='L75'></a><a href='#L75'>75</a>
141
141
  <a name='L76'></a><a href='#L76'>76</a>
142
142
  <a name='L77'></a><a href='#L77'>77</a>
143
- <a name='L78'></a><a href='#L78'>78</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">17x</span>
143
+ <a name='L78'></a><a href='#L78'>78</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
144
144
  <span class="cline-any cline-neutral">&nbsp;</span>
145
145
  <span class="cline-any cline-neutral">&nbsp;</span>
146
146
  <span class="cline-any cline-neutral">&nbsp;</span>
147
+ <span class="cline-any cline-yes">18x</span>
148
+ <span class="cline-any cline-yes">18x</span>
149
+ <span class="cline-any cline-yes">18x</span>
147
150
  <span class="cline-any cline-neutral">&nbsp;</span>
148
- <span class="cline-any cline-yes">17x</span>
149
- <span class="cline-any cline-yes">17x</span>
151
+ <span class="cline-any cline-yes">18x</span>
152
+ <span class="cline-any cline-yes">1x</span>
153
+ <span class="cline-any cline-yes">1x</span>
154
+ <span class="cline-any cline-yes">1x</span>
155
+ <span class="cline-any cline-yes">1x</span>
150
156
  <span class="cline-any cline-neutral">&nbsp;</span>
151
- <span class="cline-any cline-yes">17x</span>
152
- <span class="cline-any cline-no">&nbsp;</span>
153
- <span class="cline-any cline-no">&nbsp;</span>
154
- <span class="cline-any cline-no">&nbsp;</span>
155
- <span class="cline-any cline-no">&nbsp;</span>
157
+ <span class="cline-any cline-yes">1x</span>
158
+ <span class="cline-any cline-yes">1x</span>
156
159
  <span class="cline-any cline-neutral">&nbsp;</span>
157
- <span class="cline-any cline-no">&nbsp;</span>
158
- <span class="cline-any cline-no">&nbsp;</span>
159
160
  <span class="cline-any cline-neutral">&nbsp;</span>
161
+ <span class="cline-any cline-yes">1x</span>
162
+ <span class="cline-any cline-yes">1x</span>
160
163
  <span class="cline-any cline-neutral">&nbsp;</span>
161
- <span class="cline-any cline-no">&nbsp;</span>
162
- <span class="cline-any cline-no">&nbsp;</span>
163
164
  <span class="cline-any cline-neutral">&nbsp;</span>
164
165
  <span class="cline-any cline-neutral">&nbsp;</span>
165
166
  <span class="cline-any cline-neutral">&nbsp;</span>
166
167
  <span class="cline-any cline-neutral">&nbsp;</span>
168
+ <span class="cline-any cline-yes">18x</span>
169
+ <span class="cline-any cline-yes">2x</span>
170
+ <span class="cline-any cline-yes">2x</span>
171
+ <span class="cline-any cline-yes">2x</span>
172
+ <span class="cline-any cline-yes">10x</span>
173
+ <span class="cline-any cline-yes">10x</span>
167
174
  <span class="cline-any cline-neutral">&nbsp;</span>
168
- <span class="cline-any cline-yes">17x</span>
169
- <span class="cline-any cline-no">&nbsp;</span>
170
- <span class="cline-any cline-no">&nbsp;</span>
171
- <span class="cline-any cline-no">&nbsp;</span>
172
- <span class="cline-any cline-no">&nbsp;</span>
173
- <span class="cline-any cline-no">&nbsp;</span>
174
175
  <span class="cline-any cline-neutral">&nbsp;</span>
175
176
  <span class="cline-any cline-neutral">&nbsp;</span>
176
177
  <span class="cline-any cline-neutral">&nbsp;</span>
177
178
  <span class="cline-any cline-neutral">&nbsp;</span>
178
179
  <span class="cline-any cline-neutral">&nbsp;</span>
179
- <span class="cline-any cline-neutral">&nbsp;</span>
180
- <span class="cline-any cline-no">&nbsp;</span>
180
+ <span class="cline-any cline-yes">2x</span>
181
181
  <span class="cline-any cline-neutral">&nbsp;</span>
182
182
  <span class="cline-any cline-neutral">&nbsp;</span>
183
183
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -186,32 +186,32 @@
186
186
  <span class="cline-any cline-neutral">&nbsp;</span>
187
187
  <span class="cline-any cline-neutral">&nbsp;</span>
188
188
  <span class="cline-any cline-neutral">&nbsp;</span>
189
- <span class="cline-any cline-yes">17x</span>
190
- <span class="cline-any cline-no">&nbsp;</span>
189
+ <span class="cline-any cline-yes">18x</span>
190
+ <span class="cline-any cline-yes">2x</span>
191
191
  <span class="cline-any cline-neutral">&nbsp;</span>
192
192
  <span class="cline-any cline-neutral">&nbsp;</span>
193
- <span class="cline-any cline-yes">17x</span>
193
+ <span class="cline-any cline-yes">18x</span>
194
194
  <span class="cline-any cline-neutral">&nbsp;</span>
195
195
  <span class="cline-any cline-no">&nbsp;</span>
196
196
  <span class="cline-any cline-neutral">&nbsp;</span>
197
197
  <span class="cline-any cline-neutral">&nbsp;</span>
198
198
  <span class="cline-any cline-neutral">&nbsp;</span>
199
199
  <span class="cline-any cline-neutral">&nbsp;</span>
200
- <span class="cline-any cline-yes">17x</span>
200
+ <span class="cline-any cline-yes">18x</span>
201
201
  <span class="cline-any cline-neutral">&nbsp;</span>
202
202
  <span class="cline-any cline-no">&nbsp;</span>
203
203
  <span class="cline-any cline-neutral">&nbsp;</span>
204
204
  <span class="cline-any cline-neutral">&nbsp;</span>
205
205
  <span class="cline-any cline-neutral">&nbsp;</span>
206
206
  <span class="cline-any cline-neutral">&nbsp;</span>
207
- <span class="cline-any cline-yes">17x</span>
207
+ <span class="cline-any cline-yes">18x</span>
208
208
  <span class="cline-any cline-neutral">&nbsp;</span>
209
209
  <span class="cline-any cline-no">&nbsp;</span>
210
210
  <span class="cline-any cline-neutral">&nbsp;</span>
211
211
  <span class="cline-any cline-neutral">&nbsp;</span>
212
212
  <span class="cline-any cline-neutral">&nbsp;</span>
213
213
  <span class="cline-any cline-neutral">&nbsp;</span>
214
- <span class="cline-any cline-yes">17x</span>
214
+ <span class="cline-any cline-yes">18x</span>
215
215
  <span class="cline-any cline-no">&nbsp;</span>
216
216
  <span class="cline-any cline-no">&nbsp;</span>
217
217
  <span class="cline-any cline-no">&nbsp;</span>
@@ -225,36 +225,36 @@
225
225
  import { getTemplates } from "../../../constants/templates"
226
226
  import { tenancy, db as dbCore } from "@budibase/backend-core"
227
227
  &nbsp;
228
- export async function <span class="fstat-no" title="function not covered" >save(</span>ctx: any) {
229
- const db = <span class="cstat-no" title="statement not covered" >tenancy.getGlobalDB()</span>
230
- let template = <span class="cstat-no" title="statement not covered" >ctx.request.body</span>
231
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!template.ownerId) {</span>
232
- <span class="cstat-no" title="statement not covered" > template.ownerId = GLOBAL_OWNER</span>
228
+ export async function save(ctx: any) {
229
+ const db = tenancy.getGlobalDB()
230
+ let template = ctx.request.body
231
+ if (!template.ownerId) {
232
+ template.ownerId = GLOBAL_OWNER
233
233
  }
234
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!template._id) {</span>
235
- <span class="cstat-no" title="statement not covered" > template._id = dbCore.generateTemplateID(template.ownerId)</span>
234
+ if (!template._id) {
235
+ template._id = dbCore.generateTemplateID(template.ownerId)
236
236
  }
237
237
  &nbsp;
238
- const response = <span class="cstat-no" title="statement not covered" >await db.put(template)</span>
239
- <span class="cstat-no" title="statement not covered" > ctx.body = {</span>
238
+ const response = await db.put(template)
239
+ ctx.body = {
240
240
  ...template,
241
241
  _rev: response.rev,
242
242
  }
243
243
  }
244
244
  &nbsp;
245
- export async function <span class="fstat-no" title="function not covered" >definitions(</span>ctx: any) {
246
- const bindings: any = <span class="cstat-no" title="statement not covered" >{}</span>
247
- const info: any = <span class="cstat-no" title="statement not covered" >{}</span>
248
- <span class="cstat-no" title="statement not covered" > for (let template of TemplateMetadata.email) {</span>
249
- <span class="cstat-no" title="statement not covered" > bindings[template.purpose] = template.bindings</span>
250
- <span class="cstat-no" title="statement not covered" > info[template.purpose] = {</span>
245
+ export async function definitions(ctx: any) {
246
+ const bindings: any = {}
247
+ const info: any = {}
248
+ for (let template of TemplateMetadata.email) {
249
+ bindings[template.purpose] = template.bindings
250
+ info[template.purpose] = {
251
251
  name: template.name,
252
252
  description: template.description,
253
253
  category: template.category,
254
254
  }
255
255
  }
256
256
  &nbsp;
257
- <span class="cstat-no" title="statement not covered" > ctx.body = {</span>
257
+ ctx.body = {
258
258
  info,
259
259
  bindings: {
260
260
  ...bindings,
@@ -263,8 +263,8 @@ export async function <span class="fstat-no" title="function not covered" >defin
263
263
  }
264
264
  }
265
265
  &nbsp;
266
- export async function <span class="fstat-no" title="function not covered" >fetch(</span>ctx: any) {
267
- <span class="cstat-no" title="statement not covered" > ctx.body = await getTemplates()</span>
266
+ export async function fetch(ctx: any) {
267
+ ctx.body = await getTemplates()
268
268
  }
269
269
  &nbsp;
270
270
  export async function <span class="fstat-no" title="function not covered" >fetchByType(</span>ctx: any) {
@@ -301,7 +301,7 @@ export async function <span class="fstat-no" title="function not covered" >destr
301
301
  <div class='footer quiet pad2 space-top1 center small'>
302
302
  Code coverage generated by
303
303
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
304
- at Thu Feb 02 2023 11:54:57 GMT+0000 (Coordinated Universal Time)
304
+ at Mon Feb 06 2023 09:20:59 GMT+0000 (Coordinated Universal Time)
305
305
  </div>
306
306
  <script src="../../../../prettify.js"></script>
307
307
  <script>