@bitgo-beta/sdk-coin-iota 1.0.1-beta.324 → 1.0.1-beta.326

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 (42) hide show
  1. package/dist/src/iota.d.ts +123 -27
  2. package/dist/src/iota.d.ts.map +1 -1
  3. package/dist/src/iota.js +217 -103
  4. package/dist/src/lib/constants.d.ts +50 -1
  5. package/dist/src/lib/constants.d.ts.map +1 -1
  6. package/dist/src/lib/constants.js +68 -4
  7. package/dist/src/lib/iface.d.ts +141 -1
  8. package/dist/src/lib/iface.d.ts.map +1 -1
  9. package/dist/src/lib/iface.js +1 -1
  10. package/dist/src/lib/keyPair.d.ts +100 -6
  11. package/dist/src/lib/keyPair.d.ts.map +1 -1
  12. package/dist/src/lib/keyPair.js +103 -10
  13. package/dist/src/lib/transaction.d.ts +117 -14
  14. package/dist/src/lib/transaction.d.ts.map +1 -1
  15. package/dist/src/lib/transaction.js +190 -67
  16. package/dist/src/lib/transactionBuilder.d.ts +73 -34
  17. package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
  18. package/dist/src/lib/transactionBuilder.js +90 -45
  19. package/dist/src/lib/transactionBuilderFactory.d.ts +89 -6
  20. package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
  21. package/dist/src/lib/transactionBuilderFactory.js +103 -16
  22. package/dist/src/lib/transferBuilder.d.ts +43 -0
  23. package/dist/src/lib/transferBuilder.d.ts.map +1 -1
  24. package/dist/src/lib/transferBuilder.js +50 -5
  25. package/dist/src/lib/transferTransaction.d.ts +93 -2
  26. package/dist/src/lib/transferTransaction.d.ts.map +1 -1
  27. package/dist/src/lib/transferTransaction.js +180 -51
  28. package/dist/src/lib/utils.d.ts +107 -8
  29. package/dist/src/lib/utils.d.ts.map +1 -1
  30. package/dist/src/lib/utils.js +134 -23
  31. package/dist/test/unit/helpers/testHelpers.d.ts +57 -0
  32. package/dist/test/unit/helpers/testHelpers.d.ts.map +1 -0
  33. package/dist/test/unit/helpers/testHelpers.js +176 -0
  34. package/dist/test/unit/iota.js +47 -152
  35. package/dist/test/unit/keyPair.js +34 -61
  36. package/dist/test/unit/transactionBuilder/transactionBuilder.js +137 -255
  37. package/dist/test/unit/transactionBuilder/transactionBuilderFactory.js +43 -108
  38. package/dist/test/unit/transactionBuilder/transferBuilder.js +296 -762
  39. package/dist/test/unit/transferTransaction.js +106 -353
  40. package/dist/test/unit/utils.js +171 -197
  41. package/dist/tsconfig.tsbuildinfo +1 -1
  42. package/package.json +7 -7
@@ -3,74 +3,113 @@ import BigNumber from 'bignumber.js';
3
3
  import { Transaction } from './transaction';
4
4
  import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
5
5
  import { GasData } from './iface';
6
+ /**
7
+ * Base class for IOTA transaction builders.
8
+ * Provides common functionality for building and validating IOTA transactions.
9
+ */
6
10
  export declare abstract class TransactionBuilder extends BaseTransactionBuilder {
7
11
  protected _transaction: Transaction;
8
12
  protected constructor(coinConfig: Readonly<CoinConfig>);
9
13
  /**
10
- * Initialize the transaction builder fields using the decoded transaction data
11
- *
12
- * @param {Transaction} tx the transaction data
14
+ * Initializes the transaction builder with data from an existing transaction.
15
+ * Copies sender, gas data, and gas sponsor information.
13
16
  */
14
17
  initBuilder(tx: Transaction): void;
15
- get transactionType(): TransactionType;
16
18
  /**
17
- * @inheritdoc
18
- * */
19
+ * Copies transaction data from the source transaction to the builder's transaction.
20
+ */
21
+ private copyTransactionData;
22
+ get transactionType(): TransactionType;
19
23
  get transaction(): Transaction;
20
- /**
21
- * @inheritdoc
22
- * */
23
24
  protected set transaction(transaction: Transaction);
24
25
  /**
25
- * Sets the sender of this transaction.
26
- *
27
- * @param {string} senderAddress the account that is sending this transaction
28
- * @returns {TransactionBuilder} This transaction builder
26
+ * Sets the sender address for this transaction.
27
+ * @param senderAddress - The IOTA address that is sending this transaction
28
+ * @returns This transaction builder for method chaining
29
29
  */
30
30
  sender(senderAddress: string): this;
31
31
  /**
32
- * Sets the gasData for this transaction.
33
- *
34
- * @param {string} gasData the gas details for this transaction
35
- * @returns {TransactionBuilder} This transaction builder
32
+ * Sets the gas data for this transaction (budget, price, and payment objects).
33
+ * @param gasData - The gas configuration including budget, price, and payment objects
34
+ * @returns This transaction builder for method chaining
36
35
  */
37
36
  gasData(gasData: GasData): this;
38
37
  /**
39
- * Sets the gasSponsor of this transaction.
40
- *
41
- * @param {string} sponsorAddress the account that is sponsoring this transaction's gas
42
- * @returns {TransactionBuilder} This transaction builder
38
+ * Sets gas data fields on the transaction.
39
+ */
40
+ private setGasDataOnTransaction;
41
+ /**
42
+ * Sets the gas sponsor for this transaction.
43
+ * The gas sponsor pays for transaction fees instead of the sender.
44
+ * @param sponsorAddress - The IOTA address sponsoring this transaction's gas fees
45
+ * @returns This transaction builder for method chaining
43
46
  */
44
47
  gasSponsor(sponsorAddress: string): this;
48
+ /**
49
+ * Adds a signature from the transaction sender.
50
+ * @param publicKey - The sender's public key
51
+ * @param signature - The signature bytes
52
+ * @throws BuildTransactionError if the signature or public key is invalid
53
+ */
45
54
  addSignature(publicKey: PublicKey, signature: Buffer): void;
55
+ /**
56
+ * Adds a signature from the gas sponsor.
57
+ * @param publicKey - The gas sponsor's public key
58
+ * @param signature - The signature bytes
59
+ * @throws BuildTransactionError if the signature or public key is invalid
60
+ */
46
61
  addGasSponsorSignature(publicKey: PublicKey, signature: Buffer): void;
62
+ /**
63
+ * Validates that the signature and public key are in valid formats.
64
+ */
65
+ private validateSignatureData;
47
66
  validateKey(key: BaseKey): void;
48
67
  /**
49
- * @inheritdoc
50
- * */
68
+ * Validates an IOTA address format.
69
+ * @throws BuildTransactionError if address is invalid
70
+ */
51
71
  validateAddress(address: BaseAddress, addressFormat?: string): void;
52
72
  /**
53
- * @inheritdoc
54
- * */
73
+ * Validates that a numeric value is valid (not NaN and not negative).
74
+ * @throws BuildTransactionError if value is invalid
75
+ */
55
76
  validateValue(value: BigNumber): void;
56
- /** @inheritdoc */
77
+ /**
78
+ * Validates that a raw transaction string is properly formatted.
79
+ * @throws ParseTransactionError if raw transaction is invalid
80
+ */
57
81
  validateRawTransaction(rawTransaction: string): void;
58
82
  /**
59
- * @inheritdoc
60
- * */
83
+ * Validates a transaction object has all required fields.
84
+ * @throws Error if transaction is undefined or has invalid data
85
+ */
61
86
  validateTransaction(transaction?: Transaction): void;
62
87
  /**
63
- * @inheritdoc
64
- * */
88
+ * Creates a transaction object from a raw transaction string or bytes.
89
+ * @param rawTransaction - Raw transaction in base64 string or Uint8Array format
90
+ * @returns The parsed transaction object
91
+ * @throws BuildTransactionError if raw transaction is invalid
92
+ */
65
93
  fromImplementation(rawTransaction: string | Uint8Array): Transaction;
66
94
  /**
67
- * @inheritdoc
68
- * */
95
+ * Sign implementation - not supported for IOTA transactions.
96
+ * IOTA transactions must be signed externally.
97
+ */
69
98
  protected signImplementation(key: BaseKey): BaseTransaction;
70
99
  /**
71
- * @inheritdoc
72
- * */
100
+ * Builds the transaction and prepares it for broadcast.
101
+ * Automatically switches from simulate to real transaction mode if gas data is present.
102
+ */
73
103
  protected buildImplementation(): Promise<Transaction>;
104
+ /**
105
+ * Updates the transaction mode based on gas data availability.
106
+ * Switches to real transaction mode if all gas data is provided.
107
+ */
108
+ private updateTransactionMode;
109
+ /**
110
+ * Validates gas data values and presence.
111
+ * @throws BuildTransactionError if gas data is invalid
112
+ */
74
113
  private validateGasData;
75
114
  }
