@bitgo/account-lib 2.17.2-2.17.2-rc.0.0 → 2.17.2-rc.2

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 (98) hide show
  1. package/dist/browser/bitgo-account-lib.min.js +1 -1
  2. package/dist/browser/bitgo-account-lib.min.js.LICENSE.txt +132 -0
  3. package/dist/package.json +10 -3
  4. package/dist/resources/dot/index.ts +2 -0
  5. package/dist/resources/dot/mainnet.ts +2 -0
  6. package/dist/resources/dot/westend.ts +2 -0
  7. package/dist/resources/trx/protobuf/tron.js~account-lib_master +31380 -0
  8. package/dist/src/coin/algo/keyExclusionBuilder.d.ts +9 -0
  9. package/dist/src/coin/algo/keyExclusionBuilder.d.ts.map +1 -0
  10. package/dist/src/coin/algo/keyExclusionBuilder.js +83 -0
  11. package/dist/src/coin/baseCoin/baseTransactionBuilder.d.ts.map +1 -1
  12. package/dist/src/coin/baseCoin/baseTransactionBuilder.js +1 -1
  13. package/dist/src/coin/cspr/utils.js +2 -2
  14. package/dist/src/coin/dot/errors.d.ts +8 -0
  15. package/dist/src/coin/dot/errors.d.ts.map +1 -0
  16. package/dist/src/coin/dot/errors.js +40 -0
  17. package/dist/src/coin/dot/iface.d.ts +154 -0
  18. package/dist/src/coin/dot/iface.d.ts.map +1 -0
  19. package/dist/src/coin/dot/iface.js +15 -0
  20. package/dist/src/coin/dot/index.d.ts +5 -0
  21. package/dist/src/coin/dot/index.d.ts.map +1 -1
  22. package/dist/src/coin/dot/index.js +12 -2
  23. package/dist/src/coin/dot/keyPair.d.ts +15 -2
  24. package/dist/src/coin/dot/keyPair.d.ts.map +1 -1
  25. package/dist/src/coin/dot/keyPair.js +41 -6
  26. package/dist/src/coin/dot/stakingBuilder.d.ts +59 -0
  27. package/dist/src/coin/dot/stakingBuilder.d.ts.map +1 -0
  28. package/dist/src/coin/dot/stakingBuilder.js +162 -0
  29. package/dist/src/coin/dot/transaction.d.ts +31 -3
  30. package/dist/src/coin/dot/transaction.d.ts.map +1 -1
  31. package/dist/src/coin/dot/transaction.js +269 -7
  32. package/dist/src/coin/dot/transactionBuilder.d.ts +102 -9
  33. package/dist/src/coin/dot/transactionBuilder.d.ts.map +1 -1
  34. package/dist/src/coin/dot/transactionBuilder.js +309 -15
  35. package/dist/src/coin/dot/transactionBuilderFactory.d.ts +13 -16
  36. package/dist/src/coin/dot/transactionBuilderFactory.d.ts.map +1 -1
  37. package/dist/src/coin/dot/transactionBuilderFactory.js +60 -25
  38. package/dist/src/coin/dot/transferBuilder.d.ts +62 -4
  39. package/dist/src/coin/dot/transferBuilder.d.ts.map +1 -1
  40. package/dist/src/coin/dot/transferBuilder.js +161 -44
  41. package/dist/src/coin/dot/txnSchema.d.ts +10 -0
  42. package/dist/src/coin/dot/txnSchema.d.ts.map +1 -0
  43. package/dist/src/coin/dot/txnSchema.js +84 -0
  44. package/dist/src/coin/dot/unstakeBuilder.d.ts +38 -0
  45. package/dist/src/coin/dot/unstakeBuilder.d.ts.map +1 -0
  46. package/dist/src/coin/dot/unstakeBuilder.js +116 -0
  47. package/dist/src/coin/dot/utils.d.ts +69 -0
  48. package/dist/src/coin/dot/utils.d.ts.map +1 -1
  49. package/dist/src/coin/dot/utils.js +144 -4
  50. package/dist/src/coin/dot/walletInitializationBuilder.d.ts +51 -5
  51. package/dist/src/coin/dot/walletInitializationBuilder.d.ts.map +1 -1
  52. package/dist/src/coin/dot/walletInitializationBuilder.js +112 -44
  53. package/dist/src/coin/sol/constants.d.ts +24 -0
  54. package/dist/src/coin/sol/constants.d.ts.map +1 -0
  55. package/dist/src/coin/sol/constants.js +35 -0
  56. package/dist/src/coin/sol/iface.d.ts +47 -0
  57. package/dist/src/coin/sol/iface.d.ts.map +1 -0
  58. package/dist/src/coin/sol/iface.js +3 -0
  59. package/dist/src/coin/sol/index.d.ts +5 -0
  60. package/dist/src/coin/sol/index.d.ts.map +1 -0
  61. package/dist/src/coin/sol/index.js +29 -0
  62. package/dist/src/coin/sol/instructionParamsFactory.d.ts +12 -0
  63. package/dist/src/coin/sol/instructionParamsFactory.d.ts.map +1 -0
  64. package/dist/src/coin/sol/instructionParamsFactory.js +99 -0
  65. package/dist/src/coin/sol/keyPair.d.ts +45 -0
  66. package/dist/src/coin/sol/keyPair.d.ts.map +1 -0
  67. package/dist/src/coin/sol/keyPair.js +128 -0
  68. package/dist/src/coin/sol/solInstructionFactory.d.ts +10 -0
  69. package/dist/src/coin/sol/solInstructionFactory.d.ts.map +1 -0
  70. package/dist/src/coin/sol/solInstructionFactory.js +102 -0
  71. package/dist/src/coin/sol/transaction.d.ts +48 -0
  72. package/dist/src/coin/sol/transaction.d.ts.map +1 -0
  73. package/dist/src/coin/sol/transaction.js +254 -0
  74. package/dist/src/coin/sol/transactionBuilder.d.ts +96 -0
  75. package/dist/src/coin/sol/transactionBuilder.d.ts.map +1 -0
  76. package/dist/src/coin/sol/transactionBuilder.js +316 -0
  77. package/dist/src/coin/sol/transactionBuilderFactory.d.ts +34 -0
  78. package/dist/src/coin/sol/transactionBuilderFactory.d.ts.map +1 -0
  79. package/dist/src/coin/sol/transactionBuilderFactory.js +86 -0
  80. package/dist/src/coin/sol/transferBuilder.d.ts +26 -0
  81. package/dist/src/coin/sol/transferBuilder.d.ts.map +1 -0
  82. package/dist/src/coin/sol/transferBuilder.js +140 -0
  83. package/dist/src/coin/sol/utils.d.ts +104 -0
  84. package/dist/src/coin/sol/utils.d.ts.map +1 -0
  85. package/dist/src/coin/sol/utils.js +244 -0
  86. package/dist/src/coin/sol/walletInitializationBuilder.d.ts +26 -0
  87. package/dist/src/coin/sol/walletInitializationBuilder.d.ts.map +1 -0
  88. package/dist/src/coin/sol/walletInitializationBuilder.js +141 -0
  89. package/dist/src/index.d.ts +4 -0
  90. package/dist/src/index.d.ts.map +1 -1
  91. package/dist/src/index.js +10 -2
  92. package/dist/src/utils/crypto.d.ts +8 -0
  93. package/dist/src/utils/crypto.d.ts.map +1 -1
  94. package/dist/src/utils/crypto.js +13 -2
  95. package/package.json +10 -3
  96. package/resources/dot/index.ts +2 -0
  97. package/resources/dot/mainnet.ts +2 -0
  98. package/resources/dot/westend.ts +2 -0
@@ -1,28 +1,121 @@
1
+ import { BaseCoin as CoinConfig, PolkadotSpecNameType } from '@bitgo/statics';
2
+ import { UnsignedTransaction } from '@substrate/txwrapper-core';
3
+ import { DecodedSignedTx, DecodedSigningPayload, TypeRegistry } from '@substrate/txwrapper-core/lib/types';
1
4
  import BigNumber from 'bignumber.js';
2
- import { BaseCoin as CoinConfig } from '@bitgo/statics';
3
- import { BaseTransactionBuilder } from '../baseCoin';
5
+ import { BaseTransactionBuilder, TransactionType } from '../baseCoin';
4
6
  import { BaseAddress, BaseKey } from '../baseCoin/iface';
7
+ import { CreateBaseTxInfo, FeeOptions, sequenceId, TxMethod, validityWindow } from './iface';
8
+ import { KeyPair } from './keyPair';
5
9
  import { Transaction } from './transaction';
