@bitgo-beta/sdk-coin-iota 1.0.1-beta.44 → 1.0.1-beta.441

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 (69) hide show
  1. package/README.md +1 -1
  2. package/dist/src/iota.d.ts +134 -23
  3. package/dist/src/iota.d.ts.map +1 -1
  4. package/dist/src/iota.js +286 -46
  5. package/dist/src/lib/constants.d.ts +59 -6
  6. package/dist/src/lib/constants.d.ts.map +1 -1
  7. package/dist/src/lib/constants.js +76 -8
  8. package/dist/src/lib/iface.d.ts +174 -2
  9. package/dist/src/lib/iface.d.ts.map +1 -1
  10. package/dist/src/lib/iface.js +1 -1
  11. package/dist/src/lib/index.d.ts +1 -0
  12. package/dist/src/lib/index.d.ts.map +1 -1
  13. package/dist/src/lib/index.js +4 -2
  14. package/dist/src/lib/keyPair.d.ts +100 -6
  15. package/dist/src/lib/keyPair.d.ts.map +1 -1
  16. package/dist/src/lib/keyPair.js +103 -10
  17. package/dist/src/lib/transaction.d.ts +175 -5
  18. package/dist/src/lib/transaction.d.ts.map +1 -1
  19. package/dist/src/lib/transaction.js +390 -6
  20. package/dist/src/lib/transactionBuilder.d.ts +109 -9
  21. package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
  22. package/dist/src/lib/transactionBuilder.js +200 -14
  23. package/dist/src/lib/transactionBuilderFactory.d.ts +98 -2
  24. package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
  25. package/dist/src/lib/transactionBuilderFactory.js +132 -5
  26. package/dist/src/lib/transferBuilder.d.ts +52 -2
  27. package/dist/src/lib/transferBuilder.d.ts.map +1 -1
  28. package/dist/src/lib/transferBuilder.js +86 -3
  29. package/dist/src/lib/transferTransaction.d.ts +124 -0
  30. package/dist/src/lib/transferTransaction.d.ts.map +1 -0
  31. package/dist/src/lib/transferTransaction.js +341 -0
  32. package/dist/src/lib/utils.d.ts +108 -7
  33. package/dist/src/lib/utils.d.ts.map +1 -1
  34. package/dist/src/lib/utils.js +146 -11
  35. package/dist/test/resources/iota.d.ts +35 -0
  36. package/dist/test/resources/iota.d.ts.map +1 -0
  37. package/dist/test/resources/iota.js +93 -0
  38. package/dist/test/unit/helpers/testHelpers.d.ts +57 -0
  39. package/dist/test/unit/helpers/testHelpers.d.ts.map +1 -0
  40. package/dist/test/unit/helpers/testHelpers.js +176 -0
  41. package/dist/test/unit/index.d.ts +2 -0
  42. package/dist/test/unit/index.d.ts.map +1 -0
  43. package/dist/test/unit/index.js +16 -0
  44. package/dist/test/unit/iota.d.ts +2 -0
  45. package/dist/test/unit/iota.d.ts.map +1 -0
  46. package/dist/test/unit/iota.js +501 -0
  47. package/dist/test/unit/keyPair.d.ts +2 -0
  48. package/dist/test/unit/keyPair.d.ts.map +1 -0
  49. package/dist/test/unit/keyPair.js +108 -0
  50. package/dist/test/unit/transactionBuilder/transactionBuilder.d.ts +2 -0
  51. package/dist/test/unit/transactionBuilder/transactionBuilder.d.ts.map +1 -0
  52. package/dist/test/unit/transactionBuilder/transactionBuilder.js +188 -0
  53. package/dist/test/unit/transactionBuilder/transactionBuilderFactory.d.ts +2 -0
  54. package/dist/test/unit/transactionBuilder/transactionBuilderFactory.d.ts.map +1 -0
  55. package/dist/test/unit/transactionBuilder/transactionBuilderFactory.js +178 -0
  56. package/dist/test/unit/transactionBuilder/transferBuilder.d.ts +2 -0
  57. package/dist/test/unit/transactionBuilder/transferBuilder.d.ts.map +1 -0
  58. package/dist/test/unit/transactionBuilder/transferBuilder.js +438 -0
  59. package/dist/test/unit/transferTransaction.d.ts +2 -0
  60. package/dist/test/unit/transferTransaction.d.ts.map +1 -0
  61. package/dist/test/unit/transferTransaction.js +218 -0
  62. package/dist/test/unit/utils.d.ts +2 -0
  63. package/dist/test/unit/utils.d.ts.map +1 -0
  64. package/dist/test/unit/utils.js +252 -0
  65. package/dist/tsconfig.tsbuildinfo +1 -0
  66. package/package.json +17 -11
  67. package/.eslintignore +0 -5
  68. package/.mocharc.yml +0 -8
  69. package/CHANGELOG.md +0 -28
@@ -1,15 +1,115 @@
1
- import { BaseAddress, BaseKey, BaseTransaction, BaseTransactionBuilder } from '@bitgo-beta/sdk-core';
1
+ import { BaseAddress, BaseKey, BaseTransaction, BaseTransactionBuilder, PublicKey, TransactionType } from '@bitgo-beta/sdk-core';
2
2
  import BigNumber from 'bignumber.js';
