Skip to content

v0.5.0 — Richer raw device context, clearer semantics

Choose a tag to compare

@AfanasievN AfanasievN released this 21 Jul 11:53
· 33 commits to main since this release

v0.5.0 — richer raw device context, clearer semantics

This release adds 23 new raw observations implemented with Android and Apple system APIs. The SDK
still performs no network request and returns no score, trust verdict, or blocking decision.

Highlights

Detailed Android battery, power, and NFC context

  • batteryHealth, batteryVoltageMv, batteryTechnology, and batteryPresent expose the values
    available from the system battery broadcast.
  • batteryLow reports Android's own low-battery classification; powerSource distinguishes battery,
    AC, USB, wireless, and dock power where the platform provides it.
  • Android 14+ may report batteryCycleCount, while Android 9+ may report
    chargeTimeRemainingMs. Unsupported values and platform sentinels are omitted.
  • nfcAvailable and nfcEnabled report feature/adapter state without scanning a tag, opening an NFC
    flow, requesting a permission, or displaying a prompt.

Active-network context without network traffic

When the host application already declares ACCESS_NETWORK_STATE, Android may now return:

  • networkTransportTypes
  • dnsServerAddresses
  • isPrivateDnsActive and privateDnsServerName
  • activeNetworkMtu
  • isInternetValidated
  • hasCaptivePortal

These observations come from the active link's system metadata. Collection performs no DNS lookup,
socket connection, IP-reputation request, or vendor call. Missing permission and failed reads omit
the affected values. An offline result is returned only after a successful observation found no
active network.

Build, provisioning, and display topology

  • Android androidBuild.buildTimeMs exposes public Build.TIME; it is a platform-build timestamp,
    not an app installation timestamp.
  • iOS embeddedProvisioningProfilePresent reports only whether the host bundle contains
    embedded.mobileprovision; the profile is not parsed.
  • Android adds displayCount and presentationDisplayCount.
  • iOS adds connectedScreenCount and mirroredScreenCount; the connected count includes the main
    screen.

More honest unavailable-state behavior

  • iOS isScreenMirrored now checks UIScreen.mirroredScreen. A second display used for extended
    content is not automatically classified as mirroring.
  • Android no longer manufactures usbDebuggingEnabled: false from a setting ordinary modern apps
    cannot read reliably. The compatibility field is omitted.
  • getTaskAllowEntitlement is reserved as an optional field but not populated: the current public
    iPhoneOS SDK headers do not expose a supported entitlement lookup API. The package does not
    hand-declare unsupported symbols or replace an unavailable read with false.

Compatibility and privacy

  • Backward-compatible additive API for React Native 0.76+ with the New Architecture enabled.
  • Every new field is optional and preserves the distinction between unavailable and an observed
    negative value.
  • No npm, Gradle, CocoaPods, or bundled native-binary dependencies were added.
  • No new Android permissions, permission prompts, network requests, persistent identifiers,
    QUERY_ALL_PACKAGES, or Apple Required-Reason API declarations were added.
  • Focused TypeScript and Kotlin regressions cover field/catalog parity, platform omissions,
    connectivity policy, battery enum/sentinel handling, dependency boundaries, and privacy manifests.

Upgrade

npm install react-native-device-risk-signals@0.5.0

For iOS applications, refresh CocoaPods after updating the package:

cd ios && bundle exec pod install

No configuration migration is required. Hosts that already grant ACCESS_NETWORK_STATE can receive
the new Android link observations; the SDK itself still declares no permission.

See the complete changelog
and Data Dictionary
for field-level detail.