# @capgo/capacitor-autofill-save-password

Prompt to display dialog for saving password to keychain from webview app

 <a href="https://capgo.app/"><img src='https://raw.githubusercontent.com/Cap-go/capgo/main/assets/capgo_banner.png' alt='Capgo - Instant updates for capacitor'/></a>

<div align="center">
  <h2><a href="https://capgo.app/?ref=plugin"> ➡️ Get Instant updates for your App with Capgo 🚀</a></h2>
  <h2><a href="https://capgo.app/consulting/?ref=plugin"> Fix your annoying bug now, Hire a Capacitor expert 💪</a></h2>
</div>

Fork of original plugin to work with Capacitor 7 

IOS work for old versions and 18.3

Android still WIP

## Install

```bash
npm install @capgo/capacitor-autofill-save-password
npx cap sync
```

## Prerequisite
You must set up your app’s associated domains. To learn how to set up your app’s associated domains, see [Supporting Associated Domains](https://developer.apple.com/documentation/safariservices/supporting_associated_domains) in Apple Developer document.

Then add in your `App.entitlements`

```xml
	<key>com.apple.developer.associated-domains</key>
	<array>
		<string>webcredentials:YOURDOMAIN</string>
	</array>
```

To associate your domain to your app.

## How to use
```ts
import { Capacitor } from '@capacitor/core';
import { SavePassword } from '@capgo/capacitor-autofill-save-password';
    
login(username: string, password: string) {
    // your login logic here
        
        SavePassword.promptDialog({
            username: username,
            password: password,
        })
        .then(() => console.log('promptDialog success'))
        .catch((err) => console.error('promptDialog failure', err));
}
```


### Android

Add `apply plugin: 'com.google.gms.google-services'` beneath `apply plugin: 'com.android.application'` in `android/app/build.gradle`

this will allow the plugin to import the proper lib.

Then you need to make sure you did set properly your domain and did add google-services.json.

guide here https://developer.android.com/identity/sign-in/credential-manager

You need to have the file at this path `android/google-services.json` set, if you dont use firebase add empty json

then add your domain in `example-app/android/app/src/main/res/values/strings.xml`

with 
```xml
    <string name="asset_statements" translatable="false">
    [{
    \"include\": \"https://YOURDOMAIN/.well-known/assetlinks.json\"
    }]
    </string>
```

## API

<docgen-index>

* [`promptDialog(...)`](#promptdialog)
* [`readPassword()`](#readpassword)
* [Interfaces](#interfaces)

</docgen-index>

<docgen-api>
<!--Update the source file JSDoc comments and rerun docgen to update the docs below-->

### promptDialog(...)

```typescript
promptDialog(options: Options) => Promise<void>
```

Save a password to the keychain.

| Param         | Type                                        | Description                     |
| ------------- | ------------------------------------------- | ------------------------------- |
| **`options`** | <code><a href="#options">Options</a></code> | - The options for the password. |

--------------------


### readPassword()

```typescript
readPassword() => Promise<ReadPasswordResult>
```

Read a password from the keychain. Requires the developer to setup associated domain for the app for iOS.

**Returns:** <code>Promise&lt;<a href="#readpasswordresult">ReadPasswordResult</a>&gt;</code>

--------------------


### Interfaces


#### Options

| Prop           | Type                | Description                                                                |
| -------------- | ------------------- | -------------------------------------------------------------------------- |
| **`username`** | <code>string</code> | The username to save.                                                      |
| **`password`** | <code>string</code> | The password to save.                                                      |
| **`url`**      | <code>string</code> | The url to save the password for. (For example: "web.capgo.app") iOS only. |


#### ReadPasswordResult

| Prop           | Type                | Description                   |
| -------------- | ------------------- | ----------------------------- |
| **`username`** | <code>string</code> | The username of the password. |
| **`password`** | <code>string</code> | The password of the password. |

</docgen-api>
