@bitgo-beta/sdk-coin-ada 2.2.3-alpha.40 → 2.2.3-alpha.401
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 +1079 -0
- package/package.json +13 -10
- package/dist/src/ada.d.ts +0 -96
- package/dist/src/ada.d.ts.map +0 -1
- package/dist/src/ada.js +0 -334
- package/dist/src/adaToken.d.ts +0 -38
- package/dist/src/adaToken.d.ts.map +0 -1
- package/dist/src/adaToken.js +0 -69
- package/dist/src/index.d.ts +0 -6
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/index.js +0 -18
- package/dist/src/lib/index.d.ts +0 -11
- package/dist/src/lib/index.d.ts.map +0 -1
- package/dist/src/lib/index.js +0 -41
- package/dist/src/lib/keyPair.d.ts +0 -20
- package/dist/src/lib/keyPair.d.ts.map +0 -1
- package/dist/src/lib/keyPair.js +0 -78
- package/dist/src/lib/stakingActivateBuilder.d.ts +0 -24
- package/dist/src/lib/stakingActivateBuilder.d.ts.map +0 -1
- package/dist/src/lib/stakingActivateBuilder.js +0 -68
- package/dist/src/lib/stakingDeactivateBuilder.d.ts +0 -22
- package/dist/src/lib/stakingDeactivateBuilder.d.ts.map +0 -1
- package/dist/src/lib/stakingDeactivateBuilder.js +0 -61
- package/dist/src/lib/stakingWithdrawRewardsBuilder.d.ts +0 -21
- package/dist/src/lib/stakingWithdrawRewardsBuilder.d.ts.map +0 -1
- package/dist/src/lib/stakingWithdrawRewardsBuilder.js +0 -43
- package/dist/src/lib/transaction.d.ts +0 -103
- package/dist/src/lib/transaction.d.ts.map +0 -1
- package/dist/src/lib/transaction.js +0 -248
- package/dist/src/lib/transactionBuilder.d.ts +0 -56
- package/dist/src/lib/transactionBuilder.d.ts.map +0 -1
- package/dist/src/lib/transactionBuilder.js +0 -296
- package/dist/src/lib/transactionBuilderFactory.d.ts +0 -30
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +0 -1
- package/dist/src/lib/transactionBuilderFactory.js +0 -74
- package/dist/src/lib/transferBuilder.d.ts +0 -14
- package/dist/src/lib/transferBuilder.d.ts.map +0 -1
- package/dist/src/lib/transferBuilder.js +0 -27
- package/dist/src/lib/utils.d.ts +0 -23
- package/dist/src/lib/utils.d.ts.map +0 -1
- package/dist/src/lib/utils.js +0 -124
- package/dist/src/lib/walletInitializationBuilder.d.ts +0 -14
- package/dist/src/lib/walletInitializationBuilder.d.ts.map +0 -1
- package/dist/src/lib/walletInitializationBuilder.js +0 -24
- package/dist/src/register.d.ts +0 -3
- package/dist/src/register.d.ts.map +0 -1
- package/dist/src/register.js +0 -13
- package/dist/src/tada.d.ts +0 -21
- package/dist/src/tada.d.ts.map +0 -1
- package/dist/src/tada.js +0 -26
|
@@ -1,296 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
-
}) : (function(o, m, k, k2) {
|
|
6
|
-
if (k2 === undefined) k2 = k;
|
|
7
|
-
o[k2] = m[k];
|
|
8
|
-
}));
|
|
9
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
-
}) : function(o, v) {
|
|
12
|
-
o["default"] = v;
|
|
13
|
-
});
|
|
14
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
-
if (mod && mod.__esModule) return mod;
|
|
16
|
-
var result = {};
|
|
17
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
-
__setModuleDefault(result, mod);
|
|
19
|
-
return result;
|
|
20
|
-
};
|
|
21
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
22
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
23
|
-
};
|
|
24
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
|
-
exports.TransactionBuilder = void 0;
|
|
26
|
-
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
27
|
-
const transaction_1 = require("./transaction");
|
|
28
|
-
const keyPair_1 = require("./keyPair");
|
|
29
|
-
const utils_1 = __importDefault(require("./utils"));
|
|
30
|
-
const CardanoWasm = __importStar(require("@emurgo/cardano-serialization-lib-nodejs"));
|
|
31
|
-
const cardano_serialization_lib_nodejs_1 = require("@emurgo/cardano-serialization-lib-nodejs");
|
|
32
|
-
class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
|
|
33
|
-
constructor(_coinConfig) {
|
|
34
|
-
super(_coinConfig);
|
|
35
|
-
this._signers = [];
|
|
36
|
-
this._transactionInputs = [];
|
|
37
|
-
this._transactionOutputs = [];
|
|
38
|
-
this._signatures = [];
|
|
39
|
-
this._ttl = 0;
|
|
40
|
-
this._certs = [];
|
|
41
|
-
this._withdrawals = [];
|
|
42
|
-
this.transaction = new transaction_1.Transaction(_coinConfig);
|
|
43
|
-
this._fee = cardano_serialization_lib_nodejs_1.BigNum.zero();
|
|
44
|
-
}
|
|
45
|
-
input(i) {
|
|
46
|
-
this._transactionInputs.push(i);
|
|
47
|
-
return this;
|
|
48
|
-
}
|
|
49
|
-
output(o) {
|
|
50
|
-
this._transactionOutputs.push(o);
|
|
51
|
-
return this;
|
|
52
|
-
}
|
|
53
|
-
ttl(t) {
|
|
54
|
-
this._ttl = t;
|
|
55
|
-
return this;
|
|
56
|
-
}
|
|
57
|
-
changeAddress(addr, totalInputBalance) {
|
|
58
|
-
this._changeAddress = addr;
|
|
59
|
-
this._senderBalance = totalInputBalance;
|
|
60
|
-
return this;
|
|
61
|
-
}
|
|
62
|
-
fee(fee) {
|
|
63
|
-
this._fee = cardano_serialization_lib_nodejs_1.BigNum.from_str(fee);
|
|
64
|
-
return this;
|
|
65
|
-
}
|
|
66
|
-
/**
|
|
67
|
-
* Initialize the transaction builder fields using the decoded transaction data
|
|
68
|
-
*
|
|
69
|
-
* @param {Transaction} tx the transaction data
|
|
70
|
-
*/
|
|
71
|
-
initBuilder(tx) {
|
|
72
|
-
this._transaction = tx;
|
|
73
|
-
const txnBody = tx.transaction.body();
|
|
74
|
-
for (let i = 0; i < txnBody.inputs().len(); i++) {
|
|
75
|
-
const input = txnBody.inputs().get(i);
|
|
76
|
-
this.input({
|
|
77
|
-
transaction_id: Buffer.from(input.transaction_id().to_bytes()).toString('hex'),
|
|
78
|
-
transaction_index: input.index(),
|
|
79
|
-
});
|
|
80
|
-
}
|
|
81
|
-
for (let i = 0; i < txnBody.outputs().len(); i++) {
|
|
82
|
-
const output = txnBody.outputs().get(i);
|
|
83
|
-
this.output({
|
|
84
|
-
address: output.address().to_bech32(),
|
|
85
|
-
amount: output.amount().coin().to_str(),
|
|
86
|
-
});
|
|
87
|
-
}
|
|
88
|
-
if (txnBody.certs() !== undefined) {
|
|
89
|
-
const certs = txnBody.certs();
|
|
90
|
-
for (let i = 0; i < certs.len(); i++) {
|
|
91
|
-
this._certs.push(certs.get(i));
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
if (txnBody.withdrawals() !== undefined) {
|
|
95
|
-
const withdrawals = txnBody.withdrawals();
|
|
96
|
-
const keys = withdrawals.keys();
|
|
97
|
-
for (let i = 0; i < keys.len(); i++) {
|
|
98
|
-
const rewardAddress = keys.get(i);
|
|
99
|
-
const reward = withdrawals.get(rewardAddress);
|
|
100
|
-
this._withdrawals.push({ stakeAddress: rewardAddress.to_address().to_bech32(), value: reward.to_str() });
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
this._ttl = tx.transaction.body().ttl();
|
|
104
|
-
this._fee = tx.transaction.body().fee();
|
|
105
|
-
}
|
|
106
|
-
/** @inheritdoc */
|
|
107
|
-
fromImplementation(rawTransaction) {
|
|
108
|
-
this.validateRawTransaction(rawTransaction);
|
|
109
|
-
this.buildImplementation();
|
|
110
|
-
return this.transaction;
|
|
111
|
-
}
|
|
112
|
-
/** @inheritdoc */
|
|
113
|
-
async buildImplementation() {
|
|
114
|
-
const inputs = CardanoWasm.TransactionInputs.new();
|
|
115
|
-
this._transactionInputs.forEach((input) => {
|
|
116
|
-
inputs.add(CardanoWasm.TransactionInput.new(CardanoWasm.TransactionHash.from_bytes(Buffer.from(input.transaction_id, 'hex')), input.transaction_index));
|
|
117
|
-
});
|
|
118
|
-
let outputs = CardanoWasm.TransactionOutputs.new();
|
|
119
|
-
let totalAmountToSend = CardanoWasm.BigNum.zero();
|
|
120
|
-
this._transactionOutputs.forEach((output) => {
|
|
121
|
-
const amount = CardanoWasm.BigNum.from_str(output.amount);
|
|
122
|
-
outputs.add(CardanoWasm.TransactionOutput.new(CardanoWasm.Address.from_bech32(output.address), CardanoWasm.Value.new(amount)));
|
|
123
|
-
totalAmountToSend = totalAmountToSend.checked_add(amount);
|
|
124
|
-
});
|
|
125
|
-
if (this._fee.is_zero()) {
|
|
126
|
-
// estimate fee
|
|
127
|
-
// add extra output for the change
|
|
128
|
-
if (this._changeAddress && this._senderBalance) {
|
|
129
|
-
const changeAddress = CardanoWasm.Address.from_bech32(this._changeAddress);
|
|
130
|
-
const mockChange = CardanoWasm.TransactionOutput.new(changeAddress, CardanoWasm.Value.new(CardanoWasm.BigNum.from_str(this._senderBalance)));
|
|
131
|
-
outputs.add(mockChange);
|
|
132
|
-
}
|
|
133
|
-
const txBody = CardanoWasm.TransactionBody.new_tx_body(inputs, outputs, this._fee);
|
|
134
|
-
txBody.set_ttl(CardanoWasm.BigNum.from_str(this._ttl.toString()));
|
|
135
|
-
const txHash = CardanoWasm.hash_transaction(txBody);
|
|
136
|
-
// we add witnesses once so that we can get the appropriate amount of signers for calculating the fee
|
|
137
|
-
const witnessSet = CardanoWasm.TransactionWitnessSet.new();
|
|
138
|
-
const vkeyWitnesses = CardanoWasm.Vkeywitnesses.new();
|
|
139
|
-
this._signers.forEach((keyPair) => {
|
|
140
|
-
const prv = keyPair.getKeys().prv;
|
|
141
|
-
const vkeyWitness = CardanoWasm.make_vkey_witness(txHash, CardanoWasm.PrivateKey.from_normal_bytes(Buffer.from(prv, 'hex')));
|
|
142
|
-
vkeyWitnesses.add(vkeyWitness);
|
|
143
|
-
});
|
|
144
|
-
this._signatures.forEach((signature) => {
|
|
145
|
-
const vkey = CardanoWasm.Vkey.new(CardanoWasm.PublicKey.from_bytes(Buffer.from(signature.publicKey.pub, 'hex')));
|
|
146
|
-
const ed255Sig = CardanoWasm.Ed25519Signature.from_bytes(signature.signature);
|
|
147
|
-
vkeyWitnesses.add(CardanoWasm.Vkeywitness.new(vkey, ed255Sig));
|
|
148
|
-
});
|
|
149
|
-
if (vkeyWitnesses.len() === 0) {
|
|
150
|
-
const prv = CardanoWasm.PrivateKey.generate_ed25519();
|
|
151
|
-
const vkeyWitness = CardanoWasm.make_vkey_witness(txHash, prv);
|
|
152
|
-
vkeyWitnesses.add(vkeyWitness);
|
|
153
|
-
if (this._type !== sdk_core_1.TransactionType.Send) {
|
|
154
|
-
vkeyWitnesses.add(vkeyWitness);
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
witnessSet.set_vkeys(vkeyWitnesses);
|
|
158
|
-
// add in withdrawal if this is a withdrawal tx
|
|
159
|
-
if (this._withdrawals.length > 0) {
|
|
160
|
-
const withdrawals = CardanoWasm.Withdrawals.new();
|
|
161
|
-
this._withdrawals.forEach((withdrawal) => {
|
|
162
|
-
const rewardAddress = CardanoWasm.RewardAddress.from_address(CardanoWasm.Address.from_bech32(withdrawal.stakeAddress));
|
|
163
|
-
withdrawals.insert(rewardAddress, CardanoWasm.BigNum.from_str(withdrawal.value));
|
|
164
|
-
});
|
|
165
|
-
txBody.set_withdrawals(withdrawals);
|
|
166
|
-
}
|
|
167
|
-
// add in certificates to get mock size
|
|
168
|
-
const draftCerts = CardanoWasm.Certificates.new();
|
|
169
|
-
for (const cert of this._certs) {
|
|
170
|
-
draftCerts.add(cert);
|
|
171
|
-
}
|
|
172
|
-
txBody.set_certs(draftCerts);
|
|
173
|
-
const txDraft = CardanoWasm.Transaction.new(txBody, witnessSet);
|
|
174
|
-
const linearFee = CardanoWasm.LinearFee.new(CardanoWasm.BigNum.from_str('44'), CardanoWasm.BigNum.from_str('155381'));
|
|
175
|
-
// calculate the fee based off our dummy transaction
|
|
176
|
-
const fee = CardanoWasm.min_fee(txDraft, linearFee).checked_add(cardano_serialization_lib_nodejs_1.BigNum.from_str('440'));
|
|
177
|
-
this._fee = fee;
|
|
178
|
-
}
|
|
179
|
-
this._transaction.fee(this._fee.to_str());
|
|
180
|
-
// now calculate the change based off of <utxoBalance> - <fee> - <amountToSend>
|
|
181
|
-
// reset the outputs collection because now our last output has changed
|
|
182
|
-
outputs = CardanoWasm.TransactionOutputs.new();
|
|
183
|
-
this._transactionOutputs.forEach((output) => {
|
|
184
|
-
outputs.add(CardanoWasm.TransactionOutput.new(CardanoWasm.Address.from_bech32(output.address), CardanoWasm.Value.new(CardanoWasm.BigNum.from_str(output.amount))));
|
|
185
|
-
});
|
|
186
|
-
if (this._changeAddress && this._senderBalance) {
|
|
187
|
-
const changeAddress = CardanoWasm.Address.from_bech32(this._changeAddress);
|
|
188
|
-
const utxoBalance = CardanoWasm.BigNum.from_str(this._senderBalance);
|
|
189
|
-
const adjustment = cardano_serialization_lib_nodejs_1.BigNum.from_str('2000000');
|
|
190
|
-
let change = utxoBalance.checked_sub(this._fee).checked_sub(totalAmountToSend);
|
|
191
|
-
if (this._type === sdk_core_1.TransactionType.StakingActivate) {
|
|
192
|
-
change = change.checked_sub(adjustment);
|
|
193
|
-
}
|
|
194
|
-
else if (this._type === sdk_core_1.TransactionType.StakingDeactivate) {
|
|
195
|
-
change = change.checked_add(adjustment);
|
|
196
|
-
}
|
|
197
|
-
else if (this._type == sdk_core_1.TransactionType.StakingWithdraw) {
|
|
198
|
-
this._withdrawals.forEach((withdrawal) => {
|
|
199
|
-
change = change.checked_add(CardanoWasm.BigNum.from_str(withdrawal.value));
|
|
200
|
-
});
|
|
201
|
-
}
|
|
202
|
-
const changeOutput = CardanoWasm.TransactionOutput.new(changeAddress, CardanoWasm.Value.new(change));
|
|
203
|
-
outputs.add(changeOutput);
|
|
204
|
-
}
|
|
205
|
-
const txRaw = CardanoWasm.TransactionBody.new_tx_body(inputs, outputs, this._fee);
|
|
206
|
-
const certs = CardanoWasm.Certificates.new();
|
|
207
|
-
for (const cert of this._certs) {
|
|
208
|
-
certs.add(cert);
|
|
209
|
-
}
|
|
210
|
-
txRaw.set_certs(certs);
|
|
211
|
-
// add in withdrawal if this is a withdrawal tx
|
|
212
|
-
if (this._withdrawals.length > 0) {
|
|
213
|
-
const withdrawals = CardanoWasm.Withdrawals.new();
|
|
214
|
-
this._withdrawals.forEach((withdrawal) => {
|
|
215
|
-
const rewardAddress = CardanoWasm.RewardAddress.from_address(CardanoWasm.Address.from_bech32(withdrawal.stakeAddress));
|
|
216
|
-
withdrawals.insert(rewardAddress, CardanoWasm.BigNum.from_str(withdrawal.value));
|
|
217
|
-
});
|
|
218
|
-
txRaw.set_withdrawals(withdrawals);
|
|
219
|
-
}
|
|
220
|
-
txRaw.set_ttl(CardanoWasm.BigNum.from_str(this._ttl.toString()));
|
|
221
|
-
const txRawHash = CardanoWasm.hash_transaction(txRaw);
|
|
222
|
-
// now add the witnesses again this time for real. We need to do this again
|
|
223
|
-
// because now that we've added our real fee and change output, we have a difference transaction hash
|
|
224
|
-
const witnessSet = CardanoWasm.TransactionWitnessSet.new();
|
|
225
|
-
const vkeyWitnesses = CardanoWasm.Vkeywitnesses.new();
|
|
226
|
-
this._signers.forEach((keyPair) => {
|
|
227
|
-
const prv = keyPair.getKeys().prv;
|
|
228
|
-
const vkeyWitness = CardanoWasm.make_vkey_witness(txRawHash, CardanoWasm.PrivateKey.from_normal_bytes(Buffer.from(prv, 'hex')));
|
|
229
|
-
vkeyWitnesses.add(vkeyWitness);
|
|
230
|
-
});
|
|
231
|
-
this._signatures.forEach((signature) => {
|
|
232
|
-
const vkey = CardanoWasm.Vkey.new(CardanoWasm.PublicKey.from_bytes(Buffer.from(signature.publicKey.pub, 'hex')));
|
|
233
|
-
const ed255Sig = CardanoWasm.Ed25519Signature.from_bytes(signature.signature);
|
|
234
|
-
vkeyWitnesses.add(CardanoWasm.Vkeywitness.new(vkey, ed255Sig));
|
|
235
|
-
});
|
|
236
|
-
witnessSet.set_vkeys(vkeyWitnesses);
|
|
237
|
-
this._transaction.transaction = CardanoWasm.Transaction.new(txRaw, witnessSet);
|
|
238
|
-
return this.transaction;
|
|
239
|
-
}
|
|
240
|
-
/** @inheritdoc */
|
|
241
|
-
signImplementation(key) {
|
|
242
|
-
this._signers.push(new keyPair_1.KeyPair({ prv: key.key }));
|
|
243
|
-
return this._transaction;
|
|
244
|
-
}
|
|
245
|
-
/** @inheritdoc */
|
|
246
|
-
get transaction() {
|
|
247
|
-
return this._transaction;
|
|
248
|
-
}
|
|
249
|
-
/** @inheritdoc */
|
|
250
|
-
set transaction(transaction) {
|
|
251
|
-
this._transaction = transaction;
|
|
252
|
-
}
|
|
253
|
-
/** @inheritdoc */
|
|
254
|
-
validateAddress(address, addressFormat) {
|
|
255
|
-
if (!utils_1.default.isValidAddress(address.address)) {
|
|
256
|
-
throw new sdk_core_1.UtilsError('invalid address ' + address.address);
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
/** @inheritdoc */
|
|
260
|
-
validateKey(key) {
|
|
261
|
-
try {
|
|
262
|
-
new keyPair_1.KeyPair({ prv: key.key });
|
|
263
|
-
}
|
|
264
|
-
catch {
|
|
265
|
-
throw new sdk_core_1.BuildTransactionError(`Key validation failed`);
|
|
266
|
-
}
|
|
267
|
-
}
|
|
268
|
-
/** @inheritdoc */
|
|
269
|
-
validateRawTransaction(rawTransaction) {
|
|
270
|
-
try {
|
|
271
|
-
CardanoWasm.Transaction.from_bytes(rawTransaction);
|
|
272
|
-
}
|
|
273
|
-
catch {
|
|
274
|
-
throw new sdk_core_1.BuildTransactionError('invalid raw transaction');
|
|
275
|
-
}
|
|
276
|
-
}
|
|
277
|
-
/** @inheritdoc */
|
|
278
|
-
validateTransaction(transaction) {
|
|
279
|
-
if (!transaction.transaction) {
|
|
280
|
-
return;
|
|
281
|
-
}
|
|
282
|
-
}
|
|
283
|
-
/** @inheritdoc */
|
|
284
|
-
validateValue(value) {
|
|
285
|
-
if (value.isLessThan(0)) {
|
|
286
|
-
throw new sdk_core_1.BuildTransactionError('Value cannot be less than zero');
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
|
-
// endregion
|
|
290
|
-
/** @inheritDoc */
|
|
291
|
-
addSignature(publicKey, signature) {
|
|
292
|
-
this._signatures.push({ publicKey, signature });
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
exports.TransactionBuilder = TransactionBuilder;
|
|
296
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBLG1EQVM4QjtBQUM5QiwrQ0FBNkY7QUFDN0YsdUNBQW9DO0FBQ3BDLG9EQUEyQjtBQUMzQixzRkFBd0U7QUFDeEUsK0ZBQWtFO0FBRWxFLE1BQXNCLGtCQUFtQixTQUFRLGlDQUFzQjtJQWNyRSxZQUFZLFdBQWlDO1FBQzNDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQWJYLGFBQVEsR0FBYyxFQUFFLENBQUM7UUFDekIsdUJBQWtCLEdBQXVCLEVBQUUsQ0FBQztRQUM1Qyx3QkFBbUIsR0FBd0IsRUFBRSxDQUFDO1FBQzlDLGdCQUFXLEdBQWdCLEVBQUUsQ0FBQztRQUc5QixTQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ1QsV0FBTSxHQUE4QixFQUFFLENBQUM7UUFDdkMsaUJBQVksR0FBaUIsRUFBRSxDQUFDO1FBTXhDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSx5QkFBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQyxJQUFJLEdBQUcseUNBQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQsS0FBSyxDQUFDLENBQW1CO1FBQ3ZCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsTUFBTSxDQUFDLENBQW9CO1FBQ3pCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsR0FBRyxDQUFDLENBQVM7UUFDWCxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztRQUNkLE9B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O1FBQUMsTUFBTTtZQUNOLE1BQU0sSUFBSSxnQ0FBcUIsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1NBQzFEO0lBQ0gsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixzQkFBc0IsQ0FBQyxjQUFtQjtRQUN4QyxJQUFJO1lBQ0YsV0FBVyxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLENBQUM7U0FDcEQ7UUFBQyxNQUFNO1lBQ04sTUFBTSxJQUFJLGdDQUFxQixDQUFDLHlCQUF5QixDQUFDLENBQUM7U0FDNUQ7SUFDSCxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLG1CQUFtQixDQUFDLFdBQXdCO1FBQzFDLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFO1lBQzVCLE9BQU87U0FDUjtJQUNILENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsYUFBYSxDQUFDLEtBQWdCO1FBQzVCLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUN2QixNQUFNLElBQUksZ0NBQXFCLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztTQUNuRTtJQUNILENBQUM7SUFDRCxZQUFZO0lBRVosa0JBQWtCO0lBQ2xCLFlBQVksQ0FBQyxTQUF3QixFQUFFLFNBQWlCO1FBQ3RELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDbEQsQ0FBQztDQUNGO0FBOVVELGdEQThVQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCaWdOdW1iZXIgZnJvbSAnYmlnbnVtYmVyLmpzJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7XG4gIEJhc2VBZGRyZXNzLFxuICBCYXNlS2V5LFxuICBCYXNlVHJhbnNhY3Rpb25CdWlsZGVyLFxuICBCdWlsZFRyYW5zYWN0aW9uRXJyb3IsXG4gIFB1YmxpY0tleSBhcyBCYXNlUHVibGljS2V5LFxuICBTaWduYXR1cmUsXG4gIFRyYW5zYWN0aW9uVHlwZSxcbiAgVXRpbHNFcnJvcixcbn0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24sIFRyYW5zYWN0aW9uSW5wdXQsIFRyYW5zYWN0aW9uT3V0cHV0LCBXaXRoZHJhd2FsIH0gZnJvbSAnLi90cmFuc2FjdGlvbic7XG5pbXBvcnQgeyBLZXlQYWlyIH0gZnJvbSAnLi9rZXlQYWlyJztcbmltcG9ydCB1dGlsIGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0ICogYXMgQ2FyZGFub1dhc20gZnJvbSAnQGVtdXJnby9jYXJkYW5vLXNlcmlhbGl6YXRpb24tbGliLW5vZGVqcyc7XG5pbXBvcnQgeyBCaWdOdW0gfSBmcm9tICdAZW11cmdvL2NhcmRhbm8tc2VyaWFsaXphdGlvbi1saWItbm9kZWpzJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFRyYW5zYWN0aW9uQnVpbGRlciBleHRlbmRzIEJhc2VUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICBwcm90ZWN0ZWQgX3RyYW5zYWN0aW9uITogVHJhbnNhY3Rpb247XG4gIHByb3RlY3RlZCBfc2lnbmVyczogS2V5UGFpcltdID0gW107XG4gIHByb3RlY3RlZCBfdHJhbnNhY3Rpb25JbnB1dHM6IFRyYW5zYWN0aW9uSW5wdXRbXSA9IFtdO1xuICBwcm90ZWN0ZWQgX3RyYW5zYWN0aW9uT3V0cHV0czogVHJhbnNhY3Rpb25PdXRwdXRbXSA9IFtdO1xuICBwcm90ZWN0ZWQgX3NpZ25hdHVyZXM6IFNpZ25hdHVyZVtdID0gW107XG4gIHByb3RlY3RlZCBfY2hhbmdlQWRkcmVzczogc3RyaW5nO1xuICBwcm90ZWN0ZWQgX3NlbmRlckJhbGFuY2U6IHN0cmluZztcbiAgcHJvdGVjdGVkIF90dGwgPSAwO1xuICBwcm90ZWN0ZWQgX2NlcnRzOiBDYXJkYW5vV2FzbS5DZXJ0aWZpY2F0ZVtdID0gW107XG4gIHByb3RlY3RlZCBfd2l0aGRyYXdhbHM6IFdpdGhkcmF3YWxbXSA9IFtdO1xuICBwcm90ZWN0ZWQgX3R5cGU6IFRyYW5zYWN0aW9uVHlwZTtcbiAgcHJpdmF0ZSBfZmVlOiBCaWdOdW07XG5cbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICAgIHRoaXMudHJhbnNhY3Rpb24gPSBuZXcgVHJhbnNhY3Rpb24oX2NvaW5Db25maWcpO1xuICAgIHRoaXMuX2ZlZSA9IEJpZ051bS56ZXJvKCk7XG4gIH1cblxuICBpbnB1dChpOiBUcmFuc2FjdGlvbklucHV0KTogdGhpcyB7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb25JbnB1dHMucHVzaChpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIG91dHB1dChvOiBUcmFuc2FjdGlvbk91dHB1dCk6IHRoaXMge1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uT3V0cHV0cy5wdXNoKG8pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdHRsKHQ6IG51bWJlcik6IHRoaXMge1xuICAgIHRoaXMuX3R0bCA9IHQ7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBjaGFuZ2VBZGRyZXNzKGFkZHI6IHN0cmluZywgdG90YWxJbnB1dEJhbGFuY2U6IHN0cmluZyk6IHRoaXMge1xuICAgIHRoaXMuX2NoYW5nZUFkZHJlc3MgPSBhZGRyO1xuICAgIHRoaXMuX3NlbmRlckJhbGFuY2UgPSB0b3RhbElucHV0QmFsYW5jZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGZlZShmZWU6IHN0cmluZyk6IHRoaXMge1xuICAgIHRoaXMuX2ZlZSA9IEJpZ051bS5mcm9tX3N0cihmZWUpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgdGhlIHRyYW5zYWN0aW9uIGJ1aWxkZXIgZmllbGRzIHVzaW5nIHRoZSBkZWNvZGVkIHRyYW5zYWN0aW9uIGRhdGFcbiAgICpcbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvbn0gdHggdGhlIHRyYW5zYWN0aW9uIGRhdGFcbiAgICovXG4gIGluaXRCdWlsZGVyKHR4OiBUcmFuc2FjdGlvbik6IHZvaWQge1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uID0gdHg7XG4gICAgY29uc3QgdHhuQm9keSA9IHR4LnRyYW5zYWN0aW9uLmJvZHkoKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHR4bkJvZHkuaW5wdXRzKCkubGVuKCk7IGkrKykge1xuICAgICAgY29uc3QgaW5wdXQgPSB0eG5Cb2R5LmlucHV0cygpLmdldChpKTtcbiAgICAgIHRoaXMuaW5wdXQoe1xuICAgICAgICB0cmFuc2FjdGlvbl9pZDogQnVmZmVyLmZyb20oaW5wdXQudHJhbnNhY3Rpb25faWQoKS50b19ieXRlcygpKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgIHRyYW5zYWN0aW9uX2luZGV4OiBpbnB1dC5pbmRleCgpLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdHhuQm9keS5vdXRwdXRzKCkubGVuKCk7IGkrKykge1xuICAgICAgY29uc3Qgb3V0cHV0ID0gdHhuQm9keS5vdXRwdXRzKCkuZ2V0KGkpO1xuICAgICAgdGhpcy5vdXRwdXQoe1xuICAgICAgICBhZGRyZXNzOiBvdXRwdXQuYWRkcmVzcygpLnRvX2JlY2gzMigpLFxuICAgICAgICBhbW91bnQ6IG91dHB1dC5hbW91bnQoKS5jb2luKCkudG9fc3RyKCksXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodHhuQm9keS5jZXJ0cygpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGNlcnRzID0gdHhuQm9keS5jZXJ0cygpIGFzIENhcmRhbm9XYXNtLkNlcnRpZmljYXRlcztcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2VydHMubGVuKCk7IGkrKykge1xuICAgICAgICB0aGlzLl9jZXJ0cy5wdXNoKGNlcnRzLmdldChpKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR4bkJvZHkud2l0aGRyYXdhbHMoKSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCB3aXRoZHJhd2FscyA9IHR4bkJvZHkud2l0aGRyYXdhbHMoKSBhcyBDYXJkYW5vV2FzbS5XaXRoZHJhd2FscztcbiAgICAgIGNvbnN0IGtleXMgPSB3aXRoZHJhd2Fscy5rZXlzKCk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuKCk7IGkrKykge1xuICAgICAgICBjb25zdCByZXdhcmRBZGRyZXNzID0ga2V5cy5nZXQoaSkgYXMgQ2FyZGFub1dhc20uUmV3YXJkQWRkcmVzcztcbiAgICAgICAgY29uc3QgcmV3YXJkID0gd2l0aGRyYXdhbHMuZ2V0KHJld2FyZEFkZHJlc3MpIGFzIENhcmRhbm9XYXNtLkJpZ051bTtcbiAgICAgICAgdGhpcy5fd2l0aGRyYXdhbHMucHVzaCh7IHN0YWtlQWRkcmVzczogcmV3YXJkQWRkcmVzcy50b19hZGRyZXNzKCkudG9fYmVjaDMyKCksIHZhbHVlOiByZXdhcmQudG9fc3RyKCkgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fdHRsID0gdHgudHJhbnNhY3Rpb24uYm9keSgpLnR0bCgpIGFzIG51bWJlcjtcbiAgICB0aGlzLl9mZWUgPSB0eC50cmFuc2FjdGlvbi5ib2R5KCkuZmVlKCk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGZyb21JbXBsZW1lbnRhdGlvbihyYXdUcmFuc2FjdGlvbjogc3RyaW5nKTogVHJhbnNhY3Rpb24ge1xuICAgIHRoaXMudmFsaWRhdGVSYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbik7XG4gICAgdGhpcy5idWlsZEltcGxlbWVudGF0aW9uKCk7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNhY3Rpb247XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGJ1aWxkSW1wbGVtZW50YXRpb24oKTogUHJvbWlzZTxUcmFuc2FjdGlvbj4ge1xuICAgIGNvbnN0IGlucHV0cyA9IENhcmRhbm9XYXNtLlRyYW5zYWN0aW9uSW5wdXRzLm5ldygpO1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uSW5wdXRzLmZvckVhY2goKGlucHV0KSA9PiB7XG4gICAgICBpbnB1dHMuYWRkKFxuICAgICAgICBDYXJkYW5vV2FzbS5UcmFuc2FjdGlvbklucHV0Lm5ldyhcbiAgICAgICAgICBDYXJkYW5vV2FzbS5UcmFuc2FjdGlvbkhhc2guZnJvbV9ieXRlcyhCdWZmZXIuZnJvbShpbnB1dC50cmFuc2FjdGlvbl9pZCwgJ2hleCcpKSxcbiAgICAgICAgICBpbnB1dC50cmFuc2FjdGlvbl9pbmRleFxuICAgICAgICApXG4gICAgICApO1xuICAgIH0pO1xuICAgIGxldCBvdXRwdXRzID0gQ2FyZGFub1dhc20uVHJhbnNhY3Rpb25PdXRwdXRzLm5ldygpO1xuICAgIGxldCB0b3RhbEFtb3VudFRvU2VuZCA9IENhcmRhbm9XYXNtLkJpZ051bS56ZXJvKCk7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb25PdXRwdXRzLmZvckVhY2goKG91dHB1dCkgPT4ge1xuICAgICAgY29uc3QgYW1vdW50ID0gQ2FyZGFub1dhc20uQmlnTnVtLmZyb21fc3RyKG91dHB1dC5hbW91bnQpO1xuICAgICAgb3V0cHV0cy5hZGQoXG4gICAgICAgIENhcmRhbm9XYXNtLlRyYW5zYWN0aW9uT3V0cHV0Lm5ldyhcbiAgICAgICAgICBDYXJkYW5vV2FzbS5BZGRyZXNzLmZyb21fYmVjaDMyKG91dHB1dC5hZGRyZXNzKSxcbiAgICAgICAgICBDYXJkYW5vV2FzbS5WYWx1ZS5uZXcoYW1vdW50KVxuICAgICAgICApXG4gICAgICApO1xuICAgICAgdG90YWxBbW91bnRUb1NlbmQgPSB0b3RhbEFtb3VudFRvU2VuZC5jaGVja2VkX2FkZChhbW91bnQpO1xuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuX2ZlZS5pc196ZXJvKCkpIHtcbiAgICAgIC8vIGVzdGltYXRlIGZlZVxuICAgICAgLy8gYWRkIGV4dHJhIG91dHB1dCBmb3IgdGhlIGNoYW5nZVxuICAgICAgaWYgKHRoaXMuX2NoYW5nZUFkZHJlc3MgJiYgdGhpcy5fc2VuZGVyQmFsYW5jZSkge1xuICAgICAgICBjb25zdCBjaGFuZ2VBZGRyZXNzID0gQ2FyZGFub1dhc20uQWRkcmVzcy5mcm9tX2JlY2gzMih0aGlzLl9jaGFuZ2VBZGRyZXNzKTtcbiAgICAgICAgY29uc3QgbW9ja0NoYW5nZSA9IENhcmRhbm9XYXNtLlRyYW5zYWN0aW9uT3V0cHV0Lm5ldyhcbiAgICAgICAgICBjaGFuZ2VBZGRyZXNzLFxuICAgICAgICAgIENhcmRhbm9XYXNtLlZhbHVlLm5ldyhDYXJkYW5vV2FzbS5CaWdOdW0uZnJvbV9zdHIodGhpcy5fc2VuZGVyQmFsYW5jZSkpXG4gICAgICAgICk7XG4gICAgICAgIG91dHB1dHMuYWRkKG1vY2tDaGFuZ2UpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB0eEJvZHkgPSBDYXJkYW5vV2FzbS5UcmFuc2FjdGlvbkJvZHkubmV3X3R4X2JvZHkoaW5wdXRzLCBvdXRwdXRzLCB0aGlzLl9mZWUpO1xuICAgICAgdHhCb2R5LnNldF90dGwoQ2FyZGFub1dhc20uQmlnTnVtLmZyb21fc3RyKHRoaXMuX3R0bC50b1N0cmluZygpKSk7XG4gICAgICBjb25zdCB0eEhhc2ggPSBDYXJkYW5vV2FzbS5oYXNoX3RyYW5zYWN0aW9uKHR4Qm9keSk7XG5cbiAgICAgIC8vIHdlIGFkZCB3aXRuZXNzZXMgb25jZSBzbyB0aGF0IHdlIGNhbiBnZXQgdGhlIGFwcHJvcHJpYXRlIGFtb3VudCBvZiBzaWduZXJzIGZvciBjYWxjdWxhdGluZyB0aGUgZmVlXG4gICAgICBjb25zdCB3aXRuZXNzU2V0ID0gQ2FyZGFub1dhc20uVHJhbnNhY3Rpb25XaXRuZXNzU2V0Lm5ldygpO1xuICAgICAgY29uc3QgdmtleVdpdG5lc3NlcyA9IENhcmRhbm9XYXNtLlZrZXl3aXRuZXNzZXMubmV3KCk7XG4gICAgICB0aGlzLl9zaWduZXJzLmZvckVhY2goKGtleVBhaXIpID0+IHtcbiAgICAgICAgY29uc3QgcHJ2ID0ga2V5UGFpci5nZXRLZXlzKCkucHJ2IGFzIHN0cmluZztcbiAgICAgICAgY29uc3QgdmtleVdpdG5lc3MgPSBDYXJkYW5vV2FzbS5tYWtlX3ZrZXlfd2l0bmVzcyhcbiAgICAgICAgICB0eEhhc2gsXG4gICAgICAgICAgQ2FyZGFub1dhc20uUHJpdmF0ZUtleS5mcm9tX25vcm1hbF9ieXRlcyhCdWZmZXIuZnJvbShwcnYsICdoZXgnKSlcbiAgICAgICAgKTtcbiAgICAgICAgdmtleVdpdG5lc3Nlcy5hZGQodmtleVdpdG5lc3MpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLl9zaWduYXR1cmVzLmZvckVhY2goKHNpZ25hdHVyZSkgPT4ge1xuICAgICAgICBjb25zdCB2a2V5ID0gQ2FyZGFub1dhc20uVmtleS5uZXcoXG4gICAgICAgICAgQ2FyZGFub1dhc20uUHVibGljS2V5LmZyb21fYnl0ZXMoQnVmZmVyLmZyb20oc2lnbmF0dXJlLnB1YmxpY0tleS5wdWIsICdoZXgnKSlcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgZWQyNTVTaWcgPSBDYXJkYW5vV2FzbS5FZDI1NTE5U2lnbmF0dXJlLmZyb21fYnl0ZXMoc2lnbmF0dXJlLnNpZ25hdHVyZSk7XG4gICAgICAgIHZrZXlXaXRuZXNzZXMuYWRkKENhcmRhbm9XYXNtLlZrZXl3aXRuZXNzLm5ldyh2a2V5LCBlZDI1NVNpZykpO1xuICAgICAgfSk7XG4gICAgICBpZiAodmtleVdpdG5lc3Nlcy5sZW4oKSA9PT0gMCkge1xuICAgICAgICBjb25zdCBwcnYgPSBDYXJkYW5vV2FzbS5Qcml2YXRlS2V5LmdlbmVyYXRlX2VkMjU1MTkoKTtcbiAgICAgICAgY29uc3QgdmtleVdpdG5lc3MgPSBDYXJkYW5vV2FzbS5tYWtlX3ZrZXlfd2l0bmVzcyh0eEhhc2gsIHBydik7XG4gICAgICAgIHZrZXlXaXRuZXNzZXMuYWRkKHZrZXlXaXRuZXNzKTtcbiAgICAgICAgaWYgKHRoaXMuX3R5cGUgIT09IFRyYW5zYWN0aW9uVHlwZS5TZW5kKSB7XG4gICAgICAgICAgdmtleVdpdG5lc3Nlcy5hZGQodmtleVdpdG5lc3MpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB3aXRuZXNzU2V0LnNldF92a2V5cyh2a2V5V2l0bmVzc2VzKTtcblxuICAgICAgLy8gYWRkIGluIHdpdGhkcmF3YWwgaWYgdGhpcyBpcyBhIHdpdGhkcmF3YWwgdHhcbiAgICAgIGlmICh0aGlzLl93aXRoZHJhd2Fscy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IHdpdGhkcmF3YWxzID0gQ2FyZGFub1dhc20uV2l0aGRyYXdhbHMubmV3KCk7XG4gICAgICAgIHRoaXMuX3dpdGhkcmF3YWxzLmZvckVhY2goKHdpdGhkcmF3YWw6IFdpdGhkcmF3YWwpID0+IHtcbiAgICAgICAgICBjb25zdCByZXdhcmRBZGRyZXNzID0gQ2FyZGFub1dhc20uUmV3YXJkQWRkcmVzcy5mcm9tX2FkZHJlc3MoXG4gICAgICAgICAgICBDYXJkYW5vV2FzbS5BZGRyZXNzLmZyb21fYmVjaDMyKHdpdGhkcmF3YWwuc3Rha2VBZGRyZXNzKVxuICAgICAgICAgICk7XG4gICAgICAgICAgd2l0aGRyYXdhbHMuaW5zZXJ0KHJld2FyZEFkZHJlc3MhLCBDYXJkYW5vV2FzbS5CaWdOdW0uZnJvbV9zdHIod2l0aGRyYXdhbC52YWx1ZSkpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0eEJvZHkuc2V0X3dpdGhkcmF3YWxzKHdpdGhkcmF3YWxzKTtcbiAgICAgIH1cblxuICAgICAgLy8gYWRkIGluIGNlcnRpZmljYXRlcyB0byBnZXQgbW9jayBzaXplXG4gICAgICBjb25zdCBkcmFmdENlcnRzID0gQ2FyZGFub1dhc20uQ2VydGlmaWNhdGVzLm5ldygpO1xuICAgICAgZm9yIChjb25zdCBjZXJ0IG9mIHRoaXMuX2NlcnRzKSB7XG4gICAgICAgIGRyYWZ0Q2VydHMuYWRkKGNlcnQpO1xuICAgICAgfVxuICAgICAgdHhCb2R5LnNldF9jZXJ0cyhkcmFmdENlcnRzKTtcblxuICAgICAgY29uc3QgdHhEcmFmdCA9IENhcmRhbm9XYXNtLlRyYW5zYWN0aW9uLm5ldyh0eEJvZHksIHdpdG5lc3NTZXQpO1xuICAgICAgY29uc3QgbGluZWFyRmVlID0gQ2FyZGFub1dhc20uTGluZWFyRmVlLm5ldyhcbiAgICAgICAgQ2FyZGFub1dhc20uQmlnTnVtLmZyb21fc3RyKCc0NCcpLFxuICAgICAgICBDYXJkYW5vV2FzbS5CaWdOdW0uZnJvbV9zdHIoJzE1NTM4MScpXG4gICAgICApO1xuXG4gICAgICAvLyBjYWxjdWxhdGUgdGhlIGZlZSBiYXNlZCBvZmYgb3VyIGR1bW15IHRyYW5zYWN0aW9uXG4gICAgICBjb25zdCBmZWUgPSBDYXJkYW5vV2FzbS5taW5fZmVlKHR4RHJhZnQsIGxpbmVhckZlZSkuY2hlY2tlZF9hZGQoQmlnTnVtLmZyb21fc3RyKCc0NDAnKSk7XG4gICAgICB0aGlzLl9mZWUgPSBmZWU7XG4gICAgfVxuICAgIHRoaXMuX3RyYW5zYWN0aW9uLmZlZSh0aGlzLl9mZWUudG9fc3RyKCkpO1xuICAgIC8vIG5vdyBjYWxjdWxhdGUgdGhlIGNoYW5nZSBiYXNlZCBvZmYgb2YgPHV0eG9CYWxhbmNlPiAtIDxmZWU+IC0gPGFtb3VudFRvU2VuZD5cbiAgICAvLyByZXNldCB0aGUgb3V0cHV0cyBjb2xsZWN0aW9uIGJlY2F1c2Ugbm93IG91ciBsYXN0IG91dHB1dCBoYXMgY2hhbmdlZFxuICAgIG91dHB1dHMgPSBDYXJkYW5vV2FzbS5UcmFuc2FjdGlvbk91dHB1dHMubmV3KCk7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb25PdXRwdXRzLmZvckVhY2goKG91dHB1dCkgPT4ge1xuICAgICAgb3V0cHV0cy5hZGQoXG4gICAgICAgIENhcmRhbm9XYXNtLlRyYW5zYWN0aW9uT3V0cHV0Lm5ldyhcbiAgICAgICAgICBDYXJkYW5vV2FzbS5BZGRyZXNzLmZyb21fYmVjaDMyKG91dHB1dC5hZGRyZXNzKSxcbiAgICAgICAgICBDYXJkYW5vV2FzbS5WYWx1ZS5uZXcoQ2FyZGFub1dhc20uQmlnTnVtLmZyb21fc3RyKG91dHB1dC5hbW91bnQpKVxuICAgICAgICApXG4gICAgICApO1xuICAgIH0pO1xuICAgIGlmICh0aGlzLl9jaGFuZ2VBZGRyZXNzICYmIHRoaXMuX3NlbmRlckJhbGFuY2UpIHtcbiAgICAgIGNvbnN0IGNoYW5nZUFkZHJlc3MgPSBDYXJkYW5vV2FzbS5BZGRyZXNzLmZyb21fYmVjaDMyKHRoaXMuX2NoYW5nZUFkZHJlc3MpO1xuICAgICAgY29uc3QgdXR4b0JhbGFuY2UgPSBDYXJkYW5vV2FzbS5CaWdOdW0uZnJvbV9zdHIodGhpcy5fc2VuZGVyQmFsYW5jZSk7XG5cbiAgICAgIGNvbnN0IGFkanVzdG1lbnQgPSBCaWdOdW0uZnJvbV9zdHIoJzIwMDAwMDAnKTtcbiAgICAgIGxldCBjaGFuZ2UgPSB1dHhvQmFsYW5jZS5jaGVja2VkX3N1Yih0aGlzLl9mZWUpLmNoZWNrZWRfc3ViKHRvdGFsQW1vdW50VG9TZW5kKTtcbiAgICAgIGlmICh0aGlzLl90eXBlID09PSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0FjdGl2YXRlKSB7XG4gICAgICAgIGNoYW5nZSA9IGNoYW5nZS5jaGVja2VkX3N1YihhZGp1c3RtZW50KTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fdHlwZSA9PT0gVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdEZWFjdGl2YXRlKSB7XG4gICAgICAgIGNoYW5nZSA9IGNoYW5nZS5jaGVja2VkX2FkZChhZGp1c3RtZW50KTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fdHlwZSA9PSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ1dpdGhkcmF3KSB7XG4gICAgICAgIHRoaXMuX3dpdGhkcmF3YWxzLmZvckVhY2goKHdpdGhkcmF3YWw6IFdpdGhkcmF3YWwpID0+IHtcbiAgICAgICAgICBjaGFuZ2UgPSBjaGFuZ2UuY2hlY2tlZF9hZGQoQ2FyZGFub1dhc20uQmlnTnVtLmZyb21fc3RyKHdpdGhkcmF3YWwudmFsdWUpKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNoYW5nZU91dHB1dCA9IENhcmRhbm9XYXNtLlRyYW5zYWN0aW9uT3V0cHV0Lm5ldyhjaGFuZ2VBZGRyZXNzLCBDYXJkYW5vV2FzbS5WYWx1ZS5uZXcoY2hhbmdlKSk7XG4gICAgICBvdXRwdXRzLmFkZChjaGFuZ2VPdXRwdXQpO1xuICAgIH1cblxuICAgIGNvbnN0IHR4UmF3ID0gQ2FyZGFub1dhc20uVHJhbnNhY3Rpb25Cb2R5Lm5ld190eF9ib2R5KGlucHV0cywgb3V0cHV0cywgdGhpcy5fZmVlKTtcblxuICAgIGNvbnN0IGNlcnRzID0gQ2FyZGFub1dhc20uQ2VydGlmaWNhdGVzLm5ldygpO1xuICAgIGZvciAoY29uc3QgY2VydCBvZiB0aGlzLl9jZXJ0cykge1xuICAgICAgY2VydHMuYWRkKGNlcnQpO1xuICAgIH1cbiAgICB0eFJhdy5zZXRfY2VydHMoY2VydHMpO1xuXG4gICAgLy8gYWRkIGluIHdpdGhkcmF3YWwgaWYgdGhpcyBpcyBhIHdpdGhkcmF3YWwgdHhcbiAgICBpZiAodGhpcy5fd2l0aGRyYXdhbHMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3Qgd2l0aGRyYXdhbHMgPSBDYXJkYW5vV2FzbS5XaXRoZHJhd2Fscy5uZXcoKTtcbiAgICAgIHRoaXMuX3dpdGhkcmF3YWxzLmZvckVhY2goKHdpdGhkcmF3YWw6IFdpdGhkcmF3YWwpID0+IHtcbiAgICAgICAgY29uc3QgcmV3YXJkQWRkcmVzcyA9IENhcmRhbm9XYXNtLlJld2FyZEFkZHJlc3MuZnJvbV9hZGRyZXNzKFxuICAgICAgICAgIENhcmRhbm9XYXNtLkFkZHJlc3MuZnJvbV9iZWNoMzIod2l0aGRyYXdhbC5zdGFrZUFkZHJlc3MpXG4gICAgICAgICk7XG4gICAgICAgIHdpdGhkcmF3YWxzLmluc2VydChyZXdhcmRBZGRyZXNzISwgQ2FyZGFub1dhc20uQmlnTnVtLmZyb21fc3RyKHdpdGhkcmF3YWwudmFsdWUpKTtcbiAgICAgIH0pO1xuXG4gICAgICB0eFJhdy5zZXRfd2l0aGRyYXdhbHMod2l0aGRyYXdhbHMpO1xuICAgIH1cblxuICAgIHR4UmF3LnNldF90dGwoQ2FyZGFub1dhc20uQmlnTnVtLmZyb21fc3RyKHRoaXMuX3R0bC50b1N0cmluZygpKSk7XG4gICAgY29uc3QgdHhSYXdIYXNoID0gQ2FyZGFub1dhc20uaGFzaF90cmFuc2FjdGlvbih0eFJhdyk7XG5cbiAgICAvLyBub3cgYWRkIHRoZSB3aXRuZXNzZXMgYWdhaW4gdGhpcyB0aW1lIGZvciByZWFsLiBXZSBuZWVkIHRvIGRvIHRoaXMgYWdhaW5cbiAgICAvLyBiZWNhdXNlIG5vdyB0aGF0IHdlJ3ZlIGFkZGVkIG91ciByZWFsIGZlZSBhbmQgY2hhbmdlIG91dHB1dCwgd2UgaGF2ZSBhIGRpZmZlcmVuY2UgdHJhbnNhY3Rpb24gaGFzaFxuICAgIGNvbnN0IHdpdG5lc3NTZXQgPSBDYXJkYW5vV2FzbS5UcmFuc2FjdGlvbldpdG5lc3NTZXQubmV3KCk7XG4gICAgY29uc3QgdmtleVdpdG5lc3NlcyA9IENhcmRhbm9XYXNtLlZrZXl3aXRuZXNzZXMubmV3KCk7XG4gICAgdGhpcy5fc2lnbmVycy5mb3JFYWNoKChrZXlQYWlyKSA9PiB7XG4gICAgICBjb25zdCBwcnYgPSBrZXlQYWlyLmdldEtleXMoKS5wcnYgYXMgc3RyaW5nO1xuICAgICAgY29uc3QgdmtleVdpdG5lc3MgPSBDYXJkYW5vV2FzbS5tYWtlX3ZrZXlfd2l0bmVzcyhcbiAgICAgICAgdHhSYXdIYXNoLFxuICAgICAgICBDYXJkYW5vV2FzbS5Qcml2YXRlS2V5LmZyb21fbm9ybWFsX2J5dGVzKEJ1ZmZlci5mcm9tKHBydiwgJ2hleCcpKVxuICAgICAgKTtcbiAgICAgIHZrZXlXaXRuZXNzZXMuYWRkKHZrZXlXaXRuZXNzKTtcbiAgICB9KTtcbiAgICB0aGlzLl9zaWduYXR1cmVzLmZvckVhY2goKHNpZ25hdHVyZSkgPT4ge1xuICAgICAgY29uc3QgdmtleSA9IENhcmRhbm9XYXNtLlZrZXkubmV3KENhcmRhbm9XYXNtLlB1YmxpY0tleS5mcm9tX2J5dGVzKEJ1ZmZlci5mcm9tKHNpZ25hdHVyZS5wdWJsaWNLZXkucHViLCAnaGV4JykpKTtcbiAgICAgIGNvbnN0IGVkMjU1U2lnID0gQ2FyZGFub1dhc20uRWQyNTUxOVNpZ25hdHVyZS5mcm9tX2J5dGVzKHNpZ25hdHVyZS5zaWduYXR1cmUpO1xuICAgICAgdmtleVdpdG5lc3Nlcy5hZGQoQ2FyZGFub1dhc20uVmtleXdpdG5lc3MubmV3KHZrZXksIGVkMjU1U2lnKSk7XG4gICAgfSk7XG4gICAgd2l0bmVzc1NldC5zZXRfdmtleXModmtleVdpdG5lc3Nlcyk7XG5cbiAgICB0aGlzLl90cmFuc2FjdGlvbi50cmFuc2FjdGlvbiA9IENhcmRhbm9XYXNtLlRyYW5zYWN0aW9uLm5ldyh0eFJhdywgd2l0bmVzc1NldCk7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNhY3Rpb247XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIHNpZ25JbXBsZW1lbnRhdGlvbihrZXk6IEJhc2VLZXkpOiBUcmFuc2FjdGlvbiB7XG4gICAgdGhpcy5fc2lnbmVycy5wdXNoKG5ldyBLZXlQYWlyKHsgcHJ2OiBrZXkua2V5IH0pKTtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNhY3Rpb247XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGdldCB0cmFuc2FjdGlvbigpOiBUcmFuc2FjdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zYWN0aW9uO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBzZXQgdHJhbnNhY3Rpb24odHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uKSB7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb24gPSB0cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZUFkZHJlc3MoYWRkcmVzczogQmFzZUFkZHJlc3MsIGFkZHJlc3NGb3JtYXQ/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXV0aWwuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcy5hZGRyZXNzKSkge1xuICAgICAgdGhyb3cgbmV3IFV0aWxzRXJyb3IoJ2ludmFsaWQgYWRkcmVzcyAnICsgYWRkcmVzcy5hZGRyZXNzKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVLZXkoa2V5OiBCYXNlS2V5KTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIG5ldyBLZXlQYWlyKHsgcHJ2OiBrZXkua2V5IH0pO1xuICAgIH0gY2F0Y2gge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcihgS2V5IHZhbGlkYXRpb24gZmFpbGVkYCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlUmF3VHJhbnNhY3Rpb24ocmF3VHJhbnNhY3Rpb246IGFueSk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICBDYXJkYW5vV2FzbS5UcmFuc2FjdGlvbi5mcm9tX2J5dGVzKHJhd1RyYW5zYWN0aW9uKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ2ludmFsaWQgcmF3IHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlVHJhbnNhY3Rpb24odHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uKTogdm9pZCB7XG4gICAgaWYgKCF0cmFuc2FjdGlvbi50cmFuc2FjdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZVZhbHVlKHZhbHVlOiBCaWdOdW1iZXIpOiB2b2lkIHtcbiAgICBpZiAodmFsdWUuaXNMZXNzVGhhbigwKSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignVmFsdWUgY2Fubm90IGJlIGxlc3MgdGhhbiB6ZXJvJyk7XG4gICAgfVxuICB9XG4gIC8vIGVuZHJlZ2lvblxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBhZGRTaWduYXR1cmUocHVibGljS2V5OiBCYXNlUHVibGljS2V5LCBzaWduYXR1cmU6IEJ1ZmZlcik6IHZvaWQge1xuICAgIHRoaXMuX3NpZ25hdHVyZXMucHVzaCh7IHB1YmxpY0tleSwgc2lnbmF0dXJlIH0pO1xuICB9XG59XG4iXX0=
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
|
|
2
|
-
import { BaseTransactionBuilderFactory } from '@bitgo-beta/sdk-core';
|
|
3
|
-
import { TransferBuilder } from './transferBuilder';
|
|
4
|
-
import { WalletInitializationBuilder } from './walletInitializationBuilder';
|
|
5
|
-
import { TransactionBuilder } from './transactionBuilder';
|
|
6
|
-
import { Transaction } from './transaction';
|
|
7
|
-
import { StakingActivateBuilder } from './stakingActivateBuilder';
|
|
8
|
-
import { StakingDeactivateBuilder } from './stakingDeactivateBuilder';
|
|
9
|
-
import { StakingWithdrawRewardsBuilder } from './stakingWithdrawRewardsBuilder';
|
|
10
|
-
export declare class TransactionBuilderFactory extends BaseTransactionBuilderFactory {
|
|
11
|
-
constructor(_coinConfig: Readonly<CoinConfig>);
|
|
12
|
-
/** @inheritdoc */
|
|
13
|
-
from(raw: Uint8Array | string): TransactionBuilder;
|
|
14
|
-
/** @inheritdoc */
|
|
15
|
-
getWalletInitializationBuilder(tx?: Transaction): WalletInitializationBuilder;
|
|
16
|
-
/** @inheritdoc */
|
|
17
|
-
getTransferBuilder(tx?: Transaction): TransferBuilder;
|
|
18
|
-
getStakingActivateBuilder(tx?: Transaction): StakingActivateBuilder;
|
|
19
|
-
getStakingDeactivateBuilder(tx?: Transaction): StakingDeactivateBuilder;
|
|
20
|
-
getStakingWithdrawBuilder(tx?: Transaction): StakingWithdrawRewardsBuilder;
|
|
21
|
-
/**
|
|
22
|
-
* Initialize the builder with the given transaction
|
|
23
|
-
*
|
|
24
|
-
* @param {Transaction | undefined} tx - the transaction used to initialize the builder
|
|
25
|
-
* @param {TransactionBuilder} builder - the builder to be initialized
|
|
26
|
-
* @returns {TransactionBuilder} the builder initialized
|
|
27
|
-
*/
|
|
28
|
-
private static initializeBuilder;
|
|
29
|
-
}
|
|
30
|
-
//# 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;AAC7D,OAAO,EAAE,6BAA6B,EAA4C,MAAM,sBAAsB,CAAC;AAC/G,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,6BAA6B,EAAE,MAAM,iCAAiC,CAAC;AAEhF,qBAAa,yBAA0B,SAAQ,6BAA6B;gBAC9D,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI7C,kBAAkB;IAClB,IAAI,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM,GAAG,kBAAkB;IA0BlD,kBAAkB;IAClB,8BAA8B,CAAC,EAAE,CAAC,EAAE,WAAW,GAAG,2BAA2B;IAI7E,kBAAkB;IAClB,kBAAkB,CAAC,EAAE,CAAC,EAAE,WAAW,GAAG,eAAe;IAIrD,yBAAyB,CAAC,EAAE,CAAC,EAAE,WAAW,GAAG,sBAAsB;IAInE,2BAA2B,CAAC,EAAE,CAAC,EAAE,WAAW;IAI5C,yBAAyB,CAAC,EAAE,CAAC,EAAE,WAAW;IAI1C;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,iBAAiB;CAMjC"}
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.TransactionBuilderFactory = void 0;
|
|
4
|
-
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
5
|
-
const transferBuilder_1 = require("./transferBuilder");
|
|
6
|
-
const walletInitializationBuilder_1 = require("./walletInitializationBuilder");
|
|
7
|
-
const transaction_1 = require("./transaction");
|
|
8
|
-
const stakingActivateBuilder_1 = require("./stakingActivateBuilder");
|
|
9
|
-
const stakingDeactivateBuilder_1 = require("./stakingDeactivateBuilder");
|
|
10
|
-
const stakingWithdrawRewardsBuilder_1 = require("./stakingWithdrawRewardsBuilder");
|
|
11
|
-
class TransactionBuilderFactory extends sdk_core_1.BaseTransactionBuilderFactory {
|
|
12
|
-
constructor(_coinConfig) {
|
|
13
|
-
super(_coinConfig);
|
|
14
|
-
}
|
|
15
|
-
/** @inheritdoc */
|
|
16
|
-
from(raw) {
|
|
17
|
-
if (raw instanceof Uint8Array) {
|
|
18
|
-
return this.from(Buffer.from(raw).toString('hex'));
|
|
19
|
-
}
|
|
20
|
-
try {
|
|
21
|
-
const tx = new transaction_1.Transaction(this._coinConfig);
|
|
22
|
-
tx.fromRawTransaction(raw);
|
|
23
|
-
switch (tx.type) {
|
|
24
|
-
case sdk_core_1.TransactionType.Send:
|
|
25
|
-
return this.getTransferBuilder(tx);
|
|
26
|
-
case sdk_core_1.TransactionType.StakingActivate:
|
|
27
|
-
return this.getStakingActivateBuilder(tx);
|
|
28
|
-
case sdk_core_1.TransactionType.StakingDeactivate:
|
|
29
|
-
return this.getStakingDeactivateBuilder(tx);
|
|
30
|
-
case sdk_core_1.TransactionType.StakingWithdraw:
|
|
31
|
-
return this.getStakingWithdrawBuilder(tx);
|
|
32
|
-
case sdk_core_1.TransactionType.WalletInitialization:
|
|
33
|
-
return this.getWalletInitializationBuilder(tx);
|
|
34
|
-
default:
|
|
35
|
-
throw new sdk_core_1.InvalidTransactionError('unsupported transaction');
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
catch (e) {
|
|
39
|
-
throw e;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
/** @inheritdoc */
|
|
43
|
-
getWalletInitializationBuilder(tx) {
|
|
44
|
-
return TransactionBuilderFactory.initializeBuilder(tx, new walletInitializationBuilder_1.WalletInitializationBuilder(this._coinConfig));
|
|
45
|
-
}
|
|
46
|
-
/** @inheritdoc */
|
|
47
|
-
getTransferBuilder(tx) {
|
|
48
|
-
return TransactionBuilderFactory.initializeBuilder(tx, new transferBuilder_1.TransferBuilder(this._coinConfig));
|
|
49
|
-
}
|
|
50
|
-
getStakingActivateBuilder(tx) {
|
|
51
|
-
return TransactionBuilderFactory.initializeBuilder(tx, new stakingActivateBuilder_1.StakingActivateBuilder(this._coinConfig));
|
|
52
|
-
}
|
|
53
|
-
getStakingDeactivateBuilder(tx) {
|
|
54
|
-
return TransactionBuilderFactory.initializeBuilder(tx, new stakingDeactivateBuilder_1.StakingDeactivateBuilder(this._coinConfig));
|
|
55
|
-
}
|
|
56
|
-
getStakingWithdrawBuilder(tx) {
|
|
57
|
-
return TransactionBuilderFactory.initializeBuilder(tx, new stakingWithdrawRewardsBuilder_1.StakingWithdrawRewardsBuilder(this._coinConfig));
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* Initialize the builder with the given transaction
|
|
61
|
-
*
|
|
62
|
-
* @param {Transaction | undefined} tx - the transaction used to initialize the builder
|
|
63
|
-
* @param {TransactionBuilder} builder - the builder to be initialized
|
|
64
|
-
* @returns {TransactionBuilder} the builder initialized
|
|
65
|
-
*/
|
|
66
|
-
static initializeBuilder(tx, builder) {
|
|
67
|
-
if (tx) {
|
|
68
|
-
builder.initBuilder(tx);
|
|
69
|
-
}
|
|
70
|
-
return builder;
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
exports.TransactionBuilderFactory = TransactionBuilderFactory;
|
|
74
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvdHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSxtREFBK0c7QUFDL0csdURBQW9EO0FBQ3BELCtFQUE0RTtBQUU1RSwrQ0FBNEM7QUFDNUMscUVBQWtFO0FBQ2xFLHlFQUFzRTtBQUN0RSxtRkFBZ0Y7QUFFaEYsTUFBYSx5QkFBMEIsU0FBUSx3Q0FBNkI7SUFDMUUsWUFBWSxXQUFpQztRQUMzQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDckIsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixJQUFJLENBQUMsR0FBd0I7UUFDM0IsSUFBSSxHQUFHLFlBQVksVUFBVSxFQUFFO1lBQzdCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1NBQ3BEO1FBQ0QsSUFBSTtZQUNGLE1BQU0sRUFBRSxHQUFHLElBQUkseUJBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDN0MsRUFBRSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzNCLFFBQVEsRUFBRSxDQUFDLElBQUksRUFBRTtnQkFDZixLQUFLLDBCQUFlLENBQUMsSUFBSTtvQkFDdkIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ3JDLEtBQUssMEJBQWUsQ0FBQyxlQUFlO29CQUNsQyxPQUFPLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDNUMsS0FBSywwQkFBZSxDQUFDLGlCQUFpQjtvQkFDcEMsT0FBTyxJQUFJLENBQUMsMkJBQTJCLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQzlDLEtBQUssMEJBQWUsQ0FBQyxlQUFlO29CQUNsQyxPQUFPLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDNUMsS0FBSywwQkFBZSxDQUFDLG9CQUFvQjtvQkFDdkMsT0FBTyxJQUFJLENBQUMsOEJBQThCLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ2pEO29CQUNFLE1BQU0sSUFBSSxrQ0FBdUIsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO2FBQ2hFO1NBQ0Y7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLE1BQU0sQ0FBQyxDQUFDO1NBQ1Q7SUFDSCxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLDhCQUE4QixDQUFDLEVBQWdCO1FBQzdDLE9BQU8seUJBQXlCLENBQUMsaUJBQWlCLENBQUMsRUFBRSxFQUFFLElBQUkseURBQTJCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDNUcsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixrQkFBa0IsQ0FBQyxFQUFnQjtRQUNqQyxPQUFPLHlCQUF5QixDQUFDLGlCQUFpQixDQUFDLEVBQUUsRUFBRSxJQUFJLGlDQUFlLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDaEcsQ0FBQztJQUVELHlCQUF5QixDQUFDLEVBQWdCO1FBQ3hDLE9BQU8seUJBQXlCLENBQUMsaUJBQWlCLENBQUMsRUFBRSxFQUFFLElBQUksK0NBQXNCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDdkcsQ0FBQztJQUVELDJCQUEyQixDQUFDLEVBQWdCO1FBQzFDLE9BQU8seUJBQXlCLENBQUMsaUJBQWlCLENBQUMsRUFBRSxFQUFFLElBQUksbURBQXdCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDekcsQ0FBQztJQUVELHlCQUF5QixDQUFDLEVBQWdCO1FBQ3hDLE9BQU8seUJBQXlCLENBQUMsaUJBQWlCLENBQUMsRUFBRSxFQUFFLElBQUksNkRBQTZCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDOUcsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNLLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBK0IsRUFBMkIsRUFBRSxPQUFVO1FBQ3BHLElBQUksRUFBRSxFQUFFO1lBQ04sT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUN6QjtRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7Q0FDRjtBQW5FRCw4REFtRUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgeyBCYXNlVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSwgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IsIFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IFRyYW5zZmVyQnVpbGRlciB9IGZyb20gJy4vdHJhbnNmZXJCdWlsZGVyJztcbmltcG9ydCB7IFdhbGxldEluaXRpYWxpemF0aW9uQnVpbGRlciB9IGZyb20gJy4vd2FsbGV0SW5pdGlhbGl6YXRpb25CdWlsZGVyJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vdHJhbnNhY3Rpb25CdWlsZGVyJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbic7XG5pbXBvcnQgeyBTdGFraW5nQWN0aXZhdGVCdWlsZGVyIH0gZnJvbSAnLi9zdGFraW5nQWN0aXZhdGVCdWlsZGVyJztcbmltcG9ydCB7IFN0YWtpbmdEZWFjdGl2YXRlQnVpbGRlciB9IGZyb20gJy4vc3Rha2luZ0RlYWN0aXZhdGVCdWlsZGVyJztcbmltcG9ydCB7IFN0YWtpbmdXaXRoZHJhd1Jld2FyZHNCdWlsZGVyIH0gZnJvbSAnLi9zdGFraW5nV2l0aGRyYXdSZXdhcmRzQnVpbGRlcic7XG5cbmV4cG9ydCBjbGFzcyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5IGV4dGVuZHMgQmFzZVRyYW5zYWN0aW9uQnVpbGRlckZhY3Rvcnkge1xuICBjb25zdHJ1Y3RvcihfY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihfY29pbkNvbmZpZyk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgZnJvbShyYXc6IFVpbnQ4QXJyYXkgfCBzdHJpbmcpOiBUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICAgIGlmIChyYXcgaW5zdGFuY2VvZiBVaW50OEFycmF5KSB7XG4gICAgICByZXR1cm4gdGhpcy5mcm9tKEJ1ZmZlci5mcm9tKHJhdykudG9TdHJpbmcoJ2hleCcpKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHR4ID0gbmV3IFRyYW5zYWN0aW9uKHRoaXMuX2NvaW5Db25maWcpO1xuICAgICAgdHguZnJvbVJhd1RyYW5zYWN0aW9uKHJhdyk7XG4gICAgICBzd2l0Y2ggKHR4LnR5cGUpIHtcbiAgICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuU2VuZDpcbiAgICAgICAgICByZXR1cm4gdGhpcy5nZXRUcmFuc2ZlckJ1aWxkZXIodHgpO1xuICAgICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nQWN0aXZhdGU6XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U3Rha2luZ0FjdGl2YXRlQnVpbGRlcih0eCk7XG4gICAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdEZWFjdGl2YXRlOlxuICAgICAgICAgIHJldHVybiB0aGlzLmdldFN0YWtpbmdEZWFjdGl2YXRlQnVpbGRlcih0eCk7XG4gICAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdXaXRoZHJhdzpcbiAgICAgICAgICByZXR1cm4gdGhpcy5nZXRTdGFraW5nV2l0aGRyYXdCdWlsZGVyKHR4KTtcbiAgICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuV2FsbGV0SW5pdGlhbGl6YXRpb246XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0V2FsbGV0SW5pdGlhbGl6YXRpb25CdWlsZGVyKHR4KTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ3Vuc3VwcG9ydGVkIHRyYW5zYWN0aW9uJyk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgZ2V0V2FsbGV0SW5pdGlhbGl6YXRpb25CdWlsZGVyKHR4PzogVHJhbnNhY3Rpb24pOiBXYWxsZXRJbml0aWFsaXphdGlvbkJ1aWxkZXIge1xuICAgIHJldHVybiBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5LmluaXRpYWxpemVCdWlsZGVyKHR4LCBuZXcgV2FsbGV0SW5pdGlhbGl6YXRpb25CdWlsZGVyKHRoaXMuX2NvaW5Db25maWcpKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBnZXRUcmFuc2ZlckJ1aWxkZXIodHg/OiBUcmFuc2FjdGlvbik6IFRyYW5zZmVyQnVpbGRlciB7XG4gICAgcmV0dXJuIFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkuaW5pdGlhbGl6ZUJ1aWxkZXIodHgsIG5ldyBUcmFuc2ZlckJ1aWxkZXIodGhpcy5fY29pbkNvbmZpZykpO1xuICB9XG5cbiAgZ2V0U3Rha2luZ0FjdGl2YXRlQnVpbGRlcih0eD86IFRyYW5zYWN0aW9uKTogU3Rha2luZ0FjdGl2YXRlQnVpbGRlciB7XG4gICAgcmV0dXJuIFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkuaW5pdGlhbGl6ZUJ1aWxkZXIodHgsIG5ldyBTdGFraW5nQWN0aXZhdGVCdWlsZGVyKHRoaXMuX2NvaW5Db25maWcpKTtcbiAgfVxuXG4gIGdldFN0YWtpbmdEZWFjdGl2YXRlQnVpbGRlcih0eD86IFRyYW5zYWN0aW9uKSB7XG4gICAgcmV0dXJuIFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkuaW5pdGlhbGl6ZUJ1aWxkZXIodHgsIG5ldyBTdGFraW5nRGVhY3RpdmF0ZUJ1aWxkZXIodGhpcy5fY29pbkNvbmZpZykpO1xuICB9XG5cbiAgZ2V0U3Rha2luZ1dpdGhkcmF3QnVpbGRlcih0eD86IFRyYW5zYWN0aW9uKSB7XG4gICAgcmV0dXJuIFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkuaW5pdGlhbGl6ZUJ1aWxkZXIodHgsIG5ldyBTdGFraW5nV2l0aGRyYXdSZXdhcmRzQnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKSk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSB0aGUgYnVpbGRlciB3aXRoIHRoZSBnaXZlbiB0cmFuc2FjdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge1RyYW5zYWN0aW9uIHwgdW5kZWZpbmVkfSB0eCAtIHRoZSB0cmFuc2FjdGlvbiB1c2VkIHRvIGluaXRpYWxpemUgdGhlIGJ1aWxkZXJcbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvbkJ1aWxkZXJ9IGJ1aWxkZXIgLSB0aGUgYnVpbGRlciB0byBiZSBpbml0aWFsaXplZFxuICAgKiBAcmV0dXJucyB7VHJhbnNhY3Rpb25CdWlsZGVyfSB0aGUgYnVpbGRlciBpbml0aWFsaXplZFxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgaW5pdGlhbGl6ZUJ1aWxkZXI8VCBleHRlbmRzIFRyYW5zYWN0aW9uQnVpbGRlcj4odHg6IFRyYW5zYWN0aW9uIHwgdW5kZWZpbmVkLCBidWlsZGVyOiBUKTogVCB7XG4gICAgaWYgKHR4KSB7XG4gICAgICBidWlsZGVyLmluaXRCdWlsZGVyKHR4KTtcbiAgICB9XG4gICAgcmV0dXJuIGJ1aWxkZXI7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { BaseKey } from '@bitgo-beta/sdk-core';
|
|
2
|
-
import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
|
|
3
|
-
import { TransactionBuilder } from './transactionBuilder';
|
|
4
|
-
import { Transaction } from './transaction';
|
|
5
|
-
export declare class TransferBuilder extends TransactionBuilder {
|
|
6
|
-
constructor(_coinConfig: Readonly<CoinConfig>);
|
|
7
|
-
/** @inheritdoc */
|
|
8
|
-
protected buildImplementation(): Promise<Transaction>;
|
|
9
|
-
/** @inheritdoc */
|
|
10
|
-
protected fromImplementation(rawTransaction: any): Transaction;
|
|
11
|
-
/** @inheritdoc */
|
|
12
|
-
protected signImplementation(key: BaseKey): Transaction;
|
|
13
|
-
}
|
|
14
|
-
//# 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,OAAO,EAAmB,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,qBAAa,eAAgB,SAAQ,kBAAkB;gBACzC,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAK7C,kBAAkB;cACF,mBAAmB,IAAI,OAAO,CAAC,WAAW,CAAC;IAM3D,kBAAkB;IAClB,SAAS,CAAC,kBAAkB,CAAC,cAAc,EAAE,GAAG,GAAG,WAAW;IAI9D,kBAAkB;IAClB,SAAS,CAAC,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,WAAW;CAGxD"}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.TransferBuilder = void 0;
|
|
4
|
-
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
5
|
-
const transactionBuilder_1 = require("./transactionBuilder");
|
|
6
|
-
class TransferBuilder extends transactionBuilder_1.TransactionBuilder {
|
|
7
|
-
constructor(_coinConfig) {
|
|
8
|
-
super(_coinConfig);
|
|
9
|
-
this._type = sdk_core_1.TransactionType.Send;
|
|
10
|
-
}
|
|
11
|
-
/** @inheritdoc */
|
|
12
|
-
async buildImplementation() {
|
|
13
|
-
const tx = await super.buildImplementation();
|
|
14
|
-
tx.setTransactionType(sdk_core_1.TransactionType.Send);
|
|
15
|
-
return tx;
|
|
16
|
-
}
|
|
17
|
-
/** @inheritdoc */
|
|
18
|
-
fromImplementation(rawTransaction) {
|
|
19
|
-
return super.fromImplementation(rawTransaction);
|
|
20
|
-
}
|
|
21
|
-
/** @inheritdoc */
|
|
22
|
-
signImplementation(key) {
|
|
23
|
-
return super.signImplementation(key);
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
exports.TransferBuilder = TransferBuilder;
|
|
27
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmZXJCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90cmFuc2ZlckJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbURBQWdFO0FBRWhFLDZEQUEwRDtBQUcxRCxNQUFhLGVBQWdCLFNBQVEsdUNBQWtCO0lBQ3JELFlBQVksV0FBaUM7UUFDM0MsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ25CLElBQUksQ0FBQyxLQUFLLEdBQUcsMEJBQWUsQ0FBQyxJQUFJLENBQUM7SUFDcEMsQ0FBQztJQUVELGtCQUFrQjtJQUNSLEtBQUssQ0FBQyxtQkFBbUI7UUFDakMsTUFBTSxFQUFFLEdBQUcsTUFBTSxLQUFLLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUM3QyxFQUFFLENBQUMsa0JBQWtCLENBQUMsMEJBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QyxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRCxrQkFBa0I7SUFDUixrQkFBa0IsQ0FBQyxjQUFtQjtRQUM5QyxPQUFPLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsa0JBQWtCO0lBQ1Isa0JBQWtCLENBQUMsR0FBWTtRQUN2QyxPQUFPLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN2QyxDQUFDO0NBQ0Y7QUF0QkQsMENBc0JDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmFzZUtleSwgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi90cmFuc2FjdGlvbkJ1aWxkZXInO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tICcuL3RyYW5zYWN0aW9uJztcblxuZXhwb3J0IGNsYXNzIFRyYW5zZmVyQnVpbGRlciBleHRlbmRzIFRyYW5zYWN0aW9uQnVpbGRlciB7XG4gIGNvbnN0cnVjdG9yKF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKF9jb2luQ29uZmlnKTtcbiAgICB0aGlzLl90eXBlID0gVHJhbnNhY3Rpb25UeXBlLlNlbmQ7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGJ1aWxkSW1wbGVtZW50YXRpb24oKTogUHJvbWlzZTxUcmFuc2FjdGlvbj4ge1xuICAgIGNvbnN0IHR4ID0gYXdhaXQgc3VwZXIuYnVpbGRJbXBsZW1lbnRhdGlvbigpO1xuICAgIHR4LnNldFRyYW5zYWN0aW9uVHlwZShUcmFuc2FjdGlvblR5cGUuU2VuZCk7XG4gICAgcmV0dXJuIHR4O1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBmcm9tSW1wbGVtZW50YXRpb24ocmF3VHJhbnNhY3Rpb246IGFueSk6IFRyYW5zYWN0aW9uIHtcbiAgICByZXR1cm4gc3VwZXIuZnJvbUltcGxlbWVudGF0aW9uKHJhd1RyYW5zYWN0aW9uKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgc2lnbkltcGxlbWVudGF0aW9uKGtleTogQmFzZUtleSk6IFRyYW5zYWN0aW9uIHtcbiAgICByZXR1cm4gc3VwZXIuc2lnbkltcGxlbWVudGF0aW9uKGtleSk7XG4gIH1cbn1cbiJdfQ==
|
package/dist/src/lib/utils.d.ts
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { AddressFormat, BaseUtils } from '@bitgo-beta/sdk-core';
|
|
2
|
-
import { KeyPair } from './keyPair';
|
|
3
|
-
export declare class Utils implements BaseUtils {
|
|
4
|
-
createBaseAddressWithStakeAndPaymentKey(stakeKeyPair: KeyPair, paymentKeyPair: KeyPair, network: AddressFormat): string;
|
|
5
|
-
validateBlake2b(hash: string): boolean;
|
|
6
|
-
getRewardAddress(stakingPubKey: string, coinName: string): string;
|
|
7
|
-
/** @inheritdoc */
|
|
8
|
-
isValidAddress(address: string): boolean;
|
|
9
|
-
/** @inheritdoc */
|
|
10
|
-
isValidBlockId(hash: string): boolean;
|
|
11
|
-
/** @inheritdoc */
|
|
12
|
-
isValidPrivateKey(key: string): boolean;
|
|
13
|
-
isValidKey(key: string): boolean;
|
|
14
|
-
/** @inheritdoc */
|
|
15
|
-
isValidPublicKey(pubKey: string): boolean;
|
|
16
|
-
/** @inheritdoc */
|
|
17
|
-
isValidSignature(signature: string): boolean;
|
|
18
|
-
/** @inheritdoc */
|
|
19
|
-
isValidTransactionId(txId: string): boolean;
|
|
20
|
-
}
|
|
21
|
-
declare const utils: Utils;
|
|
22
|
-
export default utils;
|
|
23
|
-
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAShE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,qBAAa,KAAM,YAAW,SAAS;IACrC,uCAAuC,CACrC,YAAY,EAAE,OAAO,EACrB,cAAc,EAAE,OAAO,EACvB,OAAO,EAAE,aAAa,GACrB,MAAM;IAiCT,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAUtC,gBAAgB,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAiBjE,kBAAkB;IAElB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAyBxC,kBAAkB;IAClB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIrC,kBAAkB;IAClB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAKvC,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAShC,kBAAkB;IAClB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IASzC,kBAAkB;IAClB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAS5C,kBAAkB;IAClB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;CAG5C;AAED,QAAA,MAAM,KAAK,OAAc,CAAC;AAE1B,eAAe,KAAK,CAAC"}
|