@bitgo/account-lib 2.20.0-rc.22 → 2.20.0-rc.23

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 (106) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/src/coin/algo/assetTransferBuilder.d.ts +42 -0
  3. package/dist/src/coin/algo/assetTransferBuilder.d.ts.map +1 -0
  4. package/dist/src/coin/algo/assetTransferBuilder.js +105 -0
  5. package/dist/src/coin/algo/errors.d.ts +11 -0
  6. package/dist/src/coin/algo/errors.d.ts.map +1 -0
  7. package/dist/src/coin/algo/errors.js +27 -0
  8. package/dist/src/coin/algo/ifaces.d.ts +46 -0
  9. package/dist/src/coin/algo/ifaces.d.ts.map +1 -0
  10. package/dist/src/coin/algo/ifaces.js +3 -0
  11. package/dist/src/coin/algo/index.d.ts +13 -0
  12. package/dist/src/coin/algo/index.d.ts.map +1 -0
  13. package/dist/src/coin/algo/index.js +47 -0
  14. package/dist/src/coin/algo/keyPair.d.ts +25 -0
  15. package/dist/src/coin/algo/keyPair.d.ts.map +1 -0
  16. package/dist/src/coin/algo/keyPair.js +77 -0
  17. package/dist/src/coin/algo/keyRegistrationBuilder.d.ts +104 -0
  18. package/dist/src/coin/algo/keyRegistrationBuilder.d.ts.map +1 -0
  19. package/dist/src/coin/algo/keyRegistrationBuilder.js +239 -0
  20. package/dist/src/coin/algo/seedEncoding.d.ts +25 -0
  21. package/dist/src/coin/algo/seedEncoding.d.ts.map +1 -0
  22. package/dist/src/coin/algo/seedEncoding.js +97 -0
  23. package/dist/src/coin/algo/transaction.d.ts +75 -0
  24. package/dist/src/coin/algo/transaction.d.ts.map +1 -0
  25. package/dist/src/coin/algo/transaction.js +251 -0
  26. package/dist/src/coin/algo/transactionBuilder.d.ts +204 -0
  27. package/dist/src/coin/algo/transactionBuilder.d.ts.map +1 -0
  28. package/dist/src/coin/algo/transactionBuilder.js +373 -0
  29. package/dist/src/coin/algo/transactionBuilderFactory.d.ts +16 -0
  30. package/dist/src/coin/algo/transactionBuilderFactory.d.ts.map +1 -0
  31. package/dist/src/coin/algo/transactionBuilderFactory.js +52 -0
  32. package/dist/src/coin/algo/transferBuilder.d.ts +40 -0
  33. package/dist/src/coin/algo/transferBuilder.d.ts.map +1 -0
  34. package/dist/src/coin/algo/transferBuilder.js +89 -0
  35. package/dist/src/coin/algo/txnSchema.d.ts +7 -0
  36. package/dist/src/coin/algo/txnSchema.d.ts.map +1 -0
  37. package/dist/src/coin/algo/txnSchema.js +68 -0
  38. package/dist/src/coin/algo/utils.d.ts +249 -0
  39. package/dist/src/coin/algo/utils.d.ts.map +1 -0
  40. package/dist/src/coin/algo/utils.js +539 -0
  41. package/dist/src/coin/cspr/constants.d.ts +19 -0
  42. package/dist/src/coin/cspr/constants.d.ts.map +1 -0
  43. package/dist/src/coin/cspr/constants.js +28 -0
  44. package/dist/src/coin/cspr/delegateBuilder.d.ts +49 -0
  45. package/dist/src/coin/cspr/delegateBuilder.d.ts.map +1 -0
  46. package/dist/src/coin/cspr/delegateBuilder.js +111 -0
  47. package/dist/src/coin/cspr/ifaces.d.ts +69 -0
  48. package/dist/src/coin/cspr/ifaces.d.ts.map +1 -0
  49. package/dist/src/coin/cspr/ifaces.js +3 -0
  50. package/dist/src/coin/cspr/index.d.ts +6 -0
  51. package/dist/src/coin/cspr/index.d.ts.map +1 -0
  52. package/dist/src/coin/cspr/index.js +31 -0
  53. package/dist/src/coin/cspr/keyPair.d.ts +18 -0
  54. package/dist/src/coin/cspr/keyPair.d.ts.map +1 -0
  55. package/dist/src/coin/cspr/keyPair.js +75 -0
  56. package/dist/src/coin/cspr/transaction.d.ts +55 -0
  57. package/dist/src/coin/cspr/transaction.d.ts.map +1 -0
  58. package/dist/src/coin/cspr/transaction.js +227 -0
  59. package/dist/src/coin/cspr/transactionBuilder.d.ts +124 -0
  60. package/dist/src/coin/cspr/transactionBuilder.d.ts.map +1 -0
  61. package/dist/src/coin/cspr/transactionBuilder.js +312 -0
  62. package/dist/src/coin/cspr/transactionBuilderFactory.d.ts +46 -0
  63. package/dist/src/coin/cspr/transactionBuilderFactory.d.ts.map +1 -0
  64. package/dist/src/coin/cspr/transactionBuilderFactory.js +98 -0
  65. package/dist/src/coin/cspr/transferBuilder.d.ts +39 -0
  66. package/dist/src/coin/cspr/transferBuilder.d.ts.map +1 -0
  67. package/dist/src/coin/cspr/transferBuilder.js +106 -0
  68. package/dist/src/coin/cspr/undelegateBuilder.d.ts +49 -0
  69. package/dist/src/coin/cspr/undelegateBuilder.d.ts.map +1 -0
  70. package/dist/src/coin/cspr/undelegateBuilder.js +111 -0
  71. package/dist/src/coin/cspr/utils.d.ts +188 -0
  72. package/dist/src/coin/cspr/utils.d.ts.map +1 -0
  73. package/dist/src/coin/cspr/utils.js +477 -0
  74. package/dist/src/coin/cspr/walletInitializationBuilder.d.ts +27 -0
  75. package/dist/src/coin/cspr/walletInitializationBuilder.d.ts.map +1 -0
  76. package/dist/src/coin/cspr/walletInitializationBuilder.js +95 -0
  77. package/dist/src/coin/hbar/iface.d.ts +26 -0
  78. package/dist/src/coin/hbar/iface.d.ts.map +1 -0
  79. package/dist/src/coin/hbar/iface.js +3 -0
  80. package/dist/src/coin/hbar/transaction.d.ts +14 -21
  81. package/dist/src/coin/hbar/transaction.d.ts.map +1 -1
  82. package/dist/src/coin/hbar/transaction.js +24 -34
  83. package/dist/src/coin/hbar/transactionBuilder.d.ts +22 -22
  84. package/dist/src/coin/hbar/transactionBuilder.d.ts.map +1 -1
  85. package/dist/src/coin/hbar/transactionBuilder.js +49 -29
  86. package/dist/src/coin/hbar/transferBuilder.d.ts +9 -9
  87. package/dist/src/coin/hbar/transferBuilder.d.ts.map +1 -1
  88. package/dist/src/coin/hbar/transferBuilder.js +16 -13
  89. package/dist/src/coin/hbar/utils.d.ts +47 -43
  90. package/dist/src/coin/hbar/utils.d.ts.map +1 -1
  91. package/dist/src/coin/hbar/utils.js +51 -49
  92. package/dist/src/coin/hbar/walletInitializationBuilder.d.ts +5 -5
  93. package/dist/src/coin/hbar/walletInitializationBuilder.d.ts.map +1 -1
  94. package/dist/src/coin/hbar/walletInitializationBuilder.js +30 -10
  95. package/dist/tsconfig.tsbuildinfo +3344 -1391
  96. package/package.json +7 -9
  97. package/resources/hbar/protobuf/BasicTypes.proto +0 -424
  98. package/resources/hbar/protobuf/CryptoCreate.proto +0 -47
  99. package/resources/hbar/protobuf/CryptoTransfer.proto +0 -33
  100. package/resources/hbar/protobuf/Duration.proto +0 -28
  101. package/resources/hbar/protobuf/Timestamp.proto +0 -34
  102. package/resources/hbar/protobuf/Transaction.proto +0 -35
  103. package/resources/hbar/protobuf/TransactionBody.proto +0 -24
  104. package/resources/hbar/protobuf/TransactionContents.proto +0 -33
  105. package/resources/hbar/protobuf/hedera.d.ts +0 -4612
  106. package/resources/hbar/protobuf/hedera.js +0 -12192
