@bitgo-beta/sdk-coin-cspr 1.2.19-beta.122 → 1.2.19-beta.1221
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/.mocharc.yml +1 -1
- package/CHANGELOG.md +593 -0
- package/package.json +9 -9
- package/dist/src/cspr.d.ts +0 -104
- package/dist/src/cspr.d.ts.map +0 -1
- package/dist/src/cspr.js +0 -292
- package/dist/src/index.d.ts +0 -5
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/index.js +0 -30
- package/dist/src/lib/constants.d.ts +0 -19
- package/dist/src/lib/constants.d.ts.map +0 -1
- package/dist/src/lib/constants.js +0 -28
- package/dist/src/lib/delegateBuilder.d.ts +0 -49
- package/dist/src/lib/delegateBuilder.d.ts.map +0 -1
- package/dist/src/lib/delegateBuilder.js +0 -111
- package/dist/src/lib/ifaces.d.ts +0 -69
- package/dist/src/lib/ifaces.d.ts.map +0 -1
- package/dist/src/lib/ifaces.js +0 -3
- package/dist/src/lib/index.d.ts +0 -6
- package/dist/src/lib/index.d.ts.map +0 -1
- package/dist/src/lib/index.js +0 -31
- package/dist/src/lib/keyPair.d.ts +0 -18
- package/dist/src/lib/keyPair.d.ts.map +0 -1
- package/dist/src/lib/keyPair.js +0 -56
- package/dist/src/lib/transaction.d.ts +0 -55
- package/dist/src/lib/transaction.d.ts.map +0 -1
- package/dist/src/lib/transaction.js +0 -227
- package/dist/src/lib/transactionBuilder.d.ts +0 -124
- package/dist/src/lib/transactionBuilder.d.ts.map +0 -1
- package/dist/src/lib/transactionBuilder.js +0 -312
- package/dist/src/lib/transactionBuilderFactory.d.ts +0 -46
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +0 -1
- package/dist/src/lib/transactionBuilderFactory.js +0 -98
- package/dist/src/lib/transferBuilder.d.ts +0 -39
- package/dist/src/lib/transferBuilder.d.ts.map +0 -1
- package/dist/src/lib/transferBuilder.js +0 -106
- package/dist/src/lib/undelegateBuilder.d.ts +0 -49
- package/dist/src/lib/undelegateBuilder.d.ts.map +0 -1
- package/dist/src/lib/undelegateBuilder.js +0 -111
- package/dist/src/lib/utils.d.ts +0 -188
- package/dist/src/lib/utils.d.ts.map +0 -1
- package/dist/src/lib/utils.js +0 -477
- package/dist/src/lib/walletInitializationBuilder.d.ts +0 -27
- package/dist/src/lib/walletInitializationBuilder.d.ts.map +0 -1
- package/dist/src/lib/walletInitializationBuilder.js +0 -95
- package/dist/src/register.d.ts +0 -3
- package/dist/src/register.d.ts.map +0 -1
- package/dist/src/register.js +0 -11
- package/dist/src/tcspr.d.ts +0 -11
- package/dist/src/tcspr.d.ts.map +0 -1
- package/dist/src/tcspr.js +0 -24
|
@@ -1,312 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.TransactionBuilder = exports.DEFAULT_N = exports.DEFAULT_M = void 0;
|
|
7
|
-
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
8
|
-
const casper_js_sdk_1 = require("casper-js-sdk");
|
|
9
|
-
const lodash_1 = __importDefault(require("lodash"));
|
|
10
|
-
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
11
|
-
const transaction_1 = require("./transaction");
|
|
12
|
-
const keyPair_1 = require("./keyPair");
|
|
13
|
-
const utils_1 = require("./utils");
|
|
14
|
-
const constants_1 = require("./constants");
|
|
15
|
-
exports.DEFAULT_M = 3;
|
|
16
|
-
exports.DEFAULT_N = 2;
|
|
17
|
-
class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
|
|
18
|
-
constructor(_coinConfig) {
|
|
19
|
-
super(_coinConfig);
|
|
20
|
-
this.transaction = new transaction_1.Transaction(_coinConfig);
|
|
21
|
-
this._multiSignerKeyPairs = [];
|
|
22
|
-
this._signatures = [];
|
|
23
|
-
this._chainName = this.coinName() === 'cspr' ? constants_1.DEFAULT_CHAIN_NAMES.mainnet : constants_1.DEFAULT_CHAIN_NAMES.testnet;
|
|
24
|
-
}
|
|
25
|
-
// region Base Builder
|
|
26
|
-
/** @inheritdoc */
|
|
27
|
-
async buildImplementation() {
|
|
28
|
-
const deployParams = this.getDeployParams();
|
|
29
|
-
const session = this.getSession();
|
|
30
|
-
const payment = casper_js_sdk_1.DeployUtil.standardPayment(lodash_1.default.parseInt(this._fee.gasLimit));
|
|
31
|
-
let cTransaction = this.transaction.casperTx || casper_js_sdk_1.DeployUtil.makeDeploy(deployParams, session, payment);
|
|
32
|
-
// Cannot add arguments to an already signed deploy.
|
|
33
|
-
if (cTransaction.approvals.length === 0) {
|
|
34
|
-
this._session.extraArguments.forEach((extraArgument, extraArgumentName) => {
|
|
35
|
-
if (!cTransaction.session.getArgByName(extraArgumentName)) {
|
|
36
|
-
cTransaction = casper_js_sdk_1.DeployUtil.addArgToDeploy(cTransaction, extraArgumentName, extraArgument);
|
|
37
|
-
}
|
|
38
|
-
});
|
|
39
|
-
}
|
|
40
|
-
this.transaction.casperTx = cTransaction;
|
|
41
|
-
this.processSigning();
|
|
42
|
-
return this.transaction;
|
|
43
|
-
}
|
|
44
|
-
/** @inheritdoc */
|
|
45
|
-
fromImplementation(rawTransaction) {
|
|
46
|
-
const tx = new transaction_1.Transaction(this._coinConfig);
|
|
47
|
-
const jsonTransaction = JSON.parse(rawTransaction);
|
|
48
|
-
tx.casperTx = casper_js_sdk_1.DeployUtil.deployFromJson(jsonTransaction).unwrap();
|
|
49
|
-
this.initBuilder(tx);
|
|
50
|
-
return this.transaction;
|
|
51
|
-
}
|
|
52
|
-
/** @inheritdoc */
|
|
53
|
-
signImplementation(key) {
|
|
54
|
-
this.checkDuplicatedKeys(key);
|
|
55
|
-
const signer = new keyPair_1.KeyPair({ prv: key.key });
|
|
56
|
-
// Signing the transaction is an operation that relies on all the data being set,
|
|
57
|
-
// so we set the source here and leave the actual signing for the build step
|
|
58
|
-
this._multiSignerKeyPairs.push(signer);
|
|
59
|
-
return this.transaction;
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* Initialize the transaction builder fields using the decoded transaction data
|
|
63
|
-
*
|
|
64
|
-
* @param {Transaction} tx the transaction data
|
|
65
|
-
*/
|
|
66
|
-
initBuilder(tx) {
|
|
67
|
-
this.transaction = tx;
|
|
68
|
-
this.transaction.loadPreviousSignatures();
|
|
69
|
-
const txData = tx.toJson();
|
|
70
|
-
this.fee(txData.fee);
|
|
71
|
-
this.source({ address: txData.from });
|
|
72
|
-
this.expiration(txData.expiration || constants_1.TRANSACTION_EXPIRATION);
|
|
73
|
-
}
|
|
74
|
-
// endregion
|
|
75
|
-
// region Common builder methods
|
|
76
|
-
/**
|
|
77
|
-
* Set the transaction fees
|
|
78
|
-
*
|
|
79
|
-
* @param {BaseFee} fee The maximum gas to pay
|
|
80
|
-
* @returns {TransactionBuilder} This transaction builder
|
|
81
|
-
*/
|
|
82
|
-
fee(fee) {
|
|
83
|
-
this.validateValue(new bignumber_js_1.default(fee.gasLimit));
|
|
84
|
-
this._fee = fee;
|
|
85
|
-
return this;
|
|
86
|
-
}
|
|
87
|
-
/**
|
|
88
|
-
* Set the transaction source
|
|
89
|
-
*
|
|
90
|
-
* @param {BaseAddress} address The source account
|
|
91
|
-
* @returns {TransactionBuilder} This transaction builder
|
|
92
|
-
*/
|
|
93
|
-
source(address) {
|
|
94
|
-
this.validateAddress(address);
|
|
95
|
-
this._source = address;
|
|
96
|
-
return this;
|
|
97
|
-
}
|
|
98
|
-
/**
|
|
99
|
-
* Set the transaction expirationTime
|
|
100
|
-
*
|
|
101
|
-
* @param {string} expirationTime The transaction expirationTime
|
|
102
|
-
* @returns {TransactionBuilder} This transaction builder
|
|
103
|
-
*/
|
|
104
|
-
expiration(expirationTime) {
|
|
105
|
-
const transactionExpiration = new bignumber_js_1.default(expirationTime);
|
|
106
|
-
if (transactionExpiration.isNaN() || transactionExpiration.isGreaterThan(constants_1.TRANSACTION_EXPIRATION)) {
|
|
107
|
-
throw new sdk_core_1.BuildTransactionError('Invalid transaction expiration');
|
|
108
|
-
}
|
|
109
|
-
this.validateValue(transactionExpiration);
|
|
110
|
-
this._expiration = transactionExpiration.toNumber();
|
|
111
|
-
return this;
|
|
112
|
-
}
|
|
113
|
-
/**
|
|
114
|
-
* Set an external transaction signature
|
|
115
|
-
*
|
|
116
|
-
* @param {string} signature Hex encoded signature string
|
|
117
|
-
* @param {KeyPair} keyPair The public key keypair that was used to create the signature
|
|
118
|
-
* @returns {TransactionBuilder} This transaction builder
|
|
119
|
-
*/
|
|
120
|
-
signature(signature, keyPair) {
|
|
121
|
-
// if we already have a signature for this key pair, just update it
|
|
122
|
-
for (const oldSignature of this._signatures) {
|
|
123
|
-
if (oldSignature.keyPair.getKeys().pub === keyPair.getKeys().pub) {
|
|
124
|
-
oldSignature.signature = signature;
|
|
125
|
-
return this;
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
// otherwise add the new signature
|
|
129
|
-
this._signatures.push({ signature, keyPair });
|
|
130
|
-
return this;
|
|
131
|
-
}
|
|
132
|
-
nodeChainName(chainName) {
|
|
133
|
-
this._chainName = chainName;
|
|
134
|
-
return this;
|
|
135
|
-
}
|
|
136
|
-
// endregion
|
|
137
|
-
// region Validators
|
|
138
|
-
/** @inheritdoc */
|
|
139
|
-
validateAddress(address) {
|
|
140
|
-
if (!utils_1.isValidAddress(address.address)) {
|
|
141
|
-
throw new sdk_core_1.BuildTransactionError('Invalid address ' + address.address);
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
/** @inheritdoc */
|
|
145
|
-
validateKey(key) {
|
|
146
|
-
if (!new keyPair_1.KeyPair({ prv: key.key })) {
|
|
147
|
-
throw new sdk_core_1.BuildTransactionError('Invalid key');
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
/** @inheritdoc */
|
|
151
|
-
validateRawTransaction(rawTransaction) {
|
|
152
|
-
if (!rawTransaction) {
|
|
153
|
-
throw new sdk_core_1.InvalidTransactionError('Raw transaction is empty');
|
|
154
|
-
}
|
|
155
|
-
try {
|
|
156
|
-
casper_js_sdk_1.DeployUtil.deployFromJson(JSON.parse(rawTransaction));
|
|
157
|
-
}
|
|
158
|
-
catch (e) {
|
|
159
|
-
throw new sdk_core_1.ParseTransactionError('There was an error parsing the JSON string');
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
/** @inheritdoc */
|
|
163
|
-
validateTransaction(transaction) {
|
|
164
|
-
this.validateMandatoryFields();
|
|
165
|
-
}
|
|
166
|
-
/** @inheritdoc */
|
|
167
|
-
validateValue(value) {
|
|
168
|
-
if (value.isLessThan(0)) {
|
|
169
|
-
throw new sdk_core_1.BuildTransactionError('Value cannot be less than zero');
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
/**
|
|
173
|
-
* Validates that the mandatory fields are defined
|
|
174
|
-
*/
|
|
175
|
-
validateMandatoryFields() {
|
|
176
|
-
this.validateFee();
|
|
177
|
-
this.validateSource();
|
|
178
|
-
}
|
|
179
|
-
/**
|
|
180
|
-
* Validates that the fee field is defined
|
|
181
|
-
*/
|
|
182
|
-
validateFee() {
|
|
183
|
-
if (this._fee === undefined) {
|
|
184
|
-
throw new sdk_core_1.BuildTransactionError('Invalid transaction: missing fee');
|
|
185
|
-
}
|
|
186
|
-
if (!this._fee.gasLimit) {
|
|
187
|
-
throw new sdk_core_1.BuildTransactionError('Invalid transaction: missing gas limit');
|
|
188
|
-
}
|
|
189
|
-
try {
|
|
190
|
-
this.validateValue(new bignumber_js_1.default(this._fee.gasLimit));
|
|
191
|
-
}
|
|
192
|
-
catch (e) {
|
|
193
|
-
throw new sdk_core_1.BuildTransactionError('Invalid gas limit');
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
/**
|
|
197
|
-
* Validates that the source field is defined
|
|
198
|
-
*/
|
|
199
|
-
validateSource() {
|
|
200
|
-
if (this._source === undefined) {
|
|
201
|
-
throw new sdk_core_1.BuildTransactionError('Invalid transaction: missing source');
|
|
202
|
-
}
|
|
203
|
-
this.validateAddress(this._source);
|
|
204
|
-
}
|
|
205
|
-
/**
|
|
206
|
-
* Validates that the given key is not already in this._multiSignerKeyPairs
|
|
207
|
-
*
|
|
208
|
-
* @param {BaseKey} key - The key to check
|
|
209
|
-
*/
|
|
210
|
-
checkDuplicatedKeys(key) {
|
|
211
|
-
this._multiSignerKeyPairs.forEach((_sourceKeyPair) => {
|
|
212
|
-
if (_sourceKeyPair.getKeys().prv === key.key) {
|
|
213
|
-
throw new sdk_core_1.SigningError('Repeated sign: ' + key.key);
|
|
214
|
-
}
|
|
215
|
-
// Try to get extended keys in order to validate them
|
|
216
|
-
let xprv;
|
|
217
|
-
try {
|
|
218
|
-
xprv = _sourceKeyPair.getExtendedKeys().xprv;
|
|
219
|
-
}
|
|
220
|
-
catch (err) {
|
|
221
|
-
return;
|
|
222
|
-
}
|
|
223
|
-
if (xprv && xprv === key.key) {
|
|
224
|
-
throw new sdk_core_1.SigningError('Repeated sign: ' + key.key);
|
|
225
|
-
}
|
|
226
|
-
});
|
|
227
|
-
}
|
|
228
|
-
// endregion
|
|
229
|
-
// region Getters and Setters
|
|
230
|
-
/** @inheritdoc */
|
|
231
|
-
get transaction() {
|
|
232
|
-
return this._transaction;
|
|
233
|
-
}
|
|
234
|
-
/** @inheritdoc */
|
|
235
|
-
set transaction(transaction) {
|
|
236
|
-
this._transaction = transaction;
|
|
237
|
-
}
|
|
238
|
-
/**
|
|
239
|
-
* Get the chain name for the coin environment
|
|
240
|
-
*/
|
|
241
|
-
get chainName() {
|
|
242
|
-
return this._chainName;
|
|
243
|
-
}
|
|
244
|
-
// endregion
|
|
245
|
-
// region auxiliaryMethods
|
|
246
|
-
/**
|
|
247
|
-
* Generate a DeployParams instance with the transaction data
|
|
248
|
-
*
|
|
249
|
-
* @returns {DeployUtil.DeployParams}
|
|
250
|
-
*/
|
|
251
|
-
getDeployParams() {
|
|
252
|
-
const gasPrice = this._fee.gasPrice ? lodash_1.default.parseInt(this._fee.gasPrice) : undefined;
|
|
253
|
-
return new casper_js_sdk_1.DeployUtil.DeployParams(casper_js_sdk_1.CLPublicKey.fromHex(this._source.address), this._chainName, gasPrice, this._expiration || constants_1.TRANSACTION_EXPIRATION);
|
|
254
|
-
}
|
|
255
|
-
/**
|
|
256
|
-
* Generate the session for the Deploy according to the transactionType.
|
|
257
|
-
*
|
|
258
|
-
* @returns {DeployUtil.ExecutableDeployItem}
|
|
259
|
-
*/
|
|
260
|
-
getSession() {
|
|
261
|
-
let session;
|
|
262
|
-
switch (this.transaction.type) {
|
|
263
|
-
case sdk_core_1.TransactionType.Send:
|
|
264
|
-
const transferSession = this._session;
|
|
265
|
-
session = casper_js_sdk_1.DeployUtil.ExecutableDeployItem.newTransferWithOptionalTransferId(transferSession.amount, transferSession.target, undefined, transferSession.id);
|
|
266
|
-
break;
|
|
267
|
-
case sdk_core_1.TransactionType.WalletInitialization:
|
|
268
|
-
case sdk_core_1.TransactionType.StakingLock:
|
|
269
|
-
case sdk_core_1.TransactionType.StakingUnlock:
|
|
270
|
-
const moduleBytesSession = this._session;
|
|
271
|
-
session = casper_js_sdk_1.DeployUtil.ExecutableDeployItem.newModuleBytes(moduleBytesSession.moduleBytes, moduleBytesSession.args);
|
|
272
|
-
break;
|
|
273
|
-
default:
|
|
274
|
-
throw new sdk_core_1.BuildTransactionError('Transaction Type error');
|
|
275
|
-
}
|
|
276
|
-
return session;
|
|
277
|
-
}
|
|
278
|
-
/**
|
|
279
|
-
* Checks whether the transaction has the owner signature
|
|
280
|
-
*
|
|
281
|
-
* @param {string} pub - public key of the signer
|
|
282
|
-
* @returns {boolean} true if the pub key already signed th transaction
|
|
283
|
-
* @private
|
|
284
|
-
*/
|
|
285
|
-
isTransactionSignedByPub(pub) {
|
|
286
|
-
return (lodash_1.default.findIndex(this.transaction.casperTx.approvals, (approval) => {
|
|
287
|
-
const approvalSigner = utils_1.removeAlgoPrefixFromHexValue(approval.signer);
|
|
288
|
-
return approvalSigner === pub;
|
|
289
|
-
}) !== -1);
|
|
290
|
-
}
|
|
291
|
-
/**
|
|
292
|
-
* Add signatures to the transaction
|
|
293
|
-
*
|
|
294
|
-
* @private
|
|
295
|
-
*/
|
|
296
|
-
processSigning() {
|
|
297
|
-
for (const keyPair of this._multiSignerKeyPairs) {
|
|
298
|
-
// Add signature if it's not already in the deploy
|
|
299
|
-
if (!this.isTransactionSignedByPub(keyPair.getKeys().pub)) {
|
|
300
|
-
this.transaction.sign(keyPair);
|
|
301
|
-
}
|
|
302
|
-
}
|
|
303
|
-
for (const { signature, keyPair } of this._signatures) {
|
|
304
|
-
// Add signature if it's not already in the deploy
|
|
305
|
-
if (!this.isTransactionSignedByPub(keyPair.getKeys().pub)) {
|
|
306
|
-
this.transaction.addSignature(signature, keyPair);
|
|
307
|
-
}
|
|
308
|
-
}
|
|
309
|
-
}
|
|
310
|
-
}
|
|
311
|
-
exports.TransactionBuilder = TransactionBuilder;
|
|
312
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsZ0VBQXFDO0FBRXJDLGlEQUFxRTtBQUNyRSxvREFBdUI7QUFDdkIsbURBUzhCO0FBQzlCLCtDQUE0QztBQUM1Qyx1Q0FBb0M7QUFRcEMsbUNBQXVFO0FBQ3ZFLDJDQUEwRTtBQUU3RCxRQUFBLFNBQVMsR0FBRyxDQUFDLENBQUM7QUFDZCxRQUFBLFNBQVMsR0FBRyxDQUFDLENBQUM7QUFDM0IsTUFBc0Isa0JBQW1CLFNBQVEsaUNBQXNCO0lBVXJFLFlBQVksV0FBaUM7UUFDM0MsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ25CLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSx5QkFBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQyxvQkFBb0IsR0FBRyxFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQywrQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLCtCQUFtQixDQUFDLE9BQU8sQ0FBQztJQUMzRyxDQUFDO0lBRUQsc0JBQXNCO0lBQ3RCLGtCQUFrQjtJQUNSLEtBQUssQ0FBQyxtQkFBbUI7UUFDakMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzVDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUVsQyxNQUFNLE9BQU8sR0FBRywwQkFBVSxDQUFDLGVBQWUsQ0FBQyxnQkFBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFFM0Us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QU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUN6RCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUNoQztTQUNGO1FBQ0QsS0FBSyxNQUFNLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDckQsa0RBQWtEO1lBQ2xELElBQUksQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUN6RCxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7YUFDbkQ7U0FDRjtJQUNILENBQUM7Q0FFRjtBQWhXRCxnREFnV0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQmlnTnVtYmVyIGZyb20gJ2JpZ251bWJlci5qcyc7XG5pbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgeyBEZXBsb3lVdGlsLCBDTFB1YmxpY0tleSBhcyBQdWJsaWNLZXkgfSBmcm9tICdjYXNwZXItanMtc2RrJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQge1xuICBCYXNlQWRkcmVzcyxcbiAgQmFzZUtleSxcbiAgQmFzZVRyYW5zYWN0aW9uQnVpbGRlcixcbiAgQnVpbGRUcmFuc2FjdGlvbkVycm9yLFxuICBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcixcbiAgUGFyc2VUcmFuc2FjdGlvbkVycm9yLFxuICBTaWduaW5nRXJyb3IsXG4gIFRyYW5zYWN0aW9uVHlwZSxcbn0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tICcuL3RyYW5zYWN0aW9uJztcbmltcG9ydCB7IEtleVBhaXIgfSBmcm9tICcuL2tleVBhaXInO1xuaW1wb3J0IHtcbiAgRmVlLFxuICBDYXNwZXJNb2R1bGVCeXRlc1RyYW5zYWN0aW9uLFxuICBDYXNwZXJUcmFuc2ZlclRyYW5zYWN0aW9uLFxuICBDYXNwZXJEZWxlZ2F0ZVRyYW5zYWN0aW9uLFxuICBTaWduYXR1cmVEYXRhLFxufSBmcm9tICcuL2lmYWNlcyc7XG5pbXBvcnQgeyBpc1ZhbGlkQWRkcmVzcywgcmVtb3ZlQWxnb1ByZWZpeEZyb21IZXhWYWx1ZSB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgREVGQVVMVF9DSEFJTl9OQU1FUywgVFJBTlNBQ1RJT05fRVhQSVJBVElPTiB9IGZyb20gJy4vY29uc3RhbnRzJztcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfTSA9IDM7XG5leHBvcnQgY29uc3QgREVGQVVMVF9OID0gMjtcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBUcmFuc2FjdGlvbkJ1aWxkZXIgZXh0ZW5kcyBCYXNlVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgcHJvdGVjdGVkIF9zb3VyY2U6IEJhc2VBZGRyZXNzO1xuICBwcm90ZWN0ZWQgX2ZlZTogRmVlO1xuICBwcml2YXRlIF90cmFuc2FjdGlvbjogVHJhbnNhY3Rpb247XG4gIHByb3RlY3RlZCBfc2Vzc2lvbjogQ2FzcGVyVHJhbnNmZXJUcmFuc2FjdGlvbiB8IENhc3Blck1vZHVsZUJ5dGVzVHJhbnNhY3Rpb24gfCBDYXNwZXJEZWxlZ2F0ZVRyYW5zYWN0aW9uO1xuICBwcm90ZWN0ZWQgX2V4cGlyYXRpb246IG51bWJlcjtcbiAgcHJvdGVjdGVkIF9tdWx0aVNpZ25lcktleVBhaXJzOiBLZXlQYWlyW107XG4gIHByb3RlY3RlZCBfc2lnbmF0dXJlczogU2lnbmF0dXJlRGF0YVtdO1xuICBwcm90ZWN0ZWQgX2NoYWluTmFtZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKF9jb2luQ29uZmlnKTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uKF9jb2luQ29uZmlnKTtcbiAgICB0aGlzLl9tdWx0aVNpZ25lcktleVBhaXJzID0gW107XG4gICAgdGhpcy5fc2lnbmF0dXJlcyA9IFtdO1xuICAgIHRoaXMuX2NoYWluTmFtZSA9IHRoaXMuY29pbk5hbWUoKSA9PT0gJ2NzcHInID8gREVGQVVMVF9DSEFJTl9OQU1FUy5tYWlubmV0IDogREVGQVVMVF9DSEFJTl9OQU1FUy50ZXN0bmV0O1xuICB9XG5cbiAgLy8gcmVnaW9uIEJhc2UgQnVpbGRlclxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGJ1aWxkSW1wbGVtZW50YXRpb24oKTogUHJvbWlzZTxUcmFuc2FjdGlvbj4ge1xuICAgIGNvbnN0IGRlcGxveVBhcmFtcyA9IHRoaXMuZ2V0RGVwbG95UGFyYW1zKCk7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHRoaXMuZ2V0U2Vzc2lvbigpO1xuXG4gICAgY29uc3QgcGF5bWVudCA9IERlcGxveVV0aWwuc3RhbmRhcmRQYXltZW50KF8ucGFyc2VJbnQodGhpcy5fZmVlLmdhc0xpbWl0KSk7XG5cbiAgICBsZXQgY1RyYW5zYWN0aW9uID0gdGhpcy50cmFuc2FjdGlvbi5jYXNwZXJUeCB8fCBEZXBsb3lVdGlsLm1ha2VEZXBsb3koZGVwbG95UGFyYW1zLCBzZXNzaW9uLCBwYXltZW50KTtcblxuICAgIC8vIENhbm5vdCBhZGQgYXJndW1lbnRzIHRvIGFuIGFscmVhZHkgc2lnbmVkIGRlcGxveS5cbiAgICBpZiAoY1RyYW5zYWN0aW9uLmFwcHJvdmFscy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuX3Nlc3Npb24uZXh0cmFBcmd1bWVudHMuZm9yRWFjaCgoZXh0cmFBcmd1bWVudCwgZXh0cmFBcmd1bWVudE5hbWUpID0+IHtcbiAgICAgICAgaWYgKCFjVHJhbnNhY3Rpb24uc2Vzc2lvbi5nZXRBcmdCeU5hbWUoZXh0cmFBcmd1bWVudE5hbWUpKSB7XG4gICAgICAgICAgY1RyYW5zYWN0aW9uID0gRGVwbG95VXRpbC5hZGRBcmdUb0RlcGxveShjVHJhbnNhY3Rpb24sIGV4dHJhQXJndW1lbnROYW1lLCBleHRyYUFyZ3VtZW50KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy50cmFuc2FjdGlvbi5jYXNwZXJUeCA9IGNUcmFuc2FjdGlvbjtcblxuICAgIHRoaXMucHJvY2Vzc1NpZ25pbmcoKTtcblxuICAgIHJldHVybiB0aGlzLnRyYW5zYWN0aW9uO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBmcm9tSW1wbGVtZW50YXRpb24ocmF3VHJhbnNhY3Rpb246IHN0cmluZyk6IFRyYW5zYWN0aW9uIHtcbiAgICBjb25zdCB0eCA9IG5ldyBUcmFuc2FjdGlvbih0aGlzLl9jb2luQ29uZmlnKTtcbiAgICBjb25zdCBqc29uVHJhbnNhY3Rpb24gPSBKU09OLnBhcnNlKHJhd1RyYW5zYWN0aW9uKTtcbiAgICB0eC5jYXNwZXJUeCA9IERlcGxveVV0aWwuZGVwbG95RnJvbUpzb24oanNvblRyYW5zYWN0aW9uKS51bndyYXAoKTtcbiAgICB0aGlzLmluaXRCdWlsZGVyKHR4KTtcbiAgICByZXR1cm4gdGhpcy50cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgc2lnbkltcGxlbWVudGF0aW9uKGtleTogQmFzZUtleSk6IFRyYW5zYWN0aW9uIHtcbiAgICB0aGlzLmNoZWNrRHVwbGljYXRlZEtleXMoa2V5KTtcbiAgICBjb25zdCBzaWduZXIgPSBuZXcgS2V5UGFpcih7IHBydjoga2V5LmtleSB9KTtcblxuICAgIC8vIFNpZ25pbmcgdGhlIHRyYW5zYWN0aW9uIGlzIGFuIG9wZXJhdGlvbiB0aGF0IHJlbGllcyBvbiBhbGwgdGhlIGRhdGEgYmVpbmcgc2V0LFxuICAgIC8vIHNvIHdlIHNldCB0aGUgc291cmNlIGhlcmUgYW5kIGxlYXZlIHRoZSBhY3R1YWwgc2lnbmluZyBmb3IgdGhlIGJ1aWxkIHN0ZXBcbiAgICB0aGlzLl9tdWx0aVNpZ25lcktleVBhaXJzLnB1c2goc2lnbmVyKTtcbiAgICByZXR1cm4gdGhpcy50cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIHRoZSB0cmFuc2FjdGlvbiBidWlsZGVyIGZpZWxkcyB1c2luZyB0aGUgZGVjb2RlZCB0cmFuc2FjdGlvbiBkYXRhXG4gICAqXG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb259IHR4IHRoZSB0cmFuc2FjdGlvbiBkYXRhXG4gICAqL1xuICBpbml0QnVpbGRlcih0eDogVHJhbnNhY3Rpb24pOiB2b2lkIHtcbiAgICB0aGlzLnRyYW5zYWN0aW9uID0gdHg7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5sb2FkUHJldmlvdXNTaWduYXR1cmVzKCk7XG4gICAgY29uc3QgdHhEYXRhID0gdHgudG9Kc29uKCk7XG4gICAgdGhpcy5mZWUodHhEYXRhLmZlZSk7XG4gICAgdGhpcy5zb3VyY2UoeyBhZGRyZXNzOiB0eERhdGEuZnJvbSB9KTtcbiAgICB0aGlzLmV4cGlyYXRpb24odHhEYXRhLmV4cGlyYXRpb24gfHwgVFJBTlNBQ1RJT05fRVhQSVJBVElPTik7XG4gIH1cblxuICAvLyBlbmRyZWdpb25cblxuICAvLyByZWdpb24gQ29tbW9uIGJ1aWxkZXIgbWV0aG9kc1xuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHRyYW5zYWN0aW9uIGZlZXNcbiAgICpcbiAgICogQHBhcmFtIHtCYXNlRmVlfSBmZWUgVGhlIG1heGltdW0gZ2FzIHRvIHBheVxuICAgKiBAcmV0dXJucyB7VHJhbnNhY3Rpb25CdWlsZGVyfSBUaGlzIHRyYW5zYWN0aW9uIGJ1aWxkZXJcbiAgICovXG4gIGZlZShmZWU6IEZlZSk6IHRoaXMge1xuICAgIHRoaXMudmFsaWRhdGVWYWx1ZShuZXcgQmlnTnVtYmVyKGZlZS5nYXNMaW1pdCkpO1xuICAgIHRoaXMuX2ZlZSA9IGZlZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHRyYW5zYWN0aW9uIHNvdXJjZVxuICAgKlxuICAgKiBAcGFyYW0ge0Jhc2VBZGRyZXNzfSBhZGRyZXNzIFRoZSBzb3VyY2UgYWNjb3VudFxuICAgKiBAcmV0dXJucyB7VHJhbnNhY3Rpb25CdWlsZGVyfSBUaGlzIHRyYW5zYWN0aW9uIGJ1aWxkZXJcbiAgICovXG4gIHNvdXJjZShhZGRyZXNzOiBCYXNlQWRkcmVzcyk6IHRoaXMge1xuICAgIHRoaXMudmFsaWRhdGVBZGRyZXNzKGFkZHJlc3MpO1xuICAgIHRoaXMuX3NvdXJjZSA9IGFkZHJlc3M7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSB0cmFuc2FjdGlvbiBleHBpcmF0aW9uVGltZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXhwaXJhdGlvblRpbWUgVGhlIHRyYW5zYWN0aW9uIGV4cGlyYXRpb25UaW1lXG4gICAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbkJ1aWxkZXJ9IFRoaXMgdHJhbnNhY3Rpb24gYnVpbGRlclxuICAgKi9cbiAgZXhwaXJhdGlvbihleHBpcmF0aW9uVGltZTogbnVtYmVyKTogdGhpcyB7XG4gICAgY29uc3QgdHJhbnNhY3Rpb25FeHBpcmF0aW9uID0gbmV3IEJpZ051bWJlcihleHBpcmF0aW9uVGltZSk7XG4gICAgaWYgKHRyYW5zYWN0aW9uRXhwaXJhdGlvbi5pc05hTigpIHx8IHRyYW5zYWN0aW9uRXhwaXJhdGlvbi5pc0dyZWF0ZXJUaGFuKFRSQU5TQUNUSU9OX0VYUElSQVRJT04pKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIHRyYW5zYWN0aW9uIGV4cGlyYXRpb24nKTtcbiAgICB9XG4gICAgdGhpcy52YWxpZGF0ZVZhbHVlKHRyYW5zYWN0aW9uRXhwaXJhdGlvbik7XG4gICAgdGhpcy5fZXhwaXJhdGlvbiA9IHRyYW5zYWN0aW9uRXhwaXJhdGlvbi50b051bWJlcigpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBhbiBleHRlcm5hbCB0cmFuc2FjdGlvbiBzaWduYXR1cmVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNpZ25hdHVyZSBIZXggZW5jb2RlZCBzaWduYXR1cmUgc3RyaW5nXG4gICAqIEBwYXJhbSB7S2V5UGFpcn0ga2V5UGFpciBUaGUgcHVibGljIGtleSBrZXlwYWlyIHRoYXQgd2FzIHVzZWQgdG8gY3JlYXRlIHRoZSBzaWduYXR1cmVcbiAgICogQHJldHVybnMge1RyYW5zYWN0aW9uQnVpbGRlcn0gVGhpcyB0cmFuc2FjdGlvbiBidWlsZGVyXG4gICAqL1xuICBzaWduYXR1cmUoc2lnbmF0dXJlOiBzdHJpbmcsIGtleVBhaXI6IEtleVBhaXIpOiB0aGlzIHtcbiAgICAvLyBpZiB3ZSBhbHJlYWR5IGhhdmUgYSBzaWduYXR1cmUgZm9yIHRoaXMga2V5IHBhaXIsIGp1c3QgdXBkYXRlIGl0XG4gICAgZm9yIChjb25zdCBvbGRTaWduYXR1cmUgb2YgdGhpcy5fc2lnbmF0dXJlcykge1xuICAgICAgaWYgKG9sZFNpZ25hdHVyZS5rZXlQYWlyLmdldEtleXMoKS5wdWIgPT09IGtleVBhaXIuZ2V0S2V5cygpLnB1Yikge1xuICAgICAgICBvbGRTaWduYXR1cmUuc2lnbmF0dXJlID0gc2lnbmF0dXJlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBvdGhlcndpc2UgYWRkIHRoZSBuZXcgc2lnbmF0dXJlXG4gICAgdGhpcy5fc2lnbmF0dXJlcy5wdXNoKHsgc2lnbmF0dXJlLCBrZXlQYWlyIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgbm9kZUNoYWluTmFtZShjaGFpbk5hbWU6IHN0cmluZyk6IHRoaXMge1xuICAgIHRoaXMuX2NoYWluTmFtZSA9IGNoYWluTmFtZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIGVuZHJlZ2lvblxuXG4gIC8vIHJlZ2lvbiBWYWxpZGF0b3JzXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZUFkZHJlc3MoYWRkcmVzczogQmFzZUFkZHJlc3MpOiB2b2lkIHtcbiAgICBpZiAoIWlzVmFsaWRBZGRyZXNzKGFkZHJlc3MuYWRkcmVzcykpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgYWRkcmVzcyAnICsgYWRkcmVzcy5hZGRyZXNzKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVLZXkoa2V5OiBCYXNlS2V5KTogdm9pZCB7XG4gICAgaWYgKCFuZXcgS2V5UGFpcih7IHBydjoga2V5LmtleSB9KSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCBrZXknKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVSYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCFyYXdUcmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdSYXcgdHJhbnNhY3Rpb24gaXMgZW1wdHknKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIERlcGxveVV0aWwuZGVwbG95RnJvbUpzb24oSlNPTi5wYXJzZShyYXdUcmFuc2FjdGlvbikpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZVRyYW5zYWN0aW9uRXJyb3IoJ1RoZXJlIHdhcyBhbiBlcnJvciBwYXJzaW5nIHRoZSBKU09OIHN0cmluZycpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZVRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uPzogVHJhbnNhY3Rpb24pOiB2b2lkIHtcbiAgICB0aGlzLnZhbGlkYXRlTWFuZGF0b3J5RmllbGRzKCk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVWYWx1ZSh2YWx1ZTogQmlnTnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHZhbHVlLmlzTGVzc1RoYW4oMCkpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ1ZhbHVlIGNhbm5vdCBiZSBsZXNzIHRoYW4gemVybycpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhhdCB0aGUgbWFuZGF0b3J5IGZpZWxkcyBhcmUgZGVmaW5lZFxuICAgKi9cbiAgdmFsaWRhdGVNYW5kYXRvcnlGaWVsZHMoKTogdm9pZCB7XG4gICAgdGhpcy52YWxpZGF0ZUZlZSgpO1xuICAgIHRoaXMudmFsaWRhdGVTb3VyY2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhhdCB0aGUgZmVlIGZpZWxkIGlzIGRlZmluZWRcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVGZWUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2ZlZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIHRyYW5zYWN0aW9uOiBtaXNzaW5nIGZlZScpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuX2ZlZS5nYXNMaW1pdCkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCB0cmFuc2FjdGlvbjogbWlzc2luZyBnYXMgbGltaXQnKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMudmFsaWRhdGVWYWx1ZShuZXcgQmlnTnVtYmVyKHRoaXMuX2ZlZS5nYXNMaW1pdCkpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgZ2FzIGxpbWl0Jyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGF0IHRoZSBzb3VyY2UgZmllbGQgaXMgZGVmaW5lZFxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZVNvdXJjZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fc291cmNlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgdHJhbnNhY3Rpb246IG1pc3Npbmcgc291cmNlJyk7XG4gICAgfVxuICAgIHRoaXMudmFsaWRhdGVBZGRyZXNzKHRoaXMuX3NvdXJjZSk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoYXQgdGhlIGdpdmVuIGtleSBpcyBub3QgYWxyZWFkeSBpbiB0aGlzLl9tdWx0aVNpZ25lcktleVBhaXJzXG4gICAqXG4gICAqIEBwYXJhbSB7QmFzZUtleX0ga2V5IC0gVGhlIGtleSB0byBjaGVja1xuICAgKi9cbiAgcHJpdmF0ZSBjaGVja0R1cGxpY2F0ZWRLZXlzKGtleTogQmFzZUtleSkge1xuICAgIHRoaXMuX211bHRpU2lnbmVyS2V5UGFpcnMuZm9yRWFjaCgoX3NvdXJjZUtleVBhaXIpID0+IHtcbiAgICAgIGlmIChfc291cmNlS2V5UGFpci5nZXRLZXlzKCkucHJ2ID09PSBrZXkua2V5KSB7XG4gICAgICAgIHRocm93IG5ldyBTaWduaW5nRXJyb3IoJ1JlcGVhdGVkIHNpZ246ICcgKyBrZXkua2V5KTtcbiAgICAgIH1cbiAgICAgIC8vIFRyeSB0byBnZXQgZXh0ZW5kZWQga2V5cyBpbiBvcmRlciB0byB2YWxpZGF0ZSB0aGVtXG4gICAgICBsZXQgeHBydjtcbiAgICAgIHRyeSB7XG4gICAgICAgIHhwcnYgPSBfc291cmNlS2V5UGFpci5nZXRFeHRlbmRlZEtleXMoKS54cHJ2O1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh4cHJ2ICYmIHhwcnYgPT09IGtleS5rZXkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFNpZ25pbmdFcnJvcignUmVwZWF0ZWQgc2lnbjogJyArIGtleS5rZXkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLy8gZW5kcmVnaW9uXG5cbiAgLy8gcmVnaW9uIEdldHRlcnMgYW5kIFNldHRlcnNcbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBnZXQgdHJhbnNhY3Rpb24oKTogVHJhbnNhY3Rpb24ge1xuICAgIHJldHVybiB0aGlzLl90cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgc2V0IHRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbikge1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uID0gdHJhbnNhY3Rpb247XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBjaGFpbiBuYW1lIGZvciB0aGUgY29pbiBlbnZpcm9ubWVudFxuICAgKi9cbiAgcHVibGljIGdldCBjaGFpbk5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fY2hhaW5OYW1lO1xuICB9XG4gIC8vIGVuZHJlZ2lvblxuXG4gIC8vIHJlZ2lvbiBhdXhpbGlhcnlNZXRob2RzXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBhIERlcGxveVBhcmFtcyBpbnN0YW5jZSB3aXRoIHRoZSB0cmFuc2FjdGlvbiBkYXRhXG4gICAqXG4gICAqIEByZXR1cm5zIHtEZXBsb3lVdGlsLkRlcGxveVBhcmFtc31cbiAgICovXG4gIHByaXZhdGUgZ2V0RGVwbG95UGFyYW1zKCk6IERlcGxveVV0aWwuRGVwbG95UGFyYW1zIHtcbiAgICBjb25zdCBnYXNQcmljZSA9IHRoaXMuX2ZlZS5nYXNQcmljZSA/IF8ucGFyc2VJbnQodGhpcy5fZmVlLmdhc1ByaWNlKSA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gbmV3IERlcGxveVV0aWwuRGVwbG95UGFyYW1zKFxuICAgICAgUHVibGljS2V5LmZyb21IZXgodGhpcy5fc291cmNlLmFkZHJlc3MpLFxuICAgICAgdGhpcy5fY2hhaW5OYW1lLFxuICAgICAgZ2FzUHJpY2UsXG4gICAgICB0aGlzLl9leHBpcmF0aW9uIHx8IFRSQU5TQUNUSU9OX0VYUElSQVRJT05cbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIHRoZSBzZXNzaW9uIGZvciB0aGUgRGVwbG95IGFjY29yZGluZyB0byB0aGUgdHJhbnNhY3Rpb25UeXBlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7RGVwbG95VXRpbC5FeGVjdXRhYmxlRGVwbG95SXRlbX1cbiAgICovXG4gIHByaXZhdGUgZ2V0U2Vzc2lvbigpOiBEZXBsb3lVdGlsLkV4ZWN1dGFibGVEZXBsb3lJdGVtIHtcbiAgICBsZXQgc2Vzc2lvbjtcbiAgICBzd2l0Y2ggKHRoaXMudHJhbnNhY3Rpb24udHlwZSkge1xuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuU2VuZDpcbiAgICAgICAgY29uc3QgdHJhbnNmZXJTZXNzaW9uID0gdGhpcy5fc2Vzc2lvbiBhcyBDYXNwZXJUcmFuc2ZlclRyYW5zYWN0aW9uO1xuICAgICAgICBzZXNzaW9uID0gRGVwbG95VXRpbC5FeGVjdXRhYmxlRGVwbG95SXRlbS5uZXdUcmFuc2ZlcldpdGhPcHRpb25hbFRyYW5zZmVySWQoXG4gICAgICAgICAgdHJhbnNmZXJTZXNzaW9uLmFtb3VudCxcbiAgICAgICAgICB0cmFuc2ZlclNlc3Npb24udGFyZ2V0LFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICB0cmFuc2ZlclNlc3Npb24uaWRcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5XYWxsZXRJbml0aWFsaXphdGlvbjpcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdMb2NrOlxuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ1VubG9jazpcbiAgICAgICAgY29uc3QgbW9kdWxlQnl0ZXNTZXNzaW9uID0gdGhpcy5fc2Vzc2lvbiBhcyBDYXNwZXJNb2R1bGVCeXRlc1RyYW5zYWN0aW9uO1xuICAgICAgICBzZXNzaW9uID0gRGVwbG95VXRpbC5FeGVjdXRhYmxlRGVwbG95SXRlbS5uZXdNb2R1bGVCeXRlcyhcbiAgICAgICAgICBtb2R1bGVCeXRlc1Nlc3Npb24ubW9kdWxlQnl0ZXMsXG4gICAgICAgICAgbW9kdWxlQnl0ZXNTZXNzaW9uLmFyZ3NcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdUcmFuc2FjdGlvbiBUeXBlIGVycm9yJyk7XG4gICAgfVxuICAgIHJldHVybiBzZXNzaW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIHRoZSB0cmFuc2FjdGlvbiBoYXMgdGhlIG93bmVyIHNpZ25hdHVyZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHViIC0gcHVibGljIGtleSBvZiB0aGUgc2lnbmVyXG4gICAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIHRoZSBwdWIga2V5IGFscmVhZHkgc2lnbmVkIHRoIHRyYW5zYWN0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIGlzVHJhbnNhY3Rpb25TaWduZWRCeVB1YihwdWI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBfLmZpbmRJbmRleCh0aGlzLnRyYW5zYWN0aW9uLmNhc3BlclR4LmFwcHJvdmFscywgKGFwcHJvdmFsKSA9PiB7XG4gICAgICAgIGNvbnN0IGFwcHJvdmFsU2lnbmVyID0gcmVtb3ZlQWxnb1ByZWZpeEZyb21IZXhWYWx1ZShhcHByb3ZhbC5zaWduZXIpO1xuICAgICAgICByZXR1cm4gYXBwcm92YWxTaWduZXIgPT09IHB1YjtcbiAgICAgIH0pICE9PSAtMVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIHNpZ25hdHVyZXMgdG8gdGhlIHRyYW5zYWN0aW9uXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIHByb2Nlc3NTaWduaW5nKCk6IHZvaWQge1xuICAgIGZvciAoY29uc3Qga2V5UGFpciBvZiB0aGlzLl9tdWx0aVNpZ25lcktleVBhaXJzKSB7XG4gICAgICAvLyBBZGQgc2lnbmF0dXJlIGlmIGl0J3Mgbm90IGFscmVhZHkgaW4gdGhlIGRlcGxveVxuICAgICAgaWYgKCF0aGlzLmlzVHJhbnNhY3Rpb25TaWduZWRCeVB1YihrZXlQYWlyLmdldEtleXMoKS5wdWIpKSB7XG4gICAgICAgIHRoaXMudHJhbnNhY3Rpb24uc2lnbihrZXlQYWlyKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCB7IHNpZ25hdHVyZSwga2V5UGFpciB9IG9mIHRoaXMuX3NpZ25hdHVyZXMpIHtcbiAgICAgIC8vIEFkZCBzaWduYXR1cmUgaWYgaXQncyBub3QgYWxyZWFkeSBpbiB0aGUgZGVwbG95XG4gICAgICBpZiAoIXRoaXMuaXNUcmFuc2FjdGlvblNpZ25lZEJ5UHViKGtleVBhaXIuZ2V0S2V5cygpLnB1YikpIHtcbiAgICAgICAgdGhpcy50cmFuc2FjdGlvbi5hZGRTaWduYXR1cmUoc2lnbmF0dXJlLCBrZXlQYWlyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLy8gZW5kcmVnaW9uXG59XG4iXX0=
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
|
|
2
|
-
import { BaseTransactionBuilderFactory } from '@bitgo-beta/sdk-core';
|
|
3
|
-
import { WalletInitializationBuilder } from './walletInitializationBuilder';
|
|
4
|
-
import { TransferBuilder } from './transferBuilder';
|
|
5
|
-
import { TransactionBuilder } from './transactionBuilder';
|
|
6
|
-
import { Transaction } from './transaction';
|
|
7
|
-
import { DelegateBuilder } from './delegateBuilder';
|
|
8
|
-
import { UndelegateBuilder } from './undelegateBuilder';
|
|
9
|
-
export declare class TransactionBuilderFactory extends BaseTransactionBuilderFactory {
|
|
10
|
-
constructor(_coinConfig: Readonly<CoinConfig>);
|
|
11
|
-
/** @inheritdoc */
|
|
12
|
-
getWalletInitializationBuilder(tx?: Transaction): WalletInitializationBuilder;
|
|
13
|
-
/**
|
|
14
|
-
* Initialize an undelegate builder
|
|
15
|
-
*
|
|
16
|
-
* @param {Transaction | undefined} tx - the transaction used to initialize the builder
|
|
17
|
-
* @returns {UndelegateBuilder} the builder initialized
|
|
18
|
-
*/
|
|
19
|
-
getUndelegateBuilder(tx?: Transaction): UndelegateBuilder;
|
|
20
|
-
/**
|
|
21
|
-
* Initialize an delegate builder
|
|
22
|
-
*
|
|
23
|
-
* @param {Transaction | undefined} tx - the transaction used to initialize the builder
|
|
24
|
-
* @returns {DelegateBuilder} the builder initialized
|
|
25
|
-
*/
|
|
26
|
-
getDelegateBuilder(tx?: Transaction): DelegateBuilder;
|
|
27
|
-
/** @inheritDoc */
|
|
28
|
-
getTransferBuilder(tx?: Transaction): TransferBuilder;
|
|
29
|
-
/** @inheritDoc */
|
|
30
|
-
from(raw: string): TransactionBuilder;
|
|
31
|
-
/**
|
|
32
|
-
* Initialize the builder with the given transaction
|
|
33
|
-
*
|
|
34
|
-
* @param {Transaction | undefined} tx - the transaction used to initialize the builder
|
|
35
|
-
* @param {TransactionBuilder} builder - the builder to be initialized
|
|
36
|
-
* @returns {TransactionBuilder} the builder initialized
|
|
37
|
-
*/
|
|
38
|
-
private initializeBuilder;
|
|
39
|
-
/**
|
|
40
|
-
* Check the raw transaction has a valid format in the blockchain context, throw otherwise.
|
|
41
|
-
*
|
|
42
|
-
* @param {any} rawTransaction - Transaction in any format
|
|
43
|
-
*/
|
|
44
|
-
private validateRawTransaction;
|
|
45
|
-
}
|
|
46
|
-
//# sourceMappingURL=transactionBuilderFactory.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"transactionBuilderFactory.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilderFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAE7D,OAAO,EACL,6BAA6B,EAI9B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,qBAAa,yBAA0B,SAAQ,6BAA6B;gBAC9D,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI7C,kBAAkB;IAClB,8BAA8B,CAAC,EAAE,CAAC,EAAE,WAAW,GAAG,2BAA2B;IAI7E;;;;;OAKG;IACH,oBAAoB,CAAC,EAAE,CAAC,EAAE,WAAW,GAAG,iBAAiB;IAIzD;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,CAAC,EAAE,WAAW,GAAG,eAAe;IAIrD,kBAAkB;IAClB,kBAAkB,CAAC,EAAE,CAAC,EAAE,WAAW,GAAG,eAAe;IAIrD,kBAAkB;IAClB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,kBAAkB;IAyBrC;;;;;;OAMG;IACH,OAAO,CAAC,iBAAiB;IAOzB;;;;OAIG;IACH,OAAO,CAAC,sBAAsB;CAU/B"}
|
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.TransactionBuilderFactory = void 0;
|
|
4
|
-
const casper_js_sdk_1 = require("casper-js-sdk");
|
|
5
|
-
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
6
|
-
const walletInitializationBuilder_1 = require("./walletInitializationBuilder");
|
|
7
|
-
const transferBuilder_1 = require("./transferBuilder");
|
|
8
|
-
const transaction_1 = require("./transaction");
|
|
9
|
-
const utils_1 = require("./utils");
|
|
10
|
-
const delegateBuilder_1 = require("./delegateBuilder");
|
|
11
|
-
const undelegateBuilder_1 = require("./undelegateBuilder");
|
|
12
|
-
class TransactionBuilderFactory extends sdk_core_1.BaseTransactionBuilderFactory {
|
|
13
|
-
constructor(_coinConfig) {
|
|
14
|
-
super(_coinConfig);
|
|
15
|
-
}
|
|
16
|
-
/** @inheritdoc */
|
|
17
|
-
getWalletInitializationBuilder(tx) {
|
|
18
|
-
return this.initializeBuilder(tx, new walletInitializationBuilder_1.WalletInitializationBuilder(this._coinConfig));
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Initialize an undelegate builder
|
|
22
|
-
*
|
|
23
|
-
* @param {Transaction | undefined} tx - the transaction used to initialize the builder
|
|
24
|
-
* @returns {UndelegateBuilder} the builder initialized
|
|
25
|
-
*/
|
|
26
|
-
getUndelegateBuilder(tx) {
|
|
27
|
-
return this.initializeBuilder(tx, new undelegateBuilder_1.UndelegateBuilder(this._coinConfig));
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* Initialize an delegate builder
|
|
31
|
-
*
|
|
32
|
-
* @param {Transaction | undefined} tx - the transaction used to initialize the builder
|
|
33
|
-
* @returns {DelegateBuilder} the builder initialized
|
|
34
|
-
*/
|
|
35
|
-
getDelegateBuilder(tx) {
|
|
36
|
-
return this.initializeBuilder(tx, new delegateBuilder_1.DelegateBuilder(this._coinConfig));
|
|
37
|
-
}
|
|
38
|
-
/** @inheritDoc */
|
|
39
|
-
getTransferBuilder(tx) {
|
|
40
|
-
return this.initializeBuilder(tx, new transferBuilder_1.TransferBuilder(this._coinConfig));
|
|
41
|
-
}
|
|
42
|
-
/** @inheritDoc */
|
|
43
|
-
from(raw) {
|
|
44
|
-
this.validateRawTransaction(raw);
|
|
45
|
-
const tx = new transaction_1.Transaction(this._coinConfig);
|
|
46
|
-
const deployJson = JSON.parse(raw);
|
|
47
|
-
try {
|
|
48
|
-
tx.casperTx = casper_js_sdk_1.DeployUtil.deployFromJson(deployJson).unwrap();
|
|
49
|
-
}
|
|
50
|
-
catch (e) {
|
|
51
|
-
throw new sdk_core_1.InvalidTransactionError('Invalid transaction: ' + e);
|
|
52
|
-
}
|
|
53
|
-
const casperDeployType = utils_1.getDeployType(tx.casperTx.session);
|
|
54
|
-
switch (casperDeployType) {
|
|
55
|
-
case sdk_core_1.TransactionType.Send:
|
|
56
|
-
return this.getTransferBuilder(tx);
|
|
57
|
-
case sdk_core_1.TransactionType.WalletInitialization:
|
|
58
|
-
return this.getWalletInitializationBuilder(tx);
|
|
59
|
-
case sdk_core_1.TransactionType.StakingLock:
|
|
60
|
-
return this.getDelegateBuilder(tx);
|
|
61
|
-
case sdk_core_1.TransactionType.StakingUnlock:
|
|
62
|
-
return this.getUndelegateBuilder(tx);
|
|
63
|
-
default:
|
|
64
|
-
throw new sdk_core_1.InvalidTransactionError('Invalid transaction ' + tx.casperTx);
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
/**
|
|
68
|
-
* Initialize the builder with the given transaction
|
|
69
|
-
*
|
|
70
|
-
* @param {Transaction | undefined} tx - the transaction used to initialize the builder
|
|
71
|
-
* @param {TransactionBuilder} builder - the builder to be initialized
|
|
72
|
-
* @returns {TransactionBuilder} the builder initialized
|
|
73
|
-
*/
|
|
74
|
-
initializeBuilder(tx, builder) {
|
|
75
|
-
if (tx) {
|
|
76
|
-
builder.initBuilder(tx);
|
|
77
|
-
}
|
|
78
|
-
return builder;
|
|
79
|
-
}
|
|
80
|
-
/**
|
|
81
|
-
* Check the raw transaction has a valid format in the blockchain context, throw otherwise.
|
|
82
|
-
*
|
|
83
|
-
* @param {any} rawTransaction - Transaction in any format
|
|
84
|
-
*/
|
|
85
|
-
validateRawTransaction(rawTransaction) {
|
|
86
|
-
if (!rawTransaction) {
|
|
87
|
-
throw new sdk_core_1.ParseTransactionError('Invalid raw transaction: Undefined');
|
|
88
|
-
}
|
|
89
|
-
try {
|
|
90
|
-
JSON.parse(rawTransaction);
|
|
91
|
-
}
|
|
92
|
-
catch (e) {
|
|
93
|
-
throw new sdk_core_1.ParseTransactionError('Invalid raw transaction format');
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
exports.TransactionBuilderFactory = TransactionBuilderFactory;
|
|
98
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvdHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSxpREFBMkM7QUFDM0MsbURBSzhCO0FBQzlCLCtFQUE0RTtBQUM1RSx1REFBb0Q7QUFFcEQsK0NBQTRDO0FBQzVDLG1DQUF3QztBQUN4Qyx1REFBb0Q7QUFDcEQsMkRBQXdEO0FBRXhELE1BQWEseUJBQTBCLFNBQVEsd0NBQTZCO0lBQzFFLFlBQVksV0FBaUM7UUFDM0MsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsOEJBQThCLENBQUMsRUFBZ0I7UUFDN0MsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFBRSxFQUFFLElBQUkseURBQTJCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDdkYsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsb0JBQW9CLENBQUMsRUFBZ0I7UUFDbkMsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFBRSxFQUFFLElBQUkscUNBQWlCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDN0UsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsa0JBQWtCLENBQUMsRUFBZ0I7UUFDakMsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFBRSxFQUFFLElBQUksaUNBQWUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLGtCQUFrQixDQUFDLEVBQWdCO1FBQ2pDLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsRUFBRSxJQUFJLGlDQUFlLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixJQUFJLENBQUMsR0FBVztRQUNkLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNqQyxNQUFNLEVBQUUsR0FBRyxJQUFJLHlCQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzdDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbkMsSUFBSTtZQUNGLEVBQUUsQ0FBQyxRQUFRLEdBQUcsMEJBQVUsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7U0FDOUQ7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLE1BQU0sSUFBSSxrQ0FBdUIsQ0FBQyx1QkFBdUIsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUNoRTtRQUVELE1BQU0sZ0JBQWdCLEdBQUcscUJBQWEsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzVELFFBQVEsZ0JBQWdCLEVBQUU7WUFDeEIsS0FBSywwQkFBZSxDQUFDLElBQUk7Z0JBQ3ZCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3JDLEtBQUssMEJBQWUsQ0FBQyxvQkFBb0I7Z0JBQ3ZDLE9BQU8sSUFBSSxDQUFDLDhCQUE4QixDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2pELEtBQUssMEJBQWUsQ0FBQyxXQUFXO2dCQUM5QixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNyQyxLQUFLLDBCQUFlLENBQUMsYUFBYTtnQkFDaEMsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDdkM7Z0JBQ0UsTUFBTSxJQUFJLGtDQUF1QixDQUFDLHNCQUFzQixHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUMzRTtJQUNILENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSyxpQkFBaUIsQ0FBK0IsRUFBMkIsRUFBRSxPQUFVO1FBQzdGLElBQUksRUFBRSxFQUFFO1lBQ04sT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUN6QjtRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssc0JBQXNCLENBQUMsY0FBc0I7UUFDbkQsSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUNuQixNQUFNLElBQUksZ0NBQXFCLENBQUMsb0NBQW9DLENBQUMsQ0FBQztTQUN2RTtRQUNELElBQUk7WUFDRixJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1NBQzVCO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDVixNQUFNLElBQUksZ0NBQXFCLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztTQUNuRTtJQUNILENBQUM7Q0FDRjtBQTFGRCw4REEwRkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgeyBEZXBsb3lVdGlsIH0gZnJvbSAnY2FzcGVyLWpzLXNkayc7XG5pbXBvcnQge1xuICBCYXNlVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSxcbiAgVHJhbnNhY3Rpb25UeXBlLFxuICBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcixcbiAgUGFyc2VUcmFuc2FjdGlvbkVycm9yLFxufSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBXYWxsZXRJbml0aWFsaXphdGlvbkJ1aWxkZXIgfSBmcm9tICcuL3dhbGxldEluaXRpYWxpemF0aW9uQnVpbGRlcic7XG5pbXBvcnQgeyBUcmFuc2ZlckJ1aWxkZXIgfSBmcm9tICcuL3RyYW5zZmVyQnVpbGRlcic7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkJ1aWxkZXIgfSBmcm9tICcuL3RyYW5zYWN0aW9uQnVpbGRlcic7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgZ2V0RGVwbG95VHlwZSB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgRGVsZWdhdGVCdWlsZGVyIH0gZnJvbSAnLi9kZWxlZ2F0ZUJ1aWxkZXInO1xuaW1wb3J0IHsgVW5kZWxlZ2F0ZUJ1aWxkZXIgfSBmcm9tICcuL3VuZGVsZWdhdGVCdWlsZGVyJztcblxuZXhwb3J0IGNsYXNzIFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkgZXh0ZW5kcyBCYXNlVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSB7XG4gIGNvbnN0cnVjdG9yKF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKF9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBnZXRXYWxsZXRJbml0aWFsaXphdGlvbkJ1aWxkZXIodHg/OiBUcmFuc2FjdGlvbik6IFdhbGxldEluaXRpYWxpemF0aW9uQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuaW5pdGlhbGl6ZUJ1aWxkZXIodHgsIG5ldyBXYWxsZXRJbml0aWFsaXphdGlvbkJ1aWxkZXIodGhpcy5fY29pbkNvbmZpZykpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgYW4gdW5kZWxlZ2F0ZSBidWlsZGVyXG4gICAqXG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb24gfCB1bmRlZmluZWR9IHR4IC0gdGhlIHRyYW5zYWN0aW9uIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgYnVpbGRlclxuICAgKiBAcmV0dXJucyB7VW5kZWxlZ2F0ZUJ1aWxkZXJ9IHRoZSBidWlsZGVyIGluaXRpYWxpemVkXG4gICAqL1xuICBnZXRVbmRlbGVnYXRlQnVpbGRlcih0eD86IFRyYW5zYWN0aW9uKTogVW5kZWxlZ2F0ZUJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLmluaXRpYWxpemVCdWlsZGVyKHR4LCBuZXcgVW5kZWxlZ2F0ZUJ1aWxkZXIodGhpcy5fY29pbkNvbmZpZykpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgYW4gZGVsZWdhdGUgYnVpbGRlclxuICAgKlxuICAgKiBAcGFyYW0ge1RyYW5zYWN0aW9uIHwgdW5kZWZpbmVkfSB0eCAtIHRoZSB0cmFuc2FjdGlvbiB1c2VkIHRvIGluaXRpYWxpemUgdGhlIGJ1aWxkZXJcbiAgICogQHJldHVybnMge0RlbGVnYXRlQnVpbGRlcn0gdGhlIGJ1aWxkZXIgaW5pdGlhbGl6ZWRcbiAgICovXG4gIGdldERlbGVnYXRlQnVpbGRlcih0eD86IFRyYW5zYWN0aW9uKTogRGVsZWdhdGVCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5pbml0aWFsaXplQnVpbGRlcih0eCwgbmV3IERlbGVnYXRlQnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKSk7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgZ2V0VHJhbnNmZXJCdWlsZGVyKHR4PzogVHJhbnNhY3Rpb24pOiBUcmFuc2ZlckJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLmluaXRpYWxpemVCdWlsZGVyKHR4LCBuZXcgVHJhbnNmZXJCdWlsZGVyKHRoaXMuX2NvaW5Db25maWcpKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBmcm9tKHJhdzogc3RyaW5nKTogVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgICB0aGlzLnZhbGlkYXRlUmF3VHJhbnNhY3Rpb24ocmF3KTtcbiAgICBjb25zdCB0eCA9IG5ldyBUcmFuc2FjdGlvbih0aGlzLl9jb2luQ29uZmlnKTtcbiAgICBjb25zdCBkZXBsb3lKc29uID0gSlNPTi5wYXJzZShyYXcpO1xuICAgIHRyeSB7XG4gICAgICB0eC5jYXNwZXJUeCA9IERlcGxveVV0aWwuZGVwbG95RnJvbUpzb24oZGVwbG95SnNvbikudW53cmFwKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIHRyYW5zYWN0aW9uOiAnICsgZSk7XG4gICAgfVxuXG4gICAgY29uc3QgY2FzcGVyRGVwbG95VHlwZSA9IGdldERlcGxveVR5cGUodHguY2FzcGVyVHguc2Vzc2lvbik7XG4gICAgc3dpdGNoIChjYXNwZXJEZXBsb3lUeXBlKSB7XG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5TZW5kOlxuICAgICAgICByZXR1cm4gdGhpcy5nZXRUcmFuc2ZlckJ1aWxkZXIodHgpO1xuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuV2FsbGV0SW5pdGlhbGl6YXRpb246XG4gICAgICAgIHJldHVybiB0aGlzLmdldFdhbGxldEluaXRpYWxpemF0aW9uQnVpbGRlcih0eCk7XG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nTG9jazpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RGVsZWdhdGVCdWlsZGVyKHR4KTtcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdVbmxvY2s6XG4gICAgICAgIHJldHVybiB0aGlzLmdldFVuZGVsZWdhdGVCdWlsZGVyKHR4KTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCB0cmFuc2FjdGlvbiAnICsgdHguY2FzcGVyVHgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIHRoZSBidWlsZGVyIHdpdGggdGhlIGdpdmVuIHRyYW5zYWN0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb24gfCB1bmRlZmluZWR9IHR4IC0gdGhlIHRyYW5zYWN0aW9uIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgYnVpbGRlclxuICAgKiBAcGFyYW0ge1RyYW5zYWN0aW9uQnVpbGRlcn0gYnVpbGRlciAtIHRoZSBidWlsZGVyIHRvIGJlIGluaXRpYWxpemVkXG4gICAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbkJ1aWxkZXJ9IHRoZSBidWlsZGVyIGluaXRpYWxpemVkXG4gICAqL1xuICBwcml2YXRlIGluaXRpYWxpemVCdWlsZGVyPFQgZXh0ZW5kcyBUcmFuc2FjdGlvbkJ1aWxkZXI+KHR4OiBUcmFuc2FjdGlvbiB8IHVuZGVmaW5lZCwgYnVpbGRlcjogVCk6IFQge1xuICAgIGlmICh0eCkge1xuICAgICAgYnVpbGRlci5pbml0QnVpbGRlcih0eCk7XG4gICAgfVxuICAgIHJldHVybiBidWlsZGVyO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHRoZSByYXcgdHJhbnNhY3Rpb24gaGFzIGEgdmFsaWQgZm9ybWF0IGluIHRoZSBibG9ja2NoYWluIGNvbnRleHQsIHRocm93IG90aGVyd2lzZS5cbiAgICpcbiAgICogQHBhcmFtIHthbnl9IHJhd1RyYW5zYWN0aW9uIC0gVHJhbnNhY3Rpb24gaW4gYW55IGZvcm1hdFxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZVJhd1RyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uOiBzdHJpbmcpIHtcbiAgICBpZiAoIXJhd1RyYW5zYWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2VUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIHJhdyB0cmFuc2FjdGlvbjogVW5kZWZpbmVkJyk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBKU09OLnBhcnNlKHJhd1RyYW5zYWN0aW9uKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2VUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIHJhdyB0cmFuc2FjdGlvbiBmb3JtYXQnKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
|
|
2
|
-
import { BaseKey } from '@bitgo-beta/sdk-core';
|
|
3
|
-
import { TransactionBuilder } from './transactionBuilder';
|
|
4
|
-
import { Transaction } from './transaction';
|
|
5
|
-
export declare class TransferBuilder extends TransactionBuilder {
|
|
6
|
-
private _toAddress;
|
|
7
|
-
private _amount;
|
|
8
|
-
private _transferId;
|
|
9
|
-
constructor(_coinConfig: Readonly<CoinConfig>);
|
|
10
|
-
/** @inheritdoc */
|
|
11
|
-
protected buildImplementation(): Promise<Transaction>;
|
|
12
|
-
/** @inheritdoc */
|
|
13
|
-
initBuilder(tx: Transaction): void;
|
|
14
|
-
/** @inheritdoc */
|
|
15
|
-
protected signImplementation(key: BaseKey): Transaction;
|
|
16
|
-
/**
|
|
17
|
-
* Set the destination address where the funds will be sent,
|
|
18
|
-
*
|
|
19
|
-
* @param {string} address the address to transfer funds to
|
|
20
|
-
* @returns {TransferBuilder} the builder with the new parameter set
|
|
21
|
-
*/
|
|
22
|
-
to(address: string): this;
|
|
23
|
-
/**
|
|
24
|
-
* Set the amount to be transferred
|
|
25
|
-
*
|
|
26
|
-
* @param {string} amount amount to transfer in motes (1 Cspr equals 1,000,000,000 motes)
|
|
27
|
-
* @returns {TransferBuilder} the builder with the new parameter set
|
|
28
|
-
*/
|
|
29
|
-
amount(amount: string): this;
|
|
30
|
-
/**
|
|
31
|
-
* Set transfer id that acts as a transaction identifier (similar to memo id for Stellar)
|
|
32
|
-
*
|
|
33
|
-
* @param {number} id transfer id
|
|
34
|
-
* @returns {TransferBuilder} the builder with the new parameter set
|
|
35
|
-
*/
|
|
36
|
-
transferId(id: number | string): this;
|
|
37
|
-
validateMandatoryFields(): void;
|
|
38
|
-
}
|
|
39
|
-
//# sourceMappingURL=transferBuilder.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"transferBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/transferBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAE7D,OAAO,EACL,OAAO,EAKR,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,kBAAkB,EAAa,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAW5C,qBAAa,eAAgB,SAAQ,kBAAkB;IACrD,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,WAAW,CAAkB;gBAEzB,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI7C,kBAAkB;cACF,mBAAmB,IAAI,OAAO,CAAC,WAAW,CAAC;IAgB3D,kBAAkB;IAClB,WAAW,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI;IAWlC,kBAAkB;IAClB,SAAS,CAAC,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,WAAW;IAQvD;;;;;OAKG;IACH,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAQzB;;;;;OAKG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAQ5B;;;;;OAKG;IACH,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAWrC,uBAAuB,IAAI,IAAI;CAgBhC"}
|