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.

typescript
interface 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

typescript
interface CanvasSignal { hash: string; // SHA-256 of the rendered canvas pixel data isFarbled: boolean; // true if Brave canvas farbling was detected }

WebGLSignal

typescript
interface 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

typescript
interface 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

typescript
interface 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

typescript
interface 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

typescript
interface 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

typescript
interface ErrorSignal { messages: string[]; // 9 engine-specific error message strings hash: string; // SHA-256 of concatenated error messages }

SpeechSignal

typescript
interface 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

typescript
interface FontsSignal { count: number; // Number of detected fonts out of ~650 tested detectedFonts: string[]; // Names of detected font families }

TimezoneSignal

typescript
interface 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

typescript
interface 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

typescript
interface 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

typescript
interface HeadlessSignal { isHeadless: boolean; // true if any headless markers found webdriver: boolean; // navigator.webdriver flag markers: string[]; // Specific markers detected (e.g., "PUPPETEER", "PLAYWRIGHT") }

ResistanceSignal

typescript
interface 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.

Ask a question... ⌘I