3
- export declare class TransactionBuilder extends BaseTransactionBuilder {
4
- protected fromImplementation(rawTransaction: any): BaseTransaction;
5
- protected signImplementation(key: BaseKey): BaseTransaction;
6
- protected buildImplementation(): Promise<BaseTransaction>;
3
+ import { Transaction } from './transaction';
4
+ import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
5
+ import { GasData } from './iface';
6
+ /**
7
+ * Base class for IOTA transaction builders.
8
+ * Provides common functionality for building and validating IOTA transactions.
9
+ */
10
+ export declare abstract class TransactionBuilder extends BaseTransactionBuilder {
11
+ protected _transaction: Transaction;
12
+ protected constructor(coinConfig: Readonly<CoinConfig>);
13
+ /**
14
+ * Initializes the transaction builder with data from an existing transaction.
15
+ * Copies sender, gas data, and gas sponsor information.
16
+ */
17
+ initBuilder(tx: Transaction): void;
18
+ /**
19
+ * Copies transaction data from the source transaction to the builder's transaction.
20
+ */
21
+ private copyTransactionData;
22
+ get transactionType(): TransactionType;
23
+ get transaction(): Transaction;
24
+ protected set transaction(transaction: Transaction);
25
+ /**
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
+ */
30
+ sender(senderAddress: string): this;
31
+ /**
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
35
+ */
36
+ gasData(gasData: GasData): this;
37
+ /**
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
46
+ */
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
+ */
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
+ */
61
+ addGasSponsorSignature(publicKey: PublicKey, signature: Buffer): void;
62
+ /**
63
+ * Validates that the signature and public key are in valid formats.
64
+ */
65
+ private validateSignatureData;
7
66
  validateKey(key: BaseKey): void;
67
+ /**
68
+ * Validates an IOTA address format.
69
+ * @throws BuildTransactionError if address is invalid
70
+ */
8
71
  validateAddress(address: BaseAddress, addressFormat?: string): void;
72
+ /**
73
+ * Validates that a numeric value is valid (not NaN and not negative).
74
+ * @throws BuildTransactionError if value is invalid
75
+ */
9
76
  validateValue(value: BigNumber): void;
10
- validateRawTransaction(rawTransaction: any): void;
11
- validateTransaction(transaction?: BaseTransaction): void;
12
- protected get transaction(): BaseTransaction;
13
- protected set transaction(transaction: BaseTransaction);
77
+ /**
78
+ * Validates that a raw transaction string is properly formatted.
79
+ * @throws ParseTransactionError if raw transaction is invalid
80
+ */
81
+ validateRawTransaction(rawTransaction: string): void;
82
+ /**
83
+ * Validates a transaction object has all required fields.
84
+ * @throws Error if transaction is undefined or has invalid data
85
+ */
86
+ validateTransaction(transaction?: Transaction): void;
87
+ /**
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
+ */
93
+ fromImplementation(rawTransaction: string | Uint8Array): Transaction;
94
+ /**
95
+ * Sign implementation - not supported for IOTA transactions.
96
+ * IOTA transactions must be signed externally.
97
+ */
98
+ protected signImplementation(key: BaseKey): BaseTransaction;
99
+ /**
100
+ * Builds the transaction and prepares it for broadcast.
101
+ * Automatically switches from simulate to real transaction mode if gas data is present.
102
+ */
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
+ */
113
+ private validateGasData;
14
114
  }
15
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,EAAE,WAAW,EAAE,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AACrG,OAAO,SAAS,MAAM,cAAc,CAAC;AAErC,qBAAa,kBAAmB,SAAQ,sBAAsB;IAC5D,SAAS,CAAC,kBAAkB,CAAC,cAAc,EAAE,GAAG,GAAG,eAAe;IAGlE,SAAS,CAAC,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,eAAe;IAG3D,SAAS,CAAC,mBAAmB,IAAI,OAAO,CAAC,eAAe,CAAC;IAGzD,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;IAG/B,eAAe,CAAC,OAAO,EAAE,WAAW,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI;IAGnE,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAGrC,sBAAsB,CAAC,cAAc,EAAE,GAAG,GAAG,IAAI;IAGjD,mBAAmB,CAAC,WAAW,CAAC,EAAE,eAAe,GAAG,IAAI;IAGxD,SAAS,KAAK,WAAW,IAAI,eAAe,CAE3C;IACD,SAAS,KAAK,WAAW,CAAC,WAAW,EAAE,eAAe,EAErD;CACF"}
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"}
@@ -1,38 +1,224 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  exports.TransactionBuilder = void 0;
4
7
  const sdk_core_1 = require("@bitgo-beta/sdk-core");
8
+ const bignumber_js_1 = __importDefault(require("bignumber.js"));
9
+ const utils_1 = __importDefault(require("./utils"));
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
+ */
5
15
  class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
6
- fromImplementation(rawTransaction) {
7
- throw new Error('Method not implemented.');
16
+ constructor(coinConfig) {
17
+ super(coinConfig);
8
18
  }
9
- signImplementation(key) {
10
- throw new Error('Method not implemented.');
19
+ /**
20
+ * Initializes the transaction builder with data from an existing transaction.
21
+ * Copies sender, gas data, and gas sponsor information.
22
+ */
23
+ initBuilder(tx) {
24
+ this.validateTransaction(tx);
25
+ this.copyTransactionData(tx);
11
26
  }
12
- buildImplementation() {
13
- throw new Error('Method not implemented.');
27
+ /**
28
+ * Copies transaction data from the source transaction to the builder's transaction.
29
+ */
30
+ copyTransactionData(tx) {
31
+ this.transaction.sender = tx.sender;
32
+ this.transaction.gasPrice = tx.gasPrice;
33
+ this.transaction.gasBudget = tx.gasBudget;
34
+ this.transaction.gasPaymentObjects = tx.gasPaymentObjects;
35
+ this.transaction.gasSponsor = tx.gasSponsor;
36
+ }
37
+ get transactionType() {
38
+ return this.transaction.type;
39
+ }
40
+ get transaction() {
41
+ return this._transaction;
42
+ }
43
+ set transaction(transaction) {
44
+ this._transaction = transaction;
45
+ }
46
+ /**
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
50
+ */
51
+ sender(senderAddress) {
52
+ this.validateAddress({ address: senderAddress });
53
+ this.transaction.sender = senderAddress;
54
+ return this;
55
+ }
56
+ /**
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
60
+ */
61
+ gasData(gasData) {
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) {
70
+ this.transaction.gasPrice = gasData.gasPrice;
71
+ this.transaction.gasBudget = gasData.gasBudget;
72
+ this.transaction.gasPaymentObjects = gasData.gasPaymentObjects;
73
+ }
74
+ /**
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
79
+ */
80
+ gasSponsor(sponsorAddress) {
81
+ this.validateAddress({ address: sponsorAddress });
82
+ this.transaction.gasSponsor = sponsorAddress;
83
+ return this;
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
+ */
91
+ addSignature(publicKey, signature) {
92
+ this.validateSignatureData(publicKey, signature);
93
+ this.transaction.addSignature(publicKey, signature);
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
+ */
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) {
109
+ if (!utils_1.default.isValidPublicKey(publicKey.pub) || !utils_1.default.isValidSignature((0, utils_2.toBase64)(signature))) {
110
+ throw new sdk_core_1.BuildTransactionError('Invalid transaction signature');
111
+ }
14
112
  }
15
113
  validateKey(key) {
16
114
  throw new Error('Method not implemented.');
17
115
  }
116
+ /**
117
+ * Validates an IOTA address format.
118
+ * @throws BuildTransactionError if address is invalid
119
+ */
18
120
  validateAddress(address, addressFormat) {
19
- throw new Error('Method not implemented.');
121
+ if (!utils_1.default.isValidAddress(address.address)) {
122
+ throw new sdk_core_1.BuildTransactionError('Invalid address ' + address.address);
123
+ }
20
124
  }
125
+ /**
126
+ * Validates that a numeric value is valid (not NaN and not negative).
127
+ * @throws BuildTransactionError if value is invalid
128
+ */
21
129
  validateValue(value) {
22
- throw new Error('Method not implemented.');
130
+ if (value.isNaN()) {
131
+ throw new sdk_core_1.BuildTransactionError('Invalid amount format');
132
+ }
133
+ if (value.isLessThan(0)) {
134
+ throw new sdk_core_1.BuildTransactionError('Value cannot be less than zero');
135
+ }
23
136
  }
137
+ /**
138
+ * Validates that a raw transaction string is properly formatted.
139
+ * @throws ParseTransactionError if raw transaction is invalid
140
+ */
24
141
  validateRawTransaction(rawTransaction) {
25
- throw new Error('Method not implemented.');
142
+ if (!rawTransaction) {
143
+ throw new sdk_core_1.ParseTransactionError('Invalid raw transaction: Undefined');
144
+ }
145
+ if (!utils_1.default.isValidRawTransaction(rawTransaction)) {
146
+ throw new sdk_core_1.ParseTransactionError('Invalid raw transaction');
147
+ }
26
148
  }
149
+ /**
150
+ * Validates a transaction object has all required fields.
151
+ * @throws Error if transaction is undefined or has invalid data
152
+ */
27
153
  validateTransaction(transaction) {
28
- throw new Error('Method not implemented.');
154
+ if (!transaction) {
155
+ throw new Error('transaction not defined');
156
+ }
157
+ this.validateAddress({ address: transaction.sender });
158
+ this.validateGasData({
159
+ gasBudget: transaction.gasBudget,
160
+ gasPrice: transaction.gasPrice,
161
+ gasPaymentObjects: transaction.gasPaymentObjects,
162
+ });
163
+ if (transaction.gasSponsor) {
164
+ this.validateAddress({ address: transaction.gasSponsor });
165
+ }
29
166
  }
30
- get transaction() {
31
- throw new Error('Method not implemented.');
167
+ /**
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
+ */
173
+ fromImplementation(rawTransaction) {
174
+ if (!utils_1.default.isValidRawTransaction(rawTransaction)) {
175
+ throw new sdk_core_1.BuildTransactionError('Invalid transaction');
176
+ }
177
+ this.transaction.parseFromBroadcastTx(rawTransaction);
178
+ return this.transaction;
32
179
  }
33
- set transaction(transaction) {
180
+ /**
181
+ * Sign implementation - not supported for IOTA transactions.
182
+ * IOTA transactions must be signed externally.
183
+ */
184
+ signImplementation(key) {
34
185
  throw new Error('Method not implemented.');
35
186
  }
187
+ /**
188
+ * Builds the transaction and prepares it for broadcast.
189
+ * Automatically switches from simulate to real transaction mode if gas data is present.
190
+ */
191
+ async buildImplementation() {
192
+ this.updateTransactionMode();
193
+ await this.transaction.build();
194
+ this.transaction.addInputsAndOutputs();
195
+ return this.transaction;
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
+ */
211
+ validateGasData(gasData) {
212
+ if (gasData.gasBudget) {
213
+ this.validateValue(new bignumber_js_1.default(gasData.gasBudget));
214
+ }
215
+ if (gasData.gasPrice) {
216
+ this.validateValue(new bignumber_js_1.default(gasData.gasPrice));
217
+ }
218
+ if (gasData.gasPaymentObjects && gasData.gasPaymentObjects.length === 0) {
219
+ throw new sdk_core_1.BuildTransactionError('Gas input objects list is empty');
220
+ }
221
+ }
36
222
  }
37
223
  exports.TransactionBuilder = TransactionBuilder;
38
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbURBQXFHO0FBR3JHLE1BQWEsa0JBQW1CLFNBQVEsaUNBQXNCO0lBQ2xELGtCQUFrQixDQUFDLGNBQW1CO1FBQzlDLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBQ1Msa0JBQWtCLENBQUMsR0FBWTtRQUN2QyxNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUNTLG1CQUFtQjtRQUMzQixNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUNELFdBQVcsQ0FBQyxHQUFZO1FBQ3RCLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBQ0QsZUFBZSxDQUFDLE9BQW9CLEVBQUUsYUFBc0I7UUFDMUQsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFDRCxhQUFhLENBQUMsS0FBZ0I7UUFDNUIsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFDRCxzQkFBc0IsQ0FBQyxjQUFtQjtRQUN4QyxNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUNELG1CQUFtQixDQUFDLFdBQTZCO1FBQy9DLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBQ0QsSUFBYyxXQUFXO1FBQ3ZCLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBQ0QsSUFBYyxXQUFXLENBQUMsV0FBNEI7UUFDcEQsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0lBQzdDLENBQUM7Q0FDRjtBQS9CRCxnREErQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlQWRkcmVzcywgQmFzZUtleSwgQmFzZVRyYW5zYWN0aW9uLCBCYXNlVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IEJpZ051bWJlciBmcm9tICdiaWdudW1iZXIuanMnO1xuXG5leHBvcnQgY2xhc3MgVHJhbnNhY3Rpb25CdWlsZGVyIGV4dGVuZHMgQmFzZVRyYW5zYWN0aW9uQnVpbGRlciB7XG4gIHByb3RlY3RlZCBmcm9tSW1wbGVtZW50YXRpb24ocmF3VHJhbnNhY3Rpb246IGFueSk6IEJhc2VUcmFuc2FjdGlvbiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICB9XG4gIHByb3RlY3RlZCBzaWduSW1wbGVtZW50YXRpb24oa2V5OiBCYXNlS2V5KTogQmFzZVRyYW5zYWN0aW9uIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gIH1cbiAgcHJvdGVjdGVkIGJ1aWxkSW1wbGVtZW50YXRpb24oKTogUHJvbWlzZTxCYXNlVHJhbnNhY3Rpb24+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gIH1cbiAgdmFsaWRhdGVLZXkoa2V5OiBCYXNlS2V5KTogdm9pZCB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICB9XG4gIHZhbGlkYXRlQWRkcmVzcyhhZGRyZXNzOiBCYXNlQWRkcmVzcywgYWRkcmVzc0Zvcm1hdD86IHN0cmluZyk6IHZvaWQge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuICB2YWxpZGF0ZVZhbHVlKHZhbHVlOiBCaWdOdW1iZXIpOiB2b2lkIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gIH1cbiAgdmFsaWRhdGVSYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbjogYW55KTogdm9pZCB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICB9XG4gIHZhbGlkYXRlVHJhbnNhY3Rpb24odHJhbnNhY3Rpb24/OiBCYXNlVHJhbnNhY3Rpb24pOiB2b2lkIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCB0cmFuc2FjdGlvbigpOiBCYXNlVHJhbnNhY3Rpb24ge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuICBwcm90ZWN0ZWQgc2V0IHRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uOiBCYXNlVHJhbnNhY3Rpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gIH1cbn1cbiJdfQ==
224
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsbURBUzhCO0FBQzlCLGdFQUFxQztBQUdyQyxvREFBNEI7QUFFNUIsZ0RBQWdEO0FBRWhEOzs7R0FHRztBQUNILE1BQXNCLGtCQUFtQixTQUFRLGlDQUFzQjtJQUdyRSxZQUFzQixVQUFnQztRQUNwRCxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDcEIsQ0FBQztJQUVEOzs7T0FHRztJQUNILFdBQVcsQ0FBQyxFQUFlO1FBQ3pCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM3QixJQUFJLENBQUMsbUJBQW1CLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVEOztPQUVHO0lBQ0ssbUJBQW1CLENBQUMsRUFBZTtRQUN6QyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUM7UUFDeEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQztRQUMxQyxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixHQUFHLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQztRQUMxRCxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDO0lBQzlDLENBQUM7SUFFRCxJQUFJLGVBQWU7UUFDakIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBSSxXQUFXO1FBQ2IsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFFRCxJQUFjLFdBQVcsQ0FBQyxXQUF3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O1FBRUQsSUFBSSxPQUFPLENBQUMsaUJBQWlCLElBQUksT0FBTyxDQUFDLGlCQUFpQixDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN4RSxNQUFNLElBQUksZ0NBQXFCLENBQUMsaUNBQWlDLENBQUMsQ0FBQztRQUNyRSxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBN09ELGdEQTZPQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEJhc2VBZGRyZXNzLFxuICBCYXNlS2V5LFxuICBCYXNlVHJhbnNhY3Rpb24sXG4gIEJhc2VUcmFuc2FjdGlvbkJ1aWxkZXIsXG4gIEJ1aWxkVHJhbnNhY3Rpb25FcnJvcixcbiAgUGFyc2VUcmFuc2FjdGlvbkVycm9yLFxuICBQdWJsaWNLZXksXG4gIFRyYW5zYWN0aW9uVHlwZSxcbn0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IEJpZ051bWJlciBmcm9tICdiaWdudW1iZXIuanMnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tICcuL3RyYW5zYWN0aW9uJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB1dGlscyBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uT2JqZWN0SW5wdXQsIEdhc0RhdGEgfSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCB7IHRvQmFzZTY0IH0gZnJvbSAnQGlvdGEvaW90YS1zZGsvdXRpbHMnO1xuXG4vKipcbiAqIEJhc2UgY2xhc3MgZm9yIElPVEEgdHJhbnNhY3Rpb24gYnVpbGRlcnMuXG4gKiBQcm92aWRlcyBjb21tb24gZnVuY3Rpb25hbGl0eSBmb3IgYnVpbGRpbmcgYW5kIHZhbGlkYXRpbmcgSU9UQSB0cmFuc2FjdGlvbnMuXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBUcmFuc2FjdGlvbkJ1aWxkZXIgZXh0ZW5kcyBCYXNlVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgcHJvdGVjdGVkIF90cmFuc2FjdGlvbjogVHJhbnNhY3Rpb247XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKGNvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoY29pbkNvbmZpZyk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgdGhlIHRyYW5zYWN0aW9uIGJ1aWxkZXIgd2l0aCBkYXRhIGZyb20gYW4gZXhpc3RpbmcgdHJhbnNhY3Rpb24uXG4gICAqIENvcGllcyBzZW5kZXIsIGdhcyBkYXRhLCBhbmQgZ2FzIHNwb25zb3IgaW5mb3JtYXRpb24uXG4gICAqL1xuICBpbml0QnVpbGRlcih0eDogVHJhbnNhY3Rpb24pOiB2b2lkIHtcbiAgICB0aGlzLnZhbGlkYXRlVHJhbnNhY3Rpb24odHgpO1xuICAgIHRoaXMuY29weVRyYW5zYWN0aW9uRGF0YSh0eCk7XG4gIH1cblxuICAvKipcbiAgICogQ29waWVzIHRyYW5zYWN0aW9uIGRhdGEgZnJvbSB0aGUgc291cmNlIHRyYW5zYWN0aW9uIHRvIHRoZSBidWlsZGVyJ3MgdHJhbnNhY3Rpb24uXG4gICAqL1xuICBwcml2YXRlIGNvcHlUcmFuc2FjdGlvbkRhdGEodHg6IFRyYW5zYWN0aW9uKTogdm9pZCB7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5zZW5kZXIgPSB0eC5zZW5kZXI7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5nYXNQcmljZSA9IHR4Lmdhc1ByaWNlO1xuICAgIHRoaXMudHJhbnNhY3Rpb24uZ2FzQnVkZ2V0ID0gdHguZ2FzQnVkZ2V0O1xuICAgIHRoaXMudHJhbnNhY3Rpb24uZ2FzUGF5bWVudE9iamVjdHMgPSB0eC5nYXNQYXltZW50T2JqZWN0cztcbiAgICB0aGlzLnRyYW5zYWN0aW9uLmdhc1Nwb25zb3IgPSB0eC5nYXNTcG9uc29yO1xuICB9XG5cbiAgZ2V0IHRyYW5zYWN0aW9uVHlwZSgpOiBUcmFuc2FjdGlvblR5cGUge1xuICAgIHJldHVybiB0aGlzLnRyYW5zYWN0aW9uLnR5cGU7XG4gIH1cblxuICBnZXQgdHJhbnNhY3Rpb24oKTogVHJhbnNhY3Rpb24ge1xuICAgIHJldHVybiB0aGlzLl90cmFuc2FjdGlvbjtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXQgdHJhbnNhY3Rpb24odHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uKSB7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb24gPSB0cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBzZW5kZXIgYWRkcmVzcyBmb3IgdGhpcyB0cmFuc2FjdGlvbi5cbiAgICogQHBhcmFtIHNlbmRlckFkZHJlc3MgLSBUaGUgSU9UQSBhZGRyZXNzIHRoYXQgaXMgc2VuZGluZyB0aGlzIHRyYW5zYWN0aW9uXG4gICAqIEByZXR1cm5zIFRoaXMgdHJhbnNhY3Rpb24gYnVpbGRlciBmb3IgbWV0aG9kIGNoYWluaW5nXG4gICAqL1xuICBzZW5kZXIoc2VuZGVyQWRkcmVzczogc3RyaW5nKTogdGhpcyB7XG4gICAgdGhpcy52YWxpZGF0ZUFkZHJlc3MoeyBhZGRyZXNzOiBzZW5kZXJBZGRyZXNzIH0pO1xuICAgIHRoaXMudHJhbnNhY3Rpb24uc2VuZGVyID0gc2VuZGVyQWRkcmVzcztcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBnYXMgZGF0YSBmb3IgdGhpcyB0cmFuc2FjdGlvbiAoYnVkZ2V0LCBwcmljZSwgYW5kIHBheW1lbnQgb2JqZWN0cykuXG4gICAqIEBwYXJhbSBnYXNEYXRhIC0gVGhlIGdhcyBjb25maWd1cmF0aW9uIGluY2x1ZGluZyBidWRnZXQsIHByaWNlLCBhbmQgcGF5bWVudCBvYmplY3RzXG4gICAqIEByZXR1cm5zIFRoaXMgdHJhbnNhY3Rpb24gYnVpbGRlciBmb3IgbWV0aG9kIGNoYWluaW5nXG4gICAqL1xuICBnYXNEYXRhKGdhc0RhdGE6IEdhc0RhdGEpOiB0aGlzIHtcbiAgICB0aGlzLnZhbGlkYXRlR2FzRGF0YShnYXNEYXRhKTtcbiAgICB0aGlzLnNldEdhc0RhdGFPblRyYW5zYWN0aW9uKGdhc0RhdGEpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgZ2FzIGRhdGEgZmllbGRzIG9uIHRoZSB0cmFuc2FjdGlvbi5cbiAgICovXG4gIHByaXZhdGUgc2V0R2FzRGF0YU9uVHJhbnNhY3Rpb24oZ2FzRGF0YTogR2FzRGF0YSk6IHZvaWQge1xuICAgIHRoaXMudHJhbnNhY3Rpb24uZ2FzUHJpY2UgPSBnYXNEYXRhLmdhc1ByaWNlO1xuICAgIHRoaXMudHJhbnNhY3Rpb24uZ2FzQnVkZ2V0ID0gZ2FzRGF0YS5nYXNCdWRnZXQ7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5nYXNQYXltZW50T2JqZWN0cyA9IGdhc0RhdGEuZ2FzUGF5bWVudE9iamVjdHMgYXMgVHJhbnNhY3Rpb25PYmplY3RJbnB1dFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGdhcyBzcG9uc29yIGZvciB0aGlzIHRyYW5zYWN0aW9uLlxuICAgKiBUaGUgZ2FzIHNwb25zb3IgcGF5cyBmb3IgdHJhbnNhY3Rpb24gZmVlcyBpbnN0ZWFkIG9mIHRoZSBzZW5kZXIuXG4gICAqIEBwYXJhbSBzcG9uc29yQWRkcmVzcyAtIFRoZSBJT1RBIGFkZHJlc3Mgc3BvbnNvcmluZyB0aGlzIHRyYW5zYWN0aW9uJ3MgZ2FzIGZlZXNcbiAgICogQHJldHVybnMgVGhpcyB0cmFuc2FjdGlvbiBidWlsZGVyIGZvciBtZXRob2QgY2hhaW5pbmdcbiAgICovXG4gIGdhc1Nwb25zb3Ioc3BvbnNvckFkZHJlc3M6IHN0cmluZyk6IHRoaXMge1xuICAgIHRoaXMudmFsaWRhdGVBZGRyZXNzKHsgYWRkcmVzczogc3BvbnNvckFkZHJlc3MgfSk7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5nYXNTcG9uc29yID0gc3BvbnNvckFkZHJlc3M7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHNpZ25hdHVyZSBmcm9tIHRoZSB0cmFuc2FjdGlvbiBzZW5kZXIuXG4gICAqIEBwYXJhbSBwdWJsaWNLZXkgLSBUaGUgc2VuZGVyJ3MgcHVibGljIGtleVxuICAgKiBAcGFyYW0gc2lnbmF0dXJlIC0gVGhlIHNpZ25hdHVyZSBieXRlc1xuICAgKiBAdGhyb3dzIEJ1aWxkVHJhbnNhY3Rpb25FcnJvciBpZiB0aGUgc2lnbmF0dXJlIG9yIHB1YmxpYyBrZXkgaXMgaW52YWxpZFxuICAgKi9cbiAgYWRkU2lnbmF0dXJlKHB1YmxpY0tleTogUHVibGljS2V5LCBzaWduYXR1cmU6IEJ1ZmZlcik6IHZvaWQge1xuICAgIHRoaXMudmFsaWRhdGVTaWduYXR1cmVEYXRhKHB1YmxpY0tleSwgc2lnbmF0dXJlKTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLmFkZFNpZ25hdHVyZShwdWJsaWNLZXksIHNpZ25hdHVyZSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHNpZ25hdHVyZSBmcm9tIHRoZSBnYXMgc3BvbnNvci5cbiAgICogQHBhcmFtIHB1YmxpY0tleSAtIFRoZSBnYXMgc3BvbnNvcidzIHB1YmxpYyBrZXlcbiAgICogQHBhcmFtIHNpZ25hdHVyZSAtIFRoZSBzaWduYXR1cmUgYnl0ZXNcbiAgICogQHRocm93cyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IgaWYgdGhlIHNpZ25hdHVyZSBvciBwdWJsaWMga2V5IGlzIGludmFsaWRcbiAgICovXG4gIGFkZEdhc1Nwb25zb3JTaWduYXR1cmUocHVibGljS2V5OiBQdWJsaWNLZXksIHNpZ25hdHVyZTogQnVmZmVyKTogdm9pZCB7XG4gICAgdGhpcy52YWxpZGF0ZVNpZ25hdHVyZURhdGEocHVibGljS2V5LCBzaWduYXR1cmUpO1xuICAgIHRoaXMudHJhbnNhY3Rpb24uYWRkR2FzU3BvbnNvclNpZ25hdHVyZShwdWJsaWNLZXksIHNpZ25hdHVyZSk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoYXQgdGhlIHNpZ25hdHVyZSBhbmQgcHVibGljIGtleSBhcmUgaW4gdmFsaWQgZm9ybWF0cy5cbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVTaWduYXR1cmVEYXRhKHB1YmxpY0tleTogUHVibGljS2V5LCBzaWduYXR1cmU6IEJ1ZmZlcik6IHZvaWQge1xuICAgIGlmICghdXRpbHMuaXNWYWxpZFB1YmxpY0tleShwdWJsaWNLZXkucHViKSB8fCAhdXRpbHMuaXNWYWxpZFNpZ25hdHVyZSh0b0Jhc2U2NChzaWduYXR1cmUpKSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCB0cmFuc2FjdGlvbiBzaWduYXR1cmUnKTtcbiAgICB9XG4gIH1cblxuICB2YWxpZGF0ZUtleShrZXk6IEJhc2VLZXkpOiB2b2lkIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIGFuIElPVEEgYWRkcmVzcyBmb3JtYXQuXG4gICAqIEB0aHJvd3MgQnVpbGRUcmFuc2FjdGlvbkVycm9yIGlmIGFkZHJlc3MgaXMgaW52YWxpZFxuICAgKi9cbiAgdmFsaWRhdGVBZGRyZXNzKGFkZHJlc3M6IEJhc2VBZGRyZXNzLCBhZGRyZXNzRm9ybWF0Pzogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF1dGlscy5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzLmFkZHJlc3MpKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIGFkZHJlc3MgJyArIGFkZHJlc3MuYWRkcmVzcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGF0IGEgbnVtZXJpYyB2YWx1ZSBpcyB2YWxpZCAobm90IE5hTiBhbmQgbm90IG5lZ2F0aXZlKS5cbiAgICogQHRocm93cyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IgaWYgdmFsdWUgaXMgaW52YWxpZFxuICAgKi9cbiAgdmFsaWRhdGVWYWx1ZSh2YWx1ZTogQmlnTnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHZhbHVlLmlzTmFOKCkpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgYW1vdW50IGZvcm1hdCcpO1xuICAgIH1cbiAgICBpZiAodmFsdWUuaXNMZXNzVGhhbigwKSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignVmFsdWUgY2Fubm90IGJlIGxlc3MgdGhhbiB6ZXJvJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGF0IGEgcmF3IHRyYW5zYWN0aW9uIHN0cmluZyBpcyBwcm9wZXJseSBmb3JtYXR0ZWQuXG4gICAqIEB0aHJvd3MgUGFyc2VUcmFuc2FjdGlvbkVycm9yIGlmIHJhdyB0cmFuc2FjdGlvbiBpcyBpbnZhbGlkXG4gICAqL1xuICB2YWxpZGF0ZVJhd1RyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXJhd1RyYW5zYWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2VUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIHJhdyB0cmFuc2FjdGlvbjogVW5kZWZpbmVkJyk7XG4gICAgfVxuICAgIGlmICghdXRpbHMuaXNWYWxpZFJhd1RyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uKSkge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCByYXcgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIGEgdHJhbnNhY3Rpb24gb2JqZWN0IGhhcyBhbGwgcmVxdWlyZWQgZmllbGRzLlxuICAgKiBAdGhyb3dzIEVycm9yIGlmIHRyYW5zYWN0aW9uIGlzIHVuZGVmaW5lZCBvciBoYXMgaW52YWxpZCBkYXRhXG4gICAqL1xuICB2YWxpZGF0ZVRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uPzogVHJhbnNhY3Rpb24pOiB2b2lkIHtcbiAgICBpZiAoIXRyYW5zYWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RyYW5zYWN0aW9uIG5vdCBkZWZpbmVkJyk7XG4gICAgfVxuXG4gICAgdGhpcy52YWxpZGF0ZUFkZHJlc3MoeyBhZGRyZXNzOiB0cmFuc2FjdGlvbi5zZW5kZXIgfSk7XG4gICAgdGhpcy52YWxpZGF0ZUdhc0RhdGEoe1xuICAgICAgZ2FzQnVkZ2V0OiB0cmFuc2FjdGlvbi5nYXNCdWRnZXQsXG4gICAgICBnYXNQcmljZTogdHJhbnNhY3Rpb24uZ2FzUHJpY2UsXG4gICAgICBnYXNQYXltZW50T2JqZWN0czogdHJhbnNhY3Rpb24uZ2FzUGF5bWVudE9iamVjdHMsXG4gICAgfSk7XG5cbiAgICBpZiAodHJhbnNhY3Rpb24uZ2FzU3BvbnNvcikge1xuICAgICAgdGhpcy52YWxpZGF0ZUFkZHJlc3MoeyBhZGRyZXNzOiB0cmFuc2FjdGlvbi5nYXNTcG9uc29yIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgdHJhbnNhY3Rpb24gb2JqZWN0IGZyb20gYSByYXcgdHJhbnNhY3Rpb24gc3RyaW5nIG9yIGJ5dGVzLlxuICAgKiBAcGFyYW0gcmF3VHJhbnNhY3Rpb24gLSBSYXcgdHJhbnNhY3Rpb24gaW4gYmFzZTY0IHN0cmluZyBvciBVaW50OEFycmF5IGZvcm1hdFxuICAgKiBAcmV0dXJucyBUaGUgcGFyc2VkIHRyYW5zYWN0aW9uIG9iamVjdFxuICAgKiBAdGhyb3dzIEJ1aWxkVHJhbnNhY3Rpb25FcnJvciBpZiByYXcgdHJhbnNhY3Rpb24gaXMgaW52YWxpZFxuICAgKi9cbiAgZnJvbUltcGxlbWVudGF0aW9uKHJhd1RyYW5zYWN0aW9uOiBzdHJpbmcgfCBVaW50OEFycmF5KTogVHJhbnNhY3Rpb24ge1xuICAgIGlmICghdXRpbHMuaXNWYWxpZFJhd1RyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uKSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgICB0aGlzLnRyYW5zYWN0aW9uLnBhcnNlRnJvbUJyb2FkY2FzdFR4KHJhd1RyYW5zYWN0aW9uKTtcbiAgICByZXR1cm4gdGhpcy50cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaWduIGltcGxlbWVudGF0aW9uIC0gbm90IHN1cHBvcnRlZCBmb3IgSU9UQSB0cmFuc2FjdGlvbnMuXG4gICAqIElPVEEgdHJhbnNhY3Rpb25zIG11c3QgYmUgc2lnbmVkIGV4dGVybmFsbHkuXG4gICAqL1xuICBwcm90ZWN0ZWQgc2lnbkltcGxlbWVudGF0aW9uKGtleTogQmFzZUtleSk6IEJhc2VUcmFuc2FjdGlvbiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyB0aGUgdHJhbnNhY3Rpb24gYW5kIHByZXBhcmVzIGl0IGZvciBicm9hZGNhc3QuXG4gICAqIEF1dG9tYXRpY2FsbHkgc3dpdGNoZXMgZnJvbSBzaW11bGF0ZSB0byByZWFsIHRyYW5zYWN0aW9uIG1vZGUgaWYgZ2FzIGRhdGEgaXMgcHJlc2VudC5cbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBidWlsZEltcGxlbWVudGF0aW9uKCk6IFByb21pc2U8VHJhbnNhY3Rpb24+IHtcbiAgICB0aGlzLnVwZGF0ZVRyYW5zYWN0aW9uTW9kZSgpO1xuICAgIGF3YWl0IHRoaXMudHJhbnNhY3Rpb24uYnVpbGQoKTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLmFkZElucHV0c0FuZE91dHB1dHMoKTtcbiAgICByZXR1cm4gdGhpcy50cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSB0cmFuc2FjdGlvbiBtb2RlIGJhc2VkIG9uIGdhcyBkYXRhIGF2YWlsYWJpbGl0eS5cbiAgICogU3dpdGNoZXMgdG8gcmVhbCB0cmFuc2FjdGlvbiBtb2RlIGlmIGFsbCBnYXMgZGF0YSBpcyBwcm92aWRlZC5cbiAgICovXG4gIHByaXZhdGUgdXBkYXRlVHJhbnNhY3Rpb25Nb2RlKCk6IHZvaWQge1xuICAgIGNvbnN0IGhhc0NvbXBsZXRlR2FzRGF0YSA9XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uLmdhc1ByaWNlICYmIHRoaXMudHJhbnNhY3Rpb24uZ2FzQnVkZ2V0ICYmIHRoaXMudHJhbnNhY3Rpb24uZ2FzUGF5bWVudE9iamVjdHM7XG5cbiAgICBpZiAoaGFzQ29tcGxldGVHYXNEYXRhKSB7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uLmlzU2ltdWxhdGVUeCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgZ2FzIGRhdGEgdmFsdWVzIGFuZCBwcmVzZW5jZS5cbiAgICogQHRocm93cyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IgaWYgZ2FzIGRhdGEgaXMgaW52YWxpZFxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZUdhc0RhdGEoZ2FzRGF0YTogR2FzRGF0YSk6IHZvaWQge1xuICAgIGlmIChnYXNEYXRhLmdhc0J1ZGdldCkge1xuICAgICAgdGhpcy52YWxpZGF0ZVZhbHVlKG5ldyBCaWdOdW1iZXIoZ2FzRGF0YS5nYXNCdWRnZXQpKTtcbiAgICB9XG5cbiAgICBpZiAoZ2FzRGF0YS5nYXNQcmljZSkge1xuICAgICAgdGhpcy52YWxpZGF0ZVZhbHVlKG5ldyBCaWdOdW1iZXIoZ2FzRGF0YS5nYXNQcmljZSkpO1xuICAgIH1cblxuICAgIGlmIChnYXNEYXRhLmdhc1BheW1lbnRPYmplY3RzICYmIGdhc0RhdGEuZ2FzUGF5bWVudE9iamVjdHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdHYXMgaW5wdXQgb2JqZWN0cyBsaXN0IGlzIGVtcHR5Jyk7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -1,9 +1,105 @@
1
1
  import { BaseTransactionBuilderFactory } from '@bitgo-beta/sdk-core';
2
2
  import { TransactionBuilder } from './transactionBuilder';
3
3
  import { TransferBuilder } from './transferBuilder';
4
+ import { Transaction } from './transaction';
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
+ */
4
23
  export declare class TransactionBuilderFactory extends BaseTransactionBuilderFactory {
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
+ */
5
31
  getWalletInitializationBuilder(): void;
6
- getTransferBuilder(): TransferBuilder;
7
- from(raw: string | Uint8Array): TransactionBuilder;
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
+ */
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
+ */
70
+ from(rawTx: string | Uint8Array): TransactionBuilder;
71
+ /**
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.
98
+ *
99
+ * @param tx - Optional transaction to initialize from
100
+ * @param builder - The builder to initialize
101
+ * @returns The initialized builder
102
+ */
103
+ private initializeBuilder;
8
104
  }
9
105
  //# sourceMappingURL=transactionBuilderFactory.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"transactionBuilderFactory.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilderFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,qBAAa,yBAA0B,SAAQ,6BAA6B;IACnE,8BAA8B,IAAI,IAAI;IAGtC,kBAAkB,IAAI,eAAe;IAGrC,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,GAAG,kBAAkB;CAG1D"}
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"}