Machine-readable inventory

Device signal and backend contract catalog

Every public probe and selectable top-level field, with platform, sensitivity, permission, default-state, and missing-data semantics.

How collection is organized

A probe is an independently executed group of related observations. Each probe can succeed, be skipped, time out, or return an error without invalidating the rest of the event.

Field availability depends on the platform, OS version, device hardware, host-app permissions, and collection configuration. Missing does not mean safe.

Backend event contract

Design the ingestion boundary around the stable event envelope and an open map of probe outcomes. Probe IDs and successful data fields are additive, so consumers should tolerate unknown keys while validating the fields they use.

type RawSignalEvent = {
  session_id: string;
  client_id?: string;
  event_type: "device_intel_collection";
  schema_version: number;
  collected_at: string; // ISO 8601
  probes: Record<string,
    | { status: "success"; data: Record<string, unknown> }
    | { status: "skipped"; reason: string }
    | { status: "timeout" }
    | { status: "error"; error: string }
  >;
};
Version the envelope

schema_version changes only when the event envelope changes. New probe IDs can appear without an envelope version bump.

Keep absence distinct

An omitted field, a skipped probe, a timeout, an error, and an observed false are different states.

Allow additive data

Persist the SDK version with your event and ignore unknown probe IDs or fields until your backend explicitly adopts them.

Validate successful data

Use the table below for selectable names and the exported TypeScript types for exact scalar, array, and nested-object shapes.

Probe catalog

Use the filters to review platform coverage. High-sensitivity and expensive probes require extra purpose, retention, and calibration review.

Probe and purposeAvailabilityData classificationPermission behavior and notesPossible success data
device_identityDevice identity

Describe the claimed device and operating-system build for consistency checks.

Android + iOSdefault on
high sensitivitydeviceoperating_system

No permission required

13 top-level fields
manufacturermodelbrandsystemNamesystemVersionisTabletosBuildkernelVersionkernelOsReleasekernelOsTypeandroidBuildisIosAppOnMacisMacCatalystApp
hardwareHardware

Collect coarse hardware, display, memory, battery, and device-class observations.

Android + iOSdefault on
high sensitivityhardwaredisplaybatterystoragenfc_state

No permission required

Detailed battery/power and NFC state are Android-only. Storage and uptime are Android-only because the corresponding iOS APIs require additional declarations.

35 top-level fields
screenWidthPxscreenHeightPxscreenDensityscreenDpiscreenPhysicalWidthPxscreenPhysicalHeightPxscreenPhysicalDensityscreenBrightnessscreenOrientationprocessorCountcpuArchitecturecpuMaxFrequencyMhztotalMemoryBytesfreeMemoryBytesisLowMemoryprocessResidentMemoryBytesisLowRamDeviceruntimeMaxMemoryByteslowPowerModeEnabledbatteryLevelbatteryStatebatteryTemperatureCbatteryHealthbatteryVoltageMvbatteryTechnologybatteryPresentbatteryLowpowerSourcebatteryCycleCountchargeTimeRemainingMsnfcAvailablenfcEnabledstorageTotalBytesstorageFreeBytesuptimeMs
fontsInstalled fonts

Produce a platform-local digest of installed font names for consistency analysis.

Android + iOSdefault on
high sensitivityinstalled_fonts

No permission required

Digests are comparable only within the same platform and are not persistent device identifiers.

1 top-level fields
fontsDigest
os_integrityOS integrity

Expose root, jailbreak, emulator, debugger, hook, and boot-integrity observations.

Android + iOSdefault on
high sensitivitydevice_integrityruntime_security

No permission required

Returns explainable raw evidence. Weak Android build markers and device-farm markers are reported but do not set isEmulator without a stronger emulator observation.

53 top-level fields
isEmulatorisDebuggerAttachedisDebuggerWaitingdeveloperModeEnabledusbDebuggingEnabledsuBinaryFoundrootManagementAppFoundsuspiciousFilePathsFoundsuspiciousFilePathswritableSystemPathFounddangerousPropsPresentdangerousSystemPropertiescanOpenJailbreakSchemesymbolicLinksSuspiciousinjectedLibrariesFoundinjectedLibraryNamesloadedHookClassNameshookFrameworkFoundmagiskMountsFoundverifiedBootStatebootloaderLockedselinuxEnforcingldPreloadSetldPreloadValuehiddenApiPolicyemulatorFingerprintMatchemulatorFilesFoundemulatorBuildMarkersemulatorFilePathsemulatorSystemPropertyMarkersemulatorCpuMarkersemulatorVendorMarkersdeviceFarmMarkersemulatorChecksPerformedsensorCounthasAccelerometerhasGyroscopehasMagnetometerhasProximitySensorisRunningInUserTestHarnesssimulatorEnvironmentPresentabidyldImageCounttracerPidtracedByOtherProcesstestKeysBuildsuspiciousMountsFoundzygiskIndicatorsFoundsuspiciousExecutableMappingsFoundsuspiciousEnvironmentVariablesFoundsuspiciousEnvironmentVariableNamessuspiciousPathCountinjectedLibraryCount
os_integrity_frida_scanFrida port scan

