@bitgo-beta/sdk-coin-iota 1.0.1-beta.42 → 1.0.1-beta.420
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/README.md +1 -1
- package/dist/src/iota.d.ts +134 -23
- package/dist/src/iota.d.ts.map +1 -1
- package/dist/src/iota.js +286 -46
- package/dist/src/lib/constants.d.ts +59 -6
- package/dist/src/lib/constants.d.ts.map +1 -1
- package/dist/src/lib/constants.js +76 -8
- package/dist/src/lib/iface.d.ts +174 -2
- package/dist/src/lib/iface.d.ts.map +1 -1
- package/dist/src/lib/iface.js +1 -1
- package/dist/src/lib/index.d.ts +1 -0
- package/dist/src/lib/index.d.ts.map +1 -1
- package/dist/src/lib/index.js +4 -2
- package/dist/src/lib/keyPair.d.ts +100 -6
- package/dist/src/lib/keyPair.d.ts.map +1 -1
- package/dist/src/lib/keyPair.js +103 -10
- package/dist/src/lib/transaction.d.ts +175 -5
- package/dist/src/lib/transaction.d.ts.map +1 -1
- package/dist/src/lib/transaction.js +390 -6
- package/dist/src/lib/transactionBuilder.d.ts +109 -9
- package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilder.js +200 -14
- package/dist/src/lib/transactionBuilderFactory.d.ts +98 -2
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilderFactory.js +132 -5
- package/dist/src/lib/transferBuilder.d.ts +52 -2
- package/dist/src/lib/transferBuilder.d.ts.map +1 -1
- package/dist/src/lib/transferBuilder.js +86 -3
- package/dist/src/lib/transferTransaction.d.ts +124 -0
- package/dist/src/lib/transferTransaction.d.ts.map +1 -0
- package/dist/src/lib/transferTransaction.js +341 -0
- package/dist/src/lib/utils.d.ts +108 -7
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +146 -11
- package/dist/test/resources/iota.d.ts +35 -0
- package/dist/test/resources/iota.d.ts.map +1 -0
- package/dist/test/resources/iota.js +93 -0
- package/dist/test/unit/helpers/testHelpers.d.ts +57 -0
- package/dist/test/unit/helpers/testHelpers.d.ts.map +1 -0
- package/dist/test/unit/helpers/testHelpers.js +176 -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 +16 -0
- package/dist/test/unit/iota.d.ts +2 -0
- package/dist/test/unit/iota.d.ts.map +1 -0
- package/dist/test/unit/iota.js +501 -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 +108 -0
- package/dist/test/unit/transactionBuilder/transactionBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/transactionBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/transactionBuilder.js +188 -0
- package/dist/test/unit/transactionBuilder/transactionBuilderFactory.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/transactionBuilderFactory.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/transactionBuilderFactory.js +178 -0
- package/dist/test/unit/transactionBuilder/transferBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/transferBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/transferBuilder.js +438 -0
- package/dist/test/unit/transferTransaction.d.ts +2 -0
- package/dist/test/unit/transferTransaction.d.ts.map +1 -0
- package/dist/test/unit/transferTransaction.js +218 -0
- package/dist/test/unit/utils.d.ts +2 -0
- package/dist/test/unit/utils.d.ts.map +1 -0
- package/dist/test/unit/utils.js +252 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +16 -10
- package/.eslintignore +0 -5
- package/.mocharc.yml +0 -8
- package/CHANGELOG.md +0 -28
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keyPair.d.ts","sourceRoot":"","sources":["../../../test/unit/keyPair.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const assert_1 = __importDefault(require("assert"));
|
|
7
|
+
const src_1 = require("../../src");
|
|
8
|
+
const utils_1 = __importDefault(require("../../src/lib/utils"));
|
|
9
|
+
const should_1 = __importDefault(require("should"));
|
|
10
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
11
|
+
const sdk_lib_mpc_1 = require("@bitgo-beta/sdk-lib-mpc");
|
|
12
|
+
const sdk_test_1 = require("@bitgo-beta/sdk-test");
|
|
13
|
+
const sdk_api_1 = require("@bitgo-beta/sdk-api");
|
|
14
|
+
describe('Iota KeyPair', function () {
|
|
15
|
+
let rootKeychain;
|
|
16
|
+
let rootPublicKey;
|
|
17
|
+
let MPC;
|
|
18
|
+
let hdTree;
|
|
19
|
+
let bitgo;
|
|
20
|
+
let basecoin;
|
|
21
|
+
before(async () => {
|
|
22
|
+
hdTree = await sdk_lib_mpc_1.Ed25519Bip32HdTree.initialize();
|
|
23
|
+
MPC = await sdk_core_1.Eddsa.initialize(hdTree);
|
|
24
|
+
const A = MPC.keyShare(1, 2, 3);
|
|
25
|
+
const B = MPC.keyShare(2, 2, 3);
|
|
26
|
+
const C = MPC.keyShare(3, 2, 3);
|
|
27
|
+
const A_combine = MPC.keyCombine(A.uShare, [B.yShares[1], C.yShares[1]]);
|
|
28
|
+
const commonKeychain = A_combine.pShare.y + A_combine.pShare.chaincode;
|
|
29
|
+
rootKeychain = MPC.deriveUnhardened(commonKeychain, 'm/0');
|
|
30
|
+
rootPublicKey = Buffer.from(rootKeychain, 'hex').slice(0, 32).toString('hex');
|
|
31
|
+
bitgo = sdk_test_1.TestBitGo.decorate(sdk_api_1.BitGoAPI, { env: 'mock' });
|
|
32
|
+
bitgo.safeRegister('tiota', src_1.Iota.createInstance);
|
|
33
|
+
basecoin = bitgo.coin('tiota');
|
|
34
|
+
});
|
|
35
|
+
describe('KeyPair Creation', () => {
|
|
36
|
+
it('should create keypair with public and private keys from empty value', async () => {
|
|
37
|
+
const keyPair = new src_1.KeyPair();
|
|
38
|
+
const keys = keyPair.getKeys();
|
|
39
|
+
should_1.default.exist(keys.prv);
|
|
40
|
+
should_1.default.exist(keys.pub);
|
|
41
|
+
const address = await utils_1.default.getAddressFromPublicKey(keys.pub);
|
|
42
|
+
should_1.default.exist(address);
|
|
43
|
+
});
|
|
44
|
+
it('should create keypair from derived public key', () => {
|
|
45
|
+
const keyPair = new src_1.KeyPair({ pub: rootPublicKey });
|
|
46
|
+
keyPair.getKeys().pub.should.equal(rootPublicKey);
|
|
47
|
+
utils_1.default.isValidPublicKey(rootPublicKey).should.be.true();
|
|
48
|
+
});
|
|
49
|
+
it('should create keypair from random seed', () => {
|
|
50
|
+
const keyPair = basecoin.generateKeyPair();
|
|
51
|
+
keyPair.should.have.property('pub');
|
|
52
|
+
keyPair.should.have.property('prv');
|
|
53
|
+
basecoin.isValidPub(keyPair.pub).should.equal(true);
|
|
54
|
+
});
|
|
55
|
+
it('should create keypair without private key', () => {
|
|
56
|
+
const keyPair = new src_1.KeyPair({ pub: rootPublicKey });
|
|
57
|
+
const keys = keyPair.getKeys();
|
|
58
|
+
keys.should.have.property('pub');
|
|
59
|
+
keys.pub.should.equal(rootPublicKey);
|
|
60
|
+
should_1.default.not.exist(keys.prv);
|
|
61
|
+
});
|
|
62
|
+
const invalidPublicKeys = [
|
|
63
|
+
{ pub: '01D63D', description: 'invalid format' },
|
|
64
|
+
{ pub: '0x' + 'a'.repeat(64), description: '0x prefix' },
|
|
65
|
+
{ pub: 'abc123', description: 'too short' },
|
|
66
|
+
{ pub: 'a'.repeat(128), description: 'too long' },
|
|
67
|
+
];
|
|
68
|
+
invalidPublicKeys.forEach(({ pub, description }) => {
|
|
69
|
+
it(`should reject public key with ${description}`, () => {
|
|
70
|
+
assert_1.default.throws(() => new src_1.KeyPair({ pub }));
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
describe('KeyPair Operations', () => {
|
|
75
|
+
it('should generate random keypair each time', () => {
|
|
76
|
+
const keyPair1 = basecoin.generateKeyPair();
|
|
77
|
+
const keyPair2 = basecoin.generateKeyPair();
|
|
78
|
+
keyPair1.pub.should.not.equal(keyPair2.pub);
|
|
79
|
+
keyPair1.prv.should.not.equal(keyPair2.prv);
|
|
80
|
+
});
|
|
81
|
+
it('should validate generated public keys', () => {
|
|
82
|
+
const keyPair = basecoin.generateKeyPair();
|
|
83
|
+
basecoin.isValidPub(keyPair.pub).should.equal(true);
|
|
84
|
+
utils_1.default.isValidPublicKey(keyPair.pub).should.be.true();
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
describe('Address Derivation', () => {
|
|
88
|
+
it('should derive valid address from public key', () => {
|
|
89
|
+
const keyPair = new src_1.KeyPair({ pub: rootPublicKey });
|
|
90
|
+
const address = keyPair.getAddress();
|
|
91
|
+
should_1.default.exist(address);
|
|
92
|
+
utils_1.default.isValidAddress(address).should.be.true();
|
|
93
|
+
});
|
|
94
|
+
it('should derive same address from same public key', () => {
|
|
95
|
+
const address1 = utils_1.default.getAddressFromPublicKey(rootPublicKey);
|
|
96
|
+
const address2 = utils_1.default.getAddressFromPublicKey(rootPublicKey);
|
|
97
|
+
address1.should.equal(address2);
|
|
98
|
+
});
|
|
99
|
+
it('should derive different addresses from different public keys', () => {
|
|
100
|
+
const keyPair1 = basecoin.generateKeyPair();
|
|
101
|
+
const keyPair2 = basecoin.generateKeyPair();
|
|
102
|
+
const address1 = utils_1.default.getAddressFromPublicKey(keyPair1.pub);
|
|
103
|
+
const address2 = utils_1.default.getAddressFromPublicKey(keyPair2.pub);
|
|
104
|
+
address1.should.not.equal(address2);
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
});
|
|
108
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5UGFpci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rlc3QvdW5pdC9rZXlQYWlyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLG1DQUEwQztBQUMxQyxnRUFBd0M7QUFDeEMsb0RBQTRCO0FBQzVCLG1EQUE2QztBQUM3Qyx5REFBcUU7QUFDckUsbURBQStEO0FBQy9ELGlEQUErQztBQUUvQyxRQUFRLENBQUMsY0FBYyxFQUFFO0lBQ3ZCLElBQUksWUFBWSxDQUFDO0lBQ2pCLElBQUksYUFBYSxDQUFDO0lBQ2xCLElBQUksR0FBVSxDQUFDO0lBQ2YsSUFBSSxNQUFjLENBQUM7SUFDbkIsSUFBSSxLQUFtQixDQUFDO0lBQ3hCLElBQUksUUFBUSxDQUFDO0lBRWIsTUFBTSxDQUFDLEtBQUssSUFBSSxFQUFFO1FBQ2hCLE1BQU0sR0FBRyxNQUFNLGdDQUFrQixDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQy9DLEdBQUcsR0FBRyxNQUFNLGdCQUFLLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3JDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNoQyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDaEMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRWhDLE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFekUsTUFBTSxjQUFj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QUFFLENBQUMsOERBQThELEVBQUUsR0FBRyxFQUFFO1lBQ3RFLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUM1QyxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsZUFBZSxFQUFFLENBQUM7WUFFNUMsTUFBTSxRQUFRLEdBQUcsZUFBSyxDQUFDLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM3RCxNQUFNLFFBQVEsR0FBRyxlQUFLLENBQUMsdUJBQXVCLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBRTdELFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN0QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgeyBLZXlQYWlyLCBJb3RhIH0gZnJvbSAnLi4vLi4vc3JjJztcbmltcG9ydCB1dGlscyBmcm9tICcuLi8uLi9zcmMvbGliL3V0aWxzJztcbmltcG9ydCBzaG91bGQgZnJvbSAnc2hvdWxkJztcbmltcG9ydCB7IEVkZHNhIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgRWQyNTUxOUJpcDMySGRUcmVlLCBIRFRyZWUgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstbGliLW1wYyc7XG5pbXBvcnQgeyBUZXN0Qml0R28sIFRlc3RCaXRHb0FQSSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay10ZXN0JztcbmltcG9ydCB7IEJpdEdvQVBJIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWFwaSc7XG5cbmRlc2NyaWJlKCdJb3RhIEtleVBhaXInLCBmdW5jdGlvbiAoKSB7XG4gIGxldCByb290S2V5Y2hhaW47XG4gIGxldCByb290UHVibGljS2V5O1xuICBsZXQgTVBDOiBFZGRzYTtcbiAgbGV0IGhkVHJlZTogSERUcmVlO1xuICBsZXQgYml0Z286IFRlc3RCaXRHb0FQSTtcbiAgbGV0IGJhc2Vjb2luO1xuXG4gIGJlZm9yZShhc3luYyAoKSA9PiB7XG4gICAgaGRUcmVlID0gYXdhaXQgRWQyNTUxOUJpcDMySGRUcmVlLmluaXRpYWxpemUoKTtcbiAgICBNUEMgPSBhd2FpdCBFZGRzYS5pbml0aWFsaXplKGhkVHJlZSk7XG4gICAgY29uc3QgQSA9IE1QQy5rZXlTaGFyZSgxLCAyLCAzKTtcbiAgICBjb25zdCBCID0gTVBDLmtleVNoYXJlKDIsIDIsIDMpO1xuICAgIGNvbnN0IEMgPSBNUEMua2V5U2hhcmUoMywgMiwgMyk7XG5cbiAgICBjb25zdCBBX2NvbWJpbmUgPSBNUEMua2V5Q29tYmluZShBLnVTaGFyZSwgW0IueVNoYXJlc1sxXSwgQy55U2hhcmVzWzFdXSk7XG5cbiAgICBjb25zdCBjb21tb25LZXljaGFpbiA9IEFfY29tYmluZS5wU2hhcmUueSArIEFfY29tYmluZS5wU2hhcmUuY2hhaW5jb2RlO1xuICAgIHJvb3RLZXljaGFpbiA9IE1QQy5kZXJpdmVVbmhhcmRlbmVkKGNvbW1vbktleWNoYWluLCAnbS8wJyk7XG4gICAgcm9vdFB1YmxpY0tleSA9IEJ1ZmZlci5mcm9tKHJvb3RLZXljaGFpbiwgJ2hleCcpLnNsaWNlKDAsIDMyKS50b1N0cmluZygnaGV4Jyk7XG4gICAgYml0Z28gPSBUZXN0Qml0R28uZGVjb3JhdGUoQml0R29BUEksIHsgZW52OiAnbW9jaycgfSk7XG4gICAgYml0Z28uc2FmZVJlZ2lzdGVyKCd0aW90YScsIElvdGEuY3JlYXRlSW5zdGFuY2UpO1xuICAgIGJhc2Vjb2luID0gYml0Z28uY29pbigndGlvdGEnKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0tleVBhaXIgQ3JlYXRpb24nLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBjcmVhdGUga2V5cGFpciB3aXRoIHB1YmxpYyBhbmQgcHJpdmF0ZSBrZXlzIGZyb20gZW1wdHkgdmFsdWUnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBrZXlQYWlyID0gbmV3IEtleVBhaXIoKTtcbiAgICAgIGNvbnN0IGtleXMgPSBrZXlQYWlyLmdldEtleXMoKTtcblxuICAgICAgc2hvdWxkLmV4aXN0KGtleXMucHJ2KTtcbiAgICAgIHNob3VsZC5leGlzdChrZXlzLnB1Yik7XG5cbiAgICAgIGNvbnN0IGFkZHJlc3MgPSBhd2FpdCB1dGlscy5nZXRBZGRyZXNzRnJvbVB1YmxpY0tleShrZXlzLnB1Yik7XG4gICAgICBzaG91bGQuZXhpc3QoYWRkcmVzcyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGNyZWF0ZSBrZXlwYWlyIGZyb20gZGVyaXZlZCBwdWJsaWMga2V5JywgKCkgPT4ge1xuICAgICAgY29uc3Qga2V5UGFpciA9IG5ldyBLZXlQYWlyKHsgcHViOiByb290UHVibGljS2V5IH0pO1xuICAgICAga2V5UGFpci5nZXRLZXlzKCkucHViLnNob3VsZC5lcXVhbChyb290UHVibGljS2V5KTtcbiAgICAgIHV0aWxzLmlzVmFsaWRQdWJsaWNLZXkocm9vdFB1YmxpY0tleSkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgY3JlYXRlIGtleXBhaXIgZnJvbSByYW5kb20gc2VlZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGtleVBhaXIgPSBiYXNlY29pbi5nZW5lcmF0ZUtleVBhaXIoKTtcbiAgICAgIGtleVBhaXIuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3B1YicpO1xuICAgICAga2V5UGFpci5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgncHJ2Jyk7XG4gICAgICBiYXNlY29pbi5pc1ZhbGlkUHViKGtleVBhaXIucHViKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGNyZWF0ZSBrZXlwYWlyIHdpdGhvdXQgcHJpdmF0ZSBrZXknLCAoKSA9PiB7XG4gICAgICBjb25zdCBrZXlQYWlyID0gbmV3IEtleVBhaXIoeyBwdWI6IHJvb3RQdWJsaWNLZXkgfSk7XG4gICAgICBjb25zdCBrZXlzID0ga2V5UGFpci5nZXRLZXlzKCk7XG5cbiAgICAgIGtleXMuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3B1YicpO1xuICAgICAga2V5cy5wdWIuc2hvdWxkLmVxdWFsKHJvb3RQdWJsaWNLZXkpO1xuICAgICAgc2hvdWxkLm5vdC5leGlzdChrZXlzLnBydik7XG4gICAgfSk7XG5cbiAgICBjb25zdCBpbnZhbGlkUHVibGljS2V5cyA9IFtcbiAgICAgIHsgcHViOiAnMDFENjNEJywgZGVzY3JpcHRpb246ICdpbnZhbGlkIGZvcm1hdCcgfSxcbiAgICAgIHsgcHViOiAnMHgnICsgJ2EnLnJlcGVhdCg2NCksIGRlc2NyaXB0aW9uOiAnMHggcHJlZml4JyB9LFxuICAgICAgeyBwdWI6ICdhYmMxMjMnLCBkZXNjcmlwdGlvbjogJ3RvbyBzaG9ydCcgfSxcbiAgICAgIHsgcHViOiAnYScucmVwZWF0KDEyOCksIGRlc2NyaXB0aW9uOiAndG9vIGxvbmcnIH0sXG4gICAgXTtcblxuICAgIGludmFsaWRQdWJsaWNLZXlzLmZvckVhY2goKHsgcHViLCBkZXNjcmlwdGlvbiB9KSA9PiB7XG4gICAgICBpdChgc2hvdWxkIHJlamVjdCBwdWJsaWMga2V5IHdpdGggJHtkZXNjcmlwdGlvbn1gLCAoKSA9PiB7XG4gICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IEtleVBhaXIoeyBwdWIgfSkpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdLZXlQYWlyIE9wZXJhdGlvbnMnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSByYW5kb20ga2V5cGFpciBlYWNoIHRpbWUnLCAoKSA9PiB7XG4gICAgICBjb25zdCBrZXlQYWlyMSA9IGJhc2Vjb2luLmdlbmVyYXRlS2V5UGFpcigpO1xuICAgICAgY29uc3Qga2V5UGFpcjIgPSBiYXNlY29pbi5nZW5lcmF0ZUtleVBhaXIoKTtcblxuICAgICAga2V5UGFpcjEucHViLnNob3VsZC5ub3QuZXF1YWwoa2V5UGFpcjIucHViKTtcbiAgICAgIGtleVBhaXIxLnBydi5zaG91bGQubm90LmVxdWFsKGtleVBhaXIyLnBydik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIGdlbmVyYXRlZCBwdWJsaWMga2V5cycsICgpID0+IHtcbiAgICAgIGNvbnN0IGtleVBhaXIgPSBiYXNlY29pbi5nZW5lcmF0ZUtleVBhaXIoKTtcbiAgICAgIGJhc2Vjb2luLmlzVmFsaWRQdWIoa2V5UGFpci5wdWIpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICAgIHV0aWxzLmlzVmFsaWRQdWJsaWNLZXkoa2V5UGFpci5wdWIpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdBZGRyZXNzIERlcml2YXRpb24nLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBkZXJpdmUgdmFsaWQgYWRkcmVzcyBmcm9tIHB1YmxpYyBrZXknLCAoKSA9PiB7XG4gICAgICBjb25zdCBrZXlQYWlyID0gbmV3IEtleVBhaXIoeyBwdWI6IHJvb3RQdWJsaWNLZXkgfSk7XG4gICAgICBjb25zdCBhZGRyZXNzID0ga2V5UGFpci5nZXRBZGRyZXNzKCk7XG5cbiAgICAgIHNob3VsZC5leGlzdChhZGRyZXNzKTtcbiAgICAgIHV0aWxzLmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGRlcml2ZSBzYW1lIGFkZHJlc3MgZnJvbSBzYW1lIHB1YmxpYyBrZXknLCAoKSA9PiB7XG4gICAgICBjb25zdCBhZGRyZXNzMSA9IHV0aWxzLmdldEFkZHJlc3NGcm9tUHVibGljS2V5KHJvb3RQdWJsaWNLZXkpO1xuICAgICAgY29uc3QgYWRkcmVzczIgPSB1dGlscy5nZXRBZGRyZXNzRnJvbVB1YmxpY0tleShyb290UHVibGljS2V5KTtcblxuICAgICAgYWRkcmVzczEuc2hvdWxkLmVxdWFsKGFkZHJlc3MyKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZGVyaXZlIGRpZmZlcmVudCBhZGRyZXNzZXMgZnJvbSBkaWZmZXJlbnQgcHVibGljIGtleXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBrZXlQYWlyMSA9IGJhc2Vjb2luLmdlbmVyYXRlS2V5UGFpcigpO1xuICAgICAgY29uc3Qga2V5UGFpcjIgPSBiYXNlY29pbi5nZW5lcmF0ZUtleVBhaXIoKTtcblxuICAgICAgY29uc3QgYWRkcmVzczEgPSB1dGlscy5nZXRBZGRyZXNzRnJvbVB1YmxpY0tleShrZXlQYWlyMS5wdWIpO1xuICAgICAgY29uc3QgYWRkcmVzczIgPSB1dGlscy5nZXRBZGRyZXNzRnJvbVB1YmxpY0tleShrZXlQYWlyMi5wdWIpO1xuXG4gICAgICBhZGRyZXNzMS5zaG91bGQubm90LmVxdWFsKGFkZHJlc3MyKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transactionBuilder.d.ts","sourceRoot":"","sources":["../../../../test/unit/transactionBuilder/transactionBuilder.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const should_1 = __importDefault(require("should"));
|
|
7
|
+
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
8
|
+
const testHelpers_1 = require("../helpers/testHelpers");
|
|
9
|
+
describe('Iota Transaction Builder', () => {
|
|
10
|
+
const factory = (0, testHelpers_1.getFactory)();
|
|
11
|
+
describe('Address Validation', () => {
|
|
12
|
+
it('should validate correct addresses', function () {
|
|
13
|
+
const builder = factory.getTransferBuilder();
|
|
14
|
+
testHelpers_1.testData.addresses.validAddresses.forEach((address) => {
|
|
15
|
+
should_1.default.doesNotThrow(() => builder.validateAddress({ address }));
|
|
16
|
+
});
|
|
17
|
+
});
|
|
18
|
+
it('should reject invalid addresses', function () {
|
|
19
|
+
const builder = factory.getTransferBuilder();
|
|
20
|
+
testHelpers_1.testData.addresses.invalidAddresses.forEach((address) => {
|
|
21
|
+
(0, should_1.default)(() => builder.validateAddress({ address })).throwError();
|
|
22
|
+
});
|
|
23
|
+
});
|
|
24
|
+
it('should throw error for empty address', function () {
|
|
25
|
+
const builder = factory.getTransferBuilder();
|
|
26
|
+
(0, should_1.default)(() => builder.validateAddress({ address: '' })).throwError(/Invalid address/);
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
describe('Value Validation', () => {
|
|
30
|
+
const validCases = [
|
|
31
|
+
{ value: new bignumber_js_1.default(0), description: 'zero value' },
|
|
32
|
+
{ value: new bignumber_js_1.default(1000), description: 'positive values' },
|
|
33
|
+
{ value: new bignumber_js_1.default('1000000000000000000'), description: 'large values' },
|
|
34
|
+
{ value: new bignumber_js_1.default(100.5), description: 'decimal values' },
|
|
35
|
+
];
|
|
36
|
+
validCases.forEach(({ value, description }) => {
|
|
37
|
+
it(`should validate ${description}`, function () {
|
|
38
|
+
const builder = factory.getTransferBuilder();
|
|
39
|
+
should_1.default.doesNotThrow(() => builder.validateValue(value));
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
const invalidCases = [
|
|
43
|
+
{ value: new bignumber_js_1.default(-1), error: 'Value cannot be less than zero', description: 'negative values' },
|
|
44
|
+
{ value: new bignumber_js_1.default(NaN), error: 'Invalid amount format', description: 'NaN values' },
|
|
45
|
+
];
|
|
46
|
+
invalidCases.forEach(({ value, error, description }) => {
|
|
47
|
+
it(`should reject ${description}`, function () {
|
|
48
|
+
const builder = factory.getTransferBuilder();
|
|
49
|
+
(0, should_1.default)(() => builder.validateValue(value)).throwError(error);
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
describe('Raw Transaction Validation', () => {
|
|
54
|
+
it('should validate proper raw transaction', async function () {
|
|
55
|
+
const tx = await (0, testHelpers_1.createTransferBuilderWithGas)().build();
|
|
56
|
+
const rawTx = await tx.toBroadcastFormat();
|
|
57
|
+
const newBuilder = factory.getTransferBuilder();
|
|
58
|
+
should_1.default.doesNotThrow(() => newBuilder.validateRawTransaction(rawTx));
|
|
59
|
+
});
|
|
60
|
+
const invalidRawTxCases = [
|
|
61
|
+
{ value: 'invalidRawTx', error: 'Invalid raw transaction', description: 'invalid string' },
|
|
62
|
+
{ value: '', error: 'Invalid raw transaction: Undefined', description: 'empty string' },
|
|
63
|
+
{ value: undefined, error: 'Invalid raw transaction: Undefined', description: 'undefined' },
|
|
64
|
+
];
|
|
65
|
+
invalidRawTxCases.forEach(({ value, error, description }) => {
|
|
66
|
+
it(`should reject ${description}`, function () {
|
|
67
|
+
const builder = factory.getTransferBuilder();
|
|
68
|
+
(0, should_1.default)(() => builder.validateRawTransaction(value)).throwError(error);
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
describe('Transaction Validation', () => {
|
|
73
|
+
it('should validate complete transaction', async function () {
|
|
74
|
+
const tx = (await (0, testHelpers_1.createTransferBuilderWithGas)().build());
|
|
75
|
+
const newBuilder = factory.getTransferBuilder();
|
|
76
|
+
should_1.default.doesNotThrow(() => newBuilder.validateTransaction(tx));
|
|
77
|
+
});
|
|
78
|
+
it('should throw error for undefined transaction', function () {
|
|
79
|
+
const builder = factory.getTransferBuilder();
|
|
80
|
+
(0, should_1.default)(() => builder.validateTransaction(undefined)).throwError(/Transaction is required for validation/);
|
|
81
|
+
});
|
|
82
|
+
it('should throw error for transaction with invalid sender', async function () {
|
|
83
|
+
const tx = (await (0, testHelpers_1.createTransferBuilderWithGas)().build());
|
|
84
|
+
tx.sender = 'invalidAddress';
|
|
85
|
+
const newBuilder = factory.getTransferBuilder();
|
|
86
|
+
(0, should_1.default)(() => newBuilder.validateTransaction(tx)).throwError();
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
describe('Builder Setter Methods', () => {
|
|
90
|
+
it('should set and change sender correctly', function () {
|
|
91
|
+
const builder = factory.getTransferBuilder();
|
|
92
|
+
builder.sender(testHelpers_1.testData.sender.address);
|
|
93
|
+
should_1.default.equal(builder.transaction.sender, testHelpers_1.testData.sender.address);
|
|
94
|
+
builder.sender(testHelpers_1.testData.gasSponsor.address);
|
|
95
|
+
should_1.default.equal(builder.transaction.sender, testHelpers_1.testData.gasSponsor.address);
|
|
96
|
+
});
|
|
97
|
+
it('should validate sender address when setting', function () {
|
|
98
|
+
const builder = factory.getTransferBuilder();
|
|
99
|
+
(0, should_1.default)(() => builder.sender('invalidAddress')).throwError('Invalid address invalidAddress');
|
|
100
|
+
});
|
|
101
|
+
it('should set all gas parameters', function () {
|
|
102
|
+
const builder = factory.getTransferBuilder();
|
|
103
|
+
builder.gasData(testHelpers_1.testData.gasData);
|
|
104
|
+
should_1.default.equal(builder.transaction.gasBudget, testHelpers_1.testData.GAS_BUDGET);
|
|
105
|
+
should_1.default.equal(builder.transaction.gasPrice, testHelpers_1.testData.GAS_PRICE);
|
|
106
|
+
should_1.default.deepEqual(builder.transaction.gasPaymentObjects, testHelpers_1.testData.gasPaymentObjects);
|
|
107
|
+
});
|
|
108
|
+
const invalidGasDataCases = [
|
|
109
|
+
{ gasBudget: -1000, description: 'negative gas budget' },
|
|
110
|
+
{ gasPrice: -100, description: 'negative gas price' },
|
|
111
|
+
];
|
|
112
|
+
invalidGasDataCases.forEach(({ gasBudget, gasPrice, description }) => {
|
|
113
|
+
it(`should reject ${description}`, function () {
|
|
114
|
+
const builder = factory.getTransferBuilder();
|
|
115
|
+
(0, should_1.default)(() => builder.gasData({
|
|
116
|
+
gasBudget: gasBudget ?? testHelpers_1.testData.GAS_BUDGET,
|
|
117
|
+
gasPrice: gasPrice ?? testHelpers_1.testData.GAS_PRICE,
|
|
118
|
+
gasPaymentObjects: testHelpers_1.testData.gasPaymentObjects,
|
|
119
|
+
})).throwError();
|
|
120
|
+
});
|
|
121
|
+
});
|
|
122
|
+
it('should throw error for empty gas payment objects', function () {
|
|
123
|
+
const builder = factory.getTransferBuilder();
|
|
124
|
+
(0, should_1.default)(() => builder.gasData({
|
|
125
|
+
gasBudget: testHelpers_1.testData.GAS_BUDGET,
|
|
126
|
+
gasPrice: testHelpers_1.testData.GAS_PRICE,
|
|
127
|
+
gasPaymentObjects: [],
|
|
128
|
+
})).throwError('Gas input objects list is empty');
|
|
129
|
+
});
|
|
130
|
+
it('should set gas sponsor correctly', function () {
|
|
131
|
+
const builder = factory.getTransferBuilder();
|
|
132
|
+
builder.gasSponsor(testHelpers_1.testData.gasSponsor.address);
|
|
133
|
+
should_1.default.equal(builder.transaction.gasSponsor, testHelpers_1.testData.gasSponsor.address);
|
|
134
|
+
});
|
|
135
|
+
it('should validate gas sponsor address', function () {
|
|
136
|
+
const builder = factory.getTransferBuilder();
|
|
137
|
+
(0, should_1.default)(() => builder.gasSponsor('invalidAddress')).throwError('Invalid address invalidAddress');
|
|
138
|
+
});
|
|
139
|
+
it('should allow sender to be gas sponsor', function () {
|
|
140
|
+
const builder = factory.getTransferBuilder();
|
|
141
|
+
builder.sender(testHelpers_1.testData.sender.address);
|
|
142
|
+
builder.gasSponsor(testHelpers_1.testData.sender.address);
|
|
143
|
+
should_1.default.equal(builder.transaction.gasSponsor, testHelpers_1.testData.sender.address);
|
|
144
|
+
});
|
|
145
|
+
});
|
|
146
|
+
describe('Builder Initialization', () => {
|
|
147
|
+
it('should initialize builder from existing transaction', async function () {
|
|
148
|
+
const originalTx = (await (0, testHelpers_1.createTransferBuilderWithGas)().build());
|
|
149
|
+
const newBuilder = factory.getTransferBuilder(originalTx);
|
|
150
|
+
should_1.default.equal(newBuilder.transaction.sender, originalTx.sender);
|
|
151
|
+
should_1.default.equal(newBuilder.transaction.gasBudget, originalTx.gasBudget);
|
|
152
|
+
});
|
|
153
|
+
});
|
|
154
|
+
describe('Transaction Building', () => {
|
|
155
|
+
it('should build transaction with all required fields', async function () {
|
|
156
|
+
const tx = (await (0, testHelpers_1.createTransferBuilderWithGas)().build());
|
|
157
|
+
should_1.default.exist(tx);
|
|
158
|
+
should_1.default.equal(tx.sender, testHelpers_1.testData.sender.address);
|
|
159
|
+
should_1.default.equal(tx.isSimulateTx, false);
|
|
160
|
+
});
|
|
161
|
+
it('should build simulation transaction without gas data', async function () {
|
|
162
|
+
const tx = (await (0, testHelpers_1.createBasicTransferBuilder)().build());
|
|
163
|
+
should_1.default.exist(tx);
|
|
164
|
+
should_1.default.equal(tx.isSimulateTx, true);
|
|
165
|
+
});
|
|
166
|
+
it('should support method chaining', async function () {
|
|
167
|
+
const tx = (await factory
|
|
168
|
+
.getTransferBuilder()
|
|
169
|
+
.sender(testHelpers_1.testData.sender.address)
|
|
170
|
+
.recipients(testHelpers_1.testData.recipients)
|
|
171
|
+
.paymentObjects(testHelpers_1.testData.paymentObjects)
|
|
172
|
+
.gasData(testHelpers_1.testData.gasData)
|
|
173
|
+
.gasSponsor(testHelpers_1.testData.gasSponsor.address)
|
|
174
|
+
.build());
|
|
175
|
+
should_1.default.exist(tx);
|
|
176
|
+
should_1.default.equal(tx.sender, testHelpers_1.testData.sender.address);
|
|
177
|
+
should_1.default.equal(tx.gasSponsor, testHelpers_1.testData.gasSponsor.address);
|
|
178
|
+
});
|
|
179
|
+
});
|
|
180
|
+
describe('Transaction Type', () => {
|
|
181
|
+
it('should return correct transaction type', async function () {
|
|
182
|
+
const builder = (0, testHelpers_1.createTransferBuilderWithGas)();
|
|
183
|
+
const tx = await builder.build();
|
|
184
|
+
should_1.default.equal(builder.transactionType, tx.type);
|
|
185
|
+
});
|
|
186
|
+
});
|
|
187
|
+
});
|
|
188
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L3RyYW5zYWN0aW9uQnVpbGRlci90cmFuc2FjdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxvREFBNEI7QUFFNUIsZ0VBQXFDO0FBQ3JDLHdEQUF3SDtBQUV4SCxRQUFRLENBQUMsMEJBQTBCLEVBQUUsR0FBRyxFQUFFO0lBQ3hDLE1BQU0sT0FBTyxHQUFHLElBQUEsd0JBQVUsR0FBRSxDQUFDO0lBRTdCLFFBQVEsQ0FBQyxvQkFBb0IsRUFBRSxHQUFHLEVBQUU7UUFDbEMsRUFBRSxDQUFDLG1DQUFtQyxFQUFFO1lBQ3RDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQzdDLHNCQUFRLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtnQkFDcEQsZ0JBQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNsRSxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGlDQUFpQyxFQUFFO1lBQ3BDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQzdDLHNCQUFRLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO2dCQUN0RCxJQUFBLGdCQUFNLEVBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNsRSxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFD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Q0FBQyxFQUFFLENBQUMsQ0FBQztZQUNqQixnQkFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLHNCQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2pELGdCQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUUsc0JBQVEsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDM0QsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxrQkFBa0IsRUFBRSxHQUFHLEVBQUU7UUFDaEMsRUFBRSxDQUFDLHdDQUF3QyxFQUFFLEtBQUs7WUFDaEQsTUFBTSxPQUFPLEdBQUcsSUFBQSwwQ0FBNEIsR0FBRSxDQUFDO1lBQy9DLE1BQU0sRUFBRSxHQUFHLE1BQU0sT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2pDLGdCQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBzaG91bGQgZnJvbSAnc2hvdWxkJztcbmltcG9ydCB7IFRyYW5zZmVyVHJhbnNhY3Rpb24gfSBmcm9tICcuLi8uLi8uLi9zcmMnO1xuaW1wb3J0IEJpZ051bWJlciBmcm9tICdiaWdudW1iZXIuanMnO1xuaW1wb3J0IHsgY3JlYXRlQmFzaWNUcmFuc2ZlckJ1aWxkZXIsIGNyZWF0ZVRyYW5zZmVyQnVpbGRlcldpdGhHYXMsIGdldEZhY3RvcnksIHRlc3REYXRhIH0gZnJvbSAnLi4vaGVscGVycy90ZXN0SGVscGVycyc7XG5cbmRlc2NyaWJlKCdJb3RhIFRyYW5zYWN0aW9uIEJ1aWxkZXInLCAoKSA9PiB7XG4gIGNvbnN0IGZhY3RvcnkgPSBnZXRGYWN0b3J5KCk7XG5cbiAgZGVzY3JpYmUoJ0FkZHJlc3MgVmFsaWRhdGlvbicsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIGNvcnJlY3QgYWRkcmVzc2VzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYnVpbGRlciA9IGZhY3RvcnkuZ2V0VHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgICB0ZXN0RGF0YS5hZGRyZXNzZXMudmFsaWRBZGRyZXNzZXMuZm9yRWFjaCgoYWRkcmVzcykgPT4ge1xuICAgICAgICBzaG91bGQuZG9lc05vdFRocm93KCgpID0+IGJ1aWxkZXIudmFsaWRhdGVBZGRyZXNzKHsgYWRkcmVzcyB9KSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVqZWN0IGludmFsaWQgYWRkcmVzc2VzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYnVpbGRlciA9IGZhY3RvcnkuZ2V0VHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgICB0ZXN0RGF0YS5hZGRyZXNzZXMuaW52YWxpZEFkZHJlc3Nlcy5mb3JFYWNoKChhZGRyZXNzKSA9PiB7XG4gICAgICAgIHNob3VsZCgoKSA9PiBidWlsZGVyLnZhbGlkYXRlQWRkcmVzcyh7IGFkZHJlc3MgfSkpLnRocm93RXJyb3IoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciBmb3IgZW1wdHkgYWRkcmVzcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBmYWN0b3J5LmdldFRyYW5zZmVyQnVpbGRlcigpO1xuICAgICAgc2hvdWxkKCgpID0+IGJ1aWxkZXIudmFsaWRhdGVBZGRyZXNzKHsgYWRkcmVzczogJycgfSkpLnRocm93RXJyb3IoL0ludmFsaWQgYWRkcmVzcy8pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnVmFsdWUgVmFsaWRhdGlvbicsICgpID0+IHtcbiAgICBjb25zdCB2YWxpZENhc2VzID0gW1xuICAgICAgeyB2YWx1ZTogbmV3IEJpZ051bWJlcigwKSwgZGVzY3JpcHRpb246ICd6ZXJvIHZhbHVlJyB9LFxuICAgICAgeyB2YWx1ZTogbmV3IEJpZ051bWJlcigxMDAwKSwgZGVzY3JpcHRpb246ICdwb3NpdGl2ZSB2YWx1ZXMnIH0sXG4gICAgICB7IHZhbHVlOiBuZXcgQmlnTnVtYmVyKCcxMDAwMDAwMDAwMDAwMDAwMDAwJyksIGRlc2NyaXB0aW9uOiAnbGFyZ2UgdmFsdWVzJyB9LFxuICAgICAgeyB2YWx1ZTogbmV3IEJpZ051bWJlcigxMDAuNSksIGRlc2NyaXB0aW9uOiAnZGVjaW1hbCB2YWx1ZXMnIH0sXG4gICAgXTtcblxuICAgIHZhbGlkQ2FzZXMuZm9yRWFjaCgoeyB2YWx1ZSwgZGVzY3JpcHRpb24gfSkgPT4ge1xuICAgICAgaXQoYHNob3VsZCB2YWxpZGF0ZSAke2Rlc2NyaXB0aW9ufWAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgYnVpbGRlciA9IGZhY3RvcnkuZ2V0VHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgICAgIHNob3VsZC5kb2VzTm90VGhyb3coKCkgPT4gYnVpbGRlci52YWxpZGF0ZVZhbHVlKHZhbHVlKSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGludmFsaWRDYXNlcyA9IFtcbiAgICAgIHsgdmFsdWU6IG5ldyBCaWdOdW1iZXIoLTEpLCBlcnJvcjogJ1ZhbHVlIGNhbm5vdCBiZSBsZXNzIHRoYW4gemVybycsIGRlc2NyaXB0aW9uOiAnbmVnYXRpdmUgdmFsdWVzJyB9LFxuICAgICAgeyB2YWx1ZTogbmV3IEJpZ051bWJlcihOYU4pLCBlcnJvcjogJ0ludmFsaWQgYW1vdW50IGZvcm1hdCcsIGRlc2NyaXB0aW9uOiAnTmFOIHZhbHVlcycgfSxcbiAgICBdO1xuXG4gICAgaW52YWxpZENhc2VzLmZvckVhY2goKHsgdmFsdWUsIGVycm9yLCBkZXNjcmlwdGlvbiB9KSA9PiB7XG4gICAgICBpdChgc2hvdWxkIHJlamVjdCAke2Rlc2NyaXB0aW9ufWAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgYnVpbGRlciA9IGZhY3RvcnkuZ2V0VHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgICAgIHNob3VsZCgoKSA9PiBidWlsZGVyLnZhbGlkYXRlVmFsdWUodmFsdWUpKS50aHJvd0Vycm9yKGVycm9yKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnUmF3IFRyYW5zYWN0aW9uIFZhbGlkYXRpb24nLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSBwcm9wZXIgcmF3IHRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHggPSBhd2FpdCBjcmVhdGVUcmFuc2ZlckJ1aWxkZXJXaXRoR2FzKCkuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHJhd1R4ID0gYXdhaXQgdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcblxuICAgICAgY29uc3QgbmV3QnVpbGRlciA9IGZhY3RvcnkuZ2V0VHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgICBzaG91bGQuZG9lc05vdFRocm93KCgpID0+IG5ld0J1aWxkZXIudmFsaWRhdGVSYXdUcmFuc2FjdGlvbihyYXdUeCkpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgaW52YWxpZFJhd1R4Q2FzZXMgPSBbXG4gICAgICB7IHZhbHVlOiAnaW52YWxpZFJhd1R4JywgZXJyb3I6ICdJbnZhbGlkIHJhdyB0cmFuc2FjdGlvbicsIGRlc2NyaXB0aW9uOiAnaW52YWxpZCBzdHJpbmcnIH0sXG4gICAgICB7IHZhbHVlOiAnJywgZXJyb3I6ICdJbnZhbGlkIHJhdyB0cmFuc2FjdGlvbjogVW5kZWZpbmVkJywgZGVzY3JpcHRpb246ICdlbXB0eSBzdHJpbmcnIH0sXG4gICAgICB7IHZhbHVlOiB1bmRlZmluZWQgYXMgYW55LCBlcnJvcjogJ0ludmFsaWQgcmF3IHRyYW5zYWN0aW9uOiBVbmRlZmluZWQnLCBkZXNjcmlwdGlvbjogJ3VuZGVmaW5lZCcgfSxcbiAgICBdO1xuXG4gICAgaW52YWxpZFJhd1R4Q2FzZXMuZm9yRWFjaCgoeyB2YWx1ZSwgZXJyb3IsIGRlc2NyaXB0aW9uIH0pID0+IHtcbiAgICAgIGl0KGBzaG91bGQgcmVqZWN0ICR7ZGVzY3JpcHRpb259YCwgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBidWlsZGVyID0gZmFjdG9yeS5nZXRUcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICAgICAgc2hvdWxkKCgpID0+IGJ1aWxkZXIudmFsaWRhdGVSYXdUcmFuc2FjdGlvbih2YWx1ZSkpLnRocm93RXJyb3IoZXJyb3IpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdUcmFuc2FjdGlvbiBWYWxpZGF0aW9uJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgY29tcGxldGUgdHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eCA9IChhd2FpdCBjcmVhdGVUcmFuc2ZlckJ1aWxkZXJXaXRoR2FzKCkuYnVpbGQoKSkgYXMgVHJhbnNmZXJUcmFuc2FjdGlvbjtcbiAgICAgIGNvbnN0IG5ld0J1aWxkZXIgPSBmYWN0b3J5LmdldFRyYW5zZmVyQnVpbGRlcigpO1xuICAgICAgc2hvdWxkLmRvZXNOb3RUaHJvdygoKSA9PiBuZXdCdWlsZGVyLnZhbGlkYXRlVHJhbnNhY3Rpb24odHgpKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgZXJyb3IgZm9yIHVuZGVmaW5lZCB0cmFuc2FjdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBmYWN0b3J5LmdldFRyYW5zZmVyQnVpbGRlcigpO1xuICAgICAgc2hvdWxkKCgpID0+IGJ1aWxkZXIudmFsaWRhdGVUcmFuc2FjdGlvbih1bmRlZmluZWQpKS50aHJvd0Vycm9yKC9UcmFuc2FjdGlvbiBpcyByZXF1aXJlZCBmb3IgdmFsaWRhdGlvbi8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciBmb3IgdHJhbnNhY3Rpb24gd2l0aCBpbnZhbGlkIHNlbmRlcicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4ID0gKGF3YWl0IGNyZWF0ZVRyYW5zZmVyQnVpbGRlcldpdGhHYXMoKS5idWlsZCgpKSBhcyBUcmFuc2ZlclRyYW5zYWN0aW9uO1xuICAgICAgdHguc2VuZGVyID0gJ2ludmFsaWRBZGRyZXNzJztcblxuICAgICAgY29uc3QgbmV3QnVpbGRlciA9IGZhY3RvcnkuZ2V0VHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgICBzaG91bGQoKCkgPT4gbmV3QnVpbGRlci52YWxpZGF0ZVRyYW5zYWN0aW9uKHR4KSkudGhyb3dFcnJvcigpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnQnVpbGRlciBTZXR0ZXIgTWV0aG9kcycsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHNldCBhbmQgY2hhbmdlIHNlbmRlciBjb3JyZWN0bHknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBidWlsZGVyID0gZmFjdG9yeS5nZXRUcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICAgIGJ1aWxkZXIuc2VuZGVyKHRlc3REYXRhLnNlbmRlci5hZGRyZXNzKTtcbiAgICAgIHNob3VsZC5lcXVhbChidWlsZGVyLnRyYW5zYWN0aW9uLnNlbmRlciwgdGVzdERhdGEuc2VuZGVyLmFkZHJlc3MpO1xuXG4gICAgICBidWlsZGVyLnNlbmRlcih0ZXN0RGF0YS5nYXNTcG9uc29yLmFkZHJlc3MpO1xuICAgICAgc2hvdWxkLmVxdWFsKGJ1aWxkZXIudHJhbnNhY3Rpb24uc2VuZGVyLCB0ZXN0RGF0YS5nYXNTcG9uc29yLmFkZHJlc3MpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSBzZW5kZXIgYWRkcmVzcyB3aGVuIHNldHRpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBidWlsZGVyID0gZmFjdG9yeS5nZXRUcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICAgIHNob3VsZCgoKSA9PiBidWlsZGVyLnNlbmRlcignaW52YWxpZEFkZHJlc3MnKSkudGhyb3dFcnJvcignSW52YWxpZCBhZGRyZXNzIGludmFsaWRBZGRyZXNzJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHNldCBhbGwgZ2FzIHBhcmFtZXRlcnMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBidWlsZGVyID0gZmFjdG9yeS5nZXRUcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICAgIGJ1aWxkZXIuZ2FzRGF0YSh0ZXN0RGF0YS5nYXNEYXRhKTtcblxuICAgICAgc2hvdWxkLmVxdWFsKGJ1aWxkZXIudHJhbnNhY3Rpb24uZ2FzQnVkZ2V0LCB0ZXN0RGF0YS5HQVNfQlVER0VUKTtcbiAgICAgIHNob3VsZC5lcXVhbChidWlsZGVyLnRyYW5zYWN0aW9uLmdhc1ByaWNlLCB0ZXN0RGF0YS5HQVNfUFJJQ0UpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbChidWlsZGVyLnRyYW5zYWN0aW9uLmdhc1BheW1lbnRPYmplY3RzLCB0ZXN0RGF0YS5nYXNQYXltZW50T2JqZWN0cyk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBpbnZhbGlkR2FzRGF0YUNhc2VzID0gW1xuICAgICAgeyBnYXNCdWRnZXQ6IC0xMDAwLCBkZXNjcmlwdGlvbjogJ25lZ2F0aXZlIGdhcyBidWRnZXQnIH0sXG4gICAgICB7IGdhc1ByaWNlOiAtMTAwLCBkZXNjcmlwdGlvbjogJ25lZ2F0aXZlIGdhcyBwcmljZScgfSxcbiAgICBdO1xuXG4gICAgaW52YWxpZEdhc0RhdGFDYXNlcy5mb3JFYWNoKCh7IGdhc0J1ZGdldCwgZ2FzUHJpY2UsIGRlc2NyaXB0aW9uIH0pID0+IHtcbiAgICAgIGl0KGBzaG91bGQgcmVqZWN0ICR7ZGVzY3JpcHRpb259YCwgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBidWlsZGVyID0gZmFjdG9yeS5nZXRUcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICAgICAgc2hvdWxkKCgpID0+XG4gICAgICAgICAgYnVpbGRlci5nYXNEYXRhKHtcbiAgICAgICAgICAgIGdhc0J1ZGdldDogZ2FzQnVkZ2V0ID8/IHRlc3REYXRhLkdBU19CVURHRVQsXG4gICAgICAgICAgICBnYXNQcmljZTogZ2FzUHJpY2UgPz8gdGVzdERhdGEuR0FTX1BSSUNFLFxuICAgICAgICAgICAgZ2FzUGF5bWVudE9iamVjdHM6IHRlc3REYXRhLmdhc1BheW1lbnRPYmplY3RzLFxuICAgICAgICAgIH0pXG4gICAgICAgICkudGhyb3dFcnJvcigpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIGZvciBlbXB0eSBnYXMgcGF5bWVudCBvYmplY3RzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYnVpbGRlciA9IGZhY3RvcnkuZ2V0VHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgICBzaG91bGQoKCkgPT5cbiAgICAgICAgYnVpbGRlci5nYXNEYXRhKHtcbiAgICAgICAgICBnYXNCdWRnZXQ6IHRlc3REYXRhLkdBU19CVURHRVQsXG4gICAgICAgICAgZ2FzUHJpY2U6IHRlc3REYXRhLkdBU19QUklDRSxcbiAgICAgICAgICBnYXNQYXltZW50T2JqZWN0czogW10sXG4gICAgICAgIH0pXG4gICAgICApLnRocm93RXJyb3IoJ0dhcyBpbnB1dCBvYmplY3RzIGxpc3QgaXMgZW1wdHknKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc2V0IGdhcyBzcG9uc29yIGNvcnJlY3RseScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBmYWN0b3J5LmdldFRyYW5zZmVyQnVpbGRlcigpO1xuICAgICAgYnVpbGRlci5nYXNTcG9uc29yKHRlc3REYXRhLmdhc1Nwb25zb3IuYWRkcmVzcyk7XG4gICAgICBzaG91bGQuZXF1YWwoYnVpbGRlci50cmFuc2FjdGlvbi5nYXNTcG9uc29yLCB0ZXN0RGF0YS5nYXNTcG9uc29yLmFkZHJlc3MpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSBnYXMgc3BvbnNvciBhZGRyZXNzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYnVpbGRlciA9IGZhY3RvcnkuZ2V0VHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgICBzaG91bGQoKCkgPT4gYnVpbGRlci5nYXNTcG9uc29yKCdpbnZhbGlkQWRkcmVzcycpKS50aHJvd0Vycm9yKCdJbnZhbGlkIGFkZHJlc3MgaW52YWxpZEFkZHJlc3MnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYWxsb3cgc2VuZGVyIHRvIGJlIGdhcyBzcG9uc29yJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYnVpbGRlciA9IGZhY3RvcnkuZ2V0VHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgICBidWlsZGVyLnNlbmRlcih0ZXN0RGF0YS5zZW5kZXIuYWRkcmVzcyk7XG4gICAgICBidWlsZGVyLmdhc1Nwb25zb3IodGVzdERhdGEuc2VuZGVyLmFkZHJlc3MpO1xuICAgICAgc2hvdWxkLmVxdWFsKGJ1aWxkZXIudHJhbnNhY3Rpb24uZ2FzU3BvbnNvciwgdGVzdERhdGEuc2VuZGVyLmFkZHJlc3MpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnQnVpbGRlciBJbml0aWFsaXphdGlvbicsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGluaXRpYWxpemUgYnVpbGRlciBmcm9tIGV4aXN0aW5nIHRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgb3JpZ2luYWxUeCA9IChhd2FpdCBjcmVhdGVUcmFuc2ZlckJ1aWxkZXJXaXRoR2FzKCkuYnVpbGQoKSkgYXMgVHJhbnNmZXJUcmFuc2FjdGlvbjtcbiAgICAgIGNvbnN0IG5ld0J1aWxkZXIgPSBmYWN0b3J5LmdldFRyYW5zZmVyQnVpbGRlcihvcmlnaW5hbFR4KTtcblxuICAgICAgc2hvdWxkLmVxdWFsKChuZXdCdWlsZGVyLnRyYW5zYWN0aW9uIGFzIFRyYW5zZmVyVHJhbnNhY3Rpb24pLnNlbmRlciwgb3JpZ2luYWxUeC5zZW5kZXIpO1xuICAgICAgc2hvdWxkLmVxdWFsKChuZXdCdWlsZGVyLnRyYW5zYWN0aW9uIGFzIFRyYW5zZmVyVHJhbnNhY3Rpb24pLmdhc0J1ZGdldCwgb3JpZ2luYWxUeC5nYXNCdWRnZXQpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnVHJhbnNhY3Rpb24gQnVpbGRpbmcnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBidWlsZCB0cmFuc2FjdGlvbiB3aXRoIGFsbCByZXF1aXJlZCBmaWVsZHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eCA9IChhd2FpdCBjcmVhdGVUcmFuc2ZlckJ1aWxkZXJXaXRoR2FzKCkuYnVpbGQoKSkgYXMgVHJhbnNmZXJUcmFuc2FjdGlvbjtcblxuICAgICAgc2hvdWxkLmV4aXN0KHR4KTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eC5zZW5kZXIsIHRlc3REYXRhLnNlbmRlci5hZGRyZXNzKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eC5pc1NpbXVsYXRlVHgsIGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYnVpbGQgc2ltdWxhdGlvbiB0cmFuc2FjdGlvbiB3aXRob3V0IGdhcyBkYXRhJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHggPSAoYXdhaXQgY3JlYXRlQmFzaWNUcmFuc2ZlckJ1aWxkZXIoKS5idWlsZCgpKSBhcyBUcmFuc2ZlclRyYW5zYWN0aW9uO1xuXG4gICAgICBzaG91bGQuZXhpc3QodHgpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4LmlzU2ltdWxhdGVUeCwgdHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHN1cHBvcnQgbWV0aG9kIGNoYWluaW5nJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHggPSAoYXdhaXQgZmFjdG9yeVxuICAgICAgICAuZ2V0VHJhbnNmZXJCdWlsZGVyKClcbiAgICAgICAgLnNlbmRlcih0ZXN0RGF0YS5zZW5kZXIuYWRkcmVzcylcbiAgICAgICAgLnJlY2lwaWVudHModGVzdERhdGEucmVjaXBpZW50cylcbiAgICAgICAgLnBheW1lbnRPYmplY3RzKHRlc3REYXRhLnBheW1lbnRPYmplY3RzKVxuICAgICAgICAuZ2FzRGF0YSh0ZXN0RGF0YS5nYXNEYXRhKVxuICAgICAgICAuZ2FzU3BvbnNvcih0ZXN0RGF0YS5nYXNTcG9uc29yLmFkZHJlc3MpXG4gICAgICAgIC5idWlsZCgpKSBhcyBUcmFuc2ZlclRyYW5zYWN0aW9uO1xuXG4gICAgICBzaG91bGQuZXhpc3QodHgpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4LnNlbmRlciwgdGVzdERhdGEuc2VuZGVyLmFkZHJlc3MpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4Lmdhc1Nwb25zb3IsIHRlc3REYXRhLmdhc1Nwb25zb3IuYWRkcmVzcyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdUcmFuc2FjdGlvbiBUeXBlJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGNvcnJlY3QgdHJhbnNhY3Rpb24gdHlwZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBjcmVhdGVUcmFuc2ZlckJ1aWxkZXJXaXRoR2FzKCk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIHNob3VsZC5lcXVhbChidWlsZGVyLnRyYW5zYWN0aW9uVHlwZSwgdHgudHlwZSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transactionBuilderFactory.d.ts","sourceRoot":"","sources":["../../../../test/unit/transactionBuilder/transactionBuilderFactory.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,178 @@
|
|
|
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 should_1 = __importDefault(require("should"));
|
|
40
|
+
const statics_1 = require("@bitgo-beta/statics");
|
|
41
|
+
const src_1 = require("../../../src");
|
|
42
|
+
const testData = __importStar(require("../../resources/iota"));
|
|
43
|
+
const testHelpers_1 = require("../helpers/testHelpers");
|
|
44
|
+
describe('Iota Transaction Builder Factory', () => {
|
|
45
|
+
const factory = new src_1.TransactionBuilderFactory(statics_1.coins.get('tiota'));
|
|
46
|
+
describe('getTransferBuilder', () => {
|
|
47
|
+
it('should create a transfer builder', function () {
|
|
48
|
+
const builder = factory.getTransferBuilder();
|
|
49
|
+
should_1.default.exist(builder);
|
|
50
|
+
(0, should_1.default)(builder instanceof src_1.TransferBuilder).be.true();
|
|
51
|
+
});
|
|
52
|
+
it('should create a transfer builder with existing transaction', async function () {
|
|
53
|
+
const txBuilder = (0, testHelpers_1.createTransferBuilderWithGas)();
|
|
54
|
+
const tx = (await txBuilder.build());
|
|
55
|
+
const newBuilder = factory.getTransferBuilder(tx);
|
|
56
|
+
should_1.default.exist(newBuilder);
|
|
57
|
+
(0, should_1.default)(newBuilder instanceof src_1.TransferBuilder).be.true();
|
|
58
|
+
const rebuiltTx = (await newBuilder.build());
|
|
59
|
+
should_1.default.equal(rebuiltTx.sender, tx.sender);
|
|
60
|
+
should_1.default.deepEqual(rebuiltTx.recipients, tx.recipients);
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
describe('from', () => {
|
|
64
|
+
const formats = [
|
|
65
|
+
{
|
|
66
|
+
name: 'hex string',
|
|
67
|
+
convert: (rawTx) => Buffer.from(rawTx, 'base64').toString('hex'),
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
name: 'Uint8Array',
|
|
71
|
+
convert: (rawTx) => Buffer.from(rawTx, 'base64'),
|
|
72
|
+
},
|
|
73
|
+
];
|
|
74
|
+
formats.forEach(({ name, convert }) => {
|
|
75
|
+
it(`should create builder from raw transaction in ${name} format`, async function () {
|
|
76
|
+
const txBuilder = (0, testHelpers_1.createTransferBuilderWithGas)();
|
|
77
|
+
const tx = (await txBuilder.build());
|
|
78
|
+
const rawTx = await tx.toBroadcastFormat();
|
|
79
|
+
const convertedTx = convert(rawTx);
|
|
80
|
+
const rebuiltBuilder = factory.from(convertedTx);
|
|
81
|
+
should_1.default.exist(rebuiltBuilder);
|
|
82
|
+
(0, should_1.default)(rebuiltBuilder instanceof src_1.TransferBuilder).be.true();
|
|
83
|
+
const rebuiltTx = (await rebuiltBuilder.build());
|
|
84
|
+
rebuiltTx.sender.should.equal(testData.sender.address);
|
|
85
|
+
rebuiltTx.recipients.length.should.equal(testData.recipients.length);
|
|
86
|
+
rebuiltTx.recipients[0].address.should.equal(testData.recipients[0].address);
|
|
87
|
+
rebuiltTx.recipients[0].amount.should.equal(testData.recipients[0].amount);
|
|
88
|
+
should_1.default.exist(rebuiltTx.paymentObjects);
|
|
89
|
+
rebuiltTx.paymentObjects?.length.should.equal(testData.paymentObjects.length);
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
describe('Error Handling', () => {
|
|
94
|
+
it('should throw error for invalid raw transaction', function () {
|
|
95
|
+
(0, should_1.default)(() => factory.from('invalid-raw-transaction')).throwError();
|
|
96
|
+
});
|
|
97
|
+
it('should throw error for empty raw transaction', function () {
|
|
98
|
+
(0, should_1.default)(() => factory.from('')).throwError();
|
|
99
|
+
});
|
|
100
|
+
it('should throw error for unsupported transaction type', async function () {
|
|
101
|
+
// This would require creating a transaction with unsupported commands
|
|
102
|
+
// For now, we test that invalid data throws an error
|
|
103
|
+
const invalidData = Buffer.from('not-a-valid-transaction').toString('base64');
|
|
104
|
+
(0, should_1.default)(() => factory.from(invalidData)).throwError();
|
|
105
|
+
});
|
|
106
|
+
it('should throw error when getWalletInitializationBuilder is called', function () {
|
|
107
|
+
(0, should_1.default)(() => factory.getWalletInitializationBuilder()).throwError('Method not implemented.');
|
|
108
|
+
});
|
|
109
|
+
});
|
|
110
|
+
describe('Transaction Rebuilding and Modification', () => {
|
|
111
|
+
it('should allow creating transactions with modified gas budget', async function () {
|
|
112
|
+
const txBuilder = (0, testHelpers_1.createTransferBuilderWithGas)();
|
|
113
|
+
const tx = (await txBuilder.build());
|
|
114
|
+
should_1.default.equal(tx.gasBudget, testData.GAS_BUDGET);
|
|
115
|
+
const modifiedBuilder = factory.getTransferBuilder();
|
|
116
|
+
modifiedBuilder.sender(testData.sender.address);
|
|
117
|
+
modifiedBuilder.recipients(testData.recipients);
|
|
118
|
+
modifiedBuilder.paymentObjects(testData.paymentObjects);
|
|
119
|
+
modifiedBuilder.gasData({
|
|
120
|
+
gasBudget: testData.GAS_BUDGET * 2,
|
|
121
|
+
gasPrice: testData.GAS_PRICE,
|
|
122
|
+
gasPaymentObjects: testData.gasPaymentObjects,
|
|
123
|
+
});
|
|
124
|
+
const modifiedTx = (await modifiedBuilder.build());
|
|
125
|
+
should_1.default.equal(modifiedTx.gasBudget, testData.GAS_BUDGET * 2);
|
|
126
|
+
});
|
|
127
|
+
it('should build transaction with gas sponsor', async function () {
|
|
128
|
+
const txBuilder = (0, testHelpers_1.createTransferBuilderWithGas)();
|
|
129
|
+
txBuilder.gasSponsor(testData.gasSponsor.address);
|
|
130
|
+
const tx = (await txBuilder.build());
|
|
131
|
+
should_1.default.equal(tx.sender, testData.sender.address);
|
|
132
|
+
should_1.default.equal(tx.gasSponsor, testData.gasSponsor.address);
|
|
133
|
+
should_1.default.notEqual(tx.sender, tx.gasSponsor);
|
|
134
|
+
});
|
|
135
|
+
it('should maintain transaction ID for identical transactions', async function () {
|
|
136
|
+
const txBuilder1 = (0, testHelpers_1.createTransferBuilderWithGas)();
|
|
137
|
+
const tx1 = (await txBuilder1.build());
|
|
138
|
+
const txBuilder2 = (0, testHelpers_1.createTransferBuilderWithGas)();
|
|
139
|
+
const tx2 = (await txBuilder2.build());
|
|
140
|
+
should_1.default.equal(tx1.id, tx2.id);
|
|
141
|
+
});
|
|
142
|
+
});
|
|
143
|
+
describe('Builder Initialization', () => {
|
|
144
|
+
it('should initialize builder with transaction correctly', async function () {
|
|
145
|
+
const originalBuilder = (0, testHelpers_1.createTransferBuilderWithGas)();
|
|
146
|
+
const originalTx = (await originalBuilder.build());
|
|
147
|
+
const newBuilder = factory.getTransferBuilder(originalTx);
|
|
148
|
+
const newTx = (await newBuilder.build());
|
|
149
|
+
should_1.default.equal(newTx.sender, originalTx.sender);
|
|
150
|
+
should_1.default.deepEqual(newTx.recipients, originalTx.recipients);
|
|
151
|
+
should_1.default.equal(newTx.gasBudget, originalTx.gasBudget);
|
|
152
|
+
should_1.default.equal(newTx.gasPrice, originalTx.gasPrice);
|
|
153
|
+
});
|
|
154
|
+
});
|
|
155
|
+
describe('Round Trip Conversion', () => {
|
|
156
|
+
it('should handle JSON round trip', async function () {
|
|
157
|
+
const originalBuilder = (0, testHelpers_1.createTransferBuilderWithGas)();
|
|
158
|
+
const originalTx = (await originalBuilder.build());
|
|
159
|
+
const json = originalTx.toJson();
|
|
160
|
+
const newTx = new src_1.TransferTransaction(statics_1.coins.get('tiota'));
|
|
161
|
+
newTx.parseFromJSON(json);
|
|
162
|
+
const newBuilder = factory.getTransferBuilder(newTx);
|
|
163
|
+
const rebuiltTx = (await newBuilder.build());
|
|
164
|
+
should_1.default.equal(rebuiltTx.sender, originalTx.sender);
|
|
165
|
+
should_1.default.deepEqual(rebuiltTx.recipients, originalTx.recipients);
|
|
166
|
+
});
|
|
167
|
+
it('should serialize to consistent format', async function () {
|
|
168
|
+
const builder1 = (0, testHelpers_1.createTransferBuilderWithGas)();
|
|
169
|
+
const tx1 = (await builder1.build());
|
|
170
|
+
const serialized1 = await tx1.toBroadcastFormat();
|
|
171
|
+
const builder2 = (0, testHelpers_1.createTransferBuilderWithGas)();
|
|
172
|
+
const tx2 = (await builder2.build());
|
|
173
|
+
const serialized2 = await tx2.toBroadcastFormat();
|
|
174
|
+
should_1.default.equal(serialized1, serialized2);
|
|
175
|
+
});
|
|
176
|
+
});
|
|
177
|
+
});
|
|
178
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Rlc3QvdW5pdC90cmFuc2FjdGlvbkJ1aWxkZXIvdHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG9EQUE0QjtBQUM1QixpREFBNEM7QUFDNUMsc0NBQStGO0FBQy9GLCtEQUFpRDtBQUNqRCx3REFBc0U7QUFFdEUsUUFBUSxDQUFDLGtDQUFrQyxFQUFFLEdBQUcsRUFBRTtJQUNoRCxNQUFNLE9BQU8sR0FBRyxJQUFJLCtCQUF5QixDQUFDLGVBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUVsRSxRQUFRLENBQUMsb0JBQW9CLEVBQUUsR0FBRyxFQUFFO1FBQ2xDLEVBQUUsQ0FBQyxrQ0FBa0MsRUFBRTtZQUNyQyxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUM3QyxnQkFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN0QixJQUFBLGdCQUFNLEVBQUMsT0FBTyxZQUFZLHFCQUFlLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdkQsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsNERBQTRELEVBQUUsS0FBSztZQUNwRSxNQUFNLFNBQVMsR0FBRyxJQUFBLDBDQUE0QixHQUFFLENBQUM7WUFDakQsTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBd0IsQ0FBQztZQUU1RCxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDbEQsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDekIsSUFBQSxnQkFBTSxFQUFD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Qy9DLE1BQU0sUUFBUSxHQUFHLElBQUEsMENBQTRCLEdBQUUsQ0FBQztZQUNoRCxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sUUFBUSxDQUFDLEtBQUssRUFBRSxDQUF3QixDQUFDO1lBQzVELE1BQU0sV0FBVyxHQUFHLE1BQU0sR0FBRyxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFFbEQsTUFBTSxRQUFRLEdBQUcsSUFBQSwwQ0FBNEIsR0FBRSxDQUFDO1lBQ2hELE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxRQUFRLENBQUMsS0FBSyxFQUFFLENBQXdCLENBQUM7WUFDNUQsTUFBTSxXQUFXLEdBQUcsTUFBTSxHQUFHLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUVsRCxnQkFBTSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDekMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHNob3VsZCBmcm9tICdzaG91bGQnO1xuaW1wb3J0IHsgY29pbnMgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnksIFRyYW5zZmVyQnVpbGRlciwgVHJhbnNmZXJUcmFuc2FjdGlvbiB9IGZyb20gJy4uLy4uLy4uL3NyYyc7XG5pbXBvcnQgKiBhcyB0ZXN0RGF0YSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvaW90YSc7XG5pbXBvcnQgeyBjcmVhdGVUcmFuc2ZlckJ1aWxkZXJXaXRoR2FzIH0gZnJvbSAnLi4vaGVscGVycy90ZXN0SGVscGVycyc7XG5cbmRlc2NyaWJlKCdJb3RhIFRyYW5zYWN0aW9uIEJ1aWxkZXIgRmFjdG9yeScsICgpID0+IHtcbiAgY29uc3QgZmFjdG9yeSA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCgndGlvdGEnKSk7XG5cbiAgZGVzY3JpYmUoJ2dldFRyYW5zZmVyQnVpbGRlcicsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGNyZWF0ZSBhIHRyYW5zZmVyIGJ1aWxkZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBidWlsZGVyID0gZmFjdG9yeS5nZXRUcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICAgIHNob3VsZC5leGlzdChidWlsZGVyKTtcbiAgICAgIHNob3VsZChidWlsZGVyIGluc3RhbmNlb2YgVHJhbnNmZXJCdWlsZGVyKS5iZS50cnVlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGNyZWF0ZSBhIHRyYW5zZmVyIGJ1aWxkZXIgd2l0aCBleGlzdGluZyB0cmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGNyZWF0ZVRyYW5zZmVyQnVpbGRlcldpdGhHYXMoKTtcbiAgICAgIGNvbnN0IHR4ID0gKGF3YWl0IHR4QnVpbGRlci5idWlsZCgpKSBhcyBUcmFuc2ZlclRyYW5zYWN0aW9uO1xuXG4gICAgICBjb25zdCBuZXdCdWlsZGVyID0gZmFjdG9yeS5nZXRUcmFuc2ZlckJ1aWxkZXIodHgpO1xuICAgICAgc2hvdWxkLmV4aXN0KG5ld0J1aWxkZXIpO1xuICAgICAgc2hvdWxkKG5ld0J1aWxkZXIgaW5zdGFuY2VvZiBUcmFuc2ZlckJ1aWxkZXIpLmJlLnRydWUoKTtcblxuICAgICAgY29uc3QgcmVidWlsdFR4ID0gKGF3YWl0IG5ld0J1aWxkZXIuYnVpbGQoKSkgYXMgVHJhbnNmZXJUcmFuc2FjdGlvbjtcbiAgICAgIHNob3VsZC5lcXVhbChyZWJ1aWx0VHguc2VuZGVyLCB0eC5zZW5kZXIpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbChyZWJ1aWx0VHgucmVjaXBpZW50cywgdHgucmVjaXBpZW50cyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdmcm9tJywgKCkgPT4ge1xuICAgIGNvbnN0IGZvcm1hdHMgPSBbXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdoZXggc3RyaW5nJyxcbiAgICAgICAgY29udmVydDogKHJhd1R4OiBzdHJpbmcpID0+IEJ1ZmZlci5mcm9tKHJhd1R4LCAnYmFzZTY0JykudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ1VpbnQ4QXJyYXknLFxuICAgICAgICBjb252ZXJ0OiAocmF3VHg6IHN0cmluZykgPT4gQnVmZmVyLmZyb20ocmF3VHgsICdiYXNlNjQnKSxcbiAgICAgIH0sXG4gICAgXTtcblxuICAgIGZvcm1hdHMuZm9yRWFjaCgoeyBuYW1lLCBjb252ZXJ0IH0pID0+IHtcbiAgICAgIGl0KGBzaG91bGQgY3JlYXRlIGJ1aWxkZXIgZnJvbSByYXcgdHJhbnNhY3Rpb24gaW4gJHtuYW1lfSBmb3JtYXRgLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGNyZWF0ZVRyYW5zZmVyQnVpbGRlcldpdGhHYXMoKTtcbiAgICAgICAgY29uc3QgdHggPSAoYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCkpIGFzIFRyYW5zZmVyVHJhbnNhY3Rpb247XG4gICAgICAgIGNvbnN0IHJhd1R4ID0gYXdhaXQgdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgICAgY29uc3QgY29udmVydGVkVHggPSBjb252ZXJ0KHJhd1R4KTtcblxuICAgICAgICBjb25zdCByZWJ1aWx0QnVpbGRlciA9IGZhY3RvcnkuZnJvbShjb252ZXJ0ZWRUeCk7XG4gICAgICAgIHNob3VsZC5leGlzdChyZWJ1aWx0QnVpbGRlcik7XG4gICAgICAgIHNob3VsZChyZWJ1aWx0QnVpbGRlciBpbnN0YW5jZW9mIFRyYW5zZmVyQnVpbGRlcikuYmUudHJ1ZSgpO1xuXG4gICAgICAgIGNvbnN0IHJlYnVpbHRUeCA9IChhd2FpdCByZWJ1aWx0QnVpbGRlci5idWlsZCgpKSBhcyBUcmFuc2ZlclRyYW5zYWN0aW9uO1xuICAgICAgICByZWJ1aWx0VHguc2VuZGVyLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5zZW5kZXIuYWRkcmVzcyk7XG4gICAgICAgIHJlYnVpbHRUeC5yZWNpcGllbnRzLmxlbmd0aC5zaG91bGQuZXF1YWwodGVzdERhdGEucmVjaXBpZW50cy5sZW5ndGgpO1xuICAgICAgICByZWJ1aWx0VHgucmVjaXBpZW50c1swXS5hZGRyZXNzLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5yZWNpcGllbnRzWzBdLmFkZHJlc3MpO1xuICAgICAgICByZWJ1aWx0VHgucmVjaXBpZW50c1swXS5hbW91bnQuc2hvdWxkLmVxdWFsKHRlc3REYXRhLnJlY2lwaWVudHNbMF0uYW1vdW50KTtcbiAgICAgICAgc2hvdWxkLmV4aXN0KHJlYnVpbHRUeC5wYXltZW50T2JqZWN0cyk7XG4gICAgICAgIHJlYnVpbHRUeC5wYXltZW50T2JqZWN0cz8ubGVuZ3RoLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5wYXltZW50T2JqZWN0cy5sZW5ndGgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdFcnJvciBIYW5kbGluZycsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIGZvciBpbnZhbGlkIHJhdyB0cmFuc2FjdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHNob3VsZCgoKSA9PiBmYWN0b3J5LmZyb20oJ2ludmFsaWQtcmF3LXRyYW5zYWN0aW9uJykpLnRocm93RXJyb3IoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgZXJyb3IgZm9yIGVtcHR5IHJhdyB0cmFuc2FjdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHNob3VsZCgoKSA9PiBmYWN0b3J5LmZyb20oJycpKS50aHJvd0Vycm9yKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIGZvciB1bnN1cHBvcnRlZCB0cmFuc2FjdGlvbiB0eXBlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gVGhpcyB3b3VsZCByZXF1aXJlIGNyZWF0aW5nIGEgdHJhbnNhY3Rpb24gd2l0aCB1bnN1cHBvcnRlZCBjb21tYW5kc1xuICAgICAgLy8gRm9yIG5vdywgd2UgdGVzdCB0aGF0IGludmFsaWQgZGF0YSB0aHJvd3MgYW4gZXJyb3JcbiAgICAgIGNvbnN0IGludmFsaWREYXRhID0gQnVmZmVyLmZyb20oJ25vdC1hLXZhbGlkLXRyYW5zYWN0aW9uJykudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuICAgICAgc2hvdWxkKCgpID0+IGZhY3RvcnkuZnJvbShpbnZhbGlkRGF0YSkpLnRocm93RXJyb3IoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgZXJyb3Igd2hlbiBnZXRXYWxsZXRJbml0aWFsaXphdGlvbkJ1aWxkZXIgaXMgY2FsbGVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgc2hvdWxkKCgpID0+IGZhY3RvcnkuZ2V0V2FsbGV0SW5pdGlhbGl6YXRpb25CdWlsZGVyKCkpLnRocm93RXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdUcmFuc2FjdGlvbiBSZWJ1aWxkaW5nIGFuZCBNb2RpZmljYXRpb24nLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBhbGxvdyBjcmVhdGluZyB0cmFuc2FjdGlvbnMgd2l0aCBtb2RpZmllZCBnYXMgYnVkZ2V0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gY3JlYXRlVHJhbnNmZXJCdWlsZGVyV2l0aEdhcygpO1xuICAgICAgY29uc3QgdHggPSAoYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCkpIGFzIFRyYW5zZmVyVHJhbnNhY3Rpb247XG4gICAgICBzaG91bGQuZXF1YWwodHguZ2FzQnVkZ2V0LCB0ZXN0RGF0YS5HQVNfQlVER0VUKTtcblxuICAgICAgY29uc3QgbW9kaWZpZWRCdWlsZGVyID0gZmFjdG9yeS5nZXRUcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICAgIG1vZGlmaWVkQnVpbGRlci5zZW5kZXIodGVzdERhdGEuc2VuZGVyLmFkZHJlc3MpO1xuICAgICAgbW9kaWZpZWRCdWlsZGVyLnJlY2lwaWVudHModGVzdERhdGEucmVjaXBpZW50cyk7XG4gICAgICBtb2RpZmllZEJ1aWxkZXIucGF5bWVudE9iamVjdHModGVzdERhdGEucGF5bWVudE9iamVjdHMpO1xuICAgICAgbW9kaWZpZWRCdWlsZGVyLmdhc0RhdGEoe1xuICAgICAgICBnYXNCdWRnZXQ6IHRlc3REYXRhLkdBU19CVURHRVQgKiAyLFxuICAgICAgICBnYXNQcmljZTogdGVzdERhdGEuR0FTX1BSSUNFLFxuICAgICAgICBnYXNQYXltZW50T2JqZWN0czogdGVzdERhdGEuZ2FzUGF5bWVudE9iamVjdHMsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgbW9kaWZpZWRUeCA9IChhd2FpdCBtb2RpZmllZEJ1aWxkZXIuYnVpbGQoKSkgYXMgVHJhbnNmZXJUcmFuc2FjdGlvbjtcbiAgICAgIHNob3VsZC5lcXVhbChtb2RpZmllZFR4Lmdhc0J1ZGdldCwgdGVzdERhdGEuR0FTX0JVREdFVCAqIDIpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBidWlsZCB0cmFuc2FjdGlvbiB3aXRoIGdhcyBzcG9uc29yJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gY3JlYXRlVHJhbnNmZXJCdWlsZGVyV2l0aEdhcygpO1xuICAgICAgdHhCdWlsZGVyLmdhc1Nwb25zb3IodGVzdERhdGEuZ2FzU3BvbnNvci5hZGRyZXNzKTtcblxuICAgICAgY29uc3QgdHggPSAoYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCkpIGFzIFRyYW5zZmVyVHJhbnNhY3Rpb247XG4gICAgICBzaG91bGQuZXF1YWwodHguc2VuZGVyLCB0ZXN0RGF0YS5zZW5kZXIuYWRkcmVzcyk7XG4gICAgICBzaG91bGQuZXF1YWwodHguZ2FzU3BvbnNvciwgdGVzdERhdGEuZ2FzU3BvbnNvci5hZGRyZXNzKTtcbiAgICAgIHNob3VsZC5ub3RFcXVhbCh0eC5zZW5kZXIsIHR4Lmdhc1Nwb25zb3IpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBtYWludGFpbiB0cmFuc2FjdGlvbiBJRCBmb3IgaWRlbnRpY2FsIHRyYW5zYWN0aW9ucycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlcjEgPSBjcmVhdGVUcmFuc2ZlckJ1aWxkZXJXaXRoR2FzKCk7XG4gICAgICBjb25zdCB0eDEgPSAoYXdhaXQgdHhCdWlsZGVyMS5idWlsZCgpKSBhcyBUcmFuc2ZlclRyYW5zYWN0aW9uO1xuXG4gICAgICBjb25zdCB0eEJ1aWxkZXIyID0gY3JlYXRlVHJhbnNmZXJCdWlsZGVyV2l0aEdhcygpO1xuICAgICAgY29uc3QgdHgyID0gKGF3YWl0IHR4QnVpbGRlcjIuYnVpbGQoKSkgYXMgVHJhbnNmZXJUcmFuc2FjdGlvbjtcblxuICAgICAgc2hvdWxkLmVxdWFsKHR4MS5pZCwgdHgyLmlkKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0J1aWxkZXIgSW5pdGlhbGl6YXRpb24nLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBpbml0aWFsaXplIGJ1aWxkZXIgd2l0aCB0cmFuc2FjdGlvbiBjb3JyZWN0bHknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBvcmlnaW5hbEJ1aWxkZXIgPSBjcmVhdGVUcmFuc2ZlckJ1aWxkZXJXaXRoR2FzKCk7XG4gICAgICBjb25zdCBvcmlnaW5hbFR4ID0gKGF3YWl0IG9yaWdpbmFsQnVpbGRlci5idWlsZCgpKSBhcyBUcmFuc2ZlclRyYW5zYWN0aW9uO1xuXG4gICAgICBjb25zdCBuZXdCdWlsZGVyID0gZmFjdG9yeS5nZXRUcmFuc2ZlckJ1aWxkZXIob3JpZ2luYWxUeCk7XG4gICAgICBjb25zdCBuZXdUeCA9IChhd2FpdCBuZXdCdWlsZGVyLmJ1aWxkKCkpIGFzIFRyYW5zZmVyVHJhbnNhY3Rpb247XG5cbiAgICAgIHNob3VsZC5lcXVhbChuZXdUeC5zZW5kZXIsIG9yaWdpbmFsVHguc2VuZGVyKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwobmV3VHgucmVjaXBpZW50cywgb3JpZ2luYWxUeC5yZWNpcGllbnRzKTtcbiAgICAgIHNob3VsZC5lcXVhbChuZXdUeC5nYXNCdWRnZXQsIG9yaWdpbmFsVHguZ2FzQnVkZ2V0KTtcbiAgICAgIHNob3VsZC5lcXVhbChuZXdUeC5nYXNQcmljZSwgb3JpZ2luYWxUeC5nYXNQcmljZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdSb3VuZCBUcmlwIENvbnZlcnNpb24nLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgSlNPTiByb3VuZCB0cmlwJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgb3JpZ2luYWxCdWlsZGVyID0gY3JlYXRlVHJhbnNmZXJCdWlsZGVyV2l0aEdhcygpO1xuICAgICAgY29uc3Qgb3JpZ2luYWxUeCA9IChhd2FpdCBvcmlnaW5hbEJ1aWxkZXIuYnVpbGQoKSkgYXMgVHJhbnNmZXJUcmFuc2FjdGlvbjtcbiAgICAgIGNvbnN0IGpzb24gPSBvcmlnaW5hbFR4LnRvSnNvbigpO1xuXG4gICAgICBjb25zdCBuZXdUeCA9IG5ldyBUcmFuc2ZlclRyYW5zYWN0aW9uKGNvaW5zLmdldCgndGlvdGEnKSk7XG4gICAgICBuZXdUeC5wYXJzZUZyb21KU09OKGpzb24pO1xuICAgICAgY29uc3QgbmV3QnVpbGRlciA9IGZhY3RvcnkuZ2V0VHJhbnNmZXJCdWlsZGVyKG5ld1R4KTtcbiAgICAgIGNvbnN0IHJlYnVpbHRUeCA9IChhd2FpdCBuZXdCdWlsZGVyLmJ1aWxkKCkpIGFzIFRyYW5zZmVyVHJhbnNhY3Rpb247XG5cbiAgICAgIHNob3VsZC5lcXVhbChyZWJ1aWx0VHguc2VuZGVyLCBvcmlnaW5hbFR4LnNlbmRlcik7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHJlYnVpbHRUeC5yZWNpcGllbnRzLCBvcmlnaW5hbFR4LnJlY2lwaWVudHMpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzZXJpYWxpemUgdG8gY29uc2lzdGVudCBmb3JtYXQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBidWlsZGVyMSA9IGNyZWF0ZVRyYW5zZmVyQnVpbGRlcldpdGhHYXMoKTtcbiAgICAgIGNvbnN0IHR4MSA9IChhd2FpdCBidWlsZGVyMS5idWlsZCgpKSBhcyBUcmFuc2ZlclRyYW5zYWN0aW9uO1xuICAgICAgY29uc3Qgc2VyaWFsaXplZDEgPSBhd2FpdCB0eDEudG9Ccm9hZGNhc3RGb3JtYXQoKTtcblxuICAgICAgY29uc3QgYnVpbGRlcjIgPSBjcmVhdGVUcmFuc2ZlckJ1aWxkZXJXaXRoR2FzKCk7XG4gICAgICBjb25zdCB0eDIgPSAoYXdhaXQgYnVpbGRlcjIuYnVpbGQoKSkgYXMgVHJhbnNmZXJUcmFuc2FjdGlvbjtcbiAgICAgIGNvbnN0IHNlcmlhbGl6ZWQyID0gYXdhaXQgdHgyLnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG5cbiAgICAgIHNob3VsZC5lcXVhbChzZXJpYWxpemVkMSwgc2VyaWFsaXplZDIpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transferBuilder.d.ts","sourceRoot":"","sources":["../../../../test/unit/transactionBuilder/transferBuilder.ts"],"names":[],"mappings":""}
|