{
 "manifest_version": 1,
 "generated": "2026-10-27",
 "note": "MaxIntel Scout connected-mode manifest. The device polls this to learn current dataset versions, firmware, and the live API endpoints it may call. Served same-origin so it is CORS-safe.",
 "datasets": {
  "surveillance_ouis": {
   "url": "surveillance-ouis.json",
   "version": "2026-10-24",
   "count": 289,
   "desc": "Surveillance-device maker OUI table (cameras, ALPR, drones, glasses, trackers)."
  },
  "stalkerware_iocs": {
   "url": "stalkerware-iocs.json",
   "version": "2026-10-23",
   "count": 176,
   "desc": "Echap stalkerware/watchware indicators (CC BY 4.0)."
  },
  "mac_vendors": {
   "url": "mac-vendors.json",
   "version": "2026-10-25",
   "count": 40394,
   "desc": "IEEE MA-L OUI vendor table (general MAC lookup)."
  },
  "surveillance_signatures": {
   "url": "surveillance-signatures.json",
   "version": "2026-10-25",
   "desc": "Surveillance signatures: OUIs + Wi-Fi SSID patterns + BLE IDs (incl. Flock-You-Android, MIT)."
  },
  "disposable_domains": {
   "url": "disposable-domains.json",
   "version": "2026-10-25",
   "count": 9927,
   "desc": "Throwaway/temporary-email provider domains for the on-device email OSINT check (community list, MIT/CC0)."
  }
 },
 "firmware": {
  "ws-scout": {
   "version": "1.1",
   "url": "scout-firmware/ws-scout.bin",
   "sha256": "21c546f8a4f06bae7d94a57ac71fb45325af1965a085bea5a7d6c1da3d0e49e4",
   "size": 1638496,
   "built": "2026-10-27",
   "board": "Waveshare ESP32-S3-Touch-LCD-1.54",
   "parts": [
    {
     "path": "scout-firmware/ws-scout-bootloader.bin",
     "offset": "0x0",
     "sha256": "12c9a10fef2d95a3f6d74dc6089fa8fedc51a77a487be834c9207b8c687b8761"
    },
    {
     "path": "scout-firmware/ws-scout-partitions.bin",
     "offset": "0x8000",
     "sha256": "9449a7020364b6a821261c8962f7683850809e13a8cd6c31dde7fe53308126b5"
    },
    {
     "path": "scout-firmware/ws-scout-boot_app0.bin",
     "offset": "0xe000",
     "sha256": "f94c5d786a7a8fab06ac5d10e33bf37711a6697636dc037559ea19cc410a17f0"
    },
    {
     "path": "scout-firmware/ws-scout.bin",
     "offset": "0x10000",
     "sha256": "21c546f8a4f06bae7d94a57ac71fb45325af1965a085bea5a7d6c1da3d0e49e4"
    }
   ],
   "notes": "Flagship Waveshare build 1.0 (passive-only). Full flash writes all four parts; an update writes just the app at 0x10000. Flash in the browser at scout-studio.html.",
   "changelog": "1.1: language picker on first boot (English, Italiano, Espanol, Francais, Deutsch, Portugues, Nederlands, Polski); one tap picks, falls back to English after 60 s; change any time in Settings > Language. 1.0: initial release."
  },
  "aipi-scout": {
   "version": "0.0.0",
   "url": null,
   "sha256": null,
   "notes": "AIPI Lite build."
  }
 },
 "endpoints": {
  "adsb": {
   "base": "https://api.adsb.lol/v2",
   "point": "/lat/{lat}/lon/{lon}/dist/{nm}",
   "cors": false,
   "note": "No CORS header: the device calls it directly; a browser needs a proxy or the bundled demo."
  },
  "overpass": {
   "base": "https://overpass-api.de/api/interpreter",
   "mirror": "https://overpass.private.coffee/api/interpreter",
   "cors": true,
   "note": "DeFlock/OSM ALPR cameras via man_made=surveillance + surveillance:type=ALPR."
  },
  "faa_rid_lookup": {
   "url": "https://uasdoc.faa.gov/listdocs",
   "note": "Remote ID / registration reference (no open serial API; decode locally, link out)."
  },
  "beacondb": {
   "base": "https://api.beacondb.net/v1/geolocate",
   "cors": true,
   "keyless": true,
   "note": "Wi-Fi/cell self-location (open MLS successor). POST wifiAccessPoints[]; returns lat/lon + accuracy."
  },
  "ipapi": {
   "base": "https://ip-api.com/json",
   "cors": true,
   "keyless": true,
   "note": "IP triage: geo, ISP, ASN, reverse DNS, proxy/hosting/mobile flags."
  },
  "internetdb": {
   "base": "https://internetdb.shodan.io",
   "cors": true,
   "keyless": true,
   "note": "Shodan InternetDB: open ports, CVEs, hostnames for an IP (passive \u2014 no scanning)."
  },
  "hexdb": {
   "base": "https://hexdb.io/api/v1",
   "aircraft": "/aircraft/{hex}",
   "route": "/route/icao/{callsign}",
   "cors": true,
   "keyless": true,
   "note": "ICAO hex -> aircraft registration/type/owner; callsign -> route."
  },
  "sun": {
   "base": "https://api.sunrise-sunset.org/json",
   "cors": true,
   "keyless": true,
   "note": "Sunrise/sunset/twilight/solar noon for chronolocation and shadow geolocation."
  },
  "nominatim": {
   "base": "https://nominatim.openstreetmap.org",
   "reverse": "/reverse?lat={lat}&lon={lon}&format=jsonv2",
   "cors": true,
   "keyless": true,
   "note": "OSM reverse geocode (light usage; set a UA on-device)."
  },
  "doh": {
   "base": "https://cloudflare-dns.com/dns-query",
   "cors": true,
   "keyless": true,
   "note": "DNS-over-HTTPS resolver (accept: application/dns-json)."
  },
  "crtsh": {
   "base": "https://crt.sh",
   "query": "/?q={domain}&output=json",
   "cors": true,
   "keyless": true,
   "note": "Certificate Transparency logs -> subdomains for a domain."
  },
  "tor_dnsel": {
   "base": "{rev-ip}.dnsel.torproject.org",
   "transport": "dns-a",
   "keyless": true,
   "device_only": true,
   "note": "Tor exit check via DNS A record. Raw DNS only \u2014 device-side, not browser."
  },
  "cymru_asn": {
   "base": "{rev-ip}.origin.asn.cymru.com",
   "transport": "dns-txt",
   "keyless": true,
   "device_only": true,
   "note": "Team Cymru IP-to-ASN over DNS TXT. Device-side only (no HTTP, no browser DNS)."
  },
  "wigle": {
   "base": "https://api.wigle.net/api/v2",
   "search": "/network/search?netid={bssid}|ssid={ssid}",
   "cors": false,
   "keyless": false,
   "auth": "Basic base64(apiName:apiToken)",
   "key_source": "scout-settings.html / device settings (wigle_name + wigle_token)",
   "note": "BSSID/SSID wardrive history. Needs the user's free WiGLE key; browser calls are usually blocked, device sends directly."
  }
 },
 "device_languages": {
  "note": "On a FULL install the flasher also writes this tiny NVS image at nvs_offset so the board boots directly in the chosen language (no first-boot picker). 'Update app only' never touches NVS, so it keeps the user's language. Studio languages not in 'supported' have no on-device font and fall back to the board's first-boot picker.",
  "nvs_offset": "0x9000",
  "supported": [
   "en",
   "it",
   "es",
   "fr",
   "de",
   "pt",
   "nl",
   "pl"
  ],
  "path": "scout-nvs/nvs_{lang}.bin"
 }
}