Signal Types Reference
TypeScript type definitions for all 29 signal collectors.
Signal Result Wrapper
Every signal is wrapped in a SignalResult<T>. Signals that fail to collect (due to blocked APIs, browser restrictions, or errors) return null rather than throwing.
typescriptinterface SignalResult<T> { value: T; // The signal data duration: number; // Collection time in milliseconds }
All signal values in the /v1/identify request body are SignalResult objects. The duration field is used internally for performance monitoring and to detect artificially slow signal collection (which can indicate automation).
Signal Type Definitions
CanvasSignal
typescriptinterface CanvasSignal { hash: string; // SHA-256 of the rendered canvas pixel data isFarbled: boolean; // true if Brave canvas farbling was detected }
WebGLSignal
typescriptinterface WebGLSignal { renderer: string; // GPU model (e.g., "ANGLE (Apple, ANGLE Metal Renderer: Apple M1 Max)") vendor: string; // GPU vendor string extensions: string[]; // Supported WebGL extensions params: Record<string, number>; // GL parameters (MAX_TEXTURE_SIZE, etc.) gpuTimingMs: number | null; // GPU benchmark timing in ms isSoftwareRenderer: boolean; // true if SwiftShader/LLVMpipe/Mesa detected }
AudioSignal
typescriptinterface AudioSignal { hash: string; // SHA-256 of the first 100 rendered audio buffer samples sampleRate: number; // AudioContext sample rate (e.g., 44100) maxChannelCount: number; // Max output channels isSuspended: boolean; // true if AudioContext is in suspended state }
NavigatorSignal
typescriptinterface NavigatorSignal { hardwareConcurrency: number; // Logical CPU core count deviceMemory: number | null; // RAM in GB (Chrome only, rounded to nearest power of 2) maxTouchPoints: number; // 0 for non-touch devices languages: string[]; // e.g., ["en-US", "en"] platform: string; // e.g., "MacIntel", "Win32" cookieEnabled: boolean; doNotTrack: string | null; keyboardLayout: string | null; connectionType: string | null; // e.g., "wifi", "4g" hasBluetooth: boolean; hasUsb: boolean; hasHid: boolean; hasSerial: boolean; hasWakeLock: boolean; hasGpu: boolean; bluetoothAvailable: boolean | null; }
ScreenSignal
typescriptinterface ScreenSignal { width: number; height: number; availWidth: number; // Usable width minus taskbar availHeight: number; // Usable height minus taskbar colorDepth: number; // Bits per color component pixelRatio: number; // devicePixelRatio isRfpRounded: boolean; // true if Firefox RFP rounding detected }
MathSignal
typescriptinterface MathSignal { hash: string; // Hash of computed Math function outputs values: { sin: number; cos: number; tan: number; log: number; sqrt: number; asin: number; atan: number; exp: number; }; }
ErrorSignal
typescriptinterface ErrorSignal { messages: string[]; // 9 engine-specific error message strings hash: string; // SHA-256 of concatenated error messages }
SpeechSignal
typescriptinterface SpeechSignal { voiceCount: number; // Total installed TTS voices localVoices: string[]; // Local (offline) voice names remoteVoiceCount: number; // Remote (online) voice count defaultVoice: string | null; // Default voice name hash: string; // SHA-256 of voice list }
FontsSignal
typescriptinterface FontsSignal { count: number; // Number of detected fonts out of ~650 tested detectedFonts: string[]; // Names of detected font families }
TimezoneSignal
typescriptinterface TimezoneSignal { timezone: string; // IANA timezone (e.g., "America/New_York") offset: number; // UTC offset in minutes isSpoofed: boolean; // true if timezone inconsistency detected historicalOffset: number; // Offset 6 months ago (DST cross-check) }
WalletSignal
typescriptinterface WalletSignal { detected: string[]; // Wallet names found (e.g., ["MetaMask", "Phantom"]) count: number; // Total wallets installed evmProviders: string[]; // EVM-compatible wallet names solanaProviders: string[]; // Solana wallet names multipleWallets: boolean; // true if more than one wallet detected versions: Record<string, string>; // Wallet name → version string }
IntegritySignal
typescriptinterface IntegritySignal { lieScore: number; // Count of tampered/faked APIs detected tamperedApis: string[]; // Names of APIs that failed toString() checks workerMismatch: boolean; // true if worker scope values differ from main thread }
HeadlessSignal
typescriptinterface HeadlessSignal { isHeadless: boolean; // true if any headless markers found webdriver: boolean; // navigator.webdriver flag markers: string[]; // Specific markers detected (e.g., "PUPPETEER", "PLAYWRIGHT") }
ResistanceSignal
typescriptinterface ResistanceSignal { isBrave: boolean; isTorBrowser: boolean; isFirefoxRfp: boolean; privacyExtensions: string[]; // Detected extension names timerPrecision: number; // Measured timer precision in ms }
See the full TypeScript definitions in sdk/src/types.ts for all 29 signal interfaces, including less common signals like WebGPUSignal, WasmTimingSignal, DOMRectSignal, IntlSignal, SVGSignal, and CodecSignal.