-
Notifications
You must be signed in to change notification settings - Fork 0
/
scp-utils.js
123 lines (103 loc) · 2.95 KB
/
scp-utils.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
const connector = require('@secretarium/connector');
const crypto = require('@secretarium/crypto');
const fs = require('fs');
const { v4: uuidv4 } = require('uuid');
let scp = undefined;
let requestCount = 0;
let scp_call_timeout = 100000;
const timedSCPCall = (request, result) => {
//console.log(request)
let requestId = "request_" + (++requestCount).toString() + request.dcapp + "-" + request.function;
let prom = new Promise((resolve, reject) => {
const tick = setTimeout(() => { reject('Request timed out ' + requestId) }, scp_call_timeout);
const transaction = scp.newTx(
request.dcapp,
request.function,
requestId,
JSON.stringify(request.args)
);
transaction.onResult?.(result => console.log(`Request result: ${result}`));
transaction.onError?.(error => console.error(`Transaction error: ${error}`));
transaction.send().then((res) => {
console.log(res)
clearTimeout(tick)
resolve(res)
result.push(res)
})
.catch(reject)
});
return prom;
};
const applyTransaction = async (request) => {
console.log('Play transaction: ', request);
const requestId = uuidv4();
const transaction = scp.newTx(
request.dcapp,
request.function,
requestId,
JSON.stringify(request.args)
);
transaction.onResult?.(result => {
console.log(`Request result: ${result.message}`)
});
transaction.onError?.(error => {
console.error(`Transaction error: ${error.message}`)
});
let results = undefined;
try {
results = await transaction.send();
} catch (e) {
console.log('Transaction Error: ', e);
}
return results;
};
const applyQuery = async (request) => {
console.log('Play query: ', request);
const requestId = uuidv4();
const query = scp.newQuery(
request.dcapp,
request.function,
requestId,
JSON.stringify(request.args)
);
query.onResult?.(result => {
console.log(`Request result: ${result.message}`)
});
query.onError?.(error => {
console.error(`Transaction error: ${error.message}`)
});
let results = undefined;
try {
results = await query.send();
} catch (e) {
console.log('Query Error: ', e);
}
return results;
};
const openSCP = async (klave_endpoint, connection_keypair, password) => {
console.log('\n>> Opening SCP...');
const encryptedKey = fs.readFileSync(connection_keypair);
const key = await connector.Key.importEncryptedKeyPair(JSON.parse(encryptedKey.toString()), password);
scp = new connector.SCP();
try {
await scp.connect(klave_endpoint, key);
console.log('SCP Connection: Connected');
return true;
} catch (e) {
console.log(e);
console.log('SCP Connection: Error');
return false;
}
};
const closeSCP = () => {
console.log('\n>> Closing SCP...');
scp.close();
console.log('SCP Connection: Closed');
}
module.exports = {
openSCP,
closeSCP,
timedSCPCall,
applyTransaction,
applyQuery
}