@bitgo-beta/sdk-coin-hbar 2.0.73-alpha.110 → 2.0.73-alpha.112

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 (101) hide show
  1. package/dist/src/hbar.d.ts +168 -0
  2. package/dist/src/hbar.d.ts.map +1 -0
  3. package/dist/src/hbar.js +497 -0
  4. package/dist/src/hbarToken.d.ts +21 -0
  5. package/dist/src/hbarToken.d.ts.map +1 -0
  6. package/dist/src/hbarToken.js +58 -0
  7. package/dist/src/index.d.ts +6 -0
  8. package/dist/src/index.d.ts.map +1 -0
  9. package/dist/src/index.js +22 -0
  10. package/dist/src/lib/coinTransferBuilder.d.ts +47 -0
  11. package/dist/src/lib/coinTransferBuilder.d.ts.map +1 -0
  12. package/dist/src/lib/coinTransferBuilder.js +159 -0
  13. package/dist/src/lib/constants.d.ts +8 -0
  14. package/dist/src/lib/constants.d.ts.map +1 -0
  15. package/dist/src/lib/constants.js +12 -0
  16. package/dist/src/lib/iface.d.ts +50 -0
  17. package/dist/src/lib/iface.d.ts.map +1 -0
  18. package/dist/src/lib/iface.js +3 -0
  19. package/dist/src/lib/index.d.ts +10 -0
  20. package/dist/src/lib/index.d.ts.map +1 -0
  21. package/dist/src/lib/index.js +53 -0
  22. package/dist/src/lib/keyPair.d.ts +24 -0
  23. package/dist/src/lib/keyPair.d.ts.map +1 -0
  24. package/dist/src/lib/keyPair.js +70 -0
  25. package/dist/src/lib/tokenAssociateBuilder.d.ts +38 -0
  26. package/dist/src/lib/tokenAssociateBuilder.d.ts.map +1 -0
  27. package/dist/src/lib/tokenAssociateBuilder.js +107 -0
  28. package/dist/src/lib/tokenTransferBuilder.d.ts +25 -0
  29. package/dist/src/lib/tokenTransferBuilder.d.ts.map +1 -0
  30. package/dist/src/lib/tokenTransferBuilder.js +130 -0
  31. package/dist/src/lib/transaction.d.ts +106 -0
  32. package/dist/src/lib/transaction.d.ts.map +1 -0
  33. package/dist/src/lib/transaction.js +330 -0
  34. package/dist/src/lib/transactionBuilder.d.ts +111 -0
  35. package/dist/src/lib/transactionBuilder.d.ts.map +1 -0
  36. package/dist/src/lib/transactionBuilder.js +284 -0
  37. package/dist/src/lib/transactionBuilderFactory.d.ts +47 -0
  38. package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -0
  39. package/dist/src/lib/transactionBuilderFactory.js +88 -0
  40. package/dist/src/lib/transferBuilder.d.ts +24 -0
  41. package/dist/src/lib/transferBuilder.d.ts.map +1 -0
  42. package/dist/src/lib/transferBuilder.js +55 -0
  43. package/dist/src/lib/utils.d.ts +210 -0
  44. package/dist/src/lib/utils.d.ts.map +1 -0
  45. package/dist/src/lib/utils.js +481 -0
  46. package/dist/src/lib/walletInitializationBuilder.d.ts +28 -0
  47. package/dist/src/lib/walletInitializationBuilder.d.ts.map +1 -0
  48. package/dist/src/lib/walletInitializationBuilder.js +124 -0
  49. package/dist/src/register.d.ts +3 -0
  50. package/dist/src/register.d.ts.map +1 -0
  51. package/dist/src/register.js +15 -0
  52. package/dist/src/seedValidator.d.ts +31 -0
  53. package/dist/src/seedValidator.d.ts.map +1 -0
  54. package/dist/src/seedValidator.js +103 -0
  55. package/dist/src/thbar.d.ts +14 -0
  56. package/dist/src/thbar.d.ts.map +1 -0
  57. package/dist/src/thbar.js +17 -0
  58. package/dist/test/fixtures/hbar.d.ts +6 -0
  59. package/dist/test/fixtures/hbar.d.ts.map +1 -0
  60. package/dist/test/fixtures/hbar.js +9 -0
  61. package/dist/test/resources/hbar.d.ts +67 -0
  62. package/dist/test/resources/hbar.d.ts.map +1 -0
  63. package/dist/test/resources/hbar.js +73 -0
  64. package/dist/test/unit/fixtures/hbarBackupKey.d.ts +4 -0
  65. package/dist/test/unit/fixtures/hbarBackupKey.d.ts.map +1 -0
  66. package/dist/test/unit/fixtures/hbarBackupKey.js +10 -0
  67. package/dist/test/unit/getBuilderFactory.d.ts +3 -0
  68. package/dist/test/unit/getBuilderFactory.d.ts.map +1 -0
  69. package/dist/test/unit/getBuilderFactory.js +10 -0
  70. package/dist/test/unit/hbar.d.ts +2 -0
  71. package/dist/test/unit/hbar.d.ts.map +1 -0
  72. package/dist/test/unit/hbar.js +1216 -0
  73. package/dist/test/unit/hbarToken.d.ts +2 -0
  74. package/dist/test/unit/hbarToken.d.ts.map +1 -0
  75. package/dist/test/unit/hbarToken.js +34 -0
  76. package/dist/test/unit/keyPair.d.ts +2 -0
  77. package/dist/test/unit/keyPair.d.ts.map +1 -0
  78. package/dist/test/unit/keyPair.js +179 -0
  79. package/dist/test/unit/transaction.d.ts +2 -0
  80. package/dist/test/unit/transaction.d.ts.map +1 -0
  81. package/dist/test/unit/transaction.js +94 -0
  82. package/dist/test/unit/transactionBuilder/tokenAssociateBuilder.d.ts +2 -0
  83. package/dist/test/unit/transactionBuilder/tokenAssociateBuilder.d.ts.map +1 -0
  84. package/dist/test/unit/transactionBuilder/tokenAssociateBuilder.js +215 -0
  85. package/dist/test/unit/transactionBuilder/tokenTransferBuilder.d.ts +2 -0
  86. package/dist/test/unit/transactionBuilder/tokenTransferBuilder.d.ts.map +1 -0
  87. package/dist/test/unit/transactionBuilder/tokenTransferBuilder.js +329 -0
  88. package/dist/test/unit/transactionBuilder/transferBuilder.d.ts +2 -0
  89. package/dist/test/unit/transactionBuilder/transferBuilder.d.ts.map +1 -0
  90. package/dist/test/unit/transactionBuilder/transferBuilder.js +353 -0
  91. package/dist/test/unit/transactionBuilder/walletInitialization.d.ts +2 -0
  92. package/dist/test/unit/transactionBuilder/walletInitialization.d.ts.map +1 -0
  93. package/dist/test/unit/transactionBuilder/walletInitialization.js +214 -0
  94. package/dist/test/unit/utils.d.ts +2 -0
  95. package/dist/test/unit/utils.d.ts.map +1 -0
  96. package/dist/test/unit/utils.js +275 -0
  97. package/dist/tsconfig.tsbuildinfo +1 -0
  98. package/package.json +10 -7
  99. package/.eslintignore +0 -5
  100. package/.mocharc.yml +0 -8
  101. package/CHANGELOG.md +0 -882
