@bitgo-beta/sdk-coin-flrp 1.0.1-beta.9 → 1.0.1-beta.91
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/src/flrp.d.ts +82 -61
- package/dist/src/flrp.d.ts.map +1 -1
- package/dist/src/flrp.js +293 -134
- package/dist/src/lib/atomicTransactionBuilder.d.ts +42 -6
- package/dist/src/lib/atomicTransactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/atomicTransactionBuilder.js +233 -29
- package/dist/src/lib/constants.d.ts +160 -1
- package/dist/src/lib/constants.d.ts.map +1 -1
- package/dist/src/lib/constants.js +213 -3
- package/dist/src/lib/delegatorTxBuilder.d.ts +58 -0
- package/dist/src/lib/delegatorTxBuilder.d.ts.map +1 -0
- package/dist/src/lib/delegatorTxBuilder.js +224 -0
- package/dist/src/lib/exportInCTxBuilder.d.ts +1 -1
- package/dist/src/lib/exportInCTxBuilder.d.ts.map +1 -1
- package/dist/src/lib/exportInCTxBuilder.js +46 -17
- package/dist/src/lib/exportInPTxBuilder.d.ts +1 -1
- package/dist/src/lib/exportInPTxBuilder.d.ts.map +1 -1
- package/dist/src/lib/exportInPTxBuilder.js +70 -6
- package/dist/src/lib/iface.d.ts +52 -1
- package/dist/src/lib/iface.d.ts.map +1 -1
- package/dist/src/lib/iface.js +1 -1
- package/dist/src/lib/importInCTxBuilder.d.ts +67 -0
- package/dist/src/lib/importInCTxBuilder.d.ts.map +1 -0
- package/dist/src/lib/importInCTxBuilder.js +403 -0
- package/dist/src/lib/importInPTxBuilder.d.ts +73 -0
- package/dist/src/lib/importInPTxBuilder.d.ts.map +1 -0
- package/dist/src/lib/importInPTxBuilder.js +464 -0
- package/dist/src/lib/index.d.ts +7 -0
- package/dist/src/lib/index.d.ts.map +1 -1
- package/dist/src/lib/index.js +15 -2
- package/dist/src/lib/keyPair.d.ts.map +1 -1
- package/dist/src/lib/keyPair.js +4 -6
- package/dist/src/lib/permissionlessValidatorTxBuilder.d.ts +81 -0
- package/dist/src/lib/permissionlessValidatorTxBuilder.d.ts.map +1 -0
- package/dist/src/lib/permissionlessValidatorTxBuilder.js +248 -0
- package/dist/src/lib/transaction.d.ts +111 -0
- package/dist/src/lib/transaction.d.ts.map +1 -0
- package/dist/src/lib/transaction.js +322 -0
- package/dist/src/lib/transactionBuilder.d.ts +85 -0
- package/dist/src/lib/transactionBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder.js +167 -0
- package/dist/src/lib/transactionBuilderFactory.d.ts +37 -0
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilderFactory.js +91 -0
- package/dist/src/lib/types.d.ts +78 -0
- package/dist/src/lib/types.d.ts.map +1 -0
- package/dist/src/lib/types.js +5 -0
- package/dist/src/lib/utils.d.ts +59 -0
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +160 -52
- package/dist/src/lib/validatorTxBuilder.d.ts +40 -0
- package/dist/src/lib/validatorTxBuilder.d.ts.map +1 -0
- package/dist/src/lib/validatorTxBuilder.js +180 -0
- package/dist/test/unit/delegatorTxBuilder.test.d.ts +2 -0
- package/dist/test/unit/delegatorTxBuilder.test.d.ts.map +1 -0
- package/dist/test/unit/delegatorTxBuilder.test.js +233 -0
- package/dist/test/unit/lib/atomicTransactionBuilder.js +37 -11
- package/dist/test/unit/lib/exportInCTxBuilder.d.ts +2 -0
- package/dist/test/unit/lib/exportInCTxBuilder.d.ts.map +1 -0
- package/dist/test/unit/lib/exportInCTxBuilder.js +584 -0
- package/dist/test/unit/lib/exportInPTxBuilder.d.ts +2 -0
- package/dist/test/unit/lib/exportInPTxBuilder.d.ts.map +1 -0
- package/dist/test/unit/lib/exportInPTxBuilder.js +377 -0
- package/dist/test/unit/lib/importInCTxBuilder.d.ts +2 -0
- package/dist/test/unit/lib/importInCTxBuilder.d.ts.map +1 -0
- package/dist/test/unit/lib/importInCTxBuilder.js +257 -0
- package/dist/test/unit/lib/importInPTxBuilder.d.ts +2 -0
- package/dist/test/unit/lib/importInPTxBuilder.d.ts.map +1 -0
- package/dist/test/unit/lib/importInPTxBuilder.js +500 -0
- package/dist/test/unit/lib/transaction.d.ts +2 -0
- package/dist/test/unit/lib/transaction.d.ts.map +1 -0
- package/dist/test/unit/lib/transaction.js +460 -0
- package/dist/test/unit/lib/utils.js +55 -1
- package/dist/test/unit/permissionlessValidatorTxBuilder.test.d.ts +2 -0
- package/dist/test/unit/permissionlessValidatorTxBuilder.test.d.ts.map +1 -0
- package/dist/test/unit/permissionlessValidatorTxBuilder.test.js +271 -0
- package/dist/test/unit/transactionBuilder.test.d.ts +2 -0
- package/dist/test/unit/transactionBuilder.test.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder.test.js +114 -0
- package/dist/test/unit/validatorTxBuilder.test.d.ts +2 -0
- package/dist/test/unit/validatorTxBuilder.test.d.ts.map +1 -0
- package/dist/test/unit/validatorTxBuilder.test.js +293 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +11 -11
- package/.eslintignore +0 -5
- package/.eslintrc.json +0 -7
- package/.mocharc.yml +0 -8
- package/CHANGELOG.md +0 -0
- package/dist/test/unit/lib/exportTxBuilder.d.ts +0 -2
- package/dist/test/unit/lib/exportTxBuilder.d.ts.map +0 -1
- package/dist/test/unit/lib/exportTxBuilder.js +0 -45
|
@@ -0,0 +1,500 @@
|
|
|
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 statics_1 = require("@bitgo-beta/statics");
|
|
40
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
41
|
+
const assert = __importStar(require("assert"));
|
|
42
|
+
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
43
|
+
const importInPTxBuilder_1 = require("../../../src/lib/importInPTxBuilder");
|
|
44
|
+
describe('ImportInPTxBuilder', function () {
|
|
45
|
+
const coinConfig = statics_1.coins.get('tflrp');
|
|
46
|
+
let builder;
|
|
47
|
+
beforeEach(function () {
|
|
48
|
+
builder = new importInPTxBuilder_1.ImportInPTxBuilder(coinConfig);
|
|
49
|
+
});
|
|
50
|
+
describe('Constructor', function () {
|
|
51
|
+
it('should initialize with coin config', function () {
|
|
52
|
+
assert.ok(builder);
|
|
53
|
+
assert.ok(builder instanceof importInPTxBuilder_1.ImportInPTxBuilder);
|
|
54
|
+
});
|
|
55
|
+
it('should initialize with default values', function () {
|
|
56
|
+
// Builder should be initialized without throwing errors
|
|
57
|
+
assert.ok(builder);
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
describe('UTXO Management', function () {
|
|
61
|
+
it('should add single UTXO', function () {
|
|
62
|
+
const utxo = {
|
|
63
|
+
outputID: 1,
|
|
64
|
+
amount: '1000000000000000000', // 1 FLR
|
|
65
|
+
txid: 'test-txid-single',
|
|
66
|
+
outputidx: '0',
|
|
67
|
+
threshold: 1,
|
|
68
|
+
addresses: ['C-flare1test'],
|
|
69
|
+
};
|
|
70
|
+
assert.doesNotThrow(() => {
|
|
71
|
+
builder.addUtxos([utxo]);
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
it('should add multiple UTXOs', function () {
|
|
75
|
+
const utxos = [
|
|
76
|
+
{
|
|
77
|
+
outputID: 1,
|
|
78
|
+
amount: '1000000000000000000', // 1 FLR
|
|
79
|
+
txid: 'test-txid-1',
|
|
80
|
+
outputidx: '0',
|
|
81
|
+
threshold: 1,
|
|
82
|
+
addresses: ['C-flare1test1'],
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
outputID: 2,
|
|
86
|
+
amount: '2000000000000000000', // 2 FLR
|
|
87
|
+
txid: 'test-txid-2',
|
|
88
|
+
outputidx: '1',
|
|
89
|
+
threshold: 2,
|
|
90
|
+
addresses: ['C-flare1test2', 'C-flare1test3'],
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
outputID: 3,
|
|
94
|
+
amount: '500000000000000000', // 0.5 FLR
|
|
95
|
+
txid: 'test-txid-3',
|
|
96
|
+
outputidx: '0',
|
|
97
|
+
threshold: 1,
|
|
98
|
+
addresses: ['C-flare1test4'],
|
|
99
|
+
},
|
|
100
|
+
];
|
|
101
|
+
assert.doesNotThrow(() => {
|
|
102
|
+
builder.addUtxos(utxos);
|
|
103
|
+
});
|
|
104
|
+
});
|
|
105
|
+
it('should handle empty UTXO array', function () {
|
|
106
|
+
assert.doesNotThrow(() => {
|
|
107
|
+
builder.addUtxos([]);
|
|
108
|
+
});
|
|
109
|
+
});
|
|
110
|
+
it('should accumulate UTXOs from multiple calls', function () {
|
|
111
|
+
const utxos1 = [
|
|
112
|
+
{
|
|
113
|
+
outputID: 1,
|
|
114
|
+
amount: '1000000000000000000',
|
|
115
|
+
txid: 'test-txid-1',
|
|
116
|
+
outputidx: '0',
|
|
117
|
+
threshold: 1,
|
|
118
|
+
addresses: ['C-flare1test1'],
|
|
119
|
+
},
|
|
120
|
+
];
|
|
121
|
+
const utxos2 = [
|
|
122
|
+
{
|
|
123
|
+
outputID: 2,
|
|
124
|
+
amount: '2000000000000000000',
|
|
125
|
+
txid: 'test-txid-2',
|
|
126
|
+
outputidx: '0',
|
|
127
|
+
threshold: 1,
|
|
128
|
+
addresses: ['C-flare1test2'],
|
|
129
|
+
},
|
|
130
|
+
];
|
|
131
|
+
builder.addUtxos(utxos1);
|
|
132
|
+
builder.addUtxos(utxos2);
|
|
133
|
+
// Should not throw
|
|
134
|
+
assert.ok(true);
|
|
135
|
+
});
|
|
136
|
+
});
|
|
137
|
+
describe('Fee Management', function () {
|
|
138
|
+
it('should set valid positive fee', function () {
|
|
139
|
+
const validFees = ['1000', '0', '1000000000000000000', '999999999999999999'];
|
|
140
|
+
validFees.forEach((fee) => {
|
|
141
|
+
assert.doesNotThrow(() => {
|
|
142
|
+
builder.fee(fee);
|
|
143
|
+
}, `Should accept fee: ${fee}`);
|
|
144
|
+
});
|
|
145
|
+
});
|
|
146
|
+
it('should reject negative fees', function () {
|
|
147
|
+
const negativeFees = ['-1', '-1000', '-1000000000000000000'];
|
|
148
|
+
negativeFees.forEach((fee) => {
|
|
149
|
+
assert.throws(() => {
|
|
150
|
+
builder.fee(fee);
|
|
151
|
+
}, sdk_core_1.BuildTransactionError, `Should reject negative fee: ${fee}`);
|
|
152
|
+
});
|
|
153
|
+
});
|
|
154
|
+
it('should handle invalid fee formats (BigNumber behavior)', function () {
|
|
155
|
+
const invalidFees = ['abc', 'not-a-number', '1.5.5', 'infinity'];
|
|
156
|
+
invalidFees.forEach((fee) => {
|
|
157
|
+
// BigNumber doesn't throw for invalid strings, it creates NaN values
|
|
158
|
+
// But our implementation should still accept them (no additional validation)
|
|
159
|
+
assert.doesNotThrow(() => {
|
|
160
|
+
builder.fee(fee);
|
|
161
|
+
}, `BigNumber accepts invalid strings: ${fee}`);
|
|
162
|
+
});
|
|
163
|
+
});
|
|
164
|
+
it('should handle BigNumber fee inputs', function () {
|
|
165
|
+
const bigNumberFee = new bignumber_js_1.default('1000000000000000000');
|
|
166
|
+
assert.doesNotThrow(() => {
|
|
167
|
+
builder.fee(bigNumberFee.toString());
|
|
168
|
+
});
|
|
169
|
+
});
|
|
170
|
+
it('should chain fee setting with other methods', function () {
|
|
171
|
+
const fee = '1000';
|
|
172
|
+
const utxo = {
|
|
173
|
+
outputID: 1,
|
|
174
|
+
amount: '1000000000000000000',
|
|
175
|
+
txid: 'test-txid',
|
|
176
|
+
outputidx: '0',
|
|
177
|
+
threshold: 1,
|
|
178
|
+
addresses: ['C-flare1test'],
|
|
179
|
+
};
|
|
180
|
+
assert.doesNotThrow(() => {
|
|
181
|
+
builder.fee(fee).addUtxos([utxo]);
|
|
182
|
+
});
|
|
183
|
+
});
|
|
184
|
+
});
|
|
185
|
+
describe('Locktime Management', function () {
|
|
186
|
+
it('should set valid locktime values', function () {
|
|
187
|
+
const validLocktimes = [0, 1, 1000, 4294967295]; // Max uint32
|
|
188
|
+
validLocktimes.forEach((locktime) => {
|
|
189
|
+
assert.doesNotThrow(() => {
|
|
190
|
+
builder.locktime(locktime);
|
|
191
|
+
}, `Should accept locktime: ${locktime}`);
|
|
192
|
+
});
|
|
193
|
+
});
|
|
194
|
+
it('should handle negative locktime (no validation)', function () {
|
|
195
|
+
const negativeLocktimes = [-1, -1000];
|
|
196
|
+
negativeLocktimes.forEach((locktime) => {
|
|
197
|
+
assert.doesNotThrow(() => {
|
|
198
|
+
builder.locktime(locktime);
|
|
199
|
+
}, `Should accept negative locktime: ${locktime} (no validation in implementation)`);
|
|
200
|
+
});
|
|
201
|
+
});
|
|
202
|
+
it('should handle boundary values', function () {
|
|
203
|
+
const boundaryValues = [0, 4294967295]; // Min and max uint32
|
|
204
|
+
boundaryValues.forEach((locktime) => {
|
|
205
|
+
assert.doesNotThrow(() => {
|
|
206
|
+
builder.locktime(locktime);
|
|
207
|
+
});
|
|
208
|
+
});
|
|
209
|
+
});
|
|
210
|
+
it('should chain locktime setting with other methods', function () {
|
|
211
|
+
const locktime = 123456;
|
|
212
|
+
const fee = '1000';
|
|
213
|
+
assert.doesNotThrow(() => {
|
|
214
|
+
builder.locktime(locktime).fee(fee);
|
|
215
|
+
});
|
|
216
|
+
});
|
|
217
|
+
});
|
|
218
|
+
describe('Threshold Management', function () {
|
|
219
|
+
it('should set valid threshold values', function () {
|
|
220
|
+
const validThresholds = [1, 2, 5, 10];
|
|
221
|
+
validThresholds.forEach((threshold) => {
|
|
222
|
+
assert.doesNotThrow(() => {
|
|
223
|
+
builder.threshold(threshold);
|
|
224
|
+
}, `Should accept threshold: ${threshold}`);
|
|
225
|
+
});
|
|
226
|
+
});
|
|
227
|
+
it('should reject invalid threshold values', function () {
|
|
228
|
+
const invalidThresholds = [0, -1, -10];
|
|
229
|
+
invalidThresholds.forEach((threshold) => {
|
|
230
|
+
assert.throws(() => {
|
|
231
|
+
builder.threshold(threshold);
|
|
232
|
+
}, sdk_core_1.BuildTransactionError, `Should reject threshold: ${threshold}`);
|
|
233
|
+
});
|
|
234
|
+
});
|
|
235
|
+
it('should handle typical threshold scenarios', function () {
|
|
236
|
+
// Single signature
|
|
237
|
+
assert.doesNotThrow(() => {
|
|
238
|
+
builder.threshold(1);
|
|
239
|
+
});
|
|
240
|
+
// Multi-signature
|
|
241
|
+
assert.doesNotThrow(() => {
|
|
242
|
+
builder.threshold(3);
|
|
243
|
+
});
|
|
244
|
+
});
|
|
245
|
+
it('should chain threshold setting with other methods', function () {
|
|
246
|
+
const threshold = 2;
|
|
247
|
+
const locktime = 123456;
|
|
248
|
+
assert.doesNotThrow(() => {
|
|
249
|
+
builder.threshold(threshold).locktime(locktime);
|
|
250
|
+
});
|
|
251
|
+
});
|
|
252
|
+
});
|
|
253
|
+
describe('Source Chain Management', function () {
|
|
254
|
+
it('should set valid source chain IDs', function () {
|
|
255
|
+
const validChainIds = ['C-flare12345', 'NodeID-flare67890', '0x123456789abcdef', 'abc123def456'];
|
|
256
|
+
validChainIds.forEach((chainId) => {
|
|
257
|
+
assert.doesNotThrow(() => {
|
|
258
|
+
builder.sourceChain(chainId);
|
|
259
|
+
}, `Should accept chain ID: ${chainId}`);
|
|
260
|
+
});
|
|
261
|
+
});
|
|
262
|
+
it('should handle different chain ID formats', function () {
|
|
263
|
+
const chainIds = ['C-chain-id-123', 'P-chain-id-456', 'hex-formatted-id', '1234567890abcdef'];
|
|
264
|
+
chainIds.forEach((chainId) => {
|
|
265
|
+
assert.doesNotThrow(() => {
|
|
266
|
+
builder.sourceChain(chainId);
|
|
267
|
+
});
|
|
268
|
+
});
|
|
269
|
+
});
|
|
270
|
+
});
|
|
271
|
+
describe('Input/Output Creation', function () {
|
|
272
|
+
it('should test public methods only due to protected access', function () {
|
|
273
|
+
// Note: createInputOutput is protected, so we test through public interface
|
|
274
|
+
// Test that we can set parameters that would be used by createInputOutput
|
|
275
|
+
assert.doesNotThrow(() => {
|
|
276
|
+
builder.fee('1000');
|
|
277
|
+
builder.threshold(1);
|
|
278
|
+
// Protected method cannot be tested directly
|
|
279
|
+
});
|
|
280
|
+
});
|
|
281
|
+
it('should handle configuration for output creation', function () {
|
|
282
|
+
const fee = '1000';
|
|
283
|
+
const locktime = 0;
|
|
284
|
+
const threshold = 1;
|
|
285
|
+
assert.doesNotThrow(() => {
|
|
286
|
+
builder.fee(fee).locktime(locktime).threshold(threshold);
|
|
287
|
+
});
|
|
288
|
+
});
|
|
289
|
+
it('should allow setting parameters for large amounts', function () {
|
|
290
|
+
const locktime = 0;
|
|
291
|
+
const threshold = 1;
|
|
292
|
+
assert.doesNotThrow(() => {
|
|
293
|
+
builder.fee('1000').locktime(locktime).threshold(threshold);
|
|
294
|
+
});
|
|
295
|
+
});
|
|
296
|
+
it('should configure for different threshold scenarios', function () {
|
|
297
|
+
const locktime = 0;
|
|
298
|
+
// Test different thresholds
|
|
299
|
+
[1, 2, 3].forEach((threshold) => {
|
|
300
|
+
assert.doesNotThrow(() => {
|
|
301
|
+
builder.threshold(threshold).locktime(locktime);
|
|
302
|
+
});
|
|
303
|
+
});
|
|
304
|
+
});
|
|
305
|
+
});
|
|
306
|
+
describe('Transaction Type Verification', function () {
|
|
307
|
+
it('should verify transaction type (placeholder)', function () {
|
|
308
|
+
const mockTx = { type: 'import' };
|
|
309
|
+
const result = importInPTxBuilder_1.ImportInPTxBuilder.verifyTxType(mockTx);
|
|
310
|
+
assert.strictEqual(result, true); // Placeholder returns true
|
|
311
|
+
});
|
|
312
|
+
it('should handle different transaction objects', function () {
|
|
313
|
+
const testCases = [{}, null, undefined, { type: 'export' }, { data: 'test' }];
|
|
314
|
+
testCases.forEach((testCase, index) => {
|
|
315
|
+
const result = importInPTxBuilder_1.ImportInPTxBuilder.verifyTxType(testCase);
|
|
316
|
+
assert.strictEqual(result, true, `Test case ${index} should return true (placeholder)`);
|
|
317
|
+
});
|
|
318
|
+
});
|
|
319
|
+
it('should verify via instance method', function () {
|
|
320
|
+
const mockTx = { type: 'import' };
|
|
321
|
+
const result = builder.verifyTxType(mockTx);
|
|
322
|
+
assert.strictEqual(result, true);
|
|
323
|
+
});
|
|
324
|
+
});
|
|
325
|
+
describe('Transaction Building Preparation', function () {
|
|
326
|
+
it('should prepare basic import transaction parameters', function () {
|
|
327
|
+
const fee = '1000';
|
|
328
|
+
const locktime = 123456;
|
|
329
|
+
const threshold = 2;
|
|
330
|
+
const chainId = 'C-source-chain-123';
|
|
331
|
+
const utxos = [
|
|
332
|
+
{
|
|
333
|
+
outputID: 1,
|
|
334
|
+
amount: '1000000000000000000',
|
|
335
|
+
txid: 'test-txid',
|
|
336
|
+
outputidx: '0',
|
|
337
|
+
threshold: 1,
|
|
338
|
+
addresses: ['C-flare1test'],
|
|
339
|
+
},
|
|
340
|
+
];
|
|
341
|
+
// Set all parameters
|
|
342
|
+
builder.fee(fee).locktime(locktime).threshold(threshold).sourceChain(chainId).addUtxos(utxos);
|
|
343
|
+
// Should not throw
|
|
344
|
+
assert.ok(true);
|
|
345
|
+
});
|
|
346
|
+
it('should handle minimal configuration', function () {
|
|
347
|
+
const fee = '0';
|
|
348
|
+
const utxos = [
|
|
349
|
+
{
|
|
350
|
+
outputID: 1,
|
|
351
|
+
amount: '1000000000000000000',
|
|
352
|
+
txid: 'test-txid',
|
|
353
|
+
outputidx: '0',
|
|
354
|
+
threshold: 1,
|
|
355
|
+
addresses: ['C-flare1test'],
|
|
356
|
+
},
|
|
357
|
+
];
|
|
358
|
+
builder.fee(fee).addUtxos(utxos);
|
|
359
|
+
// Should not throw
|
|
360
|
+
assert.ok(true);
|
|
361
|
+
});
|
|
362
|
+
});
|
|
363
|
+
describe('Complex Scenarios', function () {
|
|
364
|
+
it('should handle multiple UTXOs with different properties', function () {
|
|
365
|
+
const utxos = [
|
|
366
|
+
{
|
|
367
|
+
outputID: 1,
|
|
368
|
+
amount: '1000000000000000000',
|
|
369
|
+
txid: 'test-txid-1',
|
|
370
|
+
outputidx: '0',
|
|
371
|
+
threshold: 1,
|
|
372
|
+
addresses: ['C-flare1single'],
|
|
373
|
+
},
|
|
374
|
+
{
|
|
375
|
+
outputID: 2,
|
|
376
|
+
amount: '2000000000000000000',
|
|
377
|
+
txid: 'test-txid-2',
|
|
378
|
+
outputidx: '1',
|
|
379
|
+
threshold: 2,
|
|
380
|
+
addresses: ['C-flare1multi1', 'C-flare1multi2'],
|
|
381
|
+
},
|
|
382
|
+
{
|
|
383
|
+
outputID: 3,
|
|
384
|
+
amount: '3000000000000000000',
|
|
385
|
+
txid: 'test-txid-3',
|
|
386
|
+
outputidx: '0',
|
|
387
|
+
threshold: 3,
|
|
388
|
+
addresses: ['C-flare1multi1', 'C-flare1multi2', 'C-flare1multi3'],
|
|
389
|
+
},
|
|
390
|
+
];
|
|
391
|
+
builder.addUtxos(utxos);
|
|
392
|
+
builder.fee('5000'); // Higher fee for complex transaction
|
|
393
|
+
builder.threshold(2);
|
|
394
|
+
// Should handle complex UTXO set
|
|
395
|
+
assert.ok(true);
|
|
396
|
+
});
|
|
397
|
+
it('should handle large transaction parameters', function () {
|
|
398
|
+
const fee = '1000000000000000000'; // 1 FLR fee
|
|
399
|
+
const locktime = 4294967295; // Max uint32
|
|
400
|
+
const threshold = 10; // High threshold
|
|
401
|
+
const chainId = 'very-long-chain-id-with-lots-of-characters-0x123456789abcdef0123456789abcdef';
|
|
402
|
+
builder.fee(fee).locktime(locktime).threshold(threshold).sourceChain(chainId);
|
|
403
|
+
// Should handle large values
|
|
404
|
+
assert.ok(true);
|
|
405
|
+
});
|
|
406
|
+
it('should handle rapid parameter changes', function () {
|
|
407
|
+
// Simulate rapid parameter updates
|
|
408
|
+
builder.fee('1000').fee('2000').fee('3000');
|
|
409
|
+
builder.locktime(100).locktime(200).locktime(300);
|
|
410
|
+
builder.threshold(1).threshold(2).threshold(3);
|
|
411
|
+
// Should handle rapid changes without issues
|
|
412
|
+
assert.ok(true);
|
|
413
|
+
});
|
|
414
|
+
});
|
|
415
|
+
describe('Edge Cases', function () {
|
|
416
|
+
it('should handle zero values where appropriate', function () {
|
|
417
|
+
builder.fee('0');
|
|
418
|
+
builder.locktime(0);
|
|
419
|
+
// threshold of 0 should be invalid
|
|
420
|
+
assert.throws(() => {
|
|
421
|
+
builder.threshold(0);
|
|
422
|
+
}, sdk_core_1.BuildTransactionError);
|
|
423
|
+
});
|
|
424
|
+
it('should handle maximum values', function () {
|
|
425
|
+
const maxFee = '115792089237316195423570985008687907853269984665640564039457584007913129639935'; // Max uint256
|
|
426
|
+
const maxLocktime = 4294967295; // Max uint32
|
|
427
|
+
assert.doesNotThrow(() => {
|
|
428
|
+
builder.fee(maxFee);
|
|
429
|
+
});
|
|
430
|
+
assert.doesNotThrow(() => {
|
|
431
|
+
builder.locktime(maxLocktime);
|
|
432
|
+
});
|
|
433
|
+
});
|
|
434
|
+
it('should maintain state across multiple operations', function () {
|
|
435
|
+
const utxo1 = {
|
|
436
|
+
outputID: 1,
|
|
437
|
+
amount: '1000000000000000000',
|
|
438
|
+
txid: 'test-txid-1',
|
|
439
|
+
outputidx: '0',
|
|
440
|
+
threshold: 1,
|
|
441
|
+
addresses: ['C-flare1test1'],
|
|
442
|
+
};
|
|
443
|
+
const utxo2 = {
|
|
444
|
+
outputID: 2,
|
|
445
|
+
amount: '2000000000000000000',
|
|
446
|
+
txid: 'test-txid-2',
|
|
447
|
+
outputidx: '0',
|
|
448
|
+
threshold: 1,
|
|
449
|
+
addresses: ['C-flare1test2'],
|
|
450
|
+
};
|
|
451
|
+
// Build state incrementally
|
|
452
|
+
builder.fee('1000');
|
|
453
|
+
builder.addUtxos([utxo1]);
|
|
454
|
+
builder.locktime(123456);
|
|
455
|
+
builder.addUtxos([utxo2]);
|
|
456
|
+
builder.threshold(2);
|
|
457
|
+
// State should be maintained across operations
|
|
458
|
+
assert.ok(true);
|
|
459
|
+
});
|
|
460
|
+
});
|
|
461
|
+
describe('Integration Tests', function () {
|
|
462
|
+
it('should handle complete P-chain import flow preparation', function () {
|
|
463
|
+
const fee = '2000';
|
|
464
|
+
const locktime = 654321;
|
|
465
|
+
const threshold = 1;
|
|
466
|
+
const chainId = 'C-source-chain-456';
|
|
467
|
+
const utxos = [
|
|
468
|
+
{
|
|
469
|
+
outputID: 1,
|
|
470
|
+
amount: '6000000000000000000', // 6 FLR (more than output for fees)
|
|
471
|
+
txid: 'integration-test-txid',
|
|
472
|
+
outputidx: '0',
|
|
473
|
+
threshold: 1,
|
|
474
|
+
addresses: ['C-flare1source'],
|
|
475
|
+
},
|
|
476
|
+
];
|
|
477
|
+
// Complete setup
|
|
478
|
+
builder.fee(fee).locktime(locktime).threshold(threshold).sourceChain(chainId).addUtxos(utxos);
|
|
479
|
+
// All operations should complete without throwing
|
|
480
|
+
assert.ok(true);
|
|
481
|
+
});
|
|
482
|
+
it('should handle method chaining extensively', function () {
|
|
483
|
+
const utxos = [
|
|
484
|
+
{
|
|
485
|
+
outputID: 1,
|
|
486
|
+
amount: '10000000000000000000', // 10 FLR
|
|
487
|
+
txid: 'chain-test-txid',
|
|
488
|
+
outputidx: '0',
|
|
489
|
+
threshold: 1,
|
|
490
|
+
addresses: ['C-flare1test'],
|
|
491
|
+
},
|
|
492
|
+
];
|
|
493
|
+
// Test extensive method chaining
|
|
494
|
+
assert.doesNotThrow(() => {
|
|
495
|
+
builder.fee('1000').locktime(100000).threshold(1).sourceChain('C-chain-123').addUtxos(utxos);
|
|
496
|
+
});
|
|
497
|
+
});
|
|
498
|
+
});
|
|
499
|
+
});
|
|
500
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wb3J0SW5QVHhCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L2xpYi9pbXBvcnRJblBUeEJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxpREFBNEM7QUFDNUMsbURBQTZEO0FBQzdELCtDQUFpQztBQUNqQyxnRUFBcUM7QUFDckMsNEVBQXlFO0FBR3pFLFFBQVEsQ0FBQyxvQkFBb0IsRUFBRTtJQUM3QixNQUFNLFVBQVUsR0FBRyxlQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3RDLElBQUksT0FBMkIsQ0FBQztJQUVoQyxVQUFVLENBQUM7UUFDVCxPQUFPLEdBQUcsSUFBSSx1Q0FBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUMvQyxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxhQUFhLEVBQUU7UUFDdEIsRUFBRSxDQUFDLG9DQUFvQyxFQUFFO1lBQ3ZDLE1BQU0sQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDbkIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFPLFlBQVksdUNBQWtCLENBQUMsQ0FBQztRQUNuRCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyx1Q0FBdUMsRUFBRTtZQUMxQyx3REFBd0Q7WUFDeEQsTUFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNyQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLGlCQUFpQixFQUFFO1FBQzFCLEVBQUUsQ0FBQyx3QkFBd0IsRUFBRTtZQUMzQixNQUFNLElBQUksR0FBbUI7Z0JBQzNCLFFBQVEsRUFBRSxDQUFDO2dCQUNYLE1BQU0sRUFBRSxxQkFBcUIsRUFBRSxRQUFRO2dCQUN2QyxJQUFJLEVBQUUsa0JBQWtCO2dCQUN4QixTQUFTLEVBQUUs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QU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUU5RixrREFBa0Q7WUFDbEQsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQixDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQywyQ0FBMkMsRUFBRTtZQUM5QyxNQUFNLEtBQUssR0FBcUI7Z0JBQzlCO29CQUNFLFFBQVEsRUFBRSxDQUFDO29CQUNYLE1BQU0sRUFBRSxzQkFBc0IsRUFBRSxTQUFTO29CQUN6QyxJQUFJLEVBQUUsaUJBQWlCO29CQUN2QixTQUFTLEVBQUUsR0FBRztvQkFDZCxTQUFTLEVBQUUsQ0FBQztvQkFDWixTQUFTLEVBQUUsQ0FBQyxjQUFjLENBQUM7aUJBQzVCO2FBQ0YsQ0FBQztZQUVGLGlDQUFpQztZQUNqQyxNQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRTtnQkFDdkIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDL0YsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb2lucyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgQnVpbGRUcmFuc2FjdGlvbkVycm9yIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgQmlnTnVtYmVyIGZyb20gJ2JpZ251bWJlci5qcyc7XG5pbXBvcnQgeyBJbXBvcnRJblBUeEJ1aWxkZXIgfSBmcm9tICcuLi8uLi8uLi9zcmMvbGliL2ltcG9ydEluUFR4QnVpbGRlcic7XG5pbXBvcnQgeyBEZWNvZGVkVXR4b09iaiB9IGZyb20gJy4uLy4uLy4uL3NyYy9saWIvaWZhY2UnO1xuXG5kZXNjcmliZSgnSW1wb3J0SW5QVHhCdWlsZGVyJywgZnVuY3Rpb24gKCkge1xuICBjb25zdCBjb2luQ29uZmlnID0gY29pbnMuZ2V0KCd0ZmxycCcpO1xuICBsZXQgYnVpbGRlcjogSW1wb3J0SW5QVHhCdWlsZGVyO1xuXG4gIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgIGJ1aWxkZXIgPSBuZXcgSW1wb3J0SW5QVHhCdWlsZGVyKGNvaW5Db25maWcpO1xuICB9KTtcblxuICBkZXNjcmliZSgnQ29uc3RydWN0b3InLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBpbml0aWFsaXplIHdpdGggY29pbiBjb25maWcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhc3NlcnQub2soYnVpbGRlcik7XG4gICAgICBhc3NlcnQub2soYnVpbGRlciBpbnN0YW5jZW9mIEltcG9ydEluUFR4QnVpbGRlcik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGluaXRpYWxpemUgd2l0aCBkZWZhdWx0IHZhbHVlcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIEJ1aWxkZXIgc2hvdWxkIGJlIGluaXRpYWxpemVkIHdpdGhvdXQgdGhyb3dpbmcgZXJyb3JzXG4gICAgICBhc3NlcnQub2soYnVpbGRlcik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdVVFhPIE1hbmFnZW1lbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBhZGQgc2luZ2xlIFVUWE8nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB1dHhvOiBEZWNvZGVkVXR4b09iaiA9IHtcbiAgICAgICAgb3V0cHV0SUQ6IDEsXG4gICAgICAgIGFtb3VudDogJzEwMDAwMDAwMDAwMDAwMDAwMDAnLCAvLyAxIEZMUlxuICAgICAgICB0eGlkOiAndGVzdC10eGlkLXNpbmdsZScsXG4gICAgICAgIG91dHB1dGlkeDogJzAnLFxuICAgICAgICB0aHJlc2hvbGQ6IDEsXG4gICAgICAgIGFkZHJlc3NlczogWydDLWZsYXJlMXRlc3QnXSxcbiAgICAgIH07XG5cbiAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4ge1xuICAgICAgICBidWlsZGVyLmFkZFV0eG9zKFt1dHhvXSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYWRkIG11bHRpcGxlIFVUWE9zJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdXR4b3M6IERlY29kZWRVdHhvT2JqW10gPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBvdXRwdXRJRDogMSxcbiAgICAgICAgICBhbW91bnQ6ICcxMDAwMDAwMDAwMDAwMDAwMDAwJywgLy8gMSBGTFJcbiAgICAgICAgICB0eGlkOiAndGVzdC10eGlkLTEnLFxuICAgICAgICAgIG91dHB1dGlkeDogJzAnLFxuICAgICAgICAgIHRocmVzaG9sZDogMSxcbiAgICAgICAgICBhZGRyZXNzZXM6IFsnQy1mbGFyZTF0ZXN0MSddLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgb3V0cHV0SUQ6IDIsXG4gICAgICAgICAgYW1vdW50OiAnMjAwMDAwMDAwMDAwMDAwMDAwMCcsIC8vIDIgRkxSXG4gICAgICAgICAgdHhpZDogJ3Rlc3QtdHhpZC0yJyxcbiAgICAgICAgICBvdXRwdXRpZHg6ICcxJyxcbiAgICAgICAgICB0aHJlc2hvbGQ6IDIsXG4gICAgICAgICAgYWRkcmVzc2VzOiBbJ0MtZmxhcmUxdGVzdDInLCAnQy1mbGFyZTF0ZXN0MyddLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgb3V0cHV0SUQ6IDMsXG4gICAgICAgICAgYW1vdW50OiAnNTAwMDAwMDAwMDAwMDAwMDAwJywgLy8gMC41IEZMUlxuICAgICAgICAgIHR4aWQ6ICd0ZXN0LXR4aWQtMycsXG4gICAgICAgICAgb3V0cHV0aWR4OiAnMCcsXG4gICAgICAgICAgdGhyZXNob2xkOiAxLFxuICAgICAgICAgIGFkZHJlc3NlczogWydDLWZsYXJlMXRlc3Q0J10sXG4gICAgICAgIH0sXG4gICAgICBdO1xuXG4gICAgICBhc3NlcnQuZG9lc05vdFRocm93KCgpID0+IHtcbiAgICAgICAgYnVpbGRlci5hZGRVdHhvcyh1dHhvcyk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGFuZGxlIGVtcHR5IFVUWE8gYXJyYXknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhc3NlcnQuZG9lc05vdFRocm93KCgpID0+IHtcbiAgICAgICAgYnVpbGRlci5hZGRVdHhvcyhbXSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYWNjdW11bGF0ZSBVVFhPcyBmcm9tIG11bHRpcGxlIGNhbGxzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdXR4b3MxOiBEZWNvZGVkVXR4b09ialtdID0gW1xuICAgICAgICB7XG4gICAgICAgICAgb3V0cHV0SUQ6IDEsXG4gICAgICAgICAgYW1vdW50OiAnMTAwMDAwMDAwMDAwMDAwMDAwMCcsXG4gICAgICAgICAgdHhpZDogJ3Rlc3QtdHhpZC0xJyxcbiAgICAgICAgICBvdXRwdXRpZHg6ICcwJyxcbiAgICAgICAgICB0aHJlc2hvbGQ6IDEsXG4gICAgICAgICAgYWRkcmVzc2VzOiBbJ0MtZmxhcmUxdGVzdDEnXSxcbiAgICAgICAgfSxcbiAgICAgIF07XG5cbiAgICAgIGNvbnN0IHV0eG9zMjogRGVjb2RlZFV0eG9PYmpbXSA9IFtcbiAgICAgICAge1xuICAgICAgICAgIG91dHB1dElEOiAyLFxuICAgICAgICAgIGFtb3VudDogJzIwMDAwMDAwMDAwMDAwMDAwMDAnLFxuICAgICAgICAgIHR4aWQ6ICd0ZXN0LXR4aWQtMicsXG4gICAgICAgICAgb3V0cHV0aWR4OiAnMCcsXG4gICAgICAgICAgdGhyZXNob2xkOiAxLFxuICAgICAgICAgIGFkZHJlc3NlczogWydDLWZsYXJlMXRlc3QyJ10sXG4gICAgICAgIH0sXG4gICAgICBdO1xuXG4gICAgICBidWlsZGVyLmFkZFV0eG9zKHV0eG9zMSk7XG4gICAgICBidWlsZGVyLmFkZFV0eG9zKHV0eG9zMik7XG5cbiAgICAgIC8vIFNob3VsZCBub3QgdGhyb3dcbiAgICAgIGFzc2VydC5vayh0cnVlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0ZlZSBNYW5hZ2VtZW50JywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgc2V0IHZhbGlkIHBvc2l0aXZlIGZlZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHZhbGlkRmVlcyA9IFsnMTAwMCcsICcwJywgJzEwMDAwMDAwMDAwMDAwMDAwMDAnLCAnOTk5OTk5OTk5OTk5OTk5OTk5J107XG5cbiAgICAgIHZhbGlkRmVlcy5mb3JFYWNoKChmZWUpID0+IHtcbiAgICAgICAgYXNzZXJ0LmRvZXNOb3RUaHJvdygoKSA9PiB7XG4gICAgICAgICAgYnVpbGRlci5mZWUoZmVlKTtcbiAgICAgICAgfSwgYFNob3VsZCBhY2NlcHQgZmVlOiAke2ZlZX1gKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWplY3QgbmVnYXRpdmUgZmVlcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG5lZ2F0aXZlRmVlcyA9IFsnLTEnLCAnLTEwMDAnLCAnLTEwMDAwMDAwMDAwMDAwMDAwMDAnXTtcblxuICAgICAgbmVnYXRpdmVGZWVzLmZvckVhY2goKGZlZSkgPT4ge1xuICAgICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIGJ1aWxkZXIuZmVlKGZlZSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBCdWlsZFRyYW5zYWN0aW9uRXJyb3IsXG4gICAgICAgICAgYFNob3VsZCByZWplY3QgbmVnYXRpdmUgZmVlOiAke2ZlZX1gXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGFuZGxlIGludmFsaWQgZmVlIGZvcm1hdHMgKEJpZ051bWJlciBiZWhhdmlvciknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBpbnZhbGlkRmVlcyA9IFsnYWJjJywgJ25vdC1hLW51bWJlcicsICcxLjUuNScsICdpbmZpbml0eSddO1xuXG4gICAgICBpbnZhbGlkRmVlcy5mb3JFYWNoKChmZWUpID0+IHtcbiAgICAgICAgLy8gQmlnTnVtYmVyIGRvZXNuJ3QgdGhyb3cgZm9yIGludmFsaWQgc3RyaW5ncywgaXQgY3JlYXRlcyBOYU4gdmFsdWVzXG4gICAgICAgIC8vIEJ1dCBvdXIgaW1wbGVtZW50YXRpb24gc2hvdWxkIHN0aWxsIGFjY2VwdCB0aGVtIChubyBhZGRpdGlvbmFsIHZhbGlkYXRpb24pXG4gICAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4ge1xuICAgICAgICAgIGJ1aWxkZXIuZmVlKGZlZSk7XG4gICAgICAgIH0sIGBCaWdOdW1iZXIgYWNjZXB0cyBpbnZhbGlkIHN0cmluZ3M6ICR7ZmVlfWApO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhbmRsZSBCaWdOdW1iZXIgZmVlIGlucHV0cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGJpZ051bWJlckZlZSA9IG5ldyBCaWdOdW1iZXIoJzEwMDAwMDAwMDAwMDAwMDAwMDAnKTtcbiAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4ge1xuICAgICAgICBidWlsZGVyLmZlZShiaWdOdW1iZXJGZWUudG9TdHJpbmcoKSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgY2hhaW4gZmVlIHNldHRpbmcgd2l0aCBvdGhlciBtZXRob2RzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZmVlID0gJzEwMDAnO1xuICAgICAgY29uc3QgdXR4bzogRGVjb2RlZFV0eG9PYmogPSB7XG4gICAgICAgIG91dHB1dElEOiAxLFxuICAgICAgICBhbW91bnQ6ICcxMDAwMDAwMDAwMDAwMDAwMDAwJyxcbiAgICAgICAgdHhpZDogJ3Rlc3QtdHhpZCcsXG4gICAgICAgIG91dHB1dGlkeDogJzAnLFxuICAgICAgICB0aHJlc2hvbGQ6IDEsXG4gICAgICAgIGFkZHJlc3NlczogWydDLWZsYXJlMXRlc3QnXSxcbiAgICAgIH07XG5cbiAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4ge1xuICAgICAgICBidWlsZGVyLmZlZShmZWUpLmFkZFV0eG9zKFt1dHhvXSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0xvY2t0aW1lIE1hbmFnZW1lbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBzZXQgdmFsaWQgbG9ja3RpbWUgdmFsdWVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdmFsaWRMb2NrdGltZXMgPSBbMCwgMSwgMTAwMCwgNDI5NDk2NzI5NV07IC8vIE1heCB1aW50MzJcblxuICAgICAgdmFsaWRMb2NrdGltZXMuZm9yRWFjaCgobG9ja3RpbWUpID0+IHtcbiAgICAgICAgYXNzZXJ0LmRvZXNOb3RUaHJvdygoKSA9PiB7XG4gICAgICAgICAgYnVpbGRlci5sb2NrdGltZShsb2NrdGltZSk7XG4gICAgICAgIH0sIGBTaG91bGQgYWNjZXB0IGxvY2t0aW1lOiAke2xvY2t0aW1lfWApO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhbmRsZSBuZWdhdGl2ZSBsb2NrdGltZSAobm8gdmFsaWRhdGlvbiknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBuZWdhdGl2ZUxvY2t0aW1lcyA9IFstMSwgLTEwMDBdO1xuXG4gICAgICBuZWdhdGl2ZUxvY2t0aW1lcy5mb3JFYWNoKChsb2NrdGltZSkgPT4ge1xuICAgICAgICBhc3NlcnQuZG9lc05vdFRocm93KCgpID0+IHtcbiAgICAgICAgICBidWlsZGVyLmxvY2t0aW1lKGxvY2t0aW1lKTtcbiAgICAgICAgfSwgYFNob3VsZCBhY2NlcHQgbmVnYXRpdmUgbG9ja3RpbWU6ICR7bG9ja3RpbWV9IChubyB2YWxpZGF0aW9uIGluIGltcGxlbWVudGF0aW9uKWApO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhbmRsZSBib3VuZGFyeSB2YWx1ZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBib3VuZGFyeVZhbHVlcyA9IFswLCA0Mjk0OTY3Mjk1XTsgLy8gTWluIGFuZCBtYXggdWludDMyXG5cbiAgICAgIGJvdW5kYXJ5VmFsdWVzLmZvckVhY2goKGxvY2t0aW1lKSA9PiB7XG4gICAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4ge1xuICAgICAgICAgIGJ1aWxkZXIubG9ja3RpbWUobG9ja3RpbWUpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBjaGFpbiBsb2NrdGltZSBzZXR0aW5nIHdpdGggb3RoZXIgbWV0aG9kcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGxvY2t0aW1lID0gMTIzNDU2O1xuICAgICAgY29uc3QgZmVlID0gJzEwMDAnO1xuXG4gICAgICBhc3NlcnQuZG9lc05vdFRocm93KCgpID0+IHtcbiAgICAgICAgYnVpbGRlci5sb2NrdGltZShsb2NrdGltZSkuZmVlKGZlZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1RocmVzaG9sZCBNYW5hZ2VtZW50JywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgc2V0IHZhbGlkIHRocmVzaG9sZCB2YWx1ZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB2YWxpZFRocmVzaG9sZHMgPSBbMSwgMiwgNSwgMTBdO1xuXG4gICAgICB2YWxpZFRocmVzaG9sZHMuZm9yRWFjaCgodGhyZXNob2xkKSA9PiB7XG4gICAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4ge1xuICAgICAgICAgIGJ1aWxkZXIudGhyZXNob2xkKHRocmVzaG9sZCk7XG4gICAgICAgIH0sIGBTaG91bGQgYWNjZXB0IHRocmVzaG9sZDogJHt0aHJlc2hvbGR9YCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVqZWN0IGludmFsaWQgdGhyZXNob2xkIHZhbHVlcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGludmFsaWRUaHJlc2hvbGRzID0gWzAsIC0xLCAtMTBdO1xuXG4gICAgICBpbnZhbGlkVGhyZXNob2xkcy5mb3JFYWNoKCh0aHJlc2hvbGQpID0+IHtcbiAgICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICBidWlsZGVyLnRocmVzaG9sZCh0aHJlc2hvbGQpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgQnVpbGRUcmFuc2FjdGlvbkVycm9yLFxuICAgICAgICAgIGBTaG91bGQgcmVqZWN0IHRocmVzaG9sZDogJHt0aHJlc2hvbGR9YFxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhbmRsZSB0eXBpY2FsIHRocmVzaG9sZCBzY2VuYXJpb3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBTaW5nbGUgc2lnbmF0dXJlXG4gICAgICBhc3NlcnQuZG9lc05vdFRocm93KCgpID0+IHtcbiAgICAgICAgYnVpbGRlci50aHJlc2hvbGQoMSk7XG4gICAgICB9KTtcblxuICAgICAgLy8gTXVsdGktc2lnbmF0dXJlXG4gICAgICBhc3NlcnQuZG9lc05vdFRocm93KCgpID0+IHtcbiAgICAgICAgYnVpbGRlci50aHJlc2hvbGQoMyk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgY2hhaW4gdGhyZXNob2xkIHNldHRpbmcgd2l0aCBvdGhlciBtZXRob2RzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdGhyZXNob2xkID0gMjtcbiAgICAgIGNvbnN0IGxvY2t0aW1lID0gMTIzNDU2O1xuXG4gICAgICBhc3NlcnQuZG9lc05vdFRocm93KCgpID0+IHtcbiAgICAgICAgYnVpbGRlci50aHJlc2hvbGQodGhyZXNob2xkKS5sb2NrdGltZShsb2NrdGltZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1NvdXJjZSBDaGFpbiBNYW5hZ2VtZW50JywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgc2V0IHZhbGlkIHNvdXJjZSBjaGFpbiBJRHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB2YWxpZENoYWluSWRzID0gWydDLWZsYXJlMTIzNDUnLCAnTm9kZUlELWZsYXJlNjc4OTAnLCAnMHgxMjM0NTY3ODlhYmNkZWYnLCAnYWJjMTIzZGVmNDU2J107XG5cbiAgICAgIHZhbGlkQ2hhaW5JZHMuZm9yRWFjaCgoY2hhaW5JZCkgPT4ge1xuICAgICAgICBhc3NlcnQuZG9lc05vdFRocm93KCgpID0+IHtcbiAgICAgICAgICBidWlsZGVyLnNvdXJjZUNoYWluKGNoYWluSWQpO1xuICAgICAgICB9LCBgU2hvdWxkIGFjY2VwdCBjaGFpbiBJRDogJHtjaGFpbklkfWApO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhbmRsZSBkaWZmZXJlbnQgY2hhaW4gSUQgZm9ybWF0cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGNoYWluSWRzID0gWydDLWNoYWluLWlkLTEyMycsICdQLWNoYWluLWlkLTQ1NicsICdoZXgtZm9ybWF0dGVkLWlkJywgJzEyMzQ1Njc4OTBhYmNkZWYnXTtcblxuICAgICAgY2hhaW5JZHMuZm9yRWFjaCgoY2hhaW5JZCkgPT4ge1xuICAgICAgICBhc3NlcnQuZG9lc05vdFRocm93KCgpID0+IHtcbiAgICAgICAgICBidWlsZGVyLnNvdXJjZUNoYWluKGNoYWluSWQpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnSW5wdXQvT3V0cHV0IENyZWF0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgdGVzdCBwdWJsaWMgbWV0aG9kcyBvbmx5IGR1ZSB0byBwcm90ZWN0ZWQgYWNjZXNzJywgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gTm90ZTogY3JlYXRlSW5wdXRPdXRwdXQgaXMgcHJvdGVjdGVkLCBzbyB3ZSB0ZXN0IHRocm91Z2ggcHVibGljIGludGVyZmFjZVxuICAgICAgLy8gVGVzdCB0aGF0IHdlIGNhbiBzZXQgcGFyYW1ldGVycyB0aGF0IHdvdWxkIGJlIHVzZWQgYnkgY3JlYXRlSW5wdXRPdXRwdXRcbiAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4ge1xuICAgICAgICBidWlsZGVyLmZlZSgnMTAwMCcpO1xuICAgICAgICBidWlsZGVyLnRocmVzaG9sZCgxKTtcbiAgICAgICAgLy8gUHJvdGVjdGVkIG1ldGhvZCBjYW5ub3QgYmUgdGVzdGVkIGRpcmVjdGx5XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGFuZGxlIGNvbmZpZ3VyYXRpb24gZm9yIG91dHB1dCBjcmVhdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGZlZSA9ICcxMDAwJztcbiAgICAgIGNvbnN0IGxvY2t0aW1lID0gMDtcbiAgICAgIGNvbnN0IHRocmVzaG9sZCA9IDE7XG5cbiAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4ge1xuICAgICAgICBidWlsZGVyLmZlZShmZWUpLmxvY2t0aW1lKGxvY2t0aW1lKS50aHJlc2hvbGQodGhyZXNob2xkKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBhbGxvdyBzZXR0aW5nIHBhcmFtZXRlcnMgZm9yIGxhcmdlIGFtb3VudHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBsb2NrdGltZSA9IDA7XG4gICAgICBjb25zdCB0aHJlc2hvbGQgPSAxO1xuXG4gICAgICBhc3NlcnQuZG9lc05vdFRocm93KCgpID0+IHtcbiAgICAgICAgYnVpbGRlci5mZWUoJzEwMDAnKS5sb2NrdGltZShsb2NrdGltZSkudGhyZXNob2xkKHRocmVzaG9sZCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgY29uZmlndXJlIGZvciBkaWZmZXJlbnQgdGhyZXNob2xkIHNjZW5hcmlvcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGxvY2t0aW1lID0gMDtcblxuICAgICAgLy8gVGVzdCBkaWZmZXJlbnQgdGhyZXNob2xkc1xuICAgICAgWzEsIDIsIDNdLmZvckVhY2goKHRocmVzaG9sZCkgPT4ge1xuICAgICAgICBhc3NlcnQuZG9lc05vdFRocm93KCgpID0+IHtcbiAgICAgICAgICBidWlsZGVyLnRocmVzaG9sZCh0aHJlc2hvbGQpLmxvY2t0aW1lKGxvY2t0aW1lKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1RyYW5zYWN0aW9uIFR5cGUgVmVyaWZpY2F0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgdmVyaWZ5IHRyYW5zYWN0aW9uIHR5cGUgKHBsYWNlaG9sZGVyKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG1vY2tUeCA9IHsgdHlwZTogJ2ltcG9ydCcgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IEltcG9ydEluUFR4QnVpbGRlci52ZXJpZnlUeFR5cGUobW9ja1R4KTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQsIHRydWUpOyAvLyBQbGFjZWhvbGRlciByZXR1cm5zIHRydWVcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGFuZGxlIGRpZmZlcmVudCB0cmFuc2FjdGlvbiBvYmplY3RzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdGVzdENhc2VzID0gW3t9LCBudWxsLCB1bmRlZmluZWQsIHsgdHlwZTogJ2V4cG9ydCcgfSwgeyBkYXRhOiAndGVzdCcgfV07XG5cbiAgICAgIHRlc3RDYXNlcy5mb3JFYWNoKCh0ZXN0Q2FzZSwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gSW1wb3J0SW5QVHhCdWlsZGVyLnZlcmlmeVR4VHlwZSh0ZXN0Q2FzZSk7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQsIHRydWUsIGBUZXN0IGNhc2UgJHtpbmRleH0gc2hvdWxkIHJldHVybiB0cnVlIChwbGFjZWhvbGRlcilgKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB2ZXJpZnkgdmlhIGluc3RhbmNlIG1ldGhvZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG1vY2tUeCA9IHsgdHlwZTogJ2ltcG9ydCcgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGJ1aWxkZXIudmVyaWZ5VHhUeXBlKG1vY2tUeCk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LCB0cnVlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1RyYW5zYWN0aW9uIEJ1aWxkaW5nIFByZXBhcmF0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgcHJlcGFyZSBiYXNpYyBpbXBvcnQgdHJhbnNhY3Rpb24gcGFyYW1ldGVycycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGZlZSA9ICcxMDAwJztcbiAgICAgIGNvbnN0IGxvY2t0aW1lID0gMTIzNDU2O1xuICAgICAgY29uc3QgdGhyZXNob2xkID0gMjtcbiAgICAgIGNvbnN0IGNoYWluSWQgPSAnQy1zb3VyY2UtY2hhaW4tMTIzJztcbiAgICAgIGNvbnN0IHV0eG9zOiBEZWNvZGVkVXR4b09ialtdID0gW1xuICAgICAgICB7XG4gICAgICAgICAgb3V0cHV0SUQ6IDEsXG4gICAgICAgICAgYW1vdW50OiAnMTAwMDAwMDAwMDAwMDAwMDAwMCcsXG4gICAgICAgICAgdHhpZDogJ3Rlc3QtdHhpZCcsXG4gICAgICAgICAgb3V0cHV0aWR4OiAnMCcsXG4gICAgICAgICAgdGhyZXNob2xkOiAxLFxuICAgICAgICAgIGFkZHJlc3NlczogWydDLWZsYXJlMXRlc3QnXSxcbiAgICAgICAgfSxcbiAgICAgIF07XG5cbiAgICAgIC8vIFNldCBhbGwgcGFyYW1ldGVyc1xuICAgICAgYnVpbGRlci5mZWUoZmVlKS5sb2NrdGltZShsb2NrdGltZSkudGhyZXNob2xkKHRocmVzaG9sZCkuc291cmNlQ2hhaW4oY2hhaW5JZCkuYWRkVXR4b3ModXR4b3MpO1xuXG4gICAgICAvLyBTaG91bGQgbm90IHRocm93XG4gICAgICBhc3NlcnQub2sodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhbmRsZSBtaW5pbWFsIGNvbmZpZ3VyYXRpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBmZWUgPSAnMCc7XG4gICAgICBjb25zdCB1dHhvczogRGVjb2RlZFV0eG9PYmpbXSA9IFtcbiAgICAgICAge1xuICAgICAgICAgIG91dHB1dElEOiAxLFxuICAgICAgICAgIGFtb3VudDogJzEwMDAwMDAwMDAwMDAwMDAwMDAnLFxuICAgICAgICAgIHR4aWQ6ICd0ZXN0LXR4aWQnLFxuICAgICAgICAgIG91dHB1dGlkeDogJzAnLFxuICAgICAgICAgIHRocmVzaG9sZDogMSxcbiAgICAgICAgICBhZGRyZXNzZXM6IFsnQy1mbGFyZTF0ZXN0J10sXG4gICAgICAgIH0sXG4gICAgICBdO1xuXG4gICAgICBidWlsZGVyLmZlZShmZWUpLmFkZFV0eG9zKHV0eG9zKTtcblxuICAgICAgLy8gU2hvdWxkIG5vdCB0aHJvd1xuICAgICAgYXNzZXJ0Lm9rKHRydWUpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnQ29tcGxleCBTY2VuYXJpb3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgbXVsdGlwbGUgVVRYT3Mgd2l0aCBkaWZmZXJlbnQgcHJvcGVydGllcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHV0eG9zOiBEZWNvZGVkVXR4b09ialtdID0gW1xuICAgICAgICB7XG4gICAgICAgICAgb3V0cHV0SUQ6IDEsXG4gICAgICAgICAgYW1vdW50OiAnMTAwMDAwMDAwMDAwMDAwMDAwMCcsXG4gICAgICAgICAgdHhpZDogJ3Rlc3QtdHhpZC0xJyxcbiAgICAgICAgICBvdXRwdXRpZHg6ICcwJyxcbiAgICAgICAgICB0aHJlc2hvbGQ6IDEsXG4gICAgICAgICAgYWRkcmVzc2VzOiBbJ0MtZmxhcmUxc2luZ2xlJ10sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBvdXRwdXRJRDogMixcbiAgICAgICAgICBhbW91bnQ6ICcyMDAwMDAwMDAwMDAwMDAwMDAwJyxcbiAgICAgICAgICB0eGlkOiAndGVzdC10eGlkLTInLFxuICAgICAgICAgIG91dHB1dGlkeDogJzEnLFxuICAgICAgICAgIHRocmVzaG9sZDogMixcbiAgICAgICAgICBhZGRyZXNzZXM6IFsnQy1mbGFyZTFtdWx0aTEnLCAnQy1mbGFyZTFtdWx0aTInXSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG91dHB1dElEOiAzLFxuICAgICAgICAgIGFtb3VudDogJzMwMDAwMDAwMDAwMDAwMDAwMDAnLFxuICAgICAgICAgIHR4aWQ6ICd0ZXN0LXR4aWQtMycsXG4gICAgICAgICAgb3V0cHV0aWR4OiAnMCcsXG4gICAgICAgICAgdGhyZXNob2xkOiAzLFxuICAgICAgICAgIGFkZHJlc3NlczogWydDLWZsYXJlMW11bHRpMScsICdDLWZsYXJlMW11bHRpMicsICdDLWZsYXJlMW11bHRpMyddLFxuICAgICAgICB9LFxuICAgICAgXTtcblxuICAgICAgYnVpbGRlci5hZGRVdHhvcyh1dHhvcyk7XG4gICAgICBidWlsZGVyLmZlZSgnNTAwMCcpOyAvLyBIaWdoZXIgZmVlIGZvciBjb21wbGV4IHRyYW5zYWN0aW9uXG4gICAgICBidWlsZGVyLnRocmVzaG9sZCgyKTtcblxuICAgICAgLy8gU2hvdWxkIGhhbmRsZSBjb21wbGV4IFVUWE8gc2V0XG4gICAgICBhc3NlcnQub2sodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhbmRsZSBsYXJnZSB0cmFuc2FjdGlvbiBwYXJhbWV0ZXJzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZmVlID0gJzEwMDAwMDAwMDAwMDAwMDAwMDAnOyAvLyAxIEZMUiBmZWVcbiAgICAgIGNvbnN0IGxvY2t0aW1lID0gNDI5NDk2NzI5NTsgLy8gTWF4IHVpbnQzMlxuICAgICAgY29uc3QgdGhyZXNob2xkID0gMTA7IC8vIEhpZ2ggdGhyZXNob2xkXG4gICAgICBjb25zdCBjaGFpbklkID0gJ3ZlcnktbG9uZy1jaGFpbi1pZC13aXRoLWxvdHMtb2YtY2hhcmFjdGVycy0weDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYnO1xuXG4gICAgICBidWlsZGVyLmZlZShmZWUpLmxvY2t0aW1lKGxvY2t0aW1lKS50aHJlc2hvbGQodGhyZXNob2xkKS5zb3VyY2VDaGFpbihjaGFpbklkKTtcblxuICAgICAgLy8gU2hvdWxkIGhhbmRsZSBsYXJnZSB2YWx1ZXNcbiAgICAgIGFzc2VydC5vayh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGFuZGxlIHJhcGlkIHBhcmFtZXRlciBjaGFuZ2VzJywgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gU2ltdWxhdGUgcmFwaWQgcGFyYW1ldGVyIHVwZGF0ZXNcbiAgICAgIGJ1aWxkZXIuZmVlKCcxMDAwJykuZmVlKCcyMDAwJykuZmVlKCczMDAwJyk7XG4gICAgICBidWlsZGVyLmxvY2t0aW1lKDEwMCkubG9ja3RpbWUoMjAwKS5sb2NrdGltZSgzMDApO1xuICAgICAgYnVpbGRlci50aHJlc2hvbGQoMSkudGhyZXNob2xkKDIpLnRocmVzaG9sZCgzKTtcblxuICAgICAgLy8gU2hvdWxkIGhhbmRsZSByYXBpZCBjaGFuZ2VzIHdpdGhvdXQgaXNzdWVzXG4gICAgICBhc3NlcnQub2sodHJ1ZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdFZGdlIENhc2VzJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgaGFuZGxlIHplcm8gdmFsdWVzIHdoZXJlIGFwcHJvcHJpYXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgYnVpbGRlci5mZWUoJzAnKTtcbiAgICAgIGJ1aWxkZXIubG9ja3RpbWUoMCk7XG4gICAgICAvLyB0aHJlc2hvbGQgb2YgMCBzaG91bGQgYmUgaW52YWxpZFxuICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiB7XG4gICAgICAgIGJ1aWxkZXIudGhyZXNob2xkKDApO1xuICAgICAgfSwgQnVpbGRUcmFuc2FjdGlvbkVycm9yKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGFuZGxlIG1heGltdW0gdmFsdWVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgbWF4RmVlID0gJzExNTc5MjA4OTIzNzMxNjE5NTQyMzU3MDk4NTAwODY4NzkwNzg1MzI2OTk4NDY2NTY0MDU2NDAzOTQ1NzU4NDAwNzkxMzEyOTYzOTkzNSc7IC8vIE1heCB1aW50MjU2XG4gICAgICBjb25zdCBtYXhMb2NrdGltZSA9IDQyOTQ5NjcyOTU7IC8vIE1heCB1aW50MzJcblxuICAgICAgYXNzZXJ0LmRvZXNOb3RUaHJvdygoKSA9PiB7XG4gICAgICAgIGJ1aWxkZXIuZmVlKG1heEZlZSk7XG4gICAgICB9KTtcblxuICAgICAgYXNzZXJ0LmRvZXNOb3RUaHJvdygoKSA9PiB7XG4gICAgICAgIGJ1aWxkZXIubG9ja3RpbWUobWF4TG9ja3RpbWUpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIG1haW50YWluIHN0YXRlIGFjcm9zcyBtdWx0aXBsZSBvcGVyYXRpb25zJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdXR4bzE6IERlY29kZWRVdHhvT2JqID0ge1xuICAgICAgICBvdXRwdXRJRDogMSxcbiAgICAgICAgYW1vdW50OiAnMTAwMDAwMDAwMDAwMDAwMDAwMCcsXG4gICAgICAgIHR4aWQ6ICd0ZXN0LXR4aWQtMScsXG4gICAgICAgIG91dHB1dGlkeDogJzAnLFxuICAgICAgICB0aHJlc2hvbGQ6IDEsXG4gICAgICAgIGFkZHJlc3NlczogWydDLWZsYXJlMXRlc3QxJ10sXG4gICAgICB9O1xuXG4gICAgICBjb25zdCB1dHhvMjogRGVjb2RlZFV0eG9PYmogPSB7XG4gICAgICAgIG91dHB1dElEOiAyLFxuICAgICAgICBhbW91bnQ6ICcyMDAwMDAwMDAwMDAwMDAwMDAwJyxcbiAgICAgICAgdHhpZDogJ3Rlc3QtdHhpZC0yJyxcbiAgICAgICAgb3V0cHV0aWR4OiAnMCcsXG4gICAgICAgIHRocmVzaG9sZDogMSxcbiAgICAgICAgYWRkcmVzc2VzOiBbJ0MtZmxhcmUxdGVzdDInXSxcbiAgICAgIH07XG5cbiAgICAgIC8vIEJ1aWxkIHN0YXRlIGluY3JlbWVudGFsbHlcbiAgICAgIGJ1aWxkZXIuZmVlKCcxMDAwJyk7XG4gICAgICBidWlsZGVyLmFkZFV0eG9zKFt1dHhvMV0pO1xuICAgICAgYnVpbGRlci5sb2NrdGltZSgxMjM0NTYpO1xuICAgICAgYnVpbGRlci5hZGRVdHhvcyhbdXR4bzJdKTtcbiAgICAgIGJ1aWxkZXIudGhyZXNob2xkKDIpO1xuXG4gICAgICAvLyBTdGF0ZSBzaG91bGQgYmUgbWFpbnRhaW5lZCBhY3Jvc3Mgb3BlcmF0aW9uc1xuICAgICAgYXNzZXJ0Lm9rKHRydWUpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnSW50ZWdyYXRpb24gVGVzdHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgY29tcGxldGUgUC1jaGFpbiBpbXBvcnQgZmxvdyBwcmVwYXJhdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGZlZSA9ICcyMDAwJztcbiAgICAgIGNvbnN0IGxvY2t0aW1lID0gNjU0MzIxO1xuICAgICAgY29uc3QgdGhyZXNob2xkID0gMTtcbiAgICAgIGNvbnN0IGNoYWluSWQgPSAnQy1zb3VyY2UtY2hhaW4tNDU2JztcbiAgICAgIGNvbnN0IHV0eG9zOiBEZWNvZGVkVXR4b09ialtdID0gW1xuICAgICAgICB7XG4gICAgICAgICAgb3V0cHV0SUQ6IDEsXG4gICAgICAgICAgYW1vdW50OiAnNjAwMDAwMDAwMDAwMDAwMDAwMCcsIC8vIDYgRkxSIChtb3JlIHRoYW4gb3V0cHV0IGZvciBmZWVzKVxuICAgICAgICAgIHR4aWQ6ICdpbnRlZ3JhdGlvbi10ZXN0LXR4aWQnLFxuICAgICAgICAgIG91dHB1dGlkeDogJzAnLFxuICAgICAgICAgIHRocmVzaG9sZDogMSxcbiAgICAgICAgICBhZGRyZXNzZXM6IFsnQy1mbGFyZTFzb3VyY2UnXSxcbiAgICAgICAgfSxcbiAgICAgIF07XG5cbiAgICAgIC8vIENvbXBsZXRlIHNldHVwXG4gICAgICBidWlsZGVyLmZlZShmZWUpLmxvY2t0aW1lKGxvY2t0aW1lKS50aHJlc2hvbGQodGhyZXNob2xkKS5zb3VyY2VDaGFpbihjaGFpbklkKS5hZGRVdHhvcyh1dHhvcyk7XG5cbiAgICAgIC8vIEFsbCBvcGVyYXRpb25zIHNob3VsZCBjb21wbGV0ZSB3aXRob3V0IHRocm93aW5nXG4gICAgICBhc3NlcnQub2sodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhbmRsZSBtZXRob2QgY2hhaW5pbmcgZXh0ZW5zaXZlbHknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB1dHhvczogRGVjb2RlZFV0eG9PYmpbXSA9IFtcbiAgICAgICAge1xuICAgICAgICAgIG91dHB1dElEOiAxLFxuICAgICAgICAgIGFtb3VudDogJzEwMDAwMDAwMDAwMDAwMDAwMDAwJywgLy8gMTAgRkxSXG4gICAgICAgICAgdHhpZDogJ2NoYWluLXRlc3QtdHhpZCcsXG4gICAgICAgICAgb3V0cHV0aWR4OiAnMCcsXG4gICAgICAgICAgdGhyZXNob2xkOiAxLFxuICAgICAgICAgIGFkZHJlc3NlczogWydDLWZsYXJlMXRlc3QnXSxcbiAgICAgICAgfSxcbiAgICAgIF07XG5cbiAgICAgIC8vIFRlc3QgZXh0ZW5zaXZlIG1ldGhvZCBjaGFpbmluZ1xuICAgICAgYXNzZXJ0LmRvZXNOb3RUaHJvdygoKSA9PiB7XG4gICAgICAgIGJ1aWxkZXIuZmVlKCcxMDAwJykubG9ja3RpbWUoMTAwMDAwKS50aHJlc2hvbGQoMSkuc291cmNlQ2hhaW4oJ0MtY2hhaW4tMTIzJykuYWRkVXR4b3ModXR4b3MpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../../../test/unit/lib/transaction.ts"],"names":[],"mappings":""}
|