@bitgo-beta/sdk-coin-vet 1.0.1-beta.49 → 1.0.1-beta.490

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.
Files changed (151) hide show
  1. package/dist/src/index.d.ts +2 -0
  2. package/dist/src/index.d.ts.map +1 -1
  3. package/dist/src/index.js +3 -1
  4. package/dist/src/lib/constants.d.ts +25 -0
  5. package/dist/src/lib/constants.d.ts.map +1 -1
  6. package/dist/src/lib/constants.js +27 -2
  7. package/dist/src/lib/iface.d.ts +26 -2
  8. package/dist/src/lib/iface.d.ts.map +1 -1
  9. package/dist/src/lib/iface.js +1 -1
  10. package/dist/src/lib/index.d.ts +19 -0
  11. package/dist/src/lib/index.d.ts.map +1 -1
  12. package/dist/src/lib/index.js +40 -2
  13. package/dist/src/lib/transaction/addressInitializationTransaction.d.ts +31 -0
  14. package/dist/src/lib/transaction/addressInitializationTransaction.d.ts.map +1 -0
  15. package/dist/src/lib/transaction/addressInitializationTransaction.js +170 -0
  16. package/dist/src/lib/transaction/burnNftTransaction.d.ts +26 -0
  17. package/dist/src/lib/transaction/burnNftTransaction.d.ts.map +1 -0
  18. package/dist/src/lib/transaction/burnNftTransaction.js +131 -0
  19. package/dist/src/lib/transaction/claimRewards.d.ts +41 -0
  20. package/dist/src/lib/transaction/claimRewards.d.ts.map +1 -0
  21. package/dist/src/lib/transaction/claimRewards.js +210 -0
  22. package/dist/src/lib/transaction/delegateClauseTransaction.d.ts +27 -0
  23. package/dist/src/lib/transaction/delegateClauseTransaction.d.ts.map +1 -0
  24. package/dist/src/lib/transaction/delegateClauseTransaction.js +156 -0
  25. package/dist/src/lib/transaction/exitDelegation.d.ts +26 -0
  26. package/dist/src/lib/transaction/exitDelegation.d.ts.map +1 -0
  27. package/dist/src/lib/transaction/exitDelegation.js +136 -0
  28. package/dist/src/lib/transaction/flushTokenTransaction.d.ts +20 -0
  29. package/dist/src/lib/transaction/flushTokenTransaction.d.ts.map +1 -0
  30. package/dist/src/lib/transaction/flushTokenTransaction.js +98 -0
  31. package/dist/src/lib/transaction/nftTransaction.d.ts +17 -0
  32. package/dist/src/lib/transaction/nftTransaction.d.ts.map +1 -0
  33. package/dist/src/lib/transaction/nftTransaction.js +108 -0
  34. package/dist/src/lib/transaction/stakeClauseTransaction.d.ts +27 -0
  35. package/dist/src/lib/transaction/stakeClauseTransaction.d.ts.map +1 -0
  36. package/dist/src/lib/transaction/stakeClauseTransaction.js +158 -0
  37. package/dist/src/lib/transaction/stakingTransaction.d.ts +31 -0
  38. package/dist/src/lib/transaction/stakingTransaction.d.ts.map +1 -0
  39. package/dist/src/lib/transaction/stakingTransaction.js +169 -0
  40. package/dist/src/lib/transaction/tokenTransaction.d.ts +14 -0
  41. package/dist/src/lib/transaction/tokenTransaction.d.ts.map +1 -0
  42. package/dist/src/lib/transaction/tokenTransaction.js +95 -0
  43. package/dist/src/lib/transaction/transaction.d.ts +18 -28
  44. package/dist/src/lib/transaction/transaction.d.ts.map +1 -1
  45. package/dist/src/lib/transaction/transaction.js +97 -57
  46. package/dist/src/lib/transactionBuilder/addressInitializationBuilder.d.ts +78 -0
  47. package/dist/src/lib/transactionBuilder/addressInitializationBuilder.d.ts.map +1 -0
  48. package/dist/src/lib/transactionBuilder/addressInitializationBuilder.js +158 -0
  49. package/dist/src/lib/transactionBuilder/burnNftBuilder.d.ts +59 -0
  50. package/dist/src/lib/transactionBuilder/burnNftBuilder.d.ts.map +1 -0
  51. package/dist/src/lib/transactionBuilder/burnNftBuilder.js +118 -0
  52. package/dist/src/lib/transactionBuilder/claimRewardsBuilder.d.ts +57 -0
  53. package/dist/src/lib/transactionBuilder/claimRewardsBuilder.d.ts.map +1 -0
  54. package/dist/src/lib/transactionBuilder/claimRewardsBuilder.js +142 -0
  55. package/dist/src/lib/transactionBuilder/delegateTxnBuilder.d.ts +66 -0
  56. package/dist/src/lib/transactionBuilder/delegateTxnBuilder.d.ts.map +1 -0
  57. package/dist/src/lib/transactionBuilder/delegateTxnBuilder.js +120 -0
  58. package/dist/src/lib/transactionBuilder/exitDelegationBuilder.d.ts +58 -0
  59. package/dist/src/lib/transactionBuilder/exitDelegationBuilder.d.ts.map +1 -0
  60. package/dist/src/lib/transactionBuilder/exitDelegationBuilder.js +115 -0
  61. package/dist/src/lib/transactionBuilder/flushTokenTransactionBuilder.d.ts +66 -0
  62. package/dist/src/lib/transactionBuilder/flushTokenTransactionBuilder.d.ts.map +1 -0
  63. package/dist/src/lib/transactionBuilder/flushTokenTransactionBuilder.js +129 -0
  64. package/dist/src/lib/transactionBuilder/nftTransactionBuilder.d.ts +23 -0
  65. package/dist/src/lib/transactionBuilder/nftTransactionBuilder.d.ts.map +1 -0
  66. package/dist/src/lib/transactionBuilder/nftTransactionBuilder.js +93 -0
  67. package/dist/src/lib/transactionBuilder/stakeClauseTxnBuilder.d.ts +73 -0
  68. package/dist/src/lib/transactionBuilder/stakeClauseTxnBuilder.d.ts.map +1 -0
  69. package/dist/src/lib/transactionBuilder/stakeClauseTxnBuilder.js +146 -0
  70. package/dist/src/lib/transactionBuilder/stakingBuilder.d.ts +73 -0
  71. package/dist/src/lib/transactionBuilder/stakingBuilder.d.ts.map +1 -0
  72. package/dist/src/lib/transactionBuilder/stakingBuilder.js +147 -0
  73. package/dist/src/lib/transactionBuilder/tokenTransactionBuilder.d.ts +21 -0
  74. package/dist/src/lib/transactionBuilder/tokenTransactionBuilder.d.ts.map +1 -0
  75. package/dist/src/lib/transactionBuilder/tokenTransactionBuilder.js +70 -0
  76. package/dist/src/lib/transactionBuilder/transactionBuilder.d.ts +10 -9
  77. package/dist/src/lib/transactionBuilder/transactionBuilder.d.ts.map +1 -1
  78. package/dist/src/lib/transactionBuilder/transactionBuilder.js +25 -19
  79. package/dist/src/lib/transactionBuilderFactory.d.ts +52 -0
  80. package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
  81. package/dist/src/lib/transactionBuilderFactory.js +115 -1
  82. package/dist/src/lib/types.d.ts +24 -0
  83. package/dist/src/lib/types.d.ts.map +1 -1
  84. package/dist/src/lib/types.js +1 -1
  85. package/dist/src/lib/utils.d.ts +98 -1
  86. package/dist/src/lib/utils.d.ts.map +1 -1
  87. package/dist/src/lib/utils.js +262 -8
  88. package/dist/src/register.d.ts.map +1 -1
  89. package/dist/src/register.js +9 -1
  90. package/dist/src/vet.d.ts +80 -2
  91. package/dist/src/vet.d.ts.map +1 -1
  92. package/dist/src/vet.js +478 -8
  93. package/dist/src/vetNFTCollection.d.ts +18 -0
  94. package/dist/src/vetNFTCollection.d.ts.map +1 -0
  95. package/dist/src/vetNFTCollection.js +52 -0
  96. package/dist/src/vetToken.d.ts +19 -0
  97. package/dist/src/vetToken.d.ts.map +1 -0
  98. package/dist/src/vetToken.js +52 -0
  99. package/dist/test/resources/vet.d.ts +70 -0
  100. package/dist/test/resources/vet.d.ts.map +1 -0
  101. package/dist/test/resources/vet.js +125 -0
  102. package/dist/test/transactionBuilder/addressInitializationBuilder.d.ts +2 -0
  103. package/dist/test/transactionBuilder/addressInitializationBuilder.d.ts.map +1 -0
  104. package/dist/test/transactionBuilder/addressInitializationBuilder.js +141 -0
  105. package/dist/test/transactionBuilder/burnNftBuilder.d.ts +2 -0
  106. package/dist/test/transactionBuilder/burnNftBuilder.d.ts.map +1 -0
  107. package/dist/test/transactionBuilder/burnNftBuilder.js +154 -0
  108. package/dist/test/transactionBuilder/claimRewardsBuilder.d.ts +2 -0
  109. package/dist/test/transactionBuilder/claimRewardsBuilder.d.ts.map +1 -0
  110. package/dist/test/transactionBuilder/claimRewardsBuilder.js +246 -0
  111. package/dist/test/transactionBuilder/delegateClauseTxnBuilder.d.ts +2 -0
  112. package/dist/test/transactionBuilder/delegateClauseTxnBuilder.d.ts.map +1 -0
  113. package/dist/test/transactionBuilder/delegateClauseTxnBuilder.js +173 -0
  114. package/dist/test/transactionBuilder/exitDelegationBuilder.d.ts +2 -0
  115. package/dist/test/transactionBuilder/exitDelegationBuilder.d.ts.map +1 -0
  116. package/dist/test/transactionBuilder/exitDelegationBuilder.js +154 -0
  117. package/dist/test/transactionBuilder/flushTokenTransactionBuilder.d.ts +2 -0
  118. package/dist/test/transactionBuilder/flushTokenTransactionBuilder.d.ts.map +1 -0
  119. package/dist/test/transactionBuilder/flushTokenTransactionBuilder.js +132 -0
  120. package/dist/test/transactionBuilder/nftTransactionBuilder.d.ts +2 -0
  121. package/dist/test/transactionBuilder/nftTransactionBuilder.d.ts.map +1 -0
  122. package/dist/test/transactionBuilder/nftTransactionBuilder.js +242 -0
  123. package/dist/test/transactionBuilder/stakeClauseTransactionBuilder.d.ts +2 -0
  124. package/dist/test/transactionBuilder/stakeClauseTransactionBuilder.d.ts.map +1 -0
  125. package/dist/test/transactionBuilder/stakeClauseTransactionBuilder.js +248 -0
  126. package/dist/test/transactionBuilder/stakingTransaction.d.ts +2 -0
  127. package/dist/test/transactionBuilder/stakingTransaction.d.ts.map +1 -0
  128. package/dist/test/transactionBuilder/stakingTransaction.js +250 -0
  129. package/dist/test/transactionBuilder/tokenTransactionBuilder.d.ts +2 -0
  130. package/dist/test/transactionBuilder/tokenTransactionBuilder.d.ts.map +1 -0
  131. package/dist/test/transactionBuilder/tokenTransactionBuilder.js +249 -0
  132. package/dist/test/transactionBuilder/transferBuilder.d.ts +2 -0
  133. package/dist/test/transactionBuilder/transferBuilder.d.ts.map +1 -0
  134. package/dist/test/transactionBuilder/transferBuilder.js +214 -0
  135. package/dist/test/unit/keyPair.d.ts +2 -0
  136. package/dist/test/unit/keyPair.d.ts.map +1 -0
  137. package/dist/test/unit/keyPair.js +181 -0
  138. package/dist/test/unit/stakingFlowE2E.d.ts +2 -0
  139. package/dist/test/unit/stakingFlowE2E.d.ts.map +1 -0
  140. package/dist/test/unit/stakingFlowE2E.js +229 -0
  141. package/dist/test/unit/utils.d.ts +2 -0
  142. package/dist/test/unit/utils.d.ts.map +1 -0
  143. package/dist/test/unit/utils.js +106 -0
  144. package/dist/test/unit/vet.d.ts +2 -0
  145. package/dist/test/unit/vet.d.ts.map +1 -0
  146. package/dist/test/unit/vet.js +251 -0
  147. package/dist/tsconfig.tsbuildinfo +1 -0
  148. package/package.json +16 -10
  149. package/.eslintignore +0 -5
  150. package/.mocharc.yml +0 -8
  151. package/CHANGELOG.md +0 -34
