@bitgo-beta/sdk-coin-hbar 2.0.73-alpha.106 → 2.0.73-alpha.107
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/CHANGELOG.md +10 -0
- package/package.json +7 -7
- package/dist/src/hbar.d.ts +0 -168
- package/dist/src/hbar.d.ts.map +0 -1
- package/dist/src/hbar.js +0 -497
- package/dist/src/hbarToken.d.ts +0 -21
- package/dist/src/hbarToken.d.ts.map +0 -1
- package/dist/src/hbarToken.js +0 -58
- package/dist/src/index.d.ts +0 -6
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/index.js +0 -22
- package/dist/src/lib/coinTransferBuilder.d.ts +0 -47
- package/dist/src/lib/coinTransferBuilder.d.ts.map +0 -1
- package/dist/src/lib/coinTransferBuilder.js +0 -159
- package/dist/src/lib/constants.d.ts +0 -8
- package/dist/src/lib/constants.d.ts.map +0 -1
- package/dist/src/lib/constants.js +0 -12
- package/dist/src/lib/iface.d.ts +0 -50
- package/dist/src/lib/iface.d.ts.map +0 -1
- package/dist/src/lib/iface.js +0 -3
- package/dist/src/lib/index.d.ts +0 -10
- package/dist/src/lib/index.d.ts.map +0 -1
- package/dist/src/lib/index.js +0 -53
- package/dist/src/lib/keyPair.d.ts +0 -24
- package/dist/src/lib/keyPair.d.ts.map +0 -1
- package/dist/src/lib/keyPair.js +0 -70
- package/dist/src/lib/tokenAssociateBuilder.d.ts +0 -38
- package/dist/src/lib/tokenAssociateBuilder.d.ts.map +0 -1
- package/dist/src/lib/tokenAssociateBuilder.js +0 -107
- package/dist/src/lib/tokenTransferBuilder.d.ts +0 -25
- package/dist/src/lib/tokenTransferBuilder.d.ts.map +0 -1
- package/dist/src/lib/tokenTransferBuilder.js +0 -130
- package/dist/src/lib/transaction.d.ts +0 -106
- package/dist/src/lib/transaction.d.ts.map +0 -1
- package/dist/src/lib/transaction.js +0 -330
- package/dist/src/lib/transactionBuilder.d.ts +0 -111
- package/dist/src/lib/transactionBuilder.d.ts.map +0 -1
- package/dist/src/lib/transactionBuilder.js +0 -284
- package/dist/src/lib/transactionBuilderFactory.d.ts +0 -47
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +0 -1
- package/dist/src/lib/transactionBuilderFactory.js +0 -88
- package/dist/src/lib/transferBuilder.d.ts +0 -24
- package/dist/src/lib/transferBuilder.d.ts.map +0 -1
- package/dist/src/lib/transferBuilder.js +0 -55
- package/dist/src/lib/utils.d.ts +0 -210
- package/dist/src/lib/utils.d.ts.map +0 -1
- package/dist/src/lib/utils.js +0 -481
- package/dist/src/lib/walletInitializationBuilder.d.ts +0 -28
- package/dist/src/lib/walletInitializationBuilder.d.ts.map +0 -1
- package/dist/src/lib/walletInitializationBuilder.js +0 -124
- package/dist/src/register.d.ts +0 -3
- package/dist/src/register.d.ts.map +0 -1
- package/dist/src/register.js +0 -15
- package/dist/src/seedValidator.d.ts +0 -31
- package/dist/src/seedValidator.d.ts.map +0 -1
- package/dist/src/seedValidator.js +0 -103
- package/dist/src/thbar.d.ts +0 -14
- package/dist/src/thbar.d.ts.map +0 -1
- package/dist/src/thbar.js +0 -17
|
@@ -1,330 +0,0 @@
|
|
|
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
|
-
exports.Transaction = void 0;
|
|
40
|
-
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
41
|
-
const sha384_1 = require("@stablelib/sha384");
|
|
42
|
-
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
43
|
-
const nacl = __importStar(require("tweetnacl"));
|
|
44
|
-
const Long = __importStar(require("long"));
|
|
45
|
-
const proto_1 = require("@hashgraph/proto");
|
|
46
|
-
const utils_1 = require("./utils");
|
|
47
|
-
const constants_1 = require("./constants");
|
|
48
|
-
class Transaction extends sdk_core_1.BaseTransaction {
|
|
49
|
-
constructor(_coinConfig) {
|
|
50
|
-
super(_coinConfig);
|
|
51
|
-
}
|
|
52
|
-
/** @inheritdoc */
|
|
53
|
-
canSign(key) {
|
|
54
|
-
return true;
|
|
55
|
-
}
|
|
56
|
-
async sign(keyPair) {
|
|
57
|
-
const keys = keyPair.getKeys(true);
|
|
58
|
-
if (!keys.prv) {
|
|
59
|
-
throw new sdk_core_1.SigningError('Missing private key');
|
|
60
|
-
}
|
|
61
|
-
const secretKey = (0, sdk_core_1.toUint8Array)(keys.prv + keys.pub);
|
|
62
|
-
const signature = nacl.sign.detached(this._hederaTx.bodyBytes, secretKey);
|
|
63
|
-
this.addSignature((0, sdk_core_1.toHex)(signature), keyPair);
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* Add a signature to this transaction
|
|
67
|
-
*
|
|
68
|
-
* @param {string} signature - The signature to add, in string hex format
|
|
69
|
-
* @param {KeyPair} key - The key of the key that created the signature
|
|
70
|
-
*/
|
|
71
|
-
addSignature(signature, key) {
|
|
72
|
-
const sigPair = new proto_1.proto.SignaturePair();
|
|
73
|
-
sigPair.pubKeyPrefix = (0, sdk_core_1.toUint8Array)(key.getKeys(true).pub);
|
|
74
|
-
sigPair.ed25519 = (0, sdk_core_1.toUint8Array)(signature);
|
|
75
|
-
const sigMap = this._hederaTx.sigMap || new proto_1.proto.SignatureMap();
|
|
76
|
-
sigMap.sigPair.push(sigPair);
|
|
77
|
-
this._hederaTx.sigMap = sigMap;
|
|
78
|
-
this._signatures.push(signature);
|
|
79
|
-
}
|
|
80
|
-
/** @inheritdoc */
|
|
81
|
-
toBroadcastFormat() {
|
|
82
|
-
const encoder = proto_1.proto.Transaction;
|
|
83
|
-
return (0, sdk_core_1.toHex)(this.encode(this._hederaTx, encoder));
|
|
84
|
-
}
|
|
85
|
-
/**
|
|
86
|
-
* Sets this transaction payload
|
|
87
|
-
*
|
|
88
|
-
* @param rawTransaction
|
|
89
|
-
*/
|
|
90
|
-
fromRawTransaction(rawTransaction) {
|
|
91
|
-
const buffer = typeof rawTransaction === 'string' ? (0, sdk_core_1.toUint8Array)(rawTransaction) : rawTransaction;
|
|
92
|
-
this.bodyBytes(buffer);
|
|
93
|
-
switch (this.txBody.data) {
|
|
94
|
-
case constants_1.HederaTransactionTypes.Transfer:
|
|
95
|
-
this.setTransactionType(sdk_core_1.TransactionType.Send);
|
|
96
|
-
break;
|
|
97
|
-
case constants_1.HederaTransactionTypes.CreateAccount:
|
|
98
|
-
this.setTransactionType(sdk_core_1.TransactionType.WalletInitialization);
|
|
99
|
-
break;
|
|
100
|
-
case constants_1.HederaTransactionTypes.TokenAssociateToAccount:
|
|
101
|
-
this.setTransactionType(sdk_core_1.TransactionType.AssociatedTokenAccountInitialization);
|
|
102
|
-
break;
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
/** @inheritdoc */
|
|
106
|
-
toJson() {
|
|
107
|
-
const [acc, time] = this.getTxIdParts();
|
|
108
|
-
const result = {
|
|
109
|
-
id: acc + '@' + time,
|
|
110
|
-
hash: this.getTxHash(), // TODO: Update once hedera-sdk release this functionality BGA-284
|
|
111
|
-
data: (0, sdk_core_1.toHex)(this._hederaTx.bodyBytes),
|
|
112
|
-
fee: new bignumber_js_1.default(this._txBody.transactionFee.toString()).toNumber(),
|
|
113
|
-
from: acc,
|
|
114
|
-
startTime: time,
|
|
115
|
-
validDuration: this._txBody.transactionValidDuration.seconds.toString(),
|
|
116
|
-
node: (0, utils_1.stringifyAccountId)(this._txBody.nodeAccountID),
|
|
117
|
-
memo: this._txBody.memo,
|
|
118
|
-
};
|
|
119
|
-
switch (this._txBody.data) {
|
|
120
|
-
case constants_1.HederaTransactionTypes.Transfer:
|
|
121
|
-
result.instructionsData = {
|
|
122
|
-
type: constants_1.HederaTransactionTypes.Transfer,
|
|
123
|
-
params: this.getTransferData(),
|
|
124
|
-
};
|
|
125
|
-
result.to = result.instructionsData.params.recipients[0].address;
|
|
126
|
-
result.amount = result.instructionsData.params.recipients[0].amount;
|
|
127
|
-
break;
|
|
128
|
-
case constants_1.HederaTransactionTypes.TokenAssociateToAccount:
|
|
129
|
-
result.instructionsData = {
|
|
130
|
-
type: constants_1.HederaTransactionTypes.TokenAssociateToAccount,
|
|
131
|
-
params: this.getAccountAssociateData(),
|
|
132
|
-
};
|
|
133
|
-
break;
|
|
134
|
-
}
|
|
135
|
-
return result;
|
|
136
|
-
}
|
|
137
|
-
/**
|
|
138
|
-
* Get the recipient account and the amount
|
|
139
|
-
* transferred on this transaction
|
|
140
|
-
*
|
|
141
|
-
* @returns { tokenName, Recipient[]} is object consisting of tokenName if it's a token transfer and recipients consisting
|
|
142
|
-
* the recipient address, the transfer amount, and the token name for token transfer
|
|
143
|
-
*/
|
|
144
|
-
getTransferData() {
|
|
145
|
-
const [acc] = this.getTxIdParts();
|
|
146
|
-
const transferData = [];
|
|
147
|
-
const tokenTransfers = this._txBody.cryptoTransfer?.tokenTransfers || [];
|
|
148
|
-
const transfers = tokenTransfers[0]?.transfers || this._txBody.cryptoTransfer?.transfers?.accountAmounts || [];
|
|
149
|
-
const tokenName = tokenTransfers.length
|
|
150
|
-
? (0, utils_1.getHederaTokenNameFromId)((0, utils_1.stringifyTokenId)(tokenTransfers[0].token))?.name
|
|
151
|
-
: undefined;
|
|
152
|
-
transfers.forEach((transfer) => {
|
|
153
|
-
const amount = Long.fromValue(transfer.amount);
|
|
154
|
-
if (amount.isPositive() && (0, utils_1.stringifyAccountId)(transfer.accountID) !== acc) {
|
|
155
|
-
transferData.push({
|
|
156
|
-
address: (0, utils_1.stringifyAccountId)(transfer.accountID),
|
|
157
|
-
amount: amount.toString(),
|
|
158
|
-
...(tokenTransfers.length && {
|
|
159
|
-
tokenName: tokenName,
|
|
160
|
-
}),
|
|
161
|
-
});
|
|
162
|
-
}
|
|
163
|
-
});
|
|
164
|
-
return {
|
|
165
|
-
...(tokenTransfers.length && {
|
|
166
|
-
tokenName: tokenName,
|
|
167
|
-
}),
|
|
168
|
-
recipients: transferData,
|
|
169
|
-
};
|
|
170
|
-
}
|
|
171
|
-
/**
|
|
172
|
-
* Get the recipient account and the amount
|
|
173
|
-
* transferred on this transaction
|
|
174
|
-
*
|
|
175
|
-
* @returns { accountId: string; tokenNames[]} is an object consisting of accountId for the token owner
|
|
176
|
-
* and list of tokenNames that will be enabled
|
|
177
|
-
*/
|
|
178
|
-
getAccountAssociateData() {
|
|
179
|
-
const tokens = this._txBody.tokenAssociate.tokens || [];
|
|
180
|
-
return {
|
|
181
|
-
accountId: (0, utils_1.stringifyAccountId)(this._txBody.tokenAssociate.account),
|
|
182
|
-
tokenNames: tokens.map((token) => (0, utils_1.getHederaTokenNameFromId)((0, utils_1.stringifyTokenId)(token)).name),
|
|
183
|
-
};
|
|
184
|
-
}
|
|
185
|
-
// region getters & setters
|
|
186
|
-
get txBody() {
|
|
187
|
-
return this._txBody;
|
|
188
|
-
}
|
|
189
|
-
get hederaTx() {
|
|
190
|
-
return this._hederaTx;
|
|
191
|
-
}
|
|
192
|
-
/**
|
|
193
|
-
* Sets this transaction body components
|
|
194
|
-
*
|
|
195
|
-
* @param {proto.Transaction} tx - Body Transaction
|
|
196
|
-
*/
|
|
197
|
-
body(tx) {
|
|
198
|
-
this._txBody = proto_1.proto.TransactionBody.decode(tx.bodyBytes);
|
|
199
|
-
this._hederaTx = tx;
|
|
200
|
-
this.loadInputsAndOutputs();
|
|
201
|
-
}
|
|
202
|
-
/**
|
|
203
|
-
* Set the transaction type
|
|
204
|
-
*
|
|
205
|
-
* @param {TransactionType} transactionType - The transaction type to be set
|
|
206
|
-
*/
|
|
207
|
-
setTransactionType(transactionType) {
|
|
208
|
-
this._type = transactionType;
|
|
209
|
-
}
|
|
210
|
-
/**
|
|
211
|
-
* Decode previous signatures from the inner hedera transaction
|
|
212
|
-
* and save them into the base transaction signature list.
|
|
213
|
-
*/
|
|
214
|
-
loadPreviousSignatures() {
|
|
215
|
-
if (this._hederaTx.sigMap && this._hederaTx.sigMap.sigPair) {
|
|
216
|
-
const sigPairs = this._hederaTx.sigMap.sigPair;
|
|
217
|
-
sigPairs.forEach((sigPair) => {
|
|
218
|
-
const signature = sigPair.ed25519;
|
|
219
|
-
if (signature) {
|
|
220
|
-
this._signatures.push((0, sdk_core_1.toHex)(signature));
|
|
221
|
-
}
|
|
222
|
-
});
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
/**
|
|
226
|
-
* Load the input and output data on this transaction using the transaction json
|
|
227
|
-
* if there are outputs. For transactions without outputs (e.g. wallet initializations),
|
|
228
|
-
* this function will not do anything
|
|
229
|
-
*/
|
|
230
|
-
loadInputsAndOutputs() {
|
|
231
|
-
const txJson = this.toJson();
|
|
232
|
-
const instruction = txJson.instructionsData;
|
|
233
|
-
const outputs = [];
|
|
234
|
-
const inputs = [];
|
|
235
|
-
switch (instruction?.type) {
|
|
236
|
-
case constants_1.HederaTransactionTypes.Transfer:
|
|
237
|
-
let totalAmount = new bignumber_js_1.default(0);
|
|
238
|
-
instruction.params.recipients.forEach((recipient) => {
|
|
239
|
-
totalAmount = totalAmount.plus(recipient.amount);
|
|
240
|
-
outputs.push({
|
|
241
|
-
address: recipient.address,
|
|
242
|
-
value: recipient.amount,
|
|
243
|
-
coin: recipient.tokenName || this._coinConfig.name,
|
|
244
|
-
});
|
|
245
|
-
});
|
|
246
|
-
inputs.push({
|
|
247
|
-
address: txJson.from,
|
|
248
|
-
value: totalAmount.toString(),
|
|
249
|
-
coin: instruction.params.tokenName || this._coinConfig.name,
|
|
250
|
-
});
|
|
251
|
-
break;
|
|
252
|
-
case constants_1.HederaTransactionTypes.TokenAssociateToAccount:
|
|
253
|
-
instruction.params.tokenNames.forEach((tokenName) => {
|
|
254
|
-
const tokenEntry = {
|
|
255
|
-
address: instruction.params.accountId,
|
|
256
|
-
value: '0',
|
|
257
|
-
coin: tokenName,
|
|
258
|
-
};
|
|
259
|
-
inputs.push(tokenEntry);
|
|
260
|
-
outputs.push(tokenEntry);
|
|
261
|
-
});
|
|
262
|
-
break;
|
|
263
|
-
}
|
|
264
|
-
this._inputs = inputs;
|
|
265
|
-
this._outputs = outputs;
|
|
266
|
-
}
|
|
267
|
-
/**
|
|
268
|
-
* Sets this transaction body components
|
|
269
|
-
*
|
|
270
|
-
* @param {Uint8Array} bytes - Encoded body transaction
|
|
271
|
-
*/
|
|
272
|
-
bodyBytes(bytes) {
|
|
273
|
-
this.body(proto_1.proto.Transaction.decode(bytes));
|
|
274
|
-
}
|
|
275
|
-
// endregion
|
|
276
|
-
// region helpers
|
|
277
|
-
/**
|
|
278
|
-
* Returns this hedera transaction id components in a readable format
|
|
279
|
-
*
|
|
280
|
-
* @returns {[string, string]} - Transaction id parts [<account id>, <startTime in seconds>]
|
|
281
|
-
*/
|
|
282
|
-
getTxIdParts() {
|
|
283
|
-
if (this._txBody &&
|
|
284
|
-
this._txBody.transactionID &&
|
|
285
|
-
this._txBody.transactionID.accountID &&
|
|
286
|
-
this._txBody.transactionID.transactionValidStart) {
|
|
287
|
-
return [
|
|
288
|
-
(0, utils_1.stringifyAccountId)(this._txBody.transactionID.accountID),
|
|
289
|
-
(0, utils_1.stringifyTxTime)(this._txBody.transactionID.transactionValidStart),
|
|
290
|
-
];
|
|
291
|
-
}
|
|
292
|
-
throw new Error('Missing transaction id information');
|
|
293
|
-
}
|
|
294
|
-
/**
|
|
295
|
-
* Returns this transaction hash
|
|
296
|
-
*
|
|
297
|
-
* @returns {string} - The transaction hash
|
|
298
|
-
*/
|
|
299
|
-
getTxHash() {
|
|
300
|
-
if (!this._txBody.nodeAccountID) {
|
|
301
|
-
throw new Error('Missing transaction node id');
|
|
302
|
-
}
|
|
303
|
-
const _signedTx = new proto_1.proto.SignedTransaction();
|
|
304
|
-
_signedTx.sigMap = this._hederaTx.sigMap;
|
|
305
|
-
_signedTx.bodyBytes = this._hederaTx.bodyBytes;
|
|
306
|
-
const encoder = proto_1.proto.SignedTransaction;
|
|
307
|
-
return this.sha(this.encode(_signedTx, encoder));
|
|
308
|
-
}
|
|
309
|
-
/**
|
|
310
|
-
* Encode an object using the given encoder class
|
|
311
|
-
*
|
|
312
|
-
* @param {proto} obj - The object to be encoded, must be in proto namespace
|
|
313
|
-
* @param encoder - Object encoder
|
|
314
|
-
* @returns {Uint8Array} - Encoded object byte array
|
|
315
|
-
*/
|
|
316
|
-
encode(obj, encoder) {
|
|
317
|
-
return encoder.encode(obj).finish();
|
|
318
|
-
}
|
|
319
|
-
/**
|
|
320
|
-
* Returns a sha-384 hash
|
|
321
|
-
*
|
|
322
|
-
* @param {Uint8Array} bytes - Bytes to be hashed
|
|
323
|
-
* @returns {string} - The resulting hash string
|
|
324
|
-
*/
|
|
325
|
-
sha(bytes) {
|
|
326
|
-
return (0, sdk_core_1.toHex)((0, sha384_1.hash)(bytes));
|
|
327
|
-
}
|
|
328
|
-
}
|
|
329
|
-
exports.Transaction = Transaction;
|
|
330
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBLG1EQUEySDtBQUMzSCw4Q0FBeUM7QUFDekMsZ0VBQXFDO0FBRXJDLGdEQUFrQztBQUNsQywyQ0FBNkI7QUFDN0IsNENBQXlDO0FBRXpDLG1DQUEwRztBQUUxRywyQ0FBcUQ7QUFFckQsTUFBYSxXQUFZLFNBQVEsMEJBQWU7SUFLOUMsWUFBWSxXQUFpQztRQUMzQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDckIsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixPQUFPLENBQUMsR0FBWTtRQUNsQixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQWdCO1FBQ3pCLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNkLE1BQU0sSUFBSSx1QkFBWSxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDaEQsQ0FBQztRQUNELE1BQU0sU0FBUyxHQUFHLElBQUEsdUJBQVksRUFBQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNwRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUMxRSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUEsZ0JBQUssRUFBQyxTQUFTLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxZQUFZLENBQUMsU0FBaUIsRUFBRSxHQUFZ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QUFNLElBQUksS0FBSyxDQUFDLDZCQUE2QixDQUFDLENBQUM7UUFDakQsQ0FBQztRQUNELE1BQU0sU0FBUyxHQUFHLElBQUksYUFBSyxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDaEQsU0FBUyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQztRQUN6QyxTQUFTLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDO1FBRS9DLE1BQU0sT0FBTyxHQUFHLGFBQUssQ0FBQyxpQkFBaUIsQ0FBQztRQUN4QyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ssTUFBTSxDQUNaLEdBQU0sRUFDTixPQUFtQztRQUVuQyxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDdEMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsR0FBRyxDQUFDLEtBQWlCO1FBQ25CLE9BQU8sSUFBQSxnQkFBSyxFQUFDLElBQUEsYUFBSSxFQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDNUIsQ0FBQztDQUNGO0FBN1RELGtDQTZUQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IEJhc2VLZXksIEJhc2VUcmFuc2FjdGlvbiwgRW50cnksIFNpZ25pbmdFcnJvciwgdG9IZXgsIHRvVWludDhBcnJheSwgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgaGFzaCB9IGZyb20gJ0BzdGFibGVsaWIvc2hhMzg0JztcbmltcG9ydCBCaWdOdW1iZXIgZnJvbSAnYmlnbnVtYmVyLmpzJztcbmltcG9ydCB7IFdyaXRlciB9IGZyb20gJ3Byb3RvYnVmanMnO1xuaW1wb3J0ICogYXMgbmFjbCBmcm9tICd0d2VldG5hY2wnO1xuaW1wb3J0ICogYXMgTG9uZyBmcm9tICdsb25nJztcbmltcG9ydCB7IHByb3RvIH0gZnJvbSAnQGhhc2hncmFwaC9wcm90byc7XG5pbXBvcnQgeyBUeERhdGEsIFJlY2lwaWVudCB9IGZyb20gJy4vaWZhY2UnO1xuaW1wb3J0IHsgc3RyaW5naWZ5QWNjb3VudElkLCBzdHJpbmdpZnlUeFRpbWUsIHN0cmluZ2lmeVRva2VuSWQsIGdldEhlZGVyYVRva2VuTmFtZUZyb21JZCB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgS2V5UGFpciB9IGZyb20gJy4vJztcbmltcG9ydCB7IEhlZGVyYVRyYW5zYWN0aW9uVHlwZXMgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5cbmV4cG9ydCBjbGFzcyBUcmFuc2FjdGlvbiBleHRlbmRzIEJhc2VUcmFuc2FjdGlvbiB7XG4gIHByaXZhdGUgX2hlZGVyYVR4OiBwcm90by5UcmFuc2FjdGlvbjtcbiAgcHJpdmF0ZSBfdHhCb2R5OiBwcm90by5UcmFuc2FjdGlvbkJvZHk7XG4gIHByb3RlY3RlZCBfdHlwZTogVHJhbnNhY3Rpb25UeXBlO1xuXG4gIGNvbnN0cnVjdG9yKF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKF9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBjYW5TaWduKGtleTogQmFzZUtleSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgYXN5bmMgc2lnbihrZXlQYWlyOiBLZXlQYWlyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qga2V5cyA9IGtleVBhaXIuZ2V0S2V5cyh0cnVlKTtcbiAgICBpZiAoIWtleXMucHJ2KSB7XG4gICAgICB0aHJvdyBuZXcgU2lnbmluZ0Vycm9yKCdNaXNzaW5nIHByaXZhdGUga2V5Jyk7XG4gICAgfVxuICAgIGNvbnN0IHNlY3JldEtleSA9IHRvVWludDhBcnJheShrZXlzLnBydiArIGtleXMucHViKTtcbiAgICBjb25zdCBzaWduYXR1cmUgPSBuYWNsLnNpZ24uZGV0YWNoZWQodGhpcy5faGVkZXJhVHguYm9keUJ5dGVzLCBzZWNyZXRLZXkpO1xuICAgIHRoaXMuYWRkU2lnbmF0dXJlKHRvSGV4KHNpZ25hdHVyZSksIGtleVBhaXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIHNpZ25hdHVyZSB0byB0aGlzIHRyYW5zYWN0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzaWduYXR1cmUgLSBUaGUgc2lnbmF0dXJlIHRvIGFkZCwgaW4gc3RyaW5nIGhleCBmb3JtYXRcbiAgICogQHBhcmFtIHtLZXlQYWlyfSBrZXkgLSBUaGUga2V5IG9mIHRoZSBrZXkgdGhhdCBjcmVhdGVkIHRoZSBzaWduYXR1cmVcbiAgICovXG4gIGFkZFNpZ25hdHVyZShzaWduYXR1cmU6IHN0cmluZywga2V5OiBLZXlQYWlyKTogdm9pZCB7XG4gICAgY29uc3Qgc2lnUGFpciA9IG5ldyBwcm90by5TaWduYXR1cmVQYWlyKCk7XG4gICAgc2lnUGFpci5wdWJLZXlQcmVmaXggPSB0b1VpbnQ4QXJyYXkoa2V5LmdldEtleXModHJ1ZSkucHViKTtcbiAgICBzaWdQYWlyLmVkMjU1MTkgPSB0b1VpbnQ4QXJyYXkoc2lnbmF0dXJlKTtcblxuICAgIGNvbnN0IHNpZ01hcCA9IHRoaXMuX2hlZGVyYVR4LnNpZ01hcCB8fCBuZXcgcHJvdG8uU2lnbmF0dXJlTWFwKCk7XG4gICAgc2lnTWFwLnNpZ1BhaXIhLnB1c2goc2lnUGFpcik7XG4gICAgdGhpcy5faGVkZXJhVHguc2lnTWFwID0gc2lnTWFwO1xuICAgIHRoaXMuX3NpZ25hdHVyZXMucHVzaChzaWduYXR1cmUpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHRvQnJvYWRjYXN0Rm9ybWF0KCk6IHN0cmluZyB7XG4gICAgY29uc3QgZW5jb2RlciA9IHByb3RvLlRyYW5zYWN0aW9uO1xuICAgIHJldHVybiB0b0hleCh0aGlzLmVuY29kZSh0aGlzLl9oZWRlcmFUeCwgZW5jb2RlcikpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhpcyB0cmFuc2FjdGlvbiBwYXlsb2FkXG4gICAqXG4gICAqIEBwYXJhbSByYXdUcmFuc2FjdGlvblxuICAgKi9cbiAgZnJvbVJhd1RyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uOiBVaW50OEFycmF5IHwgc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgYnVmZmVyID0gdHlwZW9mIHJhd1RyYW5zYWN0aW9uID09PSAnc3RyaW5nJyA/IHRvVWludDhBcnJheShyYXdUcmFuc2FjdGlvbikgOiByYXdUcmFuc2FjdGlvbjtcbiAgICB0aGlzLmJvZHlCeXRlcyhidWZmZXIpO1xuICAgIHN3aXRjaCAodGhpcy50eEJvZHkuZGF0YSkge1xuICAgICAgY2FzZSBIZWRlcmFUcmFuc2FjdGlvblR5cGVzLlRyYW5zZmVyOlxuICAgICAgICB0aGlzLnNldFRyYW5zYWN0aW9uVHlwZShUcmFuc2FjdGlvblR5cGUuU2VuZCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBIZWRlcmFUcmFuc2FjdGlvblR5cGVzLkNyZWF0ZUFjY291bnQ6XG4gICAgICAgIHRoaXMuc2V0VHJhbnNhY3Rpb25UeXBlKFRyYW5zYWN0aW9uVHlwZS5XYWxsZXRJbml0aWFsaXphdGlvbik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBIZWRlcmFUcmFuc2FjdGlvblR5cGVzLlRva2VuQXNzb2NpYXRlVG9BY2NvdW50OlxuICAgICAgICB0aGlzLnNldFRyYW5zYWN0aW9uVHlwZShUcmFuc2FjdGlvblR5cGUuQXNzb2NpYXRlZFRva2VuQWNjb3VudEluaXRpYWxpemF0aW9uKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHRvSnNvbigpOiBUeERhdGEge1xuICAgIGNvbnN0IFthY2MsIHRpbWVdID0gdGhpcy5nZXRUeElkUGFydHMoKTtcbiAgICBjb25zdCByZXN1bHQ6IFR4RGF0YSA9IHtcbiAgICAgIGlkOiBhY2MgKyAnQCcgKyB0aW1lLFxuICAgICAgaGFzaDogdGhpcy5nZXRUeEhhc2goKSwgLy8gVE9ETzogVXBkYXRlIG9uY2UgaGVkZXJhLXNkayByZWxlYXNlIHRoaXMgZnVuY3Rpb25hbGl0eSBCR0EtMjg0XG4gICAgICBkYXRhOiB0b0hleCh0aGlzLl9oZWRlcmFUeC5ib2R5Qnl0ZXMpLFxuICAgICAgZmVlOiBuZXcgQmlnTnVtYmVyKHRoaXMuX3R4Qm9keS50cmFuc2FjdGlvbkZlZSEudG9TdHJpbmcoKSkudG9OdW1iZXIoKSxcbiAgICAgIGZyb206IGFjYyxcbiAgICAgIHN0YXJ0VGltZTogdGltZSxcbiAgICAgIHZhbGlkRHVyYXRpb246IHRoaXMuX3R4Qm9keS50cmFuc2FjdGlvblZhbGlkRHVyYXRpb24hLnNlY29uZHMhLnRvU3RyaW5nKCksXG4gICAgICBub2RlOiBzdHJpbmdpZnlBY2NvdW50SWQodGhpcy5fdHhCb2R5Lm5vZGVBY2NvdW50SUQhKSxcbiAgICAgIG1lbW86IHRoaXMuX3R4Qm9keS5tZW1vLFxuICAgIH07XG5cbiAgICBzd2l0Y2ggKHRoaXMuX3R4Qm9keS5kYXRhKSB7XG4gICAgICBjYXNlIEhlZGVyYVRyYW5zYWN0aW9uVHlwZXMuVHJhbnNmZXI6XG4gICAgICAgIHJlc3VsdC5pbnN0cnVjdGlvbnNEYXRhID0ge1xuICAgICAgICAgIHR5cGU6IEhlZGVyYVRyYW5zYWN0aW9uVHlwZXMuVHJhbnNmZXIsXG4gICAgICAgICAgcGFyYW1zOiB0aGlzLmdldFRyYW5zZmVyRGF0YSgpLFxuICAgICAgICB9O1xuICAgICAgICByZXN1bHQudG8gPSByZXN1bHQuaW5zdHJ1Y3Rpb25zRGF0YS5wYXJhbXMucmVjaXBpZW50c1swXS5hZGRyZXNzO1xuICAgICAgICByZXN1bHQuYW1vdW50ID0gcmVzdWx0Lmluc3RydWN0aW9uc0RhdGEucGFyYW1zLnJlY2lwaWVudHNbMF0uYW1vdW50O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgSGVkZXJhVHJhbnNhY3Rpb25UeXBlcy5Ub2tlbkFzc29jaWF0ZVRvQWNjb3VudDpcbiAgICAgICAgcmVzdWx0Lmluc3RydWN0aW9uc0RhdGEgPSB7XG4gICAgICAgICAgdHlwZTogSGVkZXJhVHJhbnNhY3Rpb25UeXBlcy5Ub2tlbkFzc29jaWF0ZVRvQWNjb3VudCxcbiAgICAgICAgICBwYXJhbXM6IHRoaXMuZ2V0QWNjb3VudEFzc29jaWF0ZURhdGEoKSxcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHJlY2lwaWVudCBhY2NvdW50IGFuZCB0aGUgYW1vdW50XG4gICAqIHRyYW5zZmVycmVkIG9uIHRoaXMgdHJhbnNhY3Rpb25cbiAgICpcbiAgICogQHJldHVybnMgeyB0b2tlbk5hbWUsIFJlY2lwaWVudFtdfSBpcyBvYmplY3QgY29uc2lzdGluZyBvZiB0b2tlbk5hbWUgaWYgaXQncyBhIHRva2VuIHRyYW5zZmVyIGFuZCByZWNpcGllbnRzIGNvbnNpc3RpbmdcbiAgICogIHRoZSByZWNpcGllbnQgYWRkcmVzcywgdGhlIHRyYW5zZmVyIGFtb3VudCwgYW5kIHRoZSB0b2tlbiBuYW1lIGZvciB0b2tlbiB0cmFuc2ZlclxuICAgKi9cbiAgcHJpdmF0ZSBnZXRUcmFuc2ZlckRhdGEoKTogeyB0b2tlbk5hbWU/OiBzdHJpbmc7IHJlY2lwaWVudHM6IFJlY2lwaWVudFtdIH0ge1xuICAgIGNvbnN0IFthY2NdID0gdGhpcy5nZXRUeElkUGFydHMoKTtcbiAgICBjb25zdCB0cmFuc2ZlckRhdGE6IFJlY2lwaWVudFtdID0gW107XG4gICAgY29uc3QgdG9rZW5UcmFuc2ZlcnM6IHByb3RvLklUb2tlblRyYW5zZmVyTGlzdFtdID0gdGhpcy5fdHhCb2R5LmNyeXB0b1RyYW5zZmVyPy50b2tlblRyYW5zZmVycyB8fCBbXTtcbiAgICBjb25zdCB0cmFuc2ZlcnM6IHByb3RvLklBY2NvdW50QW1vdW50W10gPVxuICAgICAgdG9rZW5UcmFuc2ZlcnNbMF0/LnRyYW5zZmVycyB8fCB0aGlzLl90eEJvZHkuY3J5cHRvVHJhbnNmZXI/LnRyYW5zZmVycz8uYWNjb3VudEFtb3VudHMgfHwgW107XG4gICAgY29uc3QgdG9rZW5OYW1lID0gdG9rZW5UcmFuc2ZlcnMubGVuZ3RoXG4gICAgICA/IGdldEhlZGVyYVRva2VuTmFtZUZyb21JZChzdHJpbmdpZnlUb2tlbklkKHRva2VuVHJhbnNmZXJzWzBdLnRva2VuISkpPy5uYW1lXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIHRyYW5zZmVycy5mb3JFYWNoKCh0cmFuc2ZlcikgPT4ge1xuICAgICAgY29uc3QgYW1vdW50ID0gTG9uZy5mcm9tVmFsdWUodHJhbnNmZXIuYW1vdW50ISk7XG4gICAgICBpZiAoYW1vdW50LmlzUG9zaXRpdmUoKSAmJiBzdHJpbmdpZnlBY2NvdW50SWQodHJhbnNmZXIuYWNjb3VudElEISkgIT09IGFjYykge1xuICAgICAgICB0cmFuc2ZlckRhdGEucHVzaCh7XG4gICAgICAgICAgYWRkcmVzczogc3RyaW5naWZ5QWNjb3VudElkKHRyYW5zZmVyLmFjY291bnRJRCEpLFxuICAgICAgICAgIGFtb3VudDogYW1vdW50LnRvU3RyaW5nKCksXG4gICAgICAgICAgLi4uKHRva2VuVHJhbnNmZXJzLmxlbmd0aCAmJiB7XG4gICAgICAgICAgICB0b2tlbk5hbWU6IHRva2VuTmFtZSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uKHRva2VuVHJhbnNmZXJzLmxlbmd0aCAmJiB7XG4gICAgICAgIHRva2VuTmFtZTogdG9rZW5OYW1lLFxuICAgICAgfSksXG4gICAgICByZWNpcGllbnRzOiB0cmFuc2ZlckRhdGEsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHJlY2lwaWVudCBhY2NvdW50IGFuZCB0aGUgYW1vdW50XG4gICAqIHRyYW5zZmVycmVkIG9uIHRoaXMgdHJhbnNhY3Rpb25cbiAgICpcbiAgICogQHJldHVybnMgeyBhY2NvdW50SWQ6IHN0cmluZzsgdG9rZW5OYW1lc1tdfSBpcyBhbiBvYmplY3QgY29uc2lzdGluZyBvZiBhY2NvdW50SWQgZm9yIHRoZSB0b2tlbiBvd25lclxuICAgKiAgYW5kIGxpc3Qgb2YgdG9rZW5OYW1lcyB0aGF0IHdpbGwgYmUgZW5hYmxlZFxuICAgKi9cbiAgcHJpdmF0ZSBnZXRBY2NvdW50QXNzb2NpYXRlRGF0YSgpOiB7IGFjY291bnRJZDogc3RyaW5nOyB0b2tlbk5hbWVzOiBzdHJpbmdbXSB9IHtcbiAgICBjb25zdCB0b2tlbnM6IHByb3RvLklUb2tlbklEW10gPSB0aGlzLl90eEJvZHkudG9rZW5Bc3NvY2lhdGUhLnRva2VucyB8fCBbXTtcbiAgICByZXR1cm4ge1xuICAgICAgYWNjb3VudElkOiBzdHJpbmdpZnlBY2NvdW50SWQodGhpcy5fdHhCb2R5LnRva2VuQXNzb2NpYXRlIS5hY2NvdW50ISksXG4gICAgICB0b2tlbk5hbWVzOiB0b2tlbnMubWFwKCh0b2tlbjogcHJvdG8uSVRva2VuSUQpID0+IGdldEhlZGVyYVRva2VuTmFtZUZyb21JZChzdHJpbmdpZnlUb2tlbklkKHRva2VuKSkhLm5hbWUpLFxuICAgIH07XG4gIH1cblxuICAvLyByZWdpb24gZ2V0dGVycyAmIHNldHRlcnNcbiAgZ2V0IHR4Qm9keSgpOiBwcm90by5UcmFuc2FjdGlvbkJvZHkge1xuICAgIHJldHVybiB0aGlzLl90eEJvZHk7XG4gIH1cblxuICBnZXQgaGVkZXJhVHgoKTogcHJvdG8uVHJhbnNhY3Rpb24ge1xuICAgIHJldHVybiB0aGlzLl9oZWRlcmFUeDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoaXMgdHJhbnNhY3Rpb24gYm9keSBjb21wb25lbnRzXG4gICAqXG4gICAqIEBwYXJhbSB7cHJvdG8uVHJhbnNhY3Rpb259IHR4IC0gQm9keSBUcmFuc2FjdGlvblxuICAgKi9cbiAgYm9keSh0eDogcHJvdG8uVHJhbnNhY3Rpb24pOiB2b2lkIHtcbiAgICB0aGlzLl90eEJvZHkgPSBwcm90by5UcmFuc2FjdGlvbkJvZHkuZGVjb2RlKHR4LmJvZHlCeXRlcyk7XG4gICAgdGhpcy5faGVkZXJhVHggPSB0eDtcbiAgICB0aGlzLmxvYWRJbnB1dHNBbmRPdXRwdXRzKCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSB0cmFuc2FjdGlvbiB0eXBlXG4gICAqXG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb25UeXBlfSB0cmFuc2FjdGlvblR5cGUgLSBUaGUgdHJhbnNhY3Rpb24gdHlwZSB0byBiZSBzZXRcbiAgICovXG4gIHNldFRyYW5zYWN0aW9uVHlwZSh0cmFuc2FjdGlvblR5cGU6IFRyYW5zYWN0aW9uVHlwZSk6IHZvaWQge1xuICAgIHRoaXMuX3R5cGUgPSB0cmFuc2FjdGlvblR5cGU7XG4gIH1cblxuICAvKipcbiAgICogRGVjb2RlIHByZXZpb3VzIHNpZ25hdHVyZXMgZnJvbSB0aGUgaW5uZXIgaGVkZXJhIHRyYW5zYWN0aW9uXG4gICAqIGFuZCBzYXZlIHRoZW0gaW50byB0aGUgYmFzZSB0cmFuc2FjdGlvbiBzaWduYXR1cmUgbGlzdC5cbiAgICovXG4gIGxvYWRQcmV2aW91c1NpZ25hdHVyZXMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2hlZGVyYVR4LnNpZ01hcCAmJiB0aGlzLl9oZWRlcmFUeC5zaWdNYXAuc2lnUGFpcikge1xuICAgICAgY29uc3Qgc2lnUGFpcnMgPSB0aGlzLl9oZWRlcmFUeC5zaWdNYXAuc2lnUGFpcjtcbiAgICAgIHNpZ1BhaXJzLmZvckVhY2goKHNpZ1BhaXIpID0+IHtcbiAgICAgICAgY29uc3Qgc2lnbmF0dXJlID0gc2lnUGFpci5lZDI1NTE5O1xuICAgICAgICBpZiAoc2lnbmF0dXJlKSB7XG4gICAgICAgICAgdGhpcy5fc2lnbmF0dXJlcy5wdXNoKHRvSGV4KHNpZ25hdHVyZSkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTG9hZCB0aGUgaW5wdXQgYW5kIG91dHB1dCBkYXRhIG9uIHRoaXMgdHJhbnNhY3Rpb24gdXNpbmcgdGhlIHRyYW5zYWN0aW9uIGpzb25cbiAgICogaWYgdGhlcmUgYXJlIG91dHB1dHMuIEZvciB0cmFuc2FjdGlvbnMgd2l0aG91dCBvdXRwdXRzIChlLmcuIHdhbGxldCBpbml0aWFsaXphdGlvbnMpLFxuICAgKiB0aGlzIGZ1bmN0aW9uIHdpbGwgbm90IGRvIGFueXRoaW5nXG4gICAqL1xuICBsb2FkSW5wdXRzQW5kT3V0cHV0cygpOiB2b2lkIHtcbiAgICBjb25zdCB0eEpzb24gPSB0aGlzLnRvSnNvbigpO1xuICAgIGNvbnN0IGluc3RydWN0aW9uID0gdHhKc29uLmluc3RydWN0aW9uc0RhdGE7XG4gICAgY29uc3Qgb3V0cHV0czogRW50cnlbXSA9IFtdO1xuICAgIGNvbnN0IGlucHV0czogRW50cnlbXSA9IFtdO1xuXG4gICAgc3dpdGNoIChpbnN0cnVjdGlvbj8udHlwZSkge1xuICAgICAgY2FzZSBIZWRlcmFUcmFuc2FjdGlvblR5cGVzLlRyYW5zZmVyOlxuICAgICAgICBsZXQgdG90YWxBbW91bnQgPSBuZXcgQmlnTnVtYmVyKDApO1xuICAgICAgICBpbnN0cnVjdGlvbi5wYXJhbXMucmVjaXBpZW50cy5mb3JFYWNoKChyZWNpcGllbnQpID0+IHtcbiAgICAgICAgICB0b3RhbEFtb3VudCA9IHRvdGFsQW1vdW50LnBsdXMocmVjaXBpZW50LmFtb3VudCk7XG4gICAgICAgICAgb3V0cHV0cy5wdXNoKHtcbiAgICAgICAgICAgIGFkZHJlc3M6IHJlY2lwaWVudC5hZGRyZXNzLFxuICAgICAgICAgICAgdmFsdWU6IHJlY2lwaWVudC5hbW91bnQsXG4gICAgICAgICAgICBjb2luOiByZWNpcGllbnQudG9rZW5OYW1lIHx8IHRoaXMuX2NvaW5Db25maWcubmFtZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlucHV0cy5wdXNoKHtcbiAgICAgICAgICBhZGRyZXNzOiB0eEpzb24uZnJvbSxcbiAgICAgICAgICB2YWx1ZTogdG90YWxBbW91bnQudG9TdHJpbmcoKSxcbiAgICAgICAgICBjb2luOiBpbnN0cnVjdGlvbi5wYXJhbXMudG9rZW5OYW1lIHx8IHRoaXMuX2NvaW5Db25maWcubmFtZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIEhlZGVyYVRyYW5zYWN0aW9uVHlwZXMuVG9rZW5Bc3NvY2lhdGVUb0FjY291bnQ6XG4gICAgICAgIGluc3RydWN0aW9uLnBhcmFtcy50b2tlbk5hbWVzLmZvckVhY2goKHRva2VuTmFtZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHRva2VuRW50cnk6IEVudHJ5ID0ge1xuICAgICAgICAgICAgYWRkcmVzczogaW5zdHJ1Y3Rpb24ucGFyYW1zLmFjY291bnRJZCxcbiAgICAgICAgICAgIHZhbHVlOiAnMCcsXG4gICAgICAgICAgICBjb2luOiB0b2tlbk5hbWUsXG4gICAgICAgICAgfTtcbiAgICAgICAgICBpbnB1dHMucHVzaCh0b2tlbkVudHJ5KTtcbiAgICAgICAgICBvdXRwdXRzLnB1c2godG9rZW5FbnRyeSk7XG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgdGhpcy5faW5wdXRzID0gaW5wdXRzO1xuICAgIHRoaXMuX291dHB1dHMgPSBvdXRwdXRzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhpcyB0cmFuc2FjdGlvbiBib2R5IGNvbXBvbmVudHNcbiAgICpcbiAgICogQHBhcmFtIHtVaW50OEFycmF5fSBieXRlcyAtIEVuY29kZWQgYm9keSB0cmFuc2FjdGlvblxuICAgKi9cbiAgYm9keUJ5dGVzKGJ5dGVzOiBVaW50OEFycmF5KTogdm9pZCB7XG4gICAgdGhpcy5ib2R5KHByb3RvLlRyYW5zYWN0aW9uLmRlY29kZShieXRlcykpO1xuICB9XG4gIC8vIGVuZHJlZ2lvblxuXG4gIC8vIHJlZ2lvbiBoZWxwZXJzXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoaXMgaGVkZXJhIHRyYW5zYWN0aW9uIGlkIGNvbXBvbmVudHMgaW4gYSByZWFkYWJsZSBmb3JtYXRcbiAgICpcbiAgICogQHJldHVybnMge1tzdHJpbmcsIHN0cmluZ119IC0gVHJhbnNhY3Rpb24gaWQgcGFydHMgWzxhY2NvdW50IGlkPiwgPHN0YXJ0VGltZSBpbiBzZWNvbmRzPl1cbiAgICovXG4gIGdldFR4SWRQYXJ0cygpOiBbc3RyaW5nLCBzdHJpbmddIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLl90eEJvZHkgJiZcbiAgICAgIHRoaXMuX3R4Qm9keS50cmFuc2FjdGlvbklEICYmXG4gICAgICB0aGlzLl90eEJvZHkudHJhbnNhY3Rpb25JRC5hY2NvdW50SUQgJiZcbiAgICAgIHRoaXMuX3R4Qm9keS50cmFuc2FjdGlvbklELnRyYW5zYWN0aW9uVmFsaWRTdGFydFxuICAgICkge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgc3RyaW5naWZ5QWNjb3VudElkKHRoaXMuX3R4Qm9keS50cmFuc2FjdGlvbklELmFjY291bnRJRCksXG4gICAgICAgIHN0cmluZ2lmeVR4VGltZSh0aGlzLl90eEJvZHkudHJhbnNhY3Rpb25JRC50cmFuc2FjdGlvblZhbGlkU3RhcnQpLFxuICAgICAgXTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIHRyYW5zYWN0aW9uIGlkIGluZm9ybWF0aW9uJyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGlzIHRyYW5zYWN0aW9uIGhhc2hcbiAgICpcbiAgICogQHJldHVybnMge3N0cmluZ30gLSBUaGUgdHJhbnNhY3Rpb24gaGFzaFxuICAgKi9cbiAgZ2V0VHhIYXNoKCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLl90eEJvZHkubm9kZUFjY291bnRJRCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIHRyYW5zYWN0aW9uIG5vZGUgaWQnKTtcbiAgICB9XG4gICAgY29uc3QgX3NpZ25lZFR4ID0gbmV3IHByb3RvLlNpZ25lZFRyYW5zYWN0aW9uKCk7XG4gICAgX3NpZ25lZFR4LnNpZ01hcCA9IHRoaXMuX2hlZGVyYVR4LnNpZ01hcDtcbiAgICBfc2lnbmVkVHguYm9keUJ5dGVzID0gdGhpcy5faGVkZXJhVHguYm9keUJ5dGVzO1xuXG4gICAgY29uc3QgZW5jb2RlciA9IHByb3RvLlNpZ25lZFRyYW5zYWN0aW9uO1xuICAgIHJldHVybiB0aGlzLnNoYSh0aGlzLmVuY29kZShfc2lnbmVkVHgsIGVuY29kZXIpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmNvZGUgYW4gb2JqZWN0IHVzaW5nIHRoZSBnaXZlbiBlbmNvZGVyIGNsYXNzXG4gICAqXG4gICAqIEBwYXJhbSB7cHJvdG99IG9iaiAtIFRoZSBvYmplY3QgdG8gYmUgZW5jb2RlZCwgbXVzdCBiZSBpbiBwcm90byBuYW1lc3BhY2VcbiAgICogQHBhcmFtIGVuY29kZXIgLSBPYmplY3QgZW5jb2RlclxuICAgKiBAcmV0dXJucyB7VWludDhBcnJheX0gLSBFbmNvZGVkIG9iamVjdCBieXRlIGFycmF5XG4gICAqL1xuICBwcml2YXRlIGVuY29kZTxDdG9yRm4gZXh0ZW5kcyB7IG5ldyAoKTogVCB9LCBUIGV4dGVuZHMgeyBjb25zdHJ1Y3RvcjogQ3RvckZuIH0+KFxuICAgIG9iajogVCxcbiAgICBlbmNvZGVyOiB7IGVuY29kZShhcmc6IFQpOiBXcml0ZXIgfVxuICApOiBVaW50OEFycmF5IHtcbiAgICByZXR1cm4gZW5jb2Rlci5lbmNvZGUob2JqKS5maW5pc2goKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgc2hhLTM4NCBoYXNoXG4gICAqXG4gICAqIEBwYXJhbSB7VWludDhBcnJheX0gYnl0ZXMgLSBCeXRlcyB0byBiZSBoYXNoZWRcbiAgICogQHJldHVybnMge3N0cmluZ30gLSBUaGUgcmVzdWx0aW5nIGhhc2ggc3RyaW5nXG4gICAqL1xuICBzaGEoYnl0ZXM6IFVpbnQ4QXJyYXkpOiBzdHJpbmcge1xuICAgIHJldHVybiB0b0hleChoYXNoKGJ5dGVzKSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
|
|
2
|
-
import BigNumber from 'bignumber.js';
|
|
3
|
-
import { proto } from '@hashgraph/proto';
|
|
4
|
-
import { BaseAddress, BaseFee, BaseKey, BaseTransactionBuilder } from '@bitgo-beta/sdk-core';
|
|
5
|
-
import { Transaction } from './transaction';
|
|
6
|
-
import { KeyPair } from './keyPair';
|
|
7
|
-
import { HederaNode, SignatureData } from './iface';
|
|
8
|
-
export declare abstract class TransactionBuilder extends BaseTransactionBuilder {
|
|
9
|
-
protected _fee: BaseFee;
|
|
10
|
-
private _transaction;
|
|
11
|
-
protected _source: BaseAddress;
|
|
12
|
-
protected _startTime: proto.ITimestamp;
|
|
13
|
-
protected _memo: string;
|
|
14
|
-
protected _txBody: proto.TransactionBody;
|
|
15
|
-
protected _node: HederaNode;
|
|
16
|
-
protected _duration: proto.Duration;
|
|
17
|
-
protected _multiSignerKeyPairs: KeyPair[];
|
|
18
|
-
protected _signatures: SignatureData[];
|
|
19
|
-
protected constructor(_coinConfig: Readonly<CoinConfig>);
|
|
20
|
-
/** @inheritdoc */
|
|
21
|
-
protected buildImplementation(): Promise<Transaction>;
|
|
22
|
-
/** @inheritdoc */
|
|
23
|
-
protected fromImplementation(rawTransaction: Uint8Array | string): Transaction;
|
|
24
|
-
/** @inheritdoc */
|
|
25
|
-
protected signImplementation(key: BaseKey): Transaction;
|
|
26
|
-
/**
|
|
27
|
-
* Initialize the transaction builder fields using the decoded transaction data
|
|
28
|
-
*
|
|
29
|
-
* @param {Transaction} tx - the transaction data
|
|
30
|
-
*/
|
|
31
|
-
initBuilder(tx: Transaction): void;
|
|
32
|
-
/**
|
|
33
|
-
* Creates a Hedera TransactionID
|
|
34
|
-
*
|
|
35
|
-
* @returns {proto.TransactionID} - Created TransactionID
|
|
36
|
-
*/
|
|
37
|
-
protected buildTxId(): proto.TransactionID;
|
|
38
|
-
/**
|
|
39
|
-
* Set the memo
|
|
40
|
-
*
|
|
41
|
-
* @param {string} memo - A hedera memo, can be a maximum of 100 bytes
|
|
42
|
-
* @returns {TransactionBuilder} - This transaction builder
|
|
43
|
-
*/
|
|
44
|
-
memo(memo: string): this;
|
|
45
|
-
/**
|
|
46
|
-
* Set the node, it may take the format `'<shard>.<realm>.<account>'` or `'<account>'`
|
|
47
|
-
*
|
|
48
|
-
* @param {HederaNode} node - A hedera node address
|
|
49
|
-
* @returns {TransactionBuilder} - This transaction builder
|
|
50
|
-
*/
|
|
51
|
-
node(node: HederaNode): this;
|
|
52
|
-
/**
|
|
53
|
-
* Set the transaction valid duration
|
|
54
|
-
*
|
|
55
|
-
* @param {number} validDuration - The transaction valid duration in seconds
|
|
56
|
-
* @returns {TransactionBuilder} - This transaction builder
|
|
57
|
-
*/
|
|
58
|
-
validDuration(validDuration: number): this;
|
|
59
|
-
/**
|
|
60
|
-
* Set the transaction fees
|
|
61
|
-
*
|
|
62
|
-
* @param {BaseFee} fee - The maximum gas to pay
|
|
63
|
-
* @returns {TransactionBuilder} - This transaction builder
|
|
64
|
-
*/
|
|
65
|
-
fee(fee: BaseFee): this;
|
|
66
|
-
/**
|
|
67
|
-
* Set the transaction source
|
|
68
|
-
*
|
|
69
|
-
* @param {BaseAddress} address - The source account
|
|
70
|
-
* @returns {TransactionBuilder} - This transaction builder
|
|
71
|
-
*/
|
|
72
|
-
source(address: BaseAddress): this;
|
|
73
|
-
/**
|
|
74
|
-
* Set an external transaction signature
|
|
75
|
-
*
|
|
76
|
-
* @param {string} signature - Hex encoded signature string
|
|
77
|
-
* @param {KeyPair} keyPair - The public key keypair that was used to create the signature
|
|
78
|
-
* @returns {TransactionBuilder} - Transaction builder
|
|
79
|
-
*/
|
|
80
|
-
signature(signature: string, keyPair: KeyPair): this;
|
|
81
|
-
/**
|
|
82
|
-
* Set the start time
|
|
83
|
-
*
|
|
84
|
-
* @param {string} time - String value of the time to set with format <seconds>.<nanos>
|
|
85
|
-
* @returns {TransactionBuilder} - this
|
|
86
|
-
*/
|
|
87
|
-
startTime(time: string): this;
|
|
88
|
-
private get validStart();
|
|
89
|
-
/** @inheritdoc */
|
|
90
|
-
protected get transaction(): Transaction;
|
|
91
|
-
/** @inheritdoc */
|
|
92
|
-
protected set transaction(transaction: Transaction);
|
|
93
|
-
/** @inheritdoc */
|
|
94
|
-
validateAddress(address: BaseAddress, addressFormat?: string): void;
|
|
95
|
-
/** @inheritdoc */
|
|
96
|
-
validateKey(key: BaseKey): void;
|
|
97
|
-
/** @inheritdoc */
|
|
98
|
-
validateRawTransaction(rawTransaction: any): void;
|
|
99
|
-
/** @inheritdoc */
|
|
100
|
-
validateTransaction(transaction?: Transaction): void;
|
|
101
|
-
/** @inheritdoc */
|
|
102
|
-
validateValue(value: BigNumber): void;
|
|
103
|
-
validateMandatoryFields(): void;
|
|
104
|
-
/**
|
|
105
|
-
* Validates that the given key is not already in this._multiSignerKeyPairs
|
|
106
|
-
*
|
|
107
|
-
* @param {BaseKey} key - The key to check
|
|
108
|
-
*/
|
|
109
|
-
private checkDuplicatedKeys;
|
|
110
|
-
}
|
|
111
|
-
//# sourceMappingURL=transactionBuilder.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"transactionBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilder.ts"],"names":[],"mappings":"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"}
|