@bitgo-beta/sdk-coin-xtz 1.4.3-alpha.40 → 1.4.3-alpha.401

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/.mocharc.yml +1 -1
  2. package/CHANGELOG.md +678 -0
  3. package/package.json +12 -11
  4. package/dist/src/index.d.ts +0 -5
  5. package/dist/src/index.d.ts.map +0 -1
  6. package/dist/src/index.js +0 -30
  7. package/dist/src/lib/address.d.ts +0 -8
  8. package/dist/src/lib/address.d.ts.map +0 -1
  9. package/dist/src/lib/address.js +0 -10
  10. package/dist/src/lib/iface.d.ts +0 -115
  11. package/dist/src/lib/iface.d.ts.map +0 -1
  12. package/dist/src/lib/iface.js +0 -3
  13. package/dist/src/lib/index.d.ts +0 -10
  14. package/dist/src/lib/index.d.ts.map +0 -1
  15. package/dist/src/lib/index.js +0 -37
  16. package/dist/src/lib/keyPair.d.ts +0 -40
  17. package/dist/src/lib/keyPair.d.ts.map +0 -1
  18. package/dist/src/lib/keyPair.js +0 -135
  19. package/dist/src/lib/multisigUtils.d.ts +0 -134
  20. package/dist/src/lib/multisigUtils.d.ts.map +0 -1
  21. package/dist/src/lib/multisigUtils.js +0 -1180
  22. package/dist/src/lib/transaction.d.ts +0 -119
  23. package/dist/src/lib/transaction.d.ts.map +0 -1
  24. package/dist/src/lib/transaction.js +0 -315
  25. package/dist/src/lib/transactionBuilder.d.ts +0 -171
  26. package/dist/src/lib/transactionBuilder.d.ts.map +0 -1
  27. package/dist/src/lib/transactionBuilder.js +0 -453
  28. package/dist/src/lib/transferBuilder.d.ts +0 -24
  29. package/dist/src/lib/transferBuilder.d.ts.map +0 -1
  30. package/dist/src/lib/transferBuilder.js +0 -64
  31. package/dist/src/lib/utils.d.ts +0 -265
  32. package/dist/src/lib/utils.d.ts.map +0 -1
  33. package/dist/src/lib/utils.js +0 -460
  34. package/dist/src/register.d.ts +0 -3
  35. package/dist/src/register.d.ts.map +0 -1
  36. package/dist/src/register.js +0 -11
  37. package/dist/src/txtz.d.ts +0 -13
  38. package/dist/src/txtz.d.ts.map +0 -1
  39. package/dist/src/txtz.js +0 -14
  40. package/dist/src/xtz.d.ts +0 -80
  41. package/dist/src/xtz.d.ts.map +0 -1
  42. package/dist/src/xtz.js +0 -189
