@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.
Files changed (67) hide show
  1. package/.eslintignore +5 -0
  2. package/.mocharc.yml +8 -0
  3. package/CHANGELOG.md +854 -0
  4. package/LICENSE +191 -0
  5. package/README.md +30 -0
  6. package/dist/src/algo.d.ts +291 -0
  7. package/dist/src/algo.d.ts.map +1 -0
  8. package/dist/src/algo.js +637 -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 +6 -0
  16. package/dist/src/index.d.ts.map +1 -0
  17. package/dist/src/index.js +45 -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 +45 -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 +61 -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 +91 -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 +111 -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 +250 -0
  42. package/dist/src/lib/transactionBuilder.d.ts +210 -0
  43. package/dist/src/lib/transactionBuilder.d.ts.map +1 -0
  44. package/dist/src/lib/transactionBuilder.js +389 -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 +254 -0
  55. package/dist/src/lib/utils.d.ts.map +1 -0
  56. package/dist/src/lib/utils.js +563 -0
  57. package/dist/src/register.d.ts +3 -0
  58. package/dist/src/register.d.ts.map +1 -0
  59. package/dist/src/register.js +15 -0
  60. package/dist/src/seedValidator.d.ts +31 -0
  61. package/dist/src/seedValidator.d.ts.map +1 -0
  62. package/dist/src/seedValidator.js +103 -0
  63. package/dist/src/talgo.d.ts +12 -0
  64. package/dist/src/talgo.d.ts.map +1 -0
  65. package/dist/src/talgo.js +20 -0
  66. package/package.json +63 -0
  67. 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"}