@bitgo-beta/sdk-coin-atom 1.0.1-beta.9 → 1.0.1-beta.91

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 (41) hide show
  1. package/CHANGELOG.md +67 -0
  2. package/dist/src/atom.d.ts +36 -10
  3. package/dist/src/atom.d.ts.map +1 -1
  4. package/dist/src/atom.js +161 -23
  5. package/dist/src/lib/StakingActivateBuilder.d.ts +11 -0
  6. package/dist/src/lib/StakingActivateBuilder.d.ts.map +1 -0
  7. package/dist/src/lib/StakingActivateBuilder.js +31 -0
  8. package/dist/src/lib/StakingDeactivateBuilder.d.ts +11 -0
  9. package/dist/src/lib/StakingDeactivateBuilder.d.ts.map +1 -0
  10. package/dist/src/lib/StakingDeactivateBuilder.js +31 -0
  11. package/dist/src/lib/StakingWithdrawRewardsBuilder.d.ts +11 -0
  12. package/dist/src/lib/StakingWithdrawRewardsBuilder.d.ts.map +1 -0
  13. package/dist/src/lib/StakingWithdrawRewardsBuilder.js +31 -0
  14. package/dist/src/lib/constants.d.ts +8 -5
  15. package/dist/src/lib/constants.d.ts.map +1 -1
  16. package/dist/src/lib/constants.js +10 -8
  17. package/dist/src/lib/iface.d.ts +28 -13
  18. package/dist/src/lib/iface.d.ts.map +1 -1
  19. package/dist/src/lib/iface.js +1 -1
  20. package/dist/src/lib/index.d.ts +3 -0
  21. package/dist/src/lib/index.d.ts.map +1 -1
  22. package/dist/src/lib/index.js +8 -2
  23. package/dist/src/lib/keyPair.d.ts +0 -2
  24. package/dist/src/lib/keyPair.d.ts.map +1 -1
  25. package/dist/src/lib/keyPair.js +4 -12
  26. package/dist/src/lib/transaction.d.ts +25 -13
  27. package/dist/src/lib/transaction.d.ts.map +1 -1
  28. package/dist/src/lib/transaction.js +184 -75
  29. package/dist/src/lib/transactionBuilder.d.ts +38 -36
  30. package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
  31. package/dist/src/lib/transactionBuilder.js +101 -134
  32. package/dist/src/lib/transactionBuilderFactory.d.ts +9 -6
  33. package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
  34. package/dist/src/lib/transactionBuilderFactory.js +25 -13
  35. package/dist/src/lib/transferBuilder.d.ts +5 -2
  36. package/dist/src/lib/transferBuilder.d.ts.map +1 -1
  37. package/dist/src/lib/transferBuilder.js +18 -2
  38. package/dist/src/lib/utils.d.ts +120 -36
  39. package/dist/src/lib/utils.d.ts.map +1 -1
  40. package/dist/src/lib/utils.js +439 -93
  41. package/package.json +11 -8
@@ -5,13 +5,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.TransactionBuilder = void 0;
7
7
  const sdk_core_1 = require("@bitgo-beta/sdk-core");
8
+ const crypto_1 = require("@cosmjs/crypto");
9
+ const proto_signing_1 = require("@cosmjs/proto-signing");
10
+ const keyPair_1 = require("./keyPair");
8
11
  const transaction_1 = require("./transaction");
9
12
  const utils_1 = __importDefault(require("./utils"));
10
- const assert_1 = __importDefault(require("assert"));
11
13
  class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
12
14
  constructor(_coinConfig) {
13
15
  super(_coinConfig);
14
- this._signatures = [];
15
16
  this._transaction = new transaction_1.Transaction(_coinConfig);
16
17
  }
17
18
  /** @inheritdoc */
@@ -22,191 +23,157 @@ class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
22
23
  set transaction(transaction) {
23
24
  this._transaction = transaction;
24
25
  }
25
- /** @inheritdoc */
26
- signImplementation(key) {
27
- throw new Error('Method not implemented.');
28
- }
29
26
  /** @inheritDoc */
30
27
  addSignature(publicKey, signature) {
31
- this._signatures.push({ publicKey, signature });
32
- }
33
- type(type) {
34
- this._type = type;
28
+ this._signature = signature;
29
+ this._publicKey = publicKey.pub;
35
30
  }
36
31
  /**
37
- * Sets the signerAddress of this transaction.
38
- * This account will be responsible for paying transaction fees.
39
- *
40
- * @param {string} signerAddress the account that is sending this transaction
41
- * @returns {TransactionBuilder} This transaction builder
32
+ * Sets gas budget of this transaction
33
+ * Gas budget consist of fee amount and gas limit. Division feeAmount/gasLimit represents
34
+ * the gas-fee and it should be more than minimum required gas-fee to process the transaction
35
+ * @param {FeeData} gasBudget
36
+ * @returns {TransactionBuilder} this transaction builder
42
37
  */
43
- signerAddress(signerAddress) {
44
- if (!utils_1.default.isValidAddress(signerAddress)) {
45
- throw new Error('transactionBuilder: sender isValidAddress check failed');
46
- }
47
- this._signerAddress = signerAddress;
48
- return this;
49
- }
50
38
  gasBudget(gasBudget) {
51
- this.validateGasBudget(gasBudget);
39
+ utils_1.default.validateGasBudget(gasBudget);
52
40
  this._gasBudget = gasBudget;
53
41
  return this;
54
42
  }
55
43
  /**
56
- *
57
- * @param {SignerData} expliticSignerData signer data: {accountNumber, sequence, chainId}
44
+ * Sets sequence of this transaction.
45
+ * @param {number} sequence - sequence data for tx signer
58
46
  * @returns {TransactionBuilder} This transaction builder
59
47
  */
