{
  "generated": "scripts/build-free-runtime.mjs — do not edit by hand",
  "source": "ad-setup/ivt/detector.js",
  "families": {
    "1": "automation",
    "2": "device consistency",
    "3": "behaviour",
    "4": "network",
    "5": "click farms",
    "6": "identity fraud",
    "7": "traffic source",
    "8": "ad abuse"
  },
  "signals": [
    {
      "id": "f1.webdriver",
      "family": 1,
      "tier": "fast",
      "weight": 100,
      "label": "navigator.webdriver is true"
    },
    {
      "id": "f1.headless_ua",
      "family": 1,
      "tier": "fast",
      "weight": 100,
      "label": "Headless browser in user agent"
    },
    {
      "id": "f1.cdc_globals",
      "family": 1,
      "tier": "fast",
      "weight": 100,
      "label": "ChromeDriver cdc_ globals present"
    },
    {
      "id": "f1.selenium_globals",
      "family": 1,
      "tier": "fast",
      "weight": 100,
      "label": "Selenium globals present"
    },
    {
      "id": "f1.phantom_globals",
      "family": 1,
      "tier": "fast",
      "weight": 100,
      "label": "PhantomJS globals present"
    },
    {
      "id": "f1.nightmare",
      "family": 1,
      "tier": "fast",
      "weight": 100,
      "label": "Nightmare automation global"
    },
    {
      "id": "f1.puppeteer_var",
      "family": 1,
      "tier": "fast",
      "weight": 90,
      "label": "Puppeteer marker global"
    },
    {
      "id": "f1.playwright",
      "family": 1,
      "tier": "fast",
      "weight": 90,
      "label": "Playwright binding present"
    },
    {
      "id": "f1.domautomation",
      "family": 1,
      "tier": "fast",
      "weight": 90,
      "label": "Chrome DOM automation controller"
    },
    {
      "id": "f1.webdriver_attr",
      "family": 1,
      "tier": "fast",
      "weight": 80,
      "label": "webdriver attribute on <html>"
    },
    {
      "id": "f1.no_chrome_obj",
      "family": 1,
      "tier": "fast",
      "weight": 40,
      "label": "Chrome UA without window.chrome"
    },
    {
      "id": "f1.permissions_mismatch",
      "family": 1,
      "tier": "full",
      "weight": 60,
      "label": "Notification permission contradicts Permissions API"
    },
    {
      "id": "f1.plugins_empty",
      "family": 1,
      "tier": "fast",
      "weight": 30,
      "label": "No plugins on a desktop browser"
    },
    {
      "id": "f1.languages_empty",
      "family": 1,
      "tier": "fast",
      "weight": 50,
      "label": "navigator.languages is empty"
    },
    {
      "id": "f1.function_tostring",
      "family": 1,
      "tier": "fast",
      "weight": 70,
      "label": "Native function toString has been patched"
    },
    {
      "id": "f1.error_stack_depth",
      "family": 1,
      "tier": "full",
      "weight": 40,
      "label": "Instrumented error stack"
    },
    {
      "id": "f1.webgl_swiftshader",
      "family": 1,
      "tier": "full",
      "weight": 70,
      "label": "Software renderer (SwiftShader/llvmpipe)"
    },
    {
      "id": "f1.zero_media_devices",
      "family": 1,
      "tier": "full",
      "weight": 30,
      "label": "No media devices at all"
    },
    {
      "id": "f1.headless_dimensions",
      "family": 1,
      "tier": "fast",
      "weight": 60,
      "label": "Window has no outer dimensions"
    },
    {
      "id": "f1.api_tampered",
      "family": 1,
      "tier": "fast",
      "weight": 70,
      "label": "Browser functions have been replaced by a script"
    },
    {
      "id": "f1.earlier_page_invalid",
      "family": 1,
      "tier": "fast",
      "weight": 100,
      "label": "An earlier page of this visit was invalid"
    },
    {
      "id": "f2.ua_platform_mismatch",
      "family": 2,
      "tier": "fast",
      "weight": 60,
      "label": "Platform contradicts the user agent"
    },
    {
      "id": "f2.mobile_ua_no_touch",
      "family": 2,
      "tier": "fast",
      "weight": 55,
      "label": "Mobile user agent with no touch support"
    },
    {
      "id": "f2.desktop_ua_touch_only",
      "family": 2,
      "tier": "fast",
      "weight": 20,
      "label": "Desktop user agent reporting many touch points"
    },
    {
      "id": "f2.ua_hints_mismatch",
      "family": 2,
      "tier": "fast",
      "weight": 60,
      "label": "User agent contradicts the browser's own client hints"
    },
    {
      "id": "f2.mobile_ua_on_desktop",
      "family": 2,
      "tier": "fast",
      "weight": 50,
      "label": "Phone user agent on a desktop device"
    },
    {
      "id": "f2.webgl_contradicts_ua",
      "family": 2,
      "tier": "full",
      "weight": 70,
      "label": "Graphics card does not belong to the claimed device"
    },
    {
      "id": "f2.canvas_noise",
      "family": 2,
      "tier": "full",
      "weight": 50,
      "label": "Canvas reads are being altered"
    },
    {
      "id": "f2.worker_mismatch",
      "family": 2,
      "tier": "full",
      "weight": 80,
      "label": "The page and a background worker report different devices"
    },
    {
      "id": "f2.screen_impossible",
      "family": 2,
      "tier": "fast",
      "weight": 70,
      "label": "Screen dimensions are impossible"
    },
    {
      "id": "f2.avail_exceeds_screen",
      "family": 2,
      "tier": "fast",
      "weight": 50,
      "label": "Available screen larger than the screen"
    },
    {
      "id": "f2.inner_exceeds_screen",
      "family": 2,
      "tier": "fast",
      "weight": 45,
      "label": "Viewport wider than the screen"
    },
    {
      "id": "f2.color_depth_odd",
      "family": 2,
      "tier": "fast",
      "weight": 35,
      "label": "Unusual colour depth"
    },
    {
      "id": "f2.dpr_impossible",
      "family": 2,
      "tier": "fast",
      "weight": 30,
      "label": "Impossible device pixel ratio"
    },
    {
      "id": "f2.hardware_concurrency",
      "family": 2,
      "tier": "fast",
      "weight": 30,
      "label": "Implausible CPU core count"
    },
    {
      "id": "f2.timezone_offset_mismatch",
      "family": 2,
      "tier": "fast",
      "weight": 45,
      "label": "Timezone offset contradicts the reported zone"
    },
    {
      "id": "f2.no_timezone",
      "family": 2,
      "tier": "fast",
      "weight": 40,
      "label": "No resolvable timezone"
    },
    {
      "id": "f2.language_missing",
      "family": 2,
      "tier": "fast",
      "weight": 35,
      "label": "No language reported"
    },
    {
      "id": "f2.language_conflict",
      "family": 2,
      "tier": "fast",
      "weight": 25,
      "label": "language absent from languages list"
    },
    {
      "id": "f2.webgl_missing",
      "family": 2,
      "tier": "full",
      "weight": 40,
      "label": "No WebGL context available"
    },
    {
      "id": "f2.canvas_blocked",
      "family": 2,
      "tier": "full",
      "weight": 30,
      "label": "Canvas readback blocked or blank"
    },
    {
      "id": "f2.audio_missing",
      "family": 2,
      "tier": "full",
      "weight": 25,
      "label": "No AudioContext available"
    },
    {
      "id": "f2.fonts_none",
      "family": 2,
      "tier": "full",
      "weight": 45,
      "label": "No system fonts detected"
    },
    {
      "id": "f2.fonts_too_few",
      "family": 2,
      "tier": "full",
      "weight": 25,
      "label": "Implausibly few system fonts"
    },
    {
      "id": "f2.storage_unavailable",
      "family": 2,
      "tier": "fast",
      "weight": 35,
      "label": "localStorage unavailable"
    },
    {
      "id": "f2.cookies_disabled",
      "family": 2,
      "tier": "fast",
      "weight": 20,
      "label": "Cookies disabled"
    },
    {
      "id": "f2.do_not_track_odd",
      "family": 2,
      "tier": "fast",
      "weight": 10,
      "label": "Malformed doNotTrack value"
    },
    {
      "id": "f3.no_interaction",
      "family": 3,
      "tier": "full",
      "weight": 25,
      "label": "No interaction of any kind"
    },
    {
      "id": "f3.instant_click",
      "family": 3,
      "tier": "full",
      "weight": 60,
      "label": "Click within 150ms of page load"
    },
    {
      "id": "f3.no_mouse_movement",
      "family": 3,
      "tier": "full",
      "weight": 30,
      "label": "Clicked without ever moving the pointer"
    },
    {
      "id": "f3.linear_mouse",
      "family": 3,
      "tier": "full",
      "weight": 45,
      "label": "Perfectly linear pointer movement"
    },
    {
      "id": "f3.teleporting_pointer",
      "family": 3,
      "tier": "full",
      "weight": 50,
      "label": "Pointer teleports across the viewport"
    },
    {
      "id": "f3.uniform_intervals",
      "family": 3,
      "tier": "full",
      "weight": 45,
      "label": "Events at machine-uniform intervals"
    },
    {
      "id": "f3.scroll_instant",
      "family": 3,
      "tier": "full",
      "weight": 40,
      "label": "Page scrolled to the bottom instantly"
    },
    {
      "id": "f3.no_scroll_long_dwell",
      "family": 3,
      "tier": "full",
      "weight": 15,
      "label": "Long dwell with no scrolling"
    },
    {
      "id": "f3.impossible_dwell",
      "family": 3,
      "tier": "full",
      "weight": 20,
      "label": "Many interactions in almost no time"
    },
    {
      "id": "f3.focus_never",
      "family": 3,
      "tier": "full",
      "weight": 15,
      "label": "Document never had focus"
    },
    {
      "id": "f3.visibility_hidden_start",
      "family": 3,
      "tier": "full",
      "weight": 25,
      "label": "Page was never visible"
    },
    {
      "id": "f3.untrusted_events",
      "family": 3,
      "tier": "full",
      "weight": 60,
      "label": "Clicks or movement generated by a script"
    },
    {
      "id": "f3.scroll_stepped",
      "family": 3,
      "tier": "full",
      "weight": 40,
      "label": "Scrolling in identical machine-timed steps"
    },
    {
      "id": "f3.keyboard_uniform",
      "family": 3,
      "tier": "full",
      "weight": 35,
      "label": "Keystrokes at identical intervals"
    },
    {
      "id": "f8.zero_size_viewport",
      "family": 8,
      "tier": "fast",
      "weight": 70,
      "label": "Viewport has no area"
    },
    {
      "id": "f8.framed_cross_origin",
      "family": 8,
      "tier": "fast",
      "weight": 40,
      "label": "Page is framed cross-origin"
    },
    {
      "id": "f8.tiny_iframe",
      "family": 8,
      "tier": "fast",
      "weight": 65,
      "label": "Page is rendered in a 1x1 frame"
    },
    {
      "id": "f8.offscreen_render",
      "family": 8,
      "tier": "full",
      "weight": 55,
      "label": "Ad slots rendered off-screen"
    },
    {
      "id": "f8.stacked_slots",
      "family": 8,
      "tier": "full",
      "weight": 60,
      "label": "Ad slots stacked on top of each other"
    },
    {
      "id": "f8.hidden_slots",
      "family": 8,
      "tier": "full",
      "weight": 55,
      "label": "Ad slots hidden by CSS"
    },
    {
      "id": "f8.excessive_slots",
      "family": 8,
      "tier": "full",
      "weight": 35,
      "label": "Implausible number of ad slots"
    },
    {
      "id": "f8.autorefresh_storm",
      "family": 8,
      "tier": "full",
      "weight": 45,
      "label": "Page reloaded repeatedly in one session"
    },
    {
      "id": "f8.click_on_slot_immediate",
      "family": 8,
      "tier": "full",
      "weight": 65,
      "label": "Immediate click directly on an ad slot"
    },
    {
      "id": "f8.no_referrer_deep_link",
      "family": 8,
      "tier": "fast",
      "weight": 20,
      "label": "Deep link with no referrer"
    },
    {
      "id": "f8.opener_popunder",
      "family": 8,
      "tier": "fast",
      "weight": 50,
      "label": "Opened as a pop-under"
    },
    {
      "id": "f8.title_bait",
      "family": 8,
      "tier": "fast",
      "weight": 15,
      "label": "Document has no title"
    }
  ]
}
