@gnolang/tm2-js-client 1.0.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/LICENSE.md +201 -0
- package/README.md +78 -0
- package/bin/index.d.ts +4 -0
- package/bin/index.js +20 -0
- package/bin/proto/google/protobuf/any.d.ts +151 -0
- package/bin/proto/google/protobuf/any.js +124 -0
- package/bin/proto/index.d.ts +2 -0
- package/bin/proto/index.js +20 -0
- package/bin/proto/tm2/tx.d.ts +540 -0
- package/bin/proto/tm2/tx.js +365 -0
- package/bin/provider/endpoints.d.ts +28 -0
- package/bin/provider/endpoints.js +36 -0
- package/bin/provider/index.d.ts +6 -0
- package/bin/provider/index.js +22 -0
- package/bin/provider/jsonrpc/index.d.ts +1 -0
- package/bin/provider/jsonrpc/index.js +17 -0
- package/bin/provider/jsonrpc/jsonrpc.d.ts +27 -0
- package/bin/provider/jsonrpc/jsonrpc.js +219 -0
- package/bin/provider/jsonrpc/jsonrpc.test.d.ts +1 -0
- package/bin/provider/jsonrpc/jsonrpc.test.js +374 -0
- package/bin/provider/provider.d.ts +86 -0
- package/bin/provider/provider.js +2 -0
- package/bin/provider/types/abci.d.ts +39 -0
- package/bin/provider/types/abci.js +4 -0
- package/bin/provider/types/common.d.ts +154 -0
- package/bin/provider/types/common.js +2 -0
- package/bin/provider/types/index.d.ts +3 -0
- package/bin/provider/types/index.js +19 -0
- package/bin/provider/types/jsonrpc.d.ts +26 -0
- package/bin/provider/types/jsonrpc.js +2 -0
- package/bin/provider/utility/index.d.ts +2 -0
- package/bin/provider/utility/index.js +18 -0
- package/bin/provider/utility/provider.utility.d.ts +28 -0
- package/bin/provider/utility/provider.utility.js +194 -0
- package/bin/provider/utility/requests.utility.d.ts +33 -0
- package/bin/provider/utility/requests.utility.js +74 -0
- package/bin/provider/websocket/index.d.ts +1 -0
- package/bin/provider/websocket/index.js +17 -0
- package/bin/provider/websocket/ws.d.ts +55 -0
- package/bin/provider/websocket/ws.js +303 -0
- package/bin/provider/websocket/ws.test.d.ts +1 -0
- package/bin/provider/websocket/ws.test.js +535 -0
- package/bin/services/index.d.ts +2 -0
- package/bin/services/index.js +18 -0
- package/bin/services/rest/restService.d.ts +4 -0
- package/bin/services/rest/restService.js +72 -0
- package/bin/services/rest/restService.types.d.ts +6 -0
- package/bin/services/rest/restService.types.js +2 -0
- package/bin/wallet/index.d.ts +5 -0
- package/bin/wallet/index.js +21 -0
- package/bin/wallet/key/index.d.ts +1 -0
- package/bin/wallet/key/index.js +17 -0
- package/bin/wallet/key/key.d.ts +21 -0
- package/bin/wallet/key/key.js +102 -0
- package/bin/wallet/key/key.test.d.ts +1 -0
- package/bin/wallet/key/key.test.js +121 -0
- package/bin/wallet/ledger/index.d.ts +1 -0
- package/bin/wallet/ledger/index.js +17 -0
- package/bin/wallet/ledger/ledger.d.ts +22 -0
- package/bin/wallet/ledger/ledger.js +109 -0
- package/bin/wallet/signer.d.ts +29 -0
- package/bin/wallet/signer.js +2 -0
- package/bin/wallet/types/index.d.ts +2 -0
- package/bin/wallet/types/index.js +18 -0
- package/bin/wallet/types/sign.d.ts +17 -0
- package/bin/wallet/types/sign.js +4 -0
- package/bin/wallet/types/wallet.d.ts +5 -0
- package/bin/wallet/types/wallet.js +2 -0
- package/bin/wallet/utility/index.d.ts +1 -0
- package/bin/wallet/utility/index.js +17 -0
- package/bin/wallet/utility/utility.d.ts +30 -0
- package/bin/wallet/utility/utility.js +105 -0
- package/bin/wallet/wallet.d.ts +94 -0
- package/bin/wallet/wallet.js +340 -0
- package/bin/wallet/wallet.test.d.ts +1 -0
- package/bin/wallet/wallet.test.js +345 -0
- package/package.json +64 -0
|
@@ -0,0 +1,535 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
13
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
|
+
function step(op) {
|
|
16
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
18
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
19
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
|
+
switch (op[0]) {
|
|
21
|
+
case 0: case 1: t = op; break;
|
|
22
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
+
default:
|
|
26
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
+
if (t[2]) _.ops.pop();
|
|
31
|
+
_.trys.pop(); continue;
|
|
32
|
+
}
|
|
33
|
+
op = body.call(thisArg, _);
|
|
34
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
39
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
40
|
+
};
|
|
41
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
+
var utility_1 = require("../utility");
|
|
43
|
+
var ws_1 = require("./ws");
|
|
44
|
+
var jest_websocket_mock_1 = __importDefault(require("jest-websocket-mock"));
|
|
45
|
+
var proto_1 = require("../../proto");
|
|
46
|
+
var crypto_1 = require("@cosmjs/crypto");
|
|
47
|
+
var endpoints_1 = require("../endpoints");
|
|
48
|
+
describe('WS Provider', function () {
|
|
49
|
+
var wsPort = 8545;
|
|
50
|
+
var wsHost = 'localhost';
|
|
51
|
+
var wsURL = "ws://".concat(wsHost, ":").concat(wsPort);
|
|
52
|
+
var server;
|
|
53
|
+
var wsProvider;
|
|
54
|
+
var mockABCIResponse = function (response) {
|
|
55
|
+
return {
|
|
56
|
+
response: {
|
|
57
|
+
ResponseBase: {
|
|
58
|
+
Log: '',
|
|
59
|
+
Info: '',
|
|
60
|
+
Data: (0, utility_1.stringToBase64)(response),
|
|
61
|
+
Error: null,
|
|
62
|
+
Events: null,
|
|
63
|
+
},
|
|
64
|
+
Key: null,
|
|
65
|
+
Value: null,
|
|
66
|
+
Proof: null,
|
|
67
|
+
Height: '',
|
|
68
|
+
},
|
|
69
|
+
};
|
|
70
|
+
};
|
|
71
|
+
/**
|
|
72
|
+
* Sets up the test response handler (single-response)
|
|
73
|
+
* @param {WebSocketServer} wss the websocket server returning data
|
|
74
|
+
* @param {Type} testData the test data being returned to the client
|
|
75
|
+
*/
|
|
76
|
+
var setHandler = function (testData) { return __awaiter(void 0, void 0, void 0, function () {
|
|
77
|
+
return __generator(this, function (_a) {
|
|
78
|
+
switch (_a.label) {
|
|
79
|
+
case 0:
|
|
80
|
+
server.on('connection', function (socket) {
|
|
81
|
+
socket.on('message', function (data) {
|
|
82
|
+
var request = JSON.parse(data.toString());
|
|
83
|
+
var response = (0, utility_1.newResponse)(testData);
|
|
84
|
+
response.id = request.id;
|
|
85
|
+
socket.send(JSON.stringify(response));
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
return [4 /*yield*/, server.connected];
|
|
89
|
+
case 1:
|
|
90
|
+
_a.sent();
|
|
91
|
+
return [2 /*return*/];
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
}); };
|
|
95
|
+
beforeEach(function () {
|
|
96
|
+
server = new jest_websocket_mock_1.default(wsURL);
|
|
97
|
+
wsProvider = new ws_1.WSProvider(wsURL);
|
|
98
|
+
});
|
|
99
|
+
afterEach(function () {
|
|
100
|
+
wsProvider.closeConnection();
|
|
101
|
+
jest_websocket_mock_1.default.clean();
|
|
102
|
+
});
|
|
103
|
+
test('getNetwork', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
104
|
+
var mockInfo, info;
|
|
105
|
+
return __generator(this, function (_a) {
|
|
106
|
+
switch (_a.label) {
|
|
107
|
+
case 0:
|
|
108
|
+
mockInfo = {
|
|
109
|
+
listening: false,
|
|
110
|
+
listeners: [],
|
|
111
|
+
n_peers: '0',
|
|
112
|
+
peers: [],
|
|
113
|
+
};
|
|
114
|
+
// Set the response
|
|
115
|
+
return [4 /*yield*/, setHandler(mockInfo)];
|
|
116
|
+
case 1:
|
|
117
|
+
// Set the response
|
|
118
|
+
_a.sent();
|
|
119
|
+
return [4 /*yield*/, wsProvider.getNetwork()];
|
|
120
|
+
case 2:
|
|
121
|
+
info = _a.sent();
|
|
122
|
+
expect(info).toEqual(mockInfo);
|
|
123
|
+
return [2 /*return*/];
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
}); });
|
|
127
|
+
var getEmptyStatus = function () {
|
|
128
|
+
return {
|
|
129
|
+
node_info: {
|
|
130
|
+
version_set: [],
|
|
131
|
+
net_address: '',
|
|
132
|
+
network: '',
|
|
133
|
+
software: '',
|
|
134
|
+
version: '',
|
|
135
|
+
channels: '',
|
|
136
|
+
monkier: '',
|
|
137
|
+
other: {
|
|
138
|
+
tx_index: '',
|
|
139
|
+
rpc_address: '',
|
|
140
|
+
},
|
|
141
|
+
},
|
|
142
|
+
sync_info: {
|
|
143
|
+
latest_block_hash: '',
|
|
144
|
+
latest_app_hash: '',
|
|
145
|
+
latest_block_height: '',
|
|
146
|
+
latest_block_time: '',
|
|
147
|
+
catching_up: false,
|
|
148
|
+
},
|
|
149
|
+
validator_info: {
|
|
150
|
+
address: '',
|
|
151
|
+
pub_key: {
|
|
152
|
+
type: '',
|
|
153
|
+
value: '',
|
|
154
|
+
},
|
|
155
|
+
voting_power: '',
|
|
156
|
+
},
|
|
157
|
+
};
|
|
158
|
+
};
|
|
159
|
+
test('getStatus', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
160
|
+
var mockStatus, status;
|
|
161
|
+
return __generator(this, function (_a) {
|
|
162
|
+
switch (_a.label) {
|
|
163
|
+
case 0:
|
|
164
|
+
mockStatus = getEmptyStatus();
|
|
165
|
+
mockStatus.validator_info.address = 'address';
|
|
166
|
+
// Set the response
|
|
167
|
+
return [4 /*yield*/, setHandler(mockStatus)];
|
|
168
|
+
case 1:
|
|
169
|
+
// Set the response
|
|
170
|
+
_a.sent();
|
|
171
|
+
return [4 /*yield*/, wsProvider.getStatus()];
|
|
172
|
+
case 2:
|
|
173
|
+
status = _a.sent();
|
|
174
|
+
expect(status).toEqual(status);
|
|
175
|
+
return [2 /*return*/];
|
|
176
|
+
}
|
|
177
|
+
});
|
|
178
|
+
}); });
|
|
179
|
+
test('getConsensusParams', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
180
|
+
var mockParams, params;
|
|
181
|
+
return __generator(this, function (_a) {
|
|
182
|
+
switch (_a.label) {
|
|
183
|
+
case 0:
|
|
184
|
+
mockParams = {
|
|
185
|
+
block_height: '',
|
|
186
|
+
consensus_params: {
|
|
187
|
+
Block: {
|
|
188
|
+
MaxTxBytes: '',
|
|
189
|
+
MaxDataBytes: '',
|
|
190
|
+
MaxBlockBytes: '',
|
|
191
|
+
MaxGas: '',
|
|
192
|
+
TimeIotaMS: '',
|
|
193
|
+
},
|
|
194
|
+
Validator: {
|
|
195
|
+
PubKeyTypeURLs: [],
|
|
196
|
+
},
|
|
197
|
+
},
|
|
198
|
+
};
|
|
199
|
+
// Set the response
|
|
200
|
+
return [4 /*yield*/, setHandler(mockParams)];
|
|
201
|
+
case 1:
|
|
202
|
+
// Set the response
|
|
203
|
+
_a.sent();
|
|
204
|
+
return [4 /*yield*/, wsProvider.getConsensusParams(1)];
|
|
205
|
+
case 2:
|
|
206
|
+
params = _a.sent();
|
|
207
|
+
expect(params).toEqual(mockParams);
|
|
208
|
+
return [2 /*return*/];
|
|
209
|
+
}
|
|
210
|
+
});
|
|
211
|
+
}); });
|
|
212
|
+
describe('getSequence', function () {
|
|
213
|
+
var validAccount = {
|
|
214
|
+
BaseAccount: {
|
|
215
|
+
address: 'random address',
|
|
216
|
+
coins: '',
|
|
217
|
+
public_key: null,
|
|
218
|
+
account_number: '0',
|
|
219
|
+
sequence: '10',
|
|
220
|
+
},
|
|
221
|
+
};
|
|
222
|
+
test.each([
|
|
223
|
+
[
|
|
224
|
+
JSON.stringify(validAccount),
|
|
225
|
+
parseInt(validAccount.BaseAccount.sequence, 10),
|
|
226
|
+
],
|
|
227
|
+
['null', 0], // account doesn't exist
|
|
228
|
+
])('case %#', function (response, expected) { return __awaiter(void 0, void 0, void 0, function () {
|
|
229
|
+
var mockResponse, sequence;
|
|
230
|
+
return __generator(this, function (_a) {
|
|
231
|
+
switch (_a.label) {
|
|
232
|
+
case 0:
|
|
233
|
+
mockResponse = mockABCIResponse(response);
|
|
234
|
+
// Set the response
|
|
235
|
+
return [4 /*yield*/, setHandler(mockResponse)];
|
|
236
|
+
case 1:
|
|
237
|
+
// Set the response
|
|
238
|
+
_a.sent();
|
|
239
|
+
return [4 /*yield*/, wsProvider.getAccountSequence('address')];
|
|
240
|
+
case 2:
|
|
241
|
+
sequence = _a.sent();
|
|
242
|
+
expect(sequence).toBe(expected);
|
|
243
|
+
return [2 /*return*/];
|
|
244
|
+
}
|
|
245
|
+
});
|
|
246
|
+
}); });
|
|
247
|
+
});
|
|
248
|
+
describe('getAccountNumber', function () {
|
|
249
|
+
var validAccount = {
|
|
250
|
+
BaseAccount: {
|
|
251
|
+
address: 'random address',
|
|
252
|
+
coins: '',
|
|
253
|
+
public_key: null,
|
|
254
|
+
account_number: '10',
|
|
255
|
+
sequence: '0',
|
|
256
|
+
},
|
|
257
|
+
};
|
|
258
|
+
test.each([
|
|
259
|
+
[
|
|
260
|
+
JSON.stringify(validAccount),
|
|
261
|
+
parseInt(validAccount.BaseAccount.account_number, 10),
|
|
262
|
+
],
|
|
263
|
+
['null', 0], // account doesn't exist
|
|
264
|
+
])('case %#', function (response, expected) { return __awaiter(void 0, void 0, void 0, function () {
|
|
265
|
+
var mockResponse, accountNumber, e_1;
|
|
266
|
+
return __generator(this, function (_a) {
|
|
267
|
+
switch (_a.label) {
|
|
268
|
+
case 0:
|
|
269
|
+
mockResponse = mockABCIResponse(response);
|
|
270
|
+
// Set the response
|
|
271
|
+
return [4 /*yield*/, setHandler(mockResponse)];
|
|
272
|
+
case 1:
|
|
273
|
+
// Set the response
|
|
274
|
+
_a.sent();
|
|
275
|
+
_a.label = 2;
|
|
276
|
+
case 2:
|
|
277
|
+
_a.trys.push([2, 4, , 5]);
|
|
278
|
+
return [4 /*yield*/, wsProvider.getAccountNumber('address')];
|
|
279
|
+
case 3:
|
|
280
|
+
accountNumber = _a.sent();
|
|
281
|
+
expect(accountNumber).toBe(expected);
|
|
282
|
+
return [3 /*break*/, 5];
|
|
283
|
+
case 4:
|
|
284
|
+
e_1 = _a.sent();
|
|
285
|
+
expect(e_1.message).toContain('account is not initialized');
|
|
286
|
+
return [3 /*break*/, 5];
|
|
287
|
+
case 5: return [2 /*return*/];
|
|
288
|
+
}
|
|
289
|
+
});
|
|
290
|
+
}); });
|
|
291
|
+
});
|
|
292
|
+
describe('getBalance', function () {
|
|
293
|
+
var denomination = 'atom';
|
|
294
|
+
test.each([
|
|
295
|
+
['"5gnot,100atom"', 100],
|
|
296
|
+
['"5universe"', 0],
|
|
297
|
+
['""', 0], // account doesn't exist
|
|
298
|
+
])('case %#', function (existing, expected) { return __awaiter(void 0, void 0, void 0, function () {
|
|
299
|
+
var mockResponse, balance;
|
|
300
|
+
return __generator(this, function (_a) {
|
|
301
|
+
switch (_a.label) {
|
|
302
|
+
case 0:
|
|
303
|
+
mockResponse = mockABCIResponse(existing);
|
|
304
|
+
// Set the response
|
|
305
|
+
return [4 /*yield*/, setHandler(mockResponse)];
|
|
306
|
+
case 1:
|
|
307
|
+
// Set the response
|
|
308
|
+
_a.sent();
|
|
309
|
+
return [4 /*yield*/, wsProvider.getBalance('address', denomination)];
|
|
310
|
+
case 2:
|
|
311
|
+
balance = _a.sent();
|
|
312
|
+
expect(balance).toBe(expected);
|
|
313
|
+
return [2 /*return*/];
|
|
314
|
+
}
|
|
315
|
+
});
|
|
316
|
+
}); });
|
|
317
|
+
});
|
|
318
|
+
test('getBlockNumber', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
319
|
+
var expectedBlockNumber, mockStatus, blockNumber;
|
|
320
|
+
return __generator(this, function (_a) {
|
|
321
|
+
switch (_a.label) {
|
|
322
|
+
case 0:
|
|
323
|
+
expectedBlockNumber = 10;
|
|
324
|
+
mockStatus = getEmptyStatus();
|
|
325
|
+
mockStatus.sync_info.latest_block_height = "".concat(expectedBlockNumber);
|
|
326
|
+
// Set the response
|
|
327
|
+
return [4 /*yield*/, setHandler(mockStatus)];
|
|
328
|
+
case 1:
|
|
329
|
+
// Set the response
|
|
330
|
+
_a.sent();
|
|
331
|
+
return [4 /*yield*/, wsProvider.getBlockNumber()];
|
|
332
|
+
case 2:
|
|
333
|
+
blockNumber = _a.sent();
|
|
334
|
+
expect(blockNumber).toBe(expectedBlockNumber);
|
|
335
|
+
return [2 /*return*/];
|
|
336
|
+
}
|
|
337
|
+
});
|
|
338
|
+
}); });
|
|
339
|
+
test('sendTransaction', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
340
|
+
var mockResult, hash;
|
|
341
|
+
return __generator(this, function (_a) {
|
|
342
|
+
switch (_a.label) {
|
|
343
|
+
case 0:
|
|
344
|
+
mockResult = {
|
|
345
|
+
error: null,
|
|
346
|
+
data: null,
|
|
347
|
+
Log: '',
|
|
348
|
+
hash: 'hash123',
|
|
349
|
+
};
|
|
350
|
+
// Set the response
|
|
351
|
+
return [4 /*yield*/, setHandler(mockResult)];
|
|
352
|
+
case 1:
|
|
353
|
+
// Set the response
|
|
354
|
+
_a.sent();
|
|
355
|
+
return [4 /*yield*/, wsProvider.sendTransaction('encoded tx')];
|
|
356
|
+
case 2:
|
|
357
|
+
hash = _a.sent();
|
|
358
|
+
expect(hash).toBe(mockResult.hash);
|
|
359
|
+
return [2 /*return*/];
|
|
360
|
+
}
|
|
361
|
+
});
|
|
362
|
+
}); });
|
|
363
|
+
var getEmptyBlockInfo = function () {
|
|
364
|
+
var emptyHeader = {
|
|
365
|
+
version: '',
|
|
366
|
+
chain_id: '',
|
|
367
|
+
height: '',
|
|
368
|
+
time: '',
|
|
369
|
+
num_txs: '',
|
|
370
|
+
total_txs: '',
|
|
371
|
+
app_version: '',
|
|
372
|
+
last_block_id: {
|
|
373
|
+
hash: null,
|
|
374
|
+
parts: {
|
|
375
|
+
total: '',
|
|
376
|
+
hash: null,
|
|
377
|
+
},
|
|
378
|
+
},
|
|
379
|
+
last_commit_hash: '',
|
|
380
|
+
data_hash: '',
|
|
381
|
+
validators_hash: '',
|
|
382
|
+
consensus_hash: '',
|
|
383
|
+
app_hash: '',
|
|
384
|
+
last_results_hash: '',
|
|
385
|
+
proposer_address: '',
|
|
386
|
+
};
|
|
387
|
+
var emptyBlockID = {
|
|
388
|
+
hash: null,
|
|
389
|
+
parts: {
|
|
390
|
+
total: '',
|
|
391
|
+
hash: null,
|
|
392
|
+
},
|
|
393
|
+
};
|
|
394
|
+
return {
|
|
395
|
+
block_meta: {
|
|
396
|
+
block_id: emptyBlockID,
|
|
397
|
+
header: emptyHeader,
|
|
398
|
+
},
|
|
399
|
+
block: {
|
|
400
|
+
header: emptyHeader,
|
|
401
|
+
data: {
|
|
402
|
+
txs: null,
|
|
403
|
+
},
|
|
404
|
+
last_commit: {
|
|
405
|
+
block_id: emptyBlockID,
|
|
406
|
+
precommits: null,
|
|
407
|
+
},
|
|
408
|
+
},
|
|
409
|
+
};
|
|
410
|
+
};
|
|
411
|
+
test('getBlock', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
412
|
+
var mockInfo, result;
|
|
413
|
+
return __generator(this, function (_a) {
|
|
414
|
+
switch (_a.label) {
|
|
415
|
+
case 0:
|
|
416
|
+
mockInfo = getEmptyBlockInfo();
|
|
417
|
+
// Set the response
|
|
418
|
+
return [4 /*yield*/, setHandler(mockInfo)];
|
|
419
|
+
case 1:
|
|
420
|
+
// Set the response
|
|
421
|
+
_a.sent();
|
|
422
|
+
return [4 /*yield*/, wsProvider.getBlock(0)];
|
|
423
|
+
case 2:
|
|
424
|
+
result = _a.sent();
|
|
425
|
+
expect(result).toEqual(mockInfo);
|
|
426
|
+
return [2 /*return*/];
|
|
427
|
+
}
|
|
428
|
+
});
|
|
429
|
+
}); });
|
|
430
|
+
var getEmptyBlockResult = function () {
|
|
431
|
+
var emptyResponseBase = {
|
|
432
|
+
Error: null,
|
|
433
|
+
Data: null,
|
|
434
|
+
Events: null,
|
|
435
|
+
Log: '',
|
|
436
|
+
Info: '',
|
|
437
|
+
};
|
|
438
|
+
var emptyEndBlock = {
|
|
439
|
+
ResponseBase: emptyResponseBase,
|
|
440
|
+
ValidatorUpdates: null,
|
|
441
|
+
ConsensusParams: null,
|
|
442
|
+
Events: null,
|
|
443
|
+
};
|
|
444
|
+
var emptyStartBlock = {
|
|
445
|
+
ResponseBase: emptyResponseBase,
|
|
446
|
+
};
|
|
447
|
+
return {
|
|
448
|
+
height: '',
|
|
449
|
+
results: {
|
|
450
|
+
deliver_tx: null,
|
|
451
|
+
end_block: emptyEndBlock,
|
|
452
|
+
begin_block: emptyStartBlock,
|
|
453
|
+
},
|
|
454
|
+
};
|
|
455
|
+
};
|
|
456
|
+
test('getBlockResult', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
457
|
+
var mockResult, result;
|
|
458
|
+
return __generator(this, function (_a) {
|
|
459
|
+
switch (_a.label) {
|
|
460
|
+
case 0:
|
|
461
|
+
mockResult = getEmptyBlockResult();
|
|
462
|
+
// Set the response
|
|
463
|
+
return [4 /*yield*/, setHandler(mockResult)];
|
|
464
|
+
case 1:
|
|
465
|
+
// Set the response
|
|
466
|
+
_a.sent();
|
|
467
|
+
return [4 /*yield*/, wsProvider.getBlockResult(0)];
|
|
468
|
+
case 2:
|
|
469
|
+
result = _a.sent();
|
|
470
|
+
expect(result).toEqual(mockResult);
|
|
471
|
+
return [2 /*return*/];
|
|
472
|
+
}
|
|
473
|
+
});
|
|
474
|
+
}); });
|
|
475
|
+
test('waitForTransaction', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
476
|
+
var emptyBlock, tx, encodedTx, txHash, filledBlock, latestBlock, startBlock, mockStatus, responseMap, receivedTx;
|
|
477
|
+
return __generator(this, function (_a) {
|
|
478
|
+
switch (_a.label) {
|
|
479
|
+
case 0:
|
|
480
|
+
emptyBlock = getEmptyBlockInfo();
|
|
481
|
+
emptyBlock.block.data = {
|
|
482
|
+
txs: [],
|
|
483
|
+
};
|
|
484
|
+
tx = {
|
|
485
|
+
messages: [],
|
|
486
|
+
signatures: [],
|
|
487
|
+
memo: 'tx memo',
|
|
488
|
+
};
|
|
489
|
+
encodedTx = proto_1.Tx.encode(tx).finish();
|
|
490
|
+
txHash = (0, crypto_1.sha256)(encodedTx);
|
|
491
|
+
filledBlock = getEmptyBlockInfo();
|
|
492
|
+
filledBlock.block.data = {
|
|
493
|
+
txs: [(0, utility_1.uint8ArrayToBase64)(encodedTx)],
|
|
494
|
+
};
|
|
495
|
+
latestBlock = 5;
|
|
496
|
+
startBlock = latestBlock - 2;
|
|
497
|
+
mockStatus = getEmptyStatus();
|
|
498
|
+
mockStatus.sync_info.latest_block_height = "".concat(latestBlock);
|
|
499
|
+
responseMap = new Map([
|
|
500
|
+
[latestBlock, filledBlock],
|
|
501
|
+
[latestBlock - 1, emptyBlock],
|
|
502
|
+
[startBlock, emptyBlock],
|
|
503
|
+
]);
|
|
504
|
+
// Set the response
|
|
505
|
+
server.on('connection', function (socket) {
|
|
506
|
+
socket.on('message', function (data) {
|
|
507
|
+
var request = JSON.parse(data.toString());
|
|
508
|
+
if (request.method == endpoints_1.CommonEndpoint.STATUS) {
|
|
509
|
+
var response_1 = (0, utility_1.newResponse)(mockStatus);
|
|
510
|
+
response_1.id = request.id;
|
|
511
|
+
socket.send(JSON.stringify(response_1));
|
|
512
|
+
return;
|
|
513
|
+
}
|
|
514
|
+
if (!request.params) {
|
|
515
|
+
return;
|
|
516
|
+
}
|
|
517
|
+
var blockNum = +request.params[0];
|
|
518
|
+
var info = responseMap.get(blockNum);
|
|
519
|
+
var response = (0, utility_1.newResponse)(info);
|
|
520
|
+
response.id = request.id;
|
|
521
|
+
socket.send(JSON.stringify(response));
|
|
522
|
+
});
|
|
523
|
+
});
|
|
524
|
+
return [4 /*yield*/, server.connected];
|
|
525
|
+
case 1:
|
|
526
|
+
_a.sent();
|
|
527
|
+
return [4 /*yield*/, wsProvider.waitForTransaction((0, utility_1.uint8ArrayToBase64)(txHash), startBlock)];
|
|
528
|
+
case 2:
|
|
529
|
+
receivedTx = _a.sent();
|
|
530
|
+
expect(receivedTx).toEqual(tx);
|
|
531
|
+
return [2 /*return*/];
|
|
532
|
+
}
|
|
533
|
+
});
|
|
534
|
+
}); });
|
|
535
|
+
});
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./rest/restService"), exports);
|
|
18
|
+
__exportStar(require("./rest/restService.types"), exports);
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
13
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
|
+
function step(op) {
|
|
16
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
18
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
19
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
|
+
switch (op[0]) {
|
|
21
|
+
case 0: case 1: t = op; break;
|
|
22
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
+
default:
|
|
26
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
+
if (t[2]) _.ops.pop();
|
|
31
|
+
_.trys.pop(); continue;
|
|
32
|
+
}
|
|
33
|
+
op = body.call(thisArg, _);
|
|
34
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
39
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
40
|
+
};
|
|
41
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
+
exports.RestService = void 0;
|
|
43
|
+
var axios_1 = __importDefault(require("axios"));
|
|
44
|
+
var RestService = /** @class */ (function () {
|
|
45
|
+
function RestService() {
|
|
46
|
+
}
|
|
47
|
+
RestService.post = function (baseURL, params) {
|
|
48
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
49
|
+
var axiosResponse, _a, result, error;
|
|
50
|
+
return __generator(this, function (_b) {
|
|
51
|
+
switch (_b.label) {
|
|
52
|
+
case 0: return [4 /*yield*/, axios_1.default.post(baseURL, params.request, params.config)];
|
|
53
|
+
case 1:
|
|
54
|
+
axiosResponse = _b.sent();
|
|
55
|
+
_a = axiosResponse.data, result = _a.result, error = _a.error;
|
|
56
|
+
// Check for errors
|
|
57
|
+
if (error) {
|
|
58
|
+
// Error encountered during the POST request
|
|
59
|
+
throw new Error("".concat(error.message, ": ").concat(error.data));
|
|
60
|
+
}
|
|
61
|
+
// Check for the correct result format
|
|
62
|
+
if (!result) {
|
|
63
|
+
throw new Error('invalid result returned');
|
|
64
|
+
}
|
|
65
|
+
return [2 /*return*/, result];
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
};
|
|
70
|
+
return RestService;
|
|
71
|
+
}());
|
|
72
|
+
exports.RestService = RestService;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./key"), exports);
|
|
18
|
+
__exportStar(require("./ledger"), exports);
|
|
19
|
+
__exportStar(require("./types"), exports);
|
|
20
|
+
__exportStar(require("./utility"), exports);
|
|
21
|
+
__exportStar(require("./wallet"), exports);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './key';
|