60
- expliticSignerData(explicitSignerData) {
61
- this.validateSignerData(explicitSignerData);
62
- this._explicitSignerData = explicitSignerData;
48
+ sequence(sequence) {
49
+ utils_1.default.validateSequence(sequence);
50
+ this._sequence = sequence;
51
+ return this;
52
+ }
53
+ publicKey(publicKey) {
54
+ this._publicKey = publicKey;
55
+ return this;
56
+ }
57
+ accountNumber(accountNumber) {
58
+ this._accountNumber = accountNumber;
59
+ return this;
60
+ }
61
+ chainId(chainId) {
62
+ this._chainId = chainId;
63
63
  return this;
64
64
  }
65
- sendMessages(sendMessages) {
66
- this.validateMessageDataArray(sendMessages);
67
- this._sendMessages = sendMessages;
65
+ memo(memo) {
66
+ this._memo = memo;
68
67
  return this;
69
68
  }
70
69
  /**
71
70
  * Initialize the transaction builder fields using the decoded transaction data
72
- *
73
71
  * @param {Transaction} tx the transaction data
74
72
  */
75
73
  initBuilder(tx) {
76
74
  this._transaction = tx;
77
75
  const txData = tx.toJson();
78
- this.type(txData.type);
79
- this.gasBudget(txData.gasBudget);
80
- this.signerAddress(txData.signerAddress);
81
- this.sendMessages(txData.sendMessages);
82
76
  this.gasBudget(txData.gasBudget);
77
+ this.messages(txData.sendMessages.map((message) => {
78
+ return message.value;
79
+ }));
80
+ this.sequence(txData.sequence);
81
+ this.publicKey(txData.publicKey);
82
+ this.accountNumber(txData.accountNumber);
83
+ this.chainId(txData.chainId);
84
+ this.memo(txData.memo);
85
+ if (tx.signature && tx.signature.length > 0) {
86
+ this.addSignature({ pub: txData.publicKey }, Buffer.from(tx.signature[0], 'hex'));
87
+ }
83
88
  }
84
89
  /** @inheritdoc */
85
90
  fromImplementation(rawTransaction) {
86
91
  const tx = new transaction_1.Transaction(this._coinConfig);
87
- this.validateRawTransaction(rawTransaction);
88
- tx.fromRawTransaction(rawTransaction);
92
+ tx.enrichTransactionDetailsFromRawTransaction(rawTransaction);
89
93
  this.initBuilder(tx);
90
94
  return this.transaction;
91
95
  }
92
96
  /** @inheritdoc */
93
97
  async buildImplementation() {
94
- this.transaction.setAtomTransaction(this.buildAtomTransaction());
95
- this.transaction.transactionType(this.transactionType);
98
+ var _a;
99
+ this.transaction.transactionType = this.transactionType;
100
+ if (this._accountNumber) {
101
+ this.transaction.accountNumber = this._accountNumber;
102
+ }
103
+ if (this._chainId) {
104
+ this.transaction.chainId = this._chainId;
105
+ }
106
+ this.transaction.atomTransaction = utils_1.default.createAtomTransaction(this._sequence, this._messages, this._gasBudget, this._publicKey, this._memo);
107
+ const privateKey = (_a = this._signer) === null || _a === void 0 ? void 0 : _a.getPrivateKey();
108
+ if (privateKey !== undefined && this.transaction.atomTransaction.publicKey !== undefined) {
109
+ const signDoc = utils_1.default.createSignDoc(this.transaction.atomTransaction, this._accountNumber, this._chainId);
110
+ const txnHash = crypto_1.sha256(proto_signing_1.makeSignBytes(signDoc));
111
+ const signature = await crypto_1.Secp256k1.createSignature(txnHash, privateKey);
112
+ const compressedSig = Buffer.concat([signature.r(), signature.s()]);
113
+ this.addSignature({ pub: this.transaction.atomTransaction.publicKey }, compressedSig);
114
+ }
115
+ if (this._signature !== undefined) {
116
+ this.transaction.addSignature(this._signature.toString('hex'));
117
+ this.transaction.atomTransaction = utils_1.default.createAtomTransactionWithHash(this._sequence, this._messages, this._gasBudget, this._publicKey, this._signature, this._memo);
118
+ }
119
+ this.transaction.loadInputsAndOutputs();
96
120
  return this.transaction;
97
121
  }
98
- buildAtomTransaction() {
99
- assert_1.default(this._type, new sdk_core_1.BuildTransactionError('type is required before building'));
100
- assert_1.default(this._signerAddress, new sdk_core_1.BuildTransactionError('signerAddress is required before building'));
101
- assert_1.default(this._explicitSignerData, new sdk_core_1.BuildTransactionError('explicitSignerData is required before building'));
102
- assert_1.default(this._sendMessages, new sdk_core_1.BuildTransactionError('sendMessages are required before building'));
103
- assert_1.default(this._gasBudget, new sdk_core_1.BuildTransactionError('gasPrice is required before building'));
104
- return {
105
- type: this._type,
106
- signerAddress: this._signerAddress,
107
- explicitSignerData: this._explicitSignerData,
108
- sendMessages: this._sendMessages,
109
- gasBudget: this._gasBudget,
110
- };
111
- }
112
- validateAddress(address, addressFormat) {
113
- throw new sdk_core_1.BuildTransactionError('validateAddress method not yet implemented');
114
- }
115
- validateAmountData(amountArray) {
116
- // TODO - make the error messages more descriptive of which amount data is failing
117
- // Do amount checking by casting to numbers/bignumber and comparing as well
118
- for (const amount of amountArray) {
119
- if (!amount.amount) {
120
- throw new sdk_core_1.BuildTransactionError('Invalid amount: undefined');
121
- }
122
- if (!amount.denom) {
123
- throw new sdk_core_1.BuildTransactionError('Invalid denom: undefined');
124
- }
122
+ /** @inheritdoc */
123
+ signImplementation(key) {
124
+ this.validateKey(key);
125
+ if (this._accountNumber === undefined) {
126
+ throw new sdk_core_1.SigningError('accountNumber is required before signing');
125
127
  }
126
- }
127
- validateGasBudget(gasBudget) {
128
- if (gasBudget.gas <= 0) {
129
- throw new sdk_core_1.BuildTransactionError('Invalid gas limit ' + gasBudget.gas);
128
+ if (this._chainId === undefined) {
129
+ throw new sdk_core_1.SigningError('chainId is required before signing');
130
130
  }
131
- this.validateAmountData(gasBudget.amount);
131
+ this._signer = new keyPair_1.KeyPair({ prv: key.key });
132
+ this._publicKey = this._signer.getKeys().pub;
133
+ return this.transaction;
132
134
  }
133
- validateMessageDataArray(sendMessages) {
134
- for (const msg of sendMessages) {
135
- this.validateMessageData(msg);
135
+ validateAddress(address, addressFormat) {
136
+ if (!(utils_1.default.isValidAddress(address.address) || utils_1.default.isValidValidatorAddress(address.address))) {
137
+ throw new sdk_core_1.BuildTransactionError('transactionBuilder: address isValidAddress check failed: ' + address.address);
136
138
  }
137
139
  }
138
- validateMessageData(messageData) {
139
- if (!messageData) {
140
- throw new sdk_core_1.BuildTransactionError(`Invalid MessageData: undefined`);
141
- }
142
- if (!messageData.typeUrl) {
143
- throw new sdk_core_1.BuildTransactionError(`Invalid MessageData typeurl: ` + messageData.typeUrl);
144
- }
145
- if (!messageData.value.toAddress) {
146
- throw new sdk_core_1.BuildTransactionError(`Invalid MessageData value.toAddress: ` + messageData.value.toAddress);
147
- }
148
- if (!messageData.value.fromAddress) {
149
- throw new sdk_core_1.BuildTransactionError(`Invalid MessageData value.fromAddress: ` + messageData.value.fromAddress);
140
+ /** @inheritdoc */
141
+ validateValue(value) {
142
+ if (value.isLessThan(0)) {
143
+ throw new sdk_core_1.BuildTransactionError('Value cannot be less than zero');
150
144
  }
151
- this.validateAmountData(messageData.value.amount);
152
145
  }
153
146
  /** @inheritdoc */
154
147
  validateKey(key) {
155
- throw new Error('Method not implemented.');
156
- }
157
- /** @inheritdoc */
158
- validateRawTransaction(rawTransaction) {
159
- if (!rawTransaction) {
160
- throw new sdk_core_1.ParseTransactionError('Invalid raw transaction: Undefined');
148
+ try {
149
+ new keyPair_1.KeyPair({ prv: key.key });
161
150
  }
162
- if (!utils_1.default.isValidRawTransaction(rawTransaction)) {
163
- throw new sdk_core_1.ParseTransactionError('Invalid raw transaction');
151
+ catch {
152
+ throw new sdk_core_1.BuildTransactionError(`Key validation failed`);
164
153
  }
165
154
  }
166
155
  /** @inheritdoc */
167
- validateTransaction(transaction) {
168
- if (!transaction.atomTransaction) {
169
- return;
170
- }
171
- this.validateTransactionFields();
172
- }
173
- /**
174
- * Validates all fields are defined
175
- */
176
- validateTransactionFields() {
177
- if (this._type === undefined) {
178
- throw new sdk_core_1.BuildTransactionError('Invalid transaction: missing type');
179
- }
180
- if (this._signerAddress === undefined) {
181
- throw new sdk_core_1.BuildTransactionError('Invalid transaction: missing signerAddress');
182
- }
183
- if (this._explicitSignerData === undefined) {
184
- throw new sdk_core_1.BuildTransactionError('Invalid transaction: missing explicitSignerData');
156
+ validateRawTransaction(rawTransaction) {
157
+ if (!rawTransaction) {
158
+ throw new sdk_core_1.InvalidTransactionError('Invalid raw transaction: Undefined rawTransaction');
185
159
  }
186
- if (this._sendMessages === undefined) {
187
- throw new sdk_core_1.BuildTransactionError('Invalid transaction: missing sendMessages');
160
+ try {
188
161
  }
189
- if (this._gasBudget === undefined) {
190
- throw new sdk_core_1.BuildTransactionError('Invalid transaction: missing gas budget data');
162
+ catch (e) {
163
+ throw new sdk_core_1.InvalidTransactionError('Invalid raw transaction: ' + e.message);
191
164
  }
165
+ const atomTransaction = utils_1.default.deserializeAtomTransaction(rawTransaction);
166
+ utils_1.default.validateAtomTransaction(atomTransaction);
192
167
  }
193
168
  /** @inheritdoc */
194
- validateValue(value) {
195
- if (value.isLessThan(0)) {
196
- throw new sdk_core_1.BuildTransactionError('Value cannot be less than zero');
197
- }
198
- }
199
- validateSignerData(explicitSignerData) {
200
- if (!explicitSignerData.chainId) {
201
- throw new sdk_core_1.BuildTransactionError('Invalid explicitSignerData: missing chainId');
202
- }
203
- if (!explicitSignerData.accountNumber) {
204
- throw new sdk_core_1.BuildTransactionError('Invalid explicitSignerData: missing accountNumber');
205
- }
206
- if (!explicitSignerData.sequence) {
207
- throw new sdk_core_1.BuildTransactionError('Invalid explicitSignerData: missing sequence');
208
- }
169
+ validateTransaction(transaction) {
170
+ utils_1.default.validateAtomTransaction({
171
+ sequence: this._sequence,
172
+ sendMessages: this._messages,
173
+ gasBudget: this._gasBudget,
174
+ publicKey: this._publicKey,
175
+ });
209
176
  }
210
177
  }
211
178
  exports.TransactionBuilder = TransactionBuilder;
212
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsbURBUzhCO0FBQzlCLCtDQUE0QztBQUM1QyxvREFBNEI7QUFHNUIsb0RBQTRCO0FBSTVCLE1BQXNCLGtCQUFtQixTQUFRLGlDQUFzQjtJQVVyRSxZQUFZLFdBQWlDO1FBQzNDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQVRiLGdCQUFXLEdBQWdCLEVBQUUsQ0FBQztRQVVwQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUkseUJBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBUUQsa0JBQWtCO0lBQ2xCLElBQWMsV0FBVztRQUN2QixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDM0IsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixJQUFjLFdBQVcsQ0FBQyxXQUF3QjtRQUNoRCxJQUFJLENBQUMsWUFBWSxHQUFHLFdBQVcsQ0FBQztJQUNsQyxDQUFDO0lBRUQsa0JBQWtCO0lBQ1Isa0JBQWtCLENBQUMsR0FBWTtRQUN2QyxNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixZQUFZLENBQUMsU0FBd0IsRUFBRSxTQUFpQjtRQUN0RCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRCxJQUFJLENBQUMsSUFBWTtRQUNmLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0lBQ3BCLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxhQUFhLENBQUMsYUFBcUI7UUFDakMsSUFBSSxDQUFDLGVBQUssQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLEVBQUU7WUFDeEMsTUFB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Q0FBcUIsQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO1NBQ2pGO0lBQ0gsQ0FBQztDQUNGO0FBOU9ELGdEQThPQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEJhc2VBZGRyZXNzLFxuICBCYXNlS2V5LFxuICBCYXNlVHJhbnNhY3Rpb25CdWlsZGVyLFxuICBCdWlsZFRyYW5zYWN0aW9uRXJyb3IsXG4gIFBhcnNlVHJhbnNhY3Rpb25FcnJvcixcbiAgUHVibGljS2V5IGFzIEJhc2VQdWJsaWNLZXksXG4gIFNpZ25hdHVyZSxcbiAgVHJhbnNhY3Rpb25UeXBlLFxufSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IEJpZ051bWJlciBmcm9tICdiaWdudW1iZXIuanMnO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHsgQXRvbVRyYW5zYWN0aW9uLCBHYXNGZWVMaW1pdERhdGEsIE1lc3NhZ2VEYXRhIH0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQgeyBDb2luLCBTaWduZXJEYXRhIH0gZnJvbSAnQGNvc21qcy9zdGFyZ2F0ZSc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBUcmFuc2FjdGlvbkJ1aWxkZXIgZXh0ZW5kcyBCYXNlVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgcHJvdGVjdGVkIF90cmFuc2FjdGlvbjogVHJhbnNhY3Rpb247XG4gIHByaXZhdGUgX3NpZ25hdHVyZXM6IFNpZ25hdHVyZVtdID0gW107XG5cbiAgcHJvdGVjdGVkIF90eXBlOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBfc2lnbmVyQWRkcmVzczogc3RyaW5nO1xuICBwcm90ZWN0ZWQgX2V4cGxpY2l0U2lnbmVyRGF0YTogU2lnbmVyRGF0YTtcbiAgcHJvdGVjdGVkIF9zZW5kTWVzc2FnZXM6IE1lc3NhZ2VEYXRhW107XG4gIHByb3RlY3RlZCBfZ2FzQnVkZ2V0OiBHYXNGZWVMaW1pdERhdGE7XG5cbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uKF9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIC8vIGdldCBhbmQgc2V0IHJlZ2lvblxuICAvKipcbiAgICogVGhlIHRyYW5zYWN0aW9uIHR5cGUuXG4gICAqL1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0IHRyYW5zYWN0aW9uVHlwZSgpOiBUcmFuc2FjdGlvblR5cGU7XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBnZXQgdHJhbnNhY3Rpb24oKTogVHJhbnNhY3Rpb24ge1xuICAgIHJldHVybiB0aGlzLl90cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgc2V0IHRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbikge1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uID0gdHJhbnNhY3Rpb247XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIHNpZ25JbXBsZW1lbnRhdGlvbihrZXk6IEJhc2VLZXkpOiBUcmFuc2FjdGlvbiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGFkZFNpZ25hdHVyZShwdWJsaWNLZXk6IEJhc2VQdWJsaWNLZXksIHNpZ25hdHVyZTogQnVmZmVyKTogdm9pZCB7XG4gICAgdGhpcy5fc2lnbmF0dXJlcy5wdXNoKHsgcHVibGljS2V5LCBzaWduYXR1cmUgfSk7XG4gIH1cblxuICB0eXBlKHR5cGU6IHN0cmluZykge1xuICAgIHRoaXMuX3R5cGUgPSB0eXBlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHNpZ25lckFkZHJlc3Mgb2YgdGhpcyB0cmFuc2FjdGlvbi5cbiAgICogVGhpcyBhY2NvdW50IHdpbGwgYmUgcmVzcG9uc2libGUgZm9yIHBheWluZyB0cmFuc2FjdGlvbiBmZWVzLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2lnbmVyQWRkcmVzcyB0aGUgYWNjb3VudCB0aGF0IGlzIHNlbmRpbmcgdGhpcyB0cmFuc2FjdGlvblxuICAgKiBAcmV0dXJucyB7VHJhbnNhY3Rpb25CdWlsZGVyfSBUaGlzIHRyYW5zYWN0aW9uIGJ1aWxkZXJcbiAgICovXG4gIHNpZ25lckFkZHJlc3Moc2lnbmVyQWRkcmVzczogc3RyaW5nKTogdGhpcyB7XG4gICAgaWYgKCF1dGlscy5pc1ZhbGlkQWRkcmVzcyhzaWduZXJBZGRyZXNzKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd0cmFuc2FjdGlvbkJ1aWxkZXI6IHNlbmRlciBpc1ZhbGlkQWRkcmVzcyBjaGVjayBmYWlsZWQnKTtcbiAgICB9XG4gICAgdGhpcy5fc2lnbmVyQWRkcmVzcyA9IHNpZ25lckFkZHJlc3M7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBnYXNCdWRnZXQoZ2FzQnVkZ2V0OiBHYXNGZWVMaW1pdERhdGEpOiB0aGlzIHtcbiAgICB0aGlzLnZhbGlkYXRlR2FzQnVkZ2V0KGdhc0J1ZGdldCk7XG4gICAgdGhpcy5fZ2FzQnVkZ2V0ID0gZ2FzQnVkZ2V0O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7U2lnbmVyRGF0YX0gZXhwbGl0aWNTaWduZXJEYXRhIHNpZ25lciBkYXRhOiB7YWNjb3VudE51bWJlciwgc2VxdWVuY2UsIGNoYWluSWR9XG4gICAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbkJ1aWxkZXJ9IFRoaXMgdHJhbnNhY3Rpb24gYnVpbGRlclxuICAgKi9cbiAgZXhwbGl0aWNTaWduZXJEYXRhKGV4cGxpY2l0U2lnbmVyRGF0YTogU2lnbmVyRGF0YSk6IHRoaXMge1xuICAgIHRoaXMudmFsaWRhdGVTaWduZXJEYXRhKGV4cGxpY2l0U2lnbmVyRGF0YSk7XG4gICAgdGhpcy5fZXhwbGljaXRTaWduZXJEYXRhID0gZXhwbGljaXRTaWduZXJEYXRhO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgc2VuZE1lc3NhZ2VzKHNlbmRNZXNzYWdlczogTWVzc2FnZURhdGFbXSk6IHRoaXMge1xuICAgIHRoaXMudmFsaWRhdGVNZXNzYWdlRGF0YUFycmF5KHNlbmRNZXNzYWdlcyk7XG4gICAgdGhpcy5fc2VuZE1lc3NhZ2VzID0gc2VuZE1lc3NhZ2VzO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgdGhlIHRyYW5zYWN0aW9uIGJ1aWxkZXIgZmllbGRzIHVzaW5nIHRoZSBkZWNvZGVkIHRyYW5zYWN0aW9uIGRhdGFcbiAgICpcbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvbn0gdHggdGhlIHRyYW5zYWN0aW9uIGRhdGFcbiAgICovXG4gIGluaXRCdWlsZGVyKHR4OiBUcmFuc2FjdGlvbik6IHZvaWQge1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uID0gdHg7XG4gICAgY29uc3QgdHhEYXRhID0gdHgudG9Kc29uKCk7XG4gICAgdGhpcy50eXBlKHR4RGF0YS50eXBlKTtcbiAgICB0aGlzLmdhc0J1ZGdldCh0eERhdGEuZ2FzQnVkZ2V0KTtcbiAgICB0aGlzLnNpZ25lckFkZHJlc3ModHhEYXRhLnNpZ25lckFkZHJlc3MpO1xuICAgIHRoaXMuc2VuZE1lc3NhZ2VzKHR4RGF0YS5zZW5kTWVzc2FnZXMpO1xuICAgIHRoaXMuZ2FzQnVkZ2V0KHR4RGF0YS5nYXNCdWRnZXQpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBmcm9tSW1wbGVtZW50YXRpb24ocmF3VHJhbnNhY3Rpb246IHN0cmluZyk6IFRyYW5zYWN0aW9uIHtcbiAgICBjb25zdCB0eCA9IG5ldyBUcmFuc2FjdGlvbih0aGlzLl9jb2luQ29uZmlnKTtcbiAgICB0aGlzLnZhbGlkYXRlUmF3VHJhbnNhY3Rpb24ocmF3VHJhbnNhY3Rpb24pO1xuICAgIHR4LmZyb21SYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbik7XG4gICAgdGhpcy5pbml0QnVpbGRlcih0eCk7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNhY3Rpb247XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGJ1aWxkSW1wbGVtZW50YXRpb24oKTogUHJvbWlzZTxUcmFuc2FjdGlvbj4ge1xuICAgIHRoaXMudHJhbnNhY3Rpb24uc2V0QXRvbVRyYW5zYWN0aW9uKHRoaXMuYnVpbGRBdG9tVHJhbnNhY3Rpb24oKSk7XG4gICAgdGhpcy50cmFuc2FjdGlvbi50cmFuc2FjdGlvblR5cGUodGhpcy50cmFuc2FjdGlvblR5cGUpO1xuICAgIHJldHVybiB0aGlzLnRyYW5zYWN0aW9uO1xuICB9XG5cbiAgcHJvdGVjdGVkIGJ1aWxkQXRvbVRyYW5zYWN0aW9uKCk6IEF0b21UcmFuc2FjdGlvbiB7XG4gICAgYXNzZXJ0KHRoaXMuX3R5cGUsIG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ3R5cGUgaXMgcmVxdWlyZWQgYmVmb3JlIGJ1aWxkaW5nJykpO1xuICAgIGFzc2VydCh0aGlzLl9zaWduZXJBZGRyZXNzLCBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdzaWduZXJBZGRyZXNzIGlzIHJlcXVpcmVkIGJlZm9yZSBidWlsZGluZycpKTtcbiAgICBhc3NlcnQodGhpcy5fZXhwbGljaXRTaWduZXJEYXRhLCBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdleHBsaWNpdFNpZ25lckRhdGEgaXMgcmVxdWlyZWQgYmVmb3JlIGJ1aWxkaW5nJykpO1xuICAgIGFzc2VydCh0aGlzLl9zZW5kTWVzc2FnZXMsIG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ3NlbmRNZXNzYWdlcyBhcmUgcmVxdWlyZWQgYmVmb3JlIGJ1aWxkaW5nJykpO1xuICAgIGFzc2VydCh0aGlzLl9nYXNCdWRnZXQsIG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ2dhc1ByaWNlIGlzIHJlcXVpcmVkIGJlZm9yZSBidWlsZGluZycpKTtcblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiB0aGlzLl90eXBlLFxuICAgICAgc2lnbmVyQWRkcmVzczogdGhpcy5fc2lnbmVyQWRkcmVzcyxcbiAgICAgIGV4cGxpY2l0U2lnbmVyRGF0YTogdGhpcy5fZXhwbGljaXRTaWduZXJEYXRhLFxuICAgICAgc2VuZE1lc3NhZ2VzOiB0aGlzLl9zZW5kTWVzc2FnZXMsXG4gICAgICBnYXNCdWRnZXQ6IHRoaXMuX2dhc0J1ZGdldCxcbiAgICB9O1xuICB9XG5cbiAgdmFsaWRhdGVBZGRyZXNzKGFkZHJlc3M6IEJhc2VBZGRyZXNzLCBhZGRyZXNzRm9ybWF0Pzogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcigndmFsaWRhdGVBZGRyZXNzIG1ldGhvZCBub3QgeWV0IGltcGxlbWVudGVkJyk7XG4gIH1cblxuICBwcml2YXRlIHZhbGlkYXRlQW1vdW50RGF0YShhbW91bnRBcnJheTogQ29pbltdKTogdm9pZCB7XG4gICAgLy8gVE9ETyAtIG1ha2UgdGhlIGVycm9yIG1lc3NhZ2VzIG1vcmUgZGVzY3JpcHRpdmUgb2Ygd2hpY2ggYW1vdW50IGRhdGEgaXMgZmFpbGluZ1xuICAgIC8vIERvIGFtb3VudCBjaGVja2luZyBieSBjYXN0aW5nIHRvIG51bWJlcnMvYmlnbnVtYmVyIGFuZCBjb21wYXJpbmcgYXMgd2VsbFxuICAgIGZvciAoY29uc3QgYW1vdW50IG9mIGFtb3VudEFycmF5KSB7XG4gICAgICBpZiAoIWFtb3VudC5hbW91bnQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCBhbW91bnQ6IHVuZGVmaW5lZCcpO1xuICAgICAgfVxuICAgICAgaWYgKCFhbW91bnQuZGVub20pIHtcbiAgICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCBkZW5vbTogdW5kZWZpbmVkJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFsaWRhdGVHYXNCdWRnZXQoZ2FzQnVkZ2V0OiBHYXNGZWVMaW1pdERhdGEpOiB2b2lkIHtcbiAgICBpZiAoZ2FzQnVkZ2V0LmdhcyA8PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIGdhcyBsaW1pdCAnICsgZ2FzQnVkZ2V0Lmdhcyk7XG4gICAgfVxuICAgIHRoaXMudmFsaWRhdGVBbW91bnREYXRhKGdhc0J1ZGdldC5hbW91bnQpO1xuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZU1lc3NhZ2VEYXRhQXJyYXkoc2VuZE1lc3NhZ2VzOiBNZXNzYWdlRGF0YVtdKSB7XG4gICAgZm9yIChjb25zdCBtc2cgb2Ygc2VuZE1lc3NhZ2VzKSB7XG4gICAgICB0aGlzLnZhbGlkYXRlTWVzc2FnZURhdGEobXNnKTtcbiAgICB9XG4gIH1cblxuICB2YWxpZGF0ZU1lc3NhZ2VEYXRhKG1lc3NhZ2VEYXRhOiBNZXNzYWdlRGF0YSk6IHZvaWQge1xuICAgIGlmICghbWVzc2FnZURhdGEpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoYEludmFsaWQgTWVzc2FnZURhdGE6IHVuZGVmaW5lZGApO1xuICAgIH1cbiAgICBpZiAoIW1lc3NhZ2VEYXRhLnR5cGVVcmwpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoYEludmFsaWQgTWVzc2FnZURhdGEgdHlwZXVybDogYCArIG1lc3NhZ2VEYXRhLnR5cGVVcmwpO1xuICAgIH1cbiAgICBpZiAoIW1lc3NhZ2VEYXRhLnZhbHVlLnRvQWRkcmVzcykge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcihgSW52YWxpZCBNZXNzYWdlRGF0YSB2YWx1ZS50b0FkZHJlc3M6IGAgKyBtZXNzYWdlRGF0YS52YWx1ZS50b0FkZHJlc3MpO1xuICAgIH1cbiAgICBpZiAoIW1lc3NhZ2VEYXRhLnZhbHVlLmZyb21BZGRyZXNzKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKGBJbnZhbGlkIE1lc3NhZ2VEYXRhIHZhbHVlLmZyb21BZGRyZXNzOiBgICsgbWVzc2FnZURhdGEudmFsdWUuZnJvbUFkZHJlc3MpO1xuICAgIH1cbiAgICB0aGlzLnZhbGlkYXRlQW1vdW50RGF0YShtZXNzYWdlRGF0YS52YWx1ZS5hbW91bnQpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlS2V5KGtleTogQmFzZUtleSk6IHZvaWQge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZVJhd1RyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXJhd1RyYW5zYWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2VUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIHJhdyB0cmFuc2FjdGlvbjogVW5kZWZpbmVkJyk7XG4gICAgfVxuICAgIGlmICghdXRpbHMuaXNWYWxpZFJhd1RyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uKSkge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCByYXcgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVUcmFuc2FjdGlvbih0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb24pOiB2b2lkIHtcbiAgICBpZiAoIXRyYW5zYWN0aW9uLmF0b21UcmFuc2FjdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnZhbGlkYXRlVHJhbnNhY3Rpb25GaWVsZHMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgYWxsIGZpZWxkcyBhcmUgZGVmaW5lZFxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZVRyYW5zYWN0aW9uRmllbGRzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl90eXBlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgdHJhbnNhY3Rpb246IG1pc3NpbmcgdHlwZScpO1xuICAgIH1cbiAgICBpZiAodGhpcy5fc2lnbmVyQWRkcmVzcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIHRyYW5zYWN0aW9uOiBtaXNzaW5nIHNpZ25lckFkZHJlc3MnKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2V4cGxpY2l0U2lnbmVyRGF0YSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIHRyYW5zYWN0aW9uOiBtaXNzaW5nIGV4cGxpY2l0U2lnbmVyRGF0YScpO1xuICAgIH1cbiAgICBpZiAodGhpcy5fc2VuZE1lc3NhZ2VzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgdHJhbnNhY3Rpb246IG1pc3Npbmcgc2VuZE1lc3NhZ2VzJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLl9nYXNCdWRnZXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCB0cmFuc2FjdGlvbjogbWlzc2luZyBnYXMgYnVkZ2V0IGRhdGEnKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVWYWx1ZSh2YWx1ZTogQmlnTnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHZhbHVlLmlzTGVzc1RoYW4oMCkpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ1ZhbHVlIGNhbm5vdCBiZSBsZXNzIHRoYW4gemVybycpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGVTaWduZXJEYXRhKGV4cGxpY2l0U2lnbmVyRGF0YTogU2lnbmVyRGF0YSkge1xuICAgIGlmICghZXhwbGljaXRTaWduZXJEYXRhLmNoYWluSWQpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgZXhwbGljaXRTaWduZXJEYXRhOiBtaXNzaW5nIGNoYWluSWQnKTtcbiAgICB9XG4gICAgaWYgKCFleHBsaWNpdFNpZ25lckRhdGEuYWNjb3VudE51bWJlcikge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCBleHBsaWNpdFNpZ25lckRhdGE6IG1pc3NpbmcgYWNjb3VudE51bWJlcicpO1xuICAgIH1cbiAgICBpZiAoIWV4cGxpY2l0U2lnbmVyRGF0YS5zZXF1ZW5jZSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCBleHBsaWNpdFNpZ25lckRhdGE6IG1pc3Npbmcgc2VxdWVuY2UnKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
179
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsbURBUzhCO0FBRTlCLDJDQUFtRDtBQUNuRCx5REFBc0Q7QUFVdEQsdUNBQW9DO0FBQ3BDLCtDQUE0QztBQUM1QyxvREFBNEI7QUFFNUIsTUFBc0Isa0JBQW1CLFNBQVEsaUNBQXNCO0lBWXJFLFlBQVksV0FBaUM7UUFDM0MsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ25CLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSx5QkFBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFPRCxrQkFBa0I7SUFDbEIsSUFBYyxXQUFXO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUMzQixDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLElBQWMsV0FBVyxDQUFDLFdBQXdCO1FBQ2hELElBQUksQ0FBQyxZQUFZLEdBQUcsV0FBVyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsWUFBWSxDQUFDLFNBQXdCLEVBQUUsU0FBaUI7UUFDdEQsSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUM7UUFDNUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDO0lBQ2xDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxTQUFTLENBQUMsU0FBa0I7UUFDMUIsZUFBSyxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDO1FBQzVCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxRQUFRLENBQUMsUUFBZ0I7UUFDdkIsZUFBSyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxT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QUFDLENBQUMsRUFBRTtZQUN2QixNQUFNLElBQUksZ0NBQXFCLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztTQUNuRTtJQUNILENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsV0FBVyxDQUFDLEdBQVk7UUFDdEIsSUFBSTtZQUNGLElBQUksaUJBQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztTQUMvQjtRQUFDLE1BQU07WUFDTixNQUFNLElBQUksZ0NBQXFCLENBQUMsdUJBQXVCLENBQUMsQ0FBQztTQUMxRDtJQUNILENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsc0JBQXNCLENBQUMsY0FBc0I7UUFDM0MsSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUNuQixNQUFNLElBQUksa0NBQXVCLENBQUMsbURBQW1ELENBQUMsQ0FBQztTQUN4RjtRQUNELElBQUk7U0FDSDtRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1YsTUFBTSxJQUFJLGtDQUF1QixDQUFDLDJCQUEyQixHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUM1RTtRQUNELE1BQU0sZUFBZSxHQUFHLGVBQUssQ0FBQywwQkFBMEIsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN6RSxlQUFLLENBQUMsdUJBQXVCLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixtQkFBbUIsQ0FBQyxXQUF3QjtRQUMxQyxlQUFLLENBQUMsdUJBQXVCLENBQUM7WUFDNUIsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTO1lBQ3hCLFlBQVksRUFBRSxJQUFJLENBQUMsU0FBUztZQUM1QixTQUFTLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDMUIsU0FBUyxFQUFFLElBQUksQ0FBQyxVQUFVO1NBQzNCLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQS9ORCxnREErTkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBCYXNlQWRkcmVzcyxcbiAgQmFzZUtleSxcbiAgQmFzZVRyYW5zYWN0aW9uQnVpbGRlcixcbiAgQnVpbGRUcmFuc2FjdGlvbkVycm9yLFxuICBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcixcbiAgUHVibGljS2V5IGFzIEJhc2VQdWJsaWNLZXksXG4gIFNpZ25pbmdFcnJvcixcbiAgVHJhbnNhY3Rpb25UeXBlLFxufSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgeyBTZWNwMjU2azEsIHNoYTI1NiB9IGZyb20gJ0Bjb3NtanMvY3J5cHRvJztcbmltcG9ydCB7IG1ha2VTaWduQnl0ZXMgfSBmcm9tICdAY29zbWpzL3Byb3RvLXNpZ25pbmcnO1xuaW1wb3J0IEJpZ051bWJlciBmcm9tICdiaWdudW1iZXIuanMnO1xuXG5pbXBvcnQge1xuICBEZWxlZ2F0ZU9yVW5kZWxlZ2V0ZU1lc3NhZ2UsXG4gIEZlZURhdGEsXG4gIE1lc3NhZ2VEYXRhLFxuICBTZW5kTWVzc2FnZSxcbiAgV2l0aGRyYXdEZWxlZ2F0b3JSZXdhcmRzTWVzc2FnZSxcbn0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQgeyBLZXlQYWlyIH0gZnJvbSAnLi9rZXlQYWlyJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbic7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi91dGlscyc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBUcmFuc2FjdGlvbkJ1aWxkZXIgZXh0ZW5kcyBCYXNlVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgcHJvdGVjdGVkIF90cmFuc2FjdGlvbjogVHJhbnNhY3Rpb247XG4gIHByb3RlY3RlZCBfc2VxdWVuY2U6IG51bWJlcjtcbiAgcHJvdGVjdGVkIF9tZXNzYWdlczogTWVzc2FnZURhdGFbXTtcbiAgcHJvdGVjdGVkIF9nYXNCdWRnZXQ6IEZlZURhdGE7XG4gIHByaXZhdGUgX2FjY291bnROdW1iZXI/OiBudW1iZXI7XG4gIHByaXZhdGUgX3NpZ25hdHVyZTogQnVmZmVyO1xuICBwcml2YXRlIF9jaGFpbklkPzogc3RyaW5nO1xuICBwcml2YXRlIF9wdWJsaWNLZXk/OiBzdHJpbmc7XG4gIHByaXZhdGUgX3NpZ25lcjogS2V5UGFpcjtcbiAgcHJpdmF0ZSBfbWVtbz86IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihfY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihfY29pbkNvbmZpZyk7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb24gPSBuZXcgVHJhbnNhY3Rpb24oX2NvaW5Db25maWcpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSB0cmFuc2FjdGlvbiB0eXBlLlxuICAgKi9cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGdldCB0cmFuc2FjdGlvblR5cGUoKTogVHJhbnNhY3Rpb25UeXBlO1xuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgZ2V0IHRyYW5zYWN0aW9uKCk6IFRyYW5zYWN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNhY3Rpb247XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIHNldCB0cmFuc2FjdGlvbih0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb24pIHtcbiAgICB0aGlzLl90cmFuc2FjdGlvbiA9IHRyYW5zYWN0aW9uO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGFkZFNpZ25hdHVyZShwdWJsaWNLZXk6IEJhc2VQdWJsaWNLZXksIHNpZ25hdHVyZTogQnVmZmVyKTogdm9pZCB7XG4gICAgdGhpcy5fc2lnbmF0dXJlID0gc2lnbmF0dXJlO1xuICAgIHRoaXMuX3B1YmxpY0tleSA9IHB1YmxpY0tleS5wdWI7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBnYXMgYnVkZ2V0IG9mIHRoaXMgdHJhbnNhY3Rpb25cbiAgICogR2FzIGJ1ZGdldCBjb25zaXN0IG9mIGZlZSBhbW91bnQgYW5kIGdhcyBsaW1pdC4gRGl2aXNpb24gZmVlQW1vdW50L2dhc0xpbWl0IHJlcHJlc2VudHNcbiAgICogdGhlIGdhcy1mZWUgYW5kIGl0IHNob3VsZCBiZSBtb3JlIHRoYW4gbWluaW11bSByZXF1aXJlZCBnYXMtZmVlIHRvIHByb2Nlc3MgdGhlIHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSB7RmVlRGF0YX0gZ2FzQnVkZ2V0XG4gICAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbkJ1aWxkZXJ9IHRoaXMgdHJhbnNhY3Rpb24gYnVpbGRlclxuICAgKi9cbiAgZ2FzQnVkZ2V0KGdhc0J1ZGdldDogRmVlRGF0YSk6IHRoaXMge1xuICAgIHV0aWxzLnZhbGlkYXRlR2FzQnVkZ2V0KGdhc0J1ZGdldCk7XG4gICAgdGhpcy5fZ2FzQnVkZ2V0ID0gZ2FzQnVkZ2V0O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgc2VxdWVuY2Ugb2YgdGhpcyB0cmFuc2FjdGlvbi5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHNlcXVlbmNlIC0gc2VxdWVuY2UgZGF0YSBmb3IgdHggc2lnbmVyXG4gICAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbkJ1aWxkZXJ9IFRoaXMgdHJhbnNhY3Rpb24gYnVpbGRlclxuICAgKi9cbiAgc2VxdWVuY2Uoc2VxdWVuY2U6IG51bWJlcik6IHRoaXMge1xuICAgIHV0aWxzLnZhbGlkYXRlU2VxdWVuY2Uoc2VxdWVuY2UpO1xuICAgIHRoaXMuX3NlcXVlbmNlID0gc2VxdWVuY2U7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBtZXNzYWdlcyB0byB0aGUgdHJhbnNhY3Rpb24gYm9keS4gTWVzc2FnZSB0eXBlIHdpbGwgYmUgZGlmZmVyZW50IGJhc2VkIG9uIHRoZSB0cmFuc2FjdGlvbiB0eXBlXG4gICAqIC0gRm9yIEBzZWUgVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdBY3RpdmF0ZSByZXF1aXJlZCB0eXBlIGlzIEBzZWUgRGVsZWdhdGVPclVuZGVsZWdldGVNZXNzYWdlXG4gICAqIC0gRm9yIEBzZWUgVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdEZWFjdGl2YXRlIHJlcXVpcmVkIHR5cGUgaXMgQHNlZSBEZWxlZ2F0ZU9yVW5kZWxlZ2V0ZU1lc3NhZ2VcbiAgICogLSBGb3IgQHNlZSBUcmFuc2FjdGlvblR5cGUuU2VuZCByZXF1aXJlZCB0eXBlIGlzIEBzZWUgU2VuZE1lc3NhZ2VcbiAgICogLSBGb3IgQHNlZSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ1dpdGhkcmF3IHJlcXVpcmVkIHR5cGUgaXMgQHNlZSBXaXRoZHJhd0RlbGVnYXRvclJld2FyZHNNZXNzYWdlXG4gICAqIEBwYXJhbSB7KFNlbmRNZXNzYWdlIHwgRGVsZWdhdGVPclVuZGVsZWdldGVNZXNzYWdlIHwgV2l0aGRyYXdEZWxlZ2F0b3JSZXdhcmRzTWVzc2FnZSlbXX0gbWVzc2FnZXNcbiAgICogQHJldHVybnMge1RyYW5zYWN0aW9uQnVpbGRlcn0gVGhpcyB0cmFuc2FjdGlvbiBidWlsZGVyXG4gICAqL1xuICBhYnN0cmFjdCBtZXNzYWdlcyhtZXNzYWdlczogKFNlbmRNZXNzYWdlIHwgRGVsZWdhdGVPclVuZGVsZWdldGVNZXNzYWdlIHwgV2l0aGRyYXdEZWxlZ2F0b3JSZXdhcmRzTWVzc2FnZSlbXSk6IHRoaXM7XG5cbiAgcHVibGljS2V5KHB1YmxpY0tleTogc3RyaW5nIHwgdW5kZWZpbmVkKTogdGhpcyB7XG4gICAgdGhpcy5fcHVibGljS2V5ID0gcHVibGljS2V5O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgYWNjb3VudE51bWJlcihhY2NvdW50TnVtYmVyOiBudW1iZXIgfCB1bmRlZmluZWQpOiB0aGlzIHtcbiAgICB0aGlzLl9hY2NvdW50TnVtYmVyID0gYWNjb3VudE51bWJlcjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGNoYWluSWQoY2hhaW5JZDogc3RyaW5nIHwgdW5kZWZpbmVkKTogdGhpcyB7XG4gICAgdGhpcy5fY2hhaW5JZCA9IGNoYWluSWQ7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBtZW1vKG1lbW86IHN0cmluZyB8IHVuZGVmaW5lZCk6IHRoaXMge1xuICAgIHRoaXMuX21lbW8gPSBtZW1vO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgdGhlIHRyYW5zYWN0aW9uIGJ1aWxkZXIgZmllbGRzIHVzaW5nIHRoZSBkZWNvZGVkIHRyYW5zYWN0aW9uIGRhdGFcbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvbn0gdHggdGhlIHRyYW5zYWN0aW9uIGRhdGFcbiAgICovXG4gIGluaXRCdWlsZGVyKHR4OiBUcmFuc2FjdGlvbik6IHZvaWQge1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uID0gdHg7XG4gICAgY29uc3QgdHhEYXRhID0gdHgudG9Kc29uKCk7XG4gICAgdGhpcy5nYXNCdWRnZXQodHhEYXRhLmdhc0J1ZGdldCk7XG4gICAgdGhpcy5tZXNzYWdlcyhcbiAgICAgIHR4RGF0YS5zZW5kTWVzc2FnZXMubWFwKChtZXNzYWdlKSA9PiB7XG4gICAgICAgIHJldHVybiBtZXNzYWdlLnZhbHVlO1xuICAgICAgfSlcbiAgICApO1xuICAgIHRoaXMuc2VxdWVuY2UodHhEYXRhLnNlcXVlbmNlKTtcbiAgICB0aGlzLnB1YmxpY0tleSh0eERhdGEucHVibGljS2V5KTtcbiAgICB0aGlzLmFjY291bnROdW1iZXIodHhEYXRhLmFjY291bnROdW1iZXIpO1xuICAgIHRoaXMuY2hhaW5JZCh0eERhdGEuY2hhaW5JZCk7XG4gICAgdGhpcy5tZW1vKHR4RGF0YS5tZW1vKTtcbiAgICBpZiAodHguc2lnbmF0dXJlICYmIHR4LnNpZ25hdHVyZS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmFkZFNpZ25hdHVyZSh7IHB1YjogdHhEYXRhLnB1YmxpY0tleSB9IGFzIGFueSwgQnVmZmVyLmZyb20odHguc2lnbmF0dXJlWzBdLCAnaGV4JykpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgZnJvbUltcGxlbWVudGF0aW9uKHJhd1RyYW5zYWN0aW9uOiBzdHJpbmcpOiBUcmFuc2FjdGlvbiB7XG4gICAgY29uc3QgdHggPSBuZXcgVHJhbnNhY3Rpb24odGhpcy5fY29pbkNvbmZpZyk7XG4gICAgdHguZW5yaWNoVHJhbnNhY3Rpb25EZXRhaWxzRnJvbVJhd1RyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uKTtcbiAgICB0aGlzLmluaXRCdWlsZGVyKHR4KTtcbiAgICByZXR1cm4gdGhpcy50cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgYnVpbGRJbXBsZW1lbnRhdGlvbigpOiBQcm9taXNlPFRyYW5zYWN0aW9uPiB7XG4gICAgdGhpcy50cmFuc2FjdGlvbi50cmFuc2FjdGlvblR5cGUgPSB0aGlzLnRyYW5zYWN0aW9uVHlwZTtcbiAgICBpZiAodGhpcy5fYWNjb3VudE51bWJlcikge1xuICAgICAgdGhpcy50cmFuc2FjdGlvbi5hY2NvdW50TnVtYmVyID0gdGhpcy5fYWNjb3VudE51bWJlcjtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2NoYWluSWQpIHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb24uY2hhaW5JZCA9IHRoaXMuX2NoYWluSWQ7XG4gICAgfVxuICAgIHRoaXMudHJhbnNhY3Rpb24uYXRvbVRyYW5zYWN0aW9uID0gdXRpbHMuY3JlYXRlQXRvbVRyYW5zYWN0aW9uKFxuICAgICAgdGhpcy5fc2VxdWVuY2UsXG4gICAgICB0aGlzLl9tZXNzYWdlcyxcbiAgICAgIHRoaXMuX2dhc0J1ZGdldCxcbiAgICAgIHRoaXMuX3B1YmxpY0tleSxcbiAgICAgIHRoaXMuX21lbW9cbiAgICApO1xuXG4gICAgY29uc3QgcHJpdmF0ZUtleSA9IHRoaXMuX3NpZ25lcj8uZ2V0UHJpdmF0ZUtleSgpO1xuICAgIGlmIChwcml2YXRlS2V5ICE9PSB1bmRlZmluZWQgJiYgdGhpcy50cmFuc2FjdGlvbi5hdG9tVHJhbnNhY3Rpb24ucHVibGljS2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHNpZ25Eb2MgPSB1dGlscy5jcmVhdGVTaWduRG9jKHRoaXMudHJhbnNhY3Rpb24uYXRvbVRyYW5zYWN0aW9uLCB0aGlzLl9hY2NvdW50TnVtYmVyLCB0aGlzLl9jaGFpbklkKTtcbiAgICAgIGNvbnN0IHR4bkhhc2ggPSBzaGEyNTYobWFrZVNpZ25CeXRlcyhzaWduRG9jKSk7XG4gICAgICBjb25zdCBzaWduYXR1cmUgPSBhd2FpdCBTZWNwMjU2azEuY3JlYXRlU2lnbmF0dXJlKHR4bkhhc2gsIHByaXZhdGVLZXkpO1xuICAgICAgY29uc3QgY29tcHJlc3NlZFNpZyA9IEJ1ZmZlci5jb25jYXQoW3NpZ25hdHVyZS5yKCksIHNpZ25hdHVyZS5zKCldKTtcbiAgICAgIHRoaXMuYWRkU2lnbmF0dXJlKHsgcHViOiB0aGlzLnRyYW5zYWN0aW9uLmF0b21UcmFuc2FjdGlvbi5wdWJsaWNLZXkgfSwgY29tcHJlc3NlZFNpZyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3NpZ25hdHVyZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uLmFkZFNpZ25hdHVyZSh0aGlzLl9zaWduYXR1cmUudG9TdHJpbmcoJ2hleCcpKTtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb24uYXRvbVRyYW5zYWN0aW9uID0gdXRpbHMuY3JlYXRlQXRvbVRyYW5zYWN0aW9uV2l0aEhhc2goXG4gICAgICAgIHRoaXMuX3NlcXVlbmNlLFxuICAgICAgICB0aGlzLl9tZXNzYWdlcyxcbiAgICAgICAgdGhpcy5fZ2FzQnVkZ2V0LFxuICAgICAgICB0aGlzLl9wdWJsaWNLZXksXG4gICAgICAgIHRoaXMuX3NpZ25hdHVyZSxcbiAgICAgICAgdGhpcy5fbWVtb1xuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy50cmFuc2FjdGlvbi5sb2FkSW5wdXRzQW5kT3V0cHV0cygpO1xuICAgIHJldHVybiB0aGlzLnRyYW5zYWN0aW9uO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBzaWduSW1wbGVtZW50YXRpb24oa2V5OiBCYXNlS2V5KTogVHJhbnNhY3Rpb24ge1xuICAgIHRoaXMudmFsaWRhdGVLZXkoa2V5KTtcbiAgICBpZiAodGhpcy5fYWNjb3VudE51bWJlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgU2lnbmluZ0Vycm9yKCdhY2NvdW50TnVtYmVyIGlzIHJlcXVpcmVkIGJlZm9yZSBzaWduaW5nJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLl9jaGFpbklkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBTaWduaW5nRXJyb3IoJ2NoYWluSWQgaXMgcmVxdWlyZWQgYmVmb3JlIHNpZ25pbmcnKTtcbiAgICB9XG4gICAgdGhpcy5fc2lnbmVyID0gbmV3IEtleVBhaXIoeyBwcnY6IGtleS5rZXkgfSk7XG4gICAgdGhpcy5fcHVibGljS2V5ID0gdGhpcy5fc2lnbmVyLmdldEtleXMoKS5wdWI7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNhY3Rpb247XG4gIH1cblxuICB2YWxpZGF0ZUFkZHJlc3MoYWRkcmVzczogQmFzZUFkZHJlc3MsIGFkZHJlc3NGb3JtYXQ/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoISh1dGlscy5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzLmFkZHJlc3MpIHx8IHV0aWxzLmlzVmFsaWRWYWxpZGF0b3JBZGRyZXNzKGFkZHJlc3MuYWRkcmVzcykpKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCd0cmFuc2FjdGlvbkJ1aWxkZXI6IGFkZHJlc3MgaXNWYWxpZEFkZHJlc3MgY2hlY2sgZmFpbGVkOiAnICsgYWRkcmVzcy5hZGRyZXNzKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVWYWx1ZSh2YWx1ZTogQmlnTnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHZhbHVlLmlzTGVzc1RoYW4oMCkpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ1ZhbHVlIGNhbm5vdCBiZSBsZXNzIHRoYW4gemVybycpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZUtleShrZXk6IEJhc2VLZXkpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgbmV3IEtleVBhaXIoeyBwcnY6IGtleS5rZXkgfSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKGBLZXkgdmFsaWRhdGlvbiBmYWlsZWRgKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVSYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCFyYXdUcmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIHJhdyB0cmFuc2FjdGlvbjogVW5kZWZpbmVkIHJhd1RyYW5zYWN0aW9uJyk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIHJhdyB0cmFuc2FjdGlvbjogJyArIGUubWVzc2FnZSk7XG4gICAgfVxuICAgIGNvbnN0IGF0b21UcmFuc2FjdGlvbiA9IHV0aWxzLmRlc2VyaWFsaXplQXRvbVRyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uKTtcbiAgICB1dGlscy52YWxpZGF0ZUF0b21UcmFuc2FjdGlvbihhdG9tVHJhbnNhY3Rpb24pO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlVHJhbnNhY3Rpb24odHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uKTogdm9pZCB7XG4gICAgdXRpbHMudmFsaWRhdGVBdG9tVHJhbnNhY3Rpb24oe1xuICAgICAgc2VxdWVuY2U6IHRoaXMuX3NlcXVlbmNlLFxuICAgICAgc2VuZE1lc3NhZ2VzOiB0aGlzLl9tZXNzYWdlcyxcbiAgICAgIGdhc0J1ZGdldDogdGhpcy5fZ2FzQnVkZ2V0LFxuICAgICAgcHVibGljS2V5OiB0aGlzLl9wdWJsaWNLZXksXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
@@ -3,6 +3,9 @@ import { TransactionBuilder } from './transactionBuilder';
3
3
  import { TransferBuilder } from './transferBuilder';
4
4
  import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
5
5
  import { Transaction } from './transaction';
6
+ import { StakingActivateBuilder } from './StakingActivateBuilder';
7
+ import { StakingDeactivateBuilder } from './StakingDeactivateBuilder';
8
+ import { StakingWithdrawRewardsBuilder } from './StakingWithdrawRewardsBuilder';
6
9
  export declare class TransactionBuilderFactory extends BaseTransactionBuilderFactory {
7
10
  constructor(_coinConfig: Readonly<CoinConfig>);
8
11
  /** @inheritdoc */
@@ -10,6 +13,12 @@ export declare class TransactionBuilderFactory extends BaseTransactionBuilderFac
10
13
  /** @inheritdoc */
11
14
  getTransferBuilder(tx?: Transaction): TransferBuilder;
12
15
  /** @inheritdoc */
16
+ getStakingActivateBuilder(tx?: Transaction): StakingActivateBuilder;
17
+ /** @inheritdoc */
18
+ getStakingDeactivateBuilder(tx?: Transaction): StakingDeactivateBuilder;
19
+ /** @inheritdoc */
20
+ getStakingWithdrawRewardsBuilder(tx?: Transaction): StakingWithdrawRewardsBuilder;
21
+ /** @inheritdoc */
13
22
  getWalletInitializationBuilder(): void;
14
23
  /**
15
24
  * Initialize the builder with the given transaction
@@ -19,11 +28,5 @@ export declare class TransactionBuilderFactory extends BaseTransactionBuilderFac
19
28
  * @returns {TransactionBuilder} the builder initialized
20
29
  */
21
30
  private initializeBuilder;
22
- /** Parse the transaction from a raw transaction
23
- *
24
- * @param {string} rawTransaction - the raw tx
25
- * @returns {Transaction} parsedtransaction
26
- */
27
- private parseTransaction;
28
31
  }
29
32
  //# sourceMappingURL=transactionBuilderFactory.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"transactionBuilderFactory.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilderFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,EAA4C,MAAM,sBAAsB,CAAC;AAC/G,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,qBAAa,yBAA0B,SAAQ,6BAA6B;gBAC9D,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI7C,kBAAkB;IAClB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,kBAAkB;IAcrC,kBAAkB;IAClB,kBAAkB,CAAC,EAAE,CAAC,EAAE,WAAW,GAAG,eAAe;IAIrD,kBAAkB;IAClB,8BAA8B,IAAI,IAAI;IAItC;;;;;;OAMG;IACH,OAAO,CAAC,iBAAiB;IAOzB;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;CAKzB"}
1
+ {"version":3,"file":"transactionBuilderFactory.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilderFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,EAA4C,MAAM,sBAAsB,CAAC;AAC/G,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,6BAA6B,EAAE,MAAM,iCAAiC,CAAC;AAEhF,qBAAa,yBAA0B,SAAQ,6BAA6B;gBAC9D,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI7C,kBAAkB;IAClB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,kBAAkB;IAqBrC,kBAAkB;IAClB,kBAAkB,CAAC,EAAE,CAAC,EAAE,WAAW,GAAG,eAAe;IAGrD,kBAAkB;IAClB,yBAAyB,CAAC,EAAE,CAAC,EAAE,WAAW,GAAG,sBAAsB;IAGnE,kBAAkB;IAClB,2BAA2B,CAAC,EAAE,CAAC,EAAE,WAAW,GAAG,wBAAwB;IAGvE,kBAAkB;IAClB,gCAAgC,CAAC,EAAE,CAAC,EAAE,WAAW,GAAG,6BAA6B;IAGjF,kBAAkB;IAClB,8BAA8B,IAAI,IAAI;IAItC;;;;;;OAMG;IACH,OAAO,CAAC,iBAAiB;CAM1B"}
@@ -4,23 +4,33 @@ exports.TransactionBuilderFactory = void 0;
4
4
  const sdk_core_1 = require("@bitgo-beta/sdk-core");
5
5
  const transferBuilder_1 = require("./transferBuilder");
6
6
  const transaction_1 = require("./transaction");
7
+ const StakingActivateBuilder_1 = require("./StakingActivateBuilder");
8
+ const StakingDeactivateBuilder_1 = require("./StakingDeactivateBuilder");
9
+ const StakingWithdrawRewardsBuilder_1 = require("./StakingWithdrawRewardsBuilder");
7
10
  class TransactionBuilderFactory extends sdk_core_1.BaseTransactionBuilderFactory {
8
11
  constructor(_coinConfig) {
9
12
  super(_coinConfig);
10
13
  }
11
14
  /** @inheritdoc */
12
15
  from(raw) {
13
- const tx = this.parseTransaction(raw);
16
+ const tx = new transaction_1.Transaction(this._coinConfig);
17
+ tx.enrichTransactionDetailsFromRawTransaction(raw);
14
18
  try {
15
19
  switch (tx.type) {
16
20
  case sdk_core_1.TransactionType.Send:
17
21
  return this.getTransferBuilder(tx);
22
+ case sdk_core_1.TransactionType.StakingActivate:
23
+ return this.getStakingActivateBuilder(tx);
24
+ case sdk_core_1.TransactionType.StakingDeactivate:
25
+ return this.getStakingDeactivateBuilder(tx);
26
+ case sdk_core_1.TransactionType.StakingWithdraw:
27
+ return this.getStakingWithdrawRewardsBuilder(tx);
18
28
  default:
19
29
  throw new sdk_core_1.InvalidTransactionError('Invalid transaction');
20
30
  }
21
31
  }
22
32
  catch (e) {
23
- throw e;
33
+ throw new sdk_core_1.InvalidTransactionError('Invalid transaction: ' + e.message);
24
34
  }
25
35
  }
26
36
  /** @inheritdoc */
@@ -28,6 +38,18 @@ class TransactionBuilderFactory extends sdk_core_1.BaseTransactionBuilderFactory
28
38
  return this.initializeBuilder(tx, new transferBuilder_1.TransferBuilder(this._coinConfig));
29
39
  }
30
40
  /** @inheritdoc */
41
+ getStakingActivateBuilder(tx) {
42
+ return this.initializeBuilder(tx, new StakingActivateBuilder_1.StakingActivateBuilder(this._coinConfig));
43
+ }
44
+ /** @inheritdoc */
45
+ getStakingDeactivateBuilder(tx) {
46
+ return this.initializeBuilder(tx, new StakingDeactivateBuilder_1.StakingDeactivateBuilder(this._coinConfig));
47
+ }
48
+ /** @inheritdoc */
49
+ getStakingWithdrawRewardsBuilder(tx) {
50
+ return this.initializeBuilder(tx, new StakingWithdrawRewardsBuilder_1.StakingWithdrawRewardsBuilder(this._coinConfig));
51
+ }
52
+ /** @inheritdoc */
31
53
  getWalletInitializationBuilder() {
32
54
  throw new Error('Method not implemented.');
33
55
  }
@@ -44,16 +66,6 @@ class TransactionBuilderFactory extends sdk_core_1.BaseTransactionBuilderFactory
44
66
  }
45
67
  return builder;
46
68
  }
47
- /** Parse the transaction from a raw transaction
48
- *
49
- * @param {string} rawTransaction - the raw tx
50
- * @returns {Transaction} parsedtransaction
51
- */
52
- parseTransaction(rawTransaction) {
53
- const tx = new transaction_1.Transaction(this._coinConfig);
54
- tx.fromRawTransaction(rawTransaction);
55
- return tx;
56
- }
57
69
  }
58
70
  exports.TransactionBuilderFactory = TransactionBuilderFactory;
59
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvdHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtREFBK0c7QUFFL0csdURBQW9EO0FBRXBELCtDQUE0QztBQUU1QyxNQUFhLHlCQUEwQixTQUFRLHdDQUE2QjtJQUMxRSxZQUFZLFdBQWlDO1FBQzNDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLElBQUksQ0FBQyxHQUFXO1FBQ2QsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3RDLElBQUk7WUFDRixRQUFRLEVBQUUsQ0FBQyxJQUFJLEVBQUU7Z0JBQ2YsS0FBSywwQkFBZSxDQUFDLElBQUk7b0JBQ3ZCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNyQztvQkFDRSxNQUFNLElBQUksa0NBQXVCLENBQUMscUJBQXFCLENBQUMsQ0FBQzthQUM1RDtTQUNGO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDVixNQUFNLENBQUMsQ0FBQztTQUNUO0lBQ0gsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixrQkFBa0IsQ0FBQyxFQUFnQjtRQUNqQyxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLEVBQUUsSUFBSSxpQ0FBZSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsOEJBQThCO1FBQzVCLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ssaUJBQWlCLENBQStCLEVBQTJCLEVBQUUsT0FBVTtRQUM3RixJQUFJLEVBQUUsRUFBRTtZQUNOLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDekI7UUFDRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLGdCQUFnQixDQUFDLGNBQXNCO1FBQzdDLE1BQU0sRUFBRSxHQUFHLElBQUkseUJBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDN0MsRUFBRSxDQUFDLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3RDLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztDQUNGO0FBdERELDhEQXNEQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5LCBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvciwgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi90cmFuc2FjdGlvbkJ1aWxkZXInO1xuaW1wb3J0IHsgVHJhbnNmZXJCdWlsZGVyIH0gZnJvbSAnLi90cmFuc2ZlckJ1aWxkZXInO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tICcuL3RyYW5zYWN0aW9uJztcblxuZXhwb3J0IGNsYXNzIFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkgZXh0ZW5kcyBCYXNlVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSB7XG4gIGNvbnN0cnVjdG9yKF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKF9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBmcm9tKHJhdzogc3RyaW5nKTogVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgICBjb25zdCB0eCA9IHRoaXMucGFyc2VUcmFuc2FjdGlvbihyYXcpO1xuICAgIHRyeSB7XG4gICAgICBzd2l0Y2ggKHR4LnR5cGUpIHtcbiAgICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuU2VuZDpcbiAgICAgICAgICByZXR1cm4gdGhpcy5nZXRUcmFuc2ZlckJ1aWxkZXIodHgpO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCB0cmFuc2FjdGlvbicpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGdldFRyYW5zZmVyQnVpbGRlcih0eD86IFRyYW5zYWN0aW9uKTogVHJhbnNmZXJCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5pbml0aWFsaXplQnVpbGRlcih0eCwgbmV3IFRyYW5zZmVyQnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKSk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgZ2V0V2FsbGV0SW5pdGlhbGl6YXRpb25CdWlsZGVyKCk6IHZvaWQge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIHRoZSBidWlsZGVyIHdpdGggdGhlIGdpdmVuIHRyYW5zYWN0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb24gfCB1bmRlZmluZWR9IHR4IC0gdGhlIHRyYW5zYWN0aW9uIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgYnVpbGRlclxuICAgKiBAcGFyYW0ge1RyYW5zYWN0aW9uQnVpbGRlcn0gYnVpbGRlciAtIHRoZSBidWlsZGVyIHRvIGJlIGluaXRpYWxpemVkXG4gICAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbkJ1aWxkZXJ9IHRoZSBidWlsZGVyIGluaXRpYWxpemVkXG4gICAqL1xuICBwcml2YXRlIGluaXRpYWxpemVCdWlsZGVyPFQgZXh0ZW5kcyBUcmFuc2FjdGlvbkJ1aWxkZXI+KHR4OiBUcmFuc2FjdGlvbiB8IHVuZGVmaW5lZCwgYnVpbGRlcjogVCk6IFQge1xuICAgIGlmICh0eCkge1xuICAgICAgYnVpbGRlci5pbml0QnVpbGRlcih0eCk7XG4gICAgfVxuICAgIHJldHVybiBidWlsZGVyO1xuICB9XG5cbiAgLyoqIFBhcnNlIHRoZSB0cmFuc2FjdGlvbiBmcm9tIGEgcmF3IHRyYW5zYWN0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByYXdUcmFuc2FjdGlvbiAtIHRoZSByYXcgdHhcbiAgICogQHJldHVybnMge1RyYW5zYWN0aW9ufSBwYXJzZWR0cmFuc2FjdGlvblxuICAgKi9cbiAgcHJpdmF0ZSBwYXJzZVRyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uOiBzdHJpbmcpOiBUcmFuc2FjdGlvbiB7XG4gICAgY29uc3QgdHggPSBuZXcgVHJhbnNhY3Rpb24odGhpcy5fY29pbkNvbmZpZyk7XG4gICAgdHguZnJvbVJhd1RyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uKTtcbiAgICByZXR1cm4gdHg7XG4gIH1cbn1cbiJdfQ==
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvdHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtREFBK0c7QUFFL0csdURBQW9EO0FBRXBELCtDQUE0QztBQUM1QyxxRUFBa0U7QUFDbEUseUVBQXNFO0FBQ3RFLG1GQUFnRjtBQUVoRixNQUFhLHlCQUEwQixTQUFRLHdDQUE2QjtJQUMxRSxZQUFZLFdBQWlDO1FBQzNDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLElBQUksQ0FBQyxHQUFXO1FBQ2QsTUFBTSxFQUFFLEdBQUcsSUFBSSx5QkFBVyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM3QyxFQUFFLENBQUMsMENBQTBDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbkQsSUFBSTtZQUNGLFFBQVEsRUFBRSxDQUFDLElBQUksRUFBRTtnQkFDZixLQUFLLDBCQUFlLENBQUMsSUFBSTtvQkFDdkIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ3JDLEtBQUssMEJBQWUsQ0FBQyxlQUFlO29CQUNsQyxPQUFPLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDNUMsS0FBSywwQkFBZSxDQUFDLGlCQUFpQjtvQkFDcEMsT0FBTyxJQUFJLENBQUMsMkJBQTJCLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQzlDLEtBQUssMEJBQWUsQ0FBQyxlQUFlO29CQUNsQyxPQUFPLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDbkQ7b0JBQ0UsTUFBTSxJQUFJLGtDQUF1QixDQUFDLHFCQUFxQixDQUFDLENBQUM7YUFDNUQ7U0FDRjtRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1YsTUFBTSxJQUFJLGtDQUF1QixDQUFDLHVCQUF1QixHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUN4RTtJQUNILENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsa0JBQWtCLENBQUMsRUFBZ0I7UUFDakMsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFBRSxFQUFFLElBQUksaUNBQWUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBQ0Qsa0JBQWtCO0lBQ2xCLHlCQUF5QixDQUFDLEVBQWdCO1FBQ3hDLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsRUFBRSxJQUFJLCtDQUFzQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQ2xGLENBQUM7SUFDRCxrQkFBa0I7SUFDbEIsMkJBQTJCLENBQUMsRUFBZ0I7UUFDMUMsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFBRSxFQUFFLElBQUksbURBQXdCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDcEYsQ0FBQztJQUNELGtCQUFrQjtJQUNsQixnQ0FBZ0MsQ0FBQyxFQUFnQjtRQUMvQyxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLEVBQUUsSUFBSSw2REFBNkIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUN6RixDQUFDO0lBQ0Qsa0JBQWtCO0lBQ2xCLDhCQUE4QjtRQUM1QixNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNLLGlCQUFpQixDQUErQixFQUEyQixFQUFFLE9BQVU7UUFDN0YsSUFBSSxFQUFFLEVBQUU7WUFDTixPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ3pCO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztDQUNGO0FBN0RELDhEQTZEQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5LCBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvciwgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi90cmFuc2FjdGlvbkJ1aWxkZXInO1xuaW1wb3J0IHsgVHJhbnNmZXJCdWlsZGVyIH0gZnJvbSAnLi90cmFuc2ZlckJ1aWxkZXInO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tICcuL3RyYW5zYWN0aW9uJztcbmltcG9ydCB7IFN0YWtpbmdBY3RpdmF0ZUJ1aWxkZXIgfSBmcm9tICcuL1N0YWtpbmdBY3RpdmF0ZUJ1aWxkZXInO1xuaW1wb3J0IHsgU3Rha2luZ0RlYWN0aXZhdGVCdWlsZGVyIH0gZnJvbSAnLi9TdGFraW5nRGVhY3RpdmF0ZUJ1aWxkZXInO1xuaW1wb3J0IHsgU3Rha2luZ1dpdGhkcmF3UmV3YXJkc0J1aWxkZXIgfSBmcm9tICcuL1N0YWtpbmdXaXRoZHJhd1Jld2FyZHNCdWlsZGVyJztcblxuZXhwb3J0IGNsYXNzIFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkgZXh0ZW5kcyBCYXNlVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSB7XG4gIGNvbnN0cnVjdG9yKF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKF9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBmcm9tKHJhdzogc3RyaW5nKTogVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgICBjb25zdCB0eCA9IG5ldyBUcmFuc2FjdGlvbih0aGlzLl9jb2luQ29uZmlnKTtcbiAgICB0eC5lbnJpY2hUcmFuc2FjdGlvbkRldGFpbHNGcm9tUmF3VHJhbnNhY3Rpb24ocmF3KTtcbiAgICB0cnkge1xuICAgICAgc3dpdGNoICh0eC50eXBlKSB7XG4gICAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlNlbmQ6XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHJhbnNmZXJCdWlsZGVyKHR4KTtcbiAgICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0FjdGl2YXRlOlxuICAgICAgICAgIHJldHVybiB0aGlzLmdldFN0YWtpbmdBY3RpdmF0ZUJ1aWxkZXIodHgpO1xuICAgICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nRGVhY3RpdmF0ZTpcbiAgICAgICAgICByZXR1cm4gdGhpcy5nZXRTdGFraW5nRGVhY3RpdmF0ZUJ1aWxkZXIodHgpO1xuICAgICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nV2l0aGRyYXc6XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U3Rha2luZ1dpdGhkcmF3UmV3YXJkc0J1aWxkZXIodHgpO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCB0cmFuc2FjdGlvbicpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCB0cmFuc2FjdGlvbjogJyArIGUubWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGdldFRyYW5zZmVyQnVpbGRlcih0eD86IFRyYW5zYWN0aW9uKTogVHJhbnNmZXJCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5pbml0aWFsaXplQnVpbGRlcih0eCwgbmV3IFRyYW5zZmVyQnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKSk7XG4gIH1cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGdldFN0YWtpbmdBY3RpdmF0ZUJ1aWxkZXIodHg/OiBUcmFuc2FjdGlvbik6IFN0YWtpbmdBY3RpdmF0ZUJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLmluaXRpYWxpemVCdWlsZGVyKHR4LCBuZXcgU3Rha2luZ0FjdGl2YXRlQnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKSk7XG4gIH1cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGdldFN0YWtpbmdEZWFjdGl2YXRlQnVpbGRlcih0eD86IFRyYW5zYWN0aW9uKTogU3Rha2luZ0RlYWN0aXZhdGVCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5pbml0aWFsaXplQnVpbGRlcih0eCwgbmV3IFN0YWtpbmdEZWFjdGl2YXRlQnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKSk7XG4gIH1cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGdldFN0YWtpbmdXaXRoZHJhd1Jld2FyZHNCdWlsZGVyKHR4PzogVHJhbnNhY3Rpb24pOiBTdGFraW5nV2l0aGRyYXdSZXdhcmRzQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuaW5pdGlhbGl6ZUJ1aWxkZXIodHgsIG5ldyBTdGFraW5nV2l0aGRyYXdSZXdhcmRzQnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKSk7XG4gIH1cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGdldFdhbGxldEluaXRpYWxpemF0aW9uQnVpbGRlcigpOiB2b2lkIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSB0aGUgYnVpbGRlciB3aXRoIHRoZSBnaXZlbiB0cmFuc2FjdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge1RyYW5zYWN0aW9uIHwgdW5kZWZpbmVkfSB0eCAtIHRoZSB0cmFuc2FjdGlvbiB1c2VkIHRvIGluaXRpYWxpemUgdGhlIGJ1aWxkZXJcbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvbkJ1aWxkZXJ9IGJ1aWxkZXIgLSB0aGUgYnVpbGRlciB0byBiZSBpbml0aWFsaXplZFxuICAgKiBAcmV0dXJucyB7VHJhbnNhY3Rpb25CdWlsZGVyfSB0aGUgYnVpbGRlciBpbml0aWFsaXplZFxuICAgKi9cbiAgcHJpdmF0ZSBpbml0aWFsaXplQnVpbGRlcjxUIGV4dGVuZHMgVHJhbnNhY3Rpb25CdWlsZGVyPih0eDogVHJhbnNhY3Rpb24gfCB1bmRlZmluZWQsIGJ1aWxkZXI6IFQpOiBUIHtcbiAgICBpZiAodHgpIHtcbiAgICAgIGJ1aWxkZXIuaW5pdEJ1aWxkZXIodHgpO1xuICAgIH1cbiAgICByZXR1cm4gYnVpbGRlcjtcbiAgfVxufVxuIl19
@@ -1,8 +1,11 @@
1
- import { TransactionBuilder } from './transactionBuilder';
2
- import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
3
1
  import { TransactionType } from '@bitgo-beta/sdk-core';
2
+ import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
3
+ import { SendMessage } from './iface';
4
+ import { TransactionBuilder } from './transactionBuilder';
4
5
  export declare class TransferBuilder extends TransactionBuilder {
5
6
  constructor(_coinConfig: Readonly<CoinConfig>);
6
7
  protected get transactionType(): TransactionType;
8
+ /** @inheritdoc */
9
+ messages(sendMessages: SendMessage[]): this;
7
10
  }
8
11
  //# sourceMappingURL=transferBuilder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"transferBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/transferBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,qBAAa,eAAgB,SAAQ,kBAAkB;gBACzC,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI7C,SAAS,KAAK,eAAe,IAAI,eAAe,CAE/C;CACF"}
1
+ {"version":3,"file":"transferBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/transferBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAG7D,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAG1D,qBAAa,eAAgB,SAAQ,kBAAkB;gBACzC,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI7C,SAAS,KAAK,eAAe,IAAI,eAAe,CAE/C;IAED,kBAAkB;IAClB,QAAQ,CAAC,YAAY,EAAE,WAAW,EAAE,GAAG,IAAI;CAU5C"}
@@ -1,8 +1,13 @@
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.TransferBuilder = void 0;
4
- const transactionBuilder_1 = require("./transactionBuilder");
5
7
  const sdk_core_1 = require("@bitgo-beta/sdk-core");
8
+ const constants_1 = require("./constants");
9
+ const transactionBuilder_1 = require("./transactionBuilder");
10
+ const utils_1 = __importDefault(require("./utils"));
6
11
  class TransferBuilder extends transactionBuilder_1.TransactionBuilder {
7
12
  constructor(_coinConfig) {
8
13
  super(_coinConfig);
@@ -10,6 +15,17 @@ class TransferBuilder extends transactionBuilder_1.TransactionBuilder {
10
15
  get transactionType() {
11
16
  return sdk_core_1.TransactionType.Send;
12
17
  }
18
+ /** @inheritdoc */
19
+ messages(sendMessages) {
20
+ this._messages = sendMessages.map((sendMessage) => {
21
+ utils_1.default.validateSendMessage(sendMessage);
22
+ return {
23
+ typeUrl: constants_1.sendMsgTypeUrl,
24
+ value: sendMessage,
25
+ };
26
+ });
27
+ return this;
28
+ }
13
29
  }
14
30
  exports.TransferBuilder = TransferBuilder;
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmZXJCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90cmFuc2ZlckJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkRBQTBEO0FBRTFELG1EQUF1RDtBQUV2RCxNQUFhLGVBQWdCLFNBQVEsdUNBQWtCO0lBQ3JELFlBQVksV0FBaUM7UUFDM0MsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxJQUFjLGVBQWU7UUFDM0IsT0FBTywwQkFBZSxDQUFDLElBQUksQ0FBQztJQUM5QixDQUFDO0NBQ0Y7QUFSRCwwQ0FRQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vdHJhbnNhY3Rpb25CdWlsZGVyJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcblxuZXhwb3J0IGNsYXNzIFRyYW5zZmVyQnVpbGRlciBleHRlbmRzIFRyYW5zYWN0aW9uQnVpbGRlciB7XG4gIGNvbnN0cnVjdG9yKF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKF9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgdHJhbnNhY3Rpb25UeXBlKCk6IFRyYW5zYWN0aW9uVHlwZSB7XG4gICAgcmV0dXJuIFRyYW5zYWN0aW9uVHlwZS5TZW5kO1xuICB9XG59XG4iXX0=
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmZXJCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90cmFuc2ZlckJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsbURBQXVEO0FBR3ZELDJDQUE2QztBQUU3Qyw2REFBMEQ7QUFDMUQsb0RBQTRCO0FBRTVCLE1BQWEsZUFBZ0IsU0FBUSx1Q0FBa0I7SUFDckQsWUFBWSxXQUFpQztRQUMzQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDckIsQ0FBQztJQUVELElBQWMsZUFBZTtRQUMzQixPQUFPLDBCQUFlLENBQUMsSUFBSSxDQUFDO0lBQzlCLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsUUFBUSxDQUFDLFlBQTJCO1FBQ2xDLElBQUksQ0FBQyxTQUFTLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFO1lBQ2hELGVBQUssQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUN2QyxPQUFPO2dCQUNMLE9BQU8sRUFBRSwwQkFBYztnQkFDdkIsS0FBSyxFQUFFLFdBQVc7YUFDbkIsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0NBQ0Y7QUFwQkQsMENBb0JDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuXG5pbXBvcnQgeyBzZW5kTXNnVHlwZVVybCB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IFNlbmRNZXNzYWdlIH0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkJ1aWxkZXIgfSBmcm9tICcuL3RyYW5zYWN0aW9uQnVpbGRlcic7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi91dGlscyc7XG5cbmV4cG9ydCBjbGFzcyBUcmFuc2ZlckJ1aWxkZXIgZXh0ZW5kcyBUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICBjb25zdHJ1Y3RvcihfY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihfY29pbkNvbmZpZyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IHRyYW5zYWN0aW9uVHlwZSgpOiBUcmFuc2FjdGlvblR5cGUge1xuICAgIHJldHVybiBUcmFuc2FjdGlvblR5cGUuU2VuZDtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBtZXNzYWdlcyhzZW5kTWVzc2FnZXM6IFNlbmRNZXNzYWdlW10pOiB0aGlzIHtcbiAgICB0aGlzLl9tZXNzYWdlcyA9IHNlbmRNZXNzYWdlcy5tYXAoKHNlbmRNZXNzYWdlKSA9PiB7XG4gICAgICB1dGlscy52YWxpZGF0ZVNlbmRNZXNzYWdlKHNlbmRNZXNzYWdlKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGVVcmw6IHNlbmRNc2dUeXBlVXJsLFxuICAgICAgICB2YWx1ZTogc2VuZE1lc3NhZ2UsXG4gICAgICB9O1xuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG59XG4iXX0=