@solana-mobile/seed-vault-lib 0.3.3-hotfix.2 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +97 -97
- package/android/build.gradle +2 -3
- package/android/src/main/java/com/solanamobile/seedvault/reactnative/SolanaMobileSeedVaultLibModule.kt +16 -16
- package/lib/types/index.d.ts +21 -21
- package/lib/types/index.native.d.ts +21 -21
- package/package.json +1 -1
- package/android/settings.gradle +0 -7
package/README.md
CHANGED
|
@@ -1,97 +1,97 @@
|
|
|
1
|
-
# `@solana-mobile/
|
|
2
|
-
|
|
3
|
-
A React Native wrapper of the Seed Vault SDK.
|
|
4
|
-
|
|
5
|
-
# Usage
|
|
6
|
-
|
|
7
|
-
### Check if Seed Vault is Available
|
|
8
|
-
We first need to check if the seed vault service is available on the device. Currently only Saga implementes a seed vault.
|
|
9
|
-
```javascript
|
|
10
|
-
const allowSimulated = false; // use true to allow simulated seed vault (for dev/testing)
|
|
11
|
-
const seedVaultAvailable = await SolanaMobileSeedVaultLib.isSeedVaultAvailable(allowSimulated);
|
|
12
|
-
if (!seedVaultAvailable) {
|
|
13
|
-
// seed vault is not available, we cant use it
|
|
14
|
-
}
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
### Request Seed Vault Permission
|
|
18
|
-
Before we can interact with Seed vault, we must request permission for our app to use Seed Vault.
|
|
19
|
-
```javascript
|
|
20
|
-
import { PermissionsAndroid } from 'react-native';
|
|
21
|
-
import { SeedVaultPermissionAndroid } from '@solana-mobile/seed-vault-lib';
|
|
22
|
-
|
|
23
|
-
const permissionResult = await PermissionsAndroid.request(
|
|
24
|
-
SeedVaultPermissionAndroid,
|
|
25
|
-
{ // customize verbage here to your liking
|
|
26
|
-
title: 'Seed Vault Permission',
|
|
27
|
-
message:
|
|
28
|
-
'This app needs your permission to access Seed Vault',
|
|
29
|
-
buttonNeutral: 'Ask Me Later',
|
|
30
|
-
buttonNegative: 'Cancel',
|
|
31
|
-
buttonPositive: 'OK',
|
|
32
|
-
},
|
|
33
|
-
);
|
|
34
|
-
|
|
35
|
-
if (permissionResult === PermissionsAndroid.RESULTS.GRANTED) {
|
|
36
|
-
// we can use seed vault, continue
|
|
37
|
-
} else {
|
|
38
|
-
// permission was denied, fallback
|
|
39
|
-
}
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
Read more about requesting Android Permission in React Natvie [here](https://reactnative.dev/docs/permissionsandroid).
|
|
43
|
-
|
|
44
|
-
### Authorize a Seed
|
|
45
|
-
Before our app can access any seeds in the seed vault, we must first request authorization for our app to use a seed from the user.
|
|
46
|
-
```javascript
|
|
47
|
-
import { SeedVault } from "@solana-mobile/seed-vault-lib";
|
|
48
|
-
|
|
49
|
-
const result = await SeedVault.authorizeNewSeed();
|
|
50
|
-
console.log(`New seed authorized! auth token: ${result.authToken}`);
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
### Retreive a list of Authorized Seeds
|
|
54
|
-
To retreive a list of all the seeds our app has been authorized to use, call `getAuthorizedSeeds()`.
|
|
55
|
-
```javascript
|
|
56
|
-
const authorizedSeeds = await SeedVault.getAuthorizedSeeds()
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
This will return a list of `Seed` objects with the following structure
|
|
60
|
-
```
|
|
61
|
-
{
|
|
62
|
-
authToken: number;
|
|
63
|
-
name: string;
|
|
64
|
-
purpose: int;
|
|
65
|
-
}
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
### Get Accounts for a given seed
|
|
69
|
-
Once we have obtained an authorized seed, we can get a list of all the accounts (public keys) assocaited with that seed
|
|
70
|
-
```javascript
|
|
71
|
-
const seed = authorizedSeeds[0]
|
|
72
|
-
const accounts = await SeedVault.getAccounts(seed.authToken)
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
### Retreive the PublicKey of an Account
|
|
76
|
-
Once we have obtained an authorized seed, we can get a list of all the accounts (public keys) assocaited with that seed
|
|
77
|
-
```javascript
|
|
78
|
-
const account = account[0]
|
|
79
|
-
const publicKey = await SeedVault.getPublicKey(seed.authToken, account.derivationPath);
|
|
80
|
-
// can now build transaction using the public key
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
This will return a `SeedPublicKey` object with the following structure
|
|
84
|
-
```
|
|
85
|
-
{
|
|
86
|
-
publicKey: Uint8Array;
|
|
87
|
-
publicKeyEncoded: string;
|
|
88
|
-
resolvedDerivationPath: string;
|
|
89
|
-
}
|
|
90
|
-
```
|
|
91
|
-
|
|
92
|
-
### Sign a Payload
|
|
93
|
-
Once we have obtained an account, we can request signatures from seed vault for that account:
|
|
94
|
-
```javascript
|
|
95
|
-
SeedVault.signMessage(seed.authToken, account.derivationPath, messageBytes);
|
|
96
|
-
SeedVault.signTransaction(seed.authToken, account.derivationPath, transactionByteArray);
|
|
97
|
-
```
|
|
1
|
+
# `@solana-mobile/seed-vault-lib`
|
|
2
|
+
|
|
3
|
+
A React Native wrapper of the Seed Vault SDK.
|
|
4
|
+
|
|
5
|
+
# Usage
|
|
6
|
+
|
|
7
|
+
### Check if Seed Vault is Available
|
|
8
|
+
We first need to check if the seed vault service is available on the device. Currently only Saga implementes a seed vault.
|
|
9
|
+
```javascript
|
|
10
|
+
const allowSimulated = false; // use true to allow simulated seed vault (for dev/testing)
|
|
11
|
+
const seedVaultAvailable = await SolanaMobileSeedVaultLib.isSeedVaultAvailable(allowSimulated);
|
|
12
|
+
if (!seedVaultAvailable) {
|
|
13
|
+
// seed vault is not available, we cant use it
|
|
14
|
+
}
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
### Request Seed Vault Permission
|
|
18
|
+
Before we can interact with Seed vault, we must request permission for our app to use Seed Vault.
|
|
19
|
+
```javascript
|
|
20
|
+
import { PermissionsAndroid } from 'react-native';
|
|
21
|
+
import { SeedVaultPermissionAndroid } from '@solana-mobile/seed-vault-lib';
|
|
22
|
+
|
|
23
|
+
const permissionResult = await PermissionsAndroid.request(
|
|
24
|
+
SeedVaultPermissionAndroid,
|
|
25
|
+
{ // customize verbage here to your liking
|
|
26
|
+
title: 'Seed Vault Permission',
|
|
27
|
+
message:
|
|
28
|
+
'This app needs your permission to access Seed Vault',
|
|
29
|
+
buttonNeutral: 'Ask Me Later',
|
|
30
|
+
buttonNegative: 'Cancel',
|
|
31
|
+
buttonPositive: 'OK',
|
|
32
|
+
},
|
|
33
|
+
);
|
|
34
|
+
|
|
35
|
+
if (permissionResult === PermissionsAndroid.RESULTS.GRANTED) {
|
|
36
|
+
// we can use seed vault, continue
|
|
37
|
+
} else {
|
|
38
|
+
// permission was denied, fallback
|
|
39
|
+
}
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Read more about requesting Android Permission in React Natvie [here](https://reactnative.dev/docs/permissionsandroid).
|
|
43
|
+
|
|
44
|
+
### Authorize a Seed
|
|
45
|
+
Before our app can access any seeds in the seed vault, we must first request authorization for our app to use a seed from the user.
|
|
46
|
+
```javascript
|
|
47
|
+
import { SeedVault } from "@solana-mobile/seed-vault-lib";
|
|
48
|
+
|
|
49
|
+
const result = await SeedVault.authorizeNewSeed();
|
|
50
|
+
console.log(`New seed authorized! auth token: ${result.authToken}`);
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### Retreive a list of Authorized Seeds
|
|
54
|
+
To retreive a list of all the seeds our app has been authorized to use, call `getAuthorizedSeeds()`.
|
|
55
|
+
```javascript
|
|
56
|
+
const authorizedSeeds = await SeedVault.getAuthorizedSeeds()
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
This will return a list of `Seed` objects with the following structure
|
|
60
|
+
```
|
|
61
|
+
{
|
|
62
|
+
authToken: number;
|
|
63
|
+
name: string;
|
|
64
|
+
purpose: int;
|
|
65
|
+
}
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### Get Accounts for a given seed
|
|
69
|
+
Once we have obtained an authorized seed, we can get a list of all the accounts (public keys) assocaited with that seed
|
|
70
|
+
```javascript
|
|
71
|
+
const seed = authorizedSeeds[0]
|
|
72
|
+
const accounts = await SeedVault.getAccounts(seed.authToken)
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### Retreive the PublicKey of an Account
|
|
76
|
+
Once we have obtained an authorized seed, we can get a list of all the accounts (public keys) assocaited with that seed
|
|
77
|
+
```javascript
|
|
78
|
+
const account = account[0]
|
|
79
|
+
const publicKey = await SeedVault.getPublicKey(seed.authToken, account.derivationPath);
|
|
80
|
+
// can now build transaction using the public key
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
This will return a `SeedPublicKey` object with the following structure
|
|
84
|
+
```
|
|
85
|
+
{
|
|
86
|
+
publicKey: Uint8Array;
|
|
87
|
+
publicKeyEncoded: string;
|
|
88
|
+
resolvedDerivationPath: string;
|
|
89
|
+
}
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### Sign a Payload
|
|
93
|
+
Once we have obtained an account, we can request signatures from seed vault for that account:
|
|
94
|
+
```javascript
|
|
95
|
+
SeedVault.signMessage(seed.authToken, account.derivationPath, messageBytes);
|
|
96
|
+
SeedVault.signTransaction(seed.authToken, account.derivationPath, transactionByteArray);
|
|
97
|
+
```
|
package/android/build.gradle
CHANGED
|
@@ -135,9 +135,8 @@ def kotlin_version = getExtOrDefault('kotlinVersion')
|
|
|
135
135
|
dependencies {
|
|
136
136
|
//noinspection GradleDynamicVersion
|
|
137
137
|
implementation "com.facebook.react:react-native:+" // From node_modules
|
|
138
|
-
// uncomment to use local seedvault module
|
|
139
|
-
|
|
140
|
-
implementation "com.solanamobile:seedvault-wallet-sdk:0.3.3"
|
|
138
|
+
// implementation project(path: ':seedvault') // uncomment to use local seedvault module
|
|
139
|
+
implementation "com.solanamobile:seedvault-wallet-sdk:0.4.0"
|
|
141
140
|
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
|
|
142
141
|
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4"
|
|
143
142
|
implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.4.1"
|
|
@@ -30,7 +30,7 @@ class SolanaMobileSeedVaultLibModule(val reactContext: ReactApplicationContext)
|
|
|
30
30
|
private val mActivityEventListener: ActivityEventListener =
|
|
31
31
|
object : BaseActivityEventListener() {
|
|
32
32
|
override fun onActivityResult(
|
|
33
|
-
activity: Activity
|
|
33
|
+
activity: Activity,
|
|
34
34
|
requestCode: Int,
|
|
35
35
|
resultCode: Int,
|
|
36
36
|
data: Intent?
|
|
@@ -152,14 +152,14 @@ class SolanaMobileSeedVaultLibModule(val reactContext: ReactApplicationContext)
|
|
|
152
152
|
@ReactMethod
|
|
153
153
|
fun requestAuthorizeNewSeed() {
|
|
154
154
|
Log.d(TAG, "Requesting authorization for a new seed...")
|
|
155
|
-
val intent = Wallet.authorizeSeed(WalletContractV1.PURPOSE_SIGN_SOLANA_TRANSACTION)
|
|
155
|
+
val intent = Wallet.authorizeSeed(reactContext, WalletContractV1.PURPOSE_SIGN_SOLANA_TRANSACTION)
|
|
156
156
|
reactContext.currentActivity?.startActivityForResult(intent, REQUEST_AUTHORIZE_SEED_ACCESS)
|
|
157
157
|
}
|
|
158
158
|
|
|
159
159
|
@ReactMethod
|
|
160
160
|
fun authorizeNewSeed(promise: Promise) {
|
|
161
161
|
Log.d(TAG, "Requesting authorization for a new seed...")
|
|
162
|
-
val intent = Wallet.authorizeSeed(WalletContractV1.PURPOSE_SIGN_SOLANA_TRANSACTION)
|
|
162
|
+
val intent = Wallet.authorizeSeed(reactContext, WalletContractV1.PURPOSE_SIGN_SOLANA_TRANSACTION)
|
|
163
163
|
registerForActivityResult(intent, REQUEST_AUTHORIZE_SEED_ACCESS) { resultCode, data ->
|
|
164
164
|
try {
|
|
165
165
|
val authToken = Wallet.onAuthorizeSeedResult(resultCode, data)
|
|
@@ -180,14 +180,14 @@ class SolanaMobileSeedVaultLibModule(val reactContext: ReactApplicationContext)
|
|
|
180
180
|
@ReactMethod
|
|
181
181
|
fun requestCreateNewSeed() {
|
|
182
182
|
Log.d(TAG, "Requesting creation of a new seed...")
|
|
183
|
-
val intent = Wallet.createSeed(WalletContractV1.PURPOSE_SIGN_SOLANA_TRANSACTION)
|
|
183
|
+
val intent = Wallet.createSeed(reactContext, WalletContractV1.PURPOSE_SIGN_SOLANA_TRANSACTION)
|
|
184
184
|
reactContext.currentActivity?.startActivityForResult(intent, REQUEST_CREATE_NEW_SEED)
|
|
185
185
|
}
|
|
186
186
|
|
|
187
187
|
@ReactMethod
|
|
188
188
|
fun createNewSeed(promise: Promise) {
|
|
189
189
|
Log.d(TAG, "Requesting creation of a new seed...")
|
|
190
|
-
val intent = Wallet.createSeed(WalletContractV1.PURPOSE_SIGN_SOLANA_TRANSACTION)
|
|
190
|
+
val intent = Wallet.createSeed(reactContext, WalletContractV1.PURPOSE_SIGN_SOLANA_TRANSACTION)
|
|
191
191
|
registerForActivityResult(intent, REQUEST_CREATE_NEW_SEED) { resultCode, data ->
|
|
192
192
|
try {
|
|
193
193
|
val authToken = Wallet.onCreateSeedResult(resultCode, data)
|
|
@@ -208,14 +208,14 @@ class SolanaMobileSeedVaultLibModule(val reactContext: ReactApplicationContext)
|
|
|
208
208
|
@ReactMethod
|
|
209
209
|
fun requestImportExistingSeed() {
|
|
210
210
|
Log.d(TAG, "Requesting import of an existing seed...")
|
|
211
|
-
val intent = Wallet.importSeed(WalletContractV1.PURPOSE_SIGN_SOLANA_TRANSACTION)
|
|
211
|
+
val intent = Wallet.importSeed(reactContext, WalletContractV1.PURPOSE_SIGN_SOLANA_TRANSACTION)
|
|
212
212
|
reactContext.currentActivity?.startActivityForResult(intent, REQUEST_IMPORT_EXISTING_SEED)
|
|
213
213
|
}
|
|
214
214
|
|
|
215
215
|
@ReactMethod
|
|
216
216
|
fun importExistingSeed(promise: Promise) {
|
|
217
217
|
Log.d(TAG, "Requesting import of an existing seed...")
|
|
218
|
-
val intent = Wallet.importSeed(WalletContractV1.PURPOSE_SIGN_SOLANA_TRANSACTION)
|
|
218
|
+
val intent = Wallet.importSeed(reactContext, WalletContractV1.PURPOSE_SIGN_SOLANA_TRANSACTION)
|
|
219
219
|
registerForActivityResult(intent, REQUEST_IMPORT_EXISTING_SEED) { resultCode, data ->
|
|
220
220
|
try {
|
|
221
221
|
val authToken = Wallet.onImportSeedResult(resultCode, data)
|
|
@@ -258,7 +258,7 @@ class SolanaMobileSeedVaultLibModule(val reactContext: ReactApplicationContext)
|
|
|
258
258
|
@ReactMethod
|
|
259
259
|
fun requestShowSeedSettings(authToken: String) {
|
|
260
260
|
Log.d(TAG, "Requesting Seed Settings to be shown...")
|
|
261
|
-
val intent = Wallet.showSeedSettings(authToken.toLong())
|
|
261
|
+
val intent = Wallet.showSeedSettings(reactContext, authToken.toLong())
|
|
262
262
|
reactContext.currentActivity?.startActivityForResult(intent, REQUEST_SHOW_SEED_SETTINGS);
|
|
263
263
|
}
|
|
264
264
|
|
|
@@ -271,7 +271,7 @@ class SolanaMobileSeedVaultLibModule(val reactContext: ReactApplicationContext)
|
|
|
271
271
|
|
|
272
272
|
private fun showSeedSettingsAsync(authToken: String, callback: (error: Throwable?) -> Unit) {
|
|
273
273
|
Log.d(TAG, "Requesting Seed Settings to be shown...")
|
|
274
|
-
val intent = Wallet.showSeedSettings(authToken.toLong())
|
|
274
|
+
val intent = Wallet.showSeedSettings(reactContext, authToken.toLong())
|
|
275
275
|
try {
|
|
276
276
|
registerForActivityResult(intent, REQUEST_SHOW_SEED_SETTINGS) { resultCode, data ->
|
|
277
277
|
if (resultCode != Activity.RESULT_CANCELED) {
|
|
@@ -304,7 +304,7 @@ class SolanaMobileSeedVaultLibModule(val reactContext: ReactApplicationContext)
|
|
|
304
304
|
|
|
305
305
|
private fun requestSignMessages(authToken: String, signingRequests: List<SigningRequest>) {
|
|
306
306
|
Log.d(TAG, "Requesting provided messages to be signed...")
|
|
307
|
-
val intent = Wallet.signMessages(authToken.toLong(), ArrayList(signingRequests))
|
|
307
|
+
val intent = Wallet.signMessages(reactContext, authToken.toLong(), ArrayList(signingRequests))
|
|
308
308
|
reactContext.currentActivity?.startActivityForResult(intent, REQUEST_SIGN_MESSAGES);
|
|
309
309
|
}
|
|
310
310
|
|
|
@@ -327,7 +327,7 @@ class SolanaMobileSeedVaultLibModule(val reactContext: ReactApplicationContext)
|
|
|
327
327
|
|
|
328
328
|
private fun signMessagesAsync(authToken: String, signingRequests: List<SigningRequest>, callback: (result: ReadableArray?, error: Throwable?) -> Unit) {
|
|
329
329
|
Log.d(TAG, "Requesting provided messages to be signed...")
|
|
330
|
-
val intent = Wallet.signMessages(authToken.toLong(), ArrayList(signingRequests))
|
|
330
|
+
val intent = Wallet.signMessages(reactContext, authToken.toLong(), ArrayList(signingRequests))
|
|
331
331
|
registerForActivityResult(intent, REQUEST_SIGN_MESSAGES) { resultCode, data ->
|
|
332
332
|
try {
|
|
333
333
|
val result = Wallet.onSignMessagesResult(resultCode, data)
|
|
@@ -361,7 +361,7 @@ class SolanaMobileSeedVaultLibModule(val reactContext: ReactApplicationContext)
|
|
|
361
361
|
|
|
362
362
|
private fun requestSignTransactions(authToken: String, signingRequests: List<SigningRequest>) {
|
|
363
363
|
Log.d(TAG, "Requesting provided transactions to be signed...")
|
|
364
|
-
val intent = Wallet.signTransactions(authToken.toLong(), ArrayList(signingRequests))
|
|
364
|
+
val intent = Wallet.signTransactions(reactContext, authToken.toLong(), ArrayList(signingRequests))
|
|
365
365
|
reactContext.currentActivity?.startActivityForResult(intent, REQUEST_SIGN_TRANSACTIONS)
|
|
366
366
|
}
|
|
367
367
|
|
|
@@ -384,7 +384,7 @@ class SolanaMobileSeedVaultLibModule(val reactContext: ReactApplicationContext)
|
|
|
384
384
|
|
|
385
385
|
private fun signTransactionsAsync(authToken: String, signingRequests: List<SigningRequest>, callback: (result: ReadableArray?, error: Throwable?) -> Unit) {
|
|
386
386
|
Log.d(TAG, "Requesting provided transactions to be signed...")
|
|
387
|
-
val intent = Wallet.signTransactions(authToken.toLong(), ArrayList(signingRequests))
|
|
387
|
+
val intent = Wallet.signTransactions(reactContext, authToken.toLong(), ArrayList(signingRequests))
|
|
388
388
|
registerForActivityResult(intent, REQUEST_SIGN_TRANSACTIONS) { resultCode, data ->
|
|
389
389
|
try {
|
|
390
390
|
val result = Wallet.onSignTransactionsResult(resultCode, data)
|
|
@@ -417,7 +417,7 @@ class SolanaMobileSeedVaultLibModule(val reactContext: ReactApplicationContext)
|
|
|
417
417
|
|
|
418
418
|
reactContext.addActivityEventListener(object : BaseActivityEventListener() {
|
|
419
419
|
override fun onActivityResult(
|
|
420
|
-
activity: Activity
|
|
420
|
+
activity: Activity,
|
|
421
421
|
receivedRequestCode: Int,
|
|
422
422
|
resultCode: Int,
|
|
423
423
|
data: Intent?
|
|
@@ -444,7 +444,7 @@ class SolanaMobileSeedVaultLibModule(val reactContext: ReactApplicationContext)
|
|
|
444
444
|
@ReactMethod
|
|
445
445
|
fun requestPublicKeys(authToken: String, derivationPaths: ReadableArray) {
|
|
446
446
|
Log.d(TAG, "Requesting public keys for provided derviation paths...")
|
|
447
|
-
val intent = Wallet.requestPublicKeys(authToken.toLong(), Arguments.toList(derivationPaths)?.mapNotNull {
|
|
447
|
+
val intent = Wallet.requestPublicKeys(reactContext, authToken.toLong(), Arguments.toList(derivationPaths)?.mapNotNull {
|
|
448
448
|
(it as? String)?.let { uriString -> Uri.parse(uriString) }
|
|
449
449
|
} as ArrayList ?: arrayListOf())
|
|
450
450
|
reactContext.currentActivity?.startActivityForResult(intent, REQUEST_GET_PUBLIC_KEYS);
|
|
@@ -469,7 +469,7 @@ class SolanaMobileSeedVaultLibModule(val reactContext: ReactApplicationContext)
|
|
|
469
469
|
|
|
470
470
|
private fun getPublicKeysAsync(authToken: String, derivationPaths: ReadableArray, callback: (result: ReadableArray?, error: Throwable?) -> Unit) {
|
|
471
471
|
Log.d(TAG, "Requesting public keys for provided derviation paths...")
|
|
472
|
-
val intent = Wallet.requestPublicKeys(authToken.toLong(), Arguments.toList(derivationPaths)?.mapNotNull {
|
|
472
|
+
val intent = Wallet.requestPublicKeys(reactContext, authToken.toLong(), Arguments.toList(derivationPaths)?.mapNotNull {
|
|
473
473
|
(it as? String)?.let { uriString -> Uri.parse(uriString) }
|
|
474
474
|
} as ArrayList ?: arrayListOf())
|
|
475
475
|
registerForActivityResult(intent, REQUEST_GET_PUBLIC_KEYS) { resultCode, data ->
|
package/lib/types/index.d.ts
CHANGED
|
@@ -112,25 +112,25 @@ type SigningResult = Readonly<{
|
|
|
112
112
|
resolvedDerivationPaths: DerivationPath[];
|
|
113
113
|
}>;
|
|
114
114
|
interface AuthorizeSeedAPI {
|
|
115
|
-
hasUnauthorizedSeeds(): boolean
|
|
116
|
-
hasUnauthorizedSeedsForPurpose(purpose: SeedPurpose): boolean
|
|
117
|
-
getAuthorizedSeeds(): Seed[]
|
|
118
|
-
authorizeNewSeed(): {
|
|
115
|
+
hasUnauthorizedSeeds(): Promise<boolean>;
|
|
116
|
+
hasUnauthorizedSeedsForPurpose(purpose: SeedPurpose): Promise<boolean>;
|
|
117
|
+
getAuthorizedSeeds(): Promise<Seed[]>;
|
|
118
|
+
authorizeNewSeed(): Promise<{
|
|
119
119
|
authToken: AuthToken;
|
|
120
|
-
}
|
|
120
|
+
}>;
|
|
121
121
|
deauthorizeSeed(authToken: AuthToken): void;
|
|
122
122
|
}
|
|
123
123
|
interface AccountAPI {
|
|
124
|
-
getAccounts(authToken: AuthToken, filterOnColumn: string, value: any): Account[]
|
|
125
|
-
getUserWallets(authToken: AuthToken): Account[]
|
|
124
|
+
getAccounts(authToken: AuthToken, filterOnColumn: string, value: any): Promise<Account[]>;
|
|
125
|
+
getUserWallets(authToken: AuthToken): Promise<Account[]>;
|
|
126
126
|
updateAccountName(authToken: AuthToken, accountId: number, name?: string): void;
|
|
127
127
|
updateAccountIsUserWallet(authToken: AuthToken, accountId: number, isUserWallet: boolean): void;
|
|
128
128
|
updateAccountIsValid(authToken: AuthToken, accountId: number, isValid: boolean): void;
|
|
129
129
|
}
|
|
130
130
|
interface CreateNewSeedAPI {
|
|
131
|
-
createNewSeed(): {
|
|
131
|
+
createNewSeed(): Promise<{
|
|
132
132
|
authToken: AuthToken;
|
|
133
|
-
}
|
|
133
|
+
}>;
|
|
134
134
|
}
|
|
135
135
|
// TODO
|
|
136
136
|
// interface ImplementationLimitsAPI {
|
|
@@ -138,29 +138,29 @@ interface CreateNewSeedAPI {
|
|
|
138
138
|
// getImplementationLimitsForPurpose()
|
|
139
139
|
// }
|
|
140
140
|
interface ImportExistingSeedAPI {
|
|
141
|
-
importExistingSeed(): {
|
|
141
|
+
importExistingSeed(): Promise<{
|
|
142
142
|
authToken: AuthToken;
|
|
143
|
-
}
|
|
143
|
+
}>;
|
|
144
144
|
}
|
|
145
145
|
interface PublicKeyAPI {
|
|
146
|
-
getPublicKey(authToken: AuthToken, derivationPath: DerivationPath): SeedPublicKey
|
|
147
|
-
getPublicKeys(authToken: AuthToken, derivationPaths: DerivationPath[]): SeedPublicKey[]
|
|
148
|
-
resolveDerivationPath(derivationPath: DerivationPath): DerivationPath
|
|
149
|
-
resolveDerivationPathForPurpose(derivationPath: DerivationPath, purpose: SeedPurpose): DerivationPath
|
|
146
|
+
getPublicKey(authToken: AuthToken, derivationPath: DerivationPath): Promise<SeedPublicKey>;
|
|
147
|
+
getPublicKeys(authToken: AuthToken, derivationPaths: DerivationPath[]): Promise<SeedPublicKey[]>;
|
|
148
|
+
resolveDerivationPath(derivationPath: DerivationPath): Promise<DerivationPath>;
|
|
149
|
+
resolveDerivationPathForPurpose(derivationPath: DerivationPath, purpose: SeedPurpose): Promise<DerivationPath>;
|
|
150
150
|
}
|
|
151
151
|
interface SignMessagesAPI {
|
|
152
|
-
signMessage(authToken: AuthToken, derivationPath: DerivationPath, message: Base64EncodedMessage): SigningResult
|
|
153
|
-
signMessages(authToken: AuthToken, signingRequests: SigningRequest[]): SigningResult[]
|
|
152
|
+
signMessage(authToken: AuthToken, derivationPath: DerivationPath, message: Base64EncodedMessage): Promise<SigningResult>;
|
|
153
|
+
signMessages(authToken: AuthToken, signingRequests: SigningRequest[]): Promise<SigningResult[]>;
|
|
154
154
|
}
|
|
155
155
|
interface SignTransactionsAPI {
|
|
156
|
-
signTransaction(authToken: AuthToken, derivationPath: DerivationPath, transaction: Base64EncodedTransaction): SigningResult
|
|
157
|
-
signTransactions(authToken: AuthToken, signingRequests: SigningRequest[]): SigningResult[]
|
|
156
|
+
signTransaction(authToken: AuthToken, derivationPath: DerivationPath, transaction: Base64EncodedTransaction): Promise<SigningResult>;
|
|
157
|
+
signTransactions(authToken: AuthToken, signingRequests: SigningRequest[]): Promise<SigningResult[]>;
|
|
158
158
|
}
|
|
159
159
|
interface SeedVaultAvailabilityAPI {
|
|
160
|
-
isSeedVaultAvailable(allowSimulated: boolean): boolean
|
|
160
|
+
isSeedVaultAvailable(allowSimulated: boolean): Promise<boolean>;
|
|
161
161
|
}
|
|
162
162
|
interface ShowSeedSettingsAPI {
|
|
163
|
-
showSeedSettings(authToken: AuthToken): void
|
|
163
|
+
showSeedSettings(authToken: AuthToken): Promise<void>;
|
|
164
164
|
}
|
|
165
165
|
interface SeedVaultAPI extends AuthorizeSeedAPI, AccountAPI, CreateNewSeedAPI, ImportExistingSeedAPI, PublicKeyAPI, SeedVaultAvailabilityAPI, SignMessagesAPI, SignTransactionsAPI, ShowSeedSettingsAPI {
|
|
166
166
|
}
|
|
@@ -112,25 +112,25 @@ type SigningResult = Readonly<{
|
|
|
112
112
|
resolvedDerivationPaths: DerivationPath[];
|
|
113
113
|
}>;
|
|
114
114
|
interface AuthorizeSeedAPI {
|
|
115
|
-
hasUnauthorizedSeeds(): boolean
|
|
116
|
-
hasUnauthorizedSeedsForPurpose(purpose: SeedPurpose): boolean
|
|
117
|
-
getAuthorizedSeeds(): Seed[]
|
|
118
|
-
authorizeNewSeed(): {
|
|
115
|
+
hasUnauthorizedSeeds(): Promise<boolean>;
|
|
116
|
+
hasUnauthorizedSeedsForPurpose(purpose: SeedPurpose): Promise<boolean>;
|
|
117
|
+
getAuthorizedSeeds(): Promise<Seed[]>;
|
|
118
|
+
authorizeNewSeed(): Promise<{
|
|
119
119
|
authToken: AuthToken;
|
|
120
|
-
}
|
|
120
|
+
}>;
|
|
121
121
|
deauthorizeSeed(authToken: AuthToken): void;
|
|
122
122
|
}
|
|
123
123
|
interface AccountAPI {
|
|
124
|
-
getAccounts(authToken: AuthToken, filterOnColumn: string, value: any): Account[]
|
|
125
|
-
getUserWallets(authToken: AuthToken): Account[]
|
|
124
|
+
getAccounts(authToken: AuthToken, filterOnColumn: string, value: any): Promise<Account[]>;
|
|
125
|
+
getUserWallets(authToken: AuthToken): Promise<Account[]>;
|
|
126
126
|
updateAccountName(authToken: AuthToken, accountId: number, name?: string): void;
|
|
127
127
|
updateAccountIsUserWallet(authToken: AuthToken, accountId: number, isUserWallet: boolean): void;
|
|
128
128
|
updateAccountIsValid(authToken: AuthToken, accountId: number, isValid: boolean): void;
|
|
129
129
|
}
|
|
130
130
|
interface CreateNewSeedAPI {
|
|
131
|
-
createNewSeed(): {
|
|
131
|
+
createNewSeed(): Promise<{
|
|
132
132
|
authToken: AuthToken;
|
|
133
|
-
}
|
|
133
|
+
}>;
|
|
134
134
|
}
|
|
135
135
|
// TODO
|
|
136
136
|
// interface ImplementationLimitsAPI {
|
|
@@ -138,29 +138,29 @@ interface CreateNewSeedAPI {
|
|
|
138
138
|
// getImplementationLimitsForPurpose()
|
|
139
139
|
// }
|
|
140
140
|
interface ImportExistingSeedAPI {
|
|
141
|
-
importExistingSeed(): {
|
|
141
|
+
importExistingSeed(): Promise<{
|
|
142
142
|
authToken: AuthToken;
|
|
143
|
-
}
|
|
143
|
+
}>;
|
|
144
144
|
}
|
|
145
145
|
interface PublicKeyAPI {
|
|
146
|
-
getPublicKey(authToken: AuthToken, derivationPath: DerivationPath): SeedPublicKey
|
|
147
|
-
getPublicKeys(authToken: AuthToken, derivationPaths: DerivationPath[]): SeedPublicKey[]
|
|
148
|
-
resolveDerivationPath(derivationPath: DerivationPath): DerivationPath
|
|
149
|
-
resolveDerivationPathForPurpose(derivationPath: DerivationPath, purpose: SeedPurpose): DerivationPath
|
|
146
|
+
getPublicKey(authToken: AuthToken, derivationPath: DerivationPath): Promise<SeedPublicKey>;
|
|
147
|
+
getPublicKeys(authToken: AuthToken, derivationPaths: DerivationPath[]): Promise<SeedPublicKey[]>;
|
|
148
|
+
resolveDerivationPath(derivationPath: DerivationPath): Promise<DerivationPath>;
|
|
149
|
+
resolveDerivationPathForPurpose(derivationPath: DerivationPath, purpose: SeedPurpose): Promise<DerivationPath>;
|
|
150
150
|
}
|
|
151
151
|
interface SignMessagesAPI {
|
|
152
|
-
signMessage(authToken: AuthToken, derivationPath: DerivationPath, message: Base64EncodedMessage): SigningResult
|
|
153
|
-
signMessages(authToken: AuthToken, signingRequests: SigningRequest[]): SigningResult[]
|
|
152
|
+
signMessage(authToken: AuthToken, derivationPath: DerivationPath, message: Base64EncodedMessage): Promise<SigningResult>;
|
|
153
|
+
signMessages(authToken: AuthToken, signingRequests: SigningRequest[]): Promise<SigningResult[]>;
|
|
154
154
|
}
|
|
155
155
|
interface SignTransactionsAPI {
|
|
156
|
-
signTransaction(authToken: AuthToken, derivationPath: DerivationPath, transaction: Base64EncodedTransaction): SigningResult
|
|
157
|
-
signTransactions(authToken: AuthToken, signingRequests: SigningRequest[]): SigningResult[]
|
|
156
|
+
signTransaction(authToken: AuthToken, derivationPath: DerivationPath, transaction: Base64EncodedTransaction): Promise<SigningResult>;
|
|
157
|
+
signTransactions(authToken: AuthToken, signingRequests: SigningRequest[]): Promise<SigningResult[]>;
|
|
158
158
|
}
|
|
159
159
|
interface SeedVaultAvailabilityAPI {
|
|
160
|
-
isSeedVaultAvailable(allowSimulated: boolean): boolean
|
|
160
|
+
isSeedVaultAvailable(allowSimulated: boolean): Promise<boolean>;
|
|
161
161
|
}
|
|
162
162
|
interface ShowSeedSettingsAPI {
|
|
163
|
-
showSeedSettings(authToken: AuthToken): void
|
|
163
|
+
showSeedSettings(authToken: AuthToken): Promise<void>;
|
|
164
164
|
}
|
|
165
165
|
interface SeedVaultAPI extends AuthorizeSeedAPI, AccountAPI, CreateNewSeedAPI, ImportExistingSeedAPI, PublicKeyAPI, SeedVaultAvailabilityAPI, SignMessagesAPI, SignTransactionsAPI, ShowSeedSettingsAPI {
|
|
166
166
|
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@solana-mobile/seed-vault-lib",
|
|
3
3
|
"description": "A React Native wrapper of the Solana Mobile, Seed Vault SDK. Apps can use this to interact with seed vault implementations on Android",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.4.0",
|
|
5
5
|
"author": "Marco Martinez <marco.martinez@solanamobile.com>",
|
|
6
6
|
"repository": "https://github.com/solana-mobile/seed-vault-sdk",
|
|
7
7
|
"license": "Apache-2.0",
|