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

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 (71) hide show
  1. package/dist/src/index.d.ts +5 -0
  2. package/dist/src/index.d.ts.map +1 -0
  3. package/dist/src/index.js +44 -0
  4. package/dist/src/lib/address.d.ts +8 -0
  5. package/dist/src/lib/address.d.ts.map +1 -0
  6. package/dist/src/lib/address.js +10 -0
  7. package/dist/src/lib/iface.d.ts +148 -0
  8. package/dist/src/lib/iface.d.ts.map +1 -0
  9. package/dist/src/lib/iface.js +3 -0
  10. package/dist/src/lib/index.d.ts +10 -0
  11. package/dist/src/lib/index.d.ts.map +1 -0
  12. package/dist/src/lib/index.js +51 -0
  13. package/dist/src/lib/keyPair.d.ts +40 -0
  14. package/dist/src/lib/keyPair.d.ts.map +1 -0
  15. package/dist/src/lib/keyPair.js +149 -0
  16. package/dist/src/lib/multisigUtils.d.ts +134 -0
  17. package/dist/src/lib/multisigUtils.d.ts.map +1 -0
  18. package/dist/src/lib/multisigUtils.js +1193 -0
  19. package/dist/src/lib/transaction.d.ts +119 -0
  20. package/dist/src/lib/transaction.d.ts.map +1 -0
  21. package/dist/src/lib/transaction.js +329 -0
  22. package/dist/src/lib/transactionBuilder.d.ts +171 -0
  23. package/dist/src/lib/transactionBuilder.d.ts.map +1 -0
  24. package/dist/src/lib/transactionBuilder.js +453 -0
  25. package/dist/src/lib/transferBuilder.d.ts +24 -0
  26. package/dist/src/lib/transferBuilder.d.ts.map +1 -0
  27. package/dist/src/lib/transferBuilder.js +64 -0
  28. package/dist/src/lib/utils.d.ts +280 -0
  29. package/dist/src/lib/utils.d.ts.map +1 -0
  30. package/dist/src/lib/utils.js +492 -0
  31. package/dist/src/register.d.ts +3 -0
  32. package/dist/src/register.d.ts.map +1 -0
  33. package/dist/src/register.js +11 -0
  34. package/dist/src/txtz.d.ts +13 -0
  35. package/dist/src/txtz.d.ts.map +1 -0
  36. package/dist/src/txtz.js +14 -0
  37. package/dist/src/xtz.d.ts +125 -0
  38. package/dist/src/xtz.d.ts.map +1 -0
  39. package/dist/src/xtz.js +409 -0
  40. package/dist/test/fixtures.d.ts +571 -0
  41. package/dist/test/fixtures.d.ts.map +1 -0
  42. package/dist/test/fixtures.js +656 -0
  43. package/dist/test/resources.d.ts +451 -0
  44. package/dist/test/resources.d.ts.map +1 -0
  45. package/dist/test/resources.js +349 -0
  46. package/dist/test/unit/keyPair.d.ts +2 -0
  47. package/dist/test/unit/keyPair.d.ts.map +1 -0
  48. package/dist/test/unit/keyPair.js +142 -0
  49. package/dist/test/unit/offlineTransactionBuilder.d.ts +2 -0
  50. package/dist/test/unit/offlineTransactionBuilder.d.ts.map +1 -0
  51. package/dist/test/unit/offlineTransactionBuilder.js +291 -0
  52. package/dist/test/unit/transaction.d.ts +2 -0
  53. package/dist/test/unit/transaction.d.ts.map +1 -0
  54. package/dist/test/unit/transaction.js +98 -0
  55. package/dist/test/unit/transactionBuilder.d.ts +2 -0
  56. package/dist/test/unit/transactionBuilder.d.ts.map +1 -0
  57. package/dist/test/unit/transactionBuilder.js +656 -0
  58. package/dist/test/unit/transferBuilder.d.ts +2 -0
  59. package/dist/test/unit/transferBuilder.d.ts.map +1 -0
  60. package/dist/test/unit/transferBuilder.js +82 -0
  61. package/dist/test/unit/util.d.ts +2 -0
  62. package/dist/test/unit/util.d.ts.map +1 -0
  63. package/dist/test/unit/util.js +198 -0
  64. package/dist/test/unit/xtz.d.ts +2 -0
  65. package/dist/test/unit/xtz.d.ts.map +1 -0
  66. package/dist/test/unit/xtz.js +192 -0
  67. package/dist/tsconfig.tsbuildinfo +1 -0
  68. package/package.json +10 -7
  69. package/.eslintignore +0 -5
  70. package/.mocharc.yml +0 -8
  71. package/CHANGELOG.md +0 -784
