@bitgo-beta/sdk-coin-icp 1.0.1-beta.80 → 1.0.1-beta.801
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/resources/messageCompiled.d.ts +797 -0
- package/dist/resources/messageCompiled.js +1859 -0
- package/dist/src/icp.d.ts +55 -2
- package/dist/src/icp.d.ts.map +1 -1
- package/dist/src/icp.js +300 -9
- package/dist/src/lib/icpAgent.d.ts +36 -0
- package/dist/src/lib/icpAgent.d.ts.map +1 -0
- package/dist/src/lib/icpAgent.js +90 -0
- package/dist/src/lib/iface.d.ts +191 -0
- package/dist/src/lib/iface.d.ts.map +1 -0
- package/dist/src/lib/iface.js +44 -0
- package/dist/src/lib/index.d.ts +4 -0
- package/dist/src/lib/index.d.ts.map +1 -1
- package/dist/src/lib/index.js +12 -2
- package/dist/src/lib/keyPair.js +4 -4
- package/dist/src/lib/signedTransactionBuilder.d.ts +9 -0
- package/dist/src/lib/signedTransactionBuilder.d.ts.map +1 -0
- package/dist/src/lib/signedTransactionBuilder.js +64 -0
- package/dist/src/lib/transaction.d.ts +54 -0
- package/dist/src/lib/transaction.d.ts.map +1 -0
- package/dist/src/lib/transaction.js +255 -0
- package/dist/src/lib/transactionBuilder.d.ts +58 -28
- package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilder.js +127 -40
- package/dist/src/lib/transactionBuilderFactory.d.ts +15 -14
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilderFactory.js +43 -27
- package/dist/src/lib/transferBuilder.d.ts +7 -24
- package/dist/src/lib/transferBuilder.d.ts.map +1 -1
- package/dist/src/lib/transferBuilder.js +88 -43
- package/dist/src/lib/unsignedTransactionBuilder.d.ts +13 -0
- package/dist/src/lib/unsignedTransactionBuilder.d.ts.map +1 -0
- package/dist/src/lib/unsignedTransactionBuilder.js +90 -0
- package/dist/src/lib/utils.d.ts +285 -7
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +607 -52
- package/dist/src/ticp.d.ts +0 -4
- package/dist/src/ticp.d.ts.map +1 -1
- package/dist/src/ticp.js +1 -7
- package/dist/test/resources/icp.d.ts +268 -0
- package/dist/test/resources/icp.d.ts.map +1 -0
- package/dist/test/resources/icp.js +377 -0
- package/dist/test/unit/getBuilderFactory.d.ts +3 -0
- package/dist/test/unit/getBuilderFactory.d.ts.map +1 -0
- package/dist/test/unit/getBuilderFactory.js +10 -0
- package/dist/test/unit/icp.d.ts +2 -0
- package/dist/test/unit/icp.d.ts.map +1 -0
- package/dist/test/unit/icp.js +246 -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 +107 -0
- package/dist/test/unit/transaction.d.ts +2 -0
- package/dist/test/unit/transaction.d.ts.map +1 -0
- package/dist/test/unit/transaction.js +109 -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 +274 -0
- package/dist/test/unit/transactionBuilder/transactionRecover.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/transactionRecover.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/transactionRecover.js +188 -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 +206 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +23 -12
- package/.eslintignore +0 -4
- package/.mocharc.yml +0 -8
- package/CHANGELOG.md +0 -44
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
const sdk_test_1 = require("@bitgo-beta/sdk-test");
|
|
40
|
+
const sdk_api_1 = require("@bitgo-beta/sdk-api");
|
|
41
|
+
const utils_1 = __importDefault(require("../../src/lib/utils"));
|
|
42
|
+
const getBuilderFactory_1 = require("./getBuilderFactory");
|
|
43
|
+
const index_1 = require("../../src/index");
|
|
44
|
+
const nock_1 = __importDefault(require("nock"));
|
|
45
|
+
const testData = __importStar(require("../resources/icp"));
|
|
46
|
+
const assert_1 = __importDefault(require("assert"));
|
|
47
|
+
const should_1 = __importDefault(require("should"));
|
|
48
|
+
nock_1.default.enableNetConnect();
|
|
49
|
+
const bitgo = sdk_test_1.TestBitGo.decorate(sdk_api_1.BitGoAPI, { env: 'test' });
|
|
50
|
+
bitgo.safeRegister('icp', index_1.Icp.createInstance);
|
|
51
|
+
describe('Internet computer', function () {
|
|
52
|
+
let bitgo;
|
|
53
|
+
let basecoin;
|
|
54
|
+
const factory = (0, getBuilderFactory_1.getBuilderFactory)('icp');
|
|
55
|
+
let txBuilder;
|
|
56
|
+
before(async function () {
|
|
57
|
+
bitgo = sdk_test_1.TestBitGo.decorate(sdk_api_1.BitGoAPI, { env: 'test' });
|
|
58
|
+
bitgo.safeRegister('icp', index_1.Icp.createInstance);
|
|
59
|
+
bitgo.safeRegister('ticp', index_1.Ticp.createInstance);
|
|
60
|
+
bitgo.initializeTestVars();
|
|
61
|
+
basecoin = bitgo.coin('icp');
|
|
62
|
+
txBuilder = factory.getTransferBuilder();
|
|
63
|
+
txBuilder.sender(testData.Accounts.account1.address, testData.Accounts.account1.publicKey);
|
|
64
|
+
txBuilder.receiverId(testData.Accounts.account2.address);
|
|
65
|
+
txBuilder.amount('10');
|
|
66
|
+
txBuilder.memo(testData.MetaDataWithMemo.memo);
|
|
67
|
+
await txBuilder.build();
|
|
68
|
+
});
|
|
69
|
+
after(function () {
|
|
70
|
+
nock_1.default.pendingMocks().should.be.empty();
|
|
71
|
+
nock_1.default.cleanAll();
|
|
72
|
+
});
|
|
73
|
+
it('should return the right info', function () {
|
|
74
|
+
const icp = bitgo.coin('icp');
|
|
75
|
+
const ticp = bitgo.coin('ticp');
|
|
76
|
+
icp.getChain().should.equal('icp');
|
|
77
|
+
icp.getFamily().should.equal('icp');
|
|
78
|
+
icp.getFullName().should.equal('Internet Computer');
|
|
79
|
+
icp.getBaseFactor().should.equal(1e8);
|
|
80
|
+
icp.supportsTss().should.equal(true);
|
|
81
|
+
ticp.getChain().should.equal('ticp');
|
|
82
|
+
ticp.getFamily().should.equal('icp');
|
|
83
|
+
ticp.getFullName().should.equal('Testnet Internet Computer');
|
|
84
|
+
ticp.getBaseFactor().should.equal(1e8);
|
|
85
|
+
icp.supportsTss().should.equal(true);
|
|
86
|
+
});
|
|
87
|
+
describe('Address creation', () => {
|
|
88
|
+
const hexEncodedPublicKey = '047a83e378053f87b49aeae53b3ed274c8b2ffbe59d9a51e3c4d850ca8ac1684f7131b778317c0db04de661c7d08321d60c0507868af41fe3150d21b3c6c757367';
|
|
89
|
+
const hexEncodedPublicKey2 = '02ad010ce68b75266c723bf25fbe3a0c48eb29f14b25925b06b7f5026a0f12702e';
|
|
90
|
+
const invalidPublicKey = 'invalid-public-key';
|
|
91
|
+
const validAccountID = '8b84c3a3529d02a9decb5b1a27e7c8d886e17e07ea0a538269697ef09c2a27b4';
|
|
92
|
+
const validAccountID2 = '2b9b89604362e185544c8bba76cadff1a3af26e1467e8530d13743a08a52dd7b';
|
|
93
|
+
it('should return true when validating a hex encoded public key', function () {
|
|
94
|
+
basecoin.isValidPub(hexEncodedPublicKey).should.equal(true);
|
|
95
|
+
});
|
|
96
|
+
it('should return true when validating a hex encoded public key with 33 bytes ', function () {
|
|
97
|
+
basecoin.isValidPub(hexEncodedPublicKey2).should.equal(true);
|
|
98
|
+
});
|
|
99
|
+
it('should return false when validating a invalid public key', function () {
|
|
100
|
+
basecoin.isValidPub(invalidPublicKey).should.equal(false);
|
|
101
|
+
});
|
|
102
|
+
it('should return valid address from a valid hex encoded public key', async function () {
|
|
103
|
+
const accountID = await basecoin.getAddressFromPublicKey(hexEncodedPublicKey);
|
|
104
|
+
accountID.should.deepEqual(validAccountID);
|
|
105
|
+
});
|
|
106
|
+
it('should return valid address from a valid hex encoded public key with 33 bytes', async function () {
|
|
107
|
+
const accountID = await basecoin.getAddressFromPublicKey(hexEncodedPublicKey2);
|
|
108
|
+
accountID.should.deepEqual(validAccountID2);
|
|
109
|
+
});
|
|
110
|
+
it('should throw an error when invalid public key is provided', async function () {
|
|
111
|
+
await basecoin
|
|
112
|
+
.getAddressFromPublicKey(invalidPublicKey)
|
|
113
|
+
.should.be.rejectedWith(`Invalid hex-encoded public key format.`);
|
|
114
|
+
});
|
|
115
|
+
it('should return valid address from a valid hex encoded public key', async function () {
|
|
116
|
+
const accountID = await utils_1.default.getAddressFromPublicKey(hexEncodedPublicKey);
|
|
117
|
+
accountID.should.deepEqual(validAccountID);
|
|
118
|
+
});
|
|
119
|
+
it('should throw an error when invalid public key is provided', async function () {
|
|
120
|
+
await utils_1.default
|
|
121
|
+
.getAddressFromPublicKey(invalidPublicKey)
|
|
122
|
+
.should.be.rejectedWith(`Invalid hex-encoded public key format.`);
|
|
123
|
+
});
|
|
124
|
+
});
|
|
125
|
+
describe('Generate wallet key pair: ', () => {
|
|
126
|
+
it('should generate key pair', () => {
|
|
127
|
+
const kp = basecoin.generateKeyPair();
|
|
128
|
+
basecoin.isValidPub(kp.pub).should.equal(true);
|
|
129
|
+
basecoin.isValidPrv(kp.prv).should.equal(true);
|
|
130
|
+
});
|
|
131
|
+
it('should generate key pair from seed', () => {
|
|
132
|
+
const seed = Buffer.from('9d61b19deffd5a60ba844af492ec2cc44449c5697b326919703bac031cae7f60', 'hex');
|
|
133
|
+
const kp = basecoin.generateKeyPair(seed);
|
|
134
|
+
basecoin.isValidPub(kp.pub).should.equal(true);
|
|
135
|
+
basecoin.isValidPrv(kp.prv).should.equal(true);
|
|
136
|
+
});
|
|
137
|
+
});
|
|
138
|
+
describe('Sign a raw txn with a private key', () => {
|
|
139
|
+
it('should sign a raw txn with a private key', async () => {
|
|
140
|
+
const unsignedTxn = txBuilder.transaction.unsignedTransaction;
|
|
141
|
+
unsignedTxn.should.be.a.String();
|
|
142
|
+
const payloadsData = txBuilder.transaction.payloadsData;
|
|
143
|
+
const serializedTxFormat = {
|
|
144
|
+
serializedTxHex: payloadsData,
|
|
145
|
+
publicKey: testData.Accounts.account1.publicKey,
|
|
146
|
+
};
|
|
147
|
+
const serializedTxHex = Buffer.from(JSON.stringify(serializedTxFormat), 'utf-8').toString('hex');
|
|
148
|
+
const signedTxn = await basecoin.signTransaction({
|
|
149
|
+
txPrebuild: {
|
|
150
|
+
txHex: serializedTxHex,
|
|
151
|
+
},
|
|
152
|
+
prv: testData.Accounts.account1.secretKey,
|
|
153
|
+
});
|
|
154
|
+
signedTxn.should.be.a.string;
|
|
155
|
+
const parsedTransaction = await factory.parseTransaction(signedTxn.txHex, true);
|
|
156
|
+
should_1.default.equal(parsedTransaction.operations[0].account.address, testData.Accounts.account1.address);
|
|
157
|
+
should_1.default.equal(parsedTransaction.operations[1].account.address, testData.Accounts.account2.address);
|
|
158
|
+
should_1.default.equal(parsedTransaction.operations[2].account.address, testData.Accounts.account1.address);
|
|
159
|
+
should_1.default.equal(parsedTransaction.operations[0].amount.value, '-10');
|
|
160
|
+
should_1.default.equal(parsedTransaction.account_identifier_signers[0].address, testData.Accounts.account1.address);
|
|
161
|
+
});
|
|
162
|
+
});
|
|
163
|
+
describe('Verify a transaction', () => {
|
|
164
|
+
it('should successfully verify a transaction with signable Hex', async () => {
|
|
165
|
+
const unsignedTxn = txBuilder.transaction.unsignedTransaction;
|
|
166
|
+
unsignedTxn.should.be.a.String();
|
|
167
|
+
const payloadsData = txBuilder.transaction.payloadsData;
|
|
168
|
+
const serializedTxFormat = {
|
|
169
|
+
serializedTxHex: payloadsData,
|
|
170
|
+
publicKey: testData.Accounts.account1.publicKey,
|
|
171
|
+
};
|
|
172
|
+
const signableHex = payloadsData.payloads[0].hex_bytes;
|
|
173
|
+
const serializedTxHex = Buffer.from(JSON.stringify(serializedTxFormat), 'utf-8').toString('hex');
|
|
174
|
+
const txParams = {
|
|
175
|
+
recipients: [
|
|
176
|
+
{
|
|
177
|
+
address: testData.Accounts.account2.address,
|
|
178
|
+
amount: '10',
|
|
179
|
+
},
|
|
180
|
+
],
|
|
181
|
+
};
|
|
182
|
+
const response = await basecoin.verifyTransaction({
|
|
183
|
+
txPrebuild: {
|
|
184
|
+
txHex: serializedTxHex,
|
|
185
|
+
txInfo: signableHex,
|
|
186
|
+
},
|
|
187
|
+
txParams: txParams,
|
|
188
|
+
});
|
|
189
|
+
(0, assert_1.default)(response);
|
|
190
|
+
});
|
|
191
|
+
it('should successfully verify a transaction without signable Hex', async () => {
|
|
192
|
+
const unsignedTxn = txBuilder.transaction.unsignedTransaction;
|
|
193
|
+
unsignedTxn.should.be.a.String();
|
|
194
|
+
const payloadsData = txBuilder.transaction.payloadsData;
|
|
195
|
+
const serializedTxFormat = {
|
|
196
|
+
serializedTxHex: payloadsData,
|
|
197
|
+
publicKey: testData.Accounts.account1.publicKey,
|
|
198
|
+
};
|
|
199
|
+
const serializedTxHex = Buffer.from(JSON.stringify(serializedTxFormat), 'utf-8').toString('hex');
|
|
200
|
+
const txParams = {
|
|
201
|
+
recipients: [
|
|
202
|
+
{
|
|
203
|
+
address: testData.Accounts.account2.address,
|
|
204
|
+
amount: '10',
|
|
205
|
+
},
|
|
206
|
+
],
|
|
207
|
+
};
|
|
208
|
+
const response = await basecoin.verifyTransaction({
|
|
209
|
+
txPrebuild: {
|
|
210
|
+
txHex: serializedTxHex,
|
|
211
|
+
},
|
|
212
|
+
txParams: txParams,
|
|
213
|
+
});
|
|
214
|
+
(0, assert_1.default)(response);
|
|
215
|
+
});
|
|
216
|
+
it('should fail to verify a transaction with wrong signable Hex', async () => {
|
|
217
|
+
const unsignedTxn = txBuilder.transaction.unsignedTransaction;
|
|
218
|
+
unsignedTxn.should.be.a.String();
|
|
219
|
+
const payloadsData = txBuilder.transaction.payloadsData;
|
|
220
|
+
const serializedTxFormat = {
|
|
221
|
+
serializedTxHex: payloadsData,
|
|
222
|
+
publicKey: testData.Accounts.account1.publicKey,
|
|
223
|
+
};
|
|
224
|
+
const serializedTxHex = Buffer.from(JSON.stringify(serializedTxFormat), 'utf-8').toString('hex');
|
|
225
|
+
const txParams = {
|
|
226
|
+
recipients: [
|
|
227
|
+
{
|
|
228
|
+
address: testData.Accounts.account2.address,
|
|
229
|
+
amount: '10',
|
|
230
|
+
},
|
|
231
|
+
],
|
|
232
|
+
};
|
|
233
|
+
const wrongSignableHexValues = '0a69632d72657175657374523de3c7c5b4613155b74ede2e54493f6acbe8bf6d910154fbbb3a98ba3e0098';
|
|
234
|
+
await basecoin
|
|
235
|
+
.verifyTransaction({
|
|
236
|
+
txPrebuild: {
|
|
237
|
+
txHex: serializedTxHex,
|
|
238
|
+
txInfo: wrongSignableHexValues,
|
|
239
|
+
},
|
|
240
|
+
txParams: txParams,
|
|
241
|
+
})
|
|
242
|
+
.should.rejectedWith('generated signableHex is not equal to params.signableHex');
|
|
243
|
+
});
|
|
244
|
+
});
|
|
245
|
+
});
|
|
246
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC91bml0L2ljcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG1EQUErRDtBQUMvRCxpREFBK0M7QUFDL0MsZ0VBQXdDO0FBQ3hDLDJEQUF3RDtBQUV4RCwyQ0FBNEM7QUFDNUMsZ0RBQXdCO0FBQ3hCLDJEQUE2QztBQUM3QyxvREFBNEI7QUFDNUIsb0RBQTRCO0FBQzVCLGNBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0FBRXhCLE1BQU0sS0FBSyxHQUFpQixvQkFBUyxDQUFDLFFBQVEsQ0FBQyxrQkFBUSxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7QUFDMUUsS0FBSyxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsV0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBRTlDLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRTtJQUM1QixJQUFJLEtBQUssQ0FBQztJQUNWLElBQUksUUFBUSxDQUFDO0lBQ2IsTUFBTSxPQUFPLEdBQUcsSUFBQSxxQ0FBaUIsRUFBQyxLQUFLLENBQUMsQ0FBQztJQUN6QyxJQUFJLFNBQWMsQ0FBQztJQUVuQixNQUFNLENBQUMsS0FBSztRQUNWLEtBQUssR0FBRyxvQkFBUyxDQUFDLFFBQVEsQ0FBQyxrQkFBUSxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDdEQsS0FBSyxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsV0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzlDLEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLFlBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNoRCxLQUFLLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMzQixRQUFRLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUU3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QjtpQkFDL0I7Z0JBQ0QsUUFBUSxFQUFFLFFBQVE7YUFDbkIsQ0FBQztpQkFDRCxNQUFNLENBQUMsWUFBWSxDQUFDLDBEQUEwRCxDQUFDLENBQUM7UUFDckYsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGVzdEJpdEdvLCBUZXN0Qml0R29BUEkgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstdGVzdCc7XG5pbXBvcnQgeyBCaXRHb0FQSSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1hcGknO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4uLy4uL3NyYy9saWIvdXRpbHMnO1xuaW1wb3J0IHsgZ2V0QnVpbGRlckZhY3RvcnkgfSBmcm9tICcuL2dldEJ1aWxkZXJGYWN0b3J5JztcblxuaW1wb3J0IHsgSWNwLCBUaWNwIH0gZnJvbSAnLi4vLi4vc3JjL2luZGV4JztcbmltcG9ydCBub2NrIGZyb20gJ25vY2snO1xuaW1wb3J0ICogYXMgdGVzdERhdGEgZnJvbSAnLi4vcmVzb3VyY2VzL2ljcCc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5ub2NrLmVuYWJsZU5ldENvbm5lY3QoKTtcblxuY29uc3QgYml0Z286IFRlc3RCaXRHb0FQSSA9IFRlc3RCaXRHby5kZWNvcmF0ZShCaXRHb0FQSSwgeyBlbnY6ICd0ZXN0JyB9KTtcbmJpdGdvLnNhZmVSZWdpc3RlcignaWNwJywgSWNwLmNyZWF0ZUluc3RhbmNlKTtcblxuZGVzY3JpYmUoJ0ludGVybmV0IGNvbXB1dGVyJywgZnVuY3Rpb24gKCkge1xuICBsZXQgYml0Z287XG4gIGxldCBiYXNlY29pbjtcbiAgY29uc3QgZmFjdG9yeSA9IGdldEJ1aWxkZXJGYWN0b3J5KCdpY3AnKTtcbiAgbGV0IHR4QnVpbGRlcjogYW55O1xuXG4gIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgYml0Z28gPSBUZXN0Qml0R28uZGVjb3JhdGUoQml0R29BUEksIHsgZW52OiAndGVzdCcgfSk7XG4gICAgYml0Z28uc2FmZVJlZ2lzdGVyKCdpY3AnLCBJY3AuY3JlYXRlSW5zdGFuY2UpO1xuICAgIGJpdGdvLnNhZmVSZWdpc3RlcigndGljcCcsIFRpY3AuY3JlYXRlSW5zdGFuY2UpO1xuICAgIGJpdGdvLmluaXRpYWxpemVUZXN0VmFycygpO1xuICAgIGJhc2Vjb2luID0gYml0Z28uY29pbignaWNwJyk7XG5cbiAgICB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFRyYW5zZmVyQnVpbGRlcigpO1xuICAgIHR4QnVpbGRlci5zZW5kZXIodGVzdERhdGEuQWNjb3VudHMuYWNjb3VudDEuYWRkcmVzcywgdGVzdERhdGEuQWNjb3VudHMuYWNjb3VudDEucHVibGljS2V5KTtcbiAgICB0eEJ1aWxkZXIucmVjZWl2ZXJJZCh0ZXN0RGF0YS5BY2NvdW50cy5hY2NvdW50Mi5hZGRyZXNzKTtcbiAgICB0eEJ1aWxkZXIuYW1vdW50KCcxMCcpO1xuICAgIHR4QnVpbGRlci5tZW1vKHRlc3REYXRhLk1ldGFEYXRhV2l0aE1lbW8ubWVtbyk7XG5cbiAgICBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgfSk7XG5cbiAgYWZ0ZXIoZnVuY3Rpb24gKCkge1xuICAgIG5vY2sucGVuZGluZ01vY2tzKCkuc2hvdWxkLmJlLmVtcHR5KCk7XG4gICAgbm9jay5jbGVhbkFsbCgpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJldHVybiB0aGUgcmlnaHQgaW5mbycsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBpY3AgPSBiaXRnby5jb2luKCdpY3AnKTtcbiAgICBjb25zdCB0aWNwID0gYml0Z28uY29pbigndGljcCcpO1xuXG4gICAgaWNwLmdldENoYWluKCkuc2hvdWxkLmVxdWFsKCdpY3AnKTtcbiAgICBpY3AuZ2V0RmFtaWx5KCkuc2hvdWxkLmVxdWFsKCdpY3AnKTtcbiAgICBpY3AuZ2V0RnVsbE5hbWUoKS5zaG91bGQuZXF1YWwoJ0ludGVybmV0IENvbXB1dGVyJyk7XG4gICAgaWNwLmdldEJhc2VGYWN0b3IoKS5zaG91bGQuZXF1YWwoMWU4KTtcbiAgICBpY3Auc3VwcG9ydHNUc3MoKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG5cbiAgICB0aWNwLmdldENoYWluKCkuc2hvdWxkLmVxdWFsKCd0aWNwJyk7XG4gICAgdGljcC5nZXRGYW1pbHkoKS5zaG91bGQuZXF1YWwoJ2ljcCcpO1xuICAgIHRpY3AuZ2V0RnVsbE5hbWUoKS5zaG91bGQuZXF1YWwoJ1Rlc3RuZXQgSW50ZXJuZXQgQ29tcHV0ZXInKTtcbiAgICB0aWNwLmdldEJhc2VGYWN0b3IoKS5zaG91bGQuZXF1YWwoMWU4KTtcbiAgICBpY3Auc3VwcG9ydHNUc3MoKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdBZGRyZXNzIGNyZWF0aW9uJywgKCkgPT4ge1xuICAgIGNvbnN0IGhleEVuY29kZWRQdWJsaWNLZXkgPVxuICAgICAgJzA0N2E4M2UzNzgwNTNmODdiNDlhZWFlNTNiM2VkMjc0YzhiMmZmYmU1OWQ5YTUxZTNjNGQ4NTBjYThhYzE2ODRmNzEzMWI3NzgzMTdjMGRiMDRkZTY2MWM3ZDA4MzIxZDYwYzA1MDc4NjhhZjQxZmUzMTUwZDIxYjNjNmM3NTczNjcnO1xuICAgIGNvbnN0IGhleEVuY29kZWRQdWJsaWNLZXkyID0gJzAyYWQwMTBjZTY4Yjc1MjY2YzcyM2JmMjVmYmUzYTBjNDhlYjI5ZjE0YjI1OTI1YjA2YjdmNTAyNmEwZjEyNzAyZSc7XG4gICAgY29uc3QgaW52YWxpZFB1YmxpY0tleSA9ICdpbnZhbGlkLXB1YmxpYy1rZXknO1xuICAgIGNvbnN0IHZhbGlkQWNjb3VudElEID0gJzhiODRjM2EzNTI5ZDAyYTlkZWNiNWIxYTI3ZTdjOGQ4ODZlMTdlMDdlYTBhNTM4MjY5Njk3ZWYwOWMyYTI3YjQnO1xuICAgIGNvbnN0IHZhbGlkQWNjb3VudElEMiA9ICcyYjliODk2MDQzNjJlMTg1NTQ0YzhiYmE3NmNhZGZmMWEzYWYyNmUxNDY3ZTg1MzBkMTM3NDNhMDhhNTJkZDdiJztcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiB2YWxpZGF0aW5nIGEgaGV4IGVuY29kZWQgcHVibGljIGtleScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGJhc2Vjb2luLmlzVmFsaWRQdWIoaGV4RW5jb2RlZFB1YmxpY0tleSkuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIHZhbGlkYXRpbmcgYSBoZXggZW5jb2RlZCBwdWJsaWMga2V5IHdpdGggMzMgYnl0ZXMgJywgZnVuY3Rpb24gKCkge1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZFB1YihoZXhFbmNvZGVkUHVibGljS2V5Mikuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB2YWxpZGF0aW5nIGEgaW52YWxpZCBwdWJsaWMga2V5JywgZnVuY3Rpb24gKCkge1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZFB1YihpbnZhbGlkUHVibGljS2V5KS5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdmFsaWQgYWRkcmVzcyBmcm9tIGEgdmFsaWQgaGV4IGVuY29kZWQgcHVibGljIGtleScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGFjY291bnRJRCA9IGF3YWl0IGJhc2Vjb2luLmdldEFkZHJlc3NGcm9tUHVibGljS2V5KGhleEVuY29kZWRQdWJsaWNLZXkpO1xuICAgICAgYWNjb3VudElELnNob3VsZC5kZWVwRXF1YWwodmFsaWRBY2NvdW50SUQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdmFsaWQgYWRkcmVzcyBmcm9tIGEgdmFsaWQgaGV4IGVuY29kZWQgcHVibGljIGtleSB3aXRoIDMzIGJ5dGVzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYWNjb3VudElEID0gYXdhaXQgYmFzZWNvaW4uZ2V0QWRkcmVzc0Zyb21QdWJsaWNLZXkoaGV4RW5jb2RlZFB1YmxpY0tleTIpO1xuICAgICAgYWNjb3VudElELnNob3VsZC5kZWVwRXF1YWwodmFsaWRBY2NvdW50SUQyKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgYW4gZXJyb3Igd2hlbiBpbnZhbGlkIHB1YmxpYyBrZXkgaXMgcHJvdmlkZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBiYXNlY29pblxuICAgICAgICAuZ2V0QWRkcmVzc0Zyb21QdWJsaWNLZXkoaW52YWxpZFB1YmxpY0tleSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoYEludmFsaWQgaGV4LWVuY29kZWQgcHVibGljIGtleSBmb3JtYXQuYCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiB2YWxpZCBhZGRyZXNzIGZyb20gYSB2YWxpZCBoZXggZW5jb2RlZCBwdWJsaWMga2V5JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYWNjb3VudElEID0gYXdhaXQgdXRpbHMuZ2V0QWRkcmVzc0Zyb21QdWJsaWNLZXkoaGV4RW5jb2RlZFB1YmxpY0tleSk7XG4gICAgICBhY2NvdW50SUQuc2hvdWxkLmRlZXBFcXVhbCh2YWxpZEFjY291bnRJRCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGFuIGVycm9yIHdoZW4gaW52YWxpZCBwdWJsaWMga2V5IGlzIHByb3ZpZGVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgdXRpbHNcbiAgICAgICAgLmdldEFkZHJlc3NGcm9tUHVibGljS2V5KGludmFsaWRQdWJsaWNLZXkpXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKGBJbnZhbGlkIGhleC1lbmNvZGVkIHB1YmxpYyBrZXkgZm9ybWF0LmApO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnR2VuZXJhdGUgd2FsbGV0IGtleSBwYWlyOiAnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSBrZXkgcGFpcicsICgpID0+IHtcbiAgICAgIGNvbnN0IGtwID0gYmFzZWNvaW4uZ2VuZXJhdGVLZXlQYWlyKCk7XG4gICAgICBiYXNlY29pbi5pc1ZhbGlkUHViKGtwLnB1Yikuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZFBydihrcC5wcnYpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUga2V5IHBhaXIgZnJvbSBzZWVkJywgKCkgPT4ge1xuICAgICAgY29uc3Qgc2VlZCA9IEJ1ZmZlci5mcm9tKCc5ZDYxYjE5ZGVmZmQ1YTYwYmE4NDRhZjQ5MmVjMmNjNDQ0NDljNTY5N2IzMjY5MTk3MDNiYWMwMzFjYWU3ZjYwJywgJ2hleCcpO1xuICAgICAgY29uc3Qga3AgPSBiYXNlY29pbi5nZW5lcmF0ZUtleVBhaXIoc2VlZCk7XG4gICAgICBiYXNlY29pbi5pc1ZhbGlkUHViKGtwLnB1Yikuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgICAgYmFzZWNvaW4uaXNWYWxpZFBydihrcC5wcnYpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1NpZ24gYSByYXcgdHhuIHdpdGggYSBwcml2YXRlIGtleScsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHNpZ24gYSByYXcgdHhuIHdpdGggYSBwcml2YXRlIGtleScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHVuc2lnbmVkVHhuID0gdHhCdWlsZGVyLnRyYW5zYWN0aW9uLnVuc2lnbmVkVHJhbnNhY3Rpb247XG4gICAgICB1bnNpZ25lZFR4bi5zaG91bGQuYmUuYS5TdHJpbmcoKTtcbiAgICAgIGNvbnN0IHBheWxvYWRzRGF0YSA9IHR4QnVpbGRlci50cmFuc2FjdGlvbi5wYXlsb2Fkc0RhdGE7XG4gICAgICBjb25zdCBzZXJpYWxpemVkVHhGb3JtYXQgPSB7XG4gICAgICAgIHNlcmlhbGl6ZWRUeEhleDogcGF5bG9hZHNEYXRhLFxuICAgICAgICBwdWJsaWNLZXk6IHRlc3REYXRhLkFjY291bnRzLmFjY291bnQxLnB1YmxpY0tleSxcbiAgICAgIH07XG4gICAgICBjb25zdCBzZXJpYWxpemVkVHhIZXggPSBCdWZmZXIuZnJvbShKU09OLnN0cmluZ2lmeShzZXJpYWxpemVkVHhGb3JtYXQpLCAndXRmLTgnKS50b1N0cmluZygnaGV4Jyk7XG4gICAgICBjb25zdCBzaWduZWRUeG4gPSBhd2FpdCBiYXNlY29pbi5zaWduVHJhbnNhY3Rpb24oe1xuICAgICAgICB0eFByZWJ1aWxkOiB7XG4gICAgICAgICAgdHhIZXg6IHNlcmlhbGl6ZWRUeEhleCxcbiAgICAgICAgfSxcbiAgICAgICAgcHJ2OiB0ZXN0RGF0YS5BY2NvdW50cy5hY2NvdW50MS5zZWNyZXRLZXksXG4gICAgICB9KTtcbiAgICAgIHNpZ25lZFR4bi5zaG91bGQuYmUuYS5zdHJpbmc7XG4gICAgICBjb25zdCBwYXJzZWRUcmFuc2FjdGlvbiA9IGF3YWl0IGZhY3RvcnkucGFyc2VUcmFuc2FjdGlvbihzaWduZWRUeG4udHhIZXgsIHRydWUpO1xuICAgICAgc2hvdWxkLmVxdWFsKHBhcnNlZFRyYW5zYWN0aW9uLm9wZXJhdGlvbnNbMF0uYWNjb3VudC5hZGRyZXNzLCB0ZXN0RGF0YS5BY2NvdW50cy5hY2NvdW50MS5hZGRyZXNzKTtcbiAgICAgIHNob3VsZC5lcXVhbChwYXJzZWRUcmFuc2FjdGlvbi5vcGVyYXRpb25zWzFdLmFjY291bnQuYWRkcmVzcywgdGVzdERhdGEuQWNjb3VudHMuYWNjb3VudDIuYWRkcmVzcyk7XG4gICAgICBzaG91bGQuZXF1YWwocGFyc2VkVHJhbnNhY3Rpb24ub3BlcmF0aW9uc1syXS5hY2NvdW50LmFkZHJlc3MsIHRlc3REYXRhLkFjY291bnRzLmFjY291bnQxLmFkZHJlc3MpO1xuICAgICAgc2hvdWxkLmVxdWFsKHBhcnNlZFRyYW5zYWN0aW9uLm9wZXJhdGlvbnNbMF0uYW1vdW50LnZhbHVlLCAnLTEwJyk7XG4gICAgICBzaG91bGQuZXF1YWwocGFyc2VkVHJhbnNhY3Rpb24uYWNjb3VudF9pZGVudGlmaWVyX3NpZ25lcnNbMF0uYWRkcmVzcywgdGVzdERhdGEuQWNjb3VudHMuYWNjb3VudDEuYWRkcmVzcyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdWZXJpZnkgYSB0cmFuc2FjdGlvbicsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHN1Y2Nlc3NmdWxseSB2ZXJpZnkgYSB0cmFuc2FjdGlvbiB3aXRoIHNpZ25hYmxlIEhleCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHVuc2lnbmVkVHhuID0gdHhCdWlsZGVyLnRyYW5zYWN0aW9uLnVuc2lnbmVkVHJhbnNhY3Rpb247XG4gICAgICB1bnNpZ25lZFR4bi5zaG91bGQuYmUuYS5TdHJpbmcoKTtcbiAgICAgIGNvbnN0IHBheWxvYWRzRGF0YSA9IHR4QnVpbGRlci50cmFuc2FjdGlvbi5wYXlsb2Fkc0RhdGE7XG4gICAgICBjb25zdCBzZXJpYWxpemVkVHhGb3JtYXQgPSB7XG4gICAgICAgIHNlcmlhbGl6ZWRUeEhleDogcGF5bG9hZHNEYXRhLFxuICAgICAgICBwdWJsaWNLZXk6IHRlc3REYXRhLkFjY291bnRzLmFjY291bnQxLnB1YmxpY0tleSxcbiAgICAgIH07XG4gICAgICBjb25zdCBzaWduYWJsZUhleCA9IHBheWxvYWRzRGF0YS5wYXlsb2Fkc1swXS5oZXhfYnl0ZXM7XG4gICAgICBjb25zdCBzZXJpYWxpemVkVHhIZXggPSBCdWZmZXIuZnJvbShKU09OLnN0cmluZ2lmeShzZXJpYWxpemVkVHhGb3JtYXQpLCAndXRmLTgnKS50b1N0cmluZygnaGV4Jyk7XG4gICAgICBjb25zdCB0eFBhcmFtcyA9IHtcbiAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6IHRlc3REYXRhLkFjY291bnRzLmFjY291bnQyLmFkZHJlc3MsXG4gICAgICAgICAgICBhbW91bnQ6ICcxMCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGJhc2Vjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhQcmVidWlsZDoge1xuICAgICAgICAgIHR4SGV4OiBzZXJpYWxpemVkVHhIZXgsXG4gICAgICAgICAgdHhJbmZvOiBzaWduYWJsZUhleCxcbiAgICAgICAgfSxcbiAgICAgICAgdHhQYXJhbXM6IHR4UGFyYW1zLFxuICAgICAgfSk7XG4gICAgICBhc3NlcnQocmVzcG9uc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzdWNjZXNzZnVsbHkgdmVyaWZ5IGEgdHJhbnNhY3Rpb24gd2l0aG91dCBzaWduYWJsZSBIZXgnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB1bnNpZ25lZFR4biA9IHR4QnVpbGRlci50cmFuc2FjdGlvbi51bnNpZ25lZFRyYW5zYWN0aW9uO1xuICAgICAgdW5zaWduZWRUeG4uc2hvdWxkLmJlLmEuU3RyaW5nKCk7XG4gICAgICBjb25zdCBwYXlsb2Fkc0RhdGEgPSB0eEJ1aWxkZXIudHJhbnNhY3Rpb24ucGF5bG9hZHNEYXRhO1xuICAgICAgY29uc3Qgc2VyaWFsaXplZFR4Rm9ybWF0ID0ge1xuICAgICAgICBzZXJpYWxpemVkVHhIZXg6IHBheWxvYWRzRGF0YSxcbiAgICAgICAgcHVibGljS2V5OiB0ZXN0RGF0YS5BY2NvdW50cy5hY2NvdW50MS5wdWJsaWNLZXksXG4gICAgICB9O1xuICAgICAgY29uc3Qgc2VyaWFsaXplZFR4SGV4ID0gQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkoc2VyaWFsaXplZFR4Rm9ybWF0KSwgJ3V0Zi04JykudG9TdHJpbmcoJ2hleCcpO1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSB7XG4gICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiB0ZXN0RGF0YS5BY2NvdW50cy5hY2NvdW50Mi5hZGRyZXNzLFxuICAgICAgICAgICAgYW1vdW50OiAnMTAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBiYXNlY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UHJlYnVpbGQ6IHtcbiAgICAgICAgICB0eEhleDogc2VyaWFsaXplZFR4SGV4LFxuICAgICAgICB9LFxuICAgICAgICB0eFBhcmFtczogdHhQYXJhbXMsXG4gICAgICB9KTtcbiAgICAgIGFzc2VydChyZXNwb25zZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdG8gdmVyaWZ5IGEgdHJhbnNhY3Rpb24gd2l0aCB3cm9uZyBzaWduYWJsZSBIZXgnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB1bnNpZ25lZFR4biA9IHR4QnVpbGRlci50cmFuc2FjdGlvbi51bnNpZ25lZFRyYW5zYWN0aW9uO1xuICAgICAgdW5zaWduZWRUeG4uc2hvdWxkLmJlLmEuU3RyaW5nKCk7XG4gICAgICBjb25zdCBwYXlsb2Fkc0RhdGEgPSB0eEJ1aWxkZXIudHJhbnNhY3Rpb24ucGF5bG9hZHNEYXRhO1xuICAgICAgY29uc3Qgc2VyaWFsaXplZFR4Rm9ybWF0ID0ge1xuICAgICAgICBzZXJpYWxpemVkVHhIZXg6IHBheWxvYWRzRGF0YSxcbiAgICAgICAgcHVibGljS2V5OiB0ZXN0RGF0YS5BY2NvdW50cy5hY2NvdW50MS5wdWJsaWNLZXksXG4gICAgICB9O1xuICAgICAgY29uc3Qgc2VyaWFsaXplZFR4SGV4ID0gQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkoc2VyaWFsaXplZFR4Rm9ybWF0KSwgJ3V0Zi04JykudG9TdHJpbmcoJ2hleCcpO1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSB7XG4gICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiB0ZXN0RGF0YS5BY2NvdW50cy5hY2NvdW50Mi5hZGRyZXNzLFxuICAgICAgICAgICAgYW1vdW50OiAnMTAnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuXG4gICAgICBjb25zdCB3cm9uZ1NpZ25hYmxlSGV4VmFsdWVzID1cbiAgICAgICAgJzBhNjk2MzJkNzI2NTcxNzU2NTczNzQ1MjNkZTNjN2M1YjQ2MTMxNTViNzRlZGUyZTU0NDkzZjZhY2JlOGJmNmQ5MTAxNTRmYmJiM2E5OGJhM2UwMDk4JztcblxuICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICB0eFByZWJ1aWxkOiB7XG4gICAgICAgICAgICB0eEhleDogc2VyaWFsaXplZFR4SGV4LFxuICAgICAgICAgICAgdHhJbmZvOiB3cm9uZ1NpZ25hYmxlSGV4VmFsdWVzLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdHhQYXJhbXM6IHR4UGFyYW1zLFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLnJlamVjdGVkV2l0aCgnZ2VuZXJhdGVkIHNpZ25hYmxlSGV4IGlzIG5vdCBlcXVhbCB0byBwYXJhbXMuc2lnbmFibGVIZXgnKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keyPair.d.ts","sourceRoot":"","sources":["../../../test/unit/keyPair.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,107 @@
|
|
|
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 keyPair_1 = require("../../src/lib/keyPair");
|
|
8
|
+
const crypto_1 = require("crypto");
|
|
9
|
+
describe('ICP KeyPair', () => {
|
|
10
|
+
describe('constructor', () => {
|
|
11
|
+
it('should generate a key pair with a random seed when no source is provided', () => {
|
|
12
|
+
const keyPair = new keyPair_1.KeyPair();
|
|
13
|
+
should_1.default.exist(keyPair);
|
|
14
|
+
const publicKey = keyPair.getKeys().pub;
|
|
15
|
+
const privateKey = keyPair.getKeys().prv;
|
|
16
|
+
should_1.default.exist(publicKey);
|
|
17
|
+
should_1.default.exist(privateKey);
|
|
18
|
+
publicKey.should.be.a.String();
|
|
19
|
+
if (privateKey) {
|
|
20
|
+
privateKey.should.be.a.String();
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
it('should generate a key pair from a given seed', () => {
|
|
24
|
+
const seed = (0, crypto_1.randomBytes)(32);
|
|
25
|
+
const keyPair = new keyPair_1.KeyPair({ seed });
|
|
26
|
+
should_1.default.exist(keyPair);
|
|
27
|
+
const publicKey = keyPair.getKeys().pub;
|
|
28
|
+
const privateKey = keyPair.getKeys().prv;
|
|
29
|
+
should_1.default.exist(publicKey);
|
|
30
|
+
should_1.default.exist(privateKey);
|
|
31
|
+
publicKey.should.be.a.String();
|
|
32
|
+
if (privateKey) {
|
|
33
|
+
privateKey.should.be.a.String();
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
it('should generate a key pair from a public key', () => {
|
|
37
|
+
const tempKeyPair = new keyPair_1.KeyPair();
|
|
38
|
+
const publicKey = tempKeyPair.getKeys().pub;
|
|
39
|
+
const keyPair = new keyPair_1.KeyPair({ pub: publicKey });
|
|
40
|
+
should_1.default.exist(keyPair);
|
|
41
|
+
should_1.default.exist(keyPair.getKeys().pub);
|
|
42
|
+
should_1.default.equal(keyPair.getKeys().pub, publicKey);
|
|
43
|
+
});
|
|
44
|
+
it('should generate different key pairs for different seeds', () => {
|
|
45
|
+
const seed1 = (0, crypto_1.randomBytes)(32);
|
|
46
|
+
const seed2 = (0, crypto_1.randomBytes)(32);
|
|
47
|
+
const keyPair1 = new keyPair_1.KeyPair({ seed: seed1 });
|
|
48
|
+
const keyPair2 = new keyPair_1.KeyPair({ seed: seed2 });
|
|
49
|
+
should_1.default.notEqual(keyPair1.getKeys().pub, keyPair2.getKeys().pub);
|
|
50
|
+
should_1.default.notEqual(keyPair1.getKeys().prv, keyPair2.getKeys().prv);
|
|
51
|
+
});
|
|
52
|
+
it('should generate the same key pair for the same seed', () => {
|
|
53
|
+
const seed = (0, crypto_1.randomBytes)(32);
|
|
54
|
+
const keyPair1 = new keyPair_1.KeyPair({ seed });
|
|
55
|
+
const keyPair2 = new keyPair_1.KeyPair({ seed });
|
|
56
|
+
should_1.default.equal(keyPair1.getKeys().pub, keyPair2.getKeys().pub);
|
|
57
|
+
should_1.default.equal(keyPair1.getKeys().prv, keyPair2.getKeys().prv);
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
describe('KeyPair getKeys()', () => {
|
|
61
|
+
it('should return valid public and private keys for a randomly generated key pair', () => {
|
|
62
|
+
const keyPair = new keyPair_1.KeyPair();
|
|
63
|
+
const keys = keyPair.getKeys();
|
|
64
|
+
should_1.default.exist(keys);
|
|
65
|
+
should_1.default.exist(keys.pub);
|
|
66
|
+
should_1.default.exist(keys.prv);
|
|
67
|
+
keys.pub.should.be.a.String();
|
|
68
|
+
keys.pub.length.should.be.greaterThan(0);
|
|
69
|
+
if (keys.prv) {
|
|
70
|
+
keys.prv.should.be.a.String();
|
|
71
|
+
keys.prv.length.should.be.greaterThan(0);
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
it('should return valid public and private keys for a key pair generated with a seed', () => {
|
|
75
|
+
const seed = (0, crypto_1.randomBytes)(32);
|
|
76
|
+
const keyPair = new keyPair_1.KeyPair({ seed });
|
|
77
|
+
const keys = keyPair.getKeys();
|
|
78
|
+
should_1.default.exist(keys);
|
|
79
|
+
should_1.default.exist(keys.pub);
|
|
80
|
+
should_1.default.exist(keys.prv);
|
|
81
|
+
keys.pub.should.be.a.String();
|
|
82
|
+
if (keys.prv) {
|
|
83
|
+
keys.prv.should.be.a.String();
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
it('should return only a public key when a key pair is generated from a public key', () => {
|
|
87
|
+
const tempKeyPair = new keyPair_1.KeyPair();
|
|
88
|
+
const publicKey = tempKeyPair.getKeys().pub;
|
|
89
|
+
const keyPair = new keyPair_1.KeyPair({ pub: publicKey });
|
|
90
|
+
const keys = keyPair.getKeys();
|
|
91
|
+
should_1.default.exist(keys);
|
|
92
|
+
should_1.default.exist(keys.pub);
|
|
93
|
+
should_1.default.equal(keys.pub, publicKey);
|
|
94
|
+
should_1.default.not.exist(keys.prv);
|
|
95
|
+
});
|
|
96
|
+
it('should generate consistent keys for the same seed', () => {
|
|
97
|
+
const seed = (0, crypto_1.randomBytes)(32);
|
|
98
|
+
const keyPair1 = new keyPair_1.KeyPair({ seed });
|
|
99
|
+
const keyPair2 = new keyPair_1.KeyPair({ seed });
|
|
100
|
+
const keys1 = keyPair1.getKeys();
|
|
101
|
+
const keys2 = keyPair2.getKeys();
|
|
102
|
+
should_1.default.equal(keys1.pub, keys2.pub);
|
|
103
|
+
should_1.default.equal(keys1.prv, keys2.prv);
|
|
104
|
+
});
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5UGFpci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rlc3QvdW5pdC9rZXlQYWlyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLG1EQUFnRDtBQUNoRCxtQ0FBcUM7QUFFckMsUUFBUSxDQUFDLGFBQWEsRUFBRSxHQUFHLEVBQUU7SUFDM0IsUUFBUSxDQUFDLGFBQWEsRUFBRSxHQUFHLEVBQUU7UUFDM0IsRUFBRSxDQUFDLDBFQUEwRSxFQUFFLEdBQUcsRUFBRTtZQUNsRixNQUFNLE9BQU8sR0FBRyxJQUFJLGlCQUFPLEVBQUUsQ0FBQztZQUM5QixnQkFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN0QixNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDO1lBQ3hDLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUM7WUFDekMsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDeEIsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDekIsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQy9CLElBQUksVUFBVSxFQUFFLENBQUM7Z0JBQ2YsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2xDLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyw4Q0FBOEMsRUFBRSxHQUFHLEVBQUU7WUFDdEQsTUFBTSxJQUFJLEdBQUcsSUFBQSxvQkFBVyxFQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzdCLE1BQU0sT0FBTyxHQUFHLElBQUksaUJBQU8sQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDdEMsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDdEIsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQztZQUN4QyxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDO1lBQ3pDLGdCQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3hCLGdCQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3pCLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUMvQixJQUFJLFVBQVUsRUFBRSxDQUFDO2dCQUNmLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNsQyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsOENBQThDLEVBQUUsR0FBRyxFQUFFO1lBQ3RELE1BQU0sV0FBVyxHQUFHLElBQUksaUJBQU8sRUFBRSxDQUFDO1lBQ2xDLE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUM7WUFDNUMsTUFBTSxPQUFPLEdBQUcsSUFBSSxpQkFBTyxDQUFDLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7WUFFaEQsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDdEIsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3BDLGdCQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDakQsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMseURBQXlELEVBQUUsR0FBRyxFQUFFO1lBQ2pFLE1BQU0sS0FBSyxHQUFHLElBQUEsb0JBQVcsRUFBQyxFQUFFLENBQUMsQ0FBQztZQUM5QixNQUFNLEtBQUssR0FBRyxJQUFBLG9CQUFXLEVBQUMsRUFBRSxDQUFDLENBQUM7WUFDOUIsTUFBTSxRQUFRLEdBQUcsSUFBSSxpQkFBTyxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDOUMsTUFBTSxRQUFRLEdBQUcsSUFBSSxpQkFBTyxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7WUFFOUMsZ0JBQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDaEUsZ0JBQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbEUsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMscURBQXFELEVBQUUsR0FBRyxFQUFFO1lBQzdELE1BQU0sSUFBSSxHQUFHLElBQUEsb0JBQVcsRUFBQyxFQUFFLENBQUMsQ0FBQztZQUM3QixNQUFNLFFBQVEsR0FBRyxJQUFJLGlCQUFPLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZDLE1BQU0sUUFBUSxHQUFHLElBQUksaUJBQU8sQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFFdkMsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDN0QsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDL0QsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxtQkFBbUIsRUFBRSxHQUFHLEVBQUU7UUFDakMsRUFBRSxDQUFDLCtFQUErRSxFQUFFLEdBQUcsRUFBRTtZQUN2RixNQUFNLE9BQU8sR0FBRyxJQUFJLGlCQUFPLEVBQUUsQ0FBQztZQUM5QixNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7WUFFL0IsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbkIsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZCLGdCQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN2QixJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3pDLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUNiLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzNDLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxrRkFBa0YsRUFBRSxHQUFHLEVBQUU7WUFDMUYsTUFBTSxJQUFJLEdBQUcsSUFBQSxvQkFBVyxFQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzdCLE1BQU0sT0FBTyxHQUFHLElBQUksaUJBQU8sQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDdEMsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBRS9CLGdCQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ25CLGdCQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN2QixnQkFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdkIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUM5QixJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDYixJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2hDLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxnRkFBZ0YsRUFBRSxHQUFHLEVBQUU7WUFDeEYsTUFBTSxXQUFXLEdBQUcsSUFBSSxpQkFBTyxFQUFFLENBQUM7WUFDbEMsTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQztZQUM1QyxNQUFNLE9BQU8sR0FBRyxJQUFJLGlCQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztZQUNoRCxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7WUFFL0IsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbkIsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZCLGdCQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDbEMsZ0JBQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM3QixDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxtREFBbUQsRUFBRSxHQUFHLEVBQUU7WUFDM0QsTUFBTSxJQUFJLEdBQUcsSUFBQSxvQkFBVyxFQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzdCLE1BQU0sUUFBUSxHQUFHLElBQUksaUJBQU8sQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDdkMsTUFBTSxRQUFRLEdBQUcsSUFBSSxpQkFBTyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUV2QyxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakMsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBRWpDLGdCQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ25DLGdCQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3JDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBzaG91bGQgZnJvbSAnc2hvdWxkJztcbmltcG9ydCB7IEtleVBhaXIgfSBmcm9tICcuLi8uLi9zcmMvbGliL2tleVBhaXInO1xuaW1wb3J0IHsgcmFuZG9tQnl0ZXMgfSBmcm9tICdjcnlwdG8nO1xuXG5kZXNjcmliZSgnSUNQIEtleVBhaXInLCAoKSA9PiB7XG4gIGRlc2NyaWJlKCdjb25zdHJ1Y3RvcicsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIGEga2V5IHBhaXIgd2l0aCBhIHJhbmRvbSBzZWVkIHdoZW4gbm8gc291cmNlIGlzIHByb3ZpZGVkJywgKCkgPT4ge1xuICAgICAgY29uc3Qga2V5UGFpciA9IG5ldyBLZXlQYWlyKCk7XG4gICAgICBzaG91bGQuZXhpc3Qoa2V5UGFpcik7XG4gICAgICBjb25zdCBwdWJsaWNLZXkgPSBrZXlQYWlyLmdldEtleXMoKS5wdWI7XG4gICAgICBjb25zdCBwcml2YXRlS2V5ID0ga2V5UGFpci5nZXRLZXlzKCkucHJ2O1xuICAgICAgc2hvdWxkLmV4aXN0KHB1YmxpY0tleSk7XG4gICAgICBzaG91bGQuZXhpc3QocHJpdmF0ZUtleSk7XG4gICAgICBwdWJsaWNLZXkuc2hvdWxkLmJlLmEuU3RyaW5nKCk7XG4gICAgICBpZiAocHJpdmF0ZUtleSkge1xuICAgICAgICBwcml2YXRlS2V5LnNob3VsZC5iZS5hLlN0cmluZygpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSBhIGtleSBwYWlyIGZyb20gYSBnaXZlbiBzZWVkJywgKCkgPT4ge1xuICAgICAgY29uc3Qgc2VlZCA9IHJhbmRvbUJ5dGVzKDMyKTtcbiAgICAgIGNvbnN0IGtleVBhaXIgPSBuZXcgS2V5UGFpcih7IHNlZWQgfSk7XG4gICAgICBzaG91bGQuZXhpc3Qoa2V5UGFpcik7XG4gICAgICBjb25zdCBwdWJsaWNLZXkgPSBrZXlQYWlyLmdldEtleXMoKS5wdWI7XG4gICAgICBjb25zdCBwcml2YXRlS2V5ID0ga2V5UGFpci5nZXRLZXlzKCkucHJ2O1xuICAgICAgc2hvdWxkLmV4aXN0KHB1YmxpY0tleSk7XG4gICAgICBzaG91bGQuZXhpc3QocHJpdmF0ZUtleSk7XG4gICAgICBwdWJsaWNLZXkuc2hvdWxkLmJlLmEuU3RyaW5nKCk7XG4gICAgICBpZiAocHJpdmF0ZUtleSkge1xuICAgICAgICBwcml2YXRlS2V5LnNob3VsZC5iZS5hLlN0cmluZygpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSBhIGtleSBwYWlyIGZyb20gYSBwdWJsaWMga2V5JywgKCkgPT4ge1xuICAgICAgY29uc3QgdGVtcEtleVBhaXIgPSBuZXcgS2V5UGFpcigpO1xuICAgICAgY29uc3QgcHVibGljS2V5ID0gdGVtcEtleVBhaXIuZ2V0S2V5cygpLnB1YjtcbiAgICAgIGNvbnN0IGtleVBhaXIgPSBuZXcgS2V5UGFpcih7IHB1YjogcHVibGljS2V5IH0pO1xuXG4gICAgICBzaG91bGQuZXhpc3Qoa2V5UGFpcik7XG4gICAgICBzaG91bGQuZXhpc3Qoa2V5UGFpci5nZXRLZXlzKCkucHViKTtcbiAgICAgIHNob3VsZC5lcXVhbChrZXlQYWlyLmdldEtleXMoKS5wdWIsIHB1YmxpY0tleSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIGRpZmZlcmVudCBrZXkgcGFpcnMgZm9yIGRpZmZlcmVudCBzZWVkcycsICgpID0+IHtcbiAgICAgIGNvbnN0IHNlZWQxID0gcmFuZG9tQnl0ZXMoMzIpO1xuICAgICAgY29uc3Qgc2VlZDIgPSByYW5kb21CeXRlcygzMik7XG4gICAgICBjb25zdCBrZXlQYWlyMSA9IG5ldyBLZXlQYWlyKHsgc2VlZDogc2VlZDEgfSk7XG4gICAgICBjb25zdCBrZXlQYWlyMiA9IG5ldyBLZXlQYWlyKHsgc2VlZDogc2VlZDIgfSk7XG5cbiAgICAgIHNob3VsZC5ub3RFcXVhbChrZXlQYWlyMS5nZXRLZXlzKCkucHViLCBrZXlQYWlyMi5nZXRLZXlzKCkucHViKTtcbiAgICAgIHNob3VsZC5ub3RFcXVhbChrZXlQYWlyMS5nZXRLZXlzKCkucHJ2LCBrZXlQYWlyMi5nZXRLZXlzKCkucHJ2KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUgdGhlIHNhbWUga2V5IHBhaXIgZm9yIHRoZSBzYW1lIHNlZWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBzZWVkID0gcmFuZG9tQnl0ZXMoMzIpO1xuICAgICAgY29uc3Qga2V5UGFpcjEgPSBuZXcgS2V5UGFpcih7IHNlZWQgfSk7XG4gICAgICBjb25zdCBrZXlQYWlyMiA9IG5ldyBLZXlQYWlyKHsgc2VlZCB9KTtcblxuICAgICAgc2hvdWxkLmVxdWFsKGtleVBhaXIxLmdldEtleXMoKS5wdWIsIGtleVBhaXIyLmdldEtleXMoKS5wdWIpO1xuICAgICAgc2hvdWxkLmVxdWFsKGtleVBhaXIxLmdldEtleXMoKS5wcnYsIGtleVBhaXIyLmdldEtleXMoKS5wcnYpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnS2V5UGFpciBnZXRLZXlzKCknLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdmFsaWQgcHVibGljIGFuZCBwcml2YXRlIGtleXMgZm9yIGEgcmFuZG9tbHkgZ2VuZXJhdGVkIGtleSBwYWlyJywgKCkgPT4ge1xuICAgICAgY29uc3Qga2V5UGFpciA9IG5ldyBLZXlQYWlyKCk7XG4gICAgICBjb25zdCBrZXlzID0ga2V5UGFpci5nZXRLZXlzKCk7XG5cbiAgICAgIHNob3VsZC5leGlzdChrZXlzKTtcbiAgICAgIHNob3VsZC5leGlzdChrZXlzLnB1Yik7XG4gICAgICBzaG91bGQuZXhpc3Qoa2V5cy5wcnYpO1xuICAgICAga2V5cy5wdWIuc2hvdWxkLmJlLmEuU3RyaW5nKCk7XG4gICAgICBrZXlzLnB1Yi5sZW5ndGguc2hvdWxkLmJlLmdyZWF0ZXJUaGFuKDApO1xuICAgICAgaWYgKGtleXMucHJ2KSB7XG4gICAgICAgIGtleXMucHJ2LnNob3VsZC5iZS5hLlN0cmluZygpO1xuICAgICAgICBrZXlzLnBydi5sZW5ndGguc2hvdWxkLmJlLmdyZWF0ZXJUaGFuKDApO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdmFsaWQgcHVibGljIGFuZCBwcml2YXRlIGtleXMgZm9yIGEga2V5IHBhaXIgZ2VuZXJhdGVkIHdpdGggYSBzZWVkJywgKCkgPT4ge1xuICAgICAgY29uc3Qgc2VlZCA9IHJhbmRvbUJ5dGVzKDMyKTtcbiAgICAgIGNvbnN0IGtleVBhaXIgPSBuZXcgS2V5UGFpcih7IHNlZWQgfSk7XG4gICAgICBjb25zdCBrZXlzID0ga2V5UGFpci5nZXRLZXlzKCk7XG5cbiAgICAgIHNob3VsZC5leGlzdChrZXlzKTtcbiAgICAgIHNob3VsZC5leGlzdChrZXlzLnB1Yik7XG4gICAgICBzaG91bGQuZXhpc3Qoa2V5cy5wcnYpO1xuICAgICAga2V5cy5wdWIuc2hvdWxkLmJlLmEuU3RyaW5nKCk7XG4gICAgICBpZiAoa2V5cy5wcnYpIHtcbiAgICAgICAga2V5cy5wcnYuc2hvdWxkLmJlLmEuU3RyaW5nKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBvbmx5IGEgcHVibGljIGtleSB3aGVuIGEga2V5IHBhaXIgaXMgZ2VuZXJhdGVkIGZyb20gYSBwdWJsaWMga2V5JywgKCkgPT4ge1xuICAgICAgY29uc3QgdGVtcEtleVBhaXIgPSBuZXcgS2V5UGFpcigpO1xuICAgICAgY29uc3QgcHVibGljS2V5ID0gdGVtcEtleVBhaXIuZ2V0S2V5cygpLnB1YjtcbiAgICAgIGNvbnN0IGtleVBhaXIgPSBuZXcgS2V5UGFpcih7IHB1YjogcHVibGljS2V5IH0pO1xuICAgICAgY29uc3Qga2V5cyA9IGtleVBhaXIuZ2V0S2V5cygpO1xuXG4gICAgICBzaG91bGQuZXhpc3Qoa2V5cyk7XG4gICAgICBzaG91bGQuZXhpc3Qoa2V5cy5wdWIpO1xuICAgICAgc2hvdWxkLmVxdWFsKGtleXMucHViLCBwdWJsaWNLZXkpO1xuICAgICAgc2hvdWxkLm5vdC5leGlzdChrZXlzLnBydik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIGNvbnNpc3RlbnQga2V5cyBmb3IgdGhlIHNhbWUgc2VlZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHNlZWQgPSByYW5kb21CeXRlcygzMik7XG4gICAgICBjb25zdCBrZXlQYWlyMSA9IG5ldyBLZXlQYWlyKHsgc2VlZCB9KTtcbiAgICAgIGNvbnN0IGtleVBhaXIyID0gbmV3IEtleVBhaXIoeyBzZWVkIH0pO1xuXG4gICAgICBjb25zdCBrZXlzMSA9IGtleVBhaXIxLmdldEtleXMoKTtcbiAgICAgIGNvbnN0IGtleXMyID0ga2V5UGFpcjIuZ2V0S2V5cygpO1xuXG4gICAgICBzaG91bGQuZXF1YWwoa2V5czEucHViLCBrZXlzMi5wdWIpO1xuICAgICAgc2hvdWxkLmVxdWFsKGtleXMxLnBydiwga2V5czIucHJ2KTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../../test/unit/transaction.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
const src_1 = require("../../src");
|
|
40
|
+
const statics_1 = require("@bitgo-beta/statics");
|
|
41
|
+
const assert_1 = __importDefault(require("assert"));
|
|
42
|
+
const should_1 = __importDefault(require("should"));
|
|
43
|
+
const utils_1 = __importDefault(require("../../src/lib/utils"));
|
|
44
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
45
|
+
const testData = __importStar(require("../resources/icp"));
|
|
46
|
+
const getBuilderFactory_1 = require("./getBuilderFactory");
|
|
47
|
+
const sinon_1 = __importDefault(require("sinon"));
|
|
48
|
+
describe('ICP Transaction', () => {
|
|
49
|
+
let tx;
|
|
50
|
+
let serializedTxHex;
|
|
51
|
+
const config = statics_1.coins.get('ticp');
|
|
52
|
+
beforeEach(() => {
|
|
53
|
+
tx = new src_1.Transaction(config);
|
|
54
|
+
const serializedTxFormat = {
|
|
55
|
+
serializedTxHex: testData.PayloadsData,
|
|
56
|
+
publicKey: testData.Accounts.account1.publicKey,
|
|
57
|
+
};
|
|
58
|
+
serializedTxHex = Buffer.from(JSON.stringify(serializedTxFormat), 'utf-8').toString('hex');
|
|
59
|
+
sinon_1.default.stub(utils_1.default, 'validateExpireTime').returns(true);
|
|
60
|
+
});
|
|
61
|
+
afterEach(() => {
|
|
62
|
+
sinon_1.default.restore();
|
|
63
|
+
});
|
|
64
|
+
it('should throw an empty transaction error', () => {
|
|
65
|
+
assert_1.default.throws(() => tx.toBroadcastFormat(), (err) => err instanceof sdk_core_1.InvalidTransactionError && err.message === 'Empty transaction', 'Expected an InvalidTransactionError with message "Empty transaction"');
|
|
66
|
+
assert_1.default.throws(() => tx.toJson(), (err) => err instanceof sdk_core_1.InvalidTransactionError && err.message === 'Empty transaction', 'Expected an InvalidTransactionError with message "Empty transaction"');
|
|
67
|
+
});
|
|
68
|
+
it('start and build a txn with builder init method', async () => {
|
|
69
|
+
const txn = new src_1.Transaction(config);
|
|
70
|
+
txn.icpTransactionData = testData.IcpTransactionData;
|
|
71
|
+
const factory = (0, getBuilderFactory_1.getBuilderFactory)('ticp');
|
|
72
|
+
const txBuilder = factory.getTransferBuilder();
|
|
73
|
+
txBuilder.initBuilder(txn);
|
|
74
|
+
await txBuilder.build();
|
|
75
|
+
const icpTransaction = txBuilder.transaction.icpTransaction;
|
|
76
|
+
const payloadsData = txBuilder.transaction.payloadsData;
|
|
77
|
+
should_1.default.equal(icpTransaction.metadata.memo, testData.IcpTransactionData.memo);
|
|
78
|
+
should_1.default.equal(icpTransaction.operations[0].account.address, testData.IcpTransactionData.senderAddress);
|
|
79
|
+
should_1.default.equal(icpTransaction.operations[1].account.address, testData.IcpTransactionData.receiverAddress);
|
|
80
|
+
should_1.default.equal(icpTransaction.operations[1].amount.value, testData.IcpTransactionData.amount);
|
|
81
|
+
should_1.default.equal(icpTransaction.operations[2].amount.value, testData.IcpTransactionData.fee);
|
|
82
|
+
should_1.default.equal(icpTransaction.public_keys[0].hex_bytes, testData.IcpTransactionData.senderPublicKeyHex);
|
|
83
|
+
payloadsData.payloads.should.be.an.Array();
|
|
84
|
+
payloadsData.payloads.length.should.equal(1);
|
|
85
|
+
});
|
|
86
|
+
it('build a json transaction from raw hex', async () => {
|
|
87
|
+
await tx.fromRawTransaction(serializedTxHex);
|
|
88
|
+
const json = tx.toJson();
|
|
89
|
+
should_1.default.equal(json.memo, testData.ParsedRawTransaction.metadata.memo);
|
|
90
|
+
should_1.default.equal(json.feeAmount, testData.ParsedRawTransaction.operations[2].amount.value);
|
|
91
|
+
should_1.default.equal(json.sender, testData.ParsedRawTransaction.operations[0].account.address);
|
|
92
|
+
should_1.default.equal(json.recipient, testData.ParsedRawTransaction.operations[1].account.address);
|
|
93
|
+
should_1.default.equal(json.senderPublicKey, testData.Accounts.account1.publicKey);
|
|
94
|
+
should_1.default.equal(json.id, testData.OnChainTransactionHash);
|
|
95
|
+
});
|
|
96
|
+
it('explain transaction', async () => {
|
|
97
|
+
await tx.fromRawTransaction(serializedTxHex);
|
|
98
|
+
const explain = tx.explainTransaction();
|
|
99
|
+
explain.outputAmount.should.equal('10');
|
|
100
|
+
explain.outputs[0].amount.should.equal('10');
|
|
101
|
+
explain.outputs[0].address.should.equal(testData.Accounts.account2.address);
|
|
102
|
+
explain.fee.fee.should.equal('-10000');
|
|
103
|
+
explain.changeAmount.should.equal('0');
|
|
104
|
+
if (explain.displayOrder !== undefined) {
|
|
105
|
+
explain.displayOrder.should.deepEqual(['id', 'outputAmount', 'changeAmount', 'outputs', 'changeOutputs', 'fee']);
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
});
|
|
109
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvdHJhbnNhY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxtQ0FBd0M7QUFDeEMsaURBQTRDO0FBQzVDLG9EQUE0QjtBQUM1QixvREFBNEI7QUFDNUIsZ0VBQXdDO0FBQ3hDLG1EQUErRDtBQUMvRCwyREFBNkM7QUFDN0MsMkRBQXdEO0FBQ3hELGtEQUEwQjtBQUUxQixRQUFRLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxFQUFFO0lBQy9CLElBQUksRUFBZSxDQUFDO0lBQ3BCLElBQUksZUFBb0IsQ0FBQztJQUN6QixNQUFNLE1BQU0sR0FBRyxlQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRWpDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7UUFDZCxFQUFFLEdBQUcsSUFBSSxpQkFBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzdCLE1BQU0sa0JBQWtCLEdBQUc7WUFDekIsZUFBZSxFQUFFLFFBQVEsQ0FBQyxZQUFZO1lBQ3RDLFNBQVMsRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxTQUFTO1NBQ2hELENBQUM7UUFDRixlQUFlLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGtCQUFrQixDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNGLGVBQUssQ0FBQyxJQUFJLENBQUMsZUFBSyxFQUFFLG9CQUFvQixDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hELENBQUMsQ0FBQyxDQUFDO0lBRUgsU0FBUyxDQUFDLEdBQUcsRUFBRTtRQUNiLGVBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNsQixDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUs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QyxDQUFDO1FBQzdDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDNUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN2QyxPQUFPLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdkMsSUFBSSxPQUFPLENBQUMsWUFBWSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3ZDLE9BQU8sQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNuSCxDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnLi4vLi4vc3JjJztcbmltcG9ydCB7IGNvaW5zIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vLi4vc3JjL2xpYi91dGlscyc7XG5pbXBvcnQgeyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvciB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCAqIGFzIHRlc3REYXRhIGZyb20gJy4uL3Jlc291cmNlcy9pY3AnO1xuaW1wb3J0IHsgZ2V0QnVpbGRlckZhY3RvcnkgfSBmcm9tICcuL2dldEJ1aWxkZXJGYWN0b3J5JztcbmltcG9ydCBzaW5vbiBmcm9tICdzaW5vbic7XG5cbmRlc2NyaWJlKCdJQ1AgVHJhbnNhY3Rpb24nLCAoKSA9PiB7XG4gIGxldCB0eDogVHJhbnNhY3Rpb247XG4gIGxldCBzZXJpYWxpemVkVHhIZXg6IGFueTtcbiAgY29uc3QgY29uZmlnID0gY29pbnMuZ2V0KCd0aWNwJyk7XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgdHggPSBuZXcgVHJhbnNhY3Rpb24oY29uZmlnKTtcbiAgICBjb25zdCBzZXJpYWxpemVkVHhGb3JtYXQgPSB7XG4gICAgICBzZXJpYWxpemVkVHhIZXg6IHRlc3REYXRhLlBheWxvYWRzRGF0YSxcbiAgICAgIHB1YmxpY0tleTogdGVzdERhdGEuQWNjb3VudHMuYWNjb3VudDEucHVibGljS2V5LFxuICAgIH07XG4gICAgc2VyaWFsaXplZFR4SGV4ID0gQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkoc2VyaWFsaXplZFR4Rm9ybWF0KSwgJ3V0Zi04JykudG9TdHJpbmcoJ2hleCcpO1xuICAgIHNpbm9uLnN0dWIodXRpbHMsICd2YWxpZGF0ZUV4cGlyZVRpbWUnKS5yZXR1cm5zKHRydWUpO1xuICB9KTtcblxuICBhZnRlckVhY2goKCkgPT4ge1xuICAgIHNpbm9uLnJlc3RvcmUoKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB0aHJvdyBhbiBlbXB0eSB0cmFuc2FjdGlvbiBlcnJvcicsICgpID0+IHtcbiAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgKCkgPT4gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKSxcbiAgICAgIChlcnIpID0+IGVyciBpbnN0YW5jZW9mIEludmFsaWRUcmFuc2FjdGlvbkVycm9yICYmIGVyci5tZXNzYWdlID09PSAnRW1wdHkgdHJhbnNhY3Rpb24nLFxuICAgICAgJ0V4cGVjdGVkIGFuIEludmFsaWRUcmFuc2FjdGlvbkVycm9yIHdpdGggbWVzc2FnZSBcIkVtcHR5IHRyYW5zYWN0aW9uXCInXG4gICAgKTtcbiAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgKCkgPT4gdHgudG9Kc29uKCksXG4gICAgICAoZXJyKSA9PiBlcnIgaW5zdGFuY2VvZiBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvciAmJiBlcnIubWVzc2FnZSA9PT0gJ0VtcHR5IHRyYW5zYWN0aW9uJyxcbiAgICAgICdFeHBlY3RlZCBhbiBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvciB3aXRoIG1lc3NhZ2UgXCJFbXB0eSB0cmFuc2FjdGlvblwiJ1xuICAgICk7XG4gIH0pO1xuXG4gIGl0KCdzdGFydCBhbmQgYnVpbGQgYSB0eG4gd2l0aCBidWlsZGVyIGluaXQgbWV0aG9kJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHR4biA9IG5ldyBUcmFuc2FjdGlvbihjb25maWcpO1xuICAgIHR4bi5pY3BUcmFuc2FjdGlvbkRhdGEgPSB0ZXN0RGF0YS5JY3BUcmFuc2FjdGlvbkRhdGE7XG4gICAgY29uc3QgZmFjdG9yeSA9IGdldEJ1aWxkZXJGYWN0b3J5KCd0aWNwJyk7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRUcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICB0eEJ1aWxkZXIuaW5pdEJ1aWxkZXIodHhuKTtcbiAgICBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcblxuICAgIGNvbnN0IGljcFRyYW5zYWN0aW9uID0gdHhCdWlsZGVyLnRyYW5zYWN0aW9uLmljcFRyYW5zYWN0aW9uO1xuICAgIGNvbnN0IHBheWxvYWRzRGF0YSA9IHR4QnVpbGRlci50cmFuc2FjdGlvbi5wYXlsb2Fkc0RhdGE7XG4gICAgc2hvdWxkLmVxdWFsKGljcFRyYW5zYWN0aW9uLm1ldGFkYXRhLm1lbW8sIHRlc3REYXRhLkljcFRyYW5zYWN0aW9uRGF0YS5tZW1vKTtcbiAgICBzaG91bGQuZXF1YWwoaWNwVHJhbnNhY3Rpb24ub3BlcmF0aW9uc1swXS5hY2NvdW50LmFkZHJlc3MsIHRlc3REYXRhLkljcFRyYW5zYWN0aW9uRGF0YS5zZW5kZXJBZGRyZXNzKTtcbiAgICBzaG91bGQuZXF1YWwoaWNwVHJhbnNhY3Rpb24ub3BlcmF0aW9uc1sxXS5hY2NvdW50LmFkZHJlc3MsIHRlc3REYXRhLkljcFRyYW5zYWN0aW9uRGF0YS5yZWNlaXZlckFkZHJlc3MpO1xuICAgIHNob3VsZC5lcXVhbChpY3BUcmFuc2FjdGlvbi5vcGVyYXRpb25zWzFdLmFtb3VudC52YWx1ZSwgdGVzdERhdGEuSWNwVHJhbnNhY3Rpb25EYXRhLmFtb3VudCk7XG4gICAgc2hvdWxkLmVxdWFsKGljcFRyYW5zYWN0aW9uLm9wZXJhdGlvbnNbMl0uYW1vdW50LnZhbHVlLCB0ZXN0RGF0YS5JY3BUcmFuc2FjdGlvbkRhdGEuZmVlKTtcbiAgICBzaG91bGQuZXF1YWwoaWNwVHJhbnNhY3Rpb24ucHVibGljX2tleXNbMF0uaGV4X2J5dGVzLCB0ZXN0RGF0YS5JY3BUcmFuc2FjdGlvbkRhdGEuc2VuZGVyUHVibGljS2V5SGV4KTtcbiAgICBwYXlsb2Fkc0RhdGEucGF5bG9hZHMuc2hvdWxkLmJlLmFuLkFycmF5KCk7XG4gICAgcGF5bG9hZHNEYXRhLnBheWxvYWRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gIH0pO1xuXG4gIGl0KCdidWlsZCBhIGpzb24gdHJhbnNhY3Rpb24gZnJvbSByYXcgaGV4JywgYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IHR4LmZyb21SYXdUcmFuc2FjdGlvbihzZXJpYWxpemVkVHhIZXgpO1xuICAgIGNvbnN0IGpzb24gPSB0eC50b0pzb24oKTtcbiAgICBzaG91bGQuZXF1YWwoanNvbi5tZW1vLCB0ZXN0RGF0YS5QYXJzZWRSYXdUcmFuc2FjdGlvbi5tZXRhZGF0YS5tZW1vKTtcbiAgICBzaG91bGQuZXF1YWwoanNvbi5mZWVBbW91bnQsIHRlc3REYXRhLlBhcnNlZFJhd1RyYW5zYWN0aW9uLm9wZXJhdGlvbnNbMl0uYW1vdW50LnZhbHVlKTtcbiAgICBzaG91bGQuZXF1YWwoanNvbi5zZW5kZXIsIHRlc3REYXRhLlBhcnNlZFJhd1RyYW5zYWN0aW9uLm9wZXJhdGlvbnNbMF0uYWNjb3VudC5hZGRyZXNzKTtcbiAgICBzaG91bGQuZXF1YWwoanNvbi5yZWNpcGllbnQsIHRlc3REYXRhLlBhcnNlZFJhd1RyYW5zYWN0aW9uLm9wZXJhdGlvbnNbMV0uYWNjb3VudC5hZGRyZXNzKTtcbiAgICBzaG91bGQuZXF1YWwoanNvbi5zZW5kZXJQdWJsaWNLZXksIHRlc3REYXRhLkFjY291bnRzLmFjY291bnQxLnB1YmxpY0tleSk7XG4gICAgc2hvdWxkLmVxdWFsKGpzb24uaWQsIHRlc3REYXRhLk9uQ2hhaW5UcmFuc2FjdGlvbkhhc2gpO1xuICB9KTtcblxuICBpdCgnZXhwbGFpbiB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICBhd2FpdCB0eC5mcm9tUmF3VHJhbnNhY3Rpb24oc2VyaWFsaXplZFR4SGV4KTtcbiAgICBjb25zdCBleHBsYWluID0gdHguZXhwbGFpblRyYW5zYWN0aW9uKCk7XG5cbiAgICBleHBsYWluLm91dHB1dEFtb3VudC5zaG91bGQuZXF1YWwoJzEwJyk7XG4gICAgZXhwbGFpbi5vdXRwdXRzWzBdLmFtb3VudC5zaG91bGQuZXF1YWwoJzEwJyk7XG4gICAgZXhwbGFpbi5vdXRwdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKHRlc3REYXRhLkFjY291bnRzLmFjY291bnQyLmFkZHJlc3MpO1xuICAgIGV4cGxhaW4uZmVlLmZlZS5zaG91bGQuZXF1YWwoJy0xMDAwMCcpO1xuICAgIGV4cGxhaW4uY2hhbmdlQW1vdW50LnNob3VsZC5lcXVhbCgnMCcpO1xuICAgIGlmIChleHBsYWluLmRpc3BsYXlPcmRlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBleHBsYWluLmRpc3BsYXlPcmRlci5zaG91bGQuZGVlcEVxdWFsKFsnaWQnLCAnb3V0cHV0QW1vdW50JywgJ2NoYW5nZUFtb3VudCcsICdvdXRwdXRzJywgJ2NoYW5nZU91dHB1dHMnLCAnZmVlJ10pO1xuICAgIH1cbiAgfSk7XG59KTtcbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transactionBuilder.d.ts","sourceRoot":"","sources":["../../../../test/unit/transactionBuilder/transactionBuilder.ts"],"names":[],"mappings":""}
|