@@ -0,0 +1,312 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.TransactionBuilder = exports.DEFAULT_N = exports.DEFAULT_M = void 0;
7
+ const bignumber_js_1 = __importDefault(require("bignumber.js"));
8
+ const casper_js_sdk_1 = require("casper-js-sdk");
9
+ const lodash_1 = __importDefault(require("lodash"));
10
+ const sdk_core_1 = require("@bitgo/sdk-core");
11
+ const transaction_1 = require("./transaction");
12
+ const keyPair_1 = require("./keyPair");
13
+ const utils_1 = require("./utils");
14
+ const constants_1 = require("./constants");
15
+ exports.DEFAULT_M = 3;
16
+ exports.DEFAULT_N = 2;
17
+ class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
18
+ constructor(_coinConfig) {
19
+ super(_coinConfig);
20
+ this.transaction = new transaction_1.Transaction(_coinConfig);
21
+ this._multiSignerKeyPairs = [];
22
+ this._signatures = [];
23
+ this._chainName = this.coinName() === 'cspr' ? constants_1.DEFAULT_CHAIN_NAMES.mainnet : constants_1.DEFAULT_CHAIN_NAMES.testnet;
24
+ }
25
+ // region Base Builder
26
+ /** @inheritdoc */
27
+ async buildImplementation() {
28
+ const deployParams = this.getDeployParams();
29
+ const session = this.getSession();
30
+ const payment = casper_js_sdk_1.DeployUtil.standardPayment(lodash_1.default.parseInt(this._fee.gasLimit));
31
+ let cTransaction = this.transaction.casperTx || casper_js_sdk_1.DeployUtil.makeDeploy(deployParams, session, payment);
32
+ // Cannot add arguments to an already signed deploy.
33
+ if (cTransaction.approvals.length === 0) {
34
+ this._session.extraArguments.forEach((extraArgument, extraArgumentName) => {
35
+ if (!cTransaction.session.getArgByName(extraArgumentName)) {
36
+ cTransaction = casper_js_sdk_1.DeployUtil.addArgToDeploy(cTransaction, extraArgumentName, extraArgument);
37
+ }
38
+ });
39
+ }
40
+ this.transaction.casperTx = cTransaction;
41
+ this.processSigning();
42
+ return this.transaction;
43
+ }
44
+ /** @inheritdoc */
45
+ fromImplementation(rawTransaction) {
46
+ const tx = new transaction_1.Transaction(this._coinConfig);
47
+ const jsonTransaction = JSON.parse(rawTransaction);
48
+ tx.casperTx = casper_js_sdk_1.DeployUtil.deployFromJson(jsonTransaction).unwrap();
49
+ this.initBuilder(tx);
50
+ return this.transaction;
51
+ }
52
+ /** @inheritdoc */
53
+ signImplementation(key) {
54
+ this.checkDuplicatedKeys(key);
55
+ const signer = new keyPair_1.KeyPair({ prv: key.key });
56
+ // Signing the transaction is an operation that relies on all the data being set,
57
+ // so we set the source here and leave the actual signing for the build step
58
+ this._multiSignerKeyPairs.push(signer);
59
+ return this.transaction;
60
+ }
61
+ /**
62
+ * Initialize the transaction builder fields using the decoded transaction data
63
+ *
64
+ * @param {Transaction} tx the transaction data
65
+ */
66
+ initBuilder(tx) {
67
+ this.transaction = tx;
68
+ this.transaction.loadPreviousSignatures();
69
+ const txData = tx.toJson();
70
+ this.fee(txData.fee);
71
+ this.source({ address: txData.from });
72
+ this.expiration(txData.expiration || constants_1.TRANSACTION_EXPIRATION);
73
+ }
74
+ // endregion
75
+ // region Common builder methods
76
+ /**
77
+ * Set the transaction fees
78
+ *
79
+ * @param {BaseFee} fee The maximum gas to pay
80
+ * @returns {TransactionBuilder} This transaction builder
81
+ */
82
+ fee(fee) {
83
+ this.validateValue(new bignumber_js_1.default(fee.gasLimit));
84
+ this._fee = fee;
85
+ return this;
86
+ }
87
+ /**
88
+ * Set the transaction source
89
+ *
90
+ * @param {BaseAddress} address The source account
91
+ * @returns {TransactionBuilder} This transaction builder
92
+ */
93
+ source(address) {
94
+ this.validateAddress(address);
95
+ this._source = address;
96
+ return this;
97
+ }
98
+ /**
99
+ * Set the transaction expirationTime
100
+ *
101
+ * @param {string} expirationTime The transaction expirationTime
102
+ * @returns {TransactionBuilder} This transaction builder
103
+ */
104
+ expiration(expirationTime) {
105
+ const transactionExpiration = new bignumber_js_1.default(expirationTime);
106
+ if (transactionExpiration.isNaN() || transactionExpiration.isGreaterThan(constants_1.TRANSACTION_EXPIRATION)) {
107
+ throw new sdk_core_1.BuildTransactionError('Invalid transaction expiration');
108
+ }
109
+ this.validateValue(transactionExpiration);
110
+ this._expiration = transactionExpiration.toNumber();
111
+ return this;
112
+ }
113
+ /**
114
+ * Set an external transaction signature
115
+ *
116
+ * @param {string} signature Hex encoded signature string
117
+ * @param {KeyPair} keyPair The public key keypair that was used to create the signature
118
+ * @returns {TransactionBuilder} This transaction builder
119
+ */
120
+ signature(signature, keyPair) {
121
+ // if we already have a signature for this key pair, just update it
122
+ for (const oldSignature of this._signatures) {
123
+ if (oldSignature.keyPair.getKeys().pub === keyPair.getKeys().pub) {
124
+ oldSignature.signature = signature;
125
+ return this;
126
+ }
127
+ }
128
+ // otherwise add the new signature
129
+ this._signatures.push({ signature, keyPair });
130
+ return this;
131
+ }
132
+ nodeChainName(chainName) {
133
+ this._chainName = chainName;
134
+ return this;
135
+ }
136
+ // endregion
137
+ // region Validators
138
+ /** @inheritdoc */
139
+ validateAddress(address) {
140
+ if (!utils_1.isValidAddress(address.address)) {
141
+ throw new sdk_core_1.BuildTransactionError('Invalid address ' + address.address);
142
+ }
143
+ }
144
+ /** @inheritdoc */
145
+ validateKey(key) {
146
+ if (!new keyPair_1.KeyPair({ prv: key.key })) {
147
+ throw new sdk_core_1.BuildTransactionError('Invalid key');
148
+ }
149
+ }
150
+ /** @inheritdoc */
151
+ validateRawTransaction(rawTransaction) {
152
+ if (!rawTransaction) {
153
+ throw new sdk_core_1.InvalidTransactionError('Raw transaction is empty');
154
+ }
155
+ try {
156
+ casper_js_sdk_1.DeployUtil.deployFromJson(JSON.parse(rawTransaction));
157
+ }
158
+ catch (e) {
159
+ throw new sdk_core_1.ParseTransactionError('There was an error parsing the JSON string');
160
+ }
161
+ }
162
+ /** @inheritdoc */
163
+ validateTransaction(transaction) {
164
+ this.validateMandatoryFields();
165
+ }
166
+ /** @inheritdoc */
167
+ validateValue(value) {
168
+ if (value.isLessThan(0)) {
169
+ throw new sdk_core_1.BuildTransactionError('Value cannot be less than zero');
170
+ }
171
+ }
172
+ /**
173
+ * Validates that the mandatory fields are defined
174
+ */
175
+ validateMandatoryFields() {
176
+ this.validateFee();
177
+ this.validateSource();
178
+ }
179
+ /**
180
+ * Validates that the fee field is defined
181
+ */
182
+ validateFee() {
183
+ if (this._fee === undefined) {
184
+ throw new sdk_core_1.BuildTransactionError('Invalid transaction: missing fee');
185
+ }
186
+ if (!this._fee.gasLimit) {
187
+ throw new sdk_core_1.BuildTransactionError('Invalid transaction: missing gas limit');
188
+ }
189
+ try {
190
+ this.validateValue(new bignumber_js_1.default(this._fee.gasLimit));
191
+ }
192
+ catch (e) {
193
+ throw new sdk_core_1.BuildTransactionError('Invalid gas limit');
194
+ }
195
+ }
196
+ /**
197
+ * Validates that the source field is defined
198
+ */
199
+ validateSource() {
200
+ if (this._source === undefined) {
201
+ throw new sdk_core_1.BuildTransactionError('Invalid transaction: missing source');
202
+ }
203
+ this.validateAddress(this._source);
204
+ }
205
+ /**
206
+ * Validates that the given key is not already in this._multiSignerKeyPairs
207
+ *
208
+ * @param {BaseKey} key - The key to check
209
+ */
210
+ checkDuplicatedKeys(key) {
211
+ this._multiSignerKeyPairs.forEach((_sourceKeyPair) => {
212
+ if (_sourceKeyPair.getKeys().prv === key.key) {
213
+ throw new sdk_core_1.SigningError('Repeated sign: ' + key.key);
214
+ }
215
+ // Try to get extended keys in order to validate them
216
+ let xprv;
217
+ try {
218
+ xprv = _sourceKeyPair.getExtendedKeys().xprv;
219
+ }
220
+ catch (err) {
221
+ return;
222
+ }
223
+ if (xprv && xprv === key.key) {
224
+ throw new sdk_core_1.SigningError('Repeated sign: ' + key.key);
225
+ }
226
+ });
227
+ }
228
+ // endregion
229
+ // region Getters and Setters
230
+ /** @inheritdoc */
231
+ get transaction() {
232
+ return this._transaction;
233
+ }
234
+ /** @inheritdoc */
235
+ set transaction(transaction) {
236
+ this._transaction = transaction;
237
+ }
238
+ /**
239
+ * Get the chain name for the coin environment
240
+ */
241
+ get chainName() {
242
+ return this._chainName;
243
+ }
244
+ // endregion
245
+ // region auxiliaryMethods
246
+ /**
247
+ * Generate a DeployParams instance with the transaction data
248
+ *
249
+ * @returns {DeployUtil.DeployParams}
250
+ */
251
+ getDeployParams() {
252
+ const gasPrice = this._fee.gasPrice ? lodash_1.default.parseInt(this._fee.gasPrice) : undefined;
253
+ return new casper_js_sdk_1.DeployUtil.DeployParams(casper_js_sdk_1.CLPublicKey.fromHex(this._source.address), this._chainName, gasPrice, this._expiration || constants_1.TRANSACTION_EXPIRATION);
254
+ }
255
+ /**
256
+ * Generate the session for the Deploy according to the transactionType.
257
+ *
258
+ * @returns {DeployUtil.ExecutableDeployItem}
259
+ */
260
+ getSession() {
261
+ let session;
262
+ switch (this.transaction.type) {
263
+ case sdk_core_1.TransactionType.Send:
264
+ const transferSession = this._session;
265
+ session = casper_js_sdk_1.DeployUtil.ExecutableDeployItem.newTransferWithOptionalTransferId(transferSession.amount, transferSession.target, undefined, transferSession.id);
266
+ break;
267
+ case sdk_core_1.TransactionType.WalletInitialization:
268
+ case sdk_core_1.TransactionType.StakingLock:
269
+ case sdk_core_1.TransactionType.StakingUnlock:
270
+ const moduleBytesSession = this._session;
271
+ session = casper_js_sdk_1.DeployUtil.ExecutableDeployItem.newModuleBytes(moduleBytesSession.moduleBytes, moduleBytesSession.args);
272
+ break;
273
+ default:
274
+ throw new sdk_core_1.BuildTransactionError('Transaction Type error');
275
+ }
276
+ return session;
277
+ }
278
+ /**
279
+ * Checks whether the transaction has the owner signature
280
+ *
281
+ * @param {string} pub - public key of the signer
282
+ * @returns {boolean} true if the pub key already signed th transaction
283
+ * @private
284
+ */
285
+ isTransactionSignedByPub(pub) {
286
+ return (lodash_1.default.findIndex(this.transaction.casperTx.approvals, (approval) => {
287
+ const approvalSigner = utils_1.removeAlgoPrefixFromHexValue(approval.signer);
288
+ return approvalSigner === pub;
289
+ }) !== -1);
290
+ }
291
+ /**
292
+ * Add signatures to the transaction
293
+ *
294
+ * @private
295
+ */
296
+ processSigning() {
297
+ for (const keyPair of this._multiSignerKeyPairs) {
298
+ // Add signature if it's not already in the deploy
299
+ if (!this.isTransactionSignedByPub(keyPair.getKeys().pub)) {
300
+ this.transaction.sign(keyPair);
301
+ }
302
+ }
303
+ for (const { signature, keyPair } of this._signatures) {
304
+ // Add signature if it's not already in the deploy
305
+ if (!this.isTransactionSignedByPub(keyPair.getKeys().pub)) {
306
+ this.transaction.addSignature(signature, keyPair);
307
+ }
308
+ }
309
+ }
310
+ }
311
+ exports.TransactionBuilder = TransactionBuilder;
312
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvaW4vY3Nwci90cmFuc2FjdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsZ0VBQXFDO0FBRXJDLGlEQUFxRTtBQUNyRSxvREFBdUI7QUFDdkIsOENBU3lCO0FBQ3pCLCtDQUE0QztBQUM1Qyx1Q0FBb0M7QUFRcEMsbUNBQXVFO0FBQ3ZFLDJDQUEwRTtBQUU3RCxRQUFBLFNBQVMsR0FBRyxDQUFDLENBQUM7QUFDZCxRQUFBLFNBQVMsR0FBRyxDQUFDLENBQUM7QUFDM0IsTUFBc0Isa0JBQW1CLFNBQVEsaUNBQXNCO0lBVXJFLFlBQVksV0FBaUM7UUFDM0MsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ25CLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSx5QkFBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQyxvQkFBb0IsR0FBRyxFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQywrQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLCtCQUFtQixDQUFDLE9BQU8sQ0FBQztJQUMzRyxDQUFDO0lBRUQsc0JBQXNCO0lBQ3RCLGtCQUFrQjtJQUNSLEtBQUssQ0FBQyxtQkFBbUI7UUFDakMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzVDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUVsQyxNQUFNLE9BQU8sR0FBRywwQkFBVSxDQUFDLGVBQWUsQ0FBQyxnQkFBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENB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TyxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUN6RCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUNoQztTQUNGO1FBQ0QsS0FBSyxNQUFNLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDckQsa0RBQWtEO1lBQ2xELElBQUksQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUN6RCxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7YUFDbkQ7U0FDRjtJQUNILENBQUM7Q0FFRjtBQWhXRCxnREFnV0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQmlnTnVtYmVyIGZyb20gJ2JpZ251bWJlci5qcyc7XG5pbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvL3N0YXRpY3MnO1xuaW1wb3J0IHsgRGVwbG95VXRpbCwgQ0xQdWJsaWNLZXkgYXMgUHVibGljS2V5IH0gZnJvbSAnY2FzcGVyLWpzLXNkayc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtcbiAgQmFzZUFkZHJlc3MsXG4gIEJhc2VLZXksXG4gIEJhc2VUcmFuc2FjdGlvbkJ1aWxkZXIsXG4gIEJ1aWxkVHJhbnNhY3Rpb25FcnJvcixcbiAgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IsXG4gIFBhcnNlVHJhbnNhY3Rpb25FcnJvcixcbiAgU2lnbmluZ0Vycm9yLFxuICBUcmFuc2FjdGlvblR5cGUsXG59IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgS2V5UGFpciB9IGZyb20gJy4va2V5UGFpcic7XG5pbXBvcnQge1xuICBGZWUsXG4gIENhc3Blck1vZHVsZUJ5dGVzVHJhbnNhY3Rpb24sXG4gIENhc3BlclRyYW5zZmVyVHJhbnNhY3Rpb24sXG4gIENhc3BlckRlbGVnYXRlVHJhbnNhY3Rpb24sXG4gIFNpZ25hdHVyZURhdGEsXG59IGZyb20gJy4vaWZhY2VzJztcbmltcG9ydCB7IGlzVmFsaWRBZGRyZXNzLCByZW1vdmVBbGdvUHJlZml4RnJvbUhleFZhbHVlIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBERUZBVUxUX0NIQUlOX05BTUVTLCBUUkFOU0FDVElPTl9FWFBJUkFUSU9OIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9NID0gMztcbmV4cG9ydCBjb25zdCBERUZBVUxUX04gPSAyO1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFRyYW5zYWN0aW9uQnVpbGRlciBleHRlbmRzIEJhc2VUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICBwcm90ZWN0ZWQgX3NvdXJjZTogQmFzZUFkZHJlc3M7XG4gIHByb3RlY3RlZCBfZmVlOiBGZWU7XG4gIHByaXZhdGUgX3RyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbjtcbiAgcHJvdGVjdGVkIF9zZXNzaW9uOiBDYXNwZXJUcmFuc2ZlclRyYW5zYWN0aW9uIHwgQ2FzcGVyTW9kdWxlQnl0ZXNUcmFuc2FjdGlvbiB8IENhc3BlckRlbGVnYXRlVHJhbnNhY3Rpb247XG4gIHByb3RlY3RlZCBfZXhwaXJhdGlvbjogbnVtYmVyO1xuICBwcm90ZWN0ZWQgX211bHRpU2lnbmVyS2V5UGFpcnM6IEtleVBhaXJbXTtcbiAgcHJvdGVjdGVkIF9zaWduYXR1cmVzOiBTaWduYXR1cmVEYXRhW107XG4gIHByb3RlY3RlZCBfY2hhaW5OYW1lOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICAgIHRoaXMudHJhbnNhY3Rpb24gPSBuZXcgVHJhbnNhY3Rpb24oX2NvaW5Db25maWcpO1xuICAgIHRoaXMuX211bHRpU2lnbmVyS2V5UGFpcnMgPSBbXTtcbiAgICB0aGlzLl9zaWduYXR1cmVzID0gW107XG4gICAgdGhpcy5fY2hhaW5OYW1lID0gdGhpcy5jb2luTmFtZSgpID09PSAnY3NwcicgPyBERUZBVUxUX0NIQUlOX05BTUVTLm1haW5uZXQgOiBERUZBVUxUX0NIQUlOX05BTUVTLnRlc3RuZXQ7XG4gIH1cblxuICAvLyByZWdpb24gQmFzZSBCdWlsZGVyXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgYnVpbGRJbXBsZW1lbnRhdGlvbigpOiBQcm9taXNlPFRyYW5zYWN0aW9uPiB7XG4gICAgY29uc3QgZGVwbG95UGFyYW1zID0gdGhpcy5nZXREZXBsb3lQYXJhbXMoKTtcbiAgICBjb25zdCBzZXNzaW9uID0gdGhpcy5nZXRTZXNzaW9uKCk7XG5cbiAgICBjb25zdCBwYXltZW50ID0gRGVwbG95VXRpbC5zdGFuZGFyZFBheW1lbnQoXy5wYXJzZUludCh0aGlzLl9mZWUuZ2FzTGltaXQpKTtcblxuICAgIGxldCBjVHJhbnNhY3Rpb24gPSB0aGlzLnRyYW5zYWN0aW9uLmNhc3BlclR4IHx8IERlcGxveVV0aWwubWFrZURlcGxveShkZXBsb3lQYXJhbXMsIHNlc3Npb24sIHBheW1lbnQpO1xuXG4gICAgLy8gQ2Fubm90IGFkZCBhcmd1bWVudHMgdG8gYW4gYWxyZWFkeSBzaWduZWQgZGVwbG95LlxuICAgIGlmIChjVHJhbnNhY3Rpb24uYXBwcm92YWxzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5fc2Vzc2lvbi5leHRyYUFyZ3VtZW50cy5mb3JFYWNoKChleHRyYUFyZ3VtZW50LCBleHRyYUFyZ3VtZW50TmFtZSkgPT4ge1xuICAgICAgICBpZiAoIWNUcmFuc2FjdGlvbi5zZXNzaW9uLmdldEFyZ0J5TmFtZShleHRyYUFyZ3VtZW50TmFtZSkpIHtcbiAgICAgICAgICBjVHJhbnNhY3Rpb24gPSBEZXBsb3lVdGlsLmFkZEFyZ1RvRGVwbG95KGNUcmFuc2FjdGlvbiwgZXh0cmFBcmd1bWVudE5hbWUsIGV4dHJhQXJndW1lbnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLnRyYW5zYWN0aW9uLmNhc3BlclR4ID0gY1RyYW5zYWN0aW9uO1xuXG4gICAgdGhpcy5wcm9jZXNzU2lnbmluZygpO1xuXG4gICAgcmV0dXJuIHRoaXMudHJhbnNhY3Rpb247XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGZyb21JbXBsZW1lbnRhdGlvbihyYXdUcmFuc2FjdGlvbjogc3RyaW5nKTogVHJhbnNhY3Rpb24ge1xuICAgIGNvbnN0IHR4ID0gbmV3IFRyYW5zYWN0aW9uKHRoaXMuX2NvaW5Db25maWcpO1xuICAgIGNvbnN0IGpzb25UcmFuc2FjdGlvbiA9IEpTT04ucGFyc2UocmF3VHJhbnNhY3Rpb24pO1xuICAgIHR4LmNhc3BlclR4ID0gRGVwbG95VXRpbC5kZXBsb3lGcm9tSnNvbihqc29uVHJhbnNhY3Rpb24pLnVud3JhcCgpO1xuICAgIHRoaXMuaW5pdEJ1aWxkZXIodHgpO1xuICAgIHJldHVybiB0aGlzLnRyYW5zYWN0aW9uO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBzaWduSW1wbGVtZW50YXRpb24oa2V5OiBCYXNlS2V5KTogVHJhbnNhY3Rpb24ge1xuICAgIHRoaXMuY2hlY2tEdXBsaWNhdGVkS2V5cyhrZXkpO1xuICAgIGNvbnN0IHNpZ25lciA9IG5ldyBLZXlQYWlyKHsgcHJ2OiBrZXkua2V5IH0pO1xuXG4gICAgLy8gU2lnbmluZyB0aGUgdHJhbnNhY3Rpb24gaXMgYW4gb3BlcmF0aW9uIHRoYXQgcmVsaWVzIG9uIGFsbCB0aGUgZGF0YSBiZWluZyBzZXQsXG4gICAgLy8gc28gd2Ugc2V0IHRoZSBzb3VyY2UgaGVyZSBhbmQgbGVhdmUgdGhlIGFjdHVhbCBzaWduaW5nIGZvciB0aGUgYnVpbGQgc3RlcFxuICAgIHRoaXMuX211bHRpU2lnbmVyS2V5UGFpcnMucHVzaChzaWduZXIpO1xuICAgIHJldHVybiB0aGlzLnRyYW5zYWN0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgdGhlIHRyYW5zYWN0aW9uIGJ1aWxkZXIgZmllbGRzIHVzaW5nIHRoZSBkZWNvZGVkIHRyYW5zYWN0aW9uIGRhdGFcbiAgICpcbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvbn0gdHggdGhlIHRyYW5zYWN0aW9uIGRhdGFcbiAgICovXG4gIGluaXRCdWlsZGVyKHR4OiBUcmFuc2FjdGlvbik6IHZvaWQge1xuICAgIHRoaXMudHJhbnNhY3Rpb24gPSB0eDtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLmxvYWRQcmV2aW91c1NpZ25hdHVyZXMoKTtcbiAgICBjb25zdCB0eERhdGEgPSB0eC50b0pzb24oKTtcbiAgICB0aGlzLmZlZSh0eERhdGEuZmVlKTtcbiAgICB0aGlzLnNvdXJjZSh7IGFkZHJlc3M6IHR4RGF0YS5mcm9tIH0pO1xuICAgIHRoaXMuZXhwaXJhdGlvbih0eERhdGEuZXhwaXJhdGlvbiB8fCBUUkFOU0FDVElPTl9FWFBJUkFUSU9OKTtcbiAgfVxuXG4gIC8vIGVuZHJlZ2lvblxuXG4gIC8vIHJlZ2lvbiBDb21tb24gYnVpbGRlciBtZXRob2RzXG5cbiAgLyoqXG4gICAqIFNldCB0aGUgdHJhbnNhY3Rpb24gZmVlc1xuICAgKlxuICAgKiBAcGFyYW0ge0Jhc2VGZWV9IGZlZSBUaGUgbWF4aW11bSBnYXMgdG8gcGF5XG4gICAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbkJ1aWxkZXJ9IFRoaXMgdHJhbnNhY3Rpb24gYnVpbGRlclxuICAgKi9cbiAgZmVlKGZlZTogRmVlKTogdGhpcyB7XG4gICAgdGhpcy52YWxpZGF0ZVZhbHVlKG5ldyBCaWdOdW1iZXIoZmVlLmdhc0xpbWl0KSk7XG4gICAgdGhpcy5fZmVlID0gZmVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgdHJhbnNhY3Rpb24gc291cmNlXG4gICAqXG4gICAqIEBwYXJhbSB7QmFzZUFkZHJlc3N9IGFkZHJlc3MgVGhlIHNvdXJjZSBhY2NvdW50XG4gICAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbkJ1aWxkZXJ9IFRoaXMgdHJhbnNhY3Rpb24gYnVpbGRlclxuICAgKi9cbiAgc291cmNlKGFkZHJlc3M6IEJhc2VBZGRyZXNzKTogdGhpcyB7XG4gICAgdGhpcy52YWxpZGF0ZUFkZHJlc3MoYWRkcmVzcyk7XG4gICAgdGhpcy5fc291cmNlID0gYWRkcmVzcztcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHRyYW5zYWN0aW9uIGV4cGlyYXRpb25UaW1lXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBleHBpcmF0aW9uVGltZSBUaGUgdHJhbnNhY3Rpb24gZXhwaXJhdGlvblRpbWVcbiAgICogQHJldHVybnMge1RyYW5zYWN0aW9uQnVpbGRlcn0gVGhpcyB0cmFuc2FjdGlvbiBidWlsZGVyXG4gICAqL1xuICBleHBpcmF0aW9uKGV4cGlyYXRpb25UaW1lOiBudW1iZXIpOiB0aGlzIHtcbiAgICBjb25zdCB0cmFuc2FjdGlvbkV4cGlyYXRpb24gPSBuZXcgQmlnTnVtYmVyKGV4cGlyYXRpb25UaW1lKTtcbiAgICBpZiAodHJhbnNhY3Rpb25FeHBpcmF0aW9uLmlzTmFOKCkgfHwgdHJhbnNhY3Rpb25FeHBpcmF0aW9uLmlzR3JlYXRlclRoYW4oVFJBTlNBQ1RJT05fRVhQSVJBVElPTikpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgdHJhbnNhY3Rpb24gZXhwaXJhdGlvbicpO1xuICAgIH1cbiAgICB0aGlzLnZhbGlkYXRlVmFsdWUodHJhbnNhY3Rpb25FeHBpcmF0aW9uKTtcbiAgICB0aGlzLl9leHBpcmF0aW9uID0gdHJhbnNhY3Rpb25FeHBpcmF0aW9uLnRvTnVtYmVyKCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGFuIGV4dGVybmFsIHRyYW5zYWN0aW9uIHNpZ25hdHVyZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2lnbmF0dXJlIEhleCBlbmNvZGVkIHNpZ25hdHVyZSBzdHJpbmdcbiAgICogQHBhcmFtIHtLZXlQYWlyfSBrZXlQYWlyIFRoZSBwdWJsaWMga2V5IGtleXBhaXIgdGhhdCB3YXMgdXNlZCB0byBjcmVhdGUgdGhlIHNpZ25hdHVyZVxuICAgKiBAcmV0dXJucyB7VHJhbnNhY3Rpb25CdWlsZGVyfSBUaGlzIHRyYW5zYWN0aW9uIGJ1aWxkZXJcbiAgICovXG4gIHNpZ25hdHVyZShzaWduYXR1cmU6IHN0cmluZywga2V5UGFpcjogS2V5UGFpcik6IHRoaXMge1xuICAgIC8vIGlmIHdlIGFscmVhZHkgaGF2ZSBhIHNpZ25hdHVyZSBmb3IgdGhpcyBrZXkgcGFpciwganVzdCB1cGRhdGUgaXRcbiAgICBmb3IgKGNvbnN0IG9sZFNpZ25hdHVyZSBvZiB0aGlzLl9zaWduYXR1cmVzKSB7XG4gICAgICBpZiAob2xkU2lnbmF0dXJlLmtleVBhaXIuZ2V0S2V5cygpLnB1YiA9PT0ga2V5UGFpci5nZXRLZXlzKCkucHViKSB7XG4gICAgICAgIG9sZFNpZ25hdHVyZS5zaWduYXR1cmUgPSBzaWduYXR1cmU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIG90aGVyd2lzZSBhZGQgdGhlIG5ldyBzaWduYXR1cmVcbiAgICB0aGlzLl9zaWduYXR1cmVzLnB1c2goeyBzaWduYXR1cmUsIGtleVBhaXIgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBub2RlQ2hhaW5OYW1lKGNoYWluTmFtZTogc3RyaW5nKTogdGhpcyB7XG4gICAgdGhpcy5fY2hhaW5OYW1lID0gY2hhaW5OYW1lO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gZW5kcmVnaW9uXG5cbiAgLy8gcmVnaW9uIFZhbGlkYXRvcnNcbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlQWRkcmVzcyhhZGRyZXNzOiBCYXNlQWRkcmVzcyk6IHZvaWQge1xuICAgIGlmICghaXNWYWxpZEFkZHJlc3MoYWRkcmVzcy5hZGRyZXNzKSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCBhZGRyZXNzICcgKyBhZGRyZXNzLmFkZHJlc3MpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZUtleShrZXk6IEJhc2VLZXkpOiB2b2lkIHtcbiAgICBpZiAoIW5ldyBLZXlQYWlyKHsgcHJ2OiBrZXkua2V5IH0pKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIGtleScpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZVJhd1RyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXJhd1RyYW5zYWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ1JhdyB0cmFuc2FjdGlvbiBpcyBlbXB0eScpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgRGVwbG95VXRpbC5kZXBsb3lGcm9tSnNvbihKU09OLnBhcnNlKHJhd1RyYW5zYWN0aW9uKSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlVHJhbnNhY3Rpb25FcnJvcignVGhlcmUgd2FzIGFuIGVycm9yIHBhcnNpbmcgdGhlIEpTT04gc3RyaW5nJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlVHJhbnNhY3Rpb24odHJhbnNhY3Rpb24/OiBUcmFuc2FjdGlvbik6IHZvaWQge1xuICAgIHRoaXMudmFsaWRhdGVNYW5kYXRvcnlGaWVsZHMoKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZVZhbHVlKHZhbHVlOiBCaWdOdW1iZXIpOiB2b2lkIHtcbiAgICBpZiAodmFsdWUuaXNMZXNzVGhhbigwKSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignVmFsdWUgY2Fubm90IGJlIGxlc3MgdGhhbiB6ZXJvJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGF0IHRoZSBtYW5kYXRvcnkgZmllbGRzIGFyZSBkZWZpbmVkXG4gICAqL1xuICB2YWxpZGF0ZU1hbmRhdG9yeUZpZWxkcygpOiB2b2lkIHtcbiAgICB0aGlzLnZhbGlkYXRlRmVlKCk7XG4gICAgdGhpcy52YWxpZGF0ZVNvdXJjZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGF0IHRoZSBmZWUgZmllbGQgaXMgZGVmaW5lZFxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZUZlZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fZmVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgdHJhbnNhY3Rpb246IG1pc3NpbmcgZmVlJyk7XG4gICAgfVxuICAgIGlmICghdGhpcy5fZmVlLmdhc0xpbWl0KSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIHRyYW5zYWN0aW9uOiBtaXNzaW5nIGdhcyBsaW1pdCcpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgdGhpcy52YWxpZGF0ZVZhbHVlKG5ldyBCaWdOdW1iZXIodGhpcy5fZmVlLmdhc0xpbWl0KSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCBnYXMgbGltaXQnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoYXQgdGhlIHNvdXJjZSBmaWVsZCBpcyBkZWZpbmVkXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlU291cmNlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9zb3VyY2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCB0cmFuc2FjdGlvbjogbWlzc2luZyBzb3VyY2UnKTtcbiAgICB9XG4gICAgdGhpcy52YWxpZGF0ZUFkZHJlc3ModGhpcy5fc291cmNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhhdCB0aGUgZ2l2ZW4ga2V5IGlzIG5vdCBhbHJlYWR5IGluIHRoaXMuX211bHRpU2lnbmVyS2V5UGFpcnNcbiAgICpcbiAgICogQHBhcmFtIHtCYXNlS2V5fSBrZXkgLSBUaGUga2V5IHRvIGNoZWNrXG4gICAqL1xuICBwcml2YXRlIGNoZWNrRHVwbGljYXRlZEtleXMoa2V5OiBCYXNlS2V5KSB7XG4gICAgdGhpcy5fbXVsdGlTaWduZXJLZXlQYWlycy5mb3JFYWNoKChfc291cmNlS2V5UGFpcikgPT4ge1xuICAgICAgaWYgKF9zb3VyY2VLZXlQYWlyLmdldEtleXMoKS5wcnYgPT09IGtleS5rZXkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFNpZ25pbmdFcnJvcignUmVwZWF0ZWQgc2lnbjogJyArIGtleS5rZXkpO1xuICAgICAgfVxuICAgICAgLy8gVHJ5IHRvIGdldCBleHRlbmRlZCBrZXlzIGluIG9yZGVyIHRvIHZhbGlkYXRlIHRoZW1cbiAgICAgIGxldCB4cHJ2O1xuICAgICAgdHJ5IHtcbiAgICAgICAgeHBydiA9IF9zb3VyY2VLZXlQYWlyLmdldEV4dGVuZGVkS2V5cygpLnhwcnY7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHhwcnYgJiYgeHBydiA9PT0ga2V5LmtleSkge1xuICAgICAgICB0aHJvdyBuZXcgU2lnbmluZ0Vycm9yKCdSZXBlYXRlZCBzaWduOiAnICsga2V5LmtleSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvLyBlbmRyZWdpb25cblxuICAvLyByZWdpb24gR2V0dGVycyBhbmQgU2V0dGVyc1xuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGdldCB0cmFuc2FjdGlvbigpOiBUcmFuc2FjdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zYWN0aW9uO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBzZXQgdHJhbnNhY3Rpb24odHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uKSB7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb24gPSB0cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGNoYWluIG5hbWUgZm9yIHRoZSBjb2luIGVudmlyb25tZW50XG4gICAqL1xuICBwdWJsaWMgZ2V0IGNoYWluTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9jaGFpbk5hbWU7XG4gIH1cbiAgLy8gZW5kcmVnaW9uXG5cbiAgLy8gcmVnaW9uIGF1eGlsaWFyeU1ldGhvZHNcbiAgLyoqXG4gICAqIEdlbmVyYXRlIGEgRGVwbG95UGFyYW1zIGluc3RhbmNlIHdpdGggdGhlIHRyYW5zYWN0aW9uIGRhdGFcbiAgICpcbiAgICogQHJldHVybnMge0RlcGxveVV0aWwuRGVwbG95UGFyYW1zfVxuICAgKi9cbiAgcHJpdmF0ZSBnZXREZXBsb3lQYXJhbXMoKTogRGVwbG95VXRpbC5EZXBsb3lQYXJhbXMge1xuICAgIGNvbnN0IGdhc1ByaWNlID0gdGhpcy5fZmVlLmdhc1ByaWNlID8gXy5wYXJzZUludCh0aGlzLl9mZWUuZ2FzUHJpY2UpIDogdW5kZWZpbmVkO1xuICAgIHJldHVybiBuZXcgRGVwbG95VXRpbC5EZXBsb3lQYXJhbXMoXG4gICAgICBQdWJsaWNLZXkuZnJvbUhleCh0aGlzLl9zb3VyY2UuYWRkcmVzcyksXG4gICAgICB0aGlzLl9jaGFpbk5hbWUsXG4gICAgICBnYXNQcmljZSxcbiAgICAgIHRoaXMuX2V4cGlyYXRpb24gfHwgVFJBTlNBQ1RJT05fRVhQSVJBVElPTixcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIHRoZSBzZXNzaW9uIGZvciB0aGUgRGVwbG95IGFjY29yZGluZyB0byB0aGUgdHJhbnNhY3Rpb25UeXBlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7RGVwbG95VXRpbC5FeGVjdXRhYmxlRGVwbG95SXRlbX1cbiAgICovXG4gIHByaXZhdGUgZ2V0U2Vzc2lvbigpOiBEZXBsb3lVdGlsLkV4ZWN1dGFibGVEZXBsb3lJdGVtIHtcbiAgICBsZXQgc2Vzc2lvbjtcbiAgICBzd2l0Y2ggKHRoaXMudHJhbnNhY3Rpb24udHlwZSkge1xuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuU2VuZDpcbiAgICAgICAgY29uc3QgdHJhbnNmZXJTZXNzaW9uID0gdGhpcy5fc2Vzc2lvbiBhcyBDYXNwZXJUcmFuc2ZlclRyYW5zYWN0aW9uO1xuICAgICAgICBzZXNzaW9uID0gRGVwbG95VXRpbC5FeGVjdXRhYmxlRGVwbG95SXRlbS5uZXdUcmFuc2ZlcldpdGhPcHRpb25hbFRyYW5zZmVySWQoXG4gICAgICAgICAgdHJhbnNmZXJTZXNzaW9uLmFtb3VudCxcbiAgICAgICAgICB0cmFuc2ZlclNlc3Npb24udGFyZ2V0LFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICB0cmFuc2ZlclNlc3Npb24uaWQsXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuV2FsbGV0SW5pdGlhbGl6YXRpb246XG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nTG9jazpcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdVbmxvY2s6XG4gICAgICAgIGNvbnN0IG1vZHVsZUJ5dGVzU2Vzc2lvbiA9IHRoaXMuX3Nlc3Npb24gYXMgQ2FzcGVyTW9kdWxlQnl0ZXNUcmFuc2FjdGlvbjtcbiAgICAgICAgc2Vzc2lvbiA9IERlcGxveVV0aWwuRXhlY3V0YWJsZURlcGxveUl0ZW0ubmV3TW9kdWxlQnl0ZXMoXG4gICAgICAgICAgbW9kdWxlQnl0ZXNTZXNzaW9uLm1vZHVsZUJ5dGVzLFxuICAgICAgICAgIG1vZHVsZUJ5dGVzU2Vzc2lvbi5hcmdzLFxuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ1RyYW5zYWN0aW9uIFR5cGUgZXJyb3InKTtcbiAgICB9XG4gICAgcmV0dXJuIHNlc3Npb247XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIHRyYW5zYWN0aW9uIGhhcyB0aGUgb3duZXIgc2lnbmF0dXJlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwdWIgLSBwdWJsaWMga2V5IG9mIHRoZSBzaWduZXJcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgdGhlIHB1YiBrZXkgYWxyZWFkeSBzaWduZWQgdGggdHJhbnNhY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgaXNUcmFuc2FjdGlvblNpZ25lZEJ5UHViKHB1Yjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIF8uZmluZEluZGV4KHRoaXMudHJhbnNhY3Rpb24uY2FzcGVyVHguYXBwcm92YWxzLCAoYXBwcm92YWwpID0+IHtcbiAgICAgICAgY29uc3QgYXBwcm92YWxTaWduZXIgPSByZW1vdmVBbGdvUHJlZml4RnJvbUhleFZhbHVlKGFwcHJvdmFsLnNpZ25lcik7XG4gICAgICAgIHJldHVybiBhcHByb3ZhbFNpZ25lciA9PT0gcHViO1xuICAgICAgfSkgIT09IC0xXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgc2lnbmF0dXJlcyB0byB0aGUgdHJhbnNhY3Rpb25cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgcHJvY2Vzc1NpZ25pbmcoKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBrZXlQYWlyIG9mIHRoaXMuX211bHRpU2lnbmVyS2V5UGFpcnMpIHtcbiAgICAgIC8vIEFkZCBzaWduYXR1cmUgaWYgaXQncyBub3QgYWxyZWFkeSBpbiB0aGUgZGVwbG95XG4gICAgICBpZiAoIXRoaXMuaXNUcmFuc2FjdGlvblNpZ25lZEJ5UHViKGtleVBhaXIuZ2V0S2V5cygpLnB1YikpIHtcbiAgICAgICAgdGhpcy50cmFuc2FjdGlvbi5zaWduKGtleVBhaXIpO1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IHsgc2lnbmF0dXJlLCBrZXlQYWlyIH0gb2YgdGhpcy5fc2lnbmF0dXJlcykge1xuICAgICAgLy8gQWRkIHNpZ25hdHVyZSBpZiBpdCdzIG5vdCBhbHJlYWR5IGluIHRoZSBkZXBsb3lcbiAgICAgIGlmICghdGhpcy5pc1RyYW5zYWN0aW9uU2lnbmVkQnlQdWIoa2V5UGFpci5nZXRLZXlzKCkucHViKSkge1xuICAgICAgICB0aGlzLnRyYW5zYWN0aW9uLmFkZFNpZ25hdHVyZShzaWduYXR1cmUsIGtleVBhaXIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvLyBlbmRyZWdpb25cbn1cbiJdfQ==
@@ -0,0 +1,46 @@
1
+ import { BaseCoin as CoinConfig } from '@bitgo/statics';
2
+ import { BaseTransactionBuilderFactory } from '@bitgo/sdk-core';
3
+ import { WalletInitializationBuilder } from './walletInitializationBuilder';
4
+ import { TransferBuilder } from './transferBuilder';
5
+ import { TransactionBuilder } from './transactionBuilder';
6
+ import { Transaction } from './transaction';
7
+ import { DelegateBuilder } from './delegateBuilder';
8
+ import { UndelegateBuilder } from './undelegateBuilder';
9
+ export declare class TransactionBuilderFactory extends BaseTransactionBuilderFactory {
10
+ constructor(_coinConfig: Readonly<CoinConfig>);
11
+ /** @inheritdoc */
12
+ getWalletInitializationBuilder(tx?: Transaction): WalletInitializationBuilder;
13
+ /**
14
+ * Initialize an undelegate builder
15
+ *
16
+ * @param {Transaction | undefined} tx - the transaction used to initialize the builder
17
+ * @returns {UndelegateBuilder} the builder initialized
18
+ */
19
+ getUndelegateBuilder(tx?: Transaction): UndelegateBuilder;
20
+ /**
21
+ * Initialize an delegate builder
22
+ *
23
+ * @param {Transaction | undefined} tx - the transaction used to initialize the builder
24
+ * @returns {DelegateBuilder} the builder initialized
25
+ */
26
+ getDelegateBuilder(tx?: Transaction): DelegateBuilder;
27
+ /** @inheritDoc */
28
+ getTransferBuilder(tx?: Transaction): TransferBuilder;
29
+ /** @inheritDoc */
30
+ from(raw: string): TransactionBuilder;
31
+ /**
32
+ * Initialize the builder with the given transaction
33
+ *
34
+ * @param {Transaction | undefined} tx - the transaction used to initialize the builder
35
+ * @param {TransactionBuilder} builder - the builder to be initialized
36
+ * @returns {TransactionBuilder} the builder initialized
37
+ */
38
+ private initializeBuilder;
39
+ /**
40
+ * Check the raw transaction has a valid format in the blockchain context, throw otherwise.
41
+ *
42
+ * @param {any} rawTransaction - Transaction in any format
43
+ */
44
+ private validateRawTransaction;
45
+ }
46
+ //# sourceMappingURL=transactionBuilderFactory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transactionBuilderFactory.d.ts","sourceRoot":"","sources":["../../../../src/coin/cspr/transactionBuilderFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAExD,OAAO,EACL,6BAA6B,EAI9B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,qBAAa,yBAA0B,SAAQ,6BAA6B;gBAC9D,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI7C,kBAAkB;IAClB,8BAA8B,CAAC,EAAE,CAAC,EAAE,WAAW,GAAG,2BAA2B;IAI7E;;;;;OAKG;IACH,oBAAoB,CAAC,EAAE,CAAC,EAAE,WAAW,GAAG,iBAAiB;IAIzD;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,CAAC,EAAE,WAAW,GAAG,eAAe;IAIrD,kBAAkB;IAClB,kBAAkB,CAAC,EAAE,CAAC,EAAE,WAAW,GAAG,eAAe;IAIrD,kBAAkB;IAClB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,kBAAkB;IAyBrC;;;;;;OAMG;IACH,OAAO,CAAC,iBAAiB;IAOzB;;;;OAIG;IACH,OAAO,CAAC,sBAAsB;CAU/B"}
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TransactionBuilderFactory = void 0;
4
+ const casper_js_sdk_1 = require("casper-js-sdk");
5
+ const sdk_core_1 = require("@bitgo/sdk-core");
6
+ const walletInitializationBuilder_1 = require("./walletInitializationBuilder");
7
+ const transferBuilder_1 = require("./transferBuilder");
8
+ const transaction_1 = require("./transaction");
9
+ const utils_1 = require("./utils");
10
+ const delegateBuilder_1 = require("./delegateBuilder");
11
+ const undelegateBuilder_1 = require("./undelegateBuilder");
12
+ class TransactionBuilderFactory extends sdk_core_1.BaseTransactionBuilderFactory {
13
+ constructor(_coinConfig) {
14
+ super(_coinConfig);
15
+ }
16
+ /** @inheritdoc */
17
+ getWalletInitializationBuilder(tx) {
18
+ return this.initializeBuilder(tx, new walletInitializationBuilder_1.WalletInitializationBuilder(this._coinConfig));
19
+ }
20
+ /**
21
+ * Initialize an undelegate builder
22
+ *
23
+ * @param {Transaction | undefined} tx - the transaction used to initialize the builder
24
+ * @returns {UndelegateBuilder} the builder initialized
25
+ */
26
+ getUndelegateBuilder(tx) {
27
+ return this.initializeBuilder(tx, new undelegateBuilder_1.UndelegateBuilder(this._coinConfig));
28
+ }
29
+ /**
30
+ * Initialize an delegate builder
31
+ *
32
+ * @param {Transaction | undefined} tx - the transaction used to initialize the builder
33
+ * @returns {DelegateBuilder} the builder initialized
34
+ */
35
+ getDelegateBuilder(tx) {
36
+ return this.initializeBuilder(tx, new delegateBuilder_1.DelegateBuilder(this._coinConfig));
37
+ }
38
+ /** @inheritDoc */
39
+ getTransferBuilder(tx) {
40
+ return this.initializeBuilder(tx, new transferBuilder_1.TransferBuilder(this._coinConfig));
41
+ }
42
+ /** @inheritDoc */
43
+ from(raw) {
44
+ this.validateRawTransaction(raw);
45
+ const tx = new transaction_1.Transaction(this._coinConfig);
46
+ const deployJson = JSON.parse(raw);
47
+ try {
48
+ tx.casperTx = casper_js_sdk_1.DeployUtil.deployFromJson(deployJson).unwrap();
49
+ }
50
+ catch (e) {
51
+ throw new sdk_core_1.InvalidTransactionError('Invalid transaction: ' + e);
52
+ }
53
+ const casperDeployType = utils_1.getDeployType(tx.casperTx.session);
54
+ switch (casperDeployType) {
55
+ case sdk_core_1.TransactionType.Send:
56
+ return this.getTransferBuilder(tx);
57
+ case sdk_core_1.TransactionType.WalletInitialization:
58
+ return this.getWalletInitializationBuilder(tx);
59
+ case sdk_core_1.TransactionType.StakingLock:
60
+ return this.getDelegateBuilder(tx);
61
+ case sdk_core_1.TransactionType.StakingUnlock:
62
+ return this.getUndelegateBuilder(tx);
63
+ default:
64
+ throw new sdk_core_1.InvalidTransactionError('Invalid transaction ' + tx.casperTx);
65
+ }
66
+ }
67
+ /**
68
+ * Initialize the builder with the given transaction
69
+ *
70
+ * @param {Transaction | undefined} tx - the transaction used to initialize the builder
71
+ * @param {TransactionBuilder} builder - the builder to be initialized
72
+ * @returns {TransactionBuilder} the builder initialized
73
+ */
74
+ initializeBuilder(tx, builder) {
75
+ if (tx) {
76
+ builder.initBuilder(tx);
77
+ }
78
+ return builder;
79
+ }
80
+ /**
81
+ * Check the raw transaction has a valid format in the blockchain context, throw otherwise.
82
+ *
83
+ * @param {any} rawTransaction - Transaction in any format
84
+ */
85
+ validateRawTransaction(rawTransaction) {
86
+ if (!rawTransaction) {
87
+ throw new sdk_core_1.ParseTransactionError('Invalid raw transaction: Undefined');
88
+ }
89
+ try {
90
+ JSON.parse(rawTransaction);
91
+ }
92
+ catch (e) {
93
+ throw new sdk_core_1.ParseTransactionError('Invalid raw transaction format');
94
+ }
95
+ }
96
+ }
97
+ exports.TransactionBuilderFactory = TransactionBuilderFactory;
98
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb2luL2NzcHIvdHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSxpREFBMkM7QUFDM0MsOENBS3lCO0FBQ3pCLCtFQUE0RTtBQUM1RSx1REFBb0Q7QUFFcEQsK0NBQTRDO0FBQzVDLG1DQUF3QztBQUN4Qyx1REFBb0Q7QUFDcEQsMkRBQXdEO0FBRXhELE1BQWEseUJBQTBCLFNBQVEsd0NBQTZCO0lBQzFFLFlBQVksV0FBaUM7UUFDM0MsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsOEJBQThCLENBQUMsRUFBZ0I7UUFDN0MsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFBRSxFQUFFLElBQUkseURBQTJCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDdkYsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsb0JBQW9CLENBQUMsRUFBZ0I7UUFDbkMsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFBRSxFQUFFLElBQUkscUNBQWlCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDN0UsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsa0JBQWtCLENBQUMsRUFBZ0I7UUFDakMsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFBRSxFQUFFLElBQUksaUNBQWUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLGtCQUFrQixDQUFDLEVBQWdCO1FBQ2pDLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsRUFBRSxJQUFJLGlDQUFlLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixJQUFJLENBQUMsR0FBVztRQUNkLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNqQyxNQUFNLEVBQUUsR0FBRyxJQUFJLHlCQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzdDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbkMsSUFBSTtZQUNGLEVBQUUsQ0FBQyxRQUFRLEdBQUcsMEJBQVUsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7U0FDOUQ7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLE1BQU0sSUFBSSxrQ0FBdUIsQ0FBQyx1QkFBdUIsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUNoRTtRQUVELE1BQU0sZ0JBQWdCLEdBQUcscUJBQWEsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzVELFFBQVEsZ0JBQWdCLEVBQUU7WUFDeEIsS0FBSywwQkFBZSxDQUFDLElBQUk7Z0JBQ3ZCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3JDLEtBQUssMEJBQWUsQ0FBQyxvQkFBb0I7Z0JBQ3ZDLE9BQU8sSUFBSSxDQUFDLDhCQUE4QixDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2pELEtBQUssMEJBQWUsQ0FBQyxXQUFXO2dCQUM5QixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNyQyxLQUFLLDBCQUFlLENBQUMsYUFBYTtnQkFDaEMsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDdkM7Z0JBQ0UsTUFBTSxJQUFJLGtDQUF1QixDQUFDLHNCQUFzQixHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUMzRTtJQUNILENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSyxpQkFBaUIsQ0FBK0IsRUFBMkIsRUFBRSxPQUFVO1FBQzdGLElBQUksRUFBRSxFQUFFO1lBQ04sT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUN6QjtRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssc0JBQXNCLENBQUMsY0FBc0I7UUFDbkQsSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUNuQixNQUFNLElBQUksZ0NBQXFCLENBQUMsb0NBQW9DLENBQUMsQ0FBQztTQUN2RTtRQUNELElBQUk7WUFDRixJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1NBQzVCO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDVixNQUFNLElBQUksZ0NBQXFCLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztTQUNuRTtJQUNILENBQUM7Q0FDRjtBQTFGRCw4REEwRkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvL3N0YXRpY3MnO1xuaW1wb3J0IHsgRGVwbG95VXRpbCB9IGZyb20gJ2Nhc3Blci1qcy1zZGsnO1xuaW1wb3J0IHtcbiAgQmFzZVRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnksXG4gIFRyYW5zYWN0aW9uVHlwZSxcbiAgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IsXG4gIFBhcnNlVHJhbnNhY3Rpb25FcnJvcixcbn0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IFdhbGxldEluaXRpYWxpemF0aW9uQnVpbGRlciB9IGZyb20gJy4vd2FsbGV0SW5pdGlhbGl6YXRpb25CdWlsZGVyJztcbmltcG9ydCB7IFRyYW5zZmVyQnVpbGRlciB9IGZyb20gJy4vdHJhbnNmZXJCdWlsZGVyJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vdHJhbnNhY3Rpb25CdWlsZGVyJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbic7XG5pbXBvcnQgeyBnZXREZXBsb3lUeXBlIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBEZWxlZ2F0ZUJ1aWxkZXIgfSBmcm9tICcuL2RlbGVnYXRlQnVpbGRlcic7XG5pbXBvcnQgeyBVbmRlbGVnYXRlQnVpbGRlciB9IGZyb20gJy4vdW5kZWxlZ2F0ZUJ1aWxkZXInO1xuXG5leHBvcnQgY2xhc3MgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSBleHRlbmRzIEJhc2VUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5IHtcbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGdldFdhbGxldEluaXRpYWxpemF0aW9uQnVpbGRlcih0eD86IFRyYW5zYWN0aW9uKTogV2FsbGV0SW5pdGlhbGl6YXRpb25CdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5pbml0aWFsaXplQnVpbGRlcih0eCwgbmV3IFdhbGxldEluaXRpYWxpemF0aW9uQnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKSk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSBhbiB1bmRlbGVnYXRlIGJ1aWxkZXJcbiAgICpcbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvbiB8IHVuZGVmaW5lZH0gdHggLSB0aGUgdHJhbnNhY3Rpb24gdXNlZCB0byBpbml0aWFsaXplIHRoZSBidWlsZGVyXG4gICAqIEByZXR1cm5zIHtVbmRlbGVnYXRlQnVpbGRlcn0gdGhlIGJ1aWxkZXIgaW5pdGlhbGl6ZWRcbiAgICovXG4gIGdldFVuZGVsZWdhdGVCdWlsZGVyKHR4PzogVHJhbnNhY3Rpb24pOiBVbmRlbGVnYXRlQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuaW5pdGlhbGl6ZUJ1aWxkZXIodHgsIG5ldyBVbmRlbGVnYXRlQnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKSk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSBhbiBkZWxlZ2F0ZSBidWlsZGVyXG4gICAqXG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb24gfCB1bmRlZmluZWR9IHR4IC0gdGhlIHRyYW5zYWN0aW9uIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgYnVpbGRlclxuICAgKiBAcmV0dXJucyB7RGVsZWdhdGVCdWlsZGVyfSB0aGUgYnVpbGRlciBpbml0aWFsaXplZFxuICAgKi9cbiAgZ2V0RGVsZWdhdGVCdWlsZGVyKHR4PzogVHJhbnNhY3Rpb24pOiBEZWxlZ2F0ZUJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLmluaXRpYWxpemVCdWlsZGVyKHR4LCBuZXcgRGVsZWdhdGVCdWlsZGVyKHRoaXMuX2NvaW5Db25maWcpKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBnZXRUcmFuc2ZlckJ1aWxkZXIodHg/OiBUcmFuc2FjdGlvbik6IFRyYW5zZmVyQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuaW5pdGlhbGl6ZUJ1aWxkZXIodHgsIG5ldyBUcmFuc2ZlckJ1aWxkZXIodGhpcy5fY29pbkNvbmZpZykpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGZyb20ocmF3OiBzdHJpbmcpOiBUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICAgIHRoaXMudmFsaWRhdGVSYXdUcmFuc2FjdGlvbihyYXcpO1xuICAgIGNvbnN0IHR4ID0gbmV3IFRyYW5zYWN0aW9uKHRoaXMuX2NvaW5Db25maWcpO1xuICAgIGNvbnN0IGRlcGxveUpzb24gPSBKU09OLnBhcnNlKHJhdyk7XG4gICAgdHJ5IHtcbiAgICAgIHR4LmNhc3BlclR4ID0gRGVwbG95VXRpbC5kZXBsb3lGcm9tSnNvbihkZXBsb3lKc29uKS51bndyYXAoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgdHJhbnNhY3Rpb246ICcgKyBlKTtcbiAgICB9XG5cbiAgICBjb25zdCBjYXNwZXJEZXBsb3lUeXBlID0gZ2V0RGVwbG95VHlwZSh0eC5jYXNwZXJUeC5zZXNzaW9uKTtcbiAgICBzd2l0Y2ggKGNhc3BlckRlcGxveVR5cGUpIHtcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlNlbmQ6XG4gICAgICAgIHJldHVybiB0aGlzLmdldFRyYW5zZmVyQnVpbGRlcih0eCk7XG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5XYWxsZXRJbml0aWFsaXphdGlvbjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0V2FsbGV0SW5pdGlhbGl6YXRpb25CdWlsZGVyKHR4KTtcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdMb2NrOlxuICAgICAgICByZXR1cm4gdGhpcy5nZXREZWxlZ2F0ZUJ1aWxkZXIodHgpO1xuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ1VubG9jazpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VW5kZWxlZ2F0ZUJ1aWxkZXIodHgpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIHRyYW5zYWN0aW9uICcgKyB0eC5jYXNwZXJUeCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgdGhlIGJ1aWxkZXIgd2l0aCB0aGUgZ2l2ZW4gdHJhbnNhY3Rpb25cbiAgICpcbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvbiB8IHVuZGVmaW5lZH0gdHggLSB0aGUgdHJhbnNhY3Rpb24gdXNlZCB0byBpbml0aWFsaXplIHRoZSBidWlsZGVyXG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb25CdWlsZGVyfSBidWlsZGVyIC0gdGhlIGJ1aWxkZXIgdG8gYmUgaW5pdGlhbGl6ZWRcbiAgICogQHJldHVybnMge1RyYW5zYWN0aW9uQnVpbGRlcn0gdGhlIGJ1aWxkZXIgaW5pdGlhbGl6ZWRcbiAgICovXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUJ1aWxkZXI8VCBleHRlbmRzIFRyYW5zYWN0aW9uQnVpbGRlcj4odHg6IFRyYW5zYWN0aW9uIHwgdW5kZWZpbmVkLCBidWlsZGVyOiBUKTogVCB7XG4gICAgaWYgKHR4KSB7XG4gICAgICBidWlsZGVyLmluaXRCdWlsZGVyKHR4KTtcbiAgICB9XG4gICAgcmV0dXJuIGJ1aWxkZXI7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgdGhlIHJhdyB0cmFuc2FjdGlvbiBoYXMgYSB2YWxpZCBmb3JtYXQgaW4gdGhlIGJsb2NrY2hhaW4gY29udGV4dCwgdGhyb3cgb3RoZXJ3aXNlLlxuICAgKlxuICAgKiBAcGFyYW0ge2FueX0gcmF3VHJhbnNhY3Rpb24gLSBUcmFuc2FjdGlvbiBpbiBhbnkgZm9ybWF0XG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlUmF3VHJhbnNhY3Rpb24ocmF3VHJhbnNhY3Rpb246IHN0cmluZykge1xuICAgIGlmICghcmF3VHJhbnNhY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZVRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgcmF3IHRyYW5zYWN0aW9uOiBVbmRlZmluZWQnKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIEpTT04ucGFyc2UocmF3VHJhbnNhY3Rpb24pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZVRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgcmF3IHRyYW5zYWN0aW9uIGZvcm1hdCcpO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -0,0 +1,39 @@
1
+ import { BaseCoin as CoinConfig } from '@bitgo/statics';
2
+ import { BaseKey } from '@bitgo/sdk-core';
3
+ import { TransactionBuilder } from './transactionBuilder';
4
+ import { Transaction } from './transaction';
5
+ export declare class TransferBuilder extends TransactionBuilder {
6
+ private _toAddress;
7
+ private _amount;
8
+ private _transferId;
9
+ constructor(_coinConfig: Readonly<CoinConfig>);
10
+ /** @inheritdoc */
11
+ protected buildImplementation(): Promise<Transaction>;
12
+ /** @inheritdoc */
13
+ initBuilder(tx: Transaction): void;
14
+ /** @inheritdoc */
15
+ protected signImplementation(key: BaseKey): Transaction;
16
+ /**
17
+ * Set the destination address where the funds will be sent,
18
+ *
19
+ * @param {string} address the address to transfer funds to
20
+ * @returns {TransferBuilder} the builder with the new parameter set
21
+ */
22
+ to(address: string): this;
23
+ /**
24
+ * Set the amount to be transferred
25
+ *
26
+ * @param {string} amount amount to transfer in motes (1 Cspr equals 1,000,000,000 motes)
27
+ * @returns {TransferBuilder} the builder with the new parameter set
28
+ */
29
+ amount(amount: string): this;
30
+ /**
31
+ * Set transfer id that acts as a transaction identifier (similar to memo id for Stellar)
32
+ *
33
+ * @param {number} id transfer id
34
+ * @returns {TransferBuilder} the builder with the new parameter set
35
+ */
36
+ transferId(id: number | string): this;
37
+ validateMandatoryFields(): void;
38
+ }
39
+ //# sourceMappingURL=transferBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transferBuilder.d.ts","sourceRoot":"","sources":["../../../../src/coin/cspr/transferBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAExD,OAAO,EACL,OAAO,EAKR,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,kBAAkB,EAAa,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAW5C,qBAAa,eAAgB,SAAQ,kBAAkB;IACrD,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,WAAW,CAAkB;gBAEzB,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI7C,kBAAkB;cACF,mBAAmB,IAAI,OAAO,CAAC,WAAW,CAAC;IAgB3D,kBAAkB;IAClB,WAAW,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI;IAWlC,kBAAkB;IAClB,SAAS,CAAC,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,WAAW;IAQvD;;;;;OAKG;IACH,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAQzB;;;;;OAKG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAQ5B;;;;;OAKG;IACH,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAWrC,uBAAuB,IAAI,IAAI;CAgBhC"}