@@ -0,0 +1,119 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,329 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.Transaction = void 0;
40
+ const sdk_core_1 = require("@bitgo-beta/sdk-core");
41
+ const local_forging_1 = require("@taquito/local-forging");
42
+ const bignumber_js_1 = __importDefault(require("bignumber.js"));
43
+ const multisigUtils_1 = require("./multisigUtils");
44
+ const Utils = __importStar(require("./utils"));
45
+ /**
46
+ * Tezos transaction model.
47
+ */
48
+ class Transaction extends sdk_core_1.BaseTransaction {
49
+ /**
50
+ * Public constructor.
51
+ *
52
+ * @param {Readonly<CoinConfig>} coinConfig
53
+ */
54
+ constructor(coinConfig) {
55
+ super(coinConfig);
56
+ this._owners = [];
57
+ }
58
+ /**
59
+ * Initialize the transaction fields based on another serialized transaction.
60
+ *
61
+ * @param serializedTransaction Transaction in broadcast format.
62
+ */
63
+ async initFromSerializedTransaction(serializedTransaction) {
64
+ this._encodedTransaction = serializedTransaction;
65
+ try {
66
+ const parsedTransaction = await local_forging_1.localForger.parse(serializedTransaction);
67
+ await this.initFromParsedTransaction(parsedTransaction);
68
+ }
69
+ catch (e) {
70
+ // If it throws, it is possible the serialized transaction is signed, which is not supported
71
+ // by local-forging. Try extracting the last 64 bytes and parse it again.
72
+ const unsignedSerializedTransaction = serializedTransaction.slice(0, -128);
73
+ const signature = serializedTransaction.slice(-128);
74
+ if (Utils.isValidSignature(signature)) {
75
+ throw new sdk_core_1.ParseTransactionError('Invalid transaction');
76
+ }
77
+ // TODO: encode the signature and save it in _signature
78
+ const parsedTransaction = await local_forging_1.localForger.parse(unsignedSerializedTransaction);
79
+ const transactionId = await Utils.calculateTransactionId(serializedTransaction);
80
+ await this.initFromParsedTransaction(parsedTransaction, transactionId);
81
+ }
82
+ }
83
+ /**
84
+ * Initialize the transaction fields based on another parsed transaction.
85
+ *
86
+ * @param {ParsedTransaction} parsedTransaction A Tezos transaction object
87
+ * @param {string} transactionId The transaction id of the parsedTransaction if it is signed
88
+ */
89
+ async initFromParsedTransaction(parsedTransaction, transactionId) {
90
+ if (!this._encodedTransaction) {
91
+ this._encodedTransaction = await local_forging_1.localForger.forge(parsedTransaction);
92
+ }
93
+ if (transactionId) {
94
+ // If the transaction id is passed, save it and clean up the entries since they will be
95
+ // recalculated
96
+ this._id = transactionId;
97
+ this._inputs = [];
98
+ this._outputs = [];
99
+ }
100
+ else {
101
+ this._id = '';
102
+ }
103
+ this._parsedTransaction = parsedTransaction;
104
+ let operationIndex = 0;
105
+ for (const operation of parsedTransaction.contents) {
106
+ if (this._source && this._source !== operation.source) {
107
+ throw new sdk_core_1.InvalidTransactionError('Source must be the same for every operation but it changed from ' + this._source + ' to ' + operation.source);
108
+ }
109
+ else {
110
+ this._source = operation.source;
111
+ }
112
+ switch (operation.kind) {
113
+ case local_forging_1.CODEC.OP_ORIGINATION:
114
+ await this.recordOriginationOpFields(operation, operationIndex);
115
+ operationIndex++;
116
+ break;
117
+ case local_forging_1.CODEC.OP_REVEAL:
118
+ this.recordRevealOpFields(operation);
119
+ break;
120
+ case local_forging_1.CODEC.OP_TRANSACTION:
121
+ this.recordTransactionOpFields(operation);
122
+ break;
123
+ default:
124
+ break;
125
+ }
126
+ }
127
+ }
128
+ /**
129
+ * Record the most important fields from an origination operation.
130
+ *
131
+ * @param {Operation} operation An operation object from a Tezos transaction
132
+ * @param {number} index The origination operation index in the transaction. Used to calculate the
133
+ * originated address
134
+ */
135
+ async recordOriginationOpFields(operation, index) {
136
+ const originationData = (0, multisigUtils_1.getOriginationDataFromOperation)(operation);
137
+ if (originationData.forwarderDestination) {
138
+ this._type = sdk_core_1.TransactionType.AddressInitialization;
139
+ this._forwarderDestination = originationData.forwarderDestination;
140
+ }
141
+ else {
142
+ this._type = sdk_core_1.TransactionType.WalletInitialization;
143
+ this._owners = (0, multisigUtils_1.getOwnersPublicKeys)(operation);
144
+ }
145
+ this._delegate = operation.delegate;
146
+ this._outputs.push({
147
+ // Kt addresses can only be calculated for signed transactions with an id
148
+ address: this._id ? await Utils.calculateOriginatedAddress(this._id, index) : '',
149
+ // Balance
150
+ value: operation.balance,
151
+ });
152
+ this._inputs.push({
153
+ address: operation.source,
154
+ // Balance + fees + max gas + max storage are paid by the source account
155
+ value: new bignumber_js_1.default(operation.balance).plus(operation.fee).toString(),
156
+ });
157
+ }
158
+ /**
159
+ * Record the most important fields from a reveal operation.
160
+ *
161
+ * @param {RevealOp} operation A reveal operation object from a Tezos transaction
162
+ */
163
+ recordRevealOpFields(operation) {
164
+ this._type = sdk_core_1.TransactionType.AccountUpdate;
165
+ this._publicKeyToReveal = operation.public_key;
166
+ this._inputs.push({
167
+ address: operation.source,
168
+ // Balance + fees + max gas + max storage are paid by the source account
169
+ value: operation.fee,
170
+ });
171
+ }
172
+ /**
173
+ * Record the most important fields for a Transaction operation.
174
+ *
175
+ * @param {TransactionOp} operation A transaction object from a Tezos operation
176
+ */
177
+ recordTransactionOpFields(operation) {
178
+ if (operation.parameters) {
179
+ this._type = sdk_core_1.TransactionType.Send;
180
+ }
181
+ else {
182
+ this._type = sdk_core_1.TransactionType.SingleSigSend;
183
+ }
184
+ const transferData = (0, multisigUtils_1.getMultisigTransferDataFromOperation)(operation);
185
+ // Fees are paid by the source account, along with the amount in the transaction
186
+ this._inputs.push({
187
+ address: operation.source,
188
+ value: new bignumber_js_1.default(transferData.fee.fee).toFixed(0),
189
+ });
190
+ if (transferData.coin === 'mutez') {
191
+ this._outputs.push({
192
+ // Kt addresses can only be calculated for signed transactions with an id
193
+ address: transferData.to,
194
+ // Balance
195
+ value: transferData.amount,
196
+ });
197
+ // The funds being transferred from the wallet
198
+ this._inputs.push({
199
+ address: transferData.from,
200
+ // Balance + fees + max gas + max storage are paid by the source account
201
+ value: transferData.amount,
202
+ });
203
+ }
204
+ }
205
+ /**
206
+ * Sign the transaction with the provided key. It does not check if the signer is allowed to sign
207
+ * it or not.
208
+ *
209
+ * @param {KeyPair} keyPair The key to sign the transaction with
210
+ */
211
+ async sign(keyPair) {
212
+ // TODO: fail if the transaction is already signed
213
+ // Check if there is a transaction to sign
214
+ if (!this._parsedTransaction) {
215
+ throw new sdk_core_1.InvalidTransactionError('Empty transaction');
216
+ }
217
+ // Get the transaction body to sign
218
+ const encodedTransaction = await local_forging_1.localForger.forge(this._parsedTransaction);
219
+ const signedTransaction = await Utils.sign(keyPair, encodedTransaction);
220
+ this._encodedTransaction = signedTransaction.sbytes;
221
+ // The transaction id can only be calculated for signed transactions
222
+ this._id = await Utils.calculateTransactionId(this._encodedTransaction);
223
+ await this.initFromParsedTransaction(this._parsedTransaction, this._id);
224
+ this._signatures.push(signedTransaction.sig);
225
+ }
226
+ /**
227
+ * Update the list of signatures for a multisig transaction operation.
228
+ *
229
+ * @param {IndexedSignature[]} signatures List of signatures and the index they should be put on
230
+ * in the multisig transfer
231
+ * @param {number} index The transfer index to add the signatures to
232
+ */
233
+ async addTransferSignature(signatures, index) {
234
+ if (!this._parsedTransaction) {
235
+ throw new sdk_core_1.InvalidTransactionError('Empty transaction');
236
+ }
237
+ (0, multisigUtils_1.updateMultisigTransferSignatures)(this._parsedTransaction.contents[index], signatures);
238
+ this._encodedTransaction = await local_forging_1.localForger.forge(this._parsedTransaction);
239
+ }
240
+ /** @inheritdoc */
241
+ canSign(key) {
242
+ // TODO: check the key belongs to the _source account in _parsedTransaction
243
+ return true;
244
+ }
245
+ /** @inheritdoc */
246
+ toJson() {
247
+ if (!this._parsedTransaction) {
248
+ throw new sdk_core_1.InvalidTransactionError('Empty transaction');
249
+ }
250
+ return this._parsedTransaction;
251
+ }
252
+ /** @inheritdoc */
253
+ toBroadcastFormat() {
254
+ if (!this._encodedTransaction) {
255
+ throw new sdk_core_1.InvalidTransactionError('Missing encoded transaction');
256
+ }
257
+ return this._encodedTransaction;
258
+ }
259
+ /**
260
+ * Get the transaction source if it is available.
261
+ *
262
+ * @returns {string} Source of the transaction
263
+ */
264
+ get source() {
265
+ if (!this._source) {
266
+ throw new sdk_core_1.InvalidTransactionError('Transaction not initialized');
267
+ }
268
+ return this._source;
269
+ }
270
+ /**
271
+ * Get the transaction delegation address if it is available.
272
+ *
273
+ * @returns {string} transaction delegation address
274
+ */
275
+ get delegate() {
276
+ return this._delegate;
277
+ }
278
+ /**
279
+ * Get the public key revealed by the transaction if it exists
280
+ *
281
+ * @returns {string} public key
282
+ */
283
+ get publicKeyToReveal() {
284
+ return this._publicKeyToReveal;
285
+ }
286
+ /**
287
+ * Get the destination of an address initialization transaction if it exists
288
+ *
289
+ * @returns {string} forwarder destination
290
+ */
291
+ get forwarderDestination() {
292
+ return this._forwarderDestination;
293
+ }
294
+ get owners() {
295
+ return this._owners;
296
+ }
297
+ /**
298
+ * Get the signatures for the given multisig transfer,
299
+ *
300
+ * @param {number} transferIndex The transfer script index in the Tezos transaction
301
+ * @returns {IndexedSignature[]} A list of signatures with their index inside the multisig transfer
302
+ * script
303
+ */
304
+ getTransferSignatures(transferIndex = 0) {
305
+ if (!this._parsedTransaction) {
306
+ return [];
307
+ }
308
+ return (0, multisigUtils_1.getMultisigTransferSignatures)(this._parsedTransaction.contents[transferIndex]);
309
+ }
310
+ /**
311
+ * Get the list of index per tezos transaction type. This is useful to locate specific operations
312
+ * within the transaction and verify or sign them.
313
+ *
314
+ * @returns {{[p: string]: number[]}} List of indexes where the key is the transaction kind
315
+ */
316
+ getIndexesByTransactionType() {
317
+ if (!this._parsedTransaction) {
318
+ return {};
319
+ }
320
+ const indexes = {};
321
+ for (let i = 0; i < this._parsedTransaction.contents.length; i++) {
322
+ const kind = this._parsedTransaction.contents[i].kind;
323
+ indexes[kind] = indexes[kind] ? indexes[kind].concat([i]) : [i];
324
+ }
325
+ return indexes;
326
+ }
327
+ }
328
+ exports.Transaction = Transaction;
329
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG1EQU04QjtBQUU5QiwwREFBNEQ7QUFDNUQsZ0VBQXFDO0FBR3JDLG1EQU15QjtBQUN6QiwrQ0FBaUM7QUFFakM7O0dBRUc7QUFDSCxNQUFhLFdBQVksU0FBUSwwQkFBZTtJQVM5Qzs7OztPQUlHO0lBQ0gsWUFBWSxVQUFnQztRQUMxQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDbEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxLQUFLLENBQUMsNkJBQTZCLENBQUMscUJBQTZCO1FBQy9ELElBQUksQ0FBQyxtQkFBbUIsR0FBRyxxQkFBcUIsQ0FBQztRQUNqRCxJQUFJLENBQUM7WUFDSCxNQUFNLGlCQUFpQixHQUFHLE1BQU0sMkJBQVcsQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQztZQUN6RSxNQUFNLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQzFELENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1gsNEZBQTRGO1lBQzVGLHlFQUF5RTtZQUN6RSxNQUFNLDZCQUE2QixHQUFHLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMzRSxNQUFNLFNBQVMsR0FBRyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNwRCxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO2dCQUN0QyxNQUFNLElBQUksZ0NBQXFCLENBQUMscUJBQXFCLENBQUMsQ0FBQztZQUN6RCxDQUFDO1lBQ0QsdURBQXVEO1lBQ3ZELE1BQU0saUJBQWlCLEdBQUcsTUFBTSwyQkFBVyxDQUFDLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1lBQ2pGLE1BQU0sYUFBYSxHQUFHLE1BQU0sS0FBSyxDQUFDLHNCQUFzQixDQUFDLHFCQUFxQixDQUFDLENBQUM7WUFDaEYsTUFBTSxJQUFJLENBQUMseUJBQXlCLENBQUMsaUJBQWlCLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDekUsQ0FBQztJQUNILENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxpQkFBb0MsRUFBRSxhQUFzQjtRQUMxRixJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLE1BQU0sMkJBQVcsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUN4RSxDQUFDO1FBQ0QsSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUNsQix1RkFBdUY7WUFDdkYsZUFBZTtZQUNmLElBQUksQ0FBQyxHQUFHLEdBQUcsYUFBYSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFDaEIsQ0FBQztRQUNELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxpQkFBaUIsQ0FBQztRQUM1QyxJQUFJLGNBQWMsR0FBRyxDQUFDLENBQUM7UUFDdkIsS0FBSyxNQUFNLFNBQVMsSUFBSSxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNuRCxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ3RELE1BQU0sSUFBSSxrQ0FBdUIsQ0FDL0Isa0VBQWtFLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FDOUcsQ0FBQztZQUNKLENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUM7WUFDbEMsQ0FBQztZQUNELFFBQVEsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUN2QixLQUFLLHFCQUFLLENBQUMsY0FBYztvQkFDdkIsTUFBTSxJQUFJLENBQUMseUJBQXlCLENBQUMsU0FBMEIsRUFBRSxjQUFjLENBQUMsQ0FBQztvQkFDakYsY0FBYyxFQUFFLENBQUM7b0JBQ2pCLE1BQU07Z0JBQ1IsS0FBSyxxQkFBSyxDQUFDLFNBQVM7b0JBQ2xCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxTQUFxQixDQUFDLENBQUM7b0JBQ2pELE1BQU07Z0JBQ1IsS0FBSyxxQkFBSyxDQUFDLGNBQWM7b0JBQ3ZCLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxTQUEwQixDQUFDLENBQUM7b0JBQzNELE1BQU07Z0JBQ1I7b0JBQ0UsTUFBTTtZQUNWLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNLLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxTQUF3QixFQUFFLEtBQWE7UUFDN0UsTUFBTSxlQUFlLEdBQUcsSUFBQSwrQ0FBK0IsRUFBQyxTQUFTLENBQUMsQ0FBQztRQUNuRSxJQUFJLGVBQWUsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQ3pDLElBQUksQ0FBQyxLQUFLLEdBQUcsMEJBQWUsQ0FBQyxxQkFBcUIsQ0FBQztZQUNuRCxJQUFJLENBQUMscUJBQXFCLEdBQUcsZUFBZSxDQUFDLG9CQUFvQixDQUFDO1FBQ3BFLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLEtBQUssR0FBRywwQkFBZSxDQUFDLG9CQUFvQixDQUFDO1lBQ2xELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBQSxtQ0FBbUIsRUFBQyxTQUFTLENBQUMsQ0FBQztRQUNoRCxDQUFDO1FBRUQsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO1lBQ2pCLHlFQUF5RTtZQUN6RSxPQUFPLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsMEJBQTBCLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNoRixVQUFVO1lBQ1YsS0FBSyxFQUFFLFNBQVMsQ0FBQyxPQUFPO1NBQ3pCLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO1lBQ2hCLE9BQU8sRUFBRSxTQUFTLENBQUMsTUFBTTtZQUN6Qix3RUFBd0U7WUFDeEUsS0FBSyxFQUFFLElBQUksc0JBQVMsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUU7U0FDdkUsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxvQkFBb0IsQ0FBQyxTQUFtQjtRQUM5QyxJQUFJLENBQUMsS0FBSyxHQUFHLDBCQUFlLENBQUMsYUFBYSxDQUFDO1FBQzNDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDO1FBQy9DLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO1lBQ2hCLE9BQU8sRUFBRSxTQUFTLENBQUMsTUFBTTtZQUN6Qix3RUFBd0U7WUFDeEUsS0FBSyxFQUFFLFNBQVMsQ0FBQyxHQUFHO1NBQ3JCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7OztPQUlHO0lBQ0sseUJBQXlCLENBQUMsU0FBd0I7UUFDeEQsSUFBSSxTQUFTLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLEtBQUssR0FBRywwQkFBZSxDQUFDLElBQUksQ0FBQztRQUNwQyxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxLQUFLLEdBQUcsMEJBQWUsQ0FBQyxhQUFhLENBQUM7UUFDN0MsQ0FBQztRQUNELE1BQU0sWUFBWSxHQUFHLElBQUEsb0RBQW9DLEVBQUMsU0FBUyxDQUFDLENBQUM7UUFDckUsZ0ZBQWdGO1FBQ2hGLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO1lBQ2hCLE9BQU8sRUFBRSxTQUFTLENBQUMsTUFBTTtZQUN6QixLQUFLLEVBQUUsSUFBSSxzQkFBUyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztTQUN0RCxDQUFDLENBQUM7UUFFSCxJQUFJLFlBQVksQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7Z0JBQ2pCLHlFQUF5RTtnQkFDekUsT0FBTyxFQUFFLFlBQVksQ0FBQyxFQUFFO2dCQUN4QixVQUFVO2dCQUNWLEtBQUssRUFBRSxZQUFZLENBQUMsTUFBTTthQUMzQixDQUFDLENBQUM7WUFDSCw4Q0FBOEM7WUFDOUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7Z0JBQ2hCLE9BQU8sRUFBRSxZQUFZLENBQUMsSUFBSTtnQkFDMUIsd0VBQXdFO2dCQUN4RSxLQUFLLEVBQUUsWUFBWSxDQUFDLE1BQU07YUFDM0IsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBZ0I7UUFDekIsa0RBQWtEO1FBQ2xELDBDQUEwQztRQUMxQyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDN0IsTUFBTSxJQUFJLGtDQUF1QixDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDekQsQ0FBQztRQUNELG1DQUFtQztRQUNuQyxNQUFNLGtCQUFrQixHQUFHLE1BQU0sMkJBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFFNUUsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLGtCQUFrQixDQUFDLENBQUM7UUFDeEUsSUFBSSxDQUFDLG1CQUFtQixHQUFHLGlCQUFpQixDQUFDLE1BQU0sQ0FBQztRQUVwRCxvRUFBb0U7UUFDcEUsSUFBSSxDQUFDLEdBQUcsR0FBRyxNQUFNLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUN4RSxNQUFNLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRXhFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxLQUFLLENBQUMsb0JBQW9CLENBQUMsVUFBOEIsRUFBRSxLQUFhO1FBQ3RFLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUM3QixNQUFNLElBQUksa0NBQXVCLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUN6RCxDQUFDO1FBQ0QsSUFBQSxnREFBZ0MsRUFBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBa0IsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUN2RyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsTUFBTSwyQkFBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUM5RSxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLE9BQU8sQ0FBQyxHQUFZO1FBQ2xCLDJFQUEyRTtRQUMzRSxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsTUFBTTtRQUNKLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUM3QixNQUFNLElBQUksa0NBQXVCLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUN6RCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUM7SUFDakMsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixpQkFBaUI7UUFDZixJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDOUIsTUFBTSxJQUFJLGtDQUF1QixDQUFDLDZCQUE2QixDQUFDLENBQUM7UUFDbkUsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDO0lBQ2xDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsSUFBSSxNQUFNO1FBQ1IsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNsQixNQUFNLElBQUksa0NBQXVCLENBQUMsNkJBQTZCLENBQUMsQ0FBQztRQUNuRSxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsSUFBSSxpQkFBaUI7UUFDbkIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUM7SUFDakMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxJQUFJLG9CQUFvQjtRQUN0QixPQUFPLElBQUksQ0FBQyxxQkFBcUIsQ0FBQztJQUNwQyxDQUFDO0lBRUQsSUFBSSxNQUFNO1FBQ1IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxxQkFBcUIsQ0FBQyxhQUFhLEdBQUcsQ0FBQztRQUNyQyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDN0IsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO1FBQ0QsT0FBTyxJQUFBLDZDQUE2QixFQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFrQixDQUFDLENBQUM7SUFDekcsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsMkJBQTJCO1FBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUM3QixPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7UUFDRCxNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDbkIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDakUsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDdEQsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEUsQ0FBQztRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7Q0FDRjtBQWxURCxrQ0FrVEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBCYXNlS2V5LFxuICBCYXNlVHJhbnNhY3Rpb24sXG4gIEludmFsaWRUcmFuc2FjdGlvbkVycm9yLFxuICBQYXJzZVRyYW5zYWN0aW9uRXJyb3IsXG4gIFRyYW5zYWN0aW9uVHlwZSxcbn0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgQ09ERUMsIGxvY2FsRm9yZ2VyIH0gZnJvbSAnQHRhcXVpdG8vbG9jYWwtZm9yZ2luZyc7XG5pbXBvcnQgQmlnTnVtYmVyIGZyb20gJ2JpZ251bWJlci5qcyc7XG5pbXBvcnQgeyBJbmRleGVkU2lnbmF0dXJlLCBPcmlnaW5hdGlvbk9wLCBQYXJzZWRUcmFuc2FjdGlvbiwgUmV2ZWFsT3AsIFRyYW5zYWN0aW9uT3AgfSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCB7IEtleVBhaXIgfSBmcm9tICcuL2tleVBhaXInO1xuaW1wb3J0IHtcbiAgZ2V0TXVsdGlzaWdUcmFuc2ZlckRhdGFGcm9tT3BlcmF0aW9uLFxuICBnZXRNdWx0aXNpZ1RyYW5zZmVyU2lnbmF0dXJlcyxcbiAgZ2V0T3JpZ2luYXRpb25EYXRhRnJvbU9wZXJhdGlvbixcbiAgZ2V0T3duZXJzUHVibGljS2V5cyxcbiAgdXBkYXRlTXVsdGlzaWdUcmFuc2ZlclNpZ25hdHVyZXMsXG59IGZyb20gJy4vbXVsdGlzaWdVdGlscyc7XG5pbXBvcnQgKiBhcyBVdGlscyBmcm9tICcuL3V0aWxzJztcblxuLyoqXG4gKiBUZXpvcyB0cmFuc2FjdGlvbiBtb2RlbC5cbiAqL1xuZXhwb3J0IGNsYXNzIFRyYW5zYWN0aW9uIGV4dGVuZHMgQmFzZVRyYW5zYWN0aW9uIHtcbiAgcHJpdmF0ZSBfcGFyc2VkVHJhbnNhY3Rpb24/OiBQYXJzZWRUcmFuc2FjdGlvbjsgLy8gdHJhbnNhY3Rpb24gaW4gSlNPTiBmb3JtYXRcbiAgcHJpdmF0ZSBfZW5jb2RlZFRyYW5zYWN0aW9uPzogc3RyaW5nOyAvLyB0cmFuc2FjdGlvbiBpbiBoZXggZm9ybWF0XG4gIHByaXZhdGUgX3NvdXJjZTogc3RyaW5nO1xuICBwcml2YXRlIF9kZWxlZ2F0ZT86IHN0cmluZztcbiAgcHJpdmF0ZSBfZm9yd2FyZGVyRGVzdGluYXRpb24/OiBzdHJpbmc7XG4gIHByaXZhdGUgX3B1YmxpY0tleVRvUmV2ZWFsPzogc3RyaW5nO1xuICBwcml2YXRlIF9vd25lcnM6IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBQdWJsaWMgY29uc3RydWN0b3IuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhZG9ubHk8Q29pbkNvbmZpZz59IGNvaW5Db25maWdcbiAgICovXG4gIGNvbnN0cnVjdG9yKGNvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoY29pbkNvbmZpZyk7XG4gICAgdGhpcy5fb3duZXJzID0gW107XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSB0aGUgdHJhbnNhY3Rpb24gZmllbGRzIGJhc2VkIG9uIGFub3RoZXIgc2VyaWFsaXplZCB0cmFuc2FjdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHNlcmlhbGl6ZWRUcmFuc2FjdGlvbiBUcmFuc2FjdGlvbiBpbiBicm9hZGNhc3QgZm9ybWF0LlxuICAgKi9cbiAgYXN5bmMgaW5pdEZyb21TZXJpYWxpemVkVHJhbnNhY3Rpb24oc2VyaWFsaXplZFRyYW5zYWN0aW9uOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLl9lbmNvZGVkVHJhbnNhY3Rpb24gPSBzZXJpYWxpemVkVHJhbnNhY3Rpb247XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhcnNlZFRyYW5zYWN0aW9uID0gYXdhaXQgbG9jYWxGb3JnZXIucGFyc2Uoc2VyaWFsaXplZFRyYW5zYWN0aW9uKTtcbiAgICAgIGF3YWl0IHRoaXMuaW5pdEZyb21QYXJzZWRUcmFuc2FjdGlvbihwYXJzZWRUcmFuc2FjdGlvbik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gSWYgaXQgdGhyb3dzLCBpdCBpcyBwb3NzaWJsZSB0aGUgc2VyaWFsaXplZCB0cmFuc2FjdGlvbiBpcyBzaWduZWQsIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWRcbiAgICAgIC8vIGJ5IGxvY2FsLWZvcmdpbmcuIFRyeSBleHRyYWN0aW5nIHRoZSBsYXN0IDY0IGJ5dGVzIGFuZCBwYXJzZSBpdCBhZ2Fpbi5cbiAgICAgIGNvbnN0IHVuc2lnbmVkU2VyaWFsaXplZFRyYW5zYWN0aW9uID0gc2VyaWFsaXplZFRyYW5zYWN0aW9uLnNsaWNlKDAsIC0xMjgpO1xuICAgICAgY29uc3Qgc2lnbmF0dXJlID0gc2VyaWFsaXplZFRyYW5zYWN0aW9uLnNsaWNlKC0xMjgpO1xuICAgICAgaWYgKFV0aWxzLmlzVmFsaWRTaWduYXR1cmUoc2lnbmF0dXJlKSkge1xuICAgICAgICB0aHJvdyBuZXcgUGFyc2VUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIHRyYW5zYWN0aW9uJyk7XG4gICAgICB9XG4gICAgICAvLyBUT0RPOiBlbmNvZGUgdGhlIHNpZ25hdHVyZSBhbmQgc2F2ZSBpdCBpbiBfc2lnbmF0dXJlXG4gICAgICBjb25zdCBwYXJzZWRUcmFuc2FjdGlvbiA9IGF3YWl0IGxvY2FsRm9yZ2VyLnBhcnNlKHVuc2lnbmVkU2VyaWFsaXplZFRyYW5zYWN0aW9uKTtcbiAgICAgIGNvbnN0IHRyYW5zYWN0aW9uSWQgPSBhd2FpdCBVdGlscy5jYWxjdWxhdGVUcmFuc2FjdGlvbklkKHNlcmlhbGl6ZWRUcmFuc2FjdGlvbik7XG4gICAgICBhd2FpdCB0aGlzLmluaXRGcm9tUGFyc2VkVHJhbnNhY3Rpb24ocGFyc2VkVHJhbnNhY3Rpb24sIHRyYW5zYWN0aW9uSWQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIHRoZSB0cmFuc2FjdGlvbiBmaWVsZHMgYmFzZWQgb24gYW5vdGhlciBwYXJzZWQgdHJhbnNhY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7UGFyc2VkVHJhbnNhY3Rpb259IHBhcnNlZFRyYW5zYWN0aW9uIEEgVGV6b3MgdHJhbnNhY3Rpb24gb2JqZWN0XG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0cmFuc2FjdGlvbklkIFRoZSB0cmFuc2FjdGlvbiBpZCBvZiB0aGUgcGFyc2VkVHJhbnNhY3Rpb24gaWYgaXQgaXMgc2lnbmVkXG4gICAqL1xuICBhc3luYyBpbml0RnJvbVBhcnNlZFRyYW5zYWN0aW9uKHBhcnNlZFRyYW5zYWN0aW9uOiBQYXJzZWRUcmFuc2FjdGlvbiwgdHJhbnNhY3Rpb25JZD86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5fZW5jb2RlZFRyYW5zYWN0aW9uKSB7XG4gICAgICB0aGlzLl9lbmNvZGVkVHJhbnNhY3Rpb24gPSBhd2FpdCBsb2NhbEZvcmdlci5mb3JnZShwYXJzZWRUcmFuc2FjdGlvbik7XG4gICAgfVxuICAgIGlmICh0cmFuc2FjdGlvbklkKSB7XG4gICAgICAvLyBJZiB0aGUgdHJhbnNhY3Rpb24gaWQgaXMgcGFzc2VkLCBzYXZlIGl0IGFuZCBjbGVhbiB1cCB0aGUgZW50cmllcyBzaW5jZSB0aGV5IHdpbGwgYmVcbiAgICAgIC8vIHJlY2FsY3VsYXRlZFxuICAgICAgdGhpcy5faWQgPSB0cmFuc2FjdGlvbklkO1xuICAgICAgdGhpcy5faW5wdXRzID0gW107XG4gICAgICB0aGlzLl9vdXRwdXRzID0gW107XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2lkID0gJyc7XG4gICAgfVxuICAgIHRoaXMuX3BhcnNlZFRyYW5zYWN0aW9uID0gcGFyc2VkVHJhbnNhY3Rpb247XG4gICAgbGV0IG9wZXJhdGlvbkluZGV4ID0gMDtcbiAgICBmb3IgKGNvbnN0IG9wZXJhdGlvbiBvZiBwYXJzZWRUcmFuc2FjdGlvbi5jb250ZW50cykge1xuICAgICAgaWYgKHRoaXMuX3NvdXJjZSAmJiB0aGlzLl9zb3VyY2UgIT09IG9wZXJhdGlvbi5zb3VyY2UpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKFxuICAgICAgICAgICdTb3VyY2UgbXVzdCBiZSB0aGUgc2FtZSBmb3IgZXZlcnkgb3BlcmF0aW9uIGJ1dCBpdCBjaGFuZ2VkIGZyb20gJyArIHRoaXMuX3NvdXJjZSArICcgdG8gJyArIG9wZXJhdGlvbi5zb3VyY2VcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX3NvdXJjZSA9IG9wZXJhdGlvbi5zb3VyY2U7XG4gICAgICB9XG4gICAgICBzd2l0Y2ggKG9wZXJhdGlvbi5raW5kKSB7XG4gICAgICAgIGNhc2UgQ09ERUMuT1BfT1JJR0lOQVRJT046XG4gICAgICAgICAgYXdhaXQgdGhpcy5yZWNvcmRPcmlnaW5hdGlvbk9wRmllbGRzKG9wZXJhdGlvbiBhcyBPcmlnaW5hdGlvbk9wLCBvcGVyYXRpb25JbmRleCk7XG4gICAgICAgICAgb3BlcmF0aW9uSW5kZXgrKztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBDT0RFQy5PUF9SRVZFQUw6XG4gICAgICAgICAgdGhpcy5yZWNvcmRSZXZlYWxPcEZpZWxkcyhvcGVyYXRpb24gYXMgUmV2ZWFsT3ApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIENPREVDLk9QX1RSQU5TQUNUSU9OOlxuICAgICAgICAgIHRoaXMucmVjb3JkVHJhbnNhY3Rpb25PcEZpZWxkcyhvcGVyYXRpb24gYXMgVHJhbnNhY3Rpb25PcCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlY29yZCB0aGUgbW9zdCBpbXBvcnRhbnQgZmllbGRzIGZyb20gYW4gb3JpZ2luYXRpb24gb3BlcmF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge09wZXJhdGlvbn0gb3BlcmF0aW9uIEFuIG9wZXJhdGlvbiBvYmplY3QgZnJvbSBhIFRlem9zIHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCBUaGUgb3JpZ2luYXRpb24gb3BlcmF0aW9uIGluZGV4IGluIHRoZSB0cmFuc2FjdGlvbi4gVXNlZCB0byBjYWxjdWxhdGUgdGhlXG4gICAqICAgICAgb3JpZ2luYXRlZCBhZGRyZXNzXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHJlY29yZE9yaWdpbmF0aW9uT3BGaWVsZHMob3BlcmF0aW9uOiBPcmlnaW5hdGlvbk9wLCBpbmRleDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgb3JpZ2luYXRpb25EYXRhID0gZ2V0T3JpZ2luYXRpb25EYXRhRnJvbU9wZXJhdGlvbihvcGVyYXRpb24pO1xuICAgIGlmIChvcmlnaW5hdGlvbkRhdGEuZm9yd2FyZGVyRGVzdGluYXRpb24pIHtcbiAgICAgIHRoaXMuX3R5cGUgPSBUcmFuc2FjdGlvblR5cGUuQWRkcmVzc0luaXRpYWxpemF0aW9uO1xuICAgICAgdGhpcy5fZm9yd2FyZGVyRGVzdGluYXRpb24gPSBvcmlnaW5hdGlvbkRhdGEuZm9yd2FyZGVyRGVzdGluYXRpb247XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3R5cGUgPSBUcmFuc2FjdGlvblR5cGUuV2FsbGV0SW5pdGlhbGl6YXRpb247XG4gICAgICB0aGlzLl9vd25lcnMgPSBnZXRPd25lcnNQdWJsaWNLZXlzKG9wZXJhdGlvbik7XG4gICAgfVxuXG4gICAgdGhpcy5fZGVsZWdhdGUgPSBvcGVyYXRpb24uZGVsZWdhdGU7XG4gICAgdGhpcy5fb3V0cHV0cy5wdXNoKHtcbiAgICAgIC8vIEt0IGFkZHJlc3NlcyBjYW4gb25seSBiZSBjYWxjdWxhdGVkIGZvciBzaWduZWQgdHJhbnNhY3Rpb25zIHdpdGggYW4gaWRcbiAgICAgIGFkZHJlc3M6IHRoaXMuX2lkID8gYXdhaXQgVXRpbHMuY2FsY3VsYXRlT3JpZ2luYXRlZEFkZHJlc3ModGhpcy5faWQsIGluZGV4KSA6ICcnLFxuICAgICAgLy8gQmFsYW5jZVxuICAgICAgdmFsdWU6IG9wZXJhdGlvbi5iYWxhbmNlLFxuICAgIH0pO1xuICAgIHRoaXMuX2lucHV0cy5wdXNoKHtcbiAgICAgIGFkZHJlc3M6IG9wZXJhdGlvbi5zb3VyY2UsXG4gICAgICAvLyBCYWxhbmNlICsgZmVlcyArIG1heCBnYXMgKyBtYXggc3RvcmFnZSBhcmUgcGFpZCBieSB0aGUgc291cmNlIGFjY291bnRcbiAgICAgIHZhbHVlOiBuZXcgQmlnTnVtYmVyKG9wZXJhdGlvbi5iYWxhbmNlKS5wbHVzKG9wZXJhdGlvbi5mZWUpLnRvU3RyaW5nKCksXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVjb3JkIHRoZSBtb3N0IGltcG9ydGFudCBmaWVsZHMgZnJvbSBhIHJldmVhbCBvcGVyYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7UmV2ZWFsT3B9IG9wZXJhdGlvbiBBIHJldmVhbCBvcGVyYXRpb24gb2JqZWN0IGZyb20gYSBUZXpvcyB0cmFuc2FjdGlvblxuICAgKi9cbiAgcHJpdmF0ZSByZWNvcmRSZXZlYWxPcEZpZWxkcyhvcGVyYXRpb246IFJldmVhbE9wKTogdm9pZCB7XG4gICAgdGhpcy5fdHlwZSA9IFRyYW5zYWN0aW9uVHlwZS5BY2NvdW50VXBkYXRlO1xuICAgIHRoaXMuX3B1YmxpY0tleVRvUmV2ZWFsID0gb3BlcmF0aW9uLnB1YmxpY19rZXk7XG4gICAgdGhpcy5faW5wdXRzLnB1c2goe1xuICAgICAgYWRkcmVzczogb3BlcmF0aW9uLnNvdXJjZSxcbiAgICAgIC8vIEJhbGFuY2UgKyBmZWVzICsgbWF4IGdhcyArIG1heCBzdG9yYWdlIGFyZSBwYWlkIGJ5IHRoZSBzb3VyY2UgYWNjb3VudFxuICAgICAgdmFsdWU6IG9wZXJhdGlvbi5mZWUsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVjb3JkIHRoZSBtb3N0IGltcG9ydGFudCBmaWVsZHMgZm9yIGEgVHJhbnNhY3Rpb24gb3BlcmF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge1RyYW5zYWN0aW9uT3B9IG9wZXJhdGlvbiBBIHRyYW5zYWN0aW9uIG9iamVjdCBmcm9tIGEgVGV6b3Mgb3BlcmF0aW9uXG4gICAqL1xuICBwcml2YXRlIHJlY29yZFRyYW5zYWN0aW9uT3BGaWVsZHMob3BlcmF0aW9uOiBUcmFuc2FjdGlvbk9wKTogdm9pZCB7XG4gICAgaWYgKG9wZXJhdGlvbi5wYXJhbWV0ZXJzKSB7XG4gICAgICB0aGlzLl90eXBlID0gVHJhbnNhY3Rpb25UeXBlLlNlbmQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3R5cGUgPSBUcmFuc2FjdGlvblR5cGUuU2luZ2xlU2lnU2VuZDtcbiAgICB9XG4gICAgY29uc3QgdHJhbnNmZXJEYXRhID0gZ2V0TXVsdGlzaWdUcmFuc2ZlckRhdGFGcm9tT3BlcmF0aW9uKG9wZXJhdGlvbik7XG4gICAgLy8gRmVlcyBhcmUgcGFpZCBieSB0aGUgc291cmNlIGFjY291bnQsIGFsb25nIHdpdGggdGhlIGFtb3VudCBpbiB0aGUgdHJhbnNhY3Rpb25cbiAgICB0aGlzLl9pbnB1dHMucHVzaCh7XG4gICAgICBhZGRyZXNzOiBvcGVyYXRpb24uc291cmNlLFxuICAgICAgdmFsdWU6IG5ldyBCaWdOdW1iZXIodHJhbnNmZXJEYXRhLmZlZS5mZWUpLnRvRml4ZWQoMCksXG4gICAgfSk7XG5cbiAgICBpZiAodHJhbnNmZXJEYXRhLmNvaW4gPT09ICdtdXRleicpIHtcbiAgICAgIHRoaXMuX291dHB1dHMucHVzaCh7XG4gICAgICAgIC8vIEt0IGFkZHJlc3NlcyBjYW4gb25seSBiZSBjYWxjdWxhdGVkIGZvciBzaWduZWQgdHJhbnNhY3Rpb25zIHdpdGggYW4gaWRcbiAgICAgICAgYWRkcmVzczogdHJhbnNmZXJEYXRhLnRvLFxuICAgICAgICAvLyBCYWxhbmNlXG4gICAgICAgIHZhbHVlOiB0cmFuc2ZlckRhdGEuYW1vdW50LFxuICAgICAgfSk7XG4gICAgICAvLyBUaGUgZnVuZHMgYmVpbmcgdHJhbnNmZXJyZWQgZnJvbSB0aGUgd2FsbGV0XG4gICAgICB0aGlzLl9pbnB1dHMucHVzaCh7XG4gICAgICAgIGFkZHJlc3M6IHRyYW5zZmVyRGF0YS5mcm9tLFxuICAgICAgICAvLyBCYWxhbmNlICsgZmVlcyArIG1heCBnYXMgKyBtYXggc3RvcmFnZSBhcmUgcGFpZCBieSB0aGUgc291cmNlIGFjY291bnRcbiAgICAgICAgdmFsdWU6IHRyYW5zZmVyRGF0YS5hbW91bnQsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2lnbiB0aGUgdHJhbnNhY3Rpb24gd2l0aCB0aGUgcHJvdmlkZWQga2V5LiBJdCBkb2VzIG5vdCBjaGVjayBpZiB0aGUgc2lnbmVyIGlzIGFsbG93ZWQgdG8gc2lnblxuICAgKiBpdCBvciBub3QuXG4gICAqXG4gICAqIEBwYXJhbSB7S2V5UGFpcn0ga2V5UGFpciBUaGUga2V5IHRvIHNpZ24gdGhlIHRyYW5zYWN0aW9uIHdpdGhcbiAgICovXG4gIGFzeW5jIHNpZ24oa2V5UGFpcjogS2V5UGFpcik6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIFRPRE86IGZhaWwgaWYgdGhlIHRyYW5zYWN0aW9uIGlzIGFscmVhZHkgc2lnbmVkXG4gICAgLy8gQ2hlY2sgaWYgdGhlcmUgaXMgYSB0cmFuc2FjdGlvbiB0byBzaWduXG4gICAgaWYgKCF0aGlzLl9wYXJzZWRUcmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdFbXB0eSB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgICAvLyBHZXQgdGhlIHRyYW5zYWN0aW9uIGJvZHkgdG8gc2lnblxuICAgIGNvbnN0IGVuY29kZWRUcmFuc2FjdGlvbiA9IGF3YWl0IGxvY2FsRm9yZ2VyLmZvcmdlKHRoaXMuX3BhcnNlZFRyYW5zYWN0aW9uKTtcblxuICAgIGNvbnN0IHNpZ25lZFRyYW5zYWN0aW9uID0gYXdhaXQgVXRpbHMuc2lnbihrZXlQYWlyLCBlbmNvZGVkVHJhbnNhY3Rpb24pO1xuICAgIHRoaXMuX2VuY29kZWRUcmFuc2FjdGlvbiA9IHNpZ25lZFRyYW5zYWN0aW9uLnNieXRlcztcblxuICAgIC8vIFRoZSB0cmFuc2FjdGlvbiBpZCBjYW4gb25seSBiZSBjYWxjdWxhdGVkIGZvciBzaWduZWQgdHJhbnNhY3Rpb25zXG4gICAgdGhpcy5faWQgPSBhd2FpdCBVdGlscy5jYWxjdWxhdGVUcmFuc2FjdGlvbklkKHRoaXMuX2VuY29kZWRUcmFuc2FjdGlvbik7XG4gICAgYXdhaXQgdGhpcy5pbml0RnJvbVBhcnNlZFRyYW5zYWN0aW9uKHRoaXMuX3BhcnNlZFRyYW5zYWN0aW9uLCB0aGlzLl9pZCk7XG5cbiAgICB0aGlzLl9zaWduYXR1cmVzLnB1c2goc2lnbmVkVHJhbnNhY3Rpb24uc2lnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIGxpc3Qgb2Ygc2lnbmF0dXJlcyBmb3IgYSBtdWx0aXNpZyB0cmFuc2FjdGlvbiBvcGVyYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7SW5kZXhlZFNpZ25hdHVyZVtdfSBzaWduYXR1cmVzIExpc3Qgb2Ygc2lnbmF0dXJlcyBhbmQgdGhlIGluZGV4IHRoZXkgc2hvdWxkIGJlIHB1dCBvblxuICAgKiAgICBpbiB0aGUgbXVsdGlzaWcgdHJhbnNmZXJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IFRoZSB0cmFuc2ZlciBpbmRleCB0byBhZGQgdGhlIHNpZ25hdHVyZXMgdG9cbiAgICovXG4gIGFzeW5jIGFkZFRyYW5zZmVyU2lnbmF0dXJlKHNpZ25hdHVyZXM6IEluZGV4ZWRTaWduYXR1cmVbXSwgaW5kZXg6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5fcGFyc2VkVHJhbnNhY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignRW1wdHkgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG4gICAgdXBkYXRlTXVsdGlzaWdUcmFuc2ZlclNpZ25hdHVyZXModGhpcy5fcGFyc2VkVHJhbnNhY3Rpb24uY29udGVudHNbaW5kZXhdIGFzIFRyYW5zYWN0aW9uT3AsIHNpZ25hdHVyZXMpO1xuICAgIHRoaXMuX2VuY29kZWRUcmFuc2FjdGlvbiA9IGF3YWl0IGxvY2FsRm9yZ2VyLmZvcmdlKHRoaXMuX3BhcnNlZFRyYW5zYWN0aW9uKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBjYW5TaWduKGtleTogQmFzZUtleSk6IGJvb2xlYW4ge1xuICAgIC8vIFRPRE86IGNoZWNrIHRoZSBrZXkgYmVsb25ncyB0byB0aGUgX3NvdXJjZSBhY2NvdW50IGluIF9wYXJzZWRUcmFuc2FjdGlvblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHRvSnNvbigpOiBQYXJzZWRUcmFuc2FjdGlvbiB7XG4gICAgaWYgKCF0aGlzLl9wYXJzZWRUcmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdFbXB0eSB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fcGFyc2VkVHJhbnNhY3Rpb247XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdG9Ccm9hZGNhc3RGb3JtYXQoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuX2VuY29kZWRUcmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdNaXNzaW5nIGVuY29kZWQgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2VuY29kZWRUcmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHRyYW5zYWN0aW9uIHNvdXJjZSBpZiBpdCBpcyBhdmFpbGFibGUuXG4gICAqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFNvdXJjZSBvZiB0aGUgdHJhbnNhY3Rpb25cbiAgICovXG4gIGdldCBzb3VyY2UoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuX3NvdXJjZSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdUcmFuc2FjdGlvbiBub3QgaW5pdGlhbGl6ZWQnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3NvdXJjZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHRyYW5zYWN0aW9uIGRlbGVnYXRpb24gYWRkcmVzcyBpZiBpdCBpcyBhdmFpbGFibGUuXG4gICAqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IHRyYW5zYWN0aW9uIGRlbGVnYXRpb24gYWRkcmVzc1xuICAgKi9cbiAgZ2V0IGRlbGVnYXRlKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2RlbGVnYXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcHVibGljIGtleSByZXZlYWxlZCBieSB0aGUgdHJhbnNhY3Rpb24gaWYgaXQgZXhpc3RzXG4gICAqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IHB1YmxpYyBrZXlcbiAgICovXG4gIGdldCBwdWJsaWNLZXlUb1JldmVhbCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9wdWJsaWNLZXlUb1JldmVhbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGRlc3RpbmF0aW9uIG9mIGFuIGFkZHJlc3MgaW5pdGlhbGl6YXRpb24gdHJhbnNhY3Rpb24gaWYgaXQgZXhpc3RzXG4gICAqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IGZvcndhcmRlciBkZXN0aW5hdGlvblxuICAgKi9cbiAgZ2V0IGZvcndhcmRlckRlc3RpbmF0aW9uKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2ZvcndhcmRlckRlc3RpbmF0aW9uO1xuICB9XG5cbiAgZ2V0IG93bmVycygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuX293bmVycztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHNpZ25hdHVyZXMgZm9yIHRoZSBnaXZlbiBtdWx0aXNpZyB0cmFuc2ZlcixcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHRyYW5zZmVySW5kZXggVGhlIHRyYW5zZmVyIHNjcmlwdCBpbmRleCBpbiB0aGUgVGV6b3MgdHJhbnNhY3Rpb25cbiAgICogQHJldHVybnMge0luZGV4ZWRTaWduYXR1cmVbXX0gQSBsaXN0IG9mIHNpZ25hdHVyZXMgd2l0aCB0aGVpciBpbmRleCBpbnNpZGUgdGhlIG11bHRpc2lnIHRyYW5zZmVyXG4gICAqICAgICAgc2NyaXB0XG4gICAqL1xuICBnZXRUcmFuc2ZlclNpZ25hdHVyZXModHJhbnNmZXJJbmRleCA9IDApOiBJbmRleGVkU2lnbmF0dXJlW10ge1xuICAgIGlmICghdGhpcy5fcGFyc2VkVHJhbnNhY3Rpb24pIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgcmV0dXJuIGdldE11bHRpc2lnVHJhbnNmZXJTaWduYXR1cmVzKHRoaXMuX3BhcnNlZFRyYW5zYWN0aW9uLmNvbnRlbnRzW3RyYW5zZmVySW5kZXhdIGFzIFRyYW5zYWN0aW9uT3ApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbGlzdCBvZiBpbmRleCBwZXIgdGV6b3MgdHJhbnNhY3Rpb24gdHlwZS4gVGhpcyBpcyB1c2VmdWwgdG8gbG9jYXRlIHNwZWNpZmljIG9wZXJhdGlvbnNcbiAgICogd2l0aGluIHRoZSB0cmFuc2FjdGlvbiBhbmQgdmVyaWZ5IG9yIHNpZ24gdGhlbS5cbiAgICpcbiAgICogQHJldHVybnMge3tbcDogc3RyaW5nXTogbnVtYmVyW119fSBMaXN0IG9mIGluZGV4ZXMgd2hlcmUgdGhlIGtleSBpcyB0aGUgdHJhbnNhY3Rpb24ga2luZFxuICAgKi9cbiAgZ2V0SW5kZXhlc0J5VHJhbnNhY3Rpb25UeXBlKCk6IHsgW2tpbmQ6IHN0cmluZ106IG51bWJlcltdIH0ge1xuICAgIGlmICghdGhpcy5fcGFyc2VkVHJhbnNhY3Rpb24pIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgY29uc3QgaW5kZXhlcyA9IHt9O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fcGFyc2VkVHJhbnNhY3Rpb24uY29udGVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGtpbmQgPSB0aGlzLl9wYXJzZWRUcmFuc2FjdGlvbi5jb250ZW50c1tpXS5raW5kO1xuICAgICAgaW5kZXhlc1traW5kXSA9IGluZGV4ZXNba2luZF0gPyBpbmRleGVzW2tpbmRdLmNvbmNhdChbaV0pIDogW2ldO1xuICAgIH1cbiAgICByZXR1cm4gaW5kZXhlcztcbiAgfVxufVxuIl19
@@ -0,0 +1,171 @@
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