76
115
  //# sourceMappingURL=transactionBuilder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"transactionBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,OAAO,EACP,eAAe,EACf,sBAAsB,EAGtB,SAAS,EACT,eAAe,EAChB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAE7D,OAAO,EAA0B,OAAO,EAAE,MAAM,SAAS,CAAC;AAG1D,8BAAsB,kBAAmB,SAAQ,sBAAsB;IACrE,SAAS,CAAC,YAAY,EAAE,WAAW,CAAC;IAEpC,SAAS,aAAa,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC;IAItD;;;;OAIG;IACH,WAAW,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI;IASlC,IAAI,eAAe,IAAI,eAAe,CAErC;IAED;;SAEK;IACL,IAAI,WAAW,IAAI,WAAW,CAE7B;IAED;;SAEK;IACL,SAAS,KAAK,WAAW,CAAC,WAAW,EAAE,WAAW,EAEjD;IAED;;;;;OAKG;IACH,MAAM,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI;IAMnC;;;;;OAKG;IACH,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAQ/B;;;;;OAKG;IACH,UAAU,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IAMxC,YAAY,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAO3D,sBAAsB,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAOrE,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;IAI/B;;SAEK;IACL,eAAe,CAAC,OAAO,EAAE,WAAW,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI;IAMnE;;SAEK;IACL,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAQrC,kBAAkB;IAClB,sBAAsB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IASpD;;SAEK;IACL,mBAAmB,CAAC,WAAW,CAAC,EAAE,WAAW,GAAG,IAAI;IAepD;;SAEK;IACL,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,UAAU,GAAG,WAAW;IAQpE;;SAEK;IACL,SAAS,CAAC,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,eAAe;IAI3D;;SAEK;cACW,mBAAmB,IAAI,OAAO,CAAC,WAAW,CAAC;IAU3D,OAAO,CAAC,eAAe;CAWxB"}
1
+ {"version":3,"file":"transactionBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,OAAO,EACP,eAAe,EACf,sBAAsB,EAGtB,SAAS,EACT,eAAe,EAChB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAE7D,OAAO,EAA0B,OAAO,EAAE,MAAM,SAAS,CAAC;AAG1D;;;GAGG;AACH,8BAAsB,kBAAmB,SAAQ,sBAAsB;IACrE,SAAS,CAAC,YAAY,EAAE,WAAW,CAAC;IAEpC,SAAS,aAAa,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC;IAItD;;;OAGG;IACH,WAAW,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI;IAKlC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAQ3B,IAAI,eAAe,IAAI,eAAe,CAErC;IAED,IAAI,WAAW,IAAI,WAAW,CAE7B;IAED,SAAS,KAAK,WAAW,CAAC,WAAW,EAAE,WAAW,EAEjD;IAED;;;;OAIG;IACH,MAAM,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI;IAMnC;;;;OAIG;IACH,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAM/B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAM/B;;;;;OAKG;IACH,UAAU,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IAMxC;;;;;OAKG;IACH,YAAY,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAK3D;;;;;OAKG;IACH,sBAAsB,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAKrE;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAM7B,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;IAI/B;;;OAGG;IACH,eAAe,CAAC,OAAO,EAAE,WAAW,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI;IAMnE;;;OAGG;IACH,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IASrC;;;OAGG;IACH,sBAAsB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IASpD;;;OAGG;IACH,mBAAmB,CAAC,WAAW,CAAC,EAAE,WAAW,GAAG,IAAI;IAiBpD;;;;;OAKG;IACH,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,UAAU,GAAG,WAAW;IAQpE;;;OAGG;IACH,SAAS,CAAC,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,eAAe;IAI3D;;;OAGG;cACa,mBAAmB,IAAI,OAAO,CAAC,WAAW,CAAC;IAO3D;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IAS7B;;;OAGG;IACH,OAAO,CAAC,eAAe;CAaxB"}
@@ -8,17 +8,26 @@ const sdk_core_1 = require("@bitgo-beta/sdk-core");
8
8
  const bignumber_js_1 = __importDefault(require("bignumber.js"));
9
9
  const utils_1 = __importDefault(require("./utils"));
10
10
  const utils_2 = require("@iota/iota-sdk/utils");
11
+ /**
12
+ * Base class for IOTA transaction builders.
13
+ * Provides common functionality for building and validating IOTA transactions.
14
+ */
11
15
  class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
12
16
  constructor(coinConfig) {
13
17
  super(coinConfig);
14
18
  }
15
19
  /**
16
- * Initialize the transaction builder fields using the decoded transaction data
17
- *
18
- * @param {Transaction} tx the transaction data
20
+ * Initializes the transaction builder with data from an existing transaction.
21
+ * Copies sender, gas data, and gas sponsor information.
19
22
  */
