@bitgo-beta/sdk-coin-algo 0.0.0-semantic-release-managed
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/.eslintignore +5 -0
- package/.mocharc.yml +8 -0
- package/CHANGELOG.md +854 -0
- package/LICENSE +191 -0
- package/README.md +30 -0
- package/dist/src/algo.d.ts +291 -0
- package/dist/src/algo.d.ts.map +1 -0
- package/dist/src/algo.js +637 -0
- package/dist/src/algoToken.d.ts +32 -0
- package/dist/src/algoToken.d.ts.map +1 -0
- package/dist/src/algoToken.js +82 -0
- package/dist/src/builder.d.ts +3 -0
- package/dist/src/builder.d.ts.map +1 -0
- package/dist/src/builder.js +10 -0
- package/dist/src/index.d.ts +6 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +45 -0
- package/dist/src/lib/assetTransferBuilder.d.ts +42 -0
- package/dist/src/lib/assetTransferBuilder.d.ts.map +1 -0
- package/dist/src/lib/assetTransferBuilder.js +105 -0
- package/dist/src/lib/errors.d.ts +11 -0
- package/dist/src/lib/errors.d.ts.map +1 -0
- package/dist/src/lib/errors.js +27 -0
- package/dist/src/lib/ifaces.d.ts +45 -0
- package/dist/src/lib/ifaces.d.ts.map +1 -0
- package/dist/src/lib/ifaces.js +3 -0
- package/dist/src/lib/index.d.ts +13 -0
- package/dist/src/lib/index.d.ts.map +1 -0
- package/dist/src/lib/index.js +61 -0
- package/dist/src/lib/keyPair.d.ts +25 -0
- package/dist/src/lib/keyPair.d.ts.map +1 -0
- package/dist/src/lib/keyPair.js +91 -0
- package/dist/src/lib/keyRegistrationBuilder.d.ts +104 -0
- package/dist/src/lib/keyRegistrationBuilder.d.ts.map +1 -0
- package/dist/src/lib/keyRegistrationBuilder.js +240 -0
- package/dist/src/lib/seedEncoding.d.ts +25 -0
- package/dist/src/lib/seedEncoding.d.ts.map +1 -0
- package/dist/src/lib/seedEncoding.js +111 -0
- package/dist/src/lib/transaction.d.ts +75 -0
- package/dist/src/lib/transaction.d.ts.map +1 -0
- package/dist/src/lib/transaction.js +250 -0
- package/dist/src/lib/transactionBuilder.d.ts +210 -0
- package/dist/src/lib/transactionBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder.js +389 -0
- package/dist/src/lib/transactionBuilderFactory.d.ts +16 -0
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilderFactory.js +52 -0
- package/dist/src/lib/transferBuilder.d.ts +40 -0
- package/dist/src/lib/transferBuilder.d.ts.map +1 -0
- package/dist/src/lib/transferBuilder.js +89 -0
- package/dist/src/lib/txnSchema.d.ts +7 -0
- package/dist/src/lib/txnSchema.d.ts.map +1 -0
- package/dist/src/lib/txnSchema.js +68 -0
- package/dist/src/lib/utils.d.ts +254 -0
- package/dist/src/lib/utils.d.ts.map +1 -0
- package/dist/src/lib/utils.js +563 -0
- package/dist/src/register.d.ts +3 -0
- package/dist/src/register.d.ts.map +1 -0
- package/dist/src/register.js +15 -0
- package/dist/src/seedValidator.d.ts +31 -0
- package/dist/src/seedValidator.d.ts.map +1 -0
- package/dist/src/seedValidator.js +103 -0
- package/dist/src/talgo.d.ts +12 -0
- package/dist/src/talgo.d.ts.map +1 -0
- package/dist/src/talgo.js +20 -0
- package/package.json +63 -0
- package/types/index.d.ts +60 -0
|
@@ -0,0 +1,389 @@
|
|
|
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.BETANET_GENESIS_HASH = exports.BETANET_GENESIS_ID = exports.TESTNET_GENESIS_HASH = exports.TESTNET_GENESIS_ID = exports.MAINNET_GENESIS_HASH = exports.MAINNET_GENESIS_ID = void 0;
|
|
7
|
+
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
8
|
+
const algosdk_1 = __importDefault(require("algosdk"));
|
|
9
|
+
const transaction_1 = require("./transaction");
|
|
10
|
+
const errors_1 = require("./errors");
|
|
11
|
+
const keyPair_1 = require("./keyPair");
|
|
12
|
+
const txnSchema_1 = require("./txnSchema");
|
|
13
|
+
const utils_1 = __importDefault(require("./utils"));
|
|
14
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
15
|
+
const _1 = require(".");
|
|
16
|
+
const MIN_FEE = 1000; // in microalgos
|
|
17
|
+
exports.MAINNET_GENESIS_ID = 'mainnet-v1.0';
|
|
18
|
+
exports.MAINNET_GENESIS_HASH = 'wGHE2Pwdvd7S12BL5FaOP20EGYesN73ktiC1qzkkit8=';
|
|
19
|
+
exports.TESTNET_GENESIS_ID = 'testnet-v1.0';
|
|
20
|
+
exports.TESTNET_GENESIS_HASH = 'SGO1GKSzyE7IEPItTxCByw9x8FmnrCDexi9/cOUJOiI=';
|
|
21
|
+
exports.BETANET_GENESIS_ID = 'betanet-v1.0';
|
|
22
|
+
exports.BETANET_GENESIS_HASH = 'mFgazF+2uRS1tMiL9dsj01hJGySEmPN28B/TjjvpVW0=';
|
|
23
|
+
class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
|
|
24
|
+
constructor(coinConfig) {
|
|
25
|
+
super(coinConfig);
|
|
26
|
+
this._transaction = new transaction_1.Transaction(coinConfig);
|
|
27
|
+
this._keyPairs = [];
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Sets the fee.
|
|
31
|
+
*
|
|
32
|
+
* The minimum fee is 1000 microalgos.
|
|
33
|
+
*
|
|
34
|
+
* @param {BaseFee} feeObj The amount to pay to the fee sink denoted in microalgos
|
|
35
|
+
* @returns {TransactionBuilder} This transaction builder.
|
|
36
|
+
*
|
|
37
|
+
* @see https://developer.algorand.org/docs/reference/transactions/
|
|
38
|
+
*/
|
|
39
|
+
fee(feeObj) {
|
|
40
|
+
this._isFlatFee = true;
|
|
41
|
+
const fee = new bignumber_js_1.default(feeObj.fee).toNumber();
|
|
42
|
+
if (this._isFlatFee && fee < MIN_FEE) {
|
|
43
|
+
throw new errors_1.InsufficientFeeError(fee, MIN_FEE);
|
|
44
|
+
}
|
|
45
|
+
this._fee = fee;
|
|
46
|
+
return this;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Sets whether the fee is a flat fee.
|
|
50
|
+
*
|
|
51
|
+
* A flat fee is the fee for the entire transaction whereas a normal fee
|
|
52
|
+
* is a fee for every byte in the transaction.
|
|
53
|
+
*
|
|
54
|
+
* @param {boolean} isFlatFee Whether the fee should be specified as a flat fee.
|
|
55
|
+
* @returns {TransactionBuilder} This transaction builder.
|
|
56
|
+
*/
|
|
57
|
+
isFlatFee(isFlatFee) {
|
|
58
|
+
this._isFlatFee = isFlatFee;
|
|
59
|
+
return this;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Sets the transaction sender.
|
|
63
|
+
*
|
|
64
|
+
* @param {BaseAddress} sender The sender account
|
|
65
|
+
* @returns {TransactionBuilder} This transaction builder.
|
|
66
|
+
*
|
|
67
|
+
* @see https://developer.algorand.org/docs/reference/transactions/
|
|
68
|
+
*/
|
|
69
|
+
sender(sender) {
|
|
70
|
+
this.validateAddress(sender);
|
|
71
|
+
this._sender = sender.address;
|
|
72
|
+
this._transaction.sender(sender.address);
|
|
73
|
+
return this;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Sets the genesis id.
|
|
77
|
+
*
|
|
78
|
+
* @param {string} genesisId The genesis id.
|
|
79
|
+
* @example "mainnet-v1.0"
|
|
80
|
+
*
|
|
81
|
+
* @returns {TransactionBuilder} This transaction builder.
|
|
82
|
+
*
|
|
83
|
+
* @see https://developer.algorand.org/docs/reference/transactions/
|
|
84
|
+
*/
|
|
85
|
+
genesisId(genesisId) {
|
|
86
|
+
this._genesisId = genesisId;
|
|
87
|
+
return this;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Sets the genesis hash.
|
|
91
|
+
*
|
|
92
|
+
* The genesis hash must be base64 encoded.
|
|
93
|
+
*
|
|
94
|
+
* @param {string} genesisHash The genesis hash.
|
|
95
|
+
* @example "wGHE2Pwdvd7S12BL5FaOP20EGYesN73ktiC1qzkkit8="
|
|
96
|
+
*
|
|
97
|
+
* @returns {TransactionBuilder} This transaction builder.
|
|
98
|
+
*
|
|
99
|
+
* @see https://developer.algorand.org/docs/reference/transactions/
|
|
100
|
+
*/
|
|
101
|
+
genesisHash(genesisHash) {
|
|
102
|
+
this._genesisHash = genesisHash;
|
|
103
|
+
return this;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Sets the genesis id and hash to mainnet.
|
|
107
|
+
*
|
|
108
|
+
* @returns {TransactionBuilder} This transaction builder.
|
|
109
|
+
*
|
|
110
|
+
* @see https://developer.algorand.org/docs/reference/algorand-networks/mainnet/#genesis-id
|
|
111
|
+
* @see https://developer.algorand.org/docs/reference/algorand-networks/mainnet/#genesis-hash
|
|
112
|
+
*/
|
|
113
|
+
mainnet() {
|
|
114
|
+
this.genesisId(exports.MAINNET_GENESIS_ID);
|
|
115
|
+
this.genesisHash(exports.MAINNET_GENESIS_HASH);
|
|
116
|
+
return this;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Sets the genesis id and hash to testnet.
|
|
120
|
+
*
|
|
121
|
+
* @returns {TransactionBuilder} This transaction builder.
|
|
122
|
+
*
|
|
123
|
+
* @see https://developer.algorand.org/docs/reference/algorand-networks/testnet/#genesis-id
|
|
124
|
+
* @see https://developer.algorand.org/docs/reference/algorand-networks/testnet/#genesis-hash
|
|
125
|
+
*/
|
|
126
|
+
testnet() {
|
|
127
|
+
this.genesisId(exports.TESTNET_GENESIS_ID);
|
|
128
|
+
this.genesisHash(exports.TESTNET_GENESIS_HASH);
|
|
129
|
+
return this;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Sets the genesis id and hash to betanet.
|
|
133
|
+
*
|
|
134
|
+
* @returns {TransactionBuilder} This transaction builder.
|
|
135
|
+
*
|
|
136
|
+
* @see https://developer.algorand.org/docs/reference/algorand-networks/betanet/#genesis-id
|
|
137
|
+
* @see https://developer.algorand.org/docs/reference/algorand-networks/betanet/#genesis-hash
|
|
138
|
+
*/
|
|
139
|
+
betanet() {
|
|
140
|
+
this.genesisId(exports.BETANET_GENESIS_ID);
|
|
141
|
+
this.genesisHash(exports.BETANET_GENESIS_HASH);
|
|
142
|
+
return this;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Sets the first round.
|
|
146
|
+
*
|
|
147
|
+
* @param {number} round The first protocol round on which this txn is valid.
|
|
148
|
+
* @returns {TransactionBuilder} This transaction builder.
|
|
149
|
+
*
|
|
150
|
+
* @see https://developer.algorand.org/docs/reference/transactions/
|
|
151
|
+
*/
|
|
152
|
+
firstRound(round) {
|
|
153
|
+
this.validateValue(new bignumber_js_1.default(round));
|
|
154
|
+
this._firstRound = round;
|
|
155
|
+
return this;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Sets the last round.
|
|
159
|
+
*
|
|
160
|
+
* @param {number} round The first protocol round on which this txn is valid.
|
|
161
|
+
* @returns {TransactionBuilder} This transaction builder.
|
|
162
|
+
*
|
|
163
|
+
* @see https://developer.algorand.org/docs/reference/transactions/
|
|
164
|
+
*/
|
|
165
|
+
lastRound(round) {
|
|
166
|
+
this.validateValue(new bignumber_js_1.default(round));
|
|
167
|
+
this._lastRound = round;
|
|
168
|
+
return this;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Sets the lease on the transaction.
|
|
172
|
+
*
|
|
173
|
+
* A lease is a mutex on the transaction that prevents any other transaction
|
|
174
|
+
* from being sent with the same lease until the prior transaction's last
|
|
175
|
+
* round has passed.
|
|
176
|
+
*
|
|
177
|
+
* @param {Uint8Array} lease The lease to put the transaction.
|
|
178
|
+
* @returns {TransactionBuilder} This transaction builder.
|
|
179
|
+
*
|
|
180
|
+
* @see https://developer.algorand.org/docs/reference/transactions/
|
|
181
|
+
*/
|
|
182
|
+
lease(lease) {
|
|
183
|
+
this._lease = lease;
|
|
184
|
+
return this;
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Sets the note for the transaction.
|
|
188
|
+
*
|
|
189
|
+
* @param {Uint8Array} note Arbitrary data for sender to store.
|
|
190
|
+
* @returns {TransactionBuilder} This transaction builder.
|
|
191
|
+
*
|
|
192
|
+
* @see https://developer.algorand.org/docs/reference/transactions/
|
|
193
|
+
*/
|
|
194
|
+
note(note) {
|
|
195
|
+
this._note = note;
|
|
196
|
+
return this;
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Sets the authorized address.
|
|
200
|
+
*
|
|
201
|
+
* The authorized asset will be used to authorize all future transactions.
|
|
202
|
+
*
|
|
203
|
+
* @param {BaseAddress} authorizer The address to delegate authorization authority to.
|
|
204
|
+
* @returns {TransactionBuilder} This transaction builder.
|
|
205
|
+
*
|
|
206
|
+
* @see https://developer.algorand.org/docs/reference/transactions/
|
|
207
|
+
*/
|
|
208
|
+
reKeyTo(authorizer) {
|
|
209
|
+
this.validateAddress(authorizer);
|
|
210
|
+
this._reKeyTo = authorizer.address;
|
|
211
|
+
return this;
|
|
212
|
+
}
|
|
213
|
+
/** @inheritdoc */
|
|
214
|
+
validateAddress({ address }) {
|
|
215
|
+
if (!algosdk_1.default.isValidAddress(address)) {
|
|
216
|
+
throw new errors_1.AddressValidationError(address);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
/** @inheritdoc */
|
|
220
|
+
async buildImplementation() {
|
|
221
|
+
this.transaction.setAlgoTransaction(this.buildAlgoTxn());
|
|
222
|
+
this.transaction.setTransactionType(this.transactionType);
|
|
223
|
+
this.transaction.sign(this._keyPairs);
|
|
224
|
+
this._transaction.loadInputsAndOutputs();
|
|
225
|
+
return this._transaction;
|
|
226
|
+
}
|
|
227
|
+
/** @inheritdoc */
|
|
228
|
+
fromImplementation(rawTransaction) {
|
|
229
|
+
const decodedTxn = utils_1.default.decodeAlgoTxn(rawTransaction);
|
|
230
|
+
const algosdkTxn = decodedTxn.txn;
|
|
231
|
+
if (decodedTxn.signed) {
|
|
232
|
+
this._transaction.signedTransaction = decodedTxn.rawTransaction;
|
|
233
|
+
if (decodedTxn.signers) {
|
|
234
|
+
this.setSigners(decodedTxn.signers);
|
|
235
|
+
}
|
|
236
|
+
if (decodedTxn.signedBy) {
|
|
237
|
+
this._transaction.signedBy = decodedTxn.signedBy;
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
this.sender({ address: algosdk_1.default.encodeAddress(algosdkTxn.from.publicKey) });
|
|
241
|
+
this._isFlatFee = true;
|
|
242
|
+
this._fee = algosdkTxn.fee;
|
|
243
|
+
this._genesisHash = algosdkTxn.genesisHash.toString('base64');
|
|
244
|
+
this._genesisId = algosdkTxn.genesisID;
|
|
245
|
+
this._firstRound = algosdkTxn.firstRound;
|
|
246
|
+
this._lastRound = algosdkTxn.lastRound;
|
|
247
|
+
this._lease = algosdkTxn.lease;
|
|
248
|
+
this._note = algosdkTxn.note;
|
|
249
|
+
this._reKeyTo = algosdkTxn.reKeyTo ? algosdk_1.default.encodeAddress(algosdkTxn.reKeyTo.publicKey) : undefined;
|
|
250
|
+
this._transaction.setAlgoTransaction(algosdkTxn);
|
|
251
|
+
return this._transaction;
|
|
252
|
+
}
|
|
253
|
+
/** @inheritdoc */
|
|
254
|
+
signImplementation({ key }) {
|
|
255
|
+
try {
|
|
256
|
+
const buffKey = utils_1.default.decodeSeed(key);
|
|
257
|
+
const keypair = new keyPair_1.KeyPair({ prv: Buffer.from(buffKey.seed).toString('hex') });
|
|
258
|
+
this._keyPairs.push(keypair);
|
|
259
|
+
}
|
|
260
|
+
catch (e) {
|
|
261
|
+
if (_1.algoUtils.isValidPrivateKey(key)) {
|
|
262
|
+
const keypair = new keyPair_1.KeyPair({ prv: key });
|
|
263
|
+
this._keyPairs.push(keypair);
|
|
264
|
+
}
|
|
265
|
+
else {
|
|
266
|
+
throw e;
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
return this._transaction;
|
|
270
|
+
}
|
|
271
|
+
numberOfSigners(num) {
|
|
272
|
+
this._transaction.setNumberOfRequiredSigners(num);
|
|
273
|
+
return this;
|
|
274
|
+
}
|
|
275
|
+
setSigners(addrs) {
|
|
276
|
+
const signers = addrs instanceof Array ? addrs : [addrs];
|
|
277
|
+
signers.forEach((address) => this.validateAddress({ address: address }));
|
|
278
|
+
this._transaction.signers = signers;
|
|
279
|
+
return this;
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Sets the number of signers required to sign the transaction.
|
|
283
|
+
*
|
|
284
|
+
* The number of signers cannot be set to a negative value.
|
|
285
|
+
*
|
|
286
|
+
* @param {number} n The number of signers.
|
|
287
|
+
* @returns {TransactionBuilder} This transaction builder.
|
|
288
|
+
*/
|
|
289
|
+
numberOfRequiredSigners(n) {
|
|
290
|
+
if (n < 0) {
|
|
291
|
+
throw new sdk_core_1.BuildTransactionError(`Number of signers: '${n}' cannot be negative`);
|
|
292
|
+
}
|
|
293
|
+
this._transaction.setNumberOfRequiredSigners(n);
|
|
294
|
+
return this;
|
|
295
|
+
}
|
|
296
|
+
/**
|
|
297
|
+
* @inheritdoc
|
|
298
|
+
* @see https://developer.algorand.org/docs/features/accounts/#transformation-private-key-to-base64-private-key
|
|
299
|
+
*/
|
|
300
|
+
validateKey({ key }) {
|
|
301
|
+
let isValidPrivateKeyFromBytes;
|
|
302
|
+
const isValidPrivateKeyFromHex = (0, sdk_core_1.isValidEd25519Seed)(key);
|
|
303
|
+
const isValidPrivateKeyFromBase64 = (0, sdk_core_1.isValidEd25519Seed)(Buffer.from(key, 'base64').toString('hex'));
|
|
304
|
+
const isValidRootPrvKey = (0, sdk_core_1.isValidEd25519SecretKey)(key);
|
|
305
|
+
try {
|
|
306
|
+
const decodedSeed = utils_1.default.decodeSeed(key);
|
|
307
|
+
isValidPrivateKeyFromBytes = (0, sdk_core_1.isValidEd25519Seed)(Buffer.from(decodedSeed.seed).toString('hex'));
|
|
308
|
+
}
|
|
309
|
+
catch (err) {
|
|
310
|
+
isValidPrivateKeyFromBytes = false;
|
|
311
|
+
}
|
|
312
|
+
if (!isValidPrivateKeyFromBytes &&
|
|
313
|
+
!isValidPrivateKeyFromHex &&
|
|
314
|
+
!isValidPrivateKeyFromBase64 &&
|
|
315
|
+
!isValidRootPrvKey) {
|
|
316
|
+
throw new sdk_core_1.BuildTransactionError(`Key validation failed`);
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
/** @inheritdoc */
|
|
320
|
+
validateRawTransaction(rawTransaction) {
|
|
321
|
+
const decodedTxn = utils_1.default.decodeAlgoTxn(rawTransaction);
|
|
322
|
+
const algoTxn = decodedTxn.txn;
|
|
323
|
+
const validationResult = txnSchema_1.BaseTransactionSchema.validate({
|
|
324
|
+
fee: algoTxn?.fee,
|
|
325
|
+
firstRound: algoTxn?.firstRound,
|
|
326
|
+
genesisHash: algoTxn?.genesisHash.toString('base64'),
|
|
327
|
+
lastRound: algoTxn?.lastRound,
|
|
328
|
+
sender: algoTxn ? algosdk_1.default.encodeAddress(algoTxn.from.publicKey) : undefined,
|
|
329
|
+
genesisId: algoTxn?.genesisID,
|
|
330
|
+
lease: algoTxn?.lease,
|
|
331
|
+
note: algoTxn?.note,
|
|
332
|
+
reKeyTo: algoTxn?.reKeyTo ? algosdk_1.default.encodeAddress(algoTxn.reKeyTo.publicKey) : undefined,
|
|
333
|
+
});
|
|
334
|
+
if (validationResult.error) {
|
|
335
|
+
throw new sdk_core_1.InvalidTransactionError(`Transaction validation failed: ${validationResult.error.message}`);
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
/** @inheritdoc */
|
|
339
|
+
validateTransaction(_) {
|
|
340
|
+
this.validateBaseFields(this._fee, this._firstRound, this._genesisHash, this._lastRound, this._sender, this._genesisId, this._lease, this._note, this._reKeyTo);
|
|
341
|
+
}
|
|
342
|
+
validateBaseFields(fee, firstRound, genesisHash, lastRound, sender, genesisId, lease, note, reKeyTo) {
|
|
343
|
+
const validationResult = txnSchema_1.BaseTransactionSchema.validate({
|
|
344
|
+
fee,
|
|
345
|
+
firstRound,
|
|
346
|
+
genesisHash,
|
|
347
|
+
lastRound,
|
|
348
|
+
sender,
|
|
349
|
+
genesisId,
|
|
350
|
+
lease,
|
|
351
|
+
note,
|
|
352
|
+
reKeyTo,
|
|
353
|
+
});
|
|
354
|
+
if (validationResult.error) {
|
|
355
|
+
throw new sdk_core_1.InvalidTransactionError(`Transaction validation failed: ${validationResult.error.message}`);
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
/** @inheritdoc */
|
|
359
|
+
validateValue(value) {
|
|
360
|
+
if (value.isLessThan(0)) {
|
|
361
|
+
throw new sdk_core_1.BuildTransactionError('Value cannot be less than zero');
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
/** @inheritdoc */
|
|
365
|
+
get transaction() {
|
|
366
|
+
return this._transaction;
|
|
367
|
+
}
|
|
368
|
+
/** @inheritdoc */
|
|
369
|
+
set transaction(transaction) {
|
|
370
|
+
this._transaction = transaction;
|
|
371
|
+
}
|
|
372
|
+
/**
|
|
373
|
+
* Convenience method to retrieve the algosdk suggested parameters.
|
|
374
|
+
*
|
|
375
|
+
* @returns {algosdk.SuggestedParams} The algosdk suggested parameters.
|
|
376
|
+
*/
|
|
377
|
+
get suggestedParams() {
|
|
378
|
+
return {
|
|
379
|
+
flatFee: this._isFlatFee,
|
|
380
|
+
fee: this._fee,
|
|
381
|
+
firstRound: this._firstRound,
|
|
382
|
+
lastRound: this._lastRound,
|
|
383
|
+
genesisID: this._genesisId,
|
|
384
|
+
genesisHash: this._genesisHash,
|
|
385
|
+
};
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
exports.TransactionBuilder = TransactionBuilder;
|
|
389
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EsZ0VBQXFDO0FBQ3JDLHNEQUE4QjtBQUU5QiwrQ0FBNEM7QUFDNUMscUNBQXdFO0FBQ3hFLHVDQUFvQztBQUNwQywyQ0FBb0Q7QUFDcEQsb0RBQTRCO0FBQzVCLG1EQVU4QjtBQUM5Qix3QkFBOEI7QUFFOUIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLENBQUMsZ0JBQWdCO0FBRXpCLFFBQUEsa0JBQWtCLEdBQUcsY0FBYyxDQUFDO0FBQ3BDLFFBQUEsb0JBQW9CLEdBQUcsOENBQThDLENBQUM7QUFDdEUsUUFBQSxrQkFBa0IsR0FBRyxjQUFjLENBQUM7QUFDcEMsUUFBQSxvQkFBb0IsR0FBRyw4Q0FBOEMsQ0FBQztBQUN0RSxRQUFBLGtCQUFrQixHQUFHLGNBQWMsQ0FBQztBQUNwQyxRQUFBLG9CQUFvQixHQUFHLDhDQUE4QyxDQUFDO0FBRW5GLE1BQXNCLGtCQUFtQixTQUFRLGlDQUFzQjtJQW1CckUsWUFBWSxVQUFnQztRQUMxQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFbEIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLHlCQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNILEdBQUcsQ0FBQyxNQUFlO1FBQ2pCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLE1BQU0sR0FBRyxHQUFHLElBQUksc0JBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDakQsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLEdBQUcsR0FBRyxPQUFPLEVBQUUsQ0FBQztZQUNy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RUFBRSxJQUFJLENBQUMsSUFBSTtZQUNkLFVBQVUsRUFBRSxJQUFJLENBQUMsV0FBVztZQUM1QixTQUFTLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDMUIsU0FBUyxFQUFFLElBQUksQ0FBQyxVQUFVO1lBQzFCLFdBQVcsRUFBRSxJQUFJLENBQUMsWUFBWTtTQUMvQixDQUFDO0lBQ0osQ0FBQztDQUNGO0FBbmRELGdEQW1kQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCBCaWdOdW1iZXIgZnJvbSAnYmlnbnVtYmVyLmpzJztcbmltcG9ydCBhbGdvc2RrIGZyb20gJ2FsZ29zZGsnO1xuXG5pbXBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgQWRkcmVzc1ZhbGlkYXRpb25FcnJvciwgSW5zdWZmaWNpZW50RmVlRXJyb3IgfSBmcm9tICcuL2Vycm9ycyc7XG5pbXBvcnQgeyBLZXlQYWlyIH0gZnJvbSAnLi9rZXlQYWlyJztcbmltcG9ydCB7IEJhc2VUcmFuc2FjdGlvblNjaGVtYSB9IGZyb20gJy4vdHhuU2NoZW1hJztcbmltcG9ydCBVdGlscyBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7XG4gIEJhc2VBZGRyZXNzLFxuICBCYXNlRmVlLFxuICBCYXNlS2V5LFxuICBCYXNlVHJhbnNhY3Rpb25CdWlsZGVyLFxuICBCdWlsZFRyYW5zYWN0aW9uRXJyb3IsXG4gIEludmFsaWRUcmFuc2FjdGlvbkVycm9yLFxuICBpc1ZhbGlkRWQyNTUxOVNlY3JldEtleSxcbiAgaXNWYWxpZEVkMjU1MTlTZWVkLFxuICBUcmFuc2FjdGlvblR5cGUsXG59IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IGFsZ29VdGlscyB9IGZyb20gJy4nO1xuXG5jb25zdCBNSU5fRkVFID0gMTAwMDsgLy8gaW4gbWljcm9hbGdvc1xuXG5leHBvcnQgY29uc3QgTUFJTk5FVF9HRU5FU0lTX0lEID0gJ21haW5uZXQtdjEuMCc7XG5leHBvcnQgY29uc3QgTUFJTk5FVF9HRU5FU0lTX0hBU0ggPSAnd0dIRTJQd2R2ZDdTMTJCTDVGYU9QMjBFR1llc043M2t0aUMxcXpra2l0OD0nO1xuZXhwb3J0IGNvbnN0IFRFU1RORVRfR0VORVNJU19JRCA9ICd0ZXN0bmV0LXYxLjAnO1xuZXhwb3J0IGNvbnN0IFRFU1RORVRfR0VORVNJU19IQVNIID0gJ1NHTzFHS1N6eUU3SUVQSXRUeENCeXc5eDhGbW5yQ0RleGk5L2NPVUpPaUk9JztcbmV4cG9ydCBjb25zdCBCRVRBTkVUX0dFTkVTSVNfSUQgPSAnYmV0YW5ldC12MS4wJztcbmV4cG9ydCBjb25zdCBCRVRBTkVUX0dFTkVTSVNfSEFTSCA9ICdtRmdhekYrMnVSUzF0TWlMOWRzajAxaEpHeVNFbVBOMjhCL1RqanZwVlcwPSc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBUcmFuc2FjdGlvbkJ1aWxkZXIgZXh0ZW5kcyBCYXNlVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgcHJvdGVjdGVkIF90cmFuc2FjdGlvbjogVHJhbnNhY3Rpb247XG4gIHByb3RlY3RlZCBfa2V5UGFpcnM6IEtleVBhaXJbXTtcblxuICAvLyB0aGUgZmVlIGlzIHNwZWNpZmllZCBhcyBhIG51bWJlciBoZXJlIGluc3RlYWQgb2YgYSBiaWcgbnVtYmVyIGJlY2F1c2VcbiAgLy8gdGhlIGFsZ29zZGsgYWxzbyBzcGVjaWZpZXMgaXQgYXMgYSBudW1iZXIuXG4gIHByb3RlY3RlZCBfZmVlOiBudW1iZXI7XG4gIHByb3RlY3RlZCBfaXNGbGF0RmVlOiBib29sZWFuO1xuXG4gIHByb3RlY3RlZCBfc2VuZGVyOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBfZ2VuZXNpc0hhc2g6IHN0cmluZztcbiAgcHJvdGVjdGVkIF9nZW5lc2lzSWQ6IHN0cmluZztcbiAgcHJvdGVjdGVkIF9maXJzdFJvdW5kOiBudW1iZXI7XG4gIHByb3RlY3RlZCBfbGFzdFJvdW5kOiBudW1iZXI7XG4gIHByb3RlY3RlZCBfbGVhc2U/OiBVaW50OEFycmF5O1xuICBwcm90ZWN0ZWQgX25vdGU/OiBVaW50OEFycmF5O1xuICBwcm90ZWN0ZWQgX3JlS2V5VG8/OiBzdHJpbmc7XG4gIHByb3RlY3RlZCBfc3VnZ2VzdGVkUGFyYW1zOiBhbGdvc2RrLlN1Z2dlc3RlZFBhcmFtcztcblxuICBjb25zdHJ1Y3Rvcihjb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKGNvaW5Db25maWcpO1xuXG4gICAgdGhpcy5fdHJhbnNhY3Rpb24gPSBuZXcgVHJhbnNhY3Rpb24oY29pbkNvbmZpZyk7XG4gICAgdGhpcy5fa2V5UGFpcnMgPSBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBmZWUuXG4gICAqXG4gICAqIFRoZSBtaW5pbXVtIGZlZSBpcyAxMDAwIG1pY3JvYWxnb3MuXG4gICAqXG4gICAqIEBwYXJhbSB7QmFzZUZlZX0gZmVlT2JqIFRoZSBhbW91bnQgdG8gcGF5IHRvIHRoZSBmZWUgc2luayBkZW5vdGVkIGluIG1pY3JvYWxnb3NcbiAgICogQHJldHVybnMge1RyYW5zYWN0aW9uQnVpbGRlcn0gVGhpcyB0cmFuc2FjdGlvbiBidWlsZGVyLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmFsZ29yYW5kLm9yZy9kb2NzL3JlZmVyZW5jZS90cmFuc2FjdGlvbnMvXG4gICAqL1xuICBmZWUoZmVlT2JqOiBCYXNlRmVlKTogdGhpcyB7XG4gICAgdGhpcy5faXNGbGF0RmVlID0gdHJ1ZTtcbiAgICBjb25zdCBmZWUgPSBuZXcgQmlnTnVtYmVyKGZlZU9iai5mZWUpLnRvTnVtYmVyKCk7XG4gICAgaWYgKHRoaXMuX2lzRmxhdEZlZSAmJiBmZWUgPCBNSU5fRkVFKSB7XG4gICAgICB0aHJvdyBuZXcgSW5zdWZmaWNpZW50RmVlRXJyb3IoZmVlLCBNSU5fRkVFKTtcbiAgICB9XG5cbiAgICB0aGlzLl9mZWUgPSBmZWU7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHdoZXRoZXIgdGhlIGZlZSBpcyBhIGZsYXQgZmVlLlxuICAgKlxuICAgKiBBIGZsYXQgZmVlIGlzIHRoZSBmZWUgZm9yIHRoZSBlbnRpcmUgdHJhbnNhY3Rpb24gd2hlcmVhcyBhIG5vcm1hbCBmZWVcbiAgICogaXMgYSBmZWUgZm9yIGV2ZXJ5IGJ5dGUgaW4gdGhlIHRyYW5zYWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlzRmxhdEZlZSBXaGV0aGVyIHRoZSBmZWUgc2hvdWxkIGJlIHNwZWNpZmllZCBhcyBhIGZsYXQgZmVlLlxuICAgKiBAcmV0dXJucyB7VHJhbnNhY3Rpb25CdWlsZGVyfSBUaGlzIHRyYW5zYWN0aW9uIGJ1aWxkZXIuXG4gICAqL1xuICBpc0ZsYXRGZWUoaXNGbGF0RmVlOiBib29sZWFuKTogdGhpcyB7XG4gICAgdGhpcy5faXNGbGF0RmVlID0gaXNGbGF0RmVlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgdHJhbnNhY3Rpb24gc2VuZGVyLlxuICAgKlxuICAgKiBAcGFyYW0ge0Jhc2VBZGRyZXNzfSBzZW5kZXIgVGhlIHNlbmRlciBhY2NvdW50XG4gICAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbkJ1aWxkZXJ9IFRoaXMgdHJhbnNhY3Rpb24gYnVpbGRlci5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5hbGdvcmFuZC5vcmcvZG9jcy9yZWZlcmVuY2UvdHJhbnNhY3Rpb25zL1xuICAgKi9cbiAgc2VuZGVyKHNlbmRlcjogQmFzZUFkZHJlc3MpOiB0aGlzIHtcbiAgICB0aGlzLnZhbGlkYXRlQWRkcmVzcyhzZW5kZXIpO1xuICAgIHRoaXMuX3NlbmRlciA9IHNlbmRlci5hZGRyZXNzO1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uLnNlbmRlcihzZW5kZXIuYWRkcmVzcyk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBnZW5lc2lzIGlkLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZ2VuZXNpc0lkIFRoZSBnZW5lc2lzIGlkLlxuICAgKiBAZXhhbXBsZSBcIm1haW5uZXQtdjEuMFwiXG4gICAqXG4gICAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbkJ1aWxkZXJ9IFRoaXMgdHJhbnNhY3Rpb24gYnVpbGRlci5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5hbGdvcmFuZC5vcmcvZG9jcy9yZWZlcmVuY2UvdHJhbnNhY3Rpb25zL1xuICAgKi9cbiAgZ2VuZXNpc0lkKGdlbmVzaXNJZDogc3RyaW5nKTogdGhpcyB7XG4gICAgdGhpcy5fZ2VuZXNpc0lkID0gZ2VuZXNpc0lkO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgZ2VuZXNpcyBoYXNoLlxuICAgKlxuICAgKiBUaGUgZ2VuZXNpcyBoYXNoIG11c3QgYmUgYmFzZTY0IGVuY29kZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBnZW5lc2lzSGFzaCBUaGUgZ2VuZXNpcyBoYXNoLlxuICAgKiBAZXhhbXBsZSBcIndHSEUyUHdkdmQ3UzEyQkw1RmFPUDIwRUdZZXNONzNrdGlDMXF6a2tpdDg9XCJcbiAgICpcbiAgICogQHJldHVybnMge1RyYW5zYWN0aW9uQnVpbGRlcn0gVGhpcyB0cmFuc2FjdGlvbiBidWlsZGVyLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmFsZ29yYW5kLm9yZy9kb2NzL3JlZmVyZW5jZS90cmFuc2FjdGlvbnMvXG4gICAqL1xuICBnZW5lc2lzSGFzaChnZW5lc2lzSGFzaDogc3RyaW5nKTogdGhpcyB7XG4gICAgdGhpcy5fZ2VuZXNpc0hhc2ggPSBnZW5lc2lzSGFzaDtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGdlbmVzaXMgaWQgYW5kIGhhc2ggdG8gbWFpbm5ldC5cbiAgICpcbiAgICogQHJldHVybnMge1RyYW5zYWN0aW9uQnVpbGRlcn0gVGhpcyB0cmFuc2FjdGlvbiBidWlsZGVyLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmFsZ29yYW5kLm9yZy9kb2NzL3JlZmVyZW5jZS9hbGdvcmFuZC1uZXR3b3Jrcy9tYWlubmV0LyNnZW5lc2lzLWlkXG4gICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIuYWxnb3JhbmQub3JnL2RvY3MvcmVmZXJlbmNlL2FsZ29yYW5kLW5ldHdvcmtzL21haW5uZXQvI2dlbmVzaXMtaGFzaFxuICAgKi9cbiAgbWFpbm5ldCgpOiB0aGlzIHtcbiAgICB0aGlzLmdlbmVzaXNJZChNQUlOTkVUX0dFTkVTSVNfSUQpO1xuICAgIHRoaXMuZ2VuZXNpc0hhc2goTUFJTk5FVF9HRU5FU0lTX0hBU0gpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgZ2VuZXNpcyBpZCBhbmQgaGFzaCB0byB0ZXN0bmV0LlxuICAgKlxuICAgKiBAcmV0dXJucyB7VHJhbnNhY3Rpb25CdWlsZGVyfSBUaGlzIHRyYW5zYWN0aW9uIGJ1aWxkZXIuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIuYWxnb3JhbmQub3JnL2RvY3MvcmVmZXJlbmNlL2FsZ29yYW5kLW5ldHdvcmtzL3Rlc3RuZXQvI2dlbmVzaXMtaWRcbiAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5hbGdvcmFuZC5vcmcvZG9jcy9yZWZlcmVuY2UvYWxnb3JhbmQtbmV0d29ya3MvdGVzdG5ldC8jZ2VuZXNpcy1oYXNoXG4gICAqL1xuICB0ZXN0bmV0KCk6IHRoaXMge1xuICAgIHRoaXMuZ2VuZXNpc0lkKFRFU1RORVRfR0VORVNJU19JRCk7XG4gICAgdGhpcy5nZW5lc2lzSGFzaChURVNUTkVUX0dFTkVTSVNfSEFTSCk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBnZW5lc2lzIGlkIGFuZCBoYXNoIHRvIGJldGFuZXQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbkJ1aWxkZXJ9IFRoaXMgdHJhbnNhY3Rpb24gYnVpbGRlci5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5hbGdvcmFuZC5vcmcvZG9jcy9yZWZlcmVuY2UvYWxnb3JhbmQtbmV0d29ya3MvYmV0YW5ldC8jZ2VuZXNpcy1pZFxuICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmFsZ29yYW5kLm9yZy9kb2NzL3JlZmVyZW5jZS9hbGdvcmFuZC1uZXR3b3Jrcy9iZXRhbmV0LyNnZW5lc2lzLWhhc2hcbiAgICovXG4gIGJldGFuZXQoKTogdGhpcyB7XG4gICAgdGhpcy5nZW5lc2lzSWQoQkVUQU5FVF9HRU5FU0lTX0lEKTtcbiAgICB0aGlzLmdlbmVzaXNIYXNoKEJFVEFORVRfR0VORVNJU19IQVNIKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGZpcnN0IHJvdW5kLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gcm91bmQgVGhlIGZpcnN0IHByb3RvY29sIHJvdW5kIG9uIHdoaWNoIHRoaXMgdHhuIGlzIHZhbGlkLlxuICAgKiBAcmV0dXJucyB7VHJhbnNhY3Rpb25CdWlsZGVyfSBUaGlzIHRyYW5zYWN0aW9uIGJ1aWxkZXIuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIuYWxnb3JhbmQub3JnL2RvY3MvcmVmZXJlbmNlL3RyYW5zYWN0aW9ucy9cbiAgICovXG4gIGZpcnN0Um91bmQocm91bmQ6IG51bWJlcik6IHRoaXMge1xuICAgIHRoaXMudmFsaWRhdGVWYWx1ZShuZXcgQmlnTnVtYmVyKHJvdW5kKSk7XG5cbiAgICB0aGlzLl9maXJzdFJvdW5kID0gcm91bmQ7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBsYXN0IHJvdW5kLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gcm91bmQgVGhlIGZpcnN0IHByb3RvY29sIHJvdW5kIG9uIHdoaWNoIHRoaXMgdHhuIGlzIHZhbGlkLlxuICAgKiBAcmV0dXJucyB7VHJhbnNhY3Rpb25CdWlsZGVyfSBUaGlzIHRyYW5zYWN0aW9uIGJ1aWxkZXIuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIuYWxnb3JhbmQub3JnL2RvY3MvcmVmZXJlbmNlL3RyYW5zYWN0aW9ucy9cbiAgICovXG4gIGxhc3RSb3VuZChyb3VuZDogbnVtYmVyKTogdGhpcyB7XG4gICAgdGhpcy52YWxpZGF0ZVZhbHVlKG5ldyBCaWdOdW1iZXIocm91bmQpKTtcblxuICAgIHRoaXMuX2xhc3RSb3VuZCA9IHJvdW5kO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgbGVhc2Ugb24gdGhlIHRyYW5zYWN0aW9uLlxuICAgKlxuICAgKiBBIGxlYXNlIGlzIGEgbXV0ZXggb24gdGhlIHRyYW5zYWN0aW9uIHRoYXQgcHJldmVudHMgYW55IG90aGVyIHRyYW5zYWN0aW9uXG4gICAqIGZyb20gYmVpbmcgc2VudCB3aXRoIHRoZSBzYW1lIGxlYXNlIHVudGlsIHRoZSBwcmlvciB0cmFuc2FjdGlvbidzIGxhc3RcbiAgICogcm91bmQgaGFzIHBhc3NlZC5cbiAgICpcbiAgICogQHBhcmFtIHtVaW50OEFycmF5fSBsZWFzZSBUaGUgbGVhc2UgdG8gcHV0IHRoZSB0cmFuc2FjdGlvbi5cbiAgICogQHJldHVybnMge1RyYW5zYWN0aW9uQnVpbGRlcn0gVGhpcyB0cmFuc2FjdGlvbiBidWlsZGVyLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmFsZ29yYW5kLm9yZy9kb2NzL3JlZmVyZW5jZS90cmFuc2FjdGlvbnMvXG4gICAqL1xuICBsZWFzZShsZWFzZTogVWludDhBcnJheSk6IHRoaXMge1xuICAgIHRoaXMuX2xlYXNlID0gbGVhc2U7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBub3RlIGZvciB0aGUgdHJhbnNhY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7VWludDhBcnJheX0gbm90ZSBBcmJpdHJhcnkgZGF0YSBmb3Igc2VuZGVyIHRvIHN0b3JlLlxuICAgKiBAcmV0dXJucyB7VHJhbnNhY3Rpb25CdWlsZGVyfSBUaGlzIHRyYW5zYWN0aW9uIGJ1aWxkZXIuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIuYWxnb3JhbmQub3JnL2RvY3MvcmVmZXJlbmNlL3RyYW5zYWN0aW9ucy9cbiAgICovXG4gIG5vdGUobm90ZTogVWludDhBcnJheSk6IHRoaXMge1xuICAgIHRoaXMuX25vdGUgPSBub3RlO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgYXV0aG9yaXplZCBhZGRyZXNzLlxuICAgKlxuICAgKiBUaGUgYXV0aG9yaXplZCBhc3NldCB3aWxsIGJlIHVzZWQgdG8gYXV0aG9yaXplIGFsbCBmdXR1cmUgdHJhbnNhY3Rpb25zLlxuICAgKlxuICAgKiBAcGFyYW0ge0Jhc2VBZGRyZXNzfSBhdXRob3JpemVyIFRoZSBhZGRyZXNzIHRvIGRlbGVnYXRlIGF1dGhvcml6YXRpb24gYXV0aG9yaXR5IHRvLlxuICAgKiBAcmV0dXJucyB7VHJhbnNhY3Rpb25CdWlsZGVyfSBUaGlzIHRyYW5zYWN0aW9uIGJ1aWxkZXIuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIuYWxnb3JhbmQub3JnL2RvY3MvcmVmZXJlbmNlL3RyYW5zYWN0aW9ucy9cbiAgICovXG4gIHJlS2V5VG8oYXV0aG9yaXplcjogQmFzZUFkZHJlc3MpOiB0aGlzIHtcbiAgICB0aGlzLnZhbGlkYXRlQWRkcmVzcyhhdXRob3JpemVyKTtcbiAgICB0aGlzLl9yZUtleVRvID0gYXV0aG9yaXplci5hZGRyZXNzO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVBZGRyZXNzKHsgYWRkcmVzcyB9OiBCYXNlQWRkcmVzcyk6IHZvaWQge1xuICAgIGlmICghYWxnb3Nkay5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzKSkge1xuICAgICAgdGhyb3cgbmV3IEFkZHJlc3NWYWxpZGF0aW9uRXJyb3IoYWRkcmVzcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBhc3luYyBidWlsZEltcGxlbWVudGF0aW9uKCk6IFByb21pc2U8VHJhbnNhY3Rpb24+IHtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLnNldEFsZ29UcmFuc2FjdGlvbih0aGlzLmJ1aWxkQWxnb1R4bigpKTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLnNldFRyYW5zYWN0aW9uVHlwZSh0aGlzLnRyYW5zYWN0aW9uVHlwZSk7XG5cbiAgICB0aGlzLnRyYW5zYWN0aW9uLnNpZ24odGhpcy5fa2V5UGFpcnMpO1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uLmxvYWRJbnB1dHNBbmRPdXRwdXRzKCk7XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zYWN0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyB0aGUgYWxnb3JhbmQgdHJhbnNhY3Rpb24uXG4gICAqL1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgYnVpbGRBbGdvVHhuKCk6IGFsZ29zZGsuVHJhbnNhY3Rpb247XG5cbiAgLyoqXG4gICAqIFRoZSB0cmFuc2FjdGlvbiB0eXBlLlxuICAgKi9cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGdldCB0cmFuc2FjdGlvblR5cGUoKTogVHJhbnNhY3Rpb25UeXBlO1xuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgZnJvbUltcGxlbWVudGF0aW9uKHJhd1RyYW5zYWN0aW9uOiBVaW50OEFycmF5IHwgc3RyaW5nKTogVHJhbnNhY3Rpb24ge1xuICAgIGNvbnN0IGRlY29kZWRUeG4gPSBVdGlscy5kZWNvZGVBbGdvVHhuKHJhd1RyYW5zYWN0aW9uKTtcbiAgICBjb25zdCBhbGdvc2RrVHhuID0gZGVjb2RlZFR4bi50eG47XG5cbiAgICBpZiAoZGVjb2RlZFR4bi5zaWduZWQpIHtcbiAgICAgIHRoaXMuX3RyYW5zYWN0aW9uLnNpZ25lZFRyYW5zYWN0aW9uID0gZGVjb2RlZFR4bi5yYXdUcmFuc2FjdGlvbjtcbiAgICAgIGlmIChkZWNvZGVkVHhuLnNpZ25lcnMpIHtcbiAgICAgICAgdGhpcy5zZXRTaWduZXJzKGRlY29kZWRUeG4uc2lnbmVycyk7XG4gICAgICB9XG4gICAgICBpZiAoZGVjb2RlZFR4bi5zaWduZWRCeSkge1xuICAgICAgICB0aGlzLl90cmFuc2FjdGlvbi5zaWduZWRCeSA9IGRlY29kZWRUeG4uc2lnbmVkQnk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc2VuZGVyKHsgYWRkcmVzczogYWxnb3Nkay5lbmNvZGVBZGRyZXNzKGFsZ29zZGtUeG4uZnJvbS5wdWJsaWNLZXkpIH0pO1xuICAgIHRoaXMuX2lzRmxhdEZlZSA9IHRydWU7XG4gICAgdGhpcy5fZmVlID0gYWxnb3Nka1R4bi5mZWU7XG4gICAgdGhpcy5fZ2VuZXNpc0hhc2ggPSBhbGdvc2RrVHhuLmdlbmVzaXNIYXNoLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgICB0aGlzLl9nZW5lc2lzSWQgPSBhbGdvc2RrVHhuLmdlbmVzaXNJRDtcbiAgICB0aGlzLl9maXJzdFJvdW5kID0gYWxnb3Nka1R4bi5maXJzdFJvdW5kO1xuICAgIHRoaXMuX2xhc3RSb3VuZCA9IGFsZ29zZGtUeG4ubGFzdFJvdW5kO1xuICAgIHRoaXMuX2xlYXNlID0gYWxnb3Nka1R4bi5sZWFzZTtcbiAgICB0aGlzLl9ub3RlID0gYWxnb3Nka1R4bi5ub3RlO1xuICAgIHRoaXMuX3JlS2V5VG8gPSBhbGdvc2RrVHhuLnJlS2V5VG8gPyBhbGdvc2RrLmVuY29kZUFkZHJlc3MoYWxnb3Nka1R4bi5yZUtleVRvLnB1YmxpY0tleSkgOiB1bmRlZmluZWQ7XG5cbiAgICB0aGlzLl90cmFuc2FjdGlvbi5zZXRBbGdvVHJhbnNhY3Rpb24oYWxnb3Nka1R4bik7XG5cbiAgICByZXR1cm4gdGhpcy5fdHJhbnNhY3Rpb247XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIHNpZ25JbXBsZW1lbnRhdGlvbih7IGtleSB9OiBCYXNlS2V5KTogVHJhbnNhY3Rpb24ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBidWZmS2V5ID0gVXRpbHMuZGVjb2RlU2VlZChrZXkpO1xuICAgICAgY29uc3Qga2V5cGFpciA9IG5ldyBLZXlQYWlyKHsgcHJ2OiBCdWZmZXIuZnJvbShidWZmS2V5LnNlZWQpLnRvU3RyaW5nKCdoZXgnKSB9KTtcbiAgICAgIHRoaXMuX2tleVBhaXJzLnB1c2goa2V5cGFpcik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKGFsZ29VdGlscy5pc1ZhbGlkUHJpdmF0ZUtleShrZXkpKSB7XG4gICAgICAgIGNvbnN0IGtleXBhaXIgPSBuZXcgS2V5UGFpcih7IHBydjoga2V5IH0pO1xuICAgICAgICB0aGlzLl9rZXlQYWlycy5wdXNoKGtleXBhaXIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fdHJhbnNhY3Rpb247XG4gIH1cblxuICBudW1iZXJPZlNpZ25lcnMobnVtOiBudW1iZXIpOiB0aGlzIHtcbiAgICB0aGlzLl90cmFuc2FjdGlvbi5zZXROdW1iZXJPZlJlcXVpcmVkU2lnbmVycyhudW0pO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzZXRTaWduZXJzKGFkZHJzOiBzdHJpbmcgfCBzdHJpbmdbXSk6IHRoaXMge1xuICAgIGNvbnN0IHNpZ25lcnMgPSBhZGRycyBpbnN0YW5jZW9mIEFycmF5ID8gYWRkcnMgOiBbYWRkcnNdO1xuICAgIHNpZ25lcnMuZm9yRWFjaCgoYWRkcmVzcykgPT4gdGhpcy52YWxpZGF0ZUFkZHJlc3MoeyBhZGRyZXNzOiBhZGRyZXNzIH0pKTtcbiAgICB0aGlzLl90cmFuc2FjdGlvbi5zaWduZXJzID0gc2lnbmVycztcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBudW1iZXIgb2Ygc2lnbmVycyByZXF1aXJlZCB0byBzaWduIHRoZSB0cmFuc2FjdGlvbi5cbiAgICpcbiAgICogVGhlIG51bWJlciBvZiBzaWduZXJzIGNhbm5vdCBiZSBzZXQgdG8gYSBuZWdhdGl2ZSB2YWx1ZS5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG51bWJlciBvZiBzaWduZXJzLlxuICAgKiBAcmV0dXJucyB7VHJhbnNhY3Rpb25CdWlsZGVyfSBUaGlzIHRyYW5zYWN0aW9uIGJ1aWxkZXIuXG4gICAqL1xuICBudW1iZXJPZlJlcXVpcmVkU2lnbmVycyhuOiBudW1iZXIpOiB0aGlzIHtcbiAgICBpZiAobiA8IDApIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoYE51bWJlciBvZiBzaWduZXJzOiAnJHtufScgY2Fubm90IGJlIG5lZ2F0aXZlYCk7XG4gICAgfVxuXG4gICAgdGhpcy5fdHJhbnNhY3Rpb24uc2V0TnVtYmVyT2ZSZXF1aXJlZFNpZ25lcnMobik7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdGRvY1xuICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmFsZ29yYW5kLm9yZy9kb2NzL2ZlYXR1cmVzL2FjY291bnRzLyN0cmFuc2Zvcm1hdGlvbi1wcml2YXRlLWtleS10by1iYXNlNjQtcHJpdmF0ZS1rZXlcbiAgICovXG4gIHZhbGlkYXRlS2V5KHsga2V5IH06IEJhc2VLZXkpOiB2b2lkIHtcbiAgICBsZXQgaXNWYWxpZFByaXZhdGVLZXlGcm9tQnl0ZXM7XG4gICAgY29uc3QgaXNWYWxpZFByaXZhdGVLZXlGcm9tSGV4ID0gaXNWYWxpZEVkMjU1MTlTZWVkKGtleSk7XG4gICAgY29uc3QgaXNWYWxpZFByaXZhdGVLZXlGcm9tQmFzZTY0ID0gaXNWYWxpZEVkMjU1MTlTZWVkKEJ1ZmZlci5mcm9tKGtleSwgJ2Jhc2U2NCcpLnRvU3RyaW5nKCdoZXgnKSk7XG4gICAgY29uc3QgaXNWYWxpZFJvb3RQcnZLZXkgPSBpc1ZhbGlkRWQyNTUxOVNlY3JldEtleShrZXkpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBkZWNvZGVkU2VlZCA9IFV0aWxzLmRlY29kZVNlZWQoa2V5KTtcbiAgICAgIGlzVmFsaWRQcml2YXRlS2V5RnJvbUJ5dGVzID0gaXNWYWxpZEVkMjU1MTlTZWVkKEJ1ZmZlci5mcm9tKGRlY29kZWRTZWVkLnNlZWQpLnRvU3RyaW5nKCdoZXgnKSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpc1ZhbGlkUHJpdmF0ZUtleUZyb21CeXRlcyA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgICFpc1ZhbGlkUHJpdmF0ZUtleUZyb21CeXRlcyAmJlxuICAgICAgIWlzVmFsaWRQcml2YXRlS2V5RnJvbUhleCAmJlxuICAgICAgIWlzVmFsaWRQcml2YXRlS2V5RnJvbUJhc2U2NCAmJlxuICAgICAgIWlzVmFsaWRSb290UHJ2S2V5XG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKGBLZXkgdmFsaWRhdGlvbiBmYWlsZWRgKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVSYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbjogVWludDhBcnJheSB8IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGRlY29kZWRUeG4gPSBVdGlscy5kZWNvZGVBbGdvVHhuKHJhd1RyYW5zYWN0aW9uKTtcbiAgICBjb25zdCBhbGdvVHhuID0gZGVjb2RlZFR4bi50eG47XG5cbiAgICBjb25zdCB2YWxpZGF0aW9uUmVzdWx0ID0gQmFzZVRyYW5zYWN0aW9uU2NoZW1hLnZhbGlkYXRlKHtcbiAgICAgIGZlZTogYWxnb1R4bj8uZmVlLFxuICAgICAgZmlyc3RSb3VuZDogYWxnb1R4bj8uZmlyc3RSb3VuZCxcbiAgICAgIGdlbmVzaXNIYXNoOiBhbGdvVHhuPy5nZW5lc2lzSGFzaC50b1N0cmluZygnYmFzZTY0JyksXG4gICAgICBsYXN0Um91bmQ6IGFsZ29UeG4/Lmxhc3RSb3VuZCxcbiAgICAgIHNlbmRlcjogYWxnb1R4biA/IGFsZ29zZGsuZW5jb2RlQWRkcmVzcyhhbGdvVHhuLmZyb20ucHVibGljS2V5KSA6IHVuZGVmaW5lZCxcbiAgICAgIGdlbmVzaXNJZDogYWxnb1R4bj8uZ2VuZXNpc0lELFxuICAgICAgbGVhc2U6IGFsZ29UeG4/LmxlYXNlLFxuICAgICAgbm90ZTogYWxnb1R4bj8ubm90ZSxcbiAgICAgIHJlS2V5VG86IGFsZ29UeG4/LnJlS2V5VG8gPyBhbGdvc2RrLmVuY29kZUFkZHJlc3MoYWxnb1R4bi5yZUtleVRvLnB1YmxpY0tleSkgOiB1bmRlZmluZWQsXG4gICAgfSk7XG5cbiAgICBpZiAodmFsaWRhdGlvblJlc3VsdC5lcnJvcikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKGBUcmFuc2FjdGlvbiB2YWxpZGF0aW9uIGZhaWxlZDogJHt2YWxpZGF0aW9uUmVzdWx0LmVycm9yLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlVHJhbnNhY3Rpb24oXzogVHJhbnNhY3Rpb24pOiB2b2lkIHtcbiAgICB0aGlzLnZhbGlkYXRlQmFzZUZpZWxkcyhcbiAgICAgIHRoaXMuX2ZlZSxcbiAgICAgIHRoaXMuX2ZpcnN0Um91bmQsXG4gICAgICB0aGlzLl9nZW5lc2lzSGFzaCxcbiAgICAgIHRoaXMuX2xhc3RSb3VuZCxcbiAgICAgIHRoaXMuX3NlbmRlcixcbiAgICAgIHRoaXMuX2dlbmVzaXNJZCxcbiAgICAgIHRoaXMuX2xlYXNlLFxuICAgICAgdGhpcy5fbm90ZSxcbiAgICAgIHRoaXMuX3JlS2V5VG9cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZUJhc2VGaWVsZHMoXG4gICAgZmVlOiBudW1iZXIsXG4gICAgZmlyc3RSb3VuZDogbnVtYmVyLFxuICAgIGdlbmVzaXNIYXNoOiBzdHJpbmcsXG4gICAgbGFzdFJvdW5kOiBudW1iZXIsXG4gICAgc2VuZGVyOiBzdHJpbmcsXG4gICAgZ2VuZXNpc0lkOiBzdHJpbmcsXG4gICAgbGVhc2U6IFVpbnQ4QXJyYXkgfCB1bmRlZmluZWQsXG4gICAgbm90ZTogVWludDhBcnJheSB8IHVuZGVmaW5lZCxcbiAgICByZUtleVRvOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgdmFsaWRhdGlvblJlc3VsdCA9IEJhc2VUcmFuc2FjdGlvblNjaGVtYS52YWxpZGF0ZSh7XG4gICAgICBmZWUsXG4gICAgICBmaXJzdFJvdW5kLFxuICAgICAgZ2VuZXNpc0hhc2gsXG4gICAgICBsYXN0Um91bmQsXG4gICAgICBzZW5kZXIsXG4gICAgICBnZW5lc2lzSWQsXG4gICAgICBsZWFzZSxcbiAgICAgIG5vdGUsXG4gICAgICByZUtleVRvLFxuICAgIH0pO1xuXG4gICAgaWYgKHZhbGlkYXRpb25SZXN1bHQuZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcihgVHJhbnNhY3Rpb24gdmFsaWRhdGlvbiBmYWlsZWQ6ICR7dmFsaWRhdGlvblJlc3VsdC5lcnJvci5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVWYWx1ZSh2YWx1ZTogQmlnTnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHZhbHVlLmlzTGVzc1RoYW4oMCkpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ1ZhbHVlIGNhbm5vdCBiZSBsZXNzIHRoYW4gemVybycpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgZ2V0IHRyYW5zYWN0aW9uKCk6IFRyYW5zYWN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNhY3Rpb247XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIHNldCB0cmFuc2FjdGlvbih0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb24pIHtcbiAgICB0aGlzLl90cmFuc2FjdGlvbiA9IHRyYW5zYWN0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlbmllbmNlIG1ldGhvZCB0byByZXRyaWV2ZSB0aGUgYWxnb3NkayBzdWdnZXN0ZWQgcGFyYW1ldGVycy5cbiAgICpcbiAgICogQHJldHVybnMge2FsZ29zZGsuU3VnZ2VzdGVkUGFyYW1zfSBUaGUgYWxnb3NkayBzdWdnZXN0ZWQgcGFyYW1ldGVycy5cbiAgICovXG4gIHByb3RlY3RlZCBnZXQgc3VnZ2VzdGVkUGFyYW1zKCk6IGFsZ29zZGsuU3VnZ2VzdGVkUGFyYW1zIHtcbiAgICByZXR1cm4ge1xuICAgICAgZmxhdEZlZTogdGhpcy5faXNGbGF0RmVlLFxuICAgICAgZmVlOiB0aGlzLl9mZWUsXG4gICAgICBmaXJzdFJvdW5kOiB0aGlzLl9maXJzdFJvdW5kLFxuICAgICAgbGFzdFJvdW5kOiB0aGlzLl9sYXN0Um91bmQsXG4gICAgICBnZW5lc2lzSUQ6IHRoaXMuX2dlbmVzaXNJZCxcbiAgICAgIGdlbmVzaXNIYXNoOiB0aGlzLl9nZW5lc2lzSGFzaCxcbiAgICB9O1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
|
|
2
|
+
import { KeyRegistrationBuilder } from './keyRegistrationBuilder';
|
|
3
|
+
import { TransferBuilder } from './transferBuilder';
|
|
4
|
+
import { TransactionBuilder } from './transactionBuilder';
|
|
5
|
+
import { AssetTransferBuilder } from './assetTransferBuilder';
|
|
6
|
+
import { BaseTransactionBuilderFactory } from '@bitgo-beta/sdk-core';
|
|
7
|
+
export declare class TransactionBuilderFactory extends BaseTransactionBuilderFactory {
|
|
8
|
+
constructor(_coinConfig: Readonly<CoinConfig>);
|
|
9
|
+
getTransferBuilder(): TransferBuilder;
|
|
10
|
+
getAssetTransferBuilder(): AssetTransferBuilder;
|
|
11
|
+
getKeyRegistrationBuilder(): KeyRegistrationBuilder;
|
|
12
|
+
from(rawTxn: string | Uint8Array): TransactionBuilder;
|
|
13
|
+
private getBuilder;
|
|
14
|
+
getWalletInitializationBuilder(): KeyRegistrationBuilder;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=transactionBuilderFactory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transactionBuilderFactory.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilderFactory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAE7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,OAAO,EAAE,6BAA6B,EAAgB,MAAM,sBAAsB,CAAC;AAEnF,qBAAa,yBAA0B,SAAQ,6BAA6B;gBAC9D,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI7C,kBAAkB,IAAI,eAAe;IAIrC,uBAAuB,IAAI,oBAAoB;IAI/C,yBAAyB,IAAI,sBAAsB;IAInD,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,kBAAkB;IAOrD,OAAO,CAAC,UAAU;IAcX,8BAA8B,IAAI,sBAAsB;CAGhE"}
|
|
@@ -0,0 +1,52 @@
|
|
|
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.TransactionBuilderFactory = void 0;
|
|
7
|
+
const algosdk_1 = __importDefault(require("algosdk"));
|
|
8
|
+
const keyRegistrationBuilder_1 = require("./keyRegistrationBuilder");
|
|
9
|
+
const transferBuilder_1 = require("./transferBuilder");
|
|
10
|
+
const assetTransferBuilder_1 = require("./assetTransferBuilder");
|
|
11
|
+
const utils_1 = __importDefault(require("./utils"));
|
|
12
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
13
|
+
class TransactionBuilderFactory extends sdk_core_1.BaseTransactionBuilderFactory {
|
|
14
|
+
constructor(_coinConfig) {
|
|
15
|
+
super(_coinConfig);
|
|
16
|
+
}
|
|
17
|
+
getTransferBuilder() {
|
|
18
|
+
return new transferBuilder_1.TransferBuilder(this._coinConfig);
|
|
19
|
+
}
|
|
20
|
+
getAssetTransferBuilder() {
|
|
21
|
+
return new assetTransferBuilder_1.AssetTransferBuilder(this._coinConfig);
|
|
22
|
+
}
|
|
23
|
+
getKeyRegistrationBuilder() {
|
|
24
|
+
return new keyRegistrationBuilder_1.KeyRegistrationBuilder(this._coinConfig);
|
|
25
|
+
}
|
|
26
|
+
from(rawTxn) {
|
|
27
|
+
const builder = this.getBuilder(rawTxn);
|
|
28
|
+
builder.from(rawTxn);
|
|
29
|
+
return builder;
|
|
30
|
+
}
|
|
31
|
+
getBuilder(rawTxn) {
|
|
32
|
+
const decodeTxn = utils_1.default.decodeAlgoTxn(rawTxn);
|
|
33
|
+
const algoTxn = decodeTxn.txn;
|
|
34
|
+
if (algoTxn.type == algosdk_1.default.TransactionType.keyreg) {
|
|
35
|
+
return this.getWalletInitializationBuilder();
|
|
36
|
+
}
|
|
37
|
+
else if (algoTxn.type == algosdk_1.default.TransactionType.pay) {
|
|
38
|
+
return this.getTransferBuilder();
|
|
39
|
+
}
|
|
40
|
+
else if (algoTxn.type == algosdk_1.default.TransactionType.axfer) {
|
|
41
|
+
return this.getAssetTransferBuilder();
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
throw new sdk_core_1.NotSupported('Transaction cannot be parsed or has an unsupported transaction type');
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
getWalletInitializationBuilder() {
|
|
48
|
+
return new keyRegistrationBuilder_1.KeyRegistrationBuilder(this._coinConfig);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
exports.TransactionBuilderFactory = TransactionBuilderFactory;
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvdHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxzREFBOEI7QUFHOUIscUVBQWtFO0FBQ2xFLHVEQUFvRDtBQUVwRCxpRUFBOEQ7QUFDOUQsb0RBQTRCO0FBQzVCLG1EQUFtRjtBQUVuRixNQUFhLHlCQUEwQixTQUFRLHdDQUE2QjtJQUMxRSxZQUFZLFdBQWlDO1FBQzNDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLE9BQU8sSUFBSSxpQ0FBZSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQsdUJBQXVCO1FBQ3JCLE9BQU8sSUFBSSwyQ0FBb0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELHlCQUF5QjtRQUN2QixPQUFPLElBQUksK0NBQXNCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRCxJQUFJLENBQUMsTUFBMkI7UUFDOUIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4QyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXJCLE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFTyxVQUFVLENBQUMsTUFBMkI7UUFDNUMsTUFBTSxTQUFTLEdBQUcsZUFBSyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM5QyxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDO1FBQzlCLElBQUksT0FBTyxDQUFDLElBQUksSUFBSSxpQkFBTyxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNuRCxPQUFPLElBQUksQ0FBQyw4QkFBOEIsRUFBRSxDQUFDO1FBQy9DLENBQUM7YUFBTSxJQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksaUJBQU8sQ0FBQyxlQUFlLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDdkQsT0FBTyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUNuQyxDQUFDO2FBQU0sSUFBSSxPQUFPLENBQUMsSUFBSSxJQUFJLGlCQUFPLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3pELE9BQU8sSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7UUFDeEMsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLElBQUksdUJBQVksQ0FBQyxxRUFBcUUsQ0FBQyxDQUFDO1FBQ2hHLENBQUM7SUFDSCxDQUFDO0lBRU0sOEJBQThCO1FBQ25DLE9BQU8sSUFBSSwrQ0FBc0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDdEQsQ0FBQztDQUNGO0FBekNELDhEQXlDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhbGdvc2RrIGZyb20gJ2FsZ29zZGsnO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuXG5pbXBvcnQgeyBLZXlSZWdpc3RyYXRpb25CdWlsZGVyIH0gZnJvbSAnLi9rZXlSZWdpc3RyYXRpb25CdWlsZGVyJztcbmltcG9ydCB7IFRyYW5zZmVyQnVpbGRlciB9IGZyb20gJy4vdHJhbnNmZXJCdWlsZGVyJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vdHJhbnNhY3Rpb25CdWlsZGVyJztcbmltcG9ydCB7IEFzc2V0VHJhbnNmZXJCdWlsZGVyIH0gZnJvbSAnLi9hc3NldFRyYW5zZmVyQnVpbGRlcic7XG5pbXBvcnQgVXRpbHMgZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBCYXNlVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSwgTm90U3VwcG9ydGVkIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuXG5leHBvcnQgY2xhc3MgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSBleHRlbmRzIEJhc2VUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5IHtcbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICB9XG5cbiAgZ2V0VHJhbnNmZXJCdWlsZGVyKCk6IFRyYW5zZmVyQnVpbGRlciB7XG4gICAgcmV0dXJuIG5ldyBUcmFuc2ZlckJ1aWxkZXIodGhpcy5fY29pbkNvbmZpZyk7XG4gIH1cblxuICBnZXRBc3NldFRyYW5zZmVyQnVpbGRlcigpOiBBc3NldFRyYW5zZmVyQnVpbGRlciB7XG4gICAgcmV0dXJuIG5ldyBBc3NldFRyYW5zZmVyQnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIGdldEtleVJlZ2lzdHJhdGlvbkJ1aWxkZXIoKTogS2V5UmVnaXN0cmF0aW9uQnVpbGRlciB7XG4gICAgcmV0dXJuIG5ldyBLZXlSZWdpc3RyYXRpb25CdWlsZGVyKHRoaXMuX2NvaW5Db25maWcpO1xuICB9XG5cbiAgZnJvbShyYXdUeG46IHN0cmluZyB8IFVpbnQ4QXJyYXkpOiBUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICAgIGNvbnN0IGJ1aWxkZXIgPSB0aGlzLmdldEJ1aWxkZXIocmF3VHhuKTtcbiAgICBidWlsZGVyLmZyb20ocmF3VHhuKTtcblxuICAgIHJldHVybiBidWlsZGVyO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRCdWlsZGVyKHJhd1R4bjogc3RyaW5nIHwgVWludDhBcnJheSk6IFRyYW5zYWN0aW9uQnVpbGRlciB7XG4gICAgY29uc3QgZGVjb2RlVHhuID0gVXRpbHMuZGVjb2RlQWxnb1R4bihyYXdUeG4pO1xuICAgIGNvbnN0IGFsZ29UeG4gPSBkZWNvZGVUeG4udHhuO1xuICAgIGlmIChhbGdvVHhuLnR5cGUgPT0gYWxnb3Nkay5UcmFuc2FjdGlvblR5cGUua2V5cmVnKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRXYWxsZXRJbml0aWFsaXphdGlvbkJ1aWxkZXIoKTtcbiAgICB9IGVsc2UgaWYgKGFsZ29UeG4udHlwZSA9PSBhbGdvc2RrLlRyYW5zYWN0aW9uVHlwZS5wYXkpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFRyYW5zZmVyQnVpbGRlcigpO1xuICAgIH0gZWxzZSBpZiAoYWxnb1R4bi50eXBlID09IGFsZ29zZGsuVHJhbnNhY3Rpb25UeXBlLmF4ZmVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRBc3NldFRyYW5zZmVyQnVpbGRlcigpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkKCdUcmFuc2FjdGlvbiBjYW5ub3QgYmUgcGFyc2VkIG9yIGhhcyBhbiB1bnN1cHBvcnRlZCB0cmFuc2FjdGlvbiB0eXBlJyk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldFdhbGxldEluaXRpYWxpemF0aW9uQnVpbGRlcigpOiBLZXlSZWdpc3RyYXRpb25CdWlsZGVyIHtcbiAgICByZXR1cm4gbmV3IEtleVJlZ2lzdHJhdGlvbkJ1aWxkZXIodGhpcy5fY29pbkNvbmZpZyk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
|
|
2
|
+
import algosdk from 'algosdk';
|
|
3
|
+
import { TransactionBuilder } from './transactionBuilder';
|
|
4
|
+
import { Transaction } from './transaction';
|
|
5
|
+
import { BaseAddress, TransactionType } from '@bitgo-beta/sdk-core';
|
|
6
|
+
export declare class TransferBuilder extends TransactionBuilder {
|
|
7
|
+
protected _to: string;
|
|
8
|
+
protected _amount: number | bigint;
|
|
9
|
+
protected _closeRemainderTo?: string;
|
|
10
|
+
constructor(coinConfig: Readonly<CoinConfig>);
|
|
11
|
+
protected buildAlgoTxn(): algosdk.Transaction;
|
|
12
|
+
protected get transactionType(): TransactionType;
|
|
13
|
+
protected fromImplementation(rawTransaction: Uint8Array | string): Transaction;
|
|
14
|
+
validateRawTransaction(rawTransaction: Uint8Array | string): void;
|
|
15
|
+
validateTransaction(transaction: Transaction): void;
|
|
16
|
+
/**
|
|
17
|
+
* Sets the payment receiver.
|
|
18
|
+
*
|
|
19
|
+
* @param {BaseAddress} to The receiver account
|
|
20
|
+
* @returns {TransferBuilder} This transfer builder.
|
|
21
|
+
*
|
|
22
|
+
*/
|
|
23
|
+
to(to: BaseAddress): this;
|
|
24
|
+
/**
|
|
25
|
+
* Sets the amount of payment.
|
|
26
|
+
*
|
|
27
|
+
* @param {number} amount The amount of payment.
|
|
28
|
+
* @returns {TransferBuilder} This transfer builder.
|
|
29
|
+
*/
|
|
30
|
+
amount(amount: number | bigint): this;
|
|
31
|
+
/**
|
|
32
|
+
* Sets address to transfer remainder amount on closing.
|
|
33
|
+
*
|
|
34
|
+
* @param {BaseAddress} closeRemainderTo The address for receiving remainder amount
|
|
35
|
+
* @returns {TransferBuilder} This transfer builder.
|
|
36
|
+
*
|
|
37
|
+
*/
|
|
38
|
+
closeRemainderTo(closeRemainderTo: BaseAddress): this;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=transferBuilder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transferBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/transferBuilder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAG5C,OAAO,EAAE,WAAW,EAA2B,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE7F,qBAAa,eAAgB,SAAQ,kBAAkB;IACrD,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;IACnC,SAAS,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;gBAEzB,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI5C,SAAS,CAAC,YAAY,IAAI,OAAO,CAAC,WAAW;IAY7C,SAAS,KAAK,eAAe,IAAI,eAAe,CAE/C;IAED,SAAS,CAAC,kBAAkB,CAAC,cAAc,EAAE,UAAU,GAAG,MAAM,GAAG,WAAW;IAc9E,sBAAsB,CAAC,cAAc,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI;IAUjE,mBAAmB,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;IAanD;;;;;;OAMG;IACH,EAAE,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI;IAOzB;;;;;OAKG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAOrC;;;;;;OAMG;IACH,gBAAgB,CAAC,gBAAgB,EAAE,WAAW,GAAG,IAAI;CAMtD"}
|