@bitgo-beta/sdk-coin-iota 1.0.1-beta.32 → 1.0.1-beta.321

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 (63) hide show
  1. package/README.md +1 -1
  2. package/dist/src/iota.d.ts +13 -2
  3. package/dist/src/iota.d.ts.map +1 -1
  4. package/dist/src/iota.js +142 -22
  5. package/dist/src/lib/constants.d.ts +10 -6
  6. package/dist/src/lib/constants.d.ts.map +1 -1
  7. package/dist/src/lib/constants.js +12 -8
  8. package/dist/src/lib/iface.d.ts +33 -1
  9. package/dist/src/lib/iface.d.ts.map +1 -1
  10. package/dist/src/lib/iface.js +1 -1
  11. package/dist/src/lib/index.d.ts +1 -0
  12. package/dist/src/lib/index.d.ts.map +1 -1
  13. package/dist/src/lib/index.js +4 -2
  14. package/dist/src/lib/transaction.d.ts +72 -5
  15. package/dist/src/lib/transaction.d.ts.map +1 -1
  16. package/dist/src/lib/transaction.js +270 -6
  17. package/dist/src/lib/transactionBuilder.d.ts +70 -9
  18. package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
  19. package/dist/src/lib/transactionBuilder.js +155 -14
  20. package/dist/src/lib/transactionBuilderFactory.d.ts +15 -2
  21. package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
  22. package/dist/src/lib/transactionBuilderFactory.js +45 -5
  23. package/dist/src/lib/transferBuilder.d.ts +10 -2
  24. package/dist/src/lib/transferBuilder.d.ts.map +1 -1
  25. package/dist/src/lib/transferBuilder.js +45 -3
  26. package/dist/src/lib/transferTransaction.d.ts +28 -0
  27. package/dist/src/lib/transferTransaction.d.ts.map +1 -0
  28. package/dist/src/lib/transferTransaction.js +173 -0
  29. package/dist/src/lib/utils.d.ts +2 -0
  30. package/dist/src/lib/utils.d.ts.map +1 -1
  31. package/dist/src/lib/utils.js +28 -4
  32. package/dist/test/resources/iota.d.ts +35 -0
  33. package/dist/test/resources/iota.d.ts.map +1 -0
  34. package/dist/test/resources/iota.js +93 -0
  35. package/dist/test/unit/index.d.ts +2 -0
  36. package/dist/test/unit/index.d.ts.map +1 -0
  37. package/dist/test/unit/index.js +16 -0
  38. package/dist/test/unit/iota.d.ts +2 -0
  39. package/dist/test/unit/iota.d.ts.map +1 -0
  40. package/dist/test/unit/iota.js +603 -0
  41. package/dist/test/unit/keyPair.d.ts +2 -0
  42. package/dist/test/unit/keyPair.d.ts.map +1 -0
  43. package/dist/test/unit/keyPair.js +135 -0
  44. package/dist/test/unit/transactionBuilder/transactionBuilder.d.ts +2 -0
  45. package/dist/test/unit/transactionBuilder/transactionBuilder.d.ts.map +1 -0
  46. package/dist/test/unit/transactionBuilder/transactionBuilder.js +306 -0
  47. package/dist/test/unit/transactionBuilder/transactionBuilderFactory.d.ts +2 -0
  48. package/dist/test/unit/transactionBuilder/transactionBuilderFactory.d.ts.map +1 -0
  49. package/dist/test/unit/transactionBuilder/transactionBuilderFactory.js +243 -0
  50. package/dist/test/unit/transactionBuilder/transferBuilder.d.ts +2 -0
  51. package/dist/test/unit/transactionBuilder/transferBuilder.d.ts.map +1 -0
  52. package/dist/test/unit/transactionBuilder/transferBuilder.js +400 -0
  53. package/dist/test/unit/transferTransaction.d.ts +2 -0
  54. package/dist/test/unit/transferTransaction.d.ts.map +1 -0
  55. package/dist/test/unit/transferTransaction.js +465 -0
  56. package/dist/test/unit/utils.d.ts +2 -0
  57. package/dist/test/unit/utils.d.ts.map +1 -0
  58. package/dist/test/unit/utils.js +278 -0
  59. package/dist/tsconfig.tsbuildinfo +1 -0
  60. package/package.json +16 -10
  61. package/.eslintignore +0 -5
  62. package/.mocharc.yml +0 -8
  63. package/CHANGELOG.md +0 -0
@@ -1,17 +1,281 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  exports.Transaction = void 0;
4
7
  const sdk_core_1 = require("@bitgo-beta/sdk-core");
