@solana-mobile/seed-vault-lib 0.3.3 → 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 +12 -4
- package/android/gradlew +185 -185
- 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 +11 -32
- 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
|
@@ -8,7 +8,7 @@ buildscript {
|
|
|
8
8
|
}
|
|
9
9
|
|
|
10
10
|
dependencies {
|
|
11
|
-
classpath
|
|
11
|
+
classpath 'com.android.tools.build:gradle:7.4.2'
|
|
12
12
|
// noinspection DifferentKotlinGradleVersion
|
|
13
13
|
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
|
14
14
|
classpath "org.jetbrains.kotlin:kotlin-serialization:$kotlin_version"
|
|
@@ -135,10 +135,18 @@ def kotlin_version = getExtOrDefault('kotlinVersion')
|
|
|
135
135
|
dependencies {
|
|
136
136
|
//noinspection GradleDynamicVersion
|
|
137
137
|
implementation "com.facebook.react:react-native:+" // From node_modules
|
|
138
|
-
implementation project(path: ':seedvault')
|
|
138
|
+
// implementation project(path: ':seedvault') // uncomment to use local seedvault module
|
|
139
|
+
implementation "com.solanamobile:seedvault-wallet-sdk:0.4.0"
|
|
139
140
|
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
|
|
140
|
-
implementation
|
|
141
|
-
implementation
|
|
141
|
+
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4"
|
|
142
|
+
implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.4.1"
|
|
143
|
+
// we cannot use the latest version of these dependencies. React native versions are tightly
|
|
144
|
+
// coupled with kotlin versions. If we use the latest versions of these deps that reply on
|
|
145
|
+
// kotlin 2.1+, react native builds break.
|
|
146
|
+
// These are the highest versions found to work with react native 0.76 and higher. Leaving
|
|
147
|
+
// the above versions for now for maximum compatibility.
|
|
148
|
+
// implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3"
|
|
149
|
+
// implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.3"
|
|
142
150
|
}
|
|
143
151
|
|
|
144
152
|
if (isNewArchitectureEnabled()) {
|
package/android/gradlew
CHANGED
|
@@ -1,185 +1,185 @@
|
|
|
1
|
-
#!/usr/bin/env sh
|
|
2
|
-
|
|
3
|
-
#
|
|
4
|
-
# Copyright 2015 the original author or authors.
|
|
5
|
-
#
|
|
6
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
-
# you may not use this file except in compliance with the License.
|
|
8
|
-
# You may obtain a copy of the License at
|
|
9
|
-
#
|
|
10
|
-
# https://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
-
#
|
|
12
|
-
# Unless required by applicable law or agreed to in writing, software
|
|
13
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
-
# See the License for the specific language governing permissions and
|
|
16
|
-
# limitations under the License.
|
|
17
|
-
#
|
|
18
|
-
|
|
19
|
-
##############################################################################
|
|
20
|
-
##
|
|
21
|
-
## Gradle start up script for UN*X
|
|
22
|
-
##
|
|
23
|
-
##############################################################################
|
|
24
|
-
|
|
25
|
-
# Attempt to set APP_HOME
|
|
26
|
-
# Resolve links: $0 may be a link
|
|
27
|
-
PRG="$0"
|
|
28
|
-
# Need this for relative symlinks.
|
|
29
|
-
while [ -h "$PRG" ] ; do
|
|
30
|
-
ls=`ls -ld "$PRG"`
|
|
31
|
-
link=`expr "$ls" : '.*-> \(.*\)$'`
|
|
32
|
-
if expr "$link" : '/.*' > /dev/null; then
|
|
33
|
-
PRG="$link"
|
|
34
|
-
else
|
|
35
|
-
PRG=`dirname "$PRG"`"/$link"
|
|
36
|
-
fi
|
|
37
|
-
done
|
|
38
|
-
SAVED="`pwd`"
|
|
39
|
-
cd "`dirname \"$PRG\"`/" >/dev/null
|
|
40
|
-
APP_HOME="`pwd -P`"
|
|
41
|
-
cd "$SAVED" >/dev/null
|
|
42
|
-
|
|
43
|
-
APP_NAME="Gradle"
|
|
44
|
-
APP_BASE_NAME=`basename "$0"`
|
|
45
|
-
|
|
46
|
-
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
|
47
|
-
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
|
|
48
|
-
|
|
49
|
-
# Use the maximum available, or set MAX_FD != -1 to use that value.
|
|
50
|
-
MAX_FD="maximum"
|
|
51
|
-
|
|
52
|
-
warn () {
|
|
53
|
-
echo "$*"
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
die () {
|
|
57
|
-
echo
|
|
58
|
-
echo "$*"
|
|
59
|
-
echo
|
|
60
|
-
exit 1
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
# OS specific support (must be 'true' or 'false').
|
|
64
|
-
cygwin=false
|
|
65
|
-
msys=false
|
|
66
|
-
darwin=false
|
|
67
|
-
nonstop=false
|
|
68
|
-
case "`uname`" in
|
|
69
|
-
CYGWIN* )
|
|
70
|
-
cygwin=true
|
|
71
|
-
;;
|
|
72
|
-
Darwin* )
|
|
73
|
-
darwin=true
|
|
74
|
-
;;
|
|
75
|
-
MSYS* | MINGW* )
|
|
76
|
-
msys=true
|
|
77
|
-
;;
|
|
78
|
-
NONSTOP* )
|
|
79
|
-
nonstop=true
|
|
80
|
-
;;
|
|
81
|
-
esac
|
|
82
|
-
|
|
83
|
-
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
# Determine the Java command to use to start the JVM.
|
|
87
|
-
if [ -n "$JAVA_HOME" ] ; then
|
|
88
|
-
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
|
|
89
|
-
# IBM's JDK on AIX uses strange locations for the executables
|
|
90
|
-
JAVACMD="$JAVA_HOME/jre/sh/java"
|
|
91
|
-
else
|
|
92
|
-
JAVACMD="$JAVA_HOME/bin/java"
|
|
93
|
-
fi
|
|
94
|
-
if [ ! -x "$JAVACMD" ] ; then
|
|
95
|
-
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
|
|
96
|
-
|
|
97
|
-
Please set the JAVA_HOME variable in your environment to match the
|
|
98
|
-
location of your Java installation."
|
|
99
|
-
fi
|
|
100
|
-
else
|
|
101
|
-
JAVACMD="java"
|
|
102
|
-
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
|
103
|
-
|
|
104
|
-
Please set the JAVA_HOME variable in your environment to match the
|
|
105
|
-
location of your Java installation."
|
|
106
|
-
fi
|
|
107
|
-
|
|
108
|
-
# Increase the maximum file descriptors if we can.
|
|
109
|
-
if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
|
|
110
|
-
MAX_FD_LIMIT=`ulimit -H -n`
|
|
111
|
-
if [ $? -eq 0 ] ; then
|
|
112
|
-
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
|
|
113
|
-
MAX_FD="$MAX_FD_LIMIT"
|
|
114
|
-
fi
|
|
115
|
-
ulimit -n $MAX_FD
|
|
116
|
-
if [ $? -ne 0 ] ; then
|
|
117
|
-
warn "Could not set maximum file descriptor limit: $MAX_FD"
|
|
118
|
-
fi
|
|
119
|
-
else
|
|
120
|
-
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
|
|
121
|
-
fi
|
|
122
|
-
fi
|
|
123
|
-
|
|
124
|
-
# For Darwin, add options to specify how the application appears in the dock
|
|
125
|
-
if $darwin; then
|
|
126
|
-
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
|
|
127
|
-
fi
|
|
128
|
-
|
|
129
|
-
# For Cygwin or MSYS, switch paths to Windows format before running java
|
|
130
|
-
if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
|
|
131
|
-
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
|
|
132
|
-
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
|
|
133
|
-
|
|
134
|
-
JAVACMD=`cygpath --unix "$JAVACMD"`
|
|
135
|
-
|
|
136
|
-
# We build the pattern for arguments to be converted via cygpath
|
|
137
|
-
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
|
|
138
|
-
SEP=""
|
|
139
|
-
for dir in $ROOTDIRSRAW ; do
|
|
140
|
-
ROOTDIRS="$ROOTDIRS$SEP$dir"
|
|
141
|
-
SEP="|"
|
|
142
|
-
done
|
|
143
|
-
OURCYGPATTERN="(^($ROOTDIRS))"
|
|
144
|
-
# Add a user-defined pattern to the cygpath arguments
|
|
145
|
-
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
|
|
146
|
-
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
|
|
147
|
-
fi
|
|
148
|
-
# Now convert the arguments - kludge to limit ourselves to /bin/sh
|
|
149
|
-
i=0
|
|
150
|
-
for arg in "$@" ; do
|
|
151
|
-
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
|
|
152
|
-
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
|
|
153
|
-
|
|
154
|
-
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
|
|
155
|
-
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
|
|
156
|
-
else
|
|
157
|
-
eval `echo args$i`="\"$arg\""
|
|
158
|
-
fi
|
|
159
|
-
i=`expr $i + 1`
|
|
160
|
-
done
|
|
161
|
-
case $i in
|
|
162
|
-
0) set -- ;;
|
|
163
|
-
1) set -- "$args0" ;;
|
|
164
|
-
2) set -- "$args0" "$args1" ;;
|
|
165
|
-
3) set -- "$args0" "$args1" "$args2" ;;
|
|
166
|
-
4) set -- "$args0" "$args1" "$args2" "$args3" ;;
|
|
167
|
-
5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
|
|
168
|
-
6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
|
|
169
|
-
7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
|
|
170
|
-
8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
|
|
171
|
-
9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
|
|
172
|
-
esac
|
|
173
|
-
fi
|
|
174
|
-
|
|
175
|
-
# Escape application args
|
|
176
|
-
save () {
|
|
177
|
-
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
|
|
178
|
-
echo " "
|
|
179
|
-
}
|
|
180
|
-
APP_ARGS=`save "$@"`
|
|
181
|
-
|
|
182
|
-
# Collect all arguments for the java command, following the shell quoting and substitution rules
|
|
183
|
-
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
|
|
184
|
-
|
|
185
|
-
exec "$JAVACMD" "$@"
|
|
1
|
+
#!/usr/bin/env sh
|
|
2
|
+
|
|
3
|
+
#
|
|
4
|
+
# Copyright 2015 the original author or authors.
|
|
5
|
+
#
|
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
+
# you may not use this file except in compliance with the License.
|
|
8
|
+
# You may obtain a copy of the License at
|
|
9
|
+
#
|
|
10
|
+
# https://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
#
|
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
+
# See the License for the specific language governing permissions and
|
|
16
|
+
# limitations under the License.
|
|
17
|
+
#
|
|
18
|
+
|
|
19
|
+
##############################################################################
|
|
20
|
+
##
|
|
21
|
+
## Gradle start up script for UN*X
|
|
22
|
+
##
|
|
23
|
+
##############################################################################
|
|
24
|
+
|
|
25
|
+
# Attempt to set APP_HOME
|
|
26
|
+
# Resolve links: $0 may be a link
|
|
27
|
+
PRG="$0"
|
|
28
|
+
# Need this for relative symlinks.
|
|
29
|
+
while [ -h "$PRG" ] ; do
|
|
30
|
+
ls=`ls -ld "$PRG"`
|
|
31
|
+
link=`expr "$ls" : '.*-> \(.*\)$'`
|
|
32
|
+
if expr "$link" : '/.*' > /dev/null; then
|
|
33
|
+
PRG="$link"
|
|
34
|
+
else
|
|
35
|
+
PRG=`dirname "$PRG"`"/$link"
|
|
36
|
+
fi
|
|
37
|
+
done
|
|
38
|
+
SAVED="`pwd`"
|
|
39
|
+
cd "`dirname \"$PRG\"`/" >/dev/null
|
|
40
|
+
APP_HOME="`pwd -P`"
|
|
41
|
+
cd "$SAVED" >/dev/null
|
|
42
|
+
|
|
43
|
+
APP_NAME="Gradle"
|
|
44
|
+
APP_BASE_NAME=`basename "$0"`
|
|
45
|
+
|
|
46
|
+
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
|
47
|
+
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
|
|
48
|
+
|
|
49
|
+
# Use the maximum available, or set MAX_FD != -1 to use that value.
|
|
50
|
+
MAX_FD="maximum"
|
|
51
|
+
|
|
52
|
+
warn () {
|
|
53
|
+
echo "$*"
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
die () {
|
|
57
|
+
echo
|
|
58
|
+
echo "$*"
|
|
59
|
+
echo
|
|
60
|
+
exit 1
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
# OS specific support (must be 'true' or 'false').
|
|
64
|
+
cygwin=false
|
|
65
|
+
msys=false
|
|
66
|
+
darwin=false
|
|
67
|
+
nonstop=false
|
|
68
|
+
case "`uname`" in
|
|
69
|
+
CYGWIN* )
|
|
70
|
+
cygwin=true
|
|
71
|
+
;;
|
|
72
|
+
Darwin* )
|
|
73
|
+
darwin=true
|
|
74
|
+
;;
|
|
75
|
+
MSYS* | MINGW* )
|
|
76
|
+
msys=true
|
|
77
|
+
;;
|
|
78
|
+
NONSTOP* )
|
|
79
|
+
nonstop=true
|
|
80
|
+
;;
|
|
81
|
+
esac
|
|
82
|
+
|
|
83
|
+
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
# Determine the Java command to use to start the JVM.
|
|
87
|
+
if [ -n "$JAVA_HOME" ] ; then
|
|
88
|
+
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
|
|
89
|
+
# IBM's JDK on AIX uses strange locations for the executables
|
|
90
|
+
JAVACMD="$JAVA_HOME/jre/sh/java"
|
|
91
|
+
else
|
|
92
|
+
JAVACMD="$JAVA_HOME/bin/java"
|
|
93
|
+
fi
|
|
94
|
+
if [ ! -x "$JAVACMD" ] ; then
|
|
95
|
+
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
|
|
96
|
+
|
|
97
|
+
Please set the JAVA_HOME variable in your environment to match the
|
|
98
|
+
location of your Java installation."
|
|
99
|
+
fi
|
|
100
|
+
else
|
|
101
|
+
JAVACMD="java"
|
|
102
|
+
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
|
103
|
+
|
|
104
|
+
Please set the JAVA_HOME variable in your environment to match the
|
|
105
|
+
location of your Java installation."
|
|
106
|
+
fi
|
|
107
|
+
|
|
108
|
+
# Increase the maximum file descriptors if we can.
|
|
109
|
+
if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
|
|
110
|
+
MAX_FD_LIMIT=`ulimit -H -n`
|
|
111
|
+
if [ $? -eq 0 ] ; then
|
|
112
|
+
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
|
|
113
|
+
MAX_FD="$MAX_FD_LIMIT"
|
|
114
|
+
fi
|
|
115
|
+
ulimit -n $MAX_FD
|
|
116
|
+
if [ $? -ne 0 ] ; then
|
|
117
|
+
warn "Could not set maximum file descriptor limit: $MAX_FD"
|
|
118
|
+
fi
|
|
119
|
+
else
|
|
120
|
+
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
|
|
121
|
+
fi
|
|
122
|
+
fi
|
|
123
|
+
|
|
124
|
+
# For Darwin, add options to specify how the application appears in the dock
|
|
125
|
+
if $darwin; then
|
|
126
|
+
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
|
|
127
|
+
fi
|
|
128
|
+
|
|
129
|
+
# For Cygwin or MSYS, switch paths to Windows format before running java
|
|
130
|
+
if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
|
|
131
|
+
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
|
|
132
|
+
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
|
|
133
|
+
|
|
134
|
+
JAVACMD=`cygpath --unix "$JAVACMD"`
|
|
135
|
+
|
|
136
|
+
# We build the pattern for arguments to be converted via cygpath
|
|
137
|
+
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
|
|
138
|
+
SEP=""
|
|
139
|
+
for dir in $ROOTDIRSRAW ; do
|
|
140
|
+
ROOTDIRS="$ROOTDIRS$SEP$dir"
|
|
141
|
+
SEP="|"
|
|
142
|
+
done
|
|
143
|
+
OURCYGPATTERN="(^($ROOTDIRS))"
|
|
144
|
+
# Add a user-defined pattern to the cygpath arguments
|
|
145
|
+
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
|
|
146
|
+
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
|
|
147
|
+
fi
|
|
148
|
+
# Now convert the arguments - kludge to limit ourselves to /bin/sh
|
|
149
|
+
i=0
|
|
150
|
+
for arg in "$@" ; do
|
|
151
|
+
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
|
|
152
|
+
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
|
|
153
|
+
|
|
154
|
+
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
|
|
155
|
+
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
|
|
156
|
+
else
|
|
157
|
+
eval `echo args$i`="\"$arg\""
|
|
158
|
+
fi
|
|
159
|
+
i=`expr $i + 1`
|
|
160
|
+
done
|
|
161
|
+
case $i in
|
|
162
|
+
0) set -- ;;
|
|
163
|
+
1) set -- "$args0" ;;
|
|
164
|
+
2) set -- "$args0" "$args1" ;;
|
|
165
|
+
3) set -- "$args0" "$args1" "$args2" ;;
|
|
166
|
+
4) set -- "$args0" "$args1" "$args2" "$args3" ;;
|
|
167
|
+
5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
|
|
168
|
+
6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
|
|
169
|
+
7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
|
|
170
|
+
8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
|
|
171
|
+
9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
|
|
172
|
+
esac
|
|
173
|
+
fi
|
|
174
|
+
|
|
175
|
+
# Escape application args
|
|
176
|
+
save () {
|
|
177
|
+
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
|
|
178
|
+
echo " "
|
|
179
|
+
}
|
|
180
|
+
APP_ARGS=`save "$@"`
|
|
181
|
+
|
|
182
|
+
# Collect all arguments for the java command, following the shell quoting and substitution rules
|
|
183
|
+
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
|
|
184
|
+
|
|
185
|
+
exec "$JAVACMD" "$@"
|
|
@@ -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,49 +1,28 @@
|
|
|
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
|
-
"repository":
|
|
7
|
-
"type": "git",
|
|
8
|
-
"url": "git+https://github.com/solana-mobile/seed-vault-sdk.git"
|
|
9
|
-
},
|
|
6
|
+
"repository": "https://github.com/solana-mobile/seed-vault-sdk",
|
|
10
7
|
"license": "Apache-2.0",
|
|
11
|
-
"
|
|
12
|
-
|
|
13
|
-
"import": "./lib/esm/index.js",
|
|
14
|
-
"require": "./lib/cjs/index.js"
|
|
15
|
-
},
|
|
16
|
-
"workerd": {
|
|
17
|
-
"import": "./lib/esm/index.js",
|
|
18
|
-
"require": "./lib/cjs/index.js"
|
|
19
|
-
},
|
|
20
|
-
"browser": {
|
|
21
|
-
"import": "./lib/cjs/index.browser.js",
|
|
22
|
-
"require": "./lib/esm/index.browser.js"
|
|
23
|
-
},
|
|
24
|
-
"node": {
|
|
25
|
-
"import": "./lib/esm/index.js",
|
|
26
|
-
"require": "./lib/cjs/index.js"
|
|
27
|
-
},
|
|
28
|
-
"react-native": "./lib/cjs/index.native.js",
|
|
29
|
-
"types": "./lib/types/index.d.ts"
|
|
30
|
-
},
|
|
31
|
-
"browser": {
|
|
32
|
-
"./lib/cjs/index.js": "./lib/cjs/index.browser.js",
|
|
33
|
-
"./lib/esm/index.js": "./lib/esm/index.browser.js"
|
|
34
|
-
},
|
|
8
|
+
"type": "module",
|
|
9
|
+
"sideEffects": false,
|
|
35
10
|
"main": "lib/esm/index",
|
|
36
|
-
"module": "lib/esm/index",
|
|
37
11
|
"react-native": "lib/esm/index",
|
|
12
|
+
"module": "lib/esm/index",
|
|
38
13
|
"types": "lib/types/index.d.ts",
|
|
39
|
-
"
|
|
14
|
+
"exports": {
|
|
15
|
+
"./package.json": "./package.json",
|
|
16
|
+
".": {
|
|
17
|
+
"import": "./lib/esm/index.native.js"
|
|
18
|
+
}
|
|
19
|
+
},
|
|
40
20
|
"files": [
|
|
41
21
|
"android",
|
|
42
22
|
"!android/build",
|
|
43
23
|
"lib",
|
|
44
24
|
"LICENSE"
|
|
45
25
|
],
|
|
46
|
-
"sideEffects": false,
|
|
47
26
|
"publishConfig": {
|
|
48
27
|
"access": "public"
|
|
49
28
|
},
|