# ZSM Client SDK for React Native

## Contents

This SDK contains the resources needed to learn about Ideem's Universal MFA capabilities, and integrating it into your own React native applications.  These resources include documentation and example applications.

**NOTE:** Prior to integrating the SDK into your own applications, please reach out to Ideem
support, <a href="mailto:support@useideem.com">support@useideem.com</a>, to obtain configuration

---

## Getting Started

### Prerequisites

1. **React Native Version**: `>=0.60`
2. **Node.js Version**: `>=12.0.0`
3. An **Application ID** from Ideem. Reach out to [support@useideem.com](mailto:support@useideem.com) to obtain one.

---

### Installation

#### 1. Install the Package

```bash
npm install @ideem/zsm-react-native
```

Or with Yarn:

```bash
yarn add @ideem/zsm-react-native
```

#### 2. Link Native Modules

This library uses React Native's auto-linking. However, if manual linking is necessary:
- **iOS**: Add the following to your `Podfile`:
  ```ruby
  pod 'zsm-react-native', :path => '../node_modules/@ideem/zsm-react-native'
  ```
  Then run:
  ```bash
  cd ios && pod install
  ```

- **Android**: No additional setup is required unless auto-linking is disabled.

#### 3. Verify Installation
Check the library is correctly installed and linked:
```bash
react-native doctor
```

---

### Usage

#### **Basic Integration Example**
Here’s how to initialize and use the SDK:

```javascript
import { UMFAClient } from '@ideem/zsm-react-native';

const config = {
  region: 'YOUR_REGION',
  application_id: 'YOUR_APPLICATION_ID',
  api_key: 'YOUR_API_KEY'
};

const client = new UMFAClient(config);

async function login(username) {
  try {
    const isEnrolled = await client.checkEnrollment(username);
    const token = isEnrolled
      ? await client.authenticate(username)
      : await client.enroll(username);

    console.log('Authentication Token:', token);
  } catch (error) {
    console.error('Error during authentication:', error.message);
  }
}
```

---

## Example Application

You can find example applications in the `examples/` directory. These include:
1. **Basic Authentication**: Demonstrates login and enrollment.
2. **Payment Flow**: Simulates payment using authentication.

To run an example, e.g. for the `umfa` example:
1. Navigate to the example directory:
   ```bash
   cd examples/umfa
   ```
2. Install dependencies:
   ```bash
   npm install
   ```
3. Start the development server:
   ```bash
   npm start
   ```

---

## Troubleshooting

- **React Native Environment Issues**:
  Ensure your environment is correctly configured for React Native. Refer to the [React Native Environment Setup](https://reactnative.dev/docs/environment-setup).

- **Native Dependency Issues**:
  - Run `pod install` for iOS.
  - Verify your `android/app/build.gradle` for proper linking.

---

### Documentation

Documentation can be viewed online at: 

* *UMFA*: <a href="https://docs.useideem.com/">https://docs.useideem.com/</a>. 

---

## Support

Support can be received by emailing <a href="mailto:support@useideem.com">support@useideem.com</a>
or accessing our Customer Support site at <a href="https://support.useideem.com">https://support.useideem.com</a>

---

## Legal

Copyright (C) Ideem, Inc. - All Rights Reserved

This source code and other resources included in this SDK are protected under international
copyright law. All rights reserved and protected by the copyright holders.

The files included in this distribution are confidential and only available to authorized
individuals with the permission of the copyright holders. If you encounter this file and
do not have permission, please contact the copyright holders and delete this file.

This library is proprietary and licensed under Ideem's terms of use. Unauthorized use or distribution is prohibited.
