privalint 0.6.1 → 0.7.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 (59) hide show
  1. package/NOTICE +25 -0
  2. package/README.de.md +26 -15
  3. package/README.md +34 -25
  4. package/dist/assessment.d.ts +1 -1
  5. package/dist/assessment.js +49 -21
  6. package/dist/assessment.js.map +1 -1
  7. package/dist/capture.d.ts +6 -1
  8. package/dist/capture.js +20 -4
  9. package/dist/capture.js.map +1 -1
  10. package/dist/cli.js +5 -1
  11. package/dist/cli.js.map +1 -1
  12. package/dist/config.d.ts +1 -0
  13. package/dist/config.js +3 -0
  14. package/dist/config.js.map +1 -1
  15. package/dist/consent.d.ts +7 -1
  16. package/dist/consent.js +224 -5
  17. package/dist/consent.js.map +1 -1
  18. package/dist/coverage.js +8 -1
  19. package/dist/coverage.js.map +1 -1
  20. package/dist/data/open-cookie-database.d.ts +10 -0
  21. package/dist/data/open-cookie-database.js +1498 -0
  22. package/dist/data/open-cookie-database.js.map +1 -0
  23. package/dist/data/third-parties.js +59 -0
  24. package/dist/data/third-parties.js.map +1 -1
  25. package/dist/data/trackers.d.ts +9 -2
  26. package/dist/data/trackers.js +34 -2
  27. package/dist/data/trackers.js.map +1 -1
  28. package/dist/legal.d.ts +1 -1
  29. package/dist/legal.js +21 -3
  30. package/dist/legal.js.map +1 -1
  31. package/dist/report-contract.d.ts +2 -2
  32. package/dist/report-contract.js +2 -2
  33. package/dist/report-contract.js.map +1 -1
  34. package/dist/reporters/capture.js +20 -0
  35. package/dist/reporters/capture.js.map +1 -1
  36. package/dist/rules/impressum-link.js +1 -1
  37. package/dist/rules/impressum-link.js.map +1 -1
  38. package/dist/rules/index.d.ts +2 -1
  39. package/dist/rules/index.js +3 -1
  40. package/dist/rules/index.js.map +1 -1
  41. package/dist/rules/privacy-policy-link.js +1 -1
  42. package/dist/rules/privacy-policy-link.js.map +1 -1
  43. package/dist/rules/tracker-hits.d.ts +3 -2
  44. package/dist/rules/tracker-hits.js +1 -2
  45. package/dist/rules/tracker-hits.js.map +1 -1
  46. package/dist/rules/trackers-after-settings.d.ts +2 -0
  47. package/dist/rules/trackers-after-settings.js +42 -0
  48. package/dist/rules/trackers-after-settings.js.map +1 -0
  49. package/dist/scan-options.d.ts +5 -0
  50. package/dist/scan-options.js.map +1 -1
  51. package/dist/scanner.js +42 -7
  52. package/dist/scanner.js.map +1 -1
  53. package/dist/types.d.ts +36 -4
  54. package/dist/url.d.ts +7 -3
  55. package/dist/url.js +18 -5
  56. package/dist/url.js.map +1 -1
  57. package/package.json +6 -3
  58. package/schemas/report-1.3.0.schema.json +912 -0
  59. package/schemas/sarif-properties-1.3.0.schema.json +888 -0