8
+ const transactions_1 = require("@iota/iota-sdk/transactions");
9
+ const utils_1 = require("@iota/iota-sdk/utils");
10
+ const blake2b_1 = __importDefault(require("@bitgo-beta/blake2b"));
11
+ const constants_1 = require("./constants");
12
+ const utils_2 = __importDefault(require("./utils"));
5
13
  class Transaction extends sdk_core_1.BaseTransaction {
6
- canSign(key) {
7
- throw new Error('Method not implemented.');
14
+ constructor(coinConfig) {
15
+ super(coinConfig);
16
+ this._sender = '';
17
+ this._rebuildRequired = false;
18
+ this._isSimulateTx = true;
19
+ }
20
+ get gasBudget() {
21
+ return this._gasBudget;
22
+ }
23
+ set gasBudget(value) {
24
+ this._gasBudget = value;
25
+ this._rebuildRequired = true;
26
+ }
27
+ get gasPaymentObjects() {
28
+ return this._gasPaymentObjects;
29
+ }
30
+ set gasPaymentObjects(value) {
31
+ this._gasPaymentObjects = value;
32
+ this._rebuildRequired = true;
33
+ }
34
+ get gasPrice() {
35
+ return this._gasPrice;
36
+ }
37
+ set gasPrice(value) {
38
+ this._gasPrice = value;
39
+ this._rebuildRequired = true;
40
+ }
41
+ get gasSponsor() {
42
+ return this._gasSponsor;
43
+ }
44
+ set gasSponsor(value) {
45
+ this._gasSponsor = value;
46
+ this._rebuildRequired = true;
47
+ }
48
+ get sender() {
49
+ return this._sender;
50
+ }
51
+ set sender(value) {
52
+ this._sender = value;
53
+ this._rebuildRequired = true;
54
+ }
55
+ get isSimulateTx() {
56
+ return this._isSimulateTx;
57
+ }
58
+ set isSimulateTx(value) {
59
+ if (!value) {
60
+ try {
61
+ this.validateTxData();
62
+ this._rebuildRequired = true;
63
+ }
64
+ catch (error) {
65
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
66
+ throw new Error(`Tx data validation failed: ${errorMessage}. {Cause: ${error}}`);
67
+ }
68
+ }
69
+ this._isSimulateTx = value;
70
+ }
71
+ get signablePayload() {
72
+ if (this.isSimulateTx) {
73
+ throw new Error('Cannot sign a simulate tx');
74
+ }
75
+ if (this._txDataBytes === undefined || this._rebuildRequired) {
76
+ throw new Error('Tx not built or a rebuild is required');
77
+ }
78
+ const intentMessage = this.messageWithIntent(this._txDataBytes);
79
+ return Buffer.from((0, blake2b_1.default)(32).update(intentMessage).digest('binary'));
80
+ }
81
+ /** @inheritDoc **/
82
+ get id() {
83
+ if (this._txDataBytes === undefined || this._rebuildRequired) {
84
+ throw new Error('Tx not built or a rebuild is required');
85
+ }
86
+ return transactions_1.TransactionDataBuilder.getDigestFromBytes(this._txDataBytes);
87
+ }
88
+ addSignature(publicKey, signature) {
89
+ this._signature = { publicKey, signature };
90
+ }
91
+ addGasSponsorSignature(publicKey, signature) {
92
+ this._gasSponsorSignature = { publicKey, signature };
93
+ }
94
+ canSign(_key) {
95
+ return !this.isSimulateTx;
96
+ }
97
+ getFee() {
98
+ return this.gasBudget?.toString();
99
+ }
100
+ get serializedGasSponsorSignature() {
101
+ return this._serializedGasSponsorSignature;
102
+ }
103
+ get serializedSignature() {
104
+ return this._serializedSignature;
105
+ }
106
+ serializeSignatures() {
107
+ this._signatures = [];
108
+ if (this._signature) {
109
+ this._serializedSignature = this.serializeSignature(this._signature);
110
+ this._signatures.push(this._serializedSignature);
111
+ }
112
+ if (this._gasSponsorSignature) {
113
+ this._serializedGasSponsorSignature = this.serializeSignature(this._gasSponsorSignature);
114
+ this._signatures.push(this._serializedGasSponsorSignature);
115
+ }
116
+ }
117
+ async toBroadcastFormat() {
118
+ const txDataBytes = await this.build();
119
+ return (0, utils_1.toBase64)(txDataBytes);
120
+ }
121
+ async build() {
122
+ if (this.isSimulateTx) {
123
+ return this.buildDryRunTransaction();
124
+ }
125
+ return this.buildTransaction();
8
126
  }
9
127
  toJson() {
10
- throw new Error('Method not implemented.');
128
+ return {
129
+ sender: this.sender,
130
+ gasBudget: this.gasBudget,
131
+ gasPrice: this.gasPrice,
132
+ gasPaymentObjects: this.gasPaymentObjects,
133
+ gasSponsor: this.gasSponsor,
134
+ type: this.type,
135
+ };
136
+ }
137
+ parseFromJSON(txData) {
138
+ this.sender = txData.sender;
139
+ this.gasBudget = txData.gasBudget;
140
+ this.gasPrice = txData.gasPrice;
141
+ this.gasPaymentObjects = txData.gasPaymentObjects;
142
+ if (txData.gasSponsor !== undefined) {
143
+ this.gasSponsor = txData.gasSponsor;
144
+ }
145
+ }
146
+ parseFromBroadcastTx(tx) {
147
+ const txData = transactions_1.Transaction.from(tx).getData();
148
+ if (txData.sender) {
149
+ this.sender = txData.sender;
150
+ }
151
+ if (txData.gasData?.budget) {
152
+ this.gasBudget = Number(txData.gasData.budget);
153
+ }
154
+ else {
155
+ this.gasBudget = undefined;
156
+ }
157
+ if (txData.gasData?.price) {
158
+ this.gasPrice = Number(txData.gasData.price);
159
+ }
160
+ else {
161
+ this.gasPrice = undefined;
162
+ }
163
+ if (txData.gasData?.payment && txData.gasData.payment.length > 0) {
164
+ this.gasPaymentObjects = txData.gasData.payment.map((payment) => payment);
165
+ }
166
+ else {
167
+ this.gasPaymentObjects = undefined;
168
+ }
169
+ if (txData.gasData?.owner) {
170
+ this.gasSponsor = txData.gasData.owner;
171
+ }
172
+ else {
173
+ this.gasSponsor = undefined;
174
+ }
175
+ }
176
+ /**
177
+ * @inheritDoc
178
+ */
179
+ explainTransaction() {
180
+ const result = this.toJson();
181
+ const displayOrder = ['id', 'outputs', 'outputAmount', 'changeOutputs', 'changeAmount', 'fee', 'type'];
182
+ const outputs = [];
183
+ const explanationResult = {
184
+ displayOrder,
185
+ id: this.id,
186
+ outputs,
187
+ outputAmount: '0',
188
+ changeOutputs: [],
189
+ changeAmount: '0',
190
+ fee: { fee: this.gasBudget ? this.gasBudget.toString() : '' },
191
+ sender: this.sender,
192
+ sponsor: this.gasSponsor,
193
+ type: this.type,
194
+ };
195
+ return this.explainTransactionImplementation(result, explanationResult);
196
+ }
197
+ updateIsSimulateTx() {
198
+ if (this.gasBudget && this.gasPrice && this.gasPaymentObjects && this.gasPaymentObjects?.length > 0) {
199
+ this.isSimulateTx = false;
200
+ }
201
+ else {
202
+ this.isSimulateTx = true;
203
+ }
204
+ }
205
+ async buildDryRunTransaction() {
206
+ this.validateTxDataImplementation();
207
+ await this.populateTxData();
208
+ const txDataBuilder = new transactions_1.TransactionDataBuilder(this._iotaTransaction.getData());
209
+ return txDataBuilder.build({
210
+ overrides: {
211
+ gasData: {
212
+ budget: constants_1.MAX_GAS_BUDGET.toString(),
213
+ price: constants_1.MAX_GAS_PRICE.toString(),
214
+ payment: [],
215
+ },
216
+ },
217
+ });
218
+ }
219
+ async buildTransaction() {
220
+ if (this._txDataBytes === undefined || this._rebuildRequired) {
221
+ this.validateTxData();
222
+ await this.populateTxData();
223
+ this._iotaTransaction.setGasPrice(this.gasPrice);
224
+ this._iotaTransaction.setGasBudget(this.gasBudget);
225
+ this._iotaTransaction.setGasPayment(this.gasPaymentObjects);
226
+ this._txDataBytes = await this._iotaTransaction.build();
227
+ this._rebuildRequired = false;
228
+ }
229
+ this.serializeSignatures();
230
+ return this._txDataBytes;
231
+ }
232
+ async populateTxData() {
233
+ this._iotaTransaction = new transactions_1.Transaction();
234
+ this.populateTxInputsAndCommands();
235
+ if (this.gasSponsor && this._sender !== this.gasSponsor) {
236
+ this._iotaTransaction = transactions_1.Transaction.fromKind(await this._iotaTransaction.build({ onlyTransactionKind: true }));
237
+ this._iotaTransaction.setGasOwner(this._gasSponsor);
238
+ }
239
+ this._iotaTransaction.setSender(this.sender);
240
+ }
241
+ serializeSignature(signature) {
242
+ const pubKey = Buffer.from(signature.publicKey.pub, 'hex');
243
+ const serialized_sig = new Uint8Array(1 + signature.signature.length + pubKey.length);
244
+ serialized_sig.set([0x00]); //Hardcoding the signature scheme flag since we only support EDDSA for iota
245
+ serialized_sig.set(signature.signature, 1);
246
+ serialized_sig.set(pubKey, 1 + signature.signature.length);
247
+ return (0, utils_1.toBase64)(serialized_sig);
11
248
  }
12
- toBroadcastFormat() {
13
- throw new Error('Method not implemented.');
249
+ validateTxData() {
250
+ this.validateTxDataImplementation();
251
+ if (!this.sender || this.sender === '') {
252
+ throw new sdk_core_1.InvalidTransactionError('Transaction sender is required');
253
+ }
254
+ if (!this.gasPrice) {
255
+ throw new sdk_core_1.InvalidTransactionError('Gas price is required');
256
+ }
257
+ if (!this.gasBudget) {
258
+ throw new sdk_core_1.InvalidTransactionError('Gas budget is required');
259
+ }
260
+ if (!this.gasPaymentObjects || this.gasPaymentObjects?.length === 0) {
261
+ throw new sdk_core_1.InvalidTransactionError('Gas payment objects are required');
262
+ }
263
+ if (this.gasPaymentObjects.length > constants_1.MAX_GAS_PAYMENT_OBJECTS) {
264
+ throw new sdk_core_1.InvalidTransactionError(`Gas payment objects count (${this.gasPaymentObjects.length}) exceeds maximum allowed (${constants_1.MAX_GAS_PAYMENT_OBJECTS})`);
265
+ }
266
+ if (this._signature &&
267
+ !(utils_2.default.isValidPublicKey(this._signature.publicKey.pub) &&
268
+ utils_2.default.isValidSignature((0, utils_1.toBase64)(this._signature.signature)))) {
269
+ throw new sdk_core_1.InvalidTransactionError('Invalid sender signature');
270
+ }
271
+ if (this._gasSponsorSignature &&
272
+ !(utils_2.default.isValidPublicKey(this._gasSponsorSignature.publicKey.pub) &&
273
+ utils_2.default.isValidSignature((0, utils_1.toBase64)(this._gasSponsorSignature.signature)))) {
274
+ throw new sdk_core_1.InvalidTransactionError('Invalid gas sponsor signature');
275
+ }
14
276
  }
15
277
  }
16
278
  exports.Transaction = Transaction;
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1EQUFnRTtBQUdoRSxNQUFhLFdBQVksU0FBUSwwQkFBZTtJQUM5QyxPQUFPLENBQUMsR0FBWTtRQUNsQixNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUNELE1BQU07UUFDSixNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUNELGlCQUFpQjtRQUNmLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUM3QyxDQUFDO0NBQ0Y7QUFWRCxrQ0FVQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VLZXksIEJhc2VUcmFuc2FjdGlvbiB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IFR4RGF0YSB9IGZyb20gJy4vaWZhY2UnO1xuXG5leHBvcnQgY2xhc3MgVHJhbnNhY3Rpb24gZXh0ZW5kcyBCYXNlVHJhbnNhY3Rpb24ge1xuICBjYW5TaWduKGtleTogQmFzZUtleSk6IGJvb2xlYW4ge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuICB0b0pzb24oKTogVHhEYXRhIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gIH1cbiAgdG9Ccm9hZGNhc3RGb3JtYXQoKTogc3RyaW5nIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gIH1cbn1cbiJdfQ==
279
+ Transaction.EMPTY_PUBLIC_KEY = Buffer.alloc(constants_1.IOTA_KEY_BYTES_LENGTH);
280
+ Transaction.EMPTY_SIGNATURE = Buffer.alloc(constants_1.IOTA_SIGNATURE_LENGTH);
281
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG1EQVE4QjtBQUU5Qiw4REFJcUM7QUFFckMsZ0RBQWdEO0FBQ2hELGtFQUEwQztBQUMxQywyQ0FNcUI7QUFDckIsb0RBQTRCO0FBRTVCLE1BQXNCLFdBQVksU0FBUSwwQkFBZTtJQW9CdkQsWUFBc0IsVUFBZ0M7UUFDcEQsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2xCLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFDOUIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7SUFDNUIsQ0FBQztJQUVELElBQUksU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBSSxTQUFTLENBQUMsS0FBeUI7UUFDckMsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDeEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBSSxpQkFBaUI7UUFDbkIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUM7SUFDakMsQ0FBQztJQUVELElBQUksaUJBQWlCLENBQUMsS0FBMkM7UUFDL0QsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQztRQUNoQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO0lBQy9CLENBQUM7SUFFRCxJQUFJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQUksUUFBUSxDQUFDLEtBQXlCO1FBQ3BDLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENB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QyxLQUFLLENBQUMsaUNBQXFCLENBQUMsQ0FBQztBQUN2RCwyQkFBZSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsaUNBQXFCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEJhc2VLZXksXG4gIEJhc2VUcmFuc2FjdGlvbixcbiAgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IsXG4gIFB1YmxpY0tleSxcbiAgU2lnbmF0dXJlLFxuICBUcmFuc2FjdGlvblJlY2lwaWVudCxcbiAgVHJhbnNhY3Rpb25UeXBlLFxufSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQge1xuICBUcmFuc2FjdGlvbkRhdGEgYXMgSW90YVRyYW5zYWN0aW9uRGF0YSxcbiAgVHJhbnNhY3Rpb24gYXMgSW90YVRyYW5zYWN0aW9uLFxuICBUcmFuc2FjdGlvbkRhdGFCdWlsZGVyIGFzIElvdGFUcmFuc2FjdGlvbkRhdGFCdWlsZGVyLFxufSBmcm9tICdAaW90YS9pb3RhLXNkay90cmFuc2FjdGlvbnMnO1xuaW1wb3J0IHsgVHhEYXRhLCBUcmFuc2FjdGlvbk9iamVjdElucHV0LCBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIH0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQgeyB0b0Jhc2U2NCB9IGZyb20gJ0Bpb3RhL2lvdGEtc2RrL3V0aWxzJztcbmltcG9ydCBibGFrZTJiIGZyb20gJ0BiaXRnby1iZXRhL2JsYWtlMmInO1xuaW1wb3J0IHtcbiAgTUFYX0dBU19CVURHRVQsXG4gIE1BWF9HQVNfUEFZTUVOVF9PQkpFQ1RTLFxuICBNQVhfR0FTX1BSSUNFLFxuICBJT1RBX0tFWV9CWVRFU19MRU5HVEgsXG4gIElPVEFfU0lHTkFUVVJFX0xFTkdUSCxcbn0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4vdXRpbHMnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgVHJhbnNhY3Rpb24gZXh0ZW5kcyBCYXNlVHJhbnNhY3Rpb24ge1xuICBzdGF0aWMgRU1QVFlfUFVCTElDX0tFWSA9IEJ1ZmZlci5hbGxvYyhJT1RBX0tFWV9CWVRFU19MRU5HVEgpO1xuICBzdGF0aWMgRU1QVFlfU0lHTkFUVVJFID0gQnVmZmVyLmFsbG9jKElPVEFfU0lHTkFUVVJFX0xFTkdUSCk7XG5cbiAgcHJvdGVjdGVkIF9yZWJ1aWxkUmVxdWlyZWQ6IGJvb2xlYW47XG4gIHByb3RlY3RlZCBfdHlwZTogVHJhbnNhY3Rpb25UeXBlO1xuICBwcm90ZWN0ZWQgX2lvdGFUcmFuc2FjdGlvbjogSW90YVRyYW5zYWN0aW9uO1xuXG4gIHByaXZhdGUgX2dhc0J1ZGdldD86IG51bWJlcjtcbiAgcHJpdmF0ZSBfZ2FzUGF5bWVudE9iamVjdHM/OiBUcmFuc2FjdGlvbk9iamVjdElucHV0W107XG4gIHByaXZhdGUgX2dhc1ByaWNlPzogbnVtYmVyO1xuICBwcml2YXRlIF9nYXNTcG9uc29yPzogc3RyaW5nO1xuICBwcml2YXRlIF9zZW5kZXI6IHN0cmluZztcbiAgcHJpdmF0ZSBfc2lnbmF0dXJlPzogU2lnbmF0dXJlO1xuICBwcml2YXRlIF9zZXJpYWxpemVkU2lnbmF0dXJlPzogc3RyaW5nO1xuICBwcml2YXRlIF9nYXNTcG9uc29yU2lnbmF0dXJlPzogU2lnbmF0dXJlO1xuICBwcml2YXRlIF9zZXJpYWxpemVkR2FzU3BvbnNvclNpZ25hdHVyZT86IHN0cmluZztcbiAgcHJpdmF0ZSBfdHhEYXRhQnl0ZXM/OiBVaW50OEFycmF5PEFycmF5QnVmZmVyTGlrZT47XG4gIHByaXZhdGUgX2lzU2ltdWxhdGVUeDogYm9vbGVhbjtcblxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihjb2luQ29uZmlnKTtcbiAgICB0aGlzLl9zZW5kZXIgPSAnJztcbiAgICB0aGlzLl9yZWJ1aWxkUmVxdWlyZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9pc1NpbXVsYXRlVHggPSB0cnVlO1xuICB9XG5cbiAgZ2V0IGdhc0J1ZGdldCgpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9nYXNCdWRnZXQ7XG4gIH1cblxuICBzZXQgZ2FzQnVkZ2V0KHZhbHVlOiBudW1iZXIgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9nYXNCdWRnZXQgPSB2YWx1ZTtcbiAgICB0aGlzLl9yZWJ1aWxkUmVxdWlyZWQgPSB0cnVlO1xuICB9XG5cbiAgZ2V0IGdhc1BheW1lbnRPYmplY3RzKCk6IFRyYW5zYWN0aW9uT2JqZWN0SW5wdXRbXSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2dhc1BheW1lbnRPYmplY3RzO1xuICB9XG5cbiAgc2V0IGdhc1BheW1lbnRPYmplY3RzKHZhbHVlOiBUcmFuc2FjdGlvbk9iamVjdElucHV0W10gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9nYXNQYXltZW50T2JqZWN0cyA9IHZhbHVlO1xuICAgIHRoaXMuX3JlYnVpbGRSZXF1aXJlZCA9IHRydWU7XG4gIH1cblxuICBnZXQgZ2FzUHJpY2UoKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZ2FzUHJpY2U7XG4gIH1cblxuICBzZXQgZ2FzUHJpY2UodmFsdWU6IG51bWJlciB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX2dhc1ByaWNlID0gdmFsdWU7XG4gICAgdGhpcy5fcmVidWlsZFJlcXVpcmVkID0gdHJ1ZTtcbiAgfVxuXG4gIGdldCBnYXNTcG9uc29yKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2dhc1Nwb25zb3I7XG4gIH1cblxuICBzZXQgZ2FzU3BvbnNvcih2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fZ2FzU3BvbnNvciA9IHZhbHVlO1xuICAgIHRoaXMuX3JlYnVpbGRSZXF1aXJlZCA9IHRydWU7XG4gIH1cblxuICBnZXQgc2VuZGVyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbmRlcjtcbiAgfVxuXG4gIHNldCBzZW5kZXIodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX3NlbmRlciA9IHZhbHVlO1xuICAgIHRoaXMuX3JlYnVpbGRSZXF1aXJlZCA9IHRydWU7XG4gIH1cblxuICBnZXQgaXNTaW11bGF0ZVR4KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc1NpbXVsYXRlVHg7XG4gIH1cblxuICBzZXQgaXNTaW11bGF0ZVR4KHZhbHVlOiBib29sZWFuKSB7XG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy52YWxpZGF0ZVR4RGF0YSgpO1xuICAgICAgICB0aGlzLl9yZWJ1aWxkUmVxdWlyZWQgPSB0cnVlO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcic7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVHggZGF0YSB2YWxpZGF0aW9uIGZhaWxlZDogJHtlcnJvck1lc3NhZ2V9LiB7Q2F1c2U6ICR7ZXJyb3J9fWApO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9pc1NpbXVsYXRlVHggPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCBzaWduYWJsZVBheWxvYWQoKTogQnVmZmVyIHtcbiAgICBpZiAodGhpcy5pc1NpbXVsYXRlVHgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHNpZ24gYSBzaW11bGF0ZSB0eCcpO1xuICAgIH1cbiAgICBpZiAodGhpcy5fdHhEYXRhQnl0ZXMgPT09IHVuZGVmaW5lZCB8fCB0aGlzLl9yZWJ1aWxkUmVxdWlyZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVHggbm90IGJ1aWx0IG9yIGEgcmVidWlsZCBpcyByZXF1aXJlZCcpO1xuICAgIH1cbiAgICBjb25zdCBpbnRlbnRNZXNzYWdlID0gdGhpcy5tZXNzYWdlV2l0aEludGVudCh0aGlzLl90eERhdGFCeXRlcyk7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGJsYWtlMmIoMzIpLnVwZGF0ZShpbnRlbnRNZXNzYWdlKS5kaWdlc3QoJ2JpbmFyeScpKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqKi9cbiAgZ2V0IGlkKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuX3R4RGF0YUJ5dGVzID09PSB1bmRlZmluZWQgfHwgdGhpcy5fcmVidWlsZFJlcXVpcmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1R4IG5vdCBidWlsdCBvciBhIHJlYnVpbGQgaXMgcmVxdWlyZWQnKTtcbiAgICB9XG4gICAgcmV0dXJuIElvdGFUcmFuc2FjdGlvbkRhdGFCdWlsZGVyLmdldERpZ2VzdEZyb21CeXRlcyh0aGlzLl90eERhdGFCeXRlcyk7XG4gIH1cblxuICBhZGRTaWduYXR1cmUocHVibGljS2V5OiBQdWJsaWNLZXksIHNpZ25hdHVyZTogQnVmZmVyKTogdm9pZCB7XG4gICAgdGhpcy5fc2lnbmF0dXJlID0geyBwdWJsaWNLZXksIHNpZ25hdHVyZSB9O1xuICB9XG5cbiAgYWRkR2FzU3BvbnNvclNpZ25hdHVyZShwdWJsaWNLZXk6IFB1YmxpY0tleSwgc2lnbmF0dXJlOiBCdWZmZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9nYXNTcG9uc29yU2lnbmF0dXJlID0geyBwdWJsaWNLZXksIHNpZ25hdHVyZSB9O1xuICB9XG5cbiAgY2FuU2lnbihfa2V5OiBCYXNlS2V5KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmlzU2ltdWxhdGVUeDtcbiAgfVxuXG4gIGdldEZlZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmdhc0J1ZGdldD8udG9TdHJpbmcoKTtcbiAgfVxuXG4gIGdldCBzZXJpYWxpemVkR2FzU3BvbnNvclNpZ25hdHVyZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9zZXJpYWxpemVkR2FzU3BvbnNvclNpZ25hdHVyZTtcbiAgfVxuXG4gIGdldCBzZXJpYWxpemVkU2lnbmF0dXJlKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3NlcmlhbGl6ZWRTaWduYXR1cmU7XG4gIH1cblxuICBzZXJpYWxpemVTaWduYXR1cmVzKCk6IHZvaWQge1xuICAgIHRoaXMuX3NpZ25hdHVyZXMgPSBbXTtcbiAgICBpZiAodGhpcy5fc2lnbmF0dXJlKSB7XG4gICAgICB0aGlzLl9zZXJpYWxpemVkU2lnbmF0dXJlID0gdGhpcy5zZXJpYWxpemVTaWduYXR1cmUodGhpcy5fc2lnbmF0dXJlIGFzIFNpZ25hdHVyZSk7XG4gICAgICB0aGlzLl9zaWduYXR1cmVzLnB1c2godGhpcy5fc2VyaWFsaXplZFNpZ25hdHVyZSk7XG4gICAgfVxuICAgIGlmICh0aGlzLl9nYXNTcG9uc29yU2lnbmF0dXJlKSB7XG4gICAgICB0aGlzLl9zZXJpYWxpemVkR2FzU3BvbnNvclNpZ25hdHVyZSA9IHRoaXMuc2VyaWFsaXplU2lnbmF0dXJlKHRoaXMuX2dhc1Nwb25zb3JTaWduYXR1cmUgYXMgU2lnbmF0dXJlKTtcbiAgICAgIHRoaXMuX3NpZ25hdHVyZXMucHVzaCh0aGlzLl9zZXJpYWxpemVkR2FzU3BvbnNvclNpZ25hdHVyZSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgdG9Ccm9hZGNhc3RGb3JtYXQoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCB0eERhdGFCeXRlczogVWludDhBcnJheTxBcnJheUJ1ZmZlckxpa2U+ID0gYXdhaXQgdGhpcy5idWlsZCgpO1xuICAgIHJldHVybiB0b0Jhc2U2NCh0eERhdGFCeXRlcyk7XG4gIH1cblxuICBhc3luYyBidWlsZCgpOiBQcm9taXNlPFVpbnQ4QXJyYXk8QXJyYXlCdWZmZXJMaWtlPj4ge1xuICAgIGlmICh0aGlzLmlzU2ltdWxhdGVUeCkge1xuICAgICAgcmV0dXJuIHRoaXMuYnVpbGREcnlSdW5UcmFuc2FjdGlvbigpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5idWlsZFRyYW5zYWN0aW9uKCk7XG4gIH1cblxuICB0b0pzb24oKTogVHhEYXRhIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2VuZGVyOiB0aGlzLnNlbmRlcixcbiAgICAgIGdhc0J1ZGdldDogdGhpcy5nYXNCdWRnZXQsXG4gICAgICBnYXNQcmljZTogdGhpcy5nYXNQcmljZSxcbiAgICAgIGdhc1BheW1lbnRPYmplY3RzOiB0aGlzLmdhc1BheW1lbnRPYmplY3RzLFxuICAgICAgZ2FzU3BvbnNvcjogdGhpcy5nYXNTcG9uc29yLFxuICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgIH07XG4gIH1cblxuICBwYXJzZUZyb21KU09OKHR4RGF0YTogVHhEYXRhKTogdm9pZCB7XG4gICAgdGhpcy5zZW5kZXIgPSB0eERhdGEuc2VuZGVyO1xuICAgIHRoaXMuZ2FzQnVkZ2V0ID0gdHhEYXRhLmdhc0J1ZGdldDtcbiAgICB0aGlzLmdhc1ByaWNlID0gdHhEYXRhLmdhc1ByaWNlO1xuICAgIHRoaXMuZ2FzUGF5bWVudE9iamVjdHMgPSB0eERhdGEuZ2FzUGF5bWVudE9iamVjdHM7XG4gICAgaWYgKHR4RGF0YS5nYXNTcG9uc29yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZ2FzU3BvbnNvciA9IHR4RGF0YS5nYXNTcG9uc29yO1xuICAgIH1cbiAgfVxuXG4gIHBhcnNlRnJvbUJyb2FkY2FzdFR4KHR4OiBzdHJpbmcgfCBVaW50OEFycmF5KTogdm9pZCB7XG4gICAgY29uc3QgdHhEYXRhID0gSW90YVRyYW5zYWN0aW9uLmZyb20odHgpLmdldERhdGEoKTtcbiAgICBpZiAodHhEYXRhLnNlbmRlcikge1xuICAgICAgdGhpcy5zZW5kZXIgPSB0eERhdGEuc2VuZGVyO1xuICAgIH1cbiAgICBpZiAodHhEYXRhLmdhc0RhdGE/LmJ1ZGdldCkge1xuICAgICAgdGhpcy5nYXNCdWRnZXQgPSBOdW1iZXIodHhEYXRhLmdhc0RhdGEuYnVkZ2V0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5nYXNCdWRnZXQgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmICh0eERhdGEuZ2FzRGF0YT8ucHJpY2UpIHtcbiAgICAgIHRoaXMuZ2FzUHJpY2UgPSBOdW1iZXIodHhEYXRhLmdhc0RhdGEucHJpY2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmdhc1ByaWNlID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpZiAodHhEYXRhLmdhc0RhdGE/LnBheW1lbnQgJiYgdHhEYXRhLmdhc0RhdGEucGF5bWVudC5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmdhc1BheW1lbnRPYmplY3RzID0gdHhEYXRhLmdhc0RhdGEucGF5bWVudC5tYXAoKHBheW1lbnQpID0+IHBheW1lbnQgYXMgVHJhbnNhY3Rpb25PYmplY3RJbnB1dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZ2FzUGF5bWVudE9iamVjdHMgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmICh0eERhdGEuZ2FzRGF0YT8ub3duZXIpIHtcbiAgICAgIHRoaXMuZ2FzU3BvbnNvciA9IHR4RGF0YS5nYXNEYXRhLm93bmVyO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmdhc1Nwb25zb3IgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBleHBsYWluVHJhbnNhY3Rpb24oKTogYW55IHtcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLnRvSnNvbigpO1xuICAgIGNvbnN0IGRpc3BsYXlPcmRlciA9IFsnaWQnLCAnb3V0cHV0cycsICdvdXRwdXRBbW91bnQnLCAnY2hhbmdlT3V0cHV0cycsICdjaGFuZ2VBbW91bnQnLCAnZmVlJywgJ3R5cGUnXTtcbiAgICBjb25zdCBvdXRwdXRzOiBUcmFuc2FjdGlvblJlY2lwaWVudFtdID0gW107XG5cbiAgICBjb25zdCBleHBsYW5hdGlvblJlc3VsdDogVHJhbnNhY3Rpb25FeHBsYW5hdGlvbiA9IHtcbiAgICAgIGRpc3BsYXlPcmRlcixcbiAgICAgIGlkOiB0aGlzLmlkLFxuICAgICAgb3V0cHV0cyxcbiAgICAgIG91dHB1dEFtb3VudDogJzAnLFxuICAgICAgY2hhbmdlT3V0cHV0czogW10sXG4gICAgICBjaGFuZ2VBbW91bnQ6ICcwJyxcbiAgICAgIGZlZTogeyBmZWU6IHRoaXMuZ2FzQnVkZ2V0ID8gdGhpcy5nYXNCdWRnZXQudG9TdHJpbmcoKSA6ICcnIH0sXG4gICAgICBzZW5kZXI6IHRoaXMuc2VuZGVyLFxuICAgICAgc3BvbnNvcjogdGhpcy5nYXNTcG9uc29yLFxuICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5leHBsYWluVHJhbnNhY3Rpb25JbXBsZW1lbnRhdGlvbihyZXN1bHQsIGV4cGxhbmF0aW9uUmVzdWx0KTtcbiAgfVxuXG4gIHByb3RlY3RlZCB1cGRhdGVJc1NpbXVsYXRlVHgoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZ2FzQnVkZ2V0ICYmIHRoaXMuZ2FzUHJpY2UgJiYgdGhpcy5nYXNQYXltZW50T2JqZWN0cyAmJiB0aGlzLmdhc1BheW1lbnRPYmplY3RzPy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmlzU2ltdWxhdGVUeCA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlzU2ltdWxhdGVUeCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IG1lc3NhZ2VXaXRoSW50ZW50KG1lc3NhZ2U6IFVpbnQ4QXJyYXkpOiBVaW50OEFycmF5O1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgcG9wdWxhdGVUeElucHV0c0FuZENvbW1hbmRzKCk6IHZvaWQ7XG4gIHByb3RlY3RlZCBhYnN0cmFjdCB2YWxpZGF0ZVR4RGF0YUltcGxlbWVudGF0aW9uKCk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIEFkZCB0aGUgaW5wdXQgYW5kIG91dHB1dCBlbnRyaWVzIGZvciB0aGlzIHRyYW5zYWN0aW9uLlxuICAgKi9cbiAgYWJzdHJhY3QgYWRkSW5wdXRzQW5kT3V0cHV0cygpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgY29tcGxldGUgZXhwbGFuYXRpb24gZm9yIGEgdHJhbnNmZXIgdHJhbnNhY3Rpb25cbiAgICogQHBhcmFtIHtUeERhdGF9IGpzb24gVGhlIHRyYW5zYWN0aW9uIGRhdGEgaW4ganNvbiBmb3JtYXRcbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvbkV4cGxhbmF0aW9ufSBleHBsYW5hdGlvblJlc3VsdCBUaGUgdHJhbnNhY3Rpb24gZXhwbGFuYXRpb24gdG8gYmUgY29tcGxldGVkXG4gICAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbkV4cGxhbmF0aW9ufVxuICAgKi9cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGV4cGxhaW5UcmFuc2FjdGlvbkltcGxlbWVudGF0aW9uKFxuICAgIGpzb246IFR4RGF0YSxcbiAgICBleHBsYW5hdGlvblJlc3VsdDogVHJhbnNhY3Rpb25FeHBsYW5hdGlvblxuICApOiBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uO1xuXG4gIHByaXZhdGUgYXN5bmMgYnVpbGREcnlSdW5UcmFuc2FjdGlvbigpOiBQcm9taXNlPFVpbnQ4QXJyYXk8QXJyYXlCdWZmZXJMaWtlPj4ge1xuICAgIHRoaXMudmFsaWRhdGVUeERhdGFJbXBsZW1lbnRhdGlvbigpO1xuICAgIGF3YWl0IHRoaXMucG9wdWxhdGVUeERhdGEoKTtcbiAgICBjb25zdCB0eERhdGFCdWlsZGVyID0gbmV3IElvdGFUcmFuc2FjdGlvbkRhdGFCdWlsZGVyKHRoaXMuX2lvdGFUcmFuc2FjdGlvbi5nZXREYXRhKCkgYXMgSW90YVRyYW5zYWN0aW9uRGF0YSk7XG4gICAgcmV0dXJuIHR4RGF0YUJ1aWxkZXIuYnVpbGQoe1xuICAgICAgb3ZlcnJpZGVzOiB7XG4gICAgICAgIGdhc0RhdGE6IHtcbiAgICAgICAgICBidWRnZXQ6IE1BWF9HQVNfQlVER0VULnRvU3RyaW5nKCksXG4gICAgICAgICAgcHJpY2U6IE1BWF9HQVNfUFJJQ0UudG9TdHJpbmcoKSxcbiAgICAgICAgICBwYXltZW50OiBbXSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGJ1aWxkVHJhbnNhY3Rpb24oKTogUHJvbWlzZTxVaW50OEFycmF5PEFycmF5QnVmZmVyTGlrZT4+IHtcbiAgICBpZiAodGhpcy5fdHhEYXRhQnl0ZXMgPT09IHVuZGVmaW5lZCB8fCB0aGlzLl9yZWJ1aWxkUmVxdWlyZWQpIHtcbiAgICAgIHRoaXMudmFsaWRhdGVUeERhdGEoKTtcbiAgICAgIGF3YWl0IHRoaXMucG9wdWxhdGVUeERhdGEoKTtcbiAgICAgIHRoaXMuX2lvdGFUcmFuc2FjdGlvbi5zZXRHYXNQcmljZSh0aGlzLmdhc1ByaWNlIGFzIG51bWJlcik7XG4gICAgICB0aGlzLl9pb3RhVHJhbnNhY3Rpb24uc2V0R2FzQnVkZ2V0KHRoaXMuZ2FzQnVkZ2V0IGFzIG51bWJlcik7XG4gICAgICB0aGlzLl9pb3RhVHJhbnNhY3Rpb24uc2V0R2FzUGF5bWVudCh0aGlzLmdhc1BheW1lbnRPYmplY3RzIGFzIFRyYW5zYWN0aW9uT2JqZWN0SW5wdXRbXSk7XG4gICAgICB0aGlzLl90eERhdGFCeXRlcyA9IGF3YWl0IHRoaXMuX2lvdGFUcmFuc2FjdGlvbi5idWlsZCgpO1xuICAgICAgdGhpcy5fcmVidWlsZFJlcXVpcmVkID0gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuc2VyaWFsaXplU2lnbmF0dXJlcygpO1xuICAgIHJldHVybiB0aGlzLl90eERhdGFCeXRlcztcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcG9wdWxhdGVUeERhdGEoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5faW90YVRyYW5zYWN0aW9uID0gbmV3IElvdGFUcmFuc2FjdGlvbigpO1xuICAgIHRoaXMucG9wdWxhdGVUeElucHV0c0FuZENvbW1hbmRzKCk7XG4gICAgaWYgKHRoaXMuZ2FzU3BvbnNvciAmJiB0aGlzLl9zZW5kZXIgIT09IHRoaXMuZ2FzU3BvbnNvcikge1xuICAgICAgdGhpcy5faW90YVRyYW5zYWN0aW9uID0gSW90YVRyYW5zYWN0aW9uLmZyb21LaW5kKFxuICAgICAgICBhd2FpdCB0aGlzLl9pb3RhVHJhbnNhY3Rpb24uYnVpbGQoeyBvbmx5VHJhbnNhY3Rpb25LaW5kOiB0cnVlIH0pXG4gICAgICApO1xuICAgICAgdGhpcy5faW90YVRyYW5zYWN0aW9uLnNldEdhc093bmVyKHRoaXMuX2dhc1Nwb25zb3IgYXMgc3RyaW5nKTtcbiAgICB9XG4gICAgdGhpcy5faW90YVRyYW5zYWN0aW9uLnNldFNlbmRlcih0aGlzLnNlbmRlcik7XG4gIH1cblxuICBwcml2YXRlIHNlcmlhbGl6ZVNpZ25hdHVyZShzaWduYXR1cmU6IFNpZ25hdHVyZSk6IHN0cmluZyB7XG4gICAgY29uc3QgcHViS2V5ID0gQnVmZmVyLmZyb20oc2lnbmF0dXJlLnB1YmxpY0tleS5wdWIsICdoZXgnKTtcbiAgICBjb25zdCBzZXJpYWxpemVkX3NpZyA9IG5ldyBVaW50OEFycmF5KDEgKyBzaWduYXR1cmUuc2lnbmF0dXJlLmxlbmd0aCArIHB1YktleS5sZW5ndGgpO1xuICAgIHNlcmlhbGl6ZWRfc2lnLnNldChbMHgwMF0pOyAvL0hhcmRjb2RpbmcgdGhlIHNpZ25hdHVyZSBzY2hlbWUgZmxhZyBzaW5jZSB3ZSBvbmx5IHN1cHBvcnQgRUREU0EgZm9yIGlvdGFcbiAgICBzZXJpYWxpemVkX3NpZy5zZXQoc2lnbmF0dXJlLnNpZ25hdHVyZSwgMSk7XG4gICAgc2VyaWFsaXplZF9zaWcuc2V0KHB1YktleSwgMSArIHNpZ25hdHVyZS5zaWduYXR1cmUubGVuZ3RoKTtcbiAgICByZXR1cm4gdG9CYXNlNjQoc2VyaWFsaXplZF9zaWcpO1xuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZVR4RGF0YSgpOiB2b2lkIHtcbiAgICB0aGlzLnZhbGlkYXRlVHhEYXRhSW1wbGVtZW50YXRpb24oKTtcbiAgICBpZiAoIXRoaXMuc2VuZGVyIHx8IHRoaXMuc2VuZGVyID09PSAnJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdUcmFuc2FjdGlvbiBzZW5kZXIgaXMgcmVxdWlyZWQnKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuZ2FzUHJpY2UpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignR2FzIHByaWNlIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmdhc0J1ZGdldCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdHYXMgYnVkZ2V0IGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmdhc1BheW1lbnRPYmplY3RzIHx8IHRoaXMuZ2FzUGF5bWVudE9iamVjdHM/Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdHYXMgcGF5bWVudCBvYmplY3RzIGFyZSByZXF1aXJlZCcpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmdhc1BheW1lbnRPYmplY3RzLmxlbmd0aCA+IE1BWF9HQVNfUEFZTUVOVF9PQkpFQ1RTKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoXG4gICAgICAgIGBHYXMgcGF5bWVudCBvYmplY3RzIGNvdW50ICgke3RoaXMuZ2FzUGF5bWVudE9iamVjdHMubGVuZ3RofSkgZXhjZWVkcyBtYXhpbXVtIGFsbG93ZWQgKCR7TUFYX0dBU19QQVlNRU5UX09CSkVDVFN9KWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdGhpcy5fc2lnbmF0dXJlICYmXG4gICAgICAhKFxuICAgICAgICB1dGlscy5pc1ZhbGlkUHVibGljS2V5KHRoaXMuX3NpZ25hdHVyZS5wdWJsaWNLZXkucHViKSAmJlxuICAgICAgICB1dGlscy5pc1ZhbGlkU2lnbmF0dXJlKHRvQmFzZTY0KHRoaXMuX3NpZ25hdHVyZS5zaWduYXR1cmUpKVxuICAgICAgKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIHNlbmRlciBzaWduYXR1cmUnKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLl9nYXNTcG9uc29yU2lnbmF0dXJlICYmXG4gICAgICAhKFxuICAgICAgICB1dGlscy5pc1ZhbGlkUHVibGljS2V5KHRoaXMuX2dhc1Nwb25zb3JTaWduYXR1cmUucHVibGljS2V5LnB1YikgJiZcbiAgICAgICAgdXRpbHMuaXNWYWxpZFNpZ25hdHVyZSh0b0Jhc2U2NCh0aGlzLl9nYXNTcG9uc29yU2lnbmF0dXJlLnNpZ25hdHVyZSkpXG4gICAgICApXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgZ2FzIHNwb25zb3Igc2lnbmF0dXJlJyk7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -1,15 +1,76 @@
1
- import { BaseAddress, BaseKey, BaseTransaction, BaseTransactionBuilder } from '@bitgo-beta/sdk-core';
1
+ import { BaseAddress, BaseKey, BaseTransaction, BaseTransactionBuilder, PublicKey, TransactionType } from '@bitgo-beta/sdk-core';
2
2
  import BigNumber from 'bignumber.js';
3
- export declare class TransactionBuilder extends BaseTransactionBuilder {
4
- protected fromImplementation(rawTransaction: any): BaseTransaction;
5
- protected signImplementation(key: BaseKey): BaseTransaction;
6
- protected buildImplementation(): Promise<BaseTransaction>;
3
+ import { Transaction } from './transaction';
4
+ import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
5
+ import { GasData } from './iface';
6
+ export declare abstract class TransactionBuilder extends BaseTransactionBuilder {
7
+ protected _transaction: Transaction;
8
+ protected constructor(coinConfig: Readonly<CoinConfig>);
9
+ /**
10
+ * Initialize the transaction builder fields using the decoded transaction data
11
+ *
12
+ * @param {Transaction} tx the transaction data
13
+ */
14
+ initBuilder(tx: Transaction): void;
15
+ get transactionType(): TransactionType;
16
+ /**
17
+ * @inheritdoc
18
+ * */
19
+ get transaction(): Transaction;
20
+ /**
21
+ * @inheritdoc
22
+ * */
23
+ protected set transaction(transaction: Transaction);
24
+ /**
25
+ * Sets the sender of this transaction.
26
+ *
27
+ * @param {string} senderAddress the account that is sending this transaction
28
+ * @returns {TransactionBuilder} This transaction builder
29
+ */
30
+ sender(senderAddress: string): this;
31
+ /**
32
+ * Sets the gasData for this transaction.
33
+ *
34
+ * @param {string} gasData the gas details for this transaction
35
+ * @returns {TransactionBuilder} This transaction builder
36
+ */
37
+ gasData(gasData: GasData): this;
38
+ /**
39
+ * Sets the gasSponsor of this transaction.
40
+ *
41
+ * @param {string} sponsorAddress the account that is sponsoring this transaction's gas
42
+ * @returns {TransactionBuilder} This transaction builder
43
+ */
44
+ gasSponsor(sponsorAddress: string): this;
45
+ addSignature(publicKey: PublicKey, signature: Buffer): void;
46
+ addGasSponsorSignature(publicKey: PublicKey, signature: Buffer): void;
7
47
  validateKey(key: BaseKey): void;
48
+ /**
49
+ * @inheritdoc
50
+ * */
8
51
  validateAddress(address: BaseAddress, addressFormat?: string): void;
52
+ /**
53
+ * @inheritdoc
54
+ * */
9
55
  validateValue(value: BigNumber): void;
10
- validateRawTransaction(rawTransaction: any): void;
11
- validateTransaction(transaction?: BaseTransaction): void;
12
- protected get transaction(): BaseTransaction;
13
- protected set transaction(transaction: BaseTransaction);
56
+ /** @inheritdoc */
57
+ validateRawTransaction(rawTransaction: string): void;
58
+ /**
59
+ * @inheritdoc
60
+ * */
61
+ validateTransaction(transaction?: Transaction): void;
62
+ /**
63
+ * @inheritdoc
64
+ * */
65
+ fromImplementation(rawTransaction: string | Uint8Array): Transaction;
66
+ /**
67
+ * @inheritdoc
68
+ * */
69
+ protected signImplementation(key: BaseKey): BaseTransaction;
70
+ /**
71
+ * @inheritdoc
72
+ * */
73
+ protected buildImplementation(): Promise<Transaction>;
74
+ private validateGasData;
14
75
  }
15
76
  //# sourceMappingURL=transactionBuilder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"transactionBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AACrG,OAAO,SAAS,MAAM,cAAc,CAAC;AAErC,qBAAa,kBAAmB,SAAQ,sBAAsB;IAC5D,SAAS,CAAC,kBAAkB,CAAC,cAAc,EAAE,GAAG,GAAG,eAAe;IAGlE,SAAS,CAAC,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,eAAe;IAG3D,SAAS,CAAC,mBAAmB,IAAI,OAAO,CAAC,eAAe,CAAC;IAGzD,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;IAG/B,eAAe,CAAC,OAAO,EAAE,WAAW,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI;IAGnE,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAGrC,sBAAsB,CAAC,cAAc,EAAE,GAAG,GAAG,IAAI;IAGjD,mBAAmB,CAAC,WAAW,CAAC,EAAE,eAAe,GAAG,IAAI;IAGxD,SAAS,KAAK,WAAW,IAAI,eAAe,CAE3C;IACD,SAAS,KAAK,WAAW,CAAC,WAAW,EAAE,eAAe,EAErD;CACF"}
1
+ {"version":3,"file":"transactionBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,OAAO,EACP,eAAe,EACf,sBAAsB,EAGtB,SAAS,EACT,eAAe,EAChB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAE7D,OAAO,EAA0B,OAAO,EAAE,MAAM,SAAS,CAAC;AAG1D,8BAAsB,kBAAmB,SAAQ,sBAAsB;IACrE,SAAS,CAAC,YAAY,EAAE,WAAW,CAAC;IAEpC,SAAS,aAAa,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC;IAItD;;;;OAIG;IACH,WAAW,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI;IASlC,IAAI,eAAe,IAAI,eAAe,CAErC;IAED;;SAEK;IACL,IAAI,WAAW,IAAI,WAAW,CAE7B;IAED;;SAEK;IACL,SAAS,KAAK,WAAW,CAAC,WAAW,EAAE,WAAW,EAEjD;IAED;;;;;OAKG;IACH,MAAM,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI;IAMnC;;;;;OAKG;IACH,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAQ/B;;;;;OAKG;IACH,UAAU,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IAMxC,YAAY,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAO3D,sBAAsB,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAOrE,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;IAI/B;;SAEK;IACL,eAAe,CAAC,OAAO,EAAE,WAAW,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI;IAMnE;;SAEK;IACL,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAQrC,kBAAkB;IAClB,sBAAsB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IASpD;;SAEK;IACL,mBAAmB,CAAC,WAAW,CAAC,EAAE,WAAW,GAAG,IAAI;IAepD;;SAEK;IACL,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,UAAU,GAAG,WAAW;IAQpE;;SAEK;IACL,SAAS,CAAC,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,eAAe;IAI3D;;SAEK;cACW,mBAAmB,IAAI,OAAO,CAAC,WAAW,CAAC;IAU3D,OAAO,CAAC,eAAe;CAWxB"}