@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.
- package/README.md +1 -1
- package/dist/src/iota.d.ts +134 -23
- package/dist/src/iota.d.ts.map +1 -1
- package/dist/src/iota.js +286 -46
- package/dist/src/lib/constants.d.ts +59 -6
- package/dist/src/lib/constants.d.ts.map +1 -1
- package/dist/src/lib/constants.js +76 -8
- package/dist/src/lib/iface.d.ts +174 -2
- package/dist/src/lib/iface.d.ts.map +1 -1
- package/dist/src/lib/iface.js +1 -1
- package/dist/src/lib/index.d.ts +1 -0
- package/dist/src/lib/index.d.ts.map +1 -1
- package/dist/src/lib/index.js +4 -2
- 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 +175 -5
- package/dist/src/lib/transaction.d.ts.map +1 -1
- package/dist/src/lib/transaction.js +390 -6
- package/dist/src/lib/transactionBuilder.d.ts +109 -9
- package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilder.js +200 -14
- package/dist/src/lib/transactionBuilderFactory.d.ts +98 -2
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilderFactory.js +132 -5
- package/dist/src/lib/transferBuilder.d.ts +52 -2
- package/dist/src/lib/transferBuilder.d.ts.map +1 -1
- package/dist/src/lib/transferBuilder.js +86 -3
- package/dist/src/lib/transferTransaction.d.ts +124 -0
- package/dist/src/lib/transferTransaction.d.ts.map +1 -0
- package/dist/src/lib/transferTransaction.js +341 -0
- package/dist/src/lib/utils.d.ts +108 -7
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +146 -11
- package/dist/test/resources/iota.d.ts +35 -0
- package/dist/test/resources/iota.d.ts.map +1 -0
- package/dist/test/resources/iota.js +93 -0
- 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/index.d.ts +2 -0
- package/dist/test/unit/index.d.ts.map +1 -0
- package/dist/test/unit/index.js +16 -0
- package/dist/test/unit/iota.d.ts +2 -0
- package/dist/test/unit/iota.d.ts.map +1 -0
- package/dist/test/unit/iota.js +501 -0
- package/dist/test/unit/keyPair.d.ts +2 -0
- package/dist/test/unit/keyPair.d.ts.map +1 -0
- package/dist/test/unit/keyPair.js +108 -0
- package/dist/test/unit/transactionBuilder/transactionBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/transactionBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/transactionBuilder.js +188 -0
- package/dist/test/unit/transactionBuilder/transactionBuilderFactory.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/transactionBuilderFactory.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/transactionBuilderFactory.js +178 -0
- package/dist/test/unit/transactionBuilder/transferBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/transferBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/transferBuilder.js +438 -0
- package/dist/test/unit/transferTransaction.d.ts +2 -0
- package/dist/test/unit/transferTransaction.d.ts.map +1 -0
- package/dist/test/unit/transferTransaction.js +218 -0
- package/dist/test/unit/utils.d.ts +2 -0
- package/dist/test/unit/utils.d.ts.map +1 -0
- package/dist/test/unit/utils.js +252 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +17 -11
- package/.eslintignore +0 -5
- package/.mocharc.yml +0 -8
- 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
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
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
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
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,
|
|
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
|
-
|
|
7
|
-
|
|
16
|
+
constructor(coinConfig) {
|
|
17
|
+
super(coinConfig);
|
|
8
18
|
}
|
|
9
|
-
|
|
10
|
-
|
|
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
|
-
|
|
13
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
31
|
-
|
|
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
|
-
|
|
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsbURBUzhCO0FBQzlCLGdFQUFxQztBQUdyQyxvREFBNEI7QUFFNUIsZ0RBQWdEO0FBRWhEOzs7R0FHRztBQUNILE1BQXNCLGtCQUFtQixTQUFRLGlDQUFzQjtJQUdyRSxZQUFzQixVQUFnQztRQUNwRCxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDcEIsQ0FBQztJQUVEOzs7T0FHRztJQUNILFdBQVcsQ0FBQyxFQUFlO1FBQ3pCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM3QixJQUFJLENBQUMsbUJBQW1CLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVEOztPQUVHO0lBQ0ssbUJBQW1CLENBQUMsRUFBZTtRQUN6QyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUM7UUFDeEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQztRQUMxQyxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixHQUFHLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQztRQUMxRCxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDO0lBQzlDLENBQUM7SUFFRCxJQUFJLGVBQWU7UUFDakIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBSSxXQUFXO1FBQ2IsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFFRCxJQUFjLFdBQVcsQ0FBQyxXQUF3QjtRQUNoRCxJQUFJLENBQUMsWUFBWSxHQUFHLFdBQVcsQ0FBQztJQUNsQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxhQUFxQjtRQUMxQixJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsYUFBYSxDQUFDO1FBQ3hDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxPQUFPLENBQUMsT0FBZ0I7UUFDdEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsdUJBQXVCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdEMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7O09BRUc7SUFDSyx1QkFBdUIsQ0FBQyxPQUFnQjtRQUM5QyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDO1FBQzdDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUM7UUFDL0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsR0FBRyxPQUFPLENBQUMsaUJBQTZDLENBQUM7SUFDN0YsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsVUFBVSxDQUFDLGNBQXNCO1FBQy9CLElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsR0FBRyxjQUFjLENBQUM7UUFDN0MsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxZQUFZLENBQUMsU0FBb0IsRUFBRSxTQUFpQjtRQUNsRCxJQUFJLENBQUMscUJBQXFCLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxzQkFBc0IsQ0FBQyxTQUFvQixFQUFFLFNBQWlCO1FBQzVELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVEOztPQUVHO0lBQ0sscUJBQXFCLENBQUMsU0FBb0IsRUFBRSxTQUFpQjtRQUNuRSxJQUFJLENBQUMsZUFBSyxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGVBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFBLGdCQUFRLEVBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzNGLE1BQU0sSUFBSSxnQ0FBcUIsQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1FBQ25FLENBQUM7SUFDSCxDQUFDO0lBRUQsV0FBVyxDQUFDLEdBQVk7UUFDdEIsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxlQUFlLENBQUMsT0FBb0IsRUFBRSxhQUFzQjtRQUMxRCxJQUFJLENBQUMsZUFBSyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUMzQyxNQUFNLElBQUksZ0NBQXFCLENBQUMsa0JBQWtCLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3hFLENBQUM7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsYUFBYSxDQUFDLEtBQWdCO1FBQzVCLElBQUksS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDbEIsTUFBTSxJQUFJLGdDQUFxQixDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDM0QsQ0FBQztRQUNELElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3hCLE1BQU0sSUFBSSxnQ0FBcUIsQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1FBQ3BFLENBQUM7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsc0JBQXNCLENBQUMsY0FBc0I7UUFDM0MsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3BCLE1BQU0sSUFBSSxnQ0FBcUIsQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO1FBQ3hFLENBQUM7UUFDRCxJQUFJLENBQUMsZUFBSyxDQUFDLHFCQUFxQixDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUM7WUFDakQsTUFBTSxJQUFJLGdDQUFxQixDQUFDLHlCQUF5QixDQUFDLENBQUM7UUFDN0QsQ0FBQztJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSCxtQkFBbUIsQ0FBQyxXQUF5QjtRQUMzQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQzdDLENBQUM7UUFFRCxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsT0FBTyxFQUFFLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxlQUFlLENBQUM7WUFDbkIsU0FBUyxFQUFFLFdBQVcsQ0FBQyxTQUFTO1lBQ2hDLFFBQVEsRUFBRSxXQUFXLENBQUMsUUFBUTtZQUM5QixpQkFBaUIsRUFBRSxXQUFXLENBQUMsaUJBQWlCO1NBQ2pELENBQUMsQ0FBQztRQUVILElBQUksV0FBVyxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRSxPQUFPLEVBQUUsV0FBVyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDNUQsQ0FBQztJQUNILENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGtCQUFrQixDQUFDLGNBQW1DO1FBQ3BELElBQUksQ0FBQyxlQUFLLENBQUMscUJBQXFCLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQztZQUNqRCxNQUFNLElBQUksZ0NBQXFCLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUN6RCxDQUFDO1FBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN0RCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUVEOzs7T0FHRztJQUNPLGtCQUFrQixDQUFDLEdBQVk7UUFDdkMsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRDs7O09BR0c7SUFDTyxLQUFLLENBQUMsbUJBQW1CO1FBQ2pDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQzdCLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMsV0FBVyxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDdkMsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFFRDs7O09BR0c7SUFDSyxxQkFBcUI7UUFDM0IsTUFBTSxrQkFBa0IsR0FDdEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQztRQUVoRyxJQUFJLGtCQUFrQixFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQ3hDLENBQUM7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssZUFBZSxDQUFDLE9BQWdCO1FBQ3RDLElBQUksT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxzQkFBUyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ3ZELENBQUM7UUFFRCxJQUFJLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksc0JBQVMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUN0RCxDQUFDO1FBRUQsSUFBSSxPQUFPLENBQUMsaUJBQWlCLElBQUksT0FBTyxDQUFDLGlCQUFpQixDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN4RSxNQUFNLElBQUksZ0NBQXFCLENBQUMsaUNBQWlDLENBQUMsQ0FBQztRQUNyRSxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBN09ELGdEQTZPQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEJhc2VBZGRyZXNzLFxuICBCYXNlS2V5LFxuICBCYXNlVHJhbnNhY3Rpb24sXG4gIEJhc2VUcmFuc2FjdGlvbkJ1aWxkZXIsXG4gIEJ1aWxkVHJhbnNhY3Rpb25FcnJvcixcbiAgUGFyc2VUcmFuc2FjdGlvbkVycm9yLFxuICBQdWJsaWNLZXksXG4gIFRyYW5zYWN0aW9uVHlwZSxcbn0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IEJpZ051bWJlciBmcm9tICdiaWdudW1iZXIuanMnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tICcuL3RyYW5zYWN0aW9uJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB1dGlscyBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uT2JqZWN0SW5wdXQsIEdhc0RhdGEgfSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCB7IHRvQmFzZTY0IH0gZnJvbSAnQGlvdGEvaW90YS1zZGsvdXRpbHMnO1xuXG4vKipcbiAqIEJhc2UgY2xhc3MgZm9yIElPVEEgdHJhbnNhY3Rpb24gYnVpbGRlcnMuXG4gKiBQcm92aWRlcyBjb21tb24gZnVuY3Rpb25hbGl0eSBmb3IgYnVpbGRpbmcgYW5kIHZhbGlkYXRpbmcgSU9UQSB0cmFuc2FjdGlvbnMuXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBUcmFuc2FjdGlvbkJ1aWxkZXIgZXh0ZW5kcyBCYXNlVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgcHJvdGVjdGVkIF90cmFuc2FjdGlvbjogVHJhbnNhY3Rpb247XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKGNvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+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
|
-
|
|
7
|
-
|
|
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,
|
|
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"}
|