@@ -0,0 +1,229 @@
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 amountToStake = '1000000000000000000'; // 1 VET in wei
50
+ const amountToStakeHex = '0xde0b6b3a7640000'; // Same amount in hex
51
+ const levelId = testData.STAKING_LEVEL_ID;
52
+ const autorenew = testData.STAKING_AUTORENEW;
53
+ const senderAddress = '0x9378c12BD7502A11F770a5C1F223c959B2805dA9';
54
+ const feePayerAddress = '0xdc9fef0b84a0ccf3f1bd4b84e41743e3e051a083';
55
+ // Mock signatures for testing (these would come from actual signing in real scenario)
56
+ const mockSenderSignature = Buffer.from(testData.senderSig, 'hex');
57
+ const mockFeePayerSignature = Buffer.from(testData.feePayerSig, 'hex');
58
+ describe('Complete Staking Transaction Flow', function () {
59
+ it('should build, sign, and serialize a complete staking transaction with fee delegation', async function () {
60
+ // Step 1: Build the staking transaction
61
+ const stakingBuilder = factory.getStakingBuilder();
62
+ stakingBuilder
63
+ .stakingContractAddress(stakingContractAddress)
64
+ .amountToStake(amountToStake)
65
+ .levelId(levelId)
66
+ .sender(senderAddress)
67
+ .chainTag(0x27) // Testnet chain tag
68
+ .blockRef('0x014ead140e77bbc1')
69
+ .expiration(64)
70
+ .gas(100000)
71
+ .gasPriceCoef(128)
72
+ .nonce('12345');
73
+ stakingBuilder.addFeePayerAddress(feePayerAddress);
74
+ const unsignedTx = await stakingBuilder.build();
75
+ should_1.default.exist(unsignedTx);
76
+ unsignedTx.should.be.instanceof(lib_1.StakingTransaction);
77
+ const stakingTx = unsignedTx;
78
+ // Verify transaction structure
79
+ stakingTx.type.should.equal(sdk_core_1.TransactionType.ContractCall);
80
+ stakingTx.stakingContractAddress.should.equal(stakingContractAddress);
81
+ stakingTx.amountToStake.should.equal(amountToStake);
82
+ stakingTx.levelId.should.equal(levelId);
83
+ stakingTx.autorenew.should.equal(autorenew);
84
+ should_1.default.exist(stakingTx.rawTransaction);
85
+ should_1.default.exist(stakingTx.rawTransaction.body);
86
+ // This is the critical test - ensure reserved.features = 1 for ContractCall type
87
+ should_1.default.exist(stakingTx.rawTransaction.body.reserved);
88
+ stakingTx.rawTransaction.body.reserved.should.have.property('features', 1);
89
+ // Step 3: Add sender signature
90
+ stakingTx.addSenderSignature(mockSenderSignature);
91
+ should_1.default.exist(stakingTx.senderSignature);
92
+ Buffer.from(stakingTx.senderSignature).should.eql(mockSenderSignature);
93
+ // Step 4: Add fee payer signature
94
+ stakingTx.addFeePayerSignature(mockFeePayerSignature);
95
+ should_1.default.exist(stakingTx.feePayerSignature);
96
+ Buffer.from(stakingTx.feePayerSignature).should.eql(mockFeePayerSignature);
97
+ // Step 5: Generate transaction ID
98
+ // This should NOT throw "not signed transaction: id unavailable" error anymore
99
+ const transactionId = stakingTx.id;
100
+ should_1.default.exist(transactionId);
101
+ transactionId.should.not.equal('UNAVAILABLE');
102
+ // Step 6: Serialize the fully signed transaction
103
+ const serializedTx = stakingTx.toBroadcastFormat();
104
+ should_1.default.exist(serializedTx);
105
+ serializedTx.should.be.type('string');
106
+ serializedTx.should.startWith('0x');
107
+ // Step 7: Verify transaction can be deserialized
108
+ const deserializedBuilder = factory.from(serializedTx);
109
+ const deserializedTx = deserializedBuilder.transaction;
110
+ deserializedTx.should.be.instanceof(lib_1.StakingTransaction);
111
+ deserializedTx.stakingContractAddress.should.equal(stakingContractAddress);
112
+ // Amount is stored in hex format in deserialized transaction
113
+ deserializedTx.amountToStake.should.equal(amountToStakeHex);
114
+ deserializedTx.levelId.should.equal(levelId);
115
+ deserializedTx.autorenew.should.equal(autorenew);
116
+ // Step 8: Verify toJson output
117
+ const jsonOutput = stakingTx.toJson();
118
+ should_1.default.exist(jsonOutput);
119
+ jsonOutput.should.have.property('id', transactionId);
120
+ jsonOutput.should.have.property('stakingContractAddress', stakingContractAddress);
121
+ // JSON output keeps decimal format for amounts
122
+ jsonOutput.should.have.property('amountToStake', amountToStake);
123
+ jsonOutput.should.have.property('nftTokenId', levelId);
124
+ jsonOutput.should.have.property('autorenew', autorenew);
125
+ });
126
+ it('should handle signature combination in the correct order', async function () {
127
+ // This test specifically validates the signature combination flow that was failing
128
+ const stakingBuilder = factory.getStakingBuilder();
129
+ stakingBuilder
130
+ .stakingContractAddress(stakingContractAddress)
131
+ .amountToStake(amountToStake)
132
+ .levelId(levelId)
133
+ .sender(senderAddress)
134
+ .chainTag(0x27)
135
+ .blockRef('0x014ead140e77bbc1')
136
+ .expiration(64)
137
+ .gas(100000)
138
+ .gasPriceCoef(128)
139
+ .nonce('12345');
140
+ stakingBuilder.addFeePayerAddress(feePayerAddress);
141
+ const tx = (await stakingBuilder.build());
142
+ // Test 1: Only sender signature - should generate half-signed transaction
143
+ tx.addSenderSignature(mockSenderSignature);
144
+ // Test 2: Add fee payer signature - should generate fully signed transaction
145
+ tx.addFeePayerSignature(mockFeePayerSignature);
146
+ // Should be able to get transaction ID with both signatures
147
+ const fullSignedId = tx.id;
148
+ should_1.default.exist(fullSignedId);
149
+ fullSignedId.should.not.equal('UNAVAILABLE');
150
+ // The ID should be consistent
151
+ fullSignedId.should.be.type('string');
152
+ fullSignedId.length.should.be.greaterThan(10);
153
+ });
154
+ it('should properly set transaction type for fee delegation validation', async function () {
155
+ // This test ensures our fix for TransactionType.ContractCall is working
156
+ const stakingBuilder = factory.getStakingBuilder();
157
+ stakingBuilder
158
+ .stakingContractAddress(stakingContractAddress)
159
+ .amountToStake(amountToStake)
160
+ .levelId(levelId)
161
+ .sender(senderAddress)
162
+ .chainTag(0x27)
163
+ .blockRef('0x014ead140e77bbc1')
164
+ .expiration(64)
165
+ .gas(100000)
166
+ .gasPriceCoef(128)
167
+ .nonce('12345');
168
+ stakingBuilder.addFeePayerAddress(feePayerAddress);
169
+ const tx = (await stakingBuilder.build());
170
+ // Verify the transaction type is ContractCall
171
+ tx.type.should.equal(sdk_core_1.TransactionType.ContractCall);
172
+ // Verify fee delegation is enabled via reserved.features = 1
173
+ const rawTxBody = tx.rawTransaction.body;
174
+ should_1.default.exist(rawTxBody.reserved);
175
+ rawTxBody.reserved.should.have.property('features', 1);
176
+ // This proves that ContractCall transactions now get fee delegation support
177
+ });
178
+ it('should work with pre-built signed transaction from test data', async function () {
179
+ // Test using the actual signed transaction from our test data
180
+ const txBuilder = factory.from(testData.STAKING_TRANSACTION);
181
+ const tx = txBuilder.transaction;
182
+ // Should be able to get ID without throwing errors
183
+ const txId = tx.id;
184
+ should_1.default.exist(txId);
185
+ txId.should.not.equal('UNAVAILABLE');
186
+ // Verify all staking properties are preserved
187
+ // Note: The test data uses a different contract address in the transaction
188
+ // The actual contract address from the parsed transaction is 0x1856c533ac2d94340aaa8544d35a5c1d4a21dee7
189
+ tx.stakingContractAddress.should.equal('0x1856c533ac2d94340aaa8544d35a5c1d4a21dee7');
190
+ tx.levelId.should.equal(testData.STAKING_LEVEL_ID);
191
+ tx.autorenew.should.equal(testData.STAKING_AUTORENEW);
192
+ });
193
+ });
194
+ describe('Fee Delegation Flag Tests', function () {
195
+ it('should set fee delegation for all staking-related transaction types', async function () {
196
+ const testTypes = [
197
+ { type: sdk_core_1.TransactionType.ContractCall, name: 'Staking' },
198
+ { type: sdk_core_1.TransactionType.StakingUnlock, name: 'Exit Delegation' },
199
+ { type: sdk_core_1.TransactionType.StakingWithdraw, name: 'Burn NFT' },
200
+ { type: sdk_core_1.TransactionType.StakingClaim, name: 'Claim Rewards' },
201
+ ];
202
+ for (const testCase of testTypes) {
203
+ const stakingBuilder = factory.getStakingBuilder();
204
+ stakingBuilder
205
+ .stakingContractAddress(stakingContractAddress)
206
+ .amountToStake(amountToStake)
207
+ .levelId(levelId)
208
+ .sender(senderAddress)
209
+ .chainTag(0x27)
210
+ .blockRef('0x014ead140e77bbc1')
211
+ .expiration(64)
212
+ .gas(100000)
213
+ .gasPriceCoef(128)
214
+ .nonce('12345');
215
+ stakingBuilder.addFeePayerAddress(feePayerAddress);
216
+ // Manually set the transaction type to test different types
217
+ const tx = (await stakingBuilder.build());
218
+ tx._type = testCase.type;
219
+ // Rebuild the raw transaction to test fee delegation flag
220
+ await tx.buildRawTransaction();
221
+ // Verify fee delegation is set for all types
222
+ const rawTxBody = tx.rawTransaction.body;
223
+ should_1.default.exist(rawTxBody.reserved);
224
+ rawTxBody.reserved.should.have.property('features', 1);
225
+ }
226
+ });
227
+ });
228
+ });
229
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Rha2luZ0Zsb3dFMkUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvc3Rha2luZ0Zsb3dFMkUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsaURBQTRDO0FBQzVDLG1EQUF1RDtBQUN2RCx1Q0FBOEU7QUFDOUUsMkRBQTZDO0FBRTdDLFFBQVEsQ0FBQyxvQ0FBb0MsRUFBRTtJQUM3QyxNQUFNLFVBQVUsR0FBRyxlQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3JDLE1BQU0sT0FBTyxHQUFHLElBQUksK0JBQXlCLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFMUQsWUFBWTtJQUNaLE1BQU0sc0JBQXNCLEdBQUcsUUFBUSxDQUFDLHdCQUF3QixDQUFDO0lBQ2pFLE1BQU0sYUFBYSxHQUFHLHFCQUFxQixDQUFDLENBQUMsZUFBZTtJQUM1RCxNQUFNLGdCQUFnQixHQUFHLG1CQUFtQixDQUFDLENBQUMscUJBQXFCO0lBQ25FLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQztJQUMxQyxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsaUJBQWlCLENBQUM7SUFDN0MsTUFBTSxhQUFhLEdBQUcsNENBQTRDLENBQUM7SUFDbkUsTUFBTSxlQUFlLEdBQUcsNENBQTRDLENBQUM7SUFFckUsc0ZBQXNGO0lBQ3RGLE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ25FLE1BQU0scUJBQXFCLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBRXZFLFFBQVEsQ0FBQyxtQ0FBbUMsRUFBRTtRQUM1QyxFQUFFLENBQUMsc0ZBQXNGLEVBQUUsS0FBSztZQUM5Rix3Q0FBd0M7WUFDeEMsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFFbkQsY0FBYztpQkFDWCxzQkFBc0IsQ0FBQyxzQkFBc0IsQ0FBQztpQkFDOUMsYUFBYSxDQUFDLGFBQWEsQ0FBQztpQkFDNUIsT0FBTyxDQUFDLE9BQU8sQ0FBQztpQkFDaEIsTUFBTSxDQUFDLGFBQWEsQ0FBQztpQkFDckIsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLG9CQUFvQjtpQkFDbkMsUUFBUSxDQUFDLG9CQUFvQixDQUFDO2lCQUM5QixVQUFVLENBQUMsRUFBRSxDQUFDO2lCQUNkLEdBQUcsQ0FBQyxNQUFNLENBQUM7aUJBQ1gsWUFBWSxDQUFDLEdBQUcsQ0FBQztpQkFDakIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBRWxCLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUVuRCxNQUFNLFVBQVUsR0FBRyxNQUFNLGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNoRCxnQkFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUN6QixVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsd0JBQWtCLENBQUMsQ0FBQztZQUVwRCxNQUFNLFNBQVMsR0FBRyxVQUFnQyxDQUFDO1lBRW5ELCtCQUErQjtZQUMvQixTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsMEJBQWUsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUMxRCxTQUFTLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1lBQ3RFLFNBQVMsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUNwRCxTQUFTLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDeEMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBRTVDLGdCQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUN2QyxnQkFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRTVDLGlGQUFpRjtZQUNqRixnQkFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNyRCxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxRQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBRTVFLCtCQUErQjtZQUMvQixTQUFTLENBQUMsa0JBQWtCLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUNsRCxnQkFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDeEMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZ0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUV4RSxrQ0FBa0M7WUFDbEMsU0FBUyxDQUFDLG9CQUFvQixDQUFDLHFCQUFxQixDQUFDLENBQUM7WUFDdEQsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDMUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsaUJBQWtCLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLENBQUM7WUFFNUUsa0NBQWtDO1lBRWxDLCtFQUErRTtZQUMvRSxNQUFNLGFBQWEsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQ25DLGdCQUFNLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQzVCLGFBQWEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUU5QyxpREFBaUQ7WUFDakQsTUFBTSxZQUFZLEdBQUcsU0FBUyxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDbkQsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDM0IsWUFBWSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3RDLFlBQVksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRXBDLGlEQUFpRDtZQUNqRCxNQUFNLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDdkQsTUFBTSxjQUFjLEdBQUcsbUJBQW1CLENBQUMsV0FBaUMsQ0FBQztZQUU3RSxjQUFjLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsd0JBQWtCLENBQUMsQ0FBQztZQUN4RCxjQUFjLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1lBQzNFLDZEQUE2RDtZQUM3RCxjQUFjLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUM1RCxjQUFjLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDN0MsY0FBYyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBRWpELCtCQUErQjtZQUMvQixNQUFNLFVBQVUsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDdEMsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDekIsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxhQUFhLENBQUMsQ0FBQztZQUNyRCxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsd0JBQXdCLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztZQUNsRiwrQ0FBK0M7WUFDL0MsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsRUFBRSxhQUFhLENBQUMsQ0FBQztZQUNoRSxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ3ZELFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDMUQsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsMERBQTBELEVBQUUsS0FBSztZQUNsRSxtRkFBbUY7WUFDbkYsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFFbkQsY0FBYztpQkFDWCxzQkFBc0IsQ0FBQyxzQkFBc0IsQ0FBQztpQkFDOUMsYUFBYSxDQUFDLGFBQWEsQ0FBQztpQkFDNUIsT0FBTyxDQUFDLE9BQU8sQ0FBQztpQkFDaEIsTUFBTSxDQUFDLGFBQWEsQ0FBQztpQkFDckIsUUFBUSxDQUFDLElBQUksQ0FBQztpQkFDZCxRQUFRLENBQUMsb0JBQW9CLENBQUM7aUJBQzlCLFVBQVUsQ0FBQyxFQUFFLENBQUM7aUJBQ2QsR0FBRyxDQUFDLE1BQU0sQ0FBQztpQkFDWCxZQUFZLENBQUMsR0FBRyxDQUFDO2lCQUNqQixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7WUFFbEIsY0FBYyxDQUFDLGtCQUFrQixDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBRW5ELE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTSxjQUFjLENBQUMsS0FBSyxFQUFFLENBQXVCLENBQUM7WUFFaEUsMEVBQTBFO1lBQzFFLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1lBRTNDLDZFQUE2RTtZQUM3RSxFQUFFLENBQUMsb0JBQW9CLENBQUMscUJBQXFCLENBQUMsQ0FBQztZQUUvQyw0REFBNEQ7WUFDNUQsTUFBTSxZQUFZLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUMzQixnQkFBTSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUMzQixZQUFZLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7WUFFN0MsOEJBQThCO1lBQzlCLFlBQVksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN0QyxZQUFZLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLG9FQUFvRSxFQUFFLEtBQUs7WUFDNUUsd0VBQXdFO1lBQ3hFLE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBRW5ELGNBQWM7aUJBQ1gsc0JBQXNCLENBQUMsc0JBQXNCLENBQUM7aUJBQzlDLGFBQWEsQ0FBQyxhQUFhLENBQUM7aUJBQzVCLE9BQU8sQ0FBQyxPQUFPLENBQUM7aUJBQ2hCLE1BQU0sQ0FBQyxhQUFhLENBQUM7aUJBQ3JCLFFBQVEsQ0FBQyxJQUFJLENBQUM7aUJBQ2QsUUFBUSxDQUFDLG9CQUFvQixDQUFDO2lCQUM5QixVQUFVLENBQUMsRUFBRSxDQUFDO2lCQUNkLEdBQUcsQ0FBQyxNQUFNLENBQUM7aUJBQ1gsWUFBWSxDQUFDLEdBQUcsQ0FBQztpQkFDakIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBRWxCLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUVuRCxNQUFNLEVBQUUsR0FBRyxDQUFDLE1BQU0sY0FBYyxDQUFDLEtBQUssRUFBRSxDQUF1QixDQUFDO1lBRWhFLDhDQUE4QztZQUM5QyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsMEJBQWUsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUVuRCw2REFBNkQ7WUFDN0QsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUM7WUFDekMsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2pDLFNBQVMsQ0FBQyxRQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBRXhELDRFQUE0RTtRQUM5RSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyw4REFBOEQsRUFBRSxLQUFLO1lBQ3RFLDhEQUE4RDtZQUM5RCxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1lBQzdELE1BQU0sRUFBRSxHQUFHLFNBQVMsQ0FBQyxXQUFpQyxDQUFDO1lBRXZELG1EQUFtRDtZQUNuRCxNQUFNLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ25CLGdCQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ25CLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUVyQyw4Q0FBOEM7WUFDOUMsMkVBQTJFO1lBQzNFLHdHQUF3RztZQUN4RyxFQUFFLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO1lBQ3JGLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUNuRCxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDeEQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQywyQkFBMkIsRUFBRTtRQUNwQyxFQUFFLENBQUMscUVBQXFFLEVBQUUsS0FBSztZQUM3RSxNQUFNLFNBQVMsR0FBRztnQkFDaEIsRUFBRSxJQUFJLEVBQUUsMEJBQWUsQ0FBQyxZQUFZLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRTtnQkFDdkQsRUFBRSxJQUFJLEVBQUUsMEJBQWUsQ0FBQyxhQUFhLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixFQUFFO2dCQUNoRSxFQUFFLElBQUksRUFBRSwwQkFBZSxDQUFDLGVBQWUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUMzRCxFQUFFLElBQUksRUFBRSwwQkFBZSxDQUFDLFlBQVksRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFO2FBQzlELENBQUM7WUFFRixLQUFLLE1BQU0sUUFBUSxJQUFJLFNBQVMsRUFBRSxDQUFDO2dCQUNqQyxNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztnQkFDbkQsY0FBYztxQkFDWCxzQkFBc0IsQ0FBQyxzQkFBc0IsQ0FBQztxQkFDOUMsYUFBYSxDQUFDLGFBQWEsQ0FBQztxQkFDNUIsT0FBTyxDQUFDLE9BQU8sQ0FBQztxQkFDaEIsTUFBTSxDQUFDLGFBQWEsQ0FBQztxQkFDckIsUUFBUSxDQUFDLElBQUksQ0FBQztxQkFDZCxRQUFRLENBQUMsb0JBQW9CLENBQUM7cUJBQzlCLFVBQVUsQ0FBQyxFQUFFLENBQUM7cUJBQ2QsR0FBRyxDQUFDLE1BQU0sQ0FBQztxQkFDWCxZQUFZLENBQUMsR0FBRyxDQUFDO3FCQUNqQixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBRWxCLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsQ0FBQztnQkFFbkQsNERBQTREO2dCQUM1RCxNQUFNLEVBQUUsR0FBRyxDQUFDLE1BQU0sY0FBYyxDQUFDLEtBQUssRUFBRSxDQUF1QixDQUFDO2dCQUMvRCxFQUFVLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7Z0JBRWxDLDBEQUEwRDtnQkFDMUQsTUFBTyxFQUFVLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztnQkFFeEMsNkNBQTZDO2dCQUM3QyxNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQztnQkFDekMsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNqQyxTQUFTLENBQUMsUUFBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUMxRCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHNob3VsZCBmcm9tICdzaG91bGQnO1xuaW1wb3J0IHsgY29pbnMgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnksIFN0YWtpbmdUcmFuc2FjdGlvbiB9IGZyb20gJy4uLy4uL3NyYy9saWInO1xuaW1wb3J0ICogYXMgdGVzdERhdGEgZnJvbSAnLi4vcmVzb3VyY2VzL3ZldCc7XG5cbmRlc2NyaWJlKCdWRVQgU3Rha2luZyBGbG93IC0gRW5kLXRvLUVuZCBUZXN0JywgZnVuY3Rpb24gKCkge1xuICBjb25zdCBjb2luQ29uZmlnID0gY29pbnMuZ2V0KCd0dmV0Jyk7XG4gIGNvbnN0IGZhY3RvcnkgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2luQ29uZmlnKTtcblxuICAvLyBUZXN0IGRhdGFcbiAgY29uc3Qgc3Rha2luZ0NvbnRyYWN0QWRkcmVzcyA9IHRlc3REYXRhLlNUQUtJTkdfQ09OVFJBQ1RfQUREUkVTUztcbiAgY29uc3QgYW1vdW50VG9TdGFrZSA9ICcxMDAwMDAwMDAwMDAwMDAwMDAwJzsgLy8gMSBWRVQgaW4gd2VpXG4gIGNvbnN0IGFtb3VudFRvU3Rha2VIZXggPSAnMHhkZTBiNmIzYTc2NDAwMDAnOyAvLyBTYW1lIGFtb3VudCBpbiBoZXhcbiAgY29uc3QgbGV2ZWxJZCA9IHRlc3REYXRhLlNUQUtJTkdfTEVWRUxfSUQ7XG4gIGNvbnN0IGF1dG9yZW5ldyA9IHRlc3REYXRhLlNUQUtJTkdfQVVUT1JFTkVXO1xuICBjb25zdCBzZW5kZXJBZGRyZXNzID0gJzB4OTM3OGMxMkJENzUwMkExMUY3NzBhNUMxRjIyM2M5NTlCMjgwNWRBOSc7XG4gIGNvbnN0IGZlZVBheWVyQWRkcmVzcyA9ICcweGRjOWZlZjBiODRhMGNjZjNmMWJkNGI4NGU0MTc0M2UzZTA1MWEwODMnO1xuXG4gIC8vIE1vY2sgc2lnbmF0dXJlcyBmb3IgdGVzdGluZyAodGhlc2Ugd291bGQgY29tZSBmcm9tIGFjdHVhbCBzaWduaW5nIGluIHJlYWwgc2NlbmFyaW8pXG4gIGNvbnN0IG1vY2tTZW5kZXJTaWduYXR1cmUgPSBCdWZmZXIuZnJvbSh0ZXN0RGF0YS5zZW5kZXJTaWcsICdoZXgnKTtcbiAgY29uc3QgbW9ja0ZlZVBheWVyU2lnbmF0dXJlID0gQnVmZmVyLmZyb20odGVzdERhdGEuZmVlUGF5ZXJTaWcsICdoZXgnKTtcblxuICBkZXNjcmliZSgnQ29tcGxldGUgU3Rha2luZyBUcmFuc2FjdGlvbiBGbG93JywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgYnVpbGQsIHNpZ24sIGFuZCBzZXJpYWxpemUgYSBjb21wbGV0ZSBzdGFraW5nIHRyYW5zYWN0aW9uIHdpdGggZmVlIGRlbGVnYXRpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBTdGVwIDE6IEJ1aWxkIHRoZSBzdGFraW5nIHRyYW5zYWN0aW9uXG4gICAgICBjb25zdCBzdGFraW5nQnVpbGRlciA9IGZhY3RvcnkuZ2V0U3Rha2luZ0J1aWxkZXIoKTtcblxuICAgICAgc3Rha2luZ0J1aWxkZXJcbiAgICAgICAgLnN0YWtpbmdDb250cmFjdEFkZHJlc3Moc3Rha2luZ0NvbnRyYWN0QWRkcmVzcylcbiAgICAgICAgLmFtb3VudFRvU3Rha2UoYW1vdW50VG9TdGFrZSlcbiAgICAgICAgLmxldmVsSWQobGV2ZWxJZClcbiAgICAgICAgLnNlbmRlcihzZW5kZXJBZGRyZXNzKVxuICAgICAgICAuY2hhaW5UYWcoMHgyNykgLy8gVGVzdG5ldCBjaGFpbiB0YWdcbiAgICAgICAgLmJsb2NrUmVmKCcweDAxNGVhZDE0MGU3N2JiYzEnKVxuICAgICAgICAuZXhwaXJhdGlvbig2NClcbiAgICAgICAgLmdhcygxMDAwMDApXG4gICAgICAgIC5nYXNQcmljZUNvZWYoMTI4KVxuICAgICAgICAubm9uY2UoJzEyMzQ1Jyk7XG5cbiAgICAgIHN0YWtpbmdCdWlsZGVyLmFkZEZlZVBheWVyQWRkcmVzcyhmZWVQYXllckFkZHJlc3MpO1xuXG4gICAgICBjb25zdCB1bnNpZ25lZFR4ID0gYXdhaXQgc3Rha2luZ0J1aWxkZXIuYnVpbGQoKTtcbiAgICAgIHNob3VsZC5leGlzdCh1bnNpZ25lZFR4KTtcbiAgICAgIHVuc2lnbmVkVHguc2hvdWxkLmJlLmluc3RhbmNlb2YoU3Rha2luZ1RyYW5zYWN0aW9uKTtcblxuICAgICAgY29uc3Qgc3Rha2luZ1R4ID0gdW5zaWduZWRUeCBhcyBTdGFraW5nVHJhbnNhY3Rpb247XG5cbiAgICAgIC8vIFZlcmlmeSB0cmFuc2FjdGlvbiBzdHJ1Y3R1cmVcbiAgICAgIHN0YWtpbmdUeC50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuQ29udHJhY3RDYWxsKTtcbiAgICAgIHN0YWtpbmdUeC5zdGFraW5nQ29udHJhY3RBZGRyZXNzLnNob3VsZC5lcXVhbChzdGFraW5nQ29udHJhY3RBZGRyZXNzKTtcbiAgICAgIHN0YWtpbmdUeC5hbW91bnRUb1N0YWtlLnNob3VsZC5lcXVhbChhbW91bnRUb1N0YWtlKTtcbiAgICAgIHN0YWtpbmdUeC5sZXZlbElkLnNob3VsZC5lcXVhbChsZXZlbElkKTtcbiAgICAgIHN0YWtpbmdUeC5hdXRvcmVuZXcuc2hvdWxkLmVxdWFsKGF1dG9yZW5ldyk7XG5cbiAgICAgIHNob3VsZC5leGlzdChzdGFraW5nVHgucmF3VHJhbnNhY3Rpb24pO1xuICAgICAgc2hvdWxkLmV4aXN0KHN0YWtpbmdUeC5yYXdUcmFuc2FjdGlvbi5ib2R5KTtcblxuICAgICAgLy8gVGhpcyBpcyB0aGUgY3JpdGljYWwgdGVzdCAtIGVuc3VyZSByZXNlcnZlZC5mZWF0dXJlcyA9IDEgZm9yIENvbnRyYWN0Q2FsbCB0eXBlXG4gICAgICBzaG91bGQuZXhpc3Qoc3Rha2luZ1R4LnJhd1RyYW5zYWN0aW9uLmJvZHkucmVzZXJ2ZWQpO1xuICAgICAgc3Rha2luZ1R4LnJhd1RyYW5zYWN0aW9uLmJvZHkucmVzZXJ2ZWQhLnNob3VsZC5oYXZlLnByb3BlcnR5KCdmZWF0dXJlcycsIDEpO1xuXG4gICAgICAvLyBTdGVwIDM6IEFkZCBzZW5kZXIgc2lnbmF0dXJlXG4gICAgICBzdGFraW5nVHguYWRkU2VuZGVyU2lnbmF0dXJlKG1vY2tTZW5kZXJTaWduYXR1cmUpO1xuICAgICAgc2hvdWxkLmV4aXN0KHN0YWtpbmdUeC5zZW5kZXJTaWduYXR1cmUpO1xuICAgICAgQnVmZmVyLmZyb20oc3Rha2luZ1R4LnNlbmRlclNpZ25hdHVyZSEpLnNob3VsZC5lcWwobW9ja1NlbmRlclNpZ25hdHVyZSk7XG5cbiAgICAgIC8vIFN0ZXAgNDogQWRkIGZlZSBwYXllciBzaWduYXR1cmVcbiAgICAgIHN0YWtpbmdUeC5hZGRGZWVQYXllclNpZ25hdHVyZShtb2NrRmVlUGF5ZXJTaWduYXR1cmUpO1xuICAgICAgc2hvdWxkLmV4aXN0KHN0YWtpbmdUeC5mZWVQYXllclNpZ25hdHVyZSk7XG4gICAgICBCdWZmZXIuZnJvbShzdGFraW5nVHguZmVlUGF5ZXJTaWduYXR1cmUhKS5zaG91bGQuZXFsKG1vY2tGZWVQYXllclNpZ25hdHVyZSk7XG5cbiAgICAgIC8vIFN0ZXAgNTogR2VuZXJhdGUgdHJhbnNhY3Rpb24gSURcblxuICAgICAgLy8gVGhpcyBzaG91bGQgTk9UIHRocm93IFwibm90IHNpZ25lZCB0cmFuc2FjdGlvbjogaWQgdW5hdmFpbGFibGVcIiBlcnJvciBhbnltb3JlXG4gICAgICBjb25zdCB0cmFuc2FjdGlvbklkID0gc3Rha2luZ1R4LmlkO1xuICAgICAgc2hvdWxkLmV4aXN0KHRyYW5zYWN0aW9uSWQpO1xuICAgICAgdHJhbnNhY3Rpb25JZC5zaG91bGQubm90LmVxdWFsKCdVTkFWQUlMQUJMRScpO1xuXG4gICAgICAvLyBTdGVwIDY6IFNlcmlhbGl6ZSB0aGUgZnVsbHkgc2lnbmVkIHRyYW5zYWN0aW9uXG4gICAgICBjb25zdCBzZXJpYWxpemVkVHggPSBzdGFraW5nVHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgIHNob3VsZC5leGlzdChzZXJpYWxpemVkVHgpO1xuICAgICAgc2VyaWFsaXplZFR4LnNob3VsZC5iZS50eXBlKCdzdHJpbmcnKTtcbiAgICAgIHNlcmlhbGl6ZWRUeC5zaG91bGQuc3RhcnRXaXRoKCcweCcpO1xuXG4gICAgICAvLyBTdGVwIDc6IFZlcmlmeSB0cmFuc2FjdGlvbiBjYW4gYmUgZGVzZXJpYWxpemVkXG4gICAgICBjb25zdCBkZXNlcmlhbGl6ZWRCdWlsZGVyID0gZmFjdG9yeS5mcm9tKHNlcmlhbGl6ZWRUeCk7XG4gICAgICBjb25zdCBkZXNlcmlhbGl6ZWRUeCA9IGRlc2VyaWFsaXplZEJ1aWxkZXIudHJhbnNhY3Rpb24gYXMgU3Rha2luZ1RyYW5zYWN0aW9uO1xuXG4gICAgICBkZXNlcmlhbGl6ZWRUeC5zaG91bGQuYmUuaW5zdGFuY2VvZihTdGFraW5nVHJhbnNhY3Rpb24pO1xuICAgICAgZGVzZXJpYWxpemVkVHguc3Rha2luZ0NvbnRyYWN0QWRkcmVzcy5zaG91bGQuZXF1YWwoc3Rha2luZ0NvbnRyYWN0QWRkcmVzcyk7XG4gICAgICAvLyBBbW91bnQgaXMgc3RvcmVkIGluIGhleCBmb3JtYXQgaW4gZGVzZXJpYWxpemVkIHRyYW5zYWN0aW9uXG4gICAgICBkZXNlcmlhbGl6ZWRUeC5hbW91bnRUb1N0YWtlLnNob3VsZC5lcXVhbChhbW91bnRUb1N0YWtlSGV4KTtcbiAgICAgIGRlc2VyaWFsaXplZFR4LmxldmVsSWQuc2hvdWxkLmVxdWFsKGxldmVsSWQpO1xuICAgICAgZGVzZXJpYWxpemVkVHguYXV0b3JlbmV3LnNob3VsZC5lcXVhbChhdXRvcmVuZXcpO1xuXG4gICAgICAvLyBTdGVwIDg6IFZlcmlmeSB0b0pzb24gb3V0cHV0XG4gICAgICBjb25zdCBqc29uT3V0cHV0ID0gc3Rha2luZ1R4LnRvSnNvbigpO1xuICAgICAgc2hvdWxkLmV4aXN0KGpzb25PdXRwdXQpO1xuICAgICAganNvbk91dHB1dC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnaWQnLCB0cmFuc2FjdGlvbklkKTtcbiAgICAgIGpzb25PdXRwdXQuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3N0YWtpbmdDb250cmFjdEFkZHJlc3MnLCBzdGFraW5nQ29udHJhY3RBZGRyZXNzKTtcbiAgICAgIC8vIEpTT04gb3V0cHV0IGtlZXBzIGRlY2ltYWwgZm9ybWF0IGZvciBhbW91bnRzXG4gICAgICBqc29uT3V0cHV0LnNob3VsZC5oYXZlLnByb3BlcnR5KCdhbW91bnRUb1N0YWtlJywgYW1vdW50VG9TdGFrZSk7XG4gICAgICBqc29uT3V0cHV0LnNob3VsZC5oYXZlLnByb3BlcnR5KCduZnRUb2tlbklkJywgbGV2ZWxJZCk7XG4gICAgICBqc29uT3V0cHV0LnNob3VsZC5oYXZlLnByb3BlcnR5KCdhdXRvcmVuZXcnLCBhdXRvcmVuZXcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgc2lnbmF0dXJlIGNvbWJpbmF0aW9uIGluIHRoZSBjb3JyZWN0IG9yZGVyJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gVGhpcyB0ZXN0IHNwZWNpZmljYWxseSB2YWxpZGF0ZXMgdGhlIHNpZ25hdHVyZSBjb21iaW5hdGlvbiBmbG93IHRoYXQgd2FzIGZhaWxpbmdcbiAgICAgIGNvbnN0IHN0YWtpbmdCdWlsZGVyID0gZmFjdG9yeS5nZXRTdGFraW5nQnVpbGRlcigpO1xuXG4gICAgICBzdGFraW5nQnVpbGRlclxuICAgICAgICAuc3Rha2luZ0NvbnRyYWN0QWRkcmVzcyhzdGFraW5nQ29udHJhY3RBZGRyZXNzKVxuICAgICAgICAuYW1vdW50VG9TdGFrZShhbW91bnRUb1N0YWtlKVxuICAgICAgICAubGV2ZWxJZChsZXZlbElkKVxuICAgICAgICAuc2VuZGVyKHNlbmRlckFkZHJlc3MpXG4gICAgICAgIC5jaGFpblRhZygweDI3KVxuICAgICAgICAuYmxvY2tSZWYoJzB4MDE0ZWFkMTQwZTc3YmJjMScpXG4gICAgICAgIC5leHBpcmF0aW9uKDY0KVxuICAgICAgICAuZ2FzKDEwMDAwMClcbiAgICAgICAgLmdhc1ByaWNlQ29lZigxMjgpXG4gICAgICAgIC5ub25jZSgnMTIzNDUnKTtcblxuICAgICAgc3Rha2luZ0J1aWxkZXIuYWRkRmVlUGF5ZXJBZGRyZXNzKGZlZVBheWVyQWRkcmVzcyk7XG5cbiAgICAgIGNvbnN0IHR4ID0gKGF3YWl0IHN0YWtpbmdCdWlsZGVyLmJ1aWxkKCkpIGFzIFN0YWtpbmdUcmFuc2FjdGlvbjtcblxuICAgICAgLy8gVGVzdCAxOiBPbmx5IHNlbmRlciBzaWduYXR1cmUgLSBzaG91bGQgZ2VuZXJhdGUgaGFsZi1zaWduZWQgdHJhbnNhY3Rpb25cbiAgICAgIHR4LmFkZFNlbmRlclNpZ25hdHVyZShtb2NrU2VuZGVyU2lnbmF0dXJlKTtcblxuICAgICAgLy8gVGVzdCAyOiBBZGQgZmVlIHBheWVyIHNpZ25hdHVyZSAtIHNob3VsZCBnZW5lcmF0ZSBmdWxseSBzaWduZWQgdHJhbnNhY3Rpb25cbiAgICAgIHR4LmFkZEZlZVBheWVyU2lnbmF0dXJlKG1vY2tGZWVQYXllclNpZ25hdHVyZSk7XG5cbiAgICAgIC8vIFNob3VsZCBiZSBhYmxlIHRvIGdldCB0cmFuc2FjdGlvbiBJRCB3aXRoIGJvdGggc2lnbmF0dXJlc1xuICAgICAgY29uc3QgZnVsbFNpZ25lZElkID0gdHguaWQ7XG4gICAgICBzaG91bGQuZXhpc3QoZnVsbFNpZ25lZElkKTtcbiAgICAgIGZ1bGxTaWduZWRJZC5zaG91bGQubm90LmVxdWFsKCdVTkFWQUlMQUJMRScpO1xuXG4gICAgICAvLyBUaGUgSUQgc2hvdWxkIGJlIGNvbnNpc3RlbnRcbiAgICAgIGZ1bGxTaWduZWRJZC5zaG91bGQuYmUudHlwZSgnc3RyaW5nJyk7XG4gICAgICBmdWxsU2lnbmVkSWQubGVuZ3RoLnNob3VsZC5iZS5ncmVhdGVyVGhhbigxMCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHByb3Blcmx5IHNldCB0cmFuc2FjdGlvbiB0eXBlIGZvciBmZWUgZGVsZWdhdGlvbiB2YWxpZGF0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gVGhpcyB0ZXN0IGVuc3VyZXMgb3VyIGZpeCBmb3IgVHJhbnNhY3Rpb25UeXBlLkNvbnRyYWN0Q2FsbCBpcyB3b3JraW5nXG4gICAgICBjb25zdCBzdGFraW5nQnVpbGRlciA9IGZhY3RvcnkuZ2V0U3Rha2luZ0J1aWxkZXIoKTtcblxuICAgICAgc3Rha2luZ0J1aWxkZXJcbiAgICAgICAgLnN0YWtpbmdDb250cmFjdEFkZHJlc3Moc3Rha2luZ0NvbnRyYWN0QWRkcmVzcylcbiAgICAgICAgLmFtb3VudFRvU3Rha2UoYW1vdW50VG9TdGFrZSlcbiAgICAgICAgLmxldmVsSWQobGV2ZWxJZClcbiAgICAgICAgLnNlbmRlcihzZW5kZXJBZGRyZXNzKVxuICAgICAgICAuY2hhaW5UYWcoMHgyNylcbiAgICAgICAgLmJsb2NrUmVmKCcweDAxNGVhZDE0MGU3N2JiYzEnKVxuICAgICAgICAuZXhwaXJhdGlvbig2NClcbiAgICAgICAgLmdhcygxMDAwMDApXG4gICAgICAgIC5nYXNQcmljZUNvZWYoMTI4KVxuICAgICAgICAubm9uY2UoJzEyMzQ1Jyk7XG5cbiAgICAgIHN0YWtpbmdCdWlsZGVyLmFkZEZlZVBheWVyQWRkcmVzcyhmZWVQYXllckFkZHJlc3MpO1xuXG4gICAgICBjb25zdCB0eCA9IChhd2FpdCBzdGFraW5nQnVpbGRlci5idWlsZCgpKSBhcyBTdGFraW5nVHJhbnNhY3Rpb247XG5cbiAgICAgIC8vIFZlcmlmeSB0aGUgdHJhbnNhY3Rpb24gdHlwZSBpcyBDb250cmFjdENhbGxcbiAgICAgIHR4LnR5cGUuc2hvdWxkLmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5Db250cmFjdENhbGwpO1xuXG4gICAgICAvLyBWZXJpZnkgZmVlIGRlbGVnYXRpb24gaXMgZW5hYmxlZCB2aWEgcmVzZXJ2ZWQuZmVhdHVyZXMgPSAxXG4gICAgICBjb25zdCByYXdUeEJvZHkgPSB0eC5yYXdUcmFuc2FjdGlvbi5ib2R5O1xuICAgICAgc2hvdWxkLmV4aXN0KHJhd1R4Qm9keS5yZXNlcnZlZCk7XG4gICAgICByYXdUeEJvZHkucmVzZXJ2ZWQhLnNob3VsZC5oYXZlLnByb3BlcnR5KCdmZWF0dXJlcycsIDEpO1xuXG4gICAgICAvLyBUaGlzIHByb3ZlcyB0aGF0IENvbnRyYWN0Q2FsbCB0cmFuc2FjdGlvbnMgbm93IGdldCBmZWUgZGVsZWdhdGlvbiBzdXBwb3J0XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHdvcmsgd2l0aCBwcmUtYnVpbHQgc2lnbmVkIHRyYW5zYWN0aW9uIGZyb20gdGVzdCBkYXRhJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gVGVzdCB1c2luZyB0aGUgYWN0dWFsIHNpZ25lZCB0cmFuc2FjdGlvbiBmcm9tIG91ciB0ZXN0IGRhdGFcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZnJvbSh0ZXN0RGF0YS5TVEFLSU5HX1RSQU5TQUNUSU9OKTtcbiAgICAgIGNvbnN0IHR4ID0gdHhCdWlsZGVyLnRyYW5zYWN0aW9uIGFzIFN0YWtpbmdUcmFuc2FjdGlvbjtcblxuICAgICAgLy8gU2hvdWxkIGJlIGFibGUgdG8gZ2V0IElEIHdpdGhvdXQgdGhyb3dpbmcgZXJyb3JzXG4gICAgICBjb25zdCB0eElkID0gdHguaWQ7XG4gICAgICBzaG91bGQuZXhpc3QodHhJZCk7XG4gICAgICB0eElkLnNob3VsZC5ub3QuZXF1YWwoJ1VOQVZBSUxBQkxFJyk7XG5cbiAgICAgIC8vIFZlcmlmeSBhbGwgc3Rha2luZyBwcm9wZXJ0aWVzIGFyZSBwcmVzZXJ2ZWRcbiAgICAgIC8vIE5vdGU6IFRoZSB0ZXN0IGRhdGEgdXNlcyBhIGRpZmZlcmVudCBjb250cmFjdCBhZGRyZXNzIGluIHRoZSB0cmFuc2FjdGlvblxuICAgICAgLy8gVGhlIGFjdHVhbCBjb250cmFjdCBhZGRyZXNzIGZyb20gdGhlIHBhcnNlZCB0cmFuc2FjdGlvbiBpcyAweDE4NTZjNTMzYWMyZDk0MzQwYWFhODU0NGQzNWE1YzFkNGEyMWRlZTdcbiAgICAgIHR4LnN0YWtpbmdDb250cmFjdEFkZHJlc3Muc2hvdWxkLmVxdWFsKCcweDE4NTZjNTMzYWMyZDk0MzQwYWFhODU0NGQzNWE1YzFkNGEyMWRlZTcnKTtcbiAgICAgIHR4LmxldmVsSWQuc2hvdWxkLmVxdWFsKHRlc3REYXRhLlNUQUtJTkdfTEVWRUxfSUQpO1xuICAgICAgdHguYXV0b3JlbmV3LnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5TVEFLSU5HX0FVVE9SRU5FVyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdGZWUgRGVsZWdhdGlvbiBGbGFnIFRlc3RzJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgc2V0IGZlZSBkZWxlZ2F0aW9uIGZvciBhbGwgc3Rha2luZy1yZWxhdGVkIHRyYW5zYWN0aW9uIHR5cGVzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdGVzdFR5cGVzID0gW1xuICAgICAgICB7IHR5cGU6IFRyYW5zYWN0aW9uVHlwZS5Db250cmFjdENhbGwsIG5hbWU6ICdTdGFraW5nJyB9LFxuICAgICAgICB7IHR5cGU6IFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nVW5sb2NrLCBuYW1lOiAnRXhpdCBEZWxlZ2F0aW9uJyB9LFxuICAgICAgICB7IHR5cGU6IFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nV2l0aGRyYXcsIG5hbWU6ICdCdXJuIE5GVCcgfSxcbiAgICAgICAgeyB0eXBlOiBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0NsYWltLCBuYW1lOiAnQ2xhaW0gUmV3YXJkcycgfSxcbiAgICAgIF07XG5cbiAgICAgIGZvciAoY29uc3QgdGVzdENhc2Ugb2YgdGVzdFR5cGVzKSB7XG4gICAgICAgIGNvbnN0IHN0YWtpbmdCdWlsZGVyID0gZmFjdG9yeS5nZXRTdGFraW5nQnVpbGRlcigpO1xuICAgICAgICBzdGFraW5nQnVpbGRlclxuICAgICAgICAgIC5zdGFraW5nQ29udHJhY3RBZGRyZXNzKHN0YWtpbmdDb250cmFjdEFkZHJlc3MpXG4gICAgICAgICAgLmFtb3VudFRvU3Rha2UoYW1vdW50VG9TdGFrZSlcbiAgICAgICAgICAubGV2ZWxJZChsZXZlbElkKVxuICAgICAgICAgIC5zZW5kZXIoc2VuZGVyQWRkcmVzcylcbiAgICAgICAgICAuY2hhaW5UYWcoMHgyNylcbiAgICAgICAgICAuYmxvY2tSZWYoJzB4MDE0ZWFkMTQwZTc3YmJjMScpXG4gICAgICAgICAgLmV4cGlyYXRpb24oNjQpXG4gICAgICAgICAgLmdhcygxMDAwMDApXG4gICAgICAgICAgLmdhc1ByaWNlQ29lZigxMjgpXG4gICAgICAgICAgLm5vbmNlKCcxMjM0NScpO1xuXG4gICAgICAgIHN0YWtpbmdCdWlsZGVyLmFkZEZlZVBheWVyQWRkcmVzcyhmZWVQYXllckFkZHJlc3MpO1xuXG4gICAgICAgIC8vIE1hbnVhbGx5IHNldCB0aGUgdHJhbnNhY3Rpb24gdHlwZSB0byB0ZXN0IGRpZmZlcmVudCB0eXBlc1xuICAgICAgICBjb25zdCB0eCA9IChhd2FpdCBzdGFraW5nQnVpbGRlci5idWlsZCgpKSBhcyBTdGFraW5nVHJhbnNhY3Rpb247XG4gICAgICAgICh0eCBhcyBhbnkpLl90eXBlID0gdGVzdENhc2UudHlwZTtcblxuICAgICAgICAvLyBSZWJ1aWxkIHRoZSByYXcgdHJhbnNhY3Rpb24gdG8gdGVzdCBmZWUgZGVsZWdhdGlvbiBmbGFnXG4gICAgICAgIGF3YWl0ICh0eCBhcyBhbnkpLmJ1aWxkUmF3VHJhbnNhY3Rpb24oKTtcblxuICAgICAgICAvLyBWZXJpZnkgZmVlIGRlbGVnYXRpb24gaXMgc2V0IGZvciBhbGwgdHlwZXNcbiAgICAgICAgY29uc3QgcmF3VHhCb2R5ID0gdHgucmF3VHJhbnNhY3Rpb24uYm9keTtcbiAgICAgICAgc2hvdWxkLmV4aXN0KHJhd1R4Qm9keS5yZXNlcnZlZCk7XG4gICAgICAgIHJhd1R4Qm9keS5yZXNlcnZlZCEuc2hvdWxkLmhhdmUucHJvcGVydHkoJ2ZlYXR1cmVzJywgMSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../test/unit/utils.ts"],"names":[],"mappings":""}
@@ -0,0 +1,106 @@
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 testData = __importStar(require("../resources/vet"));
41
+ const utils_1 = __importDefault(require("../../src/lib/utils"));
42
+ const sdk_core_1 = require("@bitgo-beta/sdk-core");
43
+ describe('Vechain util library', function () {
44
+ describe('isValidAddress', function () {
45
+ it('should succeed to validate raw transactoin', function () {
46
+ for (const address of testData.addresses.validAddresses) {
47
+ should_1.default.equal(utils_1.default.isValidAddress(address), true);
48
+ }
49
+ });
50
+ it('should fail to validate invalid addresses', function () {
51
+ for (const address of testData.addresses.invalidAddresses) {
52
+ should_1.default.doesNotThrow(() => utils_1.default.isValidAddress(address));
53
+ should_1.default.equal(utils_1.default.isValidAddress(address), false);
54
+ }
55
+ // @ts-expect-error Testing for missing param, should not throw an error
56
+ should_1.default.doesNotThrow(() => utils_1.default.isValidAddress(undefined));
57
+ // @ts-expect-error Testing for missing param, should return false
58
+ should_1.default.equal(utils_1.default.isValidAddress(undefined), false);
59
+ });
60
+ });
61
+ describe('isValidBlockId', function () {
62
+ it('should succeed to validate valid block IDs', function () {
63
+ for (const blockId of testData.blockIds.validBlockIds) {
64
+ should_1.default.equal(utils_1.default.isValidBlockId(blockId), true);
65
+ }
66
+ });
67
+ it('should fail to validate invalid block IDs', function () {
68
+ for (const blockId of testData.blockIds.invalidBlockIds) {
69
+ should_1.default.doesNotThrow(() => utils_1.default.isValidBlockId(blockId));
70
+ should_1.default.equal(utils_1.default.isValidBlockId(blockId), false);
71
+ }
72
+ // @ts-expect-error Testing for missing param, should not throw an error
73
+ should_1.default.doesNotThrow(() => utils_1.default.isValidBlockId(undefined));
74
+ // @ts-expect-error Testing for missing param, should return false
75
+ should_1.default.equal(utils_1.default.isValidBlockId(undefined), false);
76
+ });
77
+ });
78
+ describe('isValidDeserialize', function () {
79
+ it('should succeed to correctly deserialize sponsored signed serialized transaction', function () {
80
+ const signedTxn = utils_1.default.deserializeTransaction(testData.SPONSORED_TRANSACTION);
81
+ should_1.default.equal(signedTxn.origin.toString().toLowerCase(), '0x7ca00e3bc8a836026c2917c6c7c6d049e52099dd');
82
+ should_1.default.equal(signedTxn.gasPayer.toString().toLowerCase(), '0xdc9fef0b84a0ccf3f1bd4b84e41743e3e051a083');
83
+ });
84
+ it('should succeed to correctly deserialize unsigned serialized transaction', function () {
85
+ const signedTxn = utils_1.default.deserializeTransaction(testData.UNSIGNED_TRANSACTION);
86
+ should_1.default.equal(signedTxn.isSigned, false);
87
+ should_1.default.equal(signedTxn.body.gas, 21000);
88
+ should_1.default.equal(signedTxn.body.nonce, 400496);
89
+ should_1.default.equal(signedTxn.body.expiration, 64);
90
+ should_1.default.equal(signedTxn.body.blockRef, '0x01536ce9e9fb0638');
91
+ });
92
+ it('should fail to deserialize an invalid serialized transaction', function () {
93
+ should_1.default.throws(() => utils_1.default.deserializeTransaction(testData.INVALID_TRANSACTION));
94
+ });
95
+ });
96
+ it('should get correct transaction type from clause', function () {
97
+ should_1.default.equal(sdk_core_1.TransactionType.Send, utils_1.default.getTransactionTypeFromClause(testData.TRANSFER_CLAUSE));
98
+ });
99
+ it('is valid public key', function () {
100
+ // with 0x prefix
101
+ should_1.default.equal(false, utils_1.default.isValidPublicKey('0x9b4e96086d111500259f9b38680b0509a405c1904da18976455a20c691d3bb07'));
102
+ // without 0x prefix
103
+ should_1.default.equal(true, utils_1.default.isValidPublicKey('029831d82c36a58a69b31177b73d852e260a37769561450dab6ed234d5d965ef0b'));
104
+ });
105
+ });
106
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxvREFBNEI7QUFFNUIsMkRBQTZDO0FBQzdDLGdFQUF3QztBQUN4QyxtREFBdUQ7QUFFdkQsUUFBUSxDQUFDLHNCQUFzQixFQUFFO0lBQy9CLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRTtRQUN6QixFQUFFLENBQUMsNENBQTRDLEVBQUU7WUFDL0MsS0FBSyxNQUFNLE9BQU8sSUFBSSxRQUFRLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN4RCxnQkFBTSxDQUFDLEtBQUssQ0FBQyxlQUFLLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3BELENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQywyQ0FBMkMsRUFBRTtZQUM5QyxLQUFLLE1BQU0sT0FBTyxJQUFJLFFBQVEsQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztnQkFDMUQsZ0JBQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsZUFBSyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO2dCQUN6RCxnQkFBTSxDQUFDLEtBQUssQ0FBQyxlQUFLLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3JELENBQUM7WUFDRCx3RUFBd0U7WUFDeEUsZ0JBQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsZUFBSyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQzNELGtFQUFrRTtZQUNsRSxnQkFBTSxDQUFDLEtBQUssQ0FBQyxlQUFLLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFD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SyxDQUFDLDRCQUE0QixDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO0lBQ25HLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLHFCQUFxQixFQUFFO1FBQ3hCLGlCQUFpQjtRQUNqQixnQkFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsZUFBSyxDQUFDLGdCQUFnQixDQUFDLG9FQUFvRSxDQUFDLENBQUMsQ0FBQztRQUNsSCxvQkFBb0I7UUFDcEIsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLGVBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxvRUFBb0UsQ0FBQyxDQUFDLENBQUM7SUFDbkgsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBzaG91bGQgZnJvbSAnc2hvdWxkJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uIGFzIFZldFRyYW5zYWN0aW9uIH0gZnJvbSAnQHZlY2hhaW4vc2RrLWNvcmUnO1xuaW1wb3J0ICogYXMgdGVzdERhdGEgZnJvbSAnLi4vcmVzb3VyY2VzL3ZldCc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vLi4vc3JjL2xpYi91dGlscyc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5cbmRlc2NyaWJlKCdWZWNoYWluIHV0aWwgbGlicmFyeScsIGZ1bmN0aW9uICgpIHtcbiAgZGVzY3JpYmUoJ2lzVmFsaWRBZGRyZXNzJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgc3VjY2VlZCB0byB2YWxpZGF0ZSByYXcgdHJhbnNhY3RvaW4nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKGNvbnN0IGFkZHJlc3Mgb2YgdGVzdERhdGEuYWRkcmVzc2VzLnZhbGlkQWRkcmVzc2VzKSB7XG4gICAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzKSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdG8gdmFsaWRhdGUgaW52YWxpZCBhZGRyZXNzZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKGNvbnN0IGFkZHJlc3Mgb2YgdGVzdERhdGEuYWRkcmVzc2VzLmludmFsaWRBZGRyZXNzZXMpIHtcbiAgICAgICAgc2hvdWxkLmRvZXNOb3RUaHJvdygoKSA9PiB1dGlscy5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzKSk7XG4gICAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzKSwgZmFsc2UpO1xuICAgICAgfVxuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBUZXN0aW5nIGZvciBtaXNzaW5nIHBhcmFtLCBzaG91bGQgbm90IHRocm93IGFuIGVycm9yXG4gICAgICBzaG91bGQuZG9lc05vdFRocm93KCgpID0+IHV0aWxzLmlzVmFsaWRBZGRyZXNzKHVuZGVmaW5lZCkpO1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBUZXN0aW5nIGZvciBtaXNzaW5nIHBhcmFtLCBzaG91bGQgcmV0dXJuIGZhbHNlXG4gICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZEFkZHJlc3ModW5kZWZpbmVkKSwgZmFsc2UpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnaXNWYWxpZEJsb2NrSWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBzdWNjZWVkIHRvIHZhbGlkYXRlIHZhbGlkIGJsb2NrIElEcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAoY29uc3QgYmxvY2tJZCBvZiB0ZXN0RGF0YS5ibG9ja0lkcy52YWxpZEJsb2NrSWRzKSB7XG4gICAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkQmxvY2tJZChibG9ja0lkKSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdG8gdmFsaWRhdGUgaW52YWxpZCBibG9jayBJRHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKGNvbnN0IGJsb2NrSWQgb2YgdGVzdERhdGEuYmxvY2tJZHMuaW52YWxpZEJsb2NrSWRzKSB7XG4gICAgICAgIHNob3VsZC5kb2VzTm90VGhyb3coKCkgPT4gdXRpbHMuaXNWYWxpZEJsb2NrSWQoYmxvY2tJZCkpO1xuICAgICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZEJsb2NrSWQoYmxvY2tJZCksIGZhbHNlKTtcbiAgICAgIH1cbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgVGVzdGluZyBmb3IgbWlzc2luZyBwYXJhbSwgc2hvdWxkIG5vdCB0aHJvdyBhbiBlcnJvclxuICAgICAgc2hvdWxkLmRvZXNOb3RUaHJvdygoKSA9PiB1dGlscy5pc1ZhbGlkQmxvY2tJZCh1bmRlZmluZWQpKTtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgVGVzdGluZyBmb3IgbWlzc2luZyBwYXJhbSwgc2hvdWxkIHJldHVybiBmYWxzZVxuICAgICAgc2hvdWxkLmVxdWFsKHV0aWxzLmlzVmFsaWRCbG9ja0lkKHVuZGVmaW5lZCksIGZhbHNlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2lzVmFsaWREZXNlcmlhbGl6ZScsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHN1Y2NlZWQgdG8gY29ycmVjdGx5IGRlc2VyaWFsaXplIHNwb25zb3JlZCBzaWduZWQgc2VyaWFsaXplZCB0cmFuc2FjdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHNpZ25lZFR4bjogVmV0VHJhbnNhY3Rpb24gPSB1dGlscy5kZXNlcmlhbGl6ZVRyYW5zYWN0aW9uKHRlc3REYXRhLlNQT05TT1JFRF9UUkFOU0FDVElPTik7XG4gICAgICBzaG91bGQuZXF1YWwoc2lnbmVkVHhuLm9yaWdpbi50b1N0cmluZygpLnRvTG93ZXJDYXNlKCksICcweDdjYTAwZTNiYzhhODM2MDI2YzI5MTdjNmM3YzZkMDQ5ZTUyMDk5ZGQnKTtcbiAgICAgIHNob3VsZC5lcXVhbChzaWduZWRUeG4uZ2FzUGF5ZXIudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLCAnMHhkYzlmZWYwYjg0YTBjY2YzZjFiZDRiODRlNDE3NDNlM2UwNTFhMDgzJyk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCBzdWNjZWVkIHRvIGNvcnJlY3RseSBkZXNlcmlhbGl6ZSB1bnNpZ25lZCBzZXJpYWxpemVkIHRyYW5zYWN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgc2lnbmVkVHhuOiBWZXRUcmFuc2FjdGlvbiA9IHV0aWxzLmRlc2VyaWFsaXplVHJhbnNhY3Rpb24odGVzdERhdGEuVU5TSUdORURfVFJBTlNBQ1RJT04pO1xuICAgICAgc2hvdWxkLmVxdWFsKHNpZ25lZFR4bi5pc1NpZ25lZCwgZmFsc2UpO1xuICAgICAgc2hvdWxkLmVxdWFsKHNpZ25lZFR4bi5ib2R5LmdhcywgMjEwMDApO1xuICAgICAgc2hvdWxkLmVxdWFsKHNpZ25lZFR4bi5ib2R5Lm5vbmNlLCA0MDA0OTYpO1xuICAgICAgc2hvdWxkLmVxdWFsKHNpZ25lZFR4bi5ib2R5LmV4cGlyYXRpb24sIDY0KTtcbiAgICAgIHNob3VsZC5lcXVhbChzaWduZWRUeG4uYm9keS5ibG9ja1JlZiwgJzB4MDE1MzZjZTllOWZiMDYzOCcpO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgZmFpbCB0byBkZXNlcmlhbGl6ZSBhbiBpbnZhbGlkIHNlcmlhbGl6ZWQgdHJhbnNhY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBzaG91bGQudGhyb3dzKCgpID0+IHV0aWxzLmRlc2VyaWFsaXplVHJhbnNhY3Rpb24odGVzdERhdGEuSU5WQUxJRF9UUkFOU0FDVElPTikpO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGdldCBjb3JyZWN0IHRyYW5zYWN0aW9uIHR5cGUgZnJvbSBjbGF1c2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgc2hvdWxkLmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5TZW5kLCB1dGlscy5nZXRUcmFuc2FjdGlvblR5cGVGcm9tQ2xhdXNlKHRlc3REYXRhLlRSQU5TRkVSX0NMQVVTRSkpO1xuICB9KTtcblxuICBpdCgnaXMgdmFsaWQgcHVibGljIGtleScsIGZ1bmN0aW9uICgpIHtcbiAgICAvLyB3aXRoIDB4IHByZWZpeFxuICAgIHNob3VsZC5lcXVhbChmYWxzZSwgdXRpbHMuaXNWYWxpZFB1YmxpY0tleSgnMHg5YjRlOTYwODZkMTExNTAwMjU5ZjliMzg2ODBiMDUwOWE0MDVjMTkwNGRhMTg5NzY0NTVhMjBjNjkxZDNiYjA3JykpO1xuICAgIC8vIHdpdGhvdXQgMHggcHJlZml4XG4gICAgc2hvdWxkLmVxdWFsKHRydWUsIHV0aWxzLmlzVmFsaWRQdWJsaWNLZXkoJzAyOTgzMWQ4MmMzNmE1OGE2OWIzMTE3N2I3M2Q4NTJlMjYwYTM3NzY5NTYxNDUwZGFiNmVkMjM0ZDVkOTY1ZWYwYicpKTtcbiAgfSk7XG59KTtcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=vet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vet.d.ts","sourceRoot":"","sources":["../../../test/unit/vet.ts"],"names":[],"mappings":""}