@bitgo/sdk-coin-cspr 1.0.1-rc.0

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 (51) hide show
  1. package/.eslintignore +4 -0
  2. package/.mocharc.yml +8 -0
  3. package/CHANGELOG.md +8 -0
  4. package/LICENSE +191 -0
  5. package/README.md +39 -0
  6. package/dist/src/cspr.d.ts +101 -0
  7. package/dist/src/cspr.d.ts.map +1 -0
  8. package/dist/src/cspr.js +293 -0
  9. package/dist/src/index.d.ts +4 -0
  10. package/dist/src/index.d.ts.map +1 -0
  11. package/dist/src/index.js +29 -0
  12. package/dist/src/lib/constants.d.ts +19 -0
  13. package/dist/src/lib/constants.d.ts.map +1 -0
  14. package/dist/src/lib/constants.js +28 -0
  15. package/dist/src/lib/delegateBuilder.d.ts +49 -0
  16. package/dist/src/lib/delegateBuilder.d.ts.map +1 -0
  17. package/dist/src/lib/delegateBuilder.js +111 -0
  18. package/dist/src/lib/ifaces.d.ts +69 -0
  19. package/dist/src/lib/ifaces.d.ts.map +1 -0
  20. package/dist/src/lib/ifaces.js +3 -0
  21. package/dist/src/lib/index.d.ts +6 -0
  22. package/dist/src/lib/index.d.ts.map +1 -0
  23. package/dist/src/lib/index.js +31 -0
  24. package/dist/src/lib/keyPair.d.ts +18 -0
  25. package/dist/src/lib/keyPair.d.ts.map +1 -0
  26. package/dist/src/lib/keyPair.js +75 -0
  27. package/dist/src/lib/transaction.d.ts +55 -0
  28. package/dist/src/lib/transaction.d.ts.map +1 -0
  29. package/dist/src/lib/transaction.js +227 -0
  30. package/dist/src/lib/transactionBuilder.d.ts +124 -0
  31. package/dist/src/lib/transactionBuilder.d.ts.map +1 -0
  32. package/dist/src/lib/transactionBuilder.js +312 -0
  33. package/dist/src/lib/transactionBuilderFactory.d.ts +46 -0
  34. package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -0
  35. package/dist/src/lib/transactionBuilderFactory.js +98 -0
  36. package/dist/src/lib/transferBuilder.d.ts +39 -0
  37. package/dist/src/lib/transferBuilder.d.ts.map +1 -0
  38. package/dist/src/lib/transferBuilder.js +106 -0
  39. package/dist/src/lib/undelegateBuilder.d.ts +49 -0
  40. package/dist/src/lib/undelegateBuilder.d.ts.map +1 -0
  41. package/dist/src/lib/undelegateBuilder.js +111 -0
  42. package/dist/src/lib/utils.d.ts +188 -0
  43. package/dist/src/lib/utils.d.ts.map +1 -0
  44. package/dist/src/lib/utils.js +477 -0
  45. package/dist/src/lib/walletInitializationBuilder.d.ts +27 -0
  46. package/dist/src/lib/walletInitializationBuilder.d.ts.map +1 -0
  47. package/dist/src/lib/walletInitializationBuilder.js +95 -0
  48. package/dist/src/tcspr.d.ts +11 -0
  49. package/dist/src/tcspr.d.ts.map +1 -0
  50. package/dist/src/tcspr.js +24 -0
  51. package/package.json +62 -0
