@mochi.js/profiles
Advanced tools
| { | ||
| "timing": { | ||
| "timezone": "UTC", | ||
| "timezoneOffset": 0, | ||
| "locale": "en-US", | ||
| "dateString": "Mon Jan 01 2024 12:00:00 GMT+0000 (Coordinated Universal Time)", | ||
| "localeString": "1/1/2024, 12:00:00 PM", | ||
| "localeDateString": "1/1/2024", | ||
| "numberFormat": { | ||
| "locale": "en-US", | ||
| "numberingSystem": "latn", | ||
| "style": "decimal", | ||
| "minimumIntegerDigits": 1, | ||
| "minimumFractionDigits": 0, | ||
| "maximumFractionDigits": 3, | ||
| "useGrouping": "auto", | ||
| "notation": "standard", | ||
| "signDisplay": "auto", | ||
| "roundingIncrement": 1, | ||
| "roundingMode": "halfExpand", | ||
| "roundingPriority": "auto", | ||
| "trailingZeroDisplay": "auto" | ||
| }, | ||
| "dateTimeFormat": { | ||
| "locale": "en-US", | ||
| "calendar": "gregory", | ||
| "numberingSystem": "latn", | ||
| "timeZone": "UTC", | ||
| "year": "numeric", | ||
| "month": "numeric", | ||
| "day": "numeric" | ||
| }, | ||
| "supportedCalendars": [ | ||
| "buddhist", | ||
| "chinese", | ||
| "coptic", | ||
| "dangi", | ||
| "ethioaa", | ||
| "ethiopic", | ||
| "gregory", | ||
| "hebrew", | ||
| "indian", | ||
| "islamic", | ||
| "islamic-civil", | ||
| "islamic-rgsa", | ||
| "islamic-tbla", | ||
| "islamic-umalqura", | ||
| "iso8601", | ||
| "japanese", | ||
| "persian", | ||
| "roc" | ||
| ], | ||
| "supportedCurrencies": 159, | ||
| "supportedNumberingSystems": [ | ||
| "adlm", | ||
| "ahom", | ||
| "arab", | ||
| "arabext", | ||
| "bali", | ||
| "beng", | ||
| "bhks", | ||
| "brah", | ||
| "cakm", | ||
| "cham", | ||
| "deva", | ||
| "diak", | ||
| "fullwide", | ||
| "gara", | ||
| "gong", | ||
| "gonm", | ||
| "gujr", | ||
| "gukh", | ||
| "guru", | ||
| "hanidec", | ||
| "hmng", | ||
| "hmnp", | ||
| "java", | ||
| "kali", | ||
| "kawi", | ||
| "khmr", | ||
| "knda", | ||
| "krai", | ||
| "lana", | ||
| "lanatham", | ||
| "laoo", | ||
| "latn", | ||
| "lepc", | ||
| "limb", | ||
| "mathbold", | ||
| "mathdbl", | ||
| "mathmono", | ||
| "mathsanb", | ||
| "mathsans", | ||
| "mlym", | ||
| "modi", | ||
| "mong", | ||
| "mroo", | ||
| "mtei", | ||
| "mymr", | ||
| "mymrepka", | ||
| "mymrpao", | ||
| "mymrshan", | ||
| "mymrtlng", | ||
| "nagm", | ||
| "newa", | ||
| "nkoo", | ||
| "olck", | ||
| "onao", | ||
| "orya", | ||
| "osma", | ||
| "outlined", | ||
| "rohg", | ||
| "saur", | ||
| "segment", | ||
| "shrd", | ||
| "sind", | ||
| "sinh", | ||
| "sora", | ||
| "sund", | ||
| "sunu", | ||
| "takr", | ||
| "talu", | ||
| "tamldec", | ||
| "telu", | ||
| "thai", | ||
| "tibt", | ||
| "tirh", | ||
| "tnsa", | ||
| "vaii", | ||
| "wara", | ||
| "wcho" | ||
| ], | ||
| "supportedTimeZones": 418, | ||
| "supportedUnits": 45, | ||
| "performanceTiming": { | ||
| "dns": 0, | ||
| "tcp": 28, | ||
| "ttfb": 11, | ||
| "download": 17, | ||
| "domParsing": 21, | ||
| "domComplete": 41, | ||
| "loadEvent": 0, | ||
| "total": 186, | ||
| "protocol": "h2", | ||
| "transferSize": 3476, | ||
| "encodedBodySize": 3176, | ||
| "decodedBodySize": 10829 | ||
| }, | ||
| "timerPrecision": null, | ||
| "mathFingerprint": { | ||
| "E": 2.718281828459045, | ||
| "LN2": 0.6931471805599453, | ||
| "LN10": 2.302585092994046, | ||
| "LOG2E": 1.4426950408889634, | ||
| "LOG10E": 0.4342944819032518, | ||
| "PI": 3.141592653589793, | ||
| "SQRT2": 1.4142135623730951, | ||
| "SQRT1_2": 0.7071067811865476, | ||
| "acos": 1.0471975511965979, | ||
| "acosh": 1.3169578969248166, | ||
| "asin": 0.5235987755982989, | ||
| "atan": 0.7853981633974483, | ||
| "atanh": 0.5493061443340548, | ||
| "cbrt": 1.2599210498948732, | ||
| "cosh": 1.5430806348152437, | ||
| "expm1": 1.718281828459045, | ||
| "log1p": 0.4054651081081644, | ||
| "sinh": 1.1752011936438014, | ||
| "tanh": 0.7615941559557649 | ||
| } | ||
| }, | ||
| "bot": { | ||
| "webdriver": false, | ||
| "webdriverType": "normal", | ||
| "headlessChrome": false, | ||
| "automationKeys": [], | ||
| "automationDetected": false, | ||
| "chromeRuntime": false, | ||
| "pluginCount": 5, | ||
| "pluginInconsistency": false, | ||
| "languageInconsistency": false, | ||
| "permissionsApi": true, | ||
| "screenDimensions": "1280x800", | ||
| "suspiciousDimensions": false, | ||
| "maxTouchPoints": 0, | ||
| "touchEvent": false, | ||
| "touchInconsistency": false, | ||
| "notificationPermission": "default", | ||
| "userActivation": { | ||
| "hasBeenActive": false, | ||
| "isActive": false | ||
| }, | ||
| "navigationTiming": { | ||
| "type": "navigate", | ||
| "redirectCount": 0, | ||
| "domComplete": 186, | ||
| "loadEventEnd": 186, | ||
| "domInteractive": 146 | ||
| }, | ||
| "stackDepthTest": 101 | ||
| }, | ||
| "storage": { | ||
| "localStorage": true, | ||
| "localStorageKeys": 1, | ||
| "sessionStorage": true, | ||
| "sessionStorageKeys": 0, | ||
| "cookiesEnabled": true, | ||
| "cookiesWritable": true, | ||
| "cookieCount": 0, | ||
| "indexedDB": true, | ||
| "cacheStorage": true, | ||
| "serviceWorker": true, | ||
| "storageManager": true, | ||
| "fileSystemAccess": true, | ||
| "sharedArrayBuffer": false, | ||
| "sharedWorker": true, | ||
| "openDatabase": false, | ||
| "broadcastChannel": true, | ||
| "secureContext": true | ||
| }, | ||
| "fonts": { | ||
| "detected": [ | ||
| "Arial", | ||
| "Courier New", | ||
| "Times New Roman", | ||
| "Courier", | ||
| "Helvetica", | ||
| "DejaVu Sans", | ||
| "DejaVu Sans Mono", | ||
| "DejaVu Serif", | ||
| "Liberation Mono", | ||
| "Liberation Sans", | ||
| "Liberation Serif" | ||
| ], | ||
| "count": 11, | ||
| "tested": 117, | ||
| "hash": "388DCD16", | ||
| "fontsApiReady": true | ||
| }, | ||
| "speech": { | ||
| "voices": [], | ||
| "voiceCount": 0, | ||
| "localVoices": 0, | ||
| "remoteVoices": 0, | ||
| "languages": [] | ||
| }, | ||
| "mediaDevices": { | ||
| "devices": [], | ||
| "deviceCount": 0, | ||
| "audioinput": 0, | ||
| "audiooutput": 0, | ||
| "videoinput": 0, | ||
| "supportedConstraints": { | ||
| "aspectRatio": true, | ||
| "autoGainControl": true, | ||
| "brightness": true, | ||
| "channelCount": true, | ||
| "colorTemperature": true, | ||
| "contrast": true, | ||
| "deviceId": true, | ||
| "displaySurface": true, | ||
| "echoCancellation": true, | ||
| "exposureCompensation": true, | ||
| "exposureMode": true, | ||
| "exposureTime": true, | ||
| "facingMode": true, | ||
| "focusDistance": true, | ||
| "focusMode": true, | ||
| "frameRate": true, | ||
| "groupId": true, | ||
| "height": true, | ||
| "iso": true, | ||
| "latency": true, | ||
| "noiseSuppression": true, | ||
| "pan": true, | ||
| "pointsOfInterest": true, | ||
| "resizeMode": true, | ||
| "restrictOwnAudio": true, | ||
| "sampleRate": true, | ||
| "sampleSize": true, | ||
| "saturation": true, | ||
| "sharpness": true, | ||
| "suppressLocalAudioPlayback": true, | ||
| "tilt": true, | ||
| "torch": true, | ||
| "voiceIsolation": true, | ||
| "whiteBalanceMode": true, | ||
| "width": true, | ||
| "zoom": true | ||
| } | ||
| }, | ||
| "audio": { | ||
| "sampleRate": 44100, | ||
| "state": "suspended", | ||
| "baseLatency": 0.01, | ||
| "outputLatency": 0, | ||
| "maxChannelCount": 2, | ||
| "numberOfInputs": 1, | ||
| "numberOfOutputs": 0, | ||
| "channelCount": 2, | ||
| "channelCountMode": "explicit", | ||
| "channelInterpretation": "speakers", | ||
| "audioHash": "124.04347527516074", | ||
| "sampleValues": [ | ||
| -0.10808052122592926, | ||
| -0.3909117579460144, | ||
| -0.005692707374691963, | ||
| 0.3892313539981842, | ||
| 0.1189708411693573, | ||
| -0.3545847237110138, | ||
| -0.22215835750102997, | ||
| 0.28990939259529114, | ||
| 0.30651888251304626, | ||
| -0.20068736374378204 | ||
| ] | ||
| }, | ||
| "webgpu": { | ||
| "supported": true | ||
| }, | ||
| "webgl": { | ||
| "error": "no webgl context" | ||
| }, | ||
| "canvas": { | ||
| "consistent": true, | ||
| "hash": "0AA48148", | ||
| "dataUrlLength": 24878, | ||
| "dataUrlPrefix": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwA", | ||
| "webpSupport": true, | ||
| "jpegHighLength": 26367, | ||
| "jpegLowLength": 2291 | ||
| }, | ||
| "screen": { | ||
| "width": 1280, | ||
| "height": 800, | ||
| "availWidth": 1280, | ||
| "availHeight": 800, | ||
| "colorDepth": 24, | ||
| "pixelDepth": 24, | ||
| "innerWidth": 1050, | ||
| "innerHeight": 641, | ||
| "outerWidth": 1050, | ||
| "outerHeight": 780, | ||
| "screenX": 10, | ||
| "screenY": 10, | ||
| "pageXOffset": 0, | ||
| "pageYOffset": 0, | ||
| "devicePixelRatio": 1, | ||
| "orientation": { | ||
| "type": "landscape-primary", | ||
| "angle": 0 | ||
| }, | ||
| "mediaQueries": { | ||
| "prefers-color-scheme": "light", | ||
| "prefers-reduced-motion": "no-preference", | ||
| "prefers-contrast": "no-preference", | ||
| "forced-colors": "none", | ||
| "prefers-reduced-transparency": "no-preference", | ||
| "color-gamut": "srgb", | ||
| "pointer": "fine", | ||
| "hover": "hover", | ||
| "any-pointer": "fine", | ||
| "any-hover": "hover", | ||
| "display-mode": "browser", | ||
| "dynamic-range": "standard", | ||
| "update": "fast", | ||
| "overflow-block": "scroll", | ||
| "overflow-inline": "scroll", | ||
| "min-resolution": "96dpi", | ||
| "min-color": "8", | ||
| "monochrome": false | ||
| }, | ||
| "visualViewport": { | ||
| "width": 1040, | ||
| "height": 641, | ||
| "offsetLeft": 0, | ||
| "offsetTop": 0, | ||
| "pageLeft": 0, | ||
| "pageTop": 0, | ||
| "scale": 1 | ||
| } | ||
| }, | ||
| "navigator": { | ||
| "secureContext": true, | ||
| "userAgent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36", | ||
| "platform": "Linux x86_64", | ||
| "vendor": "Google Inc.", | ||
| "vendorSub": "", | ||
| "product": "Gecko", | ||
| "productSub": "20030107", | ||
| "appVersion": "5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36", | ||
| "appName": "Netscape", | ||
| "appCodeName": "Mozilla", | ||
| "language": "en-US", | ||
| "languages": [ | ||
| "en-US", | ||
| "en" | ||
| ], | ||
| "cookieEnabled": true, | ||
| "doNotTrack": null, | ||
| "maxTouchPoints": 0, | ||
| "hardwareConcurrency": 32, | ||
| "deviceMemory": 32, | ||
| "pdfViewerEnabled": true, | ||
| "webdriver": false, | ||
| "connection": { | ||
| "effectiveType": "4g", | ||
| "downlink": 10, | ||
| "rtt": 50, | ||
| "saveData": false | ||
| }, | ||
| "plugins": [ | ||
| { | ||
| "name": "PDF Viewer", | ||
| "filename": "internal-pdf-viewer", | ||
| "description": "Portable Document Format" | ||
| }, | ||
| { | ||
| "name": "Chrome PDF Viewer", | ||
| "filename": "internal-pdf-viewer", | ||
| "description": "Portable Document Format" | ||
| }, | ||
| { | ||
| "name": "Chromium PDF Viewer", | ||
| "filename": "internal-pdf-viewer", | ||
| "description": "Portable Document Format" | ||
| }, | ||
| { | ||
| "name": "Microsoft Edge PDF Viewer", | ||
| "filename": "internal-pdf-viewer", | ||
| "description": "Portable Document Format" | ||
| }, | ||
| { | ||
| "name": "WebKit built-in PDF", | ||
| "filename": "internal-pdf-viewer", | ||
| "description": "Portable Document Format" | ||
| } | ||
| ], | ||
| "pluginCount": 5, | ||
| "mimeTypes": [ | ||
| "application/pdf", | ||
| "text/pdf" | ||
| ], | ||
| "userAgentData": { | ||
| "brands": [ | ||
| { | ||
| "brand": "Chromium", | ||
| "version": "147" | ||
| }, | ||
| { | ||
| "brand": "Not.A/Brand", | ||
| "version": "8" | ||
| } | ||
| ], | ||
| "mobile": false, | ||
| "platform": "Linux" | ||
| }, | ||
| "userAgentDataHighEntropy": { | ||
| "architecture": "x86", | ||
| "bitness": "64", | ||
| "brands": [ | ||
| { | ||
| "brand": "Chromium", | ||
| "version": "147" | ||
| }, | ||
| { | ||
| "brand": "Not.A/Brand", | ||
| "version": "8" | ||
| } | ||
| ], | ||
| "fullVersionList": [ | ||
| { | ||
| "brand": "Chromium", | ||
| "version": "147.0.7727.116" | ||
| }, | ||
| { | ||
| "brand": "Not.A/Brand", | ||
| "version": "8.0.0.0" | ||
| } | ||
| ], | ||
| "mobile": false, | ||
| "model": "", | ||
| "platform": "Linux", | ||
| "platformVersion": "", | ||
| "wow64": false | ||
| }, | ||
| "permissions": { | ||
| "geolocation": "prompt", | ||
| "notifications": "prompt", | ||
| "camera": "prompt", | ||
| "microphone": "prompt", | ||
| "accelerometer": "granted", | ||
| "gyroscope": "granted", | ||
| "magnetometer": "granted", | ||
| "clipboard-read": "prompt", | ||
| "clipboard-write": "granted" | ||
| }, | ||
| "storageEstimate": { | ||
| "quota": 39763673088, | ||
| "usage": 0 | ||
| }, | ||
| "bluetooth": false, | ||
| "usb": true, | ||
| "serial": true, | ||
| "hid": true, | ||
| "xr": true, | ||
| "gpu": true, | ||
| "ink": true, | ||
| "scheduling": true, | ||
| "windowControlsOverlay": true, | ||
| "virtualKeyboard": true | ||
| }, | ||
| "__meta": { | ||
| "capturedAt": "2026-04-29T22:22:54.246Z", | ||
| "elapsedMs": 0, | ||
| "href": "http://wrkx.app/api/visitors/bcbb7cfaa7f381b92daacb6b7052c6b9", | ||
| "readyState": "complete" | ||
| } | ||
| } |
| { | ||
| "version": "1", | ||
| "profile": "linux-chrome-stable", | ||
| "paths": [ | ||
| { | ||
| "path": "audio.**", | ||
| "comment": "Audio fingerprint bytes (sampleValues, audioHash) require precomputed per-(profile, sample-rate) byte tables — task 0071. docs/limits.md \"Audio fingerprinting (OfflineAudioContext) is NOT spoofed at v0.3\" carried over to v0.7 phase split." | ||
| }, | ||
| { | ||
| "path": "canvas.**", | ||
| "comment": "Canvas hash + dataUrl spoofing requires precomputed hash maps for the standard probe payloads + per-pixel noise injection — task 0071. docs/limits.md \"Canvas fingerprinting (HTMLCanvasElement.toDataURL) is NOT spoofed at v0.3\" carried over to v0.7 phase split." | ||
| }, | ||
| { | ||
| "path": "speech.**", | ||
| "comment": "speechSynthesis.getVoices() returns the host's installed system voices on real Chrome (typically 200+ entries on macOS, 20+ on Linux/Win). Chromium-for-Testing ships with no voice tables, so mochi spoofs voices=[]. Restoring real-device voice lists is a phase 0.7 deliverable (precomputed voice tables per-OS) tracked alongside audio/canvas. PLAN.md §13.6." | ||
| }, | ||
| { | ||
| "path": "navigator.userAgentData.brands", | ||
| "comment": "Brand-list length varies (Linux Chrome emits 2 brands, macOS/Win emit 3). Same root cause as the per-entry comment below." | ||
| }, | ||
| { | ||
| "path": "navigator.userAgentData.brands[*]", | ||
| "comment": "Per-entry full-object mismatch when length differs." | ||
| }, | ||
| { | ||
| "path": "navigator.userAgentData.brands[*].**", | ||
| "comment": "Sec-CH-UA brand-list ordering and GREASE label vary between Chrome/Edge majors and even between Chrome point releases (e.g. 146 emits `Not-A.Brand;v=24` while 147 emits `Not.A/Brand;v=8`). mochi pins a single GREASE label per major (consistency/rules/lookups/browser.ts) for determinism — see tasks/0051-consistency-stack-fixes.md (Group B). Per-major GREASE shuffle is a phase 0.7 deliverable." | ||
| }, | ||
| { | ||
| "path": "navigator.userAgentDataHighEntropy.brands", | ||
| "comment": "Same as userAgentData.brands." | ||
| }, | ||
| { | ||
| "path": "navigator.userAgentDataHighEntropy.brands[*]", | ||
| "comment": "Per-entry full-object mismatch when length differs." | ||
| }, | ||
| { | ||
| "path": "navigator.userAgentDataHighEntropy.brands[*].**", | ||
| "comment": "Same as navigator.userAgentData.brands — pinned for determinism." | ||
| }, | ||
| { | ||
| "path": "navigator.userAgentDataHighEntropy.fullVersionList", | ||
| "comment": "Same as userAgentData.brands — length varies by OS." | ||
| }, | ||
| { | ||
| "path": "navigator.userAgentDataHighEntropy.fullVersionList[*]", | ||
| "comment": "Per-entry full-object mismatch when length differs." | ||
| }, | ||
| { | ||
| "path": "navigator.userAgentDataHighEntropy.fullVersionList[*].**", | ||
| "comment": "Patch-level Chrome version (e.g. 146.0.7680.165) varies with the local Chrome install vs the BROWSER_TIP_FULL_VERSION table. mochi uses the table tip when the major matches; harvested values may differ by a few patch numbers. Refresh the table per Chrome major." | ||
| }, | ||
| { | ||
| "path": "navigator.userAgent", | ||
| "comment": "Full UA string includes the patch version (see fullVersionList comment). Spoofed value matches BROWSER_TIP_FULL_VERSION; harvested value reflects the user's exact Chrome point release." | ||
| }, | ||
| { | ||
| "path": "navigator.appVersion", | ||
| "comment": "Same patch-version drift as navigator.userAgent." | ||
| }, | ||
| { | ||
| "path": "screen.mediaQueries.**", | ||
| "comment": "matchMedia() result strings depend on the host's actual OS/display state (min-resolution from real DPR, prefers-color-scheme from Dark Mode, etc.). mochi spoofs a deterministic baseline; the harvested values reflect the user's session at capture time. Per-profile media-query lock is phase 0.7." | ||
| }, | ||
| { | ||
| "path": "screen.pageXOffset", | ||
| "comment": "Window-frame chrome. Sentinelized by normalize.ts in most paths but the raw harvested value may differ from the harness window's idle offset." | ||
| }, | ||
| { | ||
| "path": "screen.pageYOffset", | ||
| "comment": "Window-frame chrome — same as pageXOffset." | ||
| }, | ||
| { | ||
| "path": "timing.dateString", | ||
| "comment": "Date.toString() includes the host's wall-clock time, which differs every run. The probe normalises to a fixed 2024-01-01 anchor; harvested values reflect the user's actual capture time." | ||
| }, | ||
| { | ||
| "path": "timing.performanceTiming", | ||
| "comment": "performance.timing.* fields vary per session (load durations, redirect counts). normalize.ts sentinelizes the bot.navigationTiming sub-block; the timing.performanceTiming block is harvester-specific and not currently sentinelized." | ||
| }, | ||
| { | ||
| "path": "timing.supportedNumberingSystems[*]", | ||
| "comment": "Intl.supportedValuesOf('numberingSystem') grows between V8 majors (e.g. Chrome 149 added 'tols'). The harvested list reflects the user's V8; the harness uses Chromium-for-Testing's V8. List drift is expected as BROWSER_TIP_FULL_VERSION advances." | ||
| }, | ||
| { | ||
| "path": "webgl.aliasedLineWidthRange[*]", | ||
| "comment": "WebGL aliasedLineWidthRange/PointSizeRange/maxViewportDims values vary with the GPU driver version on the host. mochi locks GPU vendor/renderer via the matrix; per-driver-version locking is phase 0.7." | ||
| }, | ||
| { | ||
| "path": "webgl.aliasedPointSizeRange[*]", | ||
| "comment": "See webgl.aliasedLineWidthRange." | ||
| }, | ||
| { | ||
| "path": "webgl.maxColorAttachments", | ||
| "comment": "GPU-driver dependent; see webgl.aliasedLineWidthRange." | ||
| }, | ||
| { | ||
| "path": "webgl.maxViewportDims[*]", | ||
| "comment": "GPU-driver dependent; see webgl.aliasedLineWidthRange." | ||
| }, | ||
| { | ||
| "path": "webgpu.features", | ||
| "comment": "Block absent on hosts without a WebGPU adapter." | ||
| }, | ||
| { | ||
| "path": "webgpu.features[*]", | ||
| "comment": "WebGPU feature list grows between Chromium majors. The harvested list reflects the user's Chrome version; the harness uses Chromium-for-Testing." | ||
| }, | ||
| { | ||
| "path": "webgpu.info", | ||
| "comment": "Block absent on hosts without a WebGPU adapter." | ||
| }, | ||
| { | ||
| "path": "webgpu.limits.**", | ||
| "comment": "WebGPU adapter limits depend on the GPU driver. Per-driver locking is phase 0.7 alongside WebGL." | ||
| }, | ||
| { | ||
| "path": "bot.chromeRuntime", | ||
| "comment": "Real Chrome exposes window.chrome.runtime; Chromium-for-Testing does not. Restoring chrome.runtime polyfill is task 0140 (stealth conformance) — tracked separately." | ||
| }, | ||
| { | ||
| "path": "storage.cookieCount", | ||
| "comment": "Cookie state varies per session — the harvester's user had cookies, the harness session is fresh." | ||
| }, | ||
| { | ||
| "path": "storage.cookiesWritable", | ||
| "comment": "Depends on the document context (file:// fixture vs http:// origin). Harvester captured at http(s) origin; harness uses file:// fixture." | ||
| }, | ||
| { | ||
| "path": "storage.localStorageKeys", | ||
| "comment": "localStorage state varies per session — fresh harness session has no keys." | ||
| }, | ||
| { | ||
| "path": "mouseEvent", | ||
| "comment": "The probe-page emits a mouseEvent block when the relational-lock scaffolding fires. Harvested snapshots predate this probe and so omit it; spoofed sessions emit it. Cosmetic — the lock-result block is the spoof's own diagnostic, not a fingerprint surface." | ||
| }, | ||
| { | ||
| "path": "fonts.**", | ||
| "comment": "The font enumeration probe enumerates whatever the host has installed. Spoofing the per-profile font intersection is a phase 0.7 task (FontFace API stub + per-profile font allowlist). Running e.g. windows-chrome-stable on a Mac host will surface every macOS system font as material — that's a known gap, not a profile defect." | ||
| }, | ||
| { | ||
| "path": "webgl.extensions", | ||
| "comment": "Whole array absent on no-WebGL hosts (see webgl.error)." | ||
| }, | ||
| { | ||
| "path": "webgl.extensions[*]", | ||
| "comment": "WebGL extension list depends on the host GPU + driver. mochi locks GPU vendor/renderer strings but does NOT enumerate-list-spoof extensions per-profile yet. Phase 0.7 deliverable. Cross-host validation surfaces the host's actual extension set." | ||
| }, | ||
| { | ||
| "path": "webgl.precisionFormats", | ||
| "comment": "Block absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "webgl.extensionCount", | ||
| "comment": "See webgl.extensions[*] — count varies with host extensions." | ||
| }, | ||
| { | ||
| "path": "webgl.unmaskedVendor", | ||
| "comment": "Unmasked WebGL vendor/renderer requires GPU spoofing at the ANGLE layer (or a polyfilled WEBGL_debug_renderer_info getter). mochi's getter spoof is host-OS-aware; cross-host tests surface the underlying device." | ||
| }, | ||
| { | ||
| "path": "webgl.unmaskedRenderer", | ||
| "comment": "See webgl.unmaskedVendor." | ||
| }, | ||
| { | ||
| "path": "webgpu.info.**", | ||
| "comment": "WebGPU adapter info comes from the host driver. Cross-host validation shows the host's adapter; same root cause as webgl.unmaskedRenderer." | ||
| }, | ||
| { | ||
| "path": "mediaDevices.devices[*]", | ||
| "comment": "Per-entry full-object mismatch when device-array length differs." | ||
| }, | ||
| { | ||
| "path": "mediaDevices.devices[*].**", | ||
| "comment": "navigator.mediaDevices.enumerateDevices() returns whatever audio/video devices the host has. The harness fixture runs in a fresh permission state so labels are empty (matches baseline) but the device count + kind ratio depends on the host. Per-profile media-devices spoofing is phase 0.7." | ||
| }, | ||
| { | ||
| "path": "mediaDevices.deviceCount", | ||
| "comment": "See mediaDevices.devices[*]." | ||
| }, | ||
| { | ||
| "path": "mediaDevices.audioinput", | ||
| "comment": "See mediaDevices.devices[*]." | ||
| }, | ||
| { | ||
| "path": "mediaDevices.audiooutput", | ||
| "comment": "See mediaDevices.devices[*]." | ||
| }, | ||
| { | ||
| "path": "mediaDevices.videoinput", | ||
| "comment": "See mediaDevices.devices[*]." | ||
| }, | ||
| { | ||
| "path": "navigator.connection.effectiveType", | ||
| "comment": "NetworkInformation.effectiveType reads from the host network stack. downlink/rtt are sentinelized by normalize.ts but effectiveType isn't." | ||
| }, | ||
| { | ||
| "path": "timing.timezoneOffset", | ||
| "comment": "timezoneOffset depends on whether the captured profile's tz observes DST at the harness's wall-clock time vs at capture time. The IANA timezone is spoofed correctly; the offset is a derived value with seasonal drift." | ||
| }, | ||
| { | ||
| "path": "bot.userActivation.**", | ||
| "comment": "navigator.userActivation.hasBeenActive flips to true when the harness drives mouse/keyboard events. The harvested snapshot was captured before any user gesture, so hasBeenActive=false. The spoof doesn't lie about this — it's a true reflection of the harness's interaction sequence." | ||
| }, | ||
| { | ||
| "path": "navigator.deviceMemory", | ||
| "comment": "navigator.deviceMemory is spec-capped at 8 on real Chrome, but some configurations (older Chrome, non-Chromium derivatives) leak the real GiB count. mochi enforces the spec cap deterministically; the harvested value may be higher (16/32/64) and the spoof correctly clamps to 8." | ||
| }, | ||
| { | ||
| "path": "navigator.bluetooth", | ||
| "comment": "navigator.bluetooth presence depends on the host's Web Bluetooth flag. Linux Chrome typically has it disabled by default; mochi exposes it. Per-profile API allowlist is phase 0.7." | ||
| }, | ||
| { | ||
| "path": "storage.fileSystemAccess", | ||
| "comment": "FileSystemAccess API can be hardened off (Brave) or off-by-default (Linux Chrome). mochi exposes the API by default. Per-profile feature gating is phase 0.7." | ||
| }, | ||
| { | ||
| "path": "storage.sessionStorageKeys", | ||
| "comment": "The probe page writes one sessionStorage key during its self-test; harvested baselines that ran before that probe instrumentation report 0. New captures will normalize to 1 once re-imported." | ||
| }, | ||
| { | ||
| "path": "timing.timerPrecision", | ||
| "comment": "Brave coarsens performance.now() precision; harvested Brave snapshots report null. mochi does NOT coarsen — restoring Brave's precision-coarsen behavior is a phase 0.7 deliverable." | ||
| }, | ||
| { | ||
| "path": "navigator.userAgentDataHighEntropy.platformVersion", | ||
| "comment": "platformVersion is empty on Linux Chrome (X11 has no notion of OS marketing version). The spoof emits a synthesised value; on Linux imports we accept the empty-string baseline as the source of truth." | ||
| }, | ||
| { | ||
| "path": "navigator.connection", | ||
| "comment": "Brave hardens NetworkInformation and returns an undefined connection block. mochi exposes the API. Per-profile NetworkInformation hardening is a phase 0.7 deliverable." | ||
| }, | ||
| { | ||
| "path": "webgl.error", | ||
| "comment": "Some captured devices (headless Linux, lock-screened Windows) report no WebGL context. mochi always presents a WebGL surface. Per-profile no-WebGL mode is phase 0.7." | ||
| }, | ||
| { | ||
| "path": "webgl.version", | ||
| "comment": "Empty on no-WebGL hosts (see webgl.error)." | ||
| }, | ||
| { | ||
| "path": "webgl.shadingLanguageVersion", | ||
| "comment": "Empty on no-WebGL hosts (see webgl.error)." | ||
| }, | ||
| { | ||
| "path": "webgl.vendor", | ||
| "comment": "Empty on no-WebGL hosts (see webgl.error)." | ||
| }, | ||
| { | ||
| "path": "webgl.renderer", | ||
| "comment": "Empty on no-WebGL hosts (see webgl.error)." | ||
| }, | ||
| { | ||
| "path": "webgl.aliasedLineWidthRange", | ||
| "comment": "Absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "webgl.aliasedPointSizeRange", | ||
| "comment": "Absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "webgl.maxAnisotropy", | ||
| "comment": "Absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "webgl.maxColorAttachments", | ||
| "comment": "Absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "webgl.maxCombinedTextureImageUnits", | ||
| "comment": "Absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "webgl.maxCubeMapTextureSize", | ||
| "comment": "Absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "webgl.maxFragmentUniformVectors", | ||
| "comment": "Absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "webgl.maxRenderbufferSize", | ||
| "comment": "Absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "webgl.maxTextureImageUnits", | ||
| "comment": "Absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "webgl.maxTextureSize", | ||
| "comment": "Absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "webgl.maxVaryingVectors", | ||
| "comment": "Absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "webgl.maxVertexAttribs", | ||
| "comment": "Absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "webgl.maxVertexTextureImageUnits", | ||
| "comment": "Absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "webgl.maxVertexUniformVectors", | ||
| "comment": "Absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "webgl.maxViewportDims", | ||
| "comment": "Absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "webgl.precisionFormats.**", | ||
| "comment": "Absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "mediaDevices.devices", | ||
| "comment": "Device array length varies with the host's installed devices. Per-profile media-devices spoofing is phase 0.7." | ||
| } | ||
| ] | ||
| } |
| { | ||
| "id": "linux-chrome-stable", | ||
| "version": "1.0.0", | ||
| "engine": "chromium", | ||
| "browser": { | ||
| "name": "chrome", | ||
| "channel": "stable", | ||
| "minVersion": "147", | ||
| "maxVersion": "147" | ||
| }, | ||
| "os": { | ||
| "name": "linux", | ||
| "version": "22", | ||
| "arch": "x64" | ||
| }, | ||
| "device": { | ||
| "vendor": "generic", | ||
| "model": "generic-x64", | ||
| "cpuFamily": "intel-core", | ||
| "cores": 32, | ||
| "memoryGB": 64 | ||
| }, | ||
| "display": { | ||
| "width": 1280, | ||
| "height": 800, | ||
| "dpr": 1, | ||
| "colorDepth": 24, | ||
| "pixelDepth": 24 | ||
| }, | ||
| "gpu": { | ||
| "vendor": "Google Inc.", | ||
| "renderer": "Generic Renderer", | ||
| "webglUnmaskedVendor": "Google Inc.", | ||
| "webglUnmaskedRenderer": "ANGLE (Generic)", | ||
| "webglMaxTextureSize": 16384, | ||
| "webglMaxColorAttachments": 8, | ||
| "webglExtensions": [] | ||
| }, | ||
| "audio": { | ||
| "contextSampleRate": 44100, | ||
| "audioWorkletLatency": 0.01, | ||
| "destinationMaxChannelCount": 2 | ||
| }, | ||
| "fonts": { | ||
| "family": "linux-system-pack", | ||
| "list": [ | ||
| "Arial", | ||
| "Courier", | ||
| "Courier New", | ||
| "DejaVu Sans", | ||
| "DejaVu Sans Mono", | ||
| "DejaVu Serif", | ||
| "Helvetica", | ||
| "Liberation Mono", | ||
| "Liberation Sans", | ||
| "Liberation Serif", | ||
| "Times New Roman" | ||
| ] | ||
| }, | ||
| "timezone": "UTC", | ||
| "locale": "en-US", | ||
| "languages": [ | ||
| "en-US", | ||
| "en" | ||
| ], | ||
| "behavior": { | ||
| "hand": "right", | ||
| "tremor": 0.18, | ||
| "wpm": 60, | ||
| "scrollStyle": "smooth" | ||
| }, | ||
| "wreqPreset": "chrome_147_linux", | ||
| "userAgent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36", | ||
| "uaCh": { | ||
| "sec-ch-ua": "\"Chromium\";v=\"147\", \"Not.A/Brand\";v=\"8\"", | ||
| "sec-ch-ua-mobile": "?0", | ||
| "sec-ch-ua-platform": "\"Linux\"", | ||
| "sec-ch-ua-platform-version": "\"22\"", | ||
| "sec-ch-ua-arch": "\"x86\"", | ||
| "sec-ch-ua-bitness": "\"64\"", | ||
| "sec-ch-ua-model": "\"\"", | ||
| "sec-ch-ua-full-version": "\"147\"", | ||
| "sec-ch-ua-os": "\"linux\"" | ||
| }, | ||
| "entropyBudget": { | ||
| "fixed": [], | ||
| "perSeed": [] | ||
| } | ||
| } |
| # PROVENANCE — linux-chrome-stable | ||
| Imported from the wrkx harvester corpus (`http://wrkx.app/api`) by `mochi profiles import`. PLAN.md §12.2 — every profile in `main` must carry verifiable provenance. | ||
| | field | value | | ||
| |---|---| | ||
| | profile id | `linux-chrome-stable` | | ||
| | upstream visitor id | `bcbb7cfaa7f381b92daacb6b7052c6b9` | | ||
| | upstream URL | `http://wrkx.app/api/visitors/bcbb7cfaa7f381b92daacb6b7052c6b9` | | ||
| | visitor egress ip (snapshot) | 64.140.162.130 | | ||
| | browser version | 147 | | ||
| | FingerprintJS suspectScore | 16 | | ||
| | captured at (UTC) | 2026-04-29T22:22:54.246Z | | ||
| | imported at (UTC) | 2026-05-08T20:50:37.035Z | | ||
| | importer | `mochi profiles import` (task 0260) | | ||
| ## Multi-snapshot policy | ||
| When the visitor record contains multiple snapshots for a single category (re-visits over time), the importer keeps the most recent by `created_at`. This matches the spirit of capturing the device's *current* fingerprint rather than a stale earlier one. | ||
| ## TLS preset | ||
| The harvester capture did not include a JA3/JA4 hash, so the wreqPreset is synthesised as `<browser>_<major>_<os>`. The wreq Rust crate's `resolve_preset()` matches by family (`chrome*` → Chrome) — exact-version fingerprint matching is a phase 0.7 deliverable. See `packages/net-rs/src/ffi/preset.rs`. | ||
| ## Hand-corrections | ||
| None at import time. The harvester's `navigator` snapshot is captured by real Chrome (not headless), so the `--headless=new` artifacts that needed manual correction in `mac-m4-chrome-stable` (task 0070) are absent here. | ||
| { | ||
| "timing": { | ||
| "timezone": "Asia/Bangkok", | ||
| "timezoneOffset": -420, | ||
| "locale": "en-US", | ||
| "dateString": "Mon Jan 01 2024 12:00:00 GMT+0700 (Indochina Time)", | ||
| "localeString": "1/1/2024, 12:00:00 PM", | ||
| "localeDateString": "1/1/2024", | ||
| "numberFormat": { | ||
| "locale": "en-US", | ||
| "numberingSystem": "latn", | ||
| "style": "decimal", | ||
| "minimumIntegerDigits": 1, | ||
| "minimumFractionDigits": 0, | ||
| "maximumFractionDigits": 3, | ||
| "useGrouping": "auto", | ||
| "notation": "standard", | ||
| "signDisplay": "auto", | ||
| "roundingIncrement": 1, | ||
| "roundingMode": "halfExpand", | ||
| "roundingPriority": "auto", | ||
| "trailingZeroDisplay": "auto" | ||
| }, | ||
| "dateTimeFormat": { | ||
| "locale": "en-US", | ||
| "calendar": "gregory", | ||
| "numberingSystem": "latn", | ||
| "timeZone": "Asia/Bangkok", | ||
| "year": "numeric", | ||
| "month": "numeric", | ||
| "day": "numeric" | ||
| }, | ||
| "supportedCalendars": [ | ||
| "buddhist", | ||
| "chinese", | ||
| "coptic", | ||
| "dangi", | ||
| "ethioaa", | ||
| "ethiopic", | ||
| "gregory", | ||
| "hebrew", | ||
| "indian", | ||
| "islamic", | ||
| "islamic-civil", | ||
| "islamic-rgsa", | ||
| "islamic-tbla", | ||
| "islamic-umalqura", | ||
| "iso8601", | ||
| "japanese", | ||
| "persian", | ||
| "roc" | ||
| ], | ||
| "supportedCurrencies": 159, | ||
| "supportedNumberingSystems": [ | ||
| "adlm", | ||
| "ahom", | ||
| "arab", | ||
| "arabext", | ||
| "bali", | ||
| "beng", | ||
| "bhks", | ||
| "brah", | ||
| "cakm", | ||
| "cham", | ||
| "deva", | ||
| "diak", | ||
| "fullwide", | ||
| "gara", | ||
| "gong", | ||
| "gonm", | ||
| "gujr", | ||
| "gukh", | ||
| "guru", | ||
| "hanidec", | ||
| "hmng", | ||
| "hmnp", | ||
| "java", | ||
| "kali", | ||
| "kawi", | ||
| "khmr", | ||
| "knda", | ||
| "krai", | ||
| "lana", | ||
| "lanatham", | ||
| "laoo", | ||
| "latn", | ||
| "lepc", | ||
| "limb", | ||
| "mathbold", | ||
| "mathdbl", | ||
| "mathmono", | ||
| "mathsanb", | ||
| "mathsans", | ||
| "mlym", | ||
| "modi", | ||
| "mong", | ||
| "mroo", | ||
| "mtei", | ||
| "mymr", | ||
| "mymrepka", | ||
| "mymrpao", | ||
| "mymrshan", | ||
| "mymrtlng", | ||
| "nagm", | ||
| "newa", | ||
| "nkoo", | ||
| "olck", | ||
| "onao", | ||
| "orya", | ||
| "osma", | ||
| "outlined", | ||
| "rohg", | ||
| "saur", | ||
| "segment", | ||
| "shrd", | ||
| "sind", | ||
| "sinh", | ||
| "sora", | ||
| "sund", | ||
| "sunu", | ||
| "takr", | ||
| "talu", | ||
| "tamldec", | ||
| "telu", | ||
| "thai", | ||
| "tibt", | ||
| "tirh", | ||
| "tnsa", | ||
| "vaii", | ||
| "wara", | ||
| "wcho" | ||
| ], | ||
| "supportedTimeZones": 418, | ||
| "supportedUnits": 45, | ||
| "performanceTiming": { | ||
| "dns": 0, | ||
| "tcp": 0, | ||
| "ttfb": 42, | ||
| "download": 12, | ||
| "domParsing": 225, | ||
| "domComplete": -288, | ||
| "loadEvent": 0, | ||
| "total": 0, | ||
| "protocol": "h2", | ||
| "transferSize": 3475, | ||
| "encodedBodySize": 3175, | ||
| "decodedBodySize": 10829 | ||
| }, | ||
| "timerPrecision": null, | ||
| "mathFingerprint": { | ||
| "E": 2.718281828459045, | ||
| "LN2": 0.6931471805599453, | ||
| "LN10": 2.302585092994046, | ||
| "LOG2E": 1.4426950408889634, | ||
| "LOG10E": 0.4342944819032518, | ||
| "PI": 3.141592653589793, | ||
| "SQRT2": 1.4142135623730951, | ||
| "SQRT1_2": 0.7071067811865476, | ||
| "acos": 1.0471975511965979, | ||
| "acosh": 1.3169578969248166, | ||
| "asin": 0.5235987755982989, | ||
| "atan": 0.7853981633974483, | ||
| "atanh": 0.5493061443340548, | ||
| "cbrt": 1.2599210498948732, | ||
| "cosh": 1.5430806348152437, | ||
| "expm1": 1.718281828459045, | ||
| "log1p": 0.4054651081081644, | ||
| "sinh": 1.1752011936438014, | ||
| "tanh": 0.7615941559557649 | ||
| } | ||
| }, | ||
| "bot": { | ||
| "webdriver": false, | ||
| "webdriverType": "normal", | ||
| "headlessChrome": false, | ||
| "automationKeys": [], | ||
| "automationDetected": false, | ||
| "chromeRuntime": true, | ||
| "pluginCount": 5, | ||
| "pluginInconsistency": false, | ||
| "languageInconsistency": false, | ||
| "permissionsApi": true, | ||
| "screenDimensions": "1728x1117", | ||
| "suspiciousDimensions": false, | ||
| "maxTouchPoints": 0, | ||
| "touchEvent": false, | ||
| "touchInconsistency": false, | ||
| "notificationPermission": "default", | ||
| "userActivation": { | ||
| "hasBeenActive": false, | ||
| "isActive": false | ||
| }, | ||
| "navigationTiming": { | ||
| "type": "navigate", | ||
| "redirectCount": 0, | ||
| "domComplete": 0, | ||
| "loadEventEnd": 0, | ||
| "domInteractive": 288 | ||
| }, | ||
| "stackDepthTest": 101 | ||
| }, | ||
| "storage": { | ||
| "localStorage": true, | ||
| "localStorageKeys": 5, | ||
| "sessionStorage": true, | ||
| "sessionStorageKeys": 1, | ||
| "cookiesEnabled": true, | ||
| "cookiesWritable": true, | ||
| "cookieCount": 1, | ||
| "indexedDB": true, | ||
| "cacheStorage": true, | ||
| "serviceWorker": true, | ||
| "storageManager": true, | ||
| "fileSystemAccess": false, | ||
| "sharedArrayBuffer": false, | ||
| "sharedWorker": true, | ||
| "openDatabase": false, | ||
| "broadcastChannel": true, | ||
| "secureContext": true | ||
| }, | ||
| "fonts": { | ||
| "detected": [ | ||
| "Arial", | ||
| "Arial Black", | ||
| "Arial Narrow", | ||
| "Comic Sans MS", | ||
| "Courier New", | ||
| "Georgia", | ||
| "Impact", | ||
| "Microsoft Sans Serif", | ||
| "Tahoma", | ||
| "Times New Roman", | ||
| "Trebuchet MS", | ||
| "Verdana", | ||
| "Webdings", | ||
| "Wingdings", | ||
| "American Typewriter", | ||
| "Andale Mono", | ||
| "Apple Chancery", | ||
| "Apple Color Emoji", | ||
| "Apple SD Gothic Neo", | ||
| "Avenir", | ||
| "Avenir Next", | ||
| "Baskerville", | ||
| "Big Caslon", | ||
| "Brush Script MT", | ||
| "Chalkboard", | ||
| "Chalkboard SE", | ||
| "Chalkduster", | ||
| "Cochin", | ||
| "Copperplate", | ||
| "Courier", | ||
| "Didot", | ||
| "Futura", | ||
| "Geneva", | ||
| "Gill Sans", | ||
| "Helvetica", | ||
| "Helvetica Neue", | ||
| "Herculanum", | ||
| "Hoefler Text", | ||
| "Iowan Old Style", | ||
| "Lucida Grande", | ||
| "Luminari", | ||
| "Marker Felt", | ||
| "Menlo", | ||
| "Monaco", | ||
| "Noteworthy", | ||
| "Optima", | ||
| "Palatino", | ||
| "Papyrus", | ||
| "Phosphate", | ||
| "Rockwell", | ||
| "Savoye LET", | ||
| "SignPainter", | ||
| "Skia", | ||
| "Snell Roundhand", | ||
| "STIXGeneral", | ||
| "Superclarendon", | ||
| "Symbol", | ||
| "System Font", | ||
| "Zapfino", | ||
| "Hiragino Sans", | ||
| "Hiragino Kaku Gothic Pro", | ||
| "Hiragino Mincho Pro", | ||
| "PT Sans" | ||
| ], | ||
| "count": 63, | ||
| "tested": 117, | ||
| "hash": "B8498456", | ||
| "fontsApiReady": true | ||
| }, | ||
| "speech": { | ||
| "voices": [ | ||
| { | ||
| "name": "Samantha", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": true, | ||
| "voiceURI": "Samantha" | ||
| }, | ||
| { | ||
| "name": "Albert", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Albert" | ||
| }, | ||
| { | ||
| "name": "Alice", | ||
| "lang": "it-IT", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Alice" | ||
| }, | ||
| { | ||
| "name": "Alva", | ||
| "lang": "sv-SE", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Alva" | ||
| }, | ||
| { | ||
| "name": "Amélie", | ||
| "lang": "fr-CA", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Amélie" | ||
| }, | ||
| { | ||
| "name": "Amira", | ||
| "lang": "ms-MY", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Amira" | ||
| }, | ||
| { | ||
| "name": "Anna", | ||
| "lang": "de-DE", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Anna" | ||
| }, | ||
| { | ||
| "name": "Bad News", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Bad News" | ||
| }, | ||
| { | ||
| "name": "Bahh", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Bahh" | ||
| }, | ||
| { | ||
| "name": "Bells", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Bells" | ||
| }, | ||
| { | ||
| "name": "Boing", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Boing" | ||
| }, | ||
| { | ||
| "name": "Bubbles", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Bubbles" | ||
| }, | ||
| { | ||
| "name": "Carmit", | ||
| "lang": "he-IL", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Carmit" | ||
| }, | ||
| { | ||
| "name": "Cellos", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Cellos" | ||
| }, | ||
| { | ||
| "name": "Damayanti", | ||
| "lang": "id-ID", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Damayanti" | ||
| }, | ||
| { | ||
| "name": "Daniel", | ||
| "lang": "en-GB", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Daniel" | ||
| }, | ||
| { | ||
| "name": "Daria", | ||
| "lang": "bg-BG", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Daria" | ||
| }, | ||
| { | ||
| "name": "Eddy (English (United States))", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Eddy (English (United States))" | ||
| }, | ||
| { | ||
| "name": "Eddy (English (United Kingdom))", | ||
| "lang": "en-GB", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Eddy (English (United Kingdom))" | ||
| }, | ||
| { | ||
| "name": "Eddy (Chinese (China mainland))", | ||
| "lang": "zh-CN", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Eddy (Chinese (China mainland))" | ||
| }, | ||
| { | ||
| "name": "Eddy (Chinese (Taiwan))", | ||
| "lang": "zh-TW", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Eddy (Chinese (Taiwan))" | ||
| }, | ||
| { | ||
| "name": "Eddy (German (Germany))", | ||
| "lang": "de-DE", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Eddy (German (Germany))" | ||
| }, | ||
| { | ||
| "name": "Eddy (Spanish (Spain))", | ||
| "lang": "es-ES", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Eddy (Spanish (Spain))" | ||
| }, | ||
| { | ||
| "name": "Eddy (Spanish (Mexico))", | ||
| "lang": "es-MX", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Eddy (Spanish (Mexico))" | ||
| }, | ||
| { | ||
| "name": "Eddy (Finnish (Finland))", | ||
| "lang": "fi-FI", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Eddy (Finnish (Finland))" | ||
| }, | ||
| { | ||
| "name": "Eddy (French (Canada))", | ||
| "lang": "fr-CA", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Eddy (French (Canada))" | ||
| }, | ||
| { | ||
| "name": "Eddy (French (France))", | ||
| "lang": "fr-FR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Eddy (French (France))" | ||
| }, | ||
| { | ||
| "name": "Eddy (Italian (Italy))", | ||
| "lang": "it-IT", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Eddy (Italian (Italy))" | ||
| }, | ||
| { | ||
| "name": "Eddy (Japanese (Japan))", | ||
| "lang": "ja-JP", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Eddy (Japanese (Japan))" | ||
| }, | ||
| { | ||
| "name": "Eddy (Korean (South Korea))", | ||
| "lang": "ko-KR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Eddy (Korean (South Korea))" | ||
| }, | ||
| { | ||
| "name": "Eddy (Portuguese (Brazil))", | ||
| "lang": "pt-BR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Eddy (Portuguese (Brazil))" | ||
| }, | ||
| { | ||
| "name": "Ellen", | ||
| "lang": "nl-BE", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Ellen" | ||
| }, | ||
| { | ||
| "name": "Flo (English (United States))", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Flo (English (United States))" | ||
| }, | ||
| { | ||
| "name": "Flo (English (United Kingdom))", | ||
| "lang": "en-GB", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Flo (English (United Kingdom))" | ||
| }, | ||
| { | ||
| "name": "Flo (Chinese (China mainland))", | ||
| "lang": "zh-CN", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Flo (Chinese (China mainland))" | ||
| }, | ||
| { | ||
| "name": "Flo (Chinese (Taiwan))", | ||
| "lang": "zh-TW", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Flo (Chinese (Taiwan))" | ||
| }, | ||
| { | ||
| "name": "Flo (German (Germany))", | ||
| "lang": "de-DE", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Flo (German (Germany))" | ||
| }, | ||
| { | ||
| "name": "Flo (Spanish (Spain))", | ||
| "lang": "es-ES", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Flo (Spanish (Spain))" | ||
| }, | ||
| { | ||
| "name": "Flo (Spanish (Mexico))", | ||
| "lang": "es-MX", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Flo (Spanish (Mexico))" | ||
| }, | ||
| { | ||
| "name": "Flo (Finnish (Finland))", | ||
| "lang": "fi-FI", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Flo (Finnish (Finland))" | ||
| }, | ||
| { | ||
| "name": "Flo (French (Canada))", | ||
| "lang": "fr-CA", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Flo (French (Canada))" | ||
| }, | ||
| { | ||
| "name": "Flo (French (France))", | ||
| "lang": "fr-FR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Flo (French (France))" | ||
| }, | ||
| { | ||
| "name": "Flo (Italian (Italy))", | ||
| "lang": "it-IT", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Flo (Italian (Italy))" | ||
| }, | ||
| { | ||
| "name": "Flo (Japanese (Japan))", | ||
| "lang": "ja-JP", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Flo (Japanese (Japan))" | ||
| }, | ||
| { | ||
| "name": "Flo (Korean (South Korea))", | ||
| "lang": "ko-KR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Flo (Korean (South Korea))" | ||
| }, | ||
| { | ||
| "name": "Flo (Portuguese (Brazil))", | ||
| "lang": "pt-BR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Flo (Portuguese (Brazil))" | ||
| }, | ||
| { | ||
| "name": "Fred", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Fred" | ||
| }, | ||
| { | ||
| "name": "Geeta", | ||
| "lang": "te-IN", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Geeta" | ||
| }, | ||
| { | ||
| "name": "Good News", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Good News" | ||
| }, | ||
| { | ||
| "name": "Grandma (English (United States))", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandma (English (United States))" | ||
| }, | ||
| { | ||
| "name": "Grandma (English (United Kingdom))", | ||
| "lang": "en-GB", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandma (English (United Kingdom))" | ||
| }, | ||
| { | ||
| "name": "Grandma (Chinese (China mainland))", | ||
| "lang": "zh-CN", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandma (Chinese (China mainland))" | ||
| }, | ||
| { | ||
| "name": "Grandma (Chinese (Taiwan))", | ||
| "lang": "zh-TW", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandma (Chinese (Taiwan))" | ||
| }, | ||
| { | ||
| "name": "Grandma (German (Germany))", | ||
| "lang": "de-DE", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandma (German (Germany))" | ||
| }, | ||
| { | ||
| "name": "Grandma (Spanish (Spain))", | ||
| "lang": "es-ES", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandma (Spanish (Spain))" | ||
| }, | ||
| { | ||
| "name": "Grandma (Spanish (Mexico))", | ||
| "lang": "es-MX", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandma (Spanish (Mexico))" | ||
| }, | ||
| { | ||
| "name": "Grandma (Finnish (Finland))", | ||
| "lang": "fi-FI", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandma (Finnish (Finland))" | ||
| }, | ||
| { | ||
| "name": "Grandma (French (Canada))", | ||
| "lang": "fr-CA", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandma (French (Canada))" | ||
| }, | ||
| { | ||
| "name": "Grandma (French (France))", | ||
| "lang": "fr-FR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandma (French (France))" | ||
| }, | ||
| { | ||
| "name": "Grandma (Italian (Italy))", | ||
| "lang": "it-IT", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandma (Italian (Italy))" | ||
| }, | ||
| { | ||
| "name": "Grandma (Japanese (Japan))", | ||
| "lang": "ja-JP", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandma (Japanese (Japan))" | ||
| }, | ||
| { | ||
| "name": "Grandma (Korean (South Korea))", | ||
| "lang": "ko-KR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandma (Korean (South Korea))" | ||
| }, | ||
| { | ||
| "name": "Grandma (Portuguese (Brazil))", | ||
| "lang": "pt-BR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandma (Portuguese (Brazil))" | ||
| }, | ||
| { | ||
| "name": "Grandpa (English (United States))", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandpa (English (United States))" | ||
| }, | ||
| { | ||
| "name": "Grandpa (English (United Kingdom))", | ||
| "lang": "en-GB", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandpa (English (United Kingdom))" | ||
| }, | ||
| { | ||
| "name": "Grandpa (Chinese (China mainland))", | ||
| "lang": "zh-CN", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandpa (Chinese (China mainland))" | ||
| }, | ||
| { | ||
| "name": "Grandpa (Chinese (Taiwan))", | ||
| "lang": "zh-TW", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandpa (Chinese (Taiwan))" | ||
| }, | ||
| { | ||
| "name": "Grandpa (German (Germany))", | ||
| "lang": "de-DE", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandpa (German (Germany))" | ||
| }, | ||
| { | ||
| "name": "Grandpa (Spanish (Spain))", | ||
| "lang": "es-ES", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandpa (Spanish (Spain))" | ||
| }, | ||
| { | ||
| "name": "Grandpa (Spanish (Mexico))", | ||
| "lang": "es-MX", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandpa (Spanish (Mexico))" | ||
| }, | ||
| { | ||
| "name": "Grandpa (Finnish (Finland))", | ||
| "lang": "fi-FI", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandpa (Finnish (Finland))" | ||
| }, | ||
| { | ||
| "name": "Grandpa (French (Canada))", | ||
| "lang": "fr-CA", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandpa (French (Canada))" | ||
| }, | ||
| { | ||
| "name": "Grandpa (French (France))", | ||
| "lang": "fr-FR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandpa (French (France))" | ||
| }, | ||
| { | ||
| "name": "Grandpa (Italian (Italy))", | ||
| "lang": "it-IT", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandpa (Italian (Italy))" | ||
| }, | ||
| { | ||
| "name": "Grandpa (Japanese (Japan))", | ||
| "lang": "ja-JP", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandpa (Japanese (Japan))" | ||
| }, | ||
| { | ||
| "name": "Grandpa (Korean (South Korea))", | ||
| "lang": "ko-KR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandpa (Korean (South Korea))" | ||
| }, | ||
| { | ||
| "name": "Grandpa (Portuguese (Brazil))", | ||
| "lang": "pt-BR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandpa (Portuguese (Brazil))" | ||
| }, | ||
| { | ||
| "name": "Ioana", | ||
| "lang": "ro-RO", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Ioana" | ||
| }, | ||
| { | ||
| "name": "Jacques", | ||
| "lang": "fr-FR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Jacques" | ||
| }, | ||
| { | ||
| "name": "Jester", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Jester" | ||
| }, | ||
| { | ||
| "name": "Joana", | ||
| "lang": "pt-PT", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Joana" | ||
| }, | ||
| { | ||
| "name": "Junior", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Junior" | ||
| }, | ||
| { | ||
| "name": "Kanya", | ||
| "lang": "th-TH", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Kanya" | ||
| }, | ||
| { | ||
| "name": "Karen", | ||
| "lang": "en-AU", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Karen" | ||
| }, | ||
| { | ||
| "name": "Kathy", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Kathy" | ||
| }, | ||
| { | ||
| "name": "Kyoko", | ||
| "lang": "ja-JP", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Kyoko" | ||
| }, | ||
| { | ||
| "name": "Lana", | ||
| "lang": "hr-HR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Lana" | ||
| }, | ||
| { | ||
| "name": "Laura", | ||
| "lang": "sk-SK", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Laura" | ||
| }, | ||
| { | ||
| "name": "Lekha", | ||
| "lang": "hi-IN", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Lekha" | ||
| }, | ||
| { | ||
| "name": "Lesya", | ||
| "lang": "uk-UA", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Lesya" | ||
| }, | ||
| { | ||
| "name": "Linh", | ||
| "lang": "vi-VN", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Linh" | ||
| }, | ||
| { | ||
| "name": "Luciana", | ||
| "lang": "pt-BR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Luciana" | ||
| }, | ||
| { | ||
| "name": "Majed", | ||
| "lang": "ar-001", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Majed" | ||
| }, | ||
| { | ||
| "name": "Meijia", | ||
| "lang": "zh-TW", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Meijia" | ||
| }, | ||
| { | ||
| "name": "Melina", | ||
| "lang": "el-GR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Melina" | ||
| }, | ||
| { | ||
| "name": "Milena", | ||
| "lang": "ru-RU", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Milena" | ||
| }, | ||
| { | ||
| "name": "Moira", | ||
| "lang": "en-IE", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Moira" | ||
| }, | ||
| { | ||
| "name": "Montse", | ||
| "lang": "ca-ES", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Montse" | ||
| }, | ||
| { | ||
| "name": "Mónica", | ||
| "lang": "es-ES", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Mónica" | ||
| }, | ||
| { | ||
| "name": "Nora", | ||
| "lang": "nb-NO", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Nora" | ||
| }, | ||
| { | ||
| "name": "Organ", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Organ" | ||
| }, | ||
| { | ||
| "name": "Paulina", | ||
| "lang": "es-MX", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Paulina" | ||
| }, | ||
| { | ||
| "name": "Piya", | ||
| "lang": "bn-IN", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Piya" | ||
| }, | ||
| { | ||
| "name": "Ralph", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Ralph" | ||
| }, | ||
| { | ||
| "name": "Reed (English (United States))", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Reed (English (United States))" | ||
| }, | ||
| { | ||
| "name": "Reed (English (United Kingdom))", | ||
| "lang": "en-GB", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Reed (English (United Kingdom))" | ||
| }, | ||
| { | ||
| "name": "Reed (Chinese (China mainland))", | ||
| "lang": "zh-CN", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Reed (Chinese (China mainland))" | ||
| }, | ||
| { | ||
| "name": "Reed (Chinese (Taiwan))", | ||
| "lang": "zh-TW", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Reed (Chinese (Taiwan))" | ||
| }, | ||
| { | ||
| "name": "Reed (German (Germany))", | ||
| "lang": "de-DE", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Reed (German (Germany))" | ||
| }, | ||
| { | ||
| "name": "Reed (Spanish (Spain))", | ||
| "lang": "es-ES", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Reed (Spanish (Spain))" | ||
| }, | ||
| { | ||
| "name": "Reed (Spanish (Mexico))", | ||
| "lang": "es-MX", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Reed (Spanish (Mexico))" | ||
| }, | ||
| { | ||
| "name": "Reed (Finnish (Finland))", | ||
| "lang": "fi-FI", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Reed (Finnish (Finland))" | ||
| }, | ||
| { | ||
| "name": "Reed (French (Canada))", | ||
| "lang": "fr-CA", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Reed (French (Canada))" | ||
| }, | ||
| { | ||
| "name": "Reed (Italian (Italy))", | ||
| "lang": "it-IT", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Reed (Italian (Italy))" | ||
| }, | ||
| { | ||
| "name": "Reed (Japanese (Japan))", | ||
| "lang": "ja-JP", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Reed (Japanese (Japan))" | ||
| }, | ||
| { | ||
| "name": "Reed (Korean (South Korea))", | ||
| "lang": "ko-KR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Reed (Korean (South Korea))" | ||
| }, | ||
| { | ||
| "name": "Reed (Portuguese (Brazil))", | ||
| "lang": "pt-BR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Reed (Portuguese (Brazil))" | ||
| }, | ||
| { | ||
| "name": "Rishi", | ||
| "lang": "en-IN", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Rishi" | ||
| }, | ||
| { | ||
| "name": "Rocko (English (United States))", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Rocko (English (United States))" | ||
| }, | ||
| { | ||
| "name": "Rocko (English (United Kingdom))", | ||
| "lang": "en-GB", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Rocko (English (United Kingdom))" | ||
| }, | ||
| { | ||
| "name": "Rocko (Chinese (China mainland))", | ||
| "lang": "zh-CN", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Rocko (Chinese (China mainland))" | ||
| }, | ||
| { | ||
| "name": "Rocko (Chinese (Taiwan))", | ||
| "lang": "zh-TW", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Rocko (Chinese (Taiwan))" | ||
| }, | ||
| { | ||
| "name": "Rocko (German (Germany))", | ||
| "lang": "de-DE", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Rocko (German (Germany))" | ||
| }, | ||
| { | ||
| "name": "Rocko (Spanish (Spain))", | ||
| "lang": "es-ES", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Rocko (Spanish (Spain))" | ||
| }, | ||
| { | ||
| "name": "Rocko (Spanish (Mexico))", | ||
| "lang": "es-MX", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Rocko (Spanish (Mexico))" | ||
| }, | ||
| { | ||
| "name": "Rocko (Finnish (Finland))", | ||
| "lang": "fi-FI", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Rocko (Finnish (Finland))" | ||
| }, | ||
| { | ||
| "name": "Rocko (French (Canada))", | ||
| "lang": "fr-CA", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Rocko (French (Canada))" | ||
| }, | ||
| { | ||
| "name": "Rocko (French (France))", | ||
| "lang": "fr-FR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Rocko (French (France))" | ||
| }, | ||
| { | ||
| "name": "Rocko (Italian (Italy))", | ||
| "lang": "it-IT", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Rocko (Italian (Italy))" | ||
| }, | ||
| { | ||
| "name": "Rocko (Japanese (Japan))", | ||
| "lang": "ja-JP", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Rocko (Japanese (Japan))" | ||
| }, | ||
| { | ||
| "name": "Rocko (Korean (South Korea))", | ||
| "lang": "ko-KR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Rocko (Korean (South Korea))" | ||
| }, | ||
| { | ||
| "name": "Rocko (Portuguese (Brazil))", | ||
| "lang": "pt-BR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Rocko (Portuguese (Brazil))" | ||
| }, | ||
| { | ||
| "name": "Sandy (English (United States))", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Sandy (English (United States))" | ||
| }, | ||
| { | ||
| "name": "Sandy (English (United Kingdom))", | ||
| "lang": "en-GB", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Sandy (English (United Kingdom))" | ||
| }, | ||
| { | ||
| "name": "Sandy (Chinese (China mainland))", | ||
| "lang": "zh-CN", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Sandy (Chinese (China mainland))" | ||
| }, | ||
| { | ||
| "name": "Sandy (Chinese (Taiwan))", | ||
| "lang": "zh-TW", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Sandy (Chinese (Taiwan))" | ||
| }, | ||
| { | ||
| "name": "Sandy (German (Germany))", | ||
| "lang": "de-DE", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Sandy (German (Germany))" | ||
| }, | ||
| { | ||
| "name": "Sandy (Spanish (Spain))", | ||
| "lang": "es-ES", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Sandy (Spanish (Spain))" | ||
| }, | ||
| { | ||
| "name": "Sandy (Spanish (Mexico))", | ||
| "lang": "es-MX", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Sandy (Spanish (Mexico))" | ||
| }, | ||
| { | ||
| "name": "Sandy (Finnish (Finland))", | ||
| "lang": "fi-FI", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Sandy (Finnish (Finland))" | ||
| }, | ||
| { | ||
| "name": "Sandy (French (Canada))", | ||
| "lang": "fr-CA", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Sandy (French (Canada))" | ||
| }, | ||
| { | ||
| "name": "Sandy (French (France))", | ||
| "lang": "fr-FR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Sandy (French (France))" | ||
| }, | ||
| { | ||
| "name": "Sandy (Italian (Italy))", | ||
| "lang": "it-IT", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Sandy (Italian (Italy))" | ||
| }, | ||
| { | ||
| "name": "Sandy (Japanese (Japan))", | ||
| "lang": "ja-JP", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Sandy (Japanese (Japan))" | ||
| }, | ||
| { | ||
| "name": "Sandy (Korean (South Korea))", | ||
| "lang": "ko-KR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Sandy (Korean (South Korea))" | ||
| }, | ||
| { | ||
| "name": "Sandy (Portuguese (Brazil))", | ||
| "lang": "pt-BR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Sandy (Portuguese (Brazil))" | ||
| }, | ||
| { | ||
| "name": "Sara", | ||
| "lang": "da-DK", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Sara" | ||
| }, | ||
| { | ||
| "name": "Satu", | ||
| "lang": "fi-FI", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Satu" | ||
| }, | ||
| { | ||
| "name": "Shelley (English (United States))", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Shelley (English (United States))" | ||
| }, | ||
| { | ||
| "name": "Shelley (English (United Kingdom))", | ||
| "lang": "en-GB", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Shelley (English (United Kingdom))" | ||
| }, | ||
| { | ||
| "name": "Shelley (Chinese (China mainland))", | ||
| "lang": "zh-CN", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Shelley (Chinese (China mainland))" | ||
| }, | ||
| { | ||
| "name": "Shelley (Chinese (Taiwan))", | ||
| "lang": "zh-TW", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Shelley (Chinese (Taiwan))" | ||
| }, | ||
| { | ||
| "name": "Shelley (German (Germany))", | ||
| "lang": "de-DE", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Shelley (German (Germany))" | ||
| }, | ||
| { | ||
| "name": "Shelley (Spanish (Spain))", | ||
| "lang": "es-ES", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Shelley (Spanish (Spain))" | ||
| }, | ||
| { | ||
| "name": "Shelley (Spanish (Mexico))", | ||
| "lang": "es-MX", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Shelley (Spanish (Mexico))" | ||
| }, | ||
| { | ||
| "name": "Shelley (Finnish (Finland))", | ||
| "lang": "fi-FI", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Shelley (Finnish (Finland))" | ||
| }, | ||
| { | ||
| "name": "Shelley (French (Canada))", | ||
| "lang": "fr-CA", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Shelley (French (Canada))" | ||
| }, | ||
| { | ||
| "name": "Shelley (French (France))", | ||
| "lang": "fr-FR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Shelley (French (France))" | ||
| }, | ||
| { | ||
| "name": "Shelley (Italian (Italy))", | ||
| "lang": "it-IT", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Shelley (Italian (Italy))" | ||
| }, | ||
| { | ||
| "name": "Shelley (Japanese (Japan))", | ||
| "lang": "ja-JP", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Shelley (Japanese (Japan))" | ||
| }, | ||
| { | ||
| "name": "Shelley (Korean (South Korea))", | ||
| "lang": "ko-KR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Shelley (Korean (South Korea))" | ||
| }, | ||
| { | ||
| "name": "Shelley (Portuguese (Brazil))", | ||
| "lang": "pt-BR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Shelley (Portuguese (Brazil))" | ||
| }, | ||
| { | ||
| "name": "Sinji", | ||
| "lang": "yue-HK", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Sinji" | ||
| }, | ||
| { | ||
| "name": "Soumya", | ||
| "lang": "kn-IN", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Soumya" | ||
| }, | ||
| { | ||
| "name": "Superstar", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Superstar" | ||
| }, | ||
| { | ||
| "name": "Tessa", | ||
| "lang": "en-ZA", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Tessa" | ||
| }, | ||
| { | ||
| "name": "Thomas", | ||
| "lang": "fr-FR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Thomas" | ||
| }, | ||
| { | ||
| "name": "Tina", | ||
| "lang": "sl-SI", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Tina" | ||
| }, | ||
| { | ||
| "name": "Tingting", | ||
| "lang": "zh-CN", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Tingting" | ||
| }, | ||
| { | ||
| "name": "Trinoids", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Trinoids" | ||
| }, | ||
| { | ||
| "name": "Tünde", | ||
| "lang": "hu-HU", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Tünde" | ||
| }, | ||
| { | ||
| "name": "Vani", | ||
| "lang": "ta-IN", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Vani" | ||
| }, | ||
| { | ||
| "name": "Whisper", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Whisper" | ||
| }, | ||
| { | ||
| "name": "Wobble", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Wobble" | ||
| }, | ||
| { | ||
| "name": "Xander", | ||
| "lang": "nl-NL", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Xander" | ||
| }, | ||
| { | ||
| "name": "Yelda", | ||
| "lang": "tr-TR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Yelda" | ||
| }, | ||
| { | ||
| "name": "Yuna", | ||
| "lang": "ko-KR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Yuna" | ||
| }, | ||
| { | ||
| "name": "Zarvox", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Zarvox" | ||
| }, | ||
| { | ||
| "name": "Zosia", | ||
| "lang": "pl-PL", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Zosia" | ||
| }, | ||
| { | ||
| "name": "Zuzana", | ||
| "lang": "cs-CZ", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Zuzana" | ||
| } | ||
| ], | ||
| "voiceCount": 180, | ||
| "localVoices": 180, | ||
| "remoteVoices": 0, | ||
| "languages": [ | ||
| "en-US", | ||
| "it-IT", | ||
| "sv-SE", | ||
| "fr-CA", | ||
| "ms-MY", | ||
| "de-DE", | ||
| "he-IL", | ||
| "id-ID", | ||
| "en-GB", | ||
| "bg-BG", | ||
| "zh-CN", | ||
| "zh-TW", | ||
| "es-ES", | ||
| "es-MX", | ||
| "fi-FI", | ||
| "fr-FR", | ||
| "ja-JP", | ||
| "ko-KR", | ||
| "pt-BR", | ||
| "nl-BE", | ||
| "te-IN", | ||
| "ro-RO", | ||
| "pt-PT", | ||
| "th-TH", | ||
| "en-AU", | ||
| "hr-HR", | ||
| "sk-SK", | ||
| "hi-IN", | ||
| "uk-UA", | ||
| "vi-VN", | ||
| "ar-001", | ||
| "el-GR", | ||
| "ru-RU", | ||
| "en-IE", | ||
| "ca-ES", | ||
| "nb-NO", | ||
| "bn-IN", | ||
| "en-IN", | ||
| "da-DK", | ||
| "yue-HK", | ||
| "kn-IN", | ||
| "en-ZA", | ||
| "sl-SI", | ||
| "hu-HU", | ||
| "ta-IN", | ||
| "nl-NL", | ||
| "tr-TR", | ||
| "pl-PL", | ||
| "cs-CZ" | ||
| ] | ||
| }, | ||
| "mediaDevices": { | ||
| "devices": [ | ||
| { | ||
| "deviceId": "", | ||
| "kind": "audioinput", | ||
| "label": "", | ||
| "groupId": "" | ||
| }, | ||
| { | ||
| "deviceId": "", | ||
| "kind": "videoinput", | ||
| "label": "", | ||
| "groupId": "" | ||
| }, | ||
| { | ||
| "deviceId": "", | ||
| "kind": "audiooutput", | ||
| "label": "", | ||
| "groupId": "" | ||
| } | ||
| ], | ||
| "deviceCount": 3, | ||
| "audioinput": 1, | ||
| "audiooutput": 1, | ||
| "videoinput": 1, | ||
| "supportedConstraints": { | ||
| "aspectRatio": true, | ||
| "autoGainControl": true, | ||
| "brightness": true, | ||
| "channelCount": true, | ||
| "colorTemperature": true, | ||
| "contrast": true, | ||
| "deviceId": true, | ||
| "displaySurface": true, | ||
| "echoCancellation": true, | ||
| "exposureCompensation": true, | ||
| "exposureMode": true, | ||
| "exposureTime": true, | ||
| "facingMode": true, | ||
| "focusDistance": true, | ||
| "focusMode": true, | ||
| "frameRate": true, | ||
| "groupId": true, | ||
| "height": true, | ||
| "iso": true, | ||
| "latency": true, | ||
| "noiseSuppression": true, | ||
| "pan": true, | ||
| "pointsOfInterest": true, | ||
| "resizeMode": true, | ||
| "restrictOwnAudio": true, | ||
| "sampleRate": true, | ||
| "sampleSize": true, | ||
| "saturation": true, | ||
| "sharpness": true, | ||
| "suppressLocalAudioPlayback": true, | ||
| "tilt": true, | ||
| "torch": true, | ||
| "voiceIsolation": true, | ||
| "whiteBalanceMode": true, | ||
| "width": true, | ||
| "zoom": true | ||
| } | ||
| }, | ||
| "audio": { | ||
| "sampleRate": 48000, | ||
| "state": "suspended", | ||
| "baseLatency": 0.005333333333333333, | ||
| "outputLatency": 0, | ||
| "maxChannelCount": 2, | ||
| "numberOfInputs": 1, | ||
| "numberOfOutputs": 0, | ||
| "channelCount": 2, | ||
| "channelCountMode": "explicit", | ||
| "channelInterpretation": "speakers", | ||
| "audioHash": "124.04347624466754", | ||
| "sampleValues": [ | ||
| -0.10808053612709045, | ||
| -0.3909117877483368, | ||
| -0.005692681297659874, | ||
| 0.3892313539981842, | ||
| 0.1189708411693573, | ||
| -0.3545846939086914, | ||
| -0.22215834259986877, | ||
| 0.28990939259529114, | ||
| 0.30651888251304626, | ||
| -0.20068734884262085 | ||
| ] | ||
| }, | ||
| "webgpu": { | ||
| "supported": true, | ||
| "features": [ | ||
| "depth32float-stencil8", | ||
| "rg11b10ufloat-renderable", | ||
| "bgra8unorm-storage", | ||
| "texture-formats-tier1", | ||
| "texture-compression-bc", | ||
| "dual-source-blending", | ||
| "core-features-and-limits", | ||
| "float32-filterable", | ||
| "indirect-first-instance", | ||
| "texture-compression-astc-sliced-3d", | ||
| "float32-blendable", | ||
| "texture-compression-astc", | ||
| "texture-compression-etc2", | ||
| "depth-clip-control", | ||
| "texture-compression-bc-sliced-3d", | ||
| "texture-formats-tier2", | ||
| "clip-distances", | ||
| "timestamp-query", | ||
| "shader-f16", | ||
| "primitive-index", | ||
| "texture-component-swizzle", | ||
| "subgroups" | ||
| ], | ||
| "info": { | ||
| "vendor": "apple", | ||
| "architecture": "metal-3", | ||
| "device": "", | ||
| "description": "" | ||
| } | ||
| }, | ||
| "webgl": { | ||
| "version": "WebGL 2.0 (OpenGL ES 3.0 Chromium)", | ||
| "shadingLanguageVersion": "WebGL GLSL ES 3.00 (OpenGL ES GLSL ES 3.0 Chromium)", | ||
| "vendor": "WebKit", | ||
| "renderer": "WebKit WebGL", | ||
| "unmaskedVendor": "Google Inc. (Apple)", | ||
| "unmaskedRenderer": "ANGLE (Apple, ANGLE Metal Renderer: Apple M4 Max, Unspecified Version)", | ||
| "extensions": [ | ||
| "EXT_clip_control", | ||
| "EXT_color_buffer_float", | ||
| "EXT_color_buffer_half_float", | ||
| "EXT_conservative_depth", | ||
| "EXT_depth_clamp", | ||
| "EXT_disjoint_timer_query_webgl2", | ||
| "EXT_float_blend", | ||
| "EXT_polygon_offset_clamp", | ||
| "EXT_render_snorm", | ||
| "EXT_texture_compression_bptc", | ||
| "EXT_texture_compression_rgtc", | ||
| "EXT_texture_filter_anisotropic", | ||
| "EXT_texture_mirror_clamp_to_edge", | ||
| "EXT_texture_norm16", | ||
| "KHR_parallel_shader_compile", | ||
| "NV_shader_noperspective_interpolation", | ||
| "OES_draw_buffers_indexed", | ||
| "OES_sample_variables", | ||
| "OES_shader_multisample_interpolation", | ||
| "OES_texture_float_linear", | ||
| "WEBGL_blend_func_extended", | ||
| "WEBGL_clip_cull_distance", | ||
| "WEBGL_compressed_texture_astc", | ||
| "WEBGL_compressed_texture_etc", | ||
| "WEBGL_compressed_texture_etc1", | ||
| "WEBGL_compressed_texture_pvrtc", | ||
| "WEBGL_compressed_texture_s3tc", | ||
| "WEBGL_compressed_texture_s3tc_srgb", | ||
| "WEBGL_debug_renderer_info", | ||
| "WEBGL_debug_shaders", | ||
| "WEBGL_lose_context", | ||
| "WEBGL_multi_draw", | ||
| "WEBGL_polygon_mode", | ||
| "WEBGL_provoking_vertex", | ||
| "WEBGL_render_shared_exponent", | ||
| "WEBGL_stencil_texturing" | ||
| ], | ||
| "extensionCount": 36, | ||
| "maxTextureSize": 16384, | ||
| "maxViewportDims": [ | ||
| 16384, | ||
| 16384 | ||
| ], | ||
| "maxRenderbufferSize": 16384, | ||
| "maxCombinedTextureImageUnits": 32, | ||
| "maxCubeMapTextureSize": 16384, | ||
| "maxFragmentUniformVectors": 1024, | ||
| "maxTextureImageUnits": 16, | ||
| "maxVertexAttribs": 16, | ||
| "maxVertexTextureImageUnits": 16, | ||
| "maxVertexUniformVectors": 1024, | ||
| "maxVaryingVectors": 30, | ||
| "aliasedLineWidthRange": [ | ||
| 1, | ||
| 1 | ||
| ], | ||
| "aliasedPointSizeRange": [ | ||
| 1, | ||
| 511 | ||
| ], | ||
| "maxAnisotropy": 16, | ||
| "precisionFormats": { | ||
| "vertex_lowFloat": { | ||
| "rangeMin": 127, | ||
| "rangeMax": 127, | ||
| "precision": 23 | ||
| }, | ||
| "vertex_medFloat": { | ||
| "rangeMin": 127, | ||
| "rangeMax": 127, | ||
| "precision": 23 | ||
| }, | ||
| "vertex_highFloat": { | ||
| "rangeMin": 127, | ||
| "rangeMax": 127, | ||
| "precision": 23 | ||
| }, | ||
| "vertex_lowInt": { | ||
| "rangeMin": 31, | ||
| "rangeMax": 30, | ||
| "precision": 0 | ||
| }, | ||
| "vertex_medInt": { | ||
| "rangeMin": 31, | ||
| "rangeMax": 30, | ||
| "precision": 0 | ||
| }, | ||
| "vertex_highInt": { | ||
| "rangeMin": 31, | ||
| "rangeMax": 30, | ||
| "precision": 0 | ||
| }, | ||
| "fragment_lowFloat": { | ||
| "rangeMin": 127, | ||
| "rangeMax": 127, | ||
| "precision": 23 | ||
| }, | ||
| "fragment_medFloat": { | ||
| "rangeMin": 127, | ||
| "rangeMax": 127, | ||
| "precision": 23 | ||
| }, | ||
| "fragment_highFloat": { | ||
| "rangeMin": 127, | ||
| "rangeMax": 127, | ||
| "precision": 23 | ||
| }, | ||
| "fragment_lowInt": { | ||
| "rangeMin": 31, | ||
| "rangeMax": 30, | ||
| "precision": 0 | ||
| }, | ||
| "fragment_medInt": { | ||
| "rangeMin": 31, | ||
| "rangeMax": 30, | ||
| "precision": 0 | ||
| }, | ||
| "fragment_highInt": { | ||
| "rangeMin": 31, | ||
| "rangeMax": 30, | ||
| "precision": 0 | ||
| } | ||
| } | ||
| }, | ||
| "canvas": { | ||
| "consistent": true, | ||
| "hash": "CC4CD2B7", | ||
| "dataUrlLength": 25854, | ||
| "dataUrlPrefix": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwA", | ||
| "webpSupport": true, | ||
| "jpegHighLength": 26851, | ||
| "jpegLowLength": 2347 | ||
| }, | ||
| "screen": { | ||
| "width": 1728, | ||
| "height": 1117, | ||
| "availWidth": 1728, | ||
| "availHeight": 1083, | ||
| "colorDepth": 30, | ||
| "pixelDepth": 30, | ||
| "innerWidth": 1694, | ||
| "innerHeight": 950, | ||
| "outerWidth": 1694, | ||
| "outerHeight": 1083, | ||
| "screenX": 4, | ||
| "screenY": 34, | ||
| "pageXOffset": 0, | ||
| "pageYOffset": 0, | ||
| "devicePixelRatio": 2, | ||
| "orientation": { | ||
| "type": "landscape-primary", | ||
| "angle": 0 | ||
| }, | ||
| "mediaQueries": { | ||
| "prefers-color-scheme": "dark", | ||
| "prefers-reduced-motion": "reduce", | ||
| "prefers-contrast": "no-preference", | ||
| "forced-colors": "none", | ||
| "prefers-reduced-transparency": "reduce", | ||
| "color-gamut": "srgb", | ||
| "pointer": "fine", | ||
| "hover": "hover", | ||
| "any-pointer": "fine", | ||
| "any-hover": "hover", | ||
| "display-mode": "browser", | ||
| "dynamic-range": "standard", | ||
| "update": "fast", | ||
| "overflow-block": "scroll", | ||
| "overflow-inline": "scroll", | ||
| "min-resolution": "192dpi", | ||
| "min-color": "8", | ||
| "monochrome": false | ||
| }, | ||
| "visualViewport": { | ||
| "width": 1694, | ||
| "height": 950, | ||
| "offsetLeft": 0, | ||
| "offsetTop": 0, | ||
| "pageLeft": 0, | ||
| "pageTop": 0, | ||
| "scale": 1 | ||
| } | ||
| }, | ||
| "navigator": { | ||
| "secureContext": true, | ||
| "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36", | ||
| "platform": "MacIntel", | ||
| "vendor": "Google Inc.", | ||
| "vendorSub": "", | ||
| "product": "Gecko", | ||
| "productSub": "20030107", | ||
| "appVersion": "5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36", | ||
| "appName": "Netscape", | ||
| "appCodeName": "Mozilla", | ||
| "language": "en-US", | ||
| "languages": [ | ||
| "en-US", | ||
| "en" | ||
| ], | ||
| "cookieEnabled": true, | ||
| "doNotTrack": null, | ||
| "maxTouchPoints": 0, | ||
| "hardwareConcurrency": 14, | ||
| "deviceMemory": 8, | ||
| "pdfViewerEnabled": true, | ||
| "webdriver": false, | ||
| "plugins": [ | ||
| { | ||
| "name": "PDF Viewer", | ||
| "filename": "internal-pdf-viewer", | ||
| "description": "Portable Document Format" | ||
| }, | ||
| { | ||
| "name": "Chrome PDF Viewer", | ||
| "filename": "internal-pdf-viewer", | ||
| "description": "Portable Document Format" | ||
| }, | ||
| { | ||
| "name": "Chromium PDF Viewer", | ||
| "filename": "internal-pdf-viewer", | ||
| "description": "Portable Document Format" | ||
| }, | ||
| { | ||
| "name": "Microsoft Edge PDF Viewer", | ||
| "filename": "internal-pdf-viewer", | ||
| "description": "Portable Document Format" | ||
| }, | ||
| { | ||
| "name": "WebKit built-in PDF", | ||
| "filename": "internal-pdf-viewer", | ||
| "description": "Portable Document Format" | ||
| } | ||
| ], | ||
| "pluginCount": 5, | ||
| "mimeTypes": [ | ||
| "application/pdf", | ||
| "text/pdf" | ||
| ], | ||
| "userAgentData": { | ||
| "brands": [ | ||
| { | ||
| "brand": "Chromium", | ||
| "version": "146" | ||
| }, | ||
| { | ||
| "brand": "Not-A.Brand", | ||
| "version": "24" | ||
| }, | ||
| { | ||
| "brand": "Brave", | ||
| "version": "146" | ||
| } | ||
| ], | ||
| "mobile": false, | ||
| "platform": "macOS" | ||
| }, | ||
| "userAgentDataHighEntropy": { | ||
| "architecture": "arm", | ||
| "bitness": "64", | ||
| "brands": [ | ||
| { | ||
| "brand": "Chromium", | ||
| "version": "146" | ||
| }, | ||
| { | ||
| "brand": "Not-A.Brand", | ||
| "version": "24" | ||
| }, | ||
| { | ||
| "brand": "Brave", | ||
| "version": "146" | ||
| } | ||
| ], | ||
| "fullVersionList": [ | ||
| { | ||
| "brand": "Chromium", | ||
| "version": "146.0.0.0" | ||
| }, | ||
| { | ||
| "brand": "Not-A.Brand", | ||
| "version": "24.0.0.0" | ||
| }, | ||
| { | ||
| "brand": "Brave", | ||
| "version": "146.0.0.0" | ||
| } | ||
| ], | ||
| "mobile": false, | ||
| "model": "", | ||
| "platform": "macOS", | ||
| "platformVersion": "26.4.0", | ||
| "wow64": false | ||
| }, | ||
| "permissions": { | ||
| "geolocation": "prompt", | ||
| "notifications": "prompt", | ||
| "camera": "prompt", | ||
| "microphone": "prompt", | ||
| "accelerometer": "granted", | ||
| "gyroscope": "granted", | ||
| "magnetometer": "granted", | ||
| "clipboard-read": "prompt", | ||
| "clipboard-write": "granted" | ||
| }, | ||
| "storageEstimate": { | ||
| "quota": 2147483648, | ||
| "usage": 0 | ||
| }, | ||
| "bluetooth": true, | ||
| "usb": true, | ||
| "serial": true, | ||
| "hid": true, | ||
| "xr": true, | ||
| "gpu": true, | ||
| "ink": true, | ||
| "scheduling": true, | ||
| "windowControlsOverlay": true, | ||
| "virtualKeyboard": true | ||
| }, | ||
| "__meta": { | ||
| "capturedAt": "2026-05-08T20:06:53.637Z", | ||
| "elapsedMs": 0, | ||
| "href": "http://wrkx.app/api/visitors/d7cfcbec56ed7cbb166c33440ed9cc78", | ||
| "readyState": "complete" | ||
| } | ||
| } |
| { | ||
| "version": "1", | ||
| "profile": "mac-brave-stable", | ||
| "paths": [ | ||
| { | ||
| "path": "audio.**", | ||
| "comment": "Audio fingerprint bytes (sampleValues, audioHash) require precomputed per-(profile, sample-rate) byte tables — task 0071. docs/limits.md \"Audio fingerprinting (OfflineAudioContext) is NOT spoofed at v0.3\" carried over to v0.7 phase split." | ||
| }, | ||
| { | ||
| "path": "canvas.**", | ||
| "comment": "Canvas hash + dataUrl spoofing requires precomputed hash maps for the standard probe payloads + per-pixel noise injection — task 0071. docs/limits.md \"Canvas fingerprinting (HTMLCanvasElement.toDataURL) is NOT spoofed at v0.3\" carried over to v0.7 phase split." | ||
| }, | ||
| { | ||
| "path": "speech.**", | ||
| "comment": "speechSynthesis.getVoices() returns the host's installed system voices on real Chrome (typically 200+ entries on macOS, 20+ on Linux/Win). Chromium-for-Testing ships with no voice tables, so mochi spoofs voices=[]. Restoring real-device voice lists is a phase 0.7 deliverable (precomputed voice tables per-OS) tracked alongside audio/canvas. PLAN.md §13.6." | ||
| }, | ||
| { | ||
| "path": "navigator.userAgentData.brands", | ||
| "comment": "Brand-list length varies (Linux Chrome emits 2 brands, macOS/Win emit 3). Same root cause as the per-entry comment below." | ||
| }, | ||
| { | ||
| "path": "navigator.userAgentData.brands[*]", | ||
| "comment": "Per-entry full-object mismatch when length differs." | ||
| }, | ||
| { | ||
| "path": "navigator.userAgentData.brands[*].**", | ||
| "comment": "Sec-CH-UA brand-list ordering and GREASE label vary between Chrome/Edge majors and even between Chrome point releases (e.g. 146 emits `Not-A.Brand;v=24` while 147 emits `Not.A/Brand;v=8`). mochi pins a single GREASE label per major (consistency/rules/lookups/browser.ts) for determinism — see tasks/0051-consistency-stack-fixes.md (Group B). Per-major GREASE shuffle is a phase 0.7 deliverable." | ||
| }, | ||
| { | ||
| "path": "navigator.userAgentDataHighEntropy.brands", | ||
| "comment": "Same as userAgentData.brands." | ||
| }, | ||
| { | ||
| "path": "navigator.userAgentDataHighEntropy.brands[*]", | ||
| "comment": "Per-entry full-object mismatch when length differs." | ||
| }, | ||
| { | ||
| "path": "navigator.userAgentDataHighEntropy.brands[*].**", | ||
| "comment": "Same as navigator.userAgentData.brands — pinned for determinism." | ||
| }, | ||
| { | ||
| "path": "navigator.userAgentDataHighEntropy.fullVersionList", | ||
| "comment": "Same as userAgentData.brands — length varies by OS." | ||
| }, | ||
| { | ||
| "path": "navigator.userAgentDataHighEntropy.fullVersionList[*]", | ||
| "comment": "Per-entry full-object mismatch when length differs." | ||
| }, | ||
| { | ||
| "path": "navigator.userAgentDataHighEntropy.fullVersionList[*].**", | ||
| "comment": "Patch-level Chrome version (e.g. 146.0.7680.165) varies with the local Chrome install vs the BROWSER_TIP_FULL_VERSION table. mochi uses the table tip when the major matches; harvested values may differ by a few patch numbers. Refresh the table per Chrome major." | ||
| }, | ||
| { | ||
| "path": "navigator.userAgent", | ||
| "comment": "Full UA string includes the patch version (see fullVersionList comment). Spoofed value matches BROWSER_TIP_FULL_VERSION; harvested value reflects the user's exact Chrome point release." | ||
| }, | ||
| { | ||
| "path": "navigator.appVersion", | ||
| "comment": "Same patch-version drift as navigator.userAgent." | ||
| }, | ||
| { | ||
| "path": "screen.mediaQueries.**", | ||
| "comment": "matchMedia() result strings depend on the host's actual OS/display state (min-resolution from real DPR, prefers-color-scheme from Dark Mode, etc.). mochi spoofs a deterministic baseline; the harvested values reflect the user's session at capture time. Per-profile media-query lock is phase 0.7." | ||
| }, | ||
| { | ||
| "path": "screen.pageXOffset", | ||
| "comment": "Window-frame chrome. Sentinelized by normalize.ts in most paths but the raw harvested value may differ from the harness window's idle offset." | ||
| }, | ||
| { | ||
| "path": "screen.pageYOffset", | ||
| "comment": "Window-frame chrome — same as pageXOffset." | ||
| }, | ||
| { | ||
| "path": "timing.dateString", | ||
| "comment": "Date.toString() includes the host's wall-clock time, which differs every run. The probe normalises to a fixed 2024-01-01 anchor; harvested values reflect the user's actual capture time." | ||
| }, | ||
| { | ||
| "path": "timing.performanceTiming", | ||
| "comment": "performance.timing.* fields vary per session (load durations, redirect counts). normalize.ts sentinelizes the bot.navigationTiming sub-block; the timing.performanceTiming block is harvester-specific and not currently sentinelized." | ||
| }, | ||
| { | ||
| "path": "timing.supportedNumberingSystems[*]", | ||
| "comment": "Intl.supportedValuesOf('numberingSystem') grows between V8 majors (e.g. Chrome 149 added 'tols'). The harvested list reflects the user's V8; the harness uses Chromium-for-Testing's V8. List drift is expected as BROWSER_TIP_FULL_VERSION advances." | ||
| }, | ||
| { | ||
| "path": "webgl.aliasedLineWidthRange[*]", | ||
| "comment": "WebGL aliasedLineWidthRange/PointSizeRange/maxViewportDims values vary with the GPU driver version on the host. mochi locks GPU vendor/renderer via the matrix; per-driver-version locking is phase 0.7." | ||
| }, | ||
| { | ||
| "path": "webgl.aliasedPointSizeRange[*]", | ||
| "comment": "See webgl.aliasedLineWidthRange." | ||
| }, | ||
| { | ||
| "path": "webgl.maxColorAttachments", | ||
| "comment": "GPU-driver dependent; see webgl.aliasedLineWidthRange." | ||
| }, | ||
| { | ||
| "path": "webgl.maxViewportDims[*]", | ||
| "comment": "GPU-driver dependent; see webgl.aliasedLineWidthRange." | ||
| }, | ||
| { | ||
| "path": "webgpu.features", | ||
| "comment": "Block absent on hosts without a WebGPU adapter." | ||
| }, | ||
| { | ||
| "path": "webgpu.features[*]", | ||
| "comment": "WebGPU feature list grows between Chromium majors. The harvested list reflects the user's Chrome version; the harness uses Chromium-for-Testing." | ||
| }, | ||
| { | ||
| "path": "webgpu.info", | ||
| "comment": "Block absent on hosts without a WebGPU adapter." | ||
| }, | ||
| { | ||
| "path": "webgpu.limits.**", | ||
| "comment": "WebGPU adapter limits depend on the GPU driver. Per-driver locking is phase 0.7 alongside WebGL." | ||
| }, | ||
| { | ||
| "path": "bot.chromeRuntime", | ||
| "comment": "Real Chrome exposes window.chrome.runtime; Chromium-for-Testing does not. Restoring chrome.runtime polyfill is task 0140 (stealth conformance) — tracked separately." | ||
| }, | ||
| { | ||
| "path": "storage.cookieCount", | ||
| "comment": "Cookie state varies per session — the harvester's user had cookies, the harness session is fresh." | ||
| }, | ||
| { | ||
| "path": "storage.cookiesWritable", | ||
| "comment": "Depends on the document context (file:// fixture vs http:// origin). Harvester captured at http(s) origin; harness uses file:// fixture." | ||
| }, | ||
| { | ||
| "path": "storage.localStorageKeys", | ||
| "comment": "localStorage state varies per session — fresh harness session has no keys." | ||
| }, | ||
| { | ||
| "path": "mouseEvent", | ||
| "comment": "The probe-page emits a mouseEvent block when the relational-lock scaffolding fires. Harvested snapshots predate this probe and so omit it; spoofed sessions emit it. Cosmetic — the lock-result block is the spoof's own diagnostic, not a fingerprint surface." | ||
| }, | ||
| { | ||
| "path": "fonts.**", | ||
| "comment": "The font enumeration probe enumerates whatever the host has installed. Spoofing the per-profile font intersection is a phase 0.7 task (FontFace API stub + per-profile font allowlist). Running e.g. windows-chrome-stable on a Mac host will surface every macOS system font as material — that's a known gap, not a profile defect." | ||
| }, | ||
| { | ||
| "path": "webgl.extensions", | ||
| "comment": "Whole array absent on no-WebGL hosts (see webgl.error)." | ||
| }, | ||
| { | ||
| "path": "webgl.extensions[*]", | ||
| "comment": "WebGL extension list depends on the host GPU + driver. mochi locks GPU vendor/renderer strings but does NOT enumerate-list-spoof extensions per-profile yet. Phase 0.7 deliverable. Cross-host validation surfaces the host's actual extension set." | ||
| }, | ||
| { | ||
| "path": "webgl.precisionFormats", | ||
| "comment": "Block absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "webgl.extensionCount", | ||
| "comment": "See webgl.extensions[*] — count varies with host extensions." | ||
| }, | ||
| { | ||
| "path": "webgl.unmaskedVendor", | ||
| "comment": "Unmasked WebGL vendor/renderer requires GPU spoofing at the ANGLE layer (or a polyfilled WEBGL_debug_renderer_info getter). mochi's getter spoof is host-OS-aware; cross-host tests surface the underlying device." | ||
| }, | ||
| { | ||
| "path": "webgl.unmaskedRenderer", | ||
| "comment": "See webgl.unmaskedVendor." | ||
| }, | ||
| { | ||
| "path": "webgpu.info.**", | ||
| "comment": "WebGPU adapter info comes from the host driver. Cross-host validation shows the host's adapter; same root cause as webgl.unmaskedRenderer." | ||
| }, | ||
| { | ||
| "path": "mediaDevices.devices[*]", | ||
| "comment": "Per-entry full-object mismatch when device-array length differs." | ||
| }, | ||
| { | ||
| "path": "mediaDevices.devices[*].**", | ||
| "comment": "navigator.mediaDevices.enumerateDevices() returns whatever audio/video devices the host has. The harness fixture runs in a fresh permission state so labels are empty (matches baseline) but the device count + kind ratio depends on the host. Per-profile media-devices spoofing is phase 0.7." | ||
| }, | ||
| { | ||
| "path": "mediaDevices.deviceCount", | ||
| "comment": "See mediaDevices.devices[*]." | ||
| }, | ||
| { | ||
| "path": "mediaDevices.audioinput", | ||
| "comment": "See mediaDevices.devices[*]." | ||
| }, | ||
| { | ||
| "path": "mediaDevices.audiooutput", | ||
| "comment": "See mediaDevices.devices[*]." | ||
| }, | ||
| { | ||
| "path": "mediaDevices.videoinput", | ||
| "comment": "See mediaDevices.devices[*]." | ||
| }, | ||
| { | ||
| "path": "navigator.connection.effectiveType", | ||
| "comment": "NetworkInformation.effectiveType reads from the host network stack. downlink/rtt are sentinelized by normalize.ts but effectiveType isn't." | ||
| }, | ||
| { | ||
| "path": "timing.timezoneOffset", | ||
| "comment": "timezoneOffset depends on whether the captured profile's tz observes DST at the harness's wall-clock time vs at capture time. The IANA timezone is spoofed correctly; the offset is a derived value with seasonal drift." | ||
| }, | ||
| { | ||
| "path": "bot.userActivation.**", | ||
| "comment": "navigator.userActivation.hasBeenActive flips to true when the harness drives mouse/keyboard events. The harvested snapshot was captured before any user gesture, so hasBeenActive=false. The spoof doesn't lie about this — it's a true reflection of the harness's interaction sequence." | ||
| }, | ||
| { | ||
| "path": "navigator.deviceMemory", | ||
| "comment": "navigator.deviceMemory is spec-capped at 8 on real Chrome, but some configurations (older Chrome, non-Chromium derivatives) leak the real GiB count. mochi enforces the spec cap deterministically; the harvested value may be higher (16/32/64) and the spoof correctly clamps to 8." | ||
| }, | ||
| { | ||
| "path": "navigator.bluetooth", | ||
| "comment": "navigator.bluetooth presence depends on the host's Web Bluetooth flag. Linux Chrome typically has it disabled by default; mochi exposes it. Per-profile API allowlist is phase 0.7." | ||
| }, | ||
| { | ||
| "path": "storage.fileSystemAccess", | ||
| "comment": "FileSystemAccess API can be hardened off (Brave) or off-by-default (Linux Chrome). mochi exposes the API by default. Per-profile feature gating is phase 0.7." | ||
| }, | ||
| { | ||
| "path": "storage.sessionStorageKeys", | ||
| "comment": "The probe page writes one sessionStorage key during its self-test; harvested baselines that ran before that probe instrumentation report 0. New captures will normalize to 1 once re-imported." | ||
| }, | ||
| { | ||
| "path": "timing.timerPrecision", | ||
| "comment": "Brave coarsens performance.now() precision; harvested Brave snapshots report null. mochi does NOT coarsen — restoring Brave's precision-coarsen behavior is a phase 0.7 deliverable." | ||
| }, | ||
| { | ||
| "path": "navigator.userAgentDataHighEntropy.platformVersion", | ||
| "comment": "platformVersion is empty on Linux Chrome (X11 has no notion of OS marketing version). The spoof emits a synthesised value; on Linux imports we accept the empty-string baseline as the source of truth." | ||
| }, | ||
| { | ||
| "path": "navigator.connection", | ||
| "comment": "Brave hardens NetworkInformation and returns an undefined connection block. mochi exposes the API. Per-profile NetworkInformation hardening is a phase 0.7 deliverable." | ||
| }, | ||
| { | ||
| "path": "webgl.error", | ||
| "comment": "Some captured devices (headless Linux, lock-screened Windows) report no WebGL context. mochi always presents a WebGL surface. Per-profile no-WebGL mode is phase 0.7." | ||
| }, | ||
| { | ||
| "path": "webgl.version", | ||
| "comment": "Empty on no-WebGL hosts (see webgl.error)." | ||
| }, | ||
| { | ||
| "path": "webgl.shadingLanguageVersion", | ||
| "comment": "Empty on no-WebGL hosts (see webgl.error)." | ||
| }, | ||
| { | ||
| "path": "webgl.vendor", | ||
| "comment": "Empty on no-WebGL hosts (see webgl.error)." | ||
| }, | ||
| { | ||
| "path": "webgl.renderer", | ||
| "comment": "Empty on no-WebGL hosts (see webgl.error)." | ||
| }, | ||
| { | ||
| "path": "webgl.aliasedLineWidthRange", | ||
| "comment": "Absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "webgl.aliasedPointSizeRange", | ||
| "comment": "Absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "webgl.maxAnisotropy", | ||
| "comment": "Absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "webgl.maxColorAttachments", | ||
| "comment": "Absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "webgl.maxCombinedTextureImageUnits", | ||
| "comment": "Absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "webgl.maxCubeMapTextureSize", | ||
| "comment": "Absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "webgl.maxFragmentUniformVectors", | ||
| "comment": "Absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "webgl.maxRenderbufferSize", | ||
| "comment": "Absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "webgl.maxTextureImageUnits", | ||
| "comment": "Absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "webgl.maxTextureSize", | ||
| "comment": "Absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "webgl.maxVaryingVectors", | ||
| "comment": "Absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "webgl.maxVertexAttribs", | ||
| "comment": "Absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "webgl.maxVertexTextureImageUnits", | ||
| "comment": "Absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "webgl.maxVertexUniformVectors", | ||
| "comment": "Absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "webgl.maxViewportDims", | ||
| "comment": "Absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "webgl.precisionFormats.**", | ||
| "comment": "Absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "mediaDevices.devices", | ||
| "comment": "Device array length varies with the host's installed devices. Per-profile media-devices spoofing is phase 0.7." | ||
| } | ||
| ] | ||
| } |
| { | ||
| "id": "mac-brave-stable", | ||
| "version": "1.0.0", | ||
| "engine": "chromium", | ||
| "browser": { | ||
| "name": "brave", | ||
| "channel": "stable", | ||
| "minVersion": "146", | ||
| "maxVersion": "146" | ||
| }, | ||
| "os": { | ||
| "name": "macos", | ||
| "version": "26.4.0", | ||
| "arch": "arm64" | ||
| }, | ||
| "device": { | ||
| "vendor": "apple", | ||
| "model": "Mac", | ||
| "cpuFamily": "apple-silicon-m4", | ||
| "cores": 14, | ||
| "memoryGB": 16 | ||
| }, | ||
| "display": { | ||
| "width": 1728, | ||
| "height": 1117, | ||
| "dpr": 2, | ||
| "colorDepth": 30, | ||
| "pixelDepth": 30 | ||
| }, | ||
| "gpu": { | ||
| "vendor": "Apple", | ||
| "renderer": "ANGLE Metal Renderer: Apple M4 Max", | ||
| "webglUnmaskedVendor": "Google Inc. (Apple)", | ||
| "webglUnmaskedRenderer": "ANGLE (Apple, ANGLE Metal Renderer: Apple M4 Max, Unspecified Version)", | ||
| "webglMaxTextureSize": 16384, | ||
| "webglMaxColorAttachments": 8, | ||
| "webglExtensions": [ | ||
| "EXT_clip_control", | ||
| "EXT_color_buffer_float", | ||
| "EXT_color_buffer_half_float", | ||
| "EXT_conservative_depth", | ||
| "EXT_depth_clamp", | ||
| "EXT_disjoint_timer_query_webgl2", | ||
| "EXT_float_blend", | ||
| "EXT_polygon_offset_clamp", | ||
| "EXT_render_snorm", | ||
| "EXT_texture_compression_bptc", | ||
| "EXT_texture_compression_rgtc", | ||
| "EXT_texture_filter_anisotropic", | ||
| "EXT_texture_mirror_clamp_to_edge", | ||
| "EXT_texture_norm16", | ||
| "KHR_parallel_shader_compile", | ||
| "NV_shader_noperspective_interpolation", | ||
| "OES_draw_buffers_indexed", | ||
| "OES_sample_variables", | ||
| "OES_shader_multisample_interpolation", | ||
| "OES_texture_float_linear", | ||
| "WEBGL_blend_func_extended", | ||
| "WEBGL_clip_cull_distance", | ||
| "WEBGL_compressed_texture_astc", | ||
| "WEBGL_compressed_texture_etc", | ||
| "WEBGL_compressed_texture_etc1", | ||
| "WEBGL_compressed_texture_pvrtc", | ||
| "WEBGL_compressed_texture_s3tc", | ||
| "WEBGL_compressed_texture_s3tc_srgb", | ||
| "WEBGL_debug_renderer_info", | ||
| "WEBGL_debug_shaders", | ||
| "WEBGL_lose_context", | ||
| "WEBGL_multi_draw", | ||
| "WEBGL_polygon_mode", | ||
| "WEBGL_provoking_vertex", | ||
| "WEBGL_render_shared_exponent", | ||
| "WEBGL_stencil_texturing" | ||
| ] | ||
| }, | ||
| "audio": { | ||
| "contextSampleRate": 48000, | ||
| "audioWorkletLatency": 0.005333333333333333, | ||
| "destinationMaxChannelCount": 2 | ||
| }, | ||
| "fonts": { | ||
| "family": "macos-system-pack", | ||
| "list": [ | ||
| "American Typewriter", | ||
| "Andale Mono", | ||
| "Apple Chancery", | ||
| "Apple Color Emoji", | ||
| "Apple SD Gothic Neo", | ||
| "Arial", | ||
| "Arial Black", | ||
| "Arial Narrow", | ||
| "Avenir", | ||
| "Avenir Next", | ||
| "Baskerville", | ||
| "Big Caslon", | ||
| "Brush Script MT", | ||
| "Chalkboard", | ||
| "Chalkboard SE", | ||
| "Chalkduster", | ||
| "Cochin", | ||
| "Comic Sans MS", | ||
| "Copperplate", | ||
| "Courier", | ||
| "Courier New", | ||
| "Didot", | ||
| "Futura", | ||
| "Geneva", | ||
| "Georgia", | ||
| "Gill Sans", | ||
| "Helvetica", | ||
| "Helvetica Neue", | ||
| "Herculanum", | ||
| "Hiragino Kaku Gothic Pro", | ||
| "Hiragino Mincho Pro", | ||
| "Hiragino Sans", | ||
| "Hoefler Text", | ||
| "Impact", | ||
| "Iowan Old Style", | ||
| "Lucida Grande", | ||
| "Luminari", | ||
| "Marker Felt", | ||
| "Menlo", | ||
| "Microsoft Sans Serif", | ||
| "Monaco", | ||
| "Noteworthy", | ||
| "Optima", | ||
| "PT Sans", | ||
| "Palatino", | ||
| "Papyrus", | ||
| "Phosphate", | ||
| "Rockwell", | ||
| "STIXGeneral", | ||
| "Savoye LET", | ||
| "SignPainter", | ||
| "Skia", | ||
| "Snell Roundhand", | ||
| "Superclarendon", | ||
| "Symbol", | ||
| "System Font", | ||
| "Tahoma", | ||
| "Times New Roman", | ||
| "Trebuchet MS", | ||
| "Verdana", | ||
| "Webdings", | ||
| "Wingdings", | ||
| "Zapfino" | ||
| ] | ||
| }, | ||
| "timezone": "Asia/Bangkok", | ||
| "locale": "en-US", | ||
| "languages": [ | ||
| "en-US", | ||
| "en" | ||
| ], | ||
| "behavior": { | ||
| "hand": "right", | ||
| "tremor": 0.18, | ||
| "wpm": 60, | ||
| "scrollStyle": "smooth" | ||
| }, | ||
| "wreqPreset": "brave_146_macos", | ||
| "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36", | ||
| "uaCh": { | ||
| "sec-ch-ua": "\"Chromium\";v=\"146\", \"Not-A.Brand\";v=\"24\", \"Brave\";v=\"146\"", | ||
| "sec-ch-ua-mobile": "?0", | ||
| "sec-ch-ua-platform": "\"macOS\"", | ||
| "sec-ch-ua-platform-version": "\"26.4.0\"", | ||
| "sec-ch-ua-arch": "\"arm\"", | ||
| "sec-ch-ua-bitness": "\"64\"", | ||
| "sec-ch-ua-model": "\"\"", | ||
| "sec-ch-ua-full-version": "\"146\"", | ||
| "sec-ch-ua-os": "\"macos\"" | ||
| }, | ||
| "entropyBudget": { | ||
| "fixed": [], | ||
| "perSeed": [] | ||
| } | ||
| } |
| # PROVENANCE — mac-brave-stable | ||
| Imported from the wrkx harvester corpus (`http://wrkx.app/api`) by `mochi profiles import`. PLAN.md §12.2 — every profile in `main` must carry verifiable provenance. | ||
| | field | value | | ||
| |---|---| | ||
| | profile id | `mac-brave-stable` | | ||
| | upstream visitor id | `d7cfcbec56ed7cbb166c33440ed9cc78` | | ||
| | upstream URL | `http://wrkx.app/api/visitors/d7cfcbec56ed7cbb166c33440ed9cc78` | | ||
| | visitor egress ip (snapshot) | 49.228.67.131 | | ||
| | browser version | 146 | | ||
| | FingerprintJS suspectScore | 12 | | ||
| | captured at (UTC) | 2026-05-08T20:06:53.637Z | | ||
| | imported at (UTC) | 2026-05-08T20:50:38.368Z | | ||
| | importer | `mochi profiles import` (task 0260) | | ||
| ## Multi-snapshot policy | ||
| When the visitor record contains multiple snapshots for a single category (re-visits over time), the importer keeps the most recent by `created_at`. This matches the spirit of capturing the device's *current* fingerprint rather than a stale earlier one. | ||
| ## TLS preset | ||
| Brave's TLS fingerprint diverges from Chrome's at the cipher-suite level. wreq's preset registry resolves `brave_*` → `UnknownFallbackChrome` (see `packages/net-rs/src/ffi/preset.rs:97`); the resulting client uses Chrome-family TLS. Closest exact match would require a per-Brave-build cipher list — phase 0.7 deliverable. | ||
| ## Hand-corrections | ||
| None at import time. The harvester's `navigator` snapshot is captured by real Chrome (not headless), so the `--headless=new` artifacts that needed manual correction in `mac-m4-chrome-stable` (task 0070) are absent here. | ||
| { | ||
| "timing": { | ||
| "timezone": "Asia/Bangkok", | ||
| "timezoneOffset": -420, | ||
| "locale": "en-US", | ||
| "dateString": "Mon Jan 01 2024 12:00:00 GMT+0700 (Indochina Time)", | ||
| "localeString": "1/1/2024, 12:00:00 PM", | ||
| "localeDateString": "1/1/2024", | ||
| "numberFormat": { | ||
| "locale": "en-US", | ||
| "numberingSystem": "latn", | ||
| "style": "decimal", | ||
| "minimumIntegerDigits": 1, | ||
| "minimumFractionDigits": 0, | ||
| "maximumFractionDigits": 3, | ||
| "useGrouping": "auto", | ||
| "notation": "standard", | ||
| "signDisplay": "auto", | ||
| "roundingIncrement": 1, | ||
| "roundingMode": "halfExpand", | ||
| "roundingPriority": "auto", | ||
| "trailingZeroDisplay": "auto" | ||
| }, | ||
| "dateTimeFormat": { | ||
| "locale": "en-US", | ||
| "calendar": "gregory", | ||
| "numberingSystem": "latn", | ||
| "timeZone": "Asia/Bangkok", | ||
| "year": "numeric", | ||
| "month": "numeric", | ||
| "day": "numeric" | ||
| }, | ||
| "supportedCalendars": [ | ||
| "buddhist", | ||
| "chinese", | ||
| "coptic", | ||
| "dangi", | ||
| "ethioaa", | ||
| "ethiopic", | ||
| "gregory", | ||
| "hebrew", | ||
| "indian", | ||
| "islamic", | ||
| "islamic-civil", | ||
| "islamic-rgsa", | ||
| "islamic-tbla", | ||
| "islamic-umalqura", | ||
| "iso8601", | ||
| "japanese", | ||
| "persian", | ||
| "roc" | ||
| ], | ||
| "supportedCurrencies": 159, | ||
| "supportedNumberingSystems": [ | ||
| "adlm", | ||
| "ahom", | ||
| "arab", | ||
| "arabext", | ||
| "bali", | ||
| "beng", | ||
| "bhks", | ||
| "brah", | ||
| "cakm", | ||
| "cham", | ||
| "deva", | ||
| "diak", | ||
| "fullwide", | ||
| "gara", | ||
| "gong", | ||
| "gonm", | ||
| "gujr", | ||
| "gukh", | ||
| "guru", | ||
| "hanidec", | ||
| "hmng", | ||
| "hmnp", | ||
| "java", | ||
| "kali", | ||
| "kawi", | ||
| "khmr", | ||
| "knda", | ||
| "krai", | ||
| "lana", | ||
| "lanatham", | ||
| "laoo", | ||
| "latn", | ||
| "lepc", | ||
| "limb", | ||
| "mathbold", | ||
| "mathdbl", | ||
| "mathmono", | ||
| "mathsanb", | ||
| "mathsans", | ||
| "mlym", | ||
| "modi", | ||
| "mong", | ||
| "mroo", | ||
| "mtei", | ||
| "mymr", | ||
| "mymrepka", | ||
| "mymrpao", | ||
| "mymrshan", | ||
| "mymrtlng", | ||
| "nagm", | ||
| "newa", | ||
| "nkoo", | ||
| "olck", | ||
| "onao", | ||
| "orya", | ||
| "osma", | ||
| "outlined", | ||
| "rohg", | ||
| "saur", | ||
| "segment", | ||
| "shrd", | ||
| "sind", | ||
| "sinh", | ||
| "sora", | ||
| "sund", | ||
| "sunu", | ||
| "takr", | ||
| "talu", | ||
| "tamldec", | ||
| "telu", | ||
| "thai", | ||
| "tibt", | ||
| "tirh", | ||
| "tnsa", | ||
| "vaii", | ||
| "wara", | ||
| "wcho" | ||
| ], | ||
| "supportedTimeZones": 418, | ||
| "supportedUnits": 45, | ||
| "performanceTiming": { | ||
| "dns": 0, | ||
| "tcp": 0, | ||
| "ttfb": 31, | ||
| "download": 390, | ||
| "domParsing": 258, | ||
| "domComplete": -684, | ||
| "loadEvent": 0, | ||
| "total": 0, | ||
| "protocol": "h2", | ||
| "transferSize": 300, | ||
| "encodedBodySize": 3175, | ||
| "decodedBodySize": 10829 | ||
| }, | ||
| "timerPrecision": null, | ||
| "mathFingerprint": { | ||
| "E": 2.718281828459045, | ||
| "LN2": 0.6931471805599453, | ||
| "LN10": 2.302585092994046, | ||
| "LOG2E": 1.4426950408889634, | ||
| "LOG10E": 0.4342944819032518, | ||
| "PI": 3.141592653589793, | ||
| "SQRT2": 1.4142135623730951, | ||
| "SQRT1_2": 0.7071067811865476, | ||
| "acos": 1.0471975511965979, | ||
| "acosh": 1.3169578969248166, | ||
| "asin": 0.5235987755982989, | ||
| "atan": 0.7853981633974483, | ||
| "atanh": 0.5493061443340548, | ||
| "cbrt": 1.2599210498948732, | ||
| "cosh": 1.5430806348152437, | ||
| "expm1": 1.718281828459045, | ||
| "log1p": 0.4054651081081644, | ||
| "sinh": 1.1752011936438014, | ||
| "tanh": 0.7615941559557649 | ||
| } | ||
| }, | ||
| "bot": { | ||
| "webdriver": false, | ||
| "webdriverType": "normal", | ||
| "headlessChrome": false, | ||
| "automationKeys": [], | ||
| "automationDetected": false, | ||
| "chromeRuntime": true, | ||
| "pluginCount": 5, | ||
| "pluginInconsistency": false, | ||
| "languageInconsistency": false, | ||
| "permissionsApi": true, | ||
| "screenDimensions": "1728x1117", | ||
| "suspiciousDimensions": false, | ||
| "maxTouchPoints": 0, | ||
| "touchEvent": false, | ||
| "touchInconsistency": false, | ||
| "notificationPermission": "default", | ||
| "userActivation": { | ||
| "hasBeenActive": false, | ||
| "isActive": false | ||
| }, | ||
| "navigationTiming": { | ||
| "type": "navigate", | ||
| "redirectCount": 0, | ||
| "domComplete": 0, | ||
| "loadEventEnd": 0, | ||
| "domInteractive": 684 | ||
| }, | ||
| "stackDepthTest": 101 | ||
| }, | ||
| "storage": { | ||
| "localStorage": true, | ||
| "localStorageKeys": 5, | ||
| "sessionStorage": true, | ||
| "sessionStorageKeys": 1, | ||
| "cookiesEnabled": true, | ||
| "cookiesWritable": true, | ||
| "cookieCount": 2, | ||
| "indexedDB": true, | ||
| "cacheStorage": true, | ||
| "serviceWorker": true, | ||
| "storageManager": true, | ||
| "fileSystemAccess": true, | ||
| "sharedArrayBuffer": false, | ||
| "sharedWorker": true, | ||
| "openDatabase": false, | ||
| "broadcastChannel": true, | ||
| "secureContext": true | ||
| }, | ||
| "fonts": { | ||
| "detected": [ | ||
| "Arial", | ||
| "Arial Black", | ||
| "Arial Narrow", | ||
| "Comic Sans MS", | ||
| "Courier New", | ||
| "Georgia", | ||
| "Impact", | ||
| "Microsoft Sans Serif", | ||
| "Tahoma", | ||
| "Times New Roman", | ||
| "Trebuchet MS", | ||
| "Verdana", | ||
| "Webdings", | ||
| "Wingdings", | ||
| "American Typewriter", | ||
| "Andale Mono", | ||
| "Apple Chancery", | ||
| "Apple Color Emoji", | ||
| "Apple SD Gothic Neo", | ||
| "Avenir", | ||
| "Avenir Next", | ||
| "Baskerville", | ||
| "Big Caslon", | ||
| "Brush Script MT", | ||
| "Chalkboard", | ||
| "Chalkboard SE", | ||
| "Chalkduster", | ||
| "Cochin", | ||
| "Copperplate", | ||
| "Courier", | ||
| "Didot", | ||
| "Futura", | ||
| "Geneva", | ||
| "Gill Sans", | ||
| "Helvetica", | ||
| "Helvetica Neue", | ||
| "Herculanum", | ||
| "Hoefler Text", | ||
| "Iowan Old Style", | ||
| "Lucida Grande", | ||
| "Luminari", | ||
| "Marker Felt", | ||
| "Menlo", | ||
| "Monaco", | ||
| "Noteworthy", | ||
| "Optima", | ||
| "Palatino", | ||
| "Papyrus", | ||
| "Phosphate", | ||
| "Rockwell", | ||
| "Savoye LET", | ||
| "SignPainter", | ||
| "Skia", | ||
| "Snell Roundhand", | ||
| "STIXGeneral", | ||
| "Superclarendon", | ||
| "Symbol", | ||
| "System Font", | ||
| "Zapfino", | ||
| "Hiragino Sans", | ||
| "Hiragino Kaku Gothic Pro", | ||
| "Hiragino Mincho Pro", | ||
| "PT Sans" | ||
| ], | ||
| "count": 63, | ||
| "tested": 117, | ||
| "hash": "B8498456", | ||
| "fontsApiReady": true | ||
| }, | ||
| "speech": { | ||
| "voices": [ | ||
| { | ||
| "name": "Samantha", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": true, | ||
| "voiceURI": "Samantha" | ||
| }, | ||
| { | ||
| "name": "Albert", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Albert" | ||
| }, | ||
| { | ||
| "name": "Alice", | ||
| "lang": "it-IT", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Alice" | ||
| }, | ||
| { | ||
| "name": "Alva", | ||
| "lang": "sv-SE", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Alva" | ||
| }, | ||
| { | ||
| "name": "Amélie", | ||
| "lang": "fr-CA", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Amélie" | ||
| }, | ||
| { | ||
| "name": "Amira", | ||
| "lang": "ms-MY", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Amira" | ||
| }, | ||
| { | ||
| "name": "Anna", | ||
| "lang": "de-DE", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Anna" | ||
| }, | ||
| { | ||
| "name": "Bad News", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Bad News" | ||
| }, | ||
| { | ||
| "name": "Bahh", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Bahh" | ||
| }, | ||
| { | ||
| "name": "Bells", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Bells" | ||
| }, | ||
| { | ||
| "name": "Boing", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Boing" | ||
| }, | ||
| { | ||
| "name": "Bubbles", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Bubbles" | ||
| }, | ||
| { | ||
| "name": "Carmit", | ||
| "lang": "he-IL", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Carmit" | ||
| }, | ||
| { | ||
| "name": "Cellos", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Cellos" | ||
| }, | ||
| { | ||
| "name": "Damayanti", | ||
| "lang": "id-ID", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Damayanti" | ||
| }, | ||
| { | ||
| "name": "Daniel", | ||
| "lang": "en-GB", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Daniel" | ||
| }, | ||
| { | ||
| "name": "Daria", | ||
| "lang": "bg-BG", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Daria" | ||
| }, | ||
| { | ||
| "name": "Eddy (English (United States))", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Eddy (English (United States))" | ||
| }, | ||
| { | ||
| "name": "Eddy (English (United Kingdom))", | ||
| "lang": "en-GB", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Eddy (English (United Kingdom))" | ||
| }, | ||
| { | ||
| "name": "Eddy (Chinese (China mainland))", | ||
| "lang": "zh-CN", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Eddy (Chinese (China mainland))" | ||
| }, | ||
| { | ||
| "name": "Eddy (Chinese (Taiwan))", | ||
| "lang": "zh-TW", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Eddy (Chinese (Taiwan))" | ||
| }, | ||
| { | ||
| "name": "Eddy (German (Germany))", | ||
| "lang": "de-DE", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Eddy (German (Germany))" | ||
| }, | ||
| { | ||
| "name": "Eddy (Spanish (Spain))", | ||
| "lang": "es-ES", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Eddy (Spanish (Spain))" | ||
| }, | ||
| { | ||
| "name": "Eddy (Spanish (Mexico))", | ||
| "lang": "es-MX", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Eddy (Spanish (Mexico))" | ||
| }, | ||
| { | ||
| "name": "Eddy (Finnish (Finland))", | ||
| "lang": "fi-FI", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Eddy (Finnish (Finland))" | ||
| }, | ||
| { | ||
| "name": "Eddy (French (Canada))", | ||
| "lang": "fr-CA", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Eddy (French (Canada))" | ||
| }, | ||
| { | ||
| "name": "Eddy (French (France))", | ||
| "lang": "fr-FR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Eddy (French (France))" | ||
| }, | ||
| { | ||
| "name": "Eddy (Italian (Italy))", | ||
| "lang": "it-IT", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Eddy (Italian (Italy))" | ||
| }, | ||
| { | ||
| "name": "Eddy (Japanese (Japan))", | ||
| "lang": "ja-JP", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Eddy (Japanese (Japan))" | ||
| }, | ||
| { | ||
| "name": "Eddy (Korean (South Korea))", | ||
| "lang": "ko-KR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Eddy (Korean (South Korea))" | ||
| }, | ||
| { | ||
| "name": "Eddy (Portuguese (Brazil))", | ||
| "lang": "pt-BR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Eddy (Portuguese (Brazil))" | ||
| }, | ||
| { | ||
| "name": "Ellen", | ||
| "lang": "nl-BE", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Ellen" | ||
| }, | ||
| { | ||
| "name": "Flo (English (United States))", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Flo (English (United States))" | ||
| }, | ||
| { | ||
| "name": "Flo (English (United Kingdom))", | ||
| "lang": "en-GB", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Flo (English (United Kingdom))" | ||
| }, | ||
| { | ||
| "name": "Flo (Chinese (China mainland))", | ||
| "lang": "zh-CN", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Flo (Chinese (China mainland))" | ||
| }, | ||
| { | ||
| "name": "Flo (Chinese (Taiwan))", | ||
| "lang": "zh-TW", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Flo (Chinese (Taiwan))" | ||
| }, | ||
| { | ||
| "name": "Flo (German (Germany))", | ||
| "lang": "de-DE", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Flo (German (Germany))" | ||
| }, | ||
| { | ||
| "name": "Flo (Spanish (Spain))", | ||
| "lang": "es-ES", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Flo (Spanish (Spain))" | ||
| }, | ||
| { | ||
| "name": "Flo (Spanish (Mexico))", | ||
| "lang": "es-MX", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Flo (Spanish (Mexico))" | ||
| }, | ||
| { | ||
| "name": "Flo (Finnish (Finland))", | ||
| "lang": "fi-FI", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Flo (Finnish (Finland))" | ||
| }, | ||
| { | ||
| "name": "Flo (French (Canada))", | ||
| "lang": "fr-CA", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Flo (French (Canada))" | ||
| }, | ||
| { | ||
| "name": "Flo (French (France))", | ||
| "lang": "fr-FR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Flo (French (France))" | ||
| }, | ||
| { | ||
| "name": "Flo (Italian (Italy))", | ||
| "lang": "it-IT", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Flo (Italian (Italy))" | ||
| }, | ||
| { | ||
| "name": "Flo (Japanese (Japan))", | ||
| "lang": "ja-JP", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Flo (Japanese (Japan))" | ||
| }, | ||
| { | ||
| "name": "Flo (Korean (South Korea))", | ||
| "lang": "ko-KR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Flo (Korean (South Korea))" | ||
| }, | ||
| { | ||
| "name": "Flo (Portuguese (Brazil))", | ||
| "lang": "pt-BR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Flo (Portuguese (Brazil))" | ||
| }, | ||
| { | ||
| "name": "Fred", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Fred" | ||
| }, | ||
| { | ||
| "name": "Geeta", | ||
| "lang": "te-IN", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Geeta" | ||
| }, | ||
| { | ||
| "name": "Good News", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Good News" | ||
| }, | ||
| { | ||
| "name": "Grandma (English (United States))", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandma (English (United States))" | ||
| }, | ||
| { | ||
| "name": "Grandma (English (United Kingdom))", | ||
| "lang": "en-GB", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandma (English (United Kingdom))" | ||
| }, | ||
| { | ||
| "name": "Grandma (Chinese (China mainland))", | ||
| "lang": "zh-CN", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandma (Chinese (China mainland))" | ||
| }, | ||
| { | ||
| "name": "Grandma (Chinese (Taiwan))", | ||
| "lang": "zh-TW", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandma (Chinese (Taiwan))" | ||
| }, | ||
| { | ||
| "name": "Grandma (German (Germany))", | ||
| "lang": "de-DE", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandma (German (Germany))" | ||
| }, | ||
| { | ||
| "name": "Grandma (Spanish (Spain))", | ||
| "lang": "es-ES", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandma (Spanish (Spain))" | ||
| }, | ||
| { | ||
| "name": "Grandma (Spanish (Mexico))", | ||
| "lang": "es-MX", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandma (Spanish (Mexico))" | ||
| }, | ||
| { | ||
| "name": "Grandma (Finnish (Finland))", | ||
| "lang": "fi-FI", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandma (Finnish (Finland))" | ||
| }, | ||
| { | ||
| "name": "Grandma (French (Canada))", | ||
| "lang": "fr-CA", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandma (French (Canada))" | ||
| }, | ||
| { | ||
| "name": "Grandma (French (France))", | ||
| "lang": "fr-FR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandma (French (France))" | ||
| }, | ||
| { | ||
| "name": "Grandma (Italian (Italy))", | ||
| "lang": "it-IT", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandma (Italian (Italy))" | ||
| }, | ||
| { | ||
| "name": "Grandma (Japanese (Japan))", | ||
| "lang": "ja-JP", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandma (Japanese (Japan))" | ||
| }, | ||
| { | ||
| "name": "Grandma (Korean (South Korea))", | ||
| "lang": "ko-KR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandma (Korean (South Korea))" | ||
| }, | ||
| { | ||
| "name": "Grandma (Portuguese (Brazil))", | ||
| "lang": "pt-BR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandma (Portuguese (Brazil))" | ||
| }, | ||
| { | ||
| "name": "Grandpa (English (United States))", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandpa (English (United States))" | ||
| }, | ||
| { | ||
| "name": "Grandpa (English (United Kingdom))", | ||
| "lang": "en-GB", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandpa (English (United Kingdom))" | ||
| }, | ||
| { | ||
| "name": "Grandpa (Chinese (China mainland))", | ||
| "lang": "zh-CN", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandpa (Chinese (China mainland))" | ||
| }, | ||
| { | ||
| "name": "Grandpa (Chinese (Taiwan))", | ||
| "lang": "zh-TW", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandpa (Chinese (Taiwan))" | ||
| }, | ||
| { | ||
| "name": "Grandpa (German (Germany))", | ||
| "lang": "de-DE", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandpa (German (Germany))" | ||
| }, | ||
| { | ||
| "name": "Grandpa (Spanish (Spain))", | ||
| "lang": "es-ES", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandpa (Spanish (Spain))" | ||
| }, | ||
| { | ||
| "name": "Grandpa (Spanish (Mexico))", | ||
| "lang": "es-MX", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandpa (Spanish (Mexico))" | ||
| }, | ||
| { | ||
| "name": "Grandpa (Finnish (Finland))", | ||
| "lang": "fi-FI", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandpa (Finnish (Finland))" | ||
| }, | ||
| { | ||
| "name": "Grandpa (French (Canada))", | ||
| "lang": "fr-CA", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandpa (French (Canada))" | ||
| }, | ||
| { | ||
| "name": "Grandpa (French (France))", | ||
| "lang": "fr-FR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandpa (French (France))" | ||
| }, | ||
| { | ||
| "name": "Grandpa (Italian (Italy))", | ||
| "lang": "it-IT", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandpa (Italian (Italy))" | ||
| }, | ||
| { | ||
| "name": "Grandpa (Japanese (Japan))", | ||
| "lang": "ja-JP", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandpa (Japanese (Japan))" | ||
| }, | ||
| { | ||
| "name": "Grandpa (Korean (South Korea))", | ||
| "lang": "ko-KR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandpa (Korean (South Korea))" | ||
| }, | ||
| { | ||
| "name": "Grandpa (Portuguese (Brazil))", | ||
| "lang": "pt-BR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandpa (Portuguese (Brazil))" | ||
| }, | ||
| { | ||
| "name": "Ioana", | ||
| "lang": "ro-RO", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Ioana" | ||
| }, | ||
| { | ||
| "name": "Jacques", | ||
| "lang": "fr-FR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Jacques" | ||
| }, | ||
| { | ||
| "name": "Jester", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Jester" | ||
| }, | ||
| { | ||
| "name": "Joana", | ||
| "lang": "pt-PT", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Joana" | ||
| }, | ||
| { | ||
| "name": "Junior", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Junior" | ||
| }, | ||
| { | ||
| "name": "Kanya", | ||
| "lang": "th-TH", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Kanya" | ||
| }, | ||
| { | ||
| "name": "Karen", | ||
| "lang": "en-AU", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Karen" | ||
| }, | ||
| { | ||
| "name": "Kathy", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Kathy" | ||
| }, | ||
| { | ||
| "name": "Kyoko", | ||
| "lang": "ja-JP", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Kyoko" | ||
| }, | ||
| { | ||
| "name": "Lana", | ||
| "lang": "hr-HR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Lana" | ||
| }, | ||
| { | ||
| "name": "Laura", | ||
| "lang": "sk-SK", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Laura" | ||
| }, | ||
| { | ||
| "name": "Lekha", | ||
| "lang": "hi-IN", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Lekha" | ||
| }, | ||
| { | ||
| "name": "Lesya", | ||
| "lang": "uk-UA", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Lesya" | ||
| }, | ||
| { | ||
| "name": "Linh", | ||
| "lang": "vi-VN", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Linh" | ||
| }, | ||
| { | ||
| "name": "Luciana", | ||
| "lang": "pt-BR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Luciana" | ||
| }, | ||
| { | ||
| "name": "Majed", | ||
| "lang": "ar-001", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Majed" | ||
| }, | ||
| { | ||
| "name": "Meijia", | ||
| "lang": "zh-TW", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Meijia" | ||
| }, | ||
| { | ||
| "name": "Melina", | ||
| "lang": "el-GR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Melina" | ||
| }, | ||
| { | ||
| "name": "Milena", | ||
| "lang": "ru-RU", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Milena" | ||
| }, | ||
| { | ||
| "name": "Moira", | ||
| "lang": "en-IE", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Moira" | ||
| }, | ||
| { | ||
| "name": "Montse", | ||
| "lang": "ca-ES", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Montse" | ||
| }, | ||
| { | ||
| "name": "Mónica", | ||
| "lang": "es-ES", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Mónica" | ||
| }, | ||
| { | ||
| "name": "Nora", | ||
| "lang": "nb-NO", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Nora" | ||
| }, | ||
| { | ||
| "name": "Organ", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Organ" | ||
| }, | ||
| { | ||
| "name": "Paulina", | ||
| "lang": "es-MX", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Paulina" | ||
| }, | ||
| { | ||
| "name": "Piya", | ||
| "lang": "bn-IN", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Piya" | ||
| }, | ||
| { | ||
| "name": "Ralph", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Ralph" | ||
| }, | ||
| { | ||
| "name": "Reed (English (United States))", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Reed (English (United States))" | ||
| }, | ||
| { | ||
| "name": "Reed (English (United Kingdom))", | ||
| "lang": "en-GB", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Reed (English (United Kingdom))" | ||
| }, | ||
| { | ||
| "name": "Reed (Chinese (China mainland))", | ||
| "lang": "zh-CN", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Reed (Chinese (China mainland))" | ||
| }, | ||
| { | ||
| "name": "Reed (Chinese (Taiwan))", | ||
| "lang": "zh-TW", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Reed (Chinese (Taiwan))" | ||
| }, | ||
| { | ||
| "name": "Reed (German (Germany))", | ||
| "lang": "de-DE", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Reed (German (Germany))" | ||
| }, | ||
| { | ||
| "name": "Reed (Spanish (Spain))", | ||
| "lang": "es-ES", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Reed (Spanish (Spain))" | ||
| }, | ||
| { | ||
| "name": "Reed (Spanish (Mexico))", | ||
| "lang": "es-MX", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Reed (Spanish (Mexico))" | ||
| }, | ||
| { | ||
| "name": "Reed (Finnish (Finland))", | ||
| "lang": "fi-FI", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Reed (Finnish (Finland))" | ||
| }, | ||
| { | ||
| "name": "Reed (French (Canada))", | ||
| "lang": "fr-CA", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Reed (French (Canada))" | ||
| }, | ||
| { | ||
| "name": "Reed (Italian (Italy))", | ||
| "lang": "it-IT", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Reed (Italian (Italy))" | ||
| }, | ||
| { | ||
| "name": "Reed (Japanese (Japan))", | ||
| "lang": "ja-JP", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Reed (Japanese (Japan))" | ||
| }, | ||
| { | ||
| "name": "Reed (Korean (South Korea))", | ||
| "lang": "ko-KR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Reed (Korean (South Korea))" | ||
| }, | ||
| { | ||
| "name": "Reed (Portuguese (Brazil))", | ||
| "lang": "pt-BR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Reed (Portuguese (Brazil))" | ||
| }, | ||
| { | ||
| "name": "Rishi", | ||
| "lang": "en-IN", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Rishi" | ||
| }, | ||
| { | ||
| "name": "Rocko (English (United States))", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Rocko (English (United States))" | ||
| }, | ||
| { | ||
| "name": "Rocko (English (United Kingdom))", | ||
| "lang": "en-GB", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Rocko (English (United Kingdom))" | ||
| }, | ||
| { | ||
| "name": "Rocko (Chinese (China mainland))", | ||
| "lang": "zh-CN", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Rocko (Chinese (China mainland))" | ||
| }, | ||
| { | ||
| "name": "Rocko (Chinese (Taiwan))", | ||
| "lang": "zh-TW", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Rocko (Chinese (Taiwan))" | ||
| }, | ||
| { | ||
| "name": "Rocko (German (Germany))", | ||
| "lang": "de-DE", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Rocko (German (Germany))" | ||
| }, | ||
| { | ||
| "name": "Rocko (Spanish (Spain))", | ||
| "lang": "es-ES", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Rocko (Spanish (Spain))" | ||
| }, | ||
| { | ||
| "name": "Rocko (Spanish (Mexico))", | ||
| "lang": "es-MX", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Rocko (Spanish (Mexico))" | ||
| }, | ||
| { | ||
| "name": "Rocko (Finnish (Finland))", | ||
| "lang": "fi-FI", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Rocko (Finnish (Finland))" | ||
| }, | ||
| { | ||
| "name": "Rocko (French (Canada))", | ||
| "lang": "fr-CA", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Rocko (French (Canada))" | ||
| }, | ||
| { | ||
| "name": "Rocko (French (France))", | ||
| "lang": "fr-FR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Rocko (French (France))" | ||
| }, | ||
| { | ||
| "name": "Rocko (Italian (Italy))", | ||
| "lang": "it-IT", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Rocko (Italian (Italy))" | ||
| }, | ||
| { | ||
| "name": "Rocko (Japanese (Japan))", | ||
| "lang": "ja-JP", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Rocko (Japanese (Japan))" | ||
| }, | ||
| { | ||
| "name": "Rocko (Korean (South Korea))", | ||
| "lang": "ko-KR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Rocko (Korean (South Korea))" | ||
| }, | ||
| { | ||
| "name": "Rocko (Portuguese (Brazil))", | ||
| "lang": "pt-BR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Rocko (Portuguese (Brazil))" | ||
| }, | ||
| { | ||
| "name": "Sandy (English (United States))", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Sandy (English (United States))" | ||
| }, | ||
| { | ||
| "name": "Sandy (English (United Kingdom))", | ||
| "lang": "en-GB", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Sandy (English (United Kingdom))" | ||
| }, | ||
| { | ||
| "name": "Sandy (Chinese (China mainland))", | ||
| "lang": "zh-CN", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Sandy (Chinese (China mainland))" | ||
| }, | ||
| { | ||
| "name": "Sandy (Chinese (Taiwan))", | ||
| "lang": "zh-TW", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Sandy (Chinese (Taiwan))" | ||
| }, | ||
| { | ||
| "name": "Sandy (German (Germany))", | ||
| "lang": "de-DE", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Sandy (German (Germany))" | ||
| }, | ||
| { | ||
| "name": "Sandy (Spanish (Spain))", | ||
| "lang": "es-ES", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Sandy (Spanish (Spain))" | ||
| }, | ||
| { | ||
| "name": "Sandy (Spanish (Mexico))", | ||
| "lang": "es-MX", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Sandy (Spanish (Mexico))" | ||
| }, | ||
| { | ||
| "name": "Sandy (Finnish (Finland))", | ||
| "lang": "fi-FI", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Sandy (Finnish (Finland))" | ||
| }, | ||
| { | ||
| "name": "Sandy (French (Canada))", | ||
| "lang": "fr-CA", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Sandy (French (Canada))" | ||
| }, | ||
| { | ||
| "name": "Sandy (French (France))", | ||
| "lang": "fr-FR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Sandy (French (France))" | ||
| }, | ||
| { | ||
| "name": "Sandy (Italian (Italy))", | ||
| "lang": "it-IT", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Sandy (Italian (Italy))" | ||
| }, | ||
| { | ||
| "name": "Sandy (Japanese (Japan))", | ||
| "lang": "ja-JP", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Sandy (Japanese (Japan))" | ||
| }, | ||
| { | ||
| "name": "Sandy (Korean (South Korea))", | ||
| "lang": "ko-KR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Sandy (Korean (South Korea))" | ||
| }, | ||
| { | ||
| "name": "Sandy (Portuguese (Brazil))", | ||
| "lang": "pt-BR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Sandy (Portuguese (Brazil))" | ||
| }, | ||
| { | ||
| "name": "Sara", | ||
| "lang": "da-DK", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Sara" | ||
| }, | ||
| { | ||
| "name": "Satu", | ||
| "lang": "fi-FI", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Satu" | ||
| }, | ||
| { | ||
| "name": "Shelley (English (United States))", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Shelley (English (United States))" | ||
| }, | ||
| { | ||
| "name": "Shelley (English (United Kingdom))", | ||
| "lang": "en-GB", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Shelley (English (United Kingdom))" | ||
| }, | ||
| { | ||
| "name": "Shelley (Chinese (China mainland))", | ||
| "lang": "zh-CN", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Shelley (Chinese (China mainland))" | ||
| }, | ||
| { | ||
| "name": "Shelley (Chinese (Taiwan))", | ||
| "lang": "zh-TW", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Shelley (Chinese (Taiwan))" | ||
| }, | ||
| { | ||
| "name": "Shelley (German (Germany))", | ||
| "lang": "de-DE", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Shelley (German (Germany))" | ||
| }, | ||
| { | ||
| "name": "Shelley (Spanish (Spain))", | ||
| "lang": "es-ES", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Shelley (Spanish (Spain))" | ||
| }, | ||
| { | ||
| "name": "Shelley (Spanish (Mexico))", | ||
| "lang": "es-MX", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Shelley (Spanish (Mexico))" | ||
| }, | ||
| { | ||
| "name": "Shelley (Finnish (Finland))", | ||
| "lang": "fi-FI", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Shelley (Finnish (Finland))" | ||
| }, | ||
| { | ||
| "name": "Shelley (French (Canada))", | ||
| "lang": "fr-CA", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Shelley (French (Canada))" | ||
| }, | ||
| { | ||
| "name": "Shelley (French (France))", | ||
| "lang": "fr-FR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Shelley (French (France))" | ||
| }, | ||
| { | ||
| "name": "Shelley (Italian (Italy))", | ||
| "lang": "it-IT", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Shelley (Italian (Italy))" | ||
| }, | ||
| { | ||
| "name": "Shelley (Japanese (Japan))", | ||
| "lang": "ja-JP", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Shelley (Japanese (Japan))" | ||
| }, | ||
| { | ||
| "name": "Shelley (Korean (South Korea))", | ||
| "lang": "ko-KR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Shelley (Korean (South Korea))" | ||
| }, | ||
| { | ||
| "name": "Shelley (Portuguese (Brazil))", | ||
| "lang": "pt-BR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Shelley (Portuguese (Brazil))" | ||
| }, | ||
| { | ||
| "name": "Sinji", | ||
| "lang": "yue-HK", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Sinji" | ||
| }, | ||
| { | ||
| "name": "Soumya", | ||
| "lang": "kn-IN", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Soumya" | ||
| }, | ||
| { | ||
| "name": "Superstar", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Superstar" | ||
| }, | ||
| { | ||
| "name": "Tessa", | ||
| "lang": "en-ZA", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Tessa" | ||
| }, | ||
| { | ||
| "name": "Thomas", | ||
| "lang": "fr-FR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Thomas" | ||
| }, | ||
| { | ||
| "name": "Tina", | ||
| "lang": "sl-SI", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Tina" | ||
| }, | ||
| { | ||
| "name": "Tingting", | ||
| "lang": "zh-CN", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Tingting" | ||
| }, | ||
| { | ||
| "name": "Trinoids", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Trinoids" | ||
| }, | ||
| { | ||
| "name": "Tünde", | ||
| "lang": "hu-HU", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Tünde" | ||
| }, | ||
| { | ||
| "name": "Vani", | ||
| "lang": "ta-IN", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Vani" | ||
| }, | ||
| { | ||
| "name": "Whisper", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Whisper" | ||
| }, | ||
| { | ||
| "name": "Wobble", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Wobble" | ||
| }, | ||
| { | ||
| "name": "Xander", | ||
| "lang": "nl-NL", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Xander" | ||
| }, | ||
| { | ||
| "name": "Yelda", | ||
| "lang": "tr-TR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Yelda" | ||
| }, | ||
| { | ||
| "name": "Yuna", | ||
| "lang": "ko-KR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Yuna" | ||
| }, | ||
| { | ||
| "name": "Zarvox", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Zarvox" | ||
| }, | ||
| { | ||
| "name": "Zosia", | ||
| "lang": "pl-PL", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Zosia" | ||
| }, | ||
| { | ||
| "name": "Zuzana", | ||
| "lang": "cs-CZ", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Zuzana" | ||
| }, | ||
| { | ||
| "name": "Google Deutsch", | ||
| "lang": "de-DE", | ||
| "localService": false, | ||
| "default": false, | ||
| "voiceURI": "Google Deutsch" | ||
| }, | ||
| { | ||
| "name": "Google US English", | ||
| "lang": "en-US", | ||
| "localService": false, | ||
| "default": false, | ||
| "voiceURI": "Google US English" | ||
| }, | ||
| { | ||
| "name": "Google UK English Female", | ||
| "lang": "en-GB", | ||
| "localService": false, | ||
| "default": false, | ||
| "voiceURI": "Google UK English Female" | ||
| }, | ||
| { | ||
| "name": "Google UK English Male", | ||
| "lang": "en-GB", | ||
| "localService": false, | ||
| "default": false, | ||
| "voiceURI": "Google UK English Male" | ||
| }, | ||
| { | ||
| "name": "Google español", | ||
| "lang": "es-ES", | ||
| "localService": false, | ||
| "default": false, | ||
| "voiceURI": "Google español" | ||
| }, | ||
| { | ||
| "name": "Google español de Estados Unidos", | ||
| "lang": "es-US", | ||
| "localService": false, | ||
| "default": false, | ||
| "voiceURI": "Google español de Estados Unidos" | ||
| }, | ||
| { | ||
| "name": "Google français", | ||
| "lang": "fr-FR", | ||
| "localService": false, | ||
| "default": false, | ||
| "voiceURI": "Google français" | ||
| }, | ||
| { | ||
| "name": "Google हिन्दी", | ||
| "lang": "hi-IN", | ||
| "localService": false, | ||
| "default": false, | ||
| "voiceURI": "Google हिन्दी" | ||
| }, | ||
| { | ||
| "name": "Google Bahasa Indonesia", | ||
| "lang": "id-ID", | ||
| "localService": false, | ||
| "default": false, | ||
| "voiceURI": "Google Bahasa Indonesia" | ||
| }, | ||
| { | ||
| "name": "Google italiano", | ||
| "lang": "it-IT", | ||
| "localService": false, | ||
| "default": false, | ||
| "voiceURI": "Google italiano" | ||
| }, | ||
| { | ||
| "name": "Google 日本語", | ||
| "lang": "ja-JP", | ||
| "localService": false, | ||
| "default": false, | ||
| "voiceURI": "Google 日本語" | ||
| }, | ||
| { | ||
| "name": "Google 한국의", | ||
| "lang": "ko-KR", | ||
| "localService": false, | ||
| "default": false, | ||
| "voiceURI": "Google 한국의" | ||
| }, | ||
| { | ||
| "name": "Google Nederlands", | ||
| "lang": "nl-NL", | ||
| "localService": false, | ||
| "default": false, | ||
| "voiceURI": "Google Nederlands" | ||
| }, | ||
| { | ||
| "name": "Google polski", | ||
| "lang": "pl-PL", | ||
| "localService": false, | ||
| "default": false, | ||
| "voiceURI": "Google polski" | ||
| }, | ||
| { | ||
| "name": "Google português do Brasil", | ||
| "lang": "pt-BR", | ||
| "localService": false, | ||
| "default": false, | ||
| "voiceURI": "Google português do Brasil" | ||
| }, | ||
| { | ||
| "name": "Google русский", | ||
| "lang": "ru-RU", | ||
| "localService": false, | ||
| "default": false, | ||
| "voiceURI": "Google русский" | ||
| }, | ||
| { | ||
| "name": "Google 普通话(中国大陆)", | ||
| "lang": "zh-CN", | ||
| "localService": false, | ||
| "default": false, | ||
| "voiceURI": "Google 普通话(中国大陆)" | ||
| }, | ||
| { | ||
| "name": "Google 粤語(香港)", | ||
| "lang": "zh-HK", | ||
| "localService": false, | ||
| "default": false, | ||
| "voiceURI": "Google 粤語(香港)" | ||
| }, | ||
| { | ||
| "name": "Google 國語(臺灣)", | ||
| "lang": "zh-TW", | ||
| "localService": false, | ||
| "default": false, | ||
| "voiceURI": "Google 國語(臺灣)" | ||
| } | ||
| ], | ||
| "voiceCount": 199, | ||
| "localVoices": 180, | ||
| "remoteVoices": 19, | ||
| "languages": [ | ||
| "en-US", | ||
| "it-IT", | ||
| "sv-SE", | ||
| "fr-CA", | ||
| "ms-MY", | ||
| "de-DE", | ||
| "he-IL", | ||
| "id-ID", | ||
| "en-GB", | ||
| "bg-BG", | ||
| "zh-CN", | ||
| "zh-TW", | ||
| "es-ES", | ||
| "es-MX", | ||
| "fi-FI", | ||
| "fr-FR", | ||
| "ja-JP", | ||
| "ko-KR", | ||
| "pt-BR", | ||
| "nl-BE", | ||
| "te-IN", | ||
| "ro-RO", | ||
| "pt-PT", | ||
| "th-TH", | ||
| "en-AU", | ||
| "hr-HR", | ||
| "sk-SK", | ||
| "hi-IN", | ||
| "uk-UA", | ||
| "vi-VN", | ||
| "ar-001", | ||
| "el-GR", | ||
| "ru-RU", | ||
| "en-IE", | ||
| "ca-ES", | ||
| "nb-NO", | ||
| "bn-IN", | ||
| "en-IN", | ||
| "da-DK", | ||
| "yue-HK", | ||
| "kn-IN", | ||
| "en-ZA", | ||
| "sl-SI", | ||
| "hu-HU", | ||
| "ta-IN", | ||
| "nl-NL", | ||
| "tr-TR", | ||
| "pl-PL", | ||
| "cs-CZ", | ||
| "es-US", | ||
| "zh-HK" | ||
| ] | ||
| }, | ||
| "mediaDevices": { | ||
| "devices": [ | ||
| { | ||
| "deviceId": "", | ||
| "kind": "audioinput", | ||
| "label": "", | ||
| "groupId": "" | ||
| }, | ||
| { | ||
| "deviceId": "", | ||
| "kind": "videoinput", | ||
| "label": "", | ||
| "groupId": "" | ||
| }, | ||
| { | ||
| "deviceId": "", | ||
| "kind": "audiooutput", | ||
| "label": "", | ||
| "groupId": "" | ||
| } | ||
| ], | ||
| "deviceCount": 3, | ||
| "audioinput": 1, | ||
| "audiooutput": 1, | ||
| "videoinput": 1, | ||
| "supportedConstraints": { | ||
| "aspectRatio": true, | ||
| "autoGainControl": true, | ||
| "brightness": true, | ||
| "channelCount": true, | ||
| "colorTemperature": true, | ||
| "contrast": true, | ||
| "deviceId": true, | ||
| "displaySurface": true, | ||
| "echoCancellation": true, | ||
| "exposureCompensation": true, | ||
| "exposureMode": true, | ||
| "exposureTime": true, | ||
| "facingMode": true, | ||
| "focusDistance": true, | ||
| "focusMode": true, | ||
| "frameRate": true, | ||
| "groupId": true, | ||
| "height": true, | ||
| "iso": true, | ||
| "latency": true, | ||
| "noiseSuppression": true, | ||
| "pan": true, | ||
| "pointsOfInterest": true, | ||
| "resizeMode": true, | ||
| "restrictOwnAudio": true, | ||
| "sampleRate": true, | ||
| "sampleSize": true, | ||
| "saturation": true, | ||
| "sharpness": true, | ||
| "suppressLocalAudioPlayback": true, | ||
| "tilt": true, | ||
| "torch": true, | ||
| "voiceIsolation": true, | ||
| "whiteBalanceMode": true, | ||
| "width": true, | ||
| "zoom": true | ||
| } | ||
| }, | ||
| "audio": { | ||
| "sampleRate": 48000, | ||
| "state": "running", | ||
| "baseLatency": 0.005333333333333333, | ||
| "outputLatency": 0, | ||
| "maxChannelCount": 2, | ||
| "numberOfInputs": 1, | ||
| "numberOfOutputs": 0, | ||
| "channelCount": 2, | ||
| "channelCountMode": "explicit", | ||
| "channelInterpretation": "speakers", | ||
| "audioHash": "124.04347624466754", | ||
| "sampleValues": [ | ||
| -0.10808053612709045, | ||
| -0.3909117877483368, | ||
| -0.005692681297659874, | ||
| 0.3892313539981842, | ||
| 0.1189708411693573, | ||
| -0.3545846939086914, | ||
| -0.22215834259986877, | ||
| 0.28990939259529114, | ||
| 0.30651888251304626, | ||
| -0.20068734884262085 | ||
| ] | ||
| }, | ||
| "webgpu": { | ||
| "supported": true, | ||
| "features": [ | ||
| "depth32float-stencil8", | ||
| "rg11b10ufloat-renderable", | ||
| "bgra8unorm-storage", | ||
| "texture-formats-tier1", | ||
| "texture-compression-bc", | ||
| "dual-source-blending", | ||
| "core-features-and-limits", | ||
| "float32-filterable", | ||
| "indirect-first-instance", | ||
| "texture-compression-astc-sliced-3d", | ||
| "float32-blendable", | ||
| "texture-compression-astc", | ||
| "texture-compression-etc2", | ||
| "depth-clip-control", | ||
| "texture-compression-bc-sliced-3d", | ||
| "texture-formats-tier2", | ||
| "shader-f16", | ||
| "clip-distances", | ||
| "timestamp-query", | ||
| "primitive-index", | ||
| "texture-component-swizzle", | ||
| "subgroups" | ||
| ], | ||
| "info": { | ||
| "vendor": "apple", | ||
| "architecture": "metal-3", | ||
| "device": "", | ||
| "description": "" | ||
| } | ||
| }, | ||
| "webgl": { | ||
| "version": "WebGL 2.0 (OpenGL ES 3.0 Chromium)", | ||
| "shadingLanguageVersion": "WebGL GLSL ES 3.00 (OpenGL ES GLSL ES 3.0 Chromium)", | ||
| "vendor": "WebKit", | ||
| "renderer": "WebKit WebGL", | ||
| "unmaskedVendor": "Google Inc. (Apple)", | ||
| "unmaskedRenderer": "ANGLE (Apple, ANGLE Metal Renderer: Apple M4 Max, Unspecified Version)", | ||
| "extensions": [ | ||
| "EXT_clip_control", | ||
| "EXT_color_buffer_float", | ||
| "EXT_color_buffer_half_float", | ||
| "EXT_conservative_depth", | ||
| "EXT_depth_clamp", | ||
| "EXT_disjoint_timer_query_webgl2", | ||
| "EXT_float_blend", | ||
| "EXT_polygon_offset_clamp", | ||
| "EXT_render_snorm", | ||
| "EXT_texture_compression_bptc", | ||
| "EXT_texture_compression_rgtc", | ||
| "EXT_texture_filter_anisotropic", | ||
| "EXT_texture_mirror_clamp_to_edge", | ||
| "EXT_texture_norm16", | ||
| "KHR_parallel_shader_compile", | ||
| "NV_shader_noperspective_interpolation", | ||
| "OES_draw_buffers_indexed", | ||
| "OES_sample_variables", | ||
| "OES_shader_multisample_interpolation", | ||
| "OES_texture_float_linear", | ||
| "WEBGL_blend_func_extended", | ||
| "WEBGL_clip_cull_distance", | ||
| "WEBGL_compressed_texture_astc", | ||
| "WEBGL_compressed_texture_etc", | ||
| "WEBGL_compressed_texture_etc1", | ||
| "WEBGL_compressed_texture_pvrtc", | ||
| "WEBGL_compressed_texture_s3tc", | ||
| "WEBGL_compressed_texture_s3tc_srgb", | ||
| "WEBGL_debug_renderer_info", | ||
| "WEBGL_debug_shaders", | ||
| "WEBGL_lose_context", | ||
| "WEBGL_multi_draw", | ||
| "WEBGL_polygon_mode", | ||
| "WEBGL_provoking_vertex", | ||
| "WEBGL_render_shared_exponent", | ||
| "WEBGL_stencil_texturing" | ||
| ], | ||
| "extensionCount": 36, | ||
| "maxTextureSize": 16384, | ||
| "maxViewportDims": [ | ||
| 16384, | ||
| 16384 | ||
| ], | ||
| "maxRenderbufferSize": 16384, | ||
| "maxCombinedTextureImageUnits": 32, | ||
| "maxCubeMapTextureSize": 16384, | ||
| "maxFragmentUniformVectors": 1024, | ||
| "maxTextureImageUnits": 16, | ||
| "maxVertexAttribs": 16, | ||
| "maxVertexTextureImageUnits": 16, | ||
| "maxVertexUniformVectors": 1024, | ||
| "maxVaryingVectors": 30, | ||
| "aliasedLineWidthRange": [ | ||
| 1, | ||
| 1 | ||
| ], | ||
| "aliasedPointSizeRange": [ | ||
| 1, | ||
| 511 | ||
| ], | ||
| "maxAnisotropy": 16, | ||
| "precisionFormats": { | ||
| "vertex_lowFloat": { | ||
| "rangeMin": 127, | ||
| "rangeMax": 127, | ||
| "precision": 23 | ||
| }, | ||
| "vertex_medFloat": { | ||
| "rangeMin": 127, | ||
| "rangeMax": 127, | ||
| "precision": 23 | ||
| }, | ||
| "vertex_highFloat": { | ||
| "rangeMin": 127, | ||
| "rangeMax": 127, | ||
| "precision": 23 | ||
| }, | ||
| "vertex_lowInt": { | ||
| "rangeMin": 31, | ||
| "rangeMax": 30, | ||
| "precision": 0 | ||
| }, | ||
| "vertex_medInt": { | ||
| "rangeMin": 31, | ||
| "rangeMax": 30, | ||
| "precision": 0 | ||
| }, | ||
| "vertex_highInt": { | ||
| "rangeMin": 31, | ||
| "rangeMax": 30, | ||
| "precision": 0 | ||
| }, | ||
| "fragment_lowFloat": { | ||
| "rangeMin": 127, | ||
| "rangeMax": 127, | ||
| "precision": 23 | ||
| }, | ||
| "fragment_medFloat": { | ||
| "rangeMin": 127, | ||
| "rangeMax": 127, | ||
| "precision": 23 | ||
| }, | ||
| "fragment_highFloat": { | ||
| "rangeMin": 127, | ||
| "rangeMax": 127, | ||
| "precision": 23 | ||
| }, | ||
| "fragment_lowInt": { | ||
| "rangeMin": 31, | ||
| "rangeMax": 30, | ||
| "precision": 0 | ||
| }, | ||
| "fragment_medInt": { | ||
| "rangeMin": 31, | ||
| "rangeMax": 30, | ||
| "precision": 0 | ||
| }, | ||
| "fragment_highInt": { | ||
| "rangeMin": 31, | ||
| "rangeMax": 30, | ||
| "precision": 0 | ||
| } | ||
| } | ||
| }, | ||
| "canvas": { | ||
| "consistent": true, | ||
| "hash": "CC4CD2B7", | ||
| "dataUrlLength": 25854, | ||
| "dataUrlPrefix": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwA", | ||
| "webpSupport": true, | ||
| "jpegHighLength": 26851, | ||
| "jpegLowLength": 2347 | ||
| }, | ||
| "screen": { | ||
| "width": 1728, | ||
| "height": 1117, | ||
| "availWidth": 1728, | ||
| "availHeight": 1083, | ||
| "colorDepth": 30, | ||
| "pixelDepth": 30, | ||
| "innerWidth": 2304, | ||
| "innerHeight": 1328, | ||
| "outerWidth": 1728, | ||
| "outerHeight": 997, | ||
| "screenX": 0, | ||
| "screenY": 120, | ||
| "pageXOffset": 0, | ||
| "pageYOffset": 0, | ||
| "devicePixelRatio": 1.5, | ||
| "orientation": { | ||
| "type": "landscape-primary", | ||
| "angle": 0 | ||
| }, | ||
| "mediaQueries": { | ||
| "prefers-color-scheme": "dark", | ||
| "prefers-reduced-motion": "reduce", | ||
| "prefers-contrast": "no-preference", | ||
| "forced-colors": "none", | ||
| "prefers-reduced-transparency": "reduce", | ||
| "color-gamut": "srgb", | ||
| "pointer": "fine", | ||
| "hover": "hover", | ||
| "any-pointer": "fine", | ||
| "any-hover": "hover", | ||
| "display-mode": "fullscreen", | ||
| "dynamic-range": "standard", | ||
| "update": "fast", | ||
| "overflow-block": "scroll", | ||
| "overflow-inline": "scroll", | ||
| "min-resolution": "144dpi", | ||
| "min-color": "8", | ||
| "monochrome": false | ||
| }, | ||
| "visualViewport": { | ||
| "width": 2304, | ||
| "height": 1328, | ||
| "offsetLeft": 0, | ||
| "offsetTop": 0, | ||
| "pageLeft": 0, | ||
| "pageTop": 0, | ||
| "scale": 1 | ||
| } | ||
| }, | ||
| "navigator": { | ||
| "secureContext": true, | ||
| "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36", | ||
| "platform": "MacIntel", | ||
| "vendor": "Google Inc.", | ||
| "vendorSub": "", | ||
| "product": "Gecko", | ||
| "productSub": "20030107", | ||
| "appVersion": "5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36", | ||
| "appName": "Netscape", | ||
| "appCodeName": "Mozilla", | ||
| "language": "en-US", | ||
| "languages": [ | ||
| "en-US", | ||
| "en" | ||
| ], | ||
| "cookieEnabled": true, | ||
| "doNotTrack": null, | ||
| "maxTouchPoints": 0, | ||
| "hardwareConcurrency": 14, | ||
| "deviceMemory": 32, | ||
| "pdfViewerEnabled": true, | ||
| "webdriver": false, | ||
| "connection": { | ||
| "effectiveType": "4g", | ||
| "downlink": 10, | ||
| "rtt": 50, | ||
| "saveData": false | ||
| }, | ||
| "plugins": [ | ||
| { | ||
| "name": "PDF Viewer", | ||
| "filename": "internal-pdf-viewer", | ||
| "description": "Portable Document Format" | ||
| }, | ||
| { | ||
| "name": "Chrome PDF Viewer", | ||
| "filename": "internal-pdf-viewer", | ||
| "description": "Portable Document Format" | ||
| }, | ||
| { | ||
| "name": "Chromium PDF Viewer", | ||
| "filename": "internal-pdf-viewer", | ||
| "description": "Portable Document Format" | ||
| }, | ||
| { | ||
| "name": "Microsoft Edge PDF Viewer", | ||
| "filename": "internal-pdf-viewer", | ||
| "description": "Portable Document Format" | ||
| }, | ||
| { | ||
| "name": "WebKit built-in PDF", | ||
| "filename": "internal-pdf-viewer", | ||
| "description": "Portable Document Format" | ||
| } | ||
| ], | ||
| "pluginCount": 5, | ||
| "mimeTypes": [ | ||
| "application/pdf", | ||
| "text/pdf" | ||
| ], | ||
| "userAgentData": { | ||
| "brands": [ | ||
| { | ||
| "brand": "Google Chrome", | ||
| "version": "147" | ||
| }, | ||
| { | ||
| "brand": "Not.A/Brand", | ||
| "version": "8" | ||
| }, | ||
| { | ||
| "brand": "Chromium", | ||
| "version": "147" | ||
| } | ||
| ], | ||
| "mobile": false, | ||
| "platform": "macOS" | ||
| }, | ||
| "userAgentDataHighEntropy": { | ||
| "architecture": "arm", | ||
| "bitness": "64", | ||
| "brands": [ | ||
| { | ||
| "brand": "Google Chrome", | ||
| "version": "147" | ||
| }, | ||
| { | ||
| "brand": "Not.A/Brand", | ||
| "version": "8" | ||
| }, | ||
| { | ||
| "brand": "Chromium", | ||
| "version": "147" | ||
| } | ||
| ], | ||
| "fullVersionList": [ | ||
| { | ||
| "brand": "Google Chrome", | ||
| "version": "147.0.7727.138" | ||
| }, | ||
| { | ||
| "brand": "Not.A/Brand", | ||
| "version": "8.0.0.0" | ||
| }, | ||
| { | ||
| "brand": "Chromium", | ||
| "version": "147.0.7727.138" | ||
| } | ||
| ], | ||
| "mobile": false, | ||
| "model": "", | ||
| "platform": "macOS", | ||
| "platformVersion": "26.4.0", | ||
| "wow64": false | ||
| }, | ||
| "permissions": { | ||
| "geolocation": "prompt", | ||
| "notifications": "prompt", | ||
| "camera": "prompt", | ||
| "microphone": "prompt", | ||
| "accelerometer": "granted", | ||
| "gyroscope": "granted", | ||
| "magnetometer": "granted", | ||
| "clipboard-read": "prompt", | ||
| "clipboard-write": "granted" | ||
| }, | ||
| "storageEstimate": { | ||
| "quota": 10737418240, | ||
| "usage": 0 | ||
| }, | ||
| "bluetooth": true, | ||
| "usb": true, | ||
| "serial": true, | ||
| "hid": true, | ||
| "xr": true, | ||
| "gpu": true, | ||
| "ink": true, | ||
| "scheduling": true, | ||
| "windowControlsOverlay": true, | ||
| "virtualKeyboard": true | ||
| }, | ||
| "__meta": { | ||
| "capturedAt": "2026-05-07T15:30:54.805Z", | ||
| "elapsedMs": 0, | ||
| "href": "http://wrkx.app/api/visitors/a5DvTh20kSDEse8RKYg2", | ||
| "readyState": "complete" | ||
| } | ||
| } |
| { | ||
| "version": "1", | ||
| "profile": "mac-chrome-beta", | ||
| "paths": [ | ||
| { | ||
| "path": "audio.**", | ||
| "comment": "Audio fingerprint bytes (sampleValues, audioHash) require precomputed per-(profile, sample-rate) byte tables — task 0071. docs/limits.md \"Audio fingerprinting (OfflineAudioContext) is NOT spoofed at v0.3\" carried over to v0.7 phase split." | ||
| }, | ||
| { | ||
| "path": "canvas.**", | ||
| "comment": "Canvas hash + dataUrl spoofing requires precomputed hash maps for the standard probe payloads + per-pixel noise injection — task 0071. docs/limits.md \"Canvas fingerprinting (HTMLCanvasElement.toDataURL) is NOT spoofed at v0.3\" carried over to v0.7 phase split." | ||
| }, | ||
| { | ||
| "path": "speech.**", | ||
| "comment": "speechSynthesis.getVoices() returns the host's installed system voices on real Chrome (typically 200+ entries on macOS, 20+ on Linux/Win). Chromium-for-Testing ships with no voice tables, so mochi spoofs voices=[]. Restoring real-device voice lists is a phase 0.7 deliverable (precomputed voice tables per-OS) tracked alongside audio/canvas. PLAN.md §13.6." | ||
| }, | ||
| { | ||
| "path": "navigator.userAgentData.brands", | ||
| "comment": "Brand-list length varies (Linux Chrome emits 2 brands, macOS/Win emit 3). Same root cause as the per-entry comment below." | ||
| }, | ||
| { | ||
| "path": "navigator.userAgentData.brands[*]", | ||
| "comment": "Per-entry full-object mismatch when length differs." | ||
| }, | ||
| { | ||
| "path": "navigator.userAgentData.brands[*].**", | ||
| "comment": "Sec-CH-UA brand-list ordering and GREASE label vary between Chrome/Edge majors and even between Chrome point releases (e.g. 146 emits `Not-A.Brand;v=24` while 147 emits `Not.A/Brand;v=8`). mochi pins a single GREASE label per major (consistency/rules/lookups/browser.ts) for determinism — see tasks/0051-consistency-stack-fixes.md (Group B). Per-major GREASE shuffle is a phase 0.7 deliverable." | ||
| }, | ||
| { | ||
| "path": "navigator.userAgentDataHighEntropy.brands", | ||
| "comment": "Same as userAgentData.brands." | ||
| }, | ||
| { | ||
| "path": "navigator.userAgentDataHighEntropy.brands[*]", | ||
| "comment": "Per-entry full-object mismatch when length differs." | ||
| }, | ||
| { | ||
| "path": "navigator.userAgentDataHighEntropy.brands[*].**", | ||
| "comment": "Same as navigator.userAgentData.brands — pinned for determinism." | ||
| }, | ||
| { | ||
| "path": "navigator.userAgentDataHighEntropy.fullVersionList", | ||
| "comment": "Same as userAgentData.brands — length varies by OS." | ||
| }, | ||
| { | ||
| "path": "navigator.userAgentDataHighEntropy.fullVersionList[*]", | ||
| "comment": "Per-entry full-object mismatch when length differs." | ||
| }, | ||
| { | ||
| "path": "navigator.userAgentDataHighEntropy.fullVersionList[*].**", | ||
| "comment": "Patch-level Chrome version (e.g. 146.0.7680.165) varies with the local Chrome install vs the BROWSER_TIP_FULL_VERSION table. mochi uses the table tip when the major matches; harvested values may differ by a few patch numbers. Refresh the table per Chrome major." | ||
| }, | ||
| { | ||
| "path": "navigator.userAgent", | ||
| "comment": "Full UA string includes the patch version (see fullVersionList comment). Spoofed value matches BROWSER_TIP_FULL_VERSION; harvested value reflects the user's exact Chrome point release." | ||
| }, | ||
| { | ||
| "path": "navigator.appVersion", | ||
| "comment": "Same patch-version drift as navigator.userAgent." | ||
| }, | ||
| { | ||
| "path": "screen.mediaQueries.**", | ||
| "comment": "matchMedia() result strings depend on the host's actual OS/display state (min-resolution from real DPR, prefers-color-scheme from Dark Mode, etc.). mochi spoofs a deterministic baseline; the harvested values reflect the user's session at capture time. Per-profile media-query lock is phase 0.7." | ||
| }, | ||
| { | ||
| "path": "screen.pageXOffset", | ||
| "comment": "Window-frame chrome. Sentinelized by normalize.ts in most paths but the raw harvested value may differ from the harness window's idle offset." | ||
| }, | ||
| { | ||
| "path": "screen.pageYOffset", | ||
| "comment": "Window-frame chrome — same as pageXOffset." | ||
| }, | ||
| { | ||
| "path": "timing.dateString", | ||
| "comment": "Date.toString() includes the host's wall-clock time, which differs every run. The probe normalises to a fixed 2024-01-01 anchor; harvested values reflect the user's actual capture time." | ||
| }, | ||
| { | ||
| "path": "timing.performanceTiming", | ||
| "comment": "performance.timing.* fields vary per session (load durations, redirect counts). normalize.ts sentinelizes the bot.navigationTiming sub-block; the timing.performanceTiming block is harvester-specific and not currently sentinelized." | ||
| }, | ||
| { | ||
| "path": "timing.supportedNumberingSystems[*]", | ||
| "comment": "Intl.supportedValuesOf('numberingSystem') grows between V8 majors (e.g. Chrome 149 added 'tols'). The harvested list reflects the user's V8; the harness uses Chromium-for-Testing's V8. List drift is expected as BROWSER_TIP_FULL_VERSION advances." | ||
| }, | ||
| { | ||
| "path": "webgl.aliasedLineWidthRange[*]", | ||
| "comment": "WebGL aliasedLineWidthRange/PointSizeRange/maxViewportDims values vary with the GPU driver version on the host. mochi locks GPU vendor/renderer via the matrix; per-driver-version locking is phase 0.7." | ||
| }, | ||
| { | ||
| "path": "webgl.aliasedPointSizeRange[*]", | ||
| "comment": "See webgl.aliasedLineWidthRange." | ||
| }, | ||
| { | ||
| "path": "webgl.maxColorAttachments", | ||
| "comment": "GPU-driver dependent; see webgl.aliasedLineWidthRange." | ||
| }, | ||
| { | ||
| "path": "webgl.maxViewportDims[*]", | ||
| "comment": "GPU-driver dependent; see webgl.aliasedLineWidthRange." | ||
| }, | ||
| { | ||
| "path": "webgpu.features", | ||
| "comment": "Block absent on hosts without a WebGPU adapter." | ||
| }, | ||
| { | ||
| "path": "webgpu.features[*]", | ||
| "comment": "WebGPU feature list grows between Chromium majors. The harvested list reflects the user's Chrome version; the harness uses Chromium-for-Testing." | ||
| }, | ||
| { | ||
| "path": "webgpu.info", | ||
| "comment": "Block absent on hosts without a WebGPU adapter." | ||
| }, | ||
| { | ||
| "path": "webgpu.limits.**", | ||
| "comment": "WebGPU adapter limits depend on the GPU driver. Per-driver locking is phase 0.7 alongside WebGL." | ||
| }, | ||
| { | ||
| "path": "bot.chromeRuntime", | ||
| "comment": "Real Chrome exposes window.chrome.runtime; Chromium-for-Testing does not. Restoring chrome.runtime polyfill is task 0140 (stealth conformance) — tracked separately." | ||
| }, | ||
| { | ||
| "path": "storage.cookieCount", | ||
| "comment": "Cookie state varies per session — the harvester's user had cookies, the harness session is fresh." | ||
| }, | ||
| { | ||
| "path": "storage.cookiesWritable", | ||
| "comment": "Depends on the document context (file:// fixture vs http:// origin). Harvester captured at http(s) origin; harness uses file:// fixture." | ||
| }, | ||
| { | ||
| "path": "storage.localStorageKeys", | ||
| "comment": "localStorage state varies per session — fresh harness session has no keys." | ||
| }, | ||
| { | ||
| "path": "mouseEvent", | ||
| "comment": "The probe-page emits a mouseEvent block when the relational-lock scaffolding fires. Harvested snapshots predate this probe and so omit it; spoofed sessions emit it. Cosmetic — the lock-result block is the spoof's own diagnostic, not a fingerprint surface." | ||
| }, | ||
| { | ||
| "path": "fonts.**", | ||
| "comment": "The font enumeration probe enumerates whatever the host has installed. Spoofing the per-profile font intersection is a phase 0.7 task (FontFace API stub + per-profile font allowlist). Running e.g. windows-chrome-stable on a Mac host will surface every macOS system font as material — that's a known gap, not a profile defect." | ||
| }, | ||
| { | ||
| "path": "webgl.extensions", | ||
| "comment": "Whole array absent on no-WebGL hosts (see webgl.error)." | ||
| }, | ||
| { | ||
| "path": "webgl.extensions[*]", | ||
| "comment": "WebGL extension list depends on the host GPU + driver. mochi locks GPU vendor/renderer strings but does NOT enumerate-list-spoof extensions per-profile yet. Phase 0.7 deliverable. Cross-host validation surfaces the host's actual extension set." | ||
| }, | ||
| { | ||
| "path": "webgl.precisionFormats", | ||
| "comment": "Block absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "webgl.extensionCount", | ||
| "comment": "See webgl.extensions[*] — count varies with host extensions." | ||
| }, | ||
| { | ||
| "path": "webgl.unmaskedVendor", | ||
| "comment": "Unmasked WebGL vendor/renderer requires GPU spoofing at the ANGLE layer (or a polyfilled WEBGL_debug_renderer_info getter). mochi's getter spoof is host-OS-aware; cross-host tests surface the underlying device." | ||
| }, | ||
| { | ||
| "path": "webgl.unmaskedRenderer", | ||
| "comment": "See webgl.unmaskedVendor." | ||
| }, | ||
| { | ||
| "path": "webgpu.info.**", | ||
| "comment": "WebGPU adapter info comes from the host driver. Cross-host validation shows the host's adapter; same root cause as webgl.unmaskedRenderer." | ||
| }, | ||
| { | ||
| "path": "mediaDevices.devices[*]", | ||
| "comment": "Per-entry full-object mismatch when device-array length differs." | ||
| }, | ||
| { | ||
| "path": "mediaDevices.devices[*].**", | ||
| "comment": "navigator.mediaDevices.enumerateDevices() returns whatever audio/video devices the host has. The harness fixture runs in a fresh permission state so labels are empty (matches baseline) but the device count + kind ratio depends on the host. Per-profile media-devices spoofing is phase 0.7." | ||
| }, | ||
| { | ||
| "path": "mediaDevices.deviceCount", | ||
| "comment": "See mediaDevices.devices[*]." | ||
| }, | ||
| { | ||
| "path": "mediaDevices.audioinput", | ||
| "comment": "See mediaDevices.devices[*]." | ||
| }, | ||
| { | ||
| "path": "mediaDevices.audiooutput", | ||
| "comment": "See mediaDevices.devices[*]." | ||
| }, | ||
| { | ||
| "path": "mediaDevices.videoinput", | ||
| "comment": "See mediaDevices.devices[*]." | ||
| }, | ||
| { | ||
| "path": "navigator.connection.effectiveType", | ||
| "comment": "NetworkInformation.effectiveType reads from the host network stack. downlink/rtt are sentinelized by normalize.ts but effectiveType isn't." | ||
| }, | ||
| { | ||
| "path": "timing.timezoneOffset", | ||
| "comment": "timezoneOffset depends on whether the captured profile's tz observes DST at the harness's wall-clock time vs at capture time. The IANA timezone is spoofed correctly; the offset is a derived value with seasonal drift." | ||
| }, | ||
| { | ||
| "path": "bot.userActivation.**", | ||
| "comment": "navigator.userActivation.hasBeenActive flips to true when the harness drives mouse/keyboard events. The harvested snapshot was captured before any user gesture, so hasBeenActive=false. The spoof doesn't lie about this — it's a true reflection of the harness's interaction sequence." | ||
| }, | ||
| { | ||
| "path": "navigator.deviceMemory", | ||
| "comment": "navigator.deviceMemory is spec-capped at 8 on real Chrome, but some configurations (older Chrome, non-Chromium derivatives) leak the real GiB count. mochi enforces the spec cap deterministically; the harvested value may be higher (16/32/64) and the spoof correctly clamps to 8." | ||
| }, | ||
| { | ||
| "path": "navigator.bluetooth", | ||
| "comment": "navigator.bluetooth presence depends on the host's Web Bluetooth flag. Linux Chrome typically has it disabled by default; mochi exposes it. Per-profile API allowlist is phase 0.7." | ||
| }, | ||
| { | ||
| "path": "storage.fileSystemAccess", | ||
| "comment": "FileSystemAccess API can be hardened off (Brave) or off-by-default (Linux Chrome). mochi exposes the API by default. Per-profile feature gating is phase 0.7." | ||
| }, | ||
| { | ||
| "path": "storage.sessionStorageKeys", | ||
| "comment": "The probe page writes one sessionStorage key during its self-test; harvested baselines that ran before that probe instrumentation report 0. New captures will normalize to 1 once re-imported." | ||
| }, | ||
| { | ||
| "path": "timing.timerPrecision", | ||
| "comment": "Brave coarsens performance.now() precision; harvested Brave snapshots report null. mochi does NOT coarsen — restoring Brave's precision-coarsen behavior is a phase 0.7 deliverable." | ||
| }, | ||
| { | ||
| "path": "navigator.userAgentDataHighEntropy.platformVersion", | ||
| "comment": "platformVersion is empty on Linux Chrome (X11 has no notion of OS marketing version). The spoof emits a synthesised value; on Linux imports we accept the empty-string baseline as the source of truth." | ||
| }, | ||
| { | ||
| "path": "navigator.connection", | ||
| "comment": "Brave hardens NetworkInformation and returns an undefined connection block. mochi exposes the API. Per-profile NetworkInformation hardening is a phase 0.7 deliverable." | ||
| }, | ||
| { | ||
| "path": "webgl.error", | ||
| "comment": "Some captured devices (headless Linux, lock-screened Windows) report no WebGL context. mochi always presents a WebGL surface. Per-profile no-WebGL mode is phase 0.7." | ||
| }, | ||
| { | ||
| "path": "webgl.version", | ||
| "comment": "Empty on no-WebGL hosts (see webgl.error)." | ||
| }, | ||
| { | ||
| "path": "webgl.shadingLanguageVersion", | ||
| "comment": "Empty on no-WebGL hosts (see webgl.error)." | ||
| }, | ||
| { | ||
| "path": "webgl.vendor", | ||
| "comment": "Empty on no-WebGL hosts (see webgl.error)." | ||
| }, | ||
| { | ||
| "path": "webgl.renderer", | ||
| "comment": "Empty on no-WebGL hosts (see webgl.error)." | ||
| }, | ||
| { | ||
| "path": "webgl.aliasedLineWidthRange", | ||
| "comment": "Absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "webgl.aliasedPointSizeRange", | ||
| "comment": "Absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "webgl.maxAnisotropy", | ||
| "comment": "Absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "webgl.maxColorAttachments", | ||
| "comment": "Absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "webgl.maxCombinedTextureImageUnits", | ||
| "comment": "Absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "webgl.maxCubeMapTextureSize", | ||
| "comment": "Absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "webgl.maxFragmentUniformVectors", | ||
| "comment": "Absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "webgl.maxRenderbufferSize", | ||
| "comment": "Absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "webgl.maxTextureImageUnits", | ||
| "comment": "Absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "webgl.maxTextureSize", | ||
| "comment": "Absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "webgl.maxVaryingVectors", | ||
| "comment": "Absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "webgl.maxVertexAttribs", | ||
| "comment": "Absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "webgl.maxVertexTextureImageUnits", | ||
| "comment": "Absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "webgl.maxVertexUniformVectors", | ||
| "comment": "Absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "webgl.maxViewportDims", | ||
| "comment": "Absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "webgl.precisionFormats.**", | ||
| "comment": "Absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "mediaDevices.devices", | ||
| "comment": "Device array length varies with the host's installed devices. Per-profile media-devices spoofing is phase 0.7." | ||
| } | ||
| ] | ||
| } |
| { | ||
| "id": "mac-chrome-beta", | ||
| "version": "1.0.0", | ||
| "engine": "chromium", | ||
| "browser": { | ||
| "name": "chrome", | ||
| "channel": "beta", | ||
| "minVersion": "147", | ||
| "maxVersion": "147" | ||
| }, | ||
| "os": { | ||
| "name": "macos", | ||
| "version": "26.4.0", | ||
| "arch": "arm64" | ||
| }, | ||
| "device": { | ||
| "vendor": "apple", | ||
| "model": "Mac", | ||
| "cpuFamily": "apple-silicon-m4", | ||
| "cores": 14, | ||
| "memoryGB": 64 | ||
| }, | ||
| "display": { | ||
| "width": 1728, | ||
| "height": 1117, | ||
| "dpr": 1.5, | ||
| "colorDepth": 30, | ||
| "pixelDepth": 30 | ||
| }, | ||
| "gpu": { | ||
| "vendor": "Apple", | ||
| "renderer": "ANGLE Metal Renderer: Apple M4 Max", | ||
| "webglUnmaskedVendor": "Google Inc. (Apple)", | ||
| "webglUnmaskedRenderer": "ANGLE (Apple, ANGLE Metal Renderer: Apple M4 Max, Unspecified Version)", | ||
| "webglMaxTextureSize": 16384, | ||
| "webglMaxColorAttachments": 8, | ||
| "webglExtensions": [ | ||
| "EXT_clip_control", | ||
| "EXT_color_buffer_float", | ||
| "EXT_color_buffer_half_float", | ||
| "EXT_conservative_depth", | ||
| "EXT_depth_clamp", | ||
| "EXT_disjoint_timer_query_webgl2", | ||
| "EXT_float_blend", | ||
| "EXT_polygon_offset_clamp", | ||
| "EXT_render_snorm", | ||
| "EXT_texture_compression_bptc", | ||
| "EXT_texture_compression_rgtc", | ||
| "EXT_texture_filter_anisotropic", | ||
| "EXT_texture_mirror_clamp_to_edge", | ||
| "EXT_texture_norm16", | ||
| "KHR_parallel_shader_compile", | ||
| "NV_shader_noperspective_interpolation", | ||
| "OES_draw_buffers_indexed", | ||
| "OES_sample_variables", | ||
| "OES_shader_multisample_interpolation", | ||
| "OES_texture_float_linear", | ||
| "WEBGL_blend_func_extended", | ||
| "WEBGL_clip_cull_distance", | ||
| "WEBGL_compressed_texture_astc", | ||
| "WEBGL_compressed_texture_etc", | ||
| "WEBGL_compressed_texture_etc1", | ||
| "WEBGL_compressed_texture_pvrtc", | ||
| "WEBGL_compressed_texture_s3tc", | ||
| "WEBGL_compressed_texture_s3tc_srgb", | ||
| "WEBGL_debug_renderer_info", | ||
| "WEBGL_debug_shaders", | ||
| "WEBGL_lose_context", | ||
| "WEBGL_multi_draw", | ||
| "WEBGL_polygon_mode", | ||
| "WEBGL_provoking_vertex", | ||
| "WEBGL_render_shared_exponent", | ||
| "WEBGL_stencil_texturing" | ||
| ] | ||
| }, | ||
| "audio": { | ||
| "contextSampleRate": 48000, | ||
| "audioWorkletLatency": 0.005333333333333333, | ||
| "destinationMaxChannelCount": 2 | ||
| }, | ||
| "fonts": { | ||
| "family": "macos-system-pack", | ||
| "list": [ | ||
| "American Typewriter", | ||
| "Andale Mono", | ||
| "Apple Chancery", | ||
| "Apple Color Emoji", | ||
| "Apple SD Gothic Neo", | ||
| "Arial", | ||
| "Arial Black", | ||
| "Arial Narrow", | ||
| "Avenir", | ||
| "Avenir Next", | ||
| "Baskerville", | ||
| "Big Caslon", | ||
| "Brush Script MT", | ||
| "Chalkboard", | ||
| "Chalkboard SE", | ||
| "Chalkduster", | ||
| "Cochin", | ||
| "Comic Sans MS", | ||
| "Copperplate", | ||
| "Courier", | ||
| "Courier New", | ||
| "Didot", | ||
| "Futura", | ||
| "Geneva", | ||
| "Georgia", | ||
| "Gill Sans", | ||
| "Helvetica", | ||
| "Helvetica Neue", | ||
| "Herculanum", | ||
| "Hiragino Kaku Gothic Pro", | ||
| "Hiragino Mincho Pro", | ||
| "Hiragino Sans", | ||
| "Hoefler Text", | ||
| "Impact", | ||
| "Iowan Old Style", | ||
| "Lucida Grande", | ||
| "Luminari", | ||
| "Marker Felt", | ||
| "Menlo", | ||
| "Microsoft Sans Serif", | ||
| "Monaco", | ||
| "Noteworthy", | ||
| "Optima", | ||
| "PT Sans", | ||
| "Palatino", | ||
| "Papyrus", | ||
| "Phosphate", | ||
| "Rockwell", | ||
| "STIXGeneral", | ||
| "Savoye LET", | ||
| "SignPainter", | ||
| "Skia", | ||
| "Snell Roundhand", | ||
| "Superclarendon", | ||
| "Symbol", | ||
| "System Font", | ||
| "Tahoma", | ||
| "Times New Roman", | ||
| "Trebuchet MS", | ||
| "Verdana", | ||
| "Webdings", | ||
| "Wingdings", | ||
| "Zapfino" | ||
| ] | ||
| }, | ||
| "timezone": "Asia/Bangkok", | ||
| "locale": "en-US", | ||
| "languages": [ | ||
| "en-US", | ||
| "en" | ||
| ], | ||
| "behavior": { | ||
| "hand": "right", | ||
| "tremor": 0.18, | ||
| "wpm": 60, | ||
| "scrollStyle": "smooth" | ||
| }, | ||
| "wreqPreset": "chrome_147_macos", | ||
| "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36", | ||
| "uaCh": { | ||
| "sec-ch-ua": "\"Google Chrome\";v=\"147\", \"Not.A/Brand\";v=\"8\", \"Chromium\";v=\"147\"", | ||
| "sec-ch-ua-mobile": "?0", | ||
| "sec-ch-ua-platform": "\"macOS\"", | ||
| "sec-ch-ua-platform-version": "\"26.4.0\"", | ||
| "sec-ch-ua-arch": "\"arm\"", | ||
| "sec-ch-ua-bitness": "\"64\"", | ||
| "sec-ch-ua-model": "\"\"", | ||
| "sec-ch-ua-full-version": "\"147\"", | ||
| "sec-ch-ua-os": "\"macos\"" | ||
| }, | ||
| "entropyBudget": { | ||
| "fixed": [], | ||
| "perSeed": [] | ||
| } | ||
| } |
| # PROVENANCE — mac-chrome-beta | ||
| Imported from the wrkx harvester corpus (`http://wrkx.app/api`) by `mochi profiles import`. PLAN.md §12.2 — every profile in `main` must carry verifiable provenance. | ||
| | field | value | | ||
| |---|---| | ||
| | profile id | `mac-chrome-beta` | | ||
| | upstream visitor id | `a5DvTh20kSDEse8RKYg2` | | ||
| | upstream URL | `http://wrkx.app/api/visitors/a5DvTh20kSDEse8RKYg2` | | ||
| | visitor egress ip (snapshot) | 49.228.67.131 | | ||
| | browser version | 147 | | ||
| | FingerprintJS suspectScore | 6 | | ||
| | captured at (UTC) | 2026-05-07T15:30:54.805Z | | ||
| | imported at (UTC) | 2026-05-08T20:50:35.794Z | | ||
| | importer | `mochi profiles import` (task 0260) | | ||
| ## Multi-snapshot policy | ||
| When the visitor record contains multiple snapshots for a single category (re-visits over time), the importer keeps the most recent by `created_at`. This matches the spirit of capturing the device's *current* fingerprint rather than a stale earlier one. | ||
| ## TLS preset | ||
| The harvester capture did not include a JA3/JA4 hash, so the wreqPreset is synthesised as `<browser>_<major>_<os>`. The wreq Rust crate's `resolve_preset()` matches by family (`chrome*` → Chrome) — exact-version fingerprint matching is a phase 0.7 deliverable. See `packages/net-rs/src/ffi/preset.rs`. | ||
| ## Hand-corrections | ||
| None at import time. The harvester's `navigator` snapshot is captured by real Chrome (not headless), so the `--headless=new` artifacts that needed manual correction in `mac-m4-chrome-stable` (task 0070) are absent here. | ||
| { | ||
| "timing": { | ||
| "timezone": "Asia/Jakarta", | ||
| "timezoneOffset": -420, | ||
| "locale": "en-US", | ||
| "dateString": "Mon Jan 01 2024 12:00:00 GMT+0700 (Western Indonesia Time)", | ||
| "localeString": "1/1/2024, 12:00:00 PM", | ||
| "localeDateString": "1/1/2024", | ||
| "numberFormat": { | ||
| "locale": "en-US", | ||
| "numberingSystem": "latn", | ||
| "style": "decimal", | ||
| "minimumIntegerDigits": 1, | ||
| "minimumFractionDigits": 0, | ||
| "maximumFractionDigits": 3, | ||
| "useGrouping": "auto", | ||
| "notation": "standard", | ||
| "signDisplay": "auto", | ||
| "roundingIncrement": 1, | ||
| "roundingMode": "halfExpand", | ||
| "roundingPriority": "auto", | ||
| "trailingZeroDisplay": "auto" | ||
| }, | ||
| "dateTimeFormat": { | ||
| "locale": "en-US", | ||
| "calendar": "gregory", | ||
| "numberingSystem": "latn", | ||
| "timeZone": "Asia/Jakarta", | ||
| "year": "numeric", | ||
| "month": "numeric", | ||
| "day": "numeric" | ||
| }, | ||
| "supportedCalendars": [ | ||
| "buddhist", | ||
| "chinese", | ||
| "coptic", | ||
| "dangi", | ||
| "ethioaa", | ||
| "ethiopic", | ||
| "gregory", | ||
| "hebrew", | ||
| "indian", | ||
| "islamic", | ||
| "islamic-civil", | ||
| "islamic-rgsa", | ||
| "islamic-tbla", | ||
| "islamic-umalqura", | ||
| "iso8601", | ||
| "japanese", | ||
| "persian", | ||
| "roc" | ||
| ], | ||
| "supportedCurrencies": 159, | ||
| "supportedNumberingSystems": [ | ||
| "adlm", | ||
| "ahom", | ||
| "arab", | ||
| "arabext", | ||
| "bali", | ||
| "beng", | ||
| "bhks", | ||
| "brah", | ||
| "cakm", | ||
| "cham", | ||
| "deva", | ||
| "diak", | ||
| "fullwide", | ||
| "gara", | ||
| "gong", | ||
| "gonm", | ||
| "gujr", | ||
| "gukh", | ||
| "guru", | ||
| "hanidec", | ||
| "hmng", | ||
| "hmnp", | ||
| "java", | ||
| "kali", | ||
| "kawi", | ||
| "khmr", | ||
| "knda", | ||
| "krai", | ||
| "lana", | ||
| "lanatham", | ||
| "laoo", | ||
| "latn", | ||
| "lepc", | ||
| "limb", | ||
| "mathbold", | ||
| "mathdbl", | ||
| "mathmono", | ||
| "mathsanb", | ||
| "mathsans", | ||
| "mlym", | ||
| "modi", | ||
| "mong", | ||
| "mroo", | ||
| "mtei", | ||
| "mymr", | ||
| "mymrepka", | ||
| "mymrpao", | ||
| "mymrshan", | ||
| "mymrtlng", | ||
| "nagm", | ||
| "newa", | ||
| "nkoo", | ||
| "olck", | ||
| "onao", | ||
| "orya", | ||
| "osma", | ||
| "outlined", | ||
| "rohg", | ||
| "saur", | ||
| "segment", | ||
| "shrd", | ||
| "sind", | ||
| "sinh", | ||
| "sora", | ||
| "sund", | ||
| "sunu", | ||
| "takr", | ||
| "talu", | ||
| "tamldec", | ||
| "telu", | ||
| "thai", | ||
| "tibt", | ||
| "tirh", | ||
| "tnsa", | ||
| "vaii", | ||
| "wara", | ||
| "wcho" | ||
| ], | ||
| "supportedTimeZones": 418, | ||
| "supportedUnits": 45, | ||
| "performanceTiming": { | ||
| "dns": 0, | ||
| "tcp": 0, | ||
| "ttfb": 21, | ||
| "download": 9, | ||
| "domParsing": 65, | ||
| "domComplete": -107, | ||
| "loadEvent": 0, | ||
| "total": 0, | ||
| "protocol": "h2", | ||
| "transferSize": 3475, | ||
| "encodedBodySize": 3175, | ||
| "decodedBodySize": 10829 | ||
| }, | ||
| "timerPrecision": null, | ||
| "mathFingerprint": { | ||
| "E": 2.718281828459045, | ||
| "LN2": 0.6931471805599453, | ||
| "LN10": 2.302585092994046, | ||
| "LOG2E": 1.4426950408889634, | ||
| "LOG10E": 0.4342944819032518, | ||
| "PI": 3.141592653589793, | ||
| "SQRT2": 1.4142135623730951, | ||
| "SQRT1_2": 0.7071067811865476, | ||
| "acos": 1.0471975511965979, | ||
| "acosh": 1.3169578969248166, | ||
| "asin": 0.5235987755982989, | ||
| "atan": 0.7853981633974483, | ||
| "atanh": 0.5493061443340548, | ||
| "cbrt": 1.2599210498948732, | ||
| "cosh": 1.5430806348152437, | ||
| "expm1": 1.718281828459045, | ||
| "log1p": 0.4054651081081644, | ||
| "sinh": 1.1752011936438014, | ||
| "tanh": 0.7615941559557649 | ||
| } | ||
| }, | ||
| "bot": { | ||
| "webdriver": false, | ||
| "webdriverType": "normal", | ||
| "headlessChrome": false, | ||
| "automationKeys": [], | ||
| "automationDetected": false, | ||
| "chromeRuntime": true, | ||
| "pluginCount": 5, | ||
| "pluginInconsistency": false, | ||
| "languageInconsistency": false, | ||
| "permissionsApi": true, | ||
| "screenDimensions": "1470x956", | ||
| "suspiciousDimensions": false, | ||
| "maxTouchPoints": 0, | ||
| "touchEvent": false, | ||
| "touchInconsistency": false, | ||
| "notificationPermission": "default", | ||
| "userActivation": { | ||
| "hasBeenActive": false, | ||
| "isActive": false | ||
| }, | ||
| "navigationTiming": { | ||
| "type": "navigate", | ||
| "redirectCount": 0, | ||
| "domComplete": 0, | ||
| "loadEventEnd": 0, | ||
| "domInteractive": 107 | ||
| }, | ||
| "stackDepthTest": 101 | ||
| }, | ||
| "storage": { | ||
| "localStorage": true, | ||
| "localStorageKeys": 3, | ||
| "sessionStorage": true, | ||
| "sessionStorageKeys": 0, | ||
| "cookiesEnabled": true, | ||
| "cookiesWritable": true, | ||
| "cookieCount": 1, | ||
| "indexedDB": true, | ||
| "cacheStorage": true, | ||
| "serviceWorker": true, | ||
| "storageManager": true, | ||
| "fileSystemAccess": true, | ||
| "sharedArrayBuffer": false, | ||
| "sharedWorker": true, | ||
| "openDatabase": false, | ||
| "broadcastChannel": true, | ||
| "secureContext": true | ||
| }, | ||
| "fonts": { | ||
| "detected": [ | ||
| "Arial", | ||
| "Arial Black", | ||
| "Arial Narrow", | ||
| "Comic Sans MS", | ||
| "Courier New", | ||
| "Georgia", | ||
| "Impact", | ||
| "Microsoft Sans Serif", | ||
| "Tahoma", | ||
| "Times New Roman", | ||
| "Trebuchet MS", | ||
| "Verdana", | ||
| "Webdings", | ||
| "Wingdings", | ||
| "American Typewriter", | ||
| "Andale Mono", | ||
| "Apple Chancery", | ||
| "Apple Color Emoji", | ||
| "Apple SD Gothic Neo", | ||
| "Avenir", | ||
| "Avenir Next", | ||
| "Baskerville", | ||
| "Big Caslon", | ||
| "Brush Script MT", | ||
| "Chalkboard", | ||
| "Chalkboard SE", | ||
| "Chalkduster", | ||
| "Cochin", | ||
| "Copperplate", | ||
| "Courier", | ||
| "Didot", | ||
| "Futura", | ||
| "Geneva", | ||
| "Gill Sans", | ||
| "Helvetica", | ||
| "Helvetica Neue", | ||
| "Herculanum", | ||
| "Hoefler Text", | ||
| "Iowan Old Style", | ||
| "Lucida Grande", | ||
| "Luminari", | ||
| "Marker Felt", | ||
| "Menlo", | ||
| "Monaco", | ||
| "Noteworthy", | ||
| "Optima", | ||
| "Palatino", | ||
| "Papyrus", | ||
| "Phosphate", | ||
| "Rockwell", | ||
| "Savoye LET", | ||
| "SignPainter", | ||
| "Skia", | ||
| "Snell Roundhand", | ||
| "STIXGeneral", | ||
| "Superclarendon", | ||
| "Symbol", | ||
| "System Font", | ||
| "Zapfino", | ||
| "Hiragino Sans", | ||
| "Hiragino Kaku Gothic Pro", | ||
| "Hiragino Mincho Pro", | ||
| "PT Sans" | ||
| ], | ||
| "count": 63, | ||
| "tested": 117, | ||
| "hash": "B8498456", | ||
| "fontsApiReady": true | ||
| }, | ||
| "speech": { | ||
| "voices": [ | ||
| { | ||
| "name": "Samantha", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": true, | ||
| "voiceURI": "Samantha" | ||
| }, | ||
| { | ||
| "name": "Albert", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Albert" | ||
| }, | ||
| { | ||
| "name": "Alice", | ||
| "lang": "it-IT", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Alice" | ||
| }, | ||
| { | ||
| "name": "Alva", | ||
| "lang": "sv-SE", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Alva" | ||
| }, | ||
| { | ||
| "name": "Amélie", | ||
| "lang": "fr-CA", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Amélie" | ||
| }, | ||
| { | ||
| "name": "Amira", | ||
| "lang": "ms-MY", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Amira" | ||
| }, | ||
| { | ||
| "name": "Anna", | ||
| "lang": "de-DE", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Anna" | ||
| }, | ||
| { | ||
| "name": "Bad News", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Bad News" | ||
| }, | ||
| { | ||
| "name": "Bahh", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Bahh" | ||
| }, | ||
| { | ||
| "name": "Bells", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Bells" | ||
| }, | ||
| { | ||
| "name": "Boing", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Boing" | ||
| }, | ||
| { | ||
| "name": "Bubbles", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Bubbles" | ||
| }, | ||
| { | ||
| "name": "Carmit", | ||
| "lang": "he-IL", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Carmit" | ||
| }, | ||
| { | ||
| "name": "Cellos", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Cellos" | ||
| }, | ||
| { | ||
| "name": "Damayanti", | ||
| "lang": "id-ID", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Damayanti" | ||
| }, | ||
| { | ||
| "name": "Daniel", | ||
| "lang": "en-GB", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Daniel" | ||
| }, | ||
| { | ||
| "name": "Daria", | ||
| "lang": "bg-BG", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Daria" | ||
| }, | ||
| { | ||
| "name": "Eddy (English (United States))", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Eddy (English (United States))" | ||
| }, | ||
| { | ||
| "name": "Eddy (English (United Kingdom))", | ||
| "lang": "en-GB", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Eddy (English (United Kingdom))" | ||
| }, | ||
| { | ||
| "name": "Eddy (Chinese (China mainland))", | ||
| "lang": "zh-CN", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Eddy (Chinese (China mainland))" | ||
| }, | ||
| { | ||
| "name": "Eddy (Chinese (Taiwan))", | ||
| "lang": "zh-TW", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Eddy (Chinese (Taiwan))" | ||
| }, | ||
| { | ||
| "name": "Eddy (German (Germany))", | ||
| "lang": "de-DE", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Eddy (German (Germany))" | ||
| }, | ||
| { | ||
| "name": "Eddy (Spanish (Spain))", | ||
| "lang": "es-ES", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Eddy (Spanish (Spain))" | ||
| }, | ||
| { | ||
| "name": "Eddy (Spanish (Mexico))", | ||
| "lang": "es-MX", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Eddy (Spanish (Mexico))" | ||
| }, | ||
| { | ||
| "name": "Eddy (Finnish (Finland))", | ||
| "lang": "fi-FI", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Eddy (Finnish (Finland))" | ||
| }, | ||
| { | ||
| "name": "Eddy (French (Canada))", | ||
| "lang": "fr-CA", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Eddy (French (Canada))" | ||
| }, | ||
| { | ||
| "name": "Eddy (French (France))", | ||
| "lang": "fr-FR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Eddy (French (France))" | ||
| }, | ||
| { | ||
| "name": "Eddy (Italian (Italy))", | ||
| "lang": "it-IT", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Eddy (Italian (Italy))" | ||
| }, | ||
| { | ||
| "name": "Eddy (Japanese (Japan))", | ||
| "lang": "ja-JP", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Eddy (Japanese (Japan))" | ||
| }, | ||
| { | ||
| "name": "Eddy (Korean (South Korea))", | ||
| "lang": "ko-KR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Eddy (Korean (South Korea))" | ||
| }, | ||
| { | ||
| "name": "Eddy (Portuguese (Brazil))", | ||
| "lang": "pt-BR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Eddy (Portuguese (Brazil))" | ||
| }, | ||
| { | ||
| "name": "Ellen", | ||
| "lang": "nl-BE", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Ellen" | ||
| }, | ||
| { | ||
| "name": "Flo (English (United States))", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Flo (English (United States))" | ||
| }, | ||
| { | ||
| "name": "Flo (English (United Kingdom))", | ||
| "lang": "en-GB", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Flo (English (United Kingdom))" | ||
| }, | ||
| { | ||
| "name": "Flo (Chinese (China mainland))", | ||
| "lang": "zh-CN", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Flo (Chinese (China mainland))" | ||
| }, | ||
| { | ||
| "name": "Flo (Chinese (Taiwan))", | ||
| "lang": "zh-TW", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Flo (Chinese (Taiwan))" | ||
| }, | ||
| { | ||
| "name": "Flo (German (Germany))", | ||
| "lang": "de-DE", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Flo (German (Germany))" | ||
| }, | ||
| { | ||
| "name": "Flo (Spanish (Spain))", | ||
| "lang": "es-ES", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Flo (Spanish (Spain))" | ||
| }, | ||
| { | ||
| "name": "Flo (Spanish (Mexico))", | ||
| "lang": "es-MX", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Flo (Spanish (Mexico))" | ||
| }, | ||
| { | ||
| "name": "Flo (Finnish (Finland))", | ||
| "lang": "fi-FI", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Flo (Finnish (Finland))" | ||
| }, | ||
| { | ||
| "name": "Flo (French (Canada))", | ||
| "lang": "fr-CA", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Flo (French (Canada))" | ||
| }, | ||
| { | ||
| "name": "Flo (French (France))", | ||
| "lang": "fr-FR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Flo (French (France))" | ||
| }, | ||
| { | ||
| "name": "Flo (Italian (Italy))", | ||
| "lang": "it-IT", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Flo (Italian (Italy))" | ||
| }, | ||
| { | ||
| "name": "Flo (Japanese (Japan))", | ||
| "lang": "ja-JP", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Flo (Japanese (Japan))" | ||
| }, | ||
| { | ||
| "name": "Flo (Korean (South Korea))", | ||
| "lang": "ko-KR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Flo (Korean (South Korea))" | ||
| }, | ||
| { | ||
| "name": "Flo (Portuguese (Brazil))", | ||
| "lang": "pt-BR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Flo (Portuguese (Brazil))" | ||
| }, | ||
| { | ||
| "name": "Fred", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Fred" | ||
| }, | ||
| { | ||
| "name": "Geeta", | ||
| "lang": "te-IN", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Geeta" | ||
| }, | ||
| { | ||
| "name": "Good News", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Good News" | ||
| }, | ||
| { | ||
| "name": "Grandma (English (United States))", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandma (English (United States))" | ||
| }, | ||
| { | ||
| "name": "Grandma (English (United Kingdom))", | ||
| "lang": "en-GB", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandma (English (United Kingdom))" | ||
| }, | ||
| { | ||
| "name": "Grandma (Chinese (China mainland))", | ||
| "lang": "zh-CN", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandma (Chinese (China mainland))" | ||
| }, | ||
| { | ||
| "name": "Grandma (Chinese (Taiwan))", | ||
| "lang": "zh-TW", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandma (Chinese (Taiwan))" | ||
| }, | ||
| { | ||
| "name": "Grandma (German (Germany))", | ||
| "lang": "de-DE", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandma (German (Germany))" | ||
| }, | ||
| { | ||
| "name": "Grandma (Spanish (Spain))", | ||
| "lang": "es-ES", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandma (Spanish (Spain))" | ||
| }, | ||
| { | ||
| "name": "Grandma (Spanish (Mexico))", | ||
| "lang": "es-MX", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandma (Spanish (Mexico))" | ||
| }, | ||
| { | ||
| "name": "Grandma (Finnish (Finland))", | ||
| "lang": "fi-FI", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandma (Finnish (Finland))" | ||
| }, | ||
| { | ||
| "name": "Grandma (French (Canada))", | ||
| "lang": "fr-CA", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandma (French (Canada))" | ||
| }, | ||
| { | ||
| "name": "Grandma (French (France))", | ||
| "lang": "fr-FR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandma (French (France))" | ||
| }, | ||
| { | ||
| "name": "Grandma (Italian (Italy))", | ||
| "lang": "it-IT", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandma (Italian (Italy))" | ||
| }, | ||
| { | ||
| "name": "Grandma (Japanese (Japan))", | ||
| "lang": "ja-JP", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandma (Japanese (Japan))" | ||
| }, | ||
| { | ||
| "name": "Grandma (Korean (South Korea))", | ||
| "lang": "ko-KR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandma (Korean (South Korea))" | ||
| }, | ||
| { | ||
| "name": "Grandma (Portuguese (Brazil))", | ||
| "lang": "pt-BR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandma (Portuguese (Brazil))" | ||
| }, | ||
| { | ||
| "name": "Grandpa (English (United States))", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandpa (English (United States))" | ||
| }, | ||
| { | ||
| "name": "Grandpa (English (United Kingdom))", | ||
| "lang": "en-GB", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandpa (English (United Kingdom))" | ||
| }, | ||
| { | ||
| "name": "Grandpa (Chinese (China mainland))", | ||
| "lang": "zh-CN", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandpa (Chinese (China mainland))" | ||
| }, | ||
| { | ||
| "name": "Grandpa (Chinese (Taiwan))", | ||
| "lang": "zh-TW", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandpa (Chinese (Taiwan))" | ||
| }, | ||
| { | ||
| "name": "Grandpa (German (Germany))", | ||
| "lang": "de-DE", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandpa (German (Germany))" | ||
| }, | ||
| { | ||
| "name": "Grandpa (Spanish (Spain))", | ||
| "lang": "es-ES", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandpa (Spanish (Spain))" | ||
| }, | ||
| { | ||
| "name": "Grandpa (Spanish (Mexico))", | ||
| "lang": "es-MX", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandpa (Spanish (Mexico))" | ||
| }, | ||
| { | ||
| "name": "Grandpa (Finnish (Finland))", | ||
| "lang": "fi-FI", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandpa (Finnish (Finland))" | ||
| }, | ||
| { | ||
| "name": "Grandpa (French (Canada))", | ||
| "lang": "fr-CA", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandpa (French (Canada))" | ||
| }, | ||
| { | ||
| "name": "Grandpa (French (France))", | ||
| "lang": "fr-FR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandpa (French (France))" | ||
| }, | ||
| { | ||
| "name": "Grandpa (Italian (Italy))", | ||
| "lang": "it-IT", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandpa (Italian (Italy))" | ||
| }, | ||
| { | ||
| "name": "Grandpa (Japanese (Japan))", | ||
| "lang": "ja-JP", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandpa (Japanese (Japan))" | ||
| }, | ||
| { | ||
| "name": "Grandpa (Korean (South Korea))", | ||
| "lang": "ko-KR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandpa (Korean (South Korea))" | ||
| }, | ||
| { | ||
| "name": "Grandpa (Portuguese (Brazil))", | ||
| "lang": "pt-BR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Grandpa (Portuguese (Brazil))" | ||
| }, | ||
| { | ||
| "name": "Ioana", | ||
| "lang": "ro-RO", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Ioana" | ||
| }, | ||
| { | ||
| "name": "Jacques", | ||
| "lang": "fr-FR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Jacques" | ||
| }, | ||
| { | ||
| "name": "Jester", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Jester" | ||
| }, | ||
| { | ||
| "name": "Joana", | ||
| "lang": "pt-PT", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Joana" | ||
| }, | ||
| { | ||
| "name": "Junior", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Junior" | ||
| }, | ||
| { | ||
| "name": "Kanya", | ||
| "lang": "th-TH", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Kanya" | ||
| }, | ||
| { | ||
| "name": "Karen", | ||
| "lang": "en-AU", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Karen" | ||
| }, | ||
| { | ||
| "name": "Kathy", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Kathy" | ||
| }, | ||
| { | ||
| "name": "Kyoko", | ||
| "lang": "ja-JP", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Kyoko" | ||
| }, | ||
| { | ||
| "name": "Lana", | ||
| "lang": "hr-HR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Lana" | ||
| }, | ||
| { | ||
| "name": "Laura", | ||
| "lang": "sk-SK", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Laura" | ||
| }, | ||
| { | ||
| "name": "Lekha", | ||
| "lang": "hi-IN", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Lekha" | ||
| }, | ||
| { | ||
| "name": "Lesya", | ||
| "lang": "uk-UA", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Lesya" | ||
| }, | ||
| { | ||
| "name": "Linh", | ||
| "lang": "vi-VN", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Linh" | ||
| }, | ||
| { | ||
| "name": "Luciana", | ||
| "lang": "pt-BR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Luciana" | ||
| }, | ||
| { | ||
| "name": "Majed", | ||
| "lang": "ar-001", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Majed" | ||
| }, | ||
| { | ||
| "name": "Meijia", | ||
| "lang": "zh-TW", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Meijia" | ||
| }, | ||
| { | ||
| "name": "Melina", | ||
| "lang": "el-GR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Melina" | ||
| }, | ||
| { | ||
| "name": "Milena", | ||
| "lang": "ru-RU", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Milena" | ||
| }, | ||
| { | ||
| "name": "Moira", | ||
| "lang": "en-IE", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Moira" | ||
| }, | ||
| { | ||
| "name": "Montse", | ||
| "lang": "ca-ES", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Montse" | ||
| }, | ||
| { | ||
| "name": "Mónica", | ||
| "lang": "es-ES", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Mónica" | ||
| }, | ||
| { | ||
| "name": "Nora", | ||
| "lang": "nb-NO", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Nora" | ||
| }, | ||
| { | ||
| "name": "Organ", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Organ" | ||
| }, | ||
| { | ||
| "name": "Paulina", | ||
| "lang": "es-MX", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Paulina" | ||
| }, | ||
| { | ||
| "name": "Piya", | ||
| "lang": "bn-IN", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Piya" | ||
| }, | ||
| { | ||
| "name": "Ralph", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Ralph" | ||
| }, | ||
| { | ||
| "name": "Reed (English (United States))", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Reed (English (United States))" | ||
| }, | ||
| { | ||
| "name": "Reed (English (United Kingdom))", | ||
| "lang": "en-GB", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Reed (English (United Kingdom))" | ||
| }, | ||
| { | ||
| "name": "Reed (Chinese (China mainland))", | ||
| "lang": "zh-CN", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Reed (Chinese (China mainland))" | ||
| }, | ||
| { | ||
| "name": "Reed (Chinese (Taiwan))", | ||
| "lang": "zh-TW", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Reed (Chinese (Taiwan))" | ||
| }, | ||
| { | ||
| "name": "Reed (German (Germany))", | ||
| "lang": "de-DE", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Reed (German (Germany))" | ||
| }, | ||
| { | ||
| "name": "Reed (Spanish (Spain))", | ||
| "lang": "es-ES", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Reed (Spanish (Spain))" | ||
| }, | ||
| { | ||
| "name": "Reed (Spanish (Mexico))", | ||
| "lang": "es-MX", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Reed (Spanish (Mexico))" | ||
| }, | ||
| { | ||
| "name": "Reed (Finnish (Finland))", | ||
| "lang": "fi-FI", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Reed (Finnish (Finland))" | ||
| }, | ||
| { | ||
| "name": "Reed (French (Canada))", | ||
| "lang": "fr-CA", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Reed (French (Canada))" | ||
| }, | ||
| { | ||
| "name": "Reed (Italian (Italy))", | ||
| "lang": "it-IT", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Reed (Italian (Italy))" | ||
| }, | ||
| { | ||
| "name": "Reed (Japanese (Japan))", | ||
| "lang": "ja-JP", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Reed (Japanese (Japan))" | ||
| }, | ||
| { | ||
| "name": "Reed (Korean (South Korea))", | ||
| "lang": "ko-KR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Reed (Korean (South Korea))" | ||
| }, | ||
| { | ||
| "name": "Reed (Portuguese (Brazil))", | ||
| "lang": "pt-BR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Reed (Portuguese (Brazil))" | ||
| }, | ||
| { | ||
| "name": "Rishi", | ||
| "lang": "en-IN", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Rishi" | ||
| }, | ||
| { | ||
| "name": "Rocko (English (United States))", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Rocko (English (United States))" | ||
| }, | ||
| { | ||
| "name": "Rocko (English (United Kingdom))", | ||
| "lang": "en-GB", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Rocko (English (United Kingdom))" | ||
| }, | ||
| { | ||
| "name": "Rocko (Chinese (China mainland))", | ||
| "lang": "zh-CN", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Rocko (Chinese (China mainland))" | ||
| }, | ||
| { | ||
| "name": "Rocko (Chinese (Taiwan))", | ||
| "lang": "zh-TW", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Rocko (Chinese (Taiwan))" | ||
| }, | ||
| { | ||
| "name": "Rocko (German (Germany))", | ||
| "lang": "de-DE", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Rocko (German (Germany))" | ||
| }, | ||
| { | ||
| "name": "Rocko (Spanish (Spain))", | ||
| "lang": "es-ES", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Rocko (Spanish (Spain))" | ||
| }, | ||
| { | ||
| "name": "Rocko (Spanish (Mexico))", | ||
| "lang": "es-MX", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Rocko (Spanish (Mexico))" | ||
| }, | ||
| { | ||
| "name": "Rocko (Finnish (Finland))", | ||
| "lang": "fi-FI", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Rocko (Finnish (Finland))" | ||
| }, | ||
| { | ||
| "name": "Rocko (French (Canada))", | ||
| "lang": "fr-CA", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Rocko (French (Canada))" | ||
| }, | ||
| { | ||
| "name": "Rocko (French (France))", | ||
| "lang": "fr-FR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Rocko (French (France))" | ||
| }, | ||
| { | ||
| "name": "Rocko (Italian (Italy))", | ||
| "lang": "it-IT", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Rocko (Italian (Italy))" | ||
| }, | ||
| { | ||
| "name": "Rocko (Japanese (Japan))", | ||
| "lang": "ja-JP", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Rocko (Japanese (Japan))" | ||
| }, | ||
| { | ||
| "name": "Rocko (Korean (South Korea))", | ||
| "lang": "ko-KR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Rocko (Korean (South Korea))" | ||
| }, | ||
| { | ||
| "name": "Rocko (Portuguese (Brazil))", | ||
| "lang": "pt-BR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Rocko (Portuguese (Brazil))" | ||
| }, | ||
| { | ||
| "name": "Sandy (English (United States))", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Sandy (English (United States))" | ||
| }, | ||
| { | ||
| "name": "Sandy (English (United Kingdom))", | ||
| "lang": "en-GB", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Sandy (English (United Kingdom))" | ||
| }, | ||
| { | ||
| "name": "Sandy (Chinese (China mainland))", | ||
| "lang": "zh-CN", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Sandy (Chinese (China mainland))" | ||
| }, | ||
| { | ||
| "name": "Sandy (Chinese (Taiwan))", | ||
| "lang": "zh-TW", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Sandy (Chinese (Taiwan))" | ||
| }, | ||
| { | ||
| "name": "Sandy (German (Germany))", | ||
| "lang": "de-DE", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Sandy (German (Germany))" | ||
| }, | ||
| { | ||
| "name": "Sandy (Spanish (Spain))", | ||
| "lang": "es-ES", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Sandy (Spanish (Spain))" | ||
| }, | ||
| { | ||
| "name": "Sandy (Spanish (Mexico))", | ||
| "lang": "es-MX", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Sandy (Spanish (Mexico))" | ||
| }, | ||
| { | ||
| "name": "Sandy (Finnish (Finland))", | ||
| "lang": "fi-FI", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Sandy (Finnish (Finland))" | ||
| }, | ||
| { | ||
| "name": "Sandy (French (Canada))", | ||
| "lang": "fr-CA", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Sandy (French (Canada))" | ||
| }, | ||
| { | ||
| "name": "Sandy (French (France))", | ||
| "lang": "fr-FR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Sandy (French (France))" | ||
| }, | ||
| { | ||
| "name": "Sandy (Italian (Italy))", | ||
| "lang": "it-IT", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Sandy (Italian (Italy))" | ||
| }, | ||
| { | ||
| "name": "Sandy (Japanese (Japan))", | ||
| "lang": "ja-JP", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Sandy (Japanese (Japan))" | ||
| }, | ||
| { | ||
| "name": "Sandy (Korean (South Korea))", | ||
| "lang": "ko-KR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Sandy (Korean (South Korea))" | ||
| }, | ||
| { | ||
| "name": "Sandy (Portuguese (Brazil))", | ||
| "lang": "pt-BR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Sandy (Portuguese (Brazil))" | ||
| }, | ||
| { | ||
| "name": "Sara", | ||
| "lang": "da-DK", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Sara" | ||
| }, | ||
| { | ||
| "name": "Satu", | ||
| "lang": "fi-FI", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Satu" | ||
| }, | ||
| { | ||
| "name": "Shelley (English (United States))", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Shelley (English (United States))" | ||
| }, | ||
| { | ||
| "name": "Shelley (English (United Kingdom))", | ||
| "lang": "en-GB", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Shelley (English (United Kingdom))" | ||
| }, | ||
| { | ||
| "name": "Shelley (Chinese (China mainland))", | ||
| "lang": "zh-CN", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Shelley (Chinese (China mainland))" | ||
| }, | ||
| { | ||
| "name": "Shelley (Chinese (Taiwan))", | ||
| "lang": "zh-TW", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Shelley (Chinese (Taiwan))" | ||
| }, | ||
| { | ||
| "name": "Shelley (German (Germany))", | ||
| "lang": "de-DE", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Shelley (German (Germany))" | ||
| }, | ||
| { | ||
| "name": "Shelley (Spanish (Spain))", | ||
| "lang": "es-ES", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Shelley (Spanish (Spain))" | ||
| }, | ||
| { | ||
| "name": "Shelley (Spanish (Mexico))", | ||
| "lang": "es-MX", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Shelley (Spanish (Mexico))" | ||
| }, | ||
| { | ||
| "name": "Shelley (Finnish (Finland))", | ||
| "lang": "fi-FI", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Shelley (Finnish (Finland))" | ||
| }, | ||
| { | ||
| "name": "Shelley (French (Canada))", | ||
| "lang": "fr-CA", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Shelley (French (Canada))" | ||
| }, | ||
| { | ||
| "name": "Shelley (French (France))", | ||
| "lang": "fr-FR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Shelley (French (France))" | ||
| }, | ||
| { | ||
| "name": "Shelley (Italian (Italy))", | ||
| "lang": "it-IT", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Shelley (Italian (Italy))" | ||
| }, | ||
| { | ||
| "name": "Shelley (Japanese (Japan))", | ||
| "lang": "ja-JP", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Shelley (Japanese (Japan))" | ||
| }, | ||
| { | ||
| "name": "Shelley (Korean (South Korea))", | ||
| "lang": "ko-KR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Shelley (Korean (South Korea))" | ||
| }, | ||
| { | ||
| "name": "Shelley (Portuguese (Brazil))", | ||
| "lang": "pt-BR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Shelley (Portuguese (Brazil))" | ||
| }, | ||
| { | ||
| "name": "Sinji", | ||
| "lang": "yue-HK", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Sinji" | ||
| }, | ||
| { | ||
| "name": "Soumya", | ||
| "lang": "kn-IN", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Soumya" | ||
| }, | ||
| { | ||
| "name": "Superstar", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Superstar" | ||
| }, | ||
| { | ||
| "name": "Tessa", | ||
| "lang": "en-ZA", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Tessa" | ||
| }, | ||
| { | ||
| "name": "Thomas", | ||
| "lang": "fr-FR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Thomas" | ||
| }, | ||
| { | ||
| "name": "Tina", | ||
| "lang": "sl-SI", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Tina" | ||
| }, | ||
| { | ||
| "name": "Tingting", | ||
| "lang": "zh-CN", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Tingting" | ||
| }, | ||
| { | ||
| "name": "Trinoids", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Trinoids" | ||
| }, | ||
| { | ||
| "name": "Tünde", | ||
| "lang": "hu-HU", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Tünde" | ||
| }, | ||
| { | ||
| "name": "Vani", | ||
| "lang": "ta-IN", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Vani" | ||
| }, | ||
| { | ||
| "name": "Whisper", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Whisper" | ||
| }, | ||
| { | ||
| "name": "Wobble", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Wobble" | ||
| }, | ||
| { | ||
| "name": "Xander", | ||
| "lang": "nl-NL", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Xander" | ||
| }, | ||
| { | ||
| "name": "Yelda", | ||
| "lang": "tr-TR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Yelda" | ||
| }, | ||
| { | ||
| "name": "Yuna", | ||
| "lang": "ko-KR", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Yuna" | ||
| }, | ||
| { | ||
| "name": "Zarvox", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Zarvox" | ||
| }, | ||
| { | ||
| "name": "Zosia", | ||
| "lang": "pl-PL", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Zosia" | ||
| }, | ||
| { | ||
| "name": "Zuzana", | ||
| "lang": "cs-CZ", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Zuzana" | ||
| }, | ||
| { | ||
| "name": "Google Deutsch", | ||
| "lang": "de-DE", | ||
| "localService": false, | ||
| "default": false, | ||
| "voiceURI": "Google Deutsch" | ||
| }, | ||
| { | ||
| "name": "Google US English", | ||
| "lang": "en-US", | ||
| "localService": false, | ||
| "default": false, | ||
| "voiceURI": "Google US English" | ||
| }, | ||
| { | ||
| "name": "Google UK English Female", | ||
| "lang": "en-GB", | ||
| "localService": false, | ||
| "default": false, | ||
| "voiceURI": "Google UK English Female" | ||
| }, | ||
| { | ||
| "name": "Google UK English Male", | ||
| "lang": "en-GB", | ||
| "localService": false, | ||
| "default": false, | ||
| "voiceURI": "Google UK English Male" | ||
| }, | ||
| { | ||
| "name": "Google español", | ||
| "lang": "es-ES", | ||
| "localService": false, | ||
| "default": false, | ||
| "voiceURI": "Google español" | ||
| }, | ||
| { | ||
| "name": "Google español de Estados Unidos", | ||
| "lang": "es-US", | ||
| "localService": false, | ||
| "default": false, | ||
| "voiceURI": "Google español de Estados Unidos" | ||
| }, | ||
| { | ||
| "name": "Google français", | ||
| "lang": "fr-FR", | ||
| "localService": false, | ||
| "default": false, | ||
| "voiceURI": "Google français" | ||
| }, | ||
| { | ||
| "name": "Google हिन्दी", | ||
| "lang": "hi-IN", | ||
| "localService": false, | ||
| "default": false, | ||
| "voiceURI": "Google हिन्दी" | ||
| }, | ||
| { | ||
| "name": "Google Bahasa Indonesia", | ||
| "lang": "id-ID", | ||
| "localService": false, | ||
| "default": false, | ||
| "voiceURI": "Google Bahasa Indonesia" | ||
| }, | ||
| { | ||
| "name": "Google italiano", | ||
| "lang": "it-IT", | ||
| "localService": false, | ||
| "default": false, | ||
| "voiceURI": "Google italiano" | ||
| }, | ||
| { | ||
| "name": "Google 日本語", | ||
| "lang": "ja-JP", | ||
| "localService": false, | ||
| "default": false, | ||
| "voiceURI": "Google 日本語" | ||
| }, | ||
| { | ||
| "name": "Google 한국의", | ||
| "lang": "ko-KR", | ||
| "localService": false, | ||
| "default": false, | ||
| "voiceURI": "Google 한국의" | ||
| }, | ||
| { | ||
| "name": "Google Nederlands", | ||
| "lang": "nl-NL", | ||
| "localService": false, | ||
| "default": false, | ||
| "voiceURI": "Google Nederlands" | ||
| }, | ||
| { | ||
| "name": "Google polski", | ||
| "lang": "pl-PL", | ||
| "localService": false, | ||
| "default": false, | ||
| "voiceURI": "Google polski" | ||
| }, | ||
| { | ||
| "name": "Google português do Brasil", | ||
| "lang": "pt-BR", | ||
| "localService": false, | ||
| "default": false, | ||
| "voiceURI": "Google português do Brasil" | ||
| }, | ||
| { | ||
| "name": "Google русский", | ||
| "lang": "ru-RU", | ||
| "localService": false, | ||
| "default": false, | ||
| "voiceURI": "Google русский" | ||
| }, | ||
| { | ||
| "name": "Google 普通话(中国大陆)", | ||
| "lang": "zh-CN", | ||
| "localService": false, | ||
| "default": false, | ||
| "voiceURI": "Google 普通话(中国大陆)" | ||
| }, | ||
| { | ||
| "name": "Google 粤語(香港)", | ||
| "lang": "zh-HK", | ||
| "localService": false, | ||
| "default": false, | ||
| "voiceURI": "Google 粤語(香港)" | ||
| }, | ||
| { | ||
| "name": "Google 國語(臺灣)", | ||
| "lang": "zh-TW", | ||
| "localService": false, | ||
| "default": false, | ||
| "voiceURI": "Google 國語(臺灣)" | ||
| } | ||
| ], | ||
| "voiceCount": 199, | ||
| "localVoices": 180, | ||
| "remoteVoices": 19, | ||
| "languages": [ | ||
| "en-US", | ||
| "it-IT", | ||
| "sv-SE", | ||
| "fr-CA", | ||
| "ms-MY", | ||
| "de-DE", | ||
| "he-IL", | ||
| "id-ID", | ||
| "en-GB", | ||
| "bg-BG", | ||
| "zh-CN", | ||
| "zh-TW", | ||
| "es-ES", | ||
| "es-MX", | ||
| "fi-FI", | ||
| "fr-FR", | ||
| "ja-JP", | ||
| "ko-KR", | ||
| "pt-BR", | ||
| "nl-BE", | ||
| "te-IN", | ||
| "ro-RO", | ||
| "pt-PT", | ||
| "th-TH", | ||
| "en-AU", | ||
| "hr-HR", | ||
| "sk-SK", | ||
| "hi-IN", | ||
| "uk-UA", | ||
| "vi-VN", | ||
| "ar-001", | ||
| "el-GR", | ||
| "ru-RU", | ||
| "en-IE", | ||
| "ca-ES", | ||
| "nb-NO", | ||
| "bn-IN", | ||
| "en-IN", | ||
| "da-DK", | ||
| "yue-HK", | ||
| "kn-IN", | ||
| "en-ZA", | ||
| "sl-SI", | ||
| "hu-HU", | ||
| "ta-IN", | ||
| "nl-NL", | ||
| "tr-TR", | ||
| "pl-PL", | ||
| "cs-CZ", | ||
| "es-US", | ||
| "zh-HK" | ||
| ] | ||
| }, | ||
| "mediaDevices": { | ||
| "devices": [ | ||
| { | ||
| "deviceId": "", | ||
| "kind": "audioinput", | ||
| "label": "", | ||
| "groupId": "" | ||
| }, | ||
| { | ||
| "deviceId": "", | ||
| "kind": "videoinput", | ||
| "label": "", | ||
| "groupId": "" | ||
| }, | ||
| { | ||
| "deviceId": "", | ||
| "kind": "audiooutput", | ||
| "label": "", | ||
| "groupId": "" | ||
| } | ||
| ], | ||
| "deviceCount": 3, | ||
| "audioinput": 1, | ||
| "audiooutput": 1, | ||
| "videoinput": 1, | ||
| "supportedConstraints": { | ||
| "aspectRatio": true, | ||
| "autoGainControl": true, | ||
| "brightness": true, | ||
| "channelCount": true, | ||
| "colorTemperature": true, | ||
| "contrast": true, | ||
| "deviceId": true, | ||
| "displaySurface": true, | ||
| "echoCancellation": true, | ||
| "exposureCompensation": true, | ||
| "exposureMode": true, | ||
| "exposureTime": true, | ||
| "facingMode": true, | ||
| "focusDistance": true, | ||
| "focusMode": true, | ||
| "frameRate": true, | ||
| "groupId": true, | ||
| "height": true, | ||
| "iso": true, | ||
| "latency": true, | ||
| "noiseSuppression": true, | ||
| "pan": true, | ||
| "pointsOfInterest": true, | ||
| "resizeMode": true, | ||
| "restrictOwnAudio": true, | ||
| "sampleRate": true, | ||
| "sampleSize": true, | ||
| "saturation": true, | ||
| "sharpness": true, | ||
| "suppressLocalAudioPlayback": true, | ||
| "tilt": true, | ||
| "torch": true, | ||
| "voiceIsolation": true, | ||
| "whiteBalanceMode": true, | ||
| "width": true, | ||
| "zoom": true | ||
| } | ||
| }, | ||
| "audio": { | ||
| "sampleRate": 48000, | ||
| "state": "suspended", | ||
| "baseLatency": 0.005333333333333333, | ||
| "outputLatency": 0, | ||
| "maxChannelCount": 2, | ||
| "numberOfInputs": 1, | ||
| "numberOfOutputs": 0, | ||
| "channelCount": 2, | ||
| "channelCountMode": "explicit", | ||
| "channelInterpretation": "speakers", | ||
| "audioHash": "124.04347624466754", | ||
| "sampleValues": [ | ||
| -0.10808053612709045, | ||
| -0.3909117877483368, | ||
| -0.005692681297659874, | ||
| 0.3892313539981842, | ||
| 0.1189708411693573, | ||
| -0.3545846939086914, | ||
| -0.22215834259986877, | ||
| 0.28990939259529114, | ||
| 0.30651888251304626, | ||
| -0.20068734884262085 | ||
| ] | ||
| }, | ||
| "webgpu": { | ||
| "supported": true, | ||
| "features": [ | ||
| "depth32float-stencil8", | ||
| "rg11b10ufloat-renderable", | ||
| "texture-formats-tier1", | ||
| "bgra8unorm-storage", | ||
| "texture-compression-bc", | ||
| "dual-source-blending", | ||
| "core-features-and-limits", | ||
| "float32-filterable", | ||
| "indirect-first-instance", | ||
| "texture-compression-astc-sliced-3d", | ||
| "float32-blendable", | ||
| "texture-compression-astc", | ||
| "texture-compression-etc2", | ||
| "depth-clip-control", | ||
| "texture-compression-bc-sliced-3d", | ||
| "clip-distances", | ||
| "shader-f16", | ||
| "timestamp-query", | ||
| "texture-formats-tier2", | ||
| "primitive-index", | ||
| "texture-component-swizzle", | ||
| "subgroups" | ||
| ], | ||
| "info": { | ||
| "vendor": "apple", | ||
| "architecture": "metal-3", | ||
| "device": "", | ||
| "description": "" | ||
| } | ||
| }, | ||
| "webgl": { | ||
| "version": "WebGL 2.0 (OpenGL ES 3.0 Chromium)", | ||
| "shadingLanguageVersion": "WebGL GLSL ES 3.00 (OpenGL ES GLSL ES 3.0 Chromium)", | ||
| "vendor": "WebKit", | ||
| "renderer": "WebKit WebGL", | ||
| "unmaskedVendor": "Google Inc. (Apple)", | ||
| "unmaskedRenderer": "ANGLE (Apple, ANGLE Metal Renderer: Apple M4, Unspecified Version)", | ||
| "extensions": [ | ||
| "EXT_clip_control", | ||
| "EXT_color_buffer_float", | ||
| "EXT_color_buffer_half_float", | ||
| "EXT_conservative_depth", | ||
| "EXT_depth_clamp", | ||
| "EXT_disjoint_timer_query_webgl2", | ||
| "EXT_float_blend", | ||
| "EXT_polygon_offset_clamp", | ||
| "EXT_render_snorm", | ||
| "EXT_texture_compression_bptc", | ||
| "EXT_texture_compression_rgtc", | ||
| "EXT_texture_filter_anisotropic", | ||
| "EXT_texture_mirror_clamp_to_edge", | ||
| "EXT_texture_norm16", | ||
| "KHR_parallel_shader_compile", | ||
| "NV_shader_noperspective_interpolation", | ||
| "OES_draw_buffers_indexed", | ||
| "OES_sample_variables", | ||
| "OES_shader_multisample_interpolation", | ||
| "OES_texture_float_linear", | ||
| "WEBGL_blend_func_extended", | ||
| "WEBGL_clip_cull_distance", | ||
| "WEBGL_compressed_texture_astc", | ||
| "WEBGL_compressed_texture_etc", | ||
| "WEBGL_compressed_texture_etc1", | ||
| "WEBGL_compressed_texture_pvrtc", | ||
| "WEBGL_compressed_texture_s3tc", | ||
| "WEBGL_compressed_texture_s3tc_srgb", | ||
| "WEBGL_debug_renderer_info", | ||
| "WEBGL_debug_shaders", | ||
| "WEBGL_lose_context", | ||
| "WEBGL_multi_draw", | ||
| "WEBGL_polygon_mode", | ||
| "WEBGL_provoking_vertex", | ||
| "WEBGL_render_shared_exponent", | ||
| "WEBGL_stencil_texturing" | ||
| ], | ||
| "extensionCount": 36, | ||
| "maxTextureSize": 16384, | ||
| "maxViewportDims": [ | ||
| 16384, | ||
| 16384 | ||
| ], | ||
| "maxRenderbufferSize": 16384, | ||
| "maxCombinedTextureImageUnits": 32, | ||
| "maxCubeMapTextureSize": 16384, | ||
| "maxFragmentUniformVectors": 1024, | ||
| "maxTextureImageUnits": 16, | ||
| "maxVertexAttribs": 16, | ||
| "maxVertexTextureImageUnits": 16, | ||
| "maxVertexUniformVectors": 1024, | ||
| "maxVaryingVectors": 30, | ||
| "aliasedLineWidthRange": [ | ||
| 1, | ||
| 1 | ||
| ], | ||
| "aliasedPointSizeRange": [ | ||
| 1, | ||
| 511 | ||
| ], | ||
| "maxAnisotropy": 16, | ||
| "precisionFormats": { | ||
| "vertex_lowFloat": { | ||
| "rangeMin": 127, | ||
| "rangeMax": 127, | ||
| "precision": 23 | ||
| }, | ||
| "vertex_medFloat": { | ||
| "rangeMin": 127, | ||
| "rangeMax": 127, | ||
| "precision": 23 | ||
| }, | ||
| "vertex_highFloat": { | ||
| "rangeMin": 127, | ||
| "rangeMax": 127, | ||
| "precision": 23 | ||
| }, | ||
| "vertex_lowInt": { | ||
| "rangeMin": 31, | ||
| "rangeMax": 30, | ||
| "precision": 0 | ||
| }, | ||
| "vertex_medInt": { | ||
| "rangeMin": 31, | ||
| "rangeMax": 30, | ||
| "precision": 0 | ||
| }, | ||
| "vertex_highInt": { | ||
| "rangeMin": 31, | ||
| "rangeMax": 30, | ||
| "precision": 0 | ||
| }, | ||
| "fragment_lowFloat": { | ||
| "rangeMin": 127, | ||
| "rangeMax": 127, | ||
| "precision": 23 | ||
| }, | ||
| "fragment_medFloat": { | ||
| "rangeMin": 127, | ||
| "rangeMax": 127, | ||
| "precision": 23 | ||
| }, | ||
| "fragment_highFloat": { | ||
| "rangeMin": 127, | ||
| "rangeMax": 127, | ||
| "precision": 23 | ||
| }, | ||
| "fragment_lowInt": { | ||
| "rangeMin": 31, | ||
| "rangeMax": 30, | ||
| "precision": 0 | ||
| }, | ||
| "fragment_medInt": { | ||
| "rangeMin": 31, | ||
| "rangeMax": 30, | ||
| "precision": 0 | ||
| }, | ||
| "fragment_highInt": { | ||
| "rangeMin": 31, | ||
| "rangeMax": 30, | ||
| "precision": 0 | ||
| } | ||
| } | ||
| }, | ||
| "canvas": { | ||
| "consistent": true, | ||
| "hash": "743CC003", | ||
| "dataUrlLength": 25858, | ||
| "dataUrlPrefix": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwA", | ||
| "webpSupport": true, | ||
| "jpegHighLength": 26851, | ||
| "jpegLowLength": 2347 | ||
| }, | ||
| "screen": { | ||
| "width": 1470, | ||
| "height": 956, | ||
| "availWidth": 1470, | ||
| "availHeight": 861, | ||
| "colorDepth": 30, | ||
| "pixelDepth": 30, | ||
| "innerWidth": 1470, | ||
| "innerHeight": 738, | ||
| "outerWidth": 1470, | ||
| "outerHeight": 859, | ||
| "screenX": 0, | ||
| "screenY": 33, | ||
| "pageXOffset": 0, | ||
| "pageYOffset": 0, | ||
| "devicePixelRatio": 2, | ||
| "orientation": { | ||
| "type": "landscape-primary", | ||
| "angle": 0 | ||
| }, | ||
| "mediaQueries": { | ||
| "prefers-color-scheme": "dark", | ||
| "prefers-reduced-motion": "no-preference", | ||
| "prefers-contrast": "no-preference", | ||
| "forced-colors": "none", | ||
| "prefers-reduced-transparency": "no-preference", | ||
| "color-gamut": "srgb", | ||
| "pointer": "fine", | ||
| "hover": "hover", | ||
| "any-pointer": "fine", | ||
| "any-hover": "hover", | ||
| "display-mode": "browser", | ||
| "dynamic-range": "standard", | ||
| "update": "fast", | ||
| "overflow-block": "scroll", | ||
| "overflow-inline": "scroll", | ||
| "min-resolution": "192dpi", | ||
| "min-color": "8", | ||
| "monochrome": false | ||
| }, | ||
| "visualViewport": { | ||
| "width": 1459, | ||
| "height": 738, | ||
| "offsetLeft": 0, | ||
| "offsetTop": 0, | ||
| "pageLeft": 0, | ||
| "pageTop": 0, | ||
| "scale": 1 | ||
| } | ||
| }, | ||
| "navigator": { | ||
| "secureContext": true, | ||
| "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36", | ||
| "platform": "MacIntel", | ||
| "vendor": "Google Inc.", | ||
| "vendorSub": "", | ||
| "product": "Gecko", | ||
| "productSub": "20030107", | ||
| "appVersion": "5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36", | ||
| "appName": "Netscape", | ||
| "appCodeName": "Mozilla", | ||
| "language": "en-US", | ||
| "languages": [ | ||
| "en-US", | ||
| "en", | ||
| "id" | ||
| ], | ||
| "cookieEnabled": true, | ||
| "doNotTrack": null, | ||
| "maxTouchPoints": 0, | ||
| "hardwareConcurrency": 10, | ||
| "deviceMemory": 8, | ||
| "pdfViewerEnabled": true, | ||
| "webdriver": false, | ||
| "connection": { | ||
| "effectiveType": "4g", | ||
| "downlink": 10, | ||
| "rtt": 50, | ||
| "saveData": false | ||
| }, | ||
| "plugins": [ | ||
| { | ||
| "name": "PDF Viewer", | ||
| "filename": "internal-pdf-viewer", | ||
| "description": "Portable Document Format" | ||
| }, | ||
| { | ||
| "name": "Chrome PDF Viewer", | ||
| "filename": "internal-pdf-viewer", | ||
| "description": "Portable Document Format" | ||
| }, | ||
| { | ||
| "name": "Chromium PDF Viewer", | ||
| "filename": "internal-pdf-viewer", | ||
| "description": "Portable Document Format" | ||
| }, | ||
| { | ||
| "name": "Microsoft Edge PDF Viewer", | ||
| "filename": "internal-pdf-viewer", | ||
| "description": "Portable Document Format" | ||
| }, | ||
| { | ||
| "name": "WebKit built-in PDF", | ||
| "filename": "internal-pdf-viewer", | ||
| "description": "Portable Document Format" | ||
| } | ||
| ], | ||
| "pluginCount": 5, | ||
| "mimeTypes": [ | ||
| "application/pdf", | ||
| "text/pdf" | ||
| ], | ||
| "userAgentData": { | ||
| "brands": [ | ||
| { | ||
| "brand": "Chromium", | ||
| "version": "146" | ||
| }, | ||
| { | ||
| "brand": "Not-A.Brand", | ||
| "version": "24" | ||
| }, | ||
| { | ||
| "brand": "Google Chrome", | ||
| "version": "146" | ||
| } | ||
| ], | ||
| "mobile": false, | ||
| "platform": "macOS" | ||
| }, | ||
| "userAgentDataHighEntropy": { | ||
| "architecture": "arm", | ||
| "bitness": "64", | ||
| "brands": [ | ||
| { | ||
| "brand": "Chromium", | ||
| "version": "146" | ||
| }, | ||
| { | ||
| "brand": "Not-A.Brand", | ||
| "version": "24" | ||
| }, | ||
| { | ||
| "brand": "Google Chrome", | ||
| "version": "146" | ||
| } | ||
| ], | ||
| "fullVersionList": [ | ||
| { | ||
| "brand": "Chromium", | ||
| "version": "146.0.7680.165" | ||
| }, | ||
| { | ||
| "brand": "Not-A.Brand", | ||
| "version": "24.0.0.0" | ||
| }, | ||
| { | ||
| "brand": "Google Chrome", | ||
| "version": "146.0.7680.165" | ||
| } | ||
| ], | ||
| "mobile": false, | ||
| "model": "", | ||
| "platform": "macOS", | ||
| "platformVersion": "26.3.1", | ||
| "wow64": false | ||
| }, | ||
| "permissions": { | ||
| "geolocation": "prompt", | ||
| "notifications": "prompt", | ||
| "camera": "prompt", | ||
| "microphone": "prompt", | ||
| "accelerometer": "granted", | ||
| "gyroscope": "granted", | ||
| "magnetometer": "granted", | ||
| "clipboard-read": "prompt", | ||
| "clipboard-write": "granted" | ||
| }, | ||
| "storageEstimate": { | ||
| "quota": 10737418240, | ||
| "usage": 0 | ||
| }, | ||
| "bluetooth": true, | ||
| "usb": true, | ||
| "serial": true, | ||
| "hid": true, | ||
| "xr": true, | ||
| "gpu": true, | ||
| "ink": true, | ||
| "scheduling": true, | ||
| "windowControlsOverlay": true, | ||
| "virtualKeyboard": true | ||
| }, | ||
| "__meta": { | ||
| "capturedAt": "2026-05-04T13:52:23.353Z", | ||
| "elapsedMs": 0, | ||
| "href": "http://wrkx.app/api/visitors/OtCiCTddayiF0se5kzF0", | ||
| "readyState": "complete" | ||
| } | ||
| } |
| { | ||
| "version": "1", | ||
| "profile": "mac-chrome-stable", | ||
| "paths": [ | ||
| { | ||
| "path": "audio.**", | ||
| "comment": "Audio fingerprint bytes (sampleValues, audioHash) require precomputed per-(profile, sample-rate) byte tables — task 0071. docs/limits.md \"Audio fingerprinting (OfflineAudioContext) is NOT spoofed at v0.3\" carried over to v0.7 phase split." | ||
| }, | ||
| { | ||
| "path": "canvas.**", | ||
| "comment": "Canvas hash + dataUrl spoofing requires precomputed hash maps for the standard probe payloads + per-pixel noise injection — task 0071. docs/limits.md \"Canvas fingerprinting (HTMLCanvasElement.toDataURL) is NOT spoofed at v0.3\" carried over to v0.7 phase split." | ||
| }, | ||
| { | ||
| "path": "speech.**", | ||
| "comment": "speechSynthesis.getVoices() returns the host's installed system voices on real Chrome (typically 200+ entries on macOS, 20+ on Linux/Win). Chromium-for-Testing ships with no voice tables, so mochi spoofs voices=[]. Restoring real-device voice lists is a phase 0.7 deliverable (precomputed voice tables per-OS) tracked alongside audio/canvas. PLAN.md §13.6." | ||
| }, | ||
| { | ||
| "path": "navigator.userAgentData.brands", | ||
| "comment": "Brand-list length varies (Linux Chrome emits 2 brands, macOS/Win emit 3). Same root cause as the per-entry comment below." | ||
| }, | ||
| { | ||
| "path": "navigator.userAgentData.brands[*]", | ||
| "comment": "Per-entry full-object mismatch when length differs." | ||
| }, | ||
| { | ||
| "path": "navigator.userAgentData.brands[*].**", | ||
| "comment": "Sec-CH-UA brand-list ordering and GREASE label vary between Chrome/Edge majors and even between Chrome point releases (e.g. 146 emits `Not-A.Brand;v=24` while 147 emits `Not.A/Brand;v=8`). mochi pins a single GREASE label per major (consistency/rules/lookups/browser.ts) for determinism — see tasks/0051-consistency-stack-fixes.md (Group B). Per-major GREASE shuffle is a phase 0.7 deliverable." | ||
| }, | ||
| { | ||
| "path": "navigator.userAgentDataHighEntropy.brands", | ||
| "comment": "Same as userAgentData.brands." | ||
| }, | ||
| { | ||
| "path": "navigator.userAgentDataHighEntropy.brands[*]", | ||
| "comment": "Per-entry full-object mismatch when length differs." | ||
| }, | ||
| { | ||
| "path": "navigator.userAgentDataHighEntropy.brands[*].**", | ||
| "comment": "Same as navigator.userAgentData.brands — pinned for determinism." | ||
| }, | ||
| { | ||
| "path": "navigator.userAgentDataHighEntropy.fullVersionList", | ||
| "comment": "Same as userAgentData.brands — length varies by OS." | ||
| }, | ||
| { | ||
| "path": "navigator.userAgentDataHighEntropy.fullVersionList[*]", | ||
| "comment": "Per-entry full-object mismatch when length differs." | ||
| }, | ||
| { | ||
| "path": "navigator.userAgentDataHighEntropy.fullVersionList[*].**", | ||
| "comment": "Patch-level Chrome version (e.g. 146.0.7680.165) varies with the local Chrome install vs the BROWSER_TIP_FULL_VERSION table. mochi uses the table tip when the major matches; harvested values may differ by a few patch numbers. Refresh the table per Chrome major." | ||
| }, | ||
| { | ||
| "path": "navigator.userAgent", | ||
| "comment": "Full UA string includes the patch version (see fullVersionList comment). Spoofed value matches BROWSER_TIP_FULL_VERSION; harvested value reflects the user's exact Chrome point release." | ||
| }, | ||
| { | ||
| "path": "navigator.appVersion", | ||
| "comment": "Same patch-version drift as navigator.userAgent." | ||
| }, | ||
| { | ||
| "path": "screen.mediaQueries.**", | ||
| "comment": "matchMedia() result strings depend on the host's actual OS/display state (min-resolution from real DPR, prefers-color-scheme from Dark Mode, etc.). mochi spoofs a deterministic baseline; the harvested values reflect the user's session at capture time. Per-profile media-query lock is phase 0.7." | ||
| }, | ||
| { | ||
| "path": "screen.pageXOffset", | ||
| "comment": "Window-frame chrome. Sentinelized by normalize.ts in most paths but the raw harvested value may differ from the harness window's idle offset." | ||
| }, | ||
| { | ||
| "path": "screen.pageYOffset", | ||
| "comment": "Window-frame chrome — same as pageXOffset." | ||
| }, | ||
| { | ||
| "path": "timing.dateString", | ||
| "comment": "Date.toString() includes the host's wall-clock time, which differs every run. The probe normalises to a fixed 2024-01-01 anchor; harvested values reflect the user's actual capture time." | ||
| }, | ||
| { | ||
| "path": "timing.performanceTiming", | ||
| "comment": "performance.timing.* fields vary per session (load durations, redirect counts). normalize.ts sentinelizes the bot.navigationTiming sub-block; the timing.performanceTiming block is harvester-specific and not currently sentinelized." | ||
| }, | ||
| { | ||
| "path": "timing.supportedNumberingSystems[*]", | ||
| "comment": "Intl.supportedValuesOf('numberingSystem') grows between V8 majors (e.g. Chrome 149 added 'tols'). The harvested list reflects the user's V8; the harness uses Chromium-for-Testing's V8. List drift is expected as BROWSER_TIP_FULL_VERSION advances." | ||
| }, | ||
| { | ||
| "path": "webgl.aliasedLineWidthRange[*]", | ||
| "comment": "WebGL aliasedLineWidthRange/PointSizeRange/maxViewportDims values vary with the GPU driver version on the host. mochi locks GPU vendor/renderer via the matrix; per-driver-version locking is phase 0.7." | ||
| }, | ||
| { | ||
| "path": "webgl.aliasedPointSizeRange[*]", | ||
| "comment": "See webgl.aliasedLineWidthRange." | ||
| }, | ||
| { | ||
| "path": "webgl.maxColorAttachments", | ||
| "comment": "GPU-driver dependent; see webgl.aliasedLineWidthRange." | ||
| }, | ||
| { | ||
| "path": "webgl.maxViewportDims[*]", | ||
| "comment": "GPU-driver dependent; see webgl.aliasedLineWidthRange." | ||
| }, | ||
| { | ||
| "path": "webgpu.features", | ||
| "comment": "Block absent on hosts without a WebGPU adapter." | ||
| }, | ||
| { | ||
| "path": "webgpu.features[*]", | ||
| "comment": "WebGPU feature list grows between Chromium majors. The harvested list reflects the user's Chrome version; the harness uses Chromium-for-Testing." | ||
| }, | ||
| { | ||
| "path": "webgpu.info", | ||
| "comment": "Block absent on hosts without a WebGPU adapter." | ||
| }, | ||
| { | ||
| "path": "webgpu.limits.**", | ||
| "comment": "WebGPU adapter limits depend on the GPU driver. Per-driver locking is phase 0.7 alongside WebGL." | ||
| }, | ||
| { | ||
| "path": "bot.chromeRuntime", | ||
| "comment": "Real Chrome exposes window.chrome.runtime; Chromium-for-Testing does not. Restoring chrome.runtime polyfill is task 0140 (stealth conformance) — tracked separately." | ||
| }, | ||
| { | ||
| "path": "storage.cookieCount", | ||
| "comment": "Cookie state varies per session — the harvester's user had cookies, the harness session is fresh." | ||
| }, | ||
| { | ||
| "path": "storage.cookiesWritable", | ||
| "comment": "Depends on the document context (file:// fixture vs http:// origin). Harvester captured at http(s) origin; harness uses file:// fixture." | ||
| }, | ||
| { | ||
| "path": "storage.localStorageKeys", | ||
| "comment": "localStorage state varies per session — fresh harness session has no keys." | ||
| }, | ||
| { | ||
| "path": "mouseEvent", | ||
| "comment": "The probe-page emits a mouseEvent block when the relational-lock scaffolding fires. Harvested snapshots predate this probe and so omit it; spoofed sessions emit it. Cosmetic — the lock-result block is the spoof's own diagnostic, not a fingerprint surface." | ||
| }, | ||
| { | ||
| "path": "fonts.**", | ||
| "comment": "The font enumeration probe enumerates whatever the host has installed. Spoofing the per-profile font intersection is a phase 0.7 task (FontFace API stub + per-profile font allowlist). Running e.g. windows-chrome-stable on a Mac host will surface every macOS system font as material — that's a known gap, not a profile defect." | ||
| }, | ||
| { | ||
| "path": "webgl.extensions", | ||
| "comment": "Whole array absent on no-WebGL hosts (see webgl.error)." | ||
| }, | ||
| { | ||
| "path": "webgl.extensions[*]", | ||
| "comment": "WebGL extension list depends on the host GPU + driver. mochi locks GPU vendor/renderer strings but does NOT enumerate-list-spoof extensions per-profile yet. Phase 0.7 deliverable. Cross-host validation surfaces the host's actual extension set." | ||
| }, | ||
| { | ||
| "path": "webgl.precisionFormats", | ||
| "comment": "Block absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "webgl.extensionCount", | ||
| "comment": "See webgl.extensions[*] — count varies with host extensions." | ||
| }, | ||
| { | ||
| "path": "webgl.unmaskedVendor", | ||
| "comment": "Unmasked WebGL vendor/renderer requires GPU spoofing at the ANGLE layer (or a polyfilled WEBGL_debug_renderer_info getter). mochi's getter spoof is host-OS-aware; cross-host tests surface the underlying device." | ||
| }, | ||
| { | ||
| "path": "webgl.unmaskedRenderer", | ||
| "comment": "See webgl.unmaskedVendor." | ||
| }, | ||
| { | ||
| "path": "webgpu.info.**", | ||
| "comment": "WebGPU adapter info comes from the host driver. Cross-host validation shows the host's adapter; same root cause as webgl.unmaskedRenderer." | ||
| }, | ||
| { | ||
| "path": "mediaDevices.devices[*]", | ||
| "comment": "Per-entry full-object mismatch when device-array length differs." | ||
| }, | ||
| { | ||
| "path": "mediaDevices.devices[*].**", | ||
| "comment": "navigator.mediaDevices.enumerateDevices() returns whatever audio/video devices the host has. The harness fixture runs in a fresh permission state so labels are empty (matches baseline) but the device count + kind ratio depends on the host. Per-profile media-devices spoofing is phase 0.7." | ||
| }, | ||
| { | ||
| "path": "mediaDevices.deviceCount", | ||
| "comment": "See mediaDevices.devices[*]." | ||
| }, | ||
| { | ||
| "path": "mediaDevices.audioinput", | ||
| "comment": "See mediaDevices.devices[*]." | ||
| }, | ||
| { | ||
| "path": "mediaDevices.audiooutput", | ||
| "comment": "See mediaDevices.devices[*]." | ||
| }, | ||
| { | ||
| "path": "mediaDevices.videoinput", | ||
| "comment": "See mediaDevices.devices[*]." | ||
| }, | ||
| { | ||
| "path": "navigator.connection.effectiveType", | ||
| "comment": "NetworkInformation.effectiveType reads from the host network stack. downlink/rtt are sentinelized by normalize.ts but effectiveType isn't." | ||
| }, | ||
| { | ||
| "path": "timing.timezoneOffset", | ||
| "comment": "timezoneOffset depends on whether the captured profile's tz observes DST at the harness's wall-clock time vs at capture time. The IANA timezone is spoofed correctly; the offset is a derived value with seasonal drift." | ||
| }, | ||
| { | ||
| "path": "bot.userActivation.**", | ||
| "comment": "navigator.userActivation.hasBeenActive flips to true when the harness drives mouse/keyboard events. The harvested snapshot was captured before any user gesture, so hasBeenActive=false. The spoof doesn't lie about this — it's a true reflection of the harness's interaction sequence." | ||
| }, | ||
| { | ||
| "path": "navigator.deviceMemory", | ||
| "comment": "navigator.deviceMemory is spec-capped at 8 on real Chrome, but some configurations (older Chrome, non-Chromium derivatives) leak the real GiB count. mochi enforces the spec cap deterministically; the harvested value may be higher (16/32/64) and the spoof correctly clamps to 8." | ||
| }, | ||
| { | ||
| "path": "navigator.bluetooth", | ||
| "comment": "navigator.bluetooth presence depends on the host's Web Bluetooth flag. Linux Chrome typically has it disabled by default; mochi exposes it. Per-profile API allowlist is phase 0.7." | ||
| }, | ||
| { | ||
| "path": "storage.fileSystemAccess", | ||
| "comment": "FileSystemAccess API can be hardened off (Brave) or off-by-default (Linux Chrome). mochi exposes the API by default. Per-profile feature gating is phase 0.7." | ||
| }, | ||
| { | ||
| "path": "storage.sessionStorageKeys", | ||
| "comment": "The probe page writes one sessionStorage key during its self-test; harvested baselines that ran before that probe instrumentation report 0. New captures will normalize to 1 once re-imported." | ||
| }, | ||
| { | ||
| "path": "timing.timerPrecision", | ||
| "comment": "Brave coarsens performance.now() precision; harvested Brave snapshots report null. mochi does NOT coarsen — restoring Brave's precision-coarsen behavior is a phase 0.7 deliverable." | ||
| }, | ||
| { | ||
| "path": "navigator.userAgentDataHighEntropy.platformVersion", | ||
| "comment": "platformVersion is empty on Linux Chrome (X11 has no notion of OS marketing version). The spoof emits a synthesised value; on Linux imports we accept the empty-string baseline as the source of truth." | ||
| }, | ||
| { | ||
| "path": "navigator.connection", | ||
| "comment": "Brave hardens NetworkInformation and returns an undefined connection block. mochi exposes the API. Per-profile NetworkInformation hardening is a phase 0.7 deliverable." | ||
| }, | ||
| { | ||
| "path": "webgl.error", | ||
| "comment": "Some captured devices (headless Linux, lock-screened Windows) report no WebGL context. mochi always presents a WebGL surface. Per-profile no-WebGL mode is phase 0.7." | ||
| }, | ||
| { | ||
| "path": "webgl.version", | ||
| "comment": "Empty on no-WebGL hosts (see webgl.error)." | ||
| }, | ||
| { | ||
| "path": "webgl.shadingLanguageVersion", | ||
| "comment": "Empty on no-WebGL hosts (see webgl.error)." | ||
| }, | ||
| { | ||
| "path": "webgl.vendor", | ||
| "comment": "Empty on no-WebGL hosts (see webgl.error)." | ||
| }, | ||
| { | ||
| "path": "webgl.renderer", | ||
| "comment": "Empty on no-WebGL hosts (see webgl.error)." | ||
| }, | ||
| { | ||
| "path": "webgl.aliasedLineWidthRange", | ||
| "comment": "Absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "webgl.aliasedPointSizeRange", | ||
| "comment": "Absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "webgl.maxAnisotropy", | ||
| "comment": "Absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "webgl.maxColorAttachments", | ||
| "comment": "Absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "webgl.maxCombinedTextureImageUnits", | ||
| "comment": "Absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "webgl.maxCubeMapTextureSize", | ||
| "comment": "Absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "webgl.maxFragmentUniformVectors", | ||
| "comment": "Absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "webgl.maxRenderbufferSize", | ||
| "comment": "Absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "webgl.maxTextureImageUnits", | ||
| "comment": "Absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "webgl.maxTextureSize", | ||
| "comment": "Absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "webgl.maxVaryingVectors", | ||
| "comment": "Absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "webgl.maxVertexAttribs", | ||
| "comment": "Absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "webgl.maxVertexTextureImageUnits", | ||
| "comment": "Absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "webgl.maxVertexUniformVectors", | ||
| "comment": "Absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "webgl.maxViewportDims", | ||
| "comment": "Absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "webgl.precisionFormats.**", | ||
| "comment": "Absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "mediaDevices.devices", | ||
| "comment": "Device array length varies with the host's installed devices. Per-profile media-devices spoofing is phase 0.7." | ||
| } | ||
| ] | ||
| } |
| { | ||
| "id": "mac-chrome-stable", | ||
| "version": "1.0.0", | ||
| "engine": "chromium", | ||
| "browser": { | ||
| "name": "chrome", | ||
| "channel": "stable", | ||
| "minVersion": "146", | ||
| "maxVersion": "146" | ||
| }, | ||
| "os": { | ||
| "name": "macos", | ||
| "version": "26.3.1", | ||
| "arch": "arm64" | ||
| }, | ||
| "device": { | ||
| "vendor": "apple", | ||
| "model": "Mac", | ||
| "cpuFamily": "apple-silicon-m4", | ||
| "cores": 10, | ||
| "memoryGB": 16 | ||
| }, | ||
| "display": { | ||
| "width": 1470, | ||
| "height": 956, | ||
| "dpr": 2, | ||
| "colorDepth": 30, | ||
| "pixelDepth": 30 | ||
| }, | ||
| "gpu": { | ||
| "vendor": "Apple", | ||
| "renderer": "ANGLE Metal Renderer: Apple M4", | ||
| "webglUnmaskedVendor": "Google Inc. (Apple)", | ||
| "webglUnmaskedRenderer": "ANGLE (Apple, ANGLE Metal Renderer: Apple M4, Unspecified Version)", | ||
| "webglMaxTextureSize": 16384, | ||
| "webglMaxColorAttachments": 8, | ||
| "webglExtensions": [ | ||
| "EXT_clip_control", | ||
| "EXT_color_buffer_float", | ||
| "EXT_color_buffer_half_float", | ||
| "EXT_conservative_depth", | ||
| "EXT_depth_clamp", | ||
| "EXT_disjoint_timer_query_webgl2", | ||
| "EXT_float_blend", | ||
| "EXT_polygon_offset_clamp", | ||
| "EXT_render_snorm", | ||
| "EXT_texture_compression_bptc", | ||
| "EXT_texture_compression_rgtc", | ||
| "EXT_texture_filter_anisotropic", | ||
| "EXT_texture_mirror_clamp_to_edge", | ||
| "EXT_texture_norm16", | ||
| "KHR_parallel_shader_compile", | ||
| "NV_shader_noperspective_interpolation", | ||
| "OES_draw_buffers_indexed", | ||
| "OES_sample_variables", | ||
| "OES_shader_multisample_interpolation", | ||
| "OES_texture_float_linear", | ||
| "WEBGL_blend_func_extended", | ||
| "WEBGL_clip_cull_distance", | ||
| "WEBGL_compressed_texture_astc", | ||
| "WEBGL_compressed_texture_etc", | ||
| "WEBGL_compressed_texture_etc1", | ||
| "WEBGL_compressed_texture_pvrtc", | ||
| "WEBGL_compressed_texture_s3tc", | ||
| "WEBGL_compressed_texture_s3tc_srgb", | ||
| "WEBGL_debug_renderer_info", | ||
| "WEBGL_debug_shaders", | ||
| "WEBGL_lose_context", | ||
| "WEBGL_multi_draw", | ||
| "WEBGL_polygon_mode", | ||
| "WEBGL_provoking_vertex", | ||
| "WEBGL_render_shared_exponent", | ||
| "WEBGL_stencil_texturing" | ||
| ] | ||
| }, | ||
| "audio": { | ||
| "contextSampleRate": 48000, | ||
| "audioWorkletLatency": 0.005333333333333333, | ||
| "destinationMaxChannelCount": 2 | ||
| }, | ||
| "fonts": { | ||
| "family": "macos-system-pack", | ||
| "list": [ | ||
| "American Typewriter", | ||
| "Andale Mono", | ||
| "Apple Chancery", | ||
| "Apple Color Emoji", | ||
| "Apple SD Gothic Neo", | ||
| "Arial", | ||
| "Arial Black", | ||
| "Arial Narrow", | ||
| "Avenir", | ||
| "Avenir Next", | ||
| "Baskerville", | ||
| "Big Caslon", | ||
| "Brush Script MT", | ||
| "Chalkboard", | ||
| "Chalkboard SE", | ||
| "Chalkduster", | ||
| "Cochin", | ||
| "Comic Sans MS", | ||
| "Copperplate", | ||
| "Courier", | ||
| "Courier New", | ||
| "Didot", | ||
| "Futura", | ||
| "Geneva", | ||
| "Georgia", | ||
| "Gill Sans", | ||
| "Helvetica", | ||
| "Helvetica Neue", | ||
| "Herculanum", | ||
| "Hiragino Kaku Gothic Pro", | ||
| "Hiragino Mincho Pro", | ||
| "Hiragino Sans", | ||
| "Hoefler Text", | ||
| "Impact", | ||
| "Iowan Old Style", | ||
| "Lucida Grande", | ||
| "Luminari", | ||
| "Marker Felt", | ||
| "Menlo", | ||
| "Microsoft Sans Serif", | ||
| "Monaco", | ||
| "Noteworthy", | ||
| "Optima", | ||
| "PT Sans", | ||
| "Palatino", | ||
| "Papyrus", | ||
| "Phosphate", | ||
| "Rockwell", | ||
| "STIXGeneral", | ||
| "Savoye LET", | ||
| "SignPainter", | ||
| "Skia", | ||
| "Snell Roundhand", | ||
| "Superclarendon", | ||
| "Symbol", | ||
| "System Font", | ||
| "Tahoma", | ||
| "Times New Roman", | ||
| "Trebuchet MS", | ||
| "Verdana", | ||
| "Webdings", | ||
| "Wingdings", | ||
| "Zapfino" | ||
| ] | ||
| }, | ||
| "timezone": "Asia/Jakarta", | ||
| "locale": "en-US", | ||
| "languages": [ | ||
| "en-US", | ||
| "en", | ||
| "id" | ||
| ], | ||
| "behavior": { | ||
| "hand": "right", | ||
| "tremor": 0.18, | ||
| "wpm": 60, | ||
| "scrollStyle": "smooth" | ||
| }, | ||
| "wreqPreset": "chrome_146_macos", | ||
| "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36", | ||
| "uaCh": { | ||
| "sec-ch-ua": "\"Chromium\";v=\"146\", \"Not-A.Brand\";v=\"24\", \"Google Chrome\";v=\"146\"", | ||
| "sec-ch-ua-mobile": "?0", | ||
| "sec-ch-ua-platform": "\"macOS\"", | ||
| "sec-ch-ua-platform-version": "\"26.3.1\"", | ||
| "sec-ch-ua-arch": "\"arm\"", | ||
| "sec-ch-ua-bitness": "\"64\"", | ||
| "sec-ch-ua-model": "\"\"", | ||
| "sec-ch-ua-full-version": "\"146\"", | ||
| "sec-ch-ua-os": "\"macos\"" | ||
| }, | ||
| "entropyBudget": { | ||
| "fixed": [], | ||
| "perSeed": [] | ||
| } | ||
| } |
| # PROVENANCE — mac-chrome-stable | ||
| Imported from the wrkx harvester corpus (`http://wrkx.app/api`) by `mochi profiles import`. PLAN.md §12.2 — every profile in `main` must carry verifiable provenance. | ||
| | field | value | | ||
| |---|---| | ||
| | profile id | `mac-chrome-stable` | | ||
| | upstream visitor id | `OtCiCTddayiF0se5kzF0` | | ||
| | upstream URL | `http://wrkx.app/api/visitors/OtCiCTddayiF0se5kzF0` | | ||
| | visitor egress ip (snapshot) | 182.253.251.96 | | ||
| | browser version | 146 | | ||
| | FingerprintJS suspectScore | 6 | | ||
| | captured at (UTC) | 2026-05-04T13:52:23.353Z | | ||
| | imported at (UTC) | 2026-05-08T20:50:33.447Z | | ||
| | importer | `mochi profiles import` (task 0260) | | ||
| ## Multi-snapshot policy | ||
| When the visitor record contains multiple snapshots for a single category (re-visits over time), the importer keeps the most recent by `created_at`. This matches the spirit of capturing the device's *current* fingerprint rather than a stale earlier one. | ||
| ## TLS preset | ||
| The harvester capture did not include a JA3/JA4 hash, so the wreqPreset is synthesised as `<browser>_<major>_<os>`. The wreq Rust crate's `resolve_preset()` matches by family (`chrome*` → Chrome) — exact-version fingerprint matching is a phase 0.7 deliverable. See `packages/net-rs/src/ffi/preset.rs`. | ||
| ## Hand-corrections | ||
| None at import time. The harvester's `navigator` snapshot is captured by real Chrome (not headless), so the `--headless=new` artifacts that needed manual correction in `mac-m4-chrome-stable` (task 0070) are absent here. | ||
| { | ||
| "timing": { | ||
| "timezone": "America/Chicago", | ||
| "timezoneOffset": 300, | ||
| "locale": "en-US", | ||
| "dateString": "Mon Jan 01 2024 12:00:00 GMT-0600 (Central Standard Time)", | ||
| "localeString": "1/1/2024, 12:00:00 PM", | ||
| "localeDateString": "1/1/2024", | ||
| "numberFormat": { | ||
| "locale": "en-US", | ||
| "numberingSystem": "latn", | ||
| "style": "decimal", | ||
| "minimumIntegerDigits": 1, | ||
| "minimumFractionDigits": 0, | ||
| "maximumFractionDigits": 3, | ||
| "useGrouping": "auto", | ||
| "notation": "standard", | ||
| "signDisplay": "auto", | ||
| "roundingIncrement": 1, | ||
| "roundingMode": "halfExpand", | ||
| "roundingPriority": "auto", | ||
| "trailingZeroDisplay": "auto" | ||
| }, | ||
| "dateTimeFormat": { | ||
| "locale": "en-US", | ||
| "calendar": "gregory", | ||
| "numberingSystem": "latn", | ||
| "timeZone": "America/Chicago", | ||
| "year": "numeric", | ||
| "month": "numeric", | ||
| "day": "numeric" | ||
| }, | ||
| "supportedCalendars": [ | ||
| "buddhist", | ||
| "chinese", | ||
| "coptic", | ||
| "dangi", | ||
| "ethioaa", | ||
| "ethiopic", | ||
| "gregory", | ||
| "hebrew", | ||
| "indian", | ||
| "islamic", | ||
| "islamic-civil", | ||
| "islamic-rgsa", | ||
| "islamic-tbla", | ||
| "islamic-umalqura", | ||
| "iso8601", | ||
| "japanese", | ||
| "persian", | ||
| "roc" | ||
| ], | ||
| "supportedCurrencies": 159, | ||
| "supportedNumberingSystems": [ | ||
| "adlm", | ||
| "ahom", | ||
| "arab", | ||
| "arabext", | ||
| "bali", | ||
| "beng", | ||
| "bhks", | ||
| "brah", | ||
| "cakm", | ||
| "cham", | ||
| "deva", | ||
| "diak", | ||
| "fullwide", | ||
| "gara", | ||
| "gong", | ||
| "gonm", | ||
| "gujr", | ||
| "gukh", | ||
| "guru", | ||
| "hanidec", | ||
| "hmng", | ||
| "hmnp", | ||
| "java", | ||
| "kali", | ||
| "kawi", | ||
| "khmr", | ||
| "knda", | ||
| "krai", | ||
| "lana", | ||
| "lanatham", | ||
| "laoo", | ||
| "latn", | ||
| "lepc", | ||
| "limb", | ||
| "mathbold", | ||
| "mathdbl", | ||
| "mathmono", | ||
| "mathsanb", | ||
| "mathsans", | ||
| "mlym", | ||
| "modi", | ||
| "mong", | ||
| "mroo", | ||
| "mtei", | ||
| "mymr", | ||
| "mymrepka", | ||
| "mymrpao", | ||
| "mymrshan", | ||
| "mymrtlng", | ||
| "nagm", | ||
| "newa", | ||
| "nkoo", | ||
| "olck", | ||
| "onao", | ||
| "orya", | ||
| "osma", | ||
| "outlined", | ||
| "rohg", | ||
| "saur", | ||
| "segment", | ||
| "shrd", | ||
| "sind", | ||
| "sinh", | ||
| "sora", | ||
| "sund", | ||
| "sunu", | ||
| "takr", | ||
| "talu", | ||
| "tamldec", | ||
| "telu", | ||
| "thai", | ||
| "tibt", | ||
| "tirh", | ||
| "tnsa", | ||
| "vaii", | ||
| "wara", | ||
| "wcho" | ||
| ], | ||
| "supportedTimeZones": 418, | ||
| "supportedUnits": 45, | ||
| "performanceTiming": { | ||
| "dns": 1, | ||
| "tcp": 876, | ||
| "ttfb": 177, | ||
| "download": 3, | ||
| "domParsing": 455, | ||
| "domComplete": 76, | ||
| "loadEvent": 0, | ||
| "total": 1591, | ||
| "protocol": "h2", | ||
| "transferSize": 3475, | ||
| "encodedBodySize": 3175, | ||
| "decodedBodySize": 10829 | ||
| }, | ||
| "timerPrecision": null, | ||
| "mathFingerprint": { | ||
| "E": 2.718281828459045, | ||
| "LN2": 0.6931471805599453, | ||
| "LN10": 2.302585092994046, | ||
| "LOG2E": 1.4426950408889634, | ||
| "LOG10E": 0.4342944819032518, | ||
| "PI": 3.141592653589793, | ||
| "SQRT2": 1.4142135623730951, | ||
| "SQRT1_2": 0.7071067811865476, | ||
| "acos": 1.0471975511965979, | ||
| "acosh": 1.3169578969248166, | ||
| "asin": 0.5235987755982989, | ||
| "atan": 0.7853981633974483, | ||
| "atanh": 0.5493061443340548, | ||
| "cbrt": 1.2599210498948732, | ||
| "cosh": 1.5430806348152437, | ||
| "expm1": 1.718281828459045, | ||
| "log1p": 0.4054651081081644, | ||
| "sinh": 1.1752011936438014, | ||
| "tanh": 0.7615941559557649 | ||
| } | ||
| }, | ||
| "bot": { | ||
| "webdriver": false, | ||
| "webdriverType": "normal", | ||
| "headlessChrome": false, | ||
| "automationKeys": [], | ||
| "automationDetected": false, | ||
| "chromeRuntime": false, | ||
| "pluginCount": 5, | ||
| "pluginInconsistency": false, | ||
| "languageInconsistency": false, | ||
| "permissionsApi": true, | ||
| "screenDimensions": "1920x1080", | ||
| "suspiciousDimensions": false, | ||
| "maxTouchPoints": 0, | ||
| "touchEvent": false, | ||
| "touchInconsistency": false, | ||
| "notificationPermission": "default", | ||
| "userActivation": { | ||
| "hasBeenActive": true, | ||
| "isActive": true | ||
| }, | ||
| "navigationTiming": { | ||
| "type": "navigate", | ||
| "redirectCount": 0, | ||
| "domComplete": 1591, | ||
| "loadEventEnd": 1591, | ||
| "domInteractive": 1515 | ||
| }, | ||
| "stackDepthTest": 101 | ||
| }, | ||
| "storage": { | ||
| "localStorage": true, | ||
| "localStorageKeys": 1, | ||
| "sessionStorage": true, | ||
| "sessionStorageKeys": 0, | ||
| "cookiesEnabled": true, | ||
| "cookiesWritable": true, | ||
| "cookieCount": 0, | ||
| "indexedDB": true, | ||
| "cacheStorage": true, | ||
| "serviceWorker": true, | ||
| "storageManager": true, | ||
| "fileSystemAccess": true, | ||
| "sharedArrayBuffer": false, | ||
| "sharedWorker": true, | ||
| "openDatabase": false, | ||
| "broadcastChannel": true, | ||
| "secureContext": true | ||
| }, | ||
| "fonts": { | ||
| "detected": [ | ||
| "Arial", | ||
| "Courier New", | ||
| "Times New Roman" | ||
| ], | ||
| "count": 3, | ||
| "tested": 117, | ||
| "hash": "5ABFFA3B", | ||
| "fontsApiReady": true | ||
| }, | ||
| "speech": { | ||
| "voices": [ | ||
| { | ||
| "name": "Microsoft David - English (United States)", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": true, | ||
| "voiceURI": "Microsoft David - English (United States)" | ||
| }, | ||
| { | ||
| "name": "Microsoft Zira - English (United States)", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Microsoft Zira - English (United States)" | ||
| }, | ||
| { | ||
| "name": "Microsoft Mark - English (United States)", | ||
| "lang": "en-US", | ||
| "localService": true, | ||
| "default": false, | ||
| "voiceURI": "Microsoft Mark - English (United States)" | ||
| }, | ||
| { | ||
| "name": "Google US English", | ||
| "lang": "en-US", | ||
| "localService": false, | ||
| "default": false, | ||
| "voiceURI": "Google US English" | ||
| }, | ||
| { | ||
| "name": "Google UK English Female", | ||
| "lang": "en-GB", | ||
| "localService": false, | ||
| "default": false, | ||
| "voiceURI": "Google UK English Female" | ||
| }, | ||
| { | ||
| "name": "Google UK English Male", | ||
| "lang": "en-GB", | ||
| "localService": false, | ||
| "default": false, | ||
| "voiceURI": "Google UK English Male" | ||
| } | ||
| ], | ||
| "voiceCount": 6, | ||
| "localVoices": 3, | ||
| "remoteVoices": 3, | ||
| "languages": [ | ||
| "en-US", | ||
| "en-GB" | ||
| ] | ||
| }, | ||
| "mediaDevices": { | ||
| "devices": [ | ||
| { | ||
| "deviceId": "", | ||
| "kind": "audiooutput", | ||
| "label": "", | ||
| "groupId": "" | ||
| } | ||
| ], | ||
| "deviceCount": 1, | ||
| "audioinput": 0, | ||
| "audiooutput": 1, | ||
| "videoinput": 0, | ||
| "supportedConstraints": { | ||
| "aspectRatio": true, | ||
| "autoGainControl": true, | ||
| "brightness": true, | ||
| "channelCount": true, | ||
| "colorTemperature": true, | ||
| "contrast": true, | ||
| "deviceId": true, | ||
| "displaySurface": true, | ||
| "echoCancellation": true, | ||
| "exposureCompensation": true, | ||
| "exposureMode": true, | ||
| "exposureTime": true, | ||
| "facingMode": true, | ||
| "focusDistance": true, | ||
| "focusMode": true, | ||
| "frameRate": true, | ||
| "groupId": true, | ||
| "height": true, | ||
| "iso": true, | ||
| "latency": true, | ||
| "noiseSuppression": true, | ||
| "pan": true, | ||
| "pointsOfInterest": true, | ||
| "resizeMode": true, | ||
| "restrictOwnAudio": true, | ||
| "sampleRate": true, | ||
| "sampleSize": true, | ||
| "saturation": true, | ||
| "sharpness": true, | ||
| "suppressLocalAudioPlayback": true, | ||
| "tilt": true, | ||
| "torch": true, | ||
| "voiceIsolation": true, | ||
| "whiteBalanceMode": true, | ||
| "width": true, | ||
| "zoom": true | ||
| } | ||
| }, | ||
| "audio": { | ||
| "sampleRate": 48000, | ||
| "state": "running", | ||
| "baseLatency": 0.042666666666666665, | ||
| "outputLatency": 0, | ||
| "maxChannelCount": 2, | ||
| "numberOfInputs": 1, | ||
| "numberOfOutputs": 0, | ||
| "channelCount": 2, | ||
| "channelCountMode": "explicit", | ||
| "channelInterpretation": "speakers", | ||
| "audioHash": "124.04345139075303", | ||
| "sampleValues": [ | ||
| -0.1080818846821785, | ||
| -0.3909122049808502, | ||
| -0.005695888306945562, | ||
| 0.38922908902168274, | ||
| 0.1189703568816185, | ||
| -0.35458430647850037, | ||
| -0.22216065227985382, | ||
| 0.2899079918861389, | ||
| 0.30651476979255676, | ||
| -0.20069056749343872 | ||
| ] | ||
| }, | ||
| "webgpu": { | ||
| "supported": true, | ||
| "features": [ | ||
| "depth32float-stencil8", | ||
| "rg11b10ufloat-renderable", | ||
| "bgra8unorm-storage", | ||
| "texture-compression-bc", | ||
| "dual-source-blending", | ||
| "core-features-and-limits", | ||
| "float32-filterable", | ||
| "indirect-first-instance", | ||
| "float32-blendable", | ||
| "depth-clip-control", | ||
| "texture-compression-bc-sliced-3d", | ||
| "timestamp-query", | ||
| "clip-distances", | ||
| "shader-f16", | ||
| "texture-component-swizzle", | ||
| "subgroups" | ||
| ], | ||
| "info": { | ||
| "vendor": "nvidia", | ||
| "architecture": "ampere", | ||
| "device": "", | ||
| "description": "" | ||
| } | ||
| }, | ||
| "webgl": { | ||
| "version": "WebGL 2.0 (OpenGL ES 3.0 Chromium)", | ||
| "shadingLanguageVersion": "WebGL GLSL ES 3.00 (OpenGL ES GLSL ES 3.0 Chromium)", | ||
| "vendor": "WebKit", | ||
| "renderer": "WebKit WebGL", | ||
| "unmaskedVendor": "Google Inc. (NVIDIA)", | ||
| "unmaskedRenderer": "ANGLE (NVIDIA, NVIDIA GeForce RTX 3070 (0x00002484) Direct3D11 vs_5_0 ps_5_0, D3D11)", | ||
| "extensions": [ | ||
| "EXT_clip_control", | ||
| "EXT_color_buffer_float", | ||
| "EXT_color_buffer_half_float", | ||
| "EXT_conservative_depth", | ||
| "EXT_depth_clamp", | ||
| "EXT_disjoint_timer_query_webgl2", | ||
| "EXT_float_blend", | ||
| "EXT_polygon_offset_clamp", | ||
| "EXT_render_snorm", | ||
| "EXT_texture_compression_bptc", | ||
| "EXT_texture_compression_rgtc", | ||
| "EXT_texture_filter_anisotropic", | ||
| "EXT_texture_mirror_clamp_to_edge", | ||
| "EXT_texture_norm16", | ||
| "KHR_parallel_shader_compile", | ||
| "NV_shader_noperspective_interpolation", | ||
| "OES_draw_buffers_indexed", | ||
| "OES_sample_variables", | ||
| "OES_shader_multisample_interpolation", | ||
| "OES_texture_float_linear", | ||
| "WEBGL_blend_func_extended", | ||
| "WEBGL_clip_cull_distance", | ||
| "WEBGL_compressed_texture_s3tc", | ||
| "WEBGL_compressed_texture_s3tc_srgb", | ||
| "WEBGL_debug_renderer_info", | ||
| "WEBGL_debug_shaders", | ||
| "WEBGL_lose_context", | ||
| "WEBGL_multi_draw", | ||
| "WEBGL_polygon_mode", | ||
| "WEBGL_provoking_vertex", | ||
| "WEBGL_stencil_texturing" | ||
| ], | ||
| "extensionCount": 31, | ||
| "maxTextureSize": 16384, | ||
| "maxViewportDims": [ | ||
| 32767, | ||
| 32767 | ||
| ], | ||
| "maxRenderbufferSize": 16384, | ||
| "maxCombinedTextureImageUnits": 32, | ||
| "maxCubeMapTextureSize": 16384, | ||
| "maxFragmentUniformVectors": 1024, | ||
| "maxTextureImageUnits": 16, | ||
| "maxVertexAttribs": 16, | ||
| "maxVertexTextureImageUnits": 16, | ||
| "maxVertexUniformVectors": 1024, | ||
| "maxVaryingVectors": 30, | ||
| "aliasedLineWidthRange": [ | ||
| 1, | ||
| 1 | ||
| ], | ||
| "aliasedPointSizeRange": [ | ||
| 1, | ||
| 1024 | ||
| ], | ||
| "maxAnisotropy": 16, | ||
| "precisionFormats": { | ||
| "vertex_lowFloat": { | ||
| "rangeMin": 127, | ||
| "rangeMax": 127, | ||
| "precision": 23 | ||
| }, | ||
| "vertex_medFloat": { | ||
| "rangeMin": 127, | ||
| "rangeMax": 127, | ||
| "precision": 23 | ||
| }, | ||
| "vertex_highFloat": { | ||
| "rangeMin": 127, | ||
| "rangeMax": 127, | ||
| "precision": 23 | ||
| }, | ||
| "vertex_lowInt": { | ||
| "rangeMin": 31, | ||
| "rangeMax": 30, | ||
| "precision": 0 | ||
| }, | ||
| "vertex_medInt": { | ||
| "rangeMin": 31, | ||
| "rangeMax": 30, | ||
| "precision": 0 | ||
| }, | ||
| "vertex_highInt": { | ||
| "rangeMin": 31, | ||
| "rangeMax": 30, | ||
| "precision": 0 | ||
| }, | ||
| "fragment_lowFloat": { | ||
| "rangeMin": 127, | ||
| "rangeMax": 127, | ||
| "precision": 23 | ||
| }, | ||
| "fragment_medFloat": { | ||
| "rangeMin": 127, | ||
| "rangeMax": 127, | ||
| "precision": 23 | ||
| }, | ||
| "fragment_highFloat": { | ||
| "rangeMin": 127, | ||
| "rangeMax": 127, | ||
| "precision": 23 | ||
| }, | ||
| "fragment_lowInt": { | ||
| "rangeMin": 31, | ||
| "rangeMax": 30, | ||
| "precision": 0 | ||
| }, | ||
| "fragment_medInt": { | ||
| "rangeMin": 31, | ||
| "rangeMax": 30, | ||
| "precision": 0 | ||
| }, | ||
| "fragment_highInt": { | ||
| "rangeMin": 31, | ||
| "rangeMax": 30, | ||
| "precision": 0 | ||
| } | ||
| } | ||
| }, | ||
| "canvas": { | ||
| "consistent": true, | ||
| "hash": "3C2ABBE3", | ||
| "dataUrlLength": 25246, | ||
| "dataUrlPrefix": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwA", | ||
| "webpSupport": true, | ||
| "jpegHighLength": 26563, | ||
| "jpegLowLength": 2327 | ||
| }, | ||
| "screen": { | ||
| "width": 1920, | ||
| "height": 1080, | ||
| "availWidth": 1920, | ||
| "availHeight": 1032, | ||
| "colorDepth": 32, | ||
| "pixelDepth": 32, | ||
| "innerWidth": 1920, | ||
| "innerHeight": 947, | ||
| "outerWidth": 1919, | ||
| "outerHeight": 1032, | ||
| "screenX": 10, | ||
| "screenY": 39, | ||
| "pageXOffset": 0, | ||
| "pageYOffset": 0, | ||
| "devicePixelRatio": 1, | ||
| "orientation": { | ||
| "type": "landscape-primary", | ||
| "angle": 0 | ||
| }, | ||
| "mediaQueries": { | ||
| "prefers-color-scheme": "light", | ||
| "prefers-reduced-motion": "no-preference", | ||
| "prefers-contrast": "no-preference", | ||
| "forced-colors": "none", | ||
| "prefers-reduced-transparency": "no-preference", | ||
| "color-gamut": "srgb", | ||
| "pointer": "fine", | ||
| "hover": "hover", | ||
| "any-pointer": "fine", | ||
| "any-hover": "hover", | ||
| "display-mode": "browser", | ||
| "dynamic-range": "standard", | ||
| "update": "fast", | ||
| "overflow-block": "scroll", | ||
| "overflow-inline": "scroll", | ||
| "min-resolution": "96dpi", | ||
| "min-color": "8", | ||
| "monochrome": false | ||
| }, | ||
| "visualViewport": { | ||
| "width": 1920, | ||
| "height": 947, | ||
| "offsetLeft": 0, | ||
| "offsetTop": 0, | ||
| "pageLeft": 0, | ||
| "pageTop": 0, | ||
| "scale": 1 | ||
| } | ||
| }, | ||
| "navigator": { | ||
| "secureContext": true, | ||
| "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36 chrome/chrome", | ||
| "platform": "Win32", | ||
| "vendor": "Google Inc.", | ||
| "vendorSub": "", | ||
| "product": "Gecko", | ||
| "productSub": "20030107", | ||
| "appVersion": "5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36 chrome/chrome", | ||
| "appName": "Netscape", | ||
| "appCodeName": "Mozilla", | ||
| "language": "en-US", | ||
| "languages": [ | ||
| "en-US" | ||
| ], | ||
| "cookieEnabled": true, | ||
| "doNotTrack": null, | ||
| "maxTouchPoints": 0, | ||
| "hardwareConcurrency": 8, | ||
| "deviceMemory": 8, | ||
| "pdfViewerEnabled": true, | ||
| "webdriver": false, | ||
| "connection": { | ||
| "effectiveType": "3g", | ||
| "downlink": 10, | ||
| "rtt": 0, | ||
| "saveData": false | ||
| }, | ||
| "plugins": [ | ||
| { | ||
| "name": "PDF Viewer", | ||
| "filename": "internal-pdf-viewer", | ||
| "description": "Portable Document Format" | ||
| }, | ||
| { | ||
| "name": "Chrome PDF Viewer", | ||
| "filename": "internal-pdf-viewer", | ||
| "description": "Portable Document Format" | ||
| }, | ||
| { | ||
| "name": "Chromium PDF Viewer", | ||
| "filename": "internal-pdf-viewer", | ||
| "description": "Portable Document Format" | ||
| }, | ||
| { | ||
| "name": "Microsoft Edge PDF Viewer", | ||
| "filename": "internal-pdf-viewer", | ||
| "description": "Portable Document Format" | ||
| }, | ||
| { | ||
| "name": "WebKit built-in PDF", | ||
| "filename": "internal-pdf-viewer", | ||
| "description": "Portable Document Format" | ||
| } | ||
| ], | ||
| "pluginCount": 5, | ||
| "mimeTypes": [ | ||
| "application/pdf", | ||
| "text/pdf" | ||
| ], | ||
| "userAgentData": { | ||
| "brands": [ | ||
| { | ||
| "brand": "Chromium", | ||
| "version": "146" | ||
| }, | ||
| { | ||
| "brand": "Not-A.Brand", | ||
| "version": "24" | ||
| }, | ||
| { | ||
| "brand": "chrome", | ||
| "version": "146" | ||
| } | ||
| ], | ||
| "mobile": false, | ||
| "platform": "Windows" | ||
| }, | ||
| "userAgentDataHighEntropy": { | ||
| "architecture": "x86", | ||
| "bitness": "64", | ||
| "brands": [ | ||
| { | ||
| "brand": "Chromium", | ||
| "version": "146" | ||
| }, | ||
| { | ||
| "brand": "Not-A.Brand", | ||
| "version": "24" | ||
| }, | ||
| { | ||
| "brand": "chrome", | ||
| "version": "146" | ||
| } | ||
| ], | ||
| "fullVersionList": [ | ||
| { | ||
| "brand": "Chromium", | ||
| "version": "146.0.7680.177" | ||
| }, | ||
| { | ||
| "brand": "Not-A.Brand", | ||
| "version": "24.0.0.0" | ||
| }, | ||
| { | ||
| "brand": "chrome", | ||
| "version": "146.0.7680.177" | ||
| } | ||
| ], | ||
| "mobile": false, | ||
| "model": "", | ||
| "platform": "Windows", | ||
| "platformVersion": "19.0.0", | ||
| "wow64": false | ||
| }, | ||
| "permissions": { | ||
| "geolocation": "prompt", | ||
| "notifications": "prompt", | ||
| "camera": "prompt", | ||
| "microphone": "prompt", | ||
| "accelerometer": "granted", | ||
| "gyroscope": "granted", | ||
| "magnetometer": "granted", | ||
| "clipboard-read": "prompt", | ||
| "clipboard-write": "granted" | ||
| }, | ||
| "storageEstimate": { | ||
| "quota": 439901334, | ||
| "usage": 0 | ||
| }, | ||
| "bluetooth": true, | ||
| "usb": true, | ||
| "serial": true, | ||
| "hid": true, | ||
| "xr": true, | ||
| "gpu": true, | ||
| "ink": true, | ||
| "scheduling": true, | ||
| "windowControlsOverlay": true, | ||
| "virtualKeyboard": true | ||
| }, | ||
| "__meta": { | ||
| "capturedAt": "2026-05-01T07:17:43.467Z", | ||
| "elapsedMs": 0, | ||
| "href": "http://wrkx.app/api/visitors/460a5cc5f4a4a6d8af32f28945530f03", | ||
| "readyState": "complete" | ||
| } | ||
| } |
| { | ||
| "version": "1", | ||
| "profile": "windows-chrome-stable", | ||
| "paths": [ | ||
| { | ||
| "path": "audio.**", | ||
| "comment": "Audio fingerprint bytes (sampleValues, audioHash) require precomputed per-(profile, sample-rate) byte tables — task 0071. docs/limits.md \"Audio fingerprinting (OfflineAudioContext) is NOT spoofed at v0.3\" carried over to v0.7 phase split." | ||
| }, | ||
| { | ||
| "path": "canvas.**", | ||
| "comment": "Canvas hash + dataUrl spoofing requires precomputed hash maps for the standard probe payloads + per-pixel noise injection — task 0071. docs/limits.md \"Canvas fingerprinting (HTMLCanvasElement.toDataURL) is NOT spoofed at v0.3\" carried over to v0.7 phase split." | ||
| }, | ||
| { | ||
| "path": "speech.**", | ||
| "comment": "speechSynthesis.getVoices() returns the host's installed system voices on real Chrome (typically 200+ entries on macOS, 20+ on Linux/Win). Chromium-for-Testing ships with no voice tables, so mochi spoofs voices=[]. Restoring real-device voice lists is a phase 0.7 deliverable (precomputed voice tables per-OS) tracked alongside audio/canvas. PLAN.md §13.6." | ||
| }, | ||
| { | ||
| "path": "navigator.userAgentData.brands", | ||
| "comment": "Brand-list length varies (Linux Chrome emits 2 brands, macOS/Win emit 3). Same root cause as the per-entry comment below." | ||
| }, | ||
| { | ||
| "path": "navigator.userAgentData.brands[*]", | ||
| "comment": "Per-entry full-object mismatch when length differs." | ||
| }, | ||
| { | ||
| "path": "navigator.userAgentData.brands[*].**", | ||
| "comment": "Sec-CH-UA brand-list ordering and GREASE label vary between Chrome/Edge majors and even between Chrome point releases (e.g. 146 emits `Not-A.Brand;v=24` while 147 emits `Not.A/Brand;v=8`). mochi pins a single GREASE label per major (consistency/rules/lookups/browser.ts) for determinism — see tasks/0051-consistency-stack-fixes.md (Group B). Per-major GREASE shuffle is a phase 0.7 deliverable." | ||
| }, | ||
| { | ||
| "path": "navigator.userAgentDataHighEntropy.brands", | ||
| "comment": "Same as userAgentData.brands." | ||
| }, | ||
| { | ||
| "path": "navigator.userAgentDataHighEntropy.brands[*]", | ||
| "comment": "Per-entry full-object mismatch when length differs." | ||
| }, | ||
| { | ||
| "path": "navigator.userAgentDataHighEntropy.brands[*].**", | ||
| "comment": "Same as navigator.userAgentData.brands — pinned for determinism." | ||
| }, | ||
| { | ||
| "path": "navigator.userAgentDataHighEntropy.fullVersionList", | ||
| "comment": "Same as userAgentData.brands — length varies by OS." | ||
| }, | ||
| { | ||
| "path": "navigator.userAgentDataHighEntropy.fullVersionList[*]", | ||
| "comment": "Per-entry full-object mismatch when length differs." | ||
| }, | ||
| { | ||
| "path": "navigator.userAgentDataHighEntropy.fullVersionList[*].**", | ||
| "comment": "Patch-level Chrome version (e.g. 146.0.7680.165) varies with the local Chrome install vs the BROWSER_TIP_FULL_VERSION table. mochi uses the table tip when the major matches; harvested values may differ by a few patch numbers. Refresh the table per Chrome major." | ||
| }, | ||
| { | ||
| "path": "navigator.userAgent", | ||
| "comment": "Full UA string includes the patch version (see fullVersionList comment). Spoofed value matches BROWSER_TIP_FULL_VERSION; harvested value reflects the user's exact Chrome point release." | ||
| }, | ||
| { | ||
| "path": "navigator.appVersion", | ||
| "comment": "Same patch-version drift as navigator.userAgent." | ||
| }, | ||
| { | ||
| "path": "screen.mediaQueries.**", | ||
| "comment": "matchMedia() result strings depend on the host's actual OS/display state (min-resolution from real DPR, prefers-color-scheme from Dark Mode, etc.). mochi spoofs a deterministic baseline; the harvested values reflect the user's session at capture time. Per-profile media-query lock is phase 0.7." | ||
| }, | ||
| { | ||
| "path": "screen.pageXOffset", | ||
| "comment": "Window-frame chrome. Sentinelized by normalize.ts in most paths but the raw harvested value may differ from the harness window's idle offset." | ||
| }, | ||
| { | ||
| "path": "screen.pageYOffset", | ||
| "comment": "Window-frame chrome — same as pageXOffset." | ||
| }, | ||
| { | ||
| "path": "timing.dateString", | ||
| "comment": "Date.toString() includes the host's wall-clock time, which differs every run. The probe normalises to a fixed 2024-01-01 anchor; harvested values reflect the user's actual capture time." | ||
| }, | ||
| { | ||
| "path": "timing.performanceTiming", | ||
| "comment": "performance.timing.* fields vary per session (load durations, redirect counts). normalize.ts sentinelizes the bot.navigationTiming sub-block; the timing.performanceTiming block is harvester-specific and not currently sentinelized." | ||
| }, | ||
| { | ||
| "path": "timing.supportedNumberingSystems[*]", | ||
| "comment": "Intl.supportedValuesOf('numberingSystem') grows between V8 majors (e.g. Chrome 149 added 'tols'). The harvested list reflects the user's V8; the harness uses Chromium-for-Testing's V8. List drift is expected as BROWSER_TIP_FULL_VERSION advances." | ||
| }, | ||
| { | ||
| "path": "webgl.aliasedLineWidthRange[*]", | ||
| "comment": "WebGL aliasedLineWidthRange/PointSizeRange/maxViewportDims values vary with the GPU driver version on the host. mochi locks GPU vendor/renderer via the matrix; per-driver-version locking is phase 0.7." | ||
| }, | ||
| { | ||
| "path": "webgl.aliasedPointSizeRange[*]", | ||
| "comment": "See webgl.aliasedLineWidthRange." | ||
| }, | ||
| { | ||
| "path": "webgl.maxColorAttachments", | ||
| "comment": "GPU-driver dependent; see webgl.aliasedLineWidthRange." | ||
| }, | ||
| { | ||
| "path": "webgl.maxViewportDims[*]", | ||
| "comment": "GPU-driver dependent; see webgl.aliasedLineWidthRange." | ||
| }, | ||
| { | ||
| "path": "webgpu.features", | ||
| "comment": "Block absent on hosts without a WebGPU adapter." | ||
| }, | ||
| { | ||
| "path": "webgpu.features[*]", | ||
| "comment": "WebGPU feature list grows between Chromium majors. The harvested list reflects the user's Chrome version; the harness uses Chromium-for-Testing." | ||
| }, | ||
| { | ||
| "path": "webgpu.info", | ||
| "comment": "Block absent on hosts without a WebGPU adapter." | ||
| }, | ||
| { | ||
| "path": "webgpu.limits.**", | ||
| "comment": "WebGPU adapter limits depend on the GPU driver. Per-driver locking is phase 0.7 alongside WebGL." | ||
| }, | ||
| { | ||
| "path": "bot.chromeRuntime", | ||
| "comment": "Real Chrome exposes window.chrome.runtime; Chromium-for-Testing does not. Restoring chrome.runtime polyfill is task 0140 (stealth conformance) — tracked separately." | ||
| }, | ||
| { | ||
| "path": "storage.cookieCount", | ||
| "comment": "Cookie state varies per session — the harvester's user had cookies, the harness session is fresh." | ||
| }, | ||
| { | ||
| "path": "storage.cookiesWritable", | ||
| "comment": "Depends on the document context (file:// fixture vs http:// origin). Harvester captured at http(s) origin; harness uses file:// fixture." | ||
| }, | ||
| { | ||
| "path": "storage.localStorageKeys", | ||
| "comment": "localStorage state varies per session — fresh harness session has no keys." | ||
| }, | ||
| { | ||
| "path": "mouseEvent", | ||
| "comment": "The probe-page emits a mouseEvent block when the relational-lock scaffolding fires. Harvested snapshots predate this probe and so omit it; spoofed sessions emit it. Cosmetic — the lock-result block is the spoof's own diagnostic, not a fingerprint surface." | ||
| }, | ||
| { | ||
| "path": "fonts.**", | ||
| "comment": "The font enumeration probe enumerates whatever the host has installed. Spoofing the per-profile font intersection is a phase 0.7 task (FontFace API stub + per-profile font allowlist). Running e.g. windows-chrome-stable on a Mac host will surface every macOS system font as material — that's a known gap, not a profile defect." | ||
| }, | ||
| { | ||
| "path": "webgl.extensions", | ||
| "comment": "Whole array absent on no-WebGL hosts (see webgl.error)." | ||
| }, | ||
| { | ||
| "path": "webgl.extensions[*]", | ||
| "comment": "WebGL extension list depends on the host GPU + driver. mochi locks GPU vendor/renderer strings but does NOT enumerate-list-spoof extensions per-profile yet. Phase 0.7 deliverable. Cross-host validation surfaces the host's actual extension set." | ||
| }, | ||
| { | ||
| "path": "webgl.precisionFormats", | ||
| "comment": "Block absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "webgl.extensionCount", | ||
| "comment": "See webgl.extensions[*] — count varies with host extensions." | ||
| }, | ||
| { | ||
| "path": "webgl.unmaskedVendor", | ||
| "comment": "Unmasked WebGL vendor/renderer requires GPU spoofing at the ANGLE layer (or a polyfilled WEBGL_debug_renderer_info getter). mochi's getter spoof is host-OS-aware; cross-host tests surface the underlying device." | ||
| }, | ||
| { | ||
| "path": "webgl.unmaskedRenderer", | ||
| "comment": "See webgl.unmaskedVendor." | ||
| }, | ||
| { | ||
| "path": "webgpu.info.**", | ||
| "comment": "WebGPU adapter info comes from the host driver. Cross-host validation shows the host's adapter; same root cause as webgl.unmaskedRenderer." | ||
| }, | ||
| { | ||
| "path": "mediaDevices.devices[*]", | ||
| "comment": "Per-entry full-object mismatch when device-array length differs." | ||
| }, | ||
| { | ||
| "path": "mediaDevices.devices[*].**", | ||
| "comment": "navigator.mediaDevices.enumerateDevices() returns whatever audio/video devices the host has. The harness fixture runs in a fresh permission state so labels are empty (matches baseline) but the device count + kind ratio depends on the host. Per-profile media-devices spoofing is phase 0.7." | ||
| }, | ||
| { | ||
| "path": "mediaDevices.deviceCount", | ||
| "comment": "See mediaDevices.devices[*]." | ||
| }, | ||
| { | ||
| "path": "mediaDevices.audioinput", | ||
| "comment": "See mediaDevices.devices[*]." | ||
| }, | ||
| { | ||
| "path": "mediaDevices.audiooutput", | ||
| "comment": "See mediaDevices.devices[*]." | ||
| }, | ||
| { | ||
| "path": "mediaDevices.videoinput", | ||
| "comment": "See mediaDevices.devices[*]." | ||
| }, | ||
| { | ||
| "path": "navigator.connection.effectiveType", | ||
| "comment": "NetworkInformation.effectiveType reads from the host network stack. downlink/rtt are sentinelized by normalize.ts but effectiveType isn't." | ||
| }, | ||
| { | ||
| "path": "timing.timezoneOffset", | ||
| "comment": "timezoneOffset depends on whether the captured profile's tz observes DST at the harness's wall-clock time vs at capture time. The IANA timezone is spoofed correctly; the offset is a derived value with seasonal drift." | ||
| }, | ||
| { | ||
| "path": "bot.userActivation.**", | ||
| "comment": "navigator.userActivation.hasBeenActive flips to true when the harness drives mouse/keyboard events. The harvested snapshot was captured before any user gesture, so hasBeenActive=false. The spoof doesn't lie about this — it's a true reflection of the harness's interaction sequence." | ||
| }, | ||
| { | ||
| "path": "navigator.deviceMemory", | ||
| "comment": "navigator.deviceMemory is spec-capped at 8 on real Chrome, but some configurations (older Chrome, non-Chromium derivatives) leak the real GiB count. mochi enforces the spec cap deterministically; the harvested value may be higher (16/32/64) and the spoof correctly clamps to 8." | ||
| }, | ||
| { | ||
| "path": "navigator.bluetooth", | ||
| "comment": "navigator.bluetooth presence depends on the host's Web Bluetooth flag. Linux Chrome typically has it disabled by default; mochi exposes it. Per-profile API allowlist is phase 0.7." | ||
| }, | ||
| { | ||
| "path": "storage.fileSystemAccess", | ||
| "comment": "FileSystemAccess API can be hardened off (Brave) or off-by-default (Linux Chrome). mochi exposes the API by default. Per-profile feature gating is phase 0.7." | ||
| }, | ||
| { | ||
| "path": "storage.sessionStorageKeys", | ||
| "comment": "The probe page writes one sessionStorage key during its self-test; harvested baselines that ran before that probe instrumentation report 0. New captures will normalize to 1 once re-imported." | ||
| }, | ||
| { | ||
| "path": "timing.timerPrecision", | ||
| "comment": "Brave coarsens performance.now() precision; harvested Brave snapshots report null. mochi does NOT coarsen — restoring Brave's precision-coarsen behavior is a phase 0.7 deliverable." | ||
| }, | ||
| { | ||
| "path": "navigator.userAgentDataHighEntropy.platformVersion", | ||
| "comment": "platformVersion is empty on Linux Chrome (X11 has no notion of OS marketing version). The spoof emits a synthesised value; on Linux imports we accept the empty-string baseline as the source of truth." | ||
| }, | ||
| { | ||
| "path": "navigator.connection", | ||
| "comment": "Brave hardens NetworkInformation and returns an undefined connection block. mochi exposes the API. Per-profile NetworkInformation hardening is a phase 0.7 deliverable." | ||
| }, | ||
| { | ||
| "path": "webgl.error", | ||
| "comment": "Some captured devices (headless Linux, lock-screened Windows) report no WebGL context. mochi always presents a WebGL surface. Per-profile no-WebGL mode is phase 0.7." | ||
| }, | ||
| { | ||
| "path": "webgl.version", | ||
| "comment": "Empty on no-WebGL hosts (see webgl.error)." | ||
| }, | ||
| { | ||
| "path": "webgl.shadingLanguageVersion", | ||
| "comment": "Empty on no-WebGL hosts (see webgl.error)." | ||
| }, | ||
| { | ||
| "path": "webgl.vendor", | ||
| "comment": "Empty on no-WebGL hosts (see webgl.error)." | ||
| }, | ||
| { | ||
| "path": "webgl.renderer", | ||
| "comment": "Empty on no-WebGL hosts (see webgl.error)." | ||
| }, | ||
| { | ||
| "path": "webgl.aliasedLineWidthRange", | ||
| "comment": "Absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "webgl.aliasedPointSizeRange", | ||
| "comment": "Absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "webgl.maxAnisotropy", | ||
| "comment": "Absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "webgl.maxColorAttachments", | ||
| "comment": "Absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "webgl.maxCombinedTextureImageUnits", | ||
| "comment": "Absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "webgl.maxCubeMapTextureSize", | ||
| "comment": "Absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "webgl.maxFragmentUniformVectors", | ||
| "comment": "Absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "webgl.maxRenderbufferSize", | ||
| "comment": "Absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "webgl.maxTextureImageUnits", | ||
| "comment": "Absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "webgl.maxTextureSize", | ||
| "comment": "Absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "webgl.maxVaryingVectors", | ||
| "comment": "Absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "webgl.maxVertexAttribs", | ||
| "comment": "Absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "webgl.maxVertexTextureImageUnits", | ||
| "comment": "Absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "webgl.maxVertexUniformVectors", | ||
| "comment": "Absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "webgl.maxViewportDims", | ||
| "comment": "Absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "webgl.precisionFormats.**", | ||
| "comment": "Absent on no-WebGL hosts." | ||
| }, | ||
| { | ||
| "path": "mediaDevices.devices", | ||
| "comment": "Device array length varies with the host's installed devices. Per-profile media-devices spoofing is phase 0.7." | ||
| } | ||
| ] | ||
| } |
| { | ||
| "id": "windows-chrome-stable", | ||
| "version": "1.0.0", | ||
| "engine": "chromium", | ||
| "browser": { | ||
| "name": "chrome", | ||
| "channel": "stable", | ||
| "minVersion": "146", | ||
| "maxVersion": "146" | ||
| }, | ||
| "os": { | ||
| "name": "windows", | ||
| "version": "19.0.0", | ||
| "arch": "x64" | ||
| }, | ||
| "device": { | ||
| "vendor": "generic", | ||
| "model": "PC", | ||
| "cpuFamily": "intel-core", | ||
| "cores": 8, | ||
| "memoryGB": 16 | ||
| }, | ||
| "display": { | ||
| "width": 1920, | ||
| "height": 1080, | ||
| "dpr": 1, | ||
| "colorDepth": 32, | ||
| "pixelDepth": 32 | ||
| }, | ||
| "gpu": { | ||
| "vendor": "NVIDIA Corporation", | ||
| "renderer": "NVIDIA GeForce RTX 3070 (0x00002484) Direct3D11 vs_5_0 ps_5_0", | ||
| "webglUnmaskedVendor": "Google Inc. (NVIDIA)", | ||
| "webglUnmaskedRenderer": "ANGLE (NVIDIA, NVIDIA GeForce RTX 3070 (0x00002484) Direct3D11 vs_5_0 ps_5_0, D3D11)", | ||
| "webglMaxTextureSize": 16384, | ||
| "webglMaxColorAttachments": 8, | ||
| "webglExtensions": [ | ||
| "EXT_clip_control", | ||
| "EXT_color_buffer_float", | ||
| "EXT_color_buffer_half_float", | ||
| "EXT_conservative_depth", | ||
| "EXT_depth_clamp", | ||
| "EXT_disjoint_timer_query_webgl2", | ||
| "EXT_float_blend", | ||
| "EXT_polygon_offset_clamp", | ||
| "EXT_render_snorm", | ||
| "EXT_texture_compression_bptc", | ||
| "EXT_texture_compression_rgtc", | ||
| "EXT_texture_filter_anisotropic", | ||
| "EXT_texture_mirror_clamp_to_edge", | ||
| "EXT_texture_norm16", | ||
| "KHR_parallel_shader_compile", | ||
| "NV_shader_noperspective_interpolation", | ||
| "OES_draw_buffers_indexed", | ||
| "OES_sample_variables", | ||
| "OES_shader_multisample_interpolation", | ||
| "OES_texture_float_linear", | ||
| "WEBGL_blend_func_extended", | ||
| "WEBGL_clip_cull_distance", | ||
| "WEBGL_compressed_texture_s3tc", | ||
| "WEBGL_compressed_texture_s3tc_srgb", | ||
| "WEBGL_debug_renderer_info", | ||
| "WEBGL_debug_shaders", | ||
| "WEBGL_lose_context", | ||
| "WEBGL_multi_draw", | ||
| "WEBGL_polygon_mode", | ||
| "WEBGL_provoking_vertex", | ||
| "WEBGL_stencil_texturing" | ||
| ] | ||
| }, | ||
| "audio": { | ||
| "contextSampleRate": 48000, | ||
| "audioWorkletLatency": 0.042666666666666665, | ||
| "destinationMaxChannelCount": 2 | ||
| }, | ||
| "fonts": { | ||
| "family": "windows-system-pack", | ||
| "list": [ | ||
| "Arial", | ||
| "Courier New", | ||
| "Times New Roman" | ||
| ] | ||
| }, | ||
| "timezone": "America/Chicago", | ||
| "locale": "en-US", | ||
| "languages": [ | ||
| "en-US" | ||
| ], | ||
| "behavior": { | ||
| "hand": "right", | ||
| "tremor": 0.18, | ||
| "wpm": 60, | ||
| "scrollStyle": "smooth" | ||
| }, | ||
| "wreqPreset": "chrome_146_windows", | ||
| "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36 chrome/chrome", | ||
| "uaCh": { | ||
| "sec-ch-ua": "\"Chromium\";v=\"146\", \"Not-A.Brand\";v=\"24\", \"chrome\";v=\"146\"", | ||
| "sec-ch-ua-mobile": "?0", | ||
| "sec-ch-ua-platform": "\"Windows\"", | ||
| "sec-ch-ua-platform-version": "\"19.0.0\"", | ||
| "sec-ch-ua-arch": "\"x86\"", | ||
| "sec-ch-ua-bitness": "\"64\"", | ||
| "sec-ch-ua-model": "\"\"", | ||
| "sec-ch-ua-full-version": "\"146\"", | ||
| "sec-ch-ua-os": "\"windows\"" | ||
| }, | ||
| "entropyBudget": { | ||
| "fixed": [], | ||
| "perSeed": [] | ||
| } | ||
| } |
| # PROVENANCE — windows-chrome-stable | ||
| Imported from the wrkx harvester corpus (`http://wrkx.app/api`) by `mochi profiles import`. PLAN.md §12.2 — every profile in `main` must carry verifiable provenance. | ||
| | field | value | | ||
| |---|---| | ||
| | profile id | `windows-chrome-stable` | | ||
| | upstream visitor id | `460a5cc5f4a4a6d8af32f28945530f03` | | ||
| | upstream URL | `http://wrkx.app/api/visitors/460a5cc5f4a4a6d8af32f28945530f03` | | ||
| | visitor egress ip (snapshot) | 76.184.227.237 | | ||
| | browser version | 146 | | ||
| | FingerprintJS suspectScore | 8 | | ||
| | captured at (UTC) | 2026-05-01T07:17:43.467Z | | ||
| | imported at (UTC) | 2026-05-08T20:50:36.301Z | | ||
| | importer | `mochi profiles import` (task 0260) | | ||
| ## Multi-snapshot policy | ||
| When the visitor record contains multiple snapshots for a single category (re-visits over time), the importer keeps the most recent by `created_at`. This matches the spirit of capturing the device's *current* fingerprint rather than a stale earlier one. | ||
| ## TLS preset | ||
| The harvester capture did not include a JA3/JA4 hash, so the wreqPreset is synthesised as `<browser>_<major>_<os>`. The wreq Rust crate's `resolve_preset()` matches by family (`chrome*` → Chrome) — exact-version fingerprint matching is a phase 0.7 deliverable. See `packages/net-rs/src/ffi/preset.rs`. | ||
| ## Hand-corrections | ||
| None at import time. The harvester's `navigator` snapshot is captured by real Chrome (not headless), so the `--headless=new` artifacts that needed manual correction in `mac-m4-chrome-stable` (task 0070) are absent here. | ||
+2
-2
| { | ||
| "name": "@mochi.js/profiles", | ||
| "version": "0.0.4", | ||
| "version": "0.1.0", | ||
| "description": "Profile data fixtures for mochi — captured baselines (profile.json + Probe Manifest + audio bytes + canvas hashes) per device class.", | ||
@@ -42,3 +42,3 @@ "license": "MIT", | ||
| "dependencies": { | ||
| "@mochi.js/consistency": "^0.1.1" | ||
| "@mochi.js/consistency": "^0.1.2" | ||
| }, | ||
@@ -45,0 +45,0 @@ "publishConfig": { |
+5
-0
@@ -31,2 +31,7 @@ /** | ||
| "linux-chrome-stable", | ||
| // Imported from harvester corpus per task 0260. | ||
| "mac-chrome-stable", | ||
| "mac-chrome-beta", | ||
| "windows-chrome-stable", | ||
| "mac-brave-stable", | ||
| ] as const satisfies readonly string[]; | ||
@@ -33,0 +38,0 @@ |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
319481
999.16%30
200%11091
1018.04%1
Infinity%Updated