# @bureau/device-intelligence

React Native SDK for Bureau Device Intelligence with sophisticated native module integration.

## Installation

```bash
yarn add @bureau/device-intelligence
```

### iOS Setup

```bash
cd ios && pod install
```

### Android Setup

No additional setup required for Android.

## Usage

```typescript
import {
  initDeviceIntelligence,
  submitDeviceIntelligence,
  enableRiskMonitoring,
  disableMonitoring,
  setUserId,
  setMetaInfo,
  setFlow,
  isInitialized,
  getUserId,
  Environment,
  RiskMonitoringMode,
} from '@bureau/device-intelligence';

// Initialize the SDK
initDeviceIntelligence({
  credentialId: 'your-credential-id',
  env: Environment.SANDBOX,
});

// Set user information
setUserId('user-123');
setMetaInfo({
  sessionId: 'session-456',
  flow: 'onboarding',
});

// Submit device intelligence data
const result = await submitDeviceIntelligence();
console.log('Device insights:', result.insights);

// Enable risk monitoring
await enableRiskMonitoring({
  mode: RiskMonitoringMode.CONTINUOUS,
  frequency: 5000,
  suspiciousSignalCallback: {
    onDeviceRooted: (isRooted) => {
      console.log('Device rooted:', isRooted);
    },
    onDeveloperModeStatusChanged: (isEnabled) => {
      console.log('Developer mode:', isEnabled);
    },
  },
});

// Disable monitoring when done
await disableMonitoring();
```

## API Reference

### Core Functions

- `initDeviceIntelligence(config: BureauConfig): void` - Initialize the SDK
- `submitDeviceIntelligence(): Promise<SubmitResponse>` - Submit device data
- `isInitialized(): Promise<boolean>` - Check if SDK is initialized
- `getUserId(): Promise<string>` - Get current user ID

### Configuration Functions

- `setUserId(userId: string): void` - Set user ID
- `setMetaInfo(metaInfo: MetaInfo): void` - Set metadata
- `setFlow(flow: string): void` - Set flow identifier

### Risk Monitoring

- `enableRiskMonitoring(options: RiskMonitoringOptions): Promise<string>` - Enable monitoring
- `disableMonitoring(): Promise<string>` - Disable monitoring

### Types

- `BureauConfig` - SDK configuration
- `MetaInfo` - Metadata information
- `SubmitResponse` - Response from device intelligence submission
- `RiskMonitoringOptions` - Risk monitoring configuration
- `SuspiciousSignalCallback` - Callback functions for suspicious signals
- `Environment` - SDK environment (PRODUCTION, SANDBOX)
- `RiskMonitoringMode` - Monitoring mode (CONTINUOUS, INSTANT)

## Native Module Integration

### iOS

The iOS native module provides:
- Device fingerprinting
- Jailbreak detection
- App store validation
- Frida detection
- Risk assessment

### Android

The Android native module provides:
- Device fingerprinting
- Root detection
- ADB status monitoring
- App cloning detection
- Debugging detection
- Risk assessment

## Permissions

The SDK requires the following permissions:

### Android

```xml
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
```

### iOS

No additional permissions required.

## License

MIT