6
10
  export declare abstract class TransactionBuilder extends BaseTransactionBuilder {
7
- private _transaction;
11
+ protected _transaction: Transaction;
12
+ protected _keyPair: KeyPair;
13
+ protected _sender: string;
14
+ protected _blockNumber: number;
15
+ protected _referenceBlock: string;
16
+ protected _genesisHash: string;
17
+ protected _metadataRpc: string;
18
+ protected _specVersion: number;
19
+ protected _transactionVersion: number;
20
+ protected _specName: PolkadotSpecNameType;
21
+ protected _chainName: string;
22
+ protected _nonce: number;
23
+ protected _tip?: number;
24
+ protected _eraPeriod?: number;
25
+ protected _registry: TypeRegistry;
26
+ protected _method?: TxMethod;
8
27
  constructor(_coinConfig: Readonly<CoinConfig>);
9
28
  /**
10
- * Initialize the transaction builder fields using the decoded transaction data
29
+ * Sets the address of sending account.
11
30
  *
12
- * @param {Transaction} tx the transaction data
31
+ * @param {BaseAddress} address The SS58-encoded address.
32
+ * @returns {TransactionBuilder} This transaction builder.
33
+ *
34
+ * @see https://wiki.polkadot.network/docs/build-transaction-construction
35
+ */
36
+ sender({ address }: BaseAddress): this;
37
+ /**
38
+ * The nonce for this transaction.
39
+ *
40
+ * @param {number} nonce
41
+ * @returns {TransactionBuilder} This transaction builder.
42
+ *
43
+ * @see https://wiki.polkadot.network/docs/build-transaction-construction
44
+ */
45
+ sequenceId(nonce: sequenceId): this;
46
+ /**
47
+ * The tip to increase transaction priority.
48
+ *
49
+ * @param {number | undefined} tip optional
50
+ * @returns {TransactionBuilder} This transaction builder.
51
+ *
52
+ * @see https://wiki.polkadot.network/docs/build-transaction-construction
53
+ */
54
+ fee(fee: FeeOptions): this;
55
+ /**
56
+ * The number of the checkpoint block after which the transaction is valid
57
+ *
58
+ * @param {number} blockNumber
59
+ * @returns {TransactionBuilder} This transaction builder.
60
+ *
61
+ * @see https://wiki.polkadot.network/docs/build-transaction-construction
13
62
  */
14
- initBuilder(tx: Transaction): void;
63
+ validity({ firstValid, maxDuration }: validityWindow): this;
64
+ /**
65
+ * The hash of the checkpoint block.
66
+ *
67
+ * @param {number} blockHash
68
+ * @returns {TransactionBuilder} This transaction builder.
69
+ *
70
+ * @see https://wiki.polkadot.network/docs/build-transaction-construction
71
+ * @see https://wiki.polkadot.network/docs/build-protocol-info#transaction-mortality
72
+ */
73
+ referenceBlock(referenceBlock: string): this;
74
+ /**
75
+ * The current version for transaction format.
76
+ *
77
+ * @param {number} transactionVersion
78
+ * @returns {TransactionBuilder} This transaction builder.
79
+ *
80
+ * @see https://wiki.polkadot.network/docs/build-transaction-construction
81
+ */
82
+ version(transactionVersion: number): this;
83
+ private method;
84
+ /**
85
+ * Set the network based on the configuration in the statics module
86
+ */
87
+ protected staticsConfig(): void;
15
88
  /** @inheritdoc */
16
89
  protected get transaction(): Transaction;
17
90
  /** @inheritdoc */
91
+ protected set transaction(transaction: Transaction);
92
+ protected isSigningPayload(payload: DecodedSigningPayload | DecodedSignedTx): payload is DecodedSigningPayload;
93
+ /** @inheritdoc */
94
+ protected fromImplementation(rawTransaction: string): Transaction;
95
+ /** @inheritdoc */
96
+ protected buildImplementation(): Promise<Transaction>;
97
+ protected createBaseTxInfo(): CreateBaseTxInfo;
98
+ /**
99
+ * Builds the specific transaction builder internally
100
+ * using the @substrate/txwrapper builder.
101
+ */
102
+ protected abstract buildTransaction(): UnsignedTransaction;
103
+ /**
104
+ * The transaction type.
105
+ */
106
+ protected abstract get transactionType(): TransactionType;
107
+ /** @inheritdoc */
18
108
  validateAddress(address: BaseAddress, addressFormat?: string): void;
19
109
  /** @inheritdoc */
20
- validateKey(key: BaseKey): void;
110
+ validateKey({ key }: BaseKey): void;
21
111
  /** @inheritdoc */
22
- validateRawTransaction(rawTransaction: any): void;
112
+ validateRawTransaction(rawTransaction: string): void;
23
113
  /** @inheritdoc */
24
- validateTransaction(transaction?: Transaction): void;
114
+ validateTransaction(_: Transaction): void;
115
+ private validateBaseFields;
25
116
  /** @inheritdoc */
26
117
  validateValue(value: BigNumber): void;
118
+ /** @inheritdoc */
119
+ protected signImplementation({ key }: BaseKey): Transaction;
27
120
  }
28
121
  //# sourceMappingURL=transactionBuilder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"transactionBuilder.d.ts","sourceRoot":"","sources":["../../../../src/coin/dot/transactionBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAErD,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,8BAAsB,kBAAmB,SAAQ,sBAAsB;IACrE,OAAO,CAAC,YAAY,CAAc;gBAEtB,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI7C;;;;OAIG;IACH,WAAW,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI;IAKlC,kBAAkB;IAClB,SAAS,KAAK,WAAW,IAAI,WAAW,CAEvC;IAID,kBAAkB;IAClB,eAAe,CAAC,OAAO,EAAE,WAAW,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI;IAInE,kBAAkB;IAClB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;IAI/B,kBAAkB;IAClB,sBAAsB,CAAC,cAAc,EAAE,GAAG,GAAG,IAAI;IAIjD,kBAAkB;IAClB,mBAAmB,CAAC,WAAW,CAAC,EAAE,WAAW,GAAG,IAAI;IAIpD,kBAAkB;IAClB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;CAItC"}
1
+ {"version":3,"file":"transactionBuilder.d.ts","sourceRoot":"","sources":["../../../../src/coin/dot/transactionBuilder.ts"],"names":[],"mappings":"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"}
@@ -14,55 +14,349 @@ var __extends = (this && this.__extends) || (function () {
14
14
  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
15
15
  };
16
16
  })();