@@ -0,0 +1,888 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://github.com/JExcellence/privalint/raw/refs/heads/main/schemas/sarif-properties-1.3.0.schema.json",
4
+ "title": "PrivaLint SARIF run properties 1.3.0",
5
+ "description": "Validates PrivaLint run.properties only, not the enclosing SARIF 2.1.0 standard.",
6
+ "type": "object",
7
+ "properties": {
8
+ "scanId": {
9
+ "type": "string",
10
+ "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"
11
+ },
12
+ "schemaVersion": {
13
+ "const": "1.3.0"
14
+ },
15
+ "scannerVersion": {
16
+ "type": "string"
17
+ },
18
+ "options": {
19
+ "$ref": "#/$defs/options"
20
+ },
21
+ "coverage": {
22
+ "type": "string",
23
+ "enum": [
24
+ "complete",
25
+ "partial"
26
+ ]
27
+ },
28
+ "observations": {
29
+ "type": "array",
30
+ "items": {
31
+ "type": "object",
32
+ "properties": {
33
+ "pageId": {
34
+ "type": "string",
35
+ "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"
36
+ },
37
+ "url": {
38
+ "type": "string"
39
+ },
40
+ "capture": {
41
+ "$ref": "#/$defs/capture"
42
+ },
43
+ "ruleEvaluations": {
44
+ "type": "array",
45
+ "items": {
46
+ "$ref": "#/$defs/evaluation"
47
+ }
48
+ }
49
+ },
50
+ "required": [
51
+ "pageId",
52
+ "url",
53
+ "capture",
54
+ "ruleEvaluations"
55
+ ]
56
+ }
57
+ },
58
+ "consent": {
59
+ "$ref": "#/$defs/consent"
60
+ }
61
+ },
62
+ "required": [
63
+ "scanId",
64
+ "schemaVersion",
65
+ "scannerVersion",
66
+ "options",
67
+ "coverage",
68
+ "observations"
69
+ ],
70
+ "$defs": {
71
+ "diagnostic": {
72
+ "type": "object",
73
+ "properties": {
74
+ "kind": {
75
+ "type": "string",
76
+ "enum": [
77
+ "security-blocked",
78
+ "unsupported-method",
79
+ "unsupported-protocol",
80
+ "dns",
81
+ "tls",
82
+ "connection",
83
+ "timeout",
84
+ "resource-limit",
85
+ "http-error",
86
+ "browser-failure",
87
+ "skipped",
88
+ "aborted"
89
+ ]
90
+ },
91
+ "phase": {
92
+ "type": "string",
93
+ "enum": [
94
+ "before-consent",
95
+ "after-reject"
96
+ ]
97
+ },
98
+ "url": {
99
+ "type": "string",
100
+ "pattern": "^(https?://[^/?#@\\s]+/\\[redacted\\]|\\[redacted\\])$"
101
+ },
102
+ "status": {
103
+ "type": "integer",
104
+ "minimum": 100,
105
+ "maximum": 599
106
+ },
107
+ "limit": {
108
+ "type": "string",
109
+ "enum": [
110
+ "requests",
111
+ "response-bytes",
112
+ "total-bytes",
113
+ "redirects"
114
+ ]
115
+ },
116
+ "skippedReason": {
117
+ "type": "string",
118
+ "enum": [
119
+ "beacon",
120
+ "unsupported-method",
121
+ "unsupported-protocol",
122
+ "policy",
123
+ "cancelled-by-page"
124
+ ]
125
+ }
126
+ },
127
+ "required": [
128
+ "kind",
129
+ "phase",
130
+ "url"
131
+ ]
132
+ },
133
+ "diagnostics": {
134
+ "type": "object",
135
+ "properties": {
136
+ "requests": {
137
+ "type": "integer",
138
+ "minimum": 0
139
+ },
140
+ "omittedRequests": {
141
+ "type": "integer",
142
+ "minimum": 0
143
+ },
144
+ "responses": {
145
+ "type": "integer",
146
+ "minimum": 0
147
+ },
148
+ "finished": {
149
+ "type": "integer",
150
+ "minimum": 0
151
+ },
152
+ "failed": {
153
+ "type": "integer",
154
+ "minimum": 0
155
+ },
156
+ "blocked": {
157
+ "type": "integer",
158
+ "minimum": 0
159
+ },
160
+ "skippedRequests": {
161
+ "type": "integer",
162
+ "minimum": 0
163
+ },
164
+ "failedRequests": {
165
+ "type": "integer",
166
+ "minimum": 0
167
+ },
168
+ "securityBlockedRequests": {
169
+ "type": "integer",
170
+ "minimum": 0
171
+ },
172
+ "httpErrors": {
173
+ "type": "integer",
174
+ "minimum": 0
175
+ },
176
+ "bytes": {
177
+ "type": "integer",
178
+ "minimum": 0
179
+ },
180
+ "issueCount": {
181
+ "type": "integer",
182
+ "minimum": 0
183
+ },
184
+ "dropped": {
185
+ "type": "integer",
186
+ "minimum": 0
187
+ },
188
+ "issues": {
189
+ "type": "array",
190
+ "items": {
191
+ "$ref": "#/$defs/diagnostic"
192
+ }
193
+ }
194
+ },
195
+ "required": [
196
+ "requests",
197
+ "omittedRequests",
198
+ "responses",
199
+ "finished",
200
+ "failed",
201
+ "blocked",
202
+ "skippedRequests",
203
+ "failedRequests",
204
+ "securityBlockedRequests",
205
+ "httpErrors",
206
+ "bytes",
207
+ "issueCount",
208
+ "dropped",
209
+ "issues"
210
+ ]
211
+ },
212
+ "capture": {
213
+ "type": "object",
214
+ "properties": {
215
+ "complete": {
216
+ "type": "boolean"
217
+ },
218
+ "beforeConsentComplete": {
219
+ "type": "boolean"
220
+ },
221
+ "document": {
222
+ "type": "boolean"
223
+ },
224
+ "diagnostics": {
225
+ "$ref": "#/$defs/diagnostics"
226
+ }
227
+ },
228
+ "required": [
229
+ "complete",
230
+ "beforeConsentComplete",
231
+ "document",
232
+ "diagnostics"
233
+ ],
234
+ "allOf": [
235
+ {
236
+ "if": {
237
+ "properties": {
238
+ "complete": {
239
+ "const": true
240
+ }
241
+ },
242
+ "required": [
243
+ "complete"
244
+ ]
245
+ },
246
+ "then": {
247
+ "properties": {
248
+ "document": {
249
+ "const": true
250
+ },
251
+ "beforeConsentComplete": {
252
+ "const": true
253
+ },
254
+ "diagnostics": {
255
+ "type": "object",
256
+ "properties": {
257
+ "omittedRequests": {
258
+ "const": 0
259
+ },
260
+ "failed": {
261
+ "const": 0
262
+ },
263
+ "blocked": {
264
+ "const": 0
265
+ },
266
+ "skippedRequests": {
267
+ "const": 0
268
+ },
269
+ "failedRequests": {
270
+ "const": 0
271
+ },
272
+ "securityBlockedRequests": {
273
+ "const": 0
274
+ },
275
+ "httpErrors": {
276
+ "const": 0
277
+ },
278
+ "issueCount": {
279
+ "const": 0
280
+ },
281
+ "dropped": {
282
+ "const": 0
283
+ }
284
+ }
285
+ }
286
+ }
287
+ }
288
+ }
289
+ ]
290
+ },
291
+ "evaluation": {
292
+ "type": "object",
293
+ "properties": {
294
+ "pageId": {
295
+ "type": "string",
296
+ "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"
297
+ },
298
+ "ruleId": {
299
+ "type": "string"
300
+ },
301
+ "status": {
302
+ "type": "string",
303
+ "enum": [
304
+ "executed",
305
+ "skipped",
306
+ "not-evaluable"
307
+ ]
308
+ },
309
+ "reason": {
310
+ "type": "string",
311
+ "enum": [
312
+ "disabled",
313
+ "consent-disabled",
314
+ "not-start-page",
315
+ "missing-observation",
316
+ "no-consent-needed",
317
+ "settings-check-disabled"
318
+ ]
319
+ },
320
+ "partial": {
321
+ "type": "boolean"
322
+ },
323
+ "outcome": {
324
+ "type": "string",
325
+ "enum": [
326
+ "checked-no-finding",
327
+ "finding-detected",
328
+ "not-evaluable"
329
+ ]
330
+ },
331
+ "explanation": {
332
+ "type": "string",
333
+ "enum": [
334
+ "disabled",
335
+ "not-start-page",
336
+ "consent-disabled",
337
+ "missing-reject-observation",
338
+ "missing-consent-observation",
339
+ "incomplete-document",
340
+ "positive-evidence",
341
+ "incomplete-observation",
342
+ "required-observations-available",
343
+ "no-supported-banner",
344
+ "no-supported-reject-control",
345
+ "unsupported-banner-markup",
346
+ "browser-interaction-failed",
347
+ "reject-clicked-and-reloaded",
348
+ "no-consent-needed",
349
+ "settings-check-disabled",
350
+ "missing-settings-observation",
351
+ "no-settings-control",
352
+ "no-save-control",
353
+ "settings-saved-and-reloaded"
354
+ ]
355
+ },
356
+ "findingCount": {
357
+ "type": "integer",
358
+ "minimum": 0
359
+ }
360
+ },
361
+ "required": [
362
+ "pageId",
363
+ "ruleId",
364
+ "status",
365
+ "partial",
366
+ "outcome",
367
+ "explanation",
368
+ "findingCount"
369
+ ],
370
+ "allOf": [
371
+ {
372
+ "if": {
373
+ "properties": {
374
+ "outcome": {
375
+ "const": "checked-no-finding"
376
+ }
377
+ },
378
+ "required": [
379
+ "outcome"
380
+ ]
381
+ },
382
+ "then": {
383
+ "properties": {
384
+ "findingCount": {
385
+ "const": 0
386
+ },
387
+ "partial": {
388
+ "const": false
389
+ },
390
+ "status": {
391
+ "const": "executed"
392
+ }
393
+ }
394
+ }
395
+ },
396
+ {
397
+ "if": {
398
+ "properties": {
399
+ "outcome": {
400
+ "const": "finding-detected"
401
+ }
402
+ },
403
+ "required": [
404
+ "outcome"
405
+ ]
406
+ },
407
+ "then": {
408
+ "properties": {
409
+ "findingCount": {
410
+ "type": "integer",
411
+ "minimum": 1
412
+ },
413
+ "status": {
414
+ "const": "executed"
415
+ }
416
+ }
417
+ }
418
+ }
419
+ ]
420
+ },
421
+ "page": {
422
+ "type": "object",
423
+ "properties": {
424
+ "pageId": {
425
+ "type": "string",
426
+ "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"
427
+ },
428
+ "url": {
429
+ "type": "string"
430
+ },
431
+ "finalUrl": {
432
+ "type": "string"
433
+ },
434
+ "status": {
435
+ "anyOf": [
436
+ {
437
+ "type": "integer",
438
+ "minimum": 100,
439
+ "maximum": 599
440
+ },
441
+ {
442
+ "type": "null"
443
+ }
444
+ ]
445
+ },
446
+ "requestCount": {
447
+ "type": "integer",
448
+ "minimum": 0
449
+ },
450
+ "cookieCount": {
451
+ "type": "integer",
452
+ "minimum": 0
453
+ },
454
+ "error": {
455
+ "type": "string"
456
+ },
457
+ "capture": {
458
+ "$ref": "#/$defs/capture"
459
+ },
460
+ "ruleEvaluations": {
461
+ "type": "array",
462
+ "items": {
463
+ "$ref": "#/$defs/evaluation"
464
+ }
465
+ }
466
+ },
467
+ "required": [
468
+ "pageId",
469
+ "url",
470
+ "finalUrl",
471
+ "status",
472
+ "requestCount",
473
+ "cookieCount",
474
+ "capture",
475
+ "ruleEvaluations"
476
+ ]
477
+ },
478
+ "finding": {
479
+ "type": "object",
480
+ "properties": {
481
+ "pageId": {
482
+ "type": "string",
483
+ "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"
484
+ },
485
+ "ruleId": {
486
+ "type": "string"
487
+ },
488
+ "severity": {
489
+ "type": "string",
490
+ "enum": [
491
+ "error",
492
+ "warning",
493
+ "info"
494
+ ]
495
+ },
496
+ "message": {
497
+ "type": "string"
498
+ },
499
+ "pageUrl": {
500
+ "type": "string"
501
+ },
502
+ "evidence": {
503
+ "type": "array",
504
+ "items": {
505
+ "type": "string"
506
+ }
507
+ },
508
+ "fix": {
509
+ "type": "string"
510
+ },
511
+ "subject": {
512
+ "type": "string"
513
+ },
514
+ "references": {
515
+ "type": "array",
516
+ "items": {
517
+ "type": "string"
518
+ }
519
+ },
520
+ "policy": {
521
+ "type": "object",
522
+ "properties": {
523
+ "allowed": {
524
+ "type": "boolean"
525
+ },
526
+ "originalSeverity": {
527
+ "type": "string",
528
+ "enum": [
529
+ "error",
530
+ "warning",
531
+ "info"
532
+ ]
533
+ }
534
+ },
535
+ "required": [
536
+ "allowed",
537
+ "originalSeverity"
538
+ ]
539
+ }
540
+ },
541
+ "required": [
542
+ "pageId",
543
+ "ruleId",
544
+ "severity",
545
+ "message",
546
+ "pageUrl",
547
+ "evidence"
548
+ ]
549
+ },
550
+ "consent": {
551
+ "type": "object",
552
+ "properties": {
553
+ "bannerFound": {
554
+ "type": "boolean"
555
+ },
556
+ "rejected": {
557
+ "type": "boolean"
558
+ },
559
+ "state": {
560
+ "type": "string",
561
+ "enum": [
562
+ "not-detected",
563
+ "reject-unavailable",
564
+ "interaction-failed",
565
+ "reject-tested"
566
+ ]
567
+ },
568
+ "outcome": {
569
+ "type": "string",
570
+ "enum": [
571
+ "no-banner-detected",
572
+ "unsupported-banner",
573
+ "interaction-failed",
574
+ "reject-succeeded"
575
+ ]
576
+ },
577
+ "reason": {
578
+ "type": "string",
579
+ "enum": [
580
+ "no-supported-banner",
581
+ "no-supported-reject-control",
582
+ "unsupported-banner-markup",
583
+ "browser-interaction-failed",
584
+ "reject-clicked-and-reloaded"
585
+ ]
586
+ },
587
+ "cmp": {
588
+ "type": "string"
589
+ },
590
+ "acceptLabel": {
591
+ "type": "string"
592
+ },
593
+ "rejectLabel": {
594
+ "type": "string"
595
+ },
596
+ "payOrOk": {
597
+ "type": "boolean"
598
+ },
599
+ "afterRejectComplete": {
600
+ "type": "boolean"
601
+ },
602
+ "settingsControl": {
603
+ "type": "object",
604
+ "properties": {
605
+ "found": {
606
+ "type": "boolean"
607
+ },
608
+ "label": {
609
+ "type": "string"
610
+ }
611
+ },
612
+ "required": [
613
+ "found"
614
+ ]
615
+ },
616
+ "settings": {
617
+ "type": "object",
618
+ "properties": {
619
+ "outcome": {
620
+ "type": "string",
621
+ "enum": [
622
+ "no-settings-control",
623
+ "no-save-control",
624
+ "interaction-failed",
625
+ "saved"
626
+ ]
627
+ },
628
+ "reason": {
629
+ "type": "string",
630
+ "enum": [
631
+ "no-settings-control",
632
+ "no-save-control",
633
+ "browser-interaction-failed",
634
+ "settings-saved-and-reloaded"
635
+ ]
636
+ },
637
+ "openLabel": {
638
+ "type": "string"
639
+ },
640
+ "saveLabel": {
641
+ "type": "string"
642
+ },
643
+ "switchedOff": {
644
+ "type": "integer",
645
+ "minimum": 0
646
+ },
647
+ "afterSaveComplete": {
648
+ "type": "boolean"
649
+ },
650
+ "error": {
651
+ "type": "string"
652
+ }
653
+ },
654
+ "required": [
655
+ "outcome",
656
+ "reason"
657
+ ]
658
+ },
659
+ "error": {
660
+ "type": "string"
661
+ }
662
+ },
663
+ "required": [
664
+ "bannerFound",
665
+ "rejected",
666
+ "state",
667
+ "outcome",
668
+ "reason"
669
+ ]
670
+ },
671
+ "rule": {
672
+ "type": "object",
673
+ "properties": {
674
+ "id": {
675
+ "type": "string"
676
+ },
677
+ "title": {
678
+ "type": "string"
679
+ },
680
+ "description": {
681
+ "type": "string"
682
+ },
683
+ "references": {
684
+ "type": "array",
685
+ "items": {
686
+ "type": "string"
687
+ }
688
+ },
689
+ "requires": {
690
+ "type": "array",
691
+ "items": {
692
+ "type": "string",
693
+ "enum": [
694
+ "document",
695
+ "network",
696
+ "consent",
697
+ "after-reject",
698
+ "after-settings"
699
+ ]
700
+ }
701
+ }
702
+ },
703
+ "required": [
704
+ "id",
705
+ "title",
706
+ "description",
707
+ "references"
708
+ ]
709
+ },
710
+ "networkLimits": {
711
+ "type": "object",
712
+ "properties": {
713
+ "concurrency": {
714
+ "type": "integer",
715
+ "minimum": 1
716
+ },
717
+ "maxRequests": {
718
+ "type": "integer",
719
+ "minimum": 1
720
+ },
721
+ "maxResponseBytes": {
722
+ "type": "integer",
723
+ "minimum": 1
724
+ },
725
+ "maxTotalBytes": {
726
+ "type": "integer",
727
+ "minimum": 1
728
+ },
729
+ "maxRedirects": {
730
+ "type": "integer",
731
+ "minimum": 0
732
+ },
733
+ "requestTimeoutMs": {
734
+ "type": "integer",
735
+ "minimum": 1
736
+ }
737
+ },
738
+ "required": [
739
+ "concurrency",
740
+ "maxRequests",
741
+ "maxResponseBytes",
742
+ "maxTotalBytes",
743
+ "maxRedirects",
744
+ "requestTimeoutMs"
745
+ ]
746
+ },
747
+ "options": {
748
+ "type": "object",
749
+ "properties": {
750
+ "maxPages": {
751
+ "type": "integer",
752
+ "minimum": 1
753
+ },
754
+ "settleMs": {
755
+ "type": "integer",
756
+ "minimum": 0
757
+ },
758
+ "timeoutMs": {
759
+ "type": "integer",
760
+ "minimum": 1
761
+ },
762
+ "locale": {
763
+ "type": "string"
764
+ },
765
+ "lang": {
766
+ "type": "string",
767
+ "enum": [
768
+ "en",
769
+ "de"
770
+ ]
771
+ },
772
+ "region": {
773
+ "type": "string",
774
+ "enum": [
775
+ "de",
776
+ "at",
777
+ "ch",
778
+ "hu",
779
+ "eu"
780
+ ]
781
+ },
782
+ "consentCheck": {
783
+ "type": "boolean"
784
+ },
785
+ "headed": {
786
+ "type": "boolean"
787
+ },
788
+ "channel": {
789
+ "type": "string"
790
+ },
791
+ "captureTimeoutMs": {
792
+ "anyOf": [
793
+ {
794
+ "type": "integer",
795
+ "minimum": 1
796
+ },
797
+ {
798
+ "type": "null"
799
+ }
800
+ ]
801
+ },
802
+ "maxDiagnostics": {
803
+ "type": "integer",
804
+ "minimum": 0
805
+ },
806
+ "failureMode": {
807
+ "type": "string",
808
+ "enum": [
809
+ "throw",
810
+ "report"
811
+ ]
812
+ },
813
+ "captureMode": {
814
+ "type": "string",
815
+ "enum": [
816
+ "native",
817
+ "adapter",
818
+ "offline-fixture"
819
+ ]
820
+ },
821
+ "networkLimits": {
822
+ "anyOf": [
823
+ {
824
+ "$ref": "#/$defs/networkLimits"
825
+ },
826
+ {
827
+ "type": "null"
828
+ }
829
+ ]
830
+ },
831
+ "selectedRules": {
832
+ "type": "array",
833
+ "items": {
834
+ "type": "string"
835
+ },
836
+ "uniqueItems": true
837
+ },
838
+ "ruleSettings": {
839
+ "type": "object",
840
+ "additionalProperties": {
841
+ "type": "string",
842
+ "enum": [
843
+ "error",
844
+ "warning",
845
+ "info",
846
+ "off"
847
+ ]
848
+ }
849
+ },
850
+ "allowedVendors": {
851
+ "type": "array",
852
+ "items": {
853
+ "type": "string"
854
+ }
855
+ },
856
+ "sandbox": {
857
+ "type": "boolean"
858
+ },
859
+ "concurrency": {
860
+ "type": "integer",
861
+ "minimum": 1
862
+ },
863
+ "settingsCheck": {
864
+ "type": "boolean"
865
+ }
866
+ },
867
+ "required": [
868
+ "maxPages",
869
+ "settleMs",
870
+ "timeoutMs",
871
+ "locale",
872
+ "lang",
873
+ "region",
874
+ "consentCheck",
875
+ "headed",
876
+ "channel",
877
+ "captureTimeoutMs",
878
+ "maxDiagnostics",
879
+ "failureMode",
880
+ "captureMode",
881
+ "networkLimits",
882
+ "selectedRules",
883
+ "ruleSettings",
884
+ "allowedVendors"
885
+ ]
886
+ }
887
+ }
888
+ }