# Integrate the Password Manager SDK

## Prerequisites

1. [Complete the Getting Started Guide](https://docs.sudoplatform.com/guides/getting-started)
2. [Integrate the User SDK](https://docs.sudoplatform.com/guides/users/integrate-the-user-sdk)
3. [Integrate the Sudo Profiles SDK](https://docs.sudoplatform.com/guides/sudos/integrate-the-sudo-sdk)
4. [Integrate the Entitlements SDK](https://docs.sudoplatform.com/guides/entitlements/end-user-api/integrate-the-entitlements-sdk)

## Get Started

* [Integrate the JS SDK](#integrate-the-js-sdk)
* [Integrate the iOS SDK](#integrate-the-ios-sdk)
* [Integrate the Android SDK](#integrate-the-android-sdk)

## Integrate the JS SDK

{% hint style="success" %}
To gain access to the JS SDK and sample app providing a reference for integrating the SDK, please [contact us](https://sudoplatform.com/#lets-chat).
{% endhint %}

To use the **Password Manager SDK** in a Web or Node.js project, you must add `@sudoplatform/sudo-password-manager` as a dependency to your project.

```bash
yarn add '@sudoplatform/sudo-password-manager'
# or
npm install --save '@sudoplatform/sudo-password-manager'
```

{% hint style="info" %}
In order to instantiate a Password Manager client, make sure you have followed instructions for [Getting Started](https://docs.sudoplatform.com/guides/getting-started), [User SDK](https://docs.sudoplatform.com/guides/users/integrate-the-user-sdk), [Sudo Profiles SDK](https://docs.sudoplatform.com/guides/sudos/integrate-the-sudo-sdk) and [Entitlements SDK](https://docs.sudoplatform.com/guides/entitlements/end-user-api/integrate-the-entitlements-sdk) (see [Prerequisites](#prerequisites) above).

In addition, the **Password Manager SDK** depends on the Sudo Secure Vault SDK. You can provide these dependencies when instantiating the `PasswordManagerClient`.
{% endhint %}

To instantiate and initialize a client in your application, add the following:

{% tabs %}
{% tab title="TypeScript" %}

```typescript
import {
    PasswordManagerClient,
    BrowserKeyDerivingKeyStore
} from '@sudoplatform/sudo-password-manager'
import { DefaultConfigurationManager } from '@sudoplatform/sudo-common'
import { DefaultSudoUserClient } from '@sudoplatform/sudo-user'
import { DefaultSudoProfilesClient } from '@sudoplatform/sudo-profiles'
import { DefaultSudoEntitlementsClient } from '@sudoplatform/sudo-entitlements'
import { DefaultSudoSecureVaultClient } from '@sudoplatform/sudo-secure-vault'

const sdkConfigJSON = /* ... refer to Users documentation ... */
DefaultConfigurationManager.getInstance().setConfig(sdkConfigJSON)

const secretCodeStore = new BrowserKeyDerivingKeyStore()
const userClient = new DefaultSudoUserClient(/* refer to Users documentation */)
const profilesClient = new DefaultSudoProfilesClient(/* refer to Sudos documentation */)
const entitlementsClient = new DefaultSudoEntitlementsClient(/* refer to Entitlements documentation */)
const secureVaultConfig = undefined // undefined to use the config from DefaultConfigurationManager

const client = new PasswordManagerClient(
    secretCodeStore,
    userClient,
    profilesClient,
    entitlementsClient,
    secureVaultConfig,
    { logBackgroundReconciliationError: console.warn }
)
```

{% endtab %}
{% endtabs %}

## Integrate the iOS SDK

{% hint style="success" %}
To gain access to the iOS SDK and iOS sample app providing a reference for integrating the SDK, please [contact us](https://sudoplatform.com/#lets-chat).
{% endhint %}

Add this line to your [Podfile](https://docs.sudoplatform.com/getting-started#ios-only-setup-cocoapods-in-a-project):

```swift
pod 'SudoPasswordManager'
```

Install pod dependencies by running the following command in your project directory:

```swift
pod install --repo-update
```

This will update the local CocoaPods repository and install the latest version of the **Password Manager SDK**.

{% hint style="info" %}
In order to instantiate a Password Manager client, make sure you have followed instructions for [Getting Started](https://docs.sudoplatform.com/guides/getting-started), [User SDK](https://docs.sudoplatform.com/guides/users/integrate-the-user-sdk), [Sudo Profiles SDK](https://docs.sudoplatform.com/guides/sudos/integrate-the-sudo-sdk) and [Entitlements SDK](https://docs.sudoplatform.com/guides/entitlements/end-user-api/integrate-the-entitlements-sdk) (see [Prerequisites](#prerequisites) above).
{% endhint %}

To instantiate a client in your application, add the following:

{% tabs %}
{% tab title="Swift" %}

```swift
import SudoEntitlements
import SudoPasswordManager
import SudoProfiles
import SudoUser

let userClient = // ... see "Users" docs
let profilesClient = // ... see "Sudos" docs
let entitlementsClient = // ... see "Entitlements" docs

let passwordManagerClient = try DefaultPasswordManagerClient(
    userClient: userClient, 
    profilesClient: profilesClient, 
    entitlementsClient: entitlementsClient
)
```

{% endtab %}
{% endtabs %}

{% hint style="warning" %}
You only need one client instance for a given user per device. Instantiating multiple clients with the same configuration and using them at the same time may cause unexpected runtime errors to occur.
{% endhint %}

{% hint style="success" %}
**See it in action.** Be sure to take a look at the [open-source iOS sample app](https://github.com/sudoplatform/samples-ios/tree/master/password-manager) on GitHub that our team published as a reference for integrating the **Password Manager SDK** into your app as quickly and seamlessly as possible.
{% endhint %}

## Integrate the Android SDK

{% hint style="success" %}
To gain access to the Android SDK and Android sample app providing a reference for integrating the SDK, please [contact us](https://sudoplatform.com/#lets-chat).
{% endhint %}

The Android SDK is open source and compatible with Android 6 (API level 23) and above.

{% tabs %}
{% tab title="Gradle" %}
Add this line to the dependencies section of the app module `build.gradle` and synchronize your project with Android Studio.

```kotlin
dependencies {
    implementation 'com.sudoplatform:sudopasswordmanager:$latest_version'
}
```

{% hint style="info" %}
The latest version of the SDK can be found at [SDK Releases](https://docs.sudoplatform.com/guides/email/sdk-releases).
{% endhint %}

{% hint style="info" %}
In order to instantiate a Password Manager client, make sure you have followed instructions for [Getting Started](https://docs.sudoplatform.com/guides/getting-started), [User SDK](https://docs.sudoplatform.com/guides/users/integrate-the-user-sdk), [Sudo Profiles SDK](https://docs.sudoplatform.com/guides/sudos/integrate-the-sudo-sdk) and [Entitlements SDK](https://docs.sudoplatform.com/guides/entitlements/end-user-api/integrate-the-entitlements-sdk) (see [Prerequisites](#prerequisites) above).
{% endhint %}
{% endtab %}
{% endtabs %}

To instantiate a client in your application, add the following:

{% tabs %}
{% tab title="Kotlin" %}

```kotlin
val logger = // ... use your implemenation of logger
val userClient = // ... see "Users" docs
val profilesClient = // ... see "Sudos" docs

val sudoPasswordManager = SudoPasswordManagerClient.builder()
            .setContext(appContext)
            .setSudoUserClient(userClient)
            .setSudoProfilesClient(profilesClient)
            .setLogger(logger)
            .build()
```

{% endtab %}
{% endtabs %}

{% hint style="warning" %}
You only need one client instance for a given user per device. Instantiating multiple clients with the same configuration and using them at the same time may cause unexpected runtime errors to occur.
{% endhint %}

{% hint style="success" %}
**See it in action.** Be sure to take a look at the [open source Android sample app](https://github.com/sudoplatform/samples-android/tree/master/password-manager) on GitHub that our team published as a reference for integrating the **Password Manager SDK** into your app as quickly and seamlessly as possible.
{% endhint %}
