@bitgo-beta/sdk-coin-algo 1.1.0

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.
Files changed (64) hide show
  1. package/.eslintignore +5 -0
  2. package/.mocharc.yml +8 -0
  3. package/CHANGELOG.md +88 -0
  4. package/LICENSE +191 -0
  5. package/README.md +30 -0
  6. package/dist/src/algo.d.ts +211 -0
  7. package/dist/src/algo.d.ts.map +1 -0
  8. package/dist/src/algo.js +419 -0
  9. package/dist/src/algoToken.d.ts +32 -0
  10. package/dist/src/algoToken.d.ts.map +1 -0
  11. package/dist/src/algoToken.js +82 -0
  12. package/dist/src/builder.d.ts +3 -0
  13. package/dist/src/builder.d.ts.map +1 -0
  14. package/dist/src/builder.js +10 -0
  15. package/dist/src/index.d.ts +5 -0
  16. package/dist/src/index.d.ts.map +1 -0
  17. package/dist/src/index.js +30 -0
  18. package/dist/src/lib/assetTransferBuilder.d.ts +42 -0
  19. package/dist/src/lib/assetTransferBuilder.d.ts.map +1 -0
  20. package/dist/src/lib/assetTransferBuilder.js +105 -0
  21. package/dist/src/lib/errors.d.ts +11 -0
  22. package/dist/src/lib/errors.d.ts.map +1 -0
  23. package/dist/src/lib/errors.js +27 -0
  24. package/dist/src/lib/ifaces.d.ts +46 -0
  25. package/dist/src/lib/ifaces.d.ts.map +1 -0
  26. package/dist/src/lib/ifaces.js +3 -0
  27. package/dist/src/lib/index.d.ts +13 -0
  28. package/dist/src/lib/index.d.ts.map +1 -0
  29. package/dist/src/lib/index.js +47 -0
  30. package/dist/src/lib/keyPair.d.ts +25 -0
  31. package/dist/src/lib/keyPair.d.ts.map +1 -0
  32. package/dist/src/lib/keyPair.js +77 -0
  33. package/dist/src/lib/keyRegistrationBuilder.d.ts +104 -0
  34. package/dist/src/lib/keyRegistrationBuilder.d.ts.map +1 -0
  35. package/dist/src/lib/keyRegistrationBuilder.js +240 -0
  36. package/dist/src/lib/seedEncoding.d.ts +25 -0
  37. package/dist/src/lib/seedEncoding.d.ts.map +1 -0
  38. package/dist/src/lib/seedEncoding.js +97 -0
  39. package/dist/src/lib/transaction.d.ts +75 -0
  40. package/dist/src/lib/transaction.d.ts.map +1 -0
  41. package/dist/src/lib/transaction.js +251 -0
  42. package/dist/src/lib/transactionBuilder.d.ts +204 -0
  43. package/dist/src/lib/transactionBuilder.d.ts.map +1 -0
  44. package/dist/src/lib/transactionBuilder.js +373 -0
  45. package/dist/src/lib/transactionBuilderFactory.d.ts +16 -0
  46. package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -0
  47. package/dist/src/lib/transactionBuilderFactory.js +52 -0
  48. package/dist/src/lib/transferBuilder.d.ts +40 -0
  49. package/dist/src/lib/transferBuilder.d.ts.map +1 -0
  50. package/dist/src/lib/transferBuilder.js +89 -0
  51. package/dist/src/lib/txnSchema.d.ts +7 -0
  52. package/dist/src/lib/txnSchema.d.ts.map +1 -0
  53. package/dist/src/lib/txnSchema.js +68 -0
  54. package/dist/src/lib/utils.d.ts +249 -0
  55. package/dist/src/lib/utils.d.ts.map +1 -0
  56. package/dist/src/lib/utils.js +539 -0
  57. package/dist/src/seedValidator.d.ts +31 -0
  58. package/dist/src/seedValidator.d.ts.map +1 -0
  59. package/dist/src/seedValidator.js +89 -0
  60. package/dist/src/talgo.d.ts +12 -0
  61. package/dist/src/talgo.d.ts.map +1 -0
  62. package/dist/src/talgo.js +20 -0
  63. package/package.json +64 -0
  64. package/types/index.d.ts +60 -0
