@bitgo-beta/sdk-coin-trx 1.2.3-alpha.43 → 1.2.3-alpha.431
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/protobuf/Contract.proto +32 -0
- package/dist/resources/protobuf/tron.d.ts +1478 -214
- package/dist/resources/protobuf/tron.js +6312 -2600
- package/dist/resources/protobuf/tron.proto +6 -0
- package/dist/src/index.js +6 -2
- package/dist/src/lib/constants.d.ts +3 -0
- package/dist/src/lib/constants.d.ts.map +1 -0
- package/dist/src/lib/constants.js +6 -0
- package/dist/src/lib/contractCallBuilder.d.ts +1 -35
- package/dist/src/lib/contractCallBuilder.d.ts.map +1 -1
- package/dist/src/lib/contractCallBuilder.js +12 -75
- package/dist/src/lib/delegateResourceTxBuilder.d.ts +27 -0
- package/dist/src/lib/delegateResourceTxBuilder.d.ts.map +1 -0
- package/dist/src/lib/delegateResourceTxBuilder.js +98 -0
- package/dist/src/lib/enum.d.ts +36 -1
- package/dist/src/lib/enum.d.ts.map +1 -1
- package/dist/src/lib/enum.js +40 -4
- package/dist/src/lib/freezeBalanceTxBuilder.d.ts +71 -0
- package/dist/src/lib/freezeBalanceTxBuilder.d.ts.map +1 -0
- package/dist/src/lib/freezeBalanceTxBuilder.js +211 -0
- package/dist/src/lib/iface.d.ts +220 -2
- package/dist/src/lib/iface.d.ts.map +1 -1
- package/dist/src/lib/iface.js +1 -1
- package/dist/src/lib/index.js +23 -9
- package/dist/src/lib/keyPair.d.ts +0 -1
- package/dist/src/lib/keyPair.d.ts.map +1 -1
- package/dist/src/lib/keyPair.js +31 -18
- package/dist/src/lib/resourceManagementTxBuilder.d.ts +72 -0
- package/dist/src/lib/resourceManagementTxBuilder.d.ts.map +1 -0
- package/dist/src/lib/resourceManagementTxBuilder.js +150 -0
- package/dist/src/lib/tokenTransferBuilder.d.ts +1 -1
- package/dist/src/lib/tokenTransferBuilder.js +3 -3
- package/dist/src/lib/transaction.d.ts.map +1 -1
- package/dist/src/lib/transaction.js +92 -6
- package/dist/src/lib/transactionBuilder.d.ts +50 -5
- package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilder.js +110 -21
- package/dist/src/lib/undelegateResourceTxBuilder.d.ts +27 -0
- package/dist/src/lib/undelegateResourceTxBuilder.d.ts.map +1 -0
- package/dist/src/lib/undelegateResourceTxBuilder.js +98 -0
- package/dist/src/lib/unfreezeBalanceTxBuilder.d.ts +65 -0
- package/dist/src/lib/unfreezeBalanceTxBuilder.d.ts.map +1 -0
- package/dist/src/lib/unfreezeBalanceTxBuilder.js +204 -0
- package/dist/src/lib/utils.d.ts +85 -4
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +445 -47
- package/dist/src/lib/voteWitnessTxBuilder.d.ts +62 -0
- package/dist/src/lib/voteWitnessTxBuilder.d.ts.map +1 -0
- package/dist/src/lib/voteWitnessTxBuilder.js +219 -0
- package/dist/src/lib/withdrawBuilder.d.ts +49 -0
- package/dist/src/lib/withdrawBuilder.d.ts.map +1 -0
- package/dist/src/lib/withdrawBuilder.js +167 -0
- package/dist/src/lib/withdrawExpireUnfreezeTxBuilder.d.ts +49 -0
- package/dist/src/lib/withdrawExpireUnfreezeTxBuilder.d.ts.map +1 -0
- package/dist/src/lib/withdrawExpireUnfreezeTxBuilder.js +167 -0
- package/dist/src/lib/wrappedBuilder.d.ts +56 -0
- package/dist/src/lib/wrappedBuilder.d.ts.map +1 -1
- package/dist/src/lib/wrappedBuilder.js +86 -2
- package/dist/src/trx.d.ts +78 -4
- package/dist/src/trx.d.ts.map +1 -1
- package/dist/src/trx.js +436 -147
- package/dist/src/trxToken.d.ts +2 -2
- package/dist/src/trxToken.d.ts.map +1 -1
- package/dist/src/trxToken.js +5 -5
- package/dist/test/fixtures.d.ts +40 -0
- package/dist/test/fixtures.d.ts.map +1 -0
- package/dist/test/fixtures.js +46 -0
- package/dist/test/resources.d.ts +586 -0
- package/dist/test/resources.d.ts.map +1 -0
- package/dist/test/resources.js +746 -0
- package/dist/test/unit/index.d.ts +2 -0
- package/dist/test/unit/index.d.ts.map +1 -0
- package/dist/test/unit/index.js +19 -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 +163 -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 +38 -0
- package/dist/test/unit/transactionBuilder/contractCallBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/contractCallBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/contractCallBuilder.js +315 -0
- package/dist/test/unit/transactionBuilder/delegateResourceTxBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/delegateResourceTxBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/delegateResourceTxBuilder.js +255 -0
- package/dist/test/unit/transactionBuilder/freezeBalanceTxBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/freezeBalanceTxBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/freezeBalanceTxBuilder.js +285 -0
- package/dist/test/unit/transactionBuilder/tokenTransferBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/tokenTransferBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/tokenTransferBuilder.js +42 -0
- package/dist/test/unit/transactionBuilder/undelegateResourceTxBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/undelegateResourceTxBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/undelegateResourceTxBuilder.js +255 -0
- package/dist/test/unit/transactionBuilder/unfreezeBalanceTxBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/unfreezeBalanceTxBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/unfreezeBalanceTxBuilder.js +256 -0
- package/dist/test/unit/transactionBuilder/voteWitnessTxBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/voteWitnessTxBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/voteWitnessTxBuilder.js +277 -0
- package/dist/test/unit/transactionBuilder/withdrawBalanceBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/withdrawBalanceBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/withdrawBalanceBuilder.js +213 -0
- package/dist/test/unit/transactionBuilder/withdrawExpireUnfreezeTxBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/withdrawExpireUnfreezeTxBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/withdrawExpireUnfreezeTxBuilder.js +213 -0
- package/dist/test/unit/transactionBuilder/wrappedBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/wrappedBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/wrappedBuilder.js +50 -0
- package/dist/test/unit/transactionBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder.js +178 -0
- package/dist/test/unit/trx.d.ts +2 -0
- package/dist/test/unit/trx.d.ts.map +1 -0
- package/dist/test/unit/trx.js +639 -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 +141 -0
- package/dist/test/unit/verifyTransaction.d.ts +2 -0
- package/dist/test/unit/verifyTransaction.d.ts.map +1 -0
- package/dist/test/unit/verifyTransaction.js +378 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +20 -15
- package/.eslintignore +0 -5
- package/.mocharc.yml +0 -8
- package/CHANGELOG.md +0 -118
- package/resources/README.md +0 -31
- package/resources/protobuf/Contract.proto +0 -256
- package/resources/protobuf/Discover.proto +0 -44
- package/resources/protobuf/tron.d.ts +0 -11205
- package/resources/protobuf/tron.js +0 -33480
- package/resources/protobuf/tron.proto +0 -677
|
@@ -0,0 +1,315 @@
|
|
|
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 node_test_1 = require("node:test");
|
|
7
|
+
const assert_1 = __importDefault(require("assert"));
|
|
8
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
9
|
+
const statics_1 = require("@bitgo-beta/statics");
|
|
10
|
+
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
11
|
+
const builder_1 = require("../../../src/lib/builder");
|
|
12
|
+
const resources_1 = require("../../resources");
|
|
13
|
+
(0, node_test_1.describe)('Trx Contract call Builder', () => {
|
|
14
|
+
const initTxBuilder = () => {
|
|
15
|
+
const builder = (0, builder_1.getBuilder)('ttrx').getContractCallBuilder();
|
|
16
|
+
builder
|
|
17
|
+
.source({ address: resources_1.PARTICIPANTS.custodian.address })
|
|
18
|
+
.to({ address: resources_1.CONTRACTS.factory })
|
|
19
|
+
.block({ number: resources_1.BLOCK_NUMBER, hash: resources_1.BLOCK_HASH })
|
|
20
|
+
.fee({ feeLimit: resources_1.FEE_LIMIT });
|
|
21
|
+
return builder;
|
|
22
|
+
};
|
|
23
|
+
(0, node_test_1.describe)('Contract Call builder', () => {
|
|
24
|
+
(0, node_test_1.describe)('should build', () => {
|
|
25
|
+
(0, node_test_1.describe)('non serialized transactions', () => {
|
|
26
|
+
(0, node_test_1.it)('a signed contract call transaction', async () => {
|
|
27
|
+
const txBuilder = initTxBuilder();
|
|
28
|
+
txBuilder.data(resources_1.MINT_CONFIRM_DATA).sign({ key: resources_1.PARTICIPANTS.custodian.pk });
|
|
29
|
+
const tx = await txBuilder.build();
|
|
30
|
+
tx.toJson();
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
(0, node_test_1.describe)('serialized transactions', () => {
|
|
34
|
+
(0, node_test_1.it)('a transaction signed multiple times', async () => {
|
|
35
|
+
const timestamp = Date.now();
|
|
36
|
+
const txBuilder = initTxBuilder();
|
|
37
|
+
txBuilder.data(resources_1.MINT_CONFIRM_DATA);
|
|
38
|
+
txBuilder.timestamp(timestamp);
|
|
39
|
+
txBuilder.expiration(timestamp + resources_1.EXPIRATION);
|
|
40
|
+
const tx = await txBuilder.build();
|
|
41
|
+
let txJson = tx.toJson();
|
|
42
|
+
let rawData = txJson.raw_data;
|
|
43
|
+
assert_1.default.deepStrictEqual(rawData.contract, resources_1.TX_CONTRACT);
|
|
44
|
+
assert_1.default.equal(txJson.signature.length, 0);
|
|
45
|
+
const txBuilder2 = (0, builder_1.getBuilder)('ttrx').from(tx.toJson());
|
|
46
|
+
txBuilder2.sign({ key: resources_1.PARTICIPANTS.custodian.pk });
|
|
47
|
+
const tx2 = await txBuilder2.build();
|
|
48
|
+
txJson = tx2.toJson();
|
|
49
|
+
rawData = txJson.raw_data;
|
|
50
|
+
assert_1.default.deepStrictEqual(rawData.contract, resources_1.TX_CONTRACT);
|
|
51
|
+
assert_1.default.equal(txJson.signature.length, 1);
|
|
52
|
+
const txBuilder3 = (0, builder_1.getBuilder)('ttrx').from(tx2.toJson());
|
|
53
|
+
txBuilder3.sign({ key: resources_1.PARTICIPANTS.from.pk });
|
|
54
|
+
const tx3 = await txBuilder3.build();
|
|
55
|
+
txJson = tx3.toJson();
|
|
56
|
+
rawData = txJson.raw_data;
|
|
57
|
+
assert_1.default.deepStrictEqual(rawData.contract, resources_1.TX_CONTRACT);
|
|
58
|
+
assert_1.default.equal(txJson.signature.length, 2);
|
|
59
|
+
const txBuilder4 = (0, builder_1.getBuilder)('ttrx').from(tx3.toJson());
|
|
60
|
+
txBuilder4.sign({ key: resources_1.PARTICIPANTS.multisig.pk });
|
|
61
|
+
const tx4 = await txBuilder4.build();
|
|
62
|
+
assert_1.default.equal(tx4.inputs.length, 1);
|
|
63
|
+
assert_1.default.equal(tx4.inputs[0].address, resources_1.PARTICIPANTS.custodian.address);
|
|
64
|
+
if (tx4.inputs[0].contractAddress) {
|
|
65
|
+
assert_1.default.equal(tx4.inputs[0].contractAddress, resources_1.CONTRACTS.factory);
|
|
66
|
+
}
|
|
67
|
+
if (tx4.inputs[0].data) {
|
|
68
|
+
assert_1.default.equal(tx4.inputs[0].data, 'K/kLqhJzFAw+G1dWskLMiM18TdimG/hctcHdX1C6YeBmtToV');
|
|
69
|
+
}
|
|
70
|
+
assert_1.default.equal(tx4.inputs[0].value, '0');
|
|
71
|
+
assert_1.default.equal(tx4.outputs[0].value, '0');
|
|
72
|
+
assert_1.default.equal(tx4.outputs[0].address, resources_1.PARTICIPANTS.custodian.address);
|
|
73
|
+
txJson = tx4.toJson();
|
|
74
|
+
rawData = txJson.raw_data;
|
|
75
|
+
assert_1.default.deepStrictEqual(rawData.contract, resources_1.TX_CONTRACT);
|
|
76
|
+
assert_1.default.equal(txJson.signature.length, 3);
|
|
77
|
+
assert_1.default.equal(rawData.fee_limit, resources_1.FEE_LIMIT);
|
|
78
|
+
assert_1.default.equal(rawData.expiration, timestamp + resources_1.EXPIRATION);
|
|
79
|
+
assert_1.default.equal(rawData.timestamp, timestamp);
|
|
80
|
+
});
|
|
81
|
+
(0, node_test_1.it)('an unsigned transaction from a string and from a JSON', async () => {
|
|
82
|
+
const timestamp = Date.now();
|
|
83
|
+
const txBuilder = initTxBuilder();
|
|
84
|
+
txBuilder.data(resources_1.MINT_CONFIRM_DATA);
|
|
85
|
+
txBuilder.timestamp(timestamp);
|
|
86
|
+
txBuilder.expiration(timestamp + 40000);
|
|
87
|
+
const tx = await txBuilder.build();
|
|
88
|
+
const txBuilder2 = (0, builder_1.getBuilder)('ttrx').from(tx.toBroadcastFormat());
|
|
89
|
+
txBuilder2.sign({ key: resources_1.PARTICIPANTS.custodian.pk });
|
|
90
|
+
const tx2 = await txBuilder2.build();
|
|
91
|
+
const txBuilder3 = (0, builder_1.getBuilder)('ttrx').from(tx.toJson());
|
|
92
|
+
txBuilder3.sign({ key: resources_1.PARTICIPANTS.custodian.pk });
|
|
93
|
+
const tx3 = await txBuilder3.build();
|
|
94
|
+
assert_1.default.deepStrictEqual(tx2, tx3);
|
|
95
|
+
});
|
|
96
|
+
(0, node_test_1.it)('an unsigned transaction with extended duration', async () => {
|
|
97
|
+
const timestamp = Date.now();
|
|
98
|
+
const expiration = timestamp + resources_1.EXPIRATION;
|
|
99
|
+
const extension = 60000;
|
|
100
|
+
const txBuilder = initTxBuilder();
|
|
101
|
+
txBuilder.data(resources_1.MINT_CONFIRM_DATA);
|
|
102
|
+
txBuilder.timestamp(timestamp);
|
|
103
|
+
txBuilder.expiration(expiration);
|
|
104
|
+
const tx = await txBuilder.build();
|
|
105
|
+
const txBuilder2 = (0, builder_1.getBuilder)('ttrx').from(tx.toBroadcastFormat());
|
|
106
|
+
txBuilder2.extendValidTo(extension);
|
|
107
|
+
txBuilder2.sign({ key: resources_1.PARTICIPANTS.custodian.pk });
|
|
108
|
+
const tx2 = await txBuilder2.build();
|
|
109
|
+
assert_1.default.equal(tx2.inputs.length, 1);
|
|
110
|
+
assert_1.default.equal(tx2.inputs[0].address, resources_1.PARTICIPANTS.custodian.address);
|
|
111
|
+
if (tx2.inputs[0].contractAddress) {
|
|
112
|
+
assert_1.default.equal(tx2.inputs[0].contractAddress, resources_1.CONTRACTS.factory);
|
|
113
|
+
}
|
|
114
|
+
if (tx2.inputs[0].data) {
|
|
115
|
+
assert_1.default.equal(tx2.inputs[0].data, 'K/kLqhJzFAw+G1dWskLMiM18TdimG/hctcHdX1C6YeBmtToV');
|
|
116
|
+
}
|
|
117
|
+
assert_1.default.equal(tx2.inputs[0].value, '0');
|
|
118
|
+
assert_1.default.equal(tx2.outputs[0].value, '0');
|
|
119
|
+
assert_1.default.equal(tx2.outputs[0].address, resources_1.PARTICIPANTS.custodian.address);
|
|
120
|
+
const txJson = tx2.toJson();
|
|
121
|
+
assert_1.default.equal(txJson.raw_data.expiration, expiration + extension);
|
|
122
|
+
});
|
|
123
|
+
(0, node_test_1.it)('a transaction with correct inputs', async () => {
|
|
124
|
+
const timestamp = Date.now();
|
|
125
|
+
const txBuilder = initTxBuilder();
|
|
126
|
+
txBuilder.data(resources_1.MINT_CONFIRM_DATA);
|
|
127
|
+
txBuilder.timestamp(timestamp);
|
|
128
|
+
txBuilder.expiration(timestamp + 40000);
|
|
129
|
+
const tx = (await txBuilder.build());
|
|
130
|
+
assert_1.default.equal(tx.type, sdk_core_1.TransactionType.ContractCall);
|
|
131
|
+
assert_1.default.equal(tx.inputs.length, 1);
|
|
132
|
+
assert_1.default.equal(tx.inputs[0].address, resources_1.PARTICIPANTS.custodian.address);
|
|
133
|
+
if (tx.inputs[0].contractAddress) {
|
|
134
|
+
assert_1.default.equal(tx.inputs[0].contractAddress, resources_1.CONTRACTS.factory);
|
|
135
|
+
}
|
|
136
|
+
if (tx.inputs[0].data) {
|
|
137
|
+
assert_1.default.equal(tx.inputs[0].data, 'K/kLqhJzFAw+G1dWskLMiM18TdimG/hctcHdX1C6YeBmtToV');
|
|
138
|
+
}
|
|
139
|
+
assert_1.default.equal(tx.inputs[0].value, '0');
|
|
140
|
+
assert_1.default.equal(tx.outputs[0].value, '0');
|
|
141
|
+
assert_1.default.equal(tx.outputs[0].address, resources_1.PARTICIPANTS.custodian.address);
|
|
142
|
+
});
|
|
143
|
+
});
|
|
144
|
+
});
|
|
145
|
+
(0, node_test_1.describe)('should fail to build', () => {
|
|
146
|
+
(0, node_test_1.it)('a transaction with wrong data', async () => {
|
|
147
|
+
const txBuilder = initTxBuilder();
|
|
148
|
+
assert_1.default.throws(() => {
|
|
149
|
+
txBuilder.data('addMintRequest()');
|
|
150
|
+
}, (e) => e.message === 'addMintRequest() is not a valid hex string.');
|
|
151
|
+
});
|
|
152
|
+
(0, node_test_1.it)('a transaction with duplicate signatures', async () => {
|
|
153
|
+
const txBuilder = initTxBuilder();
|
|
154
|
+
txBuilder.data(resources_1.MINT_CONFIRM_DATA);
|
|
155
|
+
txBuilder.sign({ key: resources_1.PARTICIPANTS.custodian.pk });
|
|
156
|
+
assert_1.default.throws(() => {
|
|
157
|
+
txBuilder.sign({ key: resources_1.PARTICIPANTS.custodian.pk });
|
|
158
|
+
}, (e) => e.message === 'Duplicated key');
|
|
159
|
+
const tx = await txBuilder.build();
|
|
160
|
+
const txBuilder2 = (0, builder_1.getBuilder)('ttrx').from(tx.toBroadcastFormat());
|
|
161
|
+
txBuilder2.sign({ key: resources_1.PARTICIPANTS.custodian.pk });
|
|
162
|
+
assert_1.default.rejects(txBuilder2.build(), {
|
|
163
|
+
message: 'Transaction signing did not return an additional signature.',
|
|
164
|
+
});
|
|
165
|
+
});
|
|
166
|
+
(0, node_test_1.it)('an invalid raw transaction', () => {
|
|
167
|
+
assert_1.default.throws(() => {
|
|
168
|
+
(0, builder_1.getBuilder)('ttrx').from('an invalid raw transaction');
|
|
169
|
+
}, (e) => e.message === 'There was error in parsing the JSON string');
|
|
170
|
+
});
|
|
171
|
+
});
|
|
172
|
+
});
|
|
173
|
+
(0, node_test_1.describe)('Should validate ', () => {
|
|
174
|
+
(0, node_test_1.it)('a valid expiration', async () => {
|
|
175
|
+
const now = Date.now();
|
|
176
|
+
const expiration = now + resources_1.EXPIRATION;
|
|
177
|
+
const txBuilder = initTxBuilder();
|
|
178
|
+
txBuilder.data(resources_1.MINT_CONFIRM_DATA);
|
|
179
|
+
txBuilder.timestamp(now);
|
|
180
|
+
txBuilder.expiration(expiration + 1000);
|
|
181
|
+
txBuilder.expiration(expiration);
|
|
182
|
+
const tx = await txBuilder.build();
|
|
183
|
+
const txJson = tx.toJson();
|
|
184
|
+
assert_1.default.equal(txJson.raw_data.expiration, expiration);
|
|
185
|
+
});
|
|
186
|
+
(0, node_test_1.it)('an expiration greater than one year', async () => {
|
|
187
|
+
const now = Date.now();
|
|
188
|
+
const txBuilder = initTxBuilder();
|
|
189
|
+
txBuilder.data(resources_1.MINT_CONFIRM_DATA);
|
|
190
|
+
txBuilder.timestamp(now);
|
|
191
|
+
assert_1.default.throws(() => {
|
|
192
|
+
txBuilder.expiration(now + 31536000001);
|
|
193
|
+
}, (e) => e.message === 'Expiration must not be greater than one day');
|
|
194
|
+
});
|
|
195
|
+
(0, node_test_1.it)('an expiration less than the current date', async () => {
|
|
196
|
+
const now = Date.now();
|
|
197
|
+
const txBuilder = initTxBuilder();
|
|
198
|
+
txBuilder.timestamp(now - 2000);
|
|
199
|
+
txBuilder.data(resources_1.MINT_CONFIRM_DATA);
|
|
200
|
+
assert_1.default.throws(() => {
|
|
201
|
+
txBuilder.expiration(now - 1000);
|
|
202
|
+
}, (e) => e.message === 'Expiration must be greater than current time');
|
|
203
|
+
});
|
|
204
|
+
(0, node_test_1.it)('an expiration less than the timestamp', async () => {
|
|
205
|
+
const now = Date.now();
|
|
206
|
+
const txBuilder = initTxBuilder();
|
|
207
|
+
txBuilder.data(resources_1.MINT_CONFIRM_DATA);
|
|
208
|
+
txBuilder.timestamp(now + 2000);
|
|
209
|
+
assert_1.default.throws(() => {
|
|
210
|
+
txBuilder.expiration(now + 1000);
|
|
211
|
+
}, (e) => e.message === 'Expiration must be greater than timestamp');
|
|
212
|
+
});
|
|
213
|
+
(0, node_test_1.it)('an expiration set after build', async () => {
|
|
214
|
+
const now = Date.now();
|
|
215
|
+
const expiration = now + resources_1.EXPIRATION;
|
|
216
|
+
const txBuilder = initTxBuilder();
|
|
217
|
+
txBuilder.data(resources_1.MINT_CONFIRM_DATA);
|
|
218
|
+
await txBuilder.build();
|
|
219
|
+
assert_1.default.throws(() => {
|
|
220
|
+
txBuilder.expiration(expiration);
|
|
221
|
+
}, (e) => e.message === 'Expiration is already set, it can only be extended');
|
|
222
|
+
});
|
|
223
|
+
(0, node_test_1.it)('an expiration set after deserializing', async () => {
|
|
224
|
+
const now = Date.now();
|
|
225
|
+
const expiration = now + resources_1.EXPIRATION;
|
|
226
|
+
const txBuilder = initTxBuilder();
|
|
227
|
+
txBuilder.data(resources_1.MINT_CONFIRM_DATA);
|
|
228
|
+
const tx = await txBuilder.build();
|
|
229
|
+
const txBuilder2 = (0, builder_1.getBuilder)('ttrx').from(tx.toBroadcastFormat());
|
|
230
|
+
assert_1.default.throws(() => {
|
|
231
|
+
txBuilder2.expiration(expiration);
|
|
232
|
+
}, (e) => e.message === 'Expiration is already set, it can only be extended');
|
|
233
|
+
});
|
|
234
|
+
(0, node_test_1.it)('an extension without a set expiration', async () => {
|
|
235
|
+
const txBuilder = initTxBuilder();
|
|
236
|
+
txBuilder.data(resources_1.MINT_CONFIRM_DATA);
|
|
237
|
+
assert_1.default.throws(() => {
|
|
238
|
+
txBuilder.extendValidTo(20000);
|
|
239
|
+
}, (e) => e.message === 'There is not expiration to extend');
|
|
240
|
+
});
|
|
241
|
+
(0, node_test_1.it)('a zero millisecond extension', async () => {
|
|
242
|
+
const txBuilder = initTxBuilder();
|
|
243
|
+
txBuilder.data(resources_1.MINT_CONFIRM_DATA);
|
|
244
|
+
const expiration = Date.now() + resources_1.EXPIRATION;
|
|
245
|
+
txBuilder.expiration(expiration);
|
|
246
|
+
const tx = await txBuilder.build();
|
|
247
|
+
const txBuilder2 = (0, builder_1.getBuilder)('ttrx').from(tx.toBroadcastFormat());
|
|
248
|
+
assert_1.default.throws(() => {
|
|
249
|
+
txBuilder2.extendValidTo(0);
|
|
250
|
+
}, (e) => e.message === 'Value cannot be below zero');
|
|
251
|
+
});
|
|
252
|
+
(0, node_test_1.it)('an extension grater than one year', async () => {
|
|
253
|
+
const txBuilder = initTxBuilder();
|
|
254
|
+
txBuilder.data(resources_1.MINT_CONFIRM_DATA);
|
|
255
|
+
const expiration = Date.now() + resources_1.EXPIRATION;
|
|
256
|
+
txBuilder.expiration(expiration);
|
|
257
|
+
const tx = await txBuilder.build();
|
|
258
|
+
const txBuilder2 = (0, builder_1.getBuilder)('ttrx').from(tx.toBroadcastFormat());
|
|
259
|
+
assert_1.default.throws(() => {
|
|
260
|
+
txBuilder2.extendValidTo(31536000001);
|
|
261
|
+
}, (e) => e.message === 'The expiration cannot be extended more than one year');
|
|
262
|
+
});
|
|
263
|
+
(0, node_test_1.it)('an extension after signing', async () => {
|
|
264
|
+
const txBuilder = initTxBuilder();
|
|
265
|
+
txBuilder.data(resources_1.MINT_CONFIRM_DATA);
|
|
266
|
+
txBuilder.sign({ key: resources_1.PARTICIPANTS.custodian.pk });
|
|
267
|
+
const tx = await txBuilder.build();
|
|
268
|
+
const txBuilder2 = (0, builder_1.getBuilder)('ttrx').from(tx.toBroadcastFormat());
|
|
269
|
+
assert_1.default.throws(() => {
|
|
270
|
+
txBuilder2.extendValidTo(20000);
|
|
271
|
+
}, (e) => e.message === 'Cannot extend a signed transaction');
|
|
272
|
+
});
|
|
273
|
+
(0, node_test_1.it)('fee limit', async () => {
|
|
274
|
+
const txBuilder = initTxBuilder();
|
|
275
|
+
txBuilder.data(resources_1.MINT_CONFIRM_DATA);
|
|
276
|
+
assert_1.default.throws(() => {
|
|
277
|
+
txBuilder.fee({ feeLimit: 'not a number' });
|
|
278
|
+
}, (e) => e.message === 'Invalid fee limit value');
|
|
279
|
+
assert_1.default.throws(() => {
|
|
280
|
+
txBuilder.fee({ feeLimit: '-15000' });
|
|
281
|
+
}, (e) => e.message === 'Invalid fee limit value');
|
|
282
|
+
assert_1.default.throws(() => {
|
|
283
|
+
const tronNetwork = statics_1.coins.get('ttrx').network;
|
|
284
|
+
txBuilder.fee({ feeLimit: new bignumber_js_1.default(tronNetwork.maxFeeLimit).plus(1).toString() });
|
|
285
|
+
}, (e) => e.message === 'Invalid fee limit value');
|
|
286
|
+
});
|
|
287
|
+
(0, node_test_1.it)('transaction mandatory fields', async () => {
|
|
288
|
+
const txBuilder = (0, builder_1.getBuilder)('ttrx').getContractCallBuilder();
|
|
289
|
+
await assert_1.default.rejects(txBuilder.build(), {
|
|
290
|
+
message: 'Missing parameter: data',
|
|
291
|
+
});
|
|
292
|
+
txBuilder.data(resources_1.MINT_CONFIRM_DATA);
|
|
293
|
+
await assert_1.default.rejects(txBuilder.build(), {
|
|
294
|
+
message: 'Missing parameter: source',
|
|
295
|
+
});
|
|
296
|
+
txBuilder.source({ address: resources_1.PARTICIPANTS.custodian.address });
|
|
297
|
+
await assert_1.default.rejects(txBuilder.build(), {
|
|
298
|
+
message: 'Missing parameter: contract address',
|
|
299
|
+
});
|
|
300
|
+
txBuilder.to({ address: resources_1.CONTRACTS.factory });
|
|
301
|
+
await assert_1.default.rejects(txBuilder.build(), {
|
|
302
|
+
message: 'Missing block reference information',
|
|
303
|
+
});
|
|
304
|
+
txBuilder.block({ number: resources_1.BLOCK_NUMBER, hash: resources_1.BLOCK_HASH });
|
|
305
|
+
await assert_1.default.rejects(txBuilder.build(), {
|
|
306
|
+
message: 'Missing fee',
|
|
307
|
+
});
|
|
308
|
+
txBuilder.fee({ feeLimit: resources_1.FEE_LIMIT });
|
|
309
|
+
assert_1.default.doesNotReject(() => {
|
|
310
|
+
return txBuilder.build();
|
|
311
|
+
});
|
|
312
|
+
});
|
|
313
|
+
});
|
|
314
|
+
});
|
|
315
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJhY3RDYWxsQnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Rlc3QvdW5pdC90cmFuc2FjdGlvbkJ1aWxkZXIvY29udHJhY3RDYWxsQnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHlDQUF5QztBQUN6QyxvREFBNEI7QUFDNUIsbURBQXVEO0FBQ3ZELGlEQUF5RDtBQUN6RCxnRUFBcUM7QUFFckMsc0RBQXNEO0FBQ3RELCtDQVN5QjtBQUV6QixJQUFBLG9CQUFRLEVBQUMsMkJBQTJCLEVBQUUsR0FBRyxFQUFFO0lBQ3pDLE1BQU0sYUFBYSxHQUFHLEdBQUcsRUFBRTtRQUN6QixNQUFNLE9BQU8sR0FBSSxJQUFBLG9CQUFVLEVBQUMsTUFBTSxDQUFvQixDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDaEYsT0FBTzthQUNKLE1BQU0sQ0FBQyxFQUFFLE9BQU8sRUFBRSx3QkFBWSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQzthQUNuRCxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUscUJBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQzthQUNsQyxLQUFLLENBQUMsRUFBRSxNQUFNLEVBQUUsd0JBQVksRUFBRSxJQUFJLEVBQUUsc0JBQVUsRUFBRSxDQUFDO2FBQ2pELEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxxQkFBUyxFQUFFLENBQUMsQ0FBQztRQUVoQyxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDLENBQUM7SUFFRixJQUFBLG9CQUFRLEVBQUMsdUJBQXVCLEVBQUUsR0FBRyxFQUFFO1FBQ3JDLElBQUEsb0JBQVEsRUFBQyxjQUFjLEVBQUUsR0FBRyxFQUFFO1lBQzVCLElBQUEsb0JBQVEsRUFBQyw2QkFBNkIsRUFBRSxHQUFHLEVBQUU7Z0JBQzNDLElBQUEsY0FBRSxFQUFDLG9DQUFvQyxFQUFFLEtBQUssSUFBSSxFQUFFO29CQUNsRCxNQUFNLFNBQVMsR0FBRyxhQUFhLEVB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QUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ3RDLE9BQU8sRUFBRSxxQ0FBcUM7YUFDL0MsQ0FBQyxDQUFDO1lBRUgsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSx3QkFBWSxFQUFFLElBQUksRUFBRSxzQkFBVSxFQUFFLENBQUMsQ0FBQztZQUM1RCxNQUFNLGdCQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDdEMsT0FBTyxFQUFFLGFBQWE7YUFDdkIsQ0FBQyxDQUFDO1lBRUgsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxxQkFBUyxFQUFFLENBQUMsQ0FBQztZQUN2QyxnQkFBTSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUU7Z0JBQ3hCLE9BQU8sU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzNCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVzY3JpYmUsIGl0IH0gZnJvbSAnbm9kZTp0ZXN0JztcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7IFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IGNvaW5zLCBUcm9uTmV0d29yayB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IEJpZ051bWJlciBmcm9tICdiaWdudW1iZXIuanMnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24sIFdyYXBwZWRCdWlsZGVyIH0gZnJvbSAnLi4vLi4vLi4vc3JjJztcbmltcG9ydCB7IGdldEJ1aWxkZXIgfSBmcm9tICcuLi8uLi8uLi9zcmMvbGliL2J1aWxkZXInO1xuaW1wb3J0IHtcbiAgUEFSVElDSVBBTlRTLFxuICBDT05UUkFDVFMsXG4gIE1JTlRfQ09ORklSTV9EQVRBLFxuICBCTE9DS19IQVNILFxuICBGRUVfTElNSVQsXG4gIEJMT0NLX05VTUJFUixcbiAgRVhQSVJBVElPTixcbiAgVFhfQ09OVFJBQ1QsXG59IGZyb20gJy4uLy4uL3Jlc291cmNlcyc7XG5cbmRlc2NyaWJlKCdUcnggQ29udHJhY3QgY2FsbCBCdWlsZGVyJywgKCkgPT4ge1xuICBjb25zdCBpbml0VHhCdWlsZGVyID0gKCkgPT4ge1xuICAgIGNvbnN0IGJ1aWxkZXIgPSAoZ2V0QnVpbGRlcigndHRyeCcpIGFzIFdyYXBwZWRCdWlsZGVyKS5nZXRDb250cmFjdENhbGxCdWlsZGVyKCk7XG4gICAgYnVpbGRlclxuICAgICAgLnNvdXJjZSh7IGFkZHJlc3M6IFBBUlRJQ0lQQU5UUy5jdXN0b2RpYW4uYWRkcmVzcyB9KVxuICAgICAgLnRvKHsgYWRkcmVzczogQ09OVFJBQ1RTLmZhY3RvcnkgfSlcbiAgICAgIC5ibG9jayh7IG51bWJlcjogQkxPQ0tfTlVNQkVSLCBoYXNoOiBCTE9DS19IQVNIIH0pXG4gICAgICAuZmVlKHsgZmVlTGltaXQ6IEZFRV9MSU1JVCB9KTtcblxuICAgIHJldHVybiBidWlsZGVyO1xuICB9O1xuXG4gIGRlc2NyaWJlKCdDb250cmFjdCBDYWxsIGJ1aWxkZXInLCAoKSA9PiB7XG4gICAgZGVzY3JpYmUoJ3Nob3VsZCBidWlsZCcsICgpID0+IHtcbiAgICAgIGRlc2NyaWJlKCdub24gc2VyaWFsaXplZCB0cmFuc2FjdGlvbnMnLCAoKSA9PiB7XG4gICAgICAgIGl0KCdhIHNpZ25lZCBjb250cmFjdCBjYWxsIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGluaXRUeEJ1aWxkZXIoKTtcbiAgICAgICAgICB0eEJ1aWxkZXIuZGF0YShNSU5UX0NPTkZJUk1fREFUQSkuc2lnbih7IGtleTogUEFSVElDSVBBTlRTLmN1c3RvZGlhbi5wayB9KTtcbiAgICAgICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgICAgIHR4LnRvSnNvbigpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBkZXNjcmliZSgnc2VyaWFsaXplZCB0cmFuc2FjdGlvbnMnLCAoKSA9PiB7XG4gICAgICAgIGl0KCdhIHRyYW5zYWN0aW9uIHNpZ25lZCBtdWx0aXBsZSB0aW1lcycsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCB0aW1lc3RhbXAgPSBEYXRlLm5vdygpO1xuICAgICAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGluaXRUeEJ1aWxkZXIoKTtcbiAgICAgICAgICB0eEJ1aWxkZXIuZGF0YShNSU5UX0NPTkZJUk1fREFUQSk7XG4gICAgICAgICAgdHhCdWlsZGVyLnRpbWVzdGFtcCh0aW1lc3RhbXApO1xuICAgICAgICAgIHR4QnVpbGRlci5leHBpcmF0aW9uKHRpbWVzdGFtcCArIEVYUElSQVRJT04pO1xuICAgICAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG5cbiAgICAgICAgICBsZXQgdHhKc29uID0gdHgudG9Kc29uKCk7XG4gICAgICAgICAgbGV0IHJhd0RhdGEgPSB0eEpzb24ucmF3X2RhdGE7XG4gICAgICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChyYXdEYXRhLmNvbnRyYWN0LCBUWF9DT05UUkFDVCk7XG4gICAgICAgICAgYXNzZXJ0LmVxdWFsKHR4SnNvbi5zaWduYXR1cmUubGVuZ3RoLCAwKTtcblxuICAgICAgICAgIGNvbnN0IHR4QnVpbGRlcjIgPSBnZXRCdWlsZGVyKCd0dHJ4JykuZnJvbSh0eC50b0pzb24oKSk7XG4gICAgICAgICAgdHhCdWlsZGVyMi5zaWduKHsga2V5OiBQQVJUSUNJUEFOVFMuY3VzdG9kaWFuLnBrIH0pO1xuICAgICAgICAgIGNvbnN0IHR4MiA9IGF3YWl0IHR4QnVpbGRlcjIuYnVpbGQoKTtcblxuICAgICAgICAgIHR4SnNvbiA9IHR4Mi50b0pzb24oKTtcbiAgICAgICAgICByYXdEYXRhID0gdHhKc29uLnJhd19kYXRhO1xuICAgICAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwocmF3RGF0YS5jb250cmFjdCwgVFhfQ09OVFJBQ1QpO1xuICAgICAgICAgIGFzc2VydC5lcXVhbCh0eEpzb24uc2lnbmF0dXJlLmxlbmd0aCwgMSk7XG5cbiAgICAgICAgICBjb25zdCB0eEJ1aWxkZXIzID0gZ2V0QnVpbGRlcigndHRyeCcpLmZyb20odHgyLnRvSnNvbigpKTtcbiAgICAgICAgICB0eEJ1aWxkZXIzLnNpZ24oeyBrZXk6IFBBUlRJQ0lQQU5UUy5mcm9tLnBrIH0pO1xuICAgICAgICAgIGNvbnN0IHR4MyA9IGF3YWl0IHR4QnVpbGRlcjMuYnVpbGQoKTtcblxuICAgICAgICAgIHR4SnNvbiA9IHR4My50b0pzb24oKTtcbiAgICAgICAgICByYXdEYXRhID0gdHhKc29uLnJhd19kYXRhO1xuICAgICAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwocmF3RGF0YS5jb250cmFjdCwgVFhfQ09OVFJBQ1QpO1xuICAgICAgICAgIGFzc2VydC5lcXVhbCh0eEpzb24uc2lnbmF0dXJlLmxlbmd0aCwgMik7XG5cbiAgICAgICAgICBjb25zdCB0eEJ1aWxkZXI0ID0gZ2V0QnVpbGRlcigndHRyeCcpLmZyb20odHgzLnRvSnNvbigpKTtcbiAgICAgICAgICB0eEJ1aWxkZXI0LnNpZ24oeyBrZXk6IFBBUlRJQ0lQQU5UUy5tdWx0aXNpZy5wayB9KTtcbiAgICAgICAgICBjb25zdCB0eDQgPSBhd2FpdCB0eEJ1aWxkZXI0LmJ1aWxkKCk7XG5cbiAgICAgICAgICBhc3NlcnQuZXF1YWwodHg0LmlucHV0cy5sZW5ndGgsIDEpO1xuICAgICAgICAgIGFzc2VydC5lcXVhbCh0eDQuaW5wdXRzWzBdLmFkZHJlc3MsIFBBUlRJQ0lQQU5UUy5jdXN0b2RpYW4uYWRkcmVzcyk7XG4gICAgICAgICAgaWYgKHR4NC5pbnB1dHNbMF0uY29udHJhY3RBZGRyZXNzKSB7XG4gICAgICAgICAgICBhc3NlcnQuZXF1YWwodHg0LmlucHV0c1swXS5jb250cmFjdEFkZHJlc3MsIENPTlRSQUNUUy5mYWN0b3J5KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHR4NC5pbnB1dHNbMF0uZGF0YSkge1xuICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHR4NC5pbnB1dHNbMF0uZGF0YSwgJ0sva0xxaEp6RkF3K0cxZFdza0xNaU0xOFRkaW1HL2hjdGNIZFgxQzZZZUJtdFRvVicpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhc3NlcnQuZXF1YWwodHg0LmlucHV0c1swXS52YWx1ZSwgJzAnKTtcbiAgICAgICAgICBhc3NlcnQuZXF1YWwodHg0Lm91dHB1dHNbMF0udmFsdWUsICcwJyk7XG4gICAgICAgICAgYXNzZXJ0LmVxdWFsKHR4NC5vdXRwdXRzWzBdLmFkZHJlc3MsIFBBUlRJQ0lQQU5UUy5jdXN0b2RpYW4uYWRkcmVzcyk7XG5cbiAgICAgICAgICB0eEpzb24gPSB0eDQudG9Kc29uKCk7XG4gICAgICAgICAgcmF3RGF0YSA9IHR4SnNvbi5yYXdfZGF0YTtcbiAgICAgICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHJhd0RhdGEuY29udHJhY3QsIFRYX0NPTlRSQUNUKTtcbiAgICAgICAgICBhc3NlcnQuZXF1YWwodHhKc29uLnNpZ25hdHVyZS5sZW5ndGgsIDMpO1xuICAgICAgICAgIGFzc2VydC5lcXVhbChyYXdEYXRhLmZlZV9saW1pdCwgRkVFX0xJTUlUKTtcbiAgICAgICAgICBhc3NlcnQuZXF1YWwocmF3RGF0YS5leHBpcmF0aW9uLCB0aW1lc3RhbXAgKyBFWFBJUkFUSU9OKTtcbiAgICAgICAgICBhc3NlcnQuZXF1YWwocmF3RGF0YS50aW1lc3RhbXAsIHRpbWVzdGFtcCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdhbiB1bnNpZ25lZCB0cmFuc2FjdGlvbiBmcm9tIGEgc3RyaW5nIGFuZCBmcm9tIGEgSlNPTicsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCB0aW1lc3RhbXAgPSBEYXRlLm5vdygpO1xuICAgICAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGluaXRUeEJ1aWxkZXIoKTtcbiAgICAgICAgICB0eEJ1aWxkZXIuZGF0YShNSU5UX0NPTkZJUk1fREFUQSk7XG4gICAgICAgICAgdHhCdWlsZGVyLnRpbWVzdGFtcCh0aW1lc3RhbXApO1xuICAgICAgICAgIHR4QnVpbGRlci5leHBpcmF0aW9uKHRpbWVzdGFtcCArIDQwMDAwKTtcbiAgICAgICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuXG4gICAgICAgICAgY29uc3QgdHhCdWlsZGVyMiA9IGdldEJ1aWxkZXIoJ3R0cngnKS5mcm9tKHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCkpO1xuICAgICAgICAgIHR4QnVpbGRlcjIuc2lnbih7IGtleTogUEFSVElDSVBBTlRTLmN1c3RvZGlhbi5wayB9KTtcbiAgICAgICAgICBjb25zdCB0eDIgPSBhd2FpdCB0eEJ1aWxkZXIyLmJ1aWxkKCk7XG5cbiAgICAgICAgICBjb25zdCB0eEJ1aWxkZXIzID0gZ2V0QnVpbGRlcigndHRyeCcpLmZyb20odHgudG9Kc29uKCkpO1xuICAgICAgICAgIHR4QnVpbGRlcjMuc2lnbih7IGtleTogUEFSVElDSVBBTlRTLmN1c3RvZGlhbi5wayB9KTtcbiAgICAgICAgICBjb25zdCB0eDMgPSBhd2FpdCB0eEJ1aWxkZXIzLmJ1aWxkKCk7XG5cbiAgICAgICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHR4MiwgdHgzKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ2FuIHVuc2lnbmVkIHRyYW5zYWN0aW9uIHdpdGggZXh0ZW5kZWQgZHVyYXRpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgdGltZXN0YW1wID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICBjb25zdCBleHBpcmF0aW9uID0gdGltZXN0YW1wICsgRVhQSVJBVElPTjtcbiAgICAgICAgICBjb25zdCBleHRlbnNpb24gPSA2MDAwMDtcbiAgICAgICAgICBjb25zdCB0eEJ1aWxkZXIgPSBpbml0VHhCdWlsZGVyKCk7XG4gICAgICAgICAgdHhCdWlsZGVyLmRhdGEoTUlOVF9DT05GSVJNX0RBVEEpO1xuICAgICAgICAgIHR4QnVpbGRlci50aW1lc3RhbXAodGltZXN0YW1wKTtcbiAgICAgICAgICB0eEJ1aWxkZXIuZXhwaXJhdGlvbihleHBpcmF0aW9uKTtcbiAgICAgICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuXG4gICAgICAgICAgY29uc3QgdHhCdWlsZGVyMiA9IGdldEJ1aWxkZXIoJ3R0cngnKS5mcm9tKHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCkpO1xuICAgICAgICAgIHR4QnVpbGRlcjIuZXh0ZW5kVmFsaWRUbyhleHRlbnNpb24pO1xuICAgICAgICAgIHR4QnVpbGRlcjIuc2lnbih7IGtleTogUEFSVElDSVBBTlRTLmN1c3RvZGlhbi5wayB9KTtcbiAgICAgICAgICBjb25zdCB0eDIgPSBhd2FpdCB0eEJ1aWxkZXIyLmJ1aWxkKCk7XG5cbiAgICAgICAgICBhc3NlcnQuZXF1YWwodHgyLmlucHV0cy5sZW5ndGgsIDEpO1xuICAgICAgICAgIGFzc2VydC5lcXVhbCh0eDIuaW5wdXRzWzBdLmFkZHJlc3MsIFBBUlRJQ0lQQU5UUy5jdXN0b2RpYW4uYWRkcmVzcyk7XG4gICAgICAgICAgaWYgKHR4Mi5pbnB1dHNbMF0uY29udHJhY3RBZGRyZXNzKSB7XG4gICAgICAgICAgICBhc3NlcnQuZXF1YWwodHgyLmlucHV0c1swXS5jb250cmFjdEFkZHJlc3MsIENPTlRSQUNUUy5mYWN0b3J5KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHR4Mi5pbnB1dHNbMF0uZGF0YSkge1xuICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHR4Mi5pbnB1dHNbMF0uZGF0YSwgJ0sva0xxaEp6RkF3K0cxZFdza0xNaU0xOFRkaW1HL2hjdGNIZFgxQzZZZUJtdFRvVicpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhc3NlcnQuZXF1YWwodHgyLmlucHV0c1swXS52YWx1ZSwgJzAnKTtcbiAgICAgICAgICBhc3NlcnQuZXF1YWwodHgyLm91dHB1dHNbMF0udmFsdWUsICcwJyk7XG4gICAgICAgICAgYXNzZXJ0LmVxdWFsKHR4Mi5vdXRwdXRzWzBdLmFkZHJlc3MsIFBBUlRJQ0lQQU5UUy5jdXN0b2RpYW4uYWRkcmVzcyk7XG5cbiAgICAgICAgICBjb25zdCB0eEpzb24gPSB0eDIudG9Kc29uKCk7XG4gICAgICAgICAgYXNzZXJ0LmVxdWFsKHR4SnNvbi5yYXdfZGF0YS5leHBpcmF0aW9uLCBleHBpcmF0aW9uICsgZXh0ZW5zaW9uKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ2EgdHJhbnNhY3Rpb24gd2l0aCBjb3JyZWN0IGlucHV0cycsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCB0aW1lc3RhbXAgPSBEYXRlLm5vdygpO1xuICAgICAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGluaXRUeEJ1aWxkZXIoKTtcbiAgICAgICAgICB0eEJ1aWxkZXIuZGF0YShNSU5UX0NPTkZJUk1fREFUQSk7XG4gICAgICAgICAgdHhCdWlsZGVyLnRpbWVzdGFtcCh0aW1lc3RhbXApO1xuICAgICAgICAgIHR4QnVpbGRlci5leHBpcmF0aW9uKHRpbWVzdGFtcCArIDQwMDAwKTtcbiAgICAgICAgICBjb25zdCB0eCA9IChhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKSkgYXMgVHJhbnNhY3Rpb247XG5cbiAgICAgICAgICBhc3NlcnQuZXF1YWwodHgudHlwZSwgVHJhbnNhY3Rpb25UeXBlLkNvbnRyYWN0Q2FsbCk7XG4gICAgICAgICAgYXNzZXJ0LmVxdWFsKHR4LmlucHV0cy5sZW5ndGgsIDEpO1xuICAgICAgICAgIGFzc2VydC5lcXVhbCh0eC5pbnB1dHNbMF0uYWRkcmVzcywgUEFSVElDSVBBTlRTLmN1c3RvZGlhbi5hZGRyZXNzKTtcbiAgICAgICAgICBpZiAodHguaW5wdXRzWzBdLmNvbnRyYWN0QWRkcmVzcykge1xuICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHR4LmlucHV0c1swXS5jb250cmFjdEFkZHJlc3MsIENPTlRSQUNUUy5mYWN0b3J5KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHR4LmlucHV0c1swXS5kYXRhKSB7XG4gICAgICAgICAgICBhc3NlcnQuZXF1YWwodHguaW5wdXRzWzBdLmRhdGEsICdLL2tMcWhKekZBdytHMWRXc2tMTWlNMThUZGltRy9oY3RjSGRYMUM2WWVCbXRUb1YnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYXNzZXJ0LmVxdWFsKHR4LmlucHV0c1swXS52YWx1ZSwgJzAnKTtcbiAgICAgICAgICBhc3NlcnQuZXF1YWwodHgub3V0cHV0c1swXS52YWx1ZSwgJzAnKTtcbiAgICAgICAgICBhc3NlcnQuZXF1YWwodHgub3V0cHV0c1swXS5hZGRyZXNzLCBQQVJUSUNJUEFOVFMuY3VzdG9kaWFuLmFkZHJlc3MpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3Nob3VsZCBmYWlsIHRvIGJ1aWxkJywgKCkgPT4ge1xuICAgICAgaXQoJ2EgdHJhbnNhY3Rpb24gd2l0aCB3cm9uZyBkYXRhJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB0eEJ1aWxkZXIgPSBpbml0VHhCdWlsZGVyKCk7XG4gICAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgdHhCdWlsZGVyLmRhdGEoJ2FkZE1pbnRSZXF1ZXN0KCknKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIChlOiBhbnkpID0+IGUubWVzc2FnZSA9PT0gJ2FkZE1pbnRSZXF1ZXN0KCkgaXMgbm90IGEgdmFsaWQgaGV4IHN0cmluZy4nXG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2EgdHJhbnNhY3Rpb24gd2l0aCBkdXBsaWNhdGUgc2lnbmF0dXJlcycsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyID0gaW5pdFR4QnVpbGRlcigpO1xuICAgICAgICB0eEJ1aWxkZXIuZGF0YShNSU5UX0NPTkZJUk1fREFUQSk7XG4gICAgICAgIHR4QnVpbGRlci5zaWduKHsga2V5OiBQQVJUSUNJUEFOVFMuY3VzdG9kaWFuLnBrIH0pO1xuICAgICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHR4QnVpbGRlci5zaWduKHsga2V5OiBQQVJUSUNJUEFOVFMuY3VzdG9kaWFuLnBrIH0pO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgKGU6IGFueSkgPT4gZS5tZXNzYWdlID09PSAnRHVwbGljYXRlZCBrZXknXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG5cbiAgICAgICAgY29uc3QgdHhCdWlsZGVyMiA9IGdldEJ1aWxkZXIoJ3R0cngnKS5mcm9tKHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCkpO1xuICAgICAgICB0eEJ1aWxkZXIyLnNpZ24oeyBrZXk6IFBBUlRJQ0lQQU5UUy5jdXN0b2RpYW4ucGsgfSk7XG4gICAgICAgIGFzc2VydC5yZWplY3RzKHR4QnVpbGRlcjIuYnVpbGQoKSwge1xuICAgICAgICAgIG1lc3NhZ2U6ICdUcmFuc2FjdGlvbiBzaWduaW5nIGRpZCBub3QgcmV0dXJuIGFuIGFkZGl0aW9uYWwgc2lnbmF0dXJlLicsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdhbiBpbnZhbGlkIHJhdyB0cmFuc2FjdGlvbicsICgpID0+IHtcbiAgICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICBnZXRCdWlsZGVyKCd0dHJ4JykuZnJvbSgnYW4gaW52YWxpZCByYXcgdHJhbnNhY3Rpb24nKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIChlOiBhbnkpID0+IGUubWVzc2FnZSA9PT0gJ1RoZXJlIHdhcyBlcnJvciBpbiBwYXJzaW5nIHRoZSBKU09OIHN0cmluZydcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnU2hvdWxkIHZhbGlkYXRlICcsICgpID0+IHtcbiAgICBpdCgnYSB2YWxpZCBleHBpcmF0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgIGNvbnN0IGV4cGlyYXRpb24gPSBub3cgKyBFWFBJUkFUSU9OO1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gaW5pdFR4QnVpbGRlcigpO1xuICAgICAgdHhCdWlsZGVyLmRhdGEoTUlOVF9DT05GSVJNX0RBVEEpO1xuICAgICAgdHhCdWlsZGVyLnRpbWVzdGFtcChub3cpO1xuICAgICAgdHhCdWlsZGVyLmV4cGlyYXRpb24oZXhwaXJhdGlvbiArIDEwMDApO1xuICAgICAgdHhCdWlsZGVyLmV4cGlyYXRpb24oZXhwaXJhdGlvbik7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG4gICAgICBhc3NlcnQuZXF1YWwodHhKc29uLnJhd19kYXRhLmV4cGlyYXRpb24sIGV4cGlyYXRpb24pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2FuIGV4cGlyYXRpb24gZ3JlYXRlciB0aGFuIG9uZSB5ZWFyJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGluaXRUeEJ1aWxkZXIoKTtcbiAgICAgIHR4QnVpbGRlci5kYXRhKE1JTlRfQ09ORklSTV9EQVRBKTtcbiAgICAgIHR4QnVpbGRlci50aW1lc3RhbXAobm93KTtcbiAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICB0eEJ1aWxkZXIuZXhwaXJhdGlvbihub3cgKyAzMTUzNjAwMDAwMSk7XG4gICAgICAgIH0sXG4gICAgICAgIChlOiBhbnkpID0+IGUubWVzc2FnZSA9PT0gJ0V4cGlyYXRpb24gbXVzdCBub3QgYmUgZ3JlYXRlciB0aGFuIG9uZSBkYXknXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ2FuIGV4cGlyYXRpb24gbGVzcyB0aGFuIHRoZSBjdXJyZW50IGRhdGUnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gaW5pdFR4QnVpbGRlcigpO1xuICAgICAgdHhCdWlsZGVyLnRpbWVzdGFtcChub3cgLSAyMDAwKTtcbiAgICAgIHR4QnVpbGRlci5kYXRhKE1JTlRfQ09ORklSTV9EQVRBKTtcbiAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICB0eEJ1aWxkZXIuZXhwaXJhdGlvbihub3cgLSAxMDAwKTtcbiAgICAgICAgfSxcbiAgICAgICAgKGU6IGFueSkgPT4gZS5tZXNzYWdlID09PSAnRXhwaXJhdGlvbiBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBjdXJyZW50IHRpbWUnXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ2FuIGV4cGlyYXRpb24gbGVzcyB0aGFuIHRoZSB0aW1lc3RhbXAnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gaW5pdFR4QnVpbGRlcigpO1xuICAgICAgdHhCdWlsZGVyLmRhdGEoTUlOVF9DT05GSVJNX0RBVEEpO1xuICAgICAgdHhCdWlsZGVyLnRpbWVzdGFtcChub3cgKyAyMDAwKTtcbiAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICB0eEJ1aWxkZXIuZXhwaXJhdGlvbihub3cgKyAxMDAwKTtcbiAgICAgICAgfSxcbiAgICAgICAgKGU6IGFueSkgPT4gZS5tZXNzYWdlID09PSAnRXhwaXJhdGlvbiBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB0aW1lc3RhbXAnXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ2FuIGV4cGlyYXRpb24gc2V0IGFmdGVyIGJ1aWxkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgIGNvbnN0IGV4cGlyYXRpb24gPSBub3cgKyBFWFBJUkFUSU9OO1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gaW5pdFR4QnVpbGRlcigpO1xuICAgICAgdHhCdWlsZGVyLmRhdGEoTUlOVF9DT05GSVJNX0RBVEEpO1xuICAgICAgYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgdHhCdWlsZGVyLmV4cGlyYXRpb24oZXhwaXJhdGlvbik7XG4gICAgICAgIH0sXG4gICAgICAgIChlOiBhbnkpID0+IGUubWVzc2FnZSA9PT0gJ0V4cGlyYXRpb24gaXMgYWxyZWFkeSBzZXQsIGl0IGNhbiBvbmx5IGJlIGV4dGVuZGVkJ1xuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdhbiBleHBpcmF0aW9uIHNldCBhZnRlciBkZXNlcmlhbGl6aW5nJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgIGNvbnN0IGV4cGlyYXRpb24gPSBub3cgKyBFWFBJUkFUSU9OO1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gaW5pdFR4QnVpbGRlcigpO1xuICAgICAgdHhCdWlsZGVyLmRhdGEoTUlOVF9DT05GSVJNX0RBVEEpO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHR4QnVpbGRlcjIgPSBnZXRCdWlsZGVyKCd0dHJ4JykuZnJvbSh0eC50b0Jyb2FkY2FzdEZvcm1hdCgpKTtcbiAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICB0eEJ1aWxkZXIyLmV4cGlyYXRpb24oZXhwaXJhdGlvbik7XG4gICAgICAgIH0sXG4gICAgICAgIChlOiBhbnkpID0+IGUubWVzc2FnZSA9PT0gJ0V4cGlyYXRpb24gaXMgYWxyZWFkeSBzZXQsIGl0IGNhbiBvbmx5IGJlIGV4dGVuZGVkJ1xuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdhbiBleHRlbnNpb24gd2l0aG91dCBhIHNldCBleHBpcmF0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gaW5pdFR4QnVpbGRlcigpO1xuICAgICAgdHhCdWlsZGVyLmRhdGEoTUlOVF9DT05GSVJNX0RBVEEpO1xuICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIHR4QnVpbGRlci5leHRlbmRWYWxpZFRvKDIwMDAwKTtcbiAgICAgICAgfSxcbiAgICAgICAgKGU6IGFueSkgPT4gZS5tZXNzYWdlID09PSAnVGhlcmUgaXMgbm90IGV4cGlyYXRpb24gdG8gZXh0ZW5kJ1xuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdhIHplcm8gbWlsbGlzZWNvbmQgZXh0ZW5zaW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gaW5pdFR4QnVpbGRlcigpO1xuICAgICAgdHhCdWlsZGVyLmRhdGEoTUlOVF9DT05GSVJNX0RBVEEpO1xuICAgICAgY29uc3QgZXhwaXJhdGlvbiA9IERhdGUubm93KCkgKyBFWFBJUkFUSU9OO1xuICAgICAgdHhCdWlsZGVyLmV4cGlyYXRpb24oZXhwaXJhdGlvbik7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuXG4gICAgICBjb25zdCB0eEJ1aWxkZXIyID0gZ2V0QnVpbGRlcigndHRyeCcpLmZyb20odHgudG9Ccm9hZGNhc3RGb3JtYXQoKSk7XG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgdHhCdWlsZGVyMi5leHRlbmRWYWxpZFRvKDApO1xuICAgICAgICB9LFxuICAgICAgICAoZTogYW55KSA9PiBlLm1lc3NhZ2UgPT09ICdWYWx1ZSBjYW5ub3QgYmUgYmVsb3cgemVybydcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnYW4gZXh0ZW5zaW9uIGdyYXRlciB0aGFuIG9uZSB5ZWFyJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gaW5pdFR4QnVpbGRlcigpO1xuICAgICAgdHhCdWlsZGVyLmRhdGEoTUlOVF9DT05GSVJNX0RBVEEpO1xuICAgICAgY29uc3QgZXhwaXJhdGlvbiA9IERhdGUubm93KCkgKyBFWFBJUkFUSU9OO1xuICAgICAgdHhCdWlsZGVyLmV4cGlyYXRpb24oZXhwaXJhdGlvbik7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuXG4gICAgICBjb25zdCB0eEJ1aWxkZXIyID0gZ2V0QnVpbGRlcigndHRyeCcpLmZyb20odHgudG9Ccm9hZGNhc3RGb3JtYXQoKSk7XG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgdHhCdWlsZGVyMi5leHRlbmRWYWxpZFRvKDMxNTM2MDAwMDAxKTtcbiAgICAgICAgfSxcbiAgICAgICAgKGU6IGFueSkgPT4gZS5tZXNzYWdlID09PSAnVGhlIGV4cGlyYXRpb24gY2Fubm90IGJlIGV4dGVuZGVkIG1vcmUgdGhhbiBvbmUgeWVhcidcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnYW4gZXh0ZW5zaW9uIGFmdGVyIHNpZ25pbmcnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBpbml0VHhCdWlsZGVyKCk7XG4gICAgICB0eEJ1aWxkZXIuZGF0YShNSU5UX0NPTkZJUk1fREFUQSk7XG4gICAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogUEFSVElDSVBBTlRTLmN1c3RvZGlhbi5wayB9KTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG5cbiAgICAgIGNvbnN0IHR4QnVpbGRlcjIgPSBnZXRCdWlsZGVyKCd0dHJ4JykuZnJvbSh0eC50b0Jyb2FkY2FzdEZvcm1hdCgpKTtcbiAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICB0eEJ1aWxkZXIyLmV4dGVuZFZhbGlkVG8oMjAwMDApO1xuICAgICAgICB9LFxuICAgICAgICAoZTogYW55KSA9PiBlLm1lc3NhZ2UgPT09ICdDYW5ub3QgZXh0ZW5kIGEgc2lnbmVkIHRyYW5zYWN0aW9uJ1xuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdmZWUgbGltaXQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBpbml0VHhCdWlsZGVyKCk7XG4gICAgICB0eEJ1aWxkZXIuZGF0YShNSU5UX0NPTkZJUk1fREFUQSk7XG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgdHhCdWlsZGVyLmZlZSh7IGZlZUxpbWl0OiAnbm90IGEgbnVtYmVyJyB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgKGU6IGFueSkgPT4gZS5tZXNzYWdlID09PSAnSW52YWxpZCBmZWUgbGltaXQgdmFsdWUnXG4gICAgICApO1xuXG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgdHhCdWlsZGVyLmZlZSh7IGZlZUxpbWl0OiAnLTE1MDAwJyB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgKGU6IGFueSkgPT4gZS5tZXNzYWdlID09PSAnSW52YWxpZCBmZWUgbGltaXQgdmFsdWUnXG4gICAgICApO1xuXG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgdHJvbk5ldHdvcmsgPSBjb2lucy5nZXQoJ3R0cngnKS5uZXR3b3JrIGFzIFRyb25OZXR3b3JrO1xuICAgICAgICAgIHR4QnVpbGRlci5mZWUoeyBmZWVMaW1pdDogbmV3IEJpZ051bWJlcih0cm9uTmV0d29yay5tYXhGZWVMaW1pdCkucGx1cygxKS50b1N0cmluZygpIH0pO1xuICAgICAgICB9LFxuICAgICAgICAoZTogYW55KSA9PiBlLm1lc3NhZ2UgPT09ICdJbnZhbGlkIGZlZSBsaW1pdCB2YWx1ZSdcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgndHJhbnNhY3Rpb24gbWFuZGF0b3J5IGZpZWxkcycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IChnZXRCdWlsZGVyKCd0dHJ4JykgYXMgV3JhcHBlZEJ1aWxkZXIpLmdldENvbnRyYWN0Q2FsbEJ1aWxkZXIoKTtcbiAgICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKHR4QnVpbGRlci5idWlsZCgpLCB7XG4gICAgICAgIG1lc3NhZ2U6ICdNaXNzaW5nIHBhcmFtZXRlcjogZGF0YScsXG4gICAgICB9KTtcblxuICAgICAgdHhCdWlsZGVyLmRhdGEoTUlOVF9DT05GSVJNX0RBVEEpO1xuICAgICAgYXdhaXQgYXNzZXJ0LnJlamVjdHModHhCdWlsZGVyLmJ1aWxkKCksIHtcbiAgICAgICAgbWVzc2FnZTogJ01pc3NpbmcgcGFyYW1ldGVyOiBzb3VyY2UnLFxuICAgICAgfSk7XG5cbiAgICAgIHR4QnVpbGRlci5zb3VyY2UoeyBhZGRyZXNzOiBQQVJUSUNJUEFOVFMuY3VzdG9kaWFuLmFkZHJlc3MgfSk7XG4gICAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyh0eEJ1aWxkZXIuYnVpbGQoKSwge1xuICAgICAgICBtZXNzYWdlOiAnTWlzc2luZyBwYXJhbWV0ZXI6IGNvbnRyYWN0IGFkZHJlc3MnLFxuICAgICAgfSk7XG5cbiAgICAgIHR4QnVpbGRlci50byh7IGFkZHJlc3M6IENPTlRSQUNUUy5mYWN0b3J5IH0pO1xuICAgICAgYXdhaXQgYXNzZXJ0LnJlamVjdHModHhCdWlsZGVyLmJ1aWxkKCksIHtcbiAgICAgICAgbWVzc2FnZTogJ01pc3NpbmcgYmxvY2sgcmVmZXJlbmNlIGluZm9ybWF0aW9uJyxcbiAgICAgIH0pO1xuXG4gICAgICB0eEJ1aWxkZXIuYmxvY2soeyBudW1iZXI6IEJMT0NLX05VTUJFUiwgaGFzaDogQkxPQ0tfSEFTSCB9KTtcbiAgICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKHR4QnVpbGRlci5idWlsZCgpLCB7XG4gICAgICAgIG1lc3NhZ2U6ICdNaXNzaW5nIGZlZScsXG4gICAgICB9KTtcblxuICAgICAgdHhCdWlsZGVyLmZlZSh7IGZlZUxpbWl0OiBGRUVfTElNSVQgfSk7XG4gICAgICBhc3NlcnQuZG9lc05vdFJlamVjdCgoKSA9PiB7XG4gICAgICAgIHJldHVybiB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delegateResourceTxBuilder.d.ts","sourceRoot":"","sources":["../../../../test/unit/transactionBuilder/delegateResourceTxBuilder.ts"],"names":[],"mappings":""}
|