@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.
- package/Dockerfile +1 -1
- package/__mocks__/node-fetch.ts +23 -0
- package/coverage/clover.xml +1423 -1379
- package/coverage/coverage-final.json +83 -77
- package/coverage/lcov-report/index.html +140 -140
- package/coverage/lcov-report/src/api/controllers/global/auth.ts.html +52 -52
- package/coverage/lcov-report/src/api/controllers/global/configs.ts.html +167 -224
- package/coverage/lcov-report/src/api/controllers/global/email.ts.html +4 -4
- package/coverage/lcov-report/src/api/controllers/global/events.ts.html +136 -0
- package/coverage/lcov-report/src/api/controllers/global/index.html +83 -68
- package/coverage/lcov-report/src/api/controllers/global/license.ts.html +16 -16
- package/coverage/lcov-report/src/api/controllers/global/roles.ts.html +69 -69
- package/coverage/lcov-report/src/api/controllers/global/self.ts.html +20 -20
- package/coverage/lcov-report/src/api/controllers/global/templates.ts.html +54 -54
- package/coverage/lcov-report/src/api/controllers/global/users.ts.html +83 -44
- package/coverage/lcov-report/src/api/controllers/global/workspaces.ts.html +9 -9
- package/coverage/lcov-report/src/api/controllers/system/accounts.ts.html +5 -5
- package/coverage/lcov-report/src/api/controllers/system/environment.ts.html +4 -4
- package/coverage/lcov-report/src/api/controllers/system/index.html +11 -11
- package/coverage/lcov-report/src/api/controllers/system/migrations.ts.html +5 -5
- package/coverage/lcov-report/src/api/controllers/system/restore.ts.html +4 -4
- package/coverage/lcov-report/src/api/controllers/system/status.ts.html +5 -5
- package/coverage/lcov-report/src/api/controllers/system/tenants.ts.html +7 -7
- package/coverage/lcov-report/src/api/index.html +1 -1
- package/coverage/lcov-report/src/api/index.ts.html +42 -30
- package/coverage/lcov-report/src/api/routes/global/auth.ts.html +14 -14
- package/coverage/lcov-report/src/api/routes/global/configs.ts.html +25 -25
- package/coverage/lcov-report/src/api/routes/global/email.ts.html +13 -13
- package/coverage/lcov-report/src/api/routes/global/events.ts.html +109 -0
- package/coverage/lcov-report/src/api/routes/global/index.html +37 -22
- package/coverage/lcov-report/src/api/routes/global/license.ts.html +9 -9
- package/coverage/lcov-report/src/api/routes/global/roles.ts.html +10 -10
- package/coverage/lcov-report/src/api/routes/global/self.ts.html +11 -11
- package/coverage/lcov-report/src/api/routes/global/templates.ts.html +14 -14
- package/coverage/lcov-report/src/api/routes/global/users.ts.html +62 -20
- package/coverage/lcov-report/src/api/routes/global/workspaces.ts.html +12 -12
- package/coverage/lcov-report/src/api/routes/index.html +7 -7
- package/coverage/lcov-report/src/api/routes/index.ts.html +29 -23
- package/coverage/lcov-report/src/api/routes/system/accounts.ts.html +10 -10
- package/coverage/lcov-report/src/api/routes/system/environment.ts.html +9 -9
- package/coverage/lcov-report/src/api/routes/system/index.html +15 -15
- package/coverage/lcov-report/src/api/routes/system/migrations.ts.html +10 -10
- package/coverage/lcov-report/src/api/routes/system/restore.ts.html +9 -9
- package/coverage/lcov-report/src/api/routes/system/status.ts.html +9 -9
- package/coverage/lcov-report/src/api/routes/system/tenants.ts.html +10 -10
- package/coverage/lcov-report/src/api/routes/validation/index.html +3 -3
- package/coverage/lcov-report/src/api/routes/validation/index.ts.html +2 -2
- package/coverage/lcov-report/src/api/routes/validation/users.ts.html +14 -14
- package/coverage/lcov-report/src/constants/index.html +17 -17
- package/coverage/lcov-report/src/constants/index.ts.html +77 -53
- package/coverage/lcov-report/src/constants/templates/index.html +18 -18
- package/coverage/lcov-report/src/constants/templates/index.ts.html +42 -42
- package/coverage/lcov-report/src/db/index.html +17 -17
- package/coverage/lcov-report/src/db/index.ts.html +18 -18
- package/coverage/lcov-report/src/environment.ts.html +45 -30
- package/coverage/lcov-report/src/index.html +27 -27
- package/coverage/lcov-report/src/index.ts.html +55 -55
- package/coverage/lcov-report/src/middleware/cloudRestricted.ts.html +5 -5
- package/coverage/lcov-report/src/middleware/index.html +1 -1
- package/coverage/lcov-report/src/migrations/functions/globalInfoSyncUsers.ts.html +9 -9
- package/coverage/lcov-report/src/migrations/functions/index.html +11 -11
- package/coverage/lcov-report/src/migrations/index.html +15 -15
- package/coverage/lcov-report/src/migrations/index.ts.html +27 -27
- package/coverage/lcov-report/src/sdk/accounts/accounts.ts.html +13 -13
- package/coverage/lcov-report/src/sdk/accounts/index.html +13 -13
- package/coverage/lcov-report/src/sdk/accounts/index.ts.html +2 -2
- package/coverage/lcov-report/src/sdk/index.html +5 -5
- package/coverage/lcov-report/src/sdk/index.ts.html +6 -6
- package/coverage/lcov-report/src/sdk/users/events.ts.html +82 -58
- package/coverage/lcov-report/src/sdk/users/index.html +28 -28
- package/coverage/lcov-report/src/sdk/users/index.ts.html +2 -2
- package/coverage/lcov-report/src/sdk/users/users.ts.html +174 -120
- package/coverage/lcov-report/src/tests/TestConfiguration.ts.html +221 -107
- package/coverage/lcov-report/src/tests/api/accounts.ts.html +7 -7
- package/coverage/lcov-report/src/tests/api/auth.ts.html +25 -13
- package/coverage/lcov-report/src/tests/api/base.ts.html +5 -5
- package/coverage/lcov-report/src/tests/api/configs.ts.html +11 -11
- package/coverage/lcov-report/src/tests/api/email.ts.html +6 -6
- package/coverage/lcov-report/src/tests/api/environment.ts.html +6 -6
- package/coverage/lcov-report/src/tests/api/groups.ts.html +163 -0
- package/coverage/lcov-report/src/tests/api/index.html +91 -31
- package/coverage/lcov-report/src/tests/api/index.ts.html +62 -29
- package/coverage/lcov-report/src/tests/api/license.ts.html +136 -0
- package/coverage/lcov-report/src/tests/api/migrations.ts.html +8 -8
- package/coverage/lcov-report/src/tests/api/restore.ts.html +7 -7
- package/coverage/lcov-report/src/tests/api/roles.ts.html +181 -0
- package/coverage/lcov-report/src/tests/api/self.ts.html +7 -7
- package/coverage/lcov-report/src/tests/api/status.ts.html +6 -6
- package/coverage/lcov-report/src/tests/api/templates.ts.html +175 -0
- package/coverage/lcov-report/src/tests/api/tenants.ts.html +10 -10
- package/coverage/lcov-report/src/tests/api/users.ts.html +30 -27
- package/coverage/lcov-report/src/tests/controllers.ts.html +14 -14
- package/coverage/lcov-report/src/tests/index.html +34 -34
- package/coverage/lcov-report/src/tests/index.ts.html +19 -55
- package/coverage/lcov-report/src/tests/mocks/{email.js.html → email.ts.html} +5 -5
- package/coverage/lcov-report/src/tests/mocks/index.html +6 -6
- package/coverage/lcov-report/src/tests/mocks/index.ts.html +10 -10
- package/coverage/lcov-report/src/tests/structures/configs.ts.html +11 -11
- package/coverage/lcov-report/src/tests/structures/groups.ts.html +15 -15
- package/coverage/lcov-report/src/tests/structures/index.html +26 -26
- package/coverage/lcov-report/src/tests/structures/index.ts.html +16 -22
- package/coverage/lcov-report/src/tests/structures/users.ts.html +16 -16
- package/coverage/lcov-report/src/utilities/appService.ts.html +45 -18
- package/coverage/lcov-report/src/utilities/email.ts.html +28 -28
- package/coverage/lcov-report/src/utilities/fileSystem.ts.html +4 -4
- package/coverage/lcov-report/src/utilities/index.html +27 -27
- package/coverage/lcov-report/src/utilities/index.ts.html +2 -2
- package/coverage/lcov-report/src/utilities/redis.ts.html +20 -20
- package/coverage/lcov-report/src/utilities/templates.ts.html +6 -6
- package/coverage/lcov-report/src/utilities/users.ts.html +7 -7
- package/coverage/lcov.info +2826 -2609
- package/jest-testcontainers-config.js +8 -0
- package/jest.config.ts +10 -4
- package/package.json +11 -7
- package/scripts/dev/manage.js +2 -2
- package/src/api/controllers/global/auth.ts +1 -1
- package/src/api/controllers/global/configs.ts +112 -131
- package/src/api/controllers/global/events.ts +17 -0
- package/src/api/controllers/global/users.ts +14 -1
- package/src/api/index.ts +4 -0
- package/src/api/routes/global/auth.ts +1 -1
- package/src/api/routes/global/configs.ts +7 -7
- package/src/api/routes/global/email.ts +1 -1
- package/src/api/routes/global/events.ts +8 -0
- package/src/api/routes/global/license.ts +1 -1
- package/src/api/routes/global/roles.ts +1 -1
- package/src/api/routes/global/self.ts +1 -1
- package/src/api/routes/global/templates.ts +1 -1
- package/src/api/routes/global/tests/auth.spec.ts +30 -22
- package/src/api/routes/global/tests/configs.spec.ts +114 -94
- package/src/api/routes/global/tests/groups.spec.ts +58 -0
- package/src/api/routes/global/tests/license.spec.ts +0 -2
- package/src/api/routes/global/tests/roles.spec.ts +71 -5
- package/src/api/routes/global/tests/templates.spec.ts +81 -9
- package/src/api/routes/global/tests/users.spec.ts +35 -36
- package/src/api/routes/global/users.ts +15 -1
- package/src/api/routes/global/workspaces.ts +1 -1
- package/src/api/routes/index.ts +2 -0
- package/src/api/routes/system/accounts.ts +1 -1
- package/src/api/routes/system/environment.ts +1 -1
- package/src/api/routes/system/migrations.ts +1 -1
- package/src/api/routes/system/restore.ts +1 -1
- package/src/api/routes/system/status.ts +1 -1
- package/src/api/routes/system/tenants.ts +1 -1
- package/src/api/routes/system/tests/environment.spec.ts +1 -1
- package/src/constants/index.ts +13 -5
- package/src/db/index.ts +1 -1
- package/src/environment.ts +6 -1
- package/src/index.ts +5 -5
- package/src/middleware/cloudRestricted.ts +1 -1
- package/src/sdk/users/events.ts +8 -0
- package/src/sdk/users/users.ts +23 -5
- package/src/tests/TestConfiguration.ts +52 -14
- package/src/tests/api/auth.ts +7 -3
- package/src/tests/api/configs.ts +2 -2
- package/src/tests/api/groups.ts +26 -0
- package/src/tests/api/index.ts +12 -1
- package/src/tests/api/license.ts +17 -0
- package/src/tests/api/roles.ts +32 -0
- package/src/tests/api/templates.ts +30 -0
- package/src/tests/api/users.ts +4 -3
- package/src/tests/index.ts +6 -18
- package/src/tests/jestEnv.ts +11 -0
- package/src/tests/jestSetup.ts +8 -15
- package/src/tests/mocks/{email.js → email.ts} +1 -1
- package/src/tests/mocks/index.ts +4 -4
- package/src/tests/structures/configs.ts +2 -2
- package/src/tests/structures/groups.ts +1 -1
- package/src/tests/structures/index.ts +3 -5
- package/src/tests/structures/users.ts +1 -1
- package/src/utilities/appService.ts +12 -3
- 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">
|
|
26
|
+
<span class="strong">98% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>49/50</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
|
33
33
|
<span class="strong">100% </span>
|
|
34
34
|
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>
|
|
35
|
+
<span class='fraction'>12/12</span>
|
|
36
36
|
</div>
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
<div class='fl pad1y space-right2'>
|
|
40
|
-
<span class="strong">
|
|
40
|
+
<span class="strong">91.66% </span>
|
|
41
41
|
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>
|
|
42
|
+
<span class='fraction'>11/12</span>
|
|
43
43
|
</div>
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">
|
|
47
|
+
<span class="strong">92.85% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>13/14</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -239,56 +239,54 @@
|
|
|
239
239
|
<a name='L174'></a><a href='#L174'>174</a>
|
|
240
240
|
<a name='L175'></a><a href='#L175'>175</a>
|
|
241
241
|
<a name='L176'></a><a href='#L176'>176</a>
|
|
242
|
-
<a name='L177'></a><a href='#L177'>177</a
|
|
242
|
+
<a name='L177'></a><a href='#L177'>177</a>
|
|
243
|
+
<a name='L178'></a><a href='#L178'>178</a>
|
|
244
|
+
<a name='L179'></a><a href='#L179'>179</a>
|
|
245
|
+
<a name='L180'></a><a href='#L180'>180</a>
|
|
246
|
+
<a name='L181'></a><a href='#L181'>181</a>
|
|
247
|
+
<a name='L182'></a><a href='#L182'>182</a>
|
|
248
|
+
<a name='L183'></a><a href='#L183'>183</a>
|
|
249
|
+
<a name='L184'></a><a href='#L184'>184</a>
|
|
250
|
+
<a name='L185'></a><a href='#L185'>185</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">18x</span>
|
|
251
|
+
<span class="cline-any cline-neutral"> </span>
|
|
252
|
+
<span class="cline-any cline-no"> </span>
|
|
253
|
+
<span class="cline-any cline-yes">18x</span>
|
|
254
|
+
<span class="cline-any cline-neutral"> </span>
|
|
255
|
+
<span class="cline-any cline-yes">18x</span>
|
|
256
|
+
<span class="cline-any cline-neutral"> </span>
|
|
257
|
+
<span class="cline-any cline-neutral"> </span>
|
|
258
|
+
<span class="cline-any cline-neutral"> </span>
|
|
259
|
+
<span class="cline-any cline-neutral"> </span>
|
|
260
|
+
<span class="cline-any cline-yes">79x</span>
|
|
261
|
+
<span class="cline-any cline-neutral"> </span>
|
|
262
|
+
<span class="cline-any cline-yes">18x</span>
|
|
263
|
+
<span class="cline-any cline-neutral"> </span>
|
|
264
|
+
<span class="cline-any cline-neutral"> </span>
|
|
265
|
+
<span class="cline-any cline-neutral"> </span>
|
|
266
|
+
<span class="cline-any cline-neutral"> </span>
|
|
267
|
+
<span class="cline-any cline-yes">18x</span>
|
|
268
|
+
<span class="cline-any cline-neutral"> </span>
|
|
269
|
+
<span class="cline-any cline-neutral"> </span>
|
|
270
|
+
<span class="cline-any cline-neutral"> </span>
|
|
271
|
+
<span class="cline-any cline-yes">18x</span>
|
|
272
|
+
<span class="cline-any cline-neutral"> </span>
|
|
273
|
+
<span class="cline-any cline-neutral"> </span>
|
|
243
274
|
<span class="cline-any cline-neutral"> </span>
|
|
244
|
-
<span class="cline-any cline-yes">17x</span>
|
|
245
275
|
<span class="cline-any cline-neutral"> </span>
|
|
246
276
|
<span class="cline-any cline-neutral"> </span>
|
|
247
|
-
<span class="cline-any cline-yes">17x</span>
|
|
248
|
-
<span class="cline-any cline-yes">17x</span>
|
|
249
|
-
<span class="cline-any cline-yes">17x</span>
|
|
250
277
|
<span class="cline-any cline-neutral"> </span>
|
|
251
278
|
<span class="cline-any cline-neutral"> </span>
|
|
252
|
-
<span class="cline-any cline-yes">
|
|
279
|
+
<span class="cline-any cline-yes">18x</span>
|
|
253
280
|
<span class="cline-any cline-neutral"> </span>
|
|
254
|
-
<span class="cline-any cline-yes">17x</span>
|
|
255
|
-
<span class="cline-any cline-yes">17x</span>
|
|
256
|
-
<span class="cline-any cline-yes">17x</span>
|
|
257
281
|
<span class="cline-any cline-neutral"> </span>
|
|
258
282
|
<span class="cline-any cline-neutral"> </span>
|
|
259
|
-
<span class="cline-any cline-yes">17x</span>
|
|
260
|
-
<span class="cline-any cline-yes">17x</span>
|
|
261
283
|
<span class="cline-any cline-neutral"> </span>
|
|
262
284
|
<span class="cline-any cline-neutral"> </span>
|
|
263
|
-
<span class="cline-any cline-yes">17x</span>
|
|
264
|
-
<span class="cline-any cline-yes">17x</span>
|
|
265
|
-
<span class="cline-any cline-yes">17x</span>
|
|
266
|
-
<span class="cline-any cline-yes">17x</span>
|
|
267
|
-
<span class="cline-any cline-yes">17x</span>
|
|
268
|
-
<span class="cline-any cline-yes">17x</span>
|
|
269
285
|
<span class="cline-any cline-neutral"> </span>
|
|
270
286
|
<span class="cline-any cline-neutral"> </span>
|
|
271
|
-
<span class="cline-any cline-yes">
|
|
272
|
-
<span class="cline-any cline-yes">17x</span>
|
|
273
|
-
<span class="cline-any cline-yes">17x</span>
|
|
274
|
-
<span class="cline-any cline-yes">17x</span>
|
|
275
|
-
<span class="cline-any cline-yes">17x</span>
|
|
276
|
-
<span class="cline-any cline-yes">17x</span>
|
|
277
|
-
<span class="cline-any cline-yes">17x</span>
|
|
278
|
-
<span class="cline-any cline-yes">17x</span>
|
|
279
|
-
<span class="cline-any cline-yes">17x</span>
|
|
280
|
-
<span class="cline-any cline-yes">17x</span>
|
|
281
|
-
<span class="cline-any cline-yes">17x</span>
|
|
282
|
-
<span class="cline-any cline-yes">17x</span>
|
|
283
|
-
<span class="cline-any cline-yes">17x</span>
|
|
284
|
-
<span class="cline-any cline-yes">17x</span>
|
|
285
|
-
<span class="cline-any cline-yes">17x</span>
|
|
286
|
-
<span class="cline-any cline-yes">17x</span>
|
|
287
|
-
<span class="cline-any cline-yes">17x</span>
|
|
288
|
-
<span class="cline-any cline-yes">17x</span>
|
|
287
|
+
<span class="cline-any cline-yes">18x</span>
|
|
289
288
|
<span class="cline-any cline-neutral"> </span>
|
|
290
289
|
<span class="cline-any cline-neutral"> </span>
|
|
291
|
-
<span class="cline-any cline-yes">17x</span>
|
|
292
290
|
<span class="cline-any cline-neutral"> </span>
|
|
293
291
|
<span class="cline-any cline-neutral"> </span>
|
|
294
292
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -306,6 +304,7 @@
|
|
|
306
304
|
<span class="cline-any cline-neutral"> </span>
|
|
307
305
|
<span class="cline-any cline-neutral"> </span>
|
|
308
306
|
<span class="cline-any cline-neutral"> </span>
|
|
307
|
+
<span class="cline-any cline-yes">18x</span>
|
|
309
308
|
<span class="cline-any cline-neutral"> </span>
|
|
310
309
|
<span class="cline-any cline-neutral"> </span>
|
|
311
310
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -331,7 +330,6 @@
|
|
|
331
330
|
<span class="cline-any cline-neutral"> </span>
|
|
332
331
|
<span class="cline-any cline-neutral"> </span>
|
|
333
332
|
<span class="cline-any cline-neutral"> </span>
|
|
334
|
-
<span class="cline-any cline-yes">17x</span>
|
|
335
333
|
<span class="cline-any cline-neutral"> </span>
|
|
336
334
|
<span class="cline-any cline-neutral"> </span>
|
|
337
335
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -349,6 +347,7 @@
|
|
|
349
347
|
<span class="cline-any cline-neutral"> </span>
|
|
350
348
|
<span class="cline-any cline-neutral"> </span>
|
|
351
349
|
<span class="cline-any cline-neutral"> </span>
|
|
350
|
+
<span class="cline-any cline-yes">18x</span>
|
|
352
351
|
<span class="cline-any cline-neutral"> </span>
|
|
353
352
|
<span class="cline-any cline-neutral"> </span>
|
|
354
353
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -413,11 +412,28 @@
|
|
|
413
412
|
<span class="cline-any cline-neutral"> </span>
|
|
414
413
|
<span class="cline-any cline-neutral"> </span>
|
|
415
414
|
<span class="cline-any cline-neutral"> </span>
|
|
416
|
-
<span class="cline-any cline-
|
|
417
|
-
<span class="cline-any cline-
|
|
415
|
+
<span class="cline-any cline-neutral"> </span>
|
|
416
|
+
<span class="cline-any cline-neutral"> </span>
|
|
417
|
+
<span class="cline-any cline-neutral"> </span>
|
|
418
|
+
<span class="cline-any cline-neutral"> </span>
|
|
419
|
+
<span class="cline-any cline-neutral"> </span>
|
|
420
|
+
<span class="cline-any cline-neutral"> </span>
|
|
421
|
+
<span class="cline-any cline-neutral"> </span>
|
|
422
|
+
<span class="cline-any cline-neutral"> </span>
|
|
423
|
+
<span class="cline-any cline-neutral"> </span>
|
|
424
|
+
<span class="cline-any cline-neutral"> </span>
|
|
425
|
+
<span class="cline-any cline-neutral"> </span>
|
|
426
|
+
<span class="cline-any cline-neutral"> </span>
|
|
427
|
+
<span class="cline-any cline-neutral"> </span>
|
|
428
|
+
<span class="cline-any cline-neutral"> </span>
|
|
429
|
+
<span class="cline-any cline-neutral"> </span>
|
|
430
|
+
<span class="cline-any cline-neutral"> </span>
|
|
431
|
+
<span class="cline-any cline-neutral"> </span>
|
|
432
|
+
<span class="cline-any cline-yes">20x</span>
|
|
433
|
+
<span class="cline-any cline-yes">18x</span>
|
|
418
434
|
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import { constants } from "@budibase/backend-core"
|
|
419
435
|
|
|
420
|
-
export const LOGO_URL =
|
|
436
|
+
export const <span class="cstat-no" title="statement not covered" >LOGO_URL<span class="fstat-no" title="function not covered" > </span>=</span>
|
|
421
437
|
"https://d33wubrfki0l68.cloudfront.net/aac32159d7207b5085e74a7ef67afbb7027786c5/2b1fd/img/logo/bb-emblem.svg"
|
|
422
438
|
|
|
423
439
|
export enum UserStatus {
|
|
@@ -444,6 +460,14 @@ export enum EmailTemplatePurpose {
|
|
|
444
460
|
CUSTOM = "custom",
|
|
445
461
|
}
|
|
446
462
|
|
|
463
|
+
export enum TemplateMetadataNames {
|
|
464
|
+
BASE = "Base format",
|
|
465
|
+
PASSWORD_RECOVERY = "Password recovery",
|
|
466
|
+
WELCOME = "User welcome",
|
|
467
|
+
INVITATION = "User invitation",
|
|
468
|
+
CUSTOM = "Custom",
|
|
469
|
+
}
|
|
470
|
+
|
|
447
471
|
export enum InternalTemplateBinding {
|
|
448
472
|
PLATFORM_URL = "platformUrl",
|
|
449
473
|
COMPANY = "company",
|
|
@@ -510,7 +534,7 @@ export const TemplateBindings = {
|
|
|
510
534
|
export const TemplateMetadata = {
|
|
511
535
|
[TemplateType.EMAIL]: [
|
|
512
536
|
{
|
|
513
|
-
name:
|
|
537
|
+
name: TemplateMetadataNames.BASE,
|
|
514
538
|
description:
|
|
515
539
|
"This is the base template, all others are based on it. The {{ body }} will be replaced with another email template.",
|
|
516
540
|
category: "miscellaneous",
|
|
@@ -527,7 +551,7 @@ export const TemplateMetadata = {
|
|
|
527
551
|
],
|
|
528
552
|
},
|
|
529
553
|
{
|
|
530
|
-
name:
|
|
554
|
+
name: TemplateMetadataNames.PASSWORD_RECOVERY,
|
|
531
555
|
description:
|
|
532
556
|
"When a user requests a password reset they will receive an email built with this template.",
|
|
533
557
|
category: "user management",
|
|
@@ -546,7 +570,7 @@ export const TemplateMetadata = {
|
|
|
546
570
|
],
|
|
547
571
|
},
|
|
548
572
|
{
|
|
549
|
-
name:
|
|
573
|
+
name: TemplateMetadataNames.WELCOME,
|
|
550
574
|
description:
|
|
551
575
|
"When a new user is added they will be sent a welcome email using this template.",
|
|
552
576
|
category: "user management",
|
|
@@ -554,7 +578,7 @@ export const TemplateMetadata = {
|
|
|
554
578
|
bindings: [],
|
|
555
579
|
},
|
|
556
580
|
{
|
|
557
|
-
name:
|
|
581
|
+
name: TemplateMetadataNames.INVITATION,
|
|
558
582
|
description:
|
|
559
583
|
"When inviting a user via the email on-boarding this template will be used.",
|
|
560
584
|
category: "user management",
|
|
@@ -573,7 +597,7 @@ export const TemplateMetadata = {
|
|
|
573
597
|
],
|
|
574
598
|
},
|
|
575
599
|
{
|
|
576
|
-
name:
|
|
600
|
+
name: TemplateMetadataNames.CUSTOM,
|
|
577
601
|
description:
|
|
578
602
|
"A custom template, this is currently used for SMTP email actions in automations.",
|
|
579
603
|
category: "automations",
|
|
@@ -598,7 +622,7 @@ export const GLOBAL_OWNER = "global"
|
|
|
598
622
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
599
623
|
Code coverage generated by
|
|
600
624
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
601
|
-
at
|
|
625
|
+
at Mon Feb 06 2023 09:20:59 GMT+0000 (Coordinated Universal Time)
|
|
602
626
|
</div>
|
|
603
627
|
<script src="../../prettify.js"></script>
|
|
604
628
|
<script>
|
|
@@ -23,30 +23,30 @@
|
|
|
23
23
|
<div class='clearfix'>
|
|
24
24
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">
|
|
26
|
+
<span class="strong">91.17% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>31/34</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">
|
|
33
|
+
<span class="strong">88.88% </span>
|
|
34
34
|
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>
|
|
35
|
+
<span class='fraction'>8/9</span>
|
|
36
36
|
</div>
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
<div class='fl pad1y space-right2'>
|
|
40
|
-
<span class="strong">
|
|
40
|
+
<span class="strong">81.81% </span>
|
|
41
41
|
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>
|
|
42
|
+
<span class='fraction'>9/11</span>
|
|
43
43
|
</div>
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">
|
|
47
|
+
<span class="strong">93.1% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>27/29</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -80,17 +80,17 @@
|
|
|
80
80
|
</thead>
|
|
81
81
|
<tbody><tr>
|
|
82
82
|
<td class="file high" data-value="index.ts"><a href="index.ts.html">index.ts</a></td>
|
|
83
|
-
<td data-value="
|
|
84
|
-
<div class="chart"><div class="cover-fill" style="width:
|
|
83
|
+
<td data-value="91.17" class="pic high">
|
|
84
|
+
<div class="chart"><div class="cover-fill" style="width: 91%"></div><div class="cover-empty" style="width: 9%"></div></div>
|
|
85
85
|
</td>
|
|
86
|
+
<td data-value="91.17" class="pct high">91.17%</td>
|
|
87
|
+
<td data-value="34" class="abs high">31/34</td>
|
|
88
|
+
<td data-value="88.88" class="pct high">88.88%</td>
|
|
89
|
+
<td data-value="9" class="abs high">8/9</td>
|
|
86
90
|
<td data-value="81.81" class="pct high">81.81%</td>
|
|
87
|
-
<td data-value="
|
|
88
|
-
<td data-value="
|
|
89
|
-
<td data-value="
|
|
90
|
-
<td data-value="71.42" class="pct medium">71.42%</td>
|
|
91
|
-
<td data-value="7" class="abs medium">5/7</td>
|
|
92
|
-
<td data-value="86.2" class="pct high">86.2%</td>
|
|
93
|
-
<td data-value="29" class="abs high">25/29</td>
|
|
91
|
+
<td data-value="11" class="abs high">9/11</td>
|
|
92
|
+
<td data-value="93.1" class="pct high">93.1%</td>
|
|
93
|
+
<td data-value="29" class="abs high">27/29</td>
|
|
94
94
|
</tr>
|
|
95
95
|
|
|
96
96
|
</tbody>
|
|
@@ -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
|
|
104
|
+
at Mon Feb 06 2023 09:20:59 GMT+0000 (Coordinated Universal Time)
|
|
105
105
|
</div>
|
|
106
106
|
<script src="../../../prettify.js"></script>
|
|
107
107
|
<script>
|
|
@@ -23,30 +23,30 @@
|
|
|
23
23
|
<div class='clearfix'>
|
|
24
24
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">
|
|
26
|
+
<span class="strong">91.17% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>31/34</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">
|
|
33
|
+
<span class="strong">88.88% </span>
|
|
34
34
|
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>
|
|
35
|
+
<span class='fraction'>8/9</span>
|
|
36
36
|
</div>
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
<div class='fl pad1y space-right2'>
|
|
40
|
-
<span class="strong">
|
|
40
|
+
<span class="strong">81.81% </span>
|
|
41
41
|
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>
|
|
42
|
+
<span class='fraction'>9/11</span>
|
|
43
43
|
</div>
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">
|
|
47
|
+
<span class="strong">93.1% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>27/29</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -140,18 +140,18 @@
|
|
|
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">
|
|
144
|
-
<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-yes">18x</span>
|
|
145
144
|
<span class="cline-any cline-neutral"> </span>
|
|
146
145
|
<span class="cline-any cline-neutral"> </span>
|
|
147
146
|
<span class="cline-any cline-neutral"> </span>
|
|
148
147
|
<span class="cline-any cline-neutral"> </span>
|
|
149
148
|
<span class="cline-any cline-neutral"> </span>
|
|
150
|
-
<span class="cline-any cline-yes">
|
|
151
|
-
<span class="cline-any cline-yes">
|
|
149
|
+
<span class="cline-any cline-yes">18x</span>
|
|
150
|
+
<span class="cline-any cline-yes">18x</span>
|
|
151
|
+
<span class="cline-any cline-yes">18x</span>
|
|
152
152
|
<span class="cline-any cline-neutral"> </span>
|
|
153
153
|
<span class="cline-any cline-neutral"> </span>
|
|
154
|
-
<span class="cline-any cline-yes">
|
|
154
|
+
<span class="cline-any cline-yes">18x</span>
|
|
155
155
|
<span class="cline-any cline-neutral"> </span>
|
|
156
156
|
<span class="cline-any cline-neutral"> </span>
|
|
157
157
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -165,55 +165,55 @@
|
|
|
165
165
|
<span class="cline-any cline-neutral"> </span>
|
|
166
166
|
<span class="cline-any cline-neutral"> </span>
|
|
167
167
|
<span class="cline-any cline-neutral"> </span>
|
|
168
|
-
<span class="cline-any cline-
|
|
168
|
+
<span class="cline-any cline-no"> </span>
|
|
169
169
|
<span class="cline-any cline-neutral"> </span>
|
|
170
|
-
<span class="cline-any cline-yes">
|
|
170
|
+
<span class="cline-any cline-yes">16x</span>
|
|
171
171
|
<span class="cline-any cline-neutral"> </span>
|
|
172
172
|
<span class="cline-any cline-yes">14x</span>
|
|
173
173
|
<span class="cline-any cline-yes">14x</span>
|
|
174
174
|
<span class="cline-any cline-neutral"> </span>
|
|
175
|
-
<span class="cline-any cline-
|
|
176
|
-
<span class="cline-any cline-
|
|
175
|
+
<span class="cline-any cline-yes">2x</span>
|
|
176
|
+
<span class="cline-any cline-yes">2x</span>
|
|
177
177
|
<span class="cline-any cline-neutral"> </span>
|
|
178
|
-
<span class="cline-any cline-yes">
|
|
178
|
+
<span class="cline-any cline-yes">16x</span>
|
|
179
179
|
<span class="cline-any cline-neutral"> </span>
|
|
180
|
-
<span class="cline-any cline-yes">
|
|
181
|
-
<span class="cline-any cline-
|
|
180
|
+
<span class="cline-any cline-yes">164x</span>
|
|
181
|
+
<span class="cline-any cline-yes">4x</span>
|
|
182
182
|
<span class="cline-any cline-neutral"> </span>
|
|
183
|
-
<span class="cline-any cline-yes">
|
|
184
|
-
<span class="cline-any cline-yes">
|
|
183
|
+
<span class="cline-any cline-yes">76x</span>
|
|
184
|
+
<span class="cline-any cline-yes">76x</span>
|
|
185
185
|
<span class="cline-any cline-neutral"> </span>
|
|
186
186
|
<span class="cline-any cline-neutral"> </span>
|
|
187
187
|
<span class="cline-any cline-neutral"> </span>
|
|
188
188
|
<span class="cline-any cline-neutral"> </span>
|
|
189
189
|
<span class="cline-any cline-neutral"> </span>
|
|
190
190
|
<span class="cline-any cline-neutral"> </span>
|
|
191
|
-
<span class="cline-any cline-yes">
|
|
191
|
+
<span class="cline-any cline-yes">16x</span>
|
|
192
192
|
<span class="cline-any cline-neutral"> </span>
|
|
193
193
|
<span class="cline-any cline-neutral"> </span>
|
|
194
|
-
<span class="cline-any cline-yes">
|
|
194
|
+
<span class="cline-any cline-yes">2x</span>
|
|
195
195
|
<span class="cline-any cline-neutral"> </span>
|
|
196
196
|
<span class="cline-any cline-neutral"> </span>
|
|
197
197
|
<span class="cline-any cline-neutral"> </span>
|
|
198
198
|
<span class="cline-any cline-neutral"> </span>
|
|
199
|
-
<span class="cline-any cline-yes">
|
|
200
|
-
<span class="cline-any cline-yes">
|
|
199
|
+
<span class="cline-any cline-yes">16x</span>
|
|
200
|
+
<span class="cline-any cline-yes">16x</span>
|
|
201
201
|
<span class="cline-any cline-neutral"> </span>
|
|
202
202
|
<span class="cline-any cline-neutral"> </span>
|
|
203
203
|
<span class="cline-any cline-neutral"> </span>
|
|
204
204
|
<span class="cline-any cline-neutral"> </span>
|
|
205
|
-
<span class="cline-any cline-yes">
|
|
205
|
+
<span class="cline-any cline-yes">16x</span>
|
|
206
206
|
<span class="cline-any cline-neutral"> </span>
|
|
207
|
-
<span class="cline-any cline-yes">
|
|
207
|
+
<span class="cline-any cline-yes">16x</span>
|
|
208
208
|
<span class="cline-any cline-no"> </span>
|
|
209
209
|
<span class="cline-any cline-neutral"> </span>
|
|
210
|
-
<span class="cline-any cline-yes">
|
|
210
|
+
<span class="cline-any cline-yes">16x</span>
|
|
211
211
|
<span class="cline-any cline-yes">14x</span>
|
|
212
212
|
<span class="cline-any cline-neutral"> </span>
|
|
213
|
-
<span class="cline-any cline-yes">
|
|
213
|
+
<span class="cline-any cline-yes">16x</span>
|
|
214
214
|
<span class="cline-any cline-neutral"> </span>
|
|
215
215
|
<span class="cline-any cline-neutral"> </span>
|
|
216
|
-
<span class="cline-any cline-yes">
|
|
216
|
+
<span class="cline-any cline-yes">14x</span>
|
|
217
217
|
<span class="cline-any cline-yes">14x</span>
|
|
218
218
|
<span class="cline-any cline-yes">26x</span>
|
|
219
219
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -228,7 +228,7 @@ import { join } from "path"
|
|
|
228
228
|
import { db as dbCore, tenancy } from "@budibase/backend-core"
|
|
229
229
|
import { Template } from "@budibase/types"
|
|
230
230
|
|
|
231
|
-
export const EmailTemplates = {
|
|
231
|
+
export const <span class="cstat-no" title="statement not covered" >EmailTemplates<span class="fstat-no" title="function not covered" > </span>= {</span>
|
|
232
232
|
[EmailTemplatePurpose.PASSWORD_RECOVERY]: readStaticFile(
|
|
233
233
|
join(__dirname, "passwordRecovery.hbs")
|
|
234
234
|
),
|
|
@@ -242,20 +242,20 @@ export const EmailTemplates = {
|
|
|
242
242
|
[EmailTemplatePurpose.CUSTOM]: readStaticFile(join(__dirname, "custom.hbs")),
|
|
243
243
|
}
|
|
244
244
|
|
|
245
|
-
export function addBaseTemplates(
|
|
245
|
+
export function <span class="cstat-no" title="statement not covered" >addBaseTemplates<span class="fstat-no" title="function not covered" >(</span>t</span>emplates: Template[], type?: string) {
|
|
246
246
|
let purposeList
|
|
247
247
|
switch (type) {
|
|
248
248
|
case TemplateType.EMAIL:
|
|
249
249
|
purposeList = Object.values(EmailTemplatePurpose)
|
|
250
250
|
break
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
251
|
+
default:
|
|
252
|
+
purposeList = Object.values(TemplatePurpose)
|
|
253
|
+
break
|
|
254
254
|
}
|
|
255
255
|
for (let purpose of purposeList) {
|
|
256
256
|
// check if a template exists already for purpose
|
|
257
|
-
|
|
258
|
-
|
|
257
|
+
if (templates.find(template => template.purpose === purpose)) {
|
|
258
|
+
continue
|
|
259
259
|
}
|
|
260
260
|
if (EmailTemplates[purpose]) {
|
|
261
261
|
templates.push({
|
|
@@ -272,20 +272,20 @@ export async function getTemplates({
|
|
|
272
272
|
ownerId,
|
|
273
273
|
type,
|
|
274
274
|
id,
|
|
275
|
-
}: { ownerId?: string; type?: string; id?: string } =
|
|
275
|
+
}: { ownerId?: string; type?: string; id?: string } = {}) {
|
|
276
276
|
const db = tenancy.getGlobalDB()
|
|
277
277
|
const response = await db.allDocs(
|
|
278
278
|
dbCore.getTemplateParams(ownerId || GLOBAL_OWNER, id, {
|
|
279
279
|
include_docs: true,
|
|
280
280
|
})
|
|
281
281
|
)
|
|
282
|
-
let templates = response.rows.map(
|
|
282
|
+
let templates = response.rows.map(row => row.doc)
|
|
283
283
|
// should only be one template with ID
|
|
284
284
|
<span class="missing-if-branch" title="if path not taken" >I</span>if (id) {
|
|
285
285
|
<span class="cstat-no" title="statement not covered" > return templates[0]</span>
|
|
286
286
|
}
|
|
287
287
|
if (type) {
|
|
288
|
-
templates = templates.filter(
|
|
288
|
+
templates = templates.filter(template => template.type === type)
|
|
289
289
|
}
|
|
290
290
|
return addBaseTemplates(templates, type)
|
|
291
291
|
}
|
|
@@ -301,7 +301,7 @@ export async function getTemplateByPurpose(type: string, purpose: string) {
|
|
|
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
|
|
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>
|
|
@@ -23,30 +23,30 @@
|
|
|
23
23
|
<div class='clearfix'>
|
|
24
24
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">
|
|
26
|
+
<span class="strong">87.5% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>7/8</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">
|
|
33
|
+
<span class="strong">66.66% </span>
|
|
34
34
|
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>
|
|
35
|
+
<span class='fraction'>2/3</span>
|
|
36
36
|
</div>
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
<div class='fl pad1y space-right2'>
|
|
40
40
|
<span class="strong">100% </span>
|
|
41
41
|
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>
|
|
42
|
+
<span class='fraction'>2/2</span>
|
|
43
43
|
</div>
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">
|
|
47
|
+
<span class="strong">85.71% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>6/7</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -80,17 +80,17 @@
|
|
|
80
80
|
</thead>
|
|
81
81
|
<tbody><tr>
|
|
82
82
|
<td class="file high" data-value="index.ts"><a href="index.ts.html">index.ts</a></td>
|
|
83
|
-
<td data-value="
|
|
84
|
-
<div class="chart"><div class="cover-fill
|
|
83
|
+
<td data-value="87.5" class="pic high">
|
|
84
|
+
<div class="chart"><div class="cover-fill" style="width: 87%"></div><div class="cover-empty" style="width: 13%"></div></div>
|
|
85
85
|
</td>
|
|
86
|
+
<td data-value="87.5" class="pct high">87.5%</td>
|
|
87
|
+
<td data-value="8" class="abs high">7/8</td>
|
|
88
|
+
<td data-value="66.66" class="pct medium">66.66%</td>
|
|
89
|
+
<td data-value="3" class="abs medium">2/3</td>
|
|
86
90
|
<td data-value="100" class="pct high">100%</td>
|
|
87
|
-
<td data-value="
|
|
88
|
-
<td data-value="
|
|
89
|
-
<td data-value="
|
|
90
|
-
<td data-value="100" class="pct high">100%</td>
|
|
91
|
-
<td data-value="1" class="abs high">1/1</td>
|
|
92
|
-
<td data-value="100" class="pct high">100%</td>
|
|
93
|
-
<td data-value="7" class="abs high">7/7</td>
|
|
91
|
+
<td data-value="2" class="abs high">2/2</td>
|
|
92
|
+
<td data-value="85.71" class="pct high">85.71%</td>
|
|
93
|
+
<td data-value="7" class="abs high">6/7</td>
|
|
94
94
|
</tr>
|
|
95
95
|
|
|
96
96
|
</tbody>
|
|
@@ -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
|
|
104
|
+
at Mon Feb 06 2023 09:20:59 GMT+0000 (Coordinated Universal Time)
|
|
105
105
|
</div>
|
|
106
106
|
<script src="../../prettify.js"></script>
|
|
107
107
|
<script>
|