@@ -0,0 +1,284 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.TransactionBuilder = void 0;
40
+ const bignumber_js_1 = __importDefault(require("bignumber.js"));
41
+ const Long = __importStar(require("long"));
42
+ const proto_1 = require("@hashgraph/proto");
43
+ const sdk_core_1 = require("@bitgo-beta/sdk-core");
44
+ const transaction_1 = require("./transaction");
45
+ const utils_1 = require("./utils");
46
+ const keyPair_1 = require("./keyPair");
47
+ class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
48
+ constructor(_coinConfig) {
49
+ super(_coinConfig);
50
+ this._node = { nodeId: '0.0.4' };
51
+ this._duration = new proto_1.proto.Duration({ seconds: Long.fromNumber(180) });
52
+ this._txBody = new proto_1.proto.TransactionBody();
53
+ this._txBody.transactionValidDuration = this._duration;
54
+ this._multiSignerKeyPairs = [];
55
+ this._signatures = [];
56
+ this.transaction = new transaction_1.Transaction(_coinConfig);
57
+ }
58
+ // region Base Builder
59
+ /** @inheritdoc */
60
+ async buildImplementation() {
61
+ this._txBody.nodeAccountID = (0, utils_1.buildHederaAccountID)(this._node.nodeId);
62
+ this._txBody.transactionFee = Long.fromString(this._fee.fee);
63
+ this._txBody.transactionID = this.buildTxId();
64
+ this._txBody.memo = this._memo;
65
+ const hTransaction = this.transaction.hederaTx || new proto_1.proto.Transaction();
66
+ hTransaction.bodyBytes = proto_1.proto.TransactionBody.encode(this._txBody).finish();
67
+ this.transaction.body(hTransaction);
68
+ for (const kp of this._multiSignerKeyPairs) {
69
+ await this.transaction.sign(kp);
70
+ }
71
+ for (const { signature, keyPair } of this._signatures) {
72
+ this.transaction.addSignature(signature, keyPair);
73
+ }
74
+ return this.transaction;
75
+ }
76
+ /** @inheritdoc */
77
+ fromImplementation(rawTransaction) {
78
+ const tx = new transaction_1.Transaction(this._coinConfig);
79
+ this.validateRawTransaction(rawTransaction);
80
+ tx.fromRawTransaction(rawTransaction);
81
+ this.initBuilder(tx);
82
+ return this.transaction;
83
+ }
84
+ /** @inheritdoc */
85
+ signImplementation(key) {
86
+ this.checkDuplicatedKeys(key);
87
+ const signer = new keyPair_1.KeyPair({ prv: key.key });
88
+ // Signing the transaction is an operation that relies on all the data being set,
89
+ // so we set the source here and leave the actual signing for the build step
90
+ this._multiSignerKeyPairs.push(signer);
91
+ return this.transaction;
92
+ }
93
+ /**
94
+ * Initialize the transaction builder fields using the decoded transaction data
95
+ *
96
+ * @param {Transaction} tx - the transaction data
97
+ */
98
+ initBuilder(tx) {
99
+ this.transaction = tx;
100
+ this.transaction.loadPreviousSignatures();
101
+ const txData = tx.toJson();
102
+ this.fee({ fee: txData.fee.toString() });
103
+ this.source({ address: txData.from });
104
+ this.startTime(txData.startTime);
105
+ this.node({ nodeId: txData.node });
106
+ this.validDuration(new bignumber_js_1.default(txData.validDuration).toNumber());
107
+ if (txData.memo) {
108
+ this.memo(txData.memo);
109
+ }
110
+ }
111
+ /**
112
+ * Creates a Hedera TransactionID
113
+ *
114
+ * @returns {proto.TransactionID} - Created TransactionID
115
+ */
116
+ buildTxId() {
117
+ return new proto_1.proto.TransactionID({
118
+ transactionValidStart: this.validStart,
119
+ accountID: (0, utils_1.buildHederaAccountID)(this._source.address),
120
+ });
121
+ }
122
+ // endregion
123
+ // region Common builder methods
124
+ /**
125
+ * Set the memo
126
+ *
127
+ * @param {string} memo - A hedera memo, can be a maximum of 100 bytes
128
+ * @returns {TransactionBuilder} - This transaction builder
129
+ */
130
+ memo(memo) {
131
+ if (Buffer.from(memo).length > 100) {
132
+ throw new sdk_core_1.InvalidParameterValueError('Memo must not be longer than 100 bytes');
133
+ }
134
+ this._memo = memo;
135
+ return this;
136
+ }
137
+ /**
138
+ * Set the node, it may take the format `'<shard>.<realm>.<account>'` or `'<account>'`
139
+ *
140
+ * @param {HederaNode} node - A hedera node address
141
+ * @returns {TransactionBuilder} - This transaction builder
142
+ */
143
+ node(node) {
144
+ if (!(0, utils_1.isValidAddress)(node.nodeId)) {
145
+ throw new sdk_core_1.InvalidParameterValueError('Invalid Hedera node address');
146
+ }
147
+ this._node = node;
148
+ return this;
149
+ }
150
+ /**
151
+ * Set the transaction valid duration
152
+ *
153
+ * @param {number} validDuration - The transaction valid duration in seconds
154
+ * @returns {TransactionBuilder} - This transaction builder
155
+ */
156
+ validDuration(validDuration) {
157
+ this.validateValue(new bignumber_js_1.default(validDuration));
158
+ this._duration = new proto_1.proto.Duration({ seconds: Long.fromNumber(validDuration) });
159
+ return this;
160
+ }
161
+ /**
162
+ * Set the transaction fees
163
+ *
164
+ * @param {BaseFee} fee - The maximum gas to pay
165
+ * @returns {TransactionBuilder} - This transaction builder
166
+ */
167
+ fee(fee) {
168
+ this.validateValue(new bignumber_js_1.default(fee.fee));
169
+ this._fee = fee;
170
+ return this;
171
+ }
172
+ /**
173
+ * Set the transaction source
174
+ *
175
+ * @param {BaseAddress} address - The source account
176
+ * @returns {TransactionBuilder} - This transaction builder
177
+ */
178
+ source(address) {
179
+ this.validateAddress(address);
180
+ this._source = address;
181
+ return this;
182
+ }
183
+ /**
184
+ * Set an external transaction signature
185
+ *
186
+ * @param {string} signature - Hex encoded signature string
187
+ * @param {KeyPair} keyPair - The public key keypair that was used to create the signature
188
+ * @returns {TransactionBuilder} - Transaction builder
189
+ */
190
+ signature(signature, keyPair) {
191
+ // if we already have a signature for this key pair, just update it
192
+ for (const oldSignature of this._signatures) {
193
+ if (oldSignature.keyPair.getKeys().pub === keyPair.getKeys().pub) {
194
+ oldSignature.signature = signature;
195
+ return this;
196
+ }
197
+ }
198
+ // otherwise add the new signature
199
+ this._signatures.push({ signature, keyPair });
200
+ return this;
201
+ }
202
+ /**
203
+ * Set the start time
204
+ *
205
+ * @param {string} time - String value of the time to set with format <seconds>.<nanos>
206
+ * @returns {TransactionBuilder} - this
207
+ */
208
+ startTime(time) {
209
+ if (!(0, utils_1.isValidTimeString)(time)) {
210
+ throw new sdk_core_1.InvalidParameterValueError('Invalid value for time parameter');
211
+ }
212
+ const timeParts = time.split('.').map((v) => new bignumber_js_1.default(v).toNumber());
213
+ this._startTime = { seconds: Long.fromNumber(timeParts[0]), nanos: timeParts[1] };
214
+ return this;
215
+ }
216
+ // endregion
217
+ // region Getters and Setters
218
+ get validStart() {
219
+ if (!this._startTime) {
220
+ this.startTime((0, utils_1.getCurrentTime)());
221
+ }
222
+ return this._startTime;
223
+ }
224
+ /** @inheritdoc */
225
+ get transaction() {
226
+ return this._transaction;
227
+ }
228
+ /** @inheritdoc */
229
+ set transaction(transaction) {
230
+ this._transaction = transaction;
231
+ }
232
+ // endregion
233
+ // region Validators
234
+ /** @inheritdoc */
235
+ validateAddress(address, addressFormat) {
236
+ if (!(0, utils_1.isValidAddress)(address.address)) {
237
+ throw new sdk_core_1.BuildTransactionError('Invalid address ' + address.address);
238
+ }
239
+ }
240
+ /** @inheritdoc */
241
+ validateKey(key) {
242
+ if (!new keyPair_1.KeyPair({ prv: key.key })) {
243
+ throw new sdk_core_1.BuildTransactionError('Invalid key');
244
+ }
245
+ }
246
+ /** @inheritdoc */
247
+ validateRawTransaction(rawTransaction) {
248
+ if (!(0, utils_1.isValidRawTransactionFormat)(rawTransaction)) {
249
+ throw new sdk_core_1.ParseTransactionError('Invalid raw transaction');
250
+ }
251
+ }
252
+ /** @inheritdoc */
253
+ validateTransaction(transaction) {
254
+ this.validateMandatoryFields();
255
+ }
256
+ /** @inheritdoc */
257
+ validateValue(value) {
258
+ if (value.isLessThan(0)) {
259
+ throw new sdk_core_1.BuildTransactionError('Value cannot be less than zero');
260
+ }
261
+ }
262
+ validateMandatoryFields() {
263
+ if (this._fee === undefined) {
264
+ throw new sdk_core_1.BuildTransactionError('Invalid transaction: missing fee');
265
+ }
266
+ if (this._source === undefined) {
267
+ throw new sdk_core_1.BuildTransactionError('Invalid transaction: missing source');
268
+ }
269
+ }
270
+ /**
271
+ * Validates that the given key is not already in this._multiSignerKeyPairs
272
+ *
273
+ * @param {BaseKey} key - The key to check
274
+ */
275
+ checkDuplicatedKeys(key) {
276
+ this._multiSignerKeyPairs.forEach((_sourceKeyPair) => {
277
+ if (_sourceKeyPair.getKeys().prv === key.key) {
278
+ throw new sdk_core_1.SigningError('Repeated sign: ' + key.key);
279
+ }
280
+ });
281
+ }
282
+ }
283
+ exports.TransactionBuilder = TransactionBuilder;
284
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0EsZ0VBQXFDO0FBQ3JDLDJDQUE2QjtBQUM3Qiw0Q0FBeUM7QUFDekMsbURBUzhCO0FBQzlCLCtDQUE0QztBQUM1QyxtQ0FNaUI7QUFDakIsdUNBQW9DO0FBR3BDLE1BQXNCLGtCQUFtQixTQUFRLGlDQUFzQjtJQVlyRSxZQUFzQixXQUFpQztRQUNyRCxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFOWCxVQUFLLEdBQWUsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUM7UUFDeEMsY0FBUyxHQUFtQixJQUFJLGFBQUssQ0FBQyxRQUFRLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFNMUYsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLGFBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUMzQyxJQUFJLENBQUMsT0FBTyxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDdkQsSUFBSSxDQUFDLG9CQUFvQixHQUFHLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUkseUJBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsc0JBQXNCO0lBQ3RCLGtCQUFrQjtJQUNSLEtBQUssQ0FBQyxtQkFBbUI7UUFDakMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEdBQUcsSUFBQSw0QkFBb0IsRUFBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3JFLElBQUksQ0FBQyxP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QWMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUM3QyxNQUFNLElBQUksdUJBQVksQ0FBQyxpQkFBaUIsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdEQsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUVGO0FBN1FELGdEQTZRQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCBCaWdOdW1iZXIgZnJvbSAnYmlnbnVtYmVyLmpzJztcbmltcG9ydCAqIGFzIExvbmcgZnJvbSAnbG9uZyc7XG5pbXBvcnQgeyBwcm90byB9IGZyb20gJ0BoYXNoZ3JhcGgvcHJvdG8nO1xuaW1wb3J0IHtcbiAgQmFzZUFkZHJlc3MsXG4gIEJhc2VGZWUsXG4gIEJhc2VLZXksXG4gIEJhc2VUcmFuc2FjdGlvbkJ1aWxkZXIsXG4gIEJ1aWxkVHJhbnNhY3Rpb25FcnJvcixcbiAgSW52YWxpZFBhcmFtZXRlclZhbHVlRXJyb3IsXG4gIFBhcnNlVHJhbnNhY3Rpb25FcnJvcixcbiAgU2lnbmluZ0Vycm9yLFxufSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHtcbiAgYnVpbGRIZWRlcmFBY2NvdW50SUQsXG4gIGdldEN1cnJlbnRUaW1lLFxuICBpc1ZhbGlkQWRkcmVzcyxcbiAgaXNWYWxpZFJhd1RyYW5zYWN0aW9uRm9ybWF0LFxuICBpc1ZhbGlkVGltZVN0cmluZyxcbn0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBLZXlQYWlyIH0gZnJvbSAnLi9rZXlQYWlyJztcbmltcG9ydCB7IEhlZGVyYU5vZGUsIFNpZ25hdHVyZURhdGEgfSBmcm9tICcuL2lmYWNlJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFRyYW5zYWN0aW9uQnVpbGRlciBleHRlbmRzIEJhc2VUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICBwcm90ZWN0ZWQgX2ZlZTogQmFzZUZlZTtcbiAgcHJpdmF0ZSBfdHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uO1xuICBwcm90ZWN0ZWQgX3NvdXJjZTogQmFzZUFkZHJlc3M7XG4gIHByb3RlY3RlZCBfc3RhcnRUaW1lOiBwcm90by5JVGltZXN0YW1wO1xuICBwcm90ZWN0ZWQgX21lbW86IHN0cmluZztcbiAgcHJvdGVjdGVkIF90eEJvZHk6IHByb3RvLlRyYW5zYWN0aW9uQm9keTtcbiAgcHJvdGVjdGVkIF9ub2RlOiBIZWRlcmFOb2RlID0geyBub2RlSWQ6ICcwLjAuNCcgfTtcbiAgcHJvdGVjdGVkIF9kdXJhdGlvbjogcHJvdG8uRHVyYXRpb24gPSBuZXcgcHJvdG8uRHVyYXRpb24oeyBzZWNvbmRzOiBMb25nLmZyb21OdW1iZXIoMTgwKSB9KTtcbiAgcHJvdGVjdGVkIF9tdWx0aVNpZ25lcktleVBhaXJzOiBLZXlQYWlyW107XG4gIHByb3RlY3RlZCBfc2lnbmF0dXJlczogU2lnbmF0dXJlRGF0YVtdO1xuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihfY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihfY29pbkNvbmZpZyk7XG4gICAgdGhpcy5fdHhCb2R5ID0gbmV3IHByb3RvLlRyYW5zYWN0aW9uQm9keSgpO1xuICAgIHRoaXMuX3R4Qm9keS50cmFuc2FjdGlvblZhbGlkRHVyYXRpb24gPSB0aGlzLl9kdXJhdGlvbjtcbiAgICB0aGlzLl9tdWx0aVNpZ25lcktleVBhaXJzID0gW107XG4gICAgdGhpcy5fc2lnbmF0dXJlcyA9IFtdO1xuICAgIHRoaXMudHJhbnNhY3Rpb24gPSBuZXcgVHJhbnNhY3Rpb24oX2NvaW5Db25maWcpO1xuICB9XG5cbiAgLy8gcmVnaW9uIEJhc2UgQnVpbGRlclxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGJ1aWxkSW1wbGVtZW50YXRpb24oKTogUHJvbWlzZTxUcmFuc2FjdGlvbj4ge1xuICAgIHRoaXMuX3R4Qm9keS5ub2RlQWNjb3VudElEID0gYnVpbGRIZWRlcmFBY2NvdW50SUQodGhpcy5fbm9kZS5ub2RlSWQpO1xuICAgIHRoaXMuX3R4Qm9keS50cmFuc2FjdGlvbkZlZSA9IExvbmcuZnJvbVN0cmluZyh0aGlzLl9mZWUuZmVlKTtcbiAgICB0aGlzLl90eEJvZHkudHJhbnNhY3Rpb25JRCA9IHRoaXMuYnVpbGRUeElkKCk7XG4gICAgdGhpcy5fdHhCb2R5Lm1lbW8gPSB0aGlzLl9tZW1vO1xuICAgIGNvbnN0IGhUcmFuc2FjdGlvbiA9IHRoaXMudHJhbnNhY3Rpb24uaGVkZXJhVHggfHwgbmV3IHByb3RvLlRyYW5zYWN0aW9uKCk7XG4gICAgaFRyYW5zYWN0aW9uLmJvZHlCeXRlcyA9IHByb3RvLlRyYW5zYWN0aW9uQm9keS5lbmNvZGUodGhpcy5fdHhCb2R5KS5maW5pc2goKTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLmJvZHkoaFRyYW5zYWN0aW9uKTtcbiAgICBmb3IgKGNvbnN0IGtwIG9mIHRoaXMuX211bHRpU2lnbmVyS2V5UGFpcnMpIHtcbiAgICAgIGF3YWl0IHRoaXMudHJhbnNhY3Rpb24uc2lnbihrcCk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgeyBzaWduYXR1cmUsIGtleVBhaXIgfSBvZiB0aGlzLl9zaWduYXR1cmVzKSB7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uLmFkZFNpZ25hdHVyZShzaWduYXR1cmUsIGtleVBhaXIpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy50cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgZnJvbUltcGxlbWVudGF0aW9uKHJhd1RyYW5zYWN0aW9uOiBVaW50OEFycmF5IHwgc3RyaW5nKTogVHJhbnNhY3Rpb24ge1xuICAgIGNvbnN0IHR4ID0gbmV3IFRyYW5zYWN0aW9uKHRoaXMuX2NvaW5Db25maWcpO1xuICAgIHRoaXMudmFsaWRhdGVSYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbik7XG4gICAgdHguZnJvbVJhd1RyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uKTtcbiAgICB0aGlzLmluaXRCdWlsZGVyKHR4KTtcbiAgICByZXR1cm4gdGhpcy50cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgc2lnbkltcGxlbWVudGF0aW9uKGtleTogQmFzZUtleSk6IFRyYW5zYWN0aW9uIHtcbiAgICB0aGlzLmNoZWNrRHVwbGljYXRlZEtleXMoa2V5KTtcbiAgICBjb25zdCBzaWduZXIgPSBuZXcgS2V5UGFpcih7IHBydjoga2V5LmtleSB9KTtcblxuICAgIC8vIFNpZ25pbmcgdGhlIHRyYW5zYWN0aW9uIGlzIGFuIG9wZXJhdGlvbiB0aGF0IHJlbGllcyBvbiBhbGwgdGhlIGRhdGEgYmVpbmcgc2V0LFxuICAgIC8vIHNvIHdlIHNldCB0aGUgc291cmNlIGhlcmUgYW5kIGxlYXZlIHRoZSBhY3R1YWwgc2lnbmluZyBmb3IgdGhlIGJ1aWxkIHN0ZXBcbiAgICB0aGlzLl9tdWx0aVNpZ25lcktleVBhaXJzLnB1c2goc2lnbmVyKTtcbiAgICByZXR1cm4gdGhpcy50cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIHRoZSB0cmFuc2FjdGlvbiBidWlsZGVyIGZpZWxkcyB1c2luZyB0aGUgZGVjb2RlZCB0cmFuc2FjdGlvbiBkYXRhXG4gICAqXG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb259IHR4IC0gdGhlIHRyYW5zYWN0aW9uIGRhdGFcbiAgICovXG4gIGluaXRCdWlsZGVyKHR4OiBUcmFuc2FjdGlvbik6IHZvaWQge1xuICAgIHRoaXMudHJhbnNhY3Rpb24gPSB0eDtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLmxvYWRQcmV2aW91c1NpZ25hdHVyZXMoKTtcbiAgICBjb25zdCB0eERhdGEgPSB0eC50b0pzb24oKTtcbiAgICB0aGlzLmZlZSh7IGZlZTogdHhEYXRhLmZlZS50b1N0cmluZygpIH0pO1xuICAgIHRoaXMuc291cmNlKHsgYWRkcmVzczogdHhEYXRhLmZyb20gfSk7XG4gICAgdGhpcy5zdGFydFRpbWUodHhEYXRhLnN0YXJ0VGltZSk7XG4gICAgdGhpcy5ub2RlKHsgbm9kZUlkOiB0eERhdGEubm9kZSB9KTtcbiAgICB0aGlzLnZhbGlkRHVyYXRpb24obmV3IEJpZ051bWJlcih0eERhdGEudmFsaWREdXJhdGlvbikudG9OdW1iZXIoKSk7XG4gICAgaWYgKHR4RGF0YS5tZW1vKSB7XG4gICAgICB0aGlzLm1lbW8odHhEYXRhLm1lbW8pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgSGVkZXJhIFRyYW5zYWN0aW9uSURcbiAgICpcbiAgICogQHJldHVybnMge3Byb3RvLlRyYW5zYWN0aW9uSUR9IC0gQ3JlYXRlZCBUcmFuc2FjdGlvbklEXG4gICAqL1xuICBwcm90ZWN0ZWQgYnVpbGRUeElkKCk6IHByb3RvLlRyYW5zYWN0aW9uSUQge1xuICAgIHJldHVybiBuZXcgcHJvdG8uVHJhbnNhY3Rpb25JRCh7XG4gICAgICB0cmFuc2FjdGlvblZhbGlkU3RhcnQ6IHRoaXMudmFsaWRTdGFydCxcbiAgICAgIGFjY291bnRJRDogYnVpbGRIZWRlcmFBY2NvdW50SUQodGhpcy5fc291cmNlLmFkZHJlc3MpLFxuICAgIH0pO1xuICB9XG4gIC8vIGVuZHJlZ2lvblxuXG4gIC8vIHJlZ2lvbiBDb21tb24gYnVpbGRlciBtZXRob2RzXG4gIC8qKlxuICAgKiAgU2V0IHRoZSBtZW1vXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZW1vIC0gQSBoZWRlcmEgbWVtbywgY2FuIGJlIGEgbWF4aW11bSBvZiAxMDAgYnl0ZXNcbiAgICogQHJldHVybnMge1RyYW5zYWN0aW9uQnVpbGRlcn0gLSBUaGlzIHRyYW5zYWN0aW9uIGJ1aWxkZXJcbiAgICovXG4gIG1lbW8obWVtbzogc3RyaW5nKTogdGhpcyB7XG4gICAgaWYgKEJ1ZmZlci5mcm9tKG1lbW8pLmxlbmd0aCA+IDEwMCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRQYXJhbWV0ZXJWYWx1ZUVycm9yKCdNZW1vIG11c3Qgbm90IGJlIGxvbmdlciB0aGFuIDEwMCBieXRlcycpO1xuICAgIH1cbiAgICB0aGlzLl9tZW1vID0gbWVtbztcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiAgU2V0IHRoZSBub2RlLCBpdCBtYXkgdGFrZSB0aGUgZm9ybWF0IGAnPHNoYXJkPi48cmVhbG0+LjxhY2NvdW50PidgIG9yIGAnPGFjY291bnQ+J2BcbiAgICpcbiAgICogQHBhcmFtIHtIZWRlcmFOb2RlfSBub2RlIC0gQSBoZWRlcmEgbm9kZSBhZGRyZXNzXG4gICAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbkJ1aWxkZXJ9IC0gVGhpcyB0cmFuc2FjdGlvbiBidWlsZGVyXG4gICAqL1xuICBub2RlKG5vZGU6IEhlZGVyYU5vZGUpOiB0aGlzIHtcbiAgICBpZiAoIWlzVmFsaWRBZGRyZXNzKG5vZGUubm9kZUlkKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRQYXJhbWV0ZXJWYWx1ZUVycm9yKCdJbnZhbGlkIEhlZGVyYSBub2RlIGFkZHJlc3MnKTtcbiAgICB9XG4gICAgdGhpcy5fbm9kZSA9IG5vZGU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSB0cmFuc2FjdGlvbiB2YWxpZCBkdXJhdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gdmFsaWREdXJhdGlvbiAtIFRoZSB0cmFuc2FjdGlvbiB2YWxpZCBkdXJhdGlvbiBpbiBzZWNvbmRzXG4gICAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbkJ1aWxkZXJ9IC0gVGhpcyB0cmFuc2FjdGlvbiBidWlsZGVyXG4gICAqL1xuICB2YWxpZER1cmF0aW9uKHZhbGlkRHVyYXRpb246IG51bWJlcik6IHRoaXMge1xuICAgIHRoaXMudmFsaWRhdGVWYWx1ZShuZXcgQmlnTnVtYmVyKHZhbGlkRHVyYXRpb24pKTtcbiAgICB0aGlzLl9kdXJhdGlvbiA9IG5ldyBwcm90by5EdXJhdGlvbih7IHNlY29uZHM6IExvbmcuZnJvbU51bWJlcih2YWxpZER1cmF0aW9uKSB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHRyYW5zYWN0aW9uIGZlZXNcbiAgICpcbiAgICogQHBhcmFtIHtCYXNlRmVlfSBmZWUgLSBUaGUgbWF4aW11bSBnYXMgdG8gcGF5XG4gICAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbkJ1aWxkZXJ9IC0gVGhpcyB0cmFuc2FjdGlvbiBidWlsZGVyXG4gICAqL1xuICBmZWUoZmVlOiBCYXNlRmVlKTogdGhpcyB7XG4gICAgdGhpcy52YWxpZGF0ZVZhbHVlKG5ldyBCaWdOdW1iZXIoZmVlLmZlZSkpO1xuICAgIHRoaXMuX2ZlZSA9IGZlZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHRyYW5zYWN0aW9uIHNvdXJjZVxuICAgKlxuICAgKiBAcGFyYW0ge0Jhc2VBZGRyZXNzfSBhZGRyZXNzIC0gVGhlIHNvdXJjZSBhY2NvdW50XG4gICAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbkJ1aWxkZXJ9IC0gVGhpcyB0cmFuc2FjdGlvbiBidWlsZGVyXG4gICAqL1xuICBzb3VyY2UoYWRkcmVzczogQmFzZUFkZHJlc3MpOiB0aGlzIHtcbiAgICB0aGlzLnZhbGlkYXRlQWRkcmVzcyhhZGRyZXNzKTtcbiAgICB0aGlzLl9zb3VyY2UgPSBhZGRyZXNzO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBhbiBleHRlcm5hbCB0cmFuc2FjdGlvbiBzaWduYXR1cmVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNpZ25hdHVyZSAtIEhleCBlbmNvZGVkIHNpZ25hdHVyZSBzdHJpbmdcbiAgICogQHBhcmFtIHtLZXlQYWlyfSBrZXlQYWlyIC0gVGhlIHB1YmxpYyBrZXkga2V5cGFpciB0aGF0IHdhcyB1c2VkIHRvIGNyZWF0ZSB0aGUgc2lnbmF0dXJlXG4gICAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbkJ1aWxkZXJ9IC0gVHJhbnNhY3Rpb24gYnVpbGRlclxuICAgKi9cbiAgc2lnbmF0dXJlKHNpZ25hdHVyZTogc3RyaW5nLCBrZXlQYWlyOiBLZXlQYWlyKTogdGhpcyB7XG4gICAgLy8gaWYgd2UgYWxyZWFkeSBoYXZlIGEgc2lnbmF0dXJlIGZvciB0aGlzIGtleSBwYWlyLCBqdXN0IHVwZGF0ZSBpdFxuICAgIGZvciAoY29uc3Qgb2xkU2lnbmF0dXJlIG9mIHRoaXMuX3NpZ25hdHVyZXMpIHtcbiAgICAgIGlmIChvbGRTaWduYXR1cmUua2V5UGFpci5nZXRLZXlzKCkucHViID09PSBrZXlQYWlyLmdldEtleXMoKS5wdWIpIHtcbiAgICAgICAgb2xkU2lnbmF0dXJlLnNpZ25hdHVyZSA9IHNpZ25hdHVyZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gb3RoZXJ3aXNlIGFkZCB0aGUgbmV3IHNpZ25hdHVyZVxuICAgIHRoaXMuX3NpZ25hdHVyZXMucHVzaCh7IHNpZ25hdHVyZSwga2V5UGFpciB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHN0YXJ0IHRpbWVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRpbWUgLSBTdHJpbmcgdmFsdWUgb2YgdGhlIHRpbWUgdG8gc2V0IHdpdGggZm9ybWF0IDxzZWNvbmRzPi48bmFub3M+XG4gICAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbkJ1aWxkZXJ9IC0gdGhpc1xuICAgKi9cbiAgc3RhcnRUaW1lKHRpbWU6IHN0cmluZyk6IHRoaXMge1xuICAgIGlmICghaXNWYWxpZFRpbWVTdHJpbmcodGltZSkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkUGFyYW1ldGVyVmFsdWVFcnJvcignSW52YWxpZCB2YWx1ZSBmb3IgdGltZSBwYXJhbWV0ZXInKTtcbiAgICB9XG4gICAgY29uc3QgdGltZVBhcnRzID0gdGltZS5zcGxpdCgnLicpLm1hcCgodikgPT4gbmV3IEJpZ051bWJlcih2KS50b051bWJlcigpKTtcbiAgICB0aGlzLl9zdGFydFRpbWUgPSB7IHNlY29uZHM6IExvbmcuZnJvbU51bWJlcih0aW1lUGFydHNbMF0pLCBuYW5vczogdGltZVBhcnRzWzFdIH07XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgLy8gZW5kcmVnaW9uXG5cbiAgLy8gcmVnaW9uIEdldHRlcnMgYW5kIFNldHRlcnNcbiAgcHJpdmF0ZSBnZXQgdmFsaWRTdGFydCgpOiBwcm90by5JVGltZXN0YW1wIHtcbiAgICBpZiAoIXRoaXMuX3N0YXJ0VGltZSkge1xuICAgICAgdGhpcy5zdGFydFRpbWUoZ2V0Q3VycmVudFRpbWUoKSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9zdGFydFRpbWU7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGdldCB0cmFuc2FjdGlvbigpOiBUcmFuc2FjdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zYWN0aW9uO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBzZXQgdHJhbnNhY3Rpb24odHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uKSB7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb24gPSB0cmFuc2FjdGlvbjtcbiAgfVxuICAvLyBlbmRyZWdpb25cblxuICAvLyByZWdpb24gVmFsaWRhdG9yc1xuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVBZGRyZXNzKGFkZHJlc3M6IEJhc2VBZGRyZXNzLCBhZGRyZXNzRm9ybWF0Pzogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCFpc1ZhbGlkQWRkcmVzcyhhZGRyZXNzLmFkZHJlc3MpKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIGFkZHJlc3MgJyArIGFkZHJlc3MuYWRkcmVzcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlS2V5KGtleTogQmFzZUtleSk6IHZvaWQge1xuICAgIGlmICghbmV3IEtleVBhaXIoeyBwcnY6IGtleS5rZXkgfSkpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQga2V5Jyk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlUmF3VHJhbnNhY3Rpb24ocmF3VHJhbnNhY3Rpb246IGFueSk6IHZvaWQge1xuICAgIGlmICghaXNWYWxpZFJhd1RyYW5zYWN0aW9uRm9ybWF0KHJhd1RyYW5zYWN0aW9uKSkge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCByYXcgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVUcmFuc2FjdGlvbih0cmFuc2FjdGlvbj86IFRyYW5zYWN0aW9uKTogdm9pZCB7XG4gICAgdGhpcy52YWxpZGF0ZU1hbmRhdG9yeUZpZWxkcygpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlVmFsdWUodmFsdWU6IEJpZ051bWJlcik6IHZvaWQge1xuICAgIGlmICh2YWx1ZS5pc0xlc3NUaGFuKDApKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdWYWx1ZSBjYW5ub3QgYmUgbGVzcyB0aGFuIHplcm8nKTtcbiAgICB9XG4gIH1cblxuICB2YWxpZGF0ZU1hbmRhdG9yeUZpZWxkcygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fZmVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgdHJhbnNhY3Rpb246IG1pc3NpbmcgZmVlJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLl9zb3VyY2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCB0cmFuc2FjdGlvbjogbWlzc2luZyBzb3VyY2UnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoYXQgdGhlIGdpdmVuIGtleSBpcyBub3QgYWxyZWFkeSBpbiB0aGlzLl9tdWx0aVNpZ25lcktleVBhaXJzXG4gICAqXG4gICAqIEBwYXJhbSB7QmFzZUtleX0ga2V5IC0gVGhlIGtleSB0byBjaGVja1xuICAgKi9cbiAgcHJpdmF0ZSBjaGVja0R1cGxpY2F0ZWRLZXlzKGtleTogQmFzZUtleSk6IHZvaWQge1xuICAgIHRoaXMuX211bHRpU2lnbmVyS2V5UGFpcnMuZm9yRWFjaCgoX3NvdXJjZUtleVBhaXIpID0+IHtcbiAgICAgIGlmIChfc291cmNlS2V5UGFpci5nZXRLZXlzKCkucHJ2ID09PSBrZXkua2V5KSB7XG4gICAgICAgIHRocm93IG5ldyBTaWduaW5nRXJyb3IoJ1JlcGVhdGVkIHNpZ246ICcgKyBrZXkua2V5KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICAvLyBlbmRyZWdpb25cbn1cbiJdfQ==
@@ -0,0 +1,47 @@
1
+ import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
2
+ import { BaseTransactionBuilderFactory } from '@bitgo-beta/sdk-core';
3
+ import { WalletInitializationBuilder } from './walletInitializationBuilder';
4
+ import { CoinTransferBuilder } from './coinTransferBuilder';
5
+ import { TransactionBuilder } from './transactionBuilder';
6
+ import { Transaction } from './transaction';
7
+ import { TokenAssociateBuilder } from './tokenAssociateBuilder';
8
+ import { TokenTransferBuilder } from './tokenTransferBuilder';
9
+ export declare class TransactionBuilderFactory extends BaseTransactionBuilderFactory {
10
+ constructor(_coinConfig: Readonly<CoinConfig>);
11
+ /** @inheritdoc */
12
+ getWalletInitializationBuilder(tx?: Transaction): WalletInitializationBuilder;
13
+ /** @inheritDoc */
14
+ getTransferBuilder(tx?: Transaction): CoinTransferBuilder;
15
+ /**
16
+ * Returns a specific builder to create a funds token transfer transaction
17
+ */
18
+ getTokenTransferBuilder(tx?: Transaction): TokenTransferBuilder;
19
+ /**
20
+ * Returns a builder to create a token association transaction
21
+ */
22
+ getTokenAssociateBuilder(tx?: Transaction): TokenAssociateBuilder;
23
+ /** @inheritDoc */
24
+ from(raw: Uint8Array | string): TransactionBuilder;
25
+ /**
26
+ * Initialize the builder with the given transaction
27
+ *
28
+ * @param {Transaction | undefined} tx - the transaction used to initialize the builder
29
+ * @param {TransactionBuilder} builder - the builder to be initialized
30
+ * @returns {TransactionBuilder} the builder initialized
31
+ */
32
+ private initializeBuilder;
33
+ /**
34
+ * Returns a transaction instance from the encoded value
35
+ *
36
+ * @param {Uint8Array | string} rawTransaction - encoded transaction
37
+ * @returns {Transaction} the parsed transaction instance
38
+ */
39
+ private parseRawTransaction;
40
+ /**
41
+ * Check the raw transaction has a valid format in the blockchain context, throw otherwise.
42
+ *
43
+ * @param {any} rawTransaction - Transaction in any format
44
+ */
45
+ private validateRawTransaction;
46
+ }
47
+ //# sourceMappingURL=transactionBuilderFactory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transactionBuilderFactory.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilderFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EACL,6BAA6B,EAI9B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,qBAAa,yBAA0B,SAAQ,6BAA6B;gBAC9D,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI7C,kBAAkB;IAClB,8BAA8B,CAAC,EAAE,CAAC,EAAE,WAAW,GAAG,2BAA2B;IAI7E,kBAAkB;IAClB,kBAAkB,CAAC,EAAE,CAAC,EAAE,WAAW,GAAG,mBAAmB;IAIzD;;OAEG;IACH,uBAAuB,CAAC,EAAE,CAAC,EAAE,WAAW,GAAG,oBAAoB;IAI/D;;OAEG;IACH,wBAAwB,CAAC,EAAE,CAAC,EAAE,WAAW,GAAG,qBAAqB;IAIjE,kBAAkB;IAClB,IAAI,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM,GAAG,kBAAkB;IAiBlD;;;;;;OAMG;IACH,OAAO,CAAC,iBAAiB;IAOzB;;;;;OAKG;IACH,OAAO,CAAC,mBAAmB;IAM3B;;;;OAIG;IACH,OAAO,CAAC,sBAAsB;CAK/B"}
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TransactionBuilderFactory = void 0;
4
+ const sdk_core_1 = require("@bitgo-beta/sdk-core");
5
+ const walletInitializationBuilder_1 = require("./walletInitializationBuilder");
6
+ const coinTransferBuilder_1 = require("./coinTransferBuilder");
7
+ const transaction_1 = require("./transaction");
8
+ const utils_1 = require("./utils");
9
+ const tokenAssociateBuilder_1 = require("./tokenAssociateBuilder");
10
+ const tokenTransferBuilder_1 = require("./tokenTransferBuilder");
11
+ class TransactionBuilderFactory extends sdk_core_1.BaseTransactionBuilderFactory {
12
+ constructor(_coinConfig) {
13
+ super(_coinConfig);
14
+ }
15
+ /** @inheritdoc */
16
+ getWalletInitializationBuilder(tx) {
17
+ return this.initializeBuilder(tx, new walletInitializationBuilder_1.WalletInitializationBuilder(this._coinConfig));
18
+ }
19
+ /** @inheritDoc */
20
+ getTransferBuilder(tx) {
21
+ return this.initializeBuilder(tx, new coinTransferBuilder_1.CoinTransferBuilder(this._coinConfig));
22
+ }
23
+ /**
24
+ * Returns a specific builder to create a funds token transfer transaction
25
+ */
26
+ getTokenTransferBuilder(tx) {
27
+ return this.initializeBuilder(tx, new tokenTransferBuilder_1.TokenTransferBuilder(this._coinConfig));
28
+ }
29
+ /**
30
+ * Returns a builder to create a token association transaction
31
+ */
32
+ getTokenAssociateBuilder(tx) {
33
+ return this.initializeBuilder(tx, new tokenAssociateBuilder_1.TokenAssociateBuilder(this._coinConfig));
34
+ }
35
+ /** @inheritDoc */
36
+ from(raw) {
37
+ this.validateRawTransaction(raw);
38
+ const tx = this.parseRawTransaction(raw);
39
+ switch (tx.type) {
40
+ case sdk_core_1.TransactionType.Send:
41
+ return (0, utils_1.isTokenTransfer)(tx.txBody.cryptoTransfer)
42
+ ? this.getTokenTransferBuilder(tx)
43
+ : this.getTransferBuilder(tx);
44
+ case sdk_core_1.TransactionType.WalletInitialization:
45
+ return this.getWalletInitializationBuilder(tx);
46
+ case sdk_core_1.TransactionType.AssociatedTokenAccountInitialization:
47
+ return this.getTokenAssociateBuilder(tx);
48
+ default:
49
+ throw new sdk_core_1.InvalidTransactionError('Invalid transaction ' + tx.txBody.data);
50
+ }
51
+ }
52
+ /**
53
+ * Initialize the builder with the given transaction
54
+ *
55
+ * @param {Transaction | undefined} tx - the transaction used to initialize the builder
56
+ * @param {TransactionBuilder} builder - the builder to be initialized
57
+ * @returns {TransactionBuilder} the builder initialized
58
+ */
59
+ initializeBuilder(tx, builder) {
60
+ if (tx) {
61
+ builder.initBuilder(tx);
62
+ }
63
+ return builder;
64
+ }
65
+ /**
66
+ * Returns a transaction instance from the encoded value
67
+ *
68
+ * @param {Uint8Array | string} rawTransaction - encoded transaction
69
+ * @returns {Transaction} the parsed transaction instance
70
+ */
71
+ parseRawTransaction(rawTransaction) {
72
+ const tx = new transaction_1.Transaction(this._coinConfig);
73
+ tx.fromRawTransaction(rawTransaction);
74
+ return tx;
75
+ }
76
+ /**
77
+ * Check the raw transaction has a valid format in the blockchain context, throw otherwise.
78
+ *
79
+ * @param {any} rawTransaction - Transaction in any format
80
+ */
81
+ validateRawTransaction(rawTransaction) {
82
+ if (!(0, utils_1.isValidRawTransactionFormat)(rawTransaction)) {
83
+ throw new sdk_core_1.ParseTransactionError('Invalid raw transaction');
84
+ }
85
+ }
86
+ }
87
+ exports.TransactionBuilderFactory = TransactionBuilderFactory;
88
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvdHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSxtREFLOEI7QUFDOUIsK0VBQTRFO0FBQzVFLCtEQUE0RDtBQUU1RCwrQ0FBNEM7QUFDNUMsbUNBQXVFO0FBQ3ZFLG1FQUFnRTtBQUNoRSxpRUFBOEQ7QUFFOUQsTUFBYSx5QkFBMEIsU0FBUSx3Q0FBNkI7SUFDMUUsWUFBWSxXQUFpQztRQUMzQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDckIsQ0FBQztJQUVELGtCQUFrQjtJQUNsQiw4QkFBOEIsQ0FBQyxFQUFnQjtRQUM3QyxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLEVBQUUsSUFBSSx5REFBMkIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUN2RixDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLGtCQUFrQixDQUFDLEVBQWdCO1FBQ2pDLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsRUFBRSxJQUFJLHlDQUFtQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQy9FLENBQUM7SUFFRDs7T0FFRztJQUNILHVCQUF1QixDQUFDLEVBQWdCO1FBQ3RDLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsRUFBRSxJQUFJLDJDQUFvQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQ2hGLENBQUM7SUFFRDs7T0FFRztJQUNILHdCQUF3QixDQUFDLEVBQWdCO1FBQ3ZDLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsRUFBRSxJQUFJLDZDQUFxQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQ2pGLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsSUFBSSxDQUFDLEdBQXdCO1FBQzNCLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNqQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDekMsUUFBUSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDaEIsS0FBSywwQkFBZSxDQUFDLElBQUk7Z0JBQ3ZCLE9BQU8sSUFBQSx1QkFBZSxFQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsY0FBZSxDQUFDO29CQUMvQyxDQUFDLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEVBQUUsQ0FBQztvQkFDbEMsQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNsQyxLQUFLLDBCQUFlLENBQUMsb0JBQW9CO2dCQUN2QyxPQUFPLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNqRCxLQUFLLDBCQUFlLENBQUMsb0NBQW9DO2dCQUN2RCxPQUFPLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMzQztnQkFDRSxNQUFNLElBQUksa0NBQXVCLENBQUMsc0JBQXNCLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvRSxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNLLGlCQUFpQixDQUErQixFQUEyQixFQUFFLE9BQVU7UUFDN0YsSUFBSSxFQUFFLEVBQUUsQ0FBQztZQUNQLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDMUIsQ0FBQztRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNLLG1CQUFtQixDQUFDLGNBQW1DO1FBQzdELE1BQU0sRUFBRSxHQUFHLElBQUkseUJBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDN0MsRUFBRSxDQUFDLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3RDLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxzQkFBc0IsQ0FBQyxjQUFtQztRQUNoRSxJQUFJLENBQUMsSUFBQSxtQ0FBMkIsRUFBQyxjQUFjLENBQUMsRUFBRSxDQUFDO1lBQ2pELE1BQU0sSUFBSSxnQ0FBcUIsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQzdELENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUFuRkQsOERBbUZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHtcbiAgQmFzZVRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnksXG4gIEludmFsaWRUcmFuc2FjdGlvbkVycm9yLFxuICBQYXJzZVRyYW5zYWN0aW9uRXJyb3IsXG4gIFRyYW5zYWN0aW9uVHlwZSxcbn0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgV2FsbGV0SW5pdGlhbGl6YXRpb25CdWlsZGVyIH0gZnJvbSAnLi93YWxsZXRJbml0aWFsaXphdGlvbkJ1aWxkZXInO1xuaW1wb3J0IHsgQ29pblRyYW5zZmVyQnVpbGRlciB9IGZyb20gJy4vY29pblRyYW5zZmVyQnVpbGRlcic7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkJ1aWxkZXIgfSBmcm9tICcuL3RyYW5zYWN0aW9uQnVpbGRlcic7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgaXNUb2tlblRyYW5zZmVyLCBpc1ZhbGlkUmF3VHJhbnNhY3Rpb25Gb3JtYXQgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IFRva2VuQXNzb2NpYXRlQnVpbGRlciB9IGZyb20gJy4vdG9rZW5Bc3NvY2lhdGVCdWlsZGVyJztcbmltcG9ydCB7IFRva2VuVHJhbnNmZXJCdWlsZGVyIH0gZnJvbSAnLi90b2tlblRyYW5zZmVyQnVpbGRlcic7XG5cbmV4cG9ydCBjbGFzcyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5IGV4dGVuZHMgQmFzZVRyYW5zYWN0aW9uQnVpbGRlckZhY3Rvcnkge1xuICBjb25zdHJ1Y3RvcihfY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihfY29pbkNvbmZpZyk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgZ2V0V2FsbGV0SW5pdGlhbGl6YXRpb25CdWlsZGVyKHR4PzogVHJhbnNhY3Rpb24pOiBXYWxsZXRJbml0aWFsaXphdGlvbkJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLmluaXRpYWxpemVCdWlsZGVyKHR4LCBuZXcgV2FsbGV0SW5pdGlhbGl6YXRpb25CdWlsZGVyKHRoaXMuX2NvaW5Db25maWcpKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBnZXRUcmFuc2ZlckJ1aWxkZXIodHg/OiBUcmFuc2FjdGlvbik6IENvaW5UcmFuc2ZlckJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLmluaXRpYWxpemVCdWlsZGVyKHR4LCBuZXcgQ29pblRyYW5zZmVyQnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIHNwZWNpZmljIGJ1aWxkZXIgdG8gY3JlYXRlIGEgZnVuZHMgdG9rZW4gdHJhbnNmZXIgdHJhbnNhY3Rpb25cbiAgICovXG4gIGdldFRva2VuVHJhbnNmZXJCdWlsZGVyKHR4PzogVHJhbnNhY3Rpb24pOiBUb2tlblRyYW5zZmVyQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuaW5pdGlhbGl6ZUJ1aWxkZXIodHgsIG5ldyBUb2tlblRyYW5zZmVyQnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGJ1aWxkZXIgdG8gY3JlYXRlIGEgdG9rZW4gYXNzb2NpYXRpb24gdHJhbnNhY3Rpb25cbiAgICovXG4gIGdldFRva2VuQXNzb2NpYXRlQnVpbGRlcih0eD86IFRyYW5zYWN0aW9uKTogVG9rZW5Bc3NvY2lhdGVCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5pbml0aWFsaXplQnVpbGRlcih0eCwgbmV3IFRva2VuQXNzb2NpYXRlQnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKSk7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgZnJvbShyYXc6IFVpbnQ4QXJyYXkgfCBzdHJpbmcpOiBUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICAgIHRoaXMudmFsaWRhdGVSYXdUcmFuc2FjdGlvbihyYXcpO1xuICAgIGNvbnN0IHR4ID0gdGhpcy5wYXJzZVJhd1RyYW5zYWN0aW9uKHJhdyk7XG4gICAgc3dpdGNoICh0eC50eXBlKSB7XG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5TZW5kOlxuICAgICAgICByZXR1cm4gaXNUb2tlblRyYW5zZmVyKHR4LnR4Qm9keS5jcnlwdG9UcmFuc2ZlciEpXG4gICAgICAgICAgPyB0aGlzLmdldFRva2VuVHJhbnNmZXJCdWlsZGVyKHR4KVxuICAgICAgICAgIDogdGhpcy5nZXRUcmFuc2ZlckJ1aWxkZXIodHgpO1xuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuV2FsbGV0SW5pdGlhbGl6YXRpb246XG4gICAgICAgIHJldHVybiB0aGlzLmdldFdhbGxldEluaXRpYWxpemF0aW9uQnVpbGRlcih0eCk7XG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5Bc3NvY2lhdGVkVG9rZW5BY2NvdW50SW5pdGlhbGl6YXRpb246XG4gICAgICAgIHJldHVybiB0aGlzLmdldFRva2VuQXNzb2NpYXRlQnVpbGRlcih0eCk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgdHJhbnNhY3Rpb24gJyArIHR4LnR4Qm9keS5kYXRhKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSB0aGUgYnVpbGRlciB3aXRoIHRoZSBnaXZlbiB0cmFuc2FjdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge1RyYW5zYWN0aW9uIHwgdW5kZWZpbmVkfSB0eCAtIHRoZSB0cmFuc2FjdGlvbiB1c2VkIHRvIGluaXRpYWxpemUgdGhlIGJ1aWxkZXJcbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvbkJ1aWxkZXJ9IGJ1aWxkZXIgLSB0aGUgYnVpbGRlciB0byBiZSBpbml0aWFsaXplZFxuICAgKiBAcmV0dXJucyB7VHJhbnNhY3Rpb25CdWlsZGVyfSB0aGUgYnVpbGRlciBpbml0aWFsaXplZFxuICAgKi9cbiAgcHJpdmF0ZSBpbml0aWFsaXplQnVpbGRlcjxUIGV4dGVuZHMgVHJhbnNhY3Rpb25CdWlsZGVyPih0eDogVHJhbnNhY3Rpb24gfCB1bmRlZmluZWQsIGJ1aWxkZXI6IFQpOiBUIHtcbiAgICBpZiAodHgpIHtcbiAgICAgIGJ1aWxkZXIuaW5pdEJ1aWxkZXIodHgpO1xuICAgIH1cbiAgICByZXR1cm4gYnVpbGRlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgdHJhbnNhY3Rpb24gaW5zdGFuY2UgZnJvbSB0aGUgZW5jb2RlZCB2YWx1ZVxuICAgKlxuICAgKiBAcGFyYW0ge1VpbnQ4QXJyYXkgfCBzdHJpbmd9IHJhd1RyYW5zYWN0aW9uIC0gZW5jb2RlZCB0cmFuc2FjdGlvblxuICAgKiBAcmV0dXJucyB7VHJhbnNhY3Rpb259IHRoZSBwYXJzZWQgdHJhbnNhY3Rpb24gaW5zdGFuY2VcbiAgICovXG4gIHByaXZhdGUgcGFyc2VSYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbjogVWludDhBcnJheSB8IHN0cmluZyk6IFRyYW5zYWN0aW9uIHtcbiAgICBjb25zdCB0eCA9IG5ldyBUcmFuc2FjdGlvbih0aGlzLl9jb2luQ29uZmlnKTtcbiAgICB0eC5mcm9tUmF3VHJhbnNhY3Rpb24ocmF3VHJhbnNhY3Rpb24pO1xuICAgIHJldHVybiB0eDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB0aGUgcmF3IHRyYW5zYWN0aW9uIGhhcyBhIHZhbGlkIGZvcm1hdCBpbiB0aGUgYmxvY2tjaGFpbiBjb250ZXh0LCB0aHJvdyBvdGhlcndpc2UuXG4gICAqXG4gICAqIEBwYXJhbSB7YW55fSByYXdUcmFuc2FjdGlvbiAtIFRyYW5zYWN0aW9uIGluIGFueSBmb3JtYXRcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVSYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbjogVWludDhBcnJheSB8IHN0cmluZykge1xuICAgIGlmICghaXNWYWxpZFJhd1RyYW5zYWN0aW9uRm9ybWF0KHJhd1RyYW5zYWN0aW9uKSkge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCByYXcgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,24 @@
1
+ import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
2
+ import { proto } from '@hashgraph/proto';
3
+ import { BaseKey } from '@bitgo-beta/sdk-core';
4
+ import { Recipient } from './iface';
5
+ import { TransactionBuilder } from './transactionBuilder';
6
+ import { Transaction } from './transaction';
7
+ export declare class TransferBuilder extends TransactionBuilder {
8
+ protected readonly _txBodyData: proto.CryptoTransferTransactionBody;
9
+ protected _recipients: Recipient[];
10
+ constructor(_coinConfig: Readonly<CoinConfig>);
11
+ /** @inheritdoc */
12
+ protected buildImplementation(): Promise<Transaction>;
13
+ /** @inheritdoc */
14
+ protected signImplementation(key: BaseKey): Transaction;
15
+ /**
16
+ * Set the recipient to be transferred
17
+ *
18
+ * @param {Recipient} recipient - recipient to transfer consisting destination address and amount
19
+ * @returns {TransferBuilder} - The builder with the new parameter set
20
+ */
21
+ send(recipient: Recipient): this;
22
+ validateMandatoryFields(): void;
23
+ }
24
+ //# sourceMappingURL=transferBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transferBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/transferBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EACL,OAAO,EAKR,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAI5C,qBAAa,eAAgB,SAAQ,kBAAkB;IACrD,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC,6BAA6B,CAAC;IACpE,SAAS,CAAC,WAAW,EAAE,SAAS,EAAE,CAAC;gBAEvB,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAO7C,kBAAkB;cACF,mBAAmB,IAAI,OAAO,CAAC,WAAW,CAAC;IAK3D,kBAAkB;IAClB,SAAS,CAAC,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,WAAW;IAQvD;;;;;OAKG;IACH,IAAI,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAahC,uBAAuB,IAAI,IAAI;CAOhC"}
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TransferBuilder = void 0;
4
+ const proto_1 = require("@hashgraph/proto");
5
+ const sdk_core_1 = require("@bitgo-beta/sdk-core");
6
+ const transactionBuilder_1 = require("./transactionBuilder");
7
+ const utils_1 = require("./utils");
8
+ const constants_1 = require("./constants");
9
+ class TransferBuilder extends transactionBuilder_1.TransactionBuilder {
10
+ constructor(_coinConfig) {
11
+ super(_coinConfig);
12
+ this._txBodyData = new proto_1.proto.CryptoTransferTransactionBody();
13
+ this._txBody.cryptoTransfer = this._txBodyData;
14
+ this._recipients = [];
15
+ }
16
+ /** @inheritdoc */
17
+ async buildImplementation() {
18
+ this.transaction.setTransactionType(sdk_core_1.TransactionType.Send);
19
+ return await super.buildImplementation();
20
+ }
21
+ /** @inheritdoc */
22
+ signImplementation(key) {
23
+ if (this._multiSignerKeyPairs.length >= constants_1.DEFAULT_SIGNER_NUMBER) {
24
+ throw new sdk_core_1.SigningError('A maximum of ' + constants_1.DEFAULT_SIGNER_NUMBER + ' can sign the transaction.');
25
+ }
26
+ return super.signImplementation(key);
27
+ }
28
+ // region Transfer fields
29
+ /**
30
+ * Set the recipient to be transferred
31
+ *
32
+ * @param {Recipient} recipient - recipient to transfer consisting destination address and amount
33
+ * @returns {TransferBuilder} - The builder with the new parameter set
34
+ */
35
+ send(recipient) {
36
+ if (!(0, utils_1.isValidAddress)(recipient.address)) {
37
+ throw new sdk_core_1.InvalidParameterValueError('Invalid address');
38
+ }
39
+ if (!(0, utils_1.isValidAmount)(recipient.amount)) {
40
+ throw new sdk_core_1.InvalidParameterValueError('Invalid amount');
41
+ }
42
+ this._recipients.push(recipient);
43
+ return this;
44
+ }
45
+ // endregion
46
+ // region Validators
47
+ validateMandatoryFields() {
48
+ if (this._recipients.length === 0) {
49
+ throw new sdk_core_1.BuildTransactionError('Invalid transaction: missing recipients');
50
+ }
51
+ super.validateMandatoryFields();
52
+ }
53
+ }
54
+ exports.TransferBuilder = TransferBuilder;
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmZXJCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90cmFuc2ZlckJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsNENBQXlDO0FBQ3pDLG1EQU04QjtBQUU5Qiw2REFBMEQ7QUFFMUQsbUNBQXdEO0FBQ3hELDJDQUFvRDtBQUVwRCxNQUFhLGVBQWdCLFNBQVEsdUNBQWtCO0lBSXJELFlBQVksV0FBaUM7UUFDM0MsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ25CLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxhQUFLLENBQUMsNkJBQTZCLEVBQUUsQ0FBQztRQUM3RCxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQy9DLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxrQkFBa0I7SUFDUixLQUFLLENBQUMsbUJBQW1CO1FBQ2pDLElBQUksQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUMsMEJBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxRCxPQUFPLE1BQU0sS0FBSyxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDM0MsQ0FBQztJQUVELGtCQUFrQjtJQUNSLGtCQUFrQixDQUFDLEdBQVk7UUFDdkMsSUFBSSxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxJQUFJLGlDQUFxQixFQUFFLENBQUM7WUFDOUQsTUFBTSxJQUFJLHVCQUFZLENBQUMsZUFBZSxHQUFHLGlDQUFxQixHQUFHLDRCQUE0QixDQUFDLENBQUM7UUFDakcsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCx5QkFBeUI7SUFDekI7Ozs7O09BS0c7SUFDSCxJQUFJLENBQUMsU0FBb0I7UUFDdkIsSUFBSSxDQUFDLElBQUEsc0JBQWMsRUFBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUN2QyxNQUFNLElBQUkscUNBQTBCLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUMxRCxDQUFDO1FBQ0QsSUFBSSxDQUFDLElBQUEscUJBQWEsRUFBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNyQyxNQUFNLElBQUkscUNBQTBCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUN6RCxDQUFDO1FBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDakMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBQ0QsWUFBWTtJQUVaLG9CQUFvQjtJQUNwQix1QkFBdUI7UUFDckIsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNsQyxNQUFNLElBQUksZ0NBQXFCLENBQUMseUNBQXlDLENBQUMsQ0FBQztRQUM3RSxDQUFDO1FBQ0QsS0FBSyxDQUFDLHVCQUF1QixFQUFFLENBQUM7SUFDbEMsQ0FBQztDQUVGO0FBcERELDBDQW9EQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IHByb3RvIH0gZnJvbSAnQGhhc2hncmFwaC9wcm90byc7XG5pbXBvcnQge1xuICBCYXNlS2V5LFxuICBCdWlsZFRyYW5zYWN0aW9uRXJyb3IsXG4gIEludmFsaWRQYXJhbWV0ZXJWYWx1ZUVycm9yLFxuICBTaWduaW5nRXJyb3IsXG4gIFRyYW5zYWN0aW9uVHlwZSxcbn0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgUmVjaXBpZW50IH0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkJ1aWxkZXIgfSBmcm9tICcuL3RyYW5zYWN0aW9uQnVpbGRlcic7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgaXNWYWxpZEFkZHJlc3MsIGlzVmFsaWRBbW91bnQgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IERFRkFVTFRfU0lHTkVSX05VTUJFUiB9IGZyb20gJy4vY29uc3RhbnRzJztcblxuZXhwb3J0IGNsYXNzIFRyYW5zZmVyQnVpbGRlciBleHRlbmRzIFRyYW5zYWN0aW9uQnVpbGRlciB7XG4gIHByb3RlY3RlZCByZWFkb25seSBfdHhCb2R5RGF0YTogcHJvdG8uQ3J5cHRvVHJhbnNmZXJUcmFuc2FjdGlvbkJvZHk7XG4gIHByb3RlY3RlZCBfcmVjaXBpZW50czogUmVjaXBpZW50W107XG5cbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICAgIHRoaXMuX3R4Qm9keURhdGEgPSBuZXcgcHJvdG8uQ3J5cHRvVHJhbnNmZXJUcmFuc2FjdGlvbkJvZHkoKTtcbiAgICB0aGlzLl90eEJvZHkuY3J5cHRvVHJhbnNmZXIgPSB0aGlzLl90eEJvZHlEYXRhO1xuICAgIHRoaXMuX3JlY2lwaWVudHMgPSBbXTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgYnVpbGRJbXBsZW1lbnRhdGlvbigpOiBQcm9taXNlPFRyYW5zYWN0aW9uPiB7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5zZXRUcmFuc2FjdGlvblR5cGUoVHJhbnNhY3Rpb25UeXBlLlNlbmQpO1xuICAgIHJldHVybiBhd2FpdCBzdXBlci5idWlsZEltcGxlbWVudGF0aW9uKCk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIHNpZ25JbXBsZW1lbnRhdGlvbihrZXk6IEJhc2VLZXkpOiBUcmFuc2FjdGlvbiB7XG4gICAgaWYgKHRoaXMuX211bHRpU2lnbmVyS2V5UGFpcnMubGVuZ3RoID49IERFRkFVTFRfU0lHTkVSX05VTUJFUikge1xuICAgICAgdGhyb3cgbmV3IFNpZ25pbmdFcnJvcignQSBtYXhpbXVtIG9mICcgKyBERUZBVUxUX1NJR05FUl9OVU1CRVIgKyAnIGNhbiBzaWduIHRoZSB0cmFuc2FjdGlvbi4nKTtcbiAgICB9XG4gICAgcmV0dXJuIHN1cGVyLnNpZ25JbXBsZW1lbnRhdGlvbihrZXkpO1xuICB9XG5cbiAgLy8gcmVnaW9uIFRyYW5zZmVyIGZpZWxkc1xuICAvKipcbiAgICogU2V0IHRoZSByZWNpcGllbnQgdG8gYmUgdHJhbnNmZXJyZWRcbiAgICpcbiAgICogQHBhcmFtIHtSZWNpcGllbnR9IHJlY2lwaWVudCAtIHJlY2lwaWVudCB0byB0cmFuc2ZlciBjb25zaXN0aW5nIGRlc3RpbmF0aW9uIGFkZHJlc3MgYW5kIGFtb3VudFxuICAgKiBAcmV0dXJucyB7VHJhbnNmZXJCdWlsZGVyfSAtIFRoZSBidWlsZGVyIHdpdGggdGhlIG5ldyBwYXJhbWV0ZXIgc2V0XG4gICAqL1xuICBzZW5kKHJlY2lwaWVudDogUmVjaXBpZW50KTogdGhpcyB7XG4gICAgaWYgKCFpc1ZhbGlkQWRkcmVzcyhyZWNpcGllbnQuYWRkcmVzcykpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkUGFyYW1ldGVyVmFsdWVFcnJvcignSW52YWxpZCBhZGRyZXNzJyk7XG4gICAgfVxuICAgIGlmICghaXNWYWxpZEFtb3VudChyZWNpcGllbnQuYW1vdW50KSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRQYXJhbWV0ZXJWYWx1ZUVycm9yKCdJbnZhbGlkIGFtb3VudCcpO1xuICAgIH1cbiAgICB0aGlzLl9yZWNpcGllbnRzLnB1c2gocmVjaXBpZW50KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICAvLyBlbmRyZWdpb25cblxuICAvLyByZWdpb24gVmFsaWRhdG9yc1xuICB2YWxpZGF0ZU1hbmRhdG9yeUZpZWxkcygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fcmVjaXBpZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgdHJhbnNhY3Rpb246IG1pc3NpbmcgcmVjaXBpZW50cycpO1xuICAgIH1cbiAgICBzdXBlci52YWxpZGF0ZU1hbmRhdG9yeUZpZWxkcygpO1xuICB9XG4gIC8vIGVuZHJlZ2lvblxufVxuIl19