@bitgo/sdk-coin-cosmos 1.6.2 → 1.6.3

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.
Files changed (38) hide show
  1. package/dist/test/resources/mantra.d.ts +70 -0
  2. package/dist/test/resources/mantra.d.ts.map +1 -0
  3. package/dist/test/resources/mantra.js +80 -0
  4. package/dist/test/testUtils/generators.d.ts +54 -0
  5. package/dist/test/testUtils/generators.d.ts.map +1 -0
  6. package/dist/test/testUtils/generators.js +183 -0
  7. package/dist/test/testUtils/index.d.ts +8 -0
  8. package/dist/test/testUtils/index.d.ts.map +1 -0
  9. package/dist/test/testUtils/index.js +25 -0
  10. package/dist/test/testUtils/types.d.ts +203 -0
  11. package/dist/test/testUtils/types.d.ts.map +1 -0
  12. package/dist/test/testUtils/types.js +7 -0
  13. package/dist/test/testUtils/utils.d.ts +43 -0
  14. package/dist/test/testUtils/utils.d.ts.map +1 -0
  15. package/dist/test/testUtils/utils.js +122 -0
  16. package/dist/test/unit/cosmosSharedCoin.d.ts +2 -0
  17. package/dist/test/unit/cosmosSharedCoin.d.ts.map +1 -0
  18. package/dist/test/unit/cosmosSharedCoin.js +300 -0
  19. package/dist/test/unit/keyPair.d.ts +2 -0
  20. package/dist/test/unit/keyPair.d.ts.map +1 -0
  21. package/dist/test/unit/keyPair.js +73 -0
  22. package/dist/test/unit/register.d.ts +2 -0
  23. package/dist/test/unit/register.d.ts.map +1 -0
  24. package/dist/test/unit/register.js +48 -0
  25. package/dist/test/unit/transactionBuilder/transactionBuilder.d.ts +2 -0
  26. package/dist/test/unit/transactionBuilder/transactionBuilder.d.ts.map +1 -0
  27. package/dist/test/unit/transactionBuilder/transactionBuilder.js +46 -0
  28. package/dist/test/unit/transactionBuilder/transferBuilder.d.ts +2 -0
  29. package/dist/test/unit/transactionBuilder/transferBuilder.d.ts.map +1 -0
  30. package/dist/test/unit/transactionBuilder/transferBuilder.js +186 -0
  31. package/dist/test/unit/utils.d.ts +2 -0
  32. package/dist/test/unit/utils.d.ts.map +1 -0
  33. package/dist/test/unit/utils.js +82 -0
  34. package/dist/tsconfig.tsbuildinfo +1 -0
  35. package/package.json +10 -7
  36. package/.eslintignore +0 -5
  37. package/.mocharc.yml +0 -8
  38. 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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=keyPair.d.ts.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=register.d.ts.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=transactionBuilder.d.ts.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=transferBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transferBuilder.d.ts","sourceRoot":"","sources":["../../../../test/unit/transactionBuilder/transferBuilder.ts"],"names":[],"mappings":""}