Check the local Frida server default port as an active instrumentation signal.

Androiddefault on
moderate sensitivityruntime_security

No permission required

3 top-level fields
scanPerformeddefaultPortOpenscannedPort
os_integrity_fork_testiOS fork jailbreak test

Test whether the iOS process can fork outside the normal application sandbox.

iOSdefault off
high sensitivitydevice_integrity

No permission required

Disabled until stability is validated on a representative physical-device lab.

2 top-level fields
testPerformedforkSucceeded
networkNetwork context

Describe connectivity, VPN, proxy, interfaces, local addresses, and traffic counters.

Android + iOSdefault on
high sensitivitynetworklocal_ip_address

Uses ACCESS_NETWORK_STATE only when already declared by the host application

Active-link details require host-declared ACCESS_NETWORK_STATE. Missing permission/read failures are omitted; no DNS lookup or network request is performed. SSID and BSSID are normally absent.

24 top-level fields
isConnectedconnectionTypeisMeteredisVpnActiveisProxyConfiguredproxyHostproxyPortwifiSsidwifiBssidinterfaceNameslocalIpAddresseslinkDownstreamKbpslinkUpstreamKbpsnetworkTransportTypesdnsServerAddressesisPrivateDnsActiveprivateDnsServerNameactiveNetworkMtuisInternetValidatedhasCaptivePortalmobileRxBytesmobileTxByteswifiRxByteswifiTxBytes
telephonyTelephony context

Collect opportunistic carrier, SIM, roaming, and network-country observations.

Android + iOSdefault on
high sensitivitycarriersimcountry

Uses READ_PHONE_STATE only when already granted to the host application for SIM count

No phone-state permission is requested. IMEI is intentionally unavailable to normal applications.

14 top-level fields
phoneTypenetworkOperatorNamesimOperatorNamenetworkCountryIsosimCountryIsosimStatesimCounthasIccCardisNetworkRoamingdataStatecarrierMobileCountryCodecarrierMobileNetworkCodecarrierAllowsVoipimei
localeLocale

Describe locale, timezone, formatting, and keyboard-language consistency.

Android + iOSdefault on
moderate sensitivitylocaletimezonekeyboard_language

No permission required

13 top-level fields
languagelanguagescountrytimezoneIdtimezoneOffsetMinutesuses24HourClockcurrencyCodecalendardecimalSeparatorgroupingSeparatormeasurementSystemfirstDayOfWeekkeyboardLanguages
geolocationGeolocation context

Read permission state and an already-available last-known location without prompting.

Android + iOSdefault on
high sensitivityprecise_locationlocation_permission

Uses only location permission already granted to the host application

The SDK never requests location permission or starts an active location update. mockLocationAppsFound is reserved but not populated because broad package enumeration is prohibited.

14 top-level fields
authorizationStatushasCoarsePermissionlatitudelongitudeaccuracyMetersaltitudeMeterslocationServicesEnabledisFromMockProvidermockLocationAppsFoundisSimulatedBySoftwareisProducedByAccessoryproviderlocationAgeMsgnssSupported
media_bluetooth_appsMedia, Bluetooth, accessibility, and known apps

Expose media-route, paired-device count, accessibility, and finite known-app observations.

Android + iOSdefault on
high sensitivitymedia_routebluetoothaccessibilityinstalled_apps

Uses BLUETOOTH_CONNECT only when already granted to the host application

App visibility is limited to an audited finite list; QUERY_ALL_PACKAGES is not requested. iOS mirroring uses UIScreen.mirroredScreen rather than external-screen presence.

15 top-level fields
audioOutputRouteisMusicActiveisOtherAudioPlayingisScreenCapturedisScreenMirroredconnectedScreenCountmirroredScreenCountdisplayCountpresentationDisplayCountbluetoothBondedDeviceCountinstalledFlaggedAppsopenableFlaggedSchemesenabledAccessibilityServicesaccessibilityRunningaccessibilityFeatures
gpu_benchmarkGPU benchmark

Collect GPU identity and bounded workload timing for device-class consistency analysis.

Android + iOSdefault off
high sensitivitygpuperformance

No permission required

Disabled by default because it is high entropy and requires device-lab calibration.