@@ -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/lib/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"}
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TransferBuilder = void 0;
4
+ const casper_js_sdk_1 = require("casper-js-sdk");
5
+ const sdk_core_1 = require("@bitgo/sdk-core");
6
+ const transactionBuilder_1 = require("./transactionBuilder");
7
+ const constants_1 = require("./constants");
8
+ const utils_1 = require("./utils");
9
+ class TransferBuilder extends transactionBuilder_1.TransactionBuilder {
10
+ constructor(_coinConfig) {
11
+ super(_coinConfig);
12
+ }
13
+ /** @inheritdoc */
14
+ async buildImplementation() {
15
+ const extraArguments = new Map();
16
+ if (this._toAddress) {
17
+ extraArguments.set(constants_1.TRANSACTION_TYPE, casper_js_sdk_1.CLValueBuilder.string(sdk_core_1.TransactionType[sdk_core_1.TransactionType.Send]));
18
+ extraArguments.set(constants_1.TRANSFER_TO_ADDRESS, casper_js_sdk_1.CLValueBuilder.string(this._toAddress));
19
+ }
20
+ this._session = {
21
+ amount: this._amount,
22
+ target: casper_js_sdk_1.CLPublicKey.fromHex(this._toAddress),
23
+ id: this._transferId,
24
+ extraArguments: extraArguments,
25
+ };
26
+ this.transaction.setTransactionType(sdk_core_1.TransactionType.Send);
27
+ return await super.buildImplementation();
28
+ }
29
+ /** @inheritdoc */
30
+ initBuilder(tx) {
31
+ super.initBuilder(tx);
32
+ this.transaction.setTransactionType(sdk_core_1.TransactionType.Send);
33
+ this.to(utils_1.getTransferDestinationAddress(tx.casperTx.session));
34
+ this.amount(utils_1.getTransferAmount(tx.casperTx.session));
35
+ const transferId = utils_1.getTransferId(tx.casperTx.session);
36
+ if (transferId !== undefined) {
37
+ this.transferId(transferId);
38
+ }
39
+ }
40
+ /** @inheritdoc */
41
+ signImplementation(key) {
42
+ if (this._multiSignerKeyPairs.length >= transactionBuilder_1.DEFAULT_M) {
43
+ throw new sdk_core_1.SigningError('A maximum of ' + transactionBuilder_1.DEFAULT_M + ' can sign the transaction.');
44
+ }
45
+ return super.signImplementation(key);
46
+ }
47
+ // region Transfer fields
48
+ /**
49
+ * Set the destination address where the funds will be sent,
50
+ *
51
+ * @param {string} address the address to transfer funds to
52
+ * @returns {TransferBuilder} the builder with the new parameter set
53
+ */
54
+ to(address) {
55
+ if (!utils_1.isValidAddress(address)) {
56
+ throw new sdk_core_1.InvalidParameterValueError('Invalid address');
57
+ }
58
+ this._toAddress = address;
59
+ return this;
60
+ }
61
+ /**
62
+ * Set the amount to be transferred
63
+ *
64
+ * @param {string} amount amount to transfer in motes (1 Cspr equals 1,000,000,000 motes)
65
+ * @returns {TransferBuilder} the builder with the new parameter set
66
+ */
67
+ amount(amount) {
68
+ if (!utils_1.isValidTransferAmount(amount)) {
69
+ throw new sdk_core_1.InvalidParameterValueError('Invalid amount');
70
+ }
71
+ this._amount = amount;
72
+ return this;
73
+ }
74
+ /**
75
+ * Set transfer id that acts as a transaction identifier (similar to memo id for Stellar)
76
+ *
77
+ * @param {number} id transfer id
78
+ * @returns {TransferBuilder} the builder with the new parameter set
79
+ */
80
+ transferId(id) {
81
+ if (!utils_1.isValidTransferId(id)) {
82
+ throw new sdk_core_1.InvalidParameterValueError('Invalid transfer id');
83
+ }
84
+ this._transferId = id.toString();
85
+ return this;
86
+ }
87
+ // endregion
88
+ // region Validators
89
+ validateMandatoryFields() {
90
+ if (!this._toAddress) {
91
+ throw new sdk_core_1.BuildTransactionError('Invalid transaction: missing to');
92
+ }
93
+ if (!utils_1.isValidAddress(this._toAddress)) {
94
+ throw new sdk_core_1.InvalidParameterValueError('Invalid to address');
95
+ }
96
+ if (!this._amount) {
97
+ throw new sdk_core_1.BuildTransactionError('Invalid transaction: missing amount');
98
+ }
99
+ if (!utils_1.isValidTransferAmount(this._amount)) {
100
+ throw new sdk_core_1.InvalidParameterValueError('Invalid amount');
101
+ }
102
+ super.validateMandatoryFields();
103
+ }
104
+ }
105
+ exports.TransferBuilder = TransferBuilder;
106
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmZXJCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90cmFuc2ZlckJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsaURBQWtGO0FBQ2xGLDhDQU15QjtBQUN6Qiw2REFBcUU7QUFFckUsMkNBQW9FO0FBQ3BFLG1DQU9pQjtBQUVqQixNQUFhLGVBQWdCLFNBQVEsdUNBQWtCO0lBS3JELFlBQVksV0FBaUM7UUFDM0MsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxrQkFBa0I7SUFDUixLQUFLLENBQUMsbUJBQW1CO1FBQ2pDLE1BQU0sY0FBYyxHQUFHLElBQUksR0FBRyxFQUFtQixDQUFDO1FBQ2xELElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNuQixjQUFjLENBQUMsR0FBRyxDQUFDLDRCQUFnQixFQUFFLDhCQUFjLENBQUMsTUFBTSxDQUFDLDBCQUFlLENBQUMsMEJBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbkcsY0FBYyxDQUFDLEdBQUcsQ0FBQywrQkFBbUIsRUFBRSw4QkFBYyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztTQUNqRjtRQUNELElBQUksQ0FBQyxRQUFRLEdBQUc7WUFDZCxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDcEIsTUFBTSxFQUFFLDJCQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7WUFDMUMsRUFBRSxFQUFFLElBQUksQ0FBQyxXQUFxQjtZQUM5QixjQUFjLEVBQUUsY0FBYztTQUMvQixDQUFDO1FBQ0YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQywwQkFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFELE9BQU8sTUFBTSxLQUFLLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUMzQyxDQUFDO0lBRUQsa0JBQWtCO0lB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Z28vc3RhdGljcyc7XG5pbXBvcnQgeyBDTFZhbHVlLCBDTFB1YmxpY0tleSBhcyBQdWJsaWNLZXksIENMVmFsdWVCdWlsZGVyIH0gZnJvbSAnY2FzcGVyLWpzLXNkayc7XG5pbXBvcnQge1xuICBCYXNlS2V5LFxuICBCdWlsZFRyYW5zYWN0aW9uRXJyb3IsXG4gIEludmFsaWRQYXJhbWV0ZXJWYWx1ZUVycm9yLFxuICBTaWduaW5nRXJyb3IsXG4gIFRyYW5zYWN0aW9uVHlwZSxcbn0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlciwgREVGQVVMVF9NIH0gZnJvbSAnLi90cmFuc2FjdGlvbkJ1aWxkZXInO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tICcuL3RyYW5zYWN0aW9uJztcbmltcG9ydCB7IFRSQU5TQUNUSU9OX1RZUEUsIFRSQU5TRkVSX1RPX0FERFJFU1MgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQge1xuICBpc1ZhbGlkVHJhbnNmZXJBbW91bnQsXG4gIGlzVmFsaWRUcmFuc2ZlcklkLFxuICBnZXRUcmFuc2ZlckRlc3RpbmF0aW9uQWRkcmVzcyxcbiAgZ2V0VHJhbnNmZXJBbW91bnQsXG4gIGdldFRyYW5zZmVySWQsXG4gIGlzVmFsaWRBZGRyZXNzLFxufSBmcm9tICcuL3V0aWxzJztcblxuZXhwb3J0IGNsYXNzIFRyYW5zZmVyQnVpbGRlciBleHRlbmRzIFRyYW5zYWN0aW9uQnVpbGRlciB7XG4gIHByaXZhdGUgX3RvQWRkcmVzczogc3RyaW5nO1xuICBwcml2YXRlIF9hbW91bnQ6IHN0cmluZztcbiAgcHJpdmF0ZSBfdHJhbnNmZXJJZDogbnVtYmVyIHwgc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKF9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgYnVpbGRJbXBsZW1lbnRhdGlvbigpOiBQcm9taXNlPFRyYW5zYWN0aW9uPiB7XG4gICAgY29uc3QgZXh0cmFBcmd1bWVudHMgPSBuZXcgTWFwPHN0cmluZywgQ0xWYWx1ZT4oKTtcbiAgICBpZiAodGhpcy5fdG9BZGRyZXNzKSB7XG4gICAgICBleHRyYUFyZ3VtZW50cy5zZXQoVFJBTlNBQ1RJT05fVFlQRSwgQ0xWYWx1ZUJ1aWxkZXIuc3RyaW5nKFRyYW5zYWN0aW9uVHlwZVtUcmFuc2FjdGlvblR5cGUuU2VuZF0pKTtcbiAgICAgIGV4dHJhQXJndW1lbnRzLnNldChUUkFOU0ZFUl9UT19BRERSRVNTLCBDTFZhbHVlQnVpbGRlci5zdHJpbmcodGhpcy5fdG9BZGRyZXNzKSk7XG4gICAgfVxuICAgIHRoaXMuX3Nlc3Npb24gPSB7XG4gICAgICBhbW91bnQ6IHRoaXMuX2Ftb3VudCxcbiAgICAgIHRhcmdldDogUHVibGljS2V5LmZyb21IZXgodGhpcy5fdG9BZGRyZXNzKSxcbiAgICAgIGlkOiB0aGlzLl90cmFuc2ZlcklkIGFzIHN0cmluZyxcbiAgICAgIGV4dHJhQXJndW1lbnRzOiBleHRyYUFyZ3VtZW50cyxcbiAgICB9O1xuICAgIHRoaXMudHJhbnNhY3Rpb24uc2V0VHJhbnNhY3Rpb25UeXBlKFRyYW5zYWN0aW9uVHlwZS5TZW5kKTtcbiAgICByZXR1cm4gYXdhaXQgc3VwZXIuYnVpbGRJbXBsZW1lbnRhdGlvbigpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGluaXRCdWlsZGVyKHR4OiBUcmFuc2FjdGlvbik6IHZvaWQge1xuICAgIHN1cGVyLmluaXRCdWlsZGVyKHR4KTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLnNldFRyYW5zYWN0aW9uVHlwZShUcmFuc2FjdGlvblR5cGUuU2VuZCk7XG4gICAgdGhpcy50byhnZXRUcmFuc2ZlckRlc3RpbmF0aW9uQWRkcmVzcyh0eC5jYXNwZXJUeC5zZXNzaW9uKSk7XG4gICAgdGhpcy5hbW91bnQoZ2V0VHJhbnNmZXJBbW91bnQodHguY2FzcGVyVHguc2Vzc2lvbikpO1xuICAgIGNvbnN0IHRyYW5zZmVySWQgPSBnZXRUcmFuc2ZlcklkKHR4LmNhc3BlclR4LnNlc3Npb24pO1xuICAgIGlmICh0cmFuc2ZlcklkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMudHJhbnNmZXJJZCh0cmFuc2ZlcklkKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIHNpZ25JbXBsZW1lbnRhdGlvbihrZXk6IEJhc2VLZXkpOiBUcmFuc2FjdGlvbiB7XG4gICAgaWYgKHRoaXMuX211bHRpU2lnbmVyS2V5UGFpcnMubGVuZ3RoID49IERFRkFVTFRfTSkge1xuICAgICAgdGhyb3cgbmV3IFNpZ25pbmdFcnJvcignQSBtYXhpbXVtIG9mICcgKyBERUZBVUxUX00gKyAnIGNhbiBzaWduIHRoZSB0cmFuc2FjdGlvbi4nKTtcbiAgICB9XG4gICAgcmV0dXJuIHN1cGVyLnNpZ25JbXBsZW1lbnRhdGlvbihrZXkpO1xuICB9XG5cbiAgLy8gcmVnaW9uIFRyYW5zZmVyIGZpZWxkc1xuICAvKipcbiAgICogU2V0IHRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzIHdoZXJlIHRoZSBmdW5kcyB3aWxsIGJlIHNlbnQsXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhZGRyZXNzIHRoZSBhZGRyZXNzIHRvIHRyYW5zZmVyIGZ1bmRzIHRvXG4gICAqIEByZXR1cm5zIHtUcmFuc2ZlckJ1aWxkZXJ9IHRoZSBidWlsZGVyIHdpdGggdGhlIG5ldyBwYXJhbWV0ZXIgc2V0XG4gICAqL1xuICB0byhhZGRyZXNzOiBzdHJpbmcpOiB0aGlzIHtcbiAgICBpZiAoIWlzVmFsaWRBZGRyZXNzKGFkZHJlc3MpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFBhcmFtZXRlclZhbHVlRXJyb3IoJ0ludmFsaWQgYWRkcmVzcycpO1xuICAgIH1cbiAgICB0aGlzLl90b0FkZHJlc3MgPSBhZGRyZXNzO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgYW1vdW50IHRvIGJlIHRyYW5zZmVycmVkXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhbW91bnQgYW1vdW50IHRvIHRyYW5zZmVyIGluIG1vdGVzICgxIENzcHIgZXF1YWxzIDEsMDAwLDAwMCwwMDAgbW90ZXMpXG4gICAqIEByZXR1cm5zIHtUcmFuc2ZlckJ1aWxkZXJ9IHRoZSBidWlsZGVyIHdpdGggdGhlIG5ldyBwYXJhbWV0ZXIgc2V0XG4gICAqL1xuICBhbW91bnQoYW1vdW50OiBzdHJpbmcpOiB0aGlzIHtcbiAgICBpZiAoIWlzVmFsaWRUcmFuc2ZlckFtb3VudChhbW91bnQpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFBhcmFtZXRlclZhbHVlRXJyb3IoJ0ludmFsaWQgYW1vdW50Jyk7XG4gICAgfVxuICAgIHRoaXMuX2Ftb3VudCA9IGFtb3VudDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdHJhbnNmZXIgaWQgdGhhdCBhY3RzIGFzIGEgdHJhbnNhY3Rpb24gaWRlbnRpZmllciAoc2ltaWxhciB0byBtZW1vIGlkIGZvciBTdGVsbGFyKVxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gaWQgdHJhbnNmZXIgaWRcbiAgICogQHJldHVybnMge1RyYW5zZmVyQnVpbGRlcn0gdGhlIGJ1aWxkZXIgd2l0aCB0aGUgbmV3IHBhcmFtZXRlciBzZXRcbiAgICovXG4gIHRyYW5zZmVySWQoaWQ6IG51bWJlciB8IHN0cmluZyk6IHRoaXMge1xuICAgIGlmICghaXNWYWxpZFRyYW5zZmVySWQoaWQpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFBhcmFtZXRlclZhbHVlRXJyb3IoJ0ludmFsaWQgdHJhbnNmZXIgaWQnKTtcbiAgICB9XG4gICAgdGhpcy5fdHJhbnNmZXJJZCA9IGlkLnRvU3RyaW5nKCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBlbmRyZWdpb25cblxuICAvLyByZWdpb24gVmFsaWRhdG9yc1xuICB2YWxpZGF0ZU1hbmRhdG9yeUZpZWxkcygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3RvQWRkcmVzcykge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCB0cmFuc2FjdGlvbjogbWlzc2luZyB0bycpO1xuICAgIH1cbiAgICBpZiAoIWlzVmFsaWRBZGRyZXNzKHRoaXMuX3RvQWRkcmVzcykpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkUGFyYW1ldGVyVmFsdWVFcnJvcignSW52YWxpZCB0byBhZGRyZXNzJyk7XG4gICAgfVxuICAgIGlmICghdGhpcy5fYW1vdW50KSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIHRyYW5zYWN0aW9uOiBtaXNzaW5nIGFtb3VudCcpO1xuICAgIH1cbiAgICBpZiAoIWlzVmFsaWRUcmFuc2ZlckFtb3VudCh0aGlzLl9hbW91bnQpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFBhcmFtZXRlclZhbHVlRXJyb3IoJ0ludmFsaWQgYW1vdW50Jyk7XG4gICAgfVxuICAgIHN1cGVyLnZhbGlkYXRlTWFuZGF0b3J5RmllbGRzKCk7XG4gIH1cbiAgLy8gZW5kcmVnaW9uXG59XG4iXX0=
@@ -0,0 +1,49 @@
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 UndelegateBuilder extends TransactionBuilder {
6
+ private _validator;
7
+ private _action;
8
+ private _amount;
9
+ private _contract;
10
+ /**
11
+ * Public constructor.
12
+ *
13
+ * @param {CoinConfig} _coinConfig Coin configuration object
14
+ */
15
+ constructor(_coinConfig: Readonly<CoinConfig>);
16
+ /** @inheritdoc */
17
+ protected buildImplementation(): Promise<Transaction>;
18
+ /** @inheritdoc */
19
+ initBuilder(tx: Transaction): void;
20
+ /** @inheritdoc */
21
+ protected signImplementation(key: BaseKey): Transaction;
22
+ /**
23
+ * Build args needed to create a session, then we can send this session with the contract
24
+ *
25
+ * @returns {DelegateUndelegateContractArgs} contracts args to create a session
26
+ */
27
+ private buildUndelegateParameters;
28
+ /**
29
+ * Set the destination address where the funds will be sent,
30
+ *
31
+ * @param {string} address the 68 bits address to transfer funds to
32
+ * @returns {UndelegateBuilder} the builder with the new parameter set
33
+ */
34
+ validator(address: string): this;
35
+ /**
36
+ * Set the amount to be transferred
37
+ *
38
+ * @param {string} amount amount to transfer
39
+ * @returns {UndelegateBuilder} the builder with the new parameter set
40
+ */
41
+ amount(amount: string): this;
42
+ /**
43
+ * Validate mandatory fields in the class
44
+ *
45
+ * @throws {Error} In case of missing or invalid fields
46
+ */
47
+ validateMandatoryFields(): void;
48
+ }
49
+ //# sourceMappingURL=undelegateBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"undelegateBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/undelegateBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAExD,OAAO,EACL,OAAO,EAMR,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,kBAAkB,EAAa,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAkB5C,qBAAa,iBAAkB,SAAQ,kBAAkB;IACvD,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,SAAS,CAAa;IAE9B;;;;OAIG;gBACS,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAM7C,kBAAkB;cACF,mBAAmB,IAAI,OAAO,CAAC,WAAW,CAAC;IAmB3D,kBAAkB;IAClB,WAAW,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI;IAOlC,kBAAkB;IAClB,SAAS,CAAC,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,WAAW;IAOvD;;;;OAIG;IACH,OAAO,CAAC,yBAAyB;IAajC;;;;;OAKG;IACH,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAQhC;;;;;OAKG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAY5B;;;;OAIG;IACH,uBAAuB,IAAI,IAAI;CAUhC"}
@@ -0,0 +1,111 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UndelegateBuilder = void 0;
4
+ const casper_js_sdk_1 = require("casper-js-sdk");
5
+ const sdk_core_1 = require("@bitgo/sdk-core");
6
+ const transactionBuilder_1 = require("./transactionBuilder");
7
+ const constants_1 = require("./constants");
8
+ const utils_1 = require("./utils");
9
+ class UndelegateBuilder extends transactionBuilder_1.TransactionBuilder {
10
+ /**
11
+ * Public constructor.
12
+ *
13
+ * @param {CoinConfig} _coinConfig Coin configuration object
14
+ */
15
+ constructor(_coinConfig) {
16
+ super(_coinConfig);
17
+ this._action = constants_1.UNDELEGATE_CONTRACT_ACTION;
18
+ this._contract = Uint8Array.from(Buffer.from(utils_1.casperContractHexCode, 'hex'));
19
+ }
20
+ /** @inheritdoc */
21
+ async buildImplementation() {
22
+ this._validator = this._validator || constants_1.DELEGATE_VALIDATOR_ACCOUNT;
23
+ const args = this.buildUndelegateParameters();
24
+ const extraArguments = new Map();
25
+ extraArguments.set(constants_1.TRANSACTION_TYPE, casper_js_sdk_1.CLValueBuilder.string(sdk_core_1.TransactionType[sdk_core_1.TransactionType.StakingUnlock]));
26
+ extraArguments.set(constants_1.STAKING_TYPE, casper_js_sdk_1.CLValueBuilder.string(sdk_core_1.StakingOperationTypes[sdk_core_1.StakingOperationTypes.UNLOCK]));
27
+ extraArguments.set(constants_1.DELEGATE_FROM_ADDRESS, casper_js_sdk_1.CLValueBuilder.string(this._source.address));
28
+ extraArguments.set(constants_1.DELEGATE_VALIDATOR, casper_js_sdk_1.CLValueBuilder.string(this._validator));
29
+ this._session = {
30
+ moduleBytes: this._contract,
31
+ args: casper_js_sdk_1.RuntimeArgs.fromMap(args),
32
+ extraArguments: extraArguments,
33
+ };
34
+ this.transaction.setTransactionType(sdk_core_1.TransactionType.StakingUnlock);
35
+ return await super.buildImplementation();
36
+ }
37
+ /** @inheritdoc */
38
+ initBuilder(tx) {
39
+ super.initBuilder(tx);
40
+ this.transaction.setTransactionType(sdk_core_1.TransactionType.StakingUnlock);
41
+ this.validator(utils_1.getValidatorAddress(tx.casperTx.session));
42
+ this.amount(utils_1.getTransferAmount(tx.casperTx.session));
43
+ }
44
+ /** @inheritdoc */
45
+ signImplementation(key) {
46
+ if (this._multiSignerKeyPairs.length >= transactionBuilder_1.DEFAULT_M) {
47
+ throw new sdk_core_1.SigningError('A maximum of ' + transactionBuilder_1.DEFAULT_M + ' can sign the transaction.');
48
+ }
49
+ return super.signImplementation(key);
50
+ }
51
+ /**
52
+ * Build args needed to create a session, then we can send this session with the contract
53
+ *
54
+ * @returns {DelegateUndelegateContractArgs} contracts args to create a session
55
+ */
56
+ buildUndelegateParameters() {
57
+ const delegator = casper_js_sdk_1.CLPublicKey.fromHex(this._source.address);
58
+ const validator = casper_js_sdk_1.CLPublicKey.fromHex(this._validator);
59
+ return {
60
+ action: casper_js_sdk_1.CLValueBuilder.string(this._action),
61
+ delegator: casper_js_sdk_1.CLValueBuilder.publicKey(delegator.value(), delegator.tag),
62
+ validator: casper_js_sdk_1.CLValueBuilder.publicKey(validator.value(), validator.tag),
63
+ amount: casper_js_sdk_1.CLValueBuilder.u512(this._amount),
64
+ };
65
+ }
66
+ // region Transfer fields
67
+ /**
68
+ * Set the destination address where the funds will be sent,
69
+ *
70
+ * @param {string} address the 68 bits address to transfer funds to
71
+ * @returns {UndelegateBuilder} the builder with the new parameter set
72
+ */
73
+ validator(address) {
74
+ if (!utils_1.isValidAddress(address)) {
75
+ throw new sdk_core_1.InvalidParameterValueError('Invalid address');
76
+ }
77
+ this._validator = address;
78
+ return this;
79
+ }
80
+ /**
81
+ * Set the amount to be transferred
82
+ *
83
+ * @param {string} amount amount to transfer
84
+ * @returns {UndelegateBuilder} the builder with the new parameter set
85
+ */
86
+ amount(amount) {
87
+ if (!utils_1.isValidDelegateAmount(amount)) {
88
+ throw new sdk_core_1.InvalidParameterValueError('Invalid amount');
89
+ }
90
+ this._amount = amount;
91
+ return this;
92
+ }
93
+ // endregion
94
+ // region Validators
95
+ /**
96
+ * Validate mandatory fields in the class
97
+ *
98
+ * @throws {Error} In case of missing or invalid fields
99
+ */
100
+ validateMandatoryFields() {
101
+ if (!this._amount) {
102
+ throw new sdk_core_1.BuildTransactionError('Invalid transaction: missing amount');
103
+ }
104
+ if (!utils_1.isValidDelegateAmount(this._amount)) {
105
+ throw new sdk_core_1.InvalidParameterValueError('Invalid amount');
106
+ }
107
+ super.validateMandatoryFields();
108
+ }
109
+ }
110
+ exports.UndelegateBuilder = UndelegateBuilder;
111
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5kZWxlZ2F0ZUJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3VuZGVsZWdhdGVCdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLGlEQUErRjtBQUMvRiw4Q0FPeUI7QUFDekIsNkRBQXFFO0FBRXJFLDJDQU9xQjtBQUNyQixtQ0FNaUI7QUFHakIsTUFBYSxpQkFBa0IsU0FBUSx1Q0FBa0I7SUFNdkQ7Ozs7T0FJRztJQUNILFlBQVksV0FBaUM7UUFDM0MsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ25CLElBQUksQ0FBQyxPQUFPLEdBQUcsc0NBQTBCLENBQUM7UUFDMUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsNkJBQXFCLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUM5RSxDQUFDO0lBRUQsa0JBQWtCO0lBQ1IsS0FBSyxDQUFDLG1CQUFtQjtRQUNqQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLElBQUksc0NBQTBCLENBQUM7UUFDaEUsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7UUFDOUMsTUFBTSxjQUFjLEdBQUcsSUFBSSxHQUFHLEVBQW1CLENBQUM7UUFFbEQsY0FBYyxDQUFDLEdBQUcsQ0FBQyw0QkFBZ0IsRUFBRSw4QkFBYyxDQUFDLE1BQU0sQ0FBQywwQkFBZSxDQUFDLDBCQUFlLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVHLGNBQWMsQ0FBQyxHQUFHLENBQUMsd0JBQVksRUFBRSw4QkFBYyxDQUFDLE1BQU0sQ0FBQyxnQ0FBcUIsQ0FBQyxnQ0FBcUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0csY0FBYyxDQUFDLEdBQUcsQ0FBQyxpQ0FBcUIsRUFBRSw4QkFBYyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENB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Qjs7OztPQUlHO0lBQ0gsdUJBQXVCO1FBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2pCLE1BQU0sSUFBSSxnQ0FBcUIsQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO1NBQ3hFO1FBQ0QsSUFBSSxDQUFDLDZCQUFxQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUN4QyxNQUFNLElBQUkscUNBQTBCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztTQUN4RDtRQUNELEtBQUssQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO0lBQ2xDLENBQUM7Q0FFRjtBQXRIRCw4Q0FzSEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvL3N0YXRpY3MnO1xuaW1wb3J0IHsgQ0xWYWx1ZSwgQ0xQdWJsaWNLZXkgYXMgUHVibGljS2V5LCBSdW50aW1lQXJncywgQ0xWYWx1ZUJ1aWxkZXIgfSBmcm9tICdjYXNwZXItanMtc2RrJztcbmltcG9ydCB7XG4gIEJhc2VLZXksXG4gIEJ1aWxkVHJhbnNhY3Rpb25FcnJvcixcbiAgVHJhbnNhY3Rpb25UeXBlLFxuICBTdGFraW5nT3BlcmF0aW9uVHlwZXMsXG4gIEludmFsaWRQYXJhbWV0ZXJWYWx1ZUVycm9yLFxuICBTaWduaW5nRXJyb3IsXG59IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkJ1aWxkZXIsIERFRkFVTFRfTSB9IGZyb20gJy4vdHJhbnNhY3Rpb25CdWlsZGVyJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbic7XG5pbXBvcnQge1xuICBUUkFOU0FDVElPTl9UWVBFLFxuICBERUxFR0FURV9WQUxJREFUT1IsXG4gIERFTEVHQVRFX0ZST01fQUREUkVTUyxcbiAgU1RBS0lOR19UWVBFLFxuICBVTkRFTEVHQVRFX0NPTlRSQUNUX0FDVElPTixcbiAgREVMRUdBVEVfVkFMSURBVE9SX0FDQ09VTlQsXG59IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7XG4gIGlzVmFsaWREZWxlZ2F0ZUFtb3VudCxcbiAgaXNWYWxpZEFkZHJlc3MsXG4gIGdldFRyYW5zZmVyQW1vdW50LFxuICBnZXRWYWxpZGF0b3JBZGRyZXNzLFxuICBjYXNwZXJDb250cmFjdEhleENvZGUsXG59IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgRGVsZWdhdGVVbmRlbGVnYXRlQ29udHJhY3RBcmdzIH0gZnJvbSAnLi9pZmFjZXMnO1xuXG5leHBvcnQgY2xhc3MgVW5kZWxlZ2F0ZUJ1aWxkZXIgZXh0ZW5kcyBUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICBwcml2YXRlIF92YWxpZGF0b3I6IHN0cmluZztcbiAgcHJpdmF0ZSBfYWN0aW9uOiBzdHJpbmc7XG4gIHByaXZhdGUgX2Ftb3VudDogc3RyaW5nO1xuICBwcml2YXRlIF9jb250cmFjdDogVWludDhBcnJheTtcblxuICAvKipcbiAgICogUHVibGljIGNvbnN0cnVjdG9yLlxuICAgKlxuICAgKiBAcGFyYW0ge0NvaW5Db25maWd9IF9jb2luQ29uZmlnIENvaW4gY29uZmlndXJhdGlvbiBvYmplY3RcbiAgICovXG4gIGNvbnN0cnVjdG9yKF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKF9jb2luQ29uZmlnKTtcbiAgICB0aGlzLl9hY3Rpb24gPSBVTkRFTEVHQVRFX0NPTlRSQUNUX0FDVElPTjtcbiAgICB0aGlzLl9jb250cmFjdCA9IFVpbnQ4QXJyYXkuZnJvbShCdWZmZXIuZnJvbShjYXNwZXJDb250cmFjdEhleENvZGUsICdoZXgnKSk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGJ1aWxkSW1wbGVtZW50YXRpb24oKTogUHJvbWlzZTxUcmFuc2FjdGlvbj4ge1xuICAgIHRoaXMuX3ZhbGlkYXRvciA9IHRoaXMuX3ZhbGlkYXRvciB8fCBERUxFR0FURV9WQUxJREFUT1JfQUNDT1VOVDtcbiAgICBjb25zdCBhcmdzID0gdGhpcy5idWlsZFVuZGVsZWdhdGVQYXJhbWV0ZXJzKCk7XG4gICAgY29uc3QgZXh0cmFBcmd1bWVudHMgPSBuZXcgTWFwPHN0cmluZywgQ0xWYWx1ZT4oKTtcblxuICAgIGV4dHJhQXJndW1lbnRzLnNldChUUkFOU0FDVElPTl9UWVBFLCBDTFZhbHVlQnVpbGRlci5zdHJpbmcoVHJhbnNhY3Rpb25UeXBlW1RyYW5zYWN0aW9uVHlwZS5TdGFraW5nVW5sb2NrXSkpO1xuICAgIGV4dHJhQXJndW1lbnRzLnNldChTVEFLSU5HX1RZUEUsIENMVmFsdWVCdWlsZGVyLnN0cmluZyhTdGFraW5nT3BlcmF0aW9uVHlwZXNbU3Rha2luZ09wZXJhdGlvblR5cGVzLlVOTE9DS10pKTtcbiAgICBleHRyYUFyZ3VtZW50cy5zZXQoREVMRUdBVEVfRlJPTV9BRERSRVNTLCBDTFZhbHVlQnVpbGRlci5zdHJpbmcodGhpcy5fc291cmNlLmFkZHJlc3MpKTtcbiAgICBleHRyYUFyZ3VtZW50cy5zZXQoREVMRUdBVEVfVkFMSURBVE9SLCBDTFZhbHVlQnVpbGRlci5zdHJpbmcodGhpcy5fdmFsaWRhdG9yKSk7XG5cbiAgICB0aGlzLl9zZXNzaW9uID0ge1xuICAgICAgbW9kdWxlQnl0ZXM6IHRoaXMuX2NvbnRyYWN0LFxuICAgICAgYXJnczogUnVudGltZUFyZ3MuZnJvbU1hcChhcmdzKSxcbiAgICAgIGV4dHJhQXJndW1lbnRzOiBleHRyYUFyZ3VtZW50cyxcbiAgICB9O1xuICAgIHRoaXMudHJhbnNhY3Rpb24uc2V0VHJhbnNhY3Rpb25UeXBlKFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nVW5sb2NrKTtcbiAgICByZXR1cm4gYXdhaXQgc3VwZXIuYnVpbGRJbXBsZW1lbnRhdGlvbigpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGluaXRCdWlsZGVyKHR4OiBUcmFuc2FjdGlvbik6IHZvaWQge1xuICAgIHN1cGVyLmluaXRCdWlsZGVyKHR4KTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLnNldFRyYW5zYWN0aW9uVHlwZShUcmFuc2FjdGlvblR5cGUuU3Rha2luZ1VubG9jayk7XG4gICAgdGhpcy52YWxpZGF0b3IoZ2V0VmFsaWRhdG9yQWRkcmVzcyh0eC5jYXNwZXJUeC5zZXNzaW9uKSk7XG4gICAgdGhpcy5hbW91bnQoZ2V0VHJhbnNmZXJBbW91bnQodHguY2FzcGVyVHguc2Vzc2lvbikpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBzaWduSW1wbGVtZW50YXRpb24oa2V5OiBCYXNlS2V5KTogVHJhbnNhY3Rpb24ge1xuICAgIGlmICh0aGlzLl9tdWx0aVNpZ25lcktleVBhaXJzLmxlbmd0aCA+PSBERUZBVUxUX00pIHtcbiAgICAgIHRocm93IG5ldyBTaWduaW5nRXJyb3IoJ0EgbWF4aW11bSBvZiAnICsgREVGQVVMVF9NICsgJyBjYW4gc2lnbiB0aGUgdHJhbnNhY3Rpb24uJyk7XG4gICAgfVxuICAgIHJldHVybiBzdXBlci5zaWduSW1wbGVtZW50YXRpb24oa2V5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBhcmdzIG5lZWRlZCB0byBjcmVhdGUgYSBzZXNzaW9uLCB0aGVuIHdlIGNhbiBzZW5kIHRoaXMgc2Vzc2lvbiB3aXRoIHRoZSBjb250cmFjdFxuICAgKlxuICAgKiBAcmV0dXJucyB7RGVsZWdhdGVVbmRlbGVnYXRlQ29udHJhY3RBcmdzfSBjb250cmFjdHMgYXJncyB0byBjcmVhdGUgYSBzZXNzaW9uXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkVW5kZWxlZ2F0ZVBhcmFtZXRlcnMoKTogRGVsZWdhdGVVbmRlbGVnYXRlQ29udHJhY3RBcmdzIHtcbiAgICBjb25zdCBkZWxlZ2F0b3IgPSBQdWJsaWNLZXkuZnJvbUhleCh0aGlzLl9zb3VyY2UuYWRkcmVzcyk7XG4gICAgY29uc3QgdmFsaWRhdG9yID0gUHVibGljS2V5LmZyb21IZXgodGhpcy5fdmFsaWRhdG9yKTtcblxuICAgIHJldHVybiB7XG4gICAgICBhY3Rpb246IENMVmFsdWVCdWlsZGVyLnN0cmluZyh0aGlzLl9hY3Rpb24pLFxuICAgICAgZGVsZWdhdG9yOiBDTFZhbHVlQnVpbGRlci5wdWJsaWNLZXkoZGVsZWdhdG9yLnZhbHVlKCksIGRlbGVnYXRvci50YWcpLFxuICAgICAgdmFsaWRhdG9yOiBDTFZhbHVlQnVpbGRlci5wdWJsaWNLZXkodmFsaWRhdG9yLnZhbHVlKCksIHZhbGlkYXRvci50YWcpLFxuICAgICAgYW1vdW50OiBDTFZhbHVlQnVpbGRlci51NTEyKHRoaXMuX2Ftb3VudCksXG4gICAgfTtcbiAgfVxuXG4gIC8vIHJlZ2lvbiBUcmFuc2ZlciBmaWVsZHNcbiAgLyoqXG4gICAqIFNldCB0aGUgZGVzdGluYXRpb24gYWRkcmVzcyB3aGVyZSB0aGUgZnVuZHMgd2lsbCBiZSBzZW50LFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYWRkcmVzcyB0aGUgNjggYml0cyBhZGRyZXNzIHRvIHRyYW5zZmVyIGZ1bmRzIHRvXG4gICAqIEByZXR1cm5zIHtVbmRlbGVnYXRlQnVpbGRlcn0gdGhlIGJ1aWxkZXIgd2l0aCB0aGUgbmV3IHBhcmFtZXRlciBzZXRcbiAgICovXG4gIHZhbGlkYXRvcihhZGRyZXNzOiBzdHJpbmcpOiB0aGlzIHtcbiAgICBpZiAoIWlzVmFsaWRBZGRyZXNzKGFkZHJlc3MpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFBhcmFtZXRlclZhbHVlRXJyb3IoJ0ludmFsaWQgYWRkcmVzcycpO1xuICAgIH1cbiAgICB0aGlzLl92YWxpZGF0b3IgPSBhZGRyZXNzO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgYW1vdW50IHRvIGJlIHRyYW5zZmVycmVkXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhbW91bnQgYW1vdW50IHRvIHRyYW5zZmVyXG4gICAqIEByZXR1cm5zIHtVbmRlbGVnYXRlQnVpbGRlcn0gdGhlIGJ1aWxkZXIgd2l0aCB0aGUgbmV3IHBhcmFtZXRlciBzZXRcbiAgICovXG4gIGFtb3VudChhbW91bnQ6IHN0cmluZyk6IHRoaXMge1xuICAgIGlmICghaXNWYWxpZERlbGVnYXRlQW1vdW50KGFtb3VudCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkUGFyYW1ldGVyVmFsdWVFcnJvcignSW52YWxpZCBhbW91bnQnKTtcbiAgICB9XG4gICAgdGhpcy5fYW1vdW50ID0gYW1vdW50O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gZW5kcmVnaW9uXG5cbiAgLy8gcmVnaW9uIFZhbGlkYXRvcnNcblxuICAvKipcbiAgICogVmFsaWRhdGUgbWFuZGF0b3J5IGZpZWxkcyBpbiB0aGUgY2xhc3NcbiAgICpcbiAgICogQHRocm93cyB7RXJyb3J9IEluIGNhc2Ugb2YgbWlzc2luZyBvciBpbnZhbGlkIGZpZWxkc1xuICAgKi9cbiAgdmFsaWRhdGVNYW5kYXRvcnlGaWVsZHMoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9hbW91bnQpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgdHJhbnNhY3Rpb246IG1pc3NpbmcgYW1vdW50Jyk7XG4gICAgfVxuICAgIGlmICghaXNWYWxpZERlbGVnYXRlQW1vdW50KHRoaXMuX2Ftb3VudCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkUGFyYW1ldGVyVmFsdWVFcnJvcignSW52YWxpZCBhbW91bnQnKTtcbiAgICB9XG4gICAgc3VwZXIudmFsaWRhdGVNYW5kYXRvcnlGaWVsZHMoKTtcbiAgfVxuICAvLyBlbmRyZWdpb25cbn1cbiJdfQ==