@bitgo-beta/sdk-coin-stx 1.4.3-alpha.405 → 1.4.3-alpha.407
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/test/fixtures.d.ts +119 -0
- package/dist/test/fixtures.d.ts.map +1 -0
- package/dist/test/fixtures.js +147 -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 +144 -0
- package/dist/test/unit/resources.d.ts +97 -0
- package/dist/test/unit/resources.d.ts.map +1 -0
- package/dist/test/unit/resources.js +144 -0
- package/dist/test/unit/sip10Token.d.ts +2 -0
- package/dist/test/unit/sip10Token.d.ts.map +1 -0
- package/dist/test/unit/sip10Token.js +374 -0
- package/dist/test/unit/stx.d.ts +2 -0
- package/dist/test/unit/stx.d.ts.map +1 -0
- package/dist/test/unit/stx.js +470 -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 +83 -0
- package/dist/test/unit/transactionBuilder/contractBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/contractBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/contractBuilder.js +421 -0
- package/dist/test/unit/transactionBuilder/fungibleTokenTransferBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/fungibleTokenTransferBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/fungibleTokenTransferBuilder.js +187 -0
- package/dist/test/unit/transactionBuilder/sendmanyBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/sendmanyBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/sendmanyBuilder.js +140 -0
- package/dist/test/unit/transactionBuilder/transferBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/transferBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/transferBuilder.js +347 -0
- package/dist/test/unit/util.d.ts +2 -0
- package/dist/test/unit/util.d.ts.map +1 -0
- package/dist/test/unit/util.js +326 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +11 -8
- package/.eslintignore +0 -5
- package/.mocharc.yml +0 -8
- package/CHANGELOG.md +0 -831
|
@@ -0,0 +1,374 @@
|
|
|
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 lodash_1 = __importDefault(require("lodash"));
|
|
40
|
+
const nock_1 = __importDefault(require("nock"));
|
|
41
|
+
const sdk_api_1 = require("@bitgo-beta/sdk-api");
|
|
42
|
+
const sdk_test_1 = require("@bitgo-beta/sdk-test");
|
|
43
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
44
|
+
const src_1 = require("../../src");
|
|
45
|
+
const testData = __importStar(require("../fixtures"));
|
|
46
|
+
const assert_1 = __importDefault(require("assert"));
|
|
47
|
+
describe('Sip10Token:', function () {
|
|
48
|
+
const sip10TokenName = 'tstx:tsip6dp';
|
|
49
|
+
let bitgo;
|
|
50
|
+
let basecoin;
|
|
51
|
+
let newTxPrebuild;
|
|
52
|
+
let newTxParams;
|
|
53
|
+
let wallet;
|
|
54
|
+
const txPreBuild = {
|
|
55
|
+
txHex: testData.txForExplainFungibleTokenTransfer,
|
|
56
|
+
txInfo: {},
|
|
57
|
+
};
|
|
58
|
+
const txParams = {
|
|
59
|
+
recipients: testData.recipients,
|
|
60
|
+
};
|
|
61
|
+
const memo = {
|
|
62
|
+
type: '',
|
|
63
|
+
value: '1',
|
|
64
|
+
};
|
|
65
|
+
before(function () {
|
|
66
|
+
bitgo = sdk_test_1.TestBitGo.decorate(sdk_api_1.BitGoAPI, {
|
|
67
|
+
env: 'mock',
|
|
68
|
+
});
|
|
69
|
+
bitgo.initializeTestVars();
|
|
70
|
+
src_1.Sip10Token.createTokenConstructors().forEach(({ name, coinConstructor }) => {
|
|
71
|
+
bitgo.safeRegister(name, coinConstructor);
|
|
72
|
+
});
|
|
73
|
+
newTxPrebuild = () => {
|
|
74
|
+
return lodash_1.default.cloneDeep(txPreBuild);
|
|
75
|
+
};
|
|
76
|
+
newTxParams = () => {
|
|
77
|
+
return lodash_1.default.cloneDeep(txParams);
|
|
78
|
+
};
|
|
79
|
+
basecoin = bitgo.coin(sip10TokenName);
|
|
80
|
+
wallet = new sdk_core_1.Wallet(bitgo, basecoin, {});
|
|
81
|
+
});
|
|
82
|
+
describe('Verify Transaction', function () {
|
|
83
|
+
it('should succeed to verify transaction', async function () {
|
|
84
|
+
const txPrebuild = newTxPrebuild();
|
|
85
|
+
const txParams = newTxParams();
|
|
86
|
+
txParams.memo = memo;
|
|
87
|
+
const verification = {};
|
|
88
|
+
const isTransactionVerified = await basecoin.verifyTransaction({
|
|
89
|
+
txParams,
|
|
90
|
+
txPrebuild,
|
|
91
|
+
verification,
|
|
92
|
+
wallet,
|
|
93
|
+
});
|
|
94
|
+
isTransactionVerified.should.equal(true);
|
|
95
|
+
});
|
|
96
|
+
it('should succeed to verify transaction when recipients amount are numbers', async function () {
|
|
97
|
+
const txPrebuild = newTxPrebuild();
|
|
98
|
+
const txParamsWithNumberAmounts = newTxParams();
|
|
99
|
+
txParamsWithNumberAmounts.recipients = txParamsWithNumberAmounts.recipients.map(({ address, amount, memo, tokenName }) => {
|
|
100
|
+
return { address, amount: Number(amount), memo, tokenName };
|
|
101
|
+
});
|
|
102
|
+
txParamsWithNumberAmounts.memo = memo;
|
|
103
|
+
const verification = {};
|
|
104
|
+
const isTransactionVerified = await basecoin.verifyTransaction({
|
|
105
|
+
txParams: txParamsWithNumberAmounts,
|
|
106
|
+
txPrebuild,
|
|
107
|
+
verification,
|
|
108
|
+
wallet,
|
|
109
|
+
});
|
|
110
|
+
isTransactionVerified.should.equal(true);
|
|
111
|
+
});
|
|
112
|
+
it('should succeed to verify when memo is passed', async function () {
|
|
113
|
+
const txPrebuild = newTxPrebuild();
|
|
114
|
+
txPrebuild.txHex = testData.txForExplainFungibleTokenTransferWithMemoId10;
|
|
115
|
+
const txParams = newTxParams();
|
|
116
|
+
const verification = {};
|
|
117
|
+
txParams.memo = {
|
|
118
|
+
type: '',
|
|
119
|
+
value: '10',
|
|
120
|
+
};
|
|
121
|
+
const isTransactionVerified = await basecoin.verifyTransaction({
|
|
122
|
+
txParams: txParams,
|
|
123
|
+
txPrebuild,
|
|
124
|
+
verification,
|
|
125
|
+
wallet,
|
|
126
|
+
});
|
|
127
|
+
isTransactionVerified.should.equal(true);
|
|
128
|
+
});
|
|
129
|
+
it('should succeed to verify when memo is zero', async function () {
|
|
130
|
+
const txPrebuild = newTxPrebuild();
|
|
131
|
+
const txParams = newTxParams();
|
|
132
|
+
txPrebuild.txHex = testData.txForExplainFungibleTokenTransferWithMemoZero;
|
|
133
|
+
txParams.memo = {
|
|
134
|
+
type: '',
|
|
135
|
+
value: '0',
|
|
136
|
+
};
|
|
137
|
+
const verification = {};
|
|
138
|
+
const isTransactionVerified = await basecoin.verifyTransaction({
|
|
139
|
+
txParams: txParams,
|
|
140
|
+
txPrebuild,
|
|
141
|
+
verification,
|
|
142
|
+
wallet,
|
|
143
|
+
});
|
|
144
|
+
isTransactionVerified.should.equal(true);
|
|
145
|
+
});
|
|
146
|
+
it('should succeed to verify when memo is passed inside recipient address', async function () {
|
|
147
|
+
const txPrebuild = newTxPrebuild();
|
|
148
|
+
const txParams = newTxParams();
|
|
149
|
+
txParams.recipients[0].address = 'SN2NN1JP9AEP5BVE19RNJ6T2MP7NDGRZYST1VDF3M?memoId=10';
|
|
150
|
+
txPrebuild.txHex = testData.txForExplainFungibleTokenTransferWithMemoId10;
|
|
151
|
+
const verification = {};
|
|
152
|
+
const isTransactionVerified = await basecoin.verifyTransaction({
|
|
153
|
+
txParams: txParams,
|
|
154
|
+
txPrebuild,
|
|
155
|
+
verification,
|
|
156
|
+
wallet,
|
|
157
|
+
});
|
|
158
|
+
isTransactionVerified.should.equal(true);
|
|
159
|
+
});
|
|
160
|
+
it('should succeed to verify when memo is not passed', async function () {
|
|
161
|
+
const txPrebuild = newTxPrebuild();
|
|
162
|
+
const txParams = newTxParams();
|
|
163
|
+
txPrebuild.txHex = testData.txForExplainFungibleTokenTransferWithoutMemo;
|
|
164
|
+
const verification = {};
|
|
165
|
+
const isTransactionVerified = await basecoin.verifyTransaction({
|
|
166
|
+
txParams: txParams,
|
|
167
|
+
txPrebuild,
|
|
168
|
+
verification,
|
|
169
|
+
wallet,
|
|
170
|
+
});
|
|
171
|
+
isTransactionVerified.should.equal(true);
|
|
172
|
+
});
|
|
173
|
+
it('should fail to verify transaction with no recipients', async function () {
|
|
174
|
+
const txPrebuild = {};
|
|
175
|
+
const txParams = newTxParams();
|
|
176
|
+
txParams.recipients = [];
|
|
177
|
+
await basecoin
|
|
178
|
+
.verifyTransaction({
|
|
179
|
+
txParams,
|
|
180
|
+
txPrebuild,
|
|
181
|
+
wallet,
|
|
182
|
+
})
|
|
183
|
+
.should.rejectedWith('missing required tx prebuild property txHex');
|
|
184
|
+
});
|
|
185
|
+
it('should fail when more than 1 recipients are passed', async function () {
|
|
186
|
+
const txPrebuild = newTxPrebuild();
|
|
187
|
+
const txParams = newTxParams();
|
|
188
|
+
txParams.recipients.push({
|
|
189
|
+
address: 'SN2NN1JP9AEP5BVE19RNJ6T2MP7NDGRZYST1VDF3N',
|
|
190
|
+
amount: '10000',
|
|
191
|
+
memo: '1',
|
|
192
|
+
tokenName: 'tsip6dp-token',
|
|
193
|
+
});
|
|
194
|
+
await basecoin
|
|
195
|
+
.verifyTransaction({
|
|
196
|
+
txParams,
|
|
197
|
+
txPrebuild,
|
|
198
|
+
wallet,
|
|
199
|
+
})
|
|
200
|
+
.should.rejectedWith("tstx:tsip6dp doesn't support sending to more than 1 destination address within a single transaction. Try again, using only a single recipient.");
|
|
201
|
+
});
|
|
202
|
+
it('should fail to verify transaction with wrong address', async function () {
|
|
203
|
+
const txPrebuild = newTxPrebuild();
|
|
204
|
+
const txParams = newTxParams();
|
|
205
|
+
txParams.recipients[0].address = 'SN2NN1JP9AEP5BVE19RNJ6T2MP7NDGRZYST1VDF3N';
|
|
206
|
+
const verification = {};
|
|
207
|
+
await basecoin
|
|
208
|
+
.verifyTransaction({
|
|
209
|
+
txParams,
|
|
210
|
+
txPrebuild,
|
|
211
|
+
verification,
|
|
212
|
+
wallet,
|
|
213
|
+
})
|
|
214
|
+
.should.rejectedWith('Tx outputs does not match with expected txParams recipients');
|
|
215
|
+
});
|
|
216
|
+
it('should fail to verify transaction with wrong amount', async function () {
|
|
217
|
+
const txPrebuild = newTxPrebuild();
|
|
218
|
+
const txParams = newTxParams();
|
|
219
|
+
txParams.recipients[0].amount = '100';
|
|
220
|
+
const verification = {};
|
|
221
|
+
await basecoin
|
|
222
|
+
.verifyTransaction({
|
|
223
|
+
txParams,
|
|
224
|
+
txPrebuild,
|
|
225
|
+
verification,
|
|
226
|
+
wallet,
|
|
227
|
+
})
|
|
228
|
+
.should.rejectedWith('Tx outputs does not match with expected txParams recipients');
|
|
229
|
+
});
|
|
230
|
+
it('should fail to verify transaction with wrong memo', async function () {
|
|
231
|
+
const txPrebuild = newTxPrebuild();
|
|
232
|
+
const txParams = newTxParams();
|
|
233
|
+
txParams.recipients[0].memo = '2';
|
|
234
|
+
const verification = {};
|
|
235
|
+
await basecoin
|
|
236
|
+
.verifyTransaction({
|
|
237
|
+
txParams,
|
|
238
|
+
txPrebuild,
|
|
239
|
+
verification,
|
|
240
|
+
wallet,
|
|
241
|
+
})
|
|
242
|
+
.should.rejectedWith('Tx memo does not match with expected txParams recipient memo');
|
|
243
|
+
});
|
|
244
|
+
it('should fail to verify transaction with wrong token', async function () {
|
|
245
|
+
const txPrebuild = newTxPrebuild();
|
|
246
|
+
const txParams = newTxParams();
|
|
247
|
+
txParams.recipients[0].tokenName = 'tstx:tsip8dp';
|
|
248
|
+
const verification = {};
|
|
249
|
+
await basecoin
|
|
250
|
+
.verifyTransaction({
|
|
251
|
+
txParams,
|
|
252
|
+
txPrebuild,
|
|
253
|
+
verification,
|
|
254
|
+
wallet,
|
|
255
|
+
})
|
|
256
|
+
.should.rejectedWith('Tx outputs does not match with expected txParams recipients');
|
|
257
|
+
});
|
|
258
|
+
});
|
|
259
|
+
describe('Recover Transaction SIP10', () => {
|
|
260
|
+
before(function () {
|
|
261
|
+
nock_1.default.enableNetConnect();
|
|
262
|
+
});
|
|
263
|
+
beforeEach(function () {
|
|
264
|
+
nock_1.default.cleanAll();
|
|
265
|
+
});
|
|
266
|
+
after(function () {
|
|
267
|
+
nock_1.default.disableNetConnect();
|
|
268
|
+
});
|
|
269
|
+
it('should build a signed token recover transaction when private key data is passed', async () => {
|
|
270
|
+
const rootAddress = testData.HOT_WALLET_ROOT_ADDRESS;
|
|
271
|
+
(0, nock_1.default)(`https://api.testnet.hiro.so`)
|
|
272
|
+
.get(`/extended/v2/addresses/${rootAddress}/balances/stx`)
|
|
273
|
+
.reply(200, testData.ACCOUNT_BALANCE_RESPONSE);
|
|
274
|
+
(0, nock_1.default)('https://api.testnet.hiro.so')
|
|
275
|
+
.get(`/extended/v2/addresses/${rootAddress}/balances/ft/${testData.STX_TOKEN_ASSET_ID}`)
|
|
276
|
+
.reply(200, testData.TOKEN_BALANCE_RESPONSE);
|
|
277
|
+
(0, nock_1.default)(`https://api.testnet.hiro.so`)
|
|
278
|
+
.get(`/extended/v1/address/${rootAddress}/nonces`)
|
|
279
|
+
.reply(200, testData.ACCOUNT_NONCE_RESPONSE);
|
|
280
|
+
(0, nock_1.default)(`https://api.testnet.hiro.so`, { allowUnmocked: true })
|
|
281
|
+
.post(`/v2/fees/transaction`, testData.FEE_ESTIMATION_TOKEN_REQUEST)
|
|
282
|
+
.reply(200, testData.FEE_ESTIMATION_TOKEN_RESPONSE);
|
|
283
|
+
const recoveryOptions = {
|
|
284
|
+
backupKey: testData.HOT_WALLET_KEY_CARD_INFO.BACKUP_KEY,
|
|
285
|
+
userKey: testData.HOT_WALLET_KEY_CARD_INFO.USER_KEY,
|
|
286
|
+
rootAddress: rootAddress,
|
|
287
|
+
recoveryDestination: testData.DESTINATION_ADDRESS_WRW,
|
|
288
|
+
bitgoKey: testData.HOT_WALLET_KEY_CARD_INFO.BITGO_PUB_KEY,
|
|
289
|
+
walletPassphrase: testData.HOT_WALLET_KEY_CARD_INFO.WALLET_PASSPHRASE,
|
|
290
|
+
contractId: 'STAG18E45W613FZ3H4ZMF6QHH426EXM5QTSAVWYH.tsip6dp-token',
|
|
291
|
+
};
|
|
292
|
+
const response = await basecoin.recover(recoveryOptions);
|
|
293
|
+
response.should.have.property('txHex');
|
|
294
|
+
assert_1.default.deepEqual(response.txHex, testData.HOT_WALLET_TOKEN_RECOVERY_TX_HEX, 'tx hex not matching!');
|
|
295
|
+
});
|
|
296
|
+
it('should build an unsigned token transaction when public keys are passed', async () => {
|
|
297
|
+
const rootAddress = testData.COLD_WALLET_ROOT_ADDRESS;
|
|
298
|
+
(0, nock_1.default)(`https://api.testnet.hiro.so`)
|
|
299
|
+
.get(`/extended/v2/addresses/${rootAddress}/balances/stx`)
|
|
300
|
+
.reply(200, testData.ACCOUNT_BALANCE_RESPONSE);
|
|
301
|
+
(0, nock_1.default)('https://api.testnet.hiro.so')
|
|
302
|
+
.get(`/extended/v2/addresses/${rootAddress}/balances/ft/${testData.STX_TOKEN_ASSET_ID}`)
|
|
303
|
+
.reply(200, testData.TOKEN_BALANCE_RESPONSE);
|
|
304
|
+
(0, nock_1.default)(`https://api.testnet.hiro.so`, { allowUnmocked: true })
|
|
305
|
+
.get(`/extended/v1/address/${rootAddress}/nonces`)
|
|
306
|
+
.reply(200, testData.ACCOUNT_NONCE_RESPONSE);
|
|
307
|
+
const feeEstimateRequest = testData.FEE_ESTIMATION_TOKEN_REQUEST;
|
|
308
|
+
feeEstimateRequest.transaction_payload =
|
|
309
|
+
'021a1500a1c42f0c11bfe3893f479af18904677685be0d747369703664702d746f6b656e087472616e73666572000000040100000000000000000000000005f5e10005159f2f1aff6fa0062e1f7fa6096133e75f47a7e8f7051a1500a1c42f0c11bfe3893f479af18904677685be09';
|
|
310
|
+
(0, nock_1.default)(`https://api.testnet.hiro.so`)
|
|
311
|
+
.post(`/v2/fees/transaction`, feeEstimateRequest)
|
|
312
|
+
.reply(200, testData.FEE_ESTIMATION_TOKEN_RESPONSE);
|
|
313
|
+
const recoveryOptions = {
|
|
314
|
+
backupKey: testData.COLD_WALLET_PUBLIC_KEY_INFO.BACKUP_KEY,
|
|
315
|
+
userKey: testData.COLD_WALLET_PUBLIC_KEY_INFO.USER_KEY,
|
|
316
|
+
rootAddress: rootAddress,
|
|
317
|
+
recoveryDestination: testData.DESTINATION_ADDRESS_WRW,
|
|
318
|
+
bitgoKey: testData.COLD_WALLET_PUBLIC_KEY_INFO.BITGO_PUB_KEY,
|
|
319
|
+
contractId: 'STAG18E45W613FZ3H4ZMF6QHH426EXM5QTSAVWYH.tsip6dp-token',
|
|
320
|
+
};
|
|
321
|
+
const response = (await basecoin.recover(recoveryOptions));
|
|
322
|
+
response.should.have.property('txHex');
|
|
323
|
+
response.should.have.property('coin');
|
|
324
|
+
response.should.have.property('feeInfo');
|
|
325
|
+
assert_1.default.deepEqual(response.txHex, testData.COLD_WALLET_TOKEN_UNSIGNED_SWEEP_TX_HEX, 'tx hex not matching!');
|
|
326
|
+
assert_1.default.deepEqual(response.coin, 'tstx:tsip6dp', 'coin not matching!');
|
|
327
|
+
});
|
|
328
|
+
it('should fail with insufficient balance when native stx balance is lower than fee for sip10', async () => {
|
|
329
|
+
const rootAddress = testData.HOT_WALLET_ROOT_ADDRESS;
|
|
330
|
+
const accountBalance = JSON.parse(JSON.stringify(testData.ACCOUNT_BALANCE_RESPONSE));
|
|
331
|
+
accountBalance.balance = '100'; // set balance lower than fee
|
|
332
|
+
(0, nock_1.default)(`https://api.testnet.hiro.so`)
|
|
333
|
+
.get(`/extended/v2/addresses/${rootAddress}/balances/stx`)
|
|
334
|
+
.reply(200, accountBalance);
|
|
335
|
+
(0, nock_1.default)('https://api.testnet.hiro.so')
|
|
336
|
+
.get(`/extended/v2/addresses/${rootAddress}/balances/ft/${testData.STX_TOKEN_ASSET_ID}`)
|
|
337
|
+
.reply(200, testData.TOKEN_BALANCE_RESPONSE);
|
|
338
|
+
(0, nock_1.default)(`https://api.testnet.hiro.so`)
|
|
339
|
+
.get(`/extended/v1/address/${rootAddress}/nonces`)
|
|
340
|
+
.reply(200, testData.ACCOUNT_NONCE_RESPONSE);
|
|
341
|
+
const feeRequestBody = testData.FEE_ESTIMATION_TOKEN_REQUEST;
|
|
342
|
+
feeRequestBody.transaction_payload =
|
|
343
|
+
'021a1500a1c42f0c11bfe3893f479af18904677685be0d747369703664702d746f6b656e087472616e73666572000000040100000000000000000000000005f5e100051549857eb4b6dd4fee08c3ec04e3d0ed04ef67d324051a1500a1c42f0c11bfe3893f479af18904677685be09';
|
|
344
|
+
(0, nock_1.default)(`https://api.testnet.hiro.so`, { allowUnmocked: true })
|
|
345
|
+
.post(`/v2/fees/transaction`, feeRequestBody)
|
|
346
|
+
.reply(200, testData.FEE_ESTIMATION_TOKEN_RESPONSE);
|
|
347
|
+
const recoveryOptions = {
|
|
348
|
+
backupKey: testData.HOT_WALLET_KEY_CARD_INFO.BACKUP_KEY,
|
|
349
|
+
userKey: testData.HOT_WALLET_KEY_CARD_INFO.USER_KEY,
|
|
350
|
+
rootAddress: rootAddress,
|
|
351
|
+
recoveryDestination: testData.DESTINATION_ADDRESS_WRW,
|
|
352
|
+
bitgoKey: testData.HOT_WALLET_KEY_CARD_INFO.BITGO_PUB_KEY,
|
|
353
|
+
walletPassphrase: testData.HOT_WALLET_KEY_CARD_INFO.WALLET_PASSPHRASE,
|
|
354
|
+
contractId: 'STAG18E45W613FZ3H4ZMF6QHH426EXM5QTSAVWYH.tsip6dp-token',
|
|
355
|
+
};
|
|
356
|
+
await basecoin.recover(recoveryOptions).should.rejectedWith('insufficient balance to build the transaction');
|
|
357
|
+
});
|
|
358
|
+
it('should fail when only contract address is passed', async () => {
|
|
359
|
+
const recoveryOptions = {
|
|
360
|
+
backupKey: testData.HOT_WALLET_KEY_CARD_INFO.BACKUP_KEY,
|
|
361
|
+
userKey: testData.HOT_WALLET_KEY_CARD_INFO.USER_KEY,
|
|
362
|
+
rootAddress: testData.HOT_WALLET_ROOT_ADDRESS,
|
|
363
|
+
recoveryDestination: testData.DESTINATION_ADDRESS_WRW,
|
|
364
|
+
bitgoKey: testData.HOT_WALLET_KEY_CARD_INFO.BITGO_PUB_KEY,
|
|
365
|
+
walletPassphrase: testData.HOT_WALLET_KEY_CARD_INFO.WALLET_PASSPHRASE,
|
|
366
|
+
contractId: 'STAG18E45W613FZ3H4ZMF6QHH426EXM5QTSAVWYH',
|
|
367
|
+
};
|
|
368
|
+
await basecoin
|
|
369
|
+
.recover(recoveryOptions)
|
|
370
|
+
.should.rejectedWith('invalid contract id, please provide it in the form (contractAddress.contractName)');
|
|
371
|
+
});
|
|
372
|
+
});
|
|
373
|
+
});
|
|
374
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lwMTBUb2tlbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rlc3QvdW5pdC9zaXAxMFRva2VuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsb0RBQXVCO0FBQ3ZCLGdEQUF3QjtBQUN4QixpREFBK0M7QUFDL0MsbURBQStEO0FBQy9ELG1EQUEyRTtBQUUzRSxtQ0FBdUM7QUFDdkMsc0RBQXdDO0FBRXhDLG9EQUE0QjtBQUU1QixRQUFRLENBQUMsYUFBYSxFQUFFO0lBQ3RCLE1BQU0sY0FBYyxHQUFHLGNBQWMsQ0FBQztJQUN0QyxJQUFJLEtBQW1CLENBQUM7SUFDeEIsSUFBSSxRQUFvQixDQUFDO0lBQ3pCLElBQUksYUFBdUUsQ0FBQztJQUM1RSxJQUFJLFdBQXVFLENBQUM7SUFDNUUsSUFBSSxNQUFjLENBQUM7SUFFbkIsTUFBTSxVQUFVLEdBQUc7UUFDakIsS0FBSyxFQUFFLFFBQVEsQ0FBQyxpQ0FBaUM7UUFDakQsTUFBTSxFQUFFLEVBQUU7S0FDWCxDQUFDO0lBRUYsTUFBTSxRQUFRLEdBQUc7UUFDZixVQUFVLEVBQUUsUUFBUSxDQUFDLFVBQVU7S0FDaEMsQ0FBQztJQUVGLE1BQU0sSUFBSSxHQUFHO1FBQ1gsSUFBSSxFQUFFLEVBQUU7UUFDUixLQUFLLEVBQUUsR0FBRztLQUNYLENBQUM7SUFFRixNQUFNLENBQUM7UUFDTCxLQUFLLEdBQUcsb0JBQVMsQ0FBQyxRQUFRLENBQUMsa0JBQVEsRUFBRTtZQUNuQyxHQUFHLEVBQUUsTUFBTTtTQUNaLENBQUMsQ0FBQztRQUNILEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzNCLGdCQUFVLENBQUMsdUJBQXVCLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsRUFBRSxFQUFFO1lBQ3pFLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLGVBQWUs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UUFBUSxFQUFFLFFBQVEsQ0FBQyx3QkFBd0IsQ0FBQyxhQUFhO2dCQUN6RCxnQkFBZ0IsRUFBRSxRQUFRLENBQUMsd0JBQXdCLENBQUMsaUJBQWlCO2dCQUNyRSxVQUFVLEVBQUUsd0RBQXdEO2FBQ3JFLENBQUM7WUFDRixNQUFNLFFBQVEsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDO1FBQy9HLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGtEQUFrRCxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ2hFLE1BQU0sZUFBZSxHQUFvQjtnQkFDdkMsU0FBUyxFQUFFLFFBQVEsQ0FBQyx3QkFBd0IsQ0FBQyxVQUFVO2dCQUN2RCxPQUFPLEVBQUUsUUFBUSxDQUFDLHdCQUF3QixDQUFDLFFBQVE7Z0JBQ25ELFdBQVcsRUFBRSxRQUFRLENBQUMsdUJBQXVCO2dCQUM3QyxtQkFBbUIsRUFBRSxRQUFRLENBQUMsdUJBQXVCO2dCQUNyRCxRQUFRLEVBQUUsUUFBUSxDQUFDLHdCQUF3QixDQUFDLGFBQWE7Z0JBQ3pELGdCQUFnQixFQUFFLFFBQVEsQ0FBQyx3QkFBd0IsQ0FBQyxpQkFBaUI7Z0JBQ3JFLFVBQVUsRUFBRSwwQ0FBMEM7YUFDdkQsQ0FBQztZQUNGLE1BQU0sUUFBUTtpQkFDWCxPQUFPLENBQUMsZUFBZSxDQUFDO2lCQUN4QixNQUFNLENBQUMsWUFBWSxDQUFDLG1GQUFtRixDQUFDLENBQUM7UUFDOUcsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBub2NrIGZyb20gJ25vY2snO1xuaW1wb3J0IHsgQml0R29BUEkgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstYXBpJztcbmltcG9ydCB7IFRlc3RCaXRHbywgVGVzdEJpdEdvQVBJIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLXRlc3QnO1xuaW1wb3J0IHsgSVRyYW5zYWN0aW9uUmVjaXBpZW50LCBXYWxsZXQsIE1lbW8gfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5cbmltcG9ydCB7IFNpcDEwVG9rZW4gfSBmcm9tICcuLi8uLi9zcmMnO1xuaW1wb3J0ICogYXMgdGVzdERhdGEgZnJvbSAnLi4vZml4dHVyZXMnO1xuaW1wb3J0IHsgUmVjb3ZlcnlJbmZvLCBSZWNvdmVyeU9wdGlvbnMsIFJlY292ZXJ5VHJhbnNhY3Rpb24gfSBmcm9tICcuLi8uLi9zcmMvbGliL2lmYWNlJztcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuZGVzY3JpYmUoJ1NpcDEwVG9rZW46JywgZnVuY3Rpb24gKCkge1xuICBjb25zdCBzaXAxMFRva2VuTmFtZSA9ICd0c3R4OnRzaXA2ZHAnO1xuICBsZXQgYml0Z286IFRlc3RCaXRHb0FQSTtcbiAgbGV0IGJhc2Vjb2luOiBTaXAxMFRva2VuO1xuICBsZXQgbmV3VHhQcmVidWlsZDogKCkgPT4geyB0eEhleDogc3RyaW5nOyB0eEluZm86IFJlY29yZDxzdHJpbmcsIHVua25vd24+IH07XG4gIGxldCBuZXdUeFBhcmFtczogKCkgPT4geyByZWNpcGllbnRzOiBJVHJhbnNhY3Rpb25SZWNpcGllbnRbXTsgbWVtbz86IE1lbW8gfTtcbiAgbGV0IHdhbGxldDogV2FsbGV0O1xuXG4gIGNvbnN0IHR4UHJlQnVpbGQgPSB7XG4gICAgdHhIZXg6IHRlc3REYXRhLnR4Rm9yRXhwbGFpbkZ1bmdpYmxlVG9rZW5UcmFuc2ZlcixcbiAgICB0eEluZm86IHt9LFxuICB9O1xuXG4gIGNvbnN0IHR4UGFyYW1zID0ge1xuICAgIHJlY2lwaWVudHM6IHRlc3REYXRhLnJlY2lwaWVudHMsXG4gIH07XG5cbiAgY29uc3QgbWVtbyA9IHtcbiAgICB0eXBlOiAnJyxcbiAgICB2YWx1ZTogJzEnLFxuICB9O1xuXG4gIGJlZm9yZShmdW5jdGlvbiAoKSB7XG4gICAgYml0Z28gPSBUZXN0Qml0R28uZGVjb3JhdGUoQml0R29BUEksIHtcbiAgICAgIGVudjogJ21vY2snLFxuICAgIH0pO1xuICAgIGJpdGdvLmluaXRpYWxpemVUZXN0VmFycygpO1xuICAgIFNpcDEwVG9rZW4uY3JlYXRlVG9rZW5Db25zdHJ1Y3RvcnMoKS5mb3JFYWNoKCh7IG5hbWUsIGNvaW5Db25zdHJ1Y3RvciB9KSA9PiB7XG4gICAgICBiaXRnby5zYWZlUmVnaXN0ZXIobmFtZSwgY29pbkNvbnN0cnVjdG9yKTtcbiAgICB9KTtcbiAgICBuZXdUeFByZWJ1aWxkID0gKCkgPT4ge1xuICAgICAgcmV0dXJuIF8uY2xvbmVEZWVwKHR4UHJlQnVpbGQpO1xuICAgIH07XG4gICAgbmV3VHhQYXJhbXMgPSAoKSA9PiB7XG4gICAgICByZXR1cm4gXy5jbG9uZURlZXAodHhQYXJhbXMpO1xuICAgIH07XG4gICAgYmFzZWNvaW4gPSBiaXRnby5jb2luKHNpcDEwVG9rZW5OYW1lKSBhcyBTaXAxMFRva2VuO1xuICAgIHdhbGxldCA9IG5ldyBXYWxsZXQoYml0Z28sIGJhc2Vjb2luLCB7fSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdWZXJpZnkgVHJhbnNhY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBzdWNjZWVkIHRvIHZlcmlmeSB0cmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4UHJlYnVpbGQgPSBuZXdUeFByZWJ1aWxkKCk7XG4gICAgICBjb25zdCB0eFBhcmFtcyA9IG5ld1R4UGFyYW1zKCk7XG4gICAgICB0eFBhcmFtcy5tZW1vID0gbWVtbztcbiAgICAgIGNvbnN0IHZlcmlmaWNhdGlvbiA9IHt9O1xuICAgICAgY29uc3QgaXNUcmFuc2FjdGlvblZlcmlmaWVkID0gYXdhaXQgYmFzZWNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICB0eFBhcmFtcyxcbiAgICAgICAgdHhQcmVidWlsZCxcbiAgICAgICAgdmVyaWZpY2F0aW9uLFxuICAgICAgICB3YWxsZXQsXG4gICAgICB9KTtcbiAgICAgIGlzVHJhbnNhY3Rpb25WZXJpZmllZC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHN1Y2NlZWQgdG8gdmVyaWZ5IHRyYW5zYWN0aW9uIHdoZW4gcmVjaXBpZW50cyBhbW91bnQgYXJlIG51bWJlcnMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eFByZWJ1aWxkID0gbmV3VHhQcmVidWlsZCgpO1xuICAgICAgY29uc3QgdHhQYXJhbXNXaXRoTnVtYmVyQW1vdW50cyA9IG5ld1R4UGFyYW1zKCk7XG4gICAgICB0eFBhcmFtc1dpdGhOdW1iZXJBbW91bnRzLnJlY2lwaWVudHMgPSB0eFBhcmFtc1dpdGhOdW1iZXJBbW91bnRzLnJlY2lwaWVudHMubWFwKFxuICAgICAgICAoeyBhZGRyZXNzLCBhbW91bnQsIG1lbW8sIHRva2VuTmFtZSB9KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHsgYWRkcmVzcywgYW1vdW50OiBOdW1iZXIoYW1vdW50KSwgbWVtbywgdG9rZW5OYW1lIH07XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgICB0eFBhcmFtc1dpdGhOdW1iZXJBbW91bnRzLm1lbW8gPSBtZW1vO1xuXG4gICAgICBjb25zdCB2ZXJpZmljYXRpb24gPSB7fTtcbiAgICAgIGNvbnN0IGlzVHJhbnNhY3Rpb25WZXJpZmllZCA9IGF3YWl0IGJhc2Vjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhQYXJhbXM6IHR4UGFyYW1zV2l0aE51bWJlckFtb3VudHMsXG4gICAgICAgIHR4UHJlYnVpbGQsXG4gICAgICAgIHZlcmlmaWNhdGlvbixcbiAgICAgICAgd2FsbGV0LFxuICAgICAgfSk7XG4gICAgICBpc1RyYW5zYWN0aW9uVmVyaWZpZWQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzdWNjZWVkIHRvIHZlcmlmeSB3aGVuIG1lbW8gaXMgcGFzc2VkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhQcmVidWlsZCA9IG5ld1R4UHJlYnVpbGQoKTtcbiAgICAgIHR4UHJlYnVpbGQudHhIZXggPSB0ZXN0RGF0YS50eEZvckV4cGxhaW5GdW5naWJsZVRva2VuVHJhbnNmZXJXaXRoTWVtb0lkMTA7XG4gICAgICBjb25zdCB0eFBhcmFtcyA9IG5ld1R4UGFyYW1zKCk7XG4gICAgICBjb25zdCB2ZXJpZmljYXRpb24gPSB7fTtcbiAgICAgIHR4UGFyYW1zLm1lbW8gPSB7XG4gICAgICAgIHR5cGU6ICcnLFxuICAgICAgICB2YWx1ZTogJzEwJyxcbiAgICAgIH07XG4gICAgICBjb25zdCBpc1RyYW5zYWN0aW9uVmVyaWZpZWQgPSBhd2FpdCBiYXNlY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UGFyYW1zOiB0eFBhcmFtcyxcbiAgICAgICAgdHhQcmVidWlsZCxcbiAgICAgICAgdmVyaWZpY2F0aW9uLFxuICAgICAgICB3YWxsZXQsXG4gICAgICB9KTtcbiAgICAgIGlzVHJhbnNhY3Rpb25WZXJpZmllZC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHN1Y2NlZWQgdG8gdmVyaWZ5IHdoZW4gbWVtbyBpcyB6ZXJvJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhQcmVidWlsZCA9IG5ld1R4UHJlYnVpbGQoKTtcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0gbmV3VHhQYXJhbXMoKTtcbiAgICAgIHR4UHJlYnVpbGQudHhIZXggPSB0ZXN0RGF0YS50eEZvckV4cGxhaW5GdW5naWJsZVRva2VuVHJhbnNmZXJXaXRoTWVtb1plcm87XG4gICAgICB0eFBhcmFtcy5tZW1vID0ge1xuICAgICAgICB0eXBlOiAnJyxcbiAgICAgICAgdmFsdWU6ICcwJyxcbiAgICAgIH07XG4gICAgICBjb25zdCB2ZXJpZmljYXRpb24gPSB7fTtcbiAgICAgIGNvbnN0IGlzVHJhbnNhY3Rpb25WZXJpZmllZCA9IGF3YWl0IGJhc2Vjb2luLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhQYXJhbXM6IHR4UGFyYW1zLFxuICAgICAgICB0eFByZWJ1aWxkLFxuICAgICAgICB2ZXJpZmljYXRpb24sXG4gICAgICAgIHdhbGxldCxcbiAgICAgIH0pO1xuICAgICAgaXNUcmFuc2FjdGlvblZlcmlmaWVkLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc3VjY2VlZCB0byB2ZXJpZnkgd2hlbiBtZW1vIGlzIHBhc3NlZCBpbnNpZGUgcmVjaXBpZW50IGFkZHJlc3MnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eFByZWJ1aWxkID0gbmV3VHhQcmVidWlsZCgpO1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSBuZXdUeFBhcmFtcygpO1xuICAgICAgdHhQYXJhbXMucmVjaXBpZW50c1swXS5hZGRyZXNzID0gJ1NOMk5OMUpQOUFFUDVCVkUxOVJOSjZUMk1QN05ER1JaWVNUMVZERjNNP21lbW9JZD0xMCc7XG4gICAgICB0eFByZWJ1aWxkLnR4SGV4ID0gdGVzdERhdGEudHhGb3JFeHBsYWluRnVuZ2libGVUb2tlblRyYW5zZmVyV2l0aE1lbW9JZDEwO1xuICAgICAgY29uc3QgdmVyaWZpY2F0aW9uID0ge307XG4gICAgICBjb25zdCBpc1RyYW5zYWN0aW9uVmVyaWZpZWQgPSBhd2FpdCBiYXNlY29pbi52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UGFyYW1zOiB0eFBhcmFtcyxcbiAgICAgICAgdHhQcmVidWlsZCxcbiAgICAgICAgdmVyaWZpY2F0aW9uLFxuICAgICAgICB3YWxsZXQsXG4gICAgICB9KTtcbiAgICAgIGlzVHJhbnNhY3Rpb25WZXJpZmllZC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHN1Y2NlZWQgdG8gdmVyaWZ5IHdoZW4gbWVtbyBpcyBub3QgcGFzc2VkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhQcmVidWlsZCA9IG5ld1R4UHJlYnVpbGQoKTtcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0gbmV3VHhQYXJhbXMoKTtcbiAgICAgIHR4UHJlYnVpbGQudHhIZXggPSB0ZXN0RGF0YS50eEZvckV4cGxhaW5GdW5naWJsZVRva2VuVHJhbnNmZXJXaXRob3V0TWVtbztcbiAgICAgIGNvbnN0IHZlcmlmaWNhdGlvbiA9IHt9O1xuICAgICAgY29uc3QgaXNUcmFuc2FjdGlvblZlcmlmaWVkID0gYXdhaXQgYmFzZWNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICB0eFBhcmFtczogdHhQYXJhbXMsXG4gICAgICAgIHR4UHJlYnVpbGQsXG4gICAgICAgIHZlcmlmaWNhdGlvbixcbiAgICAgICAgd2FsbGV0LFxuICAgICAgfSk7XG4gICAgICBpc1RyYW5zYWN0aW9uVmVyaWZpZWQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRvIHZlcmlmeSB0cmFuc2FjdGlvbiB3aXRoIG5vIHJlY2lwaWVudHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eFByZWJ1aWxkID0ge307XG4gICAgICBjb25zdCB0eFBhcmFtcyA9IG5ld1R4UGFyYW1zKCk7XG4gICAgICB0eFBhcmFtcy5yZWNpcGllbnRzID0gW107XG4gICAgICBhd2FpdCBiYXNlY29pblxuICAgICAgICAudmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHR4UGFyYW1zLFxuICAgICAgICAgIHR4UHJlYnVpbGQsXG4gICAgICAgICAgd2FsbGV0LFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLnJlamVjdGVkV2l0aCgnbWlzc2luZyByZXF1aXJlZCB0eCBwcmVidWlsZCBwcm9wZXJ0eSB0eEhleCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHdoZW4gbW9yZSB0aGFuIDEgcmVjaXBpZW50cyBhcmUgcGFzc2VkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhQcmVidWlsZCA9IG5ld1R4UHJlYnVpbGQoKTtcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0gbmV3VHhQYXJhbXMoKTtcbiAgICAgIHR4UGFyYW1zLnJlY2lwaWVudHMucHVzaCh7XG4gICAgICAgIGFkZHJlc3M6ICdTTjJOTjFKUDlBRVA1QlZFMTlSTko2VDJNUDdOREdSWllTVDFWREYzTicsXG4gICAgICAgIGFtb3VudDogJzEwMDAwJyxcbiAgICAgICAgbWVtbzogJzEnLFxuICAgICAgICB0b2tlbk5hbWU6ICd0c2lwNmRwLXRva2VuJyxcbiAgICAgIH0pO1xuICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICB0eFBhcmFtcyxcbiAgICAgICAgICB0eFByZWJ1aWxkLFxuICAgICAgICAgIHdhbGxldCxcbiAgICAgICAgfSlcbiAgICAgICAgLnNob3VsZC5yZWplY3RlZFdpdGgoXG4gICAgICAgICAgXCJ0c3R4OnRzaXA2ZHAgZG9lc24ndCBzdXBwb3J0IHNlbmRpbmcgdG8gbW9yZSB0aGFuIDEgZGVzdGluYXRpb24gYWRkcmVzcyB3aXRoaW4gYSBzaW5nbGUgdHJhbnNhY3Rpb24uIFRyeSBhZ2FpbiwgdXNpbmcgb25seSBhIHNpbmdsZSByZWNpcGllbnQuXCJcbiAgICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB0byB2ZXJpZnkgdHJhbnNhY3Rpb24gd2l0aCB3cm9uZyBhZGRyZXNzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhQcmVidWlsZCA9IG5ld1R4UHJlYnVpbGQoKTtcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0gbmV3VHhQYXJhbXMoKTtcbiAgICAgIHR4UGFyYW1zLnJlY2lwaWVudHNbMF0uYWRkcmVzcyA9ICdTTjJOTjFKUDlBRVA1QlZFMTlSTko2VDJNUDdOREdSWllTVDFWREYzTic7XG4gICAgICBjb25zdCB2ZXJpZmljYXRpb24gPSB7fTtcbiAgICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhQYXJhbXMsXG4gICAgICAgICAgdHhQcmVidWlsZCxcbiAgICAgICAgICB2ZXJpZmljYXRpb24sXG4gICAgICAgICAgd2FsbGV0LFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLnJlamVjdGVkV2l0aCgnVHggb3V0cHV0cyBkb2VzIG5vdCBtYXRjaCB3aXRoIGV4cGVjdGVkIHR4UGFyYW1zIHJlY2lwaWVudHMnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB0byB2ZXJpZnkgdHJhbnNhY3Rpb24gd2l0aCB3cm9uZyBhbW91bnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eFByZWJ1aWxkID0gbmV3VHhQcmVidWlsZCgpO1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSBuZXdUeFBhcmFtcygpO1xuICAgICAgdHhQYXJhbXMucmVjaXBpZW50c1swXS5hbW91bnQgPSAnMTAwJztcbiAgICAgIGNvbnN0IHZlcmlmaWNhdGlvbiA9IHt9O1xuICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgICB0eFBhcmFtcyxcbiAgICAgICAgICB0eFByZWJ1aWxkLFxuICAgICAgICAgIHZlcmlmaWNhdGlvbixcbiAgICAgICAgICB3YWxsZXQsXG4gICAgICAgIH0pXG4gICAgICAgIC5zaG91bGQucmVqZWN0ZWRXaXRoKCdUeCBvdXRwdXRzIGRvZXMgbm90IG1hdGNoIHdpdGggZXhwZWN0ZWQgdHhQYXJhbXMgcmVjaXBpZW50cycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRvIHZlcmlmeSB0cmFuc2FjdGlvbiB3aXRoIHdyb25nIG1lbW8nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eFByZWJ1aWxkID0gbmV3VHhQcmVidWlsZCgpO1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSBuZXdUeFBhcmFtcygpO1xuICAgICAgdHhQYXJhbXMucmVjaXBpZW50c1swXS5tZW1vID0gJzInO1xuICAgICAgY29uc3QgdmVyaWZpY2F0aW9uID0ge307XG4gICAgICBhd2FpdCBiYXNlY29pblxuICAgICAgICAudmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHR4UGFyYW1zLFxuICAgICAgICAgIHR4UHJlYnVpbGQsXG4gICAgICAgICAgdmVyaWZpY2F0aW9uLFxuICAgICAgICAgIHdhbGxldCxcbiAgICAgICAgfSlcbiAgICAgICAgLnNob3VsZC5yZWplY3RlZFdpdGgoJ1R4IG1lbW8gZG9lcyBub3QgbWF0Y2ggd2l0aCBleHBlY3RlZCB0eFBhcmFtcyByZWNpcGllbnQgbWVtbycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRvIHZlcmlmeSB0cmFuc2FjdGlvbiB3aXRoIHdyb25nIHRva2VuJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhQcmVidWlsZCA9IG5ld1R4UHJlYnVpbGQoKTtcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0gbmV3VHhQYXJhbXMoKTtcbiAgICAgIHR4UGFyYW1zLnJlY2lwaWVudHNbMF0udG9rZW5OYW1lID0gJ3RzdHg6dHNpcDhkcCc7XG4gICAgICBjb25zdCB2ZXJpZmljYXRpb24gPSB7fTtcbiAgICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhQYXJhbXMsXG4gICAgICAgICAgdHhQcmVidWlsZCxcbiAgICAgICAgICB2ZXJpZmljYXRpb24sXG4gICAgICAgICAgd2FsbGV0LFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLnJlamVjdGVkV2l0aCgnVHggb3V0cHV0cyBkb2VzIG5vdCBtYXRjaCB3aXRoIGV4cGVjdGVkIHR4UGFyYW1zIHJlY2lwaWVudHMnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1JlY292ZXIgVHJhbnNhY3Rpb24gU0lQMTAnLCAoKSA9PiB7XG4gICAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vY2suZW5hYmxlTmV0Q29ubmVjdCgpO1xuICAgIH0pO1xuICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgbm9jay5jbGVhbkFsbCgpO1xuICAgIH0pO1xuICAgIGFmdGVyKGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vY2suZGlzYWJsZU5ldENvbm5lY3QoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYnVpbGQgYSBzaWduZWQgdG9rZW4gcmVjb3ZlciB0cmFuc2FjdGlvbiB3aGVuIHByaXZhdGUga2V5IGRhdGEgaXMgcGFzc2VkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3Qgcm9vdEFkZHJlc3MgPSB0ZXN0RGF0YS5IT1RfV0FMTEVUX1JPT1RfQUREUkVTUztcbiAgICAgIG5vY2soYGh0dHBzOi8vYXBpLnRlc3RuZXQuaGlyby5zb2ApXG4gICAgICAgIC5nZXQoYC9leHRlbmRlZC92Mi9hZGRyZXNzZXMvJHtyb290QWRkcmVzc30vYmFsYW5jZXMvc3R4YClcbiAgICAgICAgLnJlcGx5KDIwMCwgdGVzdERhdGEuQUNDT1VOVF9CQUxBTkNFX1JFU1BPTlNFKTtcbiAgICAgIG5vY2soJ2h0dHBzOi8vYXBpLnRlc3RuZXQuaGlyby5zbycpXG4gICAgICAgIC5nZXQoYC9leHRlbmRlZC92Mi9hZGRyZXNzZXMvJHtyb290QWRkcmVzc30vYmFsYW5jZXMvZnQvJHt0ZXN0RGF0YS5TVFhfVE9LRU5fQVNTRVRfSUR9YClcbiAgICAgICAgLnJlcGx5KDIwMCwgdGVzdERhdGEuVE9LRU5fQkFMQU5DRV9SRVNQT05TRSk7XG4gICAgICBub2NrKGBodHRwczovL2FwaS50ZXN0bmV0Lmhpcm8uc29gKVxuICAgICAgICAuZ2V0KGAvZXh0ZW5kZWQvdjEvYWRkcmVzcy8ke3Jvb3RBZGRyZXNzfS9ub25jZXNgKVxuICAgICAgICAucmVwbHkoMjAwLCB0ZXN0RGF0YS5BQ0NPVU5UX05PTkNFX1JFU1BPTlNFKTtcbiAgICAgIG5vY2soYGh0dHBzOi8vYXBpLnRlc3RuZXQuaGlyby5zb2AsIHsgYWxsb3dVbm1vY2tlZDogdHJ1ZSB9KVxuICAgICAgICAucG9zdChgL3YyL2ZlZXMvdHJhbnNhY3Rpb25gLCB0ZXN0RGF0YS5GRUVfRVNUSU1BVElPTl9UT0tFTl9SRVFVRVNUKVxuICAgICAgICAucmVwbHkoMjAwLCB0ZXN0RGF0YS5GRUVfRVNUSU1BVElPTl9UT0tFTl9SRVNQT05TRSk7XG5cbiAgICAgIGNvbnN0IHJlY292ZXJ5T3B0aW9uczogUmVjb3ZlcnlPcHRpb25zID0ge1xuICAgICAgICBiYWNrdXBLZXk6IHRlc3REYXRhLkhPVF9XQUxMRVRfS0VZX0NBUkRfSU5GTy5CQUNLVVBfS0VZLFxuICAgICAgICB1c2VyS2V5OiB0ZXN0RGF0YS5IT1RfV0FMTEVUX0tFWV9DQVJEX0lORk8uVVNFUl9LRVksXG4gICAgICAgIHJvb3RBZGRyZXNzOiByb290QWRkcmVzcyxcbiAgICAgICAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogdGVzdERhdGEuREVTVElOQVRJT05fQUREUkVTU19XUlcsXG4gICAgICAgIGJpdGdvS2V5OiB0ZXN0RGF0YS5IT1RfV0FMTEVUX0tFWV9DQVJEX0lORk8uQklUR09fUFVCX0tFWSxcbiAgICAgICAgd2FsbGV0UGFzc3BocmFzZTogdGVzdERhdGEuSE9UX1dBTExFVF9LRVlfQ0FSRF9JTkZPLldBTExFVF9QQVNTUEhSQVNFLFxuICAgICAgICBjb250cmFjdElkOiAnU1RBRzE4RTQ1VzYxM0ZaM0g0Wk1GNlFISDQyNkVYTTVRVFNBVldZSC50c2lwNmRwLXRva2VuJyxcbiAgICAgIH07XG4gICAgICBjb25zdCByZXNwb25zZTogUmVjb3ZlcnlUcmFuc2FjdGlvbiA9IGF3YWl0IGJhc2Vjb2luLnJlY292ZXIocmVjb3ZlcnlPcHRpb25zKTtcbiAgICAgIHJlc3BvbnNlLnNob3VsZC5oYXZlLnByb3BlcnR5KCd0eEhleCcpO1xuICAgICAgYXNzZXJ0LmRlZXBFcXVhbChyZXNwb25zZS50eEhleCwgdGVzdERhdGEuSE9UX1dBTExFVF9UT0tFTl9SRUNPVkVSWV9UWF9IRVgsICd0eCBoZXggbm90IG1hdGNoaW5nIScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBidWlsZCBhbiB1bnNpZ25lZCB0b2tlbiB0cmFuc2FjdGlvbiB3aGVuIHB1YmxpYyBrZXlzIGFyZSBwYXNzZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByb290QWRkcmVzcyA9IHRlc3REYXRhLkNPTERfV0FMTEVUX1JPT1RfQUREUkVTUztcbiAgICAgIG5vY2soYGh0dHBzOi8vYXBpLnRlc3RuZXQuaGlyby5zb2ApXG4gICAgICAgIC5nZXQoYC9leHRlbmRlZC92Mi9hZGRyZXNzZXMvJHtyb290QWRkcmVzc30vYmFsYW5jZXMvc3R4YClcbiAgICAgICAgLnJlcGx5KDIwMCwgdGVzdERhdGEuQUNDT1VOVF9CQUxBTkNFX1JFU1BPTlNFKTtcbiAgICAgIG5vY2soJ2h0dHBzOi8vYXBpLnRlc3RuZXQuaGlyby5zbycpXG4gICAgICAgIC5nZXQoYC9leHRlbmRlZC92Mi9hZGRyZXNzZXMvJHtyb290QWRkcmVzc30vYmFsYW5jZXMvZnQvJHt0ZXN0RGF0YS5TVFhfVE9LRU5fQVNTRVRfSUR9YClcbiAgICAgICAgLnJlcGx5KDIwMCwgdGVzdERhdGEuVE9LRU5fQkFMQU5DRV9SRVNQT05TRSk7XG4gICAgICBub2NrKGBodHRwczovL2FwaS50ZXN0bmV0Lmhpcm8uc29gLCB7IGFsbG93VW5tb2NrZWQ6IHRydWUgfSlcbiAgICAgICAgLmdldChgL2V4dGVuZGVkL3YxL2FkZHJlc3MvJHtyb290QWRkcmVzc30vbm9uY2VzYClcbiAgICAgICAgLnJlcGx5KDIwMCwgdGVzdERhdGEuQUNDT1VOVF9OT05DRV9SRVNQT05TRSk7XG4gICAgICBjb25zdCBmZWVFc3RpbWF0ZVJlcXVlc3QgPSB0ZXN0RGF0YS5GRUVfRVNUSU1BVElPTl9UT0tFTl9SRVFVRVNUO1xuICAgICAgZmVlRXN0aW1hdGVSZXF1ZXN0LnRyYW5zYWN0aW9uX3BheWxvYWQgPVxuICAgICAgICAnMDIxYTE1MDBhMWM0MmYwYzExYmZlMzg5M2Y0NzlhZjE4OTA0Njc3Njg1YmUwZDc0NzM2OTcwMzY2NDcwMmQ3NDZmNmI2NTZlMDg3NDcyNjE2ZTczNjY2NTcyMDAwMDAwMDQwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1ZjVlMTAwMDUxNTlmMmYxYWZmNmZhMDA2MmUxZjdmYTYwOTYxMzNlNzVmNDdhN2U4ZjcwNTFhMTUwMGExYzQyZjBjMTFiZmUzODkzZjQ3OWFmMTg5MDQ2Nzc2ODViZTA5JztcbiAgICAgIG5vY2soYGh0dHBzOi8vYXBpLnRlc3RuZXQuaGlyby5zb2ApXG4gICAgICAgIC5wb3N0KGAvdjIvZmVlcy90cmFuc2FjdGlvbmAsIGZlZUVzdGltYXRlUmVxdWVzdClcbiAgICAgICAgLnJlcGx5KDIwMCwgdGVzdERhdGEuRkVFX0VTVElNQVRJT05fVE9LRU5fUkVTUE9OU0UpO1xuXG4gICAgICBjb25zdCByZWNvdmVyeU9wdGlvbnM6IFJlY292ZXJ5T3B0aW9ucyA9IHtcbiAgICAgICAgYmFja3VwS2V5OiB0ZXN0RGF0YS5DT0xEX1dBTExFVF9QVUJMSUNfS0VZX0lORk8uQkFDS1VQX0tFWSxcbiAgICAgICAgdXNlcktleTogdGVzdERhdGEuQ09MRF9XQUxMRVRfUFVCTElDX0tFWV9JTkZPLlVTRVJfS0VZLFxuICAgICAgICByb290QWRkcmVzczogcm9vdEFkZHJlc3MsXG4gICAgICAgIHJlY292ZXJ5RGVzdGluYXRpb246IHRlc3REYXRhLkRFU1RJTkFUSU9OX0FERFJFU1NfV1JXLFxuICAgICAgICBiaXRnb0tleTogdGVzdERhdGEuQ09MRF9XQUxMRVRfUFVCTElDX0tFWV9JTkZPLkJJVEdPX1BVQl9LRVksXG4gICAgICAgIGNvbnRyYWN0SWQ6ICdTVEFHMThFNDVXNjEzRlozSDRaTUY2UUhINDI2RVhNNVFUU0FWV1lILnRzaXA2ZHAtdG9rZW4nLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlOiBSZWNvdmVyeUluZm8gPSAoYXdhaXQgYmFzZWNvaW4ucmVjb3ZlcihyZWNvdmVyeU9wdGlvbnMpKSBhcyBSZWNvdmVyeUluZm87XG4gICAgICByZXNwb25zZS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgndHhIZXgnKTtcbiAgICAgIHJlc3BvbnNlLnNob3VsZC5oYXZlLnByb3BlcnR5KCdjb2luJyk7XG4gICAgICByZXNwb25zZS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnZmVlSW5mbycpO1xuICAgICAgYXNzZXJ0LmRlZXBFcXVhbChyZXNwb25zZS50eEhleCwgdGVzdERhdGEuQ09MRF9XQUxMRVRfVE9LRU5fVU5TSUdORURfU1dFRVBfVFhfSEVYLCAndHggaGV4IG5vdCBtYXRjaGluZyEnKTtcbiAgICAgIGFzc2VydC5kZWVwRXF1YWwocmVzcG9uc2UuY29pbiwgJ3RzdHg6dHNpcDZkcCcsICdjb2luIG5vdCBtYXRjaGluZyEnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB3aXRoIGluc3VmZmljaWVudCBiYWxhbmNlIHdoZW4gbmF0aXZlIHN0eCBiYWxhbmNlIGlzIGxvd2VyIHRoYW4gZmVlIGZvciBzaXAxMCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHJvb3RBZGRyZXNzID0gdGVzdERhdGEuSE9UX1dBTExFVF9ST09UX0FERFJFU1M7XG4gICAgICBjb25zdCBhY2NvdW50QmFsYW5jZSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGVzdERhdGEuQUNDT1VOVF9CQUxBTkNFX1JFU1BPTlNFKSk7XG4gICAgICBhY2NvdW50QmFsYW5jZS5iYWxhbmNlID0gJzEwMCc7IC8vIHNldCBiYWxhbmNlIGxvd2VyIHRoYW4gZmVlXG4gICAgICBub2NrKGBodHRwczovL2FwaS50ZXN0bmV0Lmhpcm8uc29gKVxuICAgICAgICAuZ2V0KGAvZXh0ZW5kZWQvdjIvYWRkcmVzc2VzLyR7cm9vdEFkZHJlc3N9L2JhbGFuY2VzL3N0eGApXG4gICAgICAgIC5yZXBseSgyMDAsIGFjY291bnRCYWxhbmNlKTtcbiAgICAgIG5vY2soJ2h0dHBzOi8vYXBpLnRlc3RuZXQuaGlyby5zbycpXG4gICAgICAgIC5nZXQoYC9leHRlbmRlZC92Mi9hZGRyZXNzZXMvJHtyb290QWRkcmVzc30vYmFsYW5jZXMvZnQvJHt0ZXN0RGF0YS5TVFhfVE9LRU5fQVNTRVRfSUR9YClcbiAgICAgICAgLnJlcGx5KDIwMCwgdGVzdERhdGEuVE9LRU5fQkFMQU5DRV9SRVNQT05TRSk7XG4gICAgICBub2NrKGBodHRwczovL2FwaS50ZXN0bmV0Lmhpcm8uc29gKVxuICAgICAgICAuZ2V0KGAvZXh0ZW5kZWQvdjEvYWRkcmVzcy8ke3Jvb3RBZGRyZXNzfS9ub25jZXNgKVxuICAgICAgICAucmVwbHkoMjAwLCB0ZXN0RGF0YS5BQ0NPVU5UX05PTkNFX1JFU1BPTlNFKTtcbiAgICAgIGNvbnN0IGZlZVJlcXVlc3RCb2R5ID0gdGVzdERhdGEuRkVFX0VTVElNQVRJT05fVE9LRU5fUkVRVUVTVDtcbiAgICAgIGZlZVJlcXVlc3RCb2R5LnRyYW5zYWN0aW9uX3BheWxvYWQgPVxuICAgICAgICAnMDIxYTE1MDBhMWM0MmYwYzExYmZlMzg5M2Y0NzlhZjE4OTA0Njc3Njg1YmUwZDc0NzM2OTcwMzY2NDcwMmQ3NDZmNmI2NTZlMDg3NDcyNjE2ZTczNjY2NTcyMDAwMDAwMDQwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1ZjVlMTAwMDUxNTQ5ODU3ZWI0YjZkZDRmZWUwOGMzZWMwNGUzZDBlZDA0ZWY2N2QzMjQwNTFhMTUwMGExYzQyZjBjMTFiZmUzODkzZjQ3OWFmMTg5MDQ2Nzc2ODViZTA5JztcbiAgICAgIG5vY2soYGh0dHBzOi8vYXBpLnRlc3RuZXQuaGlyby5zb2AsIHsgYWxsb3dVbm1vY2tlZDogdHJ1ZSB9KVxuICAgICAgICAucG9zdChgL3YyL2ZlZXMvdHJhbnNhY3Rpb25gLCBmZWVSZXF1ZXN0Qm9keSlcbiAgICAgICAgLnJlcGx5KDIwMCwgdGVzdERhdGEuRkVFX0VTVElNQVRJT05fVE9LRU5fUkVTUE9OU0UpO1xuICAgICAgY29uc3QgcmVjb3ZlcnlPcHRpb25zOiBSZWNvdmVyeU9wdGlvbnMgPSB7XG4gICAgICAgIGJhY2t1cEtleTogdGVzdERhdGEuSE9UX1dBTExFVF9LRVlfQ0FSRF9JTkZPLkJBQ0tVUF9LRVksXG4gICAgICAgIHVzZXJLZXk6IHRlc3REYXRhLkhPVF9XQUxMRVRfS0VZX0NBUkRfSU5GTy5VU0VSX0tFWSxcbiAgICAgICAgcm9vdEFkZHJlc3M6IHJvb3RBZGRyZXNzLFxuICAgICAgICByZWNvdmVyeURlc3RpbmF0aW9uOiB0ZXN0RGF0YS5ERVNUSU5BVElPTl9BRERSRVNTX1dSVyxcbiAgICAgICAgYml0Z29LZXk6IHRlc3REYXRhLkhPVF9XQUxMRVRfS0VZX0NBUkRfSU5GTy5CSVRHT19QVUJfS0VZLFxuICAgICAgICB3YWxsZXRQYXNzcGhyYXNlOiB0ZXN0RGF0YS5IT1RfV0FMTEVUX0tFWV9DQVJEX0lORk8uV0FMTEVUX1BBU1NQSFJBU0UsXG4gICAgICAgIGNvbnRyYWN0SWQ6ICdTVEFHMThFNDVXNjEzRlozSDRaTUY2UUhINDI2RVhNNVFUU0FWV1lILnRzaXA2ZHAtdG9rZW4nLFxuICAgICAgfTtcbiAgICAgIGF3YWl0IGJhc2Vjb2luLnJlY292ZXIocmVjb3ZlcnlPcHRpb25zKS5zaG91bGQucmVqZWN0ZWRXaXRoKCdpbnN1ZmZpY2llbnQgYmFsYW5jZSB0byBidWlsZCB0aGUgdHJhbnNhY3Rpb24nKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB3aGVuIG9ubHkgY29udHJhY3QgYWRkcmVzcyBpcyBwYXNzZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByZWNvdmVyeU9wdGlvbnM6IFJlY292ZXJ5T3B0aW9ucyA9IHtcbiAgICAgICAgYmFja3VwS2V5OiB0ZXN0RGF0YS5IT1RfV0FMTEVUX0tFWV9DQVJEX0lORk8uQkFDS1VQX0tFWSxcbiAgICAgICAgdXNlcktleTogdGVzdERhdGEuSE9UX1dBTExFVF9LRVlfQ0FSRF9JTkZPLlVTRVJfS0VZLFxuICAgICAgICByb290QWRkcmVzczogdGVzdERhdGEuSE9UX1dBTExFVF9ST09UX0FERFJFU1MsXG4gICAgICAgIHJlY292ZXJ5RGVzdGluYXRpb246IHRlc3REYXRhLkRFU1RJTkFUSU9OX0FERFJFU1NfV1JXLFxuICAgICAgICBiaXRnb0tleTogdGVzdERhdGEuSE9UX1dBTExFVF9LRVlfQ0FSRF9JTkZPLkJJVEdPX1BVQl9LRVksXG4gICAgICAgIHdhbGxldFBhc3NwaHJhc2U6IHRlc3REYXRhLkhPVF9XQUxMRVRfS0VZX0NBUkRfSU5GTy5XQUxMRVRfUEFTU1BIUkFTRSxcbiAgICAgICAgY29udHJhY3RJZDogJ1NUQUcxOEU0NVc2MTNGWjNINFpNRjZRSEg0MjZFWE01UVRTQVZXWUgnLFxuICAgICAgfTtcbiAgICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAgIC5yZWNvdmVyKHJlY292ZXJ5T3B0aW9ucylcbiAgICAgICAgLnNob3VsZC5yZWplY3RlZFdpdGgoJ2ludmFsaWQgY29udHJhY3QgaWQsIHBsZWFzZSBwcm92aWRlIGl0IGluIHRoZSBmb3JtIChjb250cmFjdEFkZHJlc3MuY29udHJhY3ROYW1lKScpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stx.d.ts","sourceRoot":"","sources":["../../../test/unit/stx.ts"],"names":[],"mappings":""}
|