@bitgo/sdk-coin-cosmos 1.6.2 → 1.6.4
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/test/resources/mantra.d.ts +70 -0
- package/dist/test/resources/mantra.d.ts.map +1 -0
- package/dist/test/resources/mantra.js +80 -0
- package/dist/test/testUtils/generators.d.ts +54 -0
- package/dist/test/testUtils/generators.d.ts.map +1 -0
- package/dist/test/testUtils/generators.js +183 -0
- package/dist/test/testUtils/index.d.ts +8 -0
- package/dist/test/testUtils/index.d.ts.map +1 -0
- package/dist/test/testUtils/index.js +25 -0
- package/dist/test/testUtils/types.d.ts +203 -0
- package/dist/test/testUtils/types.d.ts.map +1 -0
- package/dist/test/testUtils/types.js +7 -0
- package/dist/test/testUtils/utils.d.ts +43 -0
- package/dist/test/testUtils/utils.d.ts.map +1 -0
- package/dist/test/testUtils/utils.js +122 -0
- package/dist/test/unit/cosmosSharedCoin.d.ts +2 -0
- package/dist/test/unit/cosmosSharedCoin.d.ts.map +1 -0
- package/dist/test/unit/cosmosSharedCoin.js +300 -0
- package/dist/test/unit/keyPair.d.ts +2 -0
- package/dist/test/unit/keyPair.d.ts.map +1 -0
- package/dist/test/unit/keyPair.js +73 -0
- package/dist/test/unit/register.d.ts +2 -0
- package/dist/test/unit/register.d.ts.map +1 -0
- package/dist/test/unit/register.js +48 -0
- package/dist/test/unit/transactionBuilder/transactionBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/transactionBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/transactionBuilder.js +46 -0
- package/dist/test/unit/transactionBuilder/transferBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/transferBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/transferBuilder.js +186 -0
- package/dist/test/unit/utils.d.ts +2 -0
- package/dist/test/unit/utils.d.ts.map +1 -0
- package/dist/test/unit/utils.js +82 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +11 -8
- package/.eslintignore +0 -5
- package/.mocharc.yml +0 -8
- package/CHANGELOG.md +0 -87
|
@@ -0,0 +1,300 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const should_1 = __importDefault(require("should"));
|
|
7
|
+
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
8
|
+
const sinon_1 = __importDefault(require("sinon"));
|
|
9
|
+
const encoding_1 = require("@cosmjs/encoding");
|
|
10
|
+
const sdk_test_1 = require("@bitgo/sdk-test");
|
|
11
|
+
const sdk_api_1 = require("@bitgo/sdk-api");
|
|
12
|
+
const statics_1 = require("@bitgo/statics");
|
|
13
|
+
const src_1 = require("../../src");
|
|
14
|
+
const testUtils_1 = require("../testUtils");
|
|
15
|
+
describe('Cosmos Shared Coin', function () {
|
|
16
|
+
const availableCoins = (0, testUtils_1.getAvailableTestCoins)();
|
|
17
|
+
// TODO: COIN-5039 - Running tests for each coin in parallel to improve test performance
|
|
18
|
+
// Loop through each available coin and run tests
|
|
19
|
+
availableCoins.forEach((coinName) => {
|
|
20
|
+
describe(`${coinName.toUpperCase()} Cosmos Shared Coin`, function () {
|
|
21
|
+
let bitgo;
|
|
22
|
+
let cosmosCoin;
|
|
23
|
+
let utils;
|
|
24
|
+
const testData = (0, testUtils_1.getTestData)(coinName);
|
|
25
|
+
const testTx = testData.testSendTx;
|
|
26
|
+
const testTxWithMemo = testData.testTxWithMemo;
|
|
27
|
+
const coin = statics_1.coins.get(testData.testnetCoin);
|
|
28
|
+
const network = coin.network;
|
|
29
|
+
before(function () {
|
|
30
|
+
bitgo = sdk_test_1.TestBitGo.decorate(sdk_api_1.BitGoAPI, { env: 'test' });
|
|
31
|
+
bitgo.safeRegister(testData.testnetCoin, src_1.CosmosSharedCoin.createInstance);
|
|
32
|
+
bitgo.safeRegister(testData.mainnetCoin, src_1.CosmosSharedCoin.createInstance);
|
|
33
|
+
bitgo.initializeTestVars();
|
|
34
|
+
cosmosCoin = bitgo.coin(testData.testnetCoin);
|
|
35
|
+
utils = new src_1.Utils(network);
|
|
36
|
+
});
|
|
37
|
+
it('should instantiate the coin', function () {
|
|
38
|
+
should_1.default.exist(cosmosCoin);
|
|
39
|
+
cosmosCoin.should.be.an.instanceof(src_1.CosmosSharedCoin);
|
|
40
|
+
});
|
|
41
|
+
it('should return the right info', function () {
|
|
42
|
+
const testCoin = bitgo.coin(testData.testnetCoin);
|
|
43
|
+
const mainnetCoin = bitgo.coin(testData.mainnetCoin);
|
|
44
|
+
testCoin.getChain().should.equal(testData.testnetCoin);
|
|
45
|
+
testCoin.getFamily().should.equal(testData.family);
|
|
46
|
+
testCoin.getFullName().should.equal(testData.testnetName);
|
|
47
|
+
testCoin.getBaseFactor().should.equal(Math.pow(10, testData.decimalPlaces));
|
|
48
|
+
mainnetCoin.getChain().should.equal(testData.mainnetCoin);
|
|
49
|
+
mainnetCoin.getFamily().should.equal(testData.family);
|
|
50
|
+
mainnetCoin.getFullName().should.equal(testData.mainnetName);
|
|
51
|
+
mainnetCoin.getBaseFactor().should.equal(Math.pow(10, testData.decimalPlaces));
|
|
52
|
+
});
|
|
53
|
+
it('should throw if instantiated without a staticsCoin', function () {
|
|
54
|
+
const tempBitgo = sdk_test_1.TestBitGo.decorate(sdk_api_1.BitGoAPI, { env: 'test' });
|
|
55
|
+
(0, should_1.default)(() => src_1.CosmosSharedCoin.createInstance(tempBitgo)).throwError('missing required constructor parameter staticsCoin');
|
|
56
|
+
});
|
|
57
|
+
it('should throw if instantiated with invalid network configuration', function () {
|
|
58
|
+
const tempBitgo = sdk_test_1.TestBitGo.decorate(sdk_api_1.BitGoAPI, { env: 'test' });
|
|
59
|
+
const invalidCoin = Object.assign({}, coin, { network: {} });
|
|
60
|
+
(0, should_1.default)(() => src_1.CosmosSharedCoin.createInstance(tempBitgo, invalidCoin)).throwError('Invalid network configuration: missing required Cosmos network parameters');
|
|
61
|
+
});
|
|
62
|
+
describe('getBaseFactor', function () {
|
|
63
|
+
it('should return the correct base factor', function () {
|
|
64
|
+
const baseFactor = cosmosCoin.getBaseFactor();
|
|
65
|
+
should_1.default.equal(baseFactor, Math.pow(10, testData.decimalPlaces));
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
describe('getBuilder', function () {
|
|
69
|
+
it('should return a transaction builder', function () {
|
|
70
|
+
const builder = cosmosCoin.getBuilder();
|
|
71
|
+
should_1.default.exist(builder);
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
describe('getDenomination', function () {
|
|
75
|
+
it('should return the correct denomination', function () {
|
|
76
|
+
should_1.default.equal(cosmosCoin.getDenomination(), network.denom);
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
describe('getGasAmountDetails', function () {
|
|
80
|
+
it('should return the correct gas amount details', function () {
|
|
81
|
+
const gasAmountDetails = cosmosCoin.getGasAmountDetails();
|
|
82
|
+
should_1.default.deepEqual(gasAmountDetails, {
|
|
83
|
+
gasAmount: network.gasAmount,
|
|
84
|
+
gasLimit: network.gasLimit,
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
describe('getNetwork', function () {
|
|
89
|
+
it('should return the correct network', function () {
|
|
90
|
+
const returnedNetwork = cosmosCoin.getNetwork();
|
|
91
|
+
should_1.default.deepEqual(returnedNetwork, network);
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
describe('getKeyPair', function () {
|
|
95
|
+
it('should return a key pair', function () {
|
|
96
|
+
const keyPair = cosmosCoin.getKeyPair((0, encoding_1.toHex)((0, encoding_1.fromBase64)(testData.pubKey)));
|
|
97
|
+
should_1.default.exist(keyPair);
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
describe('getAddressFromPublicKey', function () {
|
|
101
|
+
it('should return the correct address', function () {
|
|
102
|
+
const address = cosmosCoin.getAddressFromPublicKey((0, encoding_1.toHex)((0, encoding_1.fromBase64)(testData.pubKey)));
|
|
103
|
+
should_1.default.equal(address, testData.senderAddress);
|
|
104
|
+
});
|
|
105
|
+
});
|
|
106
|
+
describe('Address Validation', () => {
|
|
107
|
+
it('should get address details without memoId', function () {
|
|
108
|
+
const addressDetails = cosmosCoin.getAddressDetails(testData.addresses.noMemoIdAddress);
|
|
109
|
+
addressDetails.address.should.equal(testData.addresses.noMemoIdAddress);
|
|
110
|
+
should_1.default.not.exist(addressDetails.memoId);
|
|
111
|
+
});
|
|
112
|
+
it('should get address details with memoId', function () {
|
|
113
|
+
const addressDetails = cosmosCoin.getAddressDetails(testData.addresses.validMemoIdAddress);
|
|
114
|
+
addressDetails.address.should.equal(testData.addresses.validMemoIdAddress.split('?')[0]);
|
|
115
|
+
if (addressDetails.memoId) {
|
|
116
|
+
addressDetails.memoId.should.equal('2');
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
should_1.default.fail('Expected memoId to be defined', null);
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
it('should throw on invalid memo id address', () => {
|
|
123
|
+
(() => {
|
|
124
|
+
cosmosCoin.getAddressDetails(testData.addresses.invalidMemoIdAddress);
|
|
125
|
+
}).should.throw();
|
|
126
|
+
});
|
|
127
|
+
it('should throw on multiple memo id address', () => {
|
|
128
|
+
(() => {
|
|
129
|
+
cosmosCoin.getAddressDetails(testData.addresses.multipleMemoIdAddress);
|
|
130
|
+
}).should.throw();
|
|
131
|
+
});
|
|
132
|
+
it('should validate wallet receive address', async function () {
|
|
133
|
+
const receiveAddress = {
|
|
134
|
+
address: `${testData.addresses.address1}?memoId=7`,
|
|
135
|
+
coinSpecific: {
|
|
136
|
+
rootAddress: testData.addresses.address1,
|
|
137
|
+
memoID: '7',
|
|
138
|
+
},
|
|
139
|
+
};
|
|
140
|
+
// as VerifyTransactionOptions
|
|
141
|
+
const isValid = await cosmosCoin.isWalletAddress(receiveAddress);
|
|
142
|
+
isValid.should.equal(true);
|
|
143
|
+
});
|
|
144
|
+
it('should validate account addresses correctly', () => {
|
|
145
|
+
should_1.default.equal(utils.isValidAddress(testData.addresses.address1), true);
|
|
146
|
+
should_1.default.equal(utils.isValidAddress(testData.addresses.address2), true);
|
|
147
|
+
should_1.default.equal(utils.isValidAddress('dfjk35y'), false);
|
|
148
|
+
should_1.default.equal(utils.isValidAddress(undefined), false);
|
|
149
|
+
should_1.default.equal(utils.isValidAddress(''), false);
|
|
150
|
+
should_1.default.equal(utils.isValidAddress(testData.addresses.validMemoIdAddress), true);
|
|
151
|
+
should_1.default.equal(utils.isValidAddress(testData.addresses.invalidMemoIdAddress), false);
|
|
152
|
+
should_1.default.equal(utils.isValidAddress(testData.addresses.multipleMemoIdAddress), false);
|
|
153
|
+
});
|
|
154
|
+
it('should validate validator addresses correctly', () => {
|
|
155
|
+
should_1.default.equal(utils.isValidValidatorAddress(testData.addresses.validatorAddress1), true);
|
|
156
|
+
should_1.default.equal(utils.isValidValidatorAddress(testData.addresses.validatorAddress2), true);
|
|
157
|
+
should_1.default.equal(utils.isValidValidatorAddress('dfjk35y'), false);
|
|
158
|
+
should_1.default.equal(utils.isValidValidatorAddress(undefined), false);
|
|
159
|
+
should_1.default.equal(utils.isValidValidatorAddress(''), false);
|
|
160
|
+
});
|
|
161
|
+
});
|
|
162
|
+
describe('Verify transaction: ', () => {
|
|
163
|
+
it('should succeed to verify transaction', async function () {
|
|
164
|
+
const txPrebuild = {
|
|
165
|
+
txHex: testTx.signedTxBase64,
|
|
166
|
+
txInfo: {},
|
|
167
|
+
};
|
|
168
|
+
const txParams = {
|
|
169
|
+
recipients: [
|
|
170
|
+
{
|
|
171
|
+
address: testTx.recipient,
|
|
172
|
+
amount: testTx.sendAmount,
|
|
173
|
+
},
|
|
174
|
+
],
|
|
175
|
+
};
|
|
176
|
+
const verification = {};
|
|
177
|
+
const isTransactionVerified = await cosmosCoin.verifyTransaction({
|
|
178
|
+
txParams,
|
|
179
|
+
txPrebuild,
|
|
180
|
+
verification,
|
|
181
|
+
});
|
|
182
|
+
isTransactionVerified.should.equal(true);
|
|
183
|
+
});
|
|
184
|
+
it('should succeed to verify sendMany transaction', async function () {
|
|
185
|
+
const txPrebuild = {
|
|
186
|
+
txHex: testTx.signedTxBase64,
|
|
187
|
+
txInfo: {},
|
|
188
|
+
};
|
|
189
|
+
const txParams = {
|
|
190
|
+
recipients: [
|
|
191
|
+
{
|
|
192
|
+
address: testTx.recipient,
|
|
193
|
+
amount: testTx.sendAmount,
|
|
194
|
+
},
|
|
195
|
+
],
|
|
196
|
+
};
|
|
197
|
+
const verification = {};
|
|
198
|
+
const isTransactionVerified = await cosmosCoin.verifyTransaction({
|
|
199
|
+
txParams,
|
|
200
|
+
txPrebuild,
|
|
201
|
+
verification,
|
|
202
|
+
});
|
|
203
|
+
isTransactionVerified.should.equal(true);
|
|
204
|
+
});
|
|
205
|
+
it('should fail to verify transaction with invalid param', async function () {
|
|
206
|
+
const txPrebuild = {};
|
|
207
|
+
const txParams = { recipients: undefined };
|
|
208
|
+
await cosmosCoin
|
|
209
|
+
.verifyTransaction({ txParams, txPrebuild })
|
|
210
|
+
.should.be.rejectedWith('missing required tx prebuild property txHex');
|
|
211
|
+
});
|
|
212
|
+
});
|
|
213
|
+
describe('Explain Transaction: ', () => {
|
|
214
|
+
it('should explain a transfer transaction', async function () {
|
|
215
|
+
const explainedTransaction = await cosmosCoin.explainTransaction({
|
|
216
|
+
txHex: testTx.signedTxBase64,
|
|
217
|
+
});
|
|
218
|
+
explainedTransaction.should.deepEqual({
|
|
219
|
+
displayOrder: ['id', 'outputs', 'outputAmount', 'changeOutputs', 'changeAmount', 'fee', 'type'],
|
|
220
|
+
id: testTx.hash,
|
|
221
|
+
outputs: [
|
|
222
|
+
{
|
|
223
|
+
address: testTx.recipient,
|
|
224
|
+
amount: testTx.sendAmount,
|
|
225
|
+
},
|
|
226
|
+
],
|
|
227
|
+
outputAmount: testTx.sendAmount,
|
|
228
|
+
changeOutputs: [],
|
|
229
|
+
changeAmount: '0',
|
|
230
|
+
fee: { fee: testTx.feeAmount },
|
|
231
|
+
type: 0,
|
|
232
|
+
});
|
|
233
|
+
});
|
|
234
|
+
it('should explain a transfer transaction with memo', async function () {
|
|
235
|
+
const explainedTransaction = await cosmosCoin.explainTransaction({
|
|
236
|
+
txHex: testTxWithMemo.signedTxBase64,
|
|
237
|
+
});
|
|
238
|
+
explainedTransaction.should.deepEqual({
|
|
239
|
+
displayOrder: ['id', 'outputs', 'outputAmount', 'changeOutputs', 'changeAmount', 'fee', 'type'],
|
|
240
|
+
id: testTxWithMemo.hash,
|
|
241
|
+
outputs: [
|
|
242
|
+
{
|
|
243
|
+
address: testTxWithMemo.recipient,
|
|
244
|
+
amount: testTxWithMemo.sendAmount,
|
|
245
|
+
memo: testTxWithMemo.memo,
|
|
246
|
+
},
|
|
247
|
+
],
|
|
248
|
+
outputAmount: testTxWithMemo.sendAmount,
|
|
249
|
+
changeOutputs: [],
|
|
250
|
+
changeAmount: '0',
|
|
251
|
+
fee: { fee: testTxWithMemo.feeAmount },
|
|
252
|
+
type: 0,
|
|
253
|
+
});
|
|
254
|
+
});
|
|
255
|
+
it('should fail to explain transaction with missing params', async function () {
|
|
256
|
+
try {
|
|
257
|
+
await cosmosCoin.explainTransaction({ txHex: '' });
|
|
258
|
+
}
|
|
259
|
+
catch (error) {
|
|
260
|
+
should_1.default.equal(error.message, 'missing required txHex parameter');
|
|
261
|
+
}
|
|
262
|
+
});
|
|
263
|
+
it('should fail to explain transaction with invalid params', async function () {
|
|
264
|
+
try {
|
|
265
|
+
await cosmosCoin.explainTransaction({ txHex: 'randomString' });
|
|
266
|
+
}
|
|
267
|
+
catch (error) {
|
|
268
|
+
should_1.default.equal(error.message.startsWith('Invalid transaction:'), true);
|
|
269
|
+
}
|
|
270
|
+
});
|
|
271
|
+
});
|
|
272
|
+
describe('Parse Transactions: ', () => {
|
|
273
|
+
const transferInputsResponse = {
|
|
274
|
+
address: testTx.recipient,
|
|
275
|
+
amount: new bignumber_js_1.default(testTx.sendAmount).plus(testTx.feeAmount).toFixed(),
|
|
276
|
+
};
|
|
277
|
+
const transferOutputsResponse = {
|
|
278
|
+
address: testTx.recipient,
|
|
279
|
+
amount: testTx.sendAmount,
|
|
280
|
+
};
|
|
281
|
+
it('should parse a transfer transaction', async function () {
|
|
282
|
+
const parsedTransaction = await cosmosCoin.parseTransaction({ txHex: testTx.signedTxBase64 });
|
|
283
|
+
parsedTransaction.should.deepEqual({
|
|
284
|
+
inputs: [transferInputsResponse],
|
|
285
|
+
outputs: [transferOutputsResponse],
|
|
286
|
+
});
|
|
287
|
+
});
|
|
288
|
+
it('should fail to parse a transfer transaction when explainTransaction response is undefined', async function () {
|
|
289
|
+
const stub = sinon_1.default.stub(src_1.CosmosSharedCoin.prototype, 'explainTransaction');
|
|
290
|
+
stub.resolves(undefined);
|
|
291
|
+
await cosmosCoin
|
|
292
|
+
.parseTransaction({ txHex: testTx.signedTxBase64 })
|
|
293
|
+
.should.be.rejectedWith('Invalid transaction');
|
|
294
|
+
stub.restore();
|
|
295
|
+
});
|
|
296
|
+
});
|
|
297
|
+
});
|
|
298
|
+
});
|
|
299
|
+
});
|
|
300
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29zbW9zU2hhcmVkQ29pbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rlc3QvdW5pdC9jb3Ntb3NTaGFyZWRDb2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLGdFQUFxQztBQUNyQyxrREFBMEI7QUFDMUIsK0NBQXFEO0FBRXJELDhDQUEwRDtBQUMxRCw0Q0FBMEM7QUFDMUMsNENBQXNEO0FBQ3RELG1DQUFvRDtBQUNwRCw0Q0FBa0U7QUFFbEUsUUFBUSxDQUFDLG9CQUFvQixFQUFFO0lBQzdCLE1BQU0sY0FBYyxHQUFHLElBQUEsaUNBQXFCLEdBQUUsQ0FBQztJQUMvQyx5RkFBeUY7SUFDekYsaURBQWlEO0lBQ2pELGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtRQUNsQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUMsV0FBVyxFQUFFLHFCQUFxQixFQUFFO1lBQ3ZELElBQUksS0FBbUIsQ0FBQztZQUN4QixJQUFJLFVBQTRCLENBQUM7WUFDakMsSUFBSSxLQUFZLENBQUM7WUFDakIsTUFBTSxRQUFRLEdBQUcsSUFBQSx1QkFBVyxFQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3ZDLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxVQUFrRCxDQUFDO1lBQzNFLE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQyxjQUEwRCxDQUFDO1lBQzNGLE1BQU0sSUFBSSxHQUFHLGVBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzdDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUF3QixDQUFDO1lBRTlDLE1BQU0sQ0FBQztnQkFDTCxLQUFLLEdBQUcsb0JBQVMsQ0FBQyxRQUFRLENBQUMsa0JBQVEsRUFBRSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO2dCQUN0RCxLQUFLLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxXQUFX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SCxFQUFFLENBQUMsMkZBQTJGLEVBQUUsS0FBSztvQkFDbkcsTUFBTSxJQUFJLEdBQUcsZUFBSyxDQUFDLElBQUksQ0FBQyxzQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztvQkFDMUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztvQkFDekIsTUFBTSxVQUFVO3lCQUNiLGdCQUFnQixDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQzt5QkFDbEQsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMscUJBQXFCLENBQUMsQ0FBQztvQkFDakQsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNqQixDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHNob3VsZCBmcm9tICdzaG91bGQnO1xuaW1wb3J0IEJpZ051bWJlciBmcm9tICdiaWdudW1iZXIuanMnO1xuaW1wb3J0IHNpbm9uIGZyb20gJ3Npbm9uJztcbmltcG9ydCB7IGZyb21CYXNlNjQsIHRvSGV4IH0gZnJvbSAnQGNvc21qcy9lbmNvZGluZyc7XG5pbXBvcnQgeyBWZXJpZnlBZGRyZXNzT3B0aW9ucywgVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IFRlc3RCaXRHbywgVGVzdEJpdEdvQVBJIH0gZnJvbSAnQGJpdGdvL3Nkay10ZXN0JztcbmltcG9ydCB7IEJpdEdvQVBJIH0gZnJvbSAnQGJpdGdvL3Nkay1hcGknO1xuaW1wb3J0IHsgY29pbnMsIENvc21vc05ldHdvcmsgfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5pbXBvcnQgeyBDb3Ntb3NTaGFyZWRDb2luLCBVdGlscyB9IGZyb20gJy4uLy4uL3NyYyc7XG5pbXBvcnQgeyBnZXRBdmFpbGFibGVUZXN0Q29pbnMsIGdldFRlc3REYXRhIH0gZnJvbSAnLi4vdGVzdFV0aWxzJztcblxuZGVzY3JpYmUoJ0Nvc21vcyBTaGFyZWQgQ29pbicsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgYXZhaWxhYmxlQ29pbnMgPSBnZXRBdmFpbGFibGVUZXN0Q29pbnMoKTtcbiAgLy8gVE9ETzogQ09JTi01MDM5IC0gIFJ1bm5pbmcgdGVzdHMgZm9yIGVhY2ggY29pbiBpbiBwYXJhbGxlbCB0byBpbXByb3ZlIHRlc3QgcGVyZm9ybWFuY2VcbiAgLy8gTG9vcCB0aHJvdWdoIGVhY2ggYXZhaWxhYmxlIGNvaW4gYW5kIHJ1biB0ZXN0c1xuICBhdmFpbGFibGVDb2lucy5mb3JFYWNoKChjb2luTmFtZSkgPT4ge1xuICAgIGRlc2NyaWJlKGAke2NvaW5OYW1lLnRvVXBwZXJDYXNlKCl9IENvc21vcyBTaGFyZWQgQ29pbmAsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGxldCBiaXRnbzogVGVzdEJpdEdvQVBJO1xuICAgICAgbGV0IGNvc21vc0NvaW46IENvc21vc1NoYXJlZENvaW47XG4gICAgICBsZXQgdXRpbHM6IFV0aWxzO1xuICAgICAgY29uc3QgdGVzdERhdGEgPSBnZXRUZXN0RGF0YShjb2luTmFtZSk7XG4gICAgICBjb25zdCB0ZXN0VHggPSB0ZXN0RGF0YS50ZXN0U2VuZFR4IGFzIFJlcXVpcmVkPHR5cGVvZiB0ZXN0RGF0YS50ZXN0U2VuZFR4PjtcbiAgICAgIGNvbnN0IHRlc3RUeFdpdGhNZW1vID0gdGVzdERhdGEudGVzdFR4V2l0aE1lbW8gYXMgUmVxdWlyZWQ8dHlwZW9mIHRlc3REYXRhLnRlc3RUeFdpdGhNZW1vPjtcbiAgICAgIGNvbnN0IGNvaW4gPSBjb2lucy5nZXQodGVzdERhdGEudGVzdG5ldENvaW4pO1xuICAgICAgY29uc3QgbmV0d29yayA9IGNvaW4ubmV0d29yayBhcyBDb3Ntb3NOZXR3b3JrO1xuXG4gICAgICBiZWZvcmUoZnVuY3Rpb24gKCkge1xuICAgICAgICBiaXRnbyA9IFRlc3RCaXRHby5kZWNvcmF0ZShCaXRHb0FQSSwgeyBlbnY6ICd0ZXN0JyB9KTtcbiAgICAgICAgYml0Z28uc2FmZVJlZ2lzdGVyKHRlc3REYXRhLnRlc3RuZXRDb2luLCBDb3Ntb3NTaGFyZWRDb2luLmNyZWF0ZUluc3RhbmNlKTtcbiAgICAgICAgYml0Z28uc2FmZVJlZ2lzdGVyKHRlc3REYXRhLm1haW5uZXRDb2luLCBDb3Ntb3NTaGFyZWRDb2luLmNyZWF0ZUluc3RhbmNlKTtcbiAgICAgICAgYml0Z28uaW5pdGlhbGl6ZVRlc3RWYXJzKCk7XG4gICAgICAgIGNvc21vc0NvaW4gPSBiaXRnby5jb2luKHRlc3REYXRhLnRlc3RuZXRDb2luKSBhcyBDb3Ntb3NTaGFyZWRDb2luO1xuICAgICAgICB1dGlscyA9IG5ldyBVdGlscyhuZXR3b3JrKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGluc3RhbnRpYXRlIHRoZSBjb2luJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBzaG91bGQuZXhpc3QoY29zbW9zQ29pbik7XG4gICAgICAgIGNvc21vc0NvaW4uc2hvdWxkLmJlLmFuLmluc3RhbmNlb2YoQ29zbW9zU2hhcmVkQ29pbik7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIHJpZ2h0IGluZm8nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHRlc3RDb2luID0gYml0Z28uY29pbih0ZXN0RGF0YS50ZXN0bmV0Q29pbik7XG4gICAgICAgIGNvbnN0IG1haW5uZXRDb2luID0gYml0Z28uY29pbih0ZXN0RGF0YS5tYWlubmV0Q29pbik7XG4gICAgICAgIHRlc3RDb2luLmdldENoYWluKCkuc2hvdWxkLmVxdWFsKHRlc3REYXRhLnRlc3RuZXRDb2luKTtcbiAgICAgICAgdGVzdENvaW4uZ2V0RmFtaWx5KCkuc2hvdWxkLmVxdWFsKHRlc3REYXRhLmZhbWlseSk7XG4gICAgICAgIHRlc3RDb2luLmdldEZ1bGxOYW1lKCkuc2hvdWxkLmVxdWFsKHRlc3REYXRhLnRlc3RuZXROYW1lKTtcbiAgICAgICAgdGVzdENvaW4uZ2V0QmFzZUZhY3RvcigpLnNob3VsZC5lcXVhbChNYXRoLnBvdygxMCwgdGVzdERhdGEuZGVjaW1hbFBsYWNlcykpO1xuXG4gICAgICAgIG1haW5uZXRDb2luLmdldENoYWluKCkuc2hvdWxkLmVxdWFsKHRlc3REYXRhLm1haW5uZXRDb2luKTtcbiAgICAgICAgbWFpbm5ldENvaW4uZ2V0RmFtaWx5KCkuc2hvdWxkLmVxdWFsKHRlc3REYXRhLmZhbWlseSk7XG4gICAgICAgIG1haW5uZXRDb2luLmdldEZ1bGxOYW1lKCkuc2hvdWxkLmVxdWFsKHRlc3REYXRhLm1haW5uZXROYW1lKTtcbiAgICAgICAgbWFpbm5ldENvaW4uZ2V0QmFzZUZhY3RvcigpLnNob3VsZC5lcXVhbChNYXRoLnBvdygxMCwgdGVzdERhdGEuZGVjaW1hbFBsYWNlcykpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgdGhyb3cgaWYgaW5zdGFudGlhdGVkIHdpdGhvdXQgYSBzdGF0aWNzQ29pbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgdGVtcEJpdGdvID0gVGVzdEJpdEdvLmRlY29yYXRlKEJpdEdvQVBJLCB7IGVudjogJ3Rlc3QnIH0pO1xuICAgICAgICBzaG91bGQoKCkgPT4gQ29zbW9zU2hhcmVkQ29pbi5jcmVhdGVJbnN0YW5jZSh0ZW1wQml0Z28pKS50aHJvd0Vycm9yKFxuICAgICAgICAgICdtaXNzaW5nIHJlcXVpcmVkIGNvbnN0cnVjdG9yIHBhcmFtZXRlciBzdGF0aWNzQ29pbidcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHRocm93IGlmIGluc3RhbnRpYXRlZCB3aXRoIGludmFsaWQgbmV0d29yayBjb25maWd1cmF0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCB0ZW1wQml0Z28gPSBUZXN0Qml0R28uZGVjb3JhdGUoQml0R29BUEksIHsgZW52OiAndGVzdCcgfSk7XG4gICAgICAgIGNvbnN0IGludmFsaWRDb2luID0gT2JqZWN0LmFzc2lnbih7fSwgY29pbiwgeyBuZXR3b3JrOiB7fSB9KTtcbiAgICAgICAgc2hvdWxkKCgpID0+IENvc21vc1NoYXJlZENvaW4uY3JlYXRlSW5zdGFuY2UodGVtcEJpdGdvLCBpbnZhbGlkQ29pbikpLnRocm93RXJyb3IoXG4gICAgICAgICAgJ0ludmFsaWQgbmV0d29yayBjb25maWd1cmF0aW9uOiBtaXNzaW5nIHJlcXVpcmVkIENvc21vcyBuZXR3b3JrIHBhcmFtZXRlcnMnXG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgZGVzY3JpYmUoJ2dldEJhc2VGYWN0b3InLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBjb3JyZWN0IGJhc2UgZmFjdG9yJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNvbnN0IGJhc2VGYWN0b3IgPSBjb3Ntb3NDb2luLmdldEJhc2VGYWN0b3IoKTtcbiAgICAgICAgICBzaG91bGQuZXF1YWwoYmFzZUZhY3RvciwgTWF0aC5wb3coMTAsIHRlc3REYXRhLmRlY2ltYWxQbGFjZXMpKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgZGVzY3JpYmUoJ2dldEJ1aWxkZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgdHJhbnNhY3Rpb24gYnVpbGRlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjb25zdCBidWlsZGVyID0gY29zbW9zQ29pbi5nZXRCdWlsZGVyKCk7XG4gICAgICAgICAgc2hvdWxkLmV4aXN0KGJ1aWxkZXIpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBkZXNjcmliZSgnZ2V0RGVub21pbmF0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgY29ycmVjdCBkZW5vbWluYXRpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgc2hvdWxkLmVxdWFsKGNvc21vc0NvaW4uZ2V0RGVub21pbmF0aW9uKCksIG5ldHdvcmsuZGVub20pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBkZXNjcmliZSgnZ2V0R2FzQW1vdW50RGV0YWlscycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIGNvcnJlY3QgZ2FzIGFtb3VudCBkZXRhaWxzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNvbnN0IGdhc0Ftb3VudERldGFpbHMgPSBjb3Ntb3NDb2luLmdldEdhc0Ftb3VudERldGFpbHMoKTtcbiAgICAgICAgICBzaG91bGQuZGVlcEVxdWFsKGdhc0Ftb3VudERldGFpbHMsIHtcbiAgICAgICAgICAgIGdhc0Ftb3VudDogbmV0d29yay5nYXNBbW91bnQsXG4gICAgICAgICAgICBnYXNMaW1pdDogbmV0d29yay5nYXNMaW1pdCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgZGVzY3JpYmUoJ2dldE5ldHdvcmsnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBjb3JyZWN0IG5ldHdvcmsnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc3QgcmV0dXJuZWROZXR3b3JrID0gY29zbW9zQ29pbi5nZXROZXR3b3JrKCk7XG4gICAgICAgICAgc2hvdWxkLmRlZXBFcXVhbChyZXR1cm5lZE5ldHdvcmssIG5ldHdvcmspO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBkZXNjcmliZSgnZ2V0S2V5UGFpcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBrZXkgcGFpcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjb25zdCBrZXlQYWlyID0gY29zbW9zQ29pbi5nZXRLZXlQYWlyKHRvSGV4KGZyb21CYXNlNjQodGVzdERhdGEucHViS2V5KSkpO1xuICAgICAgICAgIHNob3VsZC5leGlzdChrZXlQYWlyKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgZGVzY3JpYmUoJ2dldEFkZHJlc3NGcm9tUHVibGljS2V5JywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgY29ycmVjdCBhZGRyZXNzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNvbnN0IGFkZHJlc3MgPSBjb3Ntb3NDb2luLmdldEFkZHJlc3NGcm9tUHVibGljS2V5KHRvSGV4KGZyb21CYXNlNjQodGVzdERhdGEucHViS2V5KSkpO1xuICAgICAgICAgIHNob3VsZC5lcXVhbChhZGRyZXNzLCB0ZXN0RGF0YS5zZW5kZXJBZGRyZXNzKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgZGVzY3JpYmUoJ0FkZHJlc3MgVmFsaWRhdGlvbicsICgpID0+IHtcbiAgICAgICAgaXQoJ3Nob3VsZCBnZXQgYWRkcmVzcyBkZXRhaWxzIHdpdGhvdXQgbWVtb0lkJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNvbnN0IGFkZHJlc3NEZXRhaWxzID0gY29zbW9zQ29pbi5nZXRBZGRyZXNzRGV0YWlscyh0ZXN0RGF0YS5hZGRyZXNzZXMubm9NZW1vSWRBZGRyZXNzKTtcbiAgICAgICAgICBhZGRyZXNzRGV0YWlscy5hZGRyZXNzLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5hZGRyZXNzZXMubm9NZW1vSWRBZGRyZXNzKTtcbiAgICAgICAgICBzaG91bGQubm90LmV4aXN0KGFkZHJlc3NEZXRhaWxzLm1lbW9JZCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgZ2V0IGFkZHJlc3MgZGV0YWlscyB3aXRoIG1lbW9JZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjb25zdCBhZGRyZXNzRGV0YWlscyA9IGNvc21vc0NvaW4uZ2V0QWRkcmVzc0RldGFpbHModGVzdERhdGEuYWRkcmVzc2VzLnZhbGlkTWVtb0lkQWRkcmVzcyk7XG4gICAgICAgICAgYWRkcmVzc0RldGFpbHMuYWRkcmVzcy5zaG91bGQuZXF1YWwodGVzdERhdGEuYWRkcmVzc2VzLnZhbGlkTWVtb0lkQWRkcmVzcy5zcGxpdCgnPycpWzBdKTtcbiAgICAgICAgICBpZiAoYWRkcmVzc0RldGFpbHMubWVtb0lkKSB7XG4gICAgICAgICAgICBhZGRyZXNzRGV0YWlscy5tZW1vSWQuc2hvdWxkLmVxdWFsKCcyJyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNob3VsZC5mYWlsKCdFeHBlY3RlZCBtZW1vSWQgdG8gYmUgZGVmaW5lZCcsIG51bGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBvbiBpbnZhbGlkIG1lbW8gaWQgYWRkcmVzcycsICgpID0+IHtcbiAgICAgICAgICAoKCkgPT4ge1xuICAgICAgICAgICAgY29zbW9zQ29pbi5nZXRBZGRyZXNzRGV0YWlscyh0ZXN0RGF0YS5hZGRyZXNzZXMuaW52YWxpZE1lbW9JZEFkZHJlc3MpO1xuICAgICAgICAgIH0pLnNob3VsZC50aHJvdygpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIHRocm93IG9uIG11bHRpcGxlIG1lbW8gaWQgYWRkcmVzcycsICgpID0+IHtcbiAgICAgICAgICAoKCkgPT4ge1xuICAgICAgICAgICAgY29zbW9zQ29pbi5nZXRBZGRyZXNzRGV0YWlscyh0ZXN0RGF0YS5hZGRyZXNzZXMubXVsdGlwbGVNZW1vSWRBZGRyZXNzKTtcbiAgICAgICAgICB9KS5zaG91bGQudGhyb3coKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSB3YWxsZXQgcmVjZWl2ZSBhZGRyZXNzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNvbnN0IHJlY2VpdmVBZGRyZXNzID0ge1xuICAgICAgICAgICAgYWRkcmVzczogYCR7dGVzdERhdGEuYWRkcmVzc2VzLmFkZHJlc3MxfT9tZW1vSWQ9N2AsXG4gICAgICAgICAgICBjb2luU3BlY2lmaWM6IHtcbiAgICAgICAgICAgICAgcm9vdEFkZHJlc3M6IHRlc3REYXRhLmFkZHJlc3Nlcy5hZGRyZXNzMSxcbiAgICAgICAgICAgICAgbWVtb0lEOiAnNycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH07XG4gICAgICAgICAgLy8gYXMgVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zXG4gICAgICAgICAgY29uc3QgaXNWYWxpZCA9IGF3YWl0IGNvc21vc0NvaW4uaXNXYWxsZXRBZGRyZXNzKHJlY2VpdmVBZGRyZXNzIGFzIFZlcmlmeUFkZHJlc3NPcHRpb25zKTtcbiAgICAgICAgICBpc1ZhbGlkLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSBhY2NvdW50IGFkZHJlc3NlcyBjb3JyZWN0bHknLCAoKSA9PiB7XG4gICAgICAgICAgc2hvdWxkLmVxdWFsKHV0aWxzLmlzVmFsaWRBZGRyZXNzKHRlc3REYXRhLmFkZHJlc3Nlcy5hZGRyZXNzMSksIHRydWUpO1xuICAgICAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkQWRkcmVzcyh0ZXN0RGF0YS5hZGRyZXNzZXMuYWRkcmVzczIpLCB0cnVlKTtcbiAgICAgICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZEFkZHJlc3MoJ2RmamszNXknKSwgZmFsc2UpO1xuICAgICAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkQWRkcmVzcyh1bmRlZmluZWQgYXMgdW5rbm93biBhcyBzdHJpbmcpLCBmYWxzZSk7XG4gICAgICAgICAgc2hvdWxkLmVxdWFsKHV0aWxzLmlzVmFsaWRBZGRyZXNzKCcnKSwgZmFsc2UpO1xuICAgICAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkQWRkcmVzcyh0ZXN0RGF0YS5hZGRyZXNzZXMudmFsaWRNZW1vSWRBZGRyZXNzKSwgdHJ1ZSk7XG4gICAgICAgICAgc2hvdWxkLmVxdWFsKHV0aWxzLmlzVmFsaWRBZGRyZXNzKHRlc3REYXRhLmFkZHJlc3Nlcy5pbnZhbGlkTWVtb0lkQWRkcmVzcyksIGZhbHNlKTtcbiAgICAgICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZEFkZHJlc3ModGVzdERhdGEuYWRkcmVzc2VzLm11bHRpcGxlTWVtb0lkQWRkcmVzcyksIGZhbHNlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSB2YWxpZGF0b3IgYWRkcmVzc2VzIGNvcnJlY3RseScsICgpID0+IHtcbiAgICAgICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZFZhbGlkYXRvckFkZHJlc3ModGVzdERhdGEuYWRkcmVzc2VzLnZhbGlkYXRvckFkZHJlc3MxKSwgdHJ1ZSk7XG4gICAgICAgICAgc2hvdWxkLmVxdWFsKHV0aWxzLmlzVmFsaWRWYWxpZGF0b3JBZGRyZXNzKHRlc3REYXRhLmFkZHJlc3Nlcy52YWxpZGF0b3JBZGRyZXNzMiksIHRydWUpO1xuICAgICAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkVmFsaWRhdG9yQWRkcmVzcygnZGZqazM1eScpLCBmYWxzZSk7XG4gICAgICAgICAgc2hvdWxkLmVxdWFsKHV0aWxzLmlzVmFsaWRWYWxpZGF0b3JBZGRyZXNzKHVuZGVmaW5lZCBhcyB1bmtub3duIGFzIHN0cmluZyksIGZhbHNlKTtcbiAgICAgICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZFZhbGlkYXRvckFkZHJlc3MoJycpLCBmYWxzZSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGRlc2NyaWJlKCdWZXJpZnkgdHJhbnNhY3Rpb246ICcsICgpID0+IHtcbiAgICAgICAgaXQoJ3Nob3VsZCBzdWNjZWVkIHRvIHZlcmlmeSB0cmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjb25zdCB0eFByZWJ1aWxkID0ge1xuICAgICAgICAgICAgdHhIZXg6IHRlc3RUeC5zaWduZWRUeEJhc2U2NCxcbiAgICAgICAgICAgIHR4SW5mbzoge30sXG4gICAgICAgICAgfTtcbiAgICAgICAgICBjb25zdCB0eFBhcmFtcyA9IHtcbiAgICAgICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGFkZHJlc3M6IHRlc3RUeC5yZWNpcGllbnQsXG4gICAgICAgICAgICAgICAgYW1vdW50OiB0ZXN0VHguc2VuZEFtb3VudCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfTtcbiAgICAgICAgICBjb25zdCB2ZXJpZmljYXRpb24gPSB7fTtcbiAgICAgICAgICBjb25zdCBpc1RyYW5zYWN0aW9uVmVyaWZpZWQgPSBhd2FpdCBjb3Ntb3NDb2luLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICAgIHR4UGFyYW1zLFxuICAgICAgICAgICAgdHhQcmVidWlsZCxcbiAgICAgICAgICAgIHZlcmlmaWNhdGlvbixcbiAgICAgICAgICB9IGFzIFZlcmlmeVRyYW5zYWN0aW9uT3B0aW9ucyk7XG4gICAgICAgICAgaXNUcmFuc2FjdGlvblZlcmlmaWVkLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBzdWNjZWVkIHRvIHZlcmlmeSBzZW5kTWFueSB0cmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjb25zdCB0eFByZWJ1aWxkID0ge1xuICAgICAgICAgICAgdHhIZXg6IHRlc3RUeC5zaWduZWRUeEJhc2U2NCxcbiAgICAgICAgICAgIHR4SW5mbzoge30sXG4gICAgICAgICAgfTtcbiAgICAgICAgICBjb25zdCB0eFBhcmFtcyA9IHtcbiAgICAgICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGFkZHJlc3M6IHRlc3RUeC5yZWNpcGllbnQsXG4gICAgICAgICAgICAgICAgYW1vdW50OiB0ZXN0VHguc2VuZEFtb3VudCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfTtcbiAgICAgICAgICBjb25zdCB2ZXJpZmljYXRpb24gPSB7fTtcbiAgICAgICAgICBjb25zdCBpc1RyYW5zYWN0aW9uVmVyaWZpZWQgPSBhd2FpdCBjb3Ntb3NDb2luLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICAgIHR4UGFyYW1zLFxuICAgICAgICAgICAgdHhQcmVidWlsZCxcbiAgICAgICAgICAgIHZlcmlmaWNhdGlvbixcbiAgICAgICAgICB9IGFzIFZlcmlmeVRyYW5zYWN0aW9uT3B0aW9ucyk7XG4gICAgICAgICAgaXNUcmFuc2FjdGlvblZlcmlmaWVkLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBmYWlsIHRvIHZlcmlmeSB0cmFuc2FjdGlvbiB3aXRoIGludmFsaWQgcGFyYW0nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc3QgdHhQcmVidWlsZCA9IHt9O1xuICAgICAgICAgIGNvbnN0IHR4UGFyYW1zID0geyByZWNpcGllbnRzOiB1bmRlZmluZWQgfTtcbiAgICAgICAgICBhd2FpdCBjb3Ntb3NDb2luXG4gICAgICAgICAgICAudmVyaWZ5VHJhbnNhY3Rpb24oeyB0eFBhcmFtcywgdHhQcmVidWlsZCB9IGFzIFZlcmlmeVRyYW5zYWN0aW9uT3B0aW9ucylcbiAgICAgICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdtaXNzaW5nIHJlcXVpcmVkIHR4IHByZWJ1aWxkIHByb3BlcnR5IHR4SGV4Jyk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGRlc2NyaWJlKCdFeHBsYWluIFRyYW5zYWN0aW9uOiAnLCAoKSA9PiB7XG4gICAgICAgIGl0KCdzaG91bGQgZXhwbGFpbiBhIHRyYW5zZmVyIHRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNvbnN0IGV4cGxhaW5lZFRyYW5zYWN0aW9uID0gYXdhaXQgY29zbW9zQ29pbi5leHBsYWluVHJhbnNhY3Rpb24oe1xuICAgICAgICAgICAgdHhIZXg6IHRlc3RUeC5zaWduZWRUeEJhc2U2NCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBleHBsYWluZWRUcmFuc2FjdGlvbi5zaG91bGQuZGVlcEVxdWFsKHtcbiAgICAgICAgICAgIGRpc3BsYXlPcmRlcjogWydpZCcsICdvdXRwdXRzJywgJ291dHB1dEFtb3VudCcsICdjaGFuZ2VPdXRwdXRzJywgJ2NoYW5nZUFtb3VudCcsICdmZWUnLCAndHlwZSddLFxuICAgICAgICAgICAgaWQ6IHRlc3RUeC5oYXNoLFxuICAgICAgICAgICAgb3V0cHV0czogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYWRkcmVzczogdGVzdFR4LnJlY2lwaWVudCxcbiAgICAgICAgICAgICAgICBhbW91bnQ6IHRlc3RUeC5zZW5kQW1vdW50LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIG91dHB1dEFtb3VudDogdGVzdFR4LnNlbmRBbW91bnQsXG4gICAgICAgICAgICBjaGFuZ2VPdXRwdXRzOiBbXSxcbiAgICAgICAgICAgIGNoYW5nZUFtb3VudDogJzAnLFxuICAgICAgICAgICAgZmVlOiB7IGZlZTogdGVzdFR4LmZlZUFtb3VudCB9LFxuICAgICAgICAgICAgdHlwZTogMCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBleHBsYWluIGEgdHJhbnNmZXIgdHJhbnNhY3Rpb24gd2l0aCBtZW1vJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNvbnN0IGV4cGxhaW5lZFRyYW5zYWN0aW9uID0gYXdhaXQgY29zbW9zQ29pbi5leHBsYWluVHJhbnNhY3Rpb24oe1xuICAgICAgICAgICAgdHhIZXg6IHRlc3RUeFdpdGhNZW1vLnNpZ25lZFR4QmFzZTY0LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGV4cGxhaW5lZFRyYW5zYWN0aW9uLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICAgICAgZGlzcGxheU9yZGVyOiBbJ2lkJywgJ291dHB1dHMnLCAnb3V0cHV0QW1vdW50JywgJ2NoYW5nZU91dHB1dHMnLCAnY2hhbmdlQW1vdW50JywgJ2ZlZScsICd0eXBlJ10sXG4gICAgICAgICAgICBpZDogdGVzdFR4V2l0aE1lbW8uaGFzaCxcbiAgICAgICAgICAgIG91dHB1dHM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGFkZHJlc3M6IHRlc3RUeFdpdGhNZW1vLnJlY2lwaWVudCxcbiAgICAgICAgICAgICAgICBhbW91bnQ6IHRlc3RUeFdpdGhNZW1vLnNlbmRBbW91bnQsXG4gICAgICAgICAgICAgICAgbWVtbzogdGVzdFR4V2l0aE1lbW8ubWVtbyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBvdXRwdXRBbW91bnQ6IHRlc3RUeFdpdGhNZW1vLnNlbmRBbW91bnQsXG4gICAgICAgICAgICBjaGFuZ2VPdXRwdXRzOiBbXSxcbiAgICAgICAgICAgIGNoYW5nZUFtb3VudDogJzAnLFxuICAgICAgICAgICAgZmVlOiB7IGZlZTogdGVzdFR4V2l0aE1lbW8uZmVlQW1vdW50IH0sXG4gICAgICAgICAgICB0eXBlOiAwLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGZhaWwgdG8gZXhwbGFpbiB0cmFuc2FjdGlvbiB3aXRoIG1pc3NpbmcgcGFyYW1zJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCBjb3Ntb3NDb2luLmV4cGxhaW5UcmFuc2FjdGlvbih7IHR4SGV4OiAnJyB9KTtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgc2hvdWxkLmVxdWFsKGVycm9yLm1lc3NhZ2UsICdtaXNzaW5nIHJlcXVpcmVkIHR4SGV4IHBhcmFtZXRlcicpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBmYWlsIHRvIGV4cGxhaW4gdHJhbnNhY3Rpb24gd2l0aCBpbnZhbGlkIHBhcmFtcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgY29zbW9zQ29pbi5leHBsYWluVHJhbnNhY3Rpb24oeyB0eEhleDogJ3JhbmRvbVN0cmluZycgfSk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHNob3VsZC5lcXVhbChlcnJvci5tZXNzYWdlLnN0YXJ0c1dpdGgoJ0ludmFsaWQgdHJhbnNhY3Rpb246JyksIHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgZGVzY3JpYmUoJ1BhcnNlIFRyYW5zYWN0aW9uczogJywgKCkgPT4ge1xuICAgICAgICBjb25zdCB0cmFuc2ZlcklucHV0c1Jlc3BvbnNlID0ge1xuICAgICAgICAgIGFkZHJlc3M6IHRlc3RUeC5yZWNpcGllbnQsXG4gICAgICAgICAgYW1vdW50OiBuZXcgQmlnTnVtYmVyKHRlc3RUeC5zZW5kQW1vdW50KS5wbHVzKHRlc3RUeC5mZWVBbW91bnQpLnRvRml4ZWQoKSxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCB0cmFuc2Zlck91dHB1dHNSZXNwb25zZSA9IHtcbiAgICAgICAgICBhZGRyZXNzOiB0ZXN0VHgucmVjaXBpZW50LFxuICAgICAgICAgIGFtb3VudDogdGVzdFR4LnNlbmRBbW91bnQsXG4gICAgICAgIH07XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBwYXJzZSBhIHRyYW5zZmVyIHRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNvbnN0IHBhcnNlZFRyYW5zYWN0aW9uID0gYXdhaXQgY29zbW9zQ29pbi5wYXJzZVRyYW5zYWN0aW9uKHsgdHhIZXg6IHRlc3RUeC5zaWduZWRUeEJhc2U2NCB9KTtcblxuICAgICAgICAgIHBhcnNlZFRyYW5zYWN0aW9uLnNob3VsZC5kZWVwRXF1YWwoe1xuICAgICAgICAgICAgaW5wdXRzOiBbdHJhbnNmZXJJbnB1dHNSZXNwb25zZV0sXG4gICAgICAgICAgICBvdXRwdXRzOiBbdHJhbnNmZXJPdXRwdXRzUmVzcG9uc2VdLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGZhaWwgdG8gcGFyc2UgYSB0cmFuc2ZlciB0cmFuc2FjdGlvbiB3aGVuIGV4cGxhaW5UcmFuc2FjdGlvbiByZXNwb25zZSBpcyB1bmRlZmluZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc3Qgc3R1YiA9IHNpbm9uLnN0dWIoQ29zbW9zU2hhcmVkQ29pbi5wcm90b3R5cGUsICdleHBsYWluVHJhbnNhY3Rpb24nKTtcbiAgICAgICAgICBzdHViLnJlc29sdmVzKHVuZGVmaW5lZCk7XG4gICAgICAgICAgYXdhaXQgY29zbW9zQ29pblxuICAgICAgICAgICAgLnBhcnNlVHJhbnNhY3Rpb24oeyB0eEhleDogdGVzdFR4LnNpZ25lZFR4QmFzZTY0IH0pXG4gICAgICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnSW52YWxpZCB0cmFuc2FjdGlvbicpO1xuICAgICAgICAgIHN0dWIucmVzdG9yZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keyPair.d.ts","sourceRoot":"","sources":["../../../test/unit/keyPair.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const assert_1 = __importDefault(require("assert"));
|
|
7
|
+
const should_1 = __importDefault(require("should"));
|
|
8
|
+
const encoding_1 = require("@cosmjs/encoding");
|
|
9
|
+
const statics_1 = require("@bitgo/statics");
|
|
10
|
+
const src_1 = require("../../src");
|
|
11
|
+
const testUtils_1 = require("../testUtils");
|
|
12
|
+
describe('Cosmos KeyPair', function () {
|
|
13
|
+
const availableCoins = (0, testUtils_1.getAvailableTestCoins)();
|
|
14
|
+
// TODO: COIN-5039 - Running tests for each coin in parallel to improve test performance
|
|
15
|
+
// Loop through each available coin and run tests
|
|
16
|
+
availableCoins.forEach((coinName) => {
|
|
17
|
+
describe(`${coinName} KeyPair`, function () {
|
|
18
|
+
const testData = (0, testUtils_1.getTestData)(coinName);
|
|
19
|
+
const coin = statics_1.coins.get(testData.testnetCoin);
|
|
20
|
+
describe('should create a valid KeyPair', () => {
|
|
21
|
+
it('from an empty value', () => {
|
|
22
|
+
const keyPairObj = new src_1.KeyPair();
|
|
23
|
+
const keys = keyPairObj.getKeys();
|
|
24
|
+
should_1.default.exists(keys.prv);
|
|
25
|
+
should_1.default.exists(keys.pub);
|
|
26
|
+
should_1.default.equal(keys.prv?.length, 64);
|
|
27
|
+
should_1.default.equal(keys.pub.length, 66);
|
|
28
|
+
const extendedKeys = keyPairObj.getExtendedKeys();
|
|
29
|
+
should_1.default.exists(extendedKeys.xprv);
|
|
30
|
+
should_1.default.exists(extendedKeys.xpub);
|
|
31
|
+
});
|
|
32
|
+
it('from a private key', () => {
|
|
33
|
+
const privateKey = testData.privateKey;
|
|
34
|
+
const keyPairObj = new src_1.KeyPair({ prv: (0, encoding_1.toHex)((0, encoding_1.fromBase64)(privateKey)) }, coin);
|
|
35
|
+
const keys = keyPairObj.getKeys();
|
|
36
|
+
should_1.default.exists(keys.prv);
|
|
37
|
+
should_1.default.exists(keys.pub);
|
|
38
|
+
should_1.default.equal(keys.prv, (0, encoding_1.toHex)((0, encoding_1.fromBase64)(testData.privateKey)));
|
|
39
|
+
should_1.default.equal(keys.pub, (0, encoding_1.toHex)((0, encoding_1.fromBase64)(testData.pubKey)));
|
|
40
|
+
should_1.default.equal(keyPairObj.getAddress(), testData.senderAddress);
|
|
41
|
+
assert_1.default.throws(() => keyPairObj.getExtendedKeys());
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
describe('should fail to create a KeyPair', () => {
|
|
45
|
+
it('from an invalid privateKey', () => {
|
|
46
|
+
assert_1.default.throws(() => new src_1.KeyPair({ prv: '' }, coin), (e) => e.message === 'Unsupported private key');
|
|
47
|
+
});
|
|
48
|
+
it('from an invalid publicKey', () => {
|
|
49
|
+
assert_1.default.throws(() => new src_1.KeyPair({ pub: '' }, coin), (e) => e.message.startsWith('Unsupported public key'));
|
|
50
|
+
});
|
|
51
|
+
it('from an undefined seed', () => {
|
|
52
|
+
const undefinedBuffer = undefined;
|
|
53
|
+
assert_1.default.throws(() => new src_1.KeyPair({ seed: undefinedBuffer }, coin), (e) => e.message.startsWith('Invalid key pair options'));
|
|
54
|
+
});
|
|
55
|
+
it('from an undefined private key', () => {
|
|
56
|
+
const undefinedStr = undefined;
|
|
57
|
+
assert_1.default.throws(() => new src_1.KeyPair({ prv: undefinedStr }, coin), (e) => e.message.startsWith('Invalid key pair options'));
|
|
58
|
+
});
|
|
59
|
+
it('from an undefined public key', () => {
|
|
60
|
+
const undefinedStr = undefined;
|
|
61
|
+
assert_1.default.throws(() => new src_1.KeyPair({ pub: undefinedStr }, coin), (e) => e.message.startsWith('Invalid key pair options'));
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
describe('get unique address ', () => {
|
|
65
|
+
it('from a private key', () => {
|
|
66
|
+
const keyPair = new src_1.KeyPair({ prv: (0, encoding_1.toHex)((0, encoding_1.fromBase64)(testData.privateKey)) }, coin);
|
|
67
|
+
should_1.default.equal(keyPair.getAddress(), testData.senderAddress);
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5UGFpci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rlc3QvdW5pdC9rZXlQYWlyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLG9EQUE0QjtBQUM1QiwrQ0FBcUQ7QUFDckQsNENBQXVDO0FBQ3ZDLG1DQUFvQztBQUNwQyw0Q0FBa0U7QUFFbEUsUUFBUSxDQUFDLGdCQUFnQixFQUFFO0lBQ3pCLE1BQU0sY0FBYyxHQUFHLElBQUEsaUNBQXFCLEdBQUUsQ0FBQztJQUMvQyx5RkFBeUY7SUFDekYsaURBQWlEO0lBQ2pELGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtRQUNsQyxRQUFRLENBQUMsR0FBRyxRQUFRLFVBQVUsRUFBRTtZQUM5QixNQUFNLFFBQVEsR0FBRyxJQUFBLHVCQUFXLEVBQUMsUUFBUSxDQUFDLENBQUM7WUFDdkMsTUFBTSxJQUFJLEdBQUcsZUFBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7WUFFN0MsUUFBUSxDQUFDLCtCQUErQixFQUFFLEdBQUcsRUFBRTtnQkFDN0MsRUFBRSxDQUFDLHFCQUFxQixFQUFFLEdBQUcsRUFBRTtvQkFDN0IsTUFBTSxVQUFVLEdBQUcsSUFBSSxhQUFPLEVBQUUsQ0FBQztvQkFDakMsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUNsQyxnQkFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ3hCLGdCQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDeEIsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7b0JBQ25DLGdCQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEVB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Q0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCBzaG91bGQgZnJvbSAnc2hvdWxkJztcbmltcG9ydCB7IGZyb21CYXNlNjQsIHRvSGV4IH0gZnJvbSAnQGNvc21qcy9lbmNvZGluZyc7XG5pbXBvcnQgeyBjb2lucyB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCB7IEtleVBhaXIgfSBmcm9tICcuLi8uLi9zcmMnO1xuaW1wb3J0IHsgZ2V0QXZhaWxhYmxlVGVzdENvaW5zLCBnZXRUZXN0RGF0YSB9IGZyb20gJy4uL3Rlc3RVdGlscyc7XG5cbmRlc2NyaWJlKCdDb3Ntb3MgS2V5UGFpcicsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgYXZhaWxhYmxlQ29pbnMgPSBnZXRBdmFpbGFibGVUZXN0Q29pbnMoKTtcbiAgLy8gVE9ETzogQ09JTi01MDM5IC0gIFJ1bm5pbmcgdGVzdHMgZm9yIGVhY2ggY29pbiBpbiBwYXJhbGxlbCB0byBpbXByb3ZlIHRlc3QgcGVyZm9ybWFuY2VcbiAgLy8gTG9vcCB0aHJvdWdoIGVhY2ggYXZhaWxhYmxlIGNvaW4gYW5kIHJ1biB0ZXN0c1xuICBhdmFpbGFibGVDb2lucy5mb3JFYWNoKChjb2luTmFtZSkgPT4ge1xuICAgIGRlc2NyaWJlKGAke2NvaW5OYW1lfSBLZXlQYWlyYCwgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdGVzdERhdGEgPSBnZXRUZXN0RGF0YShjb2luTmFtZSk7XG4gICAgICBjb25zdCBjb2luID0gY29pbnMuZ2V0KHRlc3REYXRhLnRlc3RuZXRDb2luKTtcblxuICAgICAgZGVzY3JpYmUoJ3Nob3VsZCBjcmVhdGUgYSB2YWxpZCBLZXlQYWlyJywgKCkgPT4ge1xuICAgICAgICBpdCgnZnJvbSBhbiBlbXB0eSB2YWx1ZScsICgpID0+IHtcbiAgICAgICAgICBjb25zdCBrZXlQYWlyT2JqID0gbmV3IEtleVBhaXIoKTtcbiAgICAgICAgICBjb25zdCBrZXlzID0ga2V5UGFpck9iai5nZXRLZXlzKCk7XG4gICAgICAgICAgc2hvdWxkLmV4aXN0cyhrZXlzLnBydik7XG4gICAgICAgICAgc2hvdWxkLmV4aXN0cyhrZXlzLnB1Yik7XG4gICAgICAgICAgc2hvdWxkLmVxdWFsKGtleXMucHJ2Py5sZW5ndGgsIDY0KTtcbiAgICAgICAgICBzaG91bGQuZXF1YWwoa2V5cy5wdWIubGVuZ3RoLCA2Nik7XG5cbiAgICAgICAgICBjb25zdCBleHRlbmRlZEtleXMgPSBrZXlQYWlyT2JqLmdldEV4dGVuZGVkS2V5cygpO1xuICAgICAgICAgIHNob3VsZC5leGlzdHMoZXh0ZW5kZWRLZXlzLnhwcnYpO1xuICAgICAgICAgIHNob3VsZC5leGlzdHMoZXh0ZW5kZWRLZXlzLnhwdWIpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnZnJvbSBhIHByaXZhdGUga2V5JywgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHByaXZhdGVLZXkgPSB0ZXN0RGF0YS5wcml2YXRlS2V5O1xuICAgICAgICAgIGNvbnN0IGtleVBhaXJPYmogPSBuZXcgS2V5UGFpcih7IHBydjogdG9IZXgoZnJvbUJhc2U2NChwcml2YXRlS2V5KSkgfSwgY29pbik7XG4gICAgICAgICAgY29uc3Qga2V5cyA9IGtleVBhaXJPYmouZ2V0S2V5cygpO1xuICAgICAgICAgIHNob3VsZC5leGlzdHMoa2V5cy5wcnYpO1xuICAgICAgICAgIHNob3VsZC5leGlzdHMoa2V5cy5wdWIpO1xuICAgICAgICAgIHNob3VsZC5lcXVhbChrZXlzLnBydiwgdG9IZXgoZnJvbUJhc2U2NCh0ZXN0RGF0YS5wcml2YXRlS2V5KSkpO1xuICAgICAgICAgIHNob3VsZC5lcXVhbChrZXlzLnB1YiwgdG9IZXgoZnJvbUJhc2U2NCh0ZXN0RGF0YS5wdWJLZXkpKSk7XG4gICAgICAgICAgc2hvdWxkLmVxdWFsKGtleVBhaXJPYmouZ2V0QWRkcmVzcygpLCB0ZXN0RGF0YS5zZW5kZXJBZGRyZXNzKTtcblxuICAgICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4ga2V5UGFpck9iai5nZXRFeHRlbmRlZEtleXMoKSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGRlc2NyaWJlKCdzaG91bGQgZmFpbCB0byBjcmVhdGUgYSBLZXlQYWlyJywgKCkgPT4ge1xuICAgICAgICBpdCgnZnJvbSBhbiBpbnZhbGlkIHByaXZhdGVLZXknLCAoKSA9PiB7XG4gICAgICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgICAgICgpID0+IG5ldyBLZXlQYWlyKHsgcHJ2OiAnJyB9LCBjb2luKSxcbiAgICAgICAgICAgIChlOiBhbnkpID0+IGUubWVzc2FnZSA9PT0gJ1Vuc3VwcG9ydGVkIHByaXZhdGUga2V5J1xuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdmcm9tIGFuIGludmFsaWQgcHVibGljS2V5JywgKCkgPT4ge1xuICAgICAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICAgICAoKSA9PiBuZXcgS2V5UGFpcih7IHB1YjogJycgfSwgY29pbiksXG4gICAgICAgICAgICAoZTogYW55KSA9PiBlLm1lc3NhZ2Uuc3RhcnRzV2l0aCgnVW5zdXBwb3J0ZWQgcHVibGljIGtleScpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ2Zyb20gYW4gdW5kZWZpbmVkIHNlZWQnLCAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgdW5kZWZpbmVkQnVmZmVyID0gdW5kZWZpbmVkIGFzIHVua25vd24gYXMgQnVmZmVyO1xuICAgICAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICAgICAoKSA9PiBuZXcgS2V5UGFpcih7IHNlZWQ6IHVuZGVmaW5lZEJ1ZmZlciB9LCBjb2luKSxcbiAgICAgICAgICAgIChlOiBhbnkpID0+IGUubWVzc2FnZS5zdGFydHNXaXRoKCdJbnZhbGlkIGtleSBwYWlyIG9wdGlvbnMnKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdmcm9tIGFuIHVuZGVmaW5lZCBwcml2YXRlIGtleScsICgpID0+IHtcbiAgICAgICAgICBjb25zdCB1bmRlZmluZWRTdHI6IHN0cmluZyA9IHVuZGVmaW5lZCBhcyB1bmtub3duIGFzIHN0cmluZztcbiAgICAgICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAgICAgKCkgPT4gbmV3IEtleVBhaXIoeyBwcnY6IHVuZGVmaW5lZFN0ciB9LCBjb2luKSxcbiAgICAgICAgICAgIChlOiBhbnkpID0+IGUubWVzc2FnZS5zdGFydHNXaXRoKCdJbnZhbGlkIGtleSBwYWlyIG9wdGlvbnMnKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdmcm9tIGFuIHVuZGVmaW5lZCBwdWJsaWMga2V5JywgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHVuZGVmaW5lZFN0cjogc3RyaW5nID0gdW5kZWZpbmVkIGFzIHVua25vd24gYXMgc3RyaW5nO1xuICAgICAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICAgICAoKSA9PiBuZXcgS2V5UGFpcih7IHB1YjogdW5kZWZpbmVkU3RyIH0sIGNvaW4pLFxuICAgICAgICAgICAgKGU6IGFueSkgPT4gZS5tZXNzYWdlLnN0YXJ0c1dpdGgoJ0ludmFsaWQga2V5IHBhaXIgb3B0aW9ucycpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgZGVzY3JpYmUoJ2dldCB1bmlxdWUgYWRkcmVzcyAnLCAoKSA9PiB7XG4gICAgICAgIGl0KCdmcm9tIGEgcHJpdmF0ZSBrZXknLCAoKSA9PiB7XG4gICAgICAgICAgY29uc3Qga2V5UGFpciA9IG5ldyBLZXlQYWlyKHsgcHJ2OiB0b0hleChmcm9tQmFzZTY0KHRlc3REYXRhLnByaXZhdGVLZXkpKSB9LCBjb2luKTtcbiAgICAgICAgICBzaG91bGQuZXF1YWwoa2V5UGFpci5nZXRBZGRyZXNzKCksIHRlc3REYXRhLnNlbmRlckFkZHJlc3MpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../../test/unit/register.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const sinon_1 = __importDefault(require("sinon"));
|
|
7
|
+
const should_1 = __importDefault(require("should"));
|
|
8
|
+
const sdk_api_1 = require("@bitgo/sdk-api");
|
|
9
|
+
const statics_1 = require("@bitgo/statics");
|
|
10
|
+
const src_1 = require("../../src");
|
|
11
|
+
describe('Cosmos Register', function () {
|
|
12
|
+
let bitgo;
|
|
13
|
+
let registerSpy;
|
|
14
|
+
let cosmosCoins;
|
|
15
|
+
before(function () {
|
|
16
|
+
// Get all coins with the SHARED_COSMOS_SDK feature
|
|
17
|
+
cosmosCoins = new Set(statics_1.coins.filter((coin) => coin.features.includes(statics_1.CoinFeature.SHARED_COSMOS_SDK)).map((coin) => coin.name));
|
|
18
|
+
});
|
|
19
|
+
beforeEach(function () {
|
|
20
|
+
bitgo = new sdk_api_1.BitGoAPI({ env: 'test' });
|
|
21
|
+
registerSpy = sinon_1.default.spy(bitgo, 'register');
|
|
22
|
+
});
|
|
23
|
+
afterEach(function () {
|
|
24
|
+
registerSpy.restore();
|
|
25
|
+
});
|
|
26
|
+
it('should register all cosmos coins', function () {
|
|
27
|
+
(0, src_1.register)(bitgo);
|
|
28
|
+
// Verify that register was called for each cosmos coin
|
|
29
|
+
should_1.default.equal(registerSpy.callCount, cosmosCoins.size);
|
|
30
|
+
// Verify that each call was for a cosmos coin with the correct factory
|
|
31
|
+
for (let i = 0; i < registerSpy.callCount; i++) {
|
|
32
|
+
const call = registerSpy.getCall(i);
|
|
33
|
+
const coinName = call.args[0];
|
|
34
|
+
const factory = call.args[1];
|
|
35
|
+
should_1.default.ok(cosmosCoins.has(coinName), `${coinName} should be a cosmos coin`);
|
|
36
|
+
should_1.default.equal(factory, src_1.CosmosSharedCoin.createInstance);
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
it('should register each coin only once', function () {
|
|
40
|
+
(0, src_1.register)(bitgo);
|
|
41
|
+
// Get the list of registered coins
|
|
42
|
+
const registeredCoins = registerSpy.getCalls().map((call) => call.args[0]);
|
|
43
|
+
// Check for duplicates
|
|
44
|
+
const uniqueCoins = new Set(registeredCoins);
|
|
45
|
+
should_1.default.equal(uniqueCoins.size, registeredCoins.length, 'There should be no duplicate coin registrations');
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvcmVnaXN0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxrREFBMEI7QUFDMUIsb0RBQTRCO0FBQzVCLDRDQUEwQztBQUMxQyw0Q0FBb0Q7QUFDcEQsbUNBQXVEO0FBRXZELFFBQVEsQ0FBQyxpQkFBaUIsRUFBRTtJQUMxQixJQUFJLEtBQWUsQ0FBQztJQUNwQixJQUFJLFdBQTJCLENBQUM7SUFDaEMsSUFBSSxXQUF3QixDQUFDO0lBRTdCLE1BQU0sQ0FBQztRQUNMLG1EQUFtRDtRQUNuRCxXQUFXLEdBQUcsSUFBSSxHQUFHLENBQ25CLGVBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLHFCQUFXLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUN2RyxDQUFDO0lBQ0osQ0FBQyxDQUFDLENBQUM7SUFFSCxVQUFVLENBQUM7UUFDVCxLQUFLLEdBQUcsSUFBSSxrQkFBUSxDQUFDLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDdEMsV0FBVyxHQUFHLGVBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQzdDLENBQUMsQ0FBQyxDQUFDO0lBRUgsU0FBUyxDQUFDO1FBQ1IsV0FBVyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3hCLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLGtDQUFrQyxFQUFFO1FBQ3JDLElBQUEsY0FBUSxFQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWhCLHVEQUF1RDtRQUN2RCxnQkFBTSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV0RCx1RUFBdUU7UUFDdkUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUMvQyxNQUFNLElBQUksR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDOUIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUU3QixnQkFBTSxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEdBQUcsUUFBUSwwQkFBMEIsQ0FBQyxDQUFDO1lBQzVFLGdCQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxzQkFBZ0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN6RCxDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMscUNBQXFDLEVBQUU7UUFDeEMsSUFBQSxjQUFRLEVBQUMsS0FBSyxDQUFDLENBQUM7UUFFaEIsbUNBQW1DO1FBQ25DLE1BQU0sZUFBZSxHQUFHLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUUzRSx1QkFBdUI7UUFDdkIsTUFBTSxXQUFXLEdBQUcsSUFBSSxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDN0MsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxlQUFlLENBQUMsTUFBTSxFQUFFLGlEQUFpRCxDQUFDLENBQUM7SUFDNUcsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBzaW5vbiBmcm9tICdzaW5vbic7XG5pbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQgeyBCaXRHb0FQSSB9IGZyb20gJ0BiaXRnby9zZGstYXBpJztcbmltcG9ydCB7IENvaW5GZWF0dXJlLCBjb2lucyB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCB7IHJlZ2lzdGVyLCBDb3Ntb3NTaGFyZWRDb2luIH0gZnJvbSAnLi4vLi4vc3JjJztcblxuZGVzY3JpYmUoJ0Nvc21vcyBSZWdpc3RlcicsIGZ1bmN0aW9uICgpIHtcbiAgbGV0IGJpdGdvOiBCaXRHb0FQSTtcbiAgbGV0IHJlZ2lzdGVyU3B5OiBzaW5vbi5TaW5vblNweTtcbiAgbGV0IGNvc21vc0NvaW5zOiBTZXQ8c3RyaW5nPjtcblxuICBiZWZvcmUoZnVuY3Rpb24gKCkge1xuICAgIC8vIEdldCBhbGwgY29pbnMgd2l0aCB0aGUgU0hBUkVEX0NPU01PU19TREsgZmVhdHVyZVxuICAgIGNvc21vc0NvaW5zID0gbmV3IFNldChcbiAgICAgIGNvaW5zLmZpbHRlcigoY29pbikgPT4gY29pbi5mZWF0dXJlcy5pbmNsdWRlcyhDb2luRmVhdHVyZS5TSEFSRURfQ09TTU9TX1NESykpLm1hcCgoY29pbikgPT4gY29pbi5uYW1lKVxuICAgICk7XG4gIH0pO1xuXG4gIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgIGJpdGdvID0gbmV3IEJpdEdvQVBJKHsgZW52OiAndGVzdCcgfSk7XG4gICAgcmVnaXN0ZXJTcHkgPSBzaW5vbi5zcHkoYml0Z28sICdyZWdpc3RlcicpO1xuICB9KTtcblxuICBhZnRlckVhY2goZnVuY3Rpb24gKCkge1xuICAgIHJlZ2lzdGVyU3B5LnJlc3RvcmUoKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZWdpc3RlciBhbGwgY29zbW9zIGNvaW5zJywgZnVuY3Rpb24gKCkge1xuICAgIHJlZ2lzdGVyKGJpdGdvKTtcblxuICAgIC8vIFZlcmlmeSB0aGF0IHJlZ2lzdGVyIHdhcyBjYWxsZWQgZm9yIGVhY2ggY29zbW9zIGNvaW5cbiAgICBzaG91bGQuZXF1YWwocmVnaXN0ZXJTcHkuY2FsbENvdW50LCBjb3Ntb3NDb2lucy5zaXplKTtcblxuICAgIC8vIFZlcmlmeSB0aGF0IGVhY2ggY2FsbCB3YXMgZm9yIGEgY29zbW9zIGNvaW4gd2l0aCB0aGUgY29ycmVjdCBmYWN0b3J5XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZWdpc3RlclNweS5jYWxsQ291bnQ7IGkrKykge1xuICAgICAgY29uc3QgY2FsbCA9IHJlZ2lzdGVyU3B5LmdldENhbGwoaSk7XG4gICAgICBjb25zdCBjb2luTmFtZSA9IGNhbGwuYXJnc1swXTtcbiAgICAgIGNvbnN0IGZhY3RvcnkgPSBjYWxsLmFyZ3NbMV07XG5cbiAgICAgIHNob3VsZC5vayhjb3Ntb3NDb2lucy5oYXMoY29pbk5hbWUpLCBgJHtjb2luTmFtZX0gc2hvdWxkIGJlIGEgY29zbW9zIGNvaW5gKTtcbiAgICAgIHNob3VsZC5lcXVhbChmYWN0b3J5LCBDb3Ntb3NTaGFyZWRDb2luLmNyZWF0ZUluc3RhbmNlKTtcbiAgICB9XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcmVnaXN0ZXIgZWFjaCBjb2luIG9ubHkgb25jZScsIGZ1bmN0aW9uICgpIHtcbiAgICByZWdpc3RlcihiaXRnbyk7XG5cbiAgICAvLyBHZXQgdGhlIGxpc3Qgb2YgcmVnaXN0ZXJlZCBjb2luc1xuICAgIGNvbnN0IHJlZ2lzdGVyZWRDb2lucyA9IHJlZ2lzdGVyU3B5LmdldENhbGxzKCkubWFwKChjYWxsKSA9PiBjYWxsLmFyZ3NbMF0pO1xuXG4gICAgLy8gQ2hlY2sgZm9yIGR1cGxpY2F0ZXNcbiAgICBjb25zdCB1bmlxdWVDb2lucyA9IG5ldyBTZXQocmVnaXN0ZXJlZENvaW5zKTtcbiAgICBzaG91bGQuZXF1YWwodW5pcXVlQ29pbnMuc2l6ZSwgcmVnaXN0ZXJlZENvaW5zLmxlbmd0aCwgJ1RoZXJlIHNob3VsZCBiZSBubyBkdXBsaWNhdGUgY29pbiByZWdpc3RyYXRpb25zJyk7XG4gIH0pO1xufSk7XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transactionBuilder.d.ts","sourceRoot":"","sources":["../../../../test/unit/transactionBuilder/transactionBuilder.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const should_1 = __importDefault(require("should"));
|
|
7
|
+
const sdk_core_1 = require("@bitgo/sdk-core");
|
|
8
|
+
const testUtils_1 = require("../../testUtils");
|
|
9
|
+
describe('Cosmos Transaction Builder', function () {
|
|
10
|
+
const availableCoins = (0, testUtils_1.getAvailableTestCoins)();
|
|
11
|
+
// TODO: COIN-5039 - Running tests for each coin in parallel to improve test performance
|
|
12
|
+
// Loop through each available coin and run tests
|
|
13
|
+
availableCoins.forEach((coinName) => {
|
|
14
|
+
describe(`${coinName.toUpperCase()} Transaction Builder`, function () {
|
|
15
|
+
const testData = (0, testUtils_1.getTestData)(coinName);
|
|
16
|
+
const factory = (0, testUtils_1.getBuilderFactory)(testData.testnetCoin);
|
|
17
|
+
const testTx = testData.testSendTx;
|
|
18
|
+
it('should build a signed tx from signed tx data', async function () {
|
|
19
|
+
const txBuilder = factory.from(testTx.signedTxBase64);
|
|
20
|
+
const tx = await txBuilder.build();
|
|
21
|
+
should_1.default.equal(tx.type, sdk_core_1.TransactionType.Send);
|
|
22
|
+
// Should recreate the same raw tx data when re-build and turned to broadcast format
|
|
23
|
+
const rawTx = tx.toBroadcastFormat();
|
|
24
|
+
should_1.default.equal(rawTx, testTx.signedTxBase64);
|
|
25
|
+
});
|
|
26
|
+
describe('gasBudget tests', async () => {
|
|
27
|
+
it('should succeed for valid gasBudget', function () {
|
|
28
|
+
const builder = factory.getTransferBuilder();
|
|
29
|
+
should_1.default.doesNotThrow(() => builder.gasBudget(testTx.gasBudget));
|
|
30
|
+
});
|
|
31
|
+
it('should throw for invalid gasBudget', function () {
|
|
32
|
+
const builder = factory.getTransferBuilder();
|
|
33
|
+
const invalidGasBudget = { amount: testTx.gasBudget.amount, gasLimit: 0 };
|
|
34
|
+
(0, should_1.default)(() => builder.gasBudget(invalidGasBudget)).throw('Invalid gas limit 0');
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
it('validateAddress', function () {
|
|
38
|
+
const builder = factory.getTransferBuilder();
|
|
39
|
+
const invalidAddress = { address: 'randomString' };
|
|
40
|
+
should_1.default.doesNotThrow(() => builder.validateAddress({ address: testTx.sender }));
|
|
41
|
+
(0, should_1.default)(() => builder.validateAddress(invalidAddress)).throwError('transactionBuilder: address isValidAddress check failed: ' + invalidAddress.address);
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L3RyYW5zYWN0aW9uQnVpbGRlci90cmFuc2FjdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsOENBQWtEO0FBRWxELCtDQUF3RjtBQUV4RixRQUFRLENBQUMsNEJBQTRCLEVBQUU7SUFDckMsTUFBTSxjQUFjLEdBQUcsSUFBQSxpQ0FBcUIsR0FBRSxDQUFDO0lBQy9DLHlGQUF5RjtJQUN6RixpREFBaUQ7SUFDakQsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO1FBQ2xDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxXQUFXLEVBQUUsc0JBQXNCLEVBQUU7WUFDeEQsTUFBTSxRQUFRLEdBQUcsSUFBQSx1QkFBVyxFQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3ZDLE1BQU0sT0FBTyxHQUFHLElBQUEsNkJBQWlCLEVBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3hELE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxVQUFrRCxDQUFDO1lBRTNFLEVBQUUsQ0FBQyw4Q0FBOEMsRUFBRSxLQUFLO2dCQUN0RCxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDdEQsTUFBTSxFQUFFLEdBQUcsTUFBTSxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ25DLGdCQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsMEJBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDNUMsb0ZBQW9GO2dCQUNwRixNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztnQkFDckMsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUM3QyxDQUFDLENBQUMsQ0FBQztZQUVILFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxLQUFLLElBQUksRUFBRTtnQkFDckMsRUFBRSxDQUFDLG9DQUFvQyxFQUFFO29CQUN2QyxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztvQkFDN0MsZ0JBQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsU0FBVSxDQUFDLENBQUMsQ0FBQztnQkFDbEUsQ0FBQyxDQUFDLENBQUM7Z0JBRUgsRUFBRSxDQUFDLG9DQUFvQyxFQUFFO29CQUN2QyxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztvQkFDN0MsTUFBTSxnQkFBZ0IsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsU0FBVSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7b0JBQzNFLElBQUEsZ0JBQU0sRUFBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQztnQkFDakYsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztZQUVILEVBQUUsQ0FBQyxpQkFBaUIsRUFBRTtnQkFDcEIsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixFQUFFLENBQUM7Z0JBQzdDLE1BQU0sY0FBYyxHQUFHLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxDQUFDO2dCQUNuRCxnQkFBTSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQy9FLElBQUEsZ0JBQU0sRUFBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUM5RCwyREFBMkQsR0FBRyxjQUFjLENBQUMsT0FBTyxDQUNyRixDQUFDO1lBQ0osQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuXG5pbXBvcnQgeyBnZXRBdmFpbGFibGVUZXN0Q29pbnMsIGdldEJ1aWxkZXJGYWN0b3J5LCBnZXRUZXN0RGF0YSB9IGZyb20gJy4uLy4uL3Rlc3RVdGlscyc7XG5cbmRlc2NyaWJlKCdDb3Ntb3MgVHJhbnNhY3Rpb24gQnVpbGRlcicsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgYXZhaWxhYmxlQ29pbnMgPSBnZXRBdmFpbGFibGVUZXN0Q29pbnMoKTtcbiAgLy8gVE9ETzogQ09JTi01MDM5IC0gIFJ1bm5pbmcgdGVzdHMgZm9yIGVhY2ggY29pbiBpbiBwYXJhbGxlbCB0byBpbXByb3ZlIHRlc3QgcGVyZm9ybWFuY2VcbiAgLy8gTG9vcCB0aHJvdWdoIGVhY2ggYXZhaWxhYmxlIGNvaW4gYW5kIHJ1biB0ZXN0c1xuICBhdmFpbGFibGVDb2lucy5mb3JFYWNoKChjb2luTmFtZSkgPT4ge1xuICAgIGRlc2NyaWJlKGAke2NvaW5OYW1lLnRvVXBwZXJDYXNlKCl9IFRyYW5zYWN0aW9uIEJ1aWxkZXJgLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0ZXN0RGF0YSA9IGdldFRlc3REYXRhKGNvaW5OYW1lKTtcbiAgICAgIGNvbnN0IGZhY3RvcnkgPSBnZXRCdWlsZGVyRmFjdG9yeSh0ZXN0RGF0YS50ZXN0bmV0Q29pbik7XG4gICAgICBjb25zdCB0ZXN0VHggPSB0ZXN0RGF0YS50ZXN0U2VuZFR4IGFzIFJlcXVpcmVkPHR5cGVvZiB0ZXN0RGF0YS50ZXN0U2VuZFR4PjtcblxuICAgICAgaXQoJ3Nob3VsZCBidWlsZCBhIHNpZ25lZCB0eCBmcm9tIHNpZ25lZCB0eCBkYXRhJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmZyb20odGVzdFR4LnNpZ25lZFR4QmFzZTY0KTtcbiAgICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgc2hvdWxkLmVxdWFsKHR4LnR5cGUsIFRyYW5zYWN0aW9uVHlwZS5TZW5kKTtcbiAgICAgICAgLy8gU2hvdWxkIHJlY3JlYXRlIHRoZSBzYW1lIHJhdyB0eCBkYXRhIHdoZW4gcmUtYnVpbGQgYW5kIHR1cm5lZCB0byBicm9hZGNhc3QgZm9ybWF0XG4gICAgICAgIGNvbnN0IHJhd1R4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgICAgc2hvdWxkLmVxdWFsKHJhd1R4LCB0ZXN0VHguc2lnbmVkVHhCYXNlNjQpO1xuICAgICAgfSk7XG5cbiAgICAgIGRlc2NyaWJlKCdnYXNCdWRnZXQgdGVzdHMnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGl0KCdzaG91bGQgc3VjY2VlZCBmb3IgdmFsaWQgZ2FzQnVkZ2V0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBmYWN0b3J5LmdldFRyYW5zZmVyQnVpbGRlcigpO1xuICAgICAgICAgIHNob3VsZC5kb2VzTm90VGhyb3coKCkgPT4gYnVpbGRlci5nYXNCdWRnZXQodGVzdFR4Lmdhc0J1ZGdldCEpKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBmb3IgaW52YWxpZCBnYXNCdWRnZXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc3QgYnVpbGRlciA9IGZhY3RvcnkuZ2V0VHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgICAgICAgY29uc3QgaW52YWxpZEdhc0J1ZGdldCA9IHsgYW1vdW50OiB0ZXN0VHguZ2FzQnVkZ2V0IS5hbW91bnQsIGdhc0xpbWl0OiAwIH07XG4gICAgICAgICAgc2hvdWxkKCgpID0+IGJ1aWxkZXIuZ2FzQnVkZ2V0KGludmFsaWRHYXNCdWRnZXQpKS50aHJvdygnSW52YWxpZCBnYXMgbGltaXQgMCcpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgndmFsaWRhdGVBZGRyZXNzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBidWlsZGVyID0gZmFjdG9yeS5nZXRUcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICAgICAgY29uc3QgaW52YWxpZEFkZHJlc3MgPSB7IGFkZHJlc3M6ICdyYW5kb21TdHJpbmcnIH07XG4gICAgICAgIHNob3VsZC5kb2VzTm90VGhyb3coKCkgPT4gYnVpbGRlci52YWxpZGF0ZUFkZHJlc3MoeyBhZGRyZXNzOiB0ZXN0VHguc2VuZGVyIH0pKTtcbiAgICAgICAgc2hvdWxkKCgpID0+IGJ1aWxkZXIudmFsaWRhdGVBZGRyZXNzKGludmFsaWRBZGRyZXNzKSkudGhyb3dFcnJvcihcbiAgICAgICAgICAndHJhbnNhY3Rpb25CdWlsZGVyOiBhZGRyZXNzIGlzVmFsaWRBZGRyZXNzIGNoZWNrIGZhaWxlZDogJyArIGludmFsaWRBZGRyZXNzLmFkZHJlc3NcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transferBuilder.d.ts","sourceRoot":"","sources":["../../../../test/unit/transactionBuilder/transferBuilder.ts"],"names":[],"mappings":""}
|