15 top-level fields
benchmarkPerformedskippedReasonrendererNamevendorNameapiVersionshadingLanguageVersionmaxTextureSizedrawCallsCompleteddurationMsgpuTimeMsoperationTimeP50MsoperationTimeP95MsoperationTimeMadMsoperationTimeCoefficientOfVariationwarmupSlope
audio_latencyAudio latency

Collect coarse audio pipeline properties for device-class consistency analysis.

Android + iOSdefault off
high sensitivityaudio_hardwareperformance

No permission required

Disabled by default pending representative device-lab calibration.

6 top-level fields
measuredoutputLatencyMsinputLatencyMsioBufferDurationMsframesPerBuffernativeSampleRate
applicationHost application

Describe the host app, install source, granted permissions, and package delivery shape.

Android + iOSdefault on
moderate sensitivityapplicationinstall_provenancepermissions

No permission required

getTaskAllowEntitlement is reserved but not populated because the public iPhoneOS headers do not expose a supported entitlement lookup API.

28 top-level fields
appVersionappBuildbundleIdappNameinstallerPackageisForegroundprocessUptimeMsgrantedPermissionsisSplitApkssplitNamesfirstInstallTimeMslastUpdateTimeMstargetSdkVersionminSdkVersionminimumOsVersionisDebuggableisInstantAppsigningCertificateSha256signingCertificateHistorySha256hasMultipleSignersreceiptPresentreceiptEnvironmentbundleExecutableisAppExtensionisSimulatorBuildisInstalledOnExternalStorageembeddedProvisioningProfilePresentgetTaskAllowEntitlement
device_security_postureDevice security posture

Expose coarse lock, biometric availability, trusted-time, provisioning, and security-update observations.

Android + iOSdefault on
moderate sensitivitydevice_securityauthentication_capabilityoperating_system

No permission required

Reports capability/state only and never displays an authentication prompt or reads biometric material.

13 top-level fields
hasSecureLockScreenisDeviceLockedisUserUnlockedprotectedDataAvailablebiometryAvailablebiometryTypefingerprintHardwarePresentfaceHardwarePresentstrongBoxAvailableautomaticTimeEnabledautomaticTimeZoneEnableddeviceProvisionedsecurityPatch
transaction_safetyTransaction safety

Collect point-in-time remote-control, screen-capture, accessibility, lock, and call-state observations.

Android + iOSdefault off
high sensitivityruntime_securityaccessibilityinstalled_appsdevice_state

No permission required

Ships disabled until physical-device calibration; collect immediately before a protected action.

11 top-level fields
isDeviceLockedisInteractiveisScreenCapturedisScreenMirroredaccessibilityRunningaccessibilityFeatureCountenabledAccessibilityServiceCountremoteAccessAppsFoundremoteAccessAppCountaudioModeisCallActive
runtimeReact Native runtime

Describe the JavaScript engine and active React Native architecture.

Android + iOSdefault on
low sensitivityruntimesoftware_version

No permission required

9 top-level fields
jsEnginehermesVersionisHermesisFabricisTurboModuleisBridgelessisDebugBuildreactNativeVersionplatformOs
runtime_timingRuntime timing profile

Measure bounded JS event-loop, native clock, and JS-to-native call timing distributions.

Android + iOSdefault off
high sensitivityruntimeperformance

No permission required

Disabled by default because timing is noisy, high entropy, and requires physical-device calibration.

14 top-level fields
jsClockSourcejsTimerSampleCountjsTimerResolutionMseventLoopSampleCounteventLoopP50MseventLoopP95MseventLoopMadMsbridgeRoundTripMsnativeClockSourcenativeSampleCountnativeTimerResolutionNsnativeIntervalMedianNsnativeIntervalP95NsnativeIntervalMadNs
numeric_consistencyNumeric runtime consistency

Compare deterministic integer and floating-point behavior across JavaScript and native runtimes.

Android + iOSdefault off
high sensitivityruntimeperformance

No permission required

Disabled by default; returns comparison aggregates rather than raw stable identifiers or a verdict.

7 top-level fields
integerVectorMatchesintegerMismatchCountfloatSampleCountfloatMismatchCountfloatMaxAbsoluteDifferencesignedZeroPreservedsubnormalPreserved

Independent probe outcomes

OutcomeMeaningBackend treatment
successThe probe returned an observation payload.Validate schema and freshness before feature use.
skippedConfiguration, consent, platform, or capability excluded the probe.Keep separate from negative evidence.
timeoutThe configured deadline elapsed.Monitor collection health, do not convert to a safe value.
errorThe probe failed in isolation.Track error class and SDK version operationally.

Source of truth

The typed catalog in src/probeCatalog.ts is authoritative. It includes every selectable field, purpose, data category, platform, sensitivity level, permission note, and default state.

Open the full data dictionary on GitHub.