@magield/collectors 0.0.0-stage → 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/LICENSE +27 -0
  2. package/dist/behavior/recorder.d.ts +33 -0
  3. package/dist/behavior/recorder.js +303 -0
  4. package/dist/hash.d.ts +15 -0
  5. package/dist/hash.js +27 -0
  6. package/dist/index.d.ts +7 -0
  7. package/dist/index.js +7 -0
  8. package/dist/native.d.ts +39 -0
  9. package/dist/native.js +142 -0
  10. package/dist/registry.d.ts +57 -0
  11. package/dist/registry.js +108 -0
  12. package/dist/run.d.ts +10 -0
  13. package/dist/run.js +128 -0
  14. package/dist/signals/adblock.d.ts +2 -0
  15. package/dist/signals/adblock.js +135 -0
  16. package/dist/signals/apps.d.ts +2 -0
  17. package/dist/signals/apps.js +191 -0
  18. package/dist/signals/audio.d.ts +16 -0
  19. package/dist/signals/audio.js +63 -0
  20. package/dist/signals/automation.d.ts +2 -0
  21. package/dist/signals/automation.js +346 -0
  22. package/dist/signals/behavior.d.ts +17 -0
  23. package/dist/signals/behavior.js +31 -0
  24. package/dist/signals/capabilities.d.ts +2 -0
  25. package/dist/signals/capabilities.js +235 -0
  26. package/dist/signals/devices.d.ts +2 -0
  27. package/dist/signals/devices.js +119 -0
  28. package/dist/signals/display.d.ts +2 -0
  29. package/dist/signals/display.js +101 -0
  30. package/dist/signals/errors.d.ts +2 -0
  31. package/dist/signals/errors.js +84 -0
  32. package/dist/signals/features.d.ts +2 -0
  33. package/dist/signals/features.js +951 -0
  34. package/dist/signals/fonts.d.ts +2 -0
  35. package/dist/signals/fonts.js +128 -0
  36. package/dist/signals/integrity.d.ts +2 -0
  37. package/dist/signals/integrity.js +216 -0
  38. package/dist/signals/math.d.ts +2 -0
  39. package/dist/signals/math.js +43 -0
  40. package/dist/signals/navigator.d.ts +10 -0
  41. package/dist/signals/navigator.js +81 -0
  42. package/dist/signals/pointer.d.ts +2 -0
  43. package/dist/signals/pointer.js +93 -0
  44. package/dist/signals/render.d.ts +12 -0
  45. package/dist/signals/render.js +214 -0
  46. package/dist/signals/screen.d.ts +9 -0
  47. package/dist/signals/screen.js +80 -0
  48. package/dist/signals/storage.d.ts +33 -0
  49. package/dist/signals/storage.js +100 -0
  50. package/dist/signals/timezone.d.ts +9 -0
  51. package/dist/signals/timezone.js +63 -0
  52. package/dist/signals/webrtc.d.ts +2 -0
  53. package/dist/signals/webrtc.js +168 -0
  54. package/dist/stable-core.d.ts +128 -0
  55. package/dist/stable-core.js +187 -0
  56. package/dist/types.d.ts +54 -0
  57. package/dist/types.js +15 -0
  58. package/package.json +31 -3
  59. package/README.md +0 -3