@@ -1,119 +0,0 @@
1
- import { BaseKey, BaseTransaction } from '@bitgo-beta/sdk-core';
2
- import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
3
- import { IndexedSignature, ParsedTransaction } from './iface';
4
- import { KeyPair } from './keyPair';
5
- /**
6
- * Tezos transaction model.
7
- */
8
- export declare class Transaction extends BaseTransaction {
9
- private _parsedTransaction?;
10
- private _encodedTransaction?;
11
- private _source;
12
- private _delegate?;
13
- private _forwarderDestination?;
14
- private _publicKeyToReveal?;
15
- private _owners;
16
- /**
17
- * Public constructor.
18
- *
19
- * @param {Readonly<CoinConfig>} coinConfig
20
- */
21
- constructor(coinConfig: Readonly<CoinConfig>);
22
- /**
23
- * Initialize the transaction fields based on another serialized transaction.
24
- *
25
- * @param serializedTransaction Transaction in broadcast format.
26
- */
27
- initFromSerializedTransaction(serializedTransaction: string): Promise<void>;
28
- /**
29
- * Initialize the transaction fields based on another parsed transaction.
30
- *
31
- * @param {ParsedTransaction} parsedTransaction A Tezos transaction object
32
- * @param {string} transactionId The transaction id of the parsedTransaction if it is signed
33
- */
34
- initFromParsedTransaction(parsedTransaction: ParsedTransaction, transactionId?: string): Promise<void>;
35
- /**
36
- * Record the most important fields from an origination operation.
37
- *
38
- * @param {Operation} operation An operation object from a Tezos transaction
39
- * @param {number} index The origination operation index in the transaction. Used to calculate the
40
- * originated address
41
- */
42
- private recordOriginationOpFields;
43
- /**
44
- * Record the most important fields from a reveal operation.
45
- *
46
- * @param {RevealOp} operation A reveal operation object from a Tezos transaction
47
- */
48
- private recordRevealOpFields;
49
- /**
50
- * Record the most important fields for a Transaction operation.
51
- *
52
- * @param {TransactionOp} operation A transaction object from a Tezos operation
53
- */
54
- private recordTransactionOpFields;
55
- /**
56
- * Sign the transaction with the provided key. It does not check if the signer is allowed to sign
57
- * it or not.
58
- *
59
- * @param {KeyPair} keyPair The key to sign the transaction with
60
- */
61
- sign(keyPair: KeyPair): Promise<void>;
62
- /**
63
- * Update the list of signatures for a multisig transaction operation.
64
- *
65
- * @param {IndexedSignature[]} signatures List of signatures and the index they should be put on
66
- * in the multisig transfer
67
- * @param {number} index The transfer index to add the signatures to
68
- */
69
- addTransferSignature(signatures: IndexedSignature[], index: number): Promise<void>;
70
- /** @inheritdoc */
71
- canSign(key: BaseKey): boolean;
72
- /** @inheritdoc */
73
- toJson(): ParsedTransaction;
74
- /** @inheritdoc */
75
- toBroadcastFormat(): string;
76
- /**
77
- * Get the transaction source if it is available.
78
- *
79
- * @returns {string} Source of the transaction
80
- */
81
- get source(): string;
82
- /**
83
- * Get the transaction delegation address if it is available.
84
- *
85
- * @returns {string} transaction delegation address
86
- */
87
- get delegate(): string | undefined;
88
- /**
89
- * Get the public key revealed by the transaction if it exists
90
- *
91
- * @returns {string} public key
92
- */
93
- get publicKeyToReveal(): string | undefined;
94
- /**
95
- * Get the destination of an address initialization transaction if it exists
96
- *
97
- * @returns {string} forwarder destination
98
- */
99
- get forwarderDestination(): string | undefined;
100
- get owners(): string[];
101
- /**
102
- * Get the signatures for the given multisig transfer,
103
- *
104
- * @param {number} transferIndex The transfer script index in the Tezos transaction
105
- * @returns {IndexedSignature[]} A list of signatures with their index inside the multisig transfer
106
- * script
107
- */
108
- getTransferSignatures(transferIndex?: number): IndexedSignature[];
109
- /**
110
- * Get the list of index per tezos transaction type. This is useful to locate specific operations
111
- * within the transaction and verify or sign them.
112
- *
113
- * @returns {{[p: string]: number[]}} List of indexes where the key is the transaction kind
114
- */
115
- getIndexesByTransactionType(): {
116
- [kind: string]: number[];
117
- };
118
- }
119
- //# sourceMappingURL=transaction.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../../src/lib/transaction.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,eAAe,EAIhB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAG7D,OAAO,EAAE,gBAAgB,EAAiB,iBAAiB,EAA2B,MAAM,SAAS,CAAC;AACtG,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC;;GAEG;AACH,qBAAa,WAAY,SAAQ,eAAe;IAC9C,OAAO,CAAC,kBAAkB,CAAC,CAAoB;IAC/C,OAAO,CAAC,mBAAmB,CAAC,CAAS;IACrC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,SAAS,CAAC,CAAS;IAC3B,OAAO,CAAC,qBAAqB,CAAC,CAAS;IACvC,OAAO,CAAC,kBAAkB,CAAC,CAAS;IACpC,OAAO,CAAC,OAAO,CAAW;IAE1B;;;;OAIG;gBACS,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC;IAK5C;;;;OAIG;IACG,6BAA6B,CAAC,qBAAqB,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBjF;;;;;OAKG;IACG,yBAAyB,CAAC,iBAAiB,EAAE,iBAAiB,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAwC5G;;;;;;OAMG;YACW,yBAAyB;IAwBvC;;;;OAIG;IACH,OAAO,CAAC,oBAAoB;IAU5B;;;;OAIG;IACH,OAAO,CAAC,yBAAyB;IA6BjC;;;;;OAKG;IACG,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAmB3C;;;;;;OAMG;IACG,oBAAoB,CAAC,UAAU,EAAE,gBAAgB,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQxF,kBAAkB;IAClB,OAAO,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO;IAK9B,kBAAkB;IAClB,MAAM,IAAI,iBAAiB;IAO3B,kBAAkB;IAClB,iBAAiB,IAAI,MAAM;IAO3B;;;;OAIG;IACH,IAAI,MAAM,IAAI,MAAM,CAKnB;IAED;;;;OAIG;IACH,IAAI,QAAQ,IAAI,MAAM,GAAG,SAAS,CAEjC;IAED;;;;OAIG;IACH,IAAI,iBAAiB,IAAI,MAAM,GAAG,SAAS,CAE1C;IAED;;;;OAIG;IACH,IAAI,oBAAoB,IAAI,MAAM,GAAG,SAAS,CAE7C;IAED,IAAI,MAAM,IAAI,MAAM,EAAE,CAErB;IAED;;;;;;OAMG;IACH,qBAAqB,CAAC,aAAa,SAAI,GAAG,gBAAgB,EAAE;IAO5D;;;;;OAKG;IACH,2BAA2B,IAAI;QAAE,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;KAAE;CAW5D"}
@@ -1,315 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
- }) : (function(o, m, k, k2) {
6
- if (k2 === undefined) k2 = k;
7
- o[k2] = m[k];
8
- }));
9
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
- Object.defineProperty(o, "default", { enumerable: true, value: v });
11
- }) : function(o, v) {
12
- o["default"] = v;
13
- });
14
- var __importStar = (this && this.__importStar) || function (mod) {
15
- if (mod && mod.__esModule) return mod;
16
- var result = {};
17
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
- __setModuleDefault(result, mod);
19
- return result;
20
- };
21
- var __importDefault = (this && this.__importDefault) || function (mod) {
22
- return (mod && mod.__esModule) ? mod : { "default": mod };
23
- };
24
- Object.defineProperty(exports, "__esModule", { value: true });
25
- exports.Transaction = void 0;
26
- const sdk_core_1 = require("@bitgo-beta/sdk-core");
27
- const local_forging_1 = require("@taquito/local-forging");
28
- const bignumber_js_1 = __importDefault(require("bignumber.js"));
29
- const multisigUtils_1 = require("./multisigUtils");
30
- const Utils = __importStar(require("./utils"));
31
- /**
32
- * Tezos transaction model.
33
- */
34
- class Transaction extends sdk_core_1.BaseTransaction {
35
- /**
36
- * Public constructor.
37
- *
38
- * @param {Readonly<CoinConfig>} coinConfig
39
- */
40
- constructor(coinConfig) {
41
- super(coinConfig);
42
- this._owners = [];
43
- }
44
- /**
45
- * Initialize the transaction fields based on another serialized transaction.
46
- *
47
- * @param serializedTransaction Transaction in broadcast format.
48
- */
49
- async initFromSerializedTransaction(serializedTransaction) {
50
- this._encodedTransaction = serializedTransaction;
51
- try {
52
- const parsedTransaction = await local_forging_1.localForger.parse(serializedTransaction);
53
- await this.initFromParsedTransaction(parsedTransaction);
54
- }
55
- catch (e) {
56
- // If it throws, it is possible the serialized transaction is signed, which is not supported
57
- // by local-forging. Try extracting the last 64 bytes and parse it again.
58
- const unsignedSerializedTransaction = serializedTransaction.slice(0, -128);
59
- const signature = serializedTransaction.slice(-128);
60
- if (Utils.isValidSignature(signature)) {
61
- throw new sdk_core_1.ParseTransactionError('Invalid transaction');
62
- }
63
- // TODO: encode the signature and save it in _signature
64
- const parsedTransaction = await local_forging_1.localForger.parse(unsignedSerializedTransaction);
65
- const transactionId = await Utils.calculateTransactionId(serializedTransaction);
66
- await this.initFromParsedTransaction(parsedTransaction, transactionId);
67
- }
68
- }
69
- /**
70
- * Initialize the transaction fields based on another parsed transaction.
71
- *
72
- * @param {ParsedTransaction} parsedTransaction A Tezos transaction object
73
- * @param {string} transactionId The transaction id of the parsedTransaction if it is signed
74
- */
75
- async initFromParsedTransaction(parsedTransaction, transactionId) {
76
- if (!this._encodedTransaction) {
77
- this._encodedTransaction = await local_forging_1.localForger.forge(parsedTransaction);
78
- }
79
- if (transactionId) {
80
- // If the transaction id is passed, save it and clean up the entries since they will be
81
- // recalculated
82
- this._id = transactionId;
83
- this._inputs = [];
84
- this._outputs = [];
85
- }
86
- else {
87
- this._id = '';
88
- }
89
- this._parsedTransaction = parsedTransaction;
90
- let operationIndex = 0;
91
- for (const operation of parsedTransaction.contents) {
92
- if (this._source && this._source !== operation.source) {
93
- throw new sdk_core_1.InvalidTransactionError('Source must be the same for every operation but it changed from ' + this._source + ' to ' + operation.source);
94
- }
95
- else {
96
- this._source = operation.source;
97
- }
98
- switch (operation.kind) {
99
- case local_forging_1.CODEC.OP_ORIGINATION:
100
- await this.recordOriginationOpFields(operation, operationIndex);
101
- operationIndex++;
102
- break;
103
- case local_forging_1.CODEC.OP_REVEAL:
104
- this.recordRevealOpFields(operation);
105
- break;
106
- case local_forging_1.CODEC.OP_TRANSACTION:
107
- this.recordTransactionOpFields(operation);
108
- break;
109
- default:
110
- break;
111
- }
112
- }
113
- }
114
- /**
115
- * Record the most important fields from an origination operation.
116
- *
117
- * @param {Operation} operation An operation object from a Tezos transaction
118
- * @param {number} index The origination operation index in the transaction. Used to calculate the
119
- * originated address
120
- */
121
- async recordOriginationOpFields(operation, index) {
122
- const originationData = multisigUtils_1.getOriginationDataFromOperation(operation);
123
- if (originationData.forwarderDestination) {
124
- this._type = sdk_core_1.TransactionType.AddressInitialization;
125
- this._forwarderDestination = originationData.forwarderDestination;
126
- }
127
- else {
128
- this._type = sdk_core_1.TransactionType.WalletInitialization;
129
- this._owners = multisigUtils_1.getOwnersPublicKeys(operation);
130
- }
131
- this._delegate = operation.delegate;
132
- this._outputs.push({
133
- // Kt addresses can only be calculated for signed transactions with an id
134
- address: this._id ? await Utils.calculateOriginatedAddress(this._id, index) : '',
135
- // Balance
136
- value: operation.balance,
137
- });
138
- this._inputs.push({
139
- address: operation.source,
140
- // Balance + fees + max gas + max storage are paid by the source account
141
- value: new bignumber_js_1.default(operation.balance).plus(operation.fee).toString(),
142
- });
143
- }
144
- /**
145
- * Record the most important fields from a reveal operation.
146
- *
147
- * @param {RevealOp} operation A reveal operation object from a Tezos transaction
148
- */
149
- recordRevealOpFields(operation) {
150
- this._type = sdk_core_1.TransactionType.AccountUpdate;
151
- this._publicKeyToReveal = operation.public_key;
152
- this._inputs.push({
153
- address: operation.source,
154
- // Balance + fees + max gas + max storage are paid by the source account
155
- value: operation.fee,
156
- });
157
- }
158
- /**
159
- * Record the most important fields for a Transaction operation.
160
- *
161
- * @param {TransactionOp} operation A transaction object from a Tezos operation
162
- */
163
- recordTransactionOpFields(operation) {
164
- if (operation.parameters) {
165
- this._type = sdk_core_1.TransactionType.Send;
166
- }
167
- else {
168
- this._type = sdk_core_1.TransactionType.SingleSigSend;
169
- }
170
- const transferData = multisigUtils_1.getMultisigTransferDataFromOperation(operation);
171
- // Fees are paid by the source account, along with the amount in the transaction
172
- this._inputs.push({
173
- address: operation.source,
174
- value: new bignumber_js_1.default(transferData.fee.fee).toFixed(0),
175
- });
176
- if (transferData.coin === 'mutez') {
177
- this._outputs.push({
178
- // Kt addresses can only be calculated for signed transactions with an id
179
- address: transferData.to,
180
- // Balance
181
- value: transferData.amount,
182
- });
183
- // The funds being transferred from the wallet
184
- this._inputs.push({
185
- address: transferData.from,
186
- // Balance + fees + max gas + max storage are paid by the source account
187
- value: transferData.amount,
188
- });
189
- }
190
- }
191
- /**
192
- * Sign the transaction with the provided key. It does not check if the signer is allowed to sign
193
- * it or not.
194
- *
195
- * @param {KeyPair} keyPair The key to sign the transaction with
196
- */
197
- async sign(keyPair) {
198
- // TODO: fail if the transaction is already signed
199
- // Check if there is a transaction to sign
200
- if (!this._parsedTransaction) {
201
- throw new sdk_core_1.InvalidTransactionError('Empty transaction');
202
- }
203
- // Get the transaction body to sign
204
- const encodedTransaction = await local_forging_1.localForger.forge(this._parsedTransaction);
205
- const signedTransaction = await Utils.sign(keyPair, encodedTransaction);
206
- this._encodedTransaction = signedTransaction.sbytes;
207
- // The transaction id can only be calculated for signed transactions
208
- this._id = await Utils.calculateTransactionId(this._encodedTransaction);
209
- await this.initFromParsedTransaction(this._parsedTransaction, this._id);
210
- this._signatures.push(signedTransaction.sig);
211
- }
212
- /**
213
- * Update the list of signatures for a multisig transaction operation.
214
- *
215
- * @param {IndexedSignature[]} signatures List of signatures and the index they should be put on
216
- * in the multisig transfer
217
- * @param {number} index The transfer index to add the signatures to
218
- */
219
- async addTransferSignature(signatures, index) {
220
- if (!this._parsedTransaction) {
221
- throw new sdk_core_1.InvalidTransactionError('Empty transaction');
222
- }
223
- multisigUtils_1.updateMultisigTransferSignatures(this._parsedTransaction.contents[index], signatures);
224
- this._encodedTransaction = await local_forging_1.localForger.forge(this._parsedTransaction);
225
- }
226
- /** @inheritdoc */
227
- canSign(key) {
228
- // TODO: check the key belongs to the _source account in _parsedTransaction
229
- return true;
230
- }
231
- /** @inheritdoc */
232
- toJson() {
233
- if (!this._parsedTransaction) {
234
- throw new sdk_core_1.InvalidTransactionError('Empty transaction');
235
- }
236
- return this._parsedTransaction;
237
- }
238
- /** @inheritdoc */
239
- toBroadcastFormat() {
240
- if (!this._encodedTransaction) {
241
- throw new sdk_core_1.InvalidTransactionError('Missing encoded transaction');
242
- }
243
- return this._encodedTransaction;
244
- }
245
- /**
246
- * Get the transaction source if it is available.
247
- *
248
- * @returns {string} Source of the transaction
249
- */
250
- get source() {
251
- if (!this._source) {
252
- throw new sdk_core_1.InvalidTransactionError('Transaction not initialized');
253
- }
254
- return this._source;
255
- }
256
- /**
257
- * Get the transaction delegation address if it is available.
258
- *
259
- * @returns {string} transaction delegation address
260
- */
261
- get delegate() {
262
- return this._delegate;
263
- }
264
- /**
265
- * Get the public key revealed by the transaction if it exists
266
- *
267
- * @returns {string} public key
268
- */
269
- get publicKeyToReveal() {
270
- return this._publicKeyToReveal;
271
- }
272
- /**
273
- * Get the destination of an address initialization transaction if it exists
274
- *
275
- * @returns {string} forwarder destination
276
- */
277
- get forwarderDestination() {
278
- return this._forwarderDestination;
279
- }
280
- get owners() {
281
- return this._owners;
282
- }
283
- /**
284
- * Get the signatures for the given multisig transfer,
285
- *
286
- * @param {number} transferIndex The transfer script index in the Tezos transaction
287
- * @returns {IndexedSignature[]} A list of signatures with their index inside the multisig transfer
288
- * script
289
- */
290
- getTransferSignatures(transferIndex = 0) {
291
- if (!this._parsedTransaction) {
292
- return [];
293
- }
294
- return multisigUtils_1.getMultisigTransferSignatures(this._parsedTransaction.contents[transferIndex]);
295
- }
296
- /**
297
- * Get the list of index per tezos transaction type. This is useful to locate specific operations
298
- * within the transaction and verify or sign them.
299
- *
300
- * @returns {{[p: string]: number[]}} List of indexes where the key is the transaction kind
301
- */
302
- getIndexesByTransactionType() {
303
- if (!this._parsedTransaction) {
304
- return {};
305
- }
306
- const indexes = {};
307
- for (let i = 0; i < this._parsedTransaction.contents.length; i++) {
308
- const kind = this._parsedTransaction.contents[i].kind;
309
- indexes[kind] = indexes[kind] ? indexes[kind].concat([i]) : [i];
310
- }
311
- return indexes;
312
- }
313
- }
314
- exports.Transaction = Transaction;
315
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxtREFNOEI7QUFFOUIsMERBQTREO0FBQzVELGdFQUFxQztBQUdyQyxtREFNeUI7QUFDekIsK0NBQWlDO0FBRWpDOztHQUVHO0FBQ0gsTUFBYSxXQUFZLFNBQVEsMEJBQWU7SUFTOUM7Ozs7T0FJRztJQUNILFlBQVksVUFBZ0M7UUFDMUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2xCLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLDZCQUE2QixDQUFDLHFCQUE2QjtRQUMvRCxJQUFJLENBQUMsbUJBQW1CLEdBQUcscUJBQXFCLENBQUM7UUFDakQsSUFBSTtZQUNGLE1BQU0saUJBQWlCLEdBQUcsTUFBTSwyQkFBVyxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1lBQ3pFLE1BQU0sSUFBSSxDQUFDLHlCQUF5QixDQUFDLGlCQUFpQixDQUFDLENBQUM7U0FDekQ7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLDRGQUE0RjtZQUM1Rix5RUFBeUU7WUFDekUsTUFBTSw2QkFBNkIsR0FBRyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDM0UsTUFBTSxTQUFTLEdBQUcscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDcEQsSUFBSSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLEVBQUU7Z0JBQ3JDLE1BQU0sSUFBSSxnQ0FBcUIsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO2FBQ3hEO1lBQ0QsdURBQXVEO1lBQ3ZELE1BQU0saUJBQWlCLEdBQUcsTUFBTSwy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QUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNqRTtRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7Q0FDRjtBQWxURCxrQ0FrVEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBCYXNlS2V5LFxuICBCYXNlVHJhbnNhY3Rpb24sXG4gIEludmFsaWRUcmFuc2FjdGlvbkVycm9yLFxuICBQYXJzZVRyYW5zYWN0aW9uRXJyb3IsXG4gIFRyYW5zYWN0aW9uVHlwZSxcbn0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgQ09ERUMsIGxvY2FsRm9yZ2VyIH0gZnJvbSAnQHRhcXVpdG8vbG9jYWwtZm9yZ2luZyc7XG5pbXBvcnQgQmlnTnVtYmVyIGZyb20gJ2JpZ251bWJlci5qcyc7XG5pbXBvcnQgeyBJbmRleGVkU2lnbmF0dXJlLCBPcmlnaW5hdGlvbk9wLCBQYXJzZWRUcmFuc2FjdGlvbiwgUmV2ZWFsT3AsIFRyYW5zYWN0aW9uT3AgfSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCB7IEtleVBhaXIgfSBmcm9tICcuL2tleVBhaXInO1xuaW1wb3J0IHtcbiAgZ2V0TXVsdGlzaWdUcmFuc2ZlckRhdGFGcm9tT3BlcmF0aW9uLFxuICBnZXRNdWx0aXNpZ1RyYW5zZmVyU2lnbmF0dXJlcyxcbiAgZ2V0T3JpZ2luYXRpb25EYXRhRnJvbU9wZXJhdGlvbixcbiAgZ2V0T3duZXJzUHVibGljS2V5cyxcbiAgdXBkYXRlTXVsdGlzaWdUcmFuc2ZlclNpZ25hdHVyZXMsXG59IGZyb20gJy4vbXVsdGlzaWdVdGlscyc7XG5pbXBvcnQgKiBhcyBVdGlscyBmcm9tICcuL3V0aWxzJztcblxuLyoqXG4gKiBUZXpvcyB0cmFuc2FjdGlvbiBtb2RlbC5cbiAqL1xuZXhwb3J0IGNsYXNzIFRyYW5zYWN0aW9uIGV4dGVuZHMgQmFzZVRyYW5zYWN0aW9uIHtcbiAgcHJpdmF0ZSBfcGFyc2VkVHJhbnNhY3Rpb24/OiBQYXJzZWRUcmFuc2FjdGlvbjsgLy8gdHJhbnNhY3Rpb24gaW4gSlNPTiBmb3JtYXRcbiAgcHJpdmF0ZSBfZW5jb2RlZFRyYW5zYWN0aW9uPzogc3RyaW5nOyAvLyB0cmFuc2FjdGlvbiBpbiBoZXggZm9ybWF0XG4gIHByaXZhdGUgX3NvdXJjZTogc3RyaW5nO1xuICBwcml2YXRlIF9kZWxlZ2F0ZT86IHN0cmluZztcbiAgcHJpdmF0ZSBfZm9yd2FyZGVyRGVzdGluYXRpb24/OiBzdHJpbmc7XG4gIHByaXZhdGUgX3B1YmxpY0tleVRvUmV2ZWFsPzogc3RyaW5nO1xuICBwcml2YXRlIF9vd25lcnM6IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBQdWJsaWMgY29uc3RydWN0b3IuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhZG9ubHk8Q29pbkNvbmZpZz59IGNvaW5Db25maWdcbiAgICovXG4gIGNvbnN0cnVjdG9yKGNvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoY29pbkNvbmZpZyk7XG4gICAgdGhpcy5fb3duZXJzID0gW107XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSB0aGUgdHJhbnNhY3Rpb24gZmllbGRzIGJhc2VkIG9uIGFub3RoZXIgc2VyaWFsaXplZCB0cmFuc2FjdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHNlcmlhbGl6ZWRUcmFuc2FjdGlvbiBUcmFuc2FjdGlvbiBpbiBicm9hZGNhc3QgZm9ybWF0LlxuICAgKi9cbiAgYXN5bmMgaW5pdEZyb21TZXJpYWxpemVkVHJhbnNhY3Rpb24oc2VyaWFsaXplZFRyYW5zYWN0aW9uOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLl9lbmNvZGVkVHJhbnNhY3Rpb24gPSBzZXJpYWxpemVkVHJhbnNhY3Rpb247XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhcnNlZFRyYW5zYWN0aW9uID0gYXdhaXQgbG9jYWxGb3JnZXIucGFyc2Uoc2VyaWFsaXplZFRyYW5zYWN0aW9uKTtcbiAgICAgIGF3YWl0IHRoaXMuaW5pdEZyb21QYXJzZWRUcmFuc2FjdGlvbihwYXJzZWRUcmFuc2FjdGlvbik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gSWYgaXQgdGhyb3dzLCBpdCBpcyBwb3NzaWJsZSB0aGUgc2VyaWFsaXplZCB0cmFuc2FjdGlvbiBpcyBzaWduZWQsIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWRcbiAgICAgIC8vIGJ5IGxvY2FsLWZvcmdpbmcuIFRyeSBleHRyYWN0aW5nIHRoZSBsYXN0IDY0IGJ5dGVzIGFuZCBwYXJzZSBpdCBhZ2Fpbi5cbiAgICAgIGNvbnN0IHVuc2lnbmVkU2VyaWFsaXplZFRyYW5zYWN0aW9uID0gc2VyaWFsaXplZFRyYW5zYWN0aW9uLnNsaWNlKDAsIC0xMjgpO1xuICAgICAgY29uc3Qgc2lnbmF0dXJlID0gc2VyaWFsaXplZFRyYW5zYWN0aW9uLnNsaWNlKC0xMjgpO1xuICAgICAgaWYgKFV0aWxzLmlzVmFsaWRTaWduYXR1cmUoc2lnbmF0dXJlKSkge1xuICAgICAgICB0aHJvdyBuZXcgUGFyc2VUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIHRyYW5zYWN0aW9uJyk7XG4gICAgICB9XG4gICAgICAvLyBUT0RPOiBlbmNvZGUgdGhlIHNpZ25hdHVyZSBhbmQgc2F2ZSBpdCBpbiBfc2lnbmF0dXJlXG4gICAgICBjb25zdCBwYXJzZWRUcmFuc2FjdGlvbiA9IGF3YWl0IGxvY2FsRm9yZ2VyLnBhcnNlKHVuc2lnbmVkU2VyaWFsaXplZFRyYW5zYWN0aW9uKTtcbiAgICAgIGNvbnN0IHRyYW5zYWN0aW9uSWQgPSBhd2FpdCBVdGlscy5jYWxjdWxhdGVUcmFuc2FjdGlvbklkKHNlcmlhbGl6ZWRUcmFuc2FjdGlvbik7XG4gICAgICBhd2FpdCB0aGlzLmluaXRGcm9tUGFyc2VkVHJhbnNhY3Rpb24ocGFyc2VkVHJhbnNhY3Rpb24sIHRyYW5zYWN0aW9uSWQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIHRoZSB0cmFuc2FjdGlvbiBmaWVsZHMgYmFzZWQgb24gYW5vdGhlciBwYXJzZWQgdHJhbnNhY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7UGFyc2VkVHJhbnNhY3Rpb259IHBhcnNlZFRyYW5zYWN0aW9uIEEgVGV6b3MgdHJhbnNhY3Rpb24gb2JqZWN0XG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0cmFuc2FjdGlvbklkIFRoZSB0cmFuc2FjdGlvbiBpZCBvZiB0aGUgcGFyc2VkVHJhbnNhY3Rpb24gaWYgaXQgaXMgc2lnbmVkXG4gICAqL1xuICBhc3luYyBpbml0RnJvbVBhcnNlZFRyYW5zYWN0aW9uKHBhcnNlZFRyYW5zYWN0aW9uOiBQYXJzZWRUcmFuc2FjdGlvbiwgdHJhbnNhY3Rpb25JZD86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5fZW5jb2RlZFRyYW5zYWN0aW9uKSB7XG4gICAgICB0aGlzLl9lbmNvZGVkVHJhbnNhY3Rpb24gPSBhd2FpdCBsb2NhbEZvcmdlci5mb3JnZShwYXJzZWRUcmFuc2FjdGlvbik7XG4gICAgfVxuICAgIGlmICh0cmFuc2FjdGlvbklkKSB7XG4gICAgICAvLyBJZiB0aGUgdHJhbnNhY3Rpb24gaWQgaXMgcGFzc2VkLCBzYXZlIGl0IGFuZCBjbGVhbiB1cCB0aGUgZW50cmllcyBzaW5jZSB0aGV5IHdpbGwgYmVcbiAgICAgIC8vIHJlY2FsY3VsYXRlZFxuICAgICAgdGhpcy5faWQgPSB0cmFuc2FjdGlvbklkO1xuICAgICAgdGhpcy5faW5wdXRzID0gW107XG4gICAgICB0aGlzLl9vdXRwdXRzID0gW107XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2lkID0gJyc7XG4gICAgfVxuICAgIHRoaXMuX3BhcnNlZFRyYW5zYWN0aW9uID0gcGFyc2VkVHJhbnNhY3Rpb247XG4gICAgbGV0IG9wZXJhdGlvbkluZGV4ID0gMDtcbiAgICBmb3IgKGNvbnN0IG9wZXJhdGlvbiBvZiBwYXJzZWRUcmFuc2FjdGlvbi5jb250ZW50cykge1xuICAgICAgaWYgKHRoaXMuX3NvdXJjZSAmJiB0aGlzLl9zb3VyY2UgIT09IG9wZXJhdGlvbi5zb3VyY2UpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKFxuICAgICAgICAgICdTb3VyY2UgbXVzdCBiZSB0aGUgc2FtZSBmb3IgZXZlcnkgb3BlcmF0aW9uIGJ1dCBpdCBjaGFuZ2VkIGZyb20gJyArIHRoaXMuX3NvdXJjZSArICcgdG8gJyArIG9wZXJhdGlvbi5zb3VyY2VcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX3NvdXJjZSA9IG9wZXJhdGlvbi5zb3VyY2U7XG4gICAgICB9XG4gICAgICBzd2l0Y2ggKG9wZXJhdGlvbi5raW5kKSB7XG4gICAgICAgIGNhc2UgQ09ERUMuT1BfT1JJR0lOQVRJT046XG4gICAgICAgICAgYXdhaXQgdGhpcy5yZWNvcmRPcmlnaW5hdGlvbk9wRmllbGRzKG9wZXJhdGlvbiBhcyBPcmlnaW5hdGlvbk9wLCBvcGVyYXRpb25JbmRleCk7XG4gICAgICAgICAgb3BlcmF0aW9uSW5kZXgrKztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBDT0RFQy5PUF9SRVZFQUw6XG4gICAgICAgICAgdGhpcy5yZWNvcmRSZXZlYWxPcEZpZWxkcyhvcGVyYXRpb24gYXMgUmV2ZWFsT3ApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIENPREVDLk9QX1RSQU5TQUNUSU9OOlxuICAgICAgICAgIHRoaXMucmVjb3JkVHJhbnNhY3Rpb25PcEZpZWxkcyhvcGVyYXRpb24gYXMgVHJhbnNhY3Rpb25PcCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlY29yZCB0aGUgbW9zdCBpbXBvcnRhbnQgZmllbGRzIGZyb20gYW4gb3JpZ2luYXRpb24gb3BlcmF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge09wZXJhdGlvbn0gb3BlcmF0aW9uIEFuIG9wZXJhdGlvbiBvYmplY3QgZnJvbSBhIFRlem9zIHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCBUaGUgb3JpZ2luYXRpb24gb3BlcmF0aW9uIGluZGV4IGluIHRoZSB0cmFuc2FjdGlvbi4gVXNlZCB0byBjYWxjdWxhdGUgdGhlXG4gICAqICAgICAgb3JpZ2luYXRlZCBhZGRyZXNzXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHJlY29yZE9yaWdpbmF0aW9uT3BGaWVsZHMob3BlcmF0aW9uOiBPcmlnaW5hdGlvbk9wLCBpbmRleDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgb3JpZ2luYXRpb25EYXRhID0gZ2V0T3JpZ2luYXRpb25EYXRhRnJvbU9wZXJhdGlvbihvcGVyYXRpb24pO1xuICAgIGlmIChvcmlnaW5hdGlvbkRhdGEuZm9yd2FyZGVyRGVzdGluYXRpb24pIHtcbiAgICAgIHRoaXMuX3R5cGUgPSBUcmFuc2FjdGlvblR5cGUuQWRkcmVzc0luaXRpYWxpemF0aW9uO1xuICAgICAgdGhpcy5fZm9yd2FyZGVyRGVzdGluYXRpb24gPSBvcmlnaW5hdGlvbkRhdGEuZm9yd2FyZGVyRGVzdGluYXRpb247XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3R5cGUgPSBUcmFuc2FjdGlvblR5cGUuV2FsbGV0SW5pdGlhbGl6YXRpb247XG4gICAgICB0aGlzLl9vd25lcnMgPSBnZXRPd25lcnNQdWJsaWNLZXlzKG9wZXJhdGlvbik7XG4gICAgfVxuXG4gICAgdGhpcy5fZGVsZWdhdGUgPSBvcGVyYXRpb24uZGVsZWdhdGU7XG4gICAgdGhpcy5fb3V0cHV0cy5wdXNoKHtcbiAgICAgIC8vIEt0IGFkZHJlc3NlcyBjYW4gb25seSBiZSBjYWxjdWxhdGVkIGZvciBzaWduZWQgdHJhbnNhY3Rpb25zIHdpdGggYW4gaWRcbiAgICAgIGFkZHJlc3M6IHRoaXMuX2lkID8gYXdhaXQgVXRpbHMuY2FsY3VsYXRlT3JpZ2luYXRlZEFkZHJlc3ModGhpcy5faWQsIGluZGV4KSA6ICcnLFxuICAgICAgLy8gQmFsYW5jZVxuICAgICAgdmFsdWU6IG9wZXJhdGlvbi5iYWxhbmNlLFxuICAgIH0pO1xuICAgIHRoaXMuX2lucHV0cy5wdXNoKHtcbiAgICAgIGFkZHJlc3M6IG9wZXJhdGlvbi5zb3VyY2UsXG4gICAgICAvLyBCYWxhbmNlICsgZmVlcyArIG1heCBnYXMgKyBtYXggc3RvcmFnZSBhcmUgcGFpZCBieSB0aGUgc291cmNlIGFjY291bnRcbiAgICAgIHZhbHVlOiBuZXcgQmlnTnVtYmVyKG9wZXJhdGlvbi5iYWxhbmNlKS5wbHVzKG9wZXJhdGlvbi5mZWUpLnRvU3RyaW5nKCksXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVjb3JkIHRoZSBtb3N0IGltcG9ydGFudCBmaWVsZHMgZnJvbSBhIHJldmVhbCBvcGVyYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7UmV2ZWFsT3B9IG9wZXJhdGlvbiBBIHJldmVhbCBvcGVyYXRpb24gb2JqZWN0IGZyb20gYSBUZXpvcyB0cmFuc2FjdGlvblxuICAgKi9cbiAgcHJpdmF0ZSByZWNvcmRSZXZlYWxPcEZpZWxkcyhvcGVyYXRpb246IFJldmVhbE9wKTogdm9pZCB7XG4gICAgdGhpcy5fdHlwZSA9IFRyYW5zYWN0aW9uVHlwZS5BY2NvdW50VXBkYXRlO1xuICAgIHRoaXMuX3B1YmxpY0tleVRvUmV2ZWFsID0gb3BlcmF0aW9uLnB1YmxpY19rZXk7XG4gICAgdGhpcy5faW5wdXRzLnB1c2goe1xuICAgICAgYWRkcmVzczogb3BlcmF0aW9uLnNvdXJjZSxcbiAgICAgIC8vIEJhbGFuY2UgKyBmZWVzICsgbWF4IGdhcyArIG1heCBzdG9yYWdlIGFyZSBwYWlkIGJ5IHRoZSBzb3VyY2UgYWNjb3VudFxuICAgICAgdmFsdWU6IG9wZXJhdGlvbi5mZWUsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVjb3JkIHRoZSBtb3N0IGltcG9ydGFudCBmaWVsZHMgZm9yIGEgVHJhbnNhY3Rpb24gb3BlcmF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge1RyYW5zYWN0aW9uT3B9IG9wZXJhdGlvbiBBIHRyYW5zYWN0aW9uIG9iamVjdCBmcm9tIGEgVGV6b3Mgb3BlcmF0aW9uXG4gICAqL1xuICBwcml2YXRlIHJlY29yZFRyYW5zYWN0aW9uT3BGaWVsZHMob3BlcmF0aW9uOiBUcmFuc2FjdGlvbk9wKTogdm9pZCB7XG4gICAgaWYgKG9wZXJhdGlvbi5wYXJhbWV0ZXJzKSB7XG4gICAgICB0aGlzLl90eXBlID0gVHJhbnNhY3Rpb25UeXBlLlNlbmQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3R5cGUgPSBUcmFuc2FjdGlvblR5cGUuU2luZ2xlU2lnU2VuZDtcbiAgICB9XG4gICAgY29uc3QgdHJhbnNmZXJEYXRhID0gZ2V0TXVsdGlzaWdUcmFuc2ZlckRhdGFGcm9tT3BlcmF0aW9uKG9wZXJhdGlvbik7XG4gICAgLy8gRmVlcyBhcmUgcGFpZCBieSB0aGUgc291cmNlIGFjY291bnQsIGFsb25nIHdpdGggdGhlIGFtb3VudCBpbiB0aGUgdHJhbnNhY3Rpb25cbiAgICB0aGlzLl9pbnB1dHMucHVzaCh7XG4gICAgICBhZGRyZXNzOiBvcGVyYXRpb24uc291cmNlLFxuICAgICAgdmFsdWU6IG5ldyBCaWdOdW1iZXIodHJhbnNmZXJEYXRhLmZlZS5mZWUpLnRvRml4ZWQoMCksXG4gICAgfSk7XG5cbiAgICBpZiAodHJhbnNmZXJEYXRhLmNvaW4gPT09ICdtdXRleicpIHtcbiAgICAgIHRoaXMuX291dHB1dHMucHVzaCh7XG4gICAgICAgIC8vIEt0IGFkZHJlc3NlcyBjYW4gb25seSBiZSBjYWxjdWxhdGVkIGZvciBzaWduZWQgdHJhbnNhY3Rpb25zIHdpdGggYW4gaWRcbiAgICAgICAgYWRkcmVzczogdHJhbnNmZXJEYXRhLnRvLFxuICAgICAgICAvLyBCYWxhbmNlXG4gICAgICAgIHZhbHVlOiB0cmFuc2ZlckRhdGEuYW1vdW50LFxuICAgICAgfSk7XG4gICAgICAvLyBUaGUgZnVuZHMgYmVpbmcgdHJhbnNmZXJyZWQgZnJvbSB0aGUgd2FsbGV0XG4gICAgICB0aGlzLl9pbnB1dHMucHVzaCh7XG4gICAgICAgIGFkZHJlc3M6IHRyYW5zZmVyRGF0YS5mcm9tLFxuICAgICAgICAvLyBCYWxhbmNlICsgZmVlcyArIG1heCBnYXMgKyBtYXggc3RvcmFnZSBhcmUgcGFpZCBieSB0aGUgc291cmNlIGFjY291bnRcbiAgICAgICAgdmFsdWU6IHRyYW5zZmVyRGF0YS5hbW91bnQsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2lnbiB0aGUgdHJhbnNhY3Rpb24gd2l0aCB0aGUgcHJvdmlkZWQga2V5LiBJdCBkb2VzIG5vdCBjaGVjayBpZiB0aGUgc2lnbmVyIGlzIGFsbG93ZWQgdG8gc2lnblxuICAgKiBpdCBvciBub3QuXG4gICAqXG4gICAqIEBwYXJhbSB7S2V5UGFpcn0ga2V5UGFpciBUaGUga2V5IHRvIHNpZ24gdGhlIHRyYW5zYWN0aW9uIHdpdGhcbiAgICovXG4gIGFzeW5jIHNpZ24oa2V5UGFpcjogS2V5UGFpcik6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIFRPRE86IGZhaWwgaWYgdGhlIHRyYW5zYWN0aW9uIGlzIGFscmVhZHkgc2lnbmVkXG4gICAgLy8gQ2hlY2sgaWYgdGhlcmUgaXMgYSB0cmFuc2FjdGlvbiB0byBzaWduXG4gICAgaWYgKCF0aGlzLl9wYXJzZWRUcmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdFbXB0eSB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgICAvLyBHZXQgdGhlIHRyYW5zYWN0aW9uIGJvZHkgdG8gc2lnblxuICAgIGNvbnN0IGVuY29kZWRUcmFuc2FjdGlvbiA9IGF3YWl0IGxvY2FsRm9yZ2VyLmZvcmdlKHRoaXMuX3BhcnNlZFRyYW5zYWN0aW9uKTtcblxuICAgIGNvbnN0IHNpZ25lZFRyYW5zYWN0aW9uID0gYXdhaXQgVXRpbHMuc2lnbihrZXlQYWlyLCBlbmNvZGVkVHJhbnNhY3Rpb24pO1xuICAgIHRoaXMuX2VuY29kZWRUcmFuc2FjdGlvbiA9IHNpZ25lZFRyYW5zYWN0aW9uLnNieXRlcztcblxuICAgIC8vIFRoZSB0cmFuc2FjdGlvbiBpZCBjYW4gb25seSBiZSBjYWxjdWxhdGVkIGZvciBzaWduZWQgdHJhbnNhY3Rpb25zXG4gICAgdGhpcy5faWQgPSBhd2FpdCBVdGlscy5jYWxjdWxhdGVUcmFuc2FjdGlvbklkKHRoaXMuX2VuY29kZWRUcmFuc2FjdGlvbik7XG4gICAgYXdhaXQgdGhpcy5pbml0RnJvbVBhcnNlZFRyYW5zYWN0aW9uKHRoaXMuX3BhcnNlZFRyYW5zYWN0aW9uLCB0aGlzLl9pZCk7XG5cbiAgICB0aGlzLl9zaWduYXR1cmVzLnB1c2goc2lnbmVkVHJhbnNhY3Rpb24uc2lnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIGxpc3Qgb2Ygc2lnbmF0dXJlcyBmb3IgYSBtdWx0aXNpZyB0cmFuc2FjdGlvbiBvcGVyYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7SW5kZXhlZFNpZ25hdHVyZVtdfSBzaWduYXR1cmVzIExpc3Qgb2Ygc2lnbmF0dXJlcyBhbmQgdGhlIGluZGV4IHRoZXkgc2hvdWxkIGJlIHB1dCBvblxuICAgKiAgICBpbiB0aGUgbXVsdGlzaWcgdHJhbnNmZXJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IFRoZSB0cmFuc2ZlciBpbmRleCB0byBhZGQgdGhlIHNpZ25hdHVyZXMgdG9cbiAgICovXG4gIGFzeW5jIGFkZFRyYW5zZmVyU2lnbmF0dXJlKHNpZ25hdHVyZXM6IEluZGV4ZWRTaWduYXR1cmVbXSwgaW5kZXg6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5fcGFyc2VkVHJhbnNhY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignRW1wdHkgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG4gICAgdXBkYXRlTXVsdGlzaWdUcmFuc2ZlclNpZ25hdHVyZXModGhpcy5fcGFyc2VkVHJhbnNhY3Rpb24uY29udGVudHNbaW5kZXhdIGFzIFRyYW5zYWN0aW9uT3AsIHNpZ25hdHVyZXMpO1xuICAgIHRoaXMuX2VuY29kZWRUcmFuc2FjdGlvbiA9IGF3YWl0IGxvY2FsRm9yZ2VyLmZvcmdlKHRoaXMuX3BhcnNlZFRyYW5zYWN0aW9uKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBjYW5TaWduKGtleTogQmFzZUtleSk6IGJvb2xlYW4ge1xuICAgIC8vIFRPRE86IGNoZWNrIHRoZSBrZXkgYmVsb25ncyB0byB0aGUgX3NvdXJjZSBhY2NvdW50IGluIF9wYXJzZWRUcmFuc2FjdGlvblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHRvSnNvbigpOiBQYXJzZWRUcmFuc2FjdGlvbiB7XG4gICAgaWYgKCF0aGlzLl9wYXJzZWRUcmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdFbXB0eSB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fcGFyc2VkVHJhbnNhY3Rpb247XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdG9Ccm9hZGNhc3RGb3JtYXQoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuX2VuY29kZWRUcmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdNaXNzaW5nIGVuY29kZWQgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2VuY29kZWRUcmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHRyYW5zYWN0aW9uIHNvdXJjZSBpZiBpdCBpcyBhdmFpbGFibGUuXG4gICAqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFNvdXJjZSBvZiB0aGUgdHJhbnNhY3Rpb25cbiAgICovXG4gIGdldCBzb3VyY2UoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuX3NvdXJjZSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdUcmFuc2FjdGlvbiBub3QgaW5pdGlhbGl6ZWQnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3NvdXJjZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHRyYW5zYWN0aW9uIGRlbGVnYXRpb24gYWRkcmVzcyBpZiBpdCBpcyBhdmFpbGFibGUuXG4gICAqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IHRyYW5zYWN0aW9uIGRlbGVnYXRpb24gYWRkcmVzc1xuICAgKi9cbiAgZ2V0IGRlbGVnYXRlKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2RlbGVnYXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcHVibGljIGtleSByZXZlYWxlZCBieSB0aGUgdHJhbnNhY3Rpb24gaWYgaXQgZXhpc3RzXG4gICAqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IHB1YmxpYyBrZXlcbiAgICovXG4gIGdldCBwdWJsaWNLZXlUb1JldmVhbCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9wdWJsaWNLZXlUb1JldmVhbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGRlc3RpbmF0aW9uIG9mIGFuIGFkZHJlc3MgaW5pdGlhbGl6YXRpb24gdHJhbnNhY3Rpb24gaWYgaXQgZXhpc3RzXG4gICAqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IGZvcndhcmRlciBkZXN0aW5hdGlvblxuICAgKi9cbiAgZ2V0IGZvcndhcmRlckRlc3RpbmF0aW9uKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2ZvcndhcmRlckRlc3RpbmF0aW9uO1xuICB9XG5cbiAgZ2V0IG93bmVycygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuX293bmVycztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHNpZ25hdHVyZXMgZm9yIHRoZSBnaXZlbiBtdWx0aXNpZyB0cmFuc2ZlcixcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHRyYW5zZmVySW5kZXggVGhlIHRyYW5zZmVyIHNjcmlwdCBpbmRleCBpbiB0aGUgVGV6b3MgdHJhbnNhY3Rpb25cbiAgICogQHJldHVybnMge0luZGV4ZWRTaWduYXR1cmVbXX0gQSBsaXN0IG9mIHNpZ25hdHVyZXMgd2l0aCB0aGVpciBpbmRleCBpbnNpZGUgdGhlIG11bHRpc2lnIHRyYW5zZmVyXG4gICAqICAgICAgc2NyaXB0XG4gICAqL1xuICBnZXRUcmFuc2ZlclNpZ25hdHVyZXModHJhbnNmZXJJbmRleCA9IDApOiBJbmRleGVkU2lnbmF0dXJlW10ge1xuICAgIGlmICghdGhpcy5fcGFyc2VkVHJhbnNhY3Rpb24pIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgcmV0dXJuIGdldE11bHRpc2lnVHJhbnNmZXJTaWduYXR1cmVzKHRoaXMuX3BhcnNlZFRyYW5zYWN0aW9uLmNvbnRlbnRzW3RyYW5zZmVySW5kZXhdIGFzIFRyYW5zYWN0aW9uT3ApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbGlzdCBvZiBpbmRleCBwZXIgdGV6b3MgdHJhbnNhY3Rpb24gdHlwZS4gVGhpcyBpcyB1c2VmdWwgdG8gbG9jYXRlIHNwZWNpZmljIG9wZXJhdGlvbnNcbiAgICogd2l0aGluIHRoZSB0cmFuc2FjdGlvbiBhbmQgdmVyaWZ5IG9yIHNpZ24gdGhlbS5cbiAgICpcbiAgICogQHJldHVybnMge3tbcDogc3RyaW5nXTogbnVtYmVyW119fSBMaXN0IG9mIGluZGV4ZXMgd2hlcmUgdGhlIGtleSBpcyB0aGUgdHJhbnNhY3Rpb24ga2luZFxuICAgKi9cbiAgZ2V0SW5kZXhlc0J5VHJhbnNhY3Rpb25UeXBlKCk6IHsgW2tpbmQ6IHN0cmluZ106IG51bWJlcltdIH0ge1xuICAgIGlmICghdGhpcy5fcGFyc2VkVHJhbnNhY3Rpb24pIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgY29uc3QgaW5kZXhlcyA9IHt9O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fcGFyc2VkVHJhbnNhY3Rpb24uY29udGVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGtpbmQgPSB0aGlzLl9wYXJzZWRUcmFuc2FjdGlvbi5jb250ZW50c1tpXS5raW5kO1xuICAgICAgaW5kZXhlc1traW5kXSA9IGluZGV4ZXNba2luZF0gPyBpbmRleGVzW2tpbmRdLmNvbmNhdChbaV0pIDogW2ldO1xuICAgIH1cbiAgICByZXR1cm4gaW5kZXhlcztcbiAgfVxufVxuIl19
@@ -1,171 +0,0 @@
1
- import { BaseKey, BaseTransactionBuilder, TransactionType } from '@bitgo-beta/sdk-core';
2
- import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
3
- import BigNumber from 'bignumber.js';
4
- import { Address } from './address';
5
- import { Fee, IndexedData, Key } from './iface';
6
- import { Transaction } from './transaction';
7
- import { TransferBuilder } from './transferBuilder';
8
- interface DataToSignOverride extends IndexedData {
9
- dataToSign: string;
10
- }
11
- /**
12
- * Tezos transaction builder.
13
- */
14
- export declare class TransactionBuilder extends BaseTransactionBuilder {
15
- private _serializedTransaction;
16
- private _transaction;
17
- private _type;
18
- private _blockHeader;
19
- private _counter;
20
- private _fee;
21
- private _sourceAddress;
22
- private _sourceKeyPair?;
23
- private _publicKeyToReveal;
24
- private _initialBalance;
25
- private _initialDelegate;
26
- private _walletOwnerPublicKeys;
27
- private _multisigSignerKeyPairs;
28
- private _dataToSignOverride;
29
- private _transfers;
30
- private _forwarderDestination;
31
- /**
32
- * Public constructor.
33
- *
34
- * @param {CoinConfig} _coinConfig - coin configuration
35
- */
36
- constructor(_coinConfig: Readonly<CoinConfig>);
37
- /** @inheritdoc */
38
- protected fromImplementation(rawTransaction: string): Transaction;
39
- /** @inheritdoc */
40
- protected signImplementation(key: Key): Transaction;
41
- /** @inheritdoc */
42
- protected buildImplementation(): Promise<Transaction>;
43
- /**
44
- * Set the transaction branch id.
45
- *
46
- * @param {string} blockId A block hash to use as branch reference
47
- */
48
- branch(blockId: string): void;
49
- /**
50
- * The type of transaction being built.
51
- *
52
- * @param {TransactionType} type - type of the transaction
53
- */
54
- type(type: TransactionType): void;
55
- /**
56
- * Set the transaction fees. Low fees may get a transaction rejected or never picked up by bakers.
57
- *
58
- * @param {Fee} fee Baker fees. May also include the maximum gas and storage fees to pay
59
- */
60
- fee(fee: Fee): void;
61
- /**
62
- * Set the transaction initiator. This account will pay for the transaction fees, but it will not
63
- * be added as an owner of a wallet in a init transaction, unless manually set as one of the
64
- * owners.
65
- *
66
- * @param {string} source A Tezos address
67
- */
68
- source(source: string): void;
69
- /**
70
- * Set an amount of mutez to transfer in this transaction this transaction. This is different than
71
- * the amount to transfer from a multisig wallet.
72
- *
73
- * @param {string} amount Amount in mutez (1/1000000 Tezies)
74
- */
75
- initialBalance(amount: string): void;
76
- /**
77
- * Set the transaction counter to prevent submitting repeated transactions.
78
- *
79
- * @param {string} counter The counter to use
80
- */
81
- counter(counter: string): void;
82
- /**
83
- * Set the destination address of a forwarder contract
84
- * Used in forwarder contract deployment as destination address
85
- *
86
- * @param {string} contractAddress - contract address to use
87
- */
88
- forwarderDestination(contractAddress: string): void;
89
- /**
90
- * The public key to reveal.
91
- *
92
- * @param {string} publicKey A Tezos public key
93
- */
94
- publicKeyToReveal(publicKey: string): void;
95
- /**
96
- * Build a reveal operation for the source account with default fees.
97
- *
98
- * @returns {RevealOp} A Tezos reveal operation
99
- */
100
- private buildPublicKeyRevelationOperation;
101
- /**
102
- * Set one of the owners of the multisig wallet.
103
- *
104
- * @param {string} publicKey A Tezos public key
105
- */
106
- owner(publicKey: string): void;
107
- /**
108
- * Set an initial delegate to initialize this wallet to. This is different than the delegation to
109
- * set while doing a separate delegation transaction.
110
- *
111
- * @param {string} delegate The address to delegate the funds to
112
- */
113
- initialDelegate(delegate: string): void;
114
- /**
115
- * Build an origination operation for a generic multisig contract.
116
- *
117
- * @returns {Operation} A Tezos origination operation
118
- */
119
- private buildWalletInitializationOperations;
120
- /**
121
- * Initialize a new TransferBuilder to for a singlesig or multisig transaction.
122
- *
123
- * @param {string} amount Amount in mutez to be transferred
124
- * @returns {TransferBuilder} A transfer builder
125
- */
126
- transfer(amount: string): TransferBuilder;
127
- /**
128
- * Calculate the signatures for the multisig transaction.
129
- *
130
- * @param {string} packedData The string in hexadecimal to sign
131
- * @returns {Promise<string[]>} List of signatures for packedData
132
- */
133
- private getSignatures;
134
- /**
135
- * Override the data to sign for a specific transfer. Used for offline signing to pass the
136
- * respective dataToSign for transfer at a particular index.
137
- *
138
- * @param {DataToSignOverride} data - data to override
139
- */
140
- overrideDataToSign(data: DataToSignOverride): void;
141
- /**
142
- * Build a transaction operation for a generic multisig contract.
143
- *
144
- * @returns {Promise<TransactionOp[]>} A Tezos transaction operation
145
- */
146
- private buildSendTransactionContent;
147
- /**
148
- * Build a transaction operation for a forwarder contract
149
- *
150
- * @returns {OriginationOp} a Tezos transaction operation
151
- */
152
- private buildForwarderDeploymentContent;
153
- /** @inheritdoc */
154
- validateValue(value: BigNumber): void;
155
- /** @inheritdoc */
156
- validateAddress(address: Address): void;
157
- /** @inheritdoc */
158
- validateKey(key: BaseKey): void;
159
- /** @inheritdoc */
160
- validateRawTransaction(rawTransaction: any): void;
161
- /** @inheritdoc */
162
- validateTransaction(transaction: Transaction): void;
163
- /** @inheritdoc */
164
- displayName(): string;
165
- /** @inheritdoc */
166
- protected get transaction(): Transaction;
167
- /** @inheritdoc */
168
- protected set transaction(transaction: Transaction);
169
- }
170
- export {};
171
- //# sourceMappingURL=transactionBuilder.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"transactionBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilder.ts"],"names":[],"mappings":"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"}