@@ -0,0 +1,373 @@
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 = 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 MIN_FEE = 1000; // in microalgos
16
+ const MAINNET_GENESIS_ID = 'mainnet-v1.0';
17
+ const MAINNET_GENESIS_HASH = 'wGHE2Pwdvd7S12BL5FaOP20EGYesN73ktiC1qzkkit8=';
18
+ const TESTNET_GENESIS_ID = 'testnet-v1.0';
19
+ const TESTNET_GENESIS_HASH = 'SGO1GKSzyE7IEPItTxCByw9x8FmnrCDexi9/cOUJOiI=';
20
+ const BETANET_GENESIS_ID = 'betanet-v1.0';
21
+ const BETANET_GENESIS_HASH = 'mFgazF+2uRS1tMiL9dsj01hJGySEmPN28B/TjjvpVW0=';
22
+ class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
23
+ constructor(coinConfig) {
24
+ super(coinConfig);
25
+ this._transaction = new transaction_1.Transaction(coinConfig);
26
+ this._keyPairs = [];
27
+ }
28
+ /**
29
+ * Sets the fee.
30
+ *
31
+ * The minimum fee is 1000 microalgos.
32
+ *
33
+ * @param {BaseFee} feeObj The amount to pay to the fee sink denoted in microalgos
34
+ * @returns {TransactionBuilder} This transaction builder.
35
+ *
36
+ * @see https://developer.algorand.org/docs/reference/transactions/
37
+ */
38
+ fee(feeObj) {
39
+ this._isFlatFee = true;
40
+ const fee = new bignumber_js_1.default(feeObj.fee).toNumber();
41
+ if (this._isFlatFee && fee < MIN_FEE) {
42
+ throw new errors_1.InsufficientFeeError(fee, MIN_FEE);
43
+ }
44
+ this._fee = fee;
45
+ return this;
46
+ }
47
+ /**
48
+ * Sets whether the fee is a flat fee.
49
+ *
50
+ * A flat fee is the fee for the entire transaction whereas a normal fee
51
+ * is a fee for every byte in the transaction.
52
+ *
53
+ * @param {boolean} isFlatFee Whether the fee should be specified as a flat fee.
54
+ * @returns {TransactionBuilder} This transaction builder.
55
+ */
56
+ isFlatFee(isFlatFee) {
57
+ this._isFlatFee = isFlatFee;
58
+ return this;
59
+ }
60
+ /**
61
+ * Sets the transaction sender.
62
+ *
63
+ * @param {BaseAddress} sender The sender account
64
+ * @returns {TransactionBuilder} This transaction builder.
65
+ *
66
+ * @see https://developer.algorand.org/docs/reference/transactions/
67
+ */
68
+ sender(sender) {
69
+ this.validateAddress(sender);
70
+ this._sender = sender.address;
71
+ this._transaction.sender(sender.address);
72
+ return this;
73
+ }
74
+ /**
75
+ * Sets the genesis id.
76
+ *
77
+ * @param {string} genesisId The genesis id.
78
+ * @example "mainnet-v1.0"
79
+ *
80
+ * @returns {TransactionBuilder} This transaction builder.
81
+ *
82
+ * @see https://developer.algorand.org/docs/reference/transactions/
83
+ */
84
+ genesisId(genesisId) {
85
+ this._genesisId = genesisId;
86
+ return this;
87
+ }
88
+ /**
89
+ * Sets the genesis hash.
90
+ *
91
+ * The genesis hash must be base64 encoded.
92
+ *
93
+ * @param {string} genesisHash The genesis hash.
94
+ * @example "wGHE2Pwdvd7S12BL5FaOP20EGYesN73ktiC1qzkkit8="
95
+ *
96
+ * @returns {TransactionBuilder} This transaction builder.
97
+ *
98
+ * @see https://developer.algorand.org/docs/reference/transactions/
99
+ */
100
+ genesisHash(genesisHash) {
101
+ this._genesisHash = genesisHash;
102
+ return this;
103
+ }
104
+ /**
105
+ * Sets the genesis id and hash to mainnet.
106
+ *
107
+ * @returns {TransactionBuilder} This transaction builder.
108
+ *
109
+ * @see https://developer.algorand.org/docs/reference/algorand-networks/mainnet/#genesis-id
110
+ * @see https://developer.algorand.org/docs/reference/algorand-networks/mainnet/#genesis-hash
111
+ */
112
+ mainnet() {
113
+ this.genesisId(MAINNET_GENESIS_ID);
114
+ this.genesisHash(MAINNET_GENESIS_HASH);
115
+ return this;
116
+ }
117
+ /**
118
+ * Sets the genesis id and hash to testnet.
119
+ *
120
+ * @returns {TransactionBuilder} This transaction builder.
121
+ *
122
+ * @see https://developer.algorand.org/docs/reference/algorand-networks/testnet/#genesis-id
123
+ * @see https://developer.algorand.org/docs/reference/algorand-networks/testnet/#genesis-hash
124
+ */
125
+ testnet() {
126
+ this.genesisId(TESTNET_GENESIS_ID);
127
+ this.genesisHash(TESTNET_GENESIS_HASH);
128
+ return this;
129
+ }
130
+ /**
131
+ * Sets the genesis id and hash to betanet.
132
+ *
133
+ * @returns {TransactionBuilder} This transaction builder.
134
+ *
135
+ * @see https://developer.algorand.org/docs/reference/algorand-networks/betanet/#genesis-id
136
+ * @see https://developer.algorand.org/docs/reference/algorand-networks/betanet/#genesis-hash
137
+ */
138
+ betanet() {
139
+ this.genesisId(BETANET_GENESIS_ID);
140
+ this.genesisHash(BETANET_GENESIS_HASH);
141
+ return this;
142
+ }
143
+ /**
144
+ * Sets the first round.
145
+ *
146
+ * @param {number} round The first protocol round on which this txn is valid.
147
+ * @returns {TransactionBuilder} This transaction builder.
148
+ *
149
+ * @see https://developer.algorand.org/docs/reference/transactions/
150
+ */
151
+ firstRound(round) {
152
+ this.validateValue(new bignumber_js_1.default(round));
153
+ this._firstRound = round;
154
+ return this;
155
+ }
156
+ /**
157
+ * Sets the last round.
158
+ *
159
+ * @param {number} round The first protocol round on which this txn is valid.
160
+ * @returns {TransactionBuilder} This transaction builder.
161
+ *
162
+ * @see https://developer.algorand.org/docs/reference/transactions/
163
+ */
164
+ lastRound(round) {
165
+ this.validateValue(new bignumber_js_1.default(round));
166
+ this._lastRound = round;
167
+ return this;
168
+ }
169
+ /**
170
+ * Sets the lease on the transaction.
171
+ *
172
+ * A lease is a mutex on the transaction that prevents any other transaction
173
+ * from being sent with the same lease until the prior transaction's last
174
+ * round has passed.
175
+ *
176
+ * @param {Uint8Array} lease The lease to put the transaction.
177
+ * @returns {TransactionBuilder} This transaction builder.
178
+ *
179
+ * @see https://developer.algorand.org/docs/reference/transactions/
180
+ */
181
+ lease(lease) {
182
+ this._lease = lease;
183
+ return this;
184
+ }
185
+ /**
186
+ * Sets the note for the transaction.
187
+ *
188
+ * @param {Uint8Array} note Arbitrary data for sender to store.
189
+ * @returns {TransactionBuilder} This transaction builder.
190
+ *
191
+ * @see https://developer.algorand.org/docs/reference/transactions/
192
+ */
193
+ note(note) {
194
+ this._note = note;
195
+ return this;
196
+ }
197
+ /**
198
+ * Sets the authorized address.
199
+ *
200
+ * The authorized asset will be used to authorize all future transactions.
201
+ *
202
+ * @param {BaseAddress} authorizer The address to delegate authorization authority to.
203
+ * @returns {TransactionBuilder} This transaction builder.
204
+ *
205
+ * @see https://developer.algorand.org/docs/reference/transactions/
206
+ */
207
+ reKeyTo(authorizer) {
208
+ this.validateAddress(authorizer);
209
+ this._reKeyTo = authorizer.address;
210
+ return this;
211
+ }
212
+ /** @inheritdoc */
213
+ validateAddress({ address }) {
214
+ if (!algosdk_1.default.isValidAddress(address)) {
215
+ throw new errors_1.AddressValidationError(address);
216
+ }
217
+ }
218
+ /** @inheritdoc */
219
+ async buildImplementation() {
220
+ this.transaction.setAlgoTransaction(this.buildAlgoTxn());
221
+ this.transaction.setTransactionType(this.transactionType);
222
+ this.transaction.sign(this._keyPairs);
223
+ this._transaction.loadInputsAndOutputs();
224
+ return this._transaction;
225
+ }
226
+ /** @inheritdoc */
227
+ fromImplementation(rawTransaction) {
228
+ const decodedTxn = utils_1.default.decodeAlgoTxn(rawTransaction);
229
+ const algosdkTxn = decodedTxn.txn;
230
+ if (decodedTxn.signed) {
231
+ this._transaction.signedTransaction = decodedTxn.rawTransaction;
232
+ if (decodedTxn.signers) {
233
+ this.setSigners(decodedTxn.signers);
234
+ }
235
+ if (decodedTxn.signedBy) {
236
+ this._transaction.signedBy = decodedTxn.signedBy;
237
+ }
238
+ }
239
+ this.sender({ address: algosdk_1.default.encodeAddress(algosdkTxn.from.publicKey) });
240
+ this._isFlatFee = true;
241
+ this._fee = algosdkTxn.fee;
242
+ this._genesisHash = algosdkTxn.genesisHash.toString('base64');
243
+ this._genesisId = algosdkTxn.genesisID;
244
+ this._firstRound = algosdkTxn.firstRound;
245
+ this._lastRound = algosdkTxn.lastRound;
246
+ this._lease = algosdkTxn.lease;
247
+ this._note = algosdkTxn.note;
248
+ this._reKeyTo = algosdkTxn.reKeyTo ? algosdk_1.default.encodeAddress(algosdkTxn.reKeyTo.publicKey) : undefined;
249
+ this._transaction.setAlgoTransaction(algosdkTxn);
250
+ return this._transaction;
251
+ }
252
+ /** @inheritdoc */
253
+ signImplementation({ key }) {
254
+ const buffKey = utils_1.default.decodeSeed(key);
255
+ const keypair = new keyPair_1.KeyPair({ prv: Buffer.from(buffKey.seed).toString('hex') });
256
+ this._keyPairs.push(keypair);
257
+ return this._transaction;
258
+ }
259
+ numberOfSigners(num) {
260
+ this._transaction.setNumberOfRequiredSigners(num);
261
+ return this;
262
+ }
263
+ setSigners(addrs) {
264
+ const signers = addrs instanceof Array ? addrs : [addrs];
265
+ signers.forEach((address) => this.validateAddress({ address: address }));
266
+ this._transaction.signers = signers;
267
+ return this;
268
+ }
269
+ /**
270
+ * Sets the number of signers required to sign the transaction.
271
+ *
272
+ * The number of signers cannot be set to a negative value.
273
+ *
274
+ * @param {number} n The number of signers.
275
+ * @returns {TransactionBuilder} This transaction builder.
276
+ */
277
+ numberOfRequiredSigners(n) {
278
+ if (n < 0) {
279
+ throw new sdk_core_1.BuildTransactionError(`Number of signers: '${n}' cannot be negative`);
280
+ }
281
+ this._transaction.setNumberOfRequiredSigners(n);
282
+ return this;
283
+ }
284
+ /**
285
+ * @inheritdoc
286
+ * @see https://developer.algorand.org/docs/features/accounts/#transformation-private-key-to-base64-private-key
287
+ */
288
+ validateKey({ key }) {
289
+ let isValidPrivateKeyFromBytes;
290
+ const isValidPrivateKeyFromHex = sdk_core_1.isValidEd25519Seed(key);
291
+ const isValidPrivateKeyFromBase64 = sdk_core_1.isValidEd25519Seed(Buffer.from(key, 'base64').toString('hex'));
292
+ try {
293
+ const decodedSeed = utils_1.default.decodeSeed(key);
294
+ isValidPrivateKeyFromBytes = sdk_core_1.isValidEd25519Seed(Buffer.from(decodedSeed.seed).toString('hex'));
295
+ }
296
+ catch (err) {
297
+ isValidPrivateKeyFromBytes = false;
298
+ }
299
+ if (!isValidPrivateKeyFromBytes && !isValidPrivateKeyFromHex && !isValidPrivateKeyFromBase64) {
300
+ throw new sdk_core_1.BuildTransactionError(`Key validation failed`);
301
+ }
302
+ }
303
+ /** @inheritdoc */
304
+ validateRawTransaction(rawTransaction) {
305
+ const decodedTxn = utils_1.default.decodeAlgoTxn(rawTransaction);
306
+ const algoTxn = decodedTxn.txn;
307
+ const validationResult = txnSchema_1.BaseTransactionSchema.validate({
308
+ fee: algoTxn === null || algoTxn === void 0 ? void 0 : algoTxn.fee,
309
+ firstRound: algoTxn === null || algoTxn === void 0 ? void 0 : algoTxn.firstRound,
310
+ genesisHash: algoTxn === null || algoTxn === void 0 ? void 0 : algoTxn.genesisHash.toString('base64'),
311
+ lastRound: algoTxn === null || algoTxn === void 0 ? void 0 : algoTxn.lastRound,
312
+ sender: algoTxn ? algosdk_1.default.encodeAddress(algoTxn.from.publicKey) : undefined,
313
+ genesisId: algoTxn === null || algoTxn === void 0 ? void 0 : algoTxn.genesisID,
314
+ lease: algoTxn === null || algoTxn === void 0 ? void 0 : algoTxn.lease,
315
+ note: algoTxn === null || algoTxn === void 0 ? void 0 : algoTxn.note,
316
+ reKeyTo: (algoTxn === null || algoTxn === void 0 ? void 0 : algoTxn.reKeyTo) ? algosdk_1.default.encodeAddress(algoTxn.reKeyTo.publicKey) : undefined,
317
+ });
318
+ if (validationResult.error) {
319
+ throw new sdk_core_1.InvalidTransactionError(`Transaction validation failed: ${validationResult.error.message}`);
320
+ }
321
+ }
322
+ /** @inheritdoc */
323
+ validateTransaction(_) {
324
+ this.validateBaseFields(this._fee, this._firstRound, this._genesisHash, this._lastRound, this._sender, this._genesisId, this._lease, this._note, this._reKeyTo);
325
+ }
326
+ validateBaseFields(fee, firstRound, genesisHash, lastRound, sender, genesisId, lease, note, reKeyTo) {
327
+ const validationResult = txnSchema_1.BaseTransactionSchema.validate({
328
+ fee,
329
+ firstRound,
330
+ genesisHash,
331
+ lastRound,
332
+ sender,
333
+ genesisId,
334
+ lease,
335
+ note,
336
+ reKeyTo,
337
+ });
338
+ if (validationResult.error) {
339
+ throw new sdk_core_1.InvalidTransactionError(`Transaction validation failed: ${validationResult.error.message}`);
340
+ }
341
+ }
342
+ /** @inheritdoc */
343
+ validateValue(value) {
344
+ if (value.isLessThan(0)) {
345
+ throw new sdk_core_1.BuildTransactionError('Value cannot be less than zero');
346
+ }
347
+ }
348
+ /** @inheritdoc */
349
+ get transaction() {
350
+ return this._transaction;
351
+ }
352
+ /** @inheritdoc */
353
+ set transaction(transaction) {
354
+ this._transaction = transaction;
355
+ }
356
+ /**
357
+ * Convenience method to retrieve the algosdk suggested parameters.
358
+ *
359
+ * @returns {algosdk.SuggestedParams} The algosdk suggested parameters.
360
+ */
361
+ get suggestedParams() {
362
+ return {
363
+ flatFee: this._isFlatFee,
364
+ fee: this._fee,
365
+ firstRound: this._firstRound,
366
+ lastRound: this._lastRound,
367
+ genesisID: this._genesisId,
368
+ genesisHash: this._genesisHash,
369
+ };
370
+ }
371
+ }
372
+ exports.TransactionBuilder = TransactionBuilder;
373
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EsZ0VBQXFDO0FBQ3JDLHNEQUE4QjtBQUU5QiwrQ0FBNEM7QUFDNUMscUNBQXdFO0FBQ3hFLHVDQUFvQztBQUNwQywyQ0FBb0Q7QUFDcEQsb0RBQTRCO0FBQzVCLG1EQVM4QjtBQUU5QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsQ0FBQyxnQkFBZ0I7QUFFdEMsTUFBTSxrQkFBa0IsR0FBRyxjQUFjLENBQUM7QUFDMUMsTUFBTSxvQkFBb0IsR0FBRyw4Q0FBOEMsQ0FBQztBQUM1RSxNQUFNLGtCQUFrQixHQUFHLGNBQWMsQ0FBQztBQUMxQyxNQUFNLG9CQUFvQixHQUFHLDhDQUE4QyxDQUFDO0FBQzVFLE1BQU0sa0JBQWtCLEdBQUcsY0FBYyxDQUFDO0FBQzFDLE1BQU0sb0JBQW9CLEdBQUcsOENBQThDLENBQUM7QUFFNUUsTUFBc0Isa0JBQW1CLFNBQVEsaUNBQXNCO0lBbUJyRSxZQUFZLFVBQWdDO1FBQzFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUVsQixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUkseUJBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0gsR0FBRyxDQUFDLE1BQWU7UUFDakIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDdkIsTUFBTSxHQUFHLEdBQUcsSUFBSSxzQkFBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNqRCxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksR0FBRyxHQUFHLE9BQU8sRUFBRTtZQUNwQyxNQUFNLElBQUksNkJBQW9C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QU07WUFDTixTQUFTO1lBQ1QsS0FBSztZQUNMLElBQUk7WUFDSixPQUFPO1NBQ1IsQ0FBQyxDQUFDO1FBRUgsSUFBSSxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUU7WUFDMUIsTUFBTSxJQUFJLGtDQUF1QixDQUFDLGtDQUFrQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztTQUN2RztJQUNILENBQUM7SUFDRCxrQkFBa0I7SUFDbEIsYUFBYSxDQUFDLEtBQWdCO1FBQzVCLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUN2QixNQUFNLElBQUksZ0NBQXFCLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztTQUNuRTtJQUNILENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsSUFBYyxXQUFXO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUMzQixDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLElBQWMsV0FBVyxDQUFDLFdBQXdCO1FBQ2hELElBQUksQ0FBQyxZQUFZLEdBQUcsV0FBVyxDQUFDO0lBQ2xDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsSUFBYyxlQUFlO1FBQzNCLE9BQU87WUFDTCxPQUFPLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDeEIsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2QsVUFBVSxFQUFFLElBQUksQ0FBQyxXQUFXO1lBQzVCLFNBQVMsRUFBRSxJQUFJLENBQUMsVUFBVTtZQUMxQixTQUFTLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDMUIsV0FBVyxFQUFFLElBQUksQ0FBQyxZQUFZO1NBQy9CLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUFwY0QsZ0RBb2NDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IEJpZ051bWJlciBmcm9tICdiaWdudW1iZXIuanMnO1xuaW1wb3J0IGFsZ29zZGsgZnJvbSAnYWxnb3Nkayc7XG5cbmltcG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbic7XG5pbXBvcnQgeyBBZGRyZXNzVmFsaWRhdGlvbkVycm9yLCBJbnN1ZmZpY2llbnRGZWVFcnJvciB9IGZyb20gJy4vZXJyb3JzJztcbmltcG9ydCB7IEtleVBhaXIgfSBmcm9tICcuL2tleVBhaXInO1xuaW1wb3J0IHsgQmFzZVRyYW5zYWN0aW9uU2NoZW1hIH0gZnJvbSAnLi90eG5TY2hlbWEnO1xuaW1wb3J0IFV0aWxzIGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHtcbiAgQmFzZUFkZHJlc3MsXG4gIEJhc2VGZWUsXG4gIEJhc2VLZXksXG4gIEJhc2VUcmFuc2FjdGlvbkJ1aWxkZXIsXG4gIEJ1aWxkVHJhbnNhY3Rpb25FcnJvcixcbiAgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IsXG4gIGlzVmFsaWRFZDI1NTE5U2VlZCxcbiAgVHJhbnNhY3Rpb25UeXBlLFxufSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5cbmNvbnN0IE1JTl9GRUUgPSAxMDAwOyAvLyBpbiBtaWNyb2FsZ29zXG5cbmNvbnN0IE1BSU5ORVRfR0VORVNJU19JRCA9ICdtYWlubmV0LXYxLjAnO1xuY29uc3QgTUFJTk5FVF9HRU5FU0lTX0hBU0ggPSAnd0dIRTJQd2R2ZDdTMTJCTDVGYU9QMjBFR1llc043M2t0aUMxcXpra2l0OD0nO1xuY29uc3QgVEVTVE5FVF9HRU5FU0lTX0lEID0gJ3Rlc3RuZXQtdjEuMCc7XG5jb25zdCBURVNUTkVUX0dFTkVTSVNfSEFTSCA9ICdTR08xR0tTenlFN0lFUEl0VHhDQnl3OXg4Rm1uckNEZXhpOS9jT1VKT2lJPSc7XG5jb25zdCBCRVRBTkVUX0dFTkVTSVNfSUQgPSAnYmV0YW5ldC12MS4wJztcbmNvbnN0IEJFVEFORVRfR0VORVNJU19IQVNIID0gJ21GZ2F6RisydVJTMXRNaUw5ZHNqMDFoSkd5U0VtUE4yOEIvVGpqdnBWVzA9JztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFRyYW5zYWN0aW9uQnVpbGRlciBleHRlbmRzIEJhc2VUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICBwcm90ZWN0ZWQgX3RyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbjtcbiAgcHJvdGVjdGVkIF9rZXlQYWlyczogS2V5UGFpcltdO1xuXG4gIC8vIHRoZSBmZWUgaXMgc3BlY2lmaWVkIGFzIGEgbnVtYmVyIGhlcmUgaW5zdGVhZCBvZiBhIGJpZyBudW1iZXIgYmVjYXVzZVxuICAvLyB0aGUgYWxnb3NkayBhbHNvIHNwZWNpZmllcyBpdCBhcyBhIG51bWJlci5cbiAgcHJvdGVjdGVkIF9mZWU6IG51bWJlcjtcbiAgcHJvdGVjdGVkIF9pc0ZsYXRGZWU6IGJvb2xlYW47XG5cbiAgcHJvdGVjdGVkIF9zZW5kZXI6IHN0cmluZztcbiAgcHJvdGVjdGVkIF9nZW5lc2lzSGFzaDogc3RyaW5nO1xuICBwcm90ZWN0ZWQgX2dlbmVzaXNJZDogc3RyaW5nO1xuICBwcm90ZWN0ZWQgX2ZpcnN0Um91bmQ6IG51bWJlcjtcbiAgcHJvdGVjdGVkIF9sYXN0Um91bmQ6IG51bWJlcjtcbiAgcHJvdGVjdGVkIF9sZWFzZT86IFVpbnQ4QXJyYXk7XG4gIHByb3RlY3RlZCBfbm90ZT86IFVpbnQ4QXJyYXk7XG4gIHByb3RlY3RlZCBfcmVLZXlUbz86IHN0cmluZztcbiAgcHJvdGVjdGVkIF9zdWdnZXN0ZWRQYXJhbXM6IGFsZ29zZGsuU3VnZ2VzdGVkUGFyYW1zO1xuXG4gIGNvbnN0cnVjdG9yKGNvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoY29pbkNvbmZpZyk7XG5cbiAgICB0aGlzLl90cmFuc2FjdGlvbiA9IG5ldyBUcmFuc2FjdGlvbihjb2luQ29uZmlnKTtcbiAgICB0aGlzLl9rZXlQYWlycyA9IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGZlZS5cbiAgICpcbiAgICogVGhlIG1pbmltdW0gZmVlIGlzIDEwMDAgbWljcm9hbGdvcy5cbiAgICpcbiAgICogQHBhcmFtIHtCYXNlRmVlfSBmZWVPYmogVGhlIGFtb3VudCB0byBwYXkgdG8gdGhlIGZlZSBzaW5rIGRlbm90ZWQgaW4gbWljcm9hbGdvc1xuICAgKiBAcmV0dXJucyB7VHJhbnNhY3Rpb25CdWlsZGVyfSBUaGlzIHRyYW5zYWN0aW9uIGJ1aWxkZXIuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIuYWxnb3JhbmQub3JnL2RvY3MvcmVmZXJlbmNlL3RyYW5zYWN0aW9ucy9cbiAgICovXG4gIGZlZShmZWVPYmo6IEJhc2VGZWUpOiB0aGlzIHtcbiAgICB0aGlzLl9pc0ZsYXRGZWUgPSB0cnVlO1xuICAgIGNvbnN0IGZlZSA9IG5ldyBCaWdOdW1iZXIoZmVlT2JqLmZlZSkudG9OdW1iZXIoKTtcbiAgICBpZiAodGhpcy5faXNGbGF0RmVlICYmIGZlZSA8IE1JTl9GRUUpIHtcbiAgICAgIHRocm93IG5ldyBJbnN1ZmZpY2llbnRGZWVFcnJvcihmZWUsIE1JTl9GRUUpO1xuICAgIH1cblxuICAgIHRoaXMuX2ZlZSA9IGZlZTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgd2hldGhlciB0aGUgZmVlIGlzIGEgZmxhdCBmZWUuXG4gICAqXG4gICAqIEEgZmxhdCBmZWUgaXMgdGhlIGZlZSBmb3IgdGhlIGVudGlyZSB0cmFuc2FjdGlvbiB3aGVyZWFzIGEgbm9ybWFsIGZlZVxuICAgKiBpcyBhIGZlZSBmb3IgZXZlcnkgYnl0ZSBpbiB0aGUgdHJhbnNhY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNGbGF0RmVlIFdoZXRoZXIgdGhlIGZlZSBzaG91bGQgYmUgc3BlY2lmaWVkIGFzIGEgZmxhdCBmZWUuXG4gICAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbkJ1aWxkZXJ9IFRoaXMgdHJhbnNhY3Rpb24gYnVpbGRlci5cbiAgICovXG4gIGlzRmxhdEZlZShpc0ZsYXRGZWU6IGJvb2xlYW4pOiB0aGlzIHtcbiAgICB0aGlzLl9pc0ZsYXRGZWUgPSBpc0ZsYXRGZWU7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSB0cmFuc2FjdGlvbiBzZW5kZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7QmFzZUFkZHJlc3N9IHNlbmRlciBUaGUgc2VuZGVyIGFjY291bnRcbiAgICogQHJldHVybnMge1RyYW5zYWN0aW9uQnVpbGRlcn0gVGhpcyB0cmFuc2FjdGlvbiBidWlsZGVyLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmFsZ29yYW5kLm9yZy9kb2NzL3JlZmVyZW5jZS90cmFuc2FjdGlvbnMvXG4gICAqL1xuICBzZW5kZXIoc2VuZGVyOiBCYXNlQWRkcmVzcyk6IHRoaXMge1xuICAgIHRoaXMudmFsaWRhdGVBZGRyZXNzKHNlbmRlcik7XG4gICAgdGhpcy5fc2VuZGVyID0gc2VuZGVyLmFkZHJlc3M7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb24uc2VuZGVyKHNlbmRlci5hZGRyZXNzKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGdlbmVzaXMgaWQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBnZW5lc2lzSWQgVGhlIGdlbmVzaXMgaWQuXG4gICAqIEBleGFtcGxlIFwibWFpbm5ldC12MS4wXCJcbiAgICpcbiAgICogQHJldHVybnMge1RyYW5zYWN0aW9uQnVpbGRlcn0gVGhpcyB0cmFuc2FjdGlvbiBidWlsZGVyLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmFsZ29yYW5kLm9yZy9kb2NzL3JlZmVyZW5jZS90cmFuc2FjdGlvbnMvXG4gICAqL1xuICBnZW5lc2lzSWQoZ2VuZXNpc0lkOiBzdHJpbmcpOiB0aGlzIHtcbiAgICB0aGlzLl9nZW5lc2lzSWQgPSBnZW5lc2lzSWQ7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBnZW5lc2lzIGhhc2guXG4gICAqXG4gICAqIFRoZSBnZW5lc2lzIGhhc2ggbXVzdCBiZSBiYXNlNjQgZW5jb2RlZC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGdlbmVzaXNIYXNoIFRoZSBnZW5lc2lzIGhhc2guXG4gICAqIEBleGFtcGxlIFwid0dIRTJQd2R2ZDdTMTJCTDVGYU9QMjBFR1llc043M2t0aUMxcXpra2l0OD1cIlxuICAgKlxuICAgKiBAcmV0dXJucyB7VHJhbnNhY3Rpb25CdWlsZGVyfSBUaGlzIHRyYW5zYWN0aW9uIGJ1aWxkZXIuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIuYWxnb3JhbmQub3JnL2RvY3MvcmVmZXJlbmNlL3RyYW5zYWN0aW9ucy9cbiAgICovXG4gIGdlbmVzaXNIYXNoKGdlbmVzaXNIYXNoOiBzdHJpbmcpOiB0aGlzIHtcbiAgICB0aGlzLl9nZW5lc2lzSGFzaCA9IGdlbmVzaXNIYXNoO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgZ2VuZXNpcyBpZCBhbmQgaGFzaCB0byBtYWlubmV0LlxuICAgKlxuICAgKiBAcmV0dXJucyB7VHJhbnNhY3Rpb25CdWlsZGVyfSBUaGlzIHRyYW5zYWN0aW9uIGJ1aWxkZXIuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIuYWxnb3JhbmQub3JnL2RvY3MvcmVmZXJlbmNlL2FsZ29yYW5kLW5ldHdvcmtzL21haW5uZXQvI2dlbmVzaXMtaWRcbiAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5hbGdvcmFuZC5vcmcvZG9jcy9yZWZlcmVuY2UvYWxnb3JhbmQtbmV0d29ya3MvbWFpbm5ldC8jZ2VuZXNpcy1oYXNoXG4gICAqL1xuICBtYWlubmV0KCk6IHRoaXMge1xuICAgIHRoaXMuZ2VuZXNpc0lkKE1BSU5ORVRfR0VORVNJU19JRCk7XG4gICAgdGhpcy5nZW5lc2lzSGFzaChNQUlOTkVUX0dFTkVTSVNfSEFTSCk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBnZW5lc2lzIGlkIGFuZCBoYXNoIHRvIHRlc3RuZXQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbkJ1aWxkZXJ9IFRoaXMgdHJhbnNhY3Rpb24gYnVpbGRlci5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5hbGdvcmFuZC5vcmcvZG9jcy9yZWZlcmVuY2UvYWxnb3JhbmQtbmV0d29ya3MvdGVzdG5ldC8jZ2VuZXNpcy1pZFxuICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmFsZ29yYW5kLm9yZy9kb2NzL3JlZmVyZW5jZS9hbGdvcmFuZC1uZXR3b3Jrcy90ZXN0bmV0LyNnZW5lc2lzLWhhc2hcbiAgICovXG4gIHRlc3RuZXQoKTogdGhpcyB7XG4gICAgdGhpcy5nZW5lc2lzSWQoVEVTVE5FVF9HRU5FU0lTX0lEKTtcbiAgICB0aGlzLmdlbmVzaXNIYXNoKFRFU1RORVRfR0VORVNJU19IQVNIKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGdlbmVzaXMgaWQgYW5kIGhhc2ggdG8gYmV0YW5ldC5cbiAgICpcbiAgICogQHJldHVybnMge1RyYW5zYWN0aW9uQnVpbGRlcn0gVGhpcyB0cmFuc2FjdGlvbiBidWlsZGVyLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmFsZ29yYW5kLm9yZy9kb2NzL3JlZmVyZW5jZS9hbGdvcmFuZC1uZXR3b3Jrcy9iZXRhbmV0LyNnZW5lc2lzLWlkXG4gICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIuYWxnb3JhbmQub3JnL2RvY3MvcmVmZXJlbmNlL2FsZ29yYW5kLW5ldHdvcmtzL2JldGFuZXQvI2dlbmVzaXMtaGFzaFxuICAgKi9cbiAgYmV0YW5ldCgpOiB0aGlzIHtcbiAgICB0aGlzLmdlbmVzaXNJZChCRVRBTkVUX0dFTkVTSVNfSUQpO1xuICAgIHRoaXMuZ2VuZXNpc0hhc2goQkVUQU5FVF9HRU5FU0lTX0hBU0gpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgZmlyc3Qgcm91bmQuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSByb3VuZCBUaGUgZmlyc3QgcHJvdG9jb2wgcm91bmQgb24gd2hpY2ggdGhpcyB0eG4gaXMgdmFsaWQuXG4gICAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbkJ1aWxkZXJ9IFRoaXMgdHJhbnNhY3Rpb24gYnVpbGRlci5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5hbGdvcmFuZC5vcmcvZG9jcy9yZWZlcmVuY2UvdHJhbnNhY3Rpb25zL1xuICAgKi9cbiAgZmlyc3RSb3VuZChyb3VuZDogbnVtYmVyKTogdGhpcyB7XG4gICAgdGhpcy52YWxpZGF0ZVZhbHVlKG5ldyBCaWdOdW1iZXIocm91bmQpKTtcblxuICAgIHRoaXMuX2ZpcnN0Um91bmQgPSByb3VuZDtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGxhc3Qgcm91bmQuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSByb3VuZCBUaGUgZmlyc3QgcHJvdG9jb2wgcm91bmQgb24gd2hpY2ggdGhpcyB0eG4gaXMgdmFsaWQuXG4gICAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbkJ1aWxkZXJ9IFRoaXMgdHJhbnNhY3Rpb24gYnVpbGRlci5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5hbGdvcmFuZC5vcmcvZG9jcy9yZWZlcmVuY2UvdHJhbnNhY3Rpb25zL1xuICAgKi9cbiAgbGFzdFJvdW5kKHJvdW5kOiBudW1iZXIpOiB0aGlzIHtcbiAgICB0aGlzLnZhbGlkYXRlVmFsdWUobmV3IEJpZ051bWJlcihyb3VuZCkpO1xuXG4gICAgdGhpcy5fbGFzdFJvdW5kID0gcm91bmQ7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBsZWFzZSBvbiB0aGUgdHJhbnNhY3Rpb24uXG4gICAqXG4gICAqIEEgbGVhc2UgaXMgYSBtdXRleCBvbiB0aGUgdHJhbnNhY3Rpb24gdGhhdCBwcmV2ZW50cyBhbnkgb3RoZXIgdHJhbnNhY3Rpb25cbiAgICogZnJvbSBiZWluZyBzZW50IHdpdGggdGhlIHNhbWUgbGVhc2UgdW50aWwgdGhlIHByaW9yIHRyYW5zYWN0aW9uJ3MgbGFzdFxuICAgKiByb3VuZCBoYXMgcGFzc2VkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGxlYXNlIFRoZSBsZWFzZSB0byBwdXQgdGhlIHRyYW5zYWN0aW9uLlxuICAgKiBAcmV0dXJucyB7VHJhbnNhY3Rpb25CdWlsZGVyfSBUaGlzIHRyYW5zYWN0aW9uIGJ1aWxkZXIuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIuYWxnb3JhbmQub3JnL2RvY3MvcmVmZXJlbmNlL3RyYW5zYWN0aW9ucy9cbiAgICovXG4gIGxlYXNlKGxlYXNlOiBVaW50OEFycmF5KTogdGhpcyB7XG4gICAgdGhpcy5fbGVhc2UgPSBsZWFzZTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIG5vdGUgZm9yIHRoZSB0cmFuc2FjdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtVaW50OEFycmF5fSBub3RlIEFyYml0cmFyeSBkYXRhIGZvciBzZW5kZXIgdG8gc3RvcmUuXG4gICAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbkJ1aWxkZXJ9IFRoaXMgdHJhbnNhY3Rpb24gYnVpbGRlci5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5hbGdvcmFuZC5vcmcvZG9jcy9yZWZlcmVuY2UvdHJhbnNhY3Rpb25zL1xuICAgKi9cbiAgbm90ZShub3RlOiBVaW50OEFycmF5KTogdGhpcyB7XG4gICAgdGhpcy5fbm90ZSA9IG5vdGU7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBhdXRob3JpemVkIGFkZHJlc3MuXG4gICAqXG4gICAqIFRoZSBhdXRob3JpemVkIGFzc2V0IHdpbGwgYmUgdXNlZCB0byBhdXRob3JpemUgYWxsIGZ1dHVyZSB0cmFuc2FjdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7QmFzZUFkZHJlc3N9IGF1dGhvcml6ZXIgVGhlIGFkZHJlc3MgdG8gZGVsZWdhdGUgYXV0aG9yaXphdGlvbiBhdXRob3JpdHkgdG8uXG4gICAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbkJ1aWxkZXJ9IFRoaXMgdHJhbnNhY3Rpb24gYnVpbGRlci5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5hbGdvcmFuZC5vcmcvZG9jcy9yZWZlcmVuY2UvdHJhbnNhY3Rpb25zL1xuICAgKi9cbiAgcmVLZXlUbyhhdXRob3JpemVyOiBCYXNlQWRkcmVzcyk6IHRoaXMge1xuICAgIHRoaXMudmFsaWRhdGVBZGRyZXNzKGF1dGhvcml6ZXIpO1xuICAgIHRoaXMuX3JlS2V5VG8gPSBhdXRob3JpemVyLmFkZHJlc3M7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZUFkZHJlc3MoeyBhZGRyZXNzIH06IEJhc2VBZGRyZXNzKTogdm9pZCB7XG4gICAgaWYgKCFhbGdvc2RrLmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MpKSB7XG4gICAgICB0aHJvdyBuZXcgQWRkcmVzc1ZhbGlkYXRpb25FcnJvcihhZGRyZXNzKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGJ1aWxkSW1wbGVtZW50YXRpb24oKTogUHJvbWlzZTxUcmFuc2FjdGlvbj4ge1xuICAgIHRoaXMudHJhbnNhY3Rpb24uc2V0QWxnb1RyYW5zYWN0aW9uKHRoaXMuYnVpbGRBbGdvVHhuKCkpO1xuICAgIHRoaXMudHJhbnNhY3Rpb24uc2V0VHJhbnNhY3Rpb25UeXBlKHRoaXMudHJhbnNhY3Rpb25UeXBlKTtcblxuICAgIHRoaXMudHJhbnNhY3Rpb24uc2lnbih0aGlzLl9rZXlQYWlycyk7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb24ubG9hZElucHV0c0FuZE91dHB1dHMoKTtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNhY3Rpb247XG4gIH1cblxuICAvKipcbiAgICogQnVpbGRzIHRoZSBhbGdvcmFuZCB0cmFuc2FjdGlvbi5cbiAgICovXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBidWlsZEFsZ29UeG4oKTogYWxnb3Nkay5UcmFuc2FjdGlvbjtcblxuICAvKipcbiAgICogVGhlIHRyYW5zYWN0aW9uIHR5cGUuXG4gICAqL1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0IHRyYW5zYWN0aW9uVHlwZSgpOiBUcmFuc2FjdGlvblR5cGU7XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBmcm9tSW1wbGVtZW50YXRpb24ocmF3VHJhbnNhY3Rpb246IFVpbnQ4QXJyYXkgfCBzdHJpbmcpOiBUcmFuc2FjdGlvbiB7XG4gICAgY29uc3QgZGVjb2RlZFR4biA9IFV0aWxzLmRlY29kZUFsZ29UeG4ocmF3VHJhbnNhY3Rpb24pO1xuICAgIGNvbnN0IGFsZ29zZGtUeG4gPSBkZWNvZGVkVHhuLnR4bjtcblxuICAgIGlmIChkZWNvZGVkVHhuLnNpZ25lZCkge1xuICAgICAgdGhpcy5fdHJhbnNhY3Rpb24uc2lnbmVkVHJhbnNhY3Rpb24gPSBkZWNvZGVkVHhuLnJhd1RyYW5zYWN0aW9uO1xuICAgICAgaWYgKGRlY29kZWRUeG4uc2lnbmVycykge1xuICAgICAgICB0aGlzLnNldFNpZ25lcnMoZGVjb2RlZFR4bi5zaWduZXJzKTtcbiAgICAgIH1cbiAgICAgIGlmIChkZWNvZGVkVHhuLnNpZ25lZEJ5KSB7XG4gICAgICAgIHRoaXMuX3RyYW5zYWN0aW9uLnNpZ25lZEJ5ID0gZGVjb2RlZFR4bi5zaWduZWRCeTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zZW5kZXIoeyBhZGRyZXNzOiBhbGdvc2RrLmVuY29kZUFkZHJlc3MoYWxnb3Nka1R4bi5mcm9tLnB1YmxpY0tleSkgfSk7XG4gICAgdGhpcy5faXNGbGF0RmVlID0gdHJ1ZTtcbiAgICB0aGlzLl9mZWUgPSBhbGdvc2RrVHhuLmZlZTtcbiAgICB0aGlzLl9nZW5lc2lzSGFzaCA9IGFsZ29zZGtUeG4uZ2VuZXNpc0hhc2gudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuICAgIHRoaXMuX2dlbmVzaXNJZCA9IGFsZ29zZGtUeG4uZ2VuZXNpc0lEO1xuICAgIHRoaXMuX2ZpcnN0Um91bmQgPSBhbGdvc2RrVHhuLmZpcnN0Um91bmQ7XG4gICAgdGhpcy5fbGFzdFJvdW5kID0gYWxnb3Nka1R4bi5sYXN0Um91bmQ7XG4gICAgdGhpcy5fbGVhc2UgPSBhbGdvc2RrVHhuLmxlYXNlO1xuICAgIHRoaXMuX25vdGUgPSBhbGdvc2RrVHhuLm5vdGU7XG4gICAgdGhpcy5fcmVLZXlUbyA9IGFsZ29zZGtUeG4ucmVLZXlUbyA/IGFsZ29zZGsuZW5jb2RlQWRkcmVzcyhhbGdvc2RrVHhuLnJlS2V5VG8ucHVibGljS2V5KSA6IHVuZGVmaW5lZDtcblxuICAgIHRoaXMuX3RyYW5zYWN0aW9uLnNldEFsZ29UcmFuc2FjdGlvbihhbGdvc2RrVHhuKTtcblxuICAgIHJldHVybiB0aGlzLl90cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgc2lnbkltcGxlbWVudGF0aW9uKHsga2V5IH06IEJhc2VLZXkpOiBUcmFuc2FjdGlvbiB7XG4gICAgY29uc3QgYnVmZktleSA9IFV0aWxzLmRlY29kZVNlZWQoa2V5KTtcbiAgICBjb25zdCBrZXlwYWlyID0gbmV3IEtleVBhaXIoeyBwcnY6IEJ1ZmZlci5mcm9tKGJ1ZmZLZXkuc2VlZCkudG9TdHJpbmcoJ2hleCcpIH0pO1xuICAgIHRoaXMuX2tleVBhaXJzLnB1c2goa2V5cGFpcik7XG5cbiAgICByZXR1cm4gdGhpcy5fdHJhbnNhY3Rpb247XG4gIH1cblxuICBudW1iZXJPZlNpZ25lcnMobnVtOiBudW1iZXIpOiB0aGlzIHtcbiAgICB0aGlzLl90cmFuc2FjdGlvbi5zZXROdW1iZXJPZlJlcXVpcmVkU2lnbmVycyhudW0pO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzZXRTaWduZXJzKGFkZHJzOiBzdHJpbmcgfCBzdHJpbmdbXSk6IHRoaXMge1xuICAgIGNvbnN0IHNpZ25lcnMgPSBhZGRycyBpbnN0YW5jZW9mIEFycmF5ID8gYWRkcnMgOiBbYWRkcnNdO1xuICAgIHNpZ25lcnMuZm9yRWFjaCgoYWRkcmVzcykgPT4gdGhpcy52YWxpZGF0ZUFkZHJlc3MoeyBhZGRyZXNzOiBhZGRyZXNzIH0pKTtcbiAgICB0aGlzLl90cmFuc2FjdGlvbi5zaWduZXJzID0gc2lnbmVycztcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBudW1iZXIgb2Ygc2lnbmVycyByZXF1aXJlZCB0byBzaWduIHRoZSB0cmFuc2FjdGlvbi5cbiAgICpcbiAgICogVGhlIG51bWJlciBvZiBzaWduZXJzIGNhbm5vdCBiZSBzZXQgdG8gYSBuZWdhdGl2ZSB2YWx1ZS5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG51bWJlciBvZiBzaWduZXJzLlxuICAgKiBAcmV0dXJucyB7VHJhbnNhY3Rpb25CdWlsZGVyfSBUaGlzIHRyYW5zYWN0aW9uIGJ1aWxkZXIuXG4gICAqL1xuICBudW1iZXJPZlJlcXVpcmVkU2lnbmVycyhuOiBudW1iZXIpOiB0aGlzIHtcbiAgICBpZiAobiA8IDApIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoYE51bWJlciBvZiBzaWduZXJzOiAnJHtufScgY2Fubm90IGJlIG5lZ2F0aXZlYCk7XG4gICAgfVxuXG4gICAgdGhpcy5fdHJhbnNhY3Rpb24uc2V0TnVtYmVyT2ZSZXF1aXJlZFNpZ25lcnMobik7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdGRvY1xuICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmFsZ29yYW5kLm9yZy9kb2NzL2ZlYXR1cmVzL2FjY291bnRzLyN0cmFuc2Zvcm1hdGlvbi1wcml2YXRlLWtleS10by1iYXNlNjQtcHJpdmF0ZS1rZXlcbiAgICovXG4gIHZhbGlkYXRlS2V5KHsga2V5IH06IEJhc2VLZXkpOiB2b2lkIHtcbiAgICBsZXQgaXNWYWxpZFByaXZhdGVLZXlGcm9tQnl0ZXM7XG4gICAgY29uc3QgaXNWYWxpZFByaXZhdGVLZXlGcm9tSGV4ID0gaXNWYWxpZEVkMjU1MTlTZWVkKGtleSk7XG4gICAgY29uc3QgaXNWYWxpZFByaXZhdGVLZXlGcm9tQmFzZTY0ID0gaXNWYWxpZEVkMjU1MTlTZWVkKEJ1ZmZlci5mcm9tKGtleSwgJ2Jhc2U2NCcpLnRvU3RyaW5nKCdoZXgnKSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRlY29kZWRTZWVkID0gVXRpbHMuZGVjb2RlU2VlZChrZXkpO1xuICAgICAgaXNWYWxpZFByaXZhdGVLZXlGcm9tQnl0ZXMgPSBpc1ZhbGlkRWQyNTUxOVNlZWQoQnVmZmVyLmZyb20oZGVjb2RlZFNlZWQuc2VlZCkudG9TdHJpbmcoJ2hleCcpKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlzVmFsaWRQcml2YXRlS2V5RnJvbUJ5dGVzID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKCFpc1ZhbGlkUHJpdmF0ZUtleUZyb21CeXRlcyAmJiAhaXNWYWxpZFByaXZhdGVLZXlGcm9tSGV4ICYmICFpc1ZhbGlkUHJpdmF0ZUtleUZyb21CYXNlNjQpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoYEtleSB2YWxpZGF0aW9uIGZhaWxlZGApO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZVJhd1RyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uOiBVaW50OEFycmF5IHwgc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgZGVjb2RlZFR4biA9IFV0aWxzLmRlY29kZUFsZ29UeG4ocmF3VHJhbnNhY3Rpb24pO1xuICAgIGNvbnN0IGFsZ29UeG4gPSBkZWNvZGVkVHhuLnR4bjtcblxuICAgIGNvbnN0IHZhbGlkYXRpb25SZXN1bHQgPSBCYXNlVHJhbnNhY3Rpb25TY2hlbWEudmFsaWRhdGUoe1xuICAgICAgZmVlOiBhbGdvVHhuPy5mZWUsXG4gICAgICBmaXJzdFJvdW5kOiBhbGdvVHhuPy5maXJzdFJvdW5kLFxuICAgICAgZ2VuZXNpc0hhc2g6IGFsZ29UeG4/LmdlbmVzaXNIYXNoLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgICAgIGxhc3RSb3VuZDogYWxnb1R4bj8ubGFzdFJvdW5kLFxuICAgICAgc2VuZGVyOiBhbGdvVHhuID8gYWxnb3Nkay5lbmNvZGVBZGRyZXNzKGFsZ29UeG4uZnJvbS5wdWJsaWNLZXkpIDogdW5kZWZpbmVkLFxuICAgICAgZ2VuZXNpc0lkOiBhbGdvVHhuPy5nZW5lc2lzSUQsXG4gICAgICBsZWFzZTogYWxnb1R4bj8ubGVhc2UsXG4gICAgICBub3RlOiBhbGdvVHhuPy5ub3RlLFxuICAgICAgcmVLZXlUbzogYWxnb1R4bj8ucmVLZXlUbyA/IGFsZ29zZGsuZW5jb2RlQWRkcmVzcyhhbGdvVHhuLnJlS2V5VG8ucHVibGljS2V5KSA6IHVuZGVmaW5lZCxcbiAgICB9KTtcblxuICAgIGlmICh2YWxpZGF0aW9uUmVzdWx0LmVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoYFRyYW5zYWN0aW9uIHZhbGlkYXRpb24gZmFpbGVkOiAke3ZhbGlkYXRpb25SZXN1bHQuZXJyb3IubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVUcmFuc2FjdGlvbihfOiBUcmFuc2FjdGlvbik6IHZvaWQge1xuICAgIHRoaXMudmFsaWRhdGVCYXNlRmllbGRzKFxuICAgICAgdGhpcy5fZmVlLFxuICAgICAgdGhpcy5fZmlyc3RSb3VuZCxcbiAgICAgIHRoaXMuX2dlbmVzaXNIYXNoLFxuICAgICAgdGhpcy5fbGFzdFJvdW5kLFxuICAgICAgdGhpcy5fc2VuZGVyLFxuICAgICAgdGhpcy5fZ2VuZXNpc0lkLFxuICAgICAgdGhpcy5fbGVhc2UsXG4gICAgICB0aGlzLl9ub3RlLFxuICAgICAgdGhpcy5fcmVLZXlUb1xuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHZhbGlkYXRlQmFzZUZpZWxkcyhcbiAgICBmZWU6IG51bWJlcixcbiAgICBmaXJzdFJvdW5kOiBudW1iZXIsXG4gICAgZ2VuZXNpc0hhc2g6IHN0cmluZyxcbiAgICBsYXN0Um91bmQ6IG51bWJlcixcbiAgICBzZW5kZXI6IHN0cmluZyxcbiAgICBnZW5lc2lzSWQ6IHN0cmluZyxcbiAgICBsZWFzZTogVWludDhBcnJheSB8IHVuZGVmaW5lZCxcbiAgICBub3RlOiBVaW50OEFycmF5IHwgdW5kZWZpbmVkLFxuICAgIHJlS2V5VG86IHN0cmluZyB8IHVuZGVmaW5lZFxuICApOiB2b2lkIHtcbiAgICBjb25zdCB2YWxpZGF0aW9uUmVzdWx0ID0gQmFzZVRyYW5zYWN0aW9uU2NoZW1hLnZhbGlkYXRlKHtcbiAgICAgIGZlZSxcbiAgICAgIGZpcnN0Um91bmQsXG4gICAgICBnZW5lc2lzSGFzaCxcbiAgICAgIGxhc3RSb3VuZCxcbiAgICAgIHNlbmRlcixcbiAgICAgIGdlbmVzaXNJZCxcbiAgICAgIGxlYXNlLFxuICAgICAgbm90ZSxcbiAgICAgIHJlS2V5VG8sXG4gICAgfSk7XG5cbiAgICBpZiAodmFsaWRhdGlvblJlc3VsdC5lcnJvcikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKGBUcmFuc2FjdGlvbiB2YWxpZGF0aW9uIGZhaWxlZDogJHt2YWxpZGF0aW9uUmVzdWx0LmVycm9yLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZVZhbHVlKHZhbHVlOiBCaWdOdW1iZXIpOiB2b2lkIHtcbiAgICBpZiAodmFsdWUuaXNMZXNzVGhhbigwKSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignVmFsdWUgY2Fubm90IGJlIGxlc3MgdGhhbiB6ZXJvJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBnZXQgdHJhbnNhY3Rpb24oKTogVHJhbnNhY3Rpb24ge1xuICAgIHJldHVybiB0aGlzLl90cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgc2V0IHRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbikge1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uID0gdHJhbnNhY3Rpb247XG4gIH1cblxuICAvKipcbiAgICogQ29udmVuaWVuY2UgbWV0aG9kIHRvIHJldHJpZXZlIHRoZSBhbGdvc2RrIHN1Z2dlc3RlZCBwYXJhbWV0ZXJzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7YWxnb3Nkay5TdWdnZXN0ZWRQYXJhbXN9IFRoZSBhbGdvc2RrIHN1Z2dlc3RlZCBwYXJhbWV0ZXJzLlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCBzdWdnZXN0ZWRQYXJhbXMoKTogYWxnb3Nkay5TdWdnZXN0ZWRQYXJhbXMge1xuICAgIHJldHVybiB7XG4gICAgICBmbGF0RmVlOiB0aGlzLl9pc0ZsYXRGZWUsXG4gICAgICBmZWU6IHRoaXMuX2ZlZSxcbiAgICAgIGZpcnN0Um91bmQ6IHRoaXMuX2ZpcnN0Um91bmQsXG4gICAgICBsYXN0Um91bmQ6IHRoaXMuX2xhc3RSb3VuZCxcbiAgICAgIGdlbmVzaXNJRDogdGhpcy5fZ2VuZXNpc0lkLFxuICAgICAgZ2VuZXNpc0hhc2g6IHRoaXMuX2dlbmVzaXNIYXNoLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvdHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxzREFBOEI7QUFHOUIscUVBQWtFO0FBQ2xFLHVEQUFvRDtBQUVwRCxpRUFBOEQ7QUFDOUQsb0RBQTRCO0FBQzVCLG1EQUFtRjtBQUVuRixNQUFhLHlCQUEwQixTQUFRLHdDQUE2QjtJQUMxRSxZQUFZLFdBQWlDO1FBQzNDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLE9BQU8sSUFBSSxpQ0FBZSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQsdUJBQXVCO1FBQ3JCLE9BQU8sSUFBSSwyQ0FBb0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELHlCQUF5QjtRQUN2QixPQUFPLElBQUksK0NBQXNCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRCxJQUFJLENBQUMsTUFBMkI7UUFDOUIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4QyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXJCLE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFTyxVQUFVLENBQUMsTUFBMkI7UUFDNUMsTUFBTSxTQUFTLEdBQUcsZUFBSyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM5QyxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDO1FBQzlCLElBQUksT0FBTyxDQUFDLElBQUksSUFBSSxpQkFBTyxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUU7WUFDbEQsT0FBTyxJQUFJLENBQUMsOEJBQThCLEVBQUUsQ0FBQztTQUM5QzthQUFNLElBQUksT0FBTyxDQUFDLElBQUksSUFBSSxpQkFBTyxDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUU7WUFDdEQsT0FBTyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztTQUNsQzthQUFNLElBQUksT0FBTyxDQUFDLElBQUksSUFBSSxpQkFBTyxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUU7WUFDeEQsT0FBTyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztTQUN2QzthQUFNO1lBQ0wsTUFBTSxJQUFJLHVCQUFZLENBQUMscUVBQXFFLENBQUMsQ0FBQztTQUMvRjtJQUNILENBQUM7SUFFTSw4QkFBOEI7UUFDbkMsT0FBTyxJQUFJLCtDQUFzQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN0RCxDQUFDO0NBQ0Y7QUF6Q0QsOERBeUNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFsZ29zZGsgZnJvbSAnYWxnb3Nkayc7XG5pbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5cbmltcG9ydCB7IEtleVJlZ2lzdHJhdGlvbkJ1aWxkZXIgfSBmcm9tICcuL2tleVJlZ2lzdHJhdGlvbkJ1aWxkZXInO1xuaW1wb3J0IHsgVHJhbnNmZXJCdWlsZGVyIH0gZnJvbSAnLi90cmFuc2ZlckJ1aWxkZXInO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi90cmFuc2FjdGlvbkJ1aWxkZXInO1xuaW1wb3J0IHsgQXNzZXRUcmFuc2ZlckJ1aWxkZXIgfSBmcm9tICcuL2Fzc2V0VHJhbnNmZXJCdWlsZGVyJztcbmltcG9ydCBVdGlscyBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IEJhc2VUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5LCBOb3RTdXBwb3J0ZWQgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5cbmV4cG9ydCBjbGFzcyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5IGV4dGVuZHMgQmFzZVRyYW5zYWN0aW9uQnVpbGRlckZhY3Rvcnkge1xuICBjb25zdHJ1Y3RvcihfY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihfY29pbkNvbmZpZyk7XG4gIH1cblxuICBnZXRUcmFuc2ZlckJ1aWxkZXIoKTogVHJhbnNmZXJCdWlsZGVyIHtcbiAgICByZXR1cm4gbmV3IFRyYW5zZmVyQnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIGdldEFzc2V0VHJhbnNmZXJCdWlsZGVyKCk6IEFzc2V0VHJhbnNmZXJCdWlsZGVyIHtcbiAgICByZXR1cm4gbmV3IEFzc2V0VHJhbnNmZXJCdWlsZGVyKHRoaXMuX2NvaW5Db25maWcpO1xuICB9XG5cbiAgZ2V0S2V5UmVnaXN0cmF0aW9uQnVpbGRlcigpOiBLZXlSZWdpc3RyYXRpb25CdWlsZGVyIHtcbiAgICByZXR1cm4gbmV3IEtleVJlZ2lzdHJhdGlvbkJ1aWxkZXIodGhpcy5fY29pbkNvbmZpZyk7XG4gIH1cblxuICBmcm9tKHJhd1R4bjogc3RyaW5nIHwgVWludDhBcnJheSk6IFRyYW5zYWN0aW9uQnVpbGRlciB7XG4gICAgY29uc3QgYnVpbGRlciA9IHRoaXMuZ2V0QnVpbGRlcihyYXdUeG4pO1xuICAgIGJ1aWxkZXIuZnJvbShyYXdUeG4pO1xuXG4gICAgcmV0dXJuIGJ1aWxkZXI7XG4gIH1cblxuICBwcml2YXRlIGdldEJ1aWxkZXIocmF3VHhuOiBzdHJpbmcgfCBVaW50OEFycmF5KTogVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgICBjb25zdCBkZWNvZGVUeG4gPSBVdGlscy5kZWNvZGVBbGdvVHhuKHJhd1R4bik7XG4gICAgY29uc3QgYWxnb1R4biA9IGRlY29kZVR4bi50eG47XG4gICAgaWYgKGFsZ29UeG4udHlwZSA9PSBhbGdvc2RrLlRyYW5zYWN0aW9uVHlwZS5rZXlyZWcpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFdhbGxldEluaXRpYWxpemF0aW9uQnVpbGRlcigpO1xuICAgIH0gZWxzZSBpZiAoYWxnb1R4bi50eXBlID09IGFsZ29zZGsuVHJhbnNhY3Rpb25UeXBlLnBheSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0VHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgfSBlbHNlIGlmIChhbGdvVHhuLnR5cGUgPT0gYWxnb3Nkay5UcmFuc2FjdGlvblR5cGUuYXhmZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEFzc2V0VHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWQoJ1RyYW5zYWN0aW9uIGNhbm5vdCBiZSBwYXJzZWQgb3IgaGFzIGFuIHVuc3VwcG9ydGVkIHRyYW5zYWN0aW9uIHR5cGUnKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0V2FsbGV0SW5pdGlhbGl6YXRpb25CdWlsZGVyKCk6IEtleVJlZ2lzdHJhdGlvbkJ1aWxkZXIge1xuICAgIHJldHVybiBuZXcgS2V5UmVnaXN0cmF0aW9uQnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKTtcbiAgfVxufVxuIl19
@@ -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"}