@@ -0,0 +1,951 @@
1
+ import { hash } from '../hash.js';
2
+ /**
3
+ * Which APIs exist.
4
+ *
5
+ * Feature support tracks engine and version closely, and it is expensive to
6
+ * fake convincingly: a user agent string is one edit, whereas a matching
7
+ * feature matrix means knowing what shipped in which release. A UA claiming
8
+ * Chrome 141 with the matrix of Chrome 118 is a contradiction that costs the
9
+ * attacker real effort to avoid.
10
+ *
11
+ * Width matters more than cleverness here. The list mixes two kinds of name:
12
+ * the dotted paths below, chosen because they shipped in a known release and
13
+ * date the build; and a long tail of platform interface names, which date it
14
+ * less precisely but separate engines and stripped builds sharply. Measured on
15
+ * a real Brave, this was the one signal its farbling left completely alone —
16
+ * `features.hash` was identical across two sessions where canvas, WebGL, cores
17
+ * and memory were all redrawn.
18
+ *
19
+ * Every probe is a property lookup. Nothing is invoked, nothing is
20
+ * constructed, and the whole list runs inside the instant wave.
21
+ */
22
+ const PATHS = [
23
+ 'AbortController',
24
+ 'AbortSignal',
25
+ 'AbsoluteOrientationSensor',
26
+ 'AbstractRange',
27
+ 'Accelerometer',
28
+ 'AmbientLightSensor',
29
+ 'Animation',
30
+ 'AnimationEffect',
31
+ 'AnimationEffectReadOnly',
32
+ 'AnimationPlaybackEvent',
33
+ 'AnimationPlayer',
34
+ 'AnimationTimeline',
35
+ 'Attr',
36
+ 'AudioBuffer',
37
+ 'AudioBufferSourceNode',
38
+ 'AudioContext',
39
+ 'AudioData',
40
+ 'AudioDecoder',
41
+ 'AudioEncoder',
42
+ 'AudioListener',
43
+ 'AudioParam',
44
+ 'AudioParamMap',
45
+ 'AudioProcessingEvent',
46
+ 'AudioScheduledSourceNode',
47
+ 'AudioSession',
48
+ 'AudioSinkInfo',
49
+ 'AudioTrack',
50
+ 'AudioTrackList',
51
+ 'AudioWorklet',
52
+ 'AudioWorkletNode',
53
+ 'AuthenticatorAssertionResponse',
54
+ 'AuthenticatorAttestationResponse',
55
+ 'AuthenticatorResponse',
56
+ 'BackgroundFetchManager',
57
+ 'BackgroundFetchRecord',
58
+ 'BackgroundFetchRegistration',
59
+ 'BarProp',
60
+ 'BaseAudioContext',
61
+ 'BatteryManager',
62
+ 'BeforeInstallPromptEvent',
63
+ 'BiquadFilterNode',
64
+ 'Blob',
65
+ 'BlobBuilder',
66
+ 'BlobEvent',
67
+ 'Bluetooth',
68
+ 'BluetoothCharacteristicProperties',
69
+ 'BluetoothDevice',
70
+ 'BluetoothRemoteGATTCharacteristic',
71
+ 'BluetoothRemoteGATTDescriptor',
72
+ 'BluetoothRemoteGATTServer',
73
+ 'BluetoothRemoteGATTService',
74
+ 'BluetoothUUID',
75
+ 'BroadcastChannel',
76
+ 'BrowserCaptureMediaStreamTrack',
77
+ 'BufferedChangeEvent',
78
+ 'ByteLengthQueuingStrategy',
79
+ 'CDATASection',
80
+ 'CSPViolationReportBody',
81
+ 'CSSAnimation',
82
+ 'CSSConditionRule',
83
+ 'CSSContainerRule',
84
+ 'CSSCounterStyleRule',
85
+ 'CSSFontFaceRule',
86
+ 'CSSFontFeatureValuesMap',
87
+ 'CSSFontFeatureValuesRule',
88
+ 'CSSFontPaletteValuesRule',
89
+ 'CSSGroupingRule',
90
+ 'CSSImageValue',
91
+ 'CSSKeyframeRule',
92
+ 'CSSKeywordValue',
93
+ 'CSSLayerBlockRule',
94
+ 'CSSLayerStatementRule',
95
+ 'CSSMathClamp',
96
+ 'CSSMathInvert',
97
+ 'CSSMathMax',
98
+ 'CSSMathMin',
99
+ 'CSSMathNegate',
100
+ 'CSSMathProduct',
101
+ 'CSSMathSum',
102
+ 'CSSMathValue',
103
+ 'CSSMatrixComponent',
104
+ 'CSSMediaRule',
105
+ 'CSSNamespaceRule',
106
+ 'CSSNumericArray',
107
+ 'CSSNumericValue',
108
+ 'CSSPageDescriptors',
109
+ 'CSSPageRule',
110
+ 'CSSPerspective',
111
+ 'CSSPositionTryDescriptors',
112
+ 'CSSPositionTryRule',
113
+ 'CSSPositionValue',
114
+ 'CSSPrimitiveValue',
115
+ 'CSSPropertyRule',
116
+ 'CSSPseudoElement',
117
+ 'CSSRotate',
118
+ 'CSSRule',
119
+ 'CSSScale',
120
+ 'CSSScopeRule',
121
+ 'CSSSkew',
122
+ 'CSSSkewX',
123
+ 'CSSSkewY',
124
+ 'CSSStartingStyleRule',
125
+ 'CSSStyleRule',
126
+ 'CSSStyleSheet',
127
+ 'CSSStyleValue',
128
+ 'CSSSupportsRule',
129
+ 'CSSTransformComponent',
130
+ 'CSSTransformValue',
131
+ 'CSSTransition',
132
+ 'CSSTranslate',
133
+ 'CSSUnitValue',
134
+ 'CSSUnparsedValue',
135
+ 'CSSValue',
136
+ 'CSSValueList',
137
+ 'CSSVariableReferenceValue',
138
+ 'CSSViewTransitionRule',
139
+ 'Cache',
140
+ 'CacheStorage',
141
+ 'CanMakePaymentEvent',
142
+ 'CanvasCaptureMediaStreamTrack',
143
+ 'CanvasFilter',
144
+ 'CanvasGradient',
145
+ 'CanvasPattern',
146
+ 'CaptureController',
147
+ 'CaretPosition',
148
+ 'ChapterInformation',
149
+ 'CharacterBoundsUpdateEvent',
150
+ 'CharacterData',
151
+ 'ClientRect',
152
+ 'ClientRectList',
153
+ 'Clipboard',
154
+ 'ClipboardItem',
155
+ 'CloseEvent',
156
+ 'CloseWatcher',
157
+ 'CommandEvent',
158
+ 'Comment',
159
+ 'CompositionEvent',
160
+ 'ConstantSourceNode',
161
+ 'ContactAddress',
162
+ 'ContentVisibilityAutoStateChangeEvent',
163
+ 'ContentVisibilityAutoStateChangedEvent',
164
+ 'CookieChangeEvent',
165
+ 'CookieStoreManager',
166
+ 'Coordinates',
167
+ 'CountQueuingStrategy',
168
+ 'Counter',
169
+ 'CrashReportBody',
170
+ 'Credential',
171
+ 'CredentialsContainer',
172
+ 'CropTarget',
173
+ 'CryptoKey',
174
+ 'CustomElementRegistry',
175
+ 'DOMError',
176
+ 'DOMMatrix',
177
+ 'DOMMatrixReadOnly',
178
+ 'DOMPoint',
179
+ 'DOMPointReadOnly',
180
+ 'DOMQuad',
181
+ 'DOMRect',
182
+ 'DOMRectList',
183
+ 'DOMRectReadOnly',
184
+ 'DOMStringList',
185
+ 'DOMStringMap',
186
+ 'DOMTokenList',
187
+ 'DataCue',
188
+ 'DataTransfer',
189
+ 'DataTransferItem',
190
+ 'DataTransferItemList',
191
+ 'DecompressionStream',
192
+ 'DelayNode',
193
+ 'DeprecationReportBody',
194
+ 'DeviceLightEvent',
195
+ 'DeviceMotionEvent',
196
+ 'DeviceMotionEventAcceleration',
197
+ 'DeviceMotionEventRotationRate',
198
+ 'DeviceOrientationEvent',
199
+ 'DevicePosture',
200
+ 'DeviceProximityEvent',
201
+ 'Directory',
202
+ 'Document',
203
+ 'DocumentFragment',
204
+ 'DocumentPictureInPicture',
205
+ 'DocumentPictureInPictureEvent',
206
+ 'DocumentTimeline',
207
+ 'DocumentType',
208
+ 'DragEvent',
209
+ 'EditContext',
210
+ 'Element',
211
+ 'ElementInternals',
212
+ 'EncodedAudioChunk',
213
+ 'EncodedVideoChunk',
214
+ 'EnterPictureInPictureEvent',
215
+ 'ErrorEvent',
216
+ 'Event',
217
+ 'EventCounts',
218
+ 'EventSource',
219
+ 'EyeDropper',
220
+ 'FeaturePolicy',
221
+ 'FederatedCredential',
222
+ 'Fence',
223
+ 'FencedFrameConfig',
224
+ 'File',
225
+ 'FileException',
226
+ 'FileList',
227
+ 'FileSystemDirectoryHandle',
228
+ 'FileSystemFileHandle',
229
+ 'FileSystemSyncAccessHandle',
230
+ 'FileSystemWritableFileStream',
231
+ 'FocusEvent',
232
+ 'FontData',
233
+ 'FontFaceSetLoadEvent',
234
+ 'FormData',
235
+ 'FormDataEvent',
236
+ 'FragmentDirective',
237
+ 'GPUAdapter',
238
+ 'GPUAdapterInfo',
239
+ 'GPUBindGroup',
240
+ 'GPUBindGroupLayout',
241
+ 'GPUBuffer',
242
+ 'GPUCanvasContext',
243
+ 'GPUCommandBuffer',
244
+ 'GPUCommandEncoder',
245
+ 'GPUCompilationInfo',
246
+ 'GPUCompilationMessage',
247
+ 'GPUComputePassEncoder',
248
+ 'GPUComputePipeline',
249
+ 'GPUDevice',
250
+ 'GPUDeviceLostInfo',
251
+ 'GPUError',
252
+ 'GPUExternalTexture',
253
+ 'GPUInternalError',
254
+ 'GPUOutOfMemoryError',
255
+ 'GPUPipelineError',
256
+ 'GPUPipelineLayout',
257
+ 'GPUQuerySet',
258
+ 'GPUQueue',
259
+ 'GPURenderBundle',
260
+ 'GPURenderBundleEncoder',
261
+ 'GPURenderPassEncoder',
262
+ 'GPURenderPipeline',
263
+ 'GPUSampler',
264
+ 'GPUShaderModule',
265
+ 'GPUSupportedFeatures',
266
+ 'GPUSupportedLimits',
267
+ 'GPUTexture',
268
+ 'GPUTextureView',
269
+ 'GPUUncapturedErrorEvent',
270
+ 'GPUValidationError',
271
+ 'GainNode',
272
+ 'Gamepad',
273
+ 'GamepadButton',
274
+ 'GamepadEvent',
275
+ 'GamepadHapticActuator',
276
+ 'GamepadPose',
277
+ 'Geolocation',
278
+ 'GeolocationCoordinates',
279
+ 'GeolocationPosition',
280
+ 'GeolocationPositionError',
281
+ 'GestureEvent',
282
+ 'Gyroscope',
283
+ 'HIDConnectionEvent',
284
+ 'HIDDevice',
285
+ 'HIDInputReportEvent',
286
+ 'HMDVRDevice',
287
+ 'HTMLAllCollection',
288
+ 'HTMLAnchorElement',
289
+ 'HTMLBRElement',
290
+ 'HTMLBaseElement',
291
+ 'HTMLBaseFontElement',
292
+ 'HTMLBodyElement',
293
+ 'HTMLButtonElement',
294
+ 'HTMLCanvasElement',
295
+ 'HTMLCollection',
296
+ 'HTMLContentElement',
297
+ 'HTMLDListElement',
298
+ 'HTMLDataElement',
299
+ 'HTMLDataListElement',
300
+ 'HTMLDetailsElement',
301
+ 'HTMLDirectoryElement',
302
+ 'HTMLDocument',
303
+ 'HTMLElement',
304
+ 'HTMLEmbedElement',
305
+ 'HTMLFieldSetElement',
306
+ 'HTMLFontElement',
307
+ 'HTMLHeadElement',
308
+ 'HTMLHeadingElement',
309
+ 'HTMLImageElement',
310
+ 'HTMLKeygenElement',
311
+ 'HTMLLabelElement',
312
+ 'HTMLLegendElement',
313
+ 'HTMLMapElement',
314
+ 'HTMLMarqueeElement',
315
+ 'HTMLMediaElement',
316
+ 'HTMLMediaError',
317
+ 'HTMLMenuElement',
318
+ 'HTMLModElement',
319
+ 'HTMLOptGroupElement',
320
+ 'HTMLParagraphElement',
321
+ 'HTMLPictureElement',
322
+ 'HTMLPortalElement',
323
+ 'HTMLPreElement',
324
+ 'HTMLSelectElement',
325
+ 'HTMLShadowElement',
326
+ 'HTMLSlotElement',
327
+ 'HTMLStyleElement',
328
+ 'HTMLTableCaptionElement',
329
+ 'HTMLTableCellElement',
330
+ 'HTMLTableElement',
331
+ 'HTMLTableRowElement',
332
+ 'HTMLTemplateElement',
333
+ 'HTMLTextAreaElement',
334
+ 'HTMLTimeElement',
335
+ 'HTMLTitleElement',
336
+ 'HTMLTrackElement',
337
+ 'HTMLVideoElement',
338
+ 'Headers',
339
+ 'Highlight',
340
+ 'HighlightRegistry',
341
+ 'History',
342
+ 'IDBCursor',
343
+ 'IDBCursorWithValue',
344
+ 'IDBDatabase',
345
+ 'IDBFactory',
346
+ 'IDBIndex',
347
+ 'IDBLocaleAwareKeyRange',
348
+ 'IDBObjectStore',
349
+ 'IDBOpenDBRequest',
350
+ 'IDBRequest',
351
+ 'IDBTransaction',
352
+ 'IIRFilterNode',
353
+ 'IdentityCredential',
354
+ 'IdentityProvider',
355
+ 'IdleDeadline',
356
+ 'IdleDetector',
357
+ 'ImageBitmap',
358
+ 'ImageBitmapRenderingContext',
359
+ 'ImageCapture',
360
+ 'ImageDecoder',
361
+ 'ImageTrack',
362
+ 'ImageTrackList',
363
+ 'InkPresenter',
364
+ 'InputDeviceCapabilities',
365
+ 'InputDeviceInfo',
366
+ 'InputEvent',
367
+ 'IntersectionObserver',
368
+ 'IntersectionObserverEntry',
369
+ 'InterventionReportBody',
370
+ 'Keyboard',
371
+ 'KeyboardEvent',
372
+ 'KeyboardLayoutMap',
373
+ 'KeyframeEffect',
374
+ 'LargestContentfulPaint',
375
+ 'LaunchParams',
376
+ 'LaunchQueue',
377
+ 'LayoutShift',
378
+ 'LayoutShiftAttribution',
379
+ 'LinearAccelerationSensor',
380
+ 'Lock',
381
+ 'LockManager',
382
+ 'MIDIAccess',
383
+ 'MIDIConnectionEvent',
384
+ 'MIDIInput',
385
+ 'MIDIInputMap',
386
+ 'MIDIMessageEvent',
387
+ 'MIDIOutput',
388
+ 'MIDIOutputMap',
389
+ 'MIDIPort',
390
+ 'MLContext',
391
+ 'MLGraph',
392
+ 'MLGraphBuilder',
393
+ 'MLOperand',
394
+ 'MSBlobBuilder',
395
+ 'MSCSSMatrix',
396
+ 'MSPointerEvent',
397
+ 'Magnetometer',
398
+ 'ManagedMediaSource',
399
+ 'ManagedSourceBuffer',
400
+ 'MathMLElement',
401
+ 'MediaCapabilities',
402
+ 'MediaController',
403
+ 'MediaDeviceInfo',
404
+ 'MediaDevices',
405
+ 'MediaElementAudioSourceNode',
406
+ 'MediaEncryptedEvent',
407
+ 'MediaError',
408
+ 'MediaKeyMessageEvent',
409
+ 'MediaKeySession',
410
+ 'MediaKeyStatusMap',
411
+ 'MediaKeySystemAccess',
412
+ 'MediaKeys',
413
+ 'MediaList',
414
+ 'MediaMetadata',
415
+ 'MediaQueryList',
416
+ 'MediaQueryListEvent',
417
+ 'MediaRecorder',
418
+ 'MediaRecorderErrorEvent',
419
+ 'MediaSession',
420
+ 'MediaSource',
421
+ 'MediaSourceHandle',
422
+ 'MediaStream',
423
+ 'MediaStreamAudioDestinationNode',
424
+ 'MediaStreamAudioSourceNode',
425
+ 'MediaStreamEvent',
426
+ 'MediaStreamTrack',
427
+ 'MediaStreamTrackAudioSourceNode',
428
+ 'MediaStreamTrackEvent',
429
+ 'MediaStreamTrackGenerator',
430
+ 'MediaStreamTrackProcessor',
431
+ 'MerchantValidationEvent',
432
+ 'MessageChannel',
433
+ 'MessagePort',
434
+ 'MimeTypeArray',
435
+ 'MouseScrollEvent',
436
+ 'MozBlobBuilder',
437
+ 'MozCSSKeyframeRule',
438
+ 'MozWebSocket',
439
+ 'MutationEvent',
440
+ 'MutationObserver',
441
+ 'MutationRecord',
442
+ 'NDEFMessage',
443
+ 'NDEFReader',
444
+ 'NDEFReadingEvent',
445
+ 'NDEFRecord',
446
+ 'NavigateEvent',
447
+ 'Navigation',
448
+ 'NavigationActivation',
449
+ 'NavigationCurrentEntryChangeEvent',
450
+ 'NavigationDestination',
451
+ 'NavigationEvent',
452
+ 'NavigationHistoryEntry',
453
+ 'NavigationPreloadManager',
454
+ 'NavigationTransition',
455
+ 'NavigatorLogin',
456
+ 'NavigatorManagedData',
457
+ 'NavigatorUAData',
458
+ 'NetworkInformation',
459
+ 'Node',
460
+ 'NodeIterator',
461
+ 'NodeList',
462
+ 'NotRestoredReasonDetails',
463
+ 'NotRestoredReasons',
464
+ 'OfflineAudioCompletionEvent',
465
+ 'OfflineAudioContext',
466
+ 'OffscreenCanvasRenderingContext2D',
467
+ 'OrientationSensor',
468
+ 'OscillatorNode',
469
+ 'OverconstrainedError',
470
+ 'OverconstrainedErrorEvent',
471
+ 'PageRevealEvent',
472
+ 'PageSwapEvent',
473
+ 'PageTransitionEvent',
474
+ 'PannerNode',
475
+ 'PasswordCredential',
476
+ 'Path2D',
477
+ 'PaymentAddress',
478
+ 'PaymentInstruments',
479
+ 'PaymentManager',
480
+ 'PaymentMethodChangeEvent',
481
+ 'PaymentRequestUpdateEvent',
482
+ 'PaymentResponse',
483
+ 'Performance',
484
+ 'PerformanceElementTiming',
485
+ 'PerformanceLongAnimationFrameTiming',
486
+ 'PerformanceLongTaskTiming',
487
+ 'PerformanceMeasure',
488
+ 'PerformanceNavigation',
489
+ 'PerformanceNavigationTiming',
490
+ 'PerformanceObserver',
491
+ 'PerformanceObserverEntryList',
492
+ 'PerformancePaintTiming',
493
+ 'PerformanceResourceTiming',
494
+ 'PerformanceScriptTiming',
495
+ 'PerformanceServerTiming',
496
+ 'PeriodicSyncManager',
497
+ 'PeriodicWave',
498
+ 'PermissionStatus',
499
+ 'Permissions',
500
+ 'PermissionsPolicyViolationReportBody',
501
+ 'PictureInPictureEvent',
502
+ 'PictureInPictureWindow',
503
+ 'Plugin',
504
+ 'PluginArray',
505
+ 'PointerEvent',
506
+ 'Policy',
507
+ 'PopStateEvent',
508
+ 'Position',
509
+ 'PositionError',
510
+ 'Presentation',
511
+ 'PresentationAvailability',
512
+ 'PresentationConnection',
513
+ 'PresentationConnectionAvailableEvent',
514
+ 'PresentationConnectionCloseEvent',
515
+ 'PresentationConnectionList',
516
+ 'PresentationReceiver',
517
+ 'PresentationRequest',
518
+ 'PressureRecord',
519
+ 'Profiler',
520
+ 'ProgressEvent',
521
+ 'PromiseRejectionEvent',
522
+ 'PublicKeyCredential',
523
+ 'PushManager',
524
+ 'PushSubscription',
525
+ 'PushSubscriptionChangeEvent',
526
+ 'PushSubscriptionOptions',
527
+ 'RGBColor',
528
+ 'RTCCertificate',
529
+ 'RTCDTMFSender',
530
+ 'RTCDTMFToneChangeEvent',
531
+ 'RTCDataChannel',
532
+ 'RTCDataChannelEvent',
533
+ 'RTCDtlsTransport',
534
+ 'RTCEncodedAudioFrame',
535
+ 'RTCEncodedVideoFrame',
536
+ 'RTCError',
537
+ 'RTCErrorEvent',
538
+ 'RTCIceCandidate',
539
+ 'RTCIceCandidateEvent',
540
+ 'RTCIceTransport',
541
+ 'RTCIdentityProviderGlobalScope',
542
+ 'RTCPeerConnection',
543
+ 'RTCPeerConnectionIceErrorEvent',
544
+ 'RTCPeerConnectionIceEvent',
545
+ 'RTCRtpReceiver',
546
+ 'RTCRtpScriptTransform',
547
+ 'RTCRtpScriptTransformer',
548
+ 'RTCRtpSender',
549
+ 'RTCRtpSynchronizationSource',
550
+ 'RTCRtpTransceiver',
551
+ 'RTCSctpTransport',
552
+ 'RTCSessionDescription',
553
+ 'RTCStatsReport',
554
+ 'RTCTrackEvent',
555
+ 'RTCTransformEvent',
556
+ 'ReadableByteStreamController',
557
+ 'ReadableStream',
558
+ 'ReadableStreamBYOBReader',
559
+ 'ReadableStreamBYOBRequest',
560
+ 'Rect',
561
+ 'RelativeOrientationSensor',
562
+ 'RemotePlayback',
563
+ 'Report',
564
+ 'ReportBody',
565
+ 'ResizeObserver',
566
+ 'ResizeObserverEntry',
567
+ 'ResizeObserverSize',
568
+ 'Response',
569
+ 'SVGAltGlyphDefElement',
570
+ 'SVGAltGlyphItemElement',
571
+ 'SVGAngle',
572
+ 'SVGAnimateColorElement',
573
+ 'SVGAnimateElement',
574
+ 'SVGAnimateMotionElement',
575
+ 'SVGAnimateTransformElement',
576
+ 'SVGAnimatedAngle',
577
+ 'SVGAnimatedBoolean',
578
+ 'SVGAnimatedEnumeration',
579
+ 'SVGAnimatedInteger',
580
+ 'SVGAnimatedLengthList',
581
+ 'SVGAnimatedNumber',
582
+ 'SVGAnimatedNumberList',
583
+ 'SVGAnimatedPreserveAspectRatio',
584
+ 'SVGAnimatedString',
585
+ 'SVGAnimatedTransformList',
586
+ 'SVGAnimationElement',
587
+ 'SVGCircleElement',
588
+ 'SVGClipPathElement',
589
+ 'SVGCursorElement',
590
+ 'SVGDescElement',
591
+ 'SVGElement',
592
+ 'SVGFEColorMatrixElement',
593
+ 'SVGFEComponentTransferElement',
594
+ 'SVGFECompositeElement',
595
+ 'SVGFEDiffuseLightingElement',
596
+ 'SVGFEDisplacementMapElement',
597
+ 'SVGFEDistantLightElement',
598
+ 'SVGFEDropShadowElement',
599
+ 'SVGFEFloodElement',
600
+ 'SVGFEFuncAElement',
601
+ 'SVGFEFuncRElement',
602
+ 'SVGFEImageElement',
603
+ 'SVGFEMergeElement',
604
+ 'SVGFEMergeNodeElement',
605
+ 'SVGFEPointLightElement',
606
+ 'SVGFESpotLightElement',
607
+ 'SVGFETileElement',
608
+ 'SVGFETurbulenceElement',
609
+ 'SVGFilterElement',
610
+ 'SVGFontElement',
611
+ 'SVGFontFaceElement',
612
+ 'SVGFontFaceFormatElement',
613
+ 'SVGFontFaceNameElement',
614
+ 'SVGFontFaceSrcElement',
615
+ 'SVGFontFaceUriElement',
616
+ 'SVGForeignObjectElement',
617
+ 'SVGGlyphElement',
618
+ 'SVGGlyphRefElement',
619
+ 'SVGGradientElement',
620
+ 'SVGGraphicsElement',
621
+ 'SVGHKernElement',
622
+ 'SVGLength',
623
+ 'SVGLengthList',
624
+ 'SVGLineElement',
625
+ 'SVGLinearGradientElement',
626
+ 'SVGMarkerElement',
627
+ 'SVGMaskElement',
628
+ 'SVGMatrix',
629
+ 'SVGMissingGlyphElement',
630
+ 'SVGNumber',
631
+ 'SVGPatternElement',
632
+ 'SVGPoint',
633
+ 'SVGPreserveAspectRatio',
634
+ 'SVGRect',
635
+ 'SVGRectElement',
636
+ 'SVGRenderingIntent',
637
+ 'SVGSVGElement',
638
+ 'SVGSwitchElement',
639
+ 'SVGSymbolElement',
640
+ 'SVGTRefElement',
641
+ 'SVGTSpanElement',
642
+ 'SVGTextContentElement',
643
+ 'SVGTextElement',
644
+ 'SVGTextPositioningElement',
645
+ 'SVGTitleElement',
646
+ 'SVGTransform',
647
+ 'SVGTransformList',
648
+ 'SVGUnitTypes',
649
+ 'SVGVKernElement',
650
+ 'SVGViewElement',
651
+ 'Sanitizer',
652
+ 'Scheduling',
653
+ 'Screen',
654
+ 'ScreenDetailed',
655
+ 'ScreenDetails',
656
+ 'ScreenOrientation',
657
+ 'ScriptProcessorNode',
658
+ 'ScrollTimeline',
659
+ 'SecurityPolicyViolationEvent',
660
+ 'Selection',
661
+ 'Sensor',
662
+ 'SensorErrorEvent',
663
+ 'Serial',
664
+ 'SerialPort',
665
+ 'ServiceWorker',
666
+ 'ServiceWorkerContainer',
667
+ 'ServiceWorkerRegistration',
668
+ 'ShadowRoot',
669
+ 'SharedStorage',
670
+ 'SharedStorageOperation',
671
+ 'SharedStorageRunOperation',
672
+ 'SharedStorageSelectURLOperation',
673
+ 'SharedStorageWorklet',
674
+ 'SharedStorageWorkletGlobalScope',
675
+ 'SourceBuffer',
676
+ 'SourceBufferList',
677
+ 'SpeechGrammarList',
678
+ 'SpeechRecognitionEvent',
679
+ 'SpeechSynthesisErrorEvent',
680
+ 'SpeechSynthesisEvent',
681
+ 'SpeechSynthesisUtterance',
682
+ 'StaticRange',
683
+ 'StereoPannerNode',
684
+ 'Storage',
685
+ 'StorageAccessHandle',
686
+ 'StorageBucket',
687
+ 'StorageBucketManager',
688
+ 'StorageEvent',
689
+ 'StorageManager',
690
+ 'StyleMedia',
691
+ 'StylePropertyMap',
692
+ 'StylePropertyMapReadOnly',
693
+ 'StyleSheet',
694
+ 'StyleSheetList',
695
+ 'SubmitEvent',
696
+ 'SubtleCrypto',
697
+ 'SyncManager',
698
+ 'TaskAttributionTiming',
699
+ 'TaskController',
700
+ 'TaskPriorityChangeEvent',
701
+ 'TaskSignal',
702
+ 'Text',
703
+ 'TextDecoder',
704
+ 'TextDecoderStream',
705
+ 'TextEncoder',
706
+ 'TextEncoderStream',
707
+ 'TextEvent',
708
+ 'TextFormat',
709
+ 'TextFormatUpdateEvent',
710
+ 'TextMetrics',
711
+ 'TextTrack',
712
+ 'TextTrackCue',
713
+ 'TextTrackCueList',
714
+ 'TextTrackList',
715
+ 'TextUpdateEvent',
716
+ 'TimeEvent',
717
+ 'TimeRanges',
718
+ 'ToggleEvent',
719
+ 'TrackEvent',
720
+ 'TransformStream',
721
+ 'TreeWalker',
722
+ 'TrustedHTML',
723
+ 'TrustedScript',
724
+ 'TrustedScriptURL',
725
+ 'TrustedTypePolicy',
726
+ 'TrustedTypePolicyFactory',
727
+ 'URLSearchParams',
728
+ 'USBAlternateInterface',
729
+ 'USBConfiguration',
730
+ 'USBConnectionEvent',
731
+ 'USBDevice',
732
+ 'USBEndpoint',
733
+ 'USBInTransferResult',
734
+ 'USBInterface',
735
+ 'USBIsochronousInTransferPacket',
736
+ 'USBIsochronousInTransferResult',
737
+ 'USBIsochronousOutTransferPacket',
738
+ 'USBIsochronousOutTransferResult',
739
+ 'USBOutTransferResult',
740
+ 'UserActivation',
741
+ 'UserProximityEvent',
742
+ 'VRDisplay',
743
+ 'VRDisplayCapabilities',
744
+ 'VRDisplayEvent',
745
+ 'VRFieldOfView',
746
+ 'VRFrameData',
747
+ 'VRPose',
748
+ 'VRStageParameters',
749
+ 'VTTCue',
750
+ 'VTTRegion',
751
+ 'ValidityState',
752
+ 'VideoColorSpace',
753
+ 'VideoDecoder',
754
+ 'VideoEncoder',
755
+ 'VideoFrame',
756
+ 'VideoPlaybackQuality',
757
+ 'VideoTrackGenerator',
758
+ 'ViewTimeline',
759
+ 'ViewTransition',
760
+ 'ViewTransitionTypeSet',
761
+ 'VirtualKeyboard',
762
+ 'VisibilityStateEntry',
763
+ 'VisualViewport',
764
+ 'WGSLLanguageFeatures',
765
+ 'WakeLock',
766
+ 'WakeLockSentinel',
767
+ 'WaveShaperNode',
768
+ 'WebGL2RenderingContext',
769
+ 'WebGLContextEvent',
770
+ 'WebGLFramebuffer',
771
+ 'WebGLProgram',
772
+ 'WebGLQuery',
773
+ 'WebGLRenderbuffer',
774
+ 'WebGLRenderingContext',
775
+ 'WebGLSampler',
776
+ 'WebGLShader',
777
+ 'WebGLSync',
778
+ 'WebGLTimerQueryEXT',
779
+ 'WebGLTransformFeedback',
780
+ 'WebGLUniformLocation',
781
+ 'WebGLVertexArrayObject',
782
+ 'WebKitBlobBuilder',
783
+ 'WebKitCSSKeyframeRule',
784
+ 'WebKitCSSMatrix',
785
+ 'WebKitMediaSource',
786
+ 'WebKitMutationObserver',
787
+ 'WebKitPoint',
788
+ 'WebKitSourceBuffer',
789
+ 'WebKitSourceBufferList',
790
+ 'WebKitSubtleCrypto',
791
+ 'WebSocket',
792
+ 'WebSocketError',
793
+ 'WebSocketStream',
794
+ 'WebTransportBidirectionalStream',
795
+ 'WebTransportDatagramDuplexStream',
796
+ 'WebTransportError',
797
+ 'WebTransportReceiveStream',
798
+ 'WebTransportSendStream',
799
+ 'WheelEvent',
800
+ 'Window',
801
+ 'WindowControlsOverlay',
802
+ 'WindowControlsOverlayGeometryChangeEvent',
803
+ 'WindowSharedStorage',
804
+ 'WorkletGlobalScope',
805
+ 'WorkletSharedStorage',
806
+ 'WritableStream',
807
+ 'WritableStreamDefaultWriter',
808
+ 'XMLDocument',
809
+ 'XMLHttpRequest',
810
+ 'XMLHttpRequestEventTarget',
811
+ 'XMLSerializer',
812
+ 'XPathEvaluator',
813
+ 'XPathExpression',
814
+ 'XPathResult',
815
+ 'XRAnchor',
816
+ 'XRAnchorSet',
817
+ 'XRBoundedReferenceSpace',
818
+ 'XRCPUDepthInformation',
819
+ 'XRCamera',
820
+ 'XRCompositionLayer',
821
+ 'XRCubeLayer',
822
+ 'XRCylinderLayer',
823
+ 'XRDepthInformation',
824
+ 'XREquirectLayer',
825
+ 'XRFrame',
826
+ 'XRHand',
827
+ 'XRHitTestResult',
828
+ 'XRHitTestSource',
829
+ 'XRInputSource',
830
+ 'XRInputSourceArray',
831
+ 'XRInputSourceEvent',
832
+ 'XRInputSourcesChangeEvent',
833
+ 'XRJointPose',
834
+ 'XRJointSpace',
835
+ 'XRLayer',
836
+ 'XRLayerEvent',
837
+ 'XRLightEstimate',
838
+ 'XRLightProbe',
839
+ 'XRMediaBinding',
840
+ 'XRPermissionStatus',
841
+ 'XRPose',
842
+ 'XRProjectionLayer',
843
+ 'XRQuadLayer',
844
+ 'XRRay',
845
+ 'XRReferenceSpace',
846
+ 'XRReferenceSpaceEvent',
847
+ 'XRRenderState',
848
+ 'XRRigidTransform',
849
+ 'XRSession',
850
+ 'XRSessionEvent',
851
+ 'XRSpace',
852
+ 'XRSubImage',
853
+ 'XRSystem',
854
+ 'XRTransientInputHitTestResult',
855
+ 'XRTransientInputHitTestSource',
856
+ 'XRView',
857
+ 'XRViewerPose',
858
+ 'XRViewport',
859
+ 'XRWebGLBinding',
860
+ 'XRWebGLDepthInformation',
861
+ 'XRWebGLLayer',
862
+ 'XRWebGLSubImage',
863
+ 'XSLTProcessor',
864
+ 'AbortSignal.timeout',
865
+ 'Array.prototype.findLast',
866
+ 'Array.prototype.group',
867
+ 'Atomics.waitAsync',
868
+ 'CSS.registerProperty',
869
+ 'CompressionStream',
870
+ 'CookieStore',
871
+ 'CustomStateSet',
872
+ 'Document.prototype.startViewTransition',
873
+ 'Element.prototype.checkVisibility',
874
+ 'FileSystemHandle',
875
+ 'GPU',
876
+ 'HTMLDialogElement',
877
+ 'HTMLFencedFrameElement',
878
+ 'Intl.DurationFormat',
879
+ 'Intl.Segmenter',
880
+ 'Navigator.prototype.scheduling',
881
+ 'Notification',
882
+ 'OffscreenCanvas',
883
+ 'PaymentRequest',
884
+ 'PerformanceEventTiming',
885
+ 'PressureObserver',
886
+ 'ReadableStream.prototype.tee',
887
+ 'ReportingObserver',
888
+ 'Scheduler',
889
+ 'SharedWorker',
890
+ 'SpeechSynthesis',
891
+ 'String.prototype.isWellFormed',
892
+ 'URLPattern',
893
+ 'WebAssembly.Suspending',
894
+ 'WebTransport',
895
+ 'Worklet',
896
+ 'caches',
897
+ 'crypto.randomUUID',
898
+ 'navigator.deviceMemory',
899
+ 'navigator.getInstalledRelatedApps',
900
+ 'navigator.gpu',
901
+ 'navigator.hid',
902
+ 'navigator.ink',
903
+ 'navigator.keyboard',
904
+ 'navigator.locks',
905
+ 'navigator.presentation',
906
+ 'navigator.scheduling',
907
+ 'navigator.serial',
908
+ 'navigator.setAppBadge',
909
+ 'navigator.usb',
910
+ 'navigator.virtualKeyboard',
911
+ 'navigator.windowControlsOverlay',
912
+ 'showOpenFilePicker',
913
+ 'structuredClone',
914
+ ];
915
+ export const featuresCollector = {
916
+ id: 'features',
917
+ wave: 'instant',
918
+ collect({ window }) {
919
+ let bits = '';
920
+ let present = 0;
921
+ for (const path of PATHS) {
922
+ const exists = resolve(window, path);
923
+ bits += exists ? '1' : '0';
924
+ if (exists)
925
+ present++;
926
+ }
927
+ const out = {
928
+ 'features.hash': hash(bits),
929
+ 'features.count': present,
930
+ 'features.total': PATHS.length,
931
+ };
932
+ return out;
933
+ },
934
+ };
935
+ /** Walks a dotted path without invoking anything. */
936
+ function resolve(root, path) {
937
+ try {
938
+ let current = root;
939
+ for (const segment of path.split('.')) {
940
+ if (current === null || current === undefined)
941
+ return false;
942
+ if (!(segment in current))
943
+ return false;
944
+ current = current[segment];
945
+ }
946
+ return current !== undefined;
947
+ }
948
+ catch {
949
+ return false;
950
+ }
951
+ }