privalint 0.6.0 → 0.7.0

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