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.
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 }
>;
};schema_version changes only when the event envelope changes. New probe IDs can appear without an envelope version bump.
An omitted field, a skipped probe, a timeout, an error, and an observed false are different states.
Persist the SDK version with your event and ignore unknown probe IDs or fields until your backend explicitly adopts them.
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 purpose | Availability | Data classification | Permission behavior and notes | Possible success data |
|---|---|---|---|---|
device_identityDevice identityDescribe the claimed device and operating-system build for consistency checks. |
13 top-level fieldsmanufacturermodelbrandsystemNamesystemVersionisTabletosBuildkernelVersionkernelOsReleasekernelOsTypeandroidBuildisIosAppOnMacisMacCatalystApp |
|||
hardwareHardwareCollect coarse hardware, display, memory, battery, and device-class observations. |
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 fieldsscreenWidthPxscreenHeightPxscreenDensityscreenDpiscreenPhysicalWidthPxscreenPhysicalHeightPxscreenPhysicalDensityscreenBrightnessscreenOrientationprocessorCountcpuArchitecturecpuMaxFrequencyMhztotalMemoryBytesfreeMemoryBytesisLowMemoryprocessResidentMemoryBytesisLowRamDeviceruntimeMaxMemoryByteslowPowerModeEnabledbatteryLevelbatteryStatebatteryTemperatureCbatteryHealthbatteryVoltageMvbatteryTechnologybatteryPresentbatteryLowpowerSourcebatteryCycleCountchargeTimeRemainingMsnfcAvailablenfcEnabledstorageTotalBytesstorageFreeBytesuptimeMs |
||
fontsInstalled fontsProduce a platform-local digest of installed font names for consistency analysis. |
Digests are comparable only within the same platform and are not persistent device identifiers. |
1 top-level fieldsfontsDigest |
||
os_integrityOS integrityExpose root, jailbreak, emulator, debugger, hook, and boot-integrity observations. |
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 fieldsisEmulatorisDebuggerAttachedisDebuggerWaitingdeveloperModeEnabledusbDebuggingEnabledsuBinaryFoundrootManagementAppFoundsuspiciousFilePathsFoundsuspiciousFilePathswritableSystemPathFounddangerousPropsPresentdangerousSystemPropertiescanOpenJailbreakSchemesymbolicLinksSuspiciousinjectedLibrariesFoundinjectedLibraryNamesloadedHookClassNameshookFrameworkFoundmagiskMountsFoundverifiedBootStatebootloaderLockedselinuxEnforcingldPreloadSetldPreloadValuehiddenApiPolicyemulatorFingerprintMatchemulatorFilesFoundemulatorBuildMarkersemulatorFilePathsemulatorSystemPropertyMarkersemulatorCpuMarkersemulatorVendorMarkersdeviceFarmMarkersemulatorChecksPerformedsensorCounthasAccelerometerhasGyroscopehasMagnetometerhasProximitySensorisRunningInUserTestHarnesssimulatorEnvironmentPresentabidyldImageCounttracerPidtracedByOtherProcesstestKeysBuildsuspiciousMountsFoundzygiskIndicatorsFoundsuspiciousExecutableMappingsFoundsuspiciousEnvironmentVariablesFoundsuspiciousEnvironmentVariableNamessuspiciousPathCountinjectedLibraryCount |
||
os_integrity_frida_scanFrida port scanCheck the local Frida server default port as an active instrumentation signal. |
3 top-level fieldsscanPerformeddefaultPortOpenscannedPort |
|||
os_integrity_fork_testiOS fork jailbreak testTest whether the iOS process can fork outside the normal application sandbox. |
Disabled until stability is validated on a representative physical-device lab. |
2 top-level fieldstestPerformedforkSucceeded |
||
networkNetwork contextDescribe connectivity, VPN, proxy, interfaces, local addresses, and traffic counters. |
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 fieldsisConnectedconnectionTypeisMeteredisVpnActiveisProxyConfiguredproxyHostproxyPortwifiSsidwifiBssidinterfaceNameslocalIpAddresseslinkDownstreamKbpslinkUpstreamKbpsnetworkTransportTypesdnsServerAddressesisPrivateDnsActiveprivateDnsServerNameactiveNetworkMtuisInternetValidatedhasCaptivePortalmobileRxBytesmobileTxByteswifiRxByteswifiTxBytes |
||
telephonyTelephony contextCollect opportunistic carrier, SIM, roaming, and network-country observations. |
No phone-state permission is requested. IMEI is intentionally unavailable to normal applications. |
14 top-level fieldsphoneTypenetworkOperatorNamesimOperatorNamenetworkCountryIsosimCountryIsosimStatesimCounthasIccCardisNetworkRoamingdataStatecarrierMobileCountryCodecarrierMobileNetworkCodecarrierAllowsVoipimei |
||
localeLocaleDescribe locale, timezone, formatting, and keyboard-language consistency. |
13 top-level fieldslanguagelanguagescountrytimezoneIdtimezoneOffsetMinutesuses24HourClockcurrencyCodecalendardecimalSeparatorgroupingSeparatormeasurementSystemfirstDayOfWeekkeyboardLanguages |
|||
geolocationGeolocation contextRead permission state and an already-available last-known location without prompting. |
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 fieldsauthorizationStatushasCoarsePermissionlatitudelongitudeaccuracyMetersaltitudeMeterslocationServicesEnabledisFromMockProvidermockLocationAppsFoundisSimulatedBySoftwareisProducedByAccessoryproviderlocationAgeMsgnssSupported |
||
media_bluetooth_appsMedia, Bluetooth, accessibility, and known appsExpose media-route, paired-device count, accessibility, and finite known-app observations. |
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 fieldsaudioOutputRouteisMusicActiveisOtherAudioPlayingisScreenCapturedisScreenMirroredconnectedScreenCountmirroredScreenCountdisplayCountpresentationDisplayCountbluetoothBondedDeviceCountinstalledFlaggedAppsopenableFlaggedSchemesenabledAccessibilityServicesaccessibilityRunningaccessibilityFeatures |
||
gpu_benchmarkGPU benchmarkCollect GPU identity and bounded workload timing for device-class consistency analysis. |
Disabled by default because it is high entropy and requires device-lab calibration. |
15 top-level fieldsbenchmarkPerformedskippedReasonrendererNamevendorNameapiVersionshadingLanguageVersionmaxTextureSizedrawCallsCompleteddurationMsgpuTimeMsoperationTimeP50MsoperationTimeP95MsoperationTimeMadMsoperationTimeCoefficientOfVariationwarmupSlope |
||
audio_latencyAudio latencyCollect coarse audio pipeline properties for device-class consistency analysis. |
Disabled by default pending representative device-lab calibration. |
6 top-level fieldsmeasuredoutputLatencyMsinputLatencyMsioBufferDurationMsframesPerBuffernativeSampleRate |
||
applicationHost applicationDescribe the host app, install source, granted permissions, and package delivery shape. |
getTaskAllowEntitlement is reserved but not populated because the public iPhoneOS headers do not expose a supported entitlement lookup API. |
28 top-level fieldsappVersionappBuildbundleIdappNameinstallerPackageisForegroundprocessUptimeMsgrantedPermissionsisSplitApkssplitNamesfirstInstallTimeMslastUpdateTimeMstargetSdkVersionminSdkVersionminimumOsVersionisDebuggableisInstantAppsigningCertificateSha256signingCertificateHistorySha256hasMultipleSignersreceiptPresentreceiptEnvironmentbundleExecutableisAppExtensionisSimulatorBuildisInstalledOnExternalStorageembeddedProvisioningProfilePresentgetTaskAllowEntitlement |
||
device_security_postureDevice security postureExpose coarse lock, biometric availability, trusted-time, provisioning, and security-update observations. |
Reports capability/state only and never displays an authentication prompt or reads biometric material. |
13 top-level fieldshasSecureLockScreenisDeviceLockedisUserUnlockedprotectedDataAvailablebiometryAvailablebiometryTypefingerprintHardwarePresentfaceHardwarePresentstrongBoxAvailableautomaticTimeEnabledautomaticTimeZoneEnableddeviceProvisionedsecurityPatch |
||
transaction_safetyTransaction safetyCollect point-in-time remote-control, screen-capture, accessibility, lock, and call-state observations. |
Ships disabled until physical-device calibration; collect immediately before a protected action. |
11 top-level fieldsisDeviceLockedisInteractiveisScreenCapturedisScreenMirroredaccessibilityRunningaccessibilityFeatureCountenabledAccessibilityServiceCountremoteAccessAppsFoundremoteAccessAppCountaudioModeisCallActive |
||
runtimeReact Native runtimeDescribe the JavaScript engine and active React Native architecture. |
9 top-level fieldsjsEnginehermesVersionisHermesisFabricisTurboModuleisBridgelessisDebugBuildreactNativeVersionplatformOs |
|||
runtime_timingRuntime timing profileMeasure bounded JS event-loop, native clock, and JS-to-native call timing distributions. |
Disabled by default because timing is noisy, high entropy, and requires physical-device calibration. |
14 top-level fieldsjsClockSourcejsTimerSampleCountjsTimerResolutionMseventLoopSampleCounteventLoopP50MseventLoopP95MseventLoopMadMsbridgeRoundTripMsnativeClockSourcenativeSampleCountnativeTimerResolutionNsnativeIntervalMedianNsnativeIntervalP95NsnativeIntervalMadNs |
||
numeric_consistencyNumeric runtime consistencyCompare deterministic integer and floating-point behavior across JavaScript and native runtimes. |
Disabled by default; returns comparison aggregates rather than raw stable identifiers or a verdict. |
7 top-level fieldsintegerVectorMatchesintegerMismatchCountfloatSampleCountfloatMismatchCountfloatMaxAbsoluteDifferencesignedZeroPreservedsubnormalPreserved |
Independent probe outcomes
| Outcome | Meaning | Backend treatment |
|---|---|---|
success | The probe returned an observation payload. | Validate schema and freshness before feature use. |
skipped | Configuration, consent, platform, or capability excluded the probe. | Keep separate from negative evidence. |
timeout | The configured deadline elapsed. | Monitor collection health, do not convert to a safe value. |
error | The 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.