@getpara/react-native-wallet 1.7.0 → 1.8.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/dist/AsyncStorage.d.ts +2 -5
- package/dist/AsyncStorage.js +37 -14
- package/dist/KeychainStorage.d.ts +0 -3
- package/dist/KeychainStorage.js +35 -28
- package/package.json +9 -9
- package/src/AsyncStorage.ts +32 -14
- package/src/KeychainStorage.ts +34 -31
package/dist/AsyncStorage.d.ts
CHANGED
|
@@ -1,10 +1,7 @@
|
|
|
1
1
|
import { StorageUtils } from '@getpara/web-sdk';
|
|
2
|
-
/**
|
|
3
|
-
* Implements `StorageUtils` using React Native Async Storage.
|
|
4
|
-
*/
|
|
5
2
|
export declare class AsyncStorage implements StorageUtils {
|
|
6
|
-
clear(prefix: string): Promise<void>;
|
|
7
3
|
get(key: string): Promise<string | null>;
|
|
8
|
-
removeItem(key: string): Promise<void>;
|
|
9
4
|
set(key: string, value: string): Promise<void>;
|
|
5
|
+
removeItem(key: string): Promise<void>;
|
|
6
|
+
clear(prefix: string): Promise<void>;
|
|
10
7
|
}
|
package/dist/AsyncStorage.js
CHANGED
|
@@ -8,33 +8,56 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
8
8
|
});
|
|
9
9
|
};
|
|
10
10
|
import RNAsyncStorage from '@react-native-async-storage/async-storage';
|
|
11
|
-
/**
|
|
12
|
-
* Implements `StorageUtils` using React Native Async Storage.
|
|
13
|
-
*/
|
|
14
11
|
export class AsyncStorage {
|
|
15
|
-
|
|
12
|
+
get(key) {
|
|
16
13
|
return __awaiter(this, void 0, void 0, function* () {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
14
|
+
try {
|
|
15
|
+
return yield RNAsyncStorage.getItem(key);
|
|
16
|
+
}
|
|
17
|
+
catch (error) {
|
|
18
|
+
console.warn('Error retrieving stored item:', error);
|
|
19
|
+
return null;
|
|
22
20
|
}
|
|
23
21
|
});
|
|
24
22
|
}
|
|
25
|
-
|
|
23
|
+
set(key, value) {
|
|
26
24
|
return __awaiter(this, void 0, void 0, function* () {
|
|
27
|
-
|
|
25
|
+
try {
|
|
26
|
+
yield RNAsyncStorage.setItem(key, value);
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
console.warn(`Error storing key ${key}:`, error);
|
|
30
|
+
}
|
|
28
31
|
});
|
|
29
32
|
}
|
|
30
33
|
removeItem(key) {
|
|
31
34
|
return __awaiter(this, void 0, void 0, function* () {
|
|
32
|
-
|
|
35
|
+
try {
|
|
36
|
+
yield RNAsyncStorage.removeItem(key);
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
console.warn(`Error removing key ${key}:`, error);
|
|
40
|
+
}
|
|
33
41
|
});
|
|
34
42
|
}
|
|
35
|
-
|
|
43
|
+
clear(prefix) {
|
|
36
44
|
return __awaiter(this, void 0, void 0, function* () {
|
|
37
|
-
|
|
45
|
+
try {
|
|
46
|
+
const keys = yield RNAsyncStorage.getAllKeys();
|
|
47
|
+
for (const key of keys) {
|
|
48
|
+
if (key.startsWith(prefix)) {
|
|
49
|
+
try {
|
|
50
|
+
yield RNAsyncStorage.removeItem(key);
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
console.warn(`Error clearing key ${key}:`, error);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
console.warn(`Error getting keys for prefix ${prefix}:`, error);
|
|
60
|
+
}
|
|
38
61
|
});
|
|
39
62
|
}
|
|
40
63
|
}
|
|
@@ -1,7 +1,4 @@
|
|
|
1
1
|
import { StorageUtils } from '@getpara/web-sdk';
|
|
2
|
-
/**
|
|
3
|
-
* Implements `StorageUtils` using React Native `Keychain`.
|
|
4
|
-
*/
|
|
5
2
|
export declare class KeychainStorage implements StorageUtils {
|
|
6
3
|
get(key: string): Promise<string | null>;
|
|
7
4
|
set(key: string, value: string): Promise<void>;
|
package/dist/KeychainStorage.js
CHANGED
|
@@ -9,17 +9,6 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
9
9
|
};
|
|
10
10
|
import Keychain from 'react-native-keychain';
|
|
11
11
|
const USERNAME = '@CAPSULE';
|
|
12
|
-
const KEYCHAIN_USER_CANCELLED_ERRORS = [
|
|
13
|
-
'user canceled the operation',
|
|
14
|
-
'error: code: 13, msg: cancel',
|
|
15
|
-
'error: code: 10, msg: fingerprint operation canceled by the user',
|
|
16
|
-
];
|
|
17
|
-
function isUserCancelledError(error) {
|
|
18
|
-
return KEYCHAIN_USER_CANCELLED_ERRORS.some(userCancelledError => error.toString().toLowerCase().includes(userCancelledError));
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Implements `StorageUtils` using React Native `Keychain`.
|
|
22
|
-
*/
|
|
23
12
|
export class KeychainStorage {
|
|
24
13
|
get(key) {
|
|
25
14
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -33,39 +22,57 @@ export class KeychainStorage {
|
|
|
33
22
|
return item.password;
|
|
34
23
|
}
|
|
35
24
|
catch (error) {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
throw new Error('Error retrieving stored item ' + error.message);
|
|
39
|
-
}
|
|
40
|
-
throw error;
|
|
25
|
+
console.warn('Error retrieving stored item:', error);
|
|
26
|
+
return null;
|
|
41
27
|
}
|
|
42
28
|
});
|
|
43
29
|
}
|
|
44
30
|
set(key, value) {
|
|
45
31
|
return __awaiter(this, void 0, void 0, function* () {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
32
|
+
try {
|
|
33
|
+
const result = yield Keychain.setGenericPassword(USERNAME, value, {
|
|
34
|
+
service: key,
|
|
35
|
+
accessible: Keychain.ACCESSIBLE.WHEN_UNLOCKED,
|
|
36
|
+
securityLevel: Keychain.SECURITY_LEVEL.ANY,
|
|
37
|
+
storage: Keychain.STORAGE_TYPE.AES_GCM_NO_AUTH,
|
|
38
|
+
});
|
|
39
|
+
if (!result) {
|
|
40
|
+
console.warn(`Failed to store key ${key}`);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
console.warn(`Error storing key ${key}:`, error);
|
|
53
45
|
}
|
|
54
46
|
});
|
|
55
47
|
}
|
|
56
48
|
removeItem(key) {
|
|
57
49
|
return __awaiter(this, void 0, void 0, function* () {
|
|
58
|
-
|
|
50
|
+
try {
|
|
51
|
+
yield Keychain.resetGenericPassword({ service: key });
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
console.warn(`Error removing key ${key}:`, error);
|
|
55
|
+
}
|
|
59
56
|
});
|
|
60
57
|
}
|
|
61
58
|
clear(prefix) {
|
|
62
59
|
return __awaiter(this, void 0, void 0, function* () {
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
60
|
+
try {
|
|
61
|
+
const services = yield Keychain.getAllGenericPasswordServices();
|
|
62
|
+
for (const key of services) {
|
|
63
|
+
if (key && key.startsWith(prefix)) {
|
|
64
|
+
try {
|
|
65
|
+
yield Keychain.resetGenericPassword({ service: key });
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
console.warn(`Error clearing key ${key}:`, error);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
67
71
|
}
|
|
68
72
|
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
console.warn(`Error getting services for prefix ${prefix}:`, error);
|
|
75
|
+
}
|
|
69
76
|
});
|
|
70
77
|
}
|
|
71
78
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@getpara/react-native-wallet",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.8.0",
|
|
4
4
|
"description": "Para Wallet for React Native",
|
|
5
5
|
"homepage": "https://getpara.com",
|
|
6
6
|
"author": "Para Team <hello@getpara.com> (https://getpara.com)",
|
|
@@ -22,9 +22,9 @@
|
|
|
22
22
|
"compile-signer": "bash ./scripts/compileSigner.sh"
|
|
23
23
|
},
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@getpara/core-sdk": "1.
|
|
26
|
-
"@getpara/user-management-client": "1.
|
|
27
|
-
"@getpara/web-sdk": "1.
|
|
25
|
+
"@getpara/core-sdk": "1.8.0",
|
|
26
|
+
"@getpara/user-management-client": "1.8.0",
|
|
27
|
+
"@getpara/web-sdk": "1.8.0",
|
|
28
28
|
"@peculiar/webcrypto": "^1.5.0",
|
|
29
29
|
"@sentry/react-native": "^6.7.0",
|
|
30
30
|
"node-forge": "1.3.1",
|
|
@@ -33,16 +33,16 @@
|
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
35
|
"@craftzdog/react-native-buffer": "6.0.5",
|
|
36
|
-
"@react-native-async-storage/async-storage": "2.1.
|
|
36
|
+
"@react-native-async-storage/async-storage": "2.1.2",
|
|
37
37
|
"@types/node-forge": "1.3.1",
|
|
38
38
|
"@types/react": "^18.0.31",
|
|
39
39
|
"@types/react-native": "0.70.0",
|
|
40
40
|
"@types/text-encoding": "0.0.39",
|
|
41
|
-
"react-native-keychain": "
|
|
41
|
+
"react-native-keychain": "10.0.0",
|
|
42
42
|
"react-native-modpow": "1.1.0",
|
|
43
|
-
"react-native-passkey": "3.
|
|
43
|
+
"react-native-passkey": "3.1.0",
|
|
44
44
|
"react-native-quick-base64": "2.1.2",
|
|
45
|
-
"react-native-quick-crypto": "0.7.
|
|
45
|
+
"react-native-quick-crypto": "0.7.12",
|
|
46
46
|
"typescript": "^5.4.3"
|
|
47
47
|
},
|
|
48
48
|
"peerDependencies": {
|
|
@@ -60,5 +60,5 @@
|
|
|
60
60
|
"publishConfig": {
|
|
61
61
|
"access": "public"
|
|
62
62
|
},
|
|
63
|
-
"gitHead": "
|
|
63
|
+
"gitHead": "ef96e79558695ccbe148d25a8e3611c4596d1954"
|
|
64
64
|
}
|
package/src/AsyncStorage.ts
CHANGED
|
@@ -1,28 +1,46 @@
|
|
|
1
1
|
import { StorageUtils } from '@getpara/web-sdk';
|
|
2
2
|
import RNAsyncStorage from '@react-native-async-storage/async-storage';
|
|
3
3
|
|
|
4
|
-
/**
|
|
5
|
-
* Implements `StorageUtils` using React Native Async Storage.
|
|
6
|
-
*/
|
|
7
4
|
export class AsyncStorage implements StorageUtils {
|
|
8
|
-
async
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
5
|
+
async get(key: string): Promise<string | null> {
|
|
6
|
+
try {
|
|
7
|
+
return await RNAsyncStorage.getItem(key);
|
|
8
|
+
} catch (error) {
|
|
9
|
+
console.warn('Error retrieving stored item:', error);
|
|
10
|
+
return null;
|
|
14
11
|
}
|
|
15
12
|
}
|
|
16
13
|
|
|
17
|
-
async
|
|
18
|
-
|
|
14
|
+
async set(key: string, value: string): Promise<void> {
|
|
15
|
+
try {
|
|
16
|
+
await RNAsyncStorage.setItem(key, value);
|
|
17
|
+
} catch (error) {
|
|
18
|
+
console.warn(`Error storing key ${key}:`, error);
|
|
19
|
+
}
|
|
19
20
|
}
|
|
20
21
|
|
|
21
22
|
async removeItem(key: string): Promise<void> {
|
|
22
|
-
|
|
23
|
+
try {
|
|
24
|
+
await RNAsyncStorage.removeItem(key);
|
|
25
|
+
} catch (error) {
|
|
26
|
+
console.warn(`Error removing key ${key}:`, error);
|
|
27
|
+
}
|
|
23
28
|
}
|
|
24
29
|
|
|
25
|
-
async
|
|
26
|
-
|
|
30
|
+
async clear(prefix: string): Promise<void> {
|
|
31
|
+
try {
|
|
32
|
+
const keys = await RNAsyncStorage.getAllKeys();
|
|
33
|
+
for (const key of keys) {
|
|
34
|
+
if (key.startsWith(prefix)) {
|
|
35
|
+
try {
|
|
36
|
+
await RNAsyncStorage.removeItem(key);
|
|
37
|
+
} catch (error) {
|
|
38
|
+
console.warn(`Error clearing key ${key}:`, error);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
} catch (error) {
|
|
43
|
+
console.warn(`Error getting keys for prefix ${prefix}:`, error);
|
|
44
|
+
}
|
|
27
45
|
}
|
|
28
46
|
}
|
package/src/KeychainStorage.ts
CHANGED
|
@@ -2,21 +2,7 @@ import { StorageUtils } from '@getpara/web-sdk';
|
|
|
2
2
|
import Keychain from 'react-native-keychain';
|
|
3
3
|
|
|
4
4
|
const USERNAME = '@CAPSULE';
|
|
5
|
-
const KEYCHAIN_USER_CANCELLED_ERRORS = [
|
|
6
|
-
'user canceled the operation',
|
|
7
|
-
'error: code: 13, msg: cancel',
|
|
8
|
-
'error: code: 10, msg: fingerprint operation canceled by the user',
|
|
9
|
-
];
|
|
10
5
|
|
|
11
|
-
function isUserCancelledError(error: Error) {
|
|
12
|
-
return KEYCHAIN_USER_CANCELLED_ERRORS.some(userCancelledError =>
|
|
13
|
-
error.toString().toLowerCase().includes(userCancelledError),
|
|
14
|
-
);
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* Implements `StorageUtils` using React Native `Keychain`.
|
|
19
|
-
*/
|
|
20
6
|
export class KeychainStorage implements StorageUtils {
|
|
21
7
|
async get(key: string): Promise<string | null> {
|
|
22
8
|
try {
|
|
@@ -28,32 +14,49 @@ export class KeychainStorage implements StorageUtils {
|
|
|
28
14
|
}
|
|
29
15
|
return item.password;
|
|
30
16
|
} catch (error) {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
throw new Error('Error retrieving stored item ' + error.message);
|
|
34
|
-
}
|
|
35
|
-
throw error;
|
|
17
|
+
console.warn('Error retrieving stored item:', error);
|
|
18
|
+
return null;
|
|
36
19
|
}
|
|
37
20
|
}
|
|
21
|
+
|
|
38
22
|
async set(key: string, value: string): Promise<void> {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
23
|
+
try {
|
|
24
|
+
const result = await Keychain.setGenericPassword(USERNAME, value, {
|
|
25
|
+
service: key,
|
|
26
|
+
accessible: Keychain.ACCESSIBLE.WHEN_UNLOCKED,
|
|
27
|
+
securityLevel: Keychain.SECURITY_LEVEL.ANY,
|
|
28
|
+
storage: Keychain.STORAGE_TYPE.AES_GCM_NO_AUTH,
|
|
29
|
+
});
|
|
30
|
+
if (!result) {
|
|
31
|
+
console.warn(`Failed to store key ${key}`);
|
|
32
|
+
}
|
|
33
|
+
} catch (error) {
|
|
34
|
+
console.warn(`Error storing key ${key}:`, error);
|
|
46
35
|
}
|
|
47
36
|
}
|
|
37
|
+
|
|
48
38
|
async removeItem(key: string): Promise<void> {
|
|
49
|
-
|
|
39
|
+
try {
|
|
40
|
+
await Keychain.resetGenericPassword({ service: key });
|
|
41
|
+
} catch (error) {
|
|
42
|
+
console.warn(`Error removing key ${key}:`, error);
|
|
43
|
+
}
|
|
50
44
|
}
|
|
45
|
+
|
|
51
46
|
async clear(prefix: string): Promise<void> {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
47
|
+
try {
|
|
48
|
+
const services = await Keychain.getAllGenericPasswordServices();
|
|
49
|
+
for (const key of services) {
|
|
50
|
+
if (key && key.startsWith(prefix)) {
|
|
51
|
+
try {
|
|
52
|
+
await Keychain.resetGenericPassword({ service: key });
|
|
53
|
+
} catch (error) {
|
|
54
|
+
console.warn(`Error clearing key ${key}:`, error);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
56
57
|
}
|
|
58
|
+
} catch (error) {
|
|
59
|
+
console.warn(`Error getting services for prefix ${prefix}:`, error);
|
|
57
60
|
}
|
|
58
61
|
}
|
|
59
62
|
}
|