17
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
18
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
19
+ return new (P || (P = Promise))(function (resolve, reject) {
20
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
21
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
22
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
23
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
24
+ });
25
+ };
26
+ var __generator = (this && this.__generator) || function (thisArg, body) {
27
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
28
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
29
+ function verb(n) { return function (v) { return step([n, v]); }; }
30
+ function step(op) {
31
+ if (f) throw new TypeError("Generator is already executing.");
32
+ while (_) try {
33
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
34
+ if (y = 0, t) op = [op[0] & 2, t.value];
35
+ switch (op[0]) {
36
+ case 0: case 1: t = op; break;
37
+ case 4: _.label++; return { value: op[1], done: false };
38
+ case 5: _.label++; y = op[1]; op = [0]; continue;
39
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
40
+ default:
41
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
42
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
43
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
44
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
45
+ if (t[2]) _.ops.pop();
46
+ _.trys.pop(); continue;
47
+ }
48
+ op = body.call(thisArg, _);
49
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
50
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
51
+ }
52
+ };
53
+ var __importDefault = (this && this.__importDefault) || function (mod) {
54
+ return (mod && mod.__esModule) ? mod : { "default": mod };
55
+ };
17
56
  Object.defineProperty(exports, "__esModule", { value: true });
18
57
  exports.TransactionBuilder = void 0;
58
+ var txwrapper_polkadot_1 = require("@substrate/txwrapper-polkadot");
59
+ var bignumber_js_1 = __importDefault(require("bignumber.js"));
60
+ var crypto_1 = require("../../utils/crypto");
19
61
  var baseCoin_1 = require("../baseCoin");
20
62
  var errors_1 = require("../baseCoin/errors");
63
+ var errors_2 = require("./errors");
64
+ var keyPair_1 = require("./keyPair");
65
+ var transaction_1 = require("./transaction");
66
+ var txnSchema_1 = require("./txnSchema");
67
+ var utils_1 = __importDefault(require("./utils"));
21
68
  var TransactionBuilder = /** @class */ (function (_super) {
22
69
  __extends(TransactionBuilder, _super);
23
70
  function TransactionBuilder(_coinConfig) {
24
- return _super.call(this, _coinConfig) || this;
71
+ var _this = _super.call(this, _coinConfig) || this;
72
+ _this._transaction = new transaction_1.Transaction(_coinConfig);
73
+ _this.staticsConfig();
74
+ return _this;
25
75
  }
26
76
  /**
27
- * Initialize the transaction builder fields using the decoded transaction data
77
+ * Sets the address of sending account.
78
+ *
79
+ * @param {BaseAddress} address The SS58-encoded address.
80
+ * @returns {TransactionBuilder} This transaction builder.
81
+ *
82
+ * @see https://wiki.polkadot.network/docs/build-transaction-construction
83
+ */
84
+ TransactionBuilder.prototype.sender = function (_a) {
85
+ var address = _a.address;
86
+ this.validateAddress({ address: address });
87
+ this._sender = address;
88
+ this._transaction.sender(address);
89
+ return this;
90
+ };
91
+ /**
92
+ * The nonce for this transaction.
93
+ *
94
+ * @param {number} nonce
95
+ * @returns {TransactionBuilder} This transaction builder.
96
+ *
97
+ * @see https://wiki.polkadot.network/docs/build-transaction-construction
98
+ */
99
+ TransactionBuilder.prototype.sequenceId = function (nonce) {
100
+ var value = new bignumber_js_1.default(nonce.value);
101
+ this.validateValue(value);
102
+ this._nonce = value.toNumber();
103
+ return this;
104
+ };
105
+ /**
106
+ * The tip to increase transaction priority.
107
+ *
108
+ * @param {number | undefined} tip optional
109
+ * @returns {TransactionBuilder} This transaction builder.
110
+ *
111
+ * @see https://wiki.polkadot.network/docs/build-transaction-construction
112
+ */
113
+ TransactionBuilder.prototype.fee = function (fee) {
114
+ if (fee.type !== 'tip') {
115
+ throw new errors_2.InvalidFeeError(fee.type, 'tip');
116
+ }
117
+ var tipBN = new bignumber_js_1.default(fee.amount);
118
+ this.validateValue(tipBN);
119
+ this._tip = tipBN.toNumber();
120
+ return this;
121
+ };
122
+ /**
123
+ * The number of the checkpoint block after which the transaction is valid
124
+ *
125
+ * @param {number} blockNumber
126
+ * @returns {TransactionBuilder} This transaction builder.
127
+ *
128
+ * @see https://wiki.polkadot.network/docs/build-transaction-construction
129
+ */
130
+ TransactionBuilder.prototype.validity = function (_a) {
131
+ var firstValid = _a.firstValid, maxDuration = _a.maxDuration;
132
+ if (firstValid) {
133
+ this.validateValue(new bignumber_js_1.default(firstValid));
134
+ this._blockNumber = firstValid;
135
+ }
136
+ if (maxDuration) {
137
+ this.validateValue(new bignumber_js_1.default(maxDuration));
138
+ this._eraPeriod = maxDuration;
139
+ }
140
+ return this;
141
+ };
142
+ /**
143
+ * The hash of the checkpoint block.
144
+ *
145
+ * @param {number} blockHash
146
+ * @returns {TransactionBuilder} This transaction builder.
28
147
  *
29
- * @param {Transaction} tx the transaction data
148
+ * @see https://wiki.polkadot.network/docs/build-transaction-construction
149
+ * @see https://wiki.polkadot.network/docs/build-protocol-info#transaction-mortality
30
150
  */
31
- TransactionBuilder.prototype.initBuilder = function (tx) {
32
- throw new errors_1.NotImplementedError('initBuilder not implemented');
151
+ TransactionBuilder.prototype.referenceBlock = function (referenceBlock) {
152
+ this._referenceBlock = referenceBlock;
153
+ return this;
154
+ };
155
+ /**
156
+ * The current version for transaction format.
157
+ *
158
+ * @param {number} transactionVersion
159
+ * @returns {TransactionBuilder} This transaction builder.
160
+ *
161
+ * @see https://wiki.polkadot.network/docs/build-transaction-construction
162
+ */
163
+ TransactionBuilder.prototype.version = function (transactionVersion) {
164
+ this._transactionVersion = transactionVersion;
165
+ return this;
166
+ };
167
+ TransactionBuilder.prototype.method = function (method) {
168
+ this._method = method;
169
+ return this;
170
+ };
171
+ /**
172
+ * Set the network based on the configuration in the statics module
173
+ */
174
+ TransactionBuilder.prototype.staticsConfig = function () {
175
+ var networkConfig = this._coinConfig.network;
176
+ var specName = networkConfig.specName, genesisHash = networkConfig.genesisHash, specVersion = networkConfig.specVersion, chainName = networkConfig.chainName, metadataRpc = networkConfig.metadataRpc;
177
+ this._genesisHash = genesisHash;
178
+ this._specVersion = specVersion;
179
+ this._chainName = chainName;
180
+ this._specName = specName;
181
+ this._metadataRpc = metadataRpc;
182
+ this._registry = txwrapper_polkadot_1.getRegistry({
183
+ chainName: chainName,
184
+ specName: specName,
185
+ specVersion: specVersion,
186
+ metadataRpc: metadataRpc,
187
+ });
33
188
  };
34
189
  Object.defineProperty(TransactionBuilder.prototype, "transaction", {
35
- // region Getters and Setters
36
190
  /** @inheritdoc */
37
191
  get: function () {
38
192
  return this._transaction;
39
193
  },
194
+ /** @inheritdoc */
195
+ set: function (transaction) {
196
+ this._transaction = transaction;
197
+ },
40
198
  enumerable: false,
41
199
  configurable: true
42
200
  });
43
- // endregion
201
+ TransactionBuilder.prototype.isSigningPayload = function (payload) {
202
+ return payload.blockHash !== undefined;
203
+ };
204
+ /** @inheritdoc */
205
+ TransactionBuilder.prototype.fromImplementation = function (rawTransaction) {
206
+ var decodedTxn = txwrapper_polkadot_1.decode(rawTransaction, {
207
+ metadataRpc: this._metadataRpc,
208
+ registry: this._registry,
209
+ });
210
+ if (this.isSigningPayload(decodedTxn)) {
211
+ this.referenceBlock(decodedTxn.blockHash);
212
+ this.version(decodedTxn.transactionVersion);
213
+ }
214
+ else {
215
+ this.sender({ address: utils_1.default.decodeDotAddress(decodedTxn.address) });
216
+ }
217
+ this.validity({ maxDuration: decodedTxn.eraPeriod });
218
+ this.sequenceId({
219
+ name: 'Nonce',
220
+ keyword: 'nonce',
221
+ value: decodedTxn.nonce,
222
+ });
223
+ if (decodedTxn.tip) {
224
+ this.fee({ amount: "" + decodedTxn.tip, type: 'tip' });
225
+ }
226
+ this.method(decodedTxn.method);
227
+ return this._transaction;
228
+ };
229
+ /** @inheritdoc */
230
+ TransactionBuilder.prototype.buildImplementation = function () {
231
+ return __awaiter(this, void 0, void 0, function () {
232
+ return __generator(this, function (_a) {
233
+ this.transaction.setTransaction(this.buildTransaction());
234
+ this.transaction.transactionType(this.transactionType);
235
+ this.transaction.registry(this._registry);
236
+ this.transaction.chainName(this._chainName);
237
+ if (this._keyPair) {
238
+ this.transaction.sign(this._keyPair);
239
+ }
240
+ this._transaction.loadInputsAndOutputs();
241
+ return [2 /*return*/, this._transaction];
242
+ });
243
+ });
244
+ };
245
+ TransactionBuilder.prototype.createBaseTxInfo = function () {
246
+ return {
247
+ baseTxInfo: {
248
+ address: this._sender,
249
+ blockHash: this._referenceBlock,
250
+ blockNumber: this._registry.createType('BlockNumber', this._blockNumber).toNumber(),
251
+ eraPeriod: this._eraPeriod,
252
+ genesisHash: this._genesisHash,
253
+ metadataRpc: this._metadataRpc,
254
+ nonce: this._nonce,
255
+ specVersion: this._specVersion,
256
+ tip: this._tip,
257
+ transactionVersion: this._transactionVersion,
258
+ },
259
+ options: {
260
+ metadataRpc: this._metadataRpc,
261
+ registry: this._registry,
262
+ },
263
+ };
264
+ };
44
265
  // region Validators
45
266
  /** @inheritdoc */
46
267
  TransactionBuilder.prototype.validateAddress = function (address, addressFormat) {
47
- throw new errors_1.NotImplementedError('validateAddress not implemented');
268
+ if (!utils_1.default.isValidAddress(address.address)) {
269
+ throw new errors_2.AddressValidationError(address.address);
270
+ }
48
271
  };
49
272
  /** @inheritdoc */
50
- TransactionBuilder.prototype.validateKey = function (key) {
51
- throw new errors_1.NotImplementedError('validateKey not implemented');
273
+ TransactionBuilder.prototype.validateKey = function (_a) {
274
+ var key = _a.key;
275
+ var isValidPrivateKeyFromBytes;
276
+ var isValidPrivateKeyFromHex = crypto_1.isValidEd25519Seed(key);
277
+ var isValidPrivateKeyFromBase64 = crypto_1.isValidEd25519Seed(Buffer.from(key, 'base64').toString('hex'));
278
+ try {
279
+ var decodedSeed = utils_1.default.decodeSeed(key);
280
+ isValidPrivateKeyFromBytes = crypto_1.isValidEd25519Seed(Buffer.from(decodedSeed.seed).toString('hex'));
281
+ }
282
+ catch (err) {
283
+ isValidPrivateKeyFromBytes = false;
284
+ }
285
+ if (!isValidPrivateKeyFromBytes && !isValidPrivateKeyFromHex && !isValidPrivateKeyFromBase64) {
286
+ throw new errors_1.BuildTransactionError("Key validation failed");
287
+ }
52
288
  };
53
289
  /** @inheritdoc */
54
290
  TransactionBuilder.prototype.validateRawTransaction = function (rawTransaction) {
55
- throw new errors_1.NotImplementedError('validateRawTransaction not implemented');
291
+ var decodedTxn = txwrapper_polkadot_1.decode(rawTransaction, {
292
+ metadataRpc: this._metadataRpc,
293
+ registry: this._registry,
294
+ });
295
+ var eraPeriod = decodedTxn.eraPeriod;
296
+ var nonce = decodedTxn.nonce;
297
+ var tip = decodedTxn.tip;
298
+ if (this.isSigningPayload(decodedTxn)) {
299
+ var blockHash = decodedTxn.blockHash;
300
+ var validationResult = txnSchema_1.SigningPayloadTransactionSchema.validate({
301
+ eraPeriod: eraPeriod,
302
+ blockHash: blockHash,
303
+ nonce: nonce,
304
+ tip: tip,
305
+ });
306
+ if (validationResult.error) {
307
+ throw new errors_1.InvalidTransactionError("Transaction validation failed: " + validationResult.error.message);
308
+ }
309
+ }
310
+ else {
311
+ var sender = decodedTxn.address;
312
+ var validationResult = txnSchema_1.SignedTransactionSchema.validate({
313
+ sender: sender,
314
+ nonce: nonce,
315
+ eraPeriod: eraPeriod,
316
+ tip: tip,
317
+ });
318
+ if (validationResult.error) {
319
+ throw new errors_1.InvalidTransactionError("Transaction validation failed: " + validationResult.error.message);
320
+ }
321
+ }
56
322
  };
57
323
  /** @inheritdoc */
58
- TransactionBuilder.prototype.validateTransaction = function (transaction) {
59
- throw new errors_1.NotImplementedError('validateTransaction not implemented');
324
+ TransactionBuilder.prototype.validateTransaction = function (_) {
325
+ this.validateBaseFields(this._sender, this._blockNumber, this._referenceBlock, this._genesisHash, this._metadataRpc, this._chainName, this._nonce, this._specVersion, this._specName, this._transactionVersion, this._eraPeriod, this._tip);
326
+ };
327
+ TransactionBuilder.prototype.validateBaseFields = function (sender, blockNumber, blockHash, genesisHash, metadataRpc, chainName, nonce, specVersion, specName, transactionVersion, eraPeriod, tip) {
328
+ var validationResult = txnSchema_1.BaseTransactionSchema.validate({
329
+ sender: sender,
330
+ blockNumber: blockNumber,
331
+ blockHash: blockHash,
332
+ genesisHash: genesisHash,
333
+ metadataRpc: metadataRpc,
334
+ chainName: chainName,
335
+ nonce: nonce,
336
+ specVersion: specVersion,
337
+ specName: specName,
338
+ transactionVersion: transactionVersion,
339
+ eraPeriod: eraPeriod,
340
+ tip: tip,
341
+ });
342
+ if (validationResult.error) {
343
+ throw new errors_1.InvalidTransactionError("Transaction validation failed: " + validationResult.error.message);
344
+ }
60
345
  };
61
346
  /** @inheritdoc */
62
347
  TransactionBuilder.prototype.validateValue = function (value) {
63
- throw new errors_1.NotImplementedError('validateValue not implemented');
348
+ if (value.isLessThan(0)) {
349
+ throw new errors_1.BuildTransactionError('Value cannot be less than zero');
350
+ }
351
+ };
352
+ // endregion
353
+ /** @inheritdoc */
354
+ TransactionBuilder.prototype.signImplementation = function (_a) {
355
+ var key = _a.key;
356
+ this._keyPair = new keyPair_1.KeyPair({ prv: key });
357
+ return this._transaction;
64
358
  };
65
359
  return TransactionBuilder;
66
360
  }(baseCoin_1.BaseTransactionBuilder));
67
361
  exports.TransactionBuilder = TransactionBuilder;
68
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvaW4vZG90L3RyYW5zYWN0aW9uQnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSx3Q0FBcUQ7QUFDckQsNkNBQXlEO0FBSXpEO0lBQWlELHNDQUFzQjtJQUdyRSw0QkFBWSxXQUFpQztlQUMzQyxrQkFBTSxXQUFXLENBQUM7SUFDcEIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCx3Q0FBVyxHQUFYLFVBQVksRUFBZTtRQUN6QixNQUFNLElBQUksNEJBQW1CLENBQUMsNkJBQTZCLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBSUQsc0JBQWMsMkNBQVc7UUFGekIsNkJBQTZCO1FBQzdCLGtCQUFrQjthQUNsQjtZQUNFLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztRQUMzQixDQUFDOzs7T0FBQTtJQUNELFlBQVk7SUFFWixvQkFBb0I7SUFDcEIsa0JBQWtCO0lBQ2xCLDRDQUFlLEdBQWYsVUFBZ0IsT0FBb0IsRUFBRSxhQUFzQjtRQUMxRCxNQUFNLElBQUksNEJBQW1CLENBQUMsaUNBQWlDLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLHdDQUFXLEdBQVgsVUFBWSxHQUFZO1FBQ3RCLE1BQU0sSUFBSSw0QkFBbUIsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsbURBQXNCLEdBQXRCLFVBQXVCLGNBQW1CO1FBQ3hDLE1BQU0sSUFBSSw0QkFBbUIsQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsZ0RBQW1CLEdBQW5CLFVBQW9CLFdBQXlCO1FBQzNDLE1BQU0sSUFBSSw0QkFBbUIsQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsMENBQWEsR0FBYixVQUFjLEtBQWdCO1FBQzVCLE1BQU0sSUFBSSw0QkFBbUIsQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFSCx5QkFBQztBQUFELENBQUMsQUFqREQsQ0FBaUQsaUNBQXNCLEdBaUR0RTtBQWpEcUIsZ0RBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJpZ051bWJlciBmcm9tICdiaWdudW1iZXIuanMnO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCB7IEJhc2VUcmFuc2FjdGlvbkJ1aWxkZXIgfSBmcm9tICcuLi9iYXNlQ29pbic7XG5pbXBvcnQgeyBOb3RJbXBsZW1lbnRlZEVycm9yIH0gZnJvbSAnLi4vYmFzZUNvaW4vZXJyb3JzJztcbmltcG9ydCB7IEJhc2VBZGRyZXNzLCBCYXNlS2V5IH0gZnJvbSAnLi4vYmFzZUNvaW4vaWZhY2UnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tICcuL3RyYW5zYWN0aW9uJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFRyYW5zYWN0aW9uQnVpbGRlciBleHRlbmRzIEJhc2VUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICBwcml2YXRlIF90cmFuc2FjdGlvbjogVHJhbnNhY3Rpb247XG5cbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgdGhlIHRyYW5zYWN0aW9uIGJ1aWxkZXIgZmllbGRzIHVzaW5nIHRoZSBkZWNvZGVkIHRyYW5zYWN0aW9uIGRhdGFcbiAgICpcbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvbn0gdHggdGhlIHRyYW5zYWN0aW9uIGRhdGFcbiAgICovXG4gIGluaXRCdWlsZGVyKHR4OiBUcmFuc2FjdGlvbik6IHZvaWQge1xuICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCdpbml0QnVpbGRlciBub3QgaW1wbGVtZW50ZWQnKTtcbiAgfVxuXG4gIC8vIHJlZ2lvbiBHZXR0ZXJzIGFuZCBTZXR0ZXJzXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgZ2V0IHRyYW5zYWN0aW9uKCk6IFRyYW5zYWN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNhY3Rpb247XG4gIH1cbiAgLy8gZW5kcmVnaW9uXG5cbiAgLy8gcmVnaW9uIFZhbGlkYXRvcnNcbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlQWRkcmVzcyhhZGRyZXNzOiBCYXNlQWRkcmVzcywgYWRkcmVzc0Zvcm1hdD86IHN0cmluZyk6IHZvaWQge1xuICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCd2YWxpZGF0ZUFkZHJlc3Mgbm90IGltcGxlbWVudGVkJyk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVLZXkoa2V5OiBCYXNlS2V5KTogdm9pZCB7XG4gICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoJ3ZhbGlkYXRlS2V5IG5vdCBpbXBsZW1lbnRlZCcpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlUmF3VHJhbnNhY3Rpb24ocmF3VHJhbnNhY3Rpb246IGFueSk6IHZvaWQge1xuICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCd2YWxpZGF0ZVJhd1RyYW5zYWN0aW9uIG5vdCBpbXBsZW1lbnRlZCcpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlVHJhbnNhY3Rpb24odHJhbnNhY3Rpb24/OiBUcmFuc2FjdGlvbik6IHZvaWQge1xuICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCd2YWxpZGF0ZVRyYW5zYWN0aW9uIG5vdCBpbXBsZW1lbnRlZCcpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlVmFsdWUodmFsdWU6IEJpZ051bWJlcik6IHZvaWQge1xuICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCd2YWxpZGF0ZVZhbHVlIG5vdCBpbXBsZW1lbnRlZCcpO1xuICB9XG4gIC8vIGVuZHJlZ2lvblxufVxuIl19
362
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvaW4vZG90L3RyYW5zYWN0aW9uQnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFHQSxvRUFBb0U7QUFDcEUsOERBQXFDO0FBQ3JDLDZDQUF3RDtBQUN4RCx3Q0FBc0U7QUFDdEUsNkNBQW9GO0FBRXBGLG1DQUFtRTtBQUVuRSxxQ0FBb0M7QUFDcEMsNkNBQTRDO0FBQzVDLHlDQUE4RztBQUM5RyxrREFBNkQ7QUFFN0Q7SUFBaUQsc0NBQXNCO0lBbUJyRSw0QkFBWSxXQUFpQztRQUE3QyxZQUNFLGtCQUFNLFdBQVcsQ0FBQyxTQUduQjtRQUZDLEtBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSx5QkFBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2pELEtBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQzs7SUFDdkIsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxtQ0FBTSxHQUFOLFVBQU8sRUFBd0I7WUFBdEIsT0FBTyxhQUFBO1FBQ2QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLE9BQU8sU0FBQSxFQUFFLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN2QixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNsQyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsdUNBQVUsR0FBVixVQUFXLEtBQWlCO1FBQzFCLElBQU0sS0FBSyxHQUFHLElBQUksc0JBQVMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQixJQUFJLENBQUMsTUFBTSxH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O1FBQzVCLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUN2QixNQUFNLElBQUksOEJBQXFCLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztTQUNuRTtJQUNILENBQUM7SUFFRCxZQUFZO0lBRVosa0JBQWtCO0lBQ1IsK0NBQWtCLEdBQTVCLFVBQTZCLEVBQWdCO1lBQWQsR0FBRyxTQUFBO1FBQ2hDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxpQkFBTyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDMUMsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFDSCx5QkFBQztBQUFELENBQUMsQUFsV0QsQ0FBaUQsaUNBQXNCLEdBa1d0RTtBQWxXcUIsZ0RBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZywgRG90TmV0d29yaywgUG9sa2Fkb3RTcGVjTmFtZVR5cGUgfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5pbXBvcnQgeyBVbnNpZ25lZFRyYW5zYWN0aW9uIH0gZnJvbSAnQHN1YnN0cmF0ZS90eHdyYXBwZXItY29yZSc7XG5pbXBvcnQgeyBEZWNvZGVkU2lnbmVkVHgsIERlY29kZWRTaWduaW5nUGF5bG9hZCwgVHlwZVJlZ2lzdHJ5IH0gZnJvbSAnQHN1YnN0cmF0ZS90eHdyYXBwZXItY29yZS9saWIvdHlwZXMnO1xuaW1wb3J0IHsgZGVjb2RlLCBnZXRSZWdpc3RyeSB9IGZyb20gJ0BzdWJzdHJhdGUvdHh3cmFwcGVyLXBvbGthZG90JztcbmltcG9ydCBCaWdOdW1iZXIgZnJvbSAnYmlnbnVtYmVyLmpzJztcbmltcG9ydCB7IGlzVmFsaWRFZDI1NTE5U2VlZCB9IGZyb20gJy4uLy4uL3V0aWxzL2NyeXB0byc7XG5pbXBvcnQgeyBCYXNlVHJhbnNhY3Rpb25CdWlsZGVyLCBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICcuLi9iYXNlQ29pbic7XG5pbXBvcnQgeyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IsIEludmFsaWRUcmFuc2FjdGlvbkVycm9yIH0gZnJvbSAnLi4vYmFzZUNvaW4vZXJyb3JzJztcbmltcG9ydCB7IEJhc2VBZGRyZXNzLCBCYXNlS2V5IH0gZnJvbSAnLi4vYmFzZUNvaW4vaWZhY2UnO1xuaW1wb3J0IHsgQWRkcmVzc1ZhbGlkYXRpb25FcnJvciwgSW52YWxpZEZlZUVycm9yIH0gZnJvbSAnLi9lcnJvcnMnO1xuaW1wb3J0IHsgQ3JlYXRlQmFzZVR4SW5mbywgRmVlT3B0aW9ucywgc2VxdWVuY2VJZCwgVHhNZXRob2QsIHZhbGlkaXR5V2luZG93IH0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQgeyBLZXlQYWlyIH0gZnJvbSAnLi9rZXlQYWlyJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbic7XG5pbXBvcnQgeyBCYXNlVHJhbnNhY3Rpb25TY2hlbWEsIFNpZ25lZFRyYW5zYWN0aW9uU2NoZW1hLCBTaWduaW5nUGF5bG9hZFRyYW5zYWN0aW9uU2NoZW1hIH0gZnJvbSAnLi90eG5TY2hlbWEnO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBVdGlscywgZGVmYXVsdCBhcyB1dGlscyB9IGZyb20gJy4vdXRpbHMnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgVHJhbnNhY3Rpb25CdWlsZGVyIGV4dGVuZHMgQmFzZVRyYW5zYWN0aW9uQnVpbGRlciB7XG4gIHByb3RlY3RlZCBfdHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uO1xuICBwcm90ZWN0ZWQgX2tleVBhaXI6IEtleVBhaXI7XG4gIHByb3RlY3RlZCBfc2VuZGVyOiBzdHJpbmc7XG5cbiAgcHJvdGVjdGVkIF9ibG9ja051bWJlcjogbnVtYmVyO1xuICBwcm90ZWN0ZWQgX3JlZmVyZW5jZUJsb2NrOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBfZ2VuZXNpc0hhc2g6IHN0cmluZztcbiAgcHJvdGVjdGVkIF9tZXRhZGF0YVJwYzogc3RyaW5nO1xuICBwcm90ZWN0ZWQgX3NwZWNWZXJzaW9uOiBudW1iZXI7XG4gIHByb3RlY3RlZCBfdHJhbnNhY3Rpb25WZXJzaW9uOiBudW1iZXI7XG4gIHByb3RlY3RlZCBfc3BlY05hbWU6IFBvbGthZG90U3BlY05hbWVUeXBlO1xuICBwcm90ZWN0ZWQgX2NoYWluTmFtZTogc3RyaW5nO1xuICBwcm90ZWN0ZWQgX25vbmNlOiBudW1iZXI7XG4gIHByb3RlY3RlZCBfdGlwPzogbnVtYmVyO1xuICBwcm90ZWN0ZWQgX2VyYVBlcmlvZD86IG51bWJlcjtcbiAgcHJvdGVjdGVkIF9yZWdpc3RyeTogVHlwZVJlZ2lzdHJ5O1xuICBwcm90ZWN0ZWQgX21ldGhvZD86IFR4TWV0aG9kO1xuXG4gIGNvbnN0cnVjdG9yKF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKF9jb2luQ29uZmlnKTtcbiAgICB0aGlzLl90cmFuc2FjdGlvbiA9IG5ldyBUcmFuc2FjdGlvbihfY29pbkNvbmZpZyk7XG4gICAgdGhpcy5zdGF0aWNzQ29uZmlnKCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgYWRkcmVzcyBvZiBzZW5kaW5nIGFjY291bnQuXG4gICAqXG4gICAqIEBwYXJhbSB7QmFzZUFkZHJlc3N9IGFkZHJlc3MgVGhlIFNTNTgtZW5jb2RlZCBhZGRyZXNzLlxuICAgKiBAcmV0dXJucyB7VHJhbnNhY3Rpb25CdWlsZGVyfSBUaGlzIHRyYW5zYWN0aW9uIGJ1aWxkZXIuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly93aWtpLnBvbGthZG90Lm5ldHdvcmsvZG9jcy9idWlsZC10cmFuc2FjdGlvbi1jb25zdHJ1Y3Rpb25cbiAgICovXG4gIHNlbmRlcih7IGFkZHJlc3MgfTogQmFzZUFkZHJlc3MpOiB0aGlzIHtcbiAgICB0aGlzLnZhbGlkYXRlQWRkcmVzcyh7IGFkZHJlc3MgfSk7XG4gICAgdGhpcy5fc2VuZGVyID0gYWRkcmVzcztcbiAgICB0aGlzLl90cmFuc2FjdGlvbi5zZW5kZXIoYWRkcmVzcyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogVGhlIG5vbmNlIGZvciB0aGlzIHRyYW5zYWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gbm9uY2VcbiAgICogQHJldHVybnMge1RyYW5zYWN0aW9uQnVpbGRlcn0gVGhpcyB0cmFuc2FjdGlvbiBidWlsZGVyLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vd2lraS5wb2xrYWRvdC5uZXR3b3JrL2RvY3MvYnVpbGQtdHJhbnNhY3Rpb24tY29uc3RydWN0aW9uXG4gICAqL1xuICBzZXF1ZW5jZUlkKG5vbmNlOiBzZXF1ZW5jZUlkKTogdGhpcyB7XG4gICAgY29uc3QgdmFsdWUgPSBuZXcgQmlnTnVtYmVyKG5vbmNlLnZhbHVlKTtcbiAgICB0aGlzLnZhbGlkYXRlVmFsdWUodmFsdWUpO1xuICAgIHRoaXMuX25vbmNlID0gdmFsdWUudG9OdW1iZXIoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgdGlwIHRvIGluY3JlYXNlIHRyYW5zYWN0aW9uIHByaW9yaXR5LlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IHVuZGVmaW5lZH0gdGlwIG9wdGlvbmFsXG4gICAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbkJ1aWxkZXJ9IFRoaXMgdHJhbnNhY3Rpb24gYnVpbGRlci5cbiAgICpcbiAgICogQHNlZSBodHRwczovL3dpa2kucG9sa2Fkb3QubmV0d29yay9kb2NzL2J1aWxkLXRyYW5zYWN0aW9uLWNvbnN0cnVjdGlvblxuICAgKi9cbiAgZmVlKGZlZTogRmVlT3B0aW9ucyk6IHRoaXMge1xuICAgIGlmIChmZWUudHlwZSAhPT0gJ3RpcCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkRmVlRXJyb3IoZmVlLnR5cGUsICd0aXAnKTtcbiAgICB9XG4gICAgY29uc3QgdGlwQk4gPSBuZXcgQmlnTnVtYmVyKGZlZS5hbW91bnQpO1xuICAgIHRoaXMudmFsaWRhdGVWYWx1ZSh0aXBCTik7XG4gICAgdGhpcy5fdGlwID0gdGlwQk4udG9OdW1iZXIoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIHRoZSBjaGVja3BvaW50IGJsb2NrIGFmdGVyIHdoaWNoIHRoZSB0cmFuc2FjdGlvbiBpcyB2YWxpZFxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gYmxvY2tOdW1iZXJcbiAgICogQHJldHVybnMge1RyYW5zYWN0aW9uQnVpbGRlcn0gVGhpcyB0cmFuc2FjdGlvbiBidWlsZGVyLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vd2lraS5wb2xrYWRvdC5uZXR3b3JrL2RvY3MvYnVpbGQtdHJhbnNhY3Rpb24tY29uc3RydWN0aW9uXG4gICAqL1xuICB2YWxpZGl0eSh7IGZpcnN0VmFsaWQsIG1heER1cmF0aW9uIH06IHZhbGlkaXR5V2luZG93KTogdGhpcyB7XG4gICAgaWYgKGZpcnN0VmFsaWQpIHtcbiAgICAgIHRoaXMudmFsaWRhdGVWYWx1ZShuZXcgQmlnTnVtYmVyKGZpcnN0VmFsaWQpKTtcbiAgICAgIHRoaXMuX2Jsb2NrTnVtYmVyID0gZmlyc3RWYWxpZDtcbiAgICB9XG4gICAgaWYgKG1heER1cmF0aW9uKSB7XG4gICAgICB0aGlzLnZhbGlkYXRlVmFsdWUobmV3IEJpZ051bWJlcihtYXhEdXJhdGlvbikpO1xuICAgICAgdGhpcy5fZXJhUGVyaW9kID0gbWF4RHVyYXRpb247XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBoYXNoIG9mIHRoZSBjaGVja3BvaW50IGJsb2NrLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gYmxvY2tIYXNoXG4gICAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbkJ1aWxkZXJ9IFRoaXMgdHJhbnNhY3Rpb24gYnVpbGRlci5cbiAgICpcbiAgICogQHNlZSBodHRwczovL3dpa2kucG9sa2Fkb3QubmV0d29yay9kb2NzL2J1aWxkLXRyYW5zYWN0aW9uLWNvbnN0cnVjdGlvblxuICAgKiBAc2VlIGh0dHBzOi8vd2lraS5wb2xrYWRvdC5uZXR3b3JrL2RvY3MvYnVpbGQtcHJvdG9jb2wtaW5mbyN0cmFuc2FjdGlvbi1tb3J0YWxpdHlcbiAgICovXG4gIHJlZmVyZW5jZUJsb2NrKHJlZmVyZW5jZUJsb2NrOiBzdHJpbmcpOiB0aGlzIHtcbiAgICB0aGlzLl9yZWZlcmVuY2VCbG9jayA9IHJlZmVyZW5jZUJsb2NrO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBjdXJyZW50IHZlcnNpb24gZm9yIHRyYW5zYWN0aW9uIGZvcm1hdC5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHRyYW5zYWN0aW9uVmVyc2lvblxuICAgKiBAcmV0dXJucyB7VHJhbnNhY3Rpb25CdWlsZGVyfSBUaGlzIHRyYW5zYWN0aW9uIGJ1aWxkZXIuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly93aWtpLnBvbGthZG90Lm5ldHdvcmsvZG9jcy9idWlsZC10cmFuc2FjdGlvbi1jb25zdHJ1Y3Rpb25cbiAgICovXG4gIHZlcnNpb24odHJhbnNhY3Rpb25WZXJzaW9uOiBudW1iZXIpOiB0aGlzIHtcbiAgICB0aGlzLl90cmFuc2FjdGlvblZlcnNpb24gPSB0cmFuc2FjdGlvblZlcnNpb247XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwcml2YXRlIG1ldGhvZChtZXRob2Q6IFR4TWV0aG9kKTogdGhpcyB7XG4gICAgdGhpcy5fbWV0aG9kID0gbWV0aG9kO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgbmV0d29yayBiYXNlZCBvbiB0aGUgY29uZmlndXJhdGlvbiBpbiB0aGUgc3RhdGljcyBtb2R1bGVcbiAgICovXG4gIHByb3RlY3RlZCBzdGF0aWNzQ29uZmlnKCk6IHZvaWQge1xuICAgIGNvbnN0IG5ldHdvcmtDb25maWcgPSB0aGlzLl9jb2luQ29uZmlnLm5ldHdvcmsgYXMgRG90TmV0d29yaztcbiAgICBjb25zdCB7IHNwZWNOYW1lLCBnZW5lc2lzSGFzaCwgc3BlY1ZlcnNpb24sIGNoYWluTmFtZSwgbWV0YWRhdGFScGMgfSA9IG5ldHdvcmtDb25maWc7XG4gICAgdGhpcy5fZ2VuZXNpc0hhc2ggPSBnZW5lc2lzSGFzaDtcbiAgICB0aGlzLl9zcGVjVmVyc2lvbiA9IHNwZWNWZXJzaW9uO1xuICAgIHRoaXMuX2NoYWluTmFtZSA9IGNoYWluTmFtZTtcbiAgICB0aGlzLl9zcGVjTmFtZSA9IHNwZWNOYW1lO1xuICAgIHRoaXMuX21ldGFkYXRhUnBjID0gbWV0YWRhdGFScGM7XG4gICAgdGhpcy5fcmVnaXN0cnkgPSBnZXRSZWdpc3RyeSh7XG4gICAgICBjaGFpbk5hbWU6IGNoYWluTmFtZSxcbiAgICAgIHNwZWNOYW1lOiBzcGVjTmFtZSxcbiAgICAgIHNwZWNWZXJzaW9uOiBzcGVjVmVyc2lvbixcbiAgICAgIG1ldGFkYXRhUnBjOiBtZXRhZGF0YVJwYyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgZ2V0IHRyYW5zYWN0aW9uKCk6IFRyYW5zYWN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNhY3Rpb247XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIHNldCB0cmFuc2FjdGlvbih0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb24pIHtcbiAgICB0aGlzLl90cmFuc2FjdGlvbiA9IHRyYW5zYWN0aW9uO1xuICB9XG5cbiAgcHJvdGVjdGVkIGlzU2lnbmluZ1BheWxvYWQocGF5bG9hZDogRGVjb2RlZFNpZ25pbmdQYXlsb2FkIHwgRGVjb2RlZFNpZ25lZFR4KTogcGF5bG9hZCBpcyBEZWNvZGVkU2lnbmluZ1BheWxvYWQge1xuICAgIHJldHVybiAocGF5bG9hZCBhcyBEZWNvZGVkU2lnbmluZ1BheWxvYWQpLmJsb2NrSGFzaCAhPT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBmcm9tSW1wbGVtZW50YXRpb24ocmF3VHJhbnNhY3Rpb246IHN0cmluZyk6IFRyYW5zYWN0aW9uIHtcbiAgICBjb25zdCBkZWNvZGVkVHhuID0gZGVjb2RlKHJhd1RyYW5zYWN0aW9uLCB7XG4gICAgICBtZXRhZGF0YVJwYzogdGhpcy5fbWV0YWRhdGFScGMsXG4gICAgICByZWdpc3RyeTogdGhpcy5fcmVnaXN0cnksXG4gICAgfSkgYXMgRGVjb2RlZFNpZ25pbmdQYXlsb2FkIHwgRGVjb2RlZFNpZ25lZFR4O1xuICAgIGlmICh0aGlzLmlzU2lnbmluZ1BheWxvYWQoZGVjb2RlZFR4bikpIHtcbiAgICAgIHRoaXMucmVmZXJlbmNlQmxvY2soZGVjb2RlZFR4bi5ibG9ja0hhc2gpO1xuICAgICAgdGhpcy52ZXJzaW9uKGRlY29kZWRUeG4udHJhbnNhY3Rpb25WZXJzaW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZW5kZXIoeyBhZGRyZXNzOiB1dGlscy5kZWNvZGVEb3RBZGRyZXNzKGRlY29kZWRUeG4uYWRkcmVzcykgfSk7XG4gICAgfVxuICAgIHRoaXMudmFsaWRpdHkoeyBtYXhEdXJhdGlvbjogZGVjb2RlZFR4bi5lcmFQZXJpb2QgfSk7XG4gICAgdGhpcy5zZXF1ZW5jZUlkKHtcbiAgICAgIG5hbWU6ICdOb25jZScsXG4gICAgICBrZXl3b3JkOiAnbm9uY2UnLFxuICAgICAgdmFsdWU6IGRlY29kZWRUeG4ubm9uY2UsXG4gICAgfSk7XG4gICAgaWYgKGRlY29kZWRUeG4udGlwKSB7XG4gICAgICB0aGlzLmZlZSh7IGFtb3VudDogYCR7ZGVjb2RlZFR4bi50aXB9YCwgdHlwZTogJ3RpcCcgfSk7XG4gICAgfVxuICAgIHRoaXMubWV0aG9kKGRlY29kZWRUeG4ubWV0aG9kIGFzIHVua25vd24gYXMgVHhNZXRob2QpO1xuICAgIHJldHVybiB0aGlzLl90cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgYnVpbGRJbXBsZW1lbnRhdGlvbigpOiBQcm9taXNlPFRyYW5zYWN0aW9uPiB7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5zZXRUcmFuc2FjdGlvbih0aGlzLmJ1aWxkVHJhbnNhY3Rpb24oKSk7XG4gICAgdGhpcy50cmFuc2FjdGlvbi50cmFuc2FjdGlvblR5cGUodGhpcy50cmFuc2FjdGlvblR5cGUpO1xuICAgIHRoaXMudHJhbnNhY3Rpb24ucmVnaXN0cnkodGhpcy5fcmVnaXN0cnkpO1xuICAgIHRoaXMudHJhbnNhY3Rpb24uY2hhaW5OYW1lKHRoaXMuX2NoYWluTmFtZSk7XG4gICAgaWYgKHRoaXMuX2tleVBhaXIpIHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb24uc2lnbih0aGlzLl9rZXlQYWlyKTtcbiAgICB9XG4gICAgdGhpcy5fdHJhbnNhY3Rpb24ubG9hZElucHV0c0FuZE91dHB1dHMoKTtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNhY3Rpb247XG4gIH1cblxuICBwcm90ZWN0ZWQgY3JlYXRlQmFzZVR4SW5mbygpOiBDcmVhdGVCYXNlVHhJbmZvIHtcbiAgICByZXR1cm4ge1xuICAgICAgYmFzZVR4SW5mbzoge1xuICAgICAgICBhZGRyZXNzOiB0aGlzLl9zZW5kZXIsXG4gICAgICAgIGJsb2NrSGFzaDogdGhpcy5fcmVmZXJlbmNlQmxvY2ssXG4gICAgICAgIGJsb2NrTnVtYmVyOiB0aGlzLl9yZWdpc3RyeS5jcmVhdGVUeXBlKCdCbG9ja051bWJlcicsIHRoaXMuX2Jsb2NrTnVtYmVyKS50b051bWJlcigpLFxuICAgICAgICBlcmFQZXJpb2Q6IHRoaXMuX2VyYVBlcmlvZCxcbiAgICAgICAgZ2VuZXNpc0hhc2g6IHRoaXMuX2dlbmVzaXNIYXNoLFxuICAgICAgICBtZXRhZGF0YVJwYzogdGhpcy5fbWV0YWRhdGFScGMsXG4gICAgICAgIG5vbmNlOiB0aGlzLl9ub25jZSxcbiAgICAgICAgc3BlY1ZlcnNpb246IHRoaXMuX3NwZWNWZXJzaW9uLFxuICAgICAgICB0aXA6IHRoaXMuX3RpcCxcbiAgICAgICAgdHJhbnNhY3Rpb25WZXJzaW9uOiB0aGlzLl90cmFuc2FjdGlvblZlcnNpb24sXG4gICAgICB9LFxuICAgICAgb3B0aW9uczoge1xuICAgICAgICBtZXRhZGF0YVJwYzogdGhpcy5fbWV0YWRhdGFScGMsXG4gICAgICAgIHJlZ2lzdHJ5OiB0aGlzLl9yZWdpc3RyeSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgdGhlIHNwZWNpZmljIHRyYW5zYWN0aW9uIGJ1aWxkZXIgaW50ZXJuYWxseVxuICAgKiB1c2luZyB0aGUgQHN1YnN0cmF0ZS90eHdyYXBwZXIgYnVpbGRlci5cbiAgICovXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBidWlsZFRyYW5zYWN0aW9uKCk6IFVuc2lnbmVkVHJhbnNhY3Rpb247XG5cbiAgLyoqXG4gICAqIFRoZSB0cmFuc2FjdGlvbiB0eXBlLlxuICAgKi9cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGdldCB0cmFuc2FjdGlvblR5cGUoKTogVHJhbnNhY3Rpb25UeXBlO1xuXG4gIC8vIHJlZ2lvbiBWYWxpZGF0b3JzXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZUFkZHJlc3MoYWRkcmVzczogQmFzZUFkZHJlc3MsIGFkZHJlc3NGb3JtYXQ/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIVV0aWxzLmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MuYWRkcmVzcykpIHtcbiAgICAgIHRocm93IG5ldyBBZGRyZXNzVmFsaWRhdGlvbkVycm9yKGFkZHJlc3MuYWRkcmVzcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlS2V5KHsga2V5IH06IEJhc2VLZXkpOiB2b2lkIHtcbiAgICBsZXQgaXNWYWxpZFByaXZhdGVLZXlGcm9tQnl0ZXM7XG4gICAgY29uc3QgaXNWYWxpZFByaXZhdGVLZXlGcm9tSGV4ID0gaXNWYWxpZEVkMjU1MTlTZWVkKGtleSk7XG4gICAgY29uc3QgaXNWYWxpZFByaXZhdGVLZXlGcm9tQmFzZTY0ID0gaXNWYWxpZEVkMjU1MTlTZWVkKEJ1ZmZlci5mcm9tKGtleSwgJ2Jhc2U2NCcpLnRvU3RyaW5nKCdoZXgnKSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRlY29kZWRTZWVkID0gVXRpbHMuZGVjb2RlU2VlZChrZXkpO1xuICAgICAgaXNWYWxpZFByaXZhdGVLZXlGcm9tQnl0ZXMgPSBpc1ZhbGlkRWQyNTUxOVNlZWQoQnVmZmVyLmZyb20oZGVjb2RlZFNlZWQuc2VlZCkudG9TdHJpbmcoJ2hleCcpKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlzVmFsaWRQcml2YXRlS2V5RnJvbUJ5dGVzID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKCFpc1ZhbGlkUHJpdmF0ZUtleUZyb21CeXRlcyAmJiAhaXNWYWxpZFByaXZhdGVLZXlGcm9tSGV4ICYmICFpc1ZhbGlkUHJpdmF0ZUtleUZyb21CYXNlNjQpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoYEtleSB2YWxpZGF0aW9uIGZhaWxlZGApO1xuICAgIH1cbiAgfVxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVSYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgZGVjb2RlZFR4biA9IGRlY29kZShyYXdUcmFuc2FjdGlvbiwge1xuICAgICAgbWV0YWRhdGFScGM6IHRoaXMuX21ldGFkYXRhUnBjLFxuICAgICAgcmVnaXN0cnk6IHRoaXMuX3JlZ2lzdHJ5LFxuICAgIH0pIGFzIERlY29kZWRTaWduaW5nUGF5bG9hZCB8IERlY29kZWRTaWduZWRUeDtcblxuICAgIGNvbnN0IGVyYVBlcmlvZCA9IGRlY29kZWRUeG4uZXJhUGVyaW9kO1xuICAgIGNvbnN0IG5vbmNlID0gZGVjb2RlZFR4bi5ub25jZTtcbiAgICBjb25zdCB0aXAgPSBkZWNvZGVkVHhuLnRpcDtcblxuICAgIGlmICh0aGlzLmlzU2lnbmluZ1BheWxvYWQoZGVjb2RlZFR4bikpIHtcbiAgICAgIGNvbnN0IGJsb2NrSGFzaCA9IGRlY29kZWRUeG4uYmxvY2tIYXNoO1xuICAgICAgY29uc3QgdmFsaWRhdGlvblJlc3VsdCA9IFNpZ25pbmdQYXlsb2FkVHJhbnNhY3Rpb25TY2hlbWEudmFsaWRhdGUoe1xuICAgICAgICBlcmFQZXJpb2QsXG4gICAgICAgIGJsb2NrSGFzaCxcbiAgICAgICAgbm9uY2UsXG4gICAgICAgIHRpcCxcbiAgICAgIH0pO1xuICAgICAgaWYgKHZhbGlkYXRpb25SZXN1bHQuZXJyb3IpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKGBUcmFuc2FjdGlvbiB2YWxpZGF0aW9uIGZhaWxlZDogJHt2YWxpZGF0aW9uUmVzdWx0LmVycm9yLm1lc3NhZ2V9YCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHNlbmRlciA9IGRlY29kZWRUeG4uYWRkcmVzcztcbiAgICAgIGNvbnN0IHZhbGlkYXRpb25SZXN1bHQgPSBTaWduZWRUcmFuc2FjdGlvblNjaGVtYS52YWxpZGF0ZSh7XG4gICAgICAgIHNlbmRlcixcbiAgICAgICAgbm9uY2UsXG4gICAgICAgIGVyYVBlcmlvZCxcbiAgICAgICAgdGlwLFxuICAgICAgfSk7XG4gICAgICBpZiAodmFsaWRhdGlvblJlc3VsdC5lcnJvcikge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoYFRyYW5zYWN0aW9uIHZhbGlkYXRpb24gZmFpbGVkOiAke3ZhbGlkYXRpb25SZXN1bHQuZXJyb3IubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVUcmFuc2FjdGlvbihfOiBUcmFuc2FjdGlvbik6IHZvaWQge1xuICAgIHRoaXMudmFsaWRhdGVCYXNlRmllbGRzKFxuICAgICAgdGhpcy5fc2VuZGVyLFxuICAgICAgdGhpcy5fYmxvY2tOdW1iZXIsXG4gICAgICB0aGlzLl9yZWZlcmVuY2VCbG9jayxcbiAgICAgIHRoaXMuX2dlbmVzaXNIYXNoLFxuICAgICAgdGhpcy5fbWV0YWRhdGFScGMsXG4gICAgICB0aGlzLl9jaGFpbk5hbWUsXG4gICAgICB0aGlzLl9ub25jZSxcbiAgICAgIHRoaXMuX3NwZWNWZXJzaW9uLFxuICAgICAgdGhpcy5fc3BlY05hbWUsXG4gICAgICB0aGlzLl90cmFuc2FjdGlvblZlcnNpb24sXG4gICAgICB0aGlzLl9lcmFQZXJpb2QsXG4gICAgICB0aGlzLl90aXAsXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGVCYXNlRmllbGRzKFxuICAgIHNlbmRlcjogc3RyaW5nLFxuICAgIGJsb2NrTnVtYmVyOiBudW1iZXIsXG4gICAgYmxvY2tIYXNoOiBzdHJpbmcsXG4gICAgZ2VuZXNpc0hhc2g6IHN0cmluZyxcbiAgICBtZXRhZGF0YVJwYzogc3RyaW5nLFxuICAgIGNoYWluTmFtZTogc3RyaW5nLFxuICAgIG5vbmNlOiBudW1iZXIsXG4gICAgc3BlY1ZlcnNpb246IG51bWJlcixcbiAgICBzcGVjTmFtZTogUG9sa2Fkb3RTcGVjTmFtZVR5cGUsXG4gICAgdHJhbnNhY3Rpb25WZXJzaW9uOiBudW1iZXIsXG4gICAgZXJhUGVyaW9kOiBudW1iZXIgfCB1bmRlZmluZWQsXG4gICAgdGlwOiBudW1iZXIgfCB1bmRlZmluZWQsXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IHZhbGlkYXRpb25SZXN1bHQgPSBCYXNlVHJhbnNhY3Rpb25TY2hlbWEudmFsaWRhdGUoe1xuICAgICAgc2VuZGVyLFxuICAgICAgYmxvY2tOdW1iZXIsXG4gICAgICBibG9ja0hhc2gsXG4gICAgICBnZW5lc2lzSGFzaCxcbiAgICAgIG1ldGFkYXRhUnBjLFxuICAgICAgY2hhaW5OYW1lLFxuICAgICAgbm9uY2UsXG4gICAgICBzcGVjVmVyc2lvbixcbiAgICAgIHNwZWNOYW1lLFxuICAgICAgdHJhbnNhY3Rpb25WZXJzaW9uLFxuICAgICAgZXJhUGVyaW9kLFxuICAgICAgdGlwLFxuICAgIH0pO1xuXG4gICAgaWYgKHZhbGlkYXRpb25SZXN1bHQuZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcihgVHJhbnNhY3Rpb24gdmFsaWRhdGlvbiBmYWlsZWQ6ICR7dmFsaWRhdGlvblJlc3VsdC5lcnJvci5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZVZhbHVlKHZhbHVlOiBCaWdOdW1iZXIpOiB2b2lkIHtcbiAgICBpZiAodmFsdWUuaXNMZXNzVGhhbigwKSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignVmFsdWUgY2Fubm90IGJlIGxlc3MgdGhhbiB6ZXJvJyk7XG4gICAgfVxuICB9XG5cbiAgLy8gZW5kcmVnaW9uXG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBzaWduSW1wbGVtZW50YXRpb24oeyBrZXkgfTogQmFzZUtleSk6IFRyYW5zYWN0aW9uIHtcbiAgICB0aGlzLl9rZXlQYWlyID0gbmV3IEtleVBhaXIoeyBwcnY6IGtleSB9KTtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNhY3Rpb247XG4gIH1cbn1cbiJdfQ==
@@ -1,24 +1,21 @@
1
1
  import { BaseCoin as CoinConfig } from '@bitgo/statics';
2
2
  import { BaseTransactionBuilderFactory } from '../baseCoin';
3
+ import { TypeRegistry } from '@substrate/txwrapper-core/lib/types';
4
+ import { TransactionBuilder } from './transactionBuilder';
3
5
  import { TransferBuilder } from './transferBuilder';
4
6
  import { WalletInitializationBuilder } from './walletInitializationBuilder';
5
- import { TransactionBuilder } from './transactionBuilder';
6
- import { Transaction } from './transaction';
7
+ import { StakingBuilder } from './stakingBuilder';
8
+ import { UnstakeBuilder } from '.';
7
9
  export declare class TransactionBuilderFactory extends BaseTransactionBuilderFactory {
10
+ protected _metadataRpc: string;
11
+ protected _registry: TypeRegistry;
8
12
  constructor(_coinConfig: Readonly<CoinConfig>);
9
- /** @inheritdoc */
10
- from(raw: Uint8Array | string): TransactionBuilder;
11
- /** @inheritdoc */
12
- getWalletInitializationBuilder(tx?: Transaction): WalletInitializationBuilder;
13
- /** @inheritdoc */
14
- getTransferBuilder(tx?: Transaction): TransferBuilder;
15
- /**
16
- * Initialize the builder with the given transaction
17
- *
18
- * @param {Transaction | undefined} tx - the transaction used to initialize the builder
19
- * @param {TransactionBuilder} builder - the builder to be initialized
20
- * @returns {TransactionBuilder} the builder initialized
21
- */
22
- private static initializeBuilder;
13
+ getTransferBuilder(): TransferBuilder;
14
+ getStakingBuilder(): StakingBuilder;
15
+ getWalletInitializationBuilder(): WalletInitializationBuilder;
16
+ getUnstakeBuilder(): UnstakeBuilder;
17
+ from(rawTxn: string): TransactionBuilder;
18
+ protected staticsConfig(): void;
19
+ private getBuilder;
23
20
  }
24
21
  //# sourceMappingURL=transactionBuilderFactory.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"transactionBuilderFactory.d.ts","sourceRoot":"","sources":["../../../../src/coin/dot/transactionBuilderFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,6BAA6B,EAAE,MAAM,aAAa,CAAC;AAE5D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,qBAAa,yBAA0B,SAAQ,6BAA6B;gBAC9D,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI7C,kBAAkB;IAClB,IAAI,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM,GAAG,kBAAkB;IAIlD,kBAAkB;IAClB,8BAA8B,CAAC,EAAE,CAAC,EAAE,WAAW,GAAG,2BAA2B;IAI7E,kBAAkB;IAClB,kBAAkB,CAAC,EAAE,CAAC,EAAE,WAAW,GAAG,eAAe;IAIrD;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,iBAAiB;CAMjC"}
1
+ {"version":3,"file":"transactionBuilderFactory.d.ts","sourceRoot":"","sources":["../../../../src/coin/dot/transactionBuilderFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAc,MAAM,gBAAgB,CAAC;AACpE,OAAO,EAAE,6BAA6B,EAAE,MAAM,aAAa,CAAC;AAG5D,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,OAAO,EAAE,cAAc,EAAE,MAAM,GAAG,CAAC;AAEnC,qBAAa,yBAA0B,SAAQ,6BAA6B;IAC1E,SAAS,CAAC,YAAY,EAAE,MAAM,CAAC;IAC/B,SAAS,CAAC,SAAS,EAAE,YAAY,CAAC;gBAEtB,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAK7C,kBAAkB,IAAI,eAAe;IAIrC,iBAAiB,IAAI,cAAc;IAInC,8BAA8B,IAAI,2BAA2B;IAI7D,iBAAiB,IAAI,cAAc;IAInC,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,kBAAkB;IAMxC,SAAS,CAAC,aAAa,IAAI,IAAI;IAY/B,OAAO,CAAC,UAAU;CAqBnB"}