@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.
- package/dist/src/iota.d.ts +123 -27
- package/dist/src/iota.d.ts.map +1 -1
- package/dist/src/iota.js +217 -103
- package/dist/src/lib/constants.d.ts +50 -1
- package/dist/src/lib/constants.d.ts.map +1 -1
- package/dist/src/lib/constants.js +68 -4
- package/dist/src/lib/iface.d.ts +141 -1
- package/dist/src/lib/iface.d.ts.map +1 -1
- package/dist/src/lib/iface.js +1 -1
- package/dist/src/lib/keyPair.d.ts +100 -6
- package/dist/src/lib/keyPair.d.ts.map +1 -1
- package/dist/src/lib/keyPair.js +103 -10
- package/dist/src/lib/transaction.d.ts +117 -14
- package/dist/src/lib/transaction.d.ts.map +1 -1
- package/dist/src/lib/transaction.js +190 -67
- package/dist/src/lib/transactionBuilder.d.ts +73 -34
- package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilder.js +90 -45
- package/dist/src/lib/transactionBuilderFactory.d.ts +89 -6
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilderFactory.js +103 -16
- package/dist/src/lib/transferBuilder.d.ts +43 -0
- package/dist/src/lib/transferBuilder.d.ts.map +1 -1
- package/dist/src/lib/transferBuilder.js +50 -5
- package/dist/src/lib/transferTransaction.d.ts +93 -2
- package/dist/src/lib/transferTransaction.d.ts.map +1 -1
- package/dist/src/lib/transferTransaction.js +180 -51
- package/dist/src/lib/utils.d.ts +107 -8
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +134 -23
- package/dist/test/unit/helpers/testHelpers.d.ts +57 -0
- package/dist/test/unit/helpers/testHelpers.d.ts.map +1 -0
- package/dist/test/unit/helpers/testHelpers.js +176 -0
- package/dist/test/unit/iota.js +47 -152
- package/dist/test/unit/keyPair.js +34 -61
- package/dist/test/unit/transactionBuilder/transactionBuilder.js +137 -255
- package/dist/test/unit/transactionBuilder/transactionBuilderFactory.js +43 -108
- package/dist/test/unit/transactionBuilder/transferBuilder.js +296 -762
- package/dist/test/unit/transferTransaction.js +106 -353
- package/dist/test/unit/utils.js +171 -197
- package/dist/tsconfig.tsbuildinfo +1 -1
- 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
|
-
*
|
|
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
|
-
*
|
|
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
|
|
26
|
-
*
|
|
27
|
-
* @
|
|
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
|
|
33
|
-
*
|
|
34
|
-
* @
|
|
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
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
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
|
-
*
|
|
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
|
-
*
|
|
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
|
-
/**
|
|
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
|
-
*
|
|
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
|
-
*
|
|
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
|
-
*
|
|
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
|
-
*
|
|
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
|
|
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
|
-
*
|
|
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
|
|
45
|
-
*
|
|
46
|
-
* @
|
|
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
|
|
56
|
-
*
|
|
57
|
-
* @
|
|
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
|
|
69
|
-
*
|
|
70
|
-
* @param
|
|
71
|
-
* @returns
|
|
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
|
-
|
|
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
|
-
*
|
|
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
|
-
*
|
|
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
|
-
|
|
133
|
+
if (value.isLessThan(0)) {
|
|
109
134
|
throw new sdk_core_1.BuildTransactionError('Value cannot be less than zero');
|
|
110
135
|
}
|
|
111
136
|
}
|
|
112
|
-
/**
|
|
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
|
-
*
|
|
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
|
-
*
|
|
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
|
-
*
|
|
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
|
-
*
|
|
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
|
-
|
|
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
|
-
/**
|
|
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
|
-
*
|
|
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
|
|
17
|
-
* @param
|
|
18
|
-
* @returns
|
|
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;
|
|
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"}
|