20
23
  initBuilder(tx) {
21
24
  this.validateTransaction(tx);
25
+ this.copyTransactionData(tx);
26
+ }
27
+ /**
28
+ * Copies transaction data from the source transaction to the builder's transaction.
29
+ */
30
+ copyTransactionData(tx) {
22
31
  this.transaction.sender = tx.sender;
23
32
  this.transaction.gasPrice = tx.gasPrice;
24
33
  this.transaction.gasBudget = tx.gasBudget;
@@ -28,23 +37,16 @@ class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
28
37
  get transactionType() {
29
38
  return this.transaction.type;
30
39
  }
31
- /**
32
- * @inheritdoc
33
- * */
34
40
  get transaction() {
35
41
  return this._transaction;
36
42
  }
37
- /**
38
- * @inheritdoc
39
- * */
40
43
  set transaction(transaction) {
41
44
  this._transaction = transaction;
42
45
  }
43
46
  /**
44
- * Sets the sender of this transaction.
45
- *
46
- * @param {string} senderAddress the account that is sending this transaction
47
- * @returns {TransactionBuilder} This transaction builder
47
+ * Sets the sender address for this transaction.
48
+ * @param senderAddress - The IOTA address that is sending this transaction
49
+ * @returns This transaction builder for method chaining
48
50
  */
49
51
  sender(senderAddress) {
50
52
  this.validateAddress({ address: senderAddress });
@@ -52,64 +54,90 @@ class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
52
54
  return this;
53
55
  }
54
56
  /**
55
- * Sets the gasData for this transaction.
56
- *
57
- * @param {string} gasData the gas details for this transaction
58
- * @returns {TransactionBuilder} This transaction builder
57
+ * Sets the gas data for this transaction (budget, price, and payment objects).
58
+ * @param gasData - The gas configuration including budget, price, and payment objects
59
+ * @returns This transaction builder for method chaining
59
60
  */
60
61
  gasData(gasData) {
61
62
  this.validateGasData(gasData);
63
+ this.setGasDataOnTransaction(gasData);
64
+ return this;
65
+ }
66
+ /**
67
+ * Sets gas data fields on the transaction.
68
+ */
69
+ setGasDataOnTransaction(gasData) {
62
70
  this.transaction.gasPrice = gasData.gasPrice;
63
71
  this.transaction.gasBudget = gasData.gasBudget;
64
72
  this.transaction.gasPaymentObjects = gasData.gasPaymentObjects;
65
- return this;
66
73
  }
67
74
  /**
68
- * Sets the gasSponsor of this transaction.
69
- *
70
- * @param {string} sponsorAddress the account that is sponsoring this transaction's gas
71
- * @returns {TransactionBuilder} This transaction builder
75
+ * Sets the gas sponsor for this transaction.
76
+ * The gas sponsor pays for transaction fees instead of the sender.
77
+ * @param sponsorAddress - The IOTA address sponsoring this transaction's gas fees
78
+ * @returns This transaction builder for method chaining
72
79
  */
73
80
  gasSponsor(sponsorAddress) {
74
81
  this.validateAddress({ address: sponsorAddress });
75
82
  this.transaction.gasSponsor = sponsorAddress;
76
83
  return this;
77
84
  }
85
+ /**
86
+ * Adds a signature from the transaction sender.
87
+ * @param publicKey - The sender's public key
88
+ * @param signature - The signature bytes
89
+ * @throws BuildTransactionError if the signature or public key is invalid
90
+ */
78
91
  addSignature(publicKey, signature) {
79
- if (!utils_1.default.isValidPublicKey(publicKey.pub) || !utils_1.default.isValidSignature((0, utils_2.toBase64)(signature))) {
80
- throw new sdk_core_1.BuildTransactionError('Invalid transaction signature');
81
- }
92
+ this.validateSignatureData(publicKey, signature);
82
93
  this.transaction.addSignature(publicKey, signature);
83
94
  }
95
+ /**
96
+ * Adds a signature from the gas sponsor.
97
+ * @param publicKey - The gas sponsor's public key
98
+ * @param signature - The signature bytes
99
+ * @throws BuildTransactionError if the signature or public key is invalid
100
+ */
84
101
  addGasSponsorSignature(publicKey, signature) {
102
+ this.validateSignatureData(publicKey, signature);
103
+ this.transaction.addGasSponsorSignature(publicKey, signature);
104
+ }
105
+ /**
106
+ * Validates that the signature and public key are in valid formats.
107
+ */
108
+ validateSignatureData(publicKey, signature) {
85
109
  if (!utils_1.default.isValidPublicKey(publicKey.pub) || !utils_1.default.isValidSignature((0, utils_2.toBase64)(signature))) {
86
110
  throw new sdk_core_1.BuildTransactionError('Invalid transaction signature');
87
111
  }
88
- this.transaction.addGasSponsorSignature(publicKey, signature);
89
112
  }
90
113
  validateKey(key) {
91
114
  throw new Error('Method not implemented.');
92
115
  }
93
116
  /**
94
- * @inheritdoc
95
- * */
117
+ * Validates an IOTA address format.
118
+ * @throws BuildTransactionError if address is invalid
119
+ */
96
120
  validateAddress(address, addressFormat) {
97
121
  if (!utils_1.default.isValidAddress(address.address)) {
98
122
  throw new sdk_core_1.BuildTransactionError('Invalid address ' + address.address);
99
123
  }
100
124
  }
101
125
  /**
102
- * @inheritdoc
103
- * */
126
+ * Validates that a numeric value is valid (not NaN and not negative).
127
+ * @throws BuildTransactionError if value is invalid
128
+ */
104
129
  validateValue(value) {
105
130
  if (value.isNaN()) {
106
131
  throw new sdk_core_1.BuildTransactionError('Invalid amount format');
107
132
  }
108
- else if (value.isLessThan(0)) {
133
+ if (value.isLessThan(0)) {
109
134
  throw new sdk_core_1.BuildTransactionError('Value cannot be less than zero');
110
135
  }
111
136
  }
112
- /** @inheritdoc */
137
+ /**
138
+ * Validates that a raw transaction string is properly formatted.
139
+ * @throws ParseTransactionError if raw transaction is invalid
140
+ */
113
141
  validateRawTransaction(rawTransaction) {
114
142
  if (!rawTransaction) {
115
143
  throw new sdk_core_1.ParseTransactionError('Invalid raw transaction: Undefined');
@@ -119,8 +147,9 @@ class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
119
147
  }
120
148
  }
121
149
  /**
122
- * @inheritdoc
123
- * */
150
+ * Validates a transaction object has all required fields.
151
+ * @throws Error if transaction is undefined or has invalid data
152
+ */
124
153
  validateTransaction(transaction) {
125
154
  if (!transaction) {
126
155
  throw new Error('transaction not defined');
@@ -136,8 +165,11 @@ class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
136
165
  }
137
166
  }
138
167
  /**
139
- * @inheritdoc
140
- * */
168
+ * Creates a transaction object from a raw transaction string or bytes.
169
+ * @param rawTransaction - Raw transaction in base64 string or Uint8Array format
170
+ * @returns The parsed transaction object
171
+ * @throws BuildTransactionError if raw transaction is invalid
172
+ */
141
173
  fromImplementation(rawTransaction) {
142
174
  if (!utils_1.default.isValidRawTransaction(rawTransaction)) {
143
175
  throw new sdk_core_1.BuildTransactionError('Invalid transaction');
@@ -146,23 +178,36 @@ class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
146
178
  return this.transaction;
147
179
  }
148
180
  /**
149
- * @inheritdoc
150
- * */
181
+ * Sign implementation - not supported for IOTA transactions.
182
+ * IOTA transactions must be signed externally.
183
+ */
151
184
  signImplementation(key) {
152
185
  throw new Error('Method not implemented.');
153
186
  }
154
187
  /**
155
- * @inheritdoc
156
- * */
188
+ * Builds the transaction and prepares it for broadcast.
189
+ * Automatically switches from simulate to real transaction mode if gas data is present.
190
+ */
157
191
  async buildImplementation() {
158
- // If gas data is provided, this is not a simulate transaction
159
- if (this.transaction.gasPrice && this.transaction.gasBudget && this.transaction.gasPaymentObjects) {
160
- this.transaction.isSimulateTx = false;
161
- }
192
+ this.updateTransactionMode();
162
193
  await this.transaction.build();
163
194
  this.transaction.addInputsAndOutputs();
164
195
  return this.transaction;
165
196
  }
197
+ /**
198
+ * Updates the transaction mode based on gas data availability.
199
+ * Switches to real transaction mode if all gas data is provided.
200
+ */
201
+ updateTransactionMode() {
202
+ const hasCompleteGasData = this.transaction.gasPrice && this.transaction.gasBudget && this.transaction.gasPaymentObjects;
203
+ if (hasCompleteGasData) {
204
+ this.transaction.isSimulateTx = false;
205
+ }
206
+ }
207
+ /**
208
+ * Validates gas data values and presence.
209
+ * @throws BuildTransactionError if gas data is invalid
210
+ */
166
211
  validateGasData(gasData) {
167
212
  if (gasData.gasBudget) {
168
213
  this.validateValue(new bignumber_js_1.default(gasData.gasBudget));
@@ -176,4 +221,4 @@ class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
176
221
  }
177
222
  }
178
223
  exports.TransactionBuilder = TransactionBuilder;
179
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsbURBUzhCO0FBQzlCLGdFQUFxQztBQUdyQyxvREFBNEI7QUFFNUIsZ0RBQWdEO0FBRWhELE1BQXNCLGtCQUFtQixTQUFRLGlDQUFzQjtJQUdyRSxZQUFzQixVQUFnQztRQUNwRCxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDcEIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxXQUFXLENBQUMsRUFBZTtRQUN6QixJQUFJLENBQUMsbUJBQW1CLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDN0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQztRQUNwQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUM7UUFDMUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsR0FBRyxFQUFFLENBQUMsaUJBQWlCLENBQUM7UUFDMUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQztJQUM5QyxDQUFDO0lBRUQsSUFBSSxlQUFlO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7SUFDL0IsQ0FBQztJQUVEOztTQUVLO0lBQ0wsSUFBSSxXQUFXO1FBQ2IsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFFRDs7U0FFSztJQUNMLElBQWMsV0FBVyxDQUFDLFdBQXdCO1FBQ2hELElBQUksQ0FBQyxZQUFZLEdBQUcsV0FBVyxDQUFDO0lBQ2xDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILE1BQU0sQ0FB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QUF5QixDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVEOztTQUVLO0lBQ0ssS0FBSyxDQUFDLG1CQUFtQjtRQUNqQyw4REFBOEQ7UUFDOUQsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDbEcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQ3hDLENBQUM7UUFDRCxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQ3ZDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDO0lBRU8sZUFBZSxDQUFDLE9BQWdCO1FBQ3RDLElBQUksT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxzQkFBUyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ3ZELENBQUM7UUFDRCxJQUFJLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksc0JBQVMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUN0RCxDQUFDO1FBQ0QsSUFBSSxPQUFPLENBQUMsaUJBQWlCLElBQUksT0FBTyxDQUFDLGlCQUFpQixDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN4RSxNQUFNLElBQUksZ0NBQXFCLENBQUMsaUNBQWlDLENBQUMsQ0FBQztRQUNyRSxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBekxELGdEQXlMQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEJhc2VBZGRyZXNzLFxuICBCYXNlS2V5LFxuICBCYXNlVHJhbnNhY3Rpb24sXG4gIEJhc2VUcmFuc2FjdGlvbkJ1aWxkZXIsXG4gIEJ1aWxkVHJhbnNhY3Rpb25FcnJvcixcbiAgUGFyc2VUcmFuc2FjdGlvbkVycm9yLFxuICBQdWJsaWNLZXksXG4gIFRyYW5zYWN0aW9uVHlwZSxcbn0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IEJpZ051bWJlciBmcm9tICdiaWdudW1iZXIuanMnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tICcuL3RyYW5zYWN0aW9uJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB1dGlscyBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uT2JqZWN0SW5wdXQsIEdhc0RhdGEgfSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCB7IHRvQmFzZTY0IH0gZnJvbSAnQGlvdGEvaW90YS1zZGsvdXRpbHMnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgVHJhbnNhY3Rpb25CdWlsZGVyIGV4dGVuZHMgQmFzZVRyYW5zYWN0aW9uQnVpbGRlciB7XG4gIHByb3RlY3RlZCBfdHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uO1xuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3Rvcihjb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKGNvaW5Db25maWcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgdGhlIHRyYW5zYWN0aW9uIGJ1aWxkZXIgZmllbGRzIHVzaW5nIHRoZSBkZWNvZGVkIHRyYW5zYWN0aW9uIGRhdGFcbiAgICpcbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvbn0gdHggdGhlIHRyYW5zYWN0aW9uIGRhdGFcbiAgICovXG4gIGluaXRCdWlsZGVyKHR4OiBUcmFuc2FjdGlvbik6IHZvaWQge1xuICAgIHRoaXMudmFsaWRhdGVUcmFuc2FjdGlvbih0eCk7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5zZW5kZXIgPSB0eC5zZW5kZXI7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5nYXNQcmljZSA9IHR4Lmdhc1ByaWNlO1xuICAgIHRoaXMudHJhbnNhY3Rpb24uZ2FzQnVkZ2V0ID0gdHguZ2FzQnVkZ2V0O1xuICAgIHRoaXMudHJhbnNhY3Rpb24uZ2FzUGF5bWVudE9iamVjdHMgPSB0eC5nYXNQYXltZW50T2JqZWN0cztcbiAgICB0aGlzLnRyYW5zYWN0aW9uLmdhc1Nwb25zb3IgPSB0eC5nYXNTcG9uc29yO1xuICB9XG5cbiAgZ2V0IHRyYW5zYWN0aW9uVHlwZSgpOiBUcmFuc2FjdGlvblR5cGUge1xuICAgIHJldHVybiB0aGlzLnRyYW5zYWN0aW9uLnR5cGU7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXRkb2NcbiAgICogKi9cbiAgZ2V0IHRyYW5zYWN0aW9uKCk6IFRyYW5zYWN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNhY3Rpb247XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXRkb2NcbiAgICogKi9cbiAgcHJvdGVjdGVkIHNldCB0cmFuc2FjdGlvbih0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb24pIHtcbiAgICB0aGlzLl90cmFuc2FjdGlvbiA9IHRyYW5zYWN0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHNlbmRlciBvZiB0aGlzIHRyYW5zYWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2VuZGVyQWRkcmVzcyB0aGUgYWNjb3VudCB0aGF0IGlzIHNlbmRpbmcgdGhpcyB0cmFuc2FjdGlvblxuICAgKiBAcmV0dXJucyB7VHJhbnNhY3Rpb25CdWlsZGVyfSBUaGlzIHRyYW5zYWN0aW9uIGJ1aWxkZXJcbiAgICovXG4gIHNlbmRlcihzZW5kZXJBZGRyZXNzOiBzdHJpbmcpOiB0aGlzIHtcbiAgICB0aGlzLnZhbGlkYXRlQWRkcmVzcyh7IGFkZHJlc3M6IHNlbmRlckFkZHJlc3MgfSk7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5zZW5kZXIgPSBzZW5kZXJBZGRyZXNzO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGdhc0RhdGEgZm9yIHRoaXMgdHJhbnNhY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBnYXNEYXRhIHRoZSBnYXMgZGV0YWlscyBmb3IgdGhpcyB0cmFuc2FjdGlvblxuICAgKiBAcmV0dXJucyB7VHJhbnNhY3Rpb25CdWlsZGVyfSBUaGlzIHRyYW5zYWN0aW9uIGJ1aWxkZXJcbiAgICovXG4gIGdhc0RhdGEoZ2FzRGF0YTogR2FzRGF0YSk6IHRoaXMge1xuICAgIHRoaXMudmFsaWRhdGVHYXNEYXRhKGdhc0RhdGEpO1xuICAgIHRoaXMudHJhbnNhY3Rpb24uZ2FzUHJpY2UgPSBnYXNEYXRhLmdhc1ByaWNlO1xuICAgIHRoaXMudHJhbnNhY3Rpb24uZ2FzQnVkZ2V0ID0gZ2FzRGF0YS5nYXNCdWRnZXQ7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5nYXNQYXltZW50T2JqZWN0cyA9IGdhc0RhdGEuZ2FzUGF5bWVudE9iamVjdHMgYXMgVHJhbnNhY3Rpb25PYmplY3RJbnB1dFtdO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGdhc1Nwb25zb3Igb2YgdGhpcyB0cmFuc2FjdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNwb25zb3JBZGRyZXNzIHRoZSBhY2NvdW50IHRoYXQgaXMgc3BvbnNvcmluZyB0aGlzIHRyYW5zYWN0aW9uJ3MgZ2FzXG4gICAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbkJ1aWxkZXJ9IFRoaXMgdHJhbnNhY3Rpb24gYnVpbGRlclxuICAgKi9cbiAgZ2FzU3BvbnNvcihzcG9uc29yQWRkcmVzczogc3RyaW5nKTogdGhpcyB7XG4gICAgdGhpcy52YWxpZGF0ZUFkZHJlc3MoeyBhZGRyZXNzOiBzcG9uc29yQWRkcmVzcyB9KTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLmdhc1Nwb25zb3IgPSBzcG9uc29yQWRkcmVzcztcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGFkZFNpZ25hdHVyZShwdWJsaWNLZXk6IFB1YmxpY0tleSwgc2lnbmF0dXJlOiBCdWZmZXIpOiB2b2lkIHtcbiAgICBpZiAoIXV0aWxzLmlzVmFsaWRQdWJsaWNLZXkocHVibGljS2V5LnB1YikgfHwgIXV0aWxzLmlzVmFsaWRTaWduYXR1cmUodG9CYXNlNjQoc2lnbmF0dXJlKSkpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgdHJhbnNhY3Rpb24gc2lnbmF0dXJlJyk7XG4gICAgfVxuICAgIHRoaXMudHJhbnNhY3Rpb24uYWRkU2lnbmF0dXJlKHB1YmxpY0tleSwgc2lnbmF0dXJlKTtcbiAgfVxuXG4gIGFkZEdhc1Nwb25zb3JTaWduYXR1cmUocHVibGljS2V5OiBQdWJsaWNLZXksIHNpZ25hdHVyZTogQnVmZmVyKTogdm9pZCB7XG4gICAgaWYgKCF1dGlscy5pc1ZhbGlkUHVibGljS2V5KHB1YmxpY0tleS5wdWIpIHx8ICF1dGlscy5pc1ZhbGlkU2lnbmF0dXJlKHRvQmFzZTY0KHNpZ25hdHVyZSkpKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIHRyYW5zYWN0aW9uIHNpZ25hdHVyZScpO1xuICAgIH1cbiAgICB0aGlzLnRyYW5zYWN0aW9uLmFkZEdhc1Nwb25zb3JTaWduYXR1cmUocHVibGljS2V5LCBzaWduYXR1cmUpO1xuICB9XG5cbiAgdmFsaWRhdGVLZXkoa2V5OiBCYXNlS2V5KTogdm9pZCB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0ZG9jXG4gICAqICovXG4gIHZhbGlkYXRlQWRkcmVzcyhhZGRyZXNzOiBCYXNlQWRkcmVzcywgYWRkcmVzc0Zvcm1hdD86IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghdXRpbHMuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcy5hZGRyZXNzKSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCBhZGRyZXNzICcgKyBhZGRyZXNzLmFkZHJlc3MpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdGRvY1xuICAgKiAqL1xuICB2YWxpZGF0ZVZhbHVlKHZhbHVlOiBCaWdOdW1iZXIpOiB2b2lkIHtcbiAgICBpZiAodmFsdWUuaXNOYU4oKSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCBhbW91bnQgZm9ybWF0Jyk7XG4gICAgfSBlbHNlIGlmICh2YWx1ZS5pc0xlc3NUaGFuKDApKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdWYWx1ZSBjYW5ub3QgYmUgbGVzcyB0aGFuIHplcm8nKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVSYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCFyYXdUcmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCByYXcgdHJhbnNhY3Rpb246IFVuZGVmaW5lZCcpO1xuICAgIH1cbiAgICBpZiAoIXV0aWxzLmlzVmFsaWRSYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbikpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZVRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgcmF3IHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0ZG9jXG4gICAqICovXG4gIHZhbGlkYXRlVHJhbnNhY3Rpb24odHJhbnNhY3Rpb24/OiBUcmFuc2FjdGlvbik6IHZvaWQge1xuICAgIGlmICghdHJhbnNhY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndHJhbnNhY3Rpb24gbm90IGRlZmluZWQnKTtcbiAgICB9XG4gICAgdGhpcy52YWxpZGF0ZUFkZHJlc3MoeyBhZGRyZXNzOiB0cmFuc2FjdGlvbi5zZW5kZXIgfSk7XG4gICAgdGhpcy52YWxpZGF0ZUdhc0RhdGEoe1xuICAgICAgZ2FzQnVkZ2V0OiB0cmFuc2FjdGlvbi5nYXNCdWRnZXQsXG4gICAgICBnYXNQcmljZTogdHJhbnNhY3Rpb24uZ2FzUHJpY2UsXG4gICAgICBnYXNQYXltZW50T2JqZWN0czogdHJhbnNhY3Rpb24uZ2FzUGF5bWVudE9iamVjdHMsXG4gICAgfSk7XG4gICAgaWYgKHRyYW5zYWN0aW9uLmdhc1Nwb25zb3IpIHtcbiAgICAgIHRoaXMudmFsaWRhdGVBZGRyZXNzKHsgYWRkcmVzczogdHJhbnNhY3Rpb24uZ2FzU3BvbnNvciB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXRkb2NcbiAgICogKi9cbiAgZnJvbUltcGxlbWVudGF0aW9uKHJhd1RyYW5zYWN0aW9uOiBzdHJpbmcgfCBVaW50OEFycmF5KTogVHJhbnNhY3Rpb24ge1xuICAgIGlmICghdXRpbHMuaXNWYWxpZFJhd1RyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uKSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgICB0aGlzLnRyYW5zYWN0aW9uLnBhcnNlRnJvbUJyb2FkY2FzdFR4KHJhd1RyYW5zYWN0aW9uKTtcbiAgICByZXR1cm4gdGhpcy50cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdGRvY1xuICAgKiAqL1xuICBwcm90ZWN0ZWQgc2lnbkltcGxlbWVudGF0aW9uKGtleTogQmFzZUtleSk6IEJhc2VUcmFuc2FjdGlvbiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0ZG9jXG4gICAqICovXG4gIHByb3RlY3RlZCBhc3luYyBidWlsZEltcGxlbWVudGF0aW9uKCk6IFByb21pc2U8VHJhbnNhY3Rpb24+IHtcbiAgICAvLyBJZiBnYXMgZGF0YSBpcyBwcm92aWRlZCwgdGhpcyBpcyBub3QgYSBzaW11bGF0ZSB0cmFuc2FjdGlvblxuICAgIGlmICh0aGlzLnRyYW5zYWN0aW9uLmdhc1ByaWNlICYmIHRoaXMudHJhbnNhY3Rpb24uZ2FzQnVkZ2V0ICYmIHRoaXMudHJhbnNhY3Rpb24uZ2FzUGF5bWVudE9iamVjdHMpIHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb24uaXNTaW11bGF0ZVR4ID0gZmFsc2U7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMudHJhbnNhY3Rpb24uYnVpbGQoKTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLmFkZElucHV0c0FuZE91dHB1dHMoKTtcbiAgICByZXR1cm4gdGhpcy50cmFuc2FjdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGVHYXNEYXRhKGdhc0RhdGE6IEdhc0RhdGEpOiB2b2lkIHtcbiAgICBpZiAoZ2FzRGF0YS5nYXNCdWRnZXQpIHtcbiAgICAgIHRoaXMudmFsaWRhdGVWYWx1ZShuZXcgQmlnTnVtYmVyKGdhc0RhdGEuZ2FzQnVkZ2V0KSk7XG4gICAgfVxuICAgIGlmIChnYXNEYXRhLmdhc1ByaWNlKSB7XG4gICAgICB0aGlzLnZhbGlkYXRlVmFsdWUobmV3IEJpZ051bWJlcihnYXNEYXRhLmdhc1ByaWNlKSk7XG4gICAgfVxuICAgIGlmIChnYXNEYXRhLmdhc1BheW1lbnRPYmplY3RzICYmIGdhc0RhdGEuZ2FzUGF5bWVudE9iamVjdHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdHYXMgaW5wdXQgb2JqZWN0cyBsaXN0IGlzIGVtcHR5Jyk7XG4gICAgfVxuICB9XG59XG4iXX0=
224
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsbURBUzhCO0FBQzlCLGdFQUFxQztBQUdyQyxvREFBNEI7QUFFNUIsZ0RBQWdEO0FBRWhEOzs7R0FHRztBQUNILE1BQXNCLGtCQUFtQixTQUFRLGlDQUFzQjtJQUdyRSxZQUFzQixVQUFnQztRQUNwRCxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDcEIsQ0FBQztJQUVEOzs7T0FHRztJQUNILFdBQVcsQ0FBQyxFQUFlO1FBQ3pCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM3QixJQUFJLENBQUMsbUJBQW1CLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVEOztPQUVHO0lBQ0ssbUJBQW1CLENBQUMsRUFBZTtRQUN6QyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUM7UUFDeEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQztRQUMxQyxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixHQUFHLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQztRQUMxRCxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDO0lBQzlDLENBQUM7SUFFRCxJQUFJLGVBQWU7UUFDakIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBSSxXQUFXO1FBQ2IsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFFRCxJQUFjLFdBQVcsQ0FBQyxXQUF3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O1FBRUQsSUFBSSxPQUFPLENBQUMsaUJBQWlCLElBQUksT0FBTyxDQUFDLGlCQUFpQixDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN4RSxNQUFNLElBQUksZ0NBQXFCLENBQUMsaUNBQWlDLENBQUMsQ0FBQztRQUNyRSxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBN09ELGdEQTZPQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEJhc2VBZGRyZXNzLFxuICBCYXNlS2V5LFxuICBCYXNlVHJhbnNhY3Rpb24sXG4gIEJhc2VUcmFuc2FjdGlvbkJ1aWxkZXIsXG4gIEJ1aWxkVHJhbnNhY3Rpb25FcnJvcixcbiAgUGFyc2VUcmFuc2FjdGlvbkVycm9yLFxuICBQdWJsaWNLZXksXG4gIFRyYW5zYWN0aW9uVHlwZSxcbn0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IEJpZ051bWJlciBmcm9tICdiaWdudW1iZXIuanMnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tICcuL3RyYW5zYWN0aW9uJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB1dGlscyBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uT2JqZWN0SW5wdXQsIEdhc0RhdGEgfSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCB7IHRvQmFzZTY0IH0gZnJvbSAnQGlvdGEvaW90YS1zZGsvdXRpbHMnO1xuXG4vKipcbiAqIEJhc2UgY2xhc3MgZm9yIElPVEEgdHJhbnNhY3Rpb24gYnVpbGRlcnMuXG4gKiBQcm92aWRlcyBjb21tb24gZnVuY3Rpb25hbGl0eSBmb3IgYnVpbGRpbmcgYW5kIHZhbGlkYXRpbmcgSU9UQSB0cmFuc2FjdGlvbnMuXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBUcmFuc2FjdGlvbkJ1aWxkZXIgZXh0ZW5kcyBCYXNlVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgcHJvdGVjdGVkIF90cmFuc2FjdGlvbjogVHJhbnNhY3Rpb247XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKGNvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoY29pbkNvbmZpZyk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgdGhlIHRyYW5zYWN0aW9uIGJ1aWxkZXIgd2l0aCBkYXRhIGZyb20gYW4gZXhpc3RpbmcgdHJhbnNhY3Rpb24uXG4gICAqIENvcGllcyBzZW5kZXIsIGdhcyBkYXRhLCBhbmQgZ2FzIHNwb25zb3IgaW5mb3JtYXRpb24uXG4gICAqL1xuICBpbml0QnVpbGRlcih0eDogVHJhbnNhY3Rpb24pOiB2b2lkIHtcbiAgICB0aGlzLnZhbGlkYXRlVHJhbnNhY3Rpb24odHgpO1xuICAgIHRoaXMuY29weVRyYW5zYWN0aW9uRGF0YSh0eCk7XG4gIH1cblxuICAvKipcbiAgICogQ29waWVzIHRyYW5zYWN0aW9uIGRhdGEgZnJvbSB0aGUgc291cmNlIHRyYW5zYWN0aW9uIHRvIHRoZSBidWlsZGVyJ3MgdHJhbnNhY3Rpb24uXG4gICAqL1xuICBwcml2YXRlIGNvcHlUcmFuc2FjdGlvbkRhdGEodHg6IFRyYW5zYWN0aW9uKTogdm9pZCB7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5zZW5kZXIgPSB0eC5zZW5kZXI7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5nYXNQcmljZSA9IHR4Lmdhc1ByaWNlO1xuICAgIHRoaXMudHJhbnNhY3Rpb24uZ2FzQnVkZ2V0ID0gdHguZ2FzQnVkZ2V0O1xuICAgIHRoaXMudHJhbnNhY3Rpb24uZ2FzUGF5bWVudE9iamVjdHMgPSB0eC5nYXNQYXltZW50T2JqZWN0cztcbiAgICB0aGlzLnRyYW5zYWN0aW9uLmdhc1Nwb25zb3IgPSB0eC5nYXNTcG9uc29yO1xuICB9XG5cbiAgZ2V0IHRyYW5zYWN0aW9uVHlwZSgpOiBUcmFuc2FjdGlvblR5cGUge1xuICAgIHJldHVybiB0aGlzLnRyYW5zYWN0aW9uLnR5cGU7XG4gIH1cblxuICBnZXQgdHJhbnNhY3Rpb24oKTogVHJhbnNhY3Rpb24ge1xuICAgIHJldHVybiB0aGlzLl90cmFuc2FjdGlvbjtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXQgdHJhbnNhY3Rpb24odHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uKSB7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb24gPSB0cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBzZW5kZXIgYWRkcmVzcyBmb3IgdGhpcyB0cmFuc2FjdGlvbi5cbiAgICogQHBhcmFtIHNlbmRlckFkZHJlc3MgLSBUaGUgSU9UQSBhZGRyZXNzIHRoYXQgaXMgc2VuZGluZyB0aGlzIHRyYW5zYWN0aW9uXG4gICAqIEByZXR1cm5zIFRoaXMgdHJhbnNhY3Rpb24gYnVpbGRlciBmb3IgbWV0aG9kIGNoYWluaW5nXG4gICAqL1xuICBzZW5kZXIoc2VuZGVyQWRkcmVzczogc3RyaW5nKTogdGhpcyB7XG4gICAgdGhpcy52YWxpZGF0ZUFkZHJlc3MoeyBhZGRyZXNzOiBzZW5kZXJBZGRyZXNzIH0pO1xuICAgIHRoaXMudHJhbnNhY3Rpb24uc2VuZGVyID0gc2VuZGVyQWRkcmVzcztcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBnYXMgZGF0YSBmb3IgdGhpcyB0cmFuc2FjdGlvbiAoYnVkZ2V0LCBwcmljZSwgYW5kIHBheW1lbnQgb2JqZWN0cykuXG4gICAqIEBwYXJhbSBnYXNEYXRhIC0gVGhlIGdhcyBjb25maWd1cmF0aW9uIGluY2x1ZGluZyBidWRnZXQsIHByaWNlLCBhbmQgcGF5bWVudCBvYmplY3RzXG4gICAqIEByZXR1cm5zIFRoaXMgdHJhbnNhY3Rpb24gYnVpbGRlciBmb3IgbWV0aG9kIGNoYWluaW5nXG4gICAqL1xuICBnYXNEYXRhKGdhc0RhdGE6IEdhc0RhdGEpOiB0aGlzIHtcbiAgICB0aGlzLnZhbGlkYXRlR2FzRGF0YShnYXNEYXRhKTtcbiAgICB0aGlzLnNldEdhc0RhdGFPblRyYW5zYWN0aW9uKGdhc0RhdGEpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgZ2FzIGRhdGEgZmllbGRzIG9uIHRoZSB0cmFuc2FjdGlvbi5cbiAgICovXG4gIHByaXZhdGUgc2V0R2FzRGF0YU9uVHJhbnNhY3Rpb24oZ2FzRGF0YTogR2FzRGF0YSk6IHZvaWQge1xuICAgIHRoaXMudHJhbnNhY3Rpb24uZ2FzUHJpY2UgPSBnYXNEYXRhLmdhc1ByaWNlO1xuICAgIHRoaXMudHJhbnNhY3Rpb24uZ2FzQnVkZ2V0ID0gZ2FzRGF0YS5nYXNCdWRnZXQ7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5nYXNQYXltZW50T2JqZWN0cyA9IGdhc0RhdGEuZ2FzUGF5bWVudE9iamVjdHMgYXMgVHJhbnNhY3Rpb25PYmplY3RJbnB1dFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGdhcyBzcG9uc29yIGZvciB0aGlzIHRyYW5zYWN0aW9uLlxuICAgKiBUaGUgZ2FzIHNwb25zb3IgcGF5cyBmb3IgdHJhbnNhY3Rpb24gZmVlcyBpbnN0ZWFkIG9mIHRoZSBzZW5kZXIuXG4gICAqIEBwYXJhbSBzcG9uc29yQWRkcmVzcyAtIFRoZSBJT1RBIGFkZHJlc3Mgc3BvbnNvcmluZyB0aGlzIHRyYW5zYWN0aW9uJ3MgZ2FzIGZlZXNcbiAgICogQHJldHVybnMgVGhpcyB0cmFuc2FjdGlvbiBidWlsZGVyIGZvciBtZXRob2QgY2hhaW5pbmdcbiAgICovXG4gIGdhc1Nwb25zb3Ioc3BvbnNvckFkZHJlc3M6IHN0cmluZyk6IHRoaXMge1xuICAgIHRoaXMudmFsaWRhdGVBZGRyZXNzKHsgYWRkcmVzczogc3BvbnNvckFkZHJlc3MgfSk7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5nYXNTcG9uc29yID0gc3BvbnNvckFkZHJlc3M7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHNpZ25hdHVyZSBmcm9tIHRoZSB0cmFuc2FjdGlvbiBzZW5kZXIuXG4gICAqIEBwYXJhbSBwdWJsaWNLZXkgLSBUaGUgc2VuZGVyJ3MgcHVibGljIGtleVxuICAgKiBAcGFyYW0gc2lnbmF0dXJlIC0gVGhlIHNpZ25hdHVyZSBieXRlc1xuICAgKiBAdGhyb3dzIEJ1aWxkVHJhbnNhY3Rpb25FcnJvciBpZiB0aGUgc2lnbmF0dXJlIG9yIHB1YmxpYyBrZXkgaXMgaW52YWxpZFxuICAgKi9cbiAgYWRkU2lnbmF0dXJlKHB1YmxpY0tleTogUHVibGljS2V5LCBzaWduYXR1cmU6IEJ1ZmZlcik6IHZvaWQge1xuICAgIHRoaXMudmFsaWRhdGVTaWduYXR1cmVEYXRhKHB1YmxpY0tleSwgc2lnbmF0dXJlKTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLmFkZFNpZ25hdHVyZShwdWJsaWNLZXksIHNpZ25hdHVyZSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHNpZ25hdHVyZSBmcm9tIHRoZSBnYXMgc3BvbnNvci5cbiAgICogQHBhcmFtIHB1YmxpY0tleSAtIFRoZSBnYXMgc3BvbnNvcidzIHB1YmxpYyBrZXlcbiAgICogQHBhcmFtIHNpZ25hdHVyZSAtIFRoZSBzaWduYXR1cmUgYnl0ZXNcbiAgICogQHRocm93cyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IgaWYgdGhlIHNpZ25hdHVyZSBvciBwdWJsaWMga2V5IGlzIGludmFsaWRcbiAgICovXG4gIGFkZEdhc1Nwb25zb3JTaWduYXR1cmUocHVibGljS2V5OiBQdWJsaWNLZXksIHNpZ25hdHVyZTogQnVmZmVyKTogdm9pZCB7XG4gICAgdGhpcy52YWxpZGF0ZVNpZ25hdHVyZURhdGEocHVibGljS2V5LCBzaWduYXR1cmUpO1xuICAgIHRoaXMudHJhbnNhY3Rpb24uYWRkR2FzU3BvbnNvclNpZ25hdHVyZShwdWJsaWNLZXksIHNpZ25hdHVyZSk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoYXQgdGhlIHNpZ25hdHVyZSBhbmQgcHVibGljIGtleSBhcmUgaW4gdmFsaWQgZm9ybWF0cy5cbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVTaWduYXR1cmVEYXRhKHB1YmxpY0tleTogUHVibGljS2V5LCBzaWduYXR1cmU6IEJ1ZmZlcik6IHZvaWQge1xuICAgIGlmICghdXRpbHMuaXNWYWxpZFB1YmxpY0tleShwdWJsaWNLZXkucHViKSB8fCAhdXRpbHMuaXNWYWxpZFNpZ25hdHVyZSh0b0Jhc2U2NChzaWduYXR1cmUpKSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCB0cmFuc2FjdGlvbiBzaWduYXR1cmUnKTtcbiAgICB9XG4gIH1cblxuICB2YWxpZGF0ZUtleShrZXk6IEJhc2VLZXkpOiB2b2lkIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIGFuIElPVEEgYWRkcmVzcyBmb3JtYXQuXG4gICAqIEB0aHJvd3MgQnVpbGRUcmFuc2FjdGlvbkVycm9yIGlmIGFkZHJlc3MgaXMgaW52YWxpZFxuICAgKi9cbiAgdmFsaWRhdGVBZGRyZXNzKGFkZHJlc3M6IEJhc2VBZGRyZXNzLCBhZGRyZXNzRm9ybWF0Pzogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF1dGlscy5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzLmFkZHJlc3MpKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIGFkZHJlc3MgJyArIGFkZHJlc3MuYWRkcmVzcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGF0IGEgbnVtZXJpYyB2YWx1ZSBpcyB2YWxpZCAobm90IE5hTiBhbmQgbm90IG5lZ2F0aXZlKS5cbiAgICogQHRocm93cyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IgaWYgdmFsdWUgaXMgaW52YWxpZFxuICAgKi9cbiAgdmFsaWRhdGVWYWx1ZSh2YWx1ZTogQmlnTnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHZhbHVlLmlzTmFOKCkpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgYW1vdW50IGZvcm1hdCcpO1xuICAgIH1cbiAgICBpZiAodmFsdWUuaXNMZXNzVGhhbigwKSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignVmFsdWUgY2Fubm90IGJlIGxlc3MgdGhhbiB6ZXJvJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGF0IGEgcmF3IHRyYW5zYWN0aW9uIHN0cmluZyBpcyBwcm9wZXJseSBmb3JtYXR0ZWQuXG4gICAqIEB0aHJvd3MgUGFyc2VUcmFuc2FjdGlvbkVycm9yIGlmIHJhdyB0cmFuc2FjdGlvbiBpcyBpbnZhbGlkXG4gICAqL1xuICB2YWxpZGF0ZVJhd1RyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXJhd1RyYW5zYWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2VUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIHJhdyB0cmFuc2FjdGlvbjogVW5kZWZpbmVkJyk7XG4gICAgfVxuICAgIGlmICghdXRpbHMuaXNWYWxpZFJhd1RyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uKSkge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCByYXcgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIGEgdHJhbnNhY3Rpb24gb2JqZWN0IGhhcyBhbGwgcmVxdWlyZWQgZmllbGRzLlxuICAgKiBAdGhyb3dzIEVycm9yIGlmIHRyYW5zYWN0aW9uIGlzIHVuZGVmaW5lZCBvciBoYXMgaW52YWxpZCBkYXRhXG4gICAqL1xuICB2YWxpZGF0ZVRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uPzogVHJhbnNhY3Rpb24pOiB2b2lkIHtcbiAgICBpZiAoIXRyYW5zYWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RyYW5zYWN0aW9uIG5vdCBkZWZpbmVkJyk7XG4gICAgfVxuXG4gICAgdGhpcy52YWxpZGF0ZUFkZHJlc3MoeyBhZGRyZXNzOiB0cmFuc2FjdGlvbi5zZW5kZXIgfSk7XG4gICAgdGhpcy52YWxpZGF0ZUdhc0RhdGEoe1xuICAgICAgZ2FzQnVkZ2V0OiB0cmFuc2FjdGlvbi5nYXNCdWRnZXQsXG4gICAgICBnYXNQcmljZTogdHJhbnNhY3Rpb24uZ2FzUHJpY2UsXG4gICAgICBnYXNQYXltZW50T2JqZWN0czogdHJhbnNhY3Rpb24uZ2FzUGF5bWVudE9iamVjdHMsXG4gICAgfSk7XG5cbiAgICBpZiAodHJhbnNhY3Rpb24uZ2FzU3BvbnNvcikge1xuICAgICAgdGhpcy52YWxpZGF0ZUFkZHJlc3MoeyBhZGRyZXNzOiB0cmFuc2FjdGlvbi5nYXNTcG9uc29yIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgdHJhbnNhY3Rpb24gb2JqZWN0IGZyb20gYSByYXcgdHJhbnNhY3Rpb24gc3RyaW5nIG9yIGJ5dGVzLlxuICAgKiBAcGFyYW0gcmF3VHJhbnNhY3Rpb24gLSBSYXcgdHJhbnNhY3Rpb24gaW4gYmFzZTY0IHN0cmluZyBvciBVaW50OEFycmF5IGZvcm1hdFxuICAgKiBAcmV0dXJucyBUaGUgcGFyc2VkIHRyYW5zYWN0aW9uIG9iamVjdFxuICAgKiBAdGhyb3dzIEJ1aWxkVHJhbnNhY3Rpb25FcnJvciBpZiByYXcgdHJhbnNhY3Rpb24gaXMgaW52YWxpZFxuICAgKi9cbiAgZnJvbUltcGxlbWVudGF0aW9uKHJhd1RyYW5zYWN0aW9uOiBzdHJpbmcgfCBVaW50OEFycmF5KTogVHJhbnNhY3Rpb24ge1xuICAgIGlmICghdXRpbHMuaXNWYWxpZFJhd1RyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uKSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgICB0aGlzLnRyYW5zYWN0aW9uLnBhcnNlRnJvbUJyb2FkY2FzdFR4KHJhd1RyYW5zYWN0aW9uKTtcbiAgICByZXR1cm4gdGhpcy50cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaWduIGltcGxlbWVudGF0aW9uIC0gbm90IHN1cHBvcnRlZCBmb3IgSU9UQSB0cmFuc2FjdGlvbnMuXG4gICAqIElPVEEgdHJhbnNhY3Rpb25zIG11c3QgYmUgc2lnbmVkIGV4dGVybmFsbHkuXG4gICAqL1xuICBwcm90ZWN0ZWQgc2lnbkltcGxlbWVudGF0aW9uKGtleTogQmFzZUtleSk6IEJhc2VUcmFuc2FjdGlvbiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyB0aGUgdHJhbnNhY3Rpb24gYW5kIHByZXBhcmVzIGl0IGZvciBicm9hZGNhc3QuXG4gICAqIEF1dG9tYXRpY2FsbHkgc3dpdGNoZXMgZnJvbSBzaW11bGF0ZSB0byByZWFsIHRyYW5zYWN0aW9uIG1vZGUgaWYgZ2FzIGRhdGEgaXMgcHJlc2VudC5cbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBidWlsZEltcGxlbWVudGF0aW9uKCk6IFByb21pc2U8VHJhbnNhY3Rpb24+IHtcbiAgICB0aGlzLnVwZGF0ZVRyYW5zYWN0aW9uTW9kZSgpO1xuICAgIGF3YWl0IHRoaXMudHJhbnNhY3Rpb24uYnVpbGQoKTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLmFkZElucHV0c0FuZE91dHB1dHMoKTtcbiAgICByZXR1cm4gdGhpcy50cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSB0cmFuc2FjdGlvbiBtb2RlIGJhc2VkIG9uIGdhcyBkYXRhIGF2YWlsYWJpbGl0eS5cbiAgICogU3dpdGNoZXMgdG8gcmVhbCB0cmFuc2FjdGlvbiBtb2RlIGlmIGFsbCBnYXMgZGF0YSBpcyBwcm92aWRlZC5cbiAgICovXG4gIHByaXZhdGUgdXBkYXRlVHJhbnNhY3Rpb25Nb2RlKCk6IHZvaWQge1xuICAgIGNvbnN0IGhhc0NvbXBsZXRlR2FzRGF0YSA9XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uLmdhc1ByaWNlICYmIHRoaXMudHJhbnNhY3Rpb24uZ2FzQnVkZ2V0ICYmIHRoaXMudHJhbnNhY3Rpb24uZ2FzUGF5bWVudE9iamVjdHM7XG5cbiAgICBpZiAoaGFzQ29tcGxldGVHYXNEYXRhKSB7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uLmlzU2ltdWxhdGVUeCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgZ2FzIGRhdGEgdmFsdWVzIGFuZCBwcmVzZW5jZS5cbiAgICogQHRocm93cyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IgaWYgZ2FzIGRhdGEgaXMgaW52YWxpZFxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZUdhc0RhdGEoZ2FzRGF0YTogR2FzRGF0YSk6IHZvaWQge1xuICAgIGlmIChnYXNEYXRhLmdhc0J1ZGdldCkge1xuICAgICAgdGhpcy52YWxpZGF0ZVZhbHVlKG5ldyBCaWdOdW1iZXIoZ2FzRGF0YS5nYXNCdWRnZXQpKTtcbiAgICB9XG5cbiAgICBpZiAoZ2FzRGF0YS5nYXNQcmljZSkge1xuICAgICAgdGhpcy52YWxpZGF0ZVZhbHVlKG5ldyBCaWdOdW1iZXIoZ2FzRGF0YS5nYXNQcmljZSkpO1xuICAgIH1cblxuICAgIGlmIChnYXNEYXRhLmdhc1BheW1lbnRPYmplY3RzICYmIGdhc0RhdGEuZ2FzUGF5bWVudE9iamVjdHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdHYXMgaW5wdXQgb2JqZWN0cyBsaXN0IGlzIGVtcHR5Jyk7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -3,19 +3,102 @@ import { TransactionBuilder } from './transactionBuilder';
3
3
  import { TransferBuilder } from './transferBuilder';
4
4
  import { Transaction } from './transaction';
5
5
  import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
6
+ /**
7
+ * Factory class for creating IOTA transaction builders.
8
+ *
9
+ * This factory provides methods to create transaction builders for different
10
+ * transaction types and to reconstruct transactions from raw transaction data.
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * const factory = new TransactionBuilderFactory(coins.get('tiota'));
15
+ *
16
+ * // Create a new transfer builder
17
+ * const builder = factory.getTransferBuilder();
18
+ *
19
+ * // Rebuild from raw transaction
20
+ * const rebuiltBuilder = factory.from(rawTxHex);
21
+ * ```
22
+ */
6
23
  export declare class TransactionBuilderFactory extends BaseTransactionBuilderFactory {
7
24
  constructor(coinConfig: Readonly<CoinConfig>);
25
+ /**
26
+ * Wallet initialization is not implemented for IOTA.
27
+ * IOTA wallets are initialized through the TSS flow.
28
+ *
29
+ * @throws Error always - not implemented
30
+ */
8
31
  getWalletInitializationBuilder(): void;
9
- /** @inheritdoc */
32
+ /**
33
+ * Creates a transfer transaction builder.
34
+ * Optionally initializes the builder with data from an existing transaction.
35
+ *
36
+ * @param tx - Optional existing transaction to initialize the builder
37
+ * @returns A new TransferBuilder instance
38
+ *
39
+ * @example
40
+ * ```typescript
41
+ * // Create a new transfer builder
42
+ * const builder = factory.getTransferBuilder();
43
+ *
44
+ * // Initialize from existing transaction
45
+ * const existingTx = await builder.build();
46
+ * const newBuilder = factory.getTransferBuilder(existingTx);
47
+ * ```
48
+ */
10
49
  getTransferBuilder(tx?: Transaction): TransferBuilder;
50
+ /**
51
+ * Reconstructs a transaction builder from raw transaction data.
52
+ * Automatically identifies the transaction type and creates the appropriate builder.
53
+ *
54
+ * @param rawTx - Raw transaction data (hex string or Uint8Array)
55
+ * @returns TransactionBuilder appropriate for the transaction type
56
+ * @throws InvalidTransactionError if the transaction type is not supported
57
+ *
58
+ * @example
59
+ * ```typescript
60
+ * // From hex string
61
+ * const builder = factory.from('0x1234...');
62
+ *
63
+ * // From Uint8Array
64
+ * const builder = factory.from(new Uint8Array([...]));
65
+ *
66
+ * // Rebuild and access the transaction
67
+ * const tx = await builder.build();
68
+ * ```
69
+ */
11
70
  from(rawTx: string | Uint8Array): TransactionBuilder;
12
- private identifyTxTypeFromRawTx;
13
71
  /**
14
- * Initialize the builder with the given transaction
72
+ * Identifies the transaction type by analyzing its commands.
73
+ * Currently supports transfer transactions (Send type).
74
+ *
75
+ * @param rawTx - Raw transaction in base64 format
76
+ * @returns The identified transaction type
77
+ * @throws InvalidTransactionError if transaction contains unsupported commands
78
+ */
79
+ private identifyTransactionType;
80
+ /**
81
+ * Checks if a transaction is a transfer transaction by validating its commands.
82
+ * Transfer transactions only contain: SplitCoins, MergeCoins, and TransferObjects commands.
83
+ *
84
+ * @param txData - The parsed transaction data
85
+ * @returns true if all commands are valid transfer commands
86
+ */
87
+ private isTransferTransaction;
88
+ /**
89
+ * Creates a TransferBuilder from raw transaction data.
90
+ *
91
+ * @param rawTxBase64 - Raw transaction in base64 format
92
+ * @returns Initialized TransferBuilder
93
+ */
94
+ private createTransferBuilderFromRawTx;
95
+ /**
96
+ * Initializes a builder with data from an existing transaction.
97
+ * If no transaction is provided, returns the builder as-is.
15
98
  *
16
- * @param {Transaction | undefined} tx - the transaction used to initialize the builder
17
- * @param {TransactionBuilder} builder - the builder to be initialized
18
- * @returns {TransactionBuilder} the builder initialized
99
+ * @param tx - Optional transaction to initialize from
100
+ * @param builder - The builder to initialize
101
+ * @returns The initialized builder
19
102
  */
20
103
  private initializeBuilder;
21
104
  }
@@ -1 +1 @@
1
- {"version":3,"file":"transactionBuilderFactory.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilderFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,EAA4C,MAAM,sBAAsB,CAAC;AAC/G,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAI5C,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAE7D,qBAAa,yBAA0B,SAAQ,6BAA6B;gBAC9D,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC;IAIrC,8BAA8B,IAAI,IAAI;IAI7C,kBAAkB;IAClB,kBAAkB,CAAC,EAAE,CAAC,EAAE,WAAW,GAAG,eAAe;IAIrD,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,kBAAkB;IAapD,OAAO,CAAC,uBAAuB;IAQ/B;;;;;;OAMG;IACH,OAAO,CAAC,iBAAiB;CAM1B"}
1
+ {"version":3,"file":"transactionBuilderFactory.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilderFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,EAA4C,MAAM,sBAAsB,CAAC;AAC/G,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAI5C,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAE7D;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,yBAA0B,SAAQ,6BAA6B;gBAC9D,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI5C;;;;;OAKG;IACI,8BAA8B,IAAI,IAAI;IAI7C;;;;;;;;;;;;;;;;OAgBG;IACH,kBAAkB,CAAC,EAAE,CAAC,EAAE,WAAW,GAAG,eAAe;IAIrD;;;;;;;;;;;;;;;;;;;OAmBG;IACH,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,kBAAkB;IAYpD;;;;;;;OAOG;IACH,OAAO,CAAC,uBAAuB;IAU/B;;;;;;OAMG;IACH,OAAO,CAAC,qBAAqB;IAI7B;;;;;OAKG;IACH,OAAO,CAAC,8BAA8B;IAMtC;;;;;;;OAOG;IACH,OAAO,CAAC,iBAAiB;CAM1B"}