@bitgo/sdk-coin-cspr 2.2.13 → 2.2.15
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 +8 -0
- package/package.json +6 -6
- package/LICENSE +0 -191
- package/dist/src/cspr.d.ts +0 -107
- package/dist/src/cspr.d.ts.map +0 -1
- package/dist/src/cspr.js +0 -314
- package/dist/src/index.d.ts +0 -5
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/index.js +0 -44
- 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 -45
- 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 -55
- 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 -240
- 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 -490
- 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/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 (!(0, 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 = (0, 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsZ0VBQXFDO0FBRXJDLGlEQUFxRTtBQUNyRSxvREFBdUI7QUFDdkIsOENBU3lCO0FBQ3pCLCtDQUE0QztBQUM1Qyx1Q0FBb0M7QUFRcEMsbUNBQXVFO0FBQ3ZFLDJDQUEwRTtBQUU3RCxRQUFBLFNBQVMsR0FBRyxDQUFDLENBQUM7QUFDZCxRQUFBLFNBQVMsR0FBRyxDQUFDLENBQUM7QUFDM0IsTUFBc0Isa0JBQW1CLFNBQVEsaUNBQXNCO0lBVXJFLFlBQVksV0FBaUM7UUFDM0MsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ25CLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSx5QkFBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQyxvQkFBb0IsR0FBRyxFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQywrQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLCtCQUFtQixDQUFDLE9BQU8sQ0FBQztJQUMzRyxDQUFDO0lBRUQsc0JBQXNCO0lBQ3RCLGtCQUFrQjtJQUNSLEtBQUssQ0FBQyxtQkFBbUI7UUFDakMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzVDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUVsQyxNQUFNLE9BQU8sR0FBRywwQkFBVSxDQUFDLGVBQWUsQ0FBQyxnQkFBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFFM0Us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QUFDO1lBQ3JFLE9BQU8sY0FBYyxLQUFLLEdBQUcsQ0FBQztRQUNoQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FDVixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxjQUFjO1FBQ3BCLEtBQUssTUFBTSxPQUFPLElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDaEQsa0RBQWtEO1lBQ2xELElBQUksQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQzFELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2pDLENBQUM7UUFDSCxDQUFDO1FBQ0QsS0FBSyxNQUFNLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN0RCxrREFBa0Q7WUFDbEQsSUFBSSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDMUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ3BELENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztDQUVGO0FBaFdELGdEQWdXQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCaWdOdW1iZXIgZnJvbSAnYmlnbnVtYmVyLmpzJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5pbXBvcnQgeyBEZXBsb3lVdGlsLCBDTFB1YmxpY0tleSBhcyBQdWJsaWNLZXkgfSBmcm9tICdjYXNwZXItanMtc2RrJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQge1xuICBCYXNlQWRkcmVzcyxcbiAgQmFzZUtleSxcbiAgQmFzZVRyYW5zYWN0aW9uQnVpbGRlcixcbiAgQnVpbGRUcmFuc2FjdGlvbkVycm9yLFxuICBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcixcbiAgUGFyc2VUcmFuc2FjdGlvbkVycm9yLFxuICBTaWduaW5nRXJyb3IsXG4gIFRyYW5zYWN0aW9uVHlwZSxcbn0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbic7XG5pbXBvcnQgeyBLZXlQYWlyIH0gZnJvbSAnLi9rZXlQYWlyJztcbmltcG9ydCB7XG4gIEZlZSxcbiAgQ2FzcGVyTW9kdWxlQnl0ZXNUcmFuc2FjdGlvbixcbiAgQ2FzcGVyVHJhbnNmZXJUcmFuc2FjdGlvbixcbiAgQ2FzcGVyRGVsZWdhdGVUcmFuc2FjdGlvbixcbiAgU2lnbmF0dXJlRGF0YSxcbn0gZnJvbSAnLi9pZmFjZXMnO1xuaW1wb3J0IHsgaXNWYWxpZEFkZHJlc3MsIHJlbW92ZUFsZ29QcmVmaXhGcm9tSGV4VmFsdWUgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IERFRkFVTFRfQ0hBSU5fTkFNRVMsIFRSQU5TQUNUSU9OX0VYUElSQVRJT04gfSBmcm9tICcuL2NvbnN0YW50cyc7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX00gPSAzO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfTiA9IDI7XG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgVHJhbnNhY3Rpb25CdWlsZGVyIGV4dGVuZHMgQmFzZVRyYW5zYWN0aW9uQnVpbGRlciB7XG4gIHByb3RlY3RlZCBfc291cmNlOiBCYXNlQWRkcmVzcztcbiAgcHJvdGVjdGVkIF9mZWU6IEZlZTtcbiAgcHJpdmF0ZSBfdHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uO1xuICBwcm90ZWN0ZWQgX3Nlc3Npb246IENhc3BlclRyYW5zZmVyVHJhbnNhY3Rpb24gfCBDYXNwZXJNb2R1bGVCeXRlc1RyYW5zYWN0aW9uIHwgQ2FzcGVyRGVsZWdhdGVUcmFuc2FjdGlvbjtcbiAgcHJvdGVjdGVkIF9leHBpcmF0aW9uOiBudW1iZXI7XG4gIHByb3RlY3RlZCBfbXVsdGlTaWduZXJLZXlQYWlyczogS2V5UGFpcltdO1xuICBwcm90ZWN0ZWQgX3NpZ25hdHVyZXM6IFNpZ25hdHVyZURhdGFbXTtcbiAgcHJvdGVjdGVkIF9jaGFpbk5hbWU6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihfY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihfY29pbkNvbmZpZyk7XG4gICAgdGhpcy50cmFuc2FjdGlvbiA9IG5ldyBUcmFuc2FjdGlvbihfY29pbkNvbmZpZyk7XG4gICAgdGhpcy5fbXVsdGlTaWduZXJLZXlQYWlycyA9IFtdO1xuICAgIHRoaXMuX3NpZ25hdHVyZXMgPSBbXTtcbiAgICB0aGlzLl9jaGFpbk5hbWUgPSB0aGlzLmNvaW5OYW1lKCkgPT09ICdjc3ByJyA/IERFRkFVTFRfQ0hBSU5fTkFNRVMubWFpbm5ldCA6IERFRkFVTFRfQ0hBSU5fTkFNRVMudGVzdG5ldDtcbiAgfVxuXG4gIC8vIHJlZ2lvbiBCYXNlIEJ1aWxkZXJcbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBhc3luYyBidWlsZEltcGxlbWVudGF0aW9uKCk6IFByb21pc2U8VHJhbnNhY3Rpb24+IHtcbiAgICBjb25zdCBkZXBsb3lQYXJhbXMgPSB0aGlzLmdldERlcGxveVBhcmFtcygpO1xuICAgIGNvbnN0IHNlc3Npb24gPSB0aGlzLmdldFNlc3Npb24oKTtcblxuICAgIGNvbnN0IHBheW1lbnQgPSBEZXBsb3lVdGlsLnN0YW5kYXJkUGF5bWVudChfLnBhcnNlSW50KHRoaXMuX2ZlZS5nYXNMaW1pdCkpO1xuXG4gICAgbGV0IGNUcmFuc2FjdGlvbiA9IHRoaXMudHJhbnNhY3Rpb24uY2FzcGVyVHggfHwgRGVwbG95VXRpbC5tYWtlRGVwbG95KGRlcGxveVBhcmFtcywgc2Vzc2lvbiwgcGF5bWVudCk7XG5cbiAgICAvLyBDYW5ub3QgYWRkIGFyZ3VtZW50cyB0byBhbiBhbHJlYWR5IHNpZ25lZCBkZXBsb3kuXG4gICAgaWYgKGNUcmFuc2FjdGlvbi5hcHByb3ZhbHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLl9zZXNzaW9uLmV4dHJhQXJndW1lbnRzLmZvckVhY2goKGV4dHJhQXJndW1lbnQsIGV4dHJhQXJndW1lbnROYW1lKSA9PiB7XG4gICAgICAgIGlmICghY1RyYW5zYWN0aW9uLnNlc3Npb24uZ2V0QXJnQnlOYW1lKGV4dHJhQXJndW1lbnROYW1lKSkge1xuICAgICAgICAgIGNUcmFuc2FjdGlvbiA9IERlcGxveVV0aWwuYWRkQXJnVG9EZXBsb3koY1RyYW5zYWN0aW9uLCBleHRyYUFyZ3VtZW50TmFtZSwgZXh0cmFBcmd1bWVudCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMudHJhbnNhY3Rpb24uY2FzcGVyVHggPSBjVHJhbnNhY3Rpb247XG5cbiAgICB0aGlzLnByb2Nlc3NTaWduaW5nKCk7XG5cbiAgICByZXR1cm4gdGhpcy50cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgZnJvbUltcGxlbWVudGF0aW9uKHJhd1RyYW5zYWN0aW9uOiBzdHJpbmcpOiBUcmFuc2FjdGlvbiB7XG4gICAgY29uc3QgdHggPSBuZXcgVHJhbnNhY3Rpb24odGhpcy5fY29pbkNvbmZpZyk7XG4gICAgY29uc3QganNvblRyYW5zYWN0aW9uID0gSlNPTi5wYXJzZShyYXdUcmFuc2FjdGlvbik7XG4gICAgdHguY2FzcGVyVHggPSBEZXBsb3lVdGlsLmRlcGxveUZyb21Kc29uKGpzb25UcmFuc2FjdGlvbikudW53cmFwKCk7XG4gICAgdGhpcy5pbml0QnVpbGRlcih0eCk7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNhY3Rpb247XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIHNpZ25JbXBsZW1lbnRhdGlvbihrZXk6IEJhc2VLZXkpOiBUcmFuc2FjdGlvbiB7XG4gICAgdGhpcy5jaGVja0R1cGxpY2F0ZWRLZXlzKGtleSk7XG4gICAgY29uc3Qgc2lnbmVyID0gbmV3IEtleVBhaXIoeyBwcnY6IGtleS5rZXkgfSk7XG5cbiAgICAvLyBTaWduaW5nIHRoZSB0cmFuc2FjdGlvbiBpcyBhbiBvcGVyYXRpb24gdGhhdCByZWxpZXMgb24gYWxsIHRoZSBkYXRhIGJlaW5nIHNldCxcbiAgICAvLyBzbyB3ZSBzZXQgdGhlIHNvdXJjZSBoZXJlIGFuZCBsZWF2ZSB0aGUgYWN0dWFsIHNpZ25pbmcgZm9yIHRoZSBidWlsZCBzdGVwXG4gICAgdGhpcy5fbXVsdGlTaWduZXJLZXlQYWlycy5wdXNoKHNpZ25lcik7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNhY3Rpb247XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSB0aGUgdHJhbnNhY3Rpb24gYnVpbGRlciBmaWVsZHMgdXNpbmcgdGhlIGRlY29kZWQgdHJhbnNhY3Rpb24gZGF0YVxuICAgKlxuICAgKiBAcGFyYW0ge1RyYW5zYWN0aW9ufSB0eCB0aGUgdHJhbnNhY3Rpb24gZGF0YVxuICAgKi9cbiAgaW5pdEJ1aWxkZXIodHg6IFRyYW5zYWN0aW9uKTogdm9pZCB7XG4gICAgdGhpcy50cmFuc2FjdGlvbiA9IHR4O1xuICAgIHRoaXMudHJhbnNhY3Rpb24ubG9hZFByZXZpb3VzU2lnbmF0dXJlcygpO1xuICAgIGNvbnN0IHR4RGF0YSA9IHR4LnRvSnNvbigpO1xuICAgIHRoaXMuZmVlKHR4RGF0YS5mZWUpO1xuICAgIHRoaXMuc291cmNlKHsgYWRkcmVzczogdHhEYXRhLmZyb20gfSk7XG4gICAgdGhpcy5leHBpcmF0aW9uKHR4RGF0YS5leHBpcmF0aW9uIHx8IFRSQU5TQUNUSU9OX0VYUElSQVRJT04pO1xuICB9XG5cbiAgLy8gZW5kcmVnaW9uXG5cbiAgLy8gcmVnaW9uIENvbW1vbiBidWlsZGVyIG1ldGhvZHNcblxuICAvKipcbiAgICogU2V0IHRoZSB0cmFuc2FjdGlvbiBmZWVzXG4gICAqXG4gICAqIEBwYXJhbSB7QmFzZUZlZX0gZmVlIFRoZSBtYXhpbXVtIGdhcyB0byBwYXlcbiAgICogQHJldHVybnMge1RyYW5zYWN0aW9uQnVpbGRlcn0gVGhpcyB0cmFuc2FjdGlvbiBidWlsZGVyXG4gICAqL1xuICBmZWUoZmVlOiBGZWUpOiB0aGlzIHtcbiAgICB0aGlzLnZhbGlkYXRlVmFsdWUobmV3IEJpZ051bWJlcihmZWUuZ2FzTGltaXQpKTtcbiAgICB0aGlzLl9mZWUgPSBmZWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSB0cmFuc2FjdGlvbiBzb3VyY2VcbiAgICpcbiAgICogQHBhcmFtIHtCYXNlQWRkcmVzc30gYWRkcmVzcyBUaGUgc291cmNlIGFjY291bnRcbiAgICogQHJldHVybnMge1RyYW5zYWN0aW9uQnVpbGRlcn0gVGhpcyB0cmFuc2FjdGlvbiBidWlsZGVyXG4gICAqL1xuICBzb3VyY2UoYWRkcmVzczogQmFzZUFkZHJlc3MpOiB0aGlzIHtcbiAgICB0aGlzLnZhbGlkYXRlQWRkcmVzcyhhZGRyZXNzKTtcbiAgICB0aGlzLl9zb3VyY2UgPSBhZGRyZXNzO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgdHJhbnNhY3Rpb24gZXhwaXJhdGlvblRpbWVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGV4cGlyYXRpb25UaW1lIFRoZSB0cmFuc2FjdGlvbiBleHBpcmF0aW9uVGltZVxuICAgKiBAcmV0dXJucyB7VHJhbnNhY3Rpb25CdWlsZGVyfSBUaGlzIHRyYW5zYWN0aW9uIGJ1aWxkZXJcbiAgICovXG4gIGV4cGlyYXRpb24oZXhwaXJhdGlvblRpbWU6IG51bWJlcik6IHRoaXMge1xuICAgIGNvbnN0IHRyYW5zYWN0aW9uRXhwaXJhdGlvbiA9IG5ldyBCaWdOdW1iZXIoZXhwaXJhdGlvblRpbWUpO1xuICAgIGlmICh0cmFuc2FjdGlvbkV4cGlyYXRpb24uaXNOYU4oKSB8fCB0cmFuc2FjdGlvbkV4cGlyYXRpb24uaXNHcmVhdGVyVGhhbihUUkFOU0FDVElPTl9FWFBJUkFUSU9OKSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCB0cmFuc2FjdGlvbiBleHBpcmF0aW9uJyk7XG4gICAgfVxuICAgIHRoaXMudmFsaWRhdGVWYWx1ZSh0cmFuc2FjdGlvbkV4cGlyYXRpb24pO1xuICAgIHRoaXMuX2V4cGlyYXRpb24gPSB0cmFuc2FjdGlvbkV4cGlyYXRpb24udG9OdW1iZXIoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgYW4gZXh0ZXJuYWwgdHJhbnNhY3Rpb24gc2lnbmF0dXJlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzaWduYXR1cmUgSGV4IGVuY29kZWQgc2lnbmF0dXJlIHN0cmluZ1xuICAgKiBAcGFyYW0ge0tleVBhaXJ9IGtleVBhaXIgVGhlIHB1YmxpYyBrZXkga2V5cGFpciB0aGF0IHdhcyB1c2VkIHRvIGNyZWF0ZSB0aGUgc2lnbmF0dXJlXG4gICAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbkJ1aWxkZXJ9IFRoaXMgdHJhbnNhY3Rpb24gYnVpbGRlclxuICAgKi9cbiAgc2lnbmF0dXJlKHNpZ25hdHVyZTogc3RyaW5nLCBrZXlQYWlyOiBLZXlQYWlyKTogdGhpcyB7XG4gICAgLy8gaWYgd2UgYWxyZWFkeSBoYXZlIGEgc2lnbmF0dXJlIGZvciB0aGlzIGtleSBwYWlyLCBqdXN0IHVwZGF0ZSBpdFxuICAgIGZvciAoY29uc3Qgb2xkU2lnbmF0dXJlIG9mIHRoaXMuX3NpZ25hdHVyZXMpIHtcbiAgICAgIGlmIChvbGRTaWduYXR1cmUua2V5UGFpci5nZXRLZXlzKCkucHViID09PSBrZXlQYWlyLmdldEtleXMoKS5wdWIpIHtcbiAgICAgICAgb2xkU2lnbmF0dXJlLnNpZ25hdHVyZSA9IHNpZ25hdHVyZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gb3RoZXJ3aXNlIGFkZCB0aGUgbmV3IHNpZ25hdHVyZVxuICAgIHRoaXMuX3NpZ25hdHVyZXMucHVzaCh7IHNpZ25hdHVyZSwga2V5UGFpciB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIG5vZGVDaGFpbk5hbWUoY2hhaW5OYW1lOiBzdHJpbmcpOiB0aGlzIHtcbiAgICB0aGlzLl9jaGFpbk5hbWUgPSBjaGFpbk5hbWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBlbmRyZWdpb25cblxuICAvLyByZWdpb24gVmFsaWRhdG9yc1xuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVBZGRyZXNzKGFkZHJlc3M6IEJhc2VBZGRyZXNzKTogdm9pZCB7XG4gICAgaWYgKCFpc1ZhbGlkQWRkcmVzcyhhZGRyZXNzLmFkZHJlc3MpKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIGFkZHJlc3MgJyArIGFkZHJlc3MuYWRkcmVzcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlS2V5KGtleTogQmFzZUtleSk6IHZvaWQge1xuICAgIGlmICghbmV3IEtleVBhaXIoeyBwcnY6IGtleS5rZXkgfSkpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQga2V5Jyk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlUmF3VHJhbnNhY3Rpb24ocmF3VHJhbnNhY3Rpb246IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghcmF3VHJhbnNhY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignUmF3IHRyYW5zYWN0aW9uIGlzIGVtcHR5Jyk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBEZXBsb3lVdGlsLmRlcGxveUZyb21Kc29uKEpTT04ucGFyc2UocmF3VHJhbnNhY3Rpb24pKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2VUcmFuc2FjdGlvbkVycm9yKCdUaGVyZSB3YXMgYW4gZXJyb3IgcGFyc2luZyB0aGUgSlNPTiBzdHJpbmcnKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVUcmFuc2FjdGlvbih0cmFuc2FjdGlvbj86IFRyYW5zYWN0aW9uKTogdm9pZCB7XG4gICAgdGhpcy52YWxpZGF0ZU1hbmRhdG9yeUZpZWxkcygpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlVmFsdWUodmFsdWU6IEJpZ051bWJlcik6IHZvaWQge1xuICAgIGlmICh2YWx1ZS5pc0xlc3NUaGFuKDApKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdWYWx1ZSBjYW5ub3QgYmUgbGVzcyB0aGFuIHplcm8nKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoYXQgdGhlIG1hbmRhdG9yeSBmaWVsZHMgYXJlIGRlZmluZWRcbiAgICovXG4gIHZhbGlkYXRlTWFuZGF0b3J5RmllbGRzKCk6IHZvaWQge1xuICAgIHRoaXMudmFsaWRhdGVGZWUoKTtcbiAgICB0aGlzLnZhbGlkYXRlU291cmNlKCk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoYXQgdGhlIGZlZSBmaWVsZCBpcyBkZWZpbmVkXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlRmVlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9mZWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCB0cmFuc2FjdGlvbjogbWlzc2luZyBmZWUnKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLl9mZWUuZ2FzTGltaXQpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgdHJhbnNhY3Rpb246IG1pc3NpbmcgZ2FzIGxpbWl0Jyk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICB0aGlzLnZhbGlkYXRlVmFsdWUobmV3IEJpZ051bWJlcih0aGlzLl9mZWUuZ2FzTGltaXQpKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIGdhcyBsaW1pdCcpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhhdCB0aGUgc291cmNlIGZpZWxkIGlzIGRlZmluZWRcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVTb3VyY2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3NvdXJjZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIHRyYW5zYWN0aW9uOiBtaXNzaW5nIHNvdXJjZScpO1xuICAgIH1cbiAgICB0aGlzLnZhbGlkYXRlQWRkcmVzcyh0aGlzLl9zb3VyY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGF0IHRoZSBnaXZlbiBrZXkgaXMgbm90IGFscmVhZHkgaW4gdGhpcy5fbXVsdGlTaWduZXJLZXlQYWlyc1xuICAgKlxuICAgKiBAcGFyYW0ge0Jhc2VLZXl9IGtleSAtIFRoZSBrZXkgdG8gY2hlY2tcbiAgICovXG4gIHByaXZhdGUgY2hlY2tEdXBsaWNhdGVkS2V5cyhrZXk6IEJhc2VLZXkpIHtcbiAgICB0aGlzLl9tdWx0aVNpZ25lcktleVBhaXJzLmZvckVhY2goKF9zb3VyY2VLZXlQYWlyKSA9PiB7XG4gICAgICBpZiAoX3NvdXJjZUtleVBhaXIuZ2V0S2V5cygpLnBydiA9PT0ga2V5LmtleSkge1xuICAgICAgICB0aHJvdyBuZXcgU2lnbmluZ0Vycm9yKCdSZXBlYXRlZCBzaWduOiAnICsga2V5LmtleSk7XG4gICAgICB9XG4gICAgICAvLyBUcnkgdG8gZ2V0IGV4dGVuZGVkIGtleXMgaW4gb3JkZXIgdG8gdmFsaWRhdGUgdGhlbVxuICAgICAgbGV0IHhwcnY7XG4gICAgICB0cnkge1xuICAgICAgICB4cHJ2ID0gX3NvdXJjZUtleVBhaXIuZ2V0RXh0ZW5kZWRLZXlzKCkueHBydjtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoeHBydiAmJiB4cHJ2ID09PSBrZXkua2V5KSB7XG4gICAgICAgIHRocm93IG5ldyBTaWduaW5nRXJyb3IoJ1JlcGVhdGVkIHNpZ246ICcgKyBrZXkua2V5KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vIGVuZHJlZ2lvblxuXG4gIC8vIHJlZ2lvbiBHZXR0ZXJzIGFuZCBTZXR0ZXJzXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgZ2V0IHRyYW5zYWN0aW9uKCk6IFRyYW5zYWN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNhY3Rpb247XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIHNldCB0cmFuc2FjdGlvbih0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb24pIHtcbiAgICB0aGlzLl90cmFuc2FjdGlvbiA9IHRyYW5zYWN0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgY2hhaW4gbmFtZSBmb3IgdGhlIGNvaW4gZW52aXJvbm1lbnRcbiAgICovXG4gIHB1YmxpYyBnZXQgY2hhaW5OYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2NoYWluTmFtZTtcbiAgfVxuICAvLyBlbmRyZWdpb25cblxuICAvLyByZWdpb24gYXV4aWxpYXJ5TWV0aG9kc1xuICAvKipcbiAgICogR2VuZXJhdGUgYSBEZXBsb3lQYXJhbXMgaW5zdGFuY2Ugd2l0aCB0aGUgdHJhbnNhY3Rpb24gZGF0YVxuICAgKlxuICAgKiBAcmV0dXJucyB7RGVwbG95VXRpbC5EZXBsb3lQYXJhbXN9XG4gICAqL1xuICBwcml2YXRlIGdldERlcGxveVBhcmFtcygpOiBEZXBsb3lVdGlsLkRlcGxveVBhcmFtcyB7XG4gICAgY29uc3QgZ2FzUHJpY2UgPSB0aGlzLl9mZWUuZ2FzUHJpY2UgPyBfLnBhcnNlSW50KHRoaXMuX2ZlZS5nYXNQcmljZSkgOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIG5ldyBEZXBsb3lVdGlsLkRlcGxveVBhcmFtcyhcbiAgICAgIFB1YmxpY0tleS5mcm9tSGV4KHRoaXMuX3NvdXJjZS5hZGRyZXNzKSxcbiAgICAgIHRoaXMuX2NoYWluTmFtZSxcbiAgICAgIGdhc1ByaWNlLFxuICAgICAgdGhpcy5fZXhwaXJhdGlvbiB8fCBUUkFOU0FDVElPTl9FWFBJUkFUSU9OXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSB0aGUgc2Vzc2lvbiBmb3IgdGhlIERlcGxveSBhY2NvcmRpbmcgdG8gdGhlIHRyYW5zYWN0aW9uVHlwZS5cbiAgICpcbiAgICogQHJldHVybnMge0RlcGxveVV0aWwuRXhlY3V0YWJsZURlcGxveUl0ZW19XG4gICAqL1xuICBwcml2YXRlIGdldFNlc3Npb24oKTogRGVwbG95VXRpbC5FeGVjdXRhYmxlRGVwbG95SXRlbSB7XG4gICAgbGV0IHNlc3Npb247XG4gICAgc3dpdGNoICh0aGlzLnRyYW5zYWN0aW9uLnR5cGUpIHtcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlNlbmQ6XG4gICAgICAgIGNvbnN0IHRyYW5zZmVyU2Vzc2lvbiA9IHRoaXMuX3Nlc3Npb24gYXMgQ2FzcGVyVHJhbnNmZXJUcmFuc2FjdGlvbjtcbiAgICAgICAgc2Vzc2lvbiA9IERlcGxveVV0aWwuRXhlY3V0YWJsZURlcGxveUl0ZW0ubmV3VHJhbnNmZXJXaXRoT3B0aW9uYWxUcmFuc2ZlcklkKFxuICAgICAgICAgIHRyYW5zZmVyU2Vzc2lvbi5hbW91bnQsXG4gICAgICAgICAgdHJhbnNmZXJTZXNzaW9uLnRhcmdldCxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgdHJhbnNmZXJTZXNzaW9uLmlkXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuV2FsbGV0SW5pdGlhbGl6YXRpb246XG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nTG9jazpcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdVbmxvY2s6XG4gICAgICAgIGNvbnN0IG1vZHVsZUJ5dGVzU2Vzc2lvbiA9IHRoaXMuX3Nlc3Npb24gYXMgQ2FzcGVyTW9kdWxlQnl0ZXNUcmFuc2FjdGlvbjtcbiAgICAgICAgc2Vzc2lvbiA9IERlcGxveVV0aWwuRXhlY3V0YWJsZURlcGxveUl0ZW0ubmV3TW9kdWxlQnl0ZXMoXG4gICAgICAgICAgbW9kdWxlQnl0ZXNTZXNzaW9uLm1vZHVsZUJ5dGVzLFxuICAgICAgICAgIG1vZHVsZUJ5dGVzU2Vzc2lvbi5hcmdzXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignVHJhbnNhY3Rpb24gVHlwZSBlcnJvcicpO1xuICAgIH1cbiAgICByZXR1cm4gc2Vzc2lvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciB0aGUgdHJhbnNhY3Rpb24gaGFzIHRoZSBvd25lciBzaWduYXR1cmVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHB1YiAtIHB1YmxpYyBrZXkgb2YgdGhlIHNpZ25lclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiB0aGUgcHViIGtleSBhbHJlYWR5IHNpZ25lZCB0aCB0cmFuc2FjdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBpc1RyYW5zYWN0aW9uU2lnbmVkQnlQdWIocHViOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgXy5maW5kSW5kZXgodGhpcy50cmFuc2FjdGlvbi5jYXNwZXJUeC5hcHByb3ZhbHMsIChhcHByb3ZhbCkgPT4ge1xuICAgICAgICBjb25zdCBhcHByb3ZhbFNpZ25lciA9IHJlbW92ZUFsZ29QcmVmaXhGcm9tSGV4VmFsdWUoYXBwcm92YWwuc2lnbmVyKTtcbiAgICAgICAgcmV0dXJuIGFwcHJvdmFsU2lnbmVyID09PSBwdWI7XG4gICAgICB9KSAhPT0gLTFcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBzaWduYXR1cmVzIHRvIHRoZSB0cmFuc2FjdGlvblxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBwcm9jZXNzU2lnbmluZygpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGtleVBhaXIgb2YgdGhpcy5fbXVsdGlTaWduZXJLZXlQYWlycykge1xuICAgICAgLy8gQWRkIHNpZ25hdHVyZSBpZiBpdCdzIG5vdCBhbHJlYWR5IGluIHRoZSBkZXBsb3lcbiAgICAgIGlmICghdGhpcy5pc1RyYW5zYWN0aW9uU2lnbmVkQnlQdWIoa2V5UGFpci5nZXRLZXlzKCkucHViKSkge1xuICAgICAgICB0aGlzLnRyYW5zYWN0aW9uLnNpZ24oa2V5UGFpcik7XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAoY29uc3QgeyBzaWduYXR1cmUsIGtleVBhaXIgfSBvZiB0aGlzLl9zaWduYXR1cmVzKSB7XG4gICAgICAvLyBBZGQgc2lnbmF0dXJlIGlmIGl0J3Mgbm90IGFscmVhZHkgaW4gdGhlIGRlcGxveVxuICAgICAgaWYgKCF0aGlzLmlzVHJhbnNhY3Rpb25TaWduZWRCeVB1YihrZXlQYWlyLmdldEtleXMoKS5wdWIpKSB7XG4gICAgICAgIHRoaXMudHJhbnNhY3Rpb24uYWRkU2lnbmF0dXJlKHNpZ25hdHVyZSwga2V5UGFpcik7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8vIGVuZHJlZ2lvblxufVxuIl19
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import { BaseCoin as CoinConfig } from '@bitgo/statics';
|
|
2
|
-
import { BaseTransactionBuilderFactory } from '@bitgo/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,gBAAgB,CAAC;AAExD,OAAO,EACL,6BAA6B,EAI9B,MAAM,iBAAiB,CAAC;AACzB,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/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 = (0, 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvdHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSxpREFBMkM7QUFDM0MsOENBS3lCO0FBQ3pCLCtFQUE0RTtBQUM1RSx1REFBb0Q7QUFFcEQsK0NBQTRDO0FBQzVDLG1DQUF3QztBQUN4Qyx1REFBb0Q7QUFDcEQsMkRBQXdEO0FBRXhELE1BQWEseUJBQTBCLFNBQVEsd0NBQTZCO0lBQzFFLFlBQVksV0FBaUM7UUFDM0MsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsOEJBQThCLENBQUMsRUFBZ0I7UUFDN0MsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFBRSxFQUFFLElBQUkseURBQTJCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDdkYsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsb0JBQW9CLENBQUMsRUFBZ0I7UUFDbkMsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFBRSxFQUFFLElBQUkscUNBQWlCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDN0UsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsa0JBQWtCLENBQUMsRUFBZ0I7UUFDakMsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFBRSxFQUFFLElBQUksaUNBQWUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLGtCQUFrQixDQUFDLEVBQWdCO1FBQ2pDLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsRUFBRSxJQUFJLGlDQUFlLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixJQUFJLENBQUMsR0FBVztRQUNkLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNqQyxNQUFNLEVBQUUsR0FBRyxJQUFJLHlCQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzdDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDO1lBQ0gsRUFBRSxDQUFDLFFBQVEsR0FBRywwQkFBVSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUMvRCxDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNYLE1BQU0sSUFBSSxrQ0FBdUIsQ0FBQyx1QkFBdUIsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNqRSxDQUFDO1FBRUQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFBLHFCQUFhLEVBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM1RCxRQUFRLGdCQUFnQixFQUFFLENBQUM7WUFDekIsS0FBSywwQkFBZSxDQUFDLElBQUk7Z0JBQ3ZCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3JDLEtBQUssMEJBQWUsQ0FBQyxvQkFBb0I7Z0JBQ3ZDLE9BQU8sSUFBSSxDQUFDLDhCQUE4QixDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2pELEtBQUssMEJBQWUsQ0FBQyxXQUFXO2dCQUM5QixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNyQyxLQUFLLDBCQUFlLENBQUMsYUFBYTtnQkFDaEMsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDdkM7Z0JBQ0UsTUFBTSxJQUFJLGtDQUF1QixDQUFDLHNCQUFzQixHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM1RSxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNLLGlCQUFpQixDQUErQixFQUEyQixFQUFFLE9BQVU7UUFDN0YsSUFBSSxFQUFFLEVBQUUsQ0FBQztZQUNQLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDMUIsQ0FBQztRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssc0JBQXNCLENBQUMsY0FBc0I7UUFDbkQsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3BCLE1BQU0sSUFBSSxnQ0FBcUIsQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO1FBQ3hFLENBQUM7UUFDRCxJQUFJLENBQUM7WUFDSCxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzdCLENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1gsTUFBTSxJQUFJLGdDQUFxQixDQUFDLGdDQUFnQyxDQUFDLENBQUM7UUFDcEUsQ0FBQztJQUNILENBQUM7Q0FDRjtBQTFGRCw4REEwRkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvL3N0YXRpY3MnO1xuaW1wb3J0IHsgRGVwbG95VXRpbCB9IGZyb20gJ2Nhc3Blci1qcy1zZGsnO1xuaW1wb3J0IHtcbiAgQmFzZVRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnksXG4gIFRyYW5zYWN0aW9uVHlwZSxcbiAgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IsXG4gIFBhcnNlVHJhbnNhY3Rpb25FcnJvcixcbn0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IFdhbGxldEluaXRpYWxpemF0aW9uQnVpbGRlciB9IGZyb20gJy4vd2FsbGV0SW5pdGlhbGl6YXRpb25CdWlsZGVyJztcbmltcG9ydCB7IFRyYW5zZmVyQnVpbGRlciB9IGZyb20gJy4vdHJhbnNmZXJCdWlsZGVyJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vdHJhbnNhY3Rpb25CdWlsZGVyJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbic7XG5pbXBvcnQgeyBnZXREZXBsb3lUeXBlIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBEZWxlZ2F0ZUJ1aWxkZXIgfSBmcm9tICcuL2RlbGVnYXRlQnVpbGRlcic7XG5pbXBvcnQgeyBVbmRlbGVnYXRlQnVpbGRlciB9IGZyb20gJy4vdW5kZWxlZ2F0ZUJ1aWxkZXInO1xuXG5leHBvcnQgY2xhc3MgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSBleHRlbmRzIEJhc2VUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5IHtcbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGdldFdhbGxldEluaXRpYWxpemF0aW9uQnVpbGRlcih0eD86IFRyYW5zYWN0aW9uKTogV2FsbGV0SW5pdGlhbGl6YXRpb25CdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5pbml0aWFsaXplQnVpbGRlcih0eCwgbmV3IFdhbGxldEluaXRpYWxpemF0aW9uQnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKSk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSBhbiB1bmRlbGVnYXRlIGJ1aWxkZXJcbiAgICpcbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvbiB8IHVuZGVmaW5lZH0gdHggLSB0aGUgdHJhbnNhY3Rpb24gdXNlZCB0byBpbml0aWFsaXplIHRoZSBidWlsZGVyXG4gICAqIEByZXR1cm5zIHtVbmRlbGVnYXRlQnVpbGRlcn0gdGhlIGJ1aWxkZXIgaW5pdGlhbGl6ZWRcbiAgICovXG4gIGdldFVuZGVsZWdhdGVCdWlsZGVyKHR4PzogVHJhbnNhY3Rpb24pOiBVbmRlbGVnYXRlQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuaW5pdGlhbGl6ZUJ1aWxkZXIodHgsIG5ldyBVbmRlbGVnYXRlQnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKSk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSBhbiBkZWxlZ2F0ZSBidWlsZGVyXG4gICAqXG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb24gfCB1bmRlZmluZWR9IHR4IC0gdGhlIHRyYW5zYWN0aW9uIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgYnVpbGRlclxuICAgKiBAcmV0dXJucyB7RGVsZWdhdGVCdWlsZGVyfSB0aGUgYnVpbGRlciBpbml0aWFsaXplZFxuICAgKi9cbiAgZ2V0RGVsZWdhdGVCdWlsZGVyKHR4PzogVHJhbnNhY3Rpb24pOiBEZWxlZ2F0ZUJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLmluaXRpYWxpemVCdWlsZGVyKHR4LCBuZXcgRGVsZWdhdGVCdWlsZGVyKHRoaXMuX2NvaW5Db25maWcpKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBnZXRUcmFuc2ZlckJ1aWxkZXIodHg/OiBUcmFuc2FjdGlvbik6IFRyYW5zZmVyQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuaW5pdGlhbGl6ZUJ1aWxkZXIodHgsIG5ldyBUcmFuc2ZlckJ1aWxkZXIodGhpcy5fY29pbkNvbmZpZykpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGZyb20ocmF3OiBzdHJpbmcpOiBUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICAgIHRoaXMudmFsaWRhdGVSYXdUcmFuc2FjdGlvbihyYXcpO1xuICAgIGNvbnN0IHR4ID0gbmV3IFRyYW5zYWN0aW9uKHRoaXMuX2NvaW5Db25maWcpO1xuICAgIGNvbnN0IGRlcGxveUpzb24gPSBKU09OLnBhcnNlKHJhdyk7XG4gICAgdHJ5IHtcbiAgICAgIHR4LmNhc3BlclR4ID0gRGVwbG95VXRpbC5kZXBsb3lGcm9tSnNvbihkZXBsb3lKc29uKS51bndyYXAoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgdHJhbnNhY3Rpb246ICcgKyBlKTtcbiAgICB9XG5cbiAgICBjb25zdCBjYXNwZXJEZXBsb3lUeXBlID0gZ2V0RGVwbG95VHlwZSh0eC5jYXNwZXJUeC5zZXNzaW9uKTtcbiAgICBzd2l0Y2ggKGNhc3BlckRlcGxveVR5cGUpIHtcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlNlbmQ6XG4gICAgICAgIHJldHVybiB0aGlzLmdldFRyYW5zZmVyQnVpbGRlcih0eCk7XG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5XYWxsZXRJbml0aWFsaXphdGlvbjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0V2FsbGV0SW5pdGlhbGl6YXRpb25CdWlsZGVyKHR4KTtcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdMb2NrOlxuICAgICAgICByZXR1cm4gdGhpcy5nZXREZWxlZ2F0ZUJ1aWxkZXIodHgpO1xuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ1VubG9jazpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VW5kZWxlZ2F0ZUJ1aWxkZXIodHgpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIHRyYW5zYWN0aW9uICcgKyB0eC5jYXNwZXJUeCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgdGhlIGJ1aWxkZXIgd2l0aCB0aGUgZ2l2ZW4gdHJhbnNhY3Rpb25cbiAgICpcbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvbiB8IHVuZGVmaW5lZH0gdHggLSB0aGUgdHJhbnNhY3Rpb24gdXNlZCB0byBpbml0aWFsaXplIHRoZSBidWlsZGVyXG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb25CdWlsZGVyfSBidWlsZGVyIC0gdGhlIGJ1aWxkZXIgdG8gYmUgaW5pdGlhbGl6ZWRcbiAgICogQHJldHVybnMge1RyYW5zYWN0aW9uQnVpbGRlcn0gdGhlIGJ1aWxkZXIgaW5pdGlhbGl6ZWRcbiAgICovXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUJ1aWxkZXI8VCBleHRlbmRzIFRyYW5zYWN0aW9uQnVpbGRlcj4odHg6IFRyYW5zYWN0aW9uIHwgdW5kZWZpbmVkLCBidWlsZGVyOiBUKTogVCB7XG4gICAgaWYgKHR4KSB7XG4gICAgICBidWlsZGVyLmluaXRCdWlsZGVyKHR4KTtcbiAgICB9XG4gICAgcmV0dXJuIGJ1aWxkZXI7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgdGhlIHJhdyB0cmFuc2FjdGlvbiBoYXMgYSB2YWxpZCBmb3JtYXQgaW4gdGhlIGJsb2NrY2hhaW4gY29udGV4dCwgdGhyb3cgb3RoZXJ3aXNlLlxuICAgKlxuICAgKiBAcGFyYW0ge2FueX0gcmF3VHJhbnNhY3Rpb24gLSBUcmFuc2FjdGlvbiBpbiBhbnkgZm9ybWF0XG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlUmF3VHJhbnNhY3Rpb24ocmF3VHJhbnNhY3Rpb246IHN0cmluZykge1xuICAgIGlmICghcmF3VHJhbnNhY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZVRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgcmF3IHRyYW5zYWN0aW9uOiBVbmRlZmluZWQnKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIEpTT04ucGFyc2UocmF3VHJhbnNhY3Rpb24pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZVRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgcmF3IHRyYW5zYWN0aW9uIGZvcm1hdCcpO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import { BaseCoin as CoinConfig } from '@bitgo/statics';
|
|
2
|
-
import { BaseKey } from '@bitgo/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,gBAAgB,CAAC;AAExD,OAAO,EACL,OAAO,EAKR,MAAM,iBAAiB,CAAC;AACzB,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"}
|