@bitgo-beta/sdk-coin-vet 1.0.1-beta.66 → 1.0.1-beta.661
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/index.d.ts +1 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +2 -1
- package/dist/src/lib/constants.d.ts +28 -0
- package/dist/src/lib/constants.d.ts.map +1 -1
- package/dist/src/lib/constants.js +30 -2
- package/dist/src/lib/iface.d.ts +28 -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 +21 -0
- package/dist/src/lib/index.d.ts.map +1 -1
- package/dist/src/lib/index.js +44 -2
- package/dist/src/lib/transaction/addressInitializationTransaction.d.ts +31 -0
- package/dist/src/lib/transaction/addressInitializationTransaction.d.ts.map +1 -0
- package/dist/src/lib/transaction/addressInitializationTransaction.js +170 -0
- package/dist/src/lib/transaction/burnNftTransaction.d.ts +29 -0
- package/dist/src/lib/transaction/burnNftTransaction.d.ts.map +1 -0
- package/dist/src/lib/transaction/burnNftTransaction.js +138 -0
- package/dist/src/lib/transaction/claimRewards.d.ts +31 -0
- package/dist/src/lib/transaction/claimRewards.d.ts.map +1 -0
- package/dist/src/lib/transaction/claimRewards.js +151 -0
- package/dist/src/lib/transaction/delegateClauseTransaction.d.ts +27 -0
- package/dist/src/lib/transaction/delegateClauseTransaction.d.ts.map +1 -0
- package/dist/src/lib/transaction/delegateClauseTransaction.js +158 -0
- package/dist/src/lib/transaction/exitDelegation.d.ts +29 -0
- package/dist/src/lib/transaction/exitDelegation.d.ts.map +1 -0
- package/dist/src/lib/transaction/exitDelegation.js +143 -0
- package/dist/src/lib/transaction/flushTokenTransaction.d.ts +20 -0
- package/dist/src/lib/transaction/flushTokenTransaction.d.ts.map +1 -0
- package/dist/src/lib/transaction/flushTokenTransaction.js +98 -0
- package/dist/src/lib/transaction/nftTransaction.d.ts +17 -0
- package/dist/src/lib/transaction/nftTransaction.d.ts.map +1 -0
- package/dist/src/lib/transaction/nftTransaction.js +108 -0
- package/dist/src/lib/transaction/stakeClauseTransaction.d.ts +27 -0
- package/dist/src/lib/transaction/stakeClauseTransaction.d.ts.map +1 -0
- package/dist/src/lib/transaction/stakeClauseTransaction.js +158 -0
- package/dist/src/lib/transaction/stakingTransaction.d.ts +31 -0
- package/dist/src/lib/transaction/stakingTransaction.d.ts.map +1 -0
- package/dist/src/lib/transaction/stakingTransaction.js +169 -0
- package/dist/src/lib/transaction/tokenTransaction.d.ts +14 -0
- package/dist/src/lib/transaction/tokenTransaction.d.ts.map +1 -0
- package/dist/src/lib/transaction/tokenTransaction.js +95 -0
- package/dist/src/lib/transaction/transaction.d.ts +18 -28
- package/dist/src/lib/transaction/transaction.d.ts.map +1 -1
- package/dist/src/lib/transaction/transaction.js +99 -58
- package/dist/src/lib/transaction/validatorRegistrationTransaction.d.ts +32 -0
- package/dist/src/lib/transaction/validatorRegistrationTransaction.d.ts.map +1 -0
- package/dist/src/lib/transaction/validatorRegistrationTransaction.js +170 -0
- package/dist/src/lib/transactionBuilder/addressInitializationBuilder.d.ts +78 -0
- package/dist/src/lib/transactionBuilder/addressInitializationBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder/addressInitializationBuilder.js +158 -0
- package/dist/src/lib/transactionBuilder/burnNftBuilder.d.ts +59 -0
- package/dist/src/lib/transactionBuilder/burnNftBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder/burnNftBuilder.js +118 -0
- package/dist/src/lib/transactionBuilder/claimRewardsBuilder.d.ts +59 -0
- package/dist/src/lib/transactionBuilder/claimRewardsBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder/claimRewardsBuilder.js +117 -0
- package/dist/src/lib/transactionBuilder/delegateTxnBuilder.d.ts +72 -0
- package/dist/src/lib/transactionBuilder/delegateTxnBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder/delegateTxnBuilder.js +133 -0
- package/dist/src/lib/transactionBuilder/exitDelegationBuilder.d.ts +59 -0
- package/dist/src/lib/transactionBuilder/exitDelegationBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder/exitDelegationBuilder.js +118 -0
- package/dist/src/lib/transactionBuilder/flushTokenTransactionBuilder.d.ts +66 -0
- package/dist/src/lib/transactionBuilder/flushTokenTransactionBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder/flushTokenTransactionBuilder.js +129 -0
- package/dist/src/lib/transactionBuilder/nftTransactionBuilder.d.ts +23 -0
- package/dist/src/lib/transactionBuilder/nftTransactionBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder/nftTransactionBuilder.js +93 -0
- package/dist/src/lib/transactionBuilder/stakeClauseTxnBuilder.d.ts +73 -0
- package/dist/src/lib/transactionBuilder/stakeClauseTxnBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder/stakeClauseTxnBuilder.js +146 -0
- package/dist/src/lib/transactionBuilder/stakingBuilder.d.ts +73 -0
- package/dist/src/lib/transactionBuilder/stakingBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder/stakingBuilder.js +147 -0
- package/dist/src/lib/transactionBuilder/tokenTransactionBuilder.d.ts +21 -0
- package/dist/src/lib/transactionBuilder/tokenTransactionBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder/tokenTransactionBuilder.js +70 -0
- package/dist/src/lib/transactionBuilder/transactionBuilder.d.ts +10 -9
- package/dist/src/lib/transactionBuilder/transactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilder/transactionBuilder.js +25 -19
- package/dist/src/lib/transactionBuilder/validatorRegistrationBuilder.d.ts +79 -0
- package/dist/src/lib/transactionBuilder/validatorRegistrationBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder/validatorRegistrationBuilder.js +150 -0
- package/dist/src/lib/transactionBuilderFactory.d.ts +55 -0
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilderFactory.js +124 -1
- package/dist/src/lib/types.d.ts +21 -0
- package/dist/src/lib/types.d.ts.map +1 -1
- package/dist/src/lib/types.js +1 -1
- package/dist/src/lib/utils.d.ts +102 -1
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +277 -8
- package/dist/src/register.d.ts.map +1 -1
- package/dist/src/register.js +5 -1
- package/dist/src/vet.d.ts +94 -3
- package/dist/src/vet.d.ts.map +1 -1
- package/dist/src/vet.js +505 -10
- package/dist/src/vetNFTCollection.d.ts +18 -0
- package/dist/src/vetNFTCollection.d.ts.map +1 -0
- package/dist/src/vetNFTCollection.js +52 -0
- package/dist/src/vetToken.d.ts +1 -1
- package/dist/src/vetToken.d.ts.map +1 -1
- package/dist/src/vetToken.js +2 -2
- package/dist/test/resources/vet.d.ts +88 -0
- package/dist/test/resources/vet.d.ts.map +1 -0
- package/dist/test/resources/vet.js +143 -0
- package/dist/test/transactionBuilder/addressInitializationBuilder.d.ts +2 -0
- package/dist/test/transactionBuilder/addressInitializationBuilder.d.ts.map +1 -0
- package/dist/test/transactionBuilder/addressInitializationBuilder.js +141 -0
- package/dist/test/transactionBuilder/burnNftBuilder.d.ts +2 -0
- package/dist/test/transactionBuilder/burnNftBuilder.d.ts.map +1 -0
- package/dist/test/transactionBuilder/burnNftBuilder.js +150 -0
- package/dist/test/transactionBuilder/claimRewardsBuilder.d.ts +2 -0
- package/dist/test/transactionBuilder/claimRewardsBuilder.d.ts.map +1 -0
- package/dist/test/transactionBuilder/claimRewardsBuilder.js +183 -0
- package/dist/test/transactionBuilder/delegateClauseTxnBuilder.d.ts +2 -0
- package/dist/test/transactionBuilder/delegateClauseTxnBuilder.d.ts.map +1 -0
- package/dist/test/transactionBuilder/delegateClauseTxnBuilder.js +209 -0
- package/dist/test/transactionBuilder/exitDelegationBuilder.d.ts +2 -0
- package/dist/test/transactionBuilder/exitDelegationBuilder.d.ts.map +1 -0
- package/dist/test/transactionBuilder/exitDelegationBuilder.js +150 -0
- package/dist/test/transactionBuilder/flushTokenTransactionBuilder.d.ts +2 -0
- package/dist/test/transactionBuilder/flushTokenTransactionBuilder.d.ts.map +1 -0
- package/dist/test/transactionBuilder/flushTokenTransactionBuilder.js +132 -0
- package/dist/test/transactionBuilder/nftTransactionBuilder.d.ts +2 -0
- package/dist/test/transactionBuilder/nftTransactionBuilder.d.ts.map +1 -0
- package/dist/test/transactionBuilder/nftTransactionBuilder.js +242 -0
- package/dist/test/transactionBuilder/stakeClauseTransactionBuilder.d.ts +2 -0
- package/dist/test/transactionBuilder/stakeClauseTransactionBuilder.d.ts.map +1 -0
- package/dist/test/transactionBuilder/stakeClauseTransactionBuilder.js +247 -0
- package/dist/test/transactionBuilder/stakingTransaction.d.ts +2 -0
- package/dist/test/transactionBuilder/stakingTransaction.d.ts.map +1 -0
- package/dist/test/transactionBuilder/stakingTransaction.js +250 -0
- package/dist/test/transactionBuilder/tokenTransactionBuilder.d.ts +2 -0
- package/dist/test/transactionBuilder/tokenTransactionBuilder.d.ts.map +1 -0
- package/dist/test/transactionBuilder/tokenTransactionBuilder.js +249 -0
- package/dist/test/transactionBuilder/transferBuilder.d.ts +2 -0
- package/dist/test/transactionBuilder/transferBuilder.d.ts.map +1 -0
- package/dist/test/transactionBuilder/transferBuilder.js +244 -0
- package/dist/test/transactionBuilder/validatorRegistrationTxnBuilder.d.ts +2 -0
- package/dist/test/transactionBuilder/validatorRegistrationTxnBuilder.d.ts.map +1 -0
- package/dist/test/transactionBuilder/validatorRegistrationTxnBuilder.js +231 -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 +181 -0
- package/dist/test/unit/stakingFlowE2E.d.ts +2 -0
- package/dist/test/unit/stakingFlowE2E.d.ts.map +1 -0
- package/dist/test/unit/stakingFlowE2E.js +292 -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 +106 -0
- package/dist/test/unit/vet.d.ts +2 -0
- package/dist/test/unit/vet.d.ts.map +1 -0
- package/dist/test/unit/vet.js +336 -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 -40
|
@@ -0,0 +1,181 @@
|
|
|
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 nacl = __importStar(require("tweetnacl"));
|
|
40
|
+
const assert_1 = __importDefault(require("assert"));
|
|
41
|
+
const should_1 = __importDefault(require("should"));
|
|
42
|
+
const src_1 = require("../../src");
|
|
43
|
+
describe('VeChain KeyPair', function () {
|
|
44
|
+
// these are all encodings of the same key so the test suite will show that they we can interchange between them
|
|
45
|
+
const xprv = 'xprv9s21ZrQH143K3D8TXfvAJgHVfTEeQNW5Ys9wZtnUZkqPzFzSjbEJrWC1vZ4GnXCvR7rQL2UFX3RSuYeU9MrERm1XBvACow7c36vnz5iYyj2';
|
|
46
|
+
const xpub = 'xpub661MyMwAqRbcFhCvdhTAfpEEDV58oqDvv65YNHC686NNs4KbH8YZQJWVmrfbve7aAVHzxw8bKFxA7MLeDK6BbLfkE3bqkvHLPgaGHHtYGeY';
|
|
47
|
+
const prv = '82A34E3867EA7EA4E67E27865D500AE84E98D07AB1BAB06526F0A5A5FDCC3EBA';
|
|
48
|
+
const pub = '03D63D9FD9FD772A989C5B90EDB37716406356E98273E5F98FE07652247A3A8275';
|
|
49
|
+
const uncompressedPub = '04D63D9FD9FD772A989C5B90EDB37716406356E98273E5F98FE07652247A3A827503E948A2FDBF74A981D4E0054F10EDA7042C2D469F44473D3C7791E0E326E355';
|
|
50
|
+
const address = '0xeb317b9f2e0891d66c061ddc3f5ee7ed42d70a44';
|
|
51
|
+
const invalidPrivateKeyErrorMessage = 'Unsupported private key';
|
|
52
|
+
describe('should create a KeyPair', function () {
|
|
53
|
+
it('from an xpub', () => {
|
|
54
|
+
const keyPair = new src_1.KeyPair({ pub: xpub });
|
|
55
|
+
const defaultKeys = keyPair.getKeys();
|
|
56
|
+
should_1.default.not.exist(defaultKeys.prv);
|
|
57
|
+
defaultKeys.pub.should.equal('03D63D9FD9FD772A989C5B90EDB37716406356E98273E5F98FE07652247A3A8275');
|
|
58
|
+
const extendedKeys = keyPair.getExtendedKeys();
|
|
59
|
+
should_1.default.not.exist(extendedKeys.xprv);
|
|
60
|
+
extendedKeys.xpub.should.equal(xpub);
|
|
61
|
+
});
|
|
62
|
+
it('from an xprv', () => {
|
|
63
|
+
const keyPair = new src_1.KeyPair({ prv: xprv });
|
|
64
|
+
const defaultKeys = keyPair.getKeys();
|
|
65
|
+
(0, assert_1.default)(defaultKeys.prv);
|
|
66
|
+
defaultKeys.prv.should.equal(prv);
|
|
67
|
+
defaultKeys.pub.should.equal(pub);
|
|
68
|
+
const extendedKeys = keyPair.getExtendedKeys();
|
|
69
|
+
(0, assert_1.default)(extendedKeys.xprv);
|
|
70
|
+
extendedKeys.xprv.should.equal(xprv);
|
|
71
|
+
extendedKeys.xpub.should.equal(xpub);
|
|
72
|
+
});
|
|
73
|
+
it('from an uncompressed public key', () => {
|
|
74
|
+
const keyPair = new src_1.KeyPair({ pub: uncompressedPub });
|
|
75
|
+
const defaultKeys = keyPair.getKeys();
|
|
76
|
+
should_1.default.not.exist(defaultKeys.prv);
|
|
77
|
+
defaultKeys.pub.should.equal(uncompressedPub);
|
|
78
|
+
assert_1.default.throws(() => keyPair.getExtendedKeys());
|
|
79
|
+
});
|
|
80
|
+
it('from a compressed public key', () => {
|
|
81
|
+
const keyPair = new src_1.KeyPair({ pub });
|
|
82
|
+
const defaultKeys = keyPair.getKeys();
|
|
83
|
+
should_1.default.not.exist(defaultKeys.prv);
|
|
84
|
+
defaultKeys.pub.should.equal(uncompressedPub);
|
|
85
|
+
assert_1.default.throws(() => keyPair.getExtendedKeys());
|
|
86
|
+
});
|
|
87
|
+
it('from a raw private key', () => {
|
|
88
|
+
const keyPair = new src_1.KeyPair({ prv });
|
|
89
|
+
const defaultKeys = keyPair.getKeys();
|
|
90
|
+
(0, assert_1.default)(defaultKeys.prv);
|
|
91
|
+
defaultKeys.prv.should.equal(prv);
|
|
92
|
+
defaultKeys.pub.should.equal(uncompressedPub);
|
|
93
|
+
assert_1.default.throws(() => keyPair.getExtendedKeys());
|
|
94
|
+
});
|
|
95
|
+
it('from an empty value', () => {
|
|
96
|
+
const keyPair = new src_1.KeyPair();
|
|
97
|
+
should_1.default.exists(keyPair.getKeys().prv);
|
|
98
|
+
should_1.default.exists(keyPair.getKeys().pub);
|
|
99
|
+
const keys = keyPair.getKeys();
|
|
100
|
+
(0, assert_1.default)(keys.prv);
|
|
101
|
+
should_1.default.equal(keys.prv.length, 64);
|
|
102
|
+
should_1.default.equal(keys.pub.length, 66);
|
|
103
|
+
});
|
|
104
|
+
it('from seed', () => {
|
|
105
|
+
const seed = nacl.randomBytes(64);
|
|
106
|
+
const keyPair = new src_1.KeyPair({ seed: Buffer.from(seed) });
|
|
107
|
+
keyPair.getKeys().should.have.property('pub');
|
|
108
|
+
keyPair.getKeys().should.have.property('prv');
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
describe('should fail to create a KeyPair', function () {
|
|
112
|
+
it('from an invalid public key', () => {
|
|
113
|
+
const source = {
|
|
114
|
+
pub: '01D63D',
|
|
115
|
+
};
|
|
116
|
+
assert_1.default.throws(() => new src_1.KeyPair(source));
|
|
117
|
+
});
|
|
118
|
+
it('from an invalid private key', () => {
|
|
119
|
+
const source = {
|
|
120
|
+
prv: '82A34E',
|
|
121
|
+
};
|
|
122
|
+
assert_1.default.throws(() => new src_1.KeyPair(source));
|
|
123
|
+
assert_1.default.throws(() => new src_1.KeyPair({ prv: prv + pub }), (e) => e.message === invalidPrivateKeyErrorMessage);
|
|
124
|
+
});
|
|
125
|
+
});
|
|
126
|
+
describe('getAddress', function () {
|
|
127
|
+
it('should get an address from xprv', () => {
|
|
128
|
+
const keyPair = new src_1.KeyPair({ prv: xprv });
|
|
129
|
+
const calculatedAddress = keyPair.getAddress();
|
|
130
|
+
calculatedAddress.should.equal(address);
|
|
131
|
+
});
|
|
132
|
+
it('should get an address from xpub', () => {
|
|
133
|
+
const keyPair = new src_1.KeyPair({ pub: xpub });
|
|
134
|
+
const calculatedAddress = keyPair.getAddress();
|
|
135
|
+
calculatedAddress.should.equal(address);
|
|
136
|
+
});
|
|
137
|
+
it('should get an address from prv', () => {
|
|
138
|
+
const keyPair = new src_1.KeyPair({ prv });
|
|
139
|
+
const calculatedAddress = keyPair.getAddress();
|
|
140
|
+
calculatedAddress.should.equal(address);
|
|
141
|
+
});
|
|
142
|
+
it('should get an address from pub', () => {
|
|
143
|
+
const keyPair = new src_1.KeyPair({ pub });
|
|
144
|
+
const calculatedAddress = keyPair.getAddress();
|
|
145
|
+
calculatedAddress.should.equal(address);
|
|
146
|
+
});
|
|
147
|
+
it('should get an address from uncompressed pub', () => {
|
|
148
|
+
const keyPair = new src_1.KeyPair({ pub: uncompressedPub });
|
|
149
|
+
const calculatedAddress = keyPair.getAddress();
|
|
150
|
+
calculatedAddress.should.equal(address);
|
|
151
|
+
});
|
|
152
|
+
});
|
|
153
|
+
describe('getExtendedKeys', function () {
|
|
154
|
+
it('should get the keys in extended format from xprv', () => {
|
|
155
|
+
const keyPair = new src_1.KeyPair({ prv: xprv });
|
|
156
|
+
const { xprv: calculatedXprv, xpub: calculatedXpub } = keyPair.getExtendedKeys();
|
|
157
|
+
(0, assert_1.default)(calculatedXprv);
|
|
158
|
+
calculatedXprv.should.equal(xprv);
|
|
159
|
+
calculatedXpub.should.equal(xpub);
|
|
160
|
+
});
|
|
161
|
+
it('should get the keys in extended format from xpub', () => {
|
|
162
|
+
const keyPair = new src_1.KeyPair({ pub: xpub });
|
|
163
|
+
const { xprv: calculatedXprv, xpub: calculatedXpub } = keyPair.getExtendedKeys();
|
|
164
|
+
should_1.default.not.exist(calculatedXprv);
|
|
165
|
+
calculatedXpub.should.equal(xpub);
|
|
166
|
+
});
|
|
167
|
+
it('should not be able to get keys from prv', () => {
|
|
168
|
+
const keyPair = new src_1.KeyPair({ prv });
|
|
169
|
+
assert_1.default.throws(() => keyPair.getExtendedKeys());
|
|
170
|
+
});
|
|
171
|
+
it('should get the keys in extended format from pub', () => {
|
|
172
|
+
const keyPair = new src_1.KeyPair({ pub });
|
|
173
|
+
assert_1.default.throws(() => keyPair.getExtendedKeys());
|
|
174
|
+
});
|
|
175
|
+
it('should get the keys in extended format from uncompressed pub', () => {
|
|
176
|
+
const keyPair = new src_1.KeyPair({ pub: uncompressedPub });
|
|
177
|
+
assert_1.default.throws(() => keyPair.getExtendedKeys());
|
|
178
|
+
});
|
|
179
|
+
});
|
|
180
|
+
});
|
|
181
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5UGFpci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rlc3QvdW5pdC9rZXlQYWlyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsZ0RBQWtDO0FBQ2xDLG9EQUE0QjtBQUM1QixvREFBNEI7QUFFNUIsbUNBQW9DO0FBRXBDLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRTtJQUMxQixnSEFBZ0g7SUFDaEgsTUFBTSxJQUFJLEdBQ1IsaUhBQWlILENBQUM7SUFDcEgsTUFBTSxJQUFJLEdBQ1IsaUhBQWlILENBQUM7SUFDcEgsTUFBTSxHQUFHLEdBQUcsa0VBQWtFLENBQUM7SUFDL0UsTUFBTSxHQUFHLEdBQUcsb0VBQW9FLENBQUM7SUFDakYsTUFBTSxlQUFlLEdBQ25CLG9JQUFvSSxDQUFDO0lBQ3ZJLE1BQU0sT0FBTyxHQUFHLDRDQUE0QyxDQUFDO0lBQzdELE1BQU0sNkJBQTZCLEdBQUcseUJBQXlCLENBQUM7SUFFaEUsUUFBUSxDQUFDLHlCQUF5QixFQUFFO1FBQ2xDLEVBQUUsQ0FBQyxjQUFjLEVBQUUsR0FBRyxFQUFFO1lBQ3RCLE1BQU0sT0FBTyxHQUFHLElBQUksYUFBTyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDM0MsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3RDLGdCQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbEMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLG9FQUFvRSxDQUFDLENBQUM7WUFFbkcsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQy9DLGdCQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDcEMs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LEVBQUUsQ0FBQyxPQUFPLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQztRQUNqRCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyw4REFBOEQsRUFBRSxHQUFHLEVBQUU7WUFDdEUsTUFBTSxPQUFPLEdBQUcsSUFBSSxhQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsZUFBZSxFQUFFLENBQUMsQ0FBQztZQUN0RCxnQkFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQztRQUNqRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBuYWNsIGZyb20gJ3R3ZWV0bmFjbCc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5cbmltcG9ydCB7IEtleVBhaXIgfSBmcm9tICcuLi8uLi9zcmMnO1xuXG5kZXNjcmliZSgnVmVDaGFpbiBLZXlQYWlyJywgZnVuY3Rpb24gKCkge1xuICAvLyB0aGVzZSBhcmUgYWxsIGVuY29kaW5ncyBvZiB0aGUgc2FtZSBrZXkgc28gdGhlIHRlc3Qgc3VpdGUgd2lsbCBzaG93IHRoYXQgdGhleSB3ZSBjYW4gaW50ZXJjaGFuZ2UgYmV0d2VlbiB0aGVtXG4gIGNvbnN0IHhwcnYgPVxuICAgICd4cHJ2OXMyMVpyUUgxNDNLM0Q4VFhmdkFKZ0hWZlRFZVFOVzVZczl3WnRuVVprcVB6RnpTamJFSnJXQzF2WjRHblhDdlI3clFMMlVGWDNSU3VZZVU5TXJFUm0xWEJ2QUNvdzdjMzZ2bno1aVl5ajInO1xuICBjb25zdCB4cHViID1cbiAgICAneHB1YjY2MU15TXdBcVJiY0ZoQ3ZkaFRBZnBFRURWNThvcUR2djY1WU5IQzY4Nk5OczRLYkg4WVpRSldWbXJmYnZlN2FBVkh6eHc4YktGeEE3TUxlREs2QmJMZmtFM2Jxa3ZITFBnYUdISHRZR2VZJztcbiAgY29uc3QgcHJ2ID0gJzgyQTM0RTM4NjdFQTdFQTRFNjdFMjc4NjVENTAwQUU4NEU5OEQwN0FCMUJBQjA2NTI2RjBBNUE1RkRDQzNFQkEnO1xuICBjb25zdCBwdWIgPSAnMDNENjNEOUZEOUZENzcyQTk4OUM1QjkwRURCMzc3MTY0MDYzNTZFOTgyNzNFNUY5OEZFMDc2NTIyNDdBM0E4Mjc1JztcbiAgY29uc3QgdW5jb21wcmVzc2VkUHViID1cbiAgICAnMDRENjNEOUZEOUZENzcyQTk4OUM1QjkwRURCMzc3MTY0MDYzNTZFOTgyNzNFNUY5OEZFMDc2NTIyNDdBM0E4Mjc1MDNFOTQ4QTJGREJGNzRBOTgxRDRFMDA1NEYxMEVEQTcwNDJDMkQ0NjlGNDQ0NzNEM0M3NzkxRTBFMzI2RTM1NSc7XG4gIGNvbnN0IGFkZHJlc3MgPSAnMHhlYjMxN2I5ZjJlMDg5MWQ2NmMwNjFkZGMzZjVlZTdlZDQyZDcwYTQ0JztcbiAgY29uc3QgaW52YWxpZFByaXZhdGVLZXlFcnJvck1lc3NhZ2UgPSAnVW5zdXBwb3J0ZWQgcHJpdmF0ZSBrZXknO1xuXG4gIGRlc2NyaWJlKCdzaG91bGQgY3JlYXRlIGEgS2V5UGFpcicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnZnJvbSBhbiB4cHViJywgKCkgPT4ge1xuICAgICAgY29uc3Qga2V5UGFpciA9IG5ldyBLZXlQYWlyKHsgcHViOiB4cHViIH0pO1xuICAgICAgY29uc3QgZGVmYXVsdEtleXMgPSBrZXlQYWlyLmdldEtleXMoKTtcbiAgICAgIHNob3VsZC5ub3QuZXhpc3QoZGVmYXVsdEtleXMucHJ2KTtcbiAgICAgIGRlZmF1bHRLZXlzLnB1Yi5zaG91bGQuZXF1YWwoJzAzRDYzRDlGRDlGRDc3MkE5ODlDNUI5MEVEQjM3NzE2NDA2MzU2RTk4MjczRTVGOThGRTA3NjUyMjQ3QTNBODI3NScpO1xuXG4gICAgICBjb25zdCBleHRlbmRlZEtleXMgPSBrZXlQYWlyLmdldEV4dGVuZGVkS2V5cygpO1xuICAgICAgc2hvdWxkLm5vdC5leGlzdChleHRlbmRlZEtleXMueHBydik7XG4gICAgICBleHRlbmRlZEtleXMueHB1Yi5zaG91bGQuZXF1YWwoeHB1Yik7XG4gICAgfSk7XG5cbiAgICBpdCgnZnJvbSBhbiB4cHJ2JywgKCkgPT4ge1xuICAgICAgY29uc3Qga2V5UGFpciA9IG5ldyBLZXlQYWlyKHsgcHJ2OiB4cHJ2IH0pO1xuICAgICAgY29uc3QgZGVmYXVsdEtleXMgPSBrZXlQYWlyLmdldEtleXMoKTtcbiAgICAgIGFzc2VydChkZWZhdWx0S2V5cy5wcnYpO1xuICAgICAgZGVmYXVsdEtleXMucHJ2LnNob3VsZC5lcXVhbChwcnYpO1xuICAgICAgZGVmYXVsdEtleXMucHViLnNob3VsZC5lcXVhbChwdWIpO1xuXG4gICAgICBjb25zdCBleHRlbmRlZEtleXMgPSBrZXlQYWlyLmdldEV4dGVuZGVkS2V5cygpO1xuICAgICAgYXNzZXJ0KGV4dGVuZGVkS2V5cy54cHJ2KTtcbiAgICAgIGV4dGVuZGVkS2V5cy54cHJ2LnNob3VsZC5lcXVhbCh4cHJ2KTtcbiAgICAgIGV4dGVuZGVkS2V5cy54cHViLnNob3VsZC5lcXVhbCh4cHViKTtcbiAgICB9KTtcblxuICAgIGl0KCdmcm9tIGFuIHVuY29tcHJlc3NlZCBwdWJsaWMga2V5JywgKCkgPT4ge1xuICAgICAgY29uc3Qga2V5UGFpciA9IG5ldyBLZXlQYWlyKHsgcHViOiB1bmNvbXByZXNzZWRQdWIgfSk7XG4gICAgICBjb25zdCBkZWZhdWx0S2V5cyA9IGtleVBhaXIuZ2V0S2V5cygpO1xuICAgICAgc2hvdWxkLm5vdC5leGlzdChkZWZhdWx0S2V5cy5wcnYpO1xuICAgICAgZGVmYXVsdEtleXMucHViLnNob3VsZC5lcXVhbCh1bmNvbXByZXNzZWRQdWIpO1xuXG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGtleVBhaXIuZ2V0RXh0ZW5kZWRLZXlzKCkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2Zyb20gYSBjb21wcmVzc2VkIHB1YmxpYyBrZXknLCAoKSA9PiB7XG4gICAgICBjb25zdCBrZXlQYWlyID0gbmV3IEtleVBhaXIoeyBwdWIgfSk7XG4gICAgICBjb25zdCBkZWZhdWx0S2V5cyA9IGtleVBhaXIuZ2V0S2V5cygpO1xuICAgICAgc2hvdWxkLm5vdC5leGlzdChkZWZhdWx0S2V5cy5wcnYpO1xuICAgICAgZGVmYXVsdEtleXMucHViLnNob3VsZC5lcXVhbCh1bmNvbXByZXNzZWRQdWIpO1xuICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBrZXlQYWlyLmdldEV4dGVuZGVkS2V5cygpKTtcbiAgICB9KTtcblxuICAgIGl0KCdmcm9tIGEgcmF3IHByaXZhdGUga2V5JywgKCkgPT4ge1xuICAgICAgY29uc3Qga2V5UGFpciA9IG5ldyBLZXlQYWlyKHsgcHJ2IH0pO1xuICAgICAgY29uc3QgZGVmYXVsdEtleXMgPSBrZXlQYWlyLmdldEtleXMoKTtcbiAgICAgIGFzc2VydChkZWZhdWx0S2V5cy5wcnYpO1xuICAgICAgZGVmYXVsdEtleXMucHJ2LnNob3VsZC5lcXVhbChwcnYpO1xuICAgICAgZGVmYXVsdEtleXMucHViLnNob3VsZC5lcXVhbCh1bmNvbXByZXNzZWRQdWIpO1xuXG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGtleVBhaXIuZ2V0RXh0ZW5kZWRLZXlzKCkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2Zyb20gYW4gZW1wdHkgdmFsdWUnLCAoKSA9PiB7XG4gICAgICBjb25zdCBrZXlQYWlyID0gbmV3IEtleVBhaXIoKTtcbiAgICAgIHNob3VsZC5leGlzdHMoa2V5UGFpci5nZXRLZXlzKCkucHJ2KTtcbiAgICAgIHNob3VsZC5leGlzdHMoa2V5UGFpci5nZXRLZXlzKCkucHViKTtcbiAgICAgIGNvbnN0IGtleXMgPSBrZXlQYWlyLmdldEtleXMoKTtcbiAgICAgIGFzc2VydChrZXlzLnBydik7XG4gICAgICBzaG91bGQuZXF1YWwoa2V5cy5wcnYubGVuZ3RoLCA2NCk7XG4gICAgICBzaG91bGQuZXF1YWwoa2V5cy5wdWIubGVuZ3RoLCA2Nik7XG4gICAgfSk7XG5cbiAgICBpdCgnZnJvbSBzZWVkJywgKCkgPT4ge1xuICAgICAgY29uc3Qgc2VlZCA9IG5hY2wucmFuZG9tQnl0ZXMoNjQpO1xuICAgICAgY29uc3Qga2V5UGFpciA9IG5ldyBLZXlQYWlyKHsgc2VlZDogQnVmZmVyLmZyb20oc2VlZCkgfSk7XG4gICAgICBrZXlQYWlyLmdldEtleXMoKS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgncHViJyk7XG4gICAgICBrZXlQYWlyLmdldEtleXMoKS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgncHJ2Jyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdzaG91bGQgZmFpbCB0byBjcmVhdGUgYSBLZXlQYWlyJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdmcm9tIGFuIGludmFsaWQgcHVibGljIGtleScsICgpID0+IHtcbiAgICAgIGNvbnN0IHNvdXJjZSA9IHtcbiAgICAgICAgcHViOiAnMDFENjNEJyxcbiAgICAgIH07XG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBLZXlQYWlyKHNvdXJjZSkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2Zyb20gYW4gaW52YWxpZCBwcml2YXRlIGtleScsICgpID0+IHtcbiAgICAgIGNvbnN0IHNvdXJjZSA9IHtcbiAgICAgICAgcHJ2OiAnODJBMzRFJyxcbiAgICAgIH07XG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBLZXlQYWlyKHNvdXJjZSkpO1xuICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgKCkgPT4gbmV3IEtleVBhaXIoeyBwcnY6IHBydiArIHB1YiB9KSxcbiAgICAgICAgKGU6IGFueSkgPT4gZS5tZXNzYWdlID09PSBpbnZhbGlkUHJpdmF0ZUtleUVycm9yTWVzc2FnZVxuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2dldEFkZHJlc3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBnZXQgYW4gYWRkcmVzcyBmcm9tIHhwcnYnLCAoKSA9PiB7XG4gICAgICBjb25zdCBrZXlQYWlyID0gbmV3IEtleVBhaXIoeyBwcnY6IHhwcnYgfSk7XG4gICAgICBjb25zdCBjYWxjdWxhdGVkQWRkcmVzcyA9IGtleVBhaXIuZ2V0QWRkcmVzcygpO1xuICAgICAgY2FsY3VsYXRlZEFkZHJlc3Muc2hvdWxkLmVxdWFsKGFkZHJlc3MpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBnZXQgYW4gYWRkcmVzcyBmcm9tIHhwdWInLCAoKSA9PiB7XG4gICAgICBjb25zdCBrZXlQYWlyID0gbmV3IEtleVBhaXIoeyBwdWI6IHhwdWIgfSk7XG4gICAgICBjb25zdCBjYWxjdWxhdGVkQWRkcmVzcyA9IGtleVBhaXIuZ2V0QWRkcmVzcygpO1xuICAgICAgY2FsY3VsYXRlZEFkZHJlc3Muc2hvdWxkLmVxdWFsKGFkZHJlc3MpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBnZXQgYW4gYWRkcmVzcyBmcm9tIHBydicsICgpID0+IHtcbiAgICAgIGNvbnN0IGtleVBhaXIgPSBuZXcgS2V5UGFpcih7IHBydiB9KTtcbiAgICAgIGNvbnN0IGNhbGN1bGF0ZWRBZGRyZXNzID0ga2V5UGFpci5nZXRBZGRyZXNzKCk7XG4gICAgICBjYWxjdWxhdGVkQWRkcmVzcy5zaG91bGQuZXF1YWwoYWRkcmVzcyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGdldCBhbiBhZGRyZXNzIGZyb20gcHViJywgKCkgPT4ge1xuICAgICAgY29uc3Qga2V5UGFpciA9IG5ldyBLZXlQYWlyKHsgcHViIH0pO1xuICAgICAgY29uc3QgY2FsY3VsYXRlZEFkZHJlc3MgPSBrZXlQYWlyLmdldEFkZHJlc3MoKTtcbiAgICAgIGNhbGN1bGF0ZWRBZGRyZXNzLnNob3VsZC5lcXVhbChhZGRyZXNzKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZ2V0IGFuIGFkZHJlc3MgZnJvbSB1bmNvbXByZXNzZWQgcHViJywgKCkgPT4ge1xuICAgICAgY29uc3Qga2V5UGFpciA9IG5ldyBLZXlQYWlyKHsgcHViOiB1bmNvbXByZXNzZWRQdWIgfSk7XG4gICAgICBjb25zdCBjYWxjdWxhdGVkQWRkcmVzcyA9IGtleVBhaXIuZ2V0QWRkcmVzcygpO1xuICAgICAgY2FsY3VsYXRlZEFkZHJlc3Muc2hvdWxkLmVxdWFsKGFkZHJlc3MpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZ2V0RXh0ZW5kZWRLZXlzJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgZ2V0IHRoZSBrZXlzIGluIGV4dGVuZGVkIGZvcm1hdCBmcm9tIHhwcnYnLCAoKSA9PiB7XG4gICAgICBjb25zdCBrZXlQYWlyID0gbmV3IEtleVBhaXIoeyBwcnY6IHhwcnYgfSk7XG4gICAgICBjb25zdCB7IHhwcnY6IGNhbGN1bGF0ZWRYcHJ2LCB4cHViOiBjYWxjdWxhdGVkWHB1YiB9ID0ga2V5UGFpci5nZXRFeHRlbmRlZEtleXMoKTtcbiAgICAgIGFzc2VydChjYWxjdWxhdGVkWHBydik7XG4gICAgICBjYWxjdWxhdGVkWHBydi5zaG91bGQuZXF1YWwoeHBydik7XG4gICAgICBjYWxjdWxhdGVkWHB1Yi5zaG91bGQuZXF1YWwoeHB1Yik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGdldCB0aGUga2V5cyBpbiBleHRlbmRlZCBmb3JtYXQgZnJvbSB4cHViJywgKCkgPT4ge1xuICAgICAgY29uc3Qga2V5UGFpciA9IG5ldyBLZXlQYWlyKHsgcHViOiB4cHViIH0pO1xuICAgICAgY29uc3QgeyB4cHJ2OiBjYWxjdWxhdGVkWHBydiwgeHB1YjogY2FsY3VsYXRlZFhwdWIgfSA9IGtleVBhaXIuZ2V0RXh0ZW5kZWRLZXlzKCk7XG4gICAgICBzaG91bGQubm90LmV4aXN0KGNhbGN1bGF0ZWRYcHJ2KTtcbiAgICAgIGNhbGN1bGF0ZWRYcHViLnNob3VsZC5lcXVhbCh4cHViKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbm90IGJlIGFibGUgdG8gZ2V0IGtleXMgZnJvbSBwcnYnLCAoKSA9PiB7XG4gICAgICBjb25zdCBrZXlQYWlyID0gbmV3IEtleVBhaXIoeyBwcnYgfSk7XG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGtleVBhaXIuZ2V0RXh0ZW5kZWRLZXlzKCkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBnZXQgdGhlIGtleXMgaW4gZXh0ZW5kZWQgZm9ybWF0IGZyb20gcHViJywgKCkgPT4ge1xuICAgICAgY29uc3Qga2V5UGFpciA9IG5ldyBLZXlQYWlyKHsgcHViIH0pO1xuICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBrZXlQYWlyLmdldEV4dGVuZGVkS2V5cygpKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZ2V0IHRoZSBrZXlzIGluIGV4dGVuZGVkIGZvcm1hdCBmcm9tIHVuY29tcHJlc3NlZCBwdWInLCAoKSA9PiB7XG4gICAgICBjb25zdCBrZXlQYWlyID0gbmV3IEtleVBhaXIoeyBwdWI6IHVuY29tcHJlc3NlZFB1YiB9KTtcbiAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4ga2V5UGFpci5nZXRFeHRlbmRlZEtleXMoKSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stakingFlowE2E.d.ts","sourceRoot":"","sources":["../../../test/unit/stakingFlowE2E.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,292 @@
|
|
|
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 sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
42
|
+
const lib_1 = require("../../src/lib");
|
|
43
|
+
const testData = __importStar(require("../resources/vet"));
|
|
44
|
+
describe('VET Staking Flow - End-to-End Test', function () {
|
|
45
|
+
const coinConfig = statics_1.coins.get('tvet');
|
|
46
|
+
const factory = new lib_1.TransactionBuilderFactory(coinConfig);
|
|
47
|
+
// Test data
|
|
48
|
+
const stakingContractAddress = testData.STAKING_CONTRACT_ADDRESS;
|
|
49
|
+
const builtInStakerContractAddress = testData.BUILT_IN_STAKER_CONTRACT_ADDRESS;
|
|
50
|
+
const amountToStake = '1000000000000000000'; // 1 VET in wei
|
|
51
|
+
const amountToStakeForValidatorRegistration = '25000000000000000000000000'; // 25M VET in wei
|
|
52
|
+
const stakingPeriod = 60480;
|
|
53
|
+
const validatorAddress = '0x9a7afcacc88c106f3bbd6b213cd0821d9224d945';
|
|
54
|
+
const levelId = testData.STAKING_LEVEL_ID;
|
|
55
|
+
const senderAddress = '0x9378c12BD7502A11F770a5C1F223c959B2805dA9';
|
|
56
|
+
const feePayerAddress = '0xdc9fef0b84a0ccf3f1bd4b84e41743e3e051a083';
|
|
57
|
+
// Mock signatures for testing (these would come from actual signing in real scenario)
|
|
58
|
+
const mockSenderSignature = Buffer.from(testData.senderSig, 'hex');
|
|
59
|
+
const mockFeePayerSignature = Buffer.from(testData.feePayerSig, 'hex');
|
|
60
|
+
describe('Complete Staking Transaction Flow', function () {
|
|
61
|
+
it('should build, sign, and serialize a complete staking transaction with fee delegation', async function () {
|
|
62
|
+
// Step 1: Build the staking transaction
|
|
63
|
+
const stakingBuilder = factory.getStakingActivateBuilder();
|
|
64
|
+
stakingBuilder
|
|
65
|
+
.stakingContractAddress(stakingContractAddress)
|
|
66
|
+
.amountToStake(amountToStake)
|
|
67
|
+
.levelId(levelId)
|
|
68
|
+
.sender(senderAddress)
|
|
69
|
+
.chainTag(0x27) // Testnet chain tag
|
|
70
|
+
.blockRef('0x014ead140e77bbc1')
|
|
71
|
+
.expiration(64)
|
|
72
|
+
.gas(100000)
|
|
73
|
+
.gasPriceCoef(128)
|
|
74
|
+
.nonce('12345');
|
|
75
|
+
stakingBuilder.addFeePayerAddress(feePayerAddress);
|
|
76
|
+
const unsignedTx = await stakingBuilder.build();
|
|
77
|
+
should_1.default.exist(unsignedTx);
|
|
78
|
+
unsignedTx.should.be.instanceof(lib_1.StakeClauseTransaction);
|
|
79
|
+
const stakingTx = unsignedTx;
|
|
80
|
+
// Verify transaction structure
|
|
81
|
+
stakingTx.type.should.equal(sdk_core_1.TransactionType.StakingActivate);
|
|
82
|
+
stakingTx.stakingContractAddress.should.equal(stakingContractAddress);
|
|
83
|
+
stakingTx.amountToStake.should.equal(amountToStake);
|
|
84
|
+
stakingTx.levelId.should.equal(levelId);
|
|
85
|
+
should_1.default.exist(stakingTx.rawTransaction);
|
|
86
|
+
should_1.default.exist(stakingTx.rawTransaction.body);
|
|
87
|
+
// This is the critical test - ensure reserved.features = 1 for ContractCall type
|
|
88
|
+
should_1.default.exist(stakingTx.rawTransaction.body.reserved);
|
|
89
|
+
stakingTx.rawTransaction.body.reserved.should.have.property('features', 1);
|
|
90
|
+
// Step 3: Add sender signature
|
|
91
|
+
stakingTx.addSenderSignature(mockSenderSignature);
|
|
92
|
+
should_1.default.exist(stakingTx.senderSignature);
|
|
93
|
+
Buffer.from(stakingTx.senderSignature).should.eql(mockSenderSignature);
|
|
94
|
+
// Step 4: Add fee payer signature
|
|
95
|
+
stakingTx.addFeePayerSignature(mockFeePayerSignature);
|
|
96
|
+
should_1.default.exist(stakingTx.feePayerSignature);
|
|
97
|
+
Buffer.from(stakingTx.feePayerSignature).should.eql(mockFeePayerSignature);
|
|
98
|
+
// Step 5: Generate transaction ID
|
|
99
|
+
// This should NOT throw "not signed transaction: id unavailable" error anymore
|
|
100
|
+
const transactionId = stakingTx.id;
|
|
101
|
+
should_1.default.exist(transactionId);
|
|
102
|
+
transactionId.should.not.equal('UNAVAILABLE');
|
|
103
|
+
// Step 6: Serialize the fully signed transaction
|
|
104
|
+
const serializedTx = stakingTx.toBroadcastFormat();
|
|
105
|
+
should_1.default.exist(serializedTx);
|
|
106
|
+
serializedTx.should.be.type('string');
|
|
107
|
+
serializedTx.should.startWith('0x');
|
|
108
|
+
// Step 7: Verify transaction can be deserialized
|
|
109
|
+
const deserializedBuilder = factory.from(serializedTx);
|
|
110
|
+
const deserializedTx = deserializedBuilder.transaction;
|
|
111
|
+
deserializedTx.should.be.instanceof(lib_1.StakeClauseTransaction);
|
|
112
|
+
deserializedTx.stakingContractAddress.should.equal(stakingContractAddress);
|
|
113
|
+
deserializedTx.amountToStake.should.equal(amountToStake);
|
|
114
|
+
deserializedTx.levelId.should.equal(levelId);
|
|
115
|
+
// Step 8: Verify toJson output
|
|
116
|
+
const jsonOutput = stakingTx.toJson();
|
|
117
|
+
should_1.default.exist(jsonOutput);
|
|
118
|
+
jsonOutput.should.have.property('id', transactionId);
|
|
119
|
+
jsonOutput.should.have.property('stakingContractAddress', stakingContractAddress);
|
|
120
|
+
// JSON output keeps decimal format for amounts
|
|
121
|
+
jsonOutput.should.have.property('amountToStake', amountToStake);
|
|
122
|
+
jsonOutput.should.have.property('levelId', levelId);
|
|
123
|
+
});
|
|
124
|
+
it('should build, sign, and serialize a complete validator registration transaction with fee delegation', async function () {
|
|
125
|
+
// Step 1: Build the staking transaction
|
|
126
|
+
const validatorRegistrationBuilder = factory.getValidatorRegistrationBuilder();
|
|
127
|
+
validatorRegistrationBuilder
|
|
128
|
+
.stakingContractAddress(builtInStakerContractAddress)
|
|
129
|
+
.stakingPeriod(60480)
|
|
130
|
+
.validator(validatorAddress)
|
|
131
|
+
.amountToStake(amountToStakeForValidatorRegistration)
|
|
132
|
+
.sender(senderAddress)
|
|
133
|
+
.chainTag(0x27) // Testnet chain tag
|
|
134
|
+
.blockRef('0x014ead140e77bbc1')
|
|
135
|
+
.expiration(64)
|
|
136
|
+
.gas(100000)
|
|
137
|
+
.gasPriceCoef(128)
|
|
138
|
+
.nonce('12345');
|
|
139
|
+
validatorRegistrationBuilder.addFeePayerAddress(feePayerAddress);
|
|
140
|
+
const unsignedTx = await validatorRegistrationBuilder.build();
|
|
141
|
+
should_1.default.exist(unsignedTx);
|
|
142
|
+
unsignedTx.should.be.instanceof(lib_1.ValidatorRegistrationTransaction);
|
|
143
|
+
const validatorRegistrationTx = unsignedTx;
|
|
144
|
+
// Verify transaction structure
|
|
145
|
+
validatorRegistrationTx.type.should.equal(sdk_core_1.TransactionType.StakingLock);
|
|
146
|
+
validatorRegistrationTx.stakingContractAddress.should.equal(builtInStakerContractAddress);
|
|
147
|
+
validatorRegistrationTx.stakingPeriod.should.equal(stakingPeriod);
|
|
148
|
+
validatorRegistrationTx.validator.should.equal(validatorAddress);
|
|
149
|
+
validatorRegistrationTx.amountToStake.should.equal(amountToStakeForValidatorRegistration);
|
|
150
|
+
should_1.default.exist(validatorRegistrationTx.rawTransaction);
|
|
151
|
+
should_1.default.exist(validatorRegistrationTx.rawTransaction.body);
|
|
152
|
+
// This is the critical test - ensure reserved.features = 1
|
|
153
|
+
should_1.default.exist(validatorRegistrationTx.rawTransaction.body.reserved);
|
|
154
|
+
validatorRegistrationTx.rawTransaction.body.reserved.should.have.property('features', 1);
|
|
155
|
+
// Step 3: Add sender signature
|
|
156
|
+
validatorRegistrationTx.addSenderSignature(mockSenderSignature);
|
|
157
|
+
should_1.default.exist(validatorRegistrationTx.senderSignature);
|
|
158
|
+
Buffer.from(validatorRegistrationTx.senderSignature).should.eql(mockSenderSignature);
|
|
159
|
+
// Step 4: Add fee payer signature
|
|
160
|
+
validatorRegistrationTx.addFeePayerSignature(mockFeePayerSignature);
|
|
161
|
+
should_1.default.exist(validatorRegistrationTx.feePayerSignature);
|
|
162
|
+
Buffer.from(validatorRegistrationTx.feePayerSignature).should.eql(mockFeePayerSignature);
|
|
163
|
+
// Step 5: Generate transaction ID
|
|
164
|
+
// This should NOT throw "not signed transaction: id unavailable" error anymore
|
|
165
|
+
const transactionId = validatorRegistrationTx.id;
|
|
166
|
+
should_1.default.exist(transactionId);
|
|
167
|
+
transactionId.should.not.equal('UNAVAILABLE');
|
|
168
|
+
// Step 6: Serialize the fully signed transaction
|
|
169
|
+
const serializedTx = validatorRegistrationTx.toBroadcastFormat();
|
|
170
|
+
should_1.default.exist(serializedTx);
|
|
171
|
+
serializedTx.should.be.type('string');
|
|
172
|
+
serializedTx.should.startWith('0x');
|
|
173
|
+
// Step 7: Verify transaction can be deserialized
|
|
174
|
+
const deserializedBuilder = factory.from(serializedTx);
|
|
175
|
+
const deserializedTx = deserializedBuilder.transaction;
|
|
176
|
+
deserializedTx.should.be.instanceof(lib_1.ValidatorRegistrationTransaction);
|
|
177
|
+
deserializedTx.stakingContractAddress.should.equal(builtInStakerContractAddress);
|
|
178
|
+
deserializedTx.stakingPeriod.should.equal(stakingPeriod);
|
|
179
|
+
deserializedTx.validator.should.equal(validatorAddress);
|
|
180
|
+
deserializedTx.amountToStake.should.equal(amountToStakeForValidatorRegistration);
|
|
181
|
+
// Step 8: Verify toJson output
|
|
182
|
+
const jsonOutput = validatorRegistrationTx.toJson();
|
|
183
|
+
should_1.default.exist(jsonOutput);
|
|
184
|
+
jsonOutput.should.have.property('id', transactionId);
|
|
185
|
+
jsonOutput.should.have.property('stakingContractAddress', builtInStakerContractAddress);
|
|
186
|
+
jsonOutput.should.have.property('stakingPeriod', stakingPeriod);
|
|
187
|
+
jsonOutput.should.have.property('validatorAddress', validatorAddress);
|
|
188
|
+
jsonOutput.should.have.property('amountToStake', amountToStakeForValidatorRegistration);
|
|
189
|
+
});
|
|
190
|
+
it('should handle signature combination in the correct order', async function () {
|
|
191
|
+
// This test specifically validates the signature combination flow that was failing
|
|
192
|
+
const stakingBuilder = factory.getStakingActivateBuilder();
|
|
193
|
+
stakingBuilder
|
|
194
|
+
.stakingContractAddress(stakingContractAddress)
|
|
195
|
+
.amountToStake(amountToStake)
|
|
196
|
+
.levelId(levelId)
|
|
197
|
+
.sender(senderAddress)
|
|
198
|
+
.chainTag(0x27)
|
|
199
|
+
.blockRef('0x014ead140e77bbc1')
|
|
200
|
+
.expiration(64)
|
|
201
|
+
.gas(100000)
|
|
202
|
+
.gasPriceCoef(128)
|
|
203
|
+
.nonce('12345');
|
|
204
|
+
stakingBuilder.addFeePayerAddress(feePayerAddress);
|
|
205
|
+
const tx = (await stakingBuilder.build());
|
|
206
|
+
// Test 1: Only sender signature - should generate half-signed transaction
|
|
207
|
+
tx.addSenderSignature(mockSenderSignature);
|
|
208
|
+
// Test 2: Add fee payer signature - should generate fully signed transaction
|
|
209
|
+
tx.addFeePayerSignature(mockFeePayerSignature);
|
|
210
|
+
// Should be able to get transaction ID with both signatures
|
|
211
|
+
const fullSignedId = tx.id;
|
|
212
|
+
should_1.default.exist(fullSignedId);
|
|
213
|
+
fullSignedId.should.not.equal('UNAVAILABLE');
|
|
214
|
+
// The ID should be consistent
|
|
215
|
+
fullSignedId.should.be.type('string');
|
|
216
|
+
fullSignedId.length.should.be.greaterThan(10);
|
|
217
|
+
});
|
|
218
|
+
it('should properly set transaction type for fee delegation validation', async function () {
|
|
219
|
+
// This test ensures our fix for TransactionType.ContractCall is working
|
|
220
|
+
const stakingBuilder = factory.getStakingActivateBuilder();
|
|
221
|
+
stakingBuilder
|
|
222
|
+
.stakingContractAddress(stakingContractAddress)
|
|
223
|
+
.amountToStake(amountToStake)
|
|
224
|
+
.levelId(levelId)
|
|
225
|
+
.sender(senderAddress)
|
|
226
|
+
.chainTag(0x27)
|
|
227
|
+
.blockRef('0x014ead140e77bbc1')
|
|
228
|
+
.expiration(64)
|
|
229
|
+
.gas(100000)
|
|
230
|
+
.gasPriceCoef(128)
|
|
231
|
+
.nonce('12345');
|
|
232
|
+
stakingBuilder.addFeePayerAddress(feePayerAddress);
|
|
233
|
+
const tx = (await stakingBuilder.build());
|
|
234
|
+
// Verify the transaction type is ContractCall
|
|
235
|
+
tx.type.should.equal(sdk_core_1.TransactionType.StakingActivate);
|
|
236
|
+
// Verify fee delegation is enabled via reserved.features = 1
|
|
237
|
+
const rawTxBody = tx.rawTransaction.body;
|
|
238
|
+
should_1.default.exist(rawTxBody.reserved);
|
|
239
|
+
rawTxBody.reserved.should.have.property('features', 1);
|
|
240
|
+
// This proves that ContractCall transactions now get fee delegation support
|
|
241
|
+
});
|
|
242
|
+
it('should work with pre-built signed transaction from test data', async function () {
|
|
243
|
+
// Test using the actual signed transaction from our test data
|
|
244
|
+
const txBuilder = factory.from(testData.STAKING_TRANSACTION);
|
|
245
|
+
const tx = txBuilder.transaction;
|
|
246
|
+
// Should be able to get ID without throwing errors
|
|
247
|
+
const txId = tx.id;
|
|
248
|
+
should_1.default.exist(txId);
|
|
249
|
+
txId.should.not.equal('UNAVAILABLE');
|
|
250
|
+
// Verify all staking properties are preserved
|
|
251
|
+
// Note: The test data uses a different contract address in the transaction
|
|
252
|
+
// The actual contract address from the parsed transaction is 0x1856c533ac2d94340aaa8544d35a5c1d4a21dee7
|
|
253
|
+
tx.stakingContractAddress.should.equal('0x1856c533ac2d94340aaa8544d35a5c1d4a21dee7');
|
|
254
|
+
tx.levelId.should.equal(testData.STAKING_LEVEL_ID);
|
|
255
|
+
});
|
|
256
|
+
});
|
|
257
|
+
describe('Fee Delegation Flag Tests', function () {
|
|
258
|
+
it('should set fee delegation for all staking-related transaction types', async function () {
|
|
259
|
+
const testTypes = [
|
|
260
|
+
{ type: sdk_core_1.TransactionType.ContractCall, name: 'Staking' },
|
|
261
|
+
{ type: sdk_core_1.TransactionType.StakingUnlock, name: 'Exit Delegation' },
|
|
262
|
+
{ type: sdk_core_1.TransactionType.StakingWithdraw, name: 'Burn NFT' },
|
|
263
|
+
{ type: sdk_core_1.TransactionType.StakingClaim, name: 'Claim Rewards' },
|
|
264
|
+
];
|
|
265
|
+
for (const testCase of testTypes) {
|
|
266
|
+
const stakingBuilder = factory.getStakingActivateBuilder();
|
|
267
|
+
stakingBuilder
|
|
268
|
+
.stakingContractAddress(stakingContractAddress)
|
|
269
|
+
.amountToStake(amountToStake)
|
|
270
|
+
.levelId(levelId)
|
|
271
|
+
.sender(senderAddress)
|
|
272
|
+
.chainTag(0x27)
|
|
273
|
+
.blockRef('0x014ead140e77bbc1')
|
|
274
|
+
.expiration(64)
|
|
275
|
+
.gas(100000)
|
|
276
|
+
.gasPriceCoef(128)
|
|
277
|
+
.nonce('12345');
|
|
278
|
+
stakingBuilder.addFeePayerAddress(feePayerAddress);
|
|
279
|
+
// Manually set the transaction type to test different types
|
|
280
|
+
const tx = (await stakingBuilder.build());
|
|
281
|
+
tx._type = testCase.type;
|
|
282
|
+
// Rebuild the raw transaction to test fee delegation flag
|
|
283
|
+
await tx.buildRawTransaction();
|
|
284
|
+
// Verify fee delegation is set for all types
|
|
285
|
+
const rawTxBody = tx.rawTransaction.body;
|
|
286
|
+
should_1.default.exist(rawTxBody.reserved);
|
|
287
|
+
rawTxBody.reserved.should.have.property('features', 1);
|
|
288
|
+
}
|
|
289
|
+
});
|
|
290
|
+
});
|
|
291
|
+
});
|
|
292
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Rha2luZ0Zsb3dFMkUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvc3Rha2luZ0Zsb3dFMkUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsaURBQTRDO0FBQzVDLG1EQUF1RDtBQUN2RCx1Q0FBb0g7QUFDcEgsMkRBQTZDO0FBRTdDLFFBQVEsQ0FBQyxvQ0FBb0MsRUFBRTtJQUM3QyxNQUFNLFVBQVUsR0FBRyxlQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3JDLE1BQU0sT0FBTyxHQUFHLElBQUksK0JBQXlCLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFMUQsWUFBWTtJQUNaLE1BQU0sc0JBQXNCLEdBQUcsUUFBUSxDQUFDLHdCQUF3QixDQUFDO0lBQ2pFLE1BQU0sNEJBQTRCLEdBQUcsUUFBUSxDQUFDLGdDQUFnQyxDQUFDO0lBQy9FLE1BQU0sYUFBYSxHQUFHLHFCQUFxQixDQUFDLENBQUMsZUFBZTtJQUM1RCxNQUFNLHFDQUFxQyxHQUFHLDRCQUE0QixDQUFDLENBQUMsaUJBQWlCO0lBQzdGLE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQztJQUM1QixNQUFNLGdCQUFnQixHQUFHLDRDQUE0QyxDQUFDO0lBQ3RFLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQztJQUMxQyxNQUFNLGFBQWEsR0FBRyw0Q0FBNEMsQ0FBQztJQUNuRSxNQUFNLGVBQWUsR0FBRyw0Q0FBNEMsQ0FBQztJQUVyRSxzRkFBc0Y7SUFDdEYsTUFBTSxtQkFBbUIsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDbkUsTUFBTSxxQkFBcUIsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLENB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QywwREFBMEQ7Z0JBQzFELE1BQU8sRUFBVSxDQUFDLG1CQUFtQixFQUFFLENBQUM7Z0JBRXhDLDZDQUE2QztnQkFDN0MsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUM7Z0JBQ3pDLGdCQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDakMsU0FBUyxDQUFDLFFBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDMUQsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBzaG91bGQgZnJvbSAnc2hvdWxkJztcbmltcG9ydCB7IGNvaW5zIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5LCBTdGFrZUNsYXVzZVRyYW5zYWN0aW9uLCBWYWxpZGF0b3JSZWdpc3RyYXRpb25UcmFuc2FjdGlvbiB9IGZyb20gJy4uLy4uL3NyYy9saWInO1xuaW1wb3J0ICogYXMgdGVzdERhdGEgZnJvbSAnLi4vcmVzb3VyY2VzL3ZldCc7XG5cbmRlc2NyaWJlKCdWRVQgU3Rha2luZyBGbG93IC0gRW5kLXRvLUVuZCBUZXN0JywgZnVuY3Rpb24gKCkge1xuICBjb25zdCBjb2luQ29uZmlnID0gY29pbnMuZ2V0KCd0dmV0Jyk7XG4gIGNvbnN0IGZhY3RvcnkgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2luQ29uZmlnKTtcblxuICAvLyBUZXN0IGRhdGFcbiAgY29uc3Qgc3Rha2luZ0NvbnRyYWN0QWRkcmVzcyA9IHRlc3REYXRhLlNUQUtJTkdfQ09OVFJBQ1RfQUREUkVTUztcbiAgY29uc3QgYnVpbHRJblN0YWtlckNvbnRyYWN0QWRkcmVzcyA9IHRlc3REYXRhLkJVSUxUX0lOX1NUQUtFUl9DT05UUkFDVF9BRERSRVNTO1xuICBjb25zdCBhbW91bnRUb1N0YWtlID0gJzEwMDAwMDAwMDAwMDAwMDAwMDAnOyAvLyAxIFZFVCBpbiB3ZWlcbiAgY29uc3QgYW1vdW50VG9TdGFrZUZvclZhbGlkYXRvclJlZ2lzdHJhdGlvbiA9ICcyNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCc7IC8vIDI1TSBWRVQgaW4gd2VpXG4gIGNvbnN0IHN0YWtpbmdQZXJpb2QgPSA2MDQ4MDtcbiAgY29uc3QgdmFsaWRhdG9yQWRkcmVzcyA9ICcweDlhN2FmY2FjYzg4YzEwNmYzYmJkNmIyMTNjZDA4MjFkOTIyNGQ5NDUnO1xuICBjb25zdCBsZXZlbElkID0gdGVzdERhdGEuU1RBS0lOR19MRVZFTF9JRDtcbiAgY29uc3Qgc2VuZGVyQWRkcmVzcyA9ICcweDkzNzhjMTJCRDc1MDJBMTFGNzcwYTVDMUYyMjNjOTU5QjI4MDVkQTknO1xuICBjb25zdCBmZWVQYXllckFkZHJlc3MgPSAnMHhkYzlmZWYwYjg0YTBjY2YzZjFiZDRiODRlNDE3NDNlM2UwNTFhMDgzJztcblxuICAvLyBNb2NrIHNpZ25hdHVyZXMgZm9yIHRlc3RpbmcgKHRoZXNlIHdvdWxkIGNvbWUgZnJvbSBhY3R1YWwgc2lnbmluZyBpbiByZWFsIHNjZW5hcmlvKVxuICBjb25zdCBtb2NrU2VuZGVyU2lnbmF0dXJlID0gQnVmZmVyLmZyb20odGVzdERhdGEuc2VuZGVyU2lnLCAnaGV4Jyk7XG4gIGNvbnN0IG1vY2tGZWVQYXllclNpZ25hdHVyZSA9IEJ1ZmZlci5mcm9tKHRlc3REYXRhLmZlZVBheWVyU2lnLCAnaGV4Jyk7XG5cbiAgZGVzY3JpYmUoJ0NvbXBsZXRlIFN0YWtpbmcgVHJhbnNhY3Rpb24gRmxvdycsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIGJ1aWxkLCBzaWduLCBhbmQgc2VyaWFsaXplIGEgY29tcGxldGUgc3Rha2luZyB0cmFuc2FjdGlvbiB3aXRoIGZlZSBkZWxlZ2F0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gU3RlcCAxOiBCdWlsZCB0aGUgc3Rha2luZyB0cmFuc2FjdGlvblxuICAgICAgY29uc3Qgc3Rha2luZ0J1aWxkZXIgPSBmYWN0b3J5LmdldFN0YWtpbmdBY3RpdmF0ZUJ1aWxkZXIoKTtcblxuICAgICAgc3Rha2luZ0J1aWxkZXJcbiAgICAgICAgLnN0YWtpbmdDb250cmFjdEFkZHJlc3Moc3Rha2luZ0NvbnRyYWN0QWRkcmVzcylcbiAgICAgICAgLmFtb3VudFRvU3Rha2UoYW1vdW50VG9TdGFrZSlcbiAgICAgICAgLmxldmVsSWQobGV2ZWxJZClcbiAgICAgICAgLnNlbmRlcihzZW5kZXJBZGRyZXNzKVxuICAgICAgICAuY2hhaW5UYWcoMHgyNykgLy8gVGVzdG5ldCBjaGFpbiB0YWdcbiAgICAgICAgLmJsb2NrUmVmKCcweDAxNGVhZDE0MGU3N2JiYzEnKVxuICAgICAgICAuZXhwaXJhdGlvbig2NClcbiAgICAgICAgLmdhcygxMDAwMDApXG4gICAgICAgIC5nYXNQcmljZUNvZWYoMTI4KVxuICAgICAgICAubm9uY2UoJzEyMzQ1Jyk7XG5cbiAgICAgIHN0YWtpbmdCdWlsZGVyLmFkZEZlZVBheWVyQWRkcmVzcyhmZWVQYXllckFkZHJlc3MpO1xuXG4gICAgICBjb25zdCB1bnNpZ25lZFR4ID0gYXdhaXQgc3Rha2luZ0J1aWxkZXIuYnVpbGQoKTtcbiAgICAgIHNob3VsZC5leGlzdCh1bnNpZ25lZFR4KTtcbiAgICAgIHVuc2lnbmVkVHguc2hvdWxkLmJlLmluc3RhbmNlb2YoU3Rha2VDbGF1c2VUcmFuc2FjdGlvbik7XG5cbiAgICAgIGNvbnN0IHN0YWtpbmdUeCA9IHVuc2lnbmVkVHggYXMgU3Rha2VDbGF1c2VUcmFuc2FjdGlvbjtcblxuICAgICAgLy8gVmVyaWZ5IHRyYW5zYWN0aW9uIHN0cnVjdHVyZVxuICAgICAgc3Rha2luZ1R4LnR5cGUuc2hvdWxkLmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nQWN0aXZhdGUpO1xuICAgICAgc3Rha2luZ1R4LnN0YWtpbmdDb250cmFjdEFkZHJlc3Muc2hvdWxkLmVxdWFsKHN0YWtpbmdDb250cmFjdEFkZHJlc3MpO1xuICAgICAgc3Rha2luZ1R4LmFtb3VudFRvU3Rha2Uuc2hvdWxkLmVxdWFsKGFtb3VudFRvU3Rha2UpO1xuICAgICAgc3Rha2luZ1R4LmxldmVsSWQuc2hvdWxkLmVxdWFsKGxldmVsSWQpO1xuXG4gICAgICBzaG91bGQuZXhpc3Qoc3Rha2luZ1R4LnJhd1RyYW5zYWN0aW9uKTtcbiAgICAgIHNob3VsZC5leGlzdChzdGFraW5nVHgucmF3VHJhbnNhY3Rpb24uYm9keSk7XG5cbiAgICAgIC8vIFRoaXMgaXMgdGhlIGNyaXRpY2FsIHRlc3QgLSBlbnN1cmUgcmVzZXJ2ZWQuZmVhdHVyZXMgPSAxIGZvciBDb250cmFjdENhbGwgdHlwZVxuICAgICAgc2hvdWxkLmV4aXN0KHN0YWtpbmdUeC5yYXdUcmFuc2FjdGlvbi5ib2R5LnJlc2VydmVkKTtcbiAgICAgIHN0YWtpbmdUeC5yYXdUcmFuc2FjdGlvbi5ib2R5LnJlc2VydmVkIS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnZmVhdHVyZXMnLCAxKTtcblxuICAgICAgLy8gU3RlcCAzOiBBZGQgc2VuZGVyIHNpZ25hdHVyZVxuICAgICAgc3Rha2luZ1R4LmFkZFNlbmRlclNpZ25hdHVyZShtb2NrU2VuZGVyU2lnbmF0dXJlKTtcbiAgICAgIHNob3VsZC5leGlzdChzdGFraW5nVHguc2VuZGVyU2lnbmF0dXJlKTtcbiAgICAgIEJ1ZmZlci5mcm9tKHN0YWtpbmdUeC5zZW5kZXJTaWduYXR1cmUhKS5zaG91bGQuZXFsKG1vY2tTZW5kZXJTaWduYXR1cmUpO1xuXG4gICAgICAvLyBTdGVwIDQ6IEFkZCBmZWUgcGF5ZXIgc2lnbmF0dXJlXG4gICAgICBzdGFraW5nVHguYWRkRmVlUGF5ZXJTaWduYXR1cmUobW9ja0ZlZVBheWVyU2lnbmF0dXJlKTtcbiAgICAgIHNob3VsZC5leGlzdChzdGFraW5nVHguZmVlUGF5ZXJTaWduYXR1cmUpO1xuICAgICAgQnVmZmVyLmZyb20oc3Rha2luZ1R4LmZlZVBheWVyU2lnbmF0dXJlISkuc2hvdWxkLmVxbChtb2NrRmVlUGF5ZXJTaWduYXR1cmUpO1xuXG4gICAgICAvLyBTdGVwIDU6IEdlbmVyYXRlIHRyYW5zYWN0aW9uIElEXG5cbiAgICAgIC8vIFRoaXMgc2hvdWxkIE5PVCB0aHJvdyBcIm5vdCBzaWduZWQgdHJhbnNhY3Rpb246IGlkIHVuYXZhaWxhYmxlXCIgZXJyb3IgYW55bW9yZVxuICAgICAgY29uc3QgdHJhbnNhY3Rpb25JZCA9IHN0YWtpbmdUeC5pZDtcbiAgICAgIHNob3VsZC5leGlzdCh0cmFuc2FjdGlvbklkKTtcbiAgICAgIHRyYW5zYWN0aW9uSWQuc2hvdWxkLm5vdC5lcXVhbCgnVU5BVkFJTEFCTEUnKTtcblxuICAgICAgLy8gU3RlcCA2OiBTZXJpYWxpemUgdGhlIGZ1bGx5IHNpZ25lZCB0cmFuc2FjdGlvblxuICAgICAgY29uc3Qgc2VyaWFsaXplZFR4ID0gc3Rha2luZ1R4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgICBzaG91bGQuZXhpc3Qoc2VyaWFsaXplZFR4KTtcbiAgICAgIHNlcmlhbGl6ZWRUeC5zaG91bGQuYmUudHlwZSgnc3RyaW5nJyk7XG4gICAgICBzZXJpYWxpemVkVHguc2hvdWxkLnN0YXJ0V2l0aCgnMHgnKTtcblxuICAgICAgLy8gU3RlcCA3OiBWZXJpZnkgdHJhbnNhY3Rpb24gY2FuIGJlIGRlc2VyaWFsaXplZFxuICAgICAgY29uc3QgZGVzZXJpYWxpemVkQnVpbGRlciA9IGZhY3RvcnkuZnJvbShzZXJpYWxpemVkVHgpO1xuICAgICAgY29uc3QgZGVzZXJpYWxpemVkVHggPSBkZXNlcmlhbGl6ZWRCdWlsZGVyLnRyYW5zYWN0aW9uIGFzIFN0YWtlQ2xhdXNlVHJhbnNhY3Rpb247XG5cbiAgICAgIGRlc2VyaWFsaXplZFR4LnNob3VsZC5iZS5pbnN0YW5jZW9mKFN0YWtlQ2xhdXNlVHJhbnNhY3Rpb24pO1xuICAgICAgZGVzZXJpYWxpemVkVHguc3Rha2luZ0NvbnRyYWN0QWRkcmVzcy5zaG91bGQuZXF1YWwoc3Rha2luZ0NvbnRyYWN0QWRkcmVzcyk7XG4gICAgICBkZXNlcmlhbGl6ZWRUeC5hbW91bnRUb1N0YWtlLnNob3VsZC5lcXVhbChhbW91bnRUb1N0YWtlKTtcbiAgICAgIGRlc2VyaWFsaXplZFR4LmxldmVsSWQuc2hvdWxkLmVxdWFsKGxldmVsSWQpO1xuXG4gICAgICAvLyBTdGVwIDg6IFZlcmlmeSB0b0pzb24gb3V0cHV0XG4gICAgICBjb25zdCBqc29uT3V0cHV0ID0gc3Rha2luZ1R4LnRvSnNvbigpO1xuICAgICAgc2hvdWxkLmV4aXN0KGpzb25PdXRwdXQpO1xuICAgICAganNvbk91dHB1dC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnaWQnLCB0cmFuc2FjdGlvbklkKTtcbiAgICAgIGpzb25PdXRwdXQuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3N0YWtpbmdDb250cmFjdEFkZHJlc3MnLCBzdGFraW5nQ29udHJhY3RBZGRyZXNzKTtcbiAgICAgIC8vIEpTT04gb3V0cHV0IGtlZXBzIGRlY2ltYWwgZm9ybWF0IGZvciBhbW91bnRzXG4gICAgICBqc29uT3V0cHV0LnNob3VsZC5oYXZlLnByb3BlcnR5KCdhbW91bnRUb1N0YWtlJywgYW1vdW50VG9TdGFrZSk7XG4gICAgICBqc29uT3V0cHV0LnNob3VsZC5oYXZlLnByb3BlcnR5KCdsZXZlbElkJywgbGV2ZWxJZCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGJ1aWxkLCBzaWduLCBhbmQgc2VyaWFsaXplIGEgY29tcGxldGUgdmFsaWRhdG9yIHJlZ2lzdHJhdGlvbiB0cmFuc2FjdGlvbiB3aXRoIGZlZSBkZWxlZ2F0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gU3RlcCAxOiBCdWlsZCB0aGUgc3Rha2luZyB0cmFuc2FjdGlvblxuICAgICAgY29uc3QgdmFsaWRhdG9yUmVnaXN0cmF0aW9uQnVpbGRlciA9IGZhY3RvcnkuZ2V0VmFsaWRhdG9yUmVnaXN0cmF0aW9uQnVpbGRlcigpO1xuXG4gICAgICB2YWxpZGF0b3JSZWdpc3RyYXRpb25CdWlsZGVyXG4gICAgICAgIC5zdGFraW5nQ29udHJhY3RBZGRyZXNzKGJ1aWx0SW5TdGFrZXJDb250cmFjdEFkZHJlc3MpXG4gICAgICAgIC5zdGFraW5nUGVyaW9kKDYwNDgwKVxuICAgICAgICAudmFsaWRhdG9yKHZhbGlkYXRvckFkZHJlc3MpXG4gICAgICAgIC5hbW91bnRUb1N0YWtlKGFtb3VudFRvU3Rha2VGb3JWYWxpZGF0b3JSZWdpc3RyYXRpb24pXG4gICAgICAgIC5zZW5kZXIoc2VuZGVyQWRkcmVzcylcbiAgICAgICAgLmNoYWluVGFnKDB4MjcpIC8vIFRlc3RuZXQgY2hhaW4gdGFnXG4gICAgICAgIC5ibG9ja1JlZignMHgwMTRlYWQxNDBlNzdiYmMxJylcbiAgICAgICAgLmV4cGlyYXRpb24oNjQpXG4gICAgICAgIC5nYXMoMTAwMDAwKVxuICAgICAgICAuZ2FzUHJpY2VDb2VmKDEyOClcbiAgICAgICAgLm5vbmNlKCcxMjM0NScpO1xuXG4gICAgICB2YWxpZGF0b3JSZWdpc3RyYXRpb25CdWlsZGVyLmFkZEZlZVBheWVyQWRkcmVzcyhmZWVQYXllckFkZHJlc3MpO1xuXG4gICAgICBjb25zdCB1bnNpZ25lZFR4ID0gYXdhaXQgdmFsaWRhdG9yUmVnaXN0cmF0aW9uQnVpbGRlci5idWlsZCgpO1xuICAgICAgc2hvdWxkLmV4aXN0KHVuc2lnbmVkVHgpO1xuICAgICAgdW5zaWduZWRUeC5zaG91bGQuYmUuaW5zdGFuY2VvZihWYWxpZGF0b3JSZWdpc3RyYXRpb25UcmFuc2FjdGlvbik7XG5cbiAgICAgIGNvbnN0IHZhbGlkYXRvclJlZ2lzdHJhdGlvblR4ID0gdW5zaWduZWRUeCBhcyBWYWxpZGF0b3JSZWdpc3RyYXRpb25UcmFuc2FjdGlvbjtcblxuICAgICAgLy8gVmVyaWZ5IHRyYW5zYWN0aW9uIHN0cnVjdHVyZVxuICAgICAgdmFsaWRhdG9yUmVnaXN0cmF0aW9uVHgudHlwZS5zaG91bGQuZXF1YWwoVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdMb2NrKTtcbiAgICAgIHZhbGlkYXRvclJlZ2lzdHJhdGlvblR4LnN0YWtpbmdDb250cmFjdEFkZHJlc3Muc2hvdWxkLmVxdWFsKGJ1aWx0SW5TdGFrZXJDb250cmFjdEFkZHJlc3MpO1xuICAgICAgdmFsaWRhdG9yUmVnaXN0cmF0aW9uVHguc3Rha2luZ1BlcmlvZC5zaG91bGQuZXF1YWwoc3Rha2luZ1BlcmlvZCk7XG4gICAgICB2YWxpZGF0b3JSZWdpc3RyYXRpb25UeC52YWxpZGF0b3Iuc2hvdWxkLmVxdWFsKHZhbGlkYXRvckFkZHJlc3MpO1xuICAgICAgdmFsaWRhdG9yUmVnaXN0cmF0aW9uVHguYW1vdW50VG9TdGFrZS5zaG91bGQuZXF1YWwoYW1vdW50VG9TdGFrZUZvclZhbGlkYXRvclJlZ2lzdHJhdGlvbik7XG5cbiAgICAgIHNob3VsZC5leGlzdCh2YWxpZGF0b3JSZWdpc3RyYXRpb25UeC5yYXdUcmFuc2FjdGlvbik7XG4gICAgICBzaG91bGQuZXhpc3QodmFsaWRhdG9yUmVnaXN0cmF0aW9uVHgucmF3VHJhbnNhY3Rpb24uYm9keSk7XG5cbiAgICAgIC8vIFRoaXMgaXMgdGhlIGNyaXRpY2FsIHRlc3QgLSBlbnN1cmUgcmVzZXJ2ZWQuZmVhdHVyZXMgPSAxXG4gICAgICBzaG91bGQuZXhpc3QodmFsaWRhdG9yUmVnaXN0cmF0aW9uVHgucmF3VHJhbnNhY3Rpb24uYm9keS5yZXNlcnZlZCk7XG4gICAgICB2YWxpZGF0b3JSZWdpc3RyYXRpb25UeC5yYXdUcmFuc2FjdGlvbi5ib2R5LnJlc2VydmVkIS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnZmVhdHVyZXMnLCAxKTtcblxuICAgICAgLy8gU3RlcCAzOiBBZGQgc2VuZGVyIHNpZ25hdHVyZVxuICAgICAgdmFsaWRhdG9yUmVnaXN0cmF0aW9uVHguYWRkU2VuZGVyU2lnbmF0dXJlKG1vY2tTZW5kZXJTaWduYXR1cmUpO1xuICAgICAgc2hvdWxkLmV4aXN0KHZhbGlkYXRvclJlZ2lzdHJhdGlvblR4LnNlbmRlclNpZ25hdHVyZSk7XG4gICAgICBCdWZmZXIuZnJvbSh2YWxpZGF0b3JSZWdpc3RyYXRpb25UeC5zZW5kZXJTaWduYXR1cmUhKS5zaG91bGQuZXFsKG1vY2tTZW5kZXJTaWduYXR1cmUpO1xuXG4gICAgICAvLyBTdGVwIDQ6IEFkZCBmZWUgcGF5ZXIgc2lnbmF0dXJlXG4gICAgICB2YWxpZGF0b3JSZWdpc3RyYXRpb25UeC5hZGRGZWVQYXllclNpZ25hdHVyZShtb2NrRmVlUGF5ZXJTaWduYXR1cmUpO1xuICAgICAgc2hvdWxkLmV4aXN0KHZhbGlkYXRvclJlZ2lzdHJhdGlvblR4LmZlZVBheWVyU2lnbmF0dXJlKTtcbiAgICAgIEJ1ZmZlci5mcm9tKHZhbGlkYXRvclJlZ2lzdHJhdGlvblR4LmZlZVBheWVyU2lnbmF0dXJlISkuc2hvdWxkLmVxbChtb2NrRmVlUGF5ZXJTaWduYXR1cmUpO1xuXG4gICAgICAvLyBTdGVwIDU6IEdlbmVyYXRlIHRyYW5zYWN0aW9uIElEXG5cbiAgICAgIC8vIFRoaXMgc2hvdWxkIE5PVCB0aHJvdyBcIm5vdCBzaWduZWQgdHJhbnNhY3Rpb246IGlkIHVuYXZhaWxhYmxlXCIgZXJyb3IgYW55bW9yZVxuICAgICAgY29uc3QgdHJhbnNhY3Rpb25JZCA9IHZhbGlkYXRvclJlZ2lzdHJhdGlvblR4LmlkO1xuICAgICAgc2hvdWxkLmV4aXN0KHRyYW5zYWN0aW9uSWQpO1xuICAgICAgdHJhbnNhY3Rpb25JZC5zaG91bGQubm90LmVxdWFsKCdVTkFWQUlMQUJMRScpO1xuXG4gICAgICAvLyBTdGVwIDY6IFNlcmlhbGl6ZSB0aGUgZnVsbHkgc2lnbmVkIHRyYW5zYWN0aW9uXG4gICAgICBjb25zdCBzZXJpYWxpemVkVHggPSB2YWxpZGF0b3JSZWdpc3RyYXRpb25UeC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgICAgc2hvdWxkLmV4aXN0KHNlcmlhbGl6ZWRUeCk7XG4gICAgICBzZXJpYWxpemVkVHguc2hvdWxkLmJlLnR5cGUoJ3N0cmluZycpO1xuICAgICAgc2VyaWFsaXplZFR4LnNob3VsZC5zdGFydFdpdGgoJzB4Jyk7XG5cbiAgICAgIC8vIFN0ZXAgNzogVmVyaWZ5IHRyYW5zYWN0aW9uIGNhbiBiZSBkZXNlcmlhbGl6ZWRcbiAgICAgIGNvbnN0IGRlc2VyaWFsaXplZEJ1aWxkZXIgPSBmYWN0b3J5LmZyb20oc2VyaWFsaXplZFR4KTtcbiAgICAgIGNvbnN0IGRlc2VyaWFsaXplZFR4ID0gZGVzZXJpYWxpemVkQnVpbGRlci50cmFuc2FjdGlvbiBhcyBWYWxpZGF0b3JSZWdpc3RyYXRpb25UcmFuc2FjdGlvbjtcblxuICAgICAgZGVzZXJpYWxpemVkVHguc2hvdWxkLmJlLmluc3RhbmNlb2YoVmFsaWRhdG9yUmVnaXN0cmF0aW9uVHJhbnNhY3Rpb24pO1xuICAgICAgZGVzZXJpYWxpemVkVHguc3Rha2luZ0NvbnRyYWN0QWRkcmVzcy5zaG91bGQuZXF1YWwoYnVpbHRJblN0YWtlckNvbnRyYWN0QWRkcmVzcyk7XG4gICAgICBkZXNlcmlhbGl6ZWRUeC5zdGFraW5nUGVyaW9kLnNob3VsZC5lcXVhbChzdGFraW5nUGVyaW9kKTtcbiAgICAgIGRlc2VyaWFsaXplZFR4LnZhbGlkYXRvci5zaG91bGQuZXF1YWwodmFsaWRhdG9yQWRkcmVzcyk7XG4gICAgICBkZXNlcmlhbGl6ZWRUeC5hbW91bnRUb1N0YWtlLnNob3VsZC5lcXVhbChhbW91bnRUb1N0YWtlRm9yVmFsaWRhdG9yUmVnaXN0cmF0aW9uKTtcblxuICAgICAgLy8gU3RlcCA4OiBWZXJpZnkgdG9Kc29uIG91dHB1dFxuICAgICAgY29uc3QganNvbk91dHB1dCA9IHZhbGlkYXRvclJlZ2lzdHJhdGlvblR4LnRvSnNvbigpO1xuICAgICAgc2hvdWxkLmV4aXN0KGpzb25PdXRwdXQpO1xuICAgICAganNvbk91dHB1dC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnaWQnLCB0cmFuc2FjdGlvbklkKTtcbiAgICAgIGpzb25PdXRwdXQuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3N0YWtpbmdDb250cmFjdEFkZHJlc3MnLCBidWlsdEluU3Rha2VyQ29udHJhY3RBZGRyZXNzKTtcbiAgICAgIGpzb25PdXRwdXQuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3N0YWtpbmdQZXJpb2QnLCBzdGFraW5nUGVyaW9kKTtcbiAgICAgIGpzb25PdXRwdXQuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3ZhbGlkYXRvckFkZHJlc3MnLCB2YWxpZGF0b3JBZGRyZXNzKTtcbiAgICAgIGpzb25PdXRwdXQuc2hvdWxkLmhhdmUucHJvcGVydHkoJ2Ftb3VudFRvU3Rha2UnLCBhbW91bnRUb1N0YWtlRm9yVmFsaWRhdG9yUmVnaXN0cmF0aW9uKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGFuZGxlIHNpZ25hdHVyZSBjb21iaW5hdGlvbiBpbiB0aGUgY29ycmVjdCBvcmRlcicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFRoaXMgdGVzdCBzcGVjaWZpY2FsbHkgdmFsaWRhdGVzIHRoZSBzaWduYXR1cmUgY29tYmluYXRpb24gZmxvdyB0aGF0IHdhcyBmYWlsaW5nXG4gICAgICBjb25zdCBzdGFraW5nQnVpbGRlciA9IGZhY3RvcnkuZ2V0U3Rha2luZ0FjdGl2YXRlQnVpbGRlcigpO1xuXG4gICAgICBzdGFraW5nQnVpbGRlclxuICAgICAgICAuc3Rha2luZ0NvbnRyYWN0QWRkcmVzcyhzdGFraW5nQ29udHJhY3RBZGRyZXNzKVxuICAgICAgICAuYW1vdW50VG9TdGFrZShhbW91bnRUb1N0YWtlKVxuICAgICAgICAubGV2ZWxJZChsZXZlbElkKVxuICAgICAgICAuc2VuZGVyKHNlbmRlckFkZHJlc3MpXG4gICAgICAgIC5jaGFpblRhZygweDI3KVxuICAgICAgICAuYmxvY2tSZWYoJzB4MDE0ZWFkMTQwZTc3YmJjMScpXG4gICAgICAgIC5leHBpcmF0aW9uKDY0KVxuICAgICAgICAuZ2FzKDEwMDAwMClcbiAgICAgICAgLmdhc1ByaWNlQ29lZigxMjgpXG4gICAgICAgIC5ub25jZSgnMTIzNDUnKTtcblxuICAgICAgc3Rha2luZ0J1aWxkZXIuYWRkRmVlUGF5ZXJBZGRyZXNzKGZlZVBheWVyQWRkcmVzcyk7XG5cbiAgICAgIGNvbnN0IHR4ID0gKGF3YWl0IHN0YWtpbmdCdWlsZGVyLmJ1aWxkKCkpIGFzIFN0YWtlQ2xhdXNlVHJhbnNhY3Rpb247XG5cbiAgICAgIC8vIFRlc3QgMTogT25seSBzZW5kZXIgc2lnbmF0dXJlIC0gc2hvdWxkIGdlbmVyYXRlIGhhbGYtc2lnbmVkIHRyYW5zYWN0aW9uXG4gICAgICB0eC5hZGRTZW5kZXJTaWduYXR1cmUobW9ja1NlbmRlclNpZ25hdHVyZSk7XG5cbiAgICAgIC8vIFRlc3QgMjogQWRkIGZlZSBwYXllciBzaWduYXR1cmUgLSBzaG91bGQgZ2VuZXJhdGUgZnVsbHkgc2lnbmVkIHRyYW5zYWN0aW9uXG4gICAgICB0eC5hZGRGZWVQYXllclNpZ25hdHVyZShtb2NrRmVlUGF5ZXJTaWduYXR1cmUpO1xuXG4gICAgICAvLyBTaG91bGQgYmUgYWJsZSB0byBnZXQgdHJhbnNhY3Rpb24gSUQgd2l0aCBib3RoIHNpZ25hdHVyZXNcbiAgICAgIGNvbnN0IGZ1bGxTaWduZWRJZCA9IHR4LmlkO1xuICAgICAgc2hvdWxkLmV4aXN0KGZ1bGxTaWduZWRJZCk7XG4gICAgICBmdWxsU2lnbmVkSWQuc2hvdWxkLm5vdC5lcXVhbCgnVU5BVkFJTEFCTEUnKTtcblxuICAgICAgLy8gVGhlIElEIHNob3VsZCBiZSBjb25zaXN0ZW50XG4gICAgICBmdWxsU2lnbmVkSWQuc2hvdWxkLmJlLnR5cGUoJ3N0cmluZycpO1xuICAgICAgZnVsbFNpZ25lZElkLmxlbmd0aC5zaG91bGQuYmUuZ3JlYXRlclRoYW4oMTApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBwcm9wZXJseSBzZXQgdHJhbnNhY3Rpb24gdHlwZSBmb3IgZmVlIGRlbGVnYXRpb24gdmFsaWRhdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFRoaXMgdGVzdCBlbnN1cmVzIG91ciBmaXggZm9yIFRyYW5zYWN0aW9uVHlwZS5Db250cmFjdENhbGwgaXMgd29ya2luZ1xuICAgICAgY29uc3Qgc3Rha2luZ0J1aWxkZXIgPSBmYWN0b3J5LmdldFN0YWtpbmdBY3RpdmF0ZUJ1aWxkZXIoKTtcblxuICAgICAgc3Rha2luZ0J1aWxkZXJcbiAgICAgICAgLnN0YWtpbmdDb250cmFjdEFkZHJlc3Moc3Rha2luZ0NvbnRyYWN0QWRkcmVzcylcbiAgICAgICAgLmFtb3VudFRvU3Rha2UoYW1vdW50VG9TdGFrZSlcbiAgICAgICAgLmxldmVsSWQobGV2ZWxJZClcbiAgICAgICAgLnNlbmRlcihzZW5kZXJBZGRyZXNzKVxuICAgICAgICAuY2hhaW5UYWcoMHgyNylcbiAgICAgICAgLmJsb2NrUmVmKCcweDAxNGVhZDE0MGU3N2JiYzEnKVxuICAgICAgICAuZXhwaXJhdGlvbig2NClcbiAgICAgICAgLmdhcygxMDAwMDApXG4gICAgICAgIC5nYXNQcmljZUNvZWYoMTI4KVxuICAgICAgICAubm9uY2UoJzEyMzQ1Jyk7XG5cbiAgICAgIHN0YWtpbmdCdWlsZGVyLmFkZEZlZVBheWVyQWRkcmVzcyhmZWVQYXllckFkZHJlc3MpO1xuXG4gICAgICBjb25zdCB0eCA9IChhd2FpdCBzdGFraW5nQnVpbGRlci5idWlsZCgpKSBhcyBTdGFrZUNsYXVzZVRyYW5zYWN0aW9uO1xuXG4gICAgICAvLyBWZXJpZnkgdGhlIHRyYW5zYWN0aW9uIHR5cGUgaXMgQ29udHJhY3RDYWxsXG4gICAgICB0eC50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0FjdGl2YXRlKTtcblxuICAgICAgLy8gVmVyaWZ5IGZlZSBkZWxlZ2F0aW9uIGlzIGVuYWJsZWQgdmlhIHJlc2VydmVkLmZlYXR1cmVzID0gMVxuICAgICAgY29uc3QgcmF3VHhCb2R5ID0gdHgucmF3VHJhbnNhY3Rpb24uYm9keTtcbiAgICAgIHNob3VsZC5leGlzdChyYXdUeEJvZHkucmVzZXJ2ZWQpO1xuICAgICAgcmF3VHhCb2R5LnJlc2VydmVkIS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnZmVhdHVyZXMnLCAxKTtcblxuICAgICAgLy8gVGhpcyBwcm92ZXMgdGhhdCBDb250cmFjdENhbGwgdHJhbnNhY3Rpb25zIG5vdyBnZXQgZmVlIGRlbGVnYXRpb24gc3VwcG9ydFxuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB3b3JrIHdpdGggcHJlLWJ1aWx0IHNpZ25lZCB0cmFuc2FjdGlvbiBmcm9tIHRlc3QgZGF0YScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFRlc3QgdXNpbmcgdGhlIGFjdHVhbCBzaWduZWQgdHJhbnNhY3Rpb24gZnJvbSBvdXIgdGVzdCBkYXRhXG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmZyb20odGVzdERhdGEuU1RBS0lOR19UUkFOU0FDVElPTik7XG4gICAgICBjb25zdCB0eCA9IHR4QnVpbGRlci50cmFuc2FjdGlvbiBhcyBTdGFrZUNsYXVzZVRyYW5zYWN0aW9uO1xuXG4gICAgICAvLyBTaG91bGQgYmUgYWJsZSB0byBnZXQgSUQgd2l0aG91dCB0aHJvd2luZyBlcnJvcnNcbiAgICAgIGNvbnN0IHR4SWQgPSB0eC5pZDtcbiAgICAgIHNob3VsZC5leGlzdCh0eElkKTtcbiAgICAgIHR4SWQuc2hvdWxkLm5vdC5lcXVhbCgnVU5BVkFJTEFCTEUnKTtcblxuICAgICAgLy8gVmVyaWZ5IGFsbCBzdGFraW5nIHByb3BlcnRpZXMgYXJlIHByZXNlcnZlZFxuICAgICAgLy8gTm90ZTogVGhlIHRlc3QgZGF0YSB1c2VzIGEgZGlmZmVyZW50IGNvbnRyYWN0IGFkZHJlc3MgaW4gdGhlIHRyYW5zYWN0aW9uXG4gICAgICAvLyBUaGUgYWN0dWFsIGNvbnRyYWN0IGFkZHJlc3MgZnJvbSB0aGUgcGFyc2VkIHRyYW5zYWN0aW9uIGlzIDB4MTg1NmM1MzNhYzJkOTQzNDBhYWE4NTQ0ZDM1YTVjMWQ0YTIxZGVlN1xuICAgICAgdHguc3Rha2luZ0NvbnRyYWN0QWRkcmVzcy5zaG91bGQuZXF1YWwoJzB4MTg1NmM1MzNhYzJkOTQzNDBhYWE4NTQ0ZDM1YTVjMWQ0YTIxZGVlNycpO1xuICAgICAgdHgubGV2ZWxJZC5zaG91bGQuZXF1YWwodGVzdERhdGEuU1RBS0lOR19MRVZFTF9JRCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdGZWUgRGVsZWdhdGlvbiBGbGFnIFRlc3RzJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgc2V0IGZlZSBkZWxlZ2F0aW9uIGZvciBhbGwgc3Rha2luZy1yZWxhdGVkIHRyYW5zYWN0aW9uIHR5cGVzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdGVzdFR5cGVzID0gW1xuICAgICAgICB7IHR5cGU6IFRyYW5zYWN0aW9uVHlwZS5Db250cmFjdENhbGwsIG5hbWU6ICdTdGFraW5nJyB9LFxuICAgICAgICB7IHR5cGU6IFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nVW5sb2NrLCBuYW1lOiAnRXhpdCBEZWxlZ2F0aW9uJyB9LFxuICAgICAgICB7IHR5cGU6IFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nV2l0aGRyYXcsIG5hbWU6ICdCdXJuIE5GVCcgfSxcbiAgICAgICAgeyB0eXBlOiBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0NsYWltLCBuYW1lOiAnQ2xhaW0gUmV3YXJkcycgfSxcbiAgICAgIF07XG5cbiAgICAgIGZvciAoY29uc3QgdGVzdENhc2Ugb2YgdGVzdFR5cGVzKSB7XG4gICAgICAgIGNvbnN0IHN0YWtpbmdCdWlsZGVyID0gZmFjdG9yeS5nZXRTdGFraW5nQWN0aXZhdGVCdWlsZGVyKCk7XG4gICAgICAgIHN0YWtpbmdCdWlsZGVyXG4gICAgICAgICAgLnN0YWtpbmdDb250cmFjdEFkZHJlc3Moc3Rha2luZ0NvbnRyYWN0QWRkcmVzcylcbiAgICAgICAgICAuYW1vdW50VG9TdGFrZShhbW91bnRUb1N0YWtlKVxuICAgICAgICAgIC5sZXZlbElkKGxldmVsSWQpXG4gICAgICAgICAgLnNlbmRlcihzZW5kZXJBZGRyZXNzKVxuICAgICAgICAgIC5jaGFpblRhZygweDI3KVxuICAgICAgICAgIC5ibG9ja1JlZignMHgwMTRlYWQxNDBlNzdiYmMxJylcbiAgICAgICAgICAuZXhwaXJhdGlvbig2NClcbiAgICAgICAgICAuZ2FzKDEwMDAwMClcbiAgICAgICAgICAuZ2FzUHJpY2VDb2VmKDEyOClcbiAgICAgICAgICAubm9uY2UoJzEyMzQ1Jyk7XG5cbiAgICAgICAgc3Rha2luZ0J1aWxkZXIuYWRkRmVlUGF5ZXJBZGRyZXNzKGZlZVBheWVyQWRkcmVzcyk7XG5cbiAgICAgICAgLy8gTWFudWFsbHkgc2V0IHRoZSB0cmFuc2FjdGlvbiB0eXBlIHRvIHRlc3QgZGlmZmVyZW50IHR5cGVzXG4gICAgICAgIGNvbnN0IHR4ID0gKGF3YWl0IHN0YWtpbmdCdWlsZGVyLmJ1aWxkKCkpIGFzIFN0YWtlQ2xhdXNlVHJhbnNhY3Rpb247XG4gICAgICAgICh0eCBhcyBhbnkpLl90eXBlID0gdGVzdENhc2UudHlwZTtcblxuICAgICAgICAvLyBSZWJ1aWxkIHRoZSByYXcgdHJhbnNhY3Rpb24gdG8gdGVzdCBmZWUgZGVsZWdhdGlvbiBmbGFnXG4gICAgICAgIGF3YWl0ICh0eCBhcyBhbnkpLmJ1aWxkUmF3VHJhbnNhY3Rpb24oKTtcblxuICAgICAgICAvLyBWZXJpZnkgZmVlIGRlbGVnYXRpb24gaXMgc2V0IGZvciBhbGwgdHlwZXNcbiAgICAgICAgY29uc3QgcmF3VHhCb2R5ID0gdHgucmF3VHJhbnNhY3Rpb24uYm9keTtcbiAgICAgICAgc2hvdWxkLmV4aXN0KHJhd1R4Qm9keS5yZXNlcnZlZCk7XG4gICAgICAgIHJhd1R4Qm9keS5yZXNlcnZlZCEuc2hvdWxkLmhhdmUucHJvcGVydHkoJ2ZlYXR1cmVzJywgMSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../test/unit/utils.ts"],"names":[],"mappings":""}
|