@spacesops/wdk-react-native-provider 1.0.0-beta.10
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/LICENSE +176 -0
- package/README.md +841 -0
- package/lib/module/contexts/constants.js +20 -0
- package/lib/module/contexts/constants.js.map +1 -0
- package/lib/module/contexts/reducer.js +87 -0
- package/lib/module/contexts/reducer.js.map +1 -0
- package/lib/module/contexts/types.js +4 -0
- package/lib/module/contexts/types.js.map +1 -0
- package/lib/module/contexts/wallet-context.js +409 -0
- package/lib/module/contexts/wallet-context.js.map +1 -0
- package/lib/module/index.js +15 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/module/polyfills.js +34 -0
- package/lib/module/polyfills.js.map +1 -0
- package/lib/module/services/wdk-service/bare-api.js +69 -0
- package/lib/module/services/wdk-service/bare-api.js.map +1 -0
- package/lib/module/services/wdk-service/index.js +506 -0
- package/lib/module/services/wdk-service/index.js.map +1 -0
- package/lib/module/services/wdk-service/types.js +48 -0
- package/lib/module/services/wdk-service/types.js.map +1 -0
- package/lib/module/services/wdk-service/wdk-encryption-salt.js +29 -0
- package/lib/module/services/wdk-service/wdk-encryption-salt.js.map +1 -0
- package/lib/module/services/wdk-service/wdk-secret-manager-storage.js +64 -0
- package/lib/module/services/wdk-service/wdk-secret-manager-storage.js.map +1 -0
- package/lib/module/services/wdk-service/wdk-secret-manager-worklet.bundle.js +1 -0
- package/lib/module/services/wdk-service/wdk-worklet.mobile.bundle.js +1 -0
- package/lib/module/spec/hrpc/hrpc.json +66 -0
- package/lib/module/spec/hrpc/index.js +121 -0
- package/lib/module/spec/hrpc/index.js.map +1 -0
- package/lib/module/spec/hrpc/messages.js +291 -0
- package/lib/module/spec/hrpc/messages.js.map +1 -0
- package/lib/module/spec/schema/index.js +291 -0
- package/lib/module/spec/schema/index.js.map +1 -0
- package/lib/module/spec/schema/schema.json +186 -0
- package/lib/module/utils/get-balances-from-balance-map.js +18 -0
- package/lib/module/utils/get-balances-from-balance-map.js.map +1 -0
- package/lib/module/utils/get-transactions-from-transaction-map.js +10 -0
- package/lib/module/utils/get-transactions-from-transaction-map.js.map +1 -0
- package/lib/module/worklet/wdk-secret-manager-worklet.js +106 -0
- package/lib/module/worklet/wdk-secret-manager-worklet.js.map +1 -0
- package/lib/typescript/package.json +1 -0
- package/lib/typescript/src/contexts/constants.d.ts +3 -0
- package/lib/typescript/src/contexts/constants.d.ts.map +1 -0
- package/lib/typescript/src/contexts/reducer.d.ts +38 -0
- package/lib/typescript/src/contexts/reducer.d.ts.map +1 -0
- package/lib/typescript/src/contexts/types.d.ts +40 -0
- package/lib/typescript/src/contexts/types.d.ts.map +1 -0
- package/lib/typescript/src/contexts/wallet-context.d.ts +10 -0
- package/lib/typescript/src/contexts/wallet-context.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +7 -0
- package/lib/typescript/src/index.d.ts.map +1 -0
- package/lib/typescript/src/polyfills.d.ts +7 -0
- package/lib/typescript/src/polyfills.d.ts.map +1 -0
- package/lib/typescript/src/services/wdk-service/bare-api.d.ts +32 -0
- package/lib/typescript/src/services/wdk-service/bare-api.d.ts.map +1 -0
- package/lib/typescript/src/services/wdk-service/index.d.ts +68 -0
- package/lib/typescript/src/services/wdk-service/index.d.ts.map +1 -0
- package/lib/typescript/src/services/wdk-service/types.d.ts +125 -0
- package/lib/typescript/src/services/wdk-service/types.d.ts.map +1 -0
- package/lib/typescript/src/services/wdk-service/wdk-encryption-salt.d.ts +6 -0
- package/lib/typescript/src/services/wdk-service/wdk-encryption-salt.d.ts.map +1 -0
- package/lib/typescript/src/services/wdk-service/wdk-secret-manager-storage.d.ts +13 -0
- package/lib/typescript/src/services/wdk-service/wdk-secret-manager-storage.d.ts.map +1 -0
- package/lib/typescript/src/utils/get-balances-from-balance-map.d.ts +4 -0
- package/lib/typescript/src/utils/get-balances-from-balance-map.d.ts.map +1 -0
- package/lib/typescript/src/utils/get-transactions-from-transaction-map.d.ts +4 -0
- package/lib/typescript/src/utils/get-transactions-from-transaction-map.d.ts.map +1 -0
- package/metro-polyfills.js +89 -0
- package/package.json +152 -0
- package/src/contexts/constants.ts +19 -0
- package/src/contexts/reducer.ts +103 -0
- package/src/contexts/types.ts +51 -0
- package/src/contexts/wallet-context.tsx +411 -0
- package/src/index.tsx +28 -0
- package/src/polyfills.ts +31 -0
- package/src/services/wdk-service/bare-api.ts +88 -0
- package/src/services/wdk-service/index.ts +765 -0
- package/src/services/wdk-service/types.ts +137 -0
- package/src/services/wdk-service/wdk-encryption-salt.ts +30 -0
- package/src/services/wdk-service/wdk-secret-manager-storage.ts +102 -0
- package/src/spec/hrpc/hrpc.json +66 -0
- package/src/spec/hrpc/index.js +228 -0
- package/src/spec/hrpc/messages.js +328 -0
- package/src/spec/schema/index.js +328 -0
- package/src/spec/schema/schema.json +186 -0
- package/src/utils/get-balances-from-balance-map.ts +22 -0
- package/src/utils/get-transactions-from-transaction-map.ts +18 -0
- package/src/worklet/wdk-secret-manager-worklet.js +118 -0
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
export enum AssetTicker {
|
|
2
|
+
BTC = 'btc',
|
|
3
|
+
USDT = 'usdt',
|
|
4
|
+
XAUT = 'xaut',
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export enum NetworkType {
|
|
8
|
+
SEGWIT = 'bitcoin',
|
|
9
|
+
LIGHTNING = 'lightning',
|
|
10
|
+
ETHEREUM = 'ethereum',
|
|
11
|
+
SOLANA = 'solana',
|
|
12
|
+
TRON = 'tron',
|
|
13
|
+
TON = 'ton',
|
|
14
|
+
POLYGON = 'polygon',
|
|
15
|
+
ARBITRUM = 'arbitrum',
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export const AssetAddressMap = {
|
|
19
|
+
[AssetTicker.BTC]: {
|
|
20
|
+
[NetworkType.SEGWIT]: 'bitcoin',
|
|
21
|
+
},
|
|
22
|
+
[AssetTicker.USDT]: {
|
|
23
|
+
[NetworkType.ETHEREUM]: 'ethereum',
|
|
24
|
+
[NetworkType.POLYGON]: 'polygon',
|
|
25
|
+
[NetworkType.ARBITRUM]: 'arbitrum',
|
|
26
|
+
[NetworkType.TON]: 'ton',
|
|
27
|
+
},
|
|
28
|
+
[AssetTicker.XAUT]: {
|
|
29
|
+
[NetworkType.ETHEREUM]: 'ethereum',
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
export const AssetBalanceMap = {
|
|
34
|
+
[AssetTicker.BTC]: {
|
|
35
|
+
[NetworkType.SEGWIT]: 'bitcoin',
|
|
36
|
+
},
|
|
37
|
+
[AssetTicker.USDT]: {
|
|
38
|
+
[NetworkType.ETHEREUM]: 'ethereum',
|
|
39
|
+
[NetworkType.POLYGON]: 'polygon',
|
|
40
|
+
[NetworkType.ARBITRUM]: 'arbitrum',
|
|
41
|
+
[NetworkType.TON]: 'ton',
|
|
42
|
+
},
|
|
43
|
+
[AssetTicker.XAUT]: {
|
|
44
|
+
[NetworkType.ETHEREUM]: 'ethereum',
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
export interface Amount {
|
|
49
|
+
denomination: AssetTicker;
|
|
50
|
+
value: string;
|
|
51
|
+
networkType: NetworkType;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export interface Wallet {
|
|
55
|
+
id: string;
|
|
56
|
+
name: string;
|
|
57
|
+
enabledAssets: AssetTicker[];
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export type AddressMap = Partial<Record<NetworkType, string>>;
|
|
61
|
+
export type BalanceMap = Record<
|
|
62
|
+
string,
|
|
63
|
+
{ balance: number; asset: AssetTicker }
|
|
64
|
+
>;
|
|
65
|
+
export type TransactionMap = Partial<Record<NetworkType, Transaction[]>>;
|
|
66
|
+
|
|
67
|
+
export interface Transaction {
|
|
68
|
+
blockchain: string;
|
|
69
|
+
blockNumber: number;
|
|
70
|
+
transactionHash: string;
|
|
71
|
+
transferIndex: number;
|
|
72
|
+
token: string;
|
|
73
|
+
amount: string;
|
|
74
|
+
timestamp: number;
|
|
75
|
+
transactionIndex: number;
|
|
76
|
+
logIndex: number;
|
|
77
|
+
from: string;
|
|
78
|
+
to: string;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
export interface PaymasterToken {
|
|
82
|
+
address: string;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
export interface EVMChainConfig {
|
|
86
|
+
chainId: number;
|
|
87
|
+
blockchain: string;
|
|
88
|
+
provider: string;
|
|
89
|
+
bundlerUrl: string;
|
|
90
|
+
paymasterUrl: string;
|
|
91
|
+
paymasterAddress: string;
|
|
92
|
+
entrypointAddress: string;
|
|
93
|
+
transferMaxFee: number;
|
|
94
|
+
swapMaxFee: number;
|
|
95
|
+
bridgeMaxFee: number;
|
|
96
|
+
paymasterToken: PaymasterToken;
|
|
97
|
+
safeModulesVersion?: string;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
export interface TONChainConfig {
|
|
101
|
+
tonApiClient: {
|
|
102
|
+
url: string;
|
|
103
|
+
};
|
|
104
|
+
tonClient: {
|
|
105
|
+
url: string;
|
|
106
|
+
};
|
|
107
|
+
paymasterToken: PaymasterToken;
|
|
108
|
+
transferMaxFee: number;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
export interface BitcoinChainConfig {
|
|
112
|
+
host: string;
|
|
113
|
+
port: number;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
export interface TronChainConfig {
|
|
117
|
+
chainId: number;
|
|
118
|
+
provider: string;
|
|
119
|
+
gasFreeProvider: string;
|
|
120
|
+
apiKey: string;
|
|
121
|
+
apiSecret: string;
|
|
122
|
+
serviceProvider: string;
|
|
123
|
+
verifyingContract: string;
|
|
124
|
+
transferMaxFee: number;
|
|
125
|
+
swapMaxFee: number;
|
|
126
|
+
bridgeMaxFee: number;
|
|
127
|
+
paymasterToken: PaymasterToken;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
export interface ChainsConfig {
|
|
131
|
+
ethereum?: EVMChainConfig;
|
|
132
|
+
arbitrum?: EVMChainConfig;
|
|
133
|
+
polygon?: EVMChainConfig;
|
|
134
|
+
ton?: TONChainConfig;
|
|
135
|
+
bitcoin?: BitcoinChainConfig;
|
|
136
|
+
tron?: TronChainConfig;
|
|
137
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
const MAX_BYTES = 16;
|
|
2
|
+
|
|
3
|
+
function generateWdkSalt(email: any): Buffer {
|
|
4
|
+
const localPart = email.split('@')[0];
|
|
5
|
+
|
|
6
|
+
// Encode the local part using TextEncoder
|
|
7
|
+
const encoder = new TextEncoder();
|
|
8
|
+
const encoded = encoder.encode(localPart);
|
|
9
|
+
|
|
10
|
+
// Prepare a MAX_BYTES-byte buffer
|
|
11
|
+
const bf = new Uint8Array(MAX_BYTES);
|
|
12
|
+
|
|
13
|
+
if (encoded.length > MAX_BYTES) {
|
|
14
|
+
// If more than MAX_BYTES bytes, take the last MAX_BYTES bytes
|
|
15
|
+
const sliced = encoded.slice(0, MAX_BYTES);
|
|
16
|
+
bf.set(sliced);
|
|
17
|
+
} else {
|
|
18
|
+
// Copy encoded bytes to beginning
|
|
19
|
+
bf.set(encoded, 0);
|
|
20
|
+
|
|
21
|
+
// Fill the remaining bytes with 7
|
|
22
|
+
bf.fill(7, encoded.length);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
return bf as Buffer;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export const wdkEncryptionSalt = {
|
|
29
|
+
generateWdkSalt,
|
|
30
|
+
};
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import b4a from 'b4a';
|
|
2
|
+
import * as Keychain from 'react-native-keychain';
|
|
3
|
+
|
|
4
|
+
export const WDK_STORAGE_SEED = 'seed' as const;
|
|
5
|
+
export const WDK_STORAGE_ENTROPY = 'entropy' as const;
|
|
6
|
+
export const WDK_STORAGE_SALT = 'salt' as const;
|
|
7
|
+
|
|
8
|
+
export class WdkSecretManagerStorage {
|
|
9
|
+
static BASE_SERVICE_NAME = 'wdk.secretManager';
|
|
10
|
+
|
|
11
|
+
static async saveData(
|
|
12
|
+
key:
|
|
13
|
+
| typeof WDK_STORAGE_SEED
|
|
14
|
+
| typeof WDK_STORAGE_ENTROPY
|
|
15
|
+
| typeof WDK_STORAGE_SALT,
|
|
16
|
+
value: Buffer | string
|
|
17
|
+
) {
|
|
18
|
+
const itemService = WdkSecretManagerStorage.getServiceForItem(key);
|
|
19
|
+
await Keychain.setGenericPassword(
|
|
20
|
+
key,
|
|
21
|
+
b4a.isBuffer(value) ? b4a.toString(value, 'hex') : value,
|
|
22
|
+
{
|
|
23
|
+
service: itemService,
|
|
24
|
+
accessControl:
|
|
25
|
+
key === 'seed' ? Keychain.ACCESS_CONTROL.BIOMETRY_ANY : undefined,
|
|
26
|
+
}
|
|
27
|
+
);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
static async retrieveData(
|
|
31
|
+
key:
|
|
32
|
+
| typeof WDK_STORAGE_SEED
|
|
33
|
+
| typeof WDK_STORAGE_ENTROPY
|
|
34
|
+
| typeof WDK_STORAGE_SALT
|
|
35
|
+
) {
|
|
36
|
+
const itemService = WdkSecretManagerStorage.getServiceForItem(key);
|
|
37
|
+
|
|
38
|
+
try {
|
|
39
|
+
const credentials = await Keychain.getGenericPassword({
|
|
40
|
+
service: itemService,
|
|
41
|
+
accessControl:
|
|
42
|
+
key === 'seed' ? Keychain.ACCESS_CONTROL.BIOMETRY_ANY : undefined,
|
|
43
|
+
});
|
|
44
|
+
if (credentials) {
|
|
45
|
+
return b4a.from(credentials.password, 'hex');
|
|
46
|
+
}
|
|
47
|
+
console.info(
|
|
48
|
+
`For key ${itemService} in secure storage data do not exist.`
|
|
49
|
+
);
|
|
50
|
+
return false;
|
|
51
|
+
} catch (error) {
|
|
52
|
+
console.error(error);
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
static async hasKey(
|
|
58
|
+
key:
|
|
59
|
+
| typeof WDK_STORAGE_SEED
|
|
60
|
+
| typeof WDK_STORAGE_ENTROPY
|
|
61
|
+
| typeof WDK_STORAGE_SALT
|
|
62
|
+
) {
|
|
63
|
+
const itemService = WdkSecretManagerStorage.getServiceForItem(key);
|
|
64
|
+
return await Keychain.hasGenericPassword({ service: itemService });
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
static async resetData(
|
|
68
|
+
key:
|
|
69
|
+
| typeof WDK_STORAGE_SEED
|
|
70
|
+
| typeof WDK_STORAGE_ENTROPY
|
|
71
|
+
| typeof WDK_STORAGE_SALT
|
|
72
|
+
) {
|
|
73
|
+
const itemService = WdkSecretManagerStorage.getServiceForItem(key);
|
|
74
|
+
try {
|
|
75
|
+
const success = await Keychain.resetGenericPassword({
|
|
76
|
+
service: itemService,
|
|
77
|
+
});
|
|
78
|
+
if (success) {
|
|
79
|
+
console.info(`Item for key '${key}' was reset successfully.`);
|
|
80
|
+
}
|
|
81
|
+
return true;
|
|
82
|
+
} catch (error) {
|
|
83
|
+
console.error(`Failed to reset item for key '${key}':`, error);
|
|
84
|
+
return false;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
static async resetAllData() {
|
|
89
|
+
await WdkSecretManagerStorage.resetData(WDK_STORAGE_ENTROPY);
|
|
90
|
+
await WdkSecretManagerStorage.resetData(WDK_STORAGE_SEED);
|
|
91
|
+
await WdkSecretManagerStorage.resetData(WDK_STORAGE_SALT);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
static getServiceForItem(
|
|
95
|
+
key:
|
|
96
|
+
| typeof WDK_STORAGE_SEED
|
|
97
|
+
| typeof WDK_STORAGE_ENTROPY
|
|
98
|
+
| typeof WDK_STORAGE_SALT
|
|
99
|
+
) {
|
|
100
|
+
return `${WdkSecretManagerStorage.BASE_SERVICE_NAME}.${key}`;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 1,
|
|
3
|
+
"schema": [
|
|
4
|
+
{
|
|
5
|
+
"id": 0,
|
|
6
|
+
"name": "@tetherto/wdk-secret-manager/command-workletStart",
|
|
7
|
+
"request": {
|
|
8
|
+
"name": "@tetherto/wdk-secret-manager/command-workletStart-request",
|
|
9
|
+
"stream": false
|
|
10
|
+
},
|
|
11
|
+
"response": {
|
|
12
|
+
"name": "@tetherto/wdk-secret-manager/command-workletStart-response",
|
|
13
|
+
"stream": false
|
|
14
|
+
},
|
|
15
|
+
"version": 1
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"id": 1,
|
|
19
|
+
"name": "@tetherto/wdk-secret-manager/command-workletStop",
|
|
20
|
+
"request": {
|
|
21
|
+
"name": "@tetherto/wdk-secret-manager/command-workletStop-request",
|
|
22
|
+
"stream": false
|
|
23
|
+
},
|
|
24
|
+
"response": {
|
|
25
|
+
"name": "@tetherto/wdk-secret-manager/command-workletStop-response",
|
|
26
|
+
"stream": false
|
|
27
|
+
},
|
|
28
|
+
"version": 1
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"id": 2,
|
|
32
|
+
"name": "@tetherto/wdk-secret-manager/command-generateAndEncrypt",
|
|
33
|
+
"request": {
|
|
34
|
+
"name": "@tetherto/wdk-secret-manager/command-generateAndEncrypt-request",
|
|
35
|
+
"stream": false
|
|
36
|
+
},
|
|
37
|
+
"response": {
|
|
38
|
+
"name": "@tetherto/wdk-secret-manager/command-generateAndEncrypt-response",
|
|
39
|
+
"stream": false
|
|
40
|
+
},
|
|
41
|
+
"version": 1
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"id": 3,
|
|
45
|
+
"name": "@tetherto/wdk-secret-manager/command-decrypt",
|
|
46
|
+
"request": {
|
|
47
|
+
"name": "@tetherto/wdk-secret-manager/command-decrypt-request",
|
|
48
|
+
"stream": false
|
|
49
|
+
},
|
|
50
|
+
"response": {
|
|
51
|
+
"name": "@tetherto/wdk-secret-manager/command-decrypt-response",
|
|
52
|
+
"stream": false
|
|
53
|
+
},
|
|
54
|
+
"version": 1
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"id": 4,
|
|
58
|
+
"name": "@tetherto/wdk-secret-manager/command-log",
|
|
59
|
+
"request": {
|
|
60
|
+
"name": "@tetherto/wdk-secret-manager/command-log-request",
|
|
61
|
+
"send": true
|
|
62
|
+
},
|
|
63
|
+
"version": 1
|
|
64
|
+
}
|
|
65
|
+
]
|
|
66
|
+
}
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
// This file is autogenerated by the hrpc compiler
|
|
2
|
+
|
|
3
|
+
const { c, RPC, RPCStream, RPCRequestStream } = require('hrpc/runtime');
|
|
4
|
+
const { getEncoding } = require('./messages.js');
|
|
5
|
+
|
|
6
|
+
const methods = new Map([
|
|
7
|
+
['@tetherto/wdk-secret-manager/command-workletStart', 0],
|
|
8
|
+
[0, '@tetherto/wdk-secret-manager/command-workletStart'],
|
|
9
|
+
['@tetherto/wdk-secret-manager/command-workletStop', 1],
|
|
10
|
+
[1, '@tetherto/wdk-secret-manager/command-workletStop'],
|
|
11
|
+
['@tetherto/wdk-secret-manager/command-generateAndEncrypt', 2],
|
|
12
|
+
[2, '@tetherto/wdk-secret-manager/command-generateAndEncrypt'],
|
|
13
|
+
['@tetherto/wdk-secret-manager/command-decrypt', 3],
|
|
14
|
+
[3, '@tetherto/wdk-secret-manager/command-decrypt'],
|
|
15
|
+
['@tetherto/wdk-secret-manager/command-log', 4],
|
|
16
|
+
[4, '@tetherto/wdk-secret-manager/command-log'],
|
|
17
|
+
]);
|
|
18
|
+
|
|
19
|
+
class HRPC {
|
|
20
|
+
constructor(stream) {
|
|
21
|
+
this._stream = stream;
|
|
22
|
+
this._handlers = [];
|
|
23
|
+
this._requestEncodings = new Map([
|
|
24
|
+
[
|
|
25
|
+
'@tetherto/wdk-secret-manager/command-workletStart',
|
|
26
|
+
getEncoding(
|
|
27
|
+
'@tetherto/wdk-secret-manager/command-workletStart-request'
|
|
28
|
+
),
|
|
29
|
+
],
|
|
30
|
+
[
|
|
31
|
+
'@tetherto/wdk-secret-manager/command-workletStop',
|
|
32
|
+
getEncoding('@tetherto/wdk-secret-manager/command-workletStop-request'),
|
|
33
|
+
],
|
|
34
|
+
[
|
|
35
|
+
'@tetherto/wdk-secret-manager/command-generateAndEncrypt',
|
|
36
|
+
getEncoding(
|
|
37
|
+
'@tetherto/wdk-secret-manager/command-generateAndEncrypt-request'
|
|
38
|
+
),
|
|
39
|
+
],
|
|
40
|
+
[
|
|
41
|
+
'@tetherto/wdk-secret-manager/command-decrypt',
|
|
42
|
+
getEncoding('@tetherto/wdk-secret-manager/command-decrypt-request'),
|
|
43
|
+
],
|
|
44
|
+
[
|
|
45
|
+
'@tetherto/wdk-secret-manager/command-log',
|
|
46
|
+
getEncoding('@tetherto/wdk-secret-manager/command-log-request'),
|
|
47
|
+
],
|
|
48
|
+
]);
|
|
49
|
+
this._responseEncodings = new Map([
|
|
50
|
+
[
|
|
51
|
+
'@tetherto/wdk-secret-manager/command-workletStart',
|
|
52
|
+
getEncoding(
|
|
53
|
+
'@tetherto/wdk-secret-manager/command-workletStart-response'
|
|
54
|
+
),
|
|
55
|
+
],
|
|
56
|
+
[
|
|
57
|
+
'@tetherto/wdk-secret-manager/command-workletStop',
|
|
58
|
+
getEncoding(
|
|
59
|
+
'@tetherto/wdk-secret-manager/command-workletStop-response'
|
|
60
|
+
),
|
|
61
|
+
],
|
|
62
|
+
[
|
|
63
|
+
'@tetherto/wdk-secret-manager/command-generateAndEncrypt',
|
|
64
|
+
getEncoding(
|
|
65
|
+
'@tetherto/wdk-secret-manager/command-generateAndEncrypt-response'
|
|
66
|
+
),
|
|
67
|
+
],
|
|
68
|
+
[
|
|
69
|
+
'@tetherto/wdk-secret-manager/command-decrypt',
|
|
70
|
+
getEncoding('@tetherto/wdk-secret-manager/command-decrypt-response'),
|
|
71
|
+
],
|
|
72
|
+
]);
|
|
73
|
+
this._rpc = new RPC(stream, async (req) => {
|
|
74
|
+
const command = methods.get(req.command);
|
|
75
|
+
const responseEncoding = this._responseEncodings.get(command);
|
|
76
|
+
const requestEncoding = this._requestEncodings.get(command);
|
|
77
|
+
if (this._requestIsSend(command)) {
|
|
78
|
+
const request = req.data ? c.decode(requestEncoding, req.data) : null;
|
|
79
|
+
await this._handlers[command](request);
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
if (!this._requestIsStream(command) && !this._responseIsStream(command)) {
|
|
83
|
+
const request = req.data ? c.decode(requestEncoding, req.data) : null;
|
|
84
|
+
const response = await this._handlers[command](request);
|
|
85
|
+
req.reply(c.encode(responseEncoding, response));
|
|
86
|
+
}
|
|
87
|
+
if (!this._requestIsStream(command) && this._responseIsStream(command)) {
|
|
88
|
+
const request = req.data ? c.decode(requestEncoding, req.data) : null;
|
|
89
|
+
const responseStream = new RPCStream(
|
|
90
|
+
null,
|
|
91
|
+
null,
|
|
92
|
+
req.createResponseStream(),
|
|
93
|
+
responseEncoding
|
|
94
|
+
);
|
|
95
|
+
responseStream.data = request;
|
|
96
|
+
await this._handlers[command](responseStream);
|
|
97
|
+
}
|
|
98
|
+
if (this._requestIsStream(command) && !this._responseIsStream(command)) {
|
|
99
|
+
const requestStream = new RPCRequestStream(
|
|
100
|
+
req,
|
|
101
|
+
responseEncoding,
|
|
102
|
+
req.createRequestStream(),
|
|
103
|
+
requestEncoding
|
|
104
|
+
);
|
|
105
|
+
const response = await this._handlers[command](requestStream);
|
|
106
|
+
req.reply(c.encode(responseEncoding, response));
|
|
107
|
+
}
|
|
108
|
+
if (this._requestIsStream(command) && this._responseIsStream(command)) {
|
|
109
|
+
const requestStream = new RPCRequestStream(
|
|
110
|
+
req,
|
|
111
|
+
responseEncoding,
|
|
112
|
+
req.createRequestStream(),
|
|
113
|
+
requestEncoding,
|
|
114
|
+
req.createResponseStream(),
|
|
115
|
+
responseEncoding
|
|
116
|
+
);
|
|
117
|
+
await this._handlers[command](requestStream);
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
async _call(name, args) {
|
|
123
|
+
const requestEncoding = this._requestEncodings.get(name);
|
|
124
|
+
const responseEncoding = this._responseEncodings.get(name);
|
|
125
|
+
const request = this._rpc.request(methods.get(name));
|
|
126
|
+
const encoded = c.encode(requestEncoding, args);
|
|
127
|
+
request.send(encoded);
|
|
128
|
+
return c.decode(responseEncoding, await request.reply());
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
_callSync(name, args) {
|
|
132
|
+
const requestEncoding = this._requestEncodings.get(name);
|
|
133
|
+
const responseEncoding = this._responseEncodings.get(name);
|
|
134
|
+
const request = this._rpc.request(methods.get(name));
|
|
135
|
+
if (this._requestIsSend(name)) {
|
|
136
|
+
const encoded = c.encode(requestEncoding, args);
|
|
137
|
+
request.send(encoded);
|
|
138
|
+
}
|
|
139
|
+
if (!this._requestIsStream(name) && this._responseIsStream(name)) {
|
|
140
|
+
const encoded = c.encode(requestEncoding, args);
|
|
141
|
+
request.send(encoded);
|
|
142
|
+
return new RPCStream(request.createResponseStream(), responseEncoding);
|
|
143
|
+
}
|
|
144
|
+
if (this._requestIsStream(name) && !this._responseIsStream(name)) {
|
|
145
|
+
return new RPCRequestStream(
|
|
146
|
+
request,
|
|
147
|
+
responseEncoding,
|
|
148
|
+
null,
|
|
149
|
+
null,
|
|
150
|
+
request.createRequestStream(),
|
|
151
|
+
requestEncoding
|
|
152
|
+
);
|
|
153
|
+
}
|
|
154
|
+
if (this._requestIsStream(name) && this._responseIsStream(name)) {
|
|
155
|
+
return new RPCRequestStream(
|
|
156
|
+
request,
|
|
157
|
+
responseEncoding,
|
|
158
|
+
request.createResponseStream(),
|
|
159
|
+
responseEncoding,
|
|
160
|
+
request.createRequestStream(),
|
|
161
|
+
requestEncoding
|
|
162
|
+
);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
async commandWorkletStart(args) {
|
|
167
|
+
return this._call(
|
|
168
|
+
'@tetherto/wdk-secret-manager/command-workletStart',
|
|
169
|
+
args
|
|
170
|
+
);
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
async commandWorkletStop(args) {
|
|
174
|
+
return this._call('@tetherto/wdk-secret-manager/command-workletStop', args);
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
async commandGenerateAndEncrypt(args) {
|
|
178
|
+
return this._call(
|
|
179
|
+
'@tetherto/wdk-secret-manager/command-generateAndEncrypt',
|
|
180
|
+
args
|
|
181
|
+
);
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
async commandDecrypt(args) {
|
|
185
|
+
return this._call('@tetherto/wdk-secret-manager/command-decrypt', args);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
commandLog(args) {
|
|
189
|
+
return this._callSync('@tetherto/wdk-secret-manager/command-log', args);
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
onCommandWorkletStart(responseFn) {
|
|
193
|
+
this._handlers['@tetherto/wdk-secret-manager/command-workletStart'] =
|
|
194
|
+
responseFn;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
onCommandWorkletStop(responseFn) {
|
|
198
|
+
this._handlers['@tetherto/wdk-secret-manager/command-workletStop'] =
|
|
199
|
+
responseFn;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
onCommandGenerateAndEncrypt(responseFn) {
|
|
203
|
+
this._handlers['@tetherto/wdk-secret-manager/command-generateAndEncrypt'] =
|
|
204
|
+
responseFn;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
onCommandDecrypt(responseFn) {
|
|
208
|
+
this._handlers['@tetherto/wdk-secret-manager/command-decrypt'] = responseFn;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
onCommandLog(responseFn) {
|
|
212
|
+
this._handlers['@tetherto/wdk-secret-manager/command-log'] = responseFn;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
_requestIsStream(command) {
|
|
216
|
+
return [].includes(command);
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
_responseIsStream(command) {
|
|
220
|
+
return [].includes(command);
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
_requestIsSend(command) {
|
|
224
|
+
return ['@tetherto/wdk-secret-manager/command-log'].includes(command);
